Claim in-flight IM turns before ownership flips active so approvals no longer stick only in DSH Web, auto-recover stale session models once, and let WhatsApp bots pick a shared default model for new sessions.
Co-authored-by: Cursor <cursoragent@cursor.com>
Map PI_AI_ERROR/UNKNOWN/TLS wording and Host RPC internals so WhatsApp shows an actionable code, and treat missing sessions as recreateable.
Co-authored-by: Cursor <cursoragent@cursor.com>
connection.rpc.handle looks up webServer on a Cordis fiber that does not inject it, so channel routes never registered after host restart.
Co-authored-by: Cursor <cursoragent@cursor.com>
Send the probe to the bound private-chat target, falling back to Message Yourself via live LID so Baileys no longer reports success while the phone never receives it.
Co-authored-by: Cursor <cursoragent@cursor.com>
Require trusted loopback requests for proactive send, accept hyphenated WhatsApp group JIDs, and serialize access-grant mutations to avoid lost concurrent updates.
Co-authored-by: Cursor <cursoragent@cursor.com>
Surface chat/access-list contacts as selectable targets with clearer nicknames, and keep conversation peers usable for ops schedulers.
Co-authored-by: Cursor <cursoragent@cursor.com>
Plugins inject conversation.session.header.actions; resolve sessionId back to the bound chat and render nickname/phone or group title.
Co-authored-by: Cursor <cursoragent@cursor.com>
Access grants can pin an agentPreset on direct members and groups; new sessions resolve override over the bot-global preset.
Co-authored-by: Cursor <cursoragent@cursor.com>
Use a shared three-column grid for admin/member rows, and inherit DSH color-scheme so channel/command dropdowns stay readable.
Co-authored-by: Cursor <cursoragent@cursor.com>
Use flex-wrap rows so phone, command, and delete stay tight and soft-wrap only when the panel is too narrow.
Co-authored-by: Cursor <cursoragent@cursor.com>
Refresh missing/forced group titles via groupMetadata and participating catalog so cards show real names instead of bare JIDs.
Co-authored-by: Cursor <cursoragent@cursor.com>
Fetch groupMetadata.subject on @mentions for group cards; render contact pushName under phone rows so admins are not staring at bare numbers.
Co-authored-by: Cursor <cursoragent@cursor.com>
Suggestions only open while focused and hide exact matches; nested group admins/members drop extra frames; pending and actions show group names.
Co-authored-by: Cursor <cursoragent@cursor.com>
Settings button only forwarded accessPolicy, so the graded ACL page always opened empty; also refresh grant from connection.status on mount.
Co-authored-by: Cursor <cursoragent@cursor.com>
Client normalizeBot dropped accessGrant/groupSessionScope, so pending, contacts, and group cards never appeared. Also record contacts only on DM/@, auto-create group buckets on @, and add one-click grant buttons.
Co-authored-by: Cursor <cursoragent@cursor.com>
Row keys included the phone value, so each character remounted the input; also sync draft from serialized grant content, not object identity.
Co-authored-by: Cursor <cursoragent@cursor.com>
Mention triggers leave opaque LID digits in the body; remove those only,
without injecting sender identity (use context enhancement when needed).
Co-authored-by: Cursor <cursoragent@cursor.com>
Resolve LID to phone aliases before allowlist and @mention checks so
group prompts are not silently dropped after a working direct chat.
Co-authored-by: Cursor <cursoragent@cursor.com>
Ops bots now isolate per-speaker Harness sessions in groups, with a
settings/RPC toggle to restore shared chat sessions when needed.
Co-authored-by: Cursor <cursoragent@cursor.com>
GitHub installs still shipped the upstream @xmanrui/dsh-im client id, so the web shell loaded the bundle without registering the plugin.
Co-authored-by: Cursor <cursoragent@cursor.com>
Support current DSH Session.snapshotEvents while retaining the legacy session.events and apiProxy paths. Add regression coverage and record the nine-channel rollout and live verification for issue #70.
Resolve the current main conflict, treat reply timeouts as inactivity windows, and confirm liveness through Harness instead of sticky interaction ownership.
Add chatId and threadId source fields across all nine IM channels, update UI/docs/tests, reconcile the latest main branch, and credit @Chan-0312 as a contributor.