This repository was archived by the owner on Mar 26, 2026. It is now read-only.
Conversation
…-setup.sh Aligns scripts with CLAUDE.md docs (PR #290). MCP server name changed from boss-dev to odis-dev in the generated JSON config, allowed tools list, and output messages. BOSS_API_TOKEN/BOSS_MCP_URL env vars kept as fallbacks for backward compatibility (prefer ODIS_API_TOKEN/ODIS_MCP_URL going forward). Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
…our Conversations Root cause: both 'boss' (legacy) and 'operator' agents have agent_type='human' in the DB. operatorName computed returned whichever was found first via Object.entries, which is insertion-order. In spaces where 'boss' was created first, operatorName='boss'. Consequences when operatorName='boss' but messages use 'operator': - Conversations with 'operator' participant went to Agent Conversations section - composeRecipient was null for those conversations (no compose box shown) - Unread acks used wrong agent name Fix: collect ALL human agents into humanAgentNames Set. Use it for: - isOperatorConversation: any participant that is a human agent - composeRecipient: any participant that is NOT a human agent - unreadCount / ackOperatorMessages: any human-agent recipient - operatorName: prefer 'operator' (canonical) over legacy 'boss' Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…tion threads When agents use different capitalizations (e.g. "CEO" vs "ceo"), messages were stored with the raw sender name, creating separate conversation threads in the UI for what should be a single conversation. Both handleAgentMessage (HTTP) and send_message (MCP tool) now call resolveAgentName on the sender after the space is loaded, mapping to the canonical stored name if the sender is a known agent. Unknown senders keep their original name unchanged. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
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 subscribe to this conversation on GitHub.
Already have an account?
Sign in.
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.
Root Cause
Both
'boss'(legacy) and'operator'agents haveagent_type='human'in the DB. TheoperatorNamecomputed returned whichever was found first viaObject.entries, which follows insertion order. In spaces where'boss'was created first,operatorName='boss'.Bug consequences when
operatorName='boss'but messages carry sender'operator':'operator'as participant appear under Agent Conversations (not Your Conversations)composeRecipientisnullfor those conversations → no compose box shown → operator cannot send messagesFix
Collect ALL
agent_type='human'agents into ahumanAgentNamesSet (instead of picking just one). Use that Set consistently:isOperatorConversationparticipants.includes(operatorName)participants.some(p => humanAgentNames.has(p))composeRecipient!participants.includes(operatorName)!participants.some(p => humanAgentNames.has(p))unreadCountrecipient === operatorNamehumanAgentNames.has(recipient)ackOperatorMessagesoperatorNameas ack targetmsg.recipientoperatorNameitself'operator'; fall back to first human then'operator'Test Plan
bossandoperatoragentsoperatorinboxFrontend TypeScript build: ✓ clean (vue-tsc -b + vite build)
🤖 Generated with Claude Code