agent-world 0.13.0 → 0.15.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 (263) hide show
  1. package/README.md +90 -17
  2. package/dist/cli/commands.d.ts +7 -1
  3. package/dist/cli/commands.js +27 -10
  4. package/dist/cli/hitl.d.ts +4 -1
  5. package/dist/cli/hitl.js +55 -20
  6. package/dist/cli/index.js +249 -97
  7. package/dist/cli/system-events.d.ts +27 -0
  8. package/dist/cli/system-events.js +63 -0
  9. package/dist/core/activity-tracker.d.ts +26 -0
  10. package/dist/core/activity-tracker.d.ts.map +1 -1
  11. package/dist/core/activity-tracker.js +21 -4
  12. package/dist/core/activity-tracker.js.map +1 -1
  13. package/dist/core/anthropic-direct.d.ts +2 -0
  14. package/dist/core/anthropic-direct.d.ts.map +1 -1
  15. package/dist/core/anthropic-direct.js +43 -1
  16. package/dist/core/anthropic-direct.js.map +1 -1
  17. package/dist/core/chat-constants.d.ts +12 -0
  18. package/dist/core/chat-constants.d.ts.map +1 -1
  19. package/dist/core/chat-constants.js +5 -0
  20. package/dist/core/chat-constants.js.map +1 -1
  21. package/dist/core/create-agent-tool.d.ts +5 -0
  22. package/dist/core/create-agent-tool.d.ts.map +1 -1
  23. package/dist/core/create-agent-tool.js +57 -34
  24. package/dist/core/create-agent-tool.js.map +1 -1
  25. package/dist/core/events/index.d.ts +5 -2
  26. package/dist/core/events/index.d.ts.map +1 -1
  27. package/dist/core/events/index.js +5 -2
  28. package/dist/core/events/index.js.map +1 -1
  29. package/dist/core/events/memory-manager.d.ts +26 -1
  30. package/dist/core/events/memory-manager.d.ts.map +1 -1
  31. package/dist/core/events/memory-manager.js +877 -72
  32. package/dist/core/events/memory-manager.js.map +1 -1
  33. package/dist/core/events/orchestrator.d.ts +8 -0
  34. package/dist/core/events/orchestrator.d.ts.map +1 -1
  35. package/dist/core/events/orchestrator.js +203 -36
  36. package/dist/core/events/orchestrator.js.map +1 -1
  37. package/dist/core/events/persistence.d.ts +21 -14
  38. package/dist/core/events/persistence.d.ts.map +1 -1
  39. package/dist/core/events/persistence.js +100 -35
  40. package/dist/core/events/persistence.js.map +1 -1
  41. package/dist/core/events/publishers.d.ts +13 -7
  42. package/dist/core/events/publishers.d.ts.map +1 -1
  43. package/dist/core/events/publishers.js +53 -37
  44. package/dist/core/events/publishers.js.map +1 -1
  45. package/dist/core/events/subscribers.d.ts +17 -14
  46. package/dist/core/events/subscribers.d.ts.map +1 -1
  47. package/dist/core/events/subscribers.js +61 -148
  48. package/dist/core/events/subscribers.js.map +1 -1
  49. package/dist/core/events/title-scheduler.d.ts +27 -0
  50. package/dist/core/events/title-scheduler.d.ts.map +1 -0
  51. package/dist/core/events/title-scheduler.js +135 -0
  52. package/dist/core/events/title-scheduler.js.map +1 -0
  53. package/dist/core/events/tool-bridge-logging.d.ts +4 -1
  54. package/dist/core/events/tool-bridge-logging.d.ts.map +1 -1
  55. package/dist/core/events/tool-bridge-logging.js +112 -13
  56. package/dist/core/events/tool-bridge-logging.js.map +1 -1
  57. package/dist/core/events-metadata.d.ts.map +1 -1
  58. package/dist/core/events-metadata.js +8 -4
  59. package/dist/core/events-metadata.js.map +1 -1
  60. package/dist/core/export.d.ts +1 -1
  61. package/dist/core/export.d.ts.map +1 -1
  62. package/dist/core/export.js +2 -15
  63. package/dist/core/export.js.map +1 -1
  64. package/dist/core/feature-path-logging.d.ts +50 -0
  65. package/dist/core/feature-path-logging.d.ts.map +1 -0
  66. package/dist/core/feature-path-logging.js +130 -0
  67. package/dist/core/feature-path-logging.js.map +1 -0
  68. package/dist/core/file-tools.d.ts +57 -1
  69. package/dist/core/file-tools.d.ts.map +1 -1
  70. package/dist/core/file-tools.js +329 -29
  71. package/dist/core/file-tools.js.map +1 -1
  72. package/dist/core/google-direct.d.ts +6 -1
  73. package/dist/core/google-direct.d.ts.map +1 -1
  74. package/dist/core/google-direct.js +76 -7
  75. package/dist/core/google-direct.js.map +1 -1
  76. package/dist/core/heartbeat.d.ts +34 -0
  77. package/dist/core/heartbeat.d.ts.map +1 -0
  78. package/dist/core/heartbeat.js +153 -0
  79. package/dist/core/heartbeat.js.map +1 -0
  80. package/dist/core/hitl-tool.d.ts +6 -12
  81. package/dist/core/hitl-tool.d.ts.map +1 -1
  82. package/dist/core/hitl-tool.js +66 -88
  83. package/dist/core/hitl-tool.js.map +1 -1
  84. package/dist/core/hitl.d.ts +61 -4
  85. package/dist/core/hitl.d.ts.map +1 -1
  86. package/dist/core/hitl.js +324 -60
  87. package/dist/core/hitl.js.map +1 -1
  88. package/dist/core/index.d.ts +11 -7
  89. package/dist/core/index.d.ts.map +1 -1
  90. package/dist/core/index.js +10 -6
  91. package/dist/core/index.js.map +1 -1
  92. package/dist/core/llm-manager.d.ts +15 -0
  93. package/dist/core/llm-manager.d.ts.map +1 -1
  94. package/dist/core/llm-manager.js +325 -40
  95. package/dist/core/llm-manager.js.map +1 -1
  96. package/dist/core/load-skill-tool.d.ts +36 -3
  97. package/dist/core/load-skill-tool.d.ts.map +1 -1
  98. package/dist/core/load-skill-tool.js +807 -93
  99. package/dist/core/load-skill-tool.js.map +1 -1
  100. package/dist/core/logger.d.ts +14 -0
  101. package/dist/core/logger.d.ts.map +1 -1
  102. package/dist/core/logger.js +15 -0
  103. package/dist/core/logger.js.map +1 -1
  104. package/dist/core/managers.d.ts +18 -50
  105. package/dist/core/managers.d.ts.map +1 -1
  106. package/dist/core/managers.js +340 -502
  107. package/dist/core/managers.js.map +1 -1
  108. package/dist/core/mcp-server-registry.d.ts +16 -1
  109. package/dist/core/mcp-server-registry.d.ts.map +1 -1
  110. package/dist/core/mcp-server-registry.js +162 -12
  111. package/dist/core/mcp-server-registry.js.map +1 -1
  112. package/dist/core/message-cutoff.d.ts +29 -0
  113. package/dist/core/message-cutoff.d.ts.map +1 -0
  114. package/dist/core/message-cutoff.js +63 -0
  115. package/dist/core/message-cutoff.js.map +1 -0
  116. package/dist/core/message-edit-manager.d.ts +54 -0
  117. package/dist/core/message-edit-manager.d.ts.map +1 -0
  118. package/dist/core/message-edit-manager.js +602 -0
  119. package/dist/core/message-edit-manager.js.map +1 -0
  120. package/dist/core/message-prep.d.ts +2 -0
  121. package/dist/core/message-prep.d.ts.map +1 -1
  122. package/dist/core/message-prep.js +39 -12
  123. package/dist/core/message-prep.js.map +1 -1
  124. package/dist/core/message-processing-control.d.ts +1 -0
  125. package/dist/core/message-processing-control.d.ts.map +1 -1
  126. package/dist/core/message-processing-control.js +23 -6
  127. package/dist/core/message-processing-control.js.map +1 -1
  128. package/dist/core/openai-direct.d.ts +9 -3
  129. package/dist/core/openai-direct.d.ts.map +1 -1
  130. package/dist/core/openai-direct.js +267 -33
  131. package/dist/core/openai-direct.js.map +1 -1
  132. package/dist/core/optional-tracers/opik-runtime.d.ts +32 -0
  133. package/dist/core/optional-tracers/opik-runtime.d.ts.map +1 -0
  134. package/dist/core/optional-tracers/opik-runtime.js +141 -0
  135. package/dist/core/optional-tracers/opik-runtime.js.map +1 -0
  136. package/dist/core/queue-manager.d.ts +84 -0
  137. package/dist/core/queue-manager.d.ts.map +1 -0
  138. package/dist/core/queue-manager.js +814 -0
  139. package/dist/core/queue-manager.js.map +1 -0
  140. package/dist/core/reasoning-controls.d.ts +30 -0
  141. package/dist/core/reasoning-controls.d.ts.map +1 -0
  142. package/dist/core/reasoning-controls.js +118 -0
  143. package/dist/core/reasoning-controls.js.map +1 -0
  144. package/dist/core/reliability-config.d.ts +82 -0
  145. package/dist/core/reliability-config.d.ts.map +1 -0
  146. package/dist/core/reliability-config.js +106 -0
  147. package/dist/core/reliability-config.js.map +1 -0
  148. package/dist/core/reliability-runtime.d.ts +53 -0
  149. package/dist/core/reliability-runtime.d.ts.map +1 -0
  150. package/dist/core/reliability-runtime.js +92 -0
  151. package/dist/core/reliability-runtime.js.map +1 -0
  152. package/dist/core/security/guardrails.d.ts +21 -0
  153. package/dist/core/security/guardrails.d.ts.map +1 -0
  154. package/dist/core/security/guardrails.js +111 -0
  155. package/dist/core/security/guardrails.js.map +1 -0
  156. package/dist/core/send-message-tool.d.ts +79 -0
  157. package/dist/core/send-message-tool.d.ts.map +1 -0
  158. package/dist/core/send-message-tool.js +222 -0
  159. package/dist/core/send-message-tool.js.map +1 -0
  160. package/dist/core/shell-cmd-tool.d.ts +82 -1
  161. package/dist/core/shell-cmd-tool.d.ts.map +1 -1
  162. package/dist/core/shell-cmd-tool.js +854 -42
  163. package/dist/core/shell-cmd-tool.js.map +1 -1
  164. package/dist/core/skill-registry.d.ts +2 -0
  165. package/dist/core/skill-registry.d.ts.map +1 -1
  166. package/dist/core/skill-registry.js +52 -2
  167. package/dist/core/skill-registry.js.map +1 -1
  168. package/dist/core/storage/eventStorage/fileEventStorage.d.ts +5 -0
  169. package/dist/core/storage/eventStorage/fileEventStorage.d.ts.map +1 -1
  170. package/dist/core/storage/eventStorage/fileEventStorage.js +61 -0
  171. package/dist/core/storage/eventStorage/fileEventStorage.js.map +1 -1
  172. package/dist/core/storage/eventStorage/memoryEventStorage.d.ts +5 -0
  173. package/dist/core/storage/eventStorage/memoryEventStorage.d.ts.map +1 -1
  174. package/dist/core/storage/eventStorage/memoryEventStorage.js +34 -0
  175. package/dist/core/storage/eventStorage/memoryEventStorage.js.map +1 -1
  176. package/dist/core/storage/eventStorage/sqliteEventStorage.d.ts +1 -0
  177. package/dist/core/storage/eventStorage/sqliteEventStorage.d.ts.map +1 -1
  178. package/dist/core/storage/eventStorage/sqliteEventStorage.js +19 -2
  179. package/dist/core/storage/eventStorage/sqliteEventStorage.js.map +1 -1
  180. package/dist/core/storage/eventStorage/types.d.ts +6 -0
  181. package/dist/core/storage/eventStorage/types.d.ts.map +1 -1
  182. package/dist/core/storage/eventStorage/types.js +1 -0
  183. package/dist/core/storage/eventStorage/types.js.map +1 -1
  184. package/dist/core/storage/eventStorage/validation.d.ts.map +1 -1
  185. package/dist/core/storage/eventStorage/validation.js +2 -1
  186. package/dist/core/storage/eventStorage/validation.js.map +1 -1
  187. package/dist/core/storage/github-world-import.d.ts +84 -0
  188. package/dist/core/storage/github-world-import.d.ts.map +1 -0
  189. package/dist/core/storage/github-world-import.js +365 -0
  190. package/dist/core/storage/github-world-import.js.map +1 -0
  191. package/dist/core/storage/memory-storage.d.ts +19 -8
  192. package/dist/core/storage/memory-storage.d.ts.map +1 -1
  193. package/dist/core/storage/memory-storage.js +147 -49
  194. package/dist/core/storage/memory-storage.js.map +1 -1
  195. package/dist/core/storage/queue-storage.d.ts +1 -0
  196. package/dist/core/storage/queue-storage.d.ts.map +1 -1
  197. package/dist/core/storage/queue-storage.js +3 -2
  198. package/dist/core/storage/queue-storage.js.map +1 -1
  199. package/dist/core/storage/sqlite-storage.d.ts +14 -9
  200. package/dist/core/storage/sqlite-storage.d.ts.map +1 -1
  201. package/dist/core/storage/sqlite-storage.js +131 -154
  202. package/dist/core/storage/sqlite-storage.js.map +1 -1
  203. package/dist/core/storage/storage-factory.d.ts +3 -0
  204. package/dist/core/storage/storage-factory.d.ts.map +1 -1
  205. package/dist/core/storage/storage-factory.js +175 -89
  206. package/dist/core/storage/storage-factory.js.map +1 -1
  207. package/dist/core/storage/world-storage.d.ts +1 -1
  208. package/dist/core/storage/world-storage.d.ts.map +1 -1
  209. package/dist/core/storage/world-storage.js +5 -1
  210. package/dist/core/storage/world-storage.js.map +1 -1
  211. package/dist/core/storage-init.d.ts +11 -0
  212. package/dist/core/storage-init.d.ts.map +1 -0
  213. package/dist/core/storage-init.js +122 -0
  214. package/dist/core/storage-init.js.map +1 -0
  215. package/dist/core/subscription.d.ts +8 -1
  216. package/dist/core/subscription.d.ts.map +1 -1
  217. package/dist/core/subscription.js +130 -23
  218. package/dist/core/subscription.js.map +1 -1
  219. package/dist/core/tool-approval.d.ts +45 -0
  220. package/dist/core/tool-approval.d.ts.map +1 -0
  221. package/dist/core/tool-approval.js +223 -0
  222. package/dist/core/tool-approval.js.map +1 -0
  223. package/dist/core/tool-execution-envelope.d.ts +87 -0
  224. package/dist/core/tool-execution-envelope.d.ts.map +1 -0
  225. package/dist/core/tool-execution-envelope.js +168 -0
  226. package/dist/core/tool-execution-envelope.js.map +1 -0
  227. package/dist/core/tool-utils.d.ts +7 -2
  228. package/dist/core/tool-utils.d.ts.map +1 -1
  229. package/dist/core/tool-utils.js +81 -17
  230. package/dist/core/tool-utils.js.map +1 -1
  231. package/dist/core/types.d.ts +67 -19
  232. package/dist/core/types.d.ts.map +1 -1
  233. package/dist/core/types.js +3 -0
  234. package/dist/core/types.js.map +1 -1
  235. package/dist/core/utils.d.ts +7 -0
  236. package/dist/core/utils.d.ts.map +1 -1
  237. package/dist/core/utils.js +71 -21
  238. package/dist/core/utils.js.map +1 -1
  239. package/dist/core/web-fetch-tool.d.ts +72 -0
  240. package/dist/core/web-fetch-tool.d.ts.map +1 -0
  241. package/dist/core/web-fetch-tool.js +491 -0
  242. package/dist/core/web-fetch-tool.js.map +1 -0
  243. package/dist/core/world-registry.d.ts +84 -0
  244. package/dist/core/world-registry.d.ts.map +1 -0
  245. package/dist/core/world-registry.js +247 -0
  246. package/dist/core/world-registry.js.map +1 -0
  247. package/dist/public/assets/index-Be-1xtV-.js +104 -0
  248. package/dist/public/assets/index-tsDdiXDU.css +1 -0
  249. package/dist/public/index.html +2 -2
  250. package/dist/public/mcp-sandbox-proxy.html +148 -0
  251. package/dist/server/api.js +260 -18
  252. package/dist/server/error-response.d.ts +27 -0
  253. package/dist/server/error-response.js +77 -0
  254. package/dist/server/index.d.ts +2 -1
  255. package/dist/server/index.js +6 -2
  256. package/dist/server/sse-handler.d.ts +11 -1
  257. package/dist/server/sse-handler.js +194 -34
  258. package/migrations/0015_add_message_queue.sql +36 -0
  259. package/migrations/0016_add_world_heartbeat.sql +13 -0
  260. package/migrations/0017_add_title_provenance.sql +7 -0
  261. package/package.json +31 -10
  262. package/dist/public/assets/index-BW41BxMy.css +0 -1
  263. package/dist/public/assets/index-kO6UJFwK.js +0 -96
