Skip to content

Add OpenCode Zen provider support#2

Merged
jamiepine merged 1 commit into
spacedriveapp:mainfrom
Brendonovich:main
Feb 17, 2026
Merged

Add OpenCode Zen provider support#2
jamiepine merged 1 commit into
spacedriveapp:mainfrom
Brendonovich:main

Conversation

@Brendonovich

Copy link
Copy Markdown
Contributor

No description provided.

@jamiepine jamiepine left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM

@jamiepine jamiepine merged commit 85e1b06 into spacedriveapp:main Feb 17, 2026
rktmeister pushed a commit to rktmeister/spacebot that referenced this pull request Mar 11, 2026
Add OpenCode Zen provider support
ibhagwan added a commit to ibhagwan/spacebot that referenced this pull request Mar 13, 2026
Fixes several issues with Signal messaging adapter implementation:

**E.164 Phone Number Validation (issue spacedriveapp#5)**
- Move is_valid_e164 to messaging::target module for reuse
- Add proper E.164 validation: first digit must be 1-9 (not 0)
- Enforce maximum 15 digits per E.164 standard
- Update normalize_signal_target to use shared validation
- Add test cases for +01234567 (invalid) and >15 digit numbers

**Validation Response Format (issue spacedriveapp#2)**
- Replace StatusCode::BAD_REQUEST with MessagingInstanceActionResponse
- Return user-friendly validation failures for missing signal_http_url
- Return user-friendly validation failures for missing signal_account
- Applied to both default and named instance creation paths

**dm_allowed_users Cleanup (issue spacedriveapp#3)**
- Remove old auto-added account from dm_allowed_users when account changes
- Prevent allowlist from growing indefinitely on account updates
- Only the new account remains in the authorized list

**Signal Platform Deletion Support (issue spacedriveapp#4)**
- Add 'signal' to delete_messaging_instance supported platforms
- Add Signal-specific credential cleanup in delete handler
- Enables proper deletion of Signal instances via API

**Adapter Name Matching (issue spacedriveapp#6)**
- Fix implicit Signal shorthand detection in send_message tool
- Change from starts_with('signal') to exact match or signal: prefix
- Prevents adapters like 'signal-alerts' from triggering Signal shorthand

Note: DOC_LINKS entry for signal docs (issue spacedriveapp#1) retained as-is per request
ibhagwan added a commit to ibhagwan/spacebot that referenced this pull request Mar 13, 2026
Fixes several issues with Signal messaging adapter implementation:

**E.164 Phone Number Validation (issue spacedriveapp#5)**
- Move is_valid_e164 to messaging::target module for reuse
- Add proper E.164 validation: first digit must be 1-9 (not 0)
- Enforce maximum 15 digits per E.164 standard
- Update normalize_signal_target to use shared validation
- Add test cases for +01234567 (invalid) and >15 digit numbers

**Validation Response Format (issue spacedriveapp#2)**
- Replace StatusCode::BAD_REQUEST with MessagingInstanceActionResponse
- Return user-friendly validation failures for missing signal_http_url
- Return user-friendly validation failures for missing signal_account
- Applied to both default and named instance creation paths

**dm_allowed_users Cleanup (issue spacedriveapp#3)**
- Remove old auto-added account from dm_allowed_users when account changes
- Prevent allowlist from growing indefinitely on account updates
- Only the new account remains in the authorized list

**Signal Platform Deletion Support (issue spacedriveapp#4)**
- Add 'signal' to delete_messaging_instance supported platforms
- Add Signal-specific credential cleanup in delete handler
- Enables proper deletion of Signal instances via API

**Adapter Name Matching (issue spacedriveapp#6)**
- Fix implicit Signal shorthand detection in send_message tool
- Change from starts_with('signal') to exact match or signal: prefix
- Prevents adapters like 'signal-alerts' from triggering Signal shorthand

Note: DOC_LINKS entry for signal docs (issue spacedriveapp#1) retained as-is per request
ibhagwan added a commit to ibhagwan/spacebot that referenced this pull request Mar 13, 2026
Fixes several issues with Signal messaging adapter implementation:

**E.164 Phone Number Validation (issue spacedriveapp#5)**
- Move is_valid_e164 to messaging::target module for reuse
- Add proper E.164 validation: first digit must be 1-9 (not 0)
- Enforce maximum 15 digits per E.164 standard
- Update normalize_signal_target to use shared validation
- Add test cases for +01234567 (invalid) and >15 digit numbers

**Validation Response Format (issue spacedriveapp#2)**
- Replace StatusCode::BAD_REQUEST with MessagingInstanceActionResponse
- Return user-friendly validation failures for missing signal_http_url
- Return user-friendly validation failures for missing signal_account
- Applied to both default and named instance creation paths

**dm_allowed_users Cleanup (issue spacedriveapp#3)**
- Remove old auto-added account from dm_allowed_users when account changes
- Prevent allowlist from growing indefinitely on account updates
- Only the new account remains in the authorized list

**Signal Platform Deletion Support (issue spacedriveapp#4)**
- Add 'signal' to delete_messaging_instance supported platforms
- Add Signal-specific credential cleanup in delete handler
- Enables proper deletion of Signal instances via API

**Adapter Name Matching (issue spacedriveapp#6)**
- Fix implicit Signal shorthand detection in send_message tool
- Change from starts_with('signal') to exact match or signal: prefix
- Prevents adapters like 'signal-alerts' from triggering Signal shorthand

Note: DOC_LINKS entry for signal docs (issue spacedriveapp#1) retained as-is per request
ibhagwan added a commit to ibhagwan/spacebot that referenced this pull request Mar 13, 2026
- Add Signal to Platform type and PLATFORM_LABELS
- Add Signal credential form with http_url and account fields
- Add E.164 format validation in frontend
- Add Signal to available platforms list
- Add Signal icon mapping (using generic comment icon)
- Include placeholder documentation link

fix(messaging): resolve Signal adapter validation and consistency issues

Fixes several issues with Signal messaging adapter implementation:

**E.164 Phone Number Validation (issue spacedriveapp#5)**
- Move is_valid_e164 to messaging::target module for reuse
- Add proper E.164 validation: first digit must be 1-9 (not 0)
- Enforce maximum 15 digits per E.164 standard
- Update normalize_signal_target to use shared validation
- Add test cases for +01234567 (invalid) and >15 digit numbers

**Validation Response Format (issue spacedriveapp#2)**
- Replace StatusCode::BAD_REQUEST with MessagingInstanceActionResponse
- Return user-friendly validation failures for missing signal_http_url
- Return user-friendly validation failures for missing signal_account
- Applied to both default and named instance creation paths

**dm_allowed_users Cleanup (issue spacedriveapp#3)**
- Remove old auto-added account from dm_allowed_users when account changes
- Prevent allowlist from growing indefinitely on account updates
- Only the new account remains in the authorized list

**Signal Platform Deletion Support (issue spacedriveapp#4)**
- Add 'signal' to delete_messaging_instance supported platforms
- Add Signal-specific credential cleanup in delete handler
- Enables proper deletion of Signal instances via API

**Adapter Name Matching (issue spacedriveapp#6)**
- Fix implicit Signal shorthand detection in send_message tool
- Change from starts_with('signal') to exact match or signal: prefix
- Prevents adapters like 'signal-alerts' from triggering Signal shorthand

Note: DOC_LINKS entry for signal docs (issue spacedriveapp#1) retained as-is per request

fix(api): add Signal to messaging status endpoint

Add Signal instance detection to messaging_status function:
- Read [messaging.signal] section for default instance
- Read [[messaging.signal.instances]] for named instances
- Push instance status to instances array when configured
- Requires both http_url and account fields to be considered configured

This fixes the issue where Signal instances were not appearing in the web UI.

fix(signal): align validation rules and add toggle_platform support

Frontend validation (ChannelSettingCard.tsx):
- Update E.164 regex to /^\+[1-9]\d{5,13}$/ for true E.164 compliance
- Enforce 7-15 digits total (6-14 after '+'), first digit 1-9
- Update error message and help text to reflect correct range

Backend validation (target.rs):
- Change is_valid_e164 to require 6-14 digits after '+' (7-15 total)
- normalize_signal_target: Reuse is_valid_e164() for bare digit validation
- parse_signal_target_parts: Add empty segment checks to all match arms
  - Reject empty uuid, group_id, phone, instance, or single segments
  - Prevents invalid targets like 'uuid:' or 'signal:work:'

API state (state.rs):
- Add signal_permissions field to ApiState
- Add set_signal_permissions() method for hot-reload support

toggle_platform (messaging.rs):
- Add Signal case to toggle_platform for runtime adapter start/stop
- Support both default and named Signal instances
- Update existing ArcSwap pointee instead of creating new one when permissions exist

send_message_to_another_channel:
- parse_implicit_signal_shorthand: Use is_valid_e164() for strict validation
- Add specific error messages for each validation failure case
- Add early error for ambiguous Signal adapter selection when multiple
  named instances exist without a default, preventing broadcast() failure
- Fix adapter resolution to distinguish default 'signal' from named adapters

Tests (messaging.rs):
- Update E.164 tests for 6-14 digit range (7-15 total)
ibhagwan added a commit to ibhagwan/spacebot that referenced this pull request Mar 13, 2026
- Add Signal to Platform type and PLATFORM_LABELS
- Add Signal credential form with http_url and account fields
- Add E.164 format validation in frontend
- Add Signal to available platforms list
- Add Signal icon mapping (using generic comment icon)
- Include placeholder documentation link

fix(messaging): resolve Signal adapter validation and consistency issues

Fixes several issues with Signal messaging adapter implementation:

**E.164 Phone Number Validation (issue spacedriveapp#5)**
- Move is_valid_e164 to messaging::target module for reuse
- Add proper E.164 validation: first digit must be 1-9 (not 0)
- Enforce maximum 15 digits per E.164 standard
- Update normalize_signal_target to use shared validation
- Add test cases for +01234567 (invalid) and >15 digit numbers

**Validation Response Format (issue spacedriveapp#2)**
- Replace StatusCode::BAD_REQUEST with MessagingInstanceActionResponse
- Return user-friendly validation failures for missing signal_http_url
- Return user-friendly validation failures for missing signal_account
- Applied to both default and named instance creation paths

**dm_allowed_users Cleanup (issue spacedriveapp#3)**
- Remove old auto-added account from dm_allowed_users when account changes
- Prevent allowlist from growing indefinitely on account updates
- Only the new account remains in the authorized list

**Signal Platform Deletion Support (issue spacedriveapp#4)**
- Add 'signal' to delete_messaging_instance supported platforms
- Add Signal-specific credential cleanup in delete handler
- Enables proper deletion of Signal instances via API

**Adapter Name Matching (issue spacedriveapp#6)**
- Fix implicit Signal shorthand detection in send_message tool
- Change from starts_with('signal') to exact match or signal: prefix
- Prevents adapters like 'signal-alerts' from triggering Signal shorthand

Note: DOC_LINKS entry for signal docs (issue spacedriveapp#1) retained as-is per request

fix(api): add Signal to messaging status endpoint

Add Signal instance detection to messaging_status function:
- Read [messaging.signal] section for default instance
- Read [[messaging.signal.instances]] for named instances
- Push instance status to instances array when configured
- Requires both http_url and account fields to be considered configured

This fixes the issue where Signal instances were not appearing in the web UI.

fix(signal): align validation rules and add toggle_platform support

Frontend validation (ChannelSettingCard.tsx):
- Update E.164 regex to /^\+[1-9]\d{5,13}$/ for true E.164 compliance
- Enforce 7-15 digits total (6-14 after '+'), first digit 1-9
- Update error message and help text to reflect correct range

Backend validation (target.rs):
- Change is_valid_e164 to require 6-14 digits after '+' (7-15 total)
- normalize_signal_target: Reuse is_valid_e164() for bare digit validation
- parse_signal_target_parts: Add empty segment checks to all match arms
  - Reject empty uuid, group_id, phone, instance, or single segments
  - Prevents invalid targets like 'uuid:' or 'signal:work:'

API state (state.rs):
- Add signal_permissions field to ApiState
- Add set_signal_permissions() method for hot-reload support

toggle_platform (messaging.rs):
- Add Signal case to toggle_platform for runtime adapter start/stop
- Support both default and named Signal instances
- Update existing ArcSwap pointee instead of creating new one when permissions exist

send_message_to_another_channel:
- parse_implicit_signal_shorthand: Use is_valid_e164() for strict validation
- Add specific error messages for each validation failure case
- Add early error for ambiguous Signal adapter selection when multiple
  named instances exist without a default, preventing broadcast() failure
- Fix adapter resolution to distinguish default 'signal' from named adapters

Tests (messaging.rs):
- Update E.164 tests for 6-14 digit range (7-15 total)
ibhagwan added a commit to ibhagwan/spacebot that referenced this pull request Mar 13, 2026
- Add Signal to Platform type and PLATFORM_LABELS
- Add Signal credential form with http_url and account fields
- Add E.164 format validation in frontend
- Add Signal to available platforms list
- Add Signal icon mapping (using generic comment icon)
- Include placeholder documentation link

fix(messaging): resolve Signal adapter validation and consistency issues

Fixes several issues with Signal messaging adapter implementation:

**E.164 Phone Number Validation (issue spacedriveapp#5)**
- Move is_valid_e164 to messaging::target module for reuse
- Add proper E.164 validation: first digit must be 1-9 (not 0)
- Enforce maximum 15 digits per E.164 standard
- Update normalize_signal_target to use shared validation
- Add test cases for +01234567 (invalid) and >15 digit numbers

**Validation Response Format (issue spacedriveapp#2)**
- Replace StatusCode::BAD_REQUEST with MessagingInstanceActionResponse
- Return user-friendly validation failures for missing signal_http_url
- Return user-friendly validation failures for missing signal_account
- Applied to both default and named instance creation paths

**dm_allowed_users Cleanup (issue spacedriveapp#3)**
- Remove old auto-added account from dm_allowed_users when account changes
- Prevent allowlist from growing indefinitely on account updates
- Only the new account remains in the authorized list

**Signal Platform Deletion Support (issue spacedriveapp#4)**
- Add 'signal' to delete_messaging_instance supported platforms
- Add Signal-specific credential cleanup in delete handler
- Enables proper deletion of Signal instances via API

**Adapter Name Matching (issue spacedriveapp#6)**
- Fix implicit Signal shorthand detection in send_message tool
- Change from starts_with('signal') to exact match or signal: prefix
- Prevents adapters like 'signal-alerts' from triggering Signal shorthand

Note: DOC_LINKS entry for signal docs (issue spacedriveapp#1) retained as-is per request

fix(api): add Signal to messaging status endpoint

Add Signal instance detection to messaging_status function:
- Read [messaging.signal] section for default instance
- Read [[messaging.signal.instances]] for named instances
- Push instance status to instances array when configured
- Requires both http_url and account fields to be considered configured

This fixes the issue where Signal instances were not appearing in the web UI.

fix(signal): align validation rules and add toggle_platform support

Frontend validation (ChannelSettingCard.tsx):
- Update E.164 regex to /^\+[1-9]\d{5,13}$/ for true E.164 compliance
- Enforce 7-15 digits total (6-14 after '+'), first digit 1-9
- Update error message and help text to reflect correct range

Backend validation (target.rs):
- Change is_valid_e164 to require 6-14 digits after '+' (7-15 total)
- normalize_signal_target: Reuse is_valid_e164() for bare digit validation
- parse_signal_target_parts: Add empty segment checks to all match arms
  - Reject empty uuid, group_id, phone, instance, or single segments
  - Prevents invalid targets like 'uuid:' or 'signal:work:'

API state (state.rs):
- Add signal_permissions field to ApiState
- Add set_signal_permissions() method for hot-reload support

toggle_platform (messaging.rs):
- Add Signal case to toggle_platform for runtime adapter start/stop
- Support both default and named Signal instances
- Update existing ArcSwap pointee instead of creating new one when permissions exist

send_message_to_another_channel:
- parse_implicit_signal_shorthand: Use is_valid_e164() for strict validation
- Add specific error messages for each validation failure case
- Add early error for ambiguous Signal adapter selection when multiple
  named instances exist without a default, preventing broadcast() failure
- Fix adapter resolution to distinguish default 'signal' from named adapters

Tests (messaging.rs):
- Update E.164 tests for 6-14 digit range (7-15 total)
ibhagwan added a commit to ibhagwan/spacebot that referenced this pull request Mar 13, 2026
- Add Signal to Platform type and PLATFORM_LABELS
- Add Signal credential form with http_url and account fields
- Add E.164 format validation in frontend
- Add Signal to available platforms list
- Add Signal icon mapping (using generic comment icon)
- Include placeholder documentation link

fix(messaging): resolve Signal adapter validation and consistency issues

Fixes several issues with Signal messaging adapter implementation:

**E.164 Phone Number Validation (issue spacedriveapp#5)**
- Move is_valid_e164 to messaging::target module for reuse
- Add proper E.164 validation: first digit must be 1-9 (not 0)
- Enforce maximum 15 digits per E.164 standard
- Update normalize_signal_target to use shared validation
- Add test cases for +01234567 (invalid) and >15 digit numbers

**Validation Response Format (issue spacedriveapp#2)**
- Replace StatusCode::BAD_REQUEST with MessagingInstanceActionResponse
- Return user-friendly validation failures for missing signal_http_url
- Return user-friendly validation failures for missing signal_account
- Applied to both default and named instance creation paths

**dm_allowed_users Cleanup (issue spacedriveapp#3)**
- Remove old auto-added account from dm_allowed_users when account changes
- Prevent allowlist from growing indefinitely on account updates
- Only the new account remains in the authorized list

**Signal Platform Deletion Support (issue spacedriveapp#4)**
- Add 'signal' to delete_messaging_instance supported platforms
- Add Signal-specific credential cleanup in delete handler
- Enables proper deletion of Signal instances via API

**Adapter Name Matching (issue spacedriveapp#6)**
- Fix implicit Signal shorthand detection in send_message tool
- Change from starts_with('signal') to exact match or signal: prefix
- Prevents adapters like 'signal-alerts' from triggering Signal shorthand

Note: DOC_LINKS entry for signal docs (issue spacedriveapp#1) retained as-is per request

fix(api): add Signal to messaging status endpoint

Add Signal instance detection to messaging_status function:
- Read [messaging.signal] section for default instance
- Read [[messaging.signal.instances]] for named instances
- Push instance status to instances array when configured
- Requires both http_url and account fields to be considered configured

This fixes the issue where Signal instances were not appearing in the web UI.

fix(signal): align validation rules and add toggle_platform support

Frontend validation (ChannelSettingCard.tsx):
- Update E.164 regex to /^\+[1-9]\d{5,13}$/ for true E.164 compliance
- Enforce 7-15 digits total (6-14 after '+'), first digit 1-9
- Update error message and help text to reflect correct range

Backend validation (target.rs):
- Change is_valid_e164 to require 6-14 digits after '+' (7-15 total)
- normalize_signal_target: Reuse is_valid_e164() for bare digit validation
- parse_signal_target_parts: Add empty segment checks to all match arms
  - Reject empty uuid, group_id, phone, instance, or single segments
  - Prevents invalid targets like 'uuid:' or 'signal:work:'

API state (state.rs):
- Add signal_permissions field to ApiState
- Add set_signal_permissions() method for hot-reload support

toggle_platform (messaging.rs):
- Add Signal case to toggle_platform for runtime adapter start/stop
- Support both default and named Signal instances
- Update existing ArcSwap pointee instead of creating new one when permissions exist

send_message_to_another_channel:
- parse_implicit_signal_shorthand: Use is_valid_e164() for strict validation
- Add specific error messages for each validation failure case
- Add early error for ambiguous Signal adapter selection when multiple
  named instances exist without a default, preventing broadcast() failure
- Fix adapter resolution to distinguish default 'signal' from named adapters

Tests (messaging.rs):
- Update E.164 tests for 6-14 digit range (7-15 total)
ibhagwan added a commit to ibhagwan/spacebot that referenced this pull request Mar 13, 2026
- Add Signal to Platform type and PLATFORM_LABELS
- Add Signal credential form with http_url and account fields
- Add E.164 format validation in frontend
- Add Signal to available platforms list
- Add Signal icon mapping (using generic comment icon)
- Include placeholder documentation link

fix(messaging): resolve Signal adapter validation and consistency issues

Fixes several issues with Signal messaging adapter implementation:

**E.164 Phone Number Validation (issue spacedriveapp#5)**
- Move is_valid_e164 to messaging::target module for reuse
- Add proper E.164 validation: first digit must be 1-9 (not 0)
- Enforce maximum 15 digits per E.164 standard
- Update normalize_signal_target to use shared validation
- Add test cases for +01234567 (invalid) and >15 digit numbers

**Validation Response Format (issue spacedriveapp#2)**
- Replace StatusCode::BAD_REQUEST with MessagingInstanceActionResponse
- Return user-friendly validation failures for missing signal_http_url
- Return user-friendly validation failures for missing signal_account
- Applied to both default and named instance creation paths

**dm_allowed_users Cleanup (issue spacedriveapp#3)**
- Remove old auto-added account from dm_allowed_users when account changes
- Prevent allowlist from growing indefinitely on account updates
- Only the new account remains in the authorized list

**Signal Platform Deletion Support (issue spacedriveapp#4)**
- Add 'signal' to delete_messaging_instance supported platforms
- Add Signal-specific credential cleanup in delete handler
- Enables proper deletion of Signal instances via API

**Adapter Name Matching (issue spacedriveapp#6)**
- Fix implicit Signal shorthand detection in send_message tool
- Change from starts_with('signal') to exact match or signal: prefix
- Prevents adapters like 'signal-alerts' from triggering Signal shorthand

Note: DOC_LINKS entry for signal docs (issue spacedriveapp#1) retained as-is per request

fix(api): add Signal to messaging status endpoint

Add Signal instance detection to messaging_status function:
- Read [messaging.signal] section for default instance
- Read [[messaging.signal.instances]] for named instances
- Push instance status to instances array when configured
- Requires both http_url and account fields to be considered configured

This fixes the issue where Signal instances were not appearing in the web UI.

fix(signal): align validation rules and add toggle_platform support

Frontend validation (ChannelSettingCard.tsx):
- Update E.164 regex to /^\+[1-9]\d{5,13}$/ for true E.164 compliance
- Enforce 7-15 digits total (6-14 after '+'), first digit 1-9
- Update error message and help text to reflect correct range

Backend validation (target.rs):
- Change is_valid_e164 to require 6-14 digits after '+' (7-15 total)
- normalize_signal_target: Reuse is_valid_e164() for bare digit validation
- parse_signal_target_parts: Add empty segment checks to all match arms
  - Reject empty uuid, group_id, phone, instance, or single segments
  - Prevents invalid targets like 'uuid:' or 'signal:work:'

API state (state.rs):
- Add signal_permissions field to ApiState
- Add set_signal_permissions() method for hot-reload support

toggle_platform (messaging.rs):
- Add Signal case to toggle_platform for runtime adapter start/stop
- Support both default and named Signal instances
- Update existing ArcSwap pointee instead of creating new one when permissions exist

send_message_to_another_channel:
- parse_implicit_signal_shorthand: Use is_valid_e164() for strict validation
- Add specific error messages for each validation failure case
- Add early error for ambiguous Signal adapter selection when multiple
  named instances exist without a default, preventing broadcast() failure
- Fix adapter resolution to distinguish default 'signal' from named adapters

Tests (messaging.rs):
- Update E.164 tests for 6-14 digit range (7-15 total)
ibhagwan added a commit to ibhagwan/spacebot that referenced this pull request Mar 13, 2026
- Add Signal to Platform type and PLATFORM_LABELS
- Add Signal credential form with http_url and account fields
- Add E.164 format validation in frontend
- Add Signal to available platforms list
- Add Signal icon mapping (using generic comment icon)
- Include placeholder documentation link

fix(messaging): resolve Signal adapter validation and consistency issues

Fixes several issues with Signal messaging adapter implementation:

**E.164 Phone Number Validation (issue spacedriveapp#5)**
- Move is_valid_e164 to messaging::target module for reuse
- Add proper E.164 validation: first digit must be 1-9 (not 0)
- Enforce maximum 15 digits per E.164 standard
- Update normalize_signal_target to use shared validation
- Add test cases for +01234567 (invalid) and >15 digit numbers

**Validation Response Format (issue spacedriveapp#2)**
- Replace StatusCode::BAD_REQUEST with MessagingInstanceActionResponse
- Return user-friendly validation failures for missing signal_http_url
- Return user-friendly validation failures for missing signal_account
- Applied to both default and named instance creation paths

**dm_allowed_users Cleanup (issue spacedriveapp#3)**
- Remove old auto-added account from dm_allowed_users when account changes
- Prevent allowlist from growing indefinitely on account updates
- Only the new account remains in the authorized list

**Signal Platform Deletion Support (issue spacedriveapp#4)**
- Add 'signal' to delete_messaging_instance supported platforms
- Add Signal-specific credential cleanup in delete handler
- Enables proper deletion of Signal instances via API

**Adapter Name Matching (issue spacedriveapp#6)**
- Fix implicit Signal shorthand detection in send_message tool
- Change from starts_with('signal') to exact match or signal: prefix
- Prevents adapters like 'signal-alerts' from triggering Signal shorthand

Note: DOC_LINKS entry for signal docs (issue spacedriveapp#1) retained as-is per request

fix(api): add Signal to messaging status endpoint

Add Signal instance detection to messaging_status function:
- Read [messaging.signal] section for default instance
- Read [[messaging.signal.instances]] for named instances
- Push instance status to instances array when configured
- Requires both http_url and account fields to be considered configured

This fixes the issue where Signal instances were not appearing in the web UI.

fix(signal): align validation rules and add toggle_platform support

Frontend validation (ChannelSettingCard.tsx):
- Update E.164 regex to /^\+[1-9]\d{5,13}$/ for true E.164 compliance
- Enforce 7-15 digits total (6-14 after '+'), first digit 1-9
- Update error message and help text to reflect correct range

Backend validation (target.rs):
- Change is_valid_e164 to require 6-14 digits after '+' (7-15 total)
- normalize_signal_target: Reuse is_valid_e164() for bare digit validation
- parse_signal_target_parts: Add empty segment checks to all match arms
  - Reject empty uuid, group_id, phone, instance, or single segments
  - Prevents invalid targets like 'uuid:' or 'signal:work:'

API state (state.rs):
- Add signal_permissions field to ApiState
- Add set_signal_permissions() method for hot-reload support

toggle_platform (messaging.rs):
- Add Signal case to toggle_platform for runtime adapter start/stop
- Support both default and named Signal instances
- Update existing ArcSwap pointee instead of creating new one when permissions exist

send_message_to_another_channel:
- parse_implicit_signal_shorthand: Use is_valid_e164() for strict validation
- Add specific error messages for each validation failure case
- Add early error for ambiguous Signal adapter selection when multiple
  named instances exist without a default, preventing broadcast() failure
- Fix adapter resolution to distinguish default 'signal' from named adapters

Tests (messaging.rs):
- Update E.164 tests for 6-14 digit range (7-15 total)
ibhagwan added a commit to ibhagwan/spacebot that referenced this pull request Mar 14, 2026
- Add Signal to Platform type and PLATFORM_LABELS
- Add Signal credential form with http_url and account fields
- Add E.164 format validation in frontend
- Add Signal to available platforms list
- Add Signal icon mapping (using generic comment icon)
- Include placeholder documentation link

fix(messaging): resolve Signal adapter validation and consistency issues

Fixes several issues with Signal messaging adapter implementation:

**E.164 Phone Number Validation (issue spacedriveapp#5)**
- Move is_valid_e164 to messaging::target module for reuse
- Add proper E.164 validation: first digit must be 1-9 (not 0)
- Enforce maximum 15 digits per E.164 standard
- Update normalize_signal_target to use shared validation
- Add test cases for +01234567 (invalid) and >15 digit numbers

**Validation Response Format (issue spacedriveapp#2)**
- Replace StatusCode::BAD_REQUEST with MessagingInstanceActionResponse
- Return user-friendly validation failures for missing signal_http_url
- Return user-friendly validation failures for missing signal_account
- Applied to both default and named instance creation paths

**dm_allowed_users Cleanup (issue spacedriveapp#3)**
- Remove old auto-added account from dm_allowed_users when account changes
- Prevent allowlist from growing indefinitely on account updates
- Only the new account remains in the authorized list

**Signal Platform Deletion Support (issue spacedriveapp#4)**
- Add 'signal' to delete_messaging_instance supported platforms
- Add Signal-specific credential cleanup in delete handler
- Enables proper deletion of Signal instances via API

**Adapter Name Matching (issue spacedriveapp#6)**
- Fix implicit Signal shorthand detection in send_message tool
- Change from starts_with('signal') to exact match or signal: prefix
- Prevents adapters like 'signal-alerts' from triggering Signal shorthand

Note: DOC_LINKS entry for signal docs (issue spacedriveapp#1) retained as-is per request

fix(api): add Signal to messaging status endpoint

Add Signal instance detection to messaging_status function:
- Read [messaging.signal] section for default instance
- Read [[messaging.signal.instances]] for named instances
- Push instance status to instances array when configured
- Requires both http_url and account fields to be considered configured

This fixes the issue where Signal instances were not appearing in the web UI.

fix(signal): align validation rules and add toggle_platform support

Frontend validation (ChannelSettingCard.tsx):
- Update E.164 regex to /^\+[1-9]\d{5,13}$/ for true E.164 compliance
- Enforce 7-15 digits total (6-14 after '+'), first digit 1-9
- Update error message and help text to reflect correct range

Backend validation (target.rs):
- Change is_valid_e164 to require 6-14 digits after '+' (7-15 total)
- normalize_signal_target: Reuse is_valid_e164() for bare digit validation
- parse_signal_target_parts: Add empty segment checks to all match arms
  - Reject empty uuid, group_id, phone, instance, or single segments
  - Prevents invalid targets like 'uuid:' or 'signal:work:'

API state (state.rs):
- Add signal_permissions field to ApiState
- Add set_signal_permissions() method for hot-reload support

toggle_platform (messaging.rs):
- Add Signal case to toggle_platform for runtime adapter start/stop
- Support both default and named Signal instances
- Update existing ArcSwap pointee instead of creating new one when permissions exist

send_message_to_another_channel:
- parse_implicit_signal_shorthand: Use is_valid_e164() for strict validation
- Add specific error messages for each validation failure case
- Add early error for ambiguous Signal adapter selection when multiple
  named instances exist without a default, preventing broadcast() failure
- Fix adapter resolution to distinguish default 'signal' from named adapters

Tests (messaging.rs):
- Update E.164 tests for 6-14 digit range (7-15 total)
ibhagwan added a commit to ibhagwan/spacebot that referenced this pull request Mar 14, 2026
- Add Signal to Platform type and PLATFORM_LABELS
- Add Signal credential form with http_url and account fields
- Add E.164 format validation in frontend
- Add Signal to available platforms list
- Add Signal icon mapping (using generic comment icon)
- Include placeholder documentation link

fix(messaging): resolve Signal adapter validation and consistency issues

Fixes several issues with Signal messaging adapter implementation:

**E.164 Phone Number Validation (issue spacedriveapp#5)**
- Move is_valid_e164 to messaging::target module for reuse
- Add proper E.164 validation: first digit must be 1-9 (not 0)
- Enforce maximum 15 digits per E.164 standard
- Update normalize_signal_target to use shared validation
- Add test cases for +01234567 (invalid) and >15 digit numbers

**Validation Response Format (issue spacedriveapp#2)**
- Replace StatusCode::BAD_REQUEST with MessagingInstanceActionResponse
- Return user-friendly validation failures for missing signal_http_url
- Return user-friendly validation failures for missing signal_account
- Applied to both default and named instance creation paths

**dm_allowed_users Cleanup (issue spacedriveapp#3)**
- Remove old auto-added account from dm_allowed_users when account changes
- Prevent allowlist from growing indefinitely on account updates
- Only the new account remains in the authorized list

**Signal Platform Deletion Support (issue spacedriveapp#4)**
- Add 'signal' to delete_messaging_instance supported platforms
- Add Signal-specific credential cleanup in delete handler
- Enables proper deletion of Signal instances via API

**Adapter Name Matching (issue spacedriveapp#6)**
- Fix implicit Signal shorthand detection in send_message tool
- Change from starts_with('signal') to exact match or signal: prefix
- Prevents adapters like 'signal-alerts' from triggering Signal shorthand

Note: DOC_LINKS entry for signal docs (issue spacedriveapp#1) retained as-is per request

fix(api): add Signal to messaging status endpoint

Add Signal instance detection to messaging_status function:
- Read [messaging.signal] section for default instance
- Read [[messaging.signal.instances]] for named instances
- Push instance status to instances array when configured
- Requires both http_url and account fields to be considered configured

This fixes the issue where Signal instances were not appearing in the web UI.

fix(signal): align validation rules and add toggle_platform support

Frontend validation (ChannelSettingCard.tsx):
- Update E.164 regex to /^\+[1-9]\d{5,13}$/ for true E.164 compliance
- Enforce 7-15 digits total (6-14 after '+'), first digit 1-9
- Update error message and help text to reflect correct range

Backend validation (target.rs):
- Change is_valid_e164 to require 6-14 digits after '+' (7-15 total)
- normalize_signal_target: Reuse is_valid_e164() for bare digit validation
- parse_signal_target_parts: Add empty segment checks to all match arms
  - Reject empty uuid, group_id, phone, instance, or single segments
  - Prevents invalid targets like 'uuid:' or 'signal:work:'

API state (state.rs):
- Add signal_permissions field to ApiState
- Add set_signal_permissions() method for hot-reload support

toggle_platform (messaging.rs):
- Add Signal case to toggle_platform for runtime adapter start/stop
- Support both default and named Signal instances
- Update existing ArcSwap pointee instead of creating new one when permissions exist

send_message_to_another_channel:
- parse_implicit_signal_shorthand: Use is_valid_e164() for strict validation
- Add specific error messages for each validation failure case
- Add early error for ambiguous Signal adapter selection when multiple
  named instances exist without a default, preventing broadcast() failure
- Fix adapter resolution to distinguish default 'signal' from named adapters

Tests (messaging.rs):
- Update E.164 tests for 6-14 digit range (7-15 total)
ibhagwan added a commit to ibhagwan/spacebot that referenced this pull request Mar 19, 2026
- Add Signal to Platform type and PLATFORM_LABELS
- Add Signal credential form with http_url and account fields
- Add E.164 format validation in frontend
- Add Signal to available platforms list
- Add Signal icon mapping (using generic comment icon)
- Include placeholder documentation link

fix(messaging): resolve Signal adapter validation and consistency issues

Fixes several issues with Signal messaging adapter implementation:

**E.164 Phone Number Validation (issue spacedriveapp#5)**
- Move is_valid_e164 to messaging::target module for reuse
- Add proper E.164 validation: first digit must be 1-9 (not 0)
- Enforce maximum 15 digits per E.164 standard
- Update normalize_signal_target to use shared validation
- Add test cases for +01234567 (invalid) and >15 digit numbers

**Validation Response Format (issue spacedriveapp#2)**
- Replace StatusCode::BAD_REQUEST with MessagingInstanceActionResponse
- Return user-friendly validation failures for missing signal_http_url
- Return user-friendly validation failures for missing signal_account
- Applied to both default and named instance creation paths

**dm_allowed_users Cleanup (issue spacedriveapp#3)**
- Remove old auto-added account from dm_allowed_users when account changes
- Prevent allowlist from growing indefinitely on account updates
- Only the new account remains in the authorized list

**Signal Platform Deletion Support (issue spacedriveapp#4)**
- Add 'signal' to delete_messaging_instance supported platforms
- Add Signal-specific credential cleanup in delete handler
- Enables proper deletion of Signal instances via API

**Adapter Name Matching (issue spacedriveapp#6)**
- Fix implicit Signal shorthand detection in send_message tool
- Change from starts_with('signal') to exact match or signal: prefix
- Prevents adapters like 'signal-alerts' from triggering Signal shorthand

Note: DOC_LINKS entry for signal docs (issue spacedriveapp#1) retained as-is per request

fix(api): add Signal to messaging status endpoint

Add Signal instance detection to messaging_status function:
- Read [messaging.signal] section for default instance
- Read [[messaging.signal.instances]] for named instances
- Push instance status to instances array when configured
- Requires both http_url and account fields to be considered configured

This fixes the issue where Signal instances were not appearing in the web UI.

fix(signal): align validation rules and add toggle_platform support

Frontend validation (ChannelSettingCard.tsx):
- Update E.164 regex to /^\+[1-9]\d{5,13}$/ for true E.164 compliance
- Enforce 7-15 digits total (6-14 after '+'), first digit 1-9
- Update error message and help text to reflect correct range

Backend validation (target.rs):
- Change is_valid_e164 to require 6-14 digits after '+' (7-15 total)
- normalize_signal_target: Reuse is_valid_e164() for bare digit validation
- parse_signal_target_parts: Add empty segment checks to all match arms
  - Reject empty uuid, group_id, phone, instance, or single segments
  - Prevents invalid targets like 'uuid:' or 'signal:work:'

API state (state.rs):
- Add signal_permissions field to ApiState
- Add set_signal_permissions() method for hot-reload support

toggle_platform (messaging.rs):
- Add Signal case to toggle_platform for runtime adapter start/stop
- Support both default and named Signal instances
- Update existing ArcSwap pointee instead of creating new one when permissions exist

send_message_to_another_channel:
- parse_implicit_signal_shorthand: Use is_valid_e164() for strict validation
- Add specific error messages for each validation failure case
- Add early error for ambiguous Signal adapter selection when multiple
  named instances exist without a default, preventing broadcast() failure
- Fix adapter resolution to distinguish default 'signal' from named adapters

Tests (messaging.rs):
- Update E.164 tests for 6-14 digit range (7-15 total)
ibhagwan added a commit to ibhagwan/spacebot that referenced this pull request Mar 21, 2026
- Add Signal to Platform type and PLATFORM_LABELS
- Add Signal credential form with http_url and account fields
- Add E.164 format validation in frontend
- Add Signal to available platforms list
- Add Signal icon mapping (using generic comment icon)
- Include placeholder documentation link

fix(messaging): resolve Signal adapter validation and consistency issues

Fixes several issues with Signal messaging adapter implementation:

**E.164 Phone Number Validation (issue spacedriveapp#5)**
- Move is_valid_e164 to messaging::target module for reuse
- Add proper E.164 validation: first digit must be 1-9 (not 0)
- Enforce maximum 15 digits per E.164 standard
- Update normalize_signal_target to use shared validation
- Add test cases for +01234567 (invalid) and >15 digit numbers

**Validation Response Format (issue spacedriveapp#2)**
- Replace StatusCode::BAD_REQUEST with MessagingInstanceActionResponse
- Return user-friendly validation failures for missing signal_http_url
- Return user-friendly validation failures for missing signal_account
- Applied to both default and named instance creation paths

**dm_allowed_users Cleanup (issue spacedriveapp#3)**
- Remove old auto-added account from dm_allowed_users when account changes
- Prevent allowlist from growing indefinitely on account updates
- Only the new account remains in the authorized list

**Signal Platform Deletion Support (issue spacedriveapp#4)**
- Add 'signal' to delete_messaging_instance supported platforms
- Add Signal-specific credential cleanup in delete handler
- Enables proper deletion of Signal instances via API

**Adapter Name Matching (issue spacedriveapp#6)**
- Fix implicit Signal shorthand detection in send_message tool
- Change from starts_with('signal') to exact match or signal: prefix
- Prevents adapters like 'signal-alerts' from triggering Signal shorthand

Note: DOC_LINKS entry for signal docs (issue spacedriveapp#1) retained as-is per request

fix(api): add Signal to messaging status endpoint

Add Signal instance detection to messaging_status function:
- Read [messaging.signal] section for default instance
- Read [[messaging.signal.instances]] for named instances
- Push instance status to instances array when configured
- Requires both http_url and account fields to be considered configured

This fixes the issue where Signal instances were not appearing in the web UI.

fix(signal): align validation rules and add toggle_platform support

Frontend validation (ChannelSettingCard.tsx):
- Update E.164 regex to /^\+[1-9]\d{5,13}$/ for true E.164 compliance
- Enforce 7-15 digits total (6-14 after '+'), first digit 1-9
- Update error message and help text to reflect correct range

Backend validation (target.rs):
- Change is_valid_e164 to require 6-14 digits after '+' (7-15 total)
- normalize_signal_target: Reuse is_valid_e164() for bare digit validation
- parse_signal_target_parts: Add empty segment checks to all match arms
  - Reject empty uuid, group_id, phone, instance, or single segments
  - Prevents invalid targets like 'uuid:' or 'signal:work:'

API state (state.rs):
- Add signal_permissions field to ApiState
- Add set_signal_permissions() method for hot-reload support

toggle_platform (messaging.rs):
- Add Signal case to toggle_platform for runtime adapter start/stop
- Support both default and named Signal instances
- Update existing ArcSwap pointee instead of creating new one when permissions exist

send_message_to_another_channel:
- parse_implicit_signal_shorthand: Use is_valid_e164() for strict validation
- Add specific error messages for each validation failure case
- Add early error for ambiguous Signal adapter selection when multiple
  named instances exist without a default, preventing broadcast() failure
- Fix adapter resolution to distinguish default 'signal' from named adapters

Tests (messaging.rs):
- Update E.164 tests for 6-14 digit range (7-15 total)
ibhagwan added a commit to ibhagwan/spacebot that referenced this pull request Mar 21, 2026
- Add Signal to Platform type and PLATFORM_LABELS
- Add Signal credential form with http_url and account fields
- Add E.164 format validation in frontend
- Add Signal to available platforms list
- Add Signal icon mapping (using generic comment icon)
- Include placeholder documentation link

fix(messaging): resolve Signal adapter validation and consistency issues

Fixes several issues with Signal messaging adapter implementation:

**E.164 Phone Number Validation (issue spacedriveapp#5)**
- Move is_valid_e164 to messaging::target module for reuse
- Add proper E.164 validation: first digit must be 1-9 (not 0)
- Enforce maximum 15 digits per E.164 standard
- Update normalize_signal_target to use shared validation
- Add test cases for +01234567 (invalid) and >15 digit numbers

**Validation Response Format (issue spacedriveapp#2)**
- Replace StatusCode::BAD_REQUEST with MessagingInstanceActionResponse
- Return user-friendly validation failures for missing signal_http_url
- Return user-friendly validation failures for missing signal_account
- Applied to both default and named instance creation paths

**dm_allowed_users Cleanup (issue spacedriveapp#3)**
- Remove old auto-added account from dm_allowed_users when account changes
- Prevent allowlist from growing indefinitely on account updates
- Only the new account remains in the authorized list

**Signal Platform Deletion Support (issue spacedriveapp#4)**
- Add 'signal' to delete_messaging_instance supported platforms
- Add Signal-specific credential cleanup in delete handler
- Enables proper deletion of Signal instances via API

**Adapter Name Matching (issue spacedriveapp#6)**
- Fix implicit Signal shorthand detection in send_message tool
- Change from starts_with('signal') to exact match or signal: prefix
- Prevents adapters like 'signal-alerts' from triggering Signal shorthand

Note: DOC_LINKS entry for signal docs (issue spacedriveapp#1) retained as-is per request

fix(api): add Signal to messaging status endpoint

Add Signal instance detection to messaging_status function:
- Read [messaging.signal] section for default instance
- Read [[messaging.signal.instances]] for named instances
- Push instance status to instances array when configured
- Requires both http_url and account fields to be considered configured

This fixes the issue where Signal instances were not appearing in the web UI.

fix(signal): align validation rules and add toggle_platform support

Frontend validation (ChannelSettingCard.tsx):
- Update E.164 regex to /^\+[1-9]\d{5,13}$/ for true E.164 compliance
- Enforce 7-15 digits total (6-14 after '+'), first digit 1-9
- Update error message and help text to reflect correct range

Backend validation (target.rs):
- Change is_valid_e164 to require 6-14 digits after '+' (7-15 total)
- normalize_signal_target: Reuse is_valid_e164() for bare digit validation
- parse_signal_target_parts: Add empty segment checks to all match arms
  - Reject empty uuid, group_id, phone, instance, or single segments
  - Prevents invalid targets like 'uuid:' or 'signal:work:'

API state (state.rs):
- Add signal_permissions field to ApiState
- Add set_signal_permissions() method for hot-reload support

toggle_platform (messaging.rs):
- Add Signal case to toggle_platform for runtime adapter start/stop
- Support both default and named Signal instances
- Update existing ArcSwap pointee instead of creating new one when permissions exist

send_message_to_another_channel:
- parse_implicit_signal_shorthand: Use is_valid_e164() for strict validation
- Add specific error messages for each validation failure case
- Add early error for ambiguous Signal adapter selection when multiple
  named instances exist without a default, preventing broadcast() failure
- Fix adapter resolution to distinguish default 'signal' from named adapters

Tests (messaging.rs):
- Update E.164 tests for 6-14 digit range (7-15 total)
ibhagwan added a commit to ibhagwan/spacebot that referenced this pull request Mar 21, 2026
- Add Signal to Platform type and PLATFORM_LABELS
- Add Signal credential form with http_url and account fields
- Add E.164 format validation in frontend
- Add Signal to available platforms list
- Add Signal icon mapping (using generic comment icon)
- Include placeholder documentation link

fix(messaging): resolve Signal adapter validation and consistency issues

Fixes several issues with Signal messaging adapter implementation:

**E.164 Phone Number Validation (issue spacedriveapp#5)**
- Move is_valid_e164 to messaging::target module for reuse
- Add proper E.164 validation: first digit must be 1-9 (not 0)
- Enforce maximum 15 digits per E.164 standard
- Update normalize_signal_target to use shared validation
- Add test cases for +01234567 (invalid) and >15 digit numbers

**Validation Response Format (issue spacedriveapp#2)**
- Replace StatusCode::BAD_REQUEST with MessagingInstanceActionResponse
- Return user-friendly validation failures for missing signal_http_url
- Return user-friendly validation failures for missing signal_account
- Applied to both default and named instance creation paths

**dm_allowed_users Cleanup (issue spacedriveapp#3)**
- Remove old auto-added account from dm_allowed_users when account changes
- Prevent allowlist from growing indefinitely on account updates
- Only the new account remains in the authorized list

**Signal Platform Deletion Support (issue spacedriveapp#4)**
- Add 'signal' to delete_messaging_instance supported platforms
- Add Signal-specific credential cleanup in delete handler
- Enables proper deletion of Signal instances via API

**Adapter Name Matching (issue spacedriveapp#6)**
- Fix implicit Signal shorthand detection in send_message tool
- Change from starts_with('signal') to exact match or signal: prefix
- Prevents adapters like 'signal-alerts' from triggering Signal shorthand

Note: DOC_LINKS entry for signal docs (issue spacedriveapp#1) retained as-is per request

fix(api): add Signal to messaging status endpoint

Add Signal instance detection to messaging_status function:
- Read [messaging.signal] section for default instance
- Read [[messaging.signal.instances]] for named instances
- Push instance status to instances array when configured
- Requires both http_url and account fields to be considered configured

This fixes the issue where Signal instances were not appearing in the web UI.

fix(signal): align validation rules and add toggle_platform support

Frontend validation (ChannelSettingCard.tsx):
- Update E.164 regex to /^\+[1-9]\d{5,13}$/ for true E.164 compliance
- Enforce 7-15 digits total (6-14 after '+'), first digit 1-9
- Update error message and help text to reflect correct range

Backend validation (target.rs):
- Change is_valid_e164 to require 6-14 digits after '+' (7-15 total)
- normalize_signal_target: Reuse is_valid_e164() for bare digit validation
- parse_signal_target_parts: Add empty segment checks to all match arms
  - Reject empty uuid, group_id, phone, instance, or single segments
  - Prevents invalid targets like 'uuid:' or 'signal:work:'

API state (state.rs):
- Add signal_permissions field to ApiState
- Add set_signal_permissions() method for hot-reload support

toggle_platform (messaging.rs):
- Add Signal case to toggle_platform for runtime adapter start/stop
- Support both default and named Signal instances
- Update existing ArcSwap pointee instead of creating new one when permissions exist

send_message_to_another_channel:
- parse_implicit_signal_shorthand: Use is_valid_e164() for strict validation
- Add specific error messages for each validation failure case
- Add early error for ambiguous Signal adapter selection when multiple
  named instances exist without a default, preventing broadcast() failure
- Fix adapter resolution to distinguish default 'signal' from named adapters

Tests (messaging.rs):
- Update E.164 tests for 6-14 digit range (7-15 total)
ibhagwan added a commit to ibhagwan/spacebot that referenced this pull request Mar 21, 2026
- Add Signal to Platform type and PLATFORM_LABELS
- Add Signal credential form with http_url and account fields
- Add E.164 format validation in frontend
- Add Signal to available platforms list
- Add Signal icon mapping (using generic comment icon)
- Include placeholder documentation link

fix(messaging): resolve Signal adapter validation and consistency issues

Fixes several issues with Signal messaging adapter implementation:

**E.164 Phone Number Validation (issue spacedriveapp#5)**
- Move is_valid_e164 to messaging::target module for reuse
- Add proper E.164 validation: first digit must be 1-9 (not 0)
- Enforce maximum 15 digits per E.164 standard
- Update normalize_signal_target to use shared validation
- Add test cases for +01234567 (invalid) and >15 digit numbers

**Validation Response Format (issue spacedriveapp#2)**
- Replace StatusCode::BAD_REQUEST with MessagingInstanceActionResponse
- Return user-friendly validation failures for missing signal_http_url
- Return user-friendly validation failures for missing signal_account
- Applied to both default and named instance creation paths

**dm_allowed_users Cleanup (issue spacedriveapp#3)**
- Remove old auto-added account from dm_allowed_users when account changes
- Prevent allowlist from growing indefinitely on account updates
- Only the new account remains in the authorized list

**Signal Platform Deletion Support (issue spacedriveapp#4)**
- Add 'signal' to delete_messaging_instance supported platforms
- Add Signal-specific credential cleanup in delete handler
- Enables proper deletion of Signal instances via API

**Adapter Name Matching (issue spacedriveapp#6)**
- Fix implicit Signal shorthand detection in send_message tool
- Change from starts_with('signal') to exact match or signal: prefix
- Prevents adapters like 'signal-alerts' from triggering Signal shorthand

Note: DOC_LINKS entry for signal docs (issue spacedriveapp#1) retained as-is per request

fix(api): add Signal to messaging status endpoint

Add Signal instance detection to messaging_status function:
- Read [messaging.signal] section for default instance
- Read [[messaging.signal.instances]] for named instances
- Push instance status to instances array when configured
- Requires both http_url and account fields to be considered configured

This fixes the issue where Signal instances were not appearing in the web UI.

fix(signal): align validation rules and add toggle_platform support

Frontend validation (ChannelSettingCard.tsx):
- Update E.164 regex to /^\+[1-9]\d{5,13}$/ for true E.164 compliance
- Enforce 7-15 digits total (6-14 after '+'), first digit 1-9
- Update error message and help text to reflect correct range

Backend validation (target.rs):
- Change is_valid_e164 to require 6-14 digits after '+' (7-15 total)
- normalize_signal_target: Reuse is_valid_e164() for bare digit validation
- parse_signal_target_parts: Add empty segment checks to all match arms
  - Reject empty uuid, group_id, phone, instance, or single segments
  - Prevents invalid targets like 'uuid:' or 'signal:work:'

API state (state.rs):
- Add signal_permissions field to ApiState
- Add set_signal_permissions() method for hot-reload support

toggle_platform (messaging.rs):
- Add Signal case to toggle_platform for runtime adapter start/stop
- Support both default and named Signal instances
- Update existing ArcSwap pointee instead of creating new one when permissions exist

send_message_to_another_channel:
- parse_implicit_signal_shorthand: Use is_valid_e164() for strict validation
- Add specific error messages for each validation failure case
- Add early error for ambiguous Signal adapter selection when multiple
  named instances exist without a default, preventing broadcast() failure
- Fix adapter resolution to distinguish default 'signal' from named adapters

Tests (messaging.rs):
- Update E.164 tests for 6-14 digit range (7-15 total)
ibhagwan added a commit to ibhagwan/spacebot that referenced this pull request Mar 21, 2026
- Add Signal to Platform type and PLATFORM_LABELS
- Add Signal credential form with http_url and account fields
- Add E.164 format validation in frontend
- Add Signal to available platforms list
- Add Signal icon mapping (using generic comment icon)
- Include placeholder documentation link

fix(messaging): resolve Signal adapter validation and consistency issues

Fixes several issues with Signal messaging adapter implementation:

**E.164 Phone Number Validation (issue spacedriveapp#5)**
- Move is_valid_e164 to messaging::target module for reuse
- Add proper E.164 validation: first digit must be 1-9 (not 0)
- Enforce maximum 15 digits per E.164 standard
- Update normalize_signal_target to use shared validation
- Add test cases for +01234567 (invalid) and >15 digit numbers

**Validation Response Format (issue spacedriveapp#2)**
- Replace StatusCode::BAD_REQUEST with MessagingInstanceActionResponse
- Return user-friendly validation failures for missing signal_http_url
- Return user-friendly validation failures for missing signal_account
- Applied to both default and named instance creation paths

**dm_allowed_users Cleanup (issue spacedriveapp#3)**
- Remove old auto-added account from dm_allowed_users when account changes
- Prevent allowlist from growing indefinitely on account updates
- Only the new account remains in the authorized list

**Signal Platform Deletion Support (issue spacedriveapp#4)**
- Add 'signal' to delete_messaging_instance supported platforms
- Add Signal-specific credential cleanup in delete handler
- Enables proper deletion of Signal instances via API

**Adapter Name Matching (issue spacedriveapp#6)**
- Fix implicit Signal shorthand detection in send_message tool
- Change from starts_with('signal') to exact match or signal: prefix
- Prevents adapters like 'signal-alerts' from triggering Signal shorthand

Note: DOC_LINKS entry for signal docs (issue spacedriveapp#1) retained as-is per request

fix(api): add Signal to messaging status endpoint

Add Signal instance detection to messaging_status function:
- Read [messaging.signal] section for default instance
- Read [[messaging.signal.instances]] for named instances
- Push instance status to instances array when configured
- Requires both http_url and account fields to be considered configured

This fixes the issue where Signal instances were not appearing in the web UI.

fix(signal): align validation rules and add toggle_platform support

Frontend validation (ChannelSettingCard.tsx):
- Update E.164 regex to /^\+[1-9]\d{5,13}$/ for true E.164 compliance
- Enforce 7-15 digits total (6-14 after '+'), first digit 1-9
- Update error message and help text to reflect correct range

Backend validation (target.rs):
- Change is_valid_e164 to require 6-14 digits after '+' (7-15 total)
- normalize_signal_target: Reuse is_valid_e164() for bare digit validation
- parse_signal_target_parts: Add empty segment checks to all match arms
  - Reject empty uuid, group_id, phone, instance, or single segments
  - Prevents invalid targets like 'uuid:' or 'signal:work:'

API state (state.rs):
- Add signal_permissions field to ApiState
- Add set_signal_permissions() method for hot-reload support

toggle_platform (messaging.rs):
- Add Signal case to toggle_platform for runtime adapter start/stop
- Support both default and named Signal instances
- Update existing ArcSwap pointee instead of creating new one when permissions exist

send_message_to_another_channel:
- parse_implicit_signal_shorthand: Use is_valid_e164() for strict validation
- Add specific error messages for each validation failure case
- Add early error for ambiguous Signal adapter selection when multiple
  named instances exist without a default, preventing broadcast() failure
- Fix adapter resolution to distinguish default 'signal' from named adapters

Tests (messaging.rs):
- Update E.164 tests for 6-14 digit range (7-15 total)
ibhagwan added a commit to ibhagwan/spacebot that referenced this pull request Mar 21, 2026
- Add Signal to Platform type and PLATFORM_LABELS
- Add Signal credential form with http_url and account fields
- Add E.164 format validation in frontend
- Add Signal to available platforms list
- Add Signal icon mapping (using generic comment icon)
- Include placeholder documentation link

fix(messaging): resolve Signal adapter validation and consistency issues

Fixes several issues with Signal messaging adapter implementation:

**E.164 Phone Number Validation (issue spacedriveapp#5)**
- Move is_valid_e164 to messaging::target module for reuse
- Add proper E.164 validation: first digit must be 1-9 (not 0)
- Enforce maximum 15 digits per E.164 standard
- Update normalize_signal_target to use shared validation
- Add test cases for +01234567 (invalid) and >15 digit numbers

**Validation Response Format (issue spacedriveapp#2)**
- Replace StatusCode::BAD_REQUEST with MessagingInstanceActionResponse
- Return user-friendly validation failures for missing signal_http_url
- Return user-friendly validation failures for missing signal_account
- Applied to both default and named instance creation paths

**dm_allowed_users Cleanup (issue spacedriveapp#3)**
- Remove old auto-added account from dm_allowed_users when account changes
- Prevent allowlist from growing indefinitely on account updates
- Only the new account remains in the authorized list

**Signal Platform Deletion Support (issue spacedriveapp#4)**
- Add 'signal' to delete_messaging_instance supported platforms
- Add Signal-specific credential cleanup in delete handler
- Enables proper deletion of Signal instances via API

**Adapter Name Matching (issue spacedriveapp#6)**
- Fix implicit Signal shorthand detection in send_message tool
- Change from starts_with('signal') to exact match or signal: prefix
- Prevents adapters like 'signal-alerts' from triggering Signal shorthand

Note: DOC_LINKS entry for signal docs (issue spacedriveapp#1) retained as-is per request

fix(api): add Signal to messaging status endpoint

Add Signal instance detection to messaging_status function:
- Read [messaging.signal] section for default instance
- Read [[messaging.signal.instances]] for named instances
- Push instance status to instances array when configured
- Requires both http_url and account fields to be considered configured

This fixes the issue where Signal instances were not appearing in the web UI.

fix(signal): align validation rules and add toggle_platform support

Frontend validation (ChannelSettingCard.tsx):
- Update E.164 regex to /^\+[1-9]\d{5,13}$/ for true E.164 compliance
- Enforce 7-15 digits total (6-14 after '+'), first digit 1-9
- Update error message and help text to reflect correct range

Backend validation (target.rs):
- Change is_valid_e164 to require 6-14 digits after '+' (7-15 total)
- normalize_signal_target: Reuse is_valid_e164() for bare digit validation
- parse_signal_target_parts: Add empty segment checks to all match arms
  - Reject empty uuid, group_id, phone, instance, or single segments
  - Prevents invalid targets like 'uuid:' or 'signal:work:'

API state (state.rs):
- Add signal_permissions field to ApiState
- Add set_signal_permissions() method for hot-reload support

toggle_platform (messaging.rs):
- Add Signal case to toggle_platform for runtime adapter start/stop
- Support both default and named Signal instances
- Update existing ArcSwap pointee instead of creating new one when permissions exist

send_message_to_another_channel:
- parse_implicit_signal_shorthand: Use is_valid_e164() for strict validation
- Add specific error messages for each validation failure case
- Add early error for ambiguous Signal adapter selection when multiple
  named instances exist without a default, preventing broadcast() failure
- Fix adapter resolution to distinguish default 'signal' from named adapters

Tests (messaging.rs):
- Update E.164 tests for 6-14 digit range (7-15 total)
ibhagwan added a commit to ibhagwan/spacebot that referenced this pull request Mar 21, 2026
- Add Signal to Platform type and PLATFORM_LABELS
- Add Signal credential form with http_url and account fields
- Add E.164 format validation in frontend
- Add Signal to available platforms list
- Add Signal icon mapping (using generic comment icon)
- Include placeholder documentation link

fix(messaging): resolve Signal adapter validation and consistency issues

Fixes several issues with Signal messaging adapter implementation:

**E.164 Phone Number Validation (issue spacedriveapp#5)**
- Move is_valid_e164 to messaging::target module for reuse
- Add proper E.164 validation: first digit must be 1-9 (not 0)
- Enforce maximum 15 digits per E.164 standard
- Update normalize_signal_target to use shared validation
- Add test cases for +01234567 (invalid) and >15 digit numbers

**Validation Response Format (issue spacedriveapp#2)**
- Replace StatusCode::BAD_REQUEST with MessagingInstanceActionResponse
- Return user-friendly validation failures for missing signal_http_url
- Return user-friendly validation failures for missing signal_account
- Applied to both default and named instance creation paths

**dm_allowed_users Cleanup (issue spacedriveapp#3)**
- Remove old auto-added account from dm_allowed_users when account changes
- Prevent allowlist from growing indefinitely on account updates
- Only the new account remains in the authorized list

**Signal Platform Deletion Support (issue spacedriveapp#4)**
- Add 'signal' to delete_messaging_instance supported platforms
- Add Signal-specific credential cleanup in delete handler
- Enables proper deletion of Signal instances via API

**Adapter Name Matching (issue spacedriveapp#6)**
- Fix implicit Signal shorthand detection in send_message tool
- Change from starts_with('signal') to exact match or signal: prefix
- Prevents adapters like 'signal-alerts' from triggering Signal shorthand

Note: DOC_LINKS entry for signal docs (issue spacedriveapp#1) retained as-is per request

fix(api): add Signal to messaging status endpoint

Add Signal instance detection to messaging_status function:
- Read [messaging.signal] section for default instance
- Read [[messaging.signal.instances]] for named instances
- Push instance status to instances array when configured
- Requires both http_url and account fields to be considered configured

This fixes the issue where Signal instances were not appearing in the web UI.

fix(signal): align validation rules and add toggle_platform support

Frontend validation (ChannelSettingCard.tsx):
- Update E.164 regex to /^\+[1-9]\d{5,13}$/ for true E.164 compliance
- Enforce 7-15 digits total (6-14 after '+'), first digit 1-9
- Update error message and help text to reflect correct range

Backend validation (target.rs):
- Change is_valid_e164 to require 6-14 digits after '+' (7-15 total)
- normalize_signal_target: Reuse is_valid_e164() for bare digit validation
- parse_signal_target_parts: Add empty segment checks to all match arms
  - Reject empty uuid, group_id, phone, instance, or single segments
  - Prevents invalid targets like 'uuid:' or 'signal:work:'

API state (state.rs):
- Add signal_permissions field to ApiState
- Add set_signal_permissions() method for hot-reload support

toggle_platform (messaging.rs):
- Add Signal case to toggle_platform for runtime adapter start/stop
- Support both default and named Signal instances
- Update existing ArcSwap pointee instead of creating new one when permissions exist

send_message_to_another_channel:
- parse_implicit_signal_shorthand: Use is_valid_e164() for strict validation
- Add specific error messages for each validation failure case
- Add early error for ambiguous Signal adapter selection when multiple
  named instances exist without a default, preventing broadcast() failure
- Fix adapter resolution to distinguish default 'signal' from named adapters

Tests (messaging.rs):
- Update E.164 tests for 6-14 digit range (7-15 total)
ibhagwan added a commit to ibhagwan/spacebot that referenced this pull request Mar 21, 2026
- Add Signal to Platform type and PLATFORM_LABELS
- Add Signal credential form with http_url and account fields
- Add E.164 format validation in frontend
- Add Signal to available platforms list
- Add Signal icon mapping (using generic comment icon)
- Include placeholder documentation link

fix(messaging): resolve Signal adapter validation and consistency issues

Fixes several issues with Signal messaging adapter implementation:

**E.164 Phone Number Validation (issue spacedriveapp#5)**
- Move is_valid_e164 to messaging::target module for reuse
- Add proper E.164 validation: first digit must be 1-9 (not 0)
- Enforce maximum 15 digits per E.164 standard
- Update normalize_signal_target to use shared validation
- Add test cases for +01234567 (invalid) and >15 digit numbers

**Validation Response Format (issue spacedriveapp#2)**
- Replace StatusCode::BAD_REQUEST with MessagingInstanceActionResponse
- Return user-friendly validation failures for missing signal_http_url
- Return user-friendly validation failures for missing signal_account
- Applied to both default and named instance creation paths

**dm_allowed_users Cleanup (issue spacedriveapp#3)**
- Remove old auto-added account from dm_allowed_users when account changes
- Prevent allowlist from growing indefinitely on account updates
- Only the new account remains in the authorized list

**Signal Platform Deletion Support (issue spacedriveapp#4)**
- Add 'signal' to delete_messaging_instance supported platforms
- Add Signal-specific credential cleanup in delete handler
- Enables proper deletion of Signal instances via API

**Adapter Name Matching (issue spacedriveapp#6)**
- Fix implicit Signal shorthand detection in send_message tool
- Change from starts_with('signal') to exact match or signal: prefix
- Prevents adapters like 'signal-alerts' from triggering Signal shorthand

Note: DOC_LINKS entry for signal docs (issue spacedriveapp#1) retained as-is per request

fix(api): add Signal to messaging status endpoint

Add Signal instance detection to messaging_status function:
- Read [messaging.signal] section for default instance
- Read [[messaging.signal.instances]] for named instances
- Push instance status to instances array when configured
- Requires both http_url and account fields to be considered configured

This fixes the issue where Signal instances were not appearing in the web UI.

fix(signal): align validation rules and add toggle_platform support

Frontend validation (ChannelSettingCard.tsx):
- Update E.164 regex to /^\+[1-9]\d{5,13}$/ for true E.164 compliance
- Enforce 7-15 digits total (6-14 after '+'), first digit 1-9
- Update error message and help text to reflect correct range

Backend validation (target.rs):
- Change is_valid_e164 to require 6-14 digits after '+' (7-15 total)
- normalize_signal_target: Reuse is_valid_e164() for bare digit validation
- parse_signal_target_parts: Add empty segment checks to all match arms
  - Reject empty uuid, group_id, phone, instance, or single segments
  - Prevents invalid targets like 'uuid:' or 'signal:work:'

API state (state.rs):
- Add signal_permissions field to ApiState
- Add set_signal_permissions() method for hot-reload support

toggle_platform (messaging.rs):
- Add Signal case to toggle_platform for runtime adapter start/stop
- Support both default and named Signal instances
- Update existing ArcSwap pointee instead of creating new one when permissions exist

send_message_to_another_channel:
- parse_implicit_signal_shorthand: Use is_valid_e164() for strict validation
- Add specific error messages for each validation failure case
- Add early error for ambiguous Signal adapter selection when multiple
  named instances exist without a default, preventing broadcast() failure
- Fix adapter resolution to distinguish default 'signal' from named adapters

Tests (messaging.rs):
- Update E.164 tests for 6-14 digit range (7-15 total)
ibhagwan added a commit to ibhagwan/spacebot that referenced this pull request Mar 21, 2026
- Add Signal to Platform type and PLATFORM_LABELS
- Add Signal credential form with http_url and account fields
- Add E.164 format validation in frontend
- Add Signal to available platforms list
- Add Signal icon mapping (using generic comment icon)
- Include placeholder documentation link

fix(messaging): resolve Signal adapter validation and consistency issues

Fixes several issues with Signal messaging adapter implementation:

**E.164 Phone Number Validation (issue spacedriveapp#5)**
- Move is_valid_e164 to messaging::target module for reuse
- Add proper E.164 validation: first digit must be 1-9 (not 0)
- Enforce maximum 15 digits per E.164 standard
- Update normalize_signal_target to use shared validation
- Add test cases for +01234567 (invalid) and >15 digit numbers

**Validation Response Format (issue spacedriveapp#2)**
- Replace StatusCode::BAD_REQUEST with MessagingInstanceActionResponse
- Return user-friendly validation failures for missing signal_http_url
- Return user-friendly validation failures for missing signal_account
- Applied to both default and named instance creation paths

**dm_allowed_users Cleanup (issue spacedriveapp#3)**
- Remove old auto-added account from dm_allowed_users when account changes
- Prevent allowlist from growing indefinitely on account updates
- Only the new account remains in the authorized list

**Signal Platform Deletion Support (issue spacedriveapp#4)**
- Add 'signal' to delete_messaging_instance supported platforms
- Add Signal-specific credential cleanup in delete handler
- Enables proper deletion of Signal instances via API

**Adapter Name Matching (issue spacedriveapp#6)**
- Fix implicit Signal shorthand detection in send_message tool
- Change from starts_with('signal') to exact match or signal: prefix
- Prevents adapters like 'signal-alerts' from triggering Signal shorthand

Note: DOC_LINKS entry for signal docs (issue spacedriveapp#1) retained as-is per request

fix(api): add Signal to messaging status endpoint

Add Signal instance detection to messaging_status function:
- Read [messaging.signal] section for default instance
- Read [[messaging.signal.instances]] for named instances
- Push instance status to instances array when configured
- Requires both http_url and account fields to be considered configured

This fixes the issue where Signal instances were not appearing in the web UI.

fix(signal): align validation rules and add toggle_platform support

Frontend validation (ChannelSettingCard.tsx):
- Update E.164 regex to /^\+[1-9]\d{5,13}$/ for true E.164 compliance
- Enforce 7-15 digits total (6-14 after '+'), first digit 1-9
- Update error message and help text to reflect correct range

Backend validation (target.rs):
- Change is_valid_e164 to require 6-14 digits after '+' (7-15 total)
- normalize_signal_target: Reuse is_valid_e164() for bare digit validation
- parse_signal_target_parts: Add empty segment checks to all match arms
  - Reject empty uuid, group_id, phone, instance, or single segments
  - Prevents invalid targets like 'uuid:' or 'signal:work:'

API state (state.rs):
- Add signal_permissions field to ApiState
- Add set_signal_permissions() method for hot-reload support

toggle_platform (messaging.rs):
- Add Signal case to toggle_platform for runtime adapter start/stop
- Support both default and named Signal instances
- Update existing ArcSwap pointee instead of creating new one when permissions exist

send_message_to_another_channel:
- parse_implicit_signal_shorthand: Use is_valid_e164() for strict validation
- Add specific error messages for each validation failure case
- Add early error for ambiguous Signal adapter selection when multiple
  named instances exist without a default, preventing broadcast() failure
- Fix adapter resolution to distinguish default 'signal' from named adapters

Tests (messaging.rs):
- Update E.164 tests for 6-14 digit range (7-15 total)
ibhagwan added a commit to ibhagwan/spacebot that referenced this pull request Mar 21, 2026
- Add Signal to Platform type and PLATFORM_LABELS
- Add Signal credential form with http_url and account fields
- Add E.164 format validation in frontend
- Add Signal to available platforms list
- Add Signal icon mapping (using generic comment icon)
- Include placeholder documentation link

fix(messaging): resolve Signal adapter validation and consistency issues

Fixes several issues with Signal messaging adapter implementation:

**E.164 Phone Number Validation (issue spacedriveapp#5)**
- Move is_valid_e164 to messaging::target module for reuse
- Add proper E.164 validation: first digit must be 1-9 (not 0)
- Enforce maximum 15 digits per E.164 standard
- Update normalize_signal_target to use shared validation
- Add test cases for +01234567 (invalid) and >15 digit numbers

**Validation Response Format (issue spacedriveapp#2)**
- Replace StatusCode::BAD_REQUEST with MessagingInstanceActionResponse
- Return user-friendly validation failures for missing signal_http_url
- Return user-friendly validation failures for missing signal_account
- Applied to both default and named instance creation paths

**dm_allowed_users Cleanup (issue spacedriveapp#3)**
- Remove old auto-added account from dm_allowed_users when account changes
- Prevent allowlist from growing indefinitely on account updates
- Only the new account remains in the authorized list

**Signal Platform Deletion Support (issue spacedriveapp#4)**
- Add 'signal' to delete_messaging_instance supported platforms
- Add Signal-specific credential cleanup in delete handler
- Enables proper deletion of Signal instances via API

**Adapter Name Matching (issue spacedriveapp#6)**
- Fix implicit Signal shorthand detection in send_message tool
- Change from starts_with('signal') to exact match or signal: prefix
- Prevents adapters like 'signal-alerts' from triggering Signal shorthand

Note: DOC_LINKS entry for signal docs (issue spacedriveapp#1) retained as-is per request

fix(api): add Signal to messaging status endpoint

Add Signal instance detection to messaging_status function:
- Read [messaging.signal] section for default instance
- Read [[messaging.signal.instances]] for named instances
- Push instance status to instances array when configured
- Requires both http_url and account fields to be considered configured

This fixes the issue where Signal instances were not appearing in the web UI.

fix(signal): align validation rules and add toggle_platform support

Frontend validation (ChannelSettingCard.tsx):
- Update E.164 regex to /^\+[1-9]\d{5,13}$/ for true E.164 compliance
- Enforce 7-15 digits total (6-14 after '+'), first digit 1-9
- Update error message and help text to reflect correct range

Backend validation (target.rs):
- Change is_valid_e164 to require 6-14 digits after '+' (7-15 total)
- normalize_signal_target: Reuse is_valid_e164() for bare digit validation
- parse_signal_target_parts: Add empty segment checks to all match arms
  - Reject empty uuid, group_id, phone, instance, or single segments
  - Prevents invalid targets like 'uuid:' or 'signal:work:'

API state (state.rs):
- Add signal_permissions field to ApiState
- Add set_signal_permissions() method for hot-reload support

toggle_platform (messaging.rs):
- Add Signal case to toggle_platform for runtime adapter start/stop
- Support both default and named Signal instances
- Update existing ArcSwap pointee instead of creating new one when permissions exist

send_message_to_another_channel:
- parse_implicit_signal_shorthand: Use is_valid_e164() for strict validation
- Add specific error messages for each validation failure case
- Add early error for ambiguous Signal adapter selection when multiple
  named instances exist without a default, preventing broadcast() failure
- Fix adapter resolution to distinguish default 'signal' from named adapters

Tests (messaging.rs):
- Update E.164 tests for 6-14 digit range (7-15 total)
ibhagwan added a commit to ibhagwan/spacebot that referenced this pull request Mar 21, 2026
- Add Signal to Platform type and PLATFORM_LABELS
- Add Signal credential form with http_url and account fields
- Add E.164 format validation in frontend
- Add Signal to available platforms list
- Add Signal icon mapping (using generic comment icon)
- Include placeholder documentation link

fix(messaging): resolve Signal adapter validation and consistency issues

Fixes several issues with Signal messaging adapter implementation:

**E.164 Phone Number Validation (issue spacedriveapp#5)**
- Move is_valid_e164 to messaging::target module for reuse
- Add proper E.164 validation: first digit must be 1-9 (not 0)
- Enforce maximum 15 digits per E.164 standard
- Update normalize_signal_target to use shared validation
- Add test cases for +01234567 (invalid) and >15 digit numbers

**Validation Response Format (issue spacedriveapp#2)**
- Replace StatusCode::BAD_REQUEST with MessagingInstanceActionResponse
- Return user-friendly validation failures for missing signal_http_url
- Return user-friendly validation failures for missing signal_account
- Applied to both default and named instance creation paths

**dm_allowed_users Cleanup (issue spacedriveapp#3)**
- Remove old auto-added account from dm_allowed_users when account changes
- Prevent allowlist from growing indefinitely on account updates
- Only the new account remains in the authorized list

**Signal Platform Deletion Support (issue spacedriveapp#4)**
- Add 'signal' to delete_messaging_instance supported platforms
- Add Signal-specific credential cleanup in delete handler
- Enables proper deletion of Signal instances via API

**Adapter Name Matching (issue spacedriveapp#6)**
- Fix implicit Signal shorthand detection in send_message tool
- Change from starts_with('signal') to exact match or signal: prefix
- Prevents adapters like 'signal-alerts' from triggering Signal shorthand

Note: DOC_LINKS entry for signal docs (issue spacedriveapp#1) retained as-is per request

fix(api): add Signal to messaging status endpoint

Add Signal instance detection to messaging_status function:
- Read [messaging.signal] section for default instance
- Read [[messaging.signal.instances]] for named instances
- Push instance status to instances array when configured
- Requires both http_url and account fields to be considered configured

This fixes the issue where Signal instances were not appearing in the web UI.

fix(signal): align validation rules and add toggle_platform support

Frontend validation (ChannelSettingCard.tsx):
- Update E.164 regex to /^\+[1-9]\d{5,13}$/ for true E.164 compliance
- Enforce 7-15 digits total (6-14 after '+'), first digit 1-9
- Update error message and help text to reflect correct range

Backend validation (target.rs):
- Change is_valid_e164 to require 6-14 digits after '+' (7-15 total)
- normalize_signal_target: Reuse is_valid_e164() for bare digit validation
- parse_signal_target_parts: Add empty segment checks to all match arms
  - Reject empty uuid, group_id, phone, instance, or single segments
  - Prevents invalid targets like 'uuid:' or 'signal:work:'

API state (state.rs):
- Add signal_permissions field to ApiState
- Add set_signal_permissions() method for hot-reload support

toggle_platform (messaging.rs):
- Add Signal case to toggle_platform for runtime adapter start/stop
- Support both default and named Signal instances
- Update existing ArcSwap pointee instead of creating new one when permissions exist

send_message_to_another_channel:
- parse_implicit_signal_shorthand: Use is_valid_e164() for strict validation
- Add specific error messages for each validation failure case
- Add early error for ambiguous Signal adapter selection when multiple
  named instances exist without a default, preventing broadcast() failure
- Fix adapter resolution to distinguish default 'signal' from named adapters

Tests (messaging.rs):
- Update E.164 tests for 6-14 digit range (7-15 total)
ibhagwan added a commit to ibhagwan/spacebot that referenced this pull request Mar 21, 2026
- Add Signal to Platform type and PLATFORM_LABELS
- Add Signal credential form with http_url and account fields
- Add E.164 format validation in frontend
- Add Signal to available platforms list
- Add Signal icon mapping (using generic comment icon)
- Include placeholder documentation link

fix(messaging): resolve Signal adapter validation and consistency issues

Fixes several issues with Signal messaging adapter implementation:

**E.164 Phone Number Validation (issue spacedriveapp#5)**
- Move is_valid_e164 to messaging::target module for reuse
- Add proper E.164 validation: first digit must be 1-9 (not 0)
- Enforce maximum 15 digits per E.164 standard
- Update normalize_signal_target to use shared validation
- Add test cases for +01234567 (invalid) and >15 digit numbers

**Validation Response Format (issue spacedriveapp#2)**
- Replace StatusCode::BAD_REQUEST with MessagingInstanceActionResponse
- Return user-friendly validation failures for missing signal_http_url
- Return user-friendly validation failures for missing signal_account
- Applied to both default and named instance creation paths

**dm_allowed_users Cleanup (issue spacedriveapp#3)**
- Remove old auto-added account from dm_allowed_users when account changes
- Prevent allowlist from growing indefinitely on account updates
- Only the new account remains in the authorized list

**Signal Platform Deletion Support (issue spacedriveapp#4)**
- Add 'signal' to delete_messaging_instance supported platforms
- Add Signal-specific credential cleanup in delete handler
- Enables proper deletion of Signal instances via API

**Adapter Name Matching (issue spacedriveapp#6)**
- Fix implicit Signal shorthand detection in send_message tool
- Change from starts_with('signal') to exact match or signal: prefix
- Prevents adapters like 'signal-alerts' from triggering Signal shorthand

Note: DOC_LINKS entry for signal docs (issue spacedriveapp#1) retained as-is per request

fix(api): add Signal to messaging status endpoint

Add Signal instance detection to messaging_status function:
- Read [messaging.signal] section for default instance
- Read [[messaging.signal.instances]] for named instances
- Push instance status to instances array when configured
- Requires both http_url and account fields to be considered configured

This fixes the issue where Signal instances were not appearing in the web UI.

fix(signal): align validation rules and add toggle_platform support

Frontend validation (ChannelSettingCard.tsx):
- Update E.164 regex to /^\+[1-9]\d{5,13}$/ for true E.164 compliance
- Enforce 7-15 digits total (6-14 after '+'), first digit 1-9
- Update error message and help text to reflect correct range

Backend validation (target.rs):
- Change is_valid_e164 to require 6-14 digits after '+' (7-15 total)
- normalize_signal_target: Reuse is_valid_e164() for bare digit validation
- parse_signal_target_parts: Add empty segment checks to all match arms
  - Reject empty uuid, group_id, phone, instance, or single segments
  - Prevents invalid targets like 'uuid:' or 'signal:work:'

API state (state.rs):
- Add signal_permissions field to ApiState
- Add set_signal_permissions() method for hot-reload support

toggle_platform (messaging.rs):
- Add Signal case to toggle_platform for runtime adapter start/stop
- Support both default and named Signal instances
- Update existing ArcSwap pointee instead of creating new one when permissions exist

send_message_to_another_channel:
- parse_implicit_signal_shorthand: Use is_valid_e164() for strict validation
- Add specific error messages for each validation failure case
- Add early error for ambiguous Signal adapter selection when multiple
  named instances exist without a default, preventing broadcast() failure
- Fix adapter resolution to distinguish default 'signal' from named adapters

Tests (messaging.rs):
- Update E.164 tests for 6-14 digit range (7-15 total)
ibhagwan added a commit to ibhagwan/spacebot that referenced this pull request Mar 21, 2026
- Add Signal to Platform type and PLATFORM_LABELS
- Add Signal credential form with http_url and account fields
- Add E.164 format validation in frontend
- Add Signal to available platforms list
- Add Signal icon mapping (using generic comment icon)
- Include placeholder documentation link

fix(messaging): resolve Signal adapter validation and consistency issues

Fixes several issues with Signal messaging adapter implementation:

**E.164 Phone Number Validation (issue spacedriveapp#5)**
- Move is_valid_e164 to messaging::target module for reuse
- Add proper E.164 validation: first digit must be 1-9 (not 0)
- Enforce maximum 15 digits per E.164 standard
- Update normalize_signal_target to use shared validation
- Add test cases for +01234567 (invalid) and >15 digit numbers

**Validation Response Format (issue spacedriveapp#2)**
- Replace StatusCode::BAD_REQUEST with MessagingInstanceActionResponse
- Return user-friendly validation failures for missing signal_http_url
- Return user-friendly validation failures for missing signal_account
- Applied to both default and named instance creation paths

**dm_allowed_users Cleanup (issue spacedriveapp#3)**
- Remove old auto-added account from dm_allowed_users when account changes
- Prevent allowlist from growing indefinitely on account updates
- Only the new account remains in the authorized list

**Signal Platform Deletion Support (issue spacedriveapp#4)**
- Add 'signal' to delete_messaging_instance supported platforms
- Add Signal-specific credential cleanup in delete handler
- Enables proper deletion of Signal instances via API

**Adapter Name Matching (issue spacedriveapp#6)**
- Fix implicit Signal shorthand detection in send_message tool
- Change from starts_with('signal') to exact match or signal: prefix
- Prevents adapters like 'signal-alerts' from triggering Signal shorthand

Note: DOC_LINKS entry for signal docs (issue spacedriveapp#1) retained as-is per request

fix(api): add Signal to messaging status endpoint

Add Signal instance detection to messaging_status function:
- Read [messaging.signal] section for default instance
- Read [[messaging.signal.instances]] for named instances
- Push instance status to instances array when configured
- Requires both http_url and account fields to be considered configured

This fixes the issue where Signal instances were not appearing in the web UI.

fix(signal): align validation rules and add toggle_platform support

Frontend validation (ChannelSettingCard.tsx):
- Update E.164 regex to /^\+[1-9]\d{5,13}$/ for true E.164 compliance
- Enforce 7-15 digits total (6-14 after '+'), first digit 1-9
- Update error message and help text to reflect correct range

Backend validation (target.rs):
- Change is_valid_e164 to require 6-14 digits after '+' (7-15 total)
- normalize_signal_target: Reuse is_valid_e164() for bare digit validation
- parse_signal_target_parts: Add empty segment checks to all match arms
  - Reject empty uuid, group_id, phone, instance, or single segments
  - Prevents invalid targets like 'uuid:' or 'signal:work:'

API state (state.rs):
- Add signal_permissions field to ApiState
- Add set_signal_permissions() method for hot-reload support

toggle_platform (messaging.rs):
- Add Signal case to toggle_platform for runtime adapter start/stop
- Support both default and named Signal instances
- Update existing ArcSwap pointee instead of creating new one when permissions exist

send_message_to_another_channel:
- parse_implicit_signal_shorthand: Use is_valid_e164() for strict validation
- Add specific error messages for each validation failure case
- Add early error for ambiguous Signal adapter selection when multiple
  named instances exist without a default, preventing broadcast() failure
- Fix adapter resolution to distinguish default 'signal' from named adapters

Tests (messaging.rs):
- Update E.164 tests for 6-14 digit range (7-15 total)
ibhagwan added a commit to ibhagwan/spacebot that referenced this pull request Mar 21, 2026
- Add Signal to Platform type and PLATFORM_LABELS
- Add Signal credential form with http_url and account fields
- Add E.164 format validation in frontend
- Add Signal to available platforms list
- Add Signal icon mapping (using generic comment icon)
- Include placeholder documentation link

fix(messaging): resolve Signal adapter validation and consistency issues

Fixes several issues with Signal messaging adapter implementation:

**E.164 Phone Number Validation (issue spacedriveapp#5)**
- Move is_valid_e164 to messaging::target module for reuse
- Add proper E.164 validation: first digit must be 1-9 (not 0)
- Enforce maximum 15 digits per E.164 standard
- Update normalize_signal_target to use shared validation
- Add test cases for +01234567 (invalid) and >15 digit numbers

**Validation Response Format (issue spacedriveapp#2)**
- Replace StatusCode::BAD_REQUEST with MessagingInstanceActionResponse
- Return user-friendly validation failures for missing signal_http_url
- Return user-friendly validation failures for missing signal_account
- Applied to both default and named instance creation paths

**dm_allowed_users Cleanup (issue spacedriveapp#3)**
- Remove old auto-added account from dm_allowed_users when account changes
- Prevent allowlist from growing indefinitely on account updates
- Only the new account remains in the authorized list

**Signal Platform Deletion Support (issue spacedriveapp#4)**
- Add 'signal' to delete_messaging_instance supported platforms
- Add Signal-specific credential cleanup in delete handler
- Enables proper deletion of Signal instances via API

**Adapter Name Matching (issue spacedriveapp#6)**
- Fix implicit Signal shorthand detection in send_message tool
- Change from starts_with('signal') to exact match or signal: prefix
- Prevents adapters like 'signal-alerts' from triggering Signal shorthand

Note: DOC_LINKS entry for signal docs (issue spacedriveapp#1) retained as-is per request

fix(api): add Signal to messaging status endpoint

Add Signal instance detection to messaging_status function:
- Read [messaging.signal] section for default instance
- Read [[messaging.signal.instances]] for named instances
- Push instance status to instances array when configured
- Requires both http_url and account fields to be considered configured

This fixes the issue where Signal instances were not appearing in the web UI.

fix(signal): align validation rules and add toggle_platform support

Frontend validation (ChannelSettingCard.tsx):
- Update E.164 regex to /^\+[1-9]\d{5,13}$/ for true E.164 compliance
- Enforce 7-15 digits total (6-14 after '+'), first digit 1-9
- Update error message and help text to reflect correct range

Backend validation (target.rs):
- Change is_valid_e164 to require 6-14 digits after '+' (7-15 total)
- normalize_signal_target: Reuse is_valid_e164() for bare digit validation
- parse_signal_target_parts: Add empty segment checks to all match arms
  - Reject empty uuid, group_id, phone, instance, or single segments
  - Prevents invalid targets like 'uuid:' or 'signal:work:'

API state (state.rs):
- Add signal_permissions field to ApiState
- Add set_signal_permissions() method for hot-reload support

toggle_platform (messaging.rs):
- Add Signal case to toggle_platform for runtime adapter start/stop
- Support both default and named Signal instances
- Update existing ArcSwap pointee instead of creating new one when permissions exist

send_message_to_another_channel:
- parse_implicit_signal_shorthand: Use is_valid_e164() for strict validation
- Add specific error messages for each validation failure case
- Add early error for ambiguous Signal adapter selection when multiple
  named instances exist without a default, preventing broadcast() failure
- Fix adapter resolution to distinguish default 'signal' from named adapters

Tests (messaging.rs):
- Update E.164 tests for 6-14 digit range (7-15 total)
ibhagwan added a commit to ibhagwan/spacebot that referenced this pull request Mar 21, 2026
- Add Signal to Platform type and PLATFORM_LABELS
- Add Signal credential form with http_url and account fields
- Add E.164 format validation in frontend
- Add Signal to available platforms list
- Add Signal icon mapping (using generic comment icon)
- Include placeholder documentation link

fix(messaging): resolve Signal adapter validation and consistency issues

Fixes several issues with Signal messaging adapter implementation:

**E.164 Phone Number Validation (issue spacedriveapp#5)**
- Move is_valid_e164 to messaging::target module for reuse
- Add proper E.164 validation: first digit must be 1-9 (not 0)
- Enforce maximum 15 digits per E.164 standard
- Update normalize_signal_target to use shared validation
- Add test cases for +01234567 (invalid) and >15 digit numbers

**Validation Response Format (issue spacedriveapp#2)**
- Replace StatusCode::BAD_REQUEST with MessagingInstanceActionResponse
- Return user-friendly validation failures for missing signal_http_url
- Return user-friendly validation failures for missing signal_account
- Applied to both default and named instance creation paths

**dm_allowed_users Cleanup (issue spacedriveapp#3)**
- Remove old auto-added account from dm_allowed_users when account changes
- Prevent allowlist from growing indefinitely on account updates
- Only the new account remains in the authorized list

**Signal Platform Deletion Support (issue spacedriveapp#4)**
- Add 'signal' to delete_messaging_instance supported platforms
- Add Signal-specific credential cleanup in delete handler
- Enables proper deletion of Signal instances via API

**Adapter Name Matching (issue spacedriveapp#6)**
- Fix implicit Signal shorthand detection in send_message tool
- Change from starts_with('signal') to exact match or signal: prefix
- Prevents adapters like 'signal-alerts' from triggering Signal shorthand

Note: DOC_LINKS entry for signal docs (issue spacedriveapp#1) retained as-is per request

fix(api): add Signal to messaging status endpoint

Add Signal instance detection to messaging_status function:
- Read [messaging.signal] section for default instance
- Read [[messaging.signal.instances]] for named instances
- Push instance status to instances array when configured
- Requires both http_url and account fields to be considered configured

This fixes the issue where Signal instances were not appearing in the web UI.

fix(signal): align validation rules and add toggle_platform support

Frontend validation (ChannelSettingCard.tsx):
- Update E.164 regex to /^\+[1-9]\d{5,13}$/ for true E.164 compliance
- Enforce 7-15 digits total (6-14 after '+'), first digit 1-9
- Update error message and help text to reflect correct range

Backend validation (target.rs):
- Change is_valid_e164 to require 6-14 digits after '+' (7-15 total)
- normalize_signal_target: Reuse is_valid_e164() for bare digit validation
- parse_signal_target_parts: Add empty segment checks to all match arms
  - Reject empty uuid, group_id, phone, instance, or single segments
  - Prevents invalid targets like 'uuid:' or 'signal:work:'

API state (state.rs):
- Add signal_permissions field to ApiState
- Add set_signal_permissions() method for hot-reload support

toggle_platform (messaging.rs):
- Add Signal case to toggle_platform for runtime adapter start/stop
- Support both default and named Signal instances
- Update existing ArcSwap pointee instead of creating new one when permissions exist

send_message_to_another_channel:
- parse_implicit_signal_shorthand: Use is_valid_e164() for strict validation
- Add specific error messages for each validation failure case
- Add early error for ambiguous Signal adapter selection when multiple
  named instances exist without a default, preventing broadcast() failure
- Fix adapter resolution to distinguish default 'signal' from named adapters

Tests (messaging.rs):
- Update E.164 tests for 6-14 digit range (7-15 total)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants