Add OpenCode Zen provider support#2
Merged
Conversation
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)
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
No description provided.