@@ -0,0 +1,223 @@
1
+ /**
2
+ * Tool Approval Module - Shared HITL approval flow for built-in tools.
3
+ *
4
+ * Purpose:
5
+ * - Provide a reusable wrapper around HITL option prompts for tool-level approvals.
6
+ *
7
+ * Key Features:
8
+ * - Standardized approval result contract (`approved`, `reason`, `optionId`, `source`)
9
+ * - Configurable options/default and multiple approved option IDs
10
+ * - Deterministic deny/timeout handling for sensitive tool operations
11
+ * - Optional durable synthetic approval prompt/resolution message persistence
12
+ *
13
+ * Implementation Notes:
14
+ * - Delegates prompt transport/runtime behavior to `requestWorldOption`
15
+ * - Returns normalized results to reduce duplicated approval mapping logic in tools
16
+ * - When message context is available, persists canonical approval prompt/resolution artifacts
17
+ *
18
+ * Recent Changes:
19
+ * - 2026-03-12: Added optional durable approval prompt/resolution persistence with separate requestId vs owning toolCallId support.
20
+ * - 2026-02-28: Initial shared approval helper extracted for `load_skill`, `create_agent`, and `web_fetch`.
21
+ */
22
+ import { requestWorldOption } from './hitl.js';
23
+ import { createStorageWithWrappers } from './storage/storage-factory.js';
24
+ import { generateId } from './utils.js';
25
+ function normalizeApprovalMessages(messages) {
26
+ return Array.isArray(messages) ? messages : null;
27
+ }
28
+ function resolveApprovalRequestId(request) {
29
+ const explicitRequestId = String(request.requestId || '').trim();
30
+ if (explicitRequestId) {
31
+ return explicitRequestId;
32
+ }
33
+ const explicitToolCallId = String(request.toolCallId || '').trim();
34
+ if (explicitToolCallId) {
35
+ return `${explicitToolCallId}::approval`;
36
+ }
37
+ const metadataToolCallId = request.metadata && typeof request.metadata.toolCallId === 'string'
38
+ ? String(request.metadata.toolCallId).trim()
39
+ : '';
40
+ if (metadataToolCallId) {
41
+ return `${metadataToolCallId}::approval`;
42
+ }
43
+ return generateId();
44
+ }
45
+ function resolveOwningToolCallId(request, requestId) {
46
+ const explicitToolCallId = String(request.toolCallId || '').trim();
47
+ if (explicitToolCallId) {
48
+ return explicitToolCallId;
49
+ }
50
+ const metadataToolCallId = request.metadata && typeof request.metadata.toolCallId === 'string'
51
+ ? String(request.metadata.toolCallId).trim()
52
+ : '';
53
+ if (metadataToolCallId) {
54
+ return metadataToolCallId;
55
+ }
56
+ return requestId;
57
+ }
58
+ function resolveApprovalDefaultOptionLabel(request) {
59
+ const defaultOptionId = String(request.defaultOptionId || '').trim();
60
+ if (!defaultOptionId) {
61
+ return undefined;
62
+ }
63
+ const match = request.options.find((option) => String(option?.id || '').trim() === defaultOptionId);
64
+ const label = String(match?.label || '').trim();
65
+ return label || undefined;
66
+ }
67
+ function buildApprovalAssistantContent(metadata) {
68
+ const source = typeof metadata?.source === 'string' ? metadata.source.trim() : '';
69
+ const skillId = typeof metadata?.skillId === 'string' ? metadata.skillId.trim() : '';
70
+ if (source === 'load_skill' && skillId) {
71
+ return `Calling tool: human_intervention_request (skill_id: "${skillId}")`;
72
+ }
73
+ return 'Calling tool: human_intervention_request';
74
+ }
75
+ async function persistApprovalAgentMemoryIfAvailable(request) {
76
+ const messages = normalizeApprovalMessages(request.messages);
77
+ const worldId = String(request.world?.id || '').trim();
78
+ const agentName = String(request.agentName || '').trim();
79
+ const world = request.world;
80
+ if (!messages || !worldId || !agentName || !world?.agents || typeof world.agents.get !== 'function') {
81
+ return;
82
+ }
83
+ const agent = world.agents.get(agentName);
84
+ if (!agent) {
85
+ return;
86
+ }
87
+ const storage = await createStorageWithWrappers();
88
+ await storage.saveAgent(worldId, agent);
89
+ }
90
+ async function persistApprovalPromptMessage(options) {
91
+ const messages = normalizeApprovalMessages(options.request.messages);
92
+ if (!messages) {
93
+ return;
94
+ }
95
+ const existingPrompt = messages.some((message) => message?.role === 'assistant'
96
+ && Array.isArray(message?.tool_calls)
97
+ && message.tool_calls.some((toolCall) => String(toolCall?.id || '').trim() === options.requestId));
98
+ if (existingPrompt) {
99
+ return;
100
+ }
101
+ const approvalMetadata = {
102
+ ...(options.request.metadata && typeof options.request.metadata === 'object' ? options.request.metadata : {}),
103
+ toolCallId: options.toolCallId,
104
+ };
105
+ const promptArguments = {
106
+ title: options.request.title,
107
+ question: options.request.message,
108
+ options: options.request.options.map((option) => ({
109
+ id: option.id,
110
+ label: option.label,
111
+ ...(typeof option.description === 'string' && option.description.trim()
112
+ ? { description: option.description.trim() }
113
+ : {}),
114
+ })),
115
+ defaultOptionId: options.request.defaultOptionId,
116
+ ...(resolveApprovalDefaultOptionLabel(options.request)
117
+ ? { defaultOption: resolveApprovalDefaultOptionLabel(options.request) }
118
+ : {}),
119
+ metadata: approvalMetadata,
120
+ };
121
+ messages.push({
122
+ role: 'assistant',
123
+ content: buildApprovalAssistantContent(options.request.metadata),
124
+ tool_calls: [{
125
+ id: options.requestId,
126
+ type: 'function',
127
+ function: {
128
+ name: 'human_intervention_request',
129
+ arguments: JSON.stringify(promptArguments),
130
+ },
131
+ }],
132
+ sender: String(options.request.agentName || '').trim() || 'assistant',
133
+ createdAt: new Date(),
134
+ chatId: options.request.chatId,
135
+ messageId: generateId(),
136
+ replyToMessageId: options.toolCallId || undefined,
137
+ agentId: String(options.request.agentName || '').trim() || undefined,
138
+ });
139
+ await persistApprovalAgentMemoryIfAvailable(options.request);
140
+ }
141
+ async function persistApprovalResolutionMessage(options) {
142
+ const messages = normalizeApprovalMessages(options.request.messages);
143
+ if (!messages) {
144
+ return;
145
+ }
146
+ const existingResolution = messages.some((message) => message?.role === 'tool'
147
+ && String(message?.tool_call_id || '').trim() === options.requestId);
148
+ if (existingResolution) {
149
+ return;
150
+ }
151
+ const toolName = options.request.metadata && typeof options.request.metadata.tool === 'string'
152
+ ? String(options.request.metadata.tool).trim() || null
153
+ : null;
154
+ const payload = {
155
+ requestId: options.requestId,
156
+ toolCallId: options.toolCallId,
157
+ tool: toolName,
158
+ optionId: options.result.optionId,
159
+ source: options.result.source,
160
+ reason: options.result.reason,
161
+ status: options.result.approved
162
+ ? 'approved'
163
+ : options.result.reason === 'timeout'
164
+ ? 'timeout'
165
+ : 'denied',
166
+ };
167
+ messages.push({
168
+ role: 'tool',
169
+ content: JSON.stringify(payload),
170
+ tool_call_id: options.requestId,
171
+ sender: String(options.request.agentName || '').trim() || 'assistant',
172
+ createdAt: new Date(),
173
+ chatId: options.request.chatId,
174
+ messageId: generateId(),
175
+ agentId: String(options.request.agentName || '').trim() || undefined,
176
+ });
177
+ await persistApprovalAgentMemoryIfAvailable(options.request);
178
+ }
179
+ export async function requestToolApproval(request) {
180
+ const approvedSet = new Set(request.approvedOptionIds
181
+ .map((id) => String(id || '').trim())
182
+ .filter(Boolean));
183
+ const requestId = resolveApprovalRequestId(request);
184
+ const toolCallId = resolveOwningToolCallId(request, requestId);
185
+ await persistApprovalPromptMessage({
186
+ request,
187
+ requestId,
188
+ toolCallId,
189
+ });
190
+ const resolution = await requestWorldOption(request.world, {
191
+ requestId,
192
+ title: request.title,
193
+ message: request.message,
194
+ chatId: request.chatId,
195
+ defaultOptionId: request.defaultOptionId,
196
+ options: request.options,
197
+ metadata: {
198
+ ...(request.metadata && typeof request.metadata === 'object' ? request.metadata : {}),
199
+ toolCallId,
200
+ },
201
+ agentName: request.agentName ?? null,
202
+ });
203
+ const result = approvedSet.has(resolution.optionId)
204
+ ? {
205
+ approved: true,
206
+ reason: 'approved',
207
+ optionId: resolution.optionId,
208
+ source: resolution.source,
209
+ }
210
+ : {
211
+ approved: false,
212
+ reason: resolution.source === 'timeout' ? 'timeout' : 'user_denied',
213
+ optionId: resolution.optionId,
214
+ source: resolution.source,
215
+ };
216
+ await persistApprovalResolutionMessage({
217
+ request,
218
+ requestId,
219
+ toolCallId,
220
+ result,
221
+ });
222
+ return result;
223
+ }
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tool-approval.js","sourceRoot":"","sources":["../../core/tool-approval.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,87 @@
1
+ /**
2
+ * Tool Execution Envelope
3
+ *
4
+ * Purpose:
5
+ * - Define the persisted preview/result split for completed tool executions.
6
+ *
7
+ * Key Features:
8
+ * - Shared core envelope and preview types for adopted tools.
9
+ * - Parsing and serialization helpers for persisted tool-result records.
10
+ * - Utility helpers for artifact metadata and LLM-safe result extraction.
11
+ *
12
+ * Notes on Implementation:
13
+ * - `preview` is durable UI/history data.
14
+ * - `result` is the canonical payload reintroduced into LLM continuation.
15
+ * - The helpers here stay transport-agnostic and do not depend on SSE state.
16
+ *
17
+ * Recent Changes:
18
+ * - 2026-03-06: Initial envelope contract for `shell_cmd` and `load_skill`.
19
+ */
20
+ export type ToolPreviewKind = 'text' | 'markdown' | 'artifact' | 'media' | 'graphic' | 'url';
21
+ export type ToolPreviewRenderer = 'text' | 'markdown' | 'image' | 'svg' | 'audio' | 'video' | 'youtube' | 'file';
22
+ export interface ToolArtifactReference {
23
+ path?: string;
24
+ url?: string;
25
+ media_type?: string;
26
+ bytes?: number;
27
+ display_name?: string;
28
+ }
29
+ interface ToolPreviewBase {
30
+ kind: ToolPreviewKind;
31
+ renderer?: ToolPreviewRenderer;
32
+ media_type?: string;
33
+ title?: string;
34
+ }
35
+ export interface ToolTextPreview extends ToolPreviewBase {
36
+ kind: 'text' | 'markdown';
37
+ text: string;
38
+ }
39
+ export interface ToolUrlPreview extends ToolPreviewBase {
40
+ kind: 'url';
41
+ url: string;
42
+ text?: string;
43
+ }
44
+ export interface ToolArtifactPreview extends ToolPreviewBase {
45
+ kind: 'artifact' | 'media' | 'graphic';
46
+ artifact: ToolArtifactReference;
47
+ url?: string;
48
+ text?: string;
49
+ }
50
+ export type ToolPreview = ToolTextPreview | ToolUrlPreview | ToolArtifactPreview;
51
+ export interface ToolExecutionEnvelope<T = unknown> {
52
+ __type: 'tool_execution_envelope';
53
+ version: 1;
54
+ tool: string;
55
+ tool_call_id?: string;
56
+ status?: string;
57
+ preview: ToolPreview | ToolPreview[] | null;
58
+ result: T;
59
+ }
60
+ export declare function isToolExecutionEnvelope(value: unknown): value is ToolExecutionEnvelope;
61
+ export declare function parseToolExecutionEnvelope(value: unknown): ToolExecutionEnvelope | null;
62
+ export declare function parseToolExecutionEnvelopeContent(content: string): ToolExecutionEnvelope | null;
63
+ export declare function serializeToolExecutionEnvelope(envelope: ToolExecutionEnvelope): string;
64
+ export declare function normalizeToolPreviewItems(preview: ToolExecutionEnvelope['preview']): ToolPreview[];
65
+ export declare function stringifyToolExecutionResult(result: unknown): string;
66
+ export declare function buildToolArtifactPreviewUrl(options: {
67
+ path: string;
68
+ worldId?: string | null;
69
+ }): string;
70
+ export declare function getToolEventPreviewPayload(content: string): ToolExecutionEnvelope['preview'] | undefined;
71
+ export declare function guessToolPreviewRenderer(mediaType: string | undefined): ToolPreviewRenderer | undefined;
72
+ export declare function guessMediaTypeFromPath(filePath: string): string | undefined;
73
+ export declare function createTextToolPreview(text: string, options?: {
74
+ markdown?: boolean;
75
+ title?: string;
76
+ }): ToolTextPreview;
77
+ export declare function createArtifactToolPreview(options: ToolArtifactReference & {
78
+ title?: string;
79
+ url?: string;
80
+ }): ToolArtifactPreview;
81
+ export declare function createUrlToolPreview(url: string, options?: {
82
+ title?: string;
83
+ text?: string;
84
+ media_type?: string;
85
+ renderer?: ToolPreviewRenderer;
86
+ }): ToolUrlPreview;
87
+ export {};
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tool-execution-envelope.d.ts","sourceRoot":"","sources":["../../core/tool-execution-envelope.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,168 @@
1
+ /**
2
+ * Tool Execution Envelope
3
+ *
4
+ * Purpose:
5
+ * - Define the persisted preview/result split for completed tool executions.
6
+ *
7
+ * Key Features:
8
+ * - Shared core envelope and preview types for adopted tools.
9
+ * - Parsing and serialization helpers for persisted tool-result records.
10
+ * - Utility helpers for artifact metadata and LLM-safe result extraction.
11
+ *
12
+ * Notes on Implementation:
13
+ * - `preview` is durable UI/history data.
14
+ * - `result` is the canonical payload reintroduced into LLM continuation.
15
+ * - The helpers here stay transport-agnostic and do not depend on SSE state.
16
+ *
17
+ * Recent Changes:
18
+ * - 2026-03-06: Initial envelope contract for `shell_cmd` and `load_skill`.
19
+ */
20
+ import { basename, extname } from 'path';
21
+ export function isToolExecutionEnvelope(value) {
22
+ if (!value || typeof value !== 'object' || Array.isArray(value)) {
23
+ return false;
24
+ }
25
+ const record = value;
26
+ return record.__type === 'tool_execution_envelope'
27
+ && record.version === 1
28
+ && typeof record.tool === 'string'
29
+ && Object.prototype.hasOwnProperty.call(record, 'preview')
30
+ && Object.prototype.hasOwnProperty.call(record, 'result');
31
+ }
32
+ export function parseToolExecutionEnvelope(value) {
33
+ return isToolExecutionEnvelope(value) ? value : null;
34
+ }
35
+ export function parseToolExecutionEnvelopeContent(content) {
36
+ const normalized = String(content || '').trim();
37
+ if (!normalized) {
38
+ return null;
39
+ }
40
+ try {
41
+ return parseToolExecutionEnvelope(JSON.parse(normalized));
42
+ }
43
+ catch {
44
+ return null;
45
+ }
46
+ }
47
+ export function serializeToolExecutionEnvelope(envelope) {
48
+ return JSON.stringify(envelope);
49
+ }
50
+ export function normalizeToolPreviewItems(preview) {
51
+ if (!preview) {
52
+ return [];
53
+ }
54
+ return Array.isArray(preview) ? preview : [preview];
55
+ }
56
+ export function stringifyToolExecutionResult(result) {
57
+ if (typeof result === 'string') {
58
+ return result;
59
+ }
60
+ if (result == null) {
61
+ return '';
62
+ }
63
+ try {
64
+ return JSON.stringify(result, null, 2);
65
+ }
66
+ catch {
67
+ return String(result);
68
+ }
69
+ }
70
+ export function buildToolArtifactPreviewUrl(options) {
71
+ const params = new URLSearchParams();
72
+ params.set('path', options.path);
73
+ if (options.worldId) {
74
+ params.set('worldId', options.worldId);
75
+ }
76
+ return `/api/tool-artifact?${params.toString()}`;
77
+ }
78
+ export function getToolEventPreviewPayload(content) {
79
+ const envelope = parseToolExecutionEnvelopeContent(content);
80
+ if (!envelope) {
81
+ return undefined;
82
+ }
83
+ if (envelope.preview == null) {
84
+ return undefined;
85
+ }
86
+ return envelope.preview;
87
+ }
88
+ export function guessToolPreviewRenderer(mediaType) {
89
+ const normalized = String(mediaType || '').trim().toLowerCase();
90
+ if (!normalized) {
91
+ return undefined;
92
+ }
93
+ if (normalized === 'image/svg+xml')
94
+ return 'svg';
95
+ if (normalized.startsWith('image/'))
96
+ return 'image';
97
+ if (normalized.startsWith('audio/'))
98
+ return 'audio';
99
+ if (normalized.startsWith('video/'))
100
+ return 'video';
101
+ if (normalized === 'text/markdown')
102
+ return 'markdown';
103
+ if (normalized.startsWith('text/'))
104
+ return 'text';
105
+ return 'file';
106
+ }
107
+ export function guessMediaTypeFromPath(filePath) {
108
+ const extension = extname(String(filePath || '')).toLowerCase();
109
+ const mediaTypeByExtension = {
110
+ '.md': 'text/markdown',
111
+ '.txt': 'text/plain',
112
+ '.svg': 'image/svg+xml',
113
+ '.png': 'image/png',
114
+ '.jpg': 'image/jpeg',
115
+ '.jpeg': 'image/jpeg',
116
+ '.gif': 'image/gif',
117
+ '.webp': 'image/webp',
118
+ '.mp3': 'audio/mpeg',
119
+ '.wav': 'audio/wav',
120
+ '.ogg': 'audio/ogg',
121
+ '.m4a': 'audio/mp4',
122
+ '.mp4': 'video/mp4',
123
+ '.webm': 'video/webm',
124
+ '.mov': 'video/quicktime',
125
+ };
126
+ return mediaTypeByExtension[extension];
127
+ }
128
+ export function createTextToolPreview(text, options = {}) {
129
+ return {
130
+ kind: options.markdown ? 'markdown' : 'text',
131
+ renderer: options.markdown ? 'markdown' : 'text',
132
+ ...(options.title ? { title: options.title } : {}),
133
+ text: String(text || ''),
134
+ };
135
+ }
136
+ export function createArtifactToolPreview(options) {
137
+ const mediaType = options.media_type || guessMediaTypeFromPath(options.path || options.display_name || '');
138
+ const renderer = guessToolPreviewRenderer(mediaType);
139
+ const kind = mediaType === 'image/svg+xml'
140
+ ? 'graphic'
141
+ : mediaType && (mediaType.startsWith('image/') || mediaType.startsWith('audio/') || mediaType.startsWith('video/'))
142
+ ? 'media'
143
+ : 'artifact';
144
+ return {
145
+ kind,
146
+ ...(renderer ? { renderer } : {}),
147
+ ...(mediaType ? { media_type: mediaType } : {}),
148
+ ...(options.title ? { title: options.title } : {}),
149
+ ...(options.url ? { url: options.url } : {}),
150
+ artifact: {
151
+ ...(options.path ? { path: options.path } : {}),
152
+ ...(options.url ? { url: options.url } : {}),
153
+ ...(mediaType ? { media_type: mediaType } : {}),
154
+ ...(typeof options.bytes === 'number' ? { bytes: options.bytes } : {}),
155
+ display_name: options.display_name || basename(String(options.path || options.url || 'artifact')),
156
+ },
157
+ };
158
+ }
159
+ export function createUrlToolPreview(url, options = {}) {
160
+ return {
161
+ kind: 'url',
162
+ ...(options.renderer ? { renderer: options.renderer } : {}),
163
+ ...(options.media_type ? { media_type: options.media_type } : {}),
164
+ ...(options.title ? { title: options.title } : {}),
165
+ ...(options.text ? { text: options.text } : {}),
166
+ url,
167
+ };
168
+ }
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tool-execution-envelope.js","sourceRoot":"","sources":["../../core/tool-execution-envelope.ts"],"names":[],"mappings":"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"}
@@ -16,8 +16,12 @@
16
16
  * - Consistent parameter validation for both MCP and built-in tools
