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.
Files changed (267) hide show
  1. package/README.md +17 -7
  2. package/dist/cli/commands.d.ts +109 -0
  3. package/dist/cli/commands.js +2024 -0
  4. package/dist/cli/display.d.ts +124 -0
  5. package/dist/cli/display.js +381 -0
  6. package/dist/cli/hitl.d.ts +33 -0
  7. package/dist/cli/hitl.js +81 -0
  8. package/dist/cli/index.d.ts +2 -0
  9. package/dist/cli/stream.d.ts +41 -0
  10. package/dist/cli/stream.js +222 -0
  11. package/dist/core/activity-tracker.d.ts +16 -0
  12. package/dist/core/activity-tracker.d.ts.map +1 -0
  13. package/dist/core/activity-tracker.js +91 -0
  14. package/dist/core/activity-tracker.js.map +1 -0
  15. package/dist/core/ai-commands.d.ts +16 -0
  16. package/dist/core/ai-commands.d.ts.map +1 -0
  17. package/dist/core/ai-commands.js +24 -0
  18. package/dist/core/ai-commands.js.map +1 -0
  19. package/dist/core/ai-sdk-patch.d.ts +24 -0
  20. package/dist/core/ai-sdk-patch.d.ts.map +1 -0
  21. package/dist/core/ai-sdk-patch.js +169 -0
  22. package/dist/core/ai-sdk-patch.js.map +1 -0
  23. package/dist/core/anthropic-direct.d.ts +52 -0
  24. package/dist/core/anthropic-direct.d.ts.map +1 -0
  25. package/dist/core/anthropic-direct.js +301 -0
  26. package/dist/core/anthropic-direct.js.map +1 -0
  27. package/dist/core/approval-cache.d.ts +104 -0
  28. package/dist/core/approval-cache.d.ts.map +1 -0
  29. package/dist/core/approval-cache.js +150 -0
  30. package/dist/core/approval-cache.js.map +1 -0
  31. package/dist/core/chat-constants.d.ts +20 -0
  32. package/dist/core/chat-constants.d.ts.map +1 -0
  33. package/dist/core/chat-constants.js +22 -0
  34. package/dist/core/chat-constants.js.map +1 -0
  35. package/dist/core/create-agent-tool.d.ts +66 -0
  36. package/dist/core/create-agent-tool.d.ts.map +1 -0
  37. package/dist/core/create-agent-tool.js +212 -0
  38. package/dist/core/create-agent-tool.js.map +1 -0
  39. package/dist/core/events/approval-checker.d.ts +61 -0
  40. package/dist/core/events/approval-checker.d.ts.map +1 -0
  41. package/dist/core/events/approval-checker.js +226 -0
  42. package/dist/core/events/approval-checker.js.map +1 -0
  43. package/dist/core/events/index.d.ts +25 -0
  44. package/dist/core/events/index.d.ts.map +1 -0
  45. package/dist/core/events/index.js +30 -0
  46. package/dist/core/events/index.js.map +1 -0
  47. package/dist/core/events/memory-manager.d.ts +73 -0
  48. package/dist/core/events/memory-manager.d.ts.map +1 -0
  49. package/dist/core/events/memory-manager.js +1218 -0
  50. package/dist/core/events/memory-manager.js.map +1 -0
  51. package/dist/core/events/mention-logic.d.ts +39 -0
  52. package/dist/core/events/mention-logic.d.ts.map +1 -0
  53. package/dist/core/events/mention-logic.js +163 -0
  54. package/dist/core/events/mention-logic.js.map +1 -0
  55. package/dist/core/events/orchestrator.d.ts +69 -0
  56. package/dist/core/events/orchestrator.d.ts.map +1 -0
  57. package/dist/core/events/orchestrator.js +883 -0
  58. package/dist/core/events/orchestrator.js.map +1 -0
  59. package/dist/core/events/persistence.d.ts +41 -0
  60. package/dist/core/events/persistence.d.ts.map +1 -0
  61. package/dist/core/events/persistence.js +296 -0
  62. package/dist/core/events/persistence.js.map +1 -0
  63. package/dist/core/events/publishers.d.ts +81 -0
  64. package/dist/core/events/publishers.d.ts.map +1 -0
  65. package/dist/core/events/publishers.js +272 -0
  66. package/dist/core/events/publishers.js.map +1 -0
  67. package/dist/core/events/subscribers.d.ts +45 -0
  68. package/dist/core/events/subscribers.d.ts.map +1 -0
  69. package/dist/core/events/subscribers.js +288 -0
  70. package/dist/core/events/subscribers.js.map +1 -0
  71. package/dist/core/events/tool-bridge-logging.d.ts +28 -0
  72. package/dist/core/events/tool-bridge-logging.d.ts.map +1 -0
  73. package/dist/core/events/tool-bridge-logging.js +94 -0
  74. package/dist/core/events/tool-bridge-logging.js.map +1 -0
  75. package/dist/core/events-metadata.d.ts +72 -0
  76. package/dist/core/events-metadata.d.ts.map +1 -0
  77. package/dist/core/events-metadata.js +167 -0
  78. package/dist/core/events-metadata.js.map +1 -0
  79. package/dist/core/events.d.ts +186 -0
  80. package/dist/core/events.d.ts.map +1 -0
  81. package/dist/core/events.js +1248 -0
  82. package/dist/core/events.js.map +1 -0
  83. package/dist/core/export.d.ts +106 -0
  84. package/dist/core/export.d.ts.map +1 -0
  85. package/dist/core/export.js +705 -0
  86. package/dist/core/export.js.map +1 -0
  87. package/dist/core/file-tools.d.ts +114 -0
  88. package/dist/core/file-tools.d.ts.map +1 -0
  89. package/dist/core/file-tools.js +370 -0
  90. package/dist/core/file-tools.js.map +1 -0
  91. package/dist/core/google-direct.d.ts +58 -0
  92. package/dist/core/google-direct.d.ts.map +1 -0
  93. package/dist/core/google-direct.js +298 -0
  94. package/dist/core/google-direct.js.map +1 -0
  95. package/dist/core/hitl.d.ts +54 -0
  96. package/dist/core/hitl.d.ts.map +1 -0
  97. package/dist/core/hitl.js +153 -0
  98. package/dist/core/hitl.js.map +1 -0
  99. package/dist/core/index.d.ts +59 -0
  100. package/dist/core/index.d.ts.map +1 -0
  101. package/dist/core/index.js +70 -0
  102. package/dist/core/index.js.map +1 -0
  103. package/dist/core/llm-config.d.ts +128 -0
  104. package/dist/core/llm-config.d.ts.map +1 -0
  105. package/dist/core/llm-config.js +164 -0
  106. package/dist/core/llm-config.js.map +1 -0
  107. package/dist/core/llm-manager.d.ts +163 -0
  108. package/dist/core/llm-manager.d.ts.map +1 -0
  109. package/dist/core/llm-manager.js +669 -0
  110. package/dist/core/llm-manager.js.map +1 -0
  111. package/dist/core/load-skill-tool.d.ts +55 -0
  112. package/dist/core/load-skill-tool.d.ts.map +1 -0
  113. package/dist/core/load-skill-tool.js +468 -0
  114. package/dist/core/load-skill-tool.js.map +1 -0
  115. package/dist/core/logger.d.ts +88 -0
  116. package/dist/core/logger.d.ts.map +1 -0
  117. package/dist/core/logger.js +358 -0
  118. package/dist/core/logger.js.map +1 -0
  119. package/dist/core/managers.d.ts +131 -0
  120. package/dist/core/managers.d.ts.map +1 -0
  121. package/dist/core/managers.js +1223 -0
  122. package/dist/core/managers.js.map +1 -0
  123. package/dist/core/mcp-server-registry.d.ts +304 -0
  124. package/dist/core/mcp-server-registry.d.ts.map +1 -0
  125. package/dist/core/mcp-server-registry.js +1769 -0
  126. package/dist/core/mcp-server-registry.js.map +1 -0
  127. package/dist/core/mcp-tools.d.ts +56 -0
  128. package/dist/core/mcp-tools.d.ts.map +1 -0
  129. package/dist/core/mcp-tools.js +186 -0
  130. package/dist/core/mcp-tools.js.map +1 -0
  131. package/dist/core/message-prep.d.ts +81 -0
  132. package/dist/core/message-prep.d.ts.map +1 -0
  133. package/dist/core/message-prep.js +223 -0
  134. package/dist/core/message-prep.js.map +1 -0
  135. package/dist/core/message-processing-control.d.ts +54 -0
  136. package/dist/core/message-processing-control.d.ts.map +1 -0
  137. package/dist/core/message-processing-control.js +139 -0
  138. package/dist/core/message-processing-control.js.map +1 -0
  139. package/dist/core/openai-direct.d.ts +80 -0
  140. package/dist/core/openai-direct.d.ts.map +1 -0
  141. package/dist/core/openai-direct.js +374 -0
  142. package/dist/core/openai-direct.js.map +1 -0
  143. package/dist/core/shell-cmd-tool.d.ts +235 -0
  144. package/dist/core/shell-cmd-tool.d.ts.map +1 -0
  145. package/dist/core/shell-cmd-tool.js +1157 -0
  146. package/dist/core/shell-cmd-tool.js.map +1 -0
  147. package/dist/core/shell-process-registry.d.ts +88 -0
  148. package/dist/core/shell-process-registry.d.ts.map +1 -0
  149. package/dist/core/shell-process-registry.js +309 -0
  150. package/dist/core/shell-process-registry.js.map +1 -0
  151. package/dist/core/skill-registry.d.ts +75 -0
  152. package/dist/core/skill-registry.d.ts.map +1 -0
  153. package/dist/core/skill-registry.js +369 -0
  154. package/dist/core/skill-registry.js.map +1 -0
  155. package/dist/core/skill-script-runner.d.ts +89 -0
  156. package/dist/core/skill-script-runner.d.ts.map +1 -0
  157. package/dist/core/skill-script-runner.js +274 -0
  158. package/dist/core/skill-script-runner.js.map +1 -0
  159. package/dist/core/skill-selector.d.ts +65 -0
  160. package/dist/core/skill-selector.d.ts.map +1 -0
  161. package/dist/core/skill-selector.js +190 -0
  162. package/dist/core/skill-selector.js.map +1 -0
  163. package/dist/core/skill-settings.d.ts +20 -0
  164. package/dist/core/skill-settings.d.ts.map +1 -0
  165. package/dist/core/skill-settings.js +40 -0
  166. package/dist/core/skill-settings.js.map +1 -0
  167. package/dist/core/storage/agent-storage.d.ts +134 -0
  168. package/dist/core/storage/agent-storage.d.ts.map +1 -0
  169. package/dist/core/storage/agent-storage.js +498 -0
  170. package/dist/core/storage/agent-storage.js.map +1 -0
  171. package/dist/core/storage/eventStorage/fileEventStorage.d.ts +100 -0
  172. package/dist/core/storage/eventStorage/fileEventStorage.d.ts.map +1 -0
  173. package/dist/core/storage/eventStorage/fileEventStorage.js +494 -0
  174. package/dist/core/storage/eventStorage/fileEventStorage.js.map +1 -0
  175. package/dist/core/storage/eventStorage/index.d.ts +31 -0
  176. package/dist/core/storage/eventStorage/index.d.ts.map +1 -0
  177. package/dist/core/storage/eventStorage/index.js +31 -0
  178. package/dist/core/storage/eventStorage/index.js.map +1 -0
  179. package/dist/core/storage/eventStorage/memoryEventStorage.d.ts +87 -0
  180. package/dist/core/storage/eventStorage/memoryEventStorage.d.ts.map +1 -0
  181. package/dist/core/storage/eventStorage/memoryEventStorage.js +244 -0
  182. package/dist/core/storage/eventStorage/memoryEventStorage.js.map +1 -0
  183. package/dist/core/storage/eventStorage/sqliteEventStorage.d.ts +45 -0
  184. package/dist/core/storage/eventStorage/sqliteEventStorage.d.ts.map +1 -0
  185. package/dist/core/storage/eventStorage/sqliteEventStorage.js +301 -0
  186. package/dist/core/storage/eventStorage/sqliteEventStorage.js.map +1 -0
  187. package/dist/core/storage/eventStorage/types.d.ts +142 -0
  188. package/dist/core/storage/eventStorage/types.d.ts.map +1 -0
  189. package/dist/core/storage/eventStorage/types.js +43 -0
  190. package/dist/core/storage/eventStorage/types.js.map +1 -0
  191. package/dist/core/storage/eventStorage/validation.d.ts +30 -0
  192. package/dist/core/storage/eventStorage/validation.d.ts.map +1 -0
  193. package/dist/core/storage/eventStorage/validation.js +68 -0
  194. package/dist/core/storage/eventStorage/validation.js.map +1 -0
  195. package/dist/core/storage/legacy-migrations.d.ts +45 -0
  196. package/dist/core/storage/legacy-migrations.d.ts.map +1 -0
  197. package/dist/core/storage/legacy-migrations.js +295 -0
  198. package/dist/core/storage/legacy-migrations.js.map +1 -0
  199. package/dist/core/storage/memory-storage.d.ts +105 -0
  200. package/dist/core/storage/memory-storage.d.ts.map +1 -0
  201. package/dist/core/storage/memory-storage.js +415 -0
  202. package/dist/core/storage/memory-storage.js.map +1 -0
  203. package/dist/core/storage/migration-runner.d.ts +96 -0
  204. package/dist/core/storage/migration-runner.d.ts.map +1 -0
  205. package/dist/core/storage/migration-runner.js +306 -0
  206. package/dist/core/storage/migration-runner.js.map +1 -0
  207. package/dist/core/storage/queue-storage.d.ts +147 -0
  208. package/dist/core/storage/queue-storage.d.ts.map +1 -0
  209. package/dist/core/storage/queue-storage.js +290 -0
  210. package/dist/core/storage/queue-storage.js.map +1 -0
  211. package/dist/core/storage/skill-storage.d.ts +136 -0
  212. package/dist/core/storage/skill-storage.d.ts.map +1 -0
  213. package/dist/core/storage/skill-storage.js +474 -0
  214. package/dist/core/storage/skill-storage.js.map +1 -0
  215. package/dist/core/storage/sqlite-schema.d.ts +95 -0
  216. package/dist/core/storage/sqlite-schema.d.ts.map +1 -0
  217. package/dist/core/storage/sqlite-schema.js +156 -0
  218. package/dist/core/storage/sqlite-schema.js.map +1 -0
  219. package/dist/core/storage/sqlite-storage.d.ts +146 -0
  220. package/dist/core/storage/sqlite-storage.d.ts.map +1 -0
  221. package/dist/core/storage/sqlite-storage.js +709 -0
  222. package/dist/core/storage/sqlite-storage.js.map +1 -0
  223. package/dist/core/storage/storage-factory.d.ts +61 -0
  224. package/dist/core/storage/storage-factory.d.ts.map +1 -0
  225. package/dist/core/storage/storage-factory.js +794 -0
  226. package/dist/core/storage/storage-factory.js.map +1 -0
  227. package/dist/core/storage/validation.d.ts +36 -0
  228. package/dist/core/storage/validation.d.ts.map +1 -0
  229. package/dist/core/storage/validation.js +79 -0
  230. package/dist/core/storage/validation.js.map +1 -0
  231. package/dist/core/storage/world-storage.d.ts +114 -0
  232. package/dist/core/storage/world-storage.d.ts.map +1 -0
  233. package/dist/core/storage/world-storage.js +378 -0
  234. package/dist/core/storage/world-storage.js.map +1 -0
  235. package/dist/core/subscription.d.ts +43 -0
  236. package/dist/core/subscription.d.ts.map +1 -0
  237. package/dist/core/subscription.js +227 -0
  238. package/dist/core/subscription.js.map +1 -0
  239. package/dist/core/tool-utils.d.ts +80 -0
  240. package/dist/core/tool-utils.d.ts.map +1 -0
  241. package/dist/core/tool-utils.js +273 -0
  242. package/dist/core/tool-utils.js.map +1 -0
  243. package/dist/core/types.d.ts +595 -0
  244. package/dist/core/types.d.ts.map +1 -0
  245. package/dist/core/types.js +158 -0
  246. package/dist/core/types.js.map +1 -0
  247. package/dist/core/utils.d.ts +138 -0
  248. package/dist/core/utils.d.ts.map +1 -0
  249. package/dist/core/utils.js +478 -0
  250. package/dist/core/utils.js.map +1 -0
  251. package/dist/core/world-class.d.ts +43 -0
  252. package/dist/core/world-class.d.ts.map +1 -0
  253. package/dist/core/world-class.js +90 -0
  254. package/dist/core/world-class.js.map +1 -0
  255. package/dist/index.d.ts +18 -0
  256. package/dist/public/assets/agent-sprites-DJFgj-zP.png +0 -0
  257. package/dist/public/assets/border-KHK37r8y.svg +83 -0
  258. package/dist/public/assets/index-C9kPXL6G.css +1 -0
  259. package/dist/public/assets/index-DOQEHGWt.js +96 -0
  260. package/dist/public/index.html +21 -0
  261. package/dist/server/api.d.ts +2 -0
  262. package/dist/server/api.js +1124 -0
  263. package/dist/server/index.d.ts +29 -0
  264. package/dist/server/sse-handler.d.ts +62 -0
  265. package/dist/server/sse-handler.js +234 -0
  266. package/package.json +15 -3
  267. 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"}