Replace sendChatCmd("/_create member contact ...") and sendChatCmd("/_invite member contact ...")
with the typed API methods added in simplex-chat-nodejs. Update plans and build script accordingly.
Complete rewrite of the support bot to stateless architecture:
- State derived from group composition + chat history (survives restarts)
- Card dashboard in team group with live status, preview, /join commands
- Two-profile architecture (main + Grok) with profileMutex serialization
- Grok join race condition fix via bufferedGrokInvitations
- Card preview: newest-first truncation, newline sanitization, sender prefixes
- Best-effort startup (invite link, group profile update)
- Team group preferences: directMessages, fullDelete, commands
- 122 tests across 27 suites
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Group preferences applied once at creation, not on every startup
- /join restricted to team group only
- Team/Grok reply or reaction auto-completes conversation (✅)
- Customer message reverts to incomplete
- Card updates debounced globally with 15-minute batch flush
* simplex-chat-nodejs: add apiCreateMemberContact and apiSendMemberContactInvitation
* simplex-chat-nodejs: add integration test for apiCreateMemberContact and apiSendMemberContactInvitation
Test creates a 3-user group with direct messages enabled, then verifies:
- apiCreateMemberContact creates a DM contact between group members
- apiSendMemberContactInvitation sends an invitation that the recipient receives
* simplex-chat-nodejs: bump @simplex-chat/types to ^0.4.0
The @simplex-chat/types package (auto-generated from Haskell types) added
a required `userChatRelay: boolean` field to the NewUser interface, but
apiCreateActiveUser was never updated to pass it, causing a TypeScript
compilation error.
Set userChatRelay to false, which preserves the pre-existing behavior
(no chat relay provisioned for the new user profile).
Complete rewrite of the support bot to stateless architecture:
- State derived from group composition + chat history (survives restarts)
- Card dashboard in team group with live status, preview, /join commands
- Two-profile architecture (main + Grok) with profileMutex serialization
- Grok join race condition fix via bufferedGrokInvitations
- Card preview: newest-first truncation, newline sanitization, sender prefixes
- Best-effort startup (invite link, group profile update)
- Team group preferences: directMessages, fullDelete, commands
- 122 tests across 27 suites
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Group preferences applied once at creation, not on every startup
- /join restricted to team group only
- Team/Grok reply or reaction auto-completes conversation (✅)
- Customer message reverts to incomplete
- Card updates debounced globally with 15-minute batch flush