17
17
  *
18
18
  * Recent Changes:
19
+ * - 2026-03-11: Strip workingDirectory/working_directory from shell_cmd args in normalizeKnownParameterAliases; these are context fields the LLM echoes from the system prompt, not tool parameters.
20
+ * - 2026-03-11: Emit system error event in wrapToolWithValidation when tool parameter validation fails so errors surface in the UI.
21
+ * - 2026-03-01: Added backward-compatible normalization for `.includePattern` -> `includePattern` in `list_files` and `grep`.
19
22
  * - 2026-02-20: Enforced JSON-schema `additionalProperties: false` by rejecting unknown tool arguments during validation.
20
- * - 2026-02-20: Added `human_intervention_request` parameter alias normalization for `prompt` -> `question` and snake/kebab-case confirmation/input fields.
23
+ * - 2026-02-27: Added backward-compat cleanup for removed HITL confirmation args by stripping them before schema validation.
24
+ * - 2026-02-27: Removed deprecated `human_intervention_request` confirmation argument alias normalization; kept `prompt` -> `question` and `default_option` -> `defaultOption`.
21
25
  * - 2026-02-20: Added `create_agent` alias normalization for `auto-reply`/`auto_reply` -> `autoReply` and `next agent` variants -> `nextAgent`.
22
26
  * - 2026-02-19: Added parameter alias normalization for `read_file`/`read_files` (`path` -> `filePath`) and `grep` path aliases (`path` -> `directoryPath`) to align with shell-style path handling.
