agent-world 0.11.1 → 0.12.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +17 -7
- package/dist/cli/commands.d.ts +109 -0
- package/dist/cli/commands.js +2024 -0
- package/dist/cli/display.d.ts +124 -0
- package/dist/cli/display.js +381 -0
- package/dist/cli/hitl.d.ts +33 -0
- package/dist/cli/hitl.js +81 -0
- package/dist/cli/index.d.ts +2 -0
- package/dist/cli/stream.d.ts +41 -0
- package/dist/cli/stream.js +222 -0
- package/dist/core/activity-tracker.d.ts +16 -0
- package/dist/core/activity-tracker.d.ts.map +1 -0
- package/dist/core/activity-tracker.js +91 -0
- package/dist/core/activity-tracker.js.map +1 -0
- package/dist/core/ai-commands.d.ts +16 -0
- package/dist/core/ai-commands.d.ts.map +1 -0
- package/dist/core/ai-commands.js +24 -0
- package/dist/core/ai-commands.js.map +1 -0
- package/dist/core/ai-sdk-patch.d.ts +24 -0
- package/dist/core/ai-sdk-patch.d.ts.map +1 -0
- package/dist/core/ai-sdk-patch.js +169 -0
- package/dist/core/ai-sdk-patch.js.map +1 -0
- package/dist/core/anthropic-direct.d.ts +52 -0
- package/dist/core/anthropic-direct.d.ts.map +1 -0
- package/dist/core/anthropic-direct.js +301 -0
- package/dist/core/anthropic-direct.js.map +1 -0
- package/dist/core/approval-cache.d.ts +104 -0
- package/dist/core/approval-cache.d.ts.map +1 -0
- package/dist/core/approval-cache.js +150 -0
- package/dist/core/approval-cache.js.map +1 -0
- package/dist/core/chat-constants.d.ts +20 -0
- package/dist/core/chat-constants.d.ts.map +1 -0
- package/dist/core/chat-constants.js +22 -0
- package/dist/core/chat-constants.js.map +1 -0
- package/dist/core/create-agent-tool.d.ts +66 -0
- package/dist/core/create-agent-tool.d.ts.map +1 -0
- package/dist/core/create-agent-tool.js +212 -0
- package/dist/core/create-agent-tool.js.map +1 -0
- package/dist/core/events/approval-checker.d.ts +61 -0
- package/dist/core/events/approval-checker.d.ts.map +1 -0
- package/dist/core/events/approval-checker.js +226 -0
- package/dist/core/events/approval-checker.js.map +1 -0
- package/dist/core/events/index.d.ts +25 -0
- package/dist/core/events/index.d.ts.map +1 -0
- package/dist/core/events/index.js +30 -0
- package/dist/core/events/index.js.map +1 -0
- package/dist/core/events/memory-manager.d.ts +73 -0
- package/dist/core/events/memory-manager.d.ts.map +1 -0
- package/dist/core/events/memory-manager.js +1218 -0
- package/dist/core/events/memory-manager.js.map +1 -0
- package/dist/core/events/mention-logic.d.ts +39 -0
- package/dist/core/events/mention-logic.d.ts.map +1 -0
- package/dist/core/events/mention-logic.js +163 -0
- package/dist/core/events/mention-logic.js.map +1 -0
- package/dist/core/events/orchestrator.d.ts +69 -0
- package/dist/core/events/orchestrator.d.ts.map +1 -0
- package/dist/core/events/orchestrator.js +883 -0
- package/dist/core/events/orchestrator.js.map +1 -0
- package/dist/core/events/persistence.d.ts +41 -0
- package/dist/core/events/persistence.d.ts.map +1 -0
- package/dist/core/events/persistence.js +296 -0
- package/dist/core/events/persistence.js.map +1 -0
- package/dist/core/events/publishers.d.ts +81 -0
- package/dist/core/events/publishers.d.ts.map +1 -0
- package/dist/core/events/publishers.js +272 -0
- package/dist/core/events/publishers.js.map +1 -0
- package/dist/core/events/subscribers.d.ts +45 -0
- package/dist/core/events/subscribers.d.ts.map +1 -0
- package/dist/core/events/subscribers.js +288 -0
- package/dist/core/events/subscribers.js.map +1 -0
- package/dist/core/events/tool-bridge-logging.d.ts +28 -0
- package/dist/core/events/tool-bridge-logging.d.ts.map +1 -0
- package/dist/core/events/tool-bridge-logging.js +94 -0
- package/dist/core/events/tool-bridge-logging.js.map +1 -0
- package/dist/core/events-metadata.d.ts +72 -0
- package/dist/core/events-metadata.d.ts.map +1 -0
- package/dist/core/events-metadata.js +167 -0
- package/dist/core/events-metadata.js.map +1 -0
- package/dist/core/events.d.ts +186 -0
- package/dist/core/events.d.ts.map +1 -0
- package/dist/core/events.js +1248 -0
- package/dist/core/events.js.map +1 -0
- package/dist/core/export.d.ts +106 -0
- package/dist/core/export.d.ts.map +1 -0
- package/dist/core/export.js +705 -0
- package/dist/core/export.js.map +1 -0
- package/dist/core/file-tools.d.ts +114 -0
- package/dist/core/file-tools.d.ts.map +1 -0
- package/dist/core/file-tools.js +370 -0
- package/dist/core/file-tools.js.map +1 -0
- package/dist/core/google-direct.d.ts +58 -0
- package/dist/core/google-direct.d.ts.map +1 -0
- package/dist/core/google-direct.js +298 -0
- package/dist/core/google-direct.js.map +1 -0
- package/dist/core/hitl.d.ts +54 -0
- package/dist/core/hitl.d.ts.map +1 -0
- package/dist/core/hitl.js +153 -0
- package/dist/core/hitl.js.map +1 -0
- package/dist/core/index.d.ts +59 -0
- package/dist/core/index.d.ts.map +1 -0
- package/dist/core/index.js +70 -0
- package/dist/core/index.js.map +1 -0
- package/dist/core/llm-config.d.ts +128 -0
- package/dist/core/llm-config.d.ts.map +1 -0
- package/dist/core/llm-config.js +164 -0
- package/dist/core/llm-config.js.map +1 -0
- package/dist/core/llm-manager.d.ts +163 -0
- package/dist/core/llm-manager.d.ts.map +1 -0
- package/dist/core/llm-manager.js +669 -0
- package/dist/core/llm-manager.js.map +1 -0
- package/dist/core/load-skill-tool.d.ts +55 -0
- package/dist/core/load-skill-tool.d.ts.map +1 -0
- package/dist/core/load-skill-tool.js +468 -0
- package/dist/core/load-skill-tool.js.map +1 -0
- package/dist/core/logger.d.ts +88 -0
- package/dist/core/logger.d.ts.map +1 -0
- package/dist/core/logger.js +358 -0
- package/dist/core/logger.js.map +1 -0
- package/dist/core/managers.d.ts +131 -0
- package/dist/core/managers.d.ts.map +1 -0
- package/dist/core/managers.js +1223 -0
- package/dist/core/managers.js.map +1 -0
- package/dist/core/mcp-server-registry.d.ts +304 -0
- package/dist/core/mcp-server-registry.d.ts.map +1 -0
- package/dist/core/mcp-server-registry.js +1769 -0
- package/dist/core/mcp-server-registry.js.map +1 -0
- package/dist/core/mcp-tools.d.ts +56 -0
- package/dist/core/mcp-tools.d.ts.map +1 -0
- package/dist/core/mcp-tools.js +186 -0
- package/dist/core/mcp-tools.js.map +1 -0
- package/dist/core/message-prep.d.ts +81 -0
- package/dist/core/message-prep.d.ts.map +1 -0
- package/dist/core/message-prep.js +223 -0
- package/dist/core/message-prep.js.map +1 -0
- package/dist/core/message-processing-control.d.ts +54 -0
- package/dist/core/message-processing-control.d.ts.map +1 -0
- package/dist/core/message-processing-control.js +139 -0
- package/dist/core/message-processing-control.js.map +1 -0
- package/dist/core/openai-direct.d.ts +80 -0
- package/dist/core/openai-direct.d.ts.map +1 -0
- package/dist/core/openai-direct.js +374 -0
- package/dist/core/openai-direct.js.map +1 -0
- package/dist/core/shell-cmd-tool.d.ts +235 -0
- package/dist/core/shell-cmd-tool.d.ts.map +1 -0
- package/dist/core/shell-cmd-tool.js +1157 -0
- package/dist/core/shell-cmd-tool.js.map +1 -0
- package/dist/core/shell-process-registry.d.ts +88 -0
- package/dist/core/shell-process-registry.d.ts.map +1 -0
- package/dist/core/shell-process-registry.js +309 -0
- package/dist/core/shell-process-registry.js.map +1 -0
- package/dist/core/skill-registry.d.ts +75 -0
- package/dist/core/skill-registry.d.ts.map +1 -0
- package/dist/core/skill-registry.js +369 -0
- package/dist/core/skill-registry.js.map +1 -0
- package/dist/core/skill-script-runner.d.ts +89 -0
- package/dist/core/skill-script-runner.d.ts.map +1 -0
- package/dist/core/skill-script-runner.js +274 -0
- package/dist/core/skill-script-runner.js.map +1 -0
- package/dist/core/skill-selector.d.ts +65 -0
- package/dist/core/skill-selector.d.ts.map +1 -0
- package/dist/core/skill-selector.js +190 -0
- package/dist/core/skill-selector.js.map +1 -0
- package/dist/core/skill-settings.d.ts +20 -0
- package/dist/core/skill-settings.d.ts.map +1 -0
- package/dist/core/skill-settings.js +40 -0
- package/dist/core/skill-settings.js.map +1 -0
- package/dist/core/storage/agent-storage.d.ts +134 -0
- package/dist/core/storage/agent-storage.d.ts.map +1 -0
- package/dist/core/storage/agent-storage.js +498 -0
- package/dist/core/storage/agent-storage.js.map +1 -0
- package/dist/core/storage/eventStorage/fileEventStorage.d.ts +100 -0
- package/dist/core/storage/eventStorage/fileEventStorage.d.ts.map +1 -0
- package/dist/core/storage/eventStorage/fileEventStorage.js +494 -0
- package/dist/core/storage/eventStorage/fileEventStorage.js.map +1 -0
- package/dist/core/storage/eventStorage/index.d.ts +31 -0
- package/dist/core/storage/eventStorage/index.d.ts.map +1 -0
- package/dist/core/storage/eventStorage/index.js +31 -0
- package/dist/core/storage/eventStorage/index.js.map +1 -0
- package/dist/core/storage/eventStorage/memoryEventStorage.d.ts +87 -0
- package/dist/core/storage/eventStorage/memoryEventStorage.d.ts.map +1 -0
- package/dist/core/storage/eventStorage/memoryEventStorage.js +244 -0
- package/dist/core/storage/eventStorage/memoryEventStorage.js.map +1 -0
- package/dist/core/storage/eventStorage/sqliteEventStorage.d.ts +45 -0
- package/dist/core/storage/eventStorage/sqliteEventStorage.d.ts.map +1 -0
- package/dist/core/storage/eventStorage/sqliteEventStorage.js +301 -0
- package/dist/core/storage/eventStorage/sqliteEventStorage.js.map +1 -0
- package/dist/core/storage/eventStorage/types.d.ts +142 -0
- package/dist/core/storage/eventStorage/types.d.ts.map +1 -0
- package/dist/core/storage/eventStorage/types.js +43 -0
- package/dist/core/storage/eventStorage/types.js.map +1 -0
- package/dist/core/storage/eventStorage/validation.d.ts +30 -0
- package/dist/core/storage/eventStorage/validation.d.ts.map +1 -0
- package/dist/core/storage/eventStorage/validation.js +68 -0
- package/dist/core/storage/eventStorage/validation.js.map +1 -0
- package/dist/core/storage/legacy-migrations.d.ts +45 -0
- package/dist/core/storage/legacy-migrations.d.ts.map +1 -0
- package/dist/core/storage/legacy-migrations.js +295 -0
- package/dist/core/storage/legacy-migrations.js.map +1 -0
- package/dist/core/storage/memory-storage.d.ts +105 -0
- package/dist/core/storage/memory-storage.d.ts.map +1 -0
- package/dist/core/storage/memory-storage.js +415 -0
- package/dist/core/storage/memory-storage.js.map +1 -0
- package/dist/core/storage/migration-runner.d.ts +96 -0
- package/dist/core/storage/migration-runner.d.ts.map +1 -0
- package/dist/core/storage/migration-runner.js +306 -0
- package/dist/core/storage/migration-runner.js.map +1 -0
- package/dist/core/storage/queue-storage.d.ts +147 -0
- package/dist/core/storage/queue-storage.d.ts.map +1 -0
- package/dist/core/storage/queue-storage.js +290 -0
- package/dist/core/storage/queue-storage.js.map +1 -0
- package/dist/core/storage/skill-storage.d.ts +136 -0
- package/dist/core/storage/skill-storage.d.ts.map +1 -0
- package/dist/core/storage/skill-storage.js +474 -0
- package/dist/core/storage/skill-storage.js.map +1 -0
- package/dist/core/storage/sqlite-schema.d.ts +95 -0
- package/dist/core/storage/sqlite-schema.d.ts.map +1 -0
- package/dist/core/storage/sqlite-schema.js +156 -0
- package/dist/core/storage/sqlite-schema.js.map +1 -0
- package/dist/core/storage/sqlite-storage.d.ts +146 -0
- package/dist/core/storage/sqlite-storage.d.ts.map +1 -0
- package/dist/core/storage/sqlite-storage.js +709 -0
- package/dist/core/storage/sqlite-storage.js.map +1 -0
- package/dist/core/storage/storage-factory.d.ts +61 -0
- package/dist/core/storage/storage-factory.d.ts.map +1 -0
- package/dist/core/storage/storage-factory.js +794 -0
- package/dist/core/storage/storage-factory.js.map +1 -0
- package/dist/core/storage/validation.d.ts +36 -0
- package/dist/core/storage/validation.d.ts.map +1 -0
- package/dist/core/storage/validation.js +79 -0
- package/dist/core/storage/validation.js.map +1 -0
- package/dist/core/storage/world-storage.d.ts +114 -0
- package/dist/core/storage/world-storage.d.ts.map +1 -0
- package/dist/core/storage/world-storage.js +378 -0
- package/dist/core/storage/world-storage.js.map +1 -0
- package/dist/core/subscription.d.ts +43 -0
- package/dist/core/subscription.d.ts.map +1 -0
- package/dist/core/subscription.js +227 -0
- package/dist/core/subscription.js.map +1 -0
- package/dist/core/tool-utils.d.ts +80 -0
- package/dist/core/tool-utils.d.ts.map +1 -0
- package/dist/core/tool-utils.js +273 -0
- package/dist/core/tool-utils.js.map +1 -0
- package/dist/core/types.d.ts +595 -0
- package/dist/core/types.d.ts.map +1 -0
- package/dist/core/types.js +158 -0
- package/dist/core/types.js.map +1 -0
- package/dist/core/utils.d.ts +138 -0
- package/dist/core/utils.d.ts.map +1 -0
- package/dist/core/utils.js +478 -0
- package/dist/core/utils.js.map +1 -0
- package/dist/core/world-class.d.ts +43 -0
- package/dist/core/world-class.d.ts.map +1 -0
- package/dist/core/world-class.js +90 -0
- package/dist/core/world-class.js.map +1 -0
- package/dist/index.d.ts +18 -0
- package/dist/public/assets/agent-sprites-DJFgj-zP.png +0 -0
- package/dist/public/assets/border-KHK37r8y.svg +83 -0
- package/dist/public/assets/index-C9kPXL6G.css +1 -0
- package/dist/public/assets/index-DOQEHGWt.js +96 -0
- package/dist/public/index.html +21 -0
- package/dist/server/api.d.ts +2 -0
- package/dist/server/api.js +1124 -0
- package/dist/server/index.d.ts +29 -0
- package/dist/server/sse-handler.d.ts +62 -0
- package/dist/server/sse-handler.js +234 -0
- package/package.json +15 -3
- package/scripts/launch-electron.js +0 -58
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Create Agent Tool Module - Built-in tool for approval-gated agent creation.
|
|
3
|
+
*
|
|
4
|
+
* Purpose:
|
|
5
|
+
* - Provide a deterministic `create_agent` built-in tool that creates agents after explicit user approval.
|
|
6
|
+
*
|
|
7
|
+
* Key Features:
|
|
8
|
+
* - Requires `name` and supports optional `autoReply`, `role`, and `nextAgent` arguments.
|
|
9
|
+
* - Enforces a mandatory HITL approval check before creating any agent.
|
|
10
|
+
* - Inherits provider/model from world-level `chatLLMProvider` / `chatLLMModel` when configured.
|
|
11
|
+
* - Generates a stable system prompt template for new agents.
|
|
12
|
+
* - Returns structured JSON payloads for success, denial, and error outcomes.
|
|
13
|
+
*
|
|
14
|
+
* Notes on Implementation:
|
|
15
|
+
* - Uses `requestWorldOption` for approval (no custom approval protocol).
|
|
16
|
+
* - Uses core `createAgent` manager API to preserve existing persistence and CRUD event behavior.
|
|
17
|
+
* - Applies deterministic defaults when world-level provider/model are not configured.
|
|
18
|
+
*
|
|
19
|
+
* Recent Changes:
|
|
20
|
+
* - 2026-02-19: Initial implementation of approval-gated `create_agent` built-in tool.
|
|
21
|
+
*/
|
|
22
|
+
type CreateAgentToolContext = {
|
|
23
|
+
world?: {
|
|
24
|
+
id?: string;
|
|
25
|
+
currentChatId?: string | null;
|
|
26
|
+
chatLLMProvider?: string | null;
|
|
27
|
+
chatLLMModel?: string | null;
|
|
28
|
+
eventEmitter?: unknown;
|
|
29
|
+
} | null;
|
|
30
|
+
chatId?: string | null;
|
|
31
|
+
};
|
|
32
|
+
type CreateAgentToolArgs = {
|
|
33
|
+
name: string;
|
|
34
|
+
autoReply?: boolean;
|
|
35
|
+
role?: string;
|
|
36
|
+
nextAgent?: string;
|
|
37
|
+
};
|
|
38
|
+
export declare function createCreateAgentToolDefinition(): {
|
|
39
|
+
description: string;
|
|
40
|
+
parameters: {
|
|
41
|
+
type: string;
|
|
42
|
+
properties: {
|
|
43
|
+
name: {
|
|
44
|
+
type: string;
|
|
45
|
+
description: string;
|
|
46
|
+
};
|
|
47
|
+
autoReply: {
|
|
48
|
+
type: string;
|
|
49
|
+
description: string;
|
|
50
|
+
};
|
|
51
|
+
role: {
|
|
52
|
+
type: string;
|
|
53
|
+
description: string;
|
|
54
|
+
};
|
|
55
|
+
nextAgent: {
|
|
56
|
+
type: string;
|
|
57
|
+
description: string;
|
|
58
|
+
};
|
|
59
|
+
};
|
|
60
|
+
required: string[];
|
|
61
|
+
additionalProperties: boolean;
|
|
62
|
+
};
|
|
63
|
+
execute: (args: CreateAgentToolArgs, _sequenceId?: string, _parentToolCall?: string, context?: CreateAgentToolContext) => Promise<string>;
|
|
64
|
+
};
|
|
65
|
+
export {};
|
|
66
|
+
//# sourceMappingURL=create-agent-tool.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"create-agent-tool.d.ts","sourceRoot":"","sources":["../../core/create-agent-tool.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAcH,KAAK,sBAAsB,GAAG;IAC5B,KAAK,CAAC,EAAE;QACN,EAAE,CAAC,EAAE,MAAM,CAAC;QACZ,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;QAC9B,eAAe,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;QAChC,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;QAC7B,YAAY,CAAC,EAAE,OAAO,CAAC;KACxB,GAAG,IAAI,CAAC;IACT,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CACxB,CAAC;AAEF,KAAK,mBAAmB,GAAG;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AAwEF,wBAAgB,+BAA+B;;;;;;;;;;;;;;;;;;;;;;;;;oBA2BrB,mBAAmB,gBAAgB,MAAM,oBAAoB,MAAM,YAAY,sBAAsB;EAmG9H"}
|
|
@@ -0,0 +1,212 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Create Agent Tool Module - Built-in tool for approval-gated agent creation.
|
|
3
|
+
*
|
|
4
|
+
* Purpose:
|
|
5
|
+
* - Provide a deterministic `create_agent` built-in tool that creates agents after explicit user approval.
|
|
6
|
+
*
|
|
7
|
+
* Key Features:
|
|
8
|
+
* - Requires `name` and supports optional `autoReply`, `role`, and `nextAgent` arguments.
|
|
9
|
+
* - Enforces a mandatory HITL approval check before creating any agent.
|
|
10
|
+
* - Inherits provider/model from world-level `chatLLMProvider` / `chatLLMModel` when configured.
|
|
11
|
+
* - Generates a stable system prompt template for new agents.
|
|
12
|
+
* - Returns structured JSON payloads for success, denial, and error outcomes.
|
|
13
|
+
*
|
|
14
|
+
* Notes on Implementation:
|
|
15
|
+
* - Uses `requestWorldOption` for approval (no custom approval protocol).
|
|
16
|
+
* - Uses core `createAgent` manager API to preserve existing persistence and CRUD event behavior.
|
|
17
|
+
* - Applies deterministic defaults when world-level provider/model are not configured.
|
|
18
|
+
*
|
|
19
|
+
* Recent Changes:
|
|
20
|
+
* - 2026-02-19: Initial implementation of approval-gated `create_agent` built-in tool.
|
|
21
|
+
*/
|
|
22
|
+
import { requestWorldOption } from './hitl.js';
|
|
23
|
+
import { createAgent } from './managers.js';
|
|
24
|
+
import { LLMProvider } from './types.js';
|
|
25
|
+
import { toKebabCase } from './utils.js';
|
|
26
|
+
const APPROVAL_OPTION_YES = 'yes';
|
|
27
|
+
const APPROVAL_OPTION_NO = 'no';
|
|
28
|
+
const DEFAULT_PROVIDER = LLMProvider.OPENAI;
|
|
29
|
+
const DEFAULT_MODEL = 'gpt-4';
|
|
30
|
+
const DEFAULT_NEXT_AGENT = 'human';
|
|
31
|
+
const MAX_ROLE_LENGTH = 240;
|
|
32
|
+
function normalizeSingleLineText(value) {
|
|
33
|
+
if (typeof value !== 'string')
|
|
34
|
+
return '';
|
|
35
|
+
return value.replace(/\s+/g, ' ').trim();
|
|
36
|
+
}
|
|
37
|
+
function resolveRole(role) {
|
|
38
|
+
const normalized = normalizeSingleLineText(role);
|
|
39
|
+
if (!normalized)
|
|
40
|
+
return '';
|
|
41
|
+
return normalized.slice(0, MAX_ROLE_LENGTH);
|
|
42
|
+
}
|
|
43
|
+
function resolveNextAgent(nextAgent) {
|
|
44
|
+
const normalized = normalizeSingleLineText(nextAgent);
|
|
45
|
+
if (!normalized)
|
|
46
|
+
return DEFAULT_NEXT_AGENT;
|
|
47
|
+
const stripped = normalized.startsWith('@') ? normalized.slice(1) : normalized;
|
|
48
|
+
const token = toKebabCase(stripped);
|
|
49
|
+
return token || DEFAULT_NEXT_AGENT;
|
|
50
|
+
}
|
|
51
|
+
function resolveProvider(world) {
|
|
52
|
+
const configured = normalizeSingleLineText(world?.chatLLMProvider).toLowerCase();
|
|
53
|
+
const allProviders = new Set(Object.values(LLMProvider));
|
|
54
|
+
if (configured && allProviders.has(configured)) {
|
|
55
|
+
return configured;
|
|
56
|
+
}
|
|
57
|
+
return DEFAULT_PROVIDER;
|
|
58
|
+
}
|
|
59
|
+
function resolveModel(world) {
|
|
60
|
+
const configured = normalizeSingleLineText(world?.chatLLMModel);
|
|
61
|
+
return configured || DEFAULT_MODEL;
|
|
62
|
+
}
|
|
63
|
+
function buildSystemPrompt(name, role, nextAgent) {
|
|
64
|
+
const roleSentence = role ? `Your role is ${role}.` : 'Your role is not specified.';
|
|
65
|
+
return [
|
|
66
|
+
`You are agent ${name}. ${roleSentence}`,
|
|
67
|
+
'',
|
|
68
|
+
'Always respond in exactly this structure:',
|
|
69
|
+
`@${nextAgent}`,
|
|
70
|
+
'{Your response}',
|
|
71
|
+
].join('\n');
|
|
72
|
+
}
|
|
73
|
+
function formatResult(payload) {
|
|
74
|
+
return JSON.stringify(payload, null, 2);
|
|
75
|
+
}
|
|
76
|
+
function formatErrorResult(message) {
|
|
77
|
+
return formatResult({
|
|
78
|
+
success: false,
|
|
79
|
+
created: false,
|
|
80
|
+
error: message,
|
|
81
|
+
});
|
|
82
|
+
}
|
|
83
|
+
function formatDeniedResult(optionId, source, message) {
|
|
84
|
+
return formatResult({
|
|
85
|
+
success: false,
|
|
86
|
+
created: false,
|
|
87
|
+
approval: {
|
|
88
|
+
optionId,
|
|
89
|
+
source,
|
|
90
|
+
approved: false,
|
|
91
|
+
},
|
|
92
|
+
message,
|
|
93
|
+
});
|
|
94
|
+
}
|
|
95
|
+
export function createCreateAgentToolDefinition() {
|
|
96
|
+
return {
|
|
97
|
+
description: 'Create a new agent after explicit user approval. Requires `name`; supports optional `autoReply`, `role`, and `nextAgent`.',
|
|
98
|
+
parameters: {
|
|
99
|
+
type: 'object',
|
|
100
|
+
properties: {
|
|
101
|
+
name: {
|
|
102
|
+
type: 'string',
|
|
103
|
+
description: 'Name for the new agent.',
|
|
104
|
+
},
|
|
105
|
+
autoReply: {
|
|
106
|
+
type: 'boolean',
|
|
107
|
+
description: 'Optional auto-reply flag. Defaults to true.',
|
|
108
|
+
},
|
|
109
|
+
role: {
|
|
110
|
+
type: 'string',
|
|
111
|
+
description: 'Optional role sentence used in the generated system prompt.',
|
|
112
|
+
},
|
|
113
|
+
nextAgent: {
|
|
114
|
+
type: 'string',
|
|
115
|
+
description: 'Optional mention target used in the generated response template.',
|
|
116
|
+
},
|
|
117
|
+
},
|
|
118
|
+
required: ['name'],
|
|
119
|
+
additionalProperties: false,
|
|
120
|
+
},
|
|
121
|
+
execute: async (args, _sequenceId, _parentToolCall, context) => {
|
|
122
|
+
try {
|
|
123
|
+
const name = normalizeSingleLineText(args?.name);
|
|
124
|
+
if (!name) {
|
|
125
|
+
return formatErrorResult('Missing required parameter: name');
|
|
126
|
+
}
|
|
127
|
+
const world = context?.world;
|
|
128
|
+
const worldId = normalizeSingleLineText(world?.id);
|
|
129
|
+
if (!world || !worldId || !world.eventEmitter) {
|
|
130
|
+
return formatErrorResult('Approval context unavailable: world runtime is required for create_agent.');
|
|
131
|
+
}
|
|
132
|
+
const autoReply = args?.autoReply !== undefined ? !!args.autoReply : true;
|
|
133
|
+
const role = resolveRole(args?.role);
|
|
134
|
+
const nextAgent = resolveNextAgent(args?.nextAgent);
|
|
135
|
+
const provider = resolveProvider(world);
|
|
136
|
+
const model = resolveModel(world);
|
|
137
|
+
const systemPrompt = buildSystemPrompt(name, role, nextAgent);
|
|
138
|
+
const chatId = context?.chatId ?? world.currentChatId ?? null;
|
|
139
|
+
const approval = await requestWorldOption(world, {
|
|
140
|
+
title: `Create agent ${name}?`,
|
|
141
|
+
message: [
|
|
142
|
+
`Create a new agent with name "${name}"?`,
|
|
143
|
+
`autoReply: ${String(autoReply)}`,
|
|
144
|
+
`role: ${role || '(not specified)'}`,
|
|
145
|
+
`nextAgent: ${nextAgent}`,
|
|
146
|
+
`provider: ${provider}`,
|
|
147
|
+
`model: ${model}`,
|
|
148
|
+
].join('\n'),
|
|
149
|
+
chatId,
|
|
150
|
+
defaultOptionId: APPROVAL_OPTION_NO,
|
|
151
|
+
options: [
|
|
152
|
+
{
|
|
153
|
+
id: APPROVAL_OPTION_YES,
|
|
154
|
+
label: 'Yes',
|
|
155
|
+
description: 'Create this agent now.',
|
|
156
|
+
},
|
|
157
|
+
{
|
|
158
|
+
id: APPROVAL_OPTION_NO,
|
|
159
|
+
label: 'No',
|
|
160
|
+
description: 'Do not create this agent.',
|
|
161
|
+
},
|
|
162
|
+
],
|
|
163
|
+
metadata: {
|
|
164
|
+
tool: 'create_agent',
|
|
165
|
+
name,
|
|
166
|
+
autoReply,
|
|
167
|
+
role,
|
|
168
|
+
nextAgent,
|
|
169
|
+
provider,
|
|
170
|
+
model,
|
|
171
|
+
},
|
|
172
|
+
});
|
|
173
|
+
if (approval.optionId !== APPROVAL_OPTION_YES) {
|
|
174
|
+
const denialMessage = approval.source === 'timeout'
|
|
175
|
+
? `Agent creation timed out and defaulted to ${approval.optionId}.`
|
|
176
|
+
: 'User denied agent creation.';
|
|
177
|
+
return formatDeniedResult(approval.optionId, approval.source, denialMessage);
|
|
178
|
+
}
|
|
179
|
+
const createdAgent = await createAgent(worldId, {
|
|
180
|
+
name,
|
|
181
|
+
type: 'default',
|
|
182
|
+
autoReply,
|
|
183
|
+
provider,
|
|
184
|
+
model,
|
|
185
|
+
systemPrompt,
|
|
186
|
+
}, { allowWhileProcessing: true });
|
|
187
|
+
return formatResult({
|
|
188
|
+
success: true,
|
|
189
|
+
created: true,
|
|
190
|
+
agent: {
|
|
191
|
+
id: createdAgent.id,
|
|
192
|
+
name: createdAgent.name,
|
|
193
|
+
autoReply: createdAgent.autoReply !== false,
|
|
194
|
+
provider: createdAgent.provider,
|
|
195
|
+
model: createdAgent.model,
|
|
196
|
+
role: role || null,
|
|
197
|
+
nextAgent,
|
|
198
|
+
systemPrompt: createdAgent.systemPrompt || systemPrompt,
|
|
199
|
+
},
|
|
200
|
+
});
|
|
201
|
+
}
|
|
202
|
+
catch (error) {
|
|
203
|
+
if (error instanceof Error && error.name === 'AbortError') {
|
|
204
|
+
throw error;
|
|
205
|
+
}
|
|
206
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
207
|
+
return formatErrorResult(message);
|
|
208
|
+
}
|
|
209
|
+
},
|
|
210
|
+
};
|
|
211
|
+
}
|
|
212
|
+
//# sourceMappingURL=create-agent-tool.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"create-agent-tool.js","sourceRoot":"","sources":["../../core/create-agent-tool.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Approval Checker - Tool Approval Validation Functions
|
|
3
|
+
*
|
|
4
|
+
* Purpose: Validate tool execution approvals
|
|
5
|
+
* Features:
|
|
6
|
+
* - Check for session-wide approvals
|
|
7
|
+
* - Check for one-time approvals (not consumed)
|
|
8
|
+
* - Match by tool name, directory, and parameters
|
|
9
|
+
* - Enhanced protocol support with __type='tool_result'
|
|
10
|
+
*
|
|
11
|
+
* These functions are pure logic with no side effects
|
|
12
|
+
*/
|
|
13
|
+
import { AgentMessage, World } from '../types.js';
|
|
14
|
+
/**
|
|
15
|
+
* Check if tool needs approval and if it can execute
|
|
16
|
+
* Returns approval status and optional approval request data
|
|
17
|
+
*/
|
|
18
|
+
export declare function checkToolApproval(world: World, toolName: string, toolArgs: any, message: string, messages: AgentMessage[], context: {
|
|
19
|
+
workingDirectory?: string;
|
|
20
|
+
[key: string]: any;
|
|
21
|
+
}): Promise<{
|
|
22
|
+
needsApproval: boolean;
|
|
23
|
+
canExecute: boolean;
|
|
24
|
+
approvalRequest?: any;
|
|
25
|
+
}>;
|
|
26
|
+
/**
|
|
27
|
+
* Find one-time approval that hasn't been consumed yet
|
|
28
|
+
*
|
|
29
|
+
* One-time approval is valid if:
|
|
30
|
+
* - scope: 'once'
|
|
31
|
+
* - Matches tool name, directory, and parameters
|
|
32
|
+
* - NOT followed by a tool execution result (not consumed)
|
|
33
|
+
*
|
|
34
|
+
* Once found and used, it should be "consumed" by checking for subsequent tool results
|
|
35
|
+
*/
|
|
36
|
+
export declare function findOnceApproval(messages: AgentMessage[], toolName: string, toolArgs?: any, workingDirectory?: string): {
|
|
37
|
+
decision: 'approve';
|
|
38
|
+
scope: 'once';
|
|
39
|
+
toolName: string;
|
|
40
|
+
} | undefined;
|
|
41
|
+
/**
|
|
42
|
+
* Find session-wide approval for a tool in message history
|
|
43
|
+
* Supports enhanced string protocol (JSON)
|
|
44
|
+
*
|
|
45
|
+
* Session approval matches on:
|
|
46
|
+
* - Tool name (required)
|
|
47
|
+
* - Working directory (if provided)
|
|
48
|
+
* - Parameters (exact match)
|
|
49
|
+
*
|
|
50
|
+
* Enhanced protocol format:
|
|
51
|
+
* {
|
|
52
|
+
* role: 'tool',
|
|
53
|
+
* tool_call_id: 'approval_...',
|
|
54
|
+
* content: '{"__type":"tool_result","content":"{\"decision\":\"approve\",\"scope\":\"session\",\"toolName\":\"...\",\"toolArgs\":{...},\"workingDirectory\":\"...\"}"}'
|
|
55
|
+
* }
|
|
56
|
+
*/
|
|
57
|
+
export declare function findSessionApproval(messages: AgentMessage[], toolName: string, toolArgs?: any, workingDirectory?: string): {
|
|
58
|
+
decision: 'approve';
|
|
59
|
+
scope: 'session';
|
|
60
|
+
toolName: string;
|
|
61
|
+
} | undefined;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"approval-checker.d.ts","sourceRoot":"","sources":["../../../core/events/approval-checker.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EAAE,YAAY,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAMlD;;;GAGG;AACH,wBAAsB,iBAAiB,CACrC,KAAK,EAAE,KAAK,EACZ,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,GAAG,EACb,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,YAAY,EAAE,EACxB,OAAO,EAAE;IAAE,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAAA,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAA;CAAE,GACxD,OAAO,CAAC;IACT,aAAa,EAAE,OAAO,CAAC;IACvB,UAAU,EAAE,OAAO,CAAC;IACpB,eAAe,CAAC,EAAE,GAAG,CAAC;CACvB,CAAC,CAqDD;AAED;;;;;;;;;GASG;AACH,wBAAgB,gBAAgB,CAC9B,QAAQ,EAAE,YAAY,EAAE,EACxB,QAAQ,EAAE,MAAM,EAChB,QAAQ,CAAC,EAAE,GAAG,EACd,gBAAgB,CAAC,EAAE,MAAM,GACxB;IAAE,QAAQ,EAAE,SAAS,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,GAAG,SAAS,CA6EtE;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,mBAAmB,CACjC,QAAQ,EAAE,YAAY,EAAE,EACxB,QAAQ,EAAE,MAAM,EAChB,QAAQ,CAAC,EAAE,GAAG,EACd,gBAAgB,CAAC,EAAE,MAAM,GACxB;IAAE,QAAQ,EAAE,SAAS,CAAC;IAAC,KAAK,EAAE,SAAS,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,GAAG,SAAS,CA4DzE"}
|
|
@@ -0,0 +1,226 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Approval Checker - Tool Approval Validation Functions
|
|
3
|
+
*
|
|
4
|
+
* Purpose: Validate tool execution approvals
|
|
5
|
+
* Features:
|
|
6
|
+
* - Check for session-wide approvals
|
|
7
|
+
* - Check for one-time approvals (not consumed)
|
|
8
|
+
* - Match by tool name, directory, and parameters
|
|
9
|
+
* - Enhanced protocol support with __type='tool_result'
|
|
10
|
+
*
|
|
11
|
+
* These functions are pure logic with no side effects
|
|
12
|
+
*/
|
|
13
|
+
import { createCategoryLogger } from '../logger.js';
|
|
14
|
+
const loggerAgent = createCategoryLogger('events.agent');
|
|
15
|
+
const loggerMemory = createCategoryLogger('events.memory');
|
|
16
|
+
/**
|
|
17
|
+
* Check if tool needs approval and if it can execute
|
|
18
|
+
* Returns approval status and optional approval request data
|
|
19
|
+
*/
|
|
20
|
+
export async function checkToolApproval(world, toolName, toolArgs, message, messages, context) {
|
|
21
|
+
try {
|
|
22
|
+
// Check for session-wide approval ONLY (matches name + directory + params)
|
|
23
|
+
const workingDirectory = context?.workingDirectory || process.cwd();
|
|
24
|
+
const sessionApproval = findSessionApproval(messages, toolName, toolArgs, workingDirectory);
|
|
25
|
+
if (sessionApproval) {
|
|
26
|
+
return {
|
|
27
|
+
needsApproval: false,
|
|
28
|
+
canExecute: true
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
// Check for one-time approval (not yet consumed)
|
|
32
|
+
const onceApproval = findOnceApproval(messages, toolName, toolArgs, workingDirectory);
|
|
33
|
+
if (onceApproval) {
|
|
34
|
+
return {
|
|
35
|
+
needsApproval: false,
|
|
36
|
+
canExecute: true
|
|
37
|
+
};
|
|
38
|
+
}
|
|
39
|
+
// No approval found - need to request approval
|
|
40
|
+
return {
|
|
41
|
+
needsApproval: true,
|
|
42
|
+
canExecute: false,
|
|
43
|
+
approvalRequest: {
|
|
44
|
+
toolName,
|
|
45
|
+
toolArgs,
|
|
46
|
+
message,
|
|
47
|
+
workingDirectory, // Include for session approval matching
|
|
48
|
+
requestId: `approval-${Date.now()}-${Math.random().toString(36).substr(2, 9)}`,
|
|
49
|
+
options: ['deny', 'approve_once', 'approve_session']
|
|
50
|
+
}
|
|
51
|
+
};
|
|
52
|
+
}
|
|
53
|
+
catch (error) {
|
|
54
|
+
loggerAgent.error('Error checking tool approval', {
|
|
55
|
+
toolName,
|
|
56
|
+
error: error instanceof Error ? error.message : error
|
|
57
|
+
});
|
|
58
|
+
return {
|
|
59
|
+
needsApproval: true,
|
|
60
|
+
canExecute: false,
|
|
61
|
+
approvalRequest: {
|
|
62
|
+
toolName,
|
|
63
|
+
toolArgs,
|
|
64
|
+
message,
|
|
65
|
+
workingDirectory: context?.workingDirectory || process.cwd(), // Include even in error case
|
|
66
|
+
requestId: `approval-${Date.now()}-${Math.random().toString(36).substr(2, 9)}`,
|
|
67
|
+
options: ['deny', 'approve_once', 'approve_session']
|
|
68
|
+
}
|
|
69
|
+
};
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Find one-time approval that hasn't been consumed yet
|
|
74
|
+
*
|
|
75
|
+
* One-time approval is valid if:
|
|
76
|
+
* - scope: 'once'
|
|
77
|
+
* - Matches tool name, directory, and parameters
|
|
78
|
+
* - NOT followed by a tool execution result (not consumed)
|
|
79
|
+
*
|
|
80
|
+
* Once found and used, it should be "consumed" by checking for subsequent tool results
|
|
81
|
+
*/
|
|
82
|
+
export function findOnceApproval(messages, toolName, toolArgs, workingDirectory) {
|
|
83
|
+
for (let i = messages.length - 1; i >= 0; i--) {
|
|
84
|
+
const msg = messages[i];
|
|
85
|
+
// Look for tool result with scope: 'once'
|
|
86
|
+
if (msg.role === 'tool' && msg.tool_call_id && msg.content) {
|
|
87
|
+
try {
|
|
88
|
+
const outerParsed = JSON.parse(msg.content);
|
|
89
|
+
if (outerParsed.__type === 'tool_result' && outerParsed.content) {
|
|
90
|
+
try {
|
|
91
|
+
const result = JSON.parse(outerParsed.content);
|
|
92
|
+
if (result.decision === 'approve' &&
|
|
93
|
+
result.scope === 'once' &&
|
|
94
|
+
result.toolName?.toLowerCase() === toolName.toLowerCase()) {
|
|
95
|
+
// Match working directory if provided
|
|
96
|
+
if (result.workingDirectory && workingDirectory) {
|
|
97
|
+
if (result.workingDirectory !== workingDirectory) {
|
|
98
|
+
continue;
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
// Match parameters
|
|
102
|
+
if (result.toolArgs && toolArgs) {
|
|
103
|
+
const argsMatch = JSON.stringify(result.toolArgs) === JSON.stringify(toolArgs);
|
|
104
|
+
if (!argsMatch) {
|
|
105
|
+
continue;
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
// Found a matching one-time approval
|
|
109
|
+
// Check if it's been consumed by looking for a subsequent tool execution
|
|
110
|
+
const toolCallId = msg.tool_call_id;
|
|
111
|
+
// Look for messages AFTER this approval to see if tool was executed
|
|
112
|
+
for (let j = i + 1; j < messages.length; j++) {
|
|
113
|
+
const laterMsg = messages[j];
|
|
114
|
+
// Check if there's a tool result that consumed this approval
|
|
115
|
+
// Tool results have role='tool' but are NOT approval responses
|
|
116
|
+
if (laterMsg.role === 'tool' && laterMsg.tool_call_id === toolCallId) {
|
|
117
|
+
// Check if this is NOT another approval response (check for __type)
|
|
118
|
+
try {
|
|
119
|
+
const laterParsed = JSON.parse(laterMsg.content || '{}');
|
|
120
|
+
if (laterParsed.__type !== 'tool_result') {
|
|
121
|
+
// This is an actual tool execution result, approval was consumed
|
|
122
|
+
loggerMemory.debug('One-time approval already consumed', {
|
|
123
|
+
toolName,
|
|
124
|
+
toolCallId
|
|
125
|
+
});
|
|
126
|
+
return undefined; // Approval consumed, don't reuse
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
catch {
|
|
130
|
+
// If parse fails, assume it's a tool execution result
|
|
131
|
+
return undefined; // Approval consumed
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
// Approval found and not consumed
|
|
136
|
+
loggerMemory.debug('Found valid one-time approval', {
|
|
137
|
+
toolName,
|
|
138
|
+
toolCallId: msg.tool_call_id
|
|
139
|
+
});
|
|
140
|
+
return { decision: 'approve', scope: 'once', toolName };
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
catch (innerError) {
|
|
144
|
+
continue;
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
catch (outerError) {
|
|
149
|
+
continue;
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
return undefined;
|
|
154
|
+
}
|
|
155
|
+
/**
|
|
156
|
+
* Find session-wide approval for a tool in message history
|
|
157
|
+
* Supports enhanced string protocol (JSON)
|
|
158
|
+
*
|
|
159
|
+
* Session approval matches on:
|
|
160
|
+
* - Tool name (required)
|
|
161
|
+
* - Working directory (if provided)
|
|
162
|
+
* - Parameters (exact match)
|
|
163
|
+
*
|
|
164
|
+
* Enhanced protocol format:
|
|
165
|
+
* {
|
|
166
|
+
* role: 'tool',
|
|
167
|
+
* tool_call_id: 'approval_...',
|
|
168
|
+
* content: '{"__type":"tool_result","content":"{\"decision\":\"approve\",\"scope\":\"session\",\"toolName\":\"...\",\"toolArgs\":{...},\"workingDirectory\":\"...\"}"}'
|
|
169
|
+
* }
|
|
170
|
+
*/
|
|
171
|
+
export function findSessionApproval(messages, toolName, toolArgs, workingDirectory) {
|
|
172
|
+
for (let i = messages.length - 1; i >= 0; i--) {
|
|
173
|
+
const msg = messages[i];
|
|
174
|
+
// Primary: Enhanced string protocol (JSON tool result)
|
|
175
|
+
if (msg.role === 'tool' && msg.tool_call_id && msg.content) {
|
|
176
|
+
try {
|
|
177
|
+
const outerParsed = JSON.parse(msg.content);
|
|
178
|
+
// Enhanced protocol: Outer layer MUST have __type
|
|
179
|
+
if (outerParsed.__type === 'tool_result') {
|
|
180
|
+
if (!outerParsed.content) {
|
|
181
|
+
loggerMemory.warn('Enhanced protocol missing content field', {
|
|
182
|
+
toolCallId: msg.tool_call_id
|
|
183
|
+
});
|
|
184
|
+
continue; // Skip malformed enhanced protocol
|
|
185
|
+
}
|
|
186
|
+
try {
|
|
187
|
+
const result = JSON.parse(outerParsed.content);
|
|
188
|
+
if (result.decision === 'approve' &&
|
|
189
|
+
result.scope === 'session' &&
|
|
190
|
+
result.toolName?.toLowerCase() === toolName.toLowerCase()) {
|
|
191
|
+
// Match working directory if provided in approval
|
|
192
|
+
if (result.workingDirectory && workingDirectory) {
|
|
193
|
+
if (result.workingDirectory !== workingDirectory) {
|
|
194
|
+
continue; // Directory mismatch, keep searching
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
// Match parameters (exact deep equality)
|
|
198
|
+
if (result.toolArgs && toolArgs) {
|
|
199
|
+
const argsMatch = JSON.stringify(result.toolArgs) === JSON.stringify(toolArgs);
|
|
200
|
+
if (!argsMatch) {
|
|
201
|
+
continue; // Parameters mismatch, keep searching
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
return { decision: 'approve', scope: 'session', toolName };
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
catch (innerError) {
|
|
208
|
+
loggerMemory.error('Malformed enhanced protocol content', {
|
|
209
|
+
toolCallId: msg.tool_call_id,
|
|
210
|
+
content: outerParsed.content,
|
|
211
|
+
error: innerError
|
|
212
|
+
});
|
|
213
|
+
continue; // Skip malformed inner JSON
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
// If outer JSON parsed but no __type, might be legacy JSON approval
|
|
217
|
+
// (not currently used, but future-proof)
|
|
218
|
+
}
|
|
219
|
+
catch (outerError) {
|
|
220
|
+
// Outer JSON.parse failed - not JSON at all, try legacy text
|
|
221
|
+
}
|
|
222
|
+
}
|
|
223
|
+
// No legacy fallback - enhanced protocol required
|
|
224
|
+
}
|
|
225
|
+
return undefined;
|
|
226
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"approval-checker.js","sourceRoot":"","sources":["../../../core/events/approval-checker.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Events Module - Public API
|
|
3
|
+
*
|
|
4
|
+
* This module provides event publishing, subscription, and agent orchestration functions.
|
|
5
|
+
* All functions are now extracted into modular structure for better maintainability.
|
|
6
|
+
*
|
|
7
|
+
* Modular structure:
|
|
8
|
+
* - publishers.ts: Event emission functions (Layer 3)
|
|
9
|
+
* - mention-logic.ts: Auto-mention processing (Layer 2)
|
|
10
|
+
* - persistence.ts: Event persistence (Layer 4)
|
|
11
|
+
* - memory-manager.ts: Memory & LLM resumption (Layer 4)
|
|
12
|
+
* - orchestrator.ts: Agent message processing (Layer 5)
|
|
13
|
+
* - subscribers.ts: Event subscriptions (Layer 6)
|
|
14
|
+
*
|
|
15
|
+
* Changes:
|
|
16
|
+
* - 2026-02-08: Removed outdated manual tool-intervention checker module reference
|
|
17
|
+
* - 2025-11-09: Completed extraction of all layers (2-6) from monolithic events.ts
|
|
18
|
+
*/
|
|
19
|
+
export * from './mention-logic.js';
|
|
20
|
+
export * from './publishers.js';
|
|
21
|
+
export * from './persistence.js';
|
|
22
|
+
export * from './memory-manager.js';
|
|
23
|
+
export * from './orchestrator.js';
|
|
24
|
+
export * from './subscribers.js';
|
|
25
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../core/events/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAGH,cAAc,oBAAoB,CAAC;AAGnC,cAAc,iBAAiB,CAAC;AAGhC,cAAc,kBAAkB,CAAC;AACjC,cAAc,qBAAqB,CAAC;AAGpC,cAAc,mBAAmB,CAAC;AAGlC,cAAc,kBAAkB,CAAC"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Events Module - Public API
|
|
3
|
+
*
|
|
4
|
+
* This module provides event publishing, subscription, and agent orchestration functions.
|
|
5
|
+
* All functions are now extracted into modular structure for better maintainability.
|
|
6
|
+
*
|
|
7
|
+
* Modular structure:
|
|
8
|
+
* - publishers.ts: Event emission functions (Layer 3)
|
|
9
|
+
* - mention-logic.ts: Auto-mention processing (Layer 2)
|
|
10
|
+
* - persistence.ts: Event persistence (Layer 4)
|
|
11
|
+
* - memory-manager.ts: Memory & LLM resumption (Layer 4)
|
|
12
|
+
* - orchestrator.ts: Agent message processing (Layer 5)
|
|
13
|
+
* - subscribers.ts: Event subscriptions (Layer 6)
|
|
14
|
+
*
|
|
15
|
+
* Changes:
|
|
16
|
+
* - 2026-02-08: Removed outdated manual tool-intervention checker module reference
|
|
17
|
+
* - 2025-11-09: Completed extraction of all layers (2-6) from monolithic events.ts
|
|
18
|
+
*/
|
|
19
|
+
// Layer 2: Pure utilities (no dependencies)
|
|
20
|
+
export * from './mention-logic.js';
|
|
21
|
+
// Layer 3: Event publishers
|
|
22
|
+
export * from './publishers.js';
|
|
23
|
+
// Layer 4: Persistence & Memory
|
|
24
|
+
export * from './persistence.js';
|
|
25
|
+
export * from './memory-manager.js';
|
|
26
|
+
// Layer 5: Orchestration
|
|
27
|
+
export * from './orchestrator.js';
|
|
28
|
+
// Layer 6: Subscriptions
|
|
29
|
+
export * from './subscribers.js';
|
|
30
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../core/events/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,4CAA4C;AAC5C,cAAc,oBAAoB,CAAC;AAEnC,4BAA4B;AAC5B,cAAc,iBAAiB,CAAC;AAEhC,gCAAgC;AAChC,cAAc,kBAAkB,CAAC;AACjC,cAAc,qBAAqB,CAAC;AAEpC,yBAAyB;AACzB,cAAc,mBAAmB,CAAC;AAElC,yBAAyB;AACzB,cAAc,kBAAkB,CAAC"}
|