feat: agent-to-agent communication, dynamic agent creation, self-modification tools
Agent-to-agent: host routes messages with channel_type='agent' to target agent's inbound.db, enriches with sender info, wakes target container. Bidirectional routing works via inherited routing context. Dynamic agents: create_agent MCP tool + system action handler creates agent groups, folders, and optional CLAUDE.md on the fly. Self-modification: install_packages (apt/npm, requires admin approval), add_mcp_server (no approval), request_rebuild (builds per-agent-group Docker image with approved packages). Approval flow reuses interactive card infrastructure with pending_approvals table. Also includes fixes from prior session: attachment download, reply context extraction, message editing (platform message ID tracking), delivery retry limits, and card update on button click. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -54,8 +54,9 @@ function createMockAdapter(
|
||||
return setupConfig !== null;
|
||||
},
|
||||
|
||||
async deliver(_platformId: string, _threadId: string | null, message: OutboundMessage) {
|
||||
async deliver(_platformId: string, _threadId: string | null, message: OutboundMessage): Promise<string | undefined> {
|
||||
delivered.push(message);
|
||||
return undefined;
|
||||
},
|
||||
|
||||
async setTyping() {},
|
||||
@@ -213,8 +214,8 @@ describe('channel + router integration', () => {
|
||||
setDeliveryAdapter({
|
||||
async deliver(channelType, platformId, threadId, kind, content) {
|
||||
const adapter = getChannelAdapter(channelType);
|
||||
if (!adapter) return;
|
||||
await adapter.deliver(platformId, threadId, { kind, content: JSON.parse(content) });
|
||||
if (!adapter) return undefined;
|
||||
return adapter.deliver(platformId, threadId, { kind, content: JSON.parse(content) });
|
||||
},
|
||||
});
|
||||
|
||||
|
||||
Reference in New Issue
Block a user