23
27
  * - 2026-02-06: Removed legacy manual tool-intervention functionality
@@ -49,9 +53,10 @@ interface FunctionCall {
49
53
  * @param world - World context for event publishing
50
54
  * @param agent - Agent making the calls
51
55
  * @param messageId - Message ID for tracking
56
+ * @param chatId - Explicit chat scope for tool-error event publication
52
57
  * @returns Object with validCalls array and toolResults array for invalid calls
53
58
  */
54
- export declare function filterAndHandleEmptyNamedFunctionCalls(functionCalls: FunctionCall[], world: World, agent: Agent, messageId: string): {
59
+ export declare function filterAndHandleEmptyNamedFunctionCalls(functionCalls: FunctionCall[], world: World, agent: Agent, messageId: string, chatId: string): {
55
60
  validCalls: FunctionCall[];
56
61
  toolResults: ChatMessage[];
57
62
  };
@@ -1 +1 @@
1
- {"version":3,"file":"tool-utils.d.ts","sourceRoot":"","sources":["../../core/tool-utils.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAEH,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,WAAW,EAAiB,MAAM,YAAY,CAAC;AA+GtE;;;;GAIG;AACH,wBAAgB,kBAAkB,IAAI,MAAM,CAE3C;AAED;;GAEG;AACH,UAAU,YAAY;IACpB,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE;QACT,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,SAAS,CAAC,EAAE,MAAM,CAAC;KACpB,CAAC;CACH;AAED;;;;;;;;GAQG;AACH,wBAAgB,sCAAsC,CACpD,aAAa,EAAE,YAAY,EAAE,EAC7B,KAAK,EAAE,KAAK,EACZ,KAAK,EAAE,KAAK,EACZ,SAAS,EAAE,MAAM,GAChB;IAAE,UAAU,EAAE,YAAY,EAAE,CAAC;IAAC,WAAW,EAAE,WAAW,EAAE,CAAA;CAAE,CAwC5D;AAED;;;;;;;;GAQG;AACH,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,GAAG,EAAE,UAAU,EAAE,GAAG,EAAE,QAAQ,EAAE,MAAM,GAAG;IACpF,KAAK,EAAE,OAAO,CAAC;IACf,aAAa,CAAC,EAAE,GAAG,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CA0GA;AAED;;;;;;;GAOG;AACH,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,GAAG,EAAE,QAAQ,EAAE,MAAM,GAAG,GAAG,CAyBvE"}
1
+ {"version":3,"file":"tool-utils.d.ts","sourceRoot":"","sources":["../../core/tool-utils.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AAEH,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,WAAW,EAAiB,MAAM,YAAY,CAAC;AAkKtE;;;;GAIG;AACH,wBAAgB,kBAAkB,IAAI,MAAM,CAE3C;AAED;;GAEG;AACH,UAAU,YAAY;IACpB,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE;QACT,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,SAAS,CAAC,EAAE,MAAM,CAAC;KACpB,CAAC;CACH;AAED;;;;;;;;;GASG;AACH,wBAAgB,sCAAsC,CACpD,aAAa,EAAE,YAAY,EAAE,EAC7B,KAAK,EAAE,KAAK,EACZ,KAAK,EAAE,KAAK,EACZ,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,MAAM,GACb;IAAE,UAAU,EAAE,YAAY,EAAE,CAAC;IAAC,WAAW,EAAE,WAAW,EAAE,CAAA;CAAE,CAyC5D;AAED;;;;;;;;GAQG;AACH,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,GAAG,EAAE,UAAU,EAAE,GAAG,EAAE,QAAQ,EAAE,MAAM,GAAG;IACpF,KAAK,EAAE,OAAO,CAAC;IACf,aAAa,CAAC,EAAE,GAAG,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CA0GA;AAED;;;;;;;GAOG;AACH,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,GAAG,EAAE,QAAQ,EAAE,MAAM,GAAG,GAAG,CAuCvE"}