@qduc/term2 0.29.0 → 0.30.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 (298) hide show
  1. package/dist/agent.d.ts +13 -0
  2. package/dist/agent.d.ts.map +1 -1
  3. package/dist/agent.js +73 -2
  4. package/dist/agent.js.map +1 -1
  5. package/dist/build-info.json +3 -3
  6. package/dist/cli.js +17 -0
  7. package/dist/cli.js.map +1 -1
  8. package/dist/components/message/SubagentActivityMessage.d.ts +2 -2
  9. package/dist/components/message/SubagentActivityMessage.d.ts.map +1 -1
  10. package/dist/components/message/SubagentActivityMessage.js +2 -13
  11. package/dist/components/message/SubagentActivityMessage.js.map +1 -1
  12. package/dist/components/message/command-message-helpers.d.ts +2 -2
  13. package/dist/components/message/command-message-helpers.d.ts.map +1 -1
  14. package/dist/core/index.d.ts +2 -3
  15. package/dist/core/index.d.ts.map +1 -1
  16. package/dist/core/index.js +1 -7
  17. package/dist/core/index.js.map +1 -1
  18. package/dist/core/session-runtime.d.ts +72 -0
  19. package/dist/core/session-runtime.d.ts.map +1 -1
  20. package/dist/gateway/contracts.d.ts +1 -1
  21. package/dist/gateway/contracts.d.ts.map +1 -1
  22. package/dist/gateway/gateway.d.ts +32 -0
  23. package/dist/gateway/gateway.d.ts.map +1 -1
  24. package/dist/gateway/gateway.js +36 -1
  25. package/dist/gateway/gateway.js.map +1 -1
  26. package/dist/gateway/persistence/contracts.d.ts +3 -10
  27. package/dist/gateway/persistence/contracts.d.ts.map +1 -1
  28. package/dist/gateway/persistence/contracts.js +2 -31
  29. package/dist/gateway/persistence/contracts.js.map +1 -1
  30. package/dist/gateway/runtime-factory.d.ts.map +1 -1
  31. package/dist/gateway/runtime-factory.js +4 -0
  32. package/dist/gateway/runtime-factory.js.map +1 -1
  33. package/dist/gateway/server-session.d.ts +3 -0
  34. package/dist/gateway/server-session.d.ts.map +1 -1
  35. package/dist/gateway/server-session.js +17 -20
  36. package/dist/gateway/server-session.js.map +1 -1
  37. package/dist/gateway/settings-rpc.d.ts +1 -1
  38. package/dist/gateway/settings-rpc.d.ts.map +1 -1
  39. package/dist/gateway/settings-rpc.js +4 -1
  40. package/dist/gateway/settings-rpc.js.map +1 -1
  41. package/dist/lib/agent-client.d.ts +8 -0
  42. package/dist/lib/agent-client.d.ts.map +1 -1
  43. package/dist/lib/agent-client.js +5 -1
  44. package/dist/lib/agent-client.js.map +1 -1
  45. package/dist/lib/agent-configuration.d.ts +9 -0
  46. package/dist/lib/agent-configuration.d.ts.map +1 -1
  47. package/dist/lib/agent-configuration.js +14 -0
  48. package/dist/lib/agent-configuration.js.map +1 -1
  49. package/dist/lib/agent-factory.d.ts +25 -4
  50. package/dist/lib/agent-factory.d.ts.map +1 -1
  51. package/dist/lib/agent-factory.js +6 -0
  52. package/dist/lib/agent-factory.js.map +1 -1
  53. package/dist/lib/subagent-bridge.d.ts +47 -5
  54. package/dist/lib/subagent-bridge.d.ts.map +1 -1
  55. package/dist/lib/subagent-bridge.js +112 -4
  56. package/dist/lib/subagent-bridge.js.map +1 -1
  57. package/dist/node_modules/@qduc/agent-wire/index.d.ts +73 -0
  58. package/dist/node_modules/@qduc/agent-wire/index.js +212 -0
  59. package/dist/node_modules/@qduc/agent-wire/package.json +1 -0
  60. package/dist/prompts/orchestrator-prompt.test.ts +9 -0
  61. package/dist/prompts/orchestrator.md +2 -0
  62. package/dist/prompts/subagent-delegation.d.ts.map +1 -1
  63. package/dist/prompts/subagent-delegation.js +3 -2
  64. package/dist/prompts/subagent-delegation.js.map +1 -1
  65. package/dist/prompts/subagent-delegation.test.ts +1 -0
  66. package/dist/prompts/subagent-delegation.ts +6 -2
  67. package/dist/providers/codex.provider.d.ts +3 -0
  68. package/dist/providers/codex.provider.d.ts.map +1 -1
  69. package/dist/providers/codex.provider.js +6 -4
  70. package/dist/providers/codex.provider.js.map +1 -1
  71. package/dist/providers/grok-auth.d.ts +3 -0
  72. package/dist/providers/grok-auth.d.ts.map +1 -1
  73. package/dist/providers/grok-auth.js +3 -1
  74. package/dist/providers/grok-auth.js.map +1 -1
  75. package/dist/providers/grok.provider.js +3 -3
  76. package/dist/providers/grok.provider.js.map +1 -1
  77. package/dist/providers/index.d.ts +1 -1
  78. package/dist/providers/index.d.ts.map +1 -1
  79. package/dist/providers/index.js +1 -1
  80. package/dist/providers/index.js.map +1 -1
  81. package/dist/providers/oauth-session-account.d.ts +16 -2
  82. package/dist/providers/oauth-session-account.d.ts.map +1 -1
  83. package/dist/providers/oauth-session-account.js +8 -17
  84. package/dist/providers/oauth-session-account.js.map +1 -1
  85. package/dist/providers/openai.provider.js +1 -1
  86. package/dist/providers/openai.provider.js.map +1 -1
  87. package/dist/providers/openrouter.provider.js +1 -1
  88. package/dist/providers/openrouter.provider.js.map +1 -1
  89. package/dist/providers/registry.d.ts +20 -1
  90. package/dist/providers/registry.d.ts.map +1 -1
  91. package/dist/providers/registry.js +33 -16
  92. package/dist/providers/registry.js.map +1 -1
  93. package/dist/providers/web-search/exa.provider.d.ts.map +1 -1
  94. package/dist/providers/web-search/exa.provider.js +6 -3
  95. package/dist/providers/web-search/exa.provider.js.map +1 -1
  96. package/dist/providers/web-search/firecrawl.provider.d.ts +8 -0
  97. package/dist/providers/web-search/firecrawl.provider.d.ts.map +1 -0
  98. package/dist/providers/web-search/firecrawl.provider.js +59 -0
  99. package/dist/providers/web-search/firecrawl.provider.js.map +1 -0
  100. package/dist/providers/web-search/index.d.ts +5 -2
  101. package/dist/providers/web-search/index.d.ts.map +1 -1
  102. package/dist/providers/web-search/index.js +3 -1
  103. package/dist/providers/web-search/index.js.map +1 -1
  104. package/dist/providers/web-search/registry.d.ts +14 -0
  105. package/dist/providers/web-search/registry.d.ts.map +1 -1
  106. package/dist/providers/web-search/registry.js +45 -15
  107. package/dist/providers/web-search/registry.js.map +1 -1
  108. package/dist/providers/web-search/searxng.provider.d.ts +8 -0
  109. package/dist/providers/web-search/searxng.provider.d.ts.map +1 -0
  110. package/dist/providers/web-search/searxng.provider.js +56 -0
  111. package/dist/providers/web-search/searxng.provider.js.map +1 -0
  112. package/dist/providers/web-search/tavily.provider.d.ts.map +1 -1
  113. package/dist/providers/web-search/tavily.provider.js +8 -3
  114. package/dist/providers/web-search/tavily.provider.js.map +1 -1
  115. package/dist/providers/web-search/types.d.ts +14 -1
  116. package/dist/providers/web-search/types.d.ts.map +1 -1
  117. package/dist/services/agent-runtime/agent-resolver.d.ts.map +1 -1
  118. package/dist/services/agent-runtime/agent-resolver.js +1 -0
  119. package/dist/services/agent-runtime/agent-resolver.js.map +1 -1
  120. package/dist/services/agent-runtime/agent-runtime.d.ts +6 -1
  121. package/dist/services/agent-runtime/agent-runtime.d.ts.map +1 -1
  122. package/dist/services/agent-runtime/agent-runtime.js +11 -2
  123. package/dist/services/agent-runtime/agent-runtime.js.map +1 -1
  124. package/dist/services/agent-runtime/agent-spec.d.ts +14 -0
  125. package/dist/services/agent-runtime/agent-spec.d.ts.map +1 -0
  126. package/dist/services/agent-runtime/agent-spec.js +49 -0
  127. package/dist/services/agent-runtime/agent-spec.js.map +1 -0
  128. package/dist/services/agent-runtime/index.d.ts +3 -1
  129. package/dist/services/agent-runtime/index.d.ts.map +1 -1
  130. package/dist/services/agent-runtime/index.js +2 -0
  131. package/dist/services/agent-runtime/index.js.map +1 -1
  132. package/dist/services/agent-runtime/legacy-adapter.d.ts.map +1 -1
  133. package/dist/services/agent-runtime/legacy-adapter.js +5 -1
  134. package/dist/services/agent-runtime/legacy-adapter.js.map +1 -1
  135. package/dist/services/agent-runtime/permission-boundary.d.ts +95 -0
  136. package/dist/services/agent-runtime/permission-boundary.d.ts.map +1 -0
  137. package/dist/services/agent-runtime/permission-boundary.js +538 -0
  138. package/dist/services/agent-runtime/permission-boundary.js.map +1 -0
  139. package/dist/services/agent-runtime/resolved-agent.d.ts +2 -0
  140. package/dist/services/agent-runtime/resolved-agent.d.ts.map +1 -1
  141. package/dist/services/agent-runtime/types.d.ts +22 -1
  142. package/dist/services/agent-runtime/types.d.ts.map +1 -1
  143. package/dist/services/approval/non-interactive-approval-policy.d.ts.map +1 -1
  144. package/dist/services/approval/non-interactive-approval-policy.js +10 -0
  145. package/dist/services/approval/non-interactive-approval-policy.js.map +1 -1
  146. package/dist/services/approval/shell-auto-approval-resolver.d.ts +2 -0
  147. package/dist/services/approval/shell-auto-approval-resolver.d.ts.map +1 -1
  148. package/dist/services/approval/shell-auto-approval-resolver.js +4 -2
  149. package/dist/services/approval/shell-auto-approval-resolver.js.map +1 -1
  150. package/dist/services/conversation/conversation-adapter-factory.d.ts +1 -1
  151. package/dist/services/conversation/conversation-adapter-factory.d.ts.map +1 -1
  152. package/dist/services/conversation/conversation-adapter.d.ts +1 -1
  153. package/dist/services/conversation/conversation-adapter.d.ts.map +1 -1
  154. package/dist/services/conversation/conversation-runtime-factory.d.ts +1 -1
  155. package/dist/services/conversation/conversation-runtime-factory.d.ts.map +1 -1
  156. package/dist/services/conversation/conversation-runtime-factory.js +1 -1
  157. package/dist/services/conversation/conversation-runtime-factory.js.map +1 -1
  158. package/dist/services/conversation/conversation-service.d.ts +4 -1
  159. package/dist/services/conversation/conversation-service.d.ts.map +1 -1
  160. package/dist/services/conversation/conversation-service.js +25 -0
  161. package/dist/services/conversation/conversation-service.js.map +1 -1
  162. package/dist/services/conversation/session-index/session-index-service.d.ts +1 -1
  163. package/dist/services/conversation/session-index/session-index-service.d.ts.map +1 -1
  164. package/dist/services/conversation/session-index/session-index-service.js +1 -1
  165. package/dist/services/conversation/session-index/session-index-service.js.map +1 -1
  166. package/dist/services/retry/committed-tool-continuation.d.ts +24 -0
  167. package/dist/services/retry/committed-tool-continuation.d.ts.map +1 -1
  168. package/dist/services/retry/committed-tool-continuation.js +26 -0
  169. package/dist/services/retry/committed-tool-continuation.js.map +1 -1
  170. package/dist/services/retry/provider-failure-classification.d.ts +2 -0
  171. package/dist/services/retry/provider-failure-classification.d.ts.map +1 -1
  172. package/dist/services/retry/provider-failure-classification.js +43 -0
  173. package/dist/services/retry/provider-failure-classification.js.map +1 -1
  174. package/dist/services/retry/retry-classifier.d.ts.map +1 -1
  175. package/dist/services/retry/retry-classifier.js +11 -3
  176. package/dist/services/retry/retry-classifier.js.map +1 -1
  177. package/dist/services/sandboxed-code-host/host-worker.d.ts.map +1 -1
  178. package/dist/services/sandboxed-code-host/host-worker.js +3 -1
  179. package/dist/services/sandboxed-code-host/host-worker.js.map +1 -1
  180. package/dist/services/session/continuation-recovery-handler.d.ts.map +1 -1
  181. package/dist/services/session/continuation-recovery-handler.js +6 -0
  182. package/dist/services/session/continuation-recovery-handler.js.map +1 -1
  183. package/dist/services/session/initial-turn-recovery-handler.d.ts +1 -1
  184. package/dist/services/session/initial-turn-recovery-handler.d.ts.map +1 -1
  185. package/dist/services/session/initial-turn-recovery-handler.js +6 -0
  186. package/dist/services/session/initial-turn-recovery-handler.js.map +1 -1
  187. package/dist/services/session/session-composition.d.ts +3 -0
  188. package/dist/services/session/session-composition.d.ts.map +1 -1
  189. package/dist/services/session/session-composition.js +2 -1
  190. package/dist/services/session/session-composition.js.map +1 -1
  191. package/dist/services/session/session-input-planner.d.ts +2 -0
  192. package/dist/services/session/session-input-planner.d.ts.map +1 -1
  193. package/dist/services/session/session-input-planner.js +4 -6
  194. package/dist/services/session/session-input-planner.js.map +1 -1
  195. package/dist/services/settings/settings-env.d.ts.map +1 -1
  196. package/dist/services/settings/settings-env.js +9 -0
  197. package/dist/services/settings/settings-env.js.map +1 -1
  198. package/dist/services/settings/settings-schema.d.ts +24 -0
  199. package/dist/services/settings/settings-schema.d.ts.map +1 -1
  200. package/dist/services/settings/settings-schema.js +16 -0
  201. package/dist/services/settings/settings-schema.js.map +1 -1
  202. package/dist/services/settings/settings-sources.d.ts +2 -0
  203. package/dist/services/settings/settings-sources.d.ts.map +1 -1
  204. package/dist/services/settings/settings-sources.js +2 -0
  205. package/dist/services/settings/settings-sources.js.map +1 -1
  206. package/dist/services/settings/settings-ui-metadata.d.ts.map +1 -1
  207. package/dist/services/settings/settings-ui-metadata.js +4 -1
  208. package/dist/services/settings/settings-ui-metadata.js.map +1 -1
  209. package/dist/services/settings/test-helpers/settings-consumer-inventory.d.ts +1 -1
  210. package/dist/services/settings/test-helpers/settings-consumer-inventory.d.ts.map +1 -1
  211. package/dist/services/settings/test-helpers/settings-consumer-inventory.js +3 -0
  212. package/dist/services/settings/test-helpers/settings-consumer-inventory.js.map +1 -1
  213. package/dist/services/subagents/execution-runner.d.ts.map +1 -1
  214. package/dist/services/subagents/execution-runner.js +2 -1
  215. package/dist/services/subagents/execution-runner.js.map +1 -1
  216. package/dist/services/subagents/foreground-subagent-lease.d.ts +15 -0
  217. package/dist/services/subagents/foreground-subagent-lease.d.ts.map +1 -1
  218. package/dist/services/subagents/foreground-subagent-lease.js +42 -2
  219. package/dist/services/subagents/foreground-subagent-lease.js.map +1 -1
  220. package/dist/services/subagents/nested-runner.d.ts +1 -1
  221. package/dist/services/subagents/nested-runner.d.ts.map +1 -1
  222. package/dist/services/subagents/nested-runner.js +89 -22
  223. package/dist/services/subagents/nested-runner.js.map +1 -1
  224. package/dist/services/subagents/runtime.d.ts.map +1 -1
  225. package/dist/services/subagents/runtime.js +30 -4
  226. package/dist/services/subagents/runtime.js.map +1 -1
  227. package/dist/services/subagents/subagent-async-registry.d.ts +3 -0
  228. package/dist/services/subagents/subagent-async-registry.d.ts.map +1 -1
  229. package/dist/services/subagents/subagent-async-registry.js +53 -8
  230. package/dist/services/subagents/subagent-async-registry.js.map +1 -1
  231. package/dist/services/subagents/subagent-manager.d.ts.map +1 -1
  232. package/dist/services/subagents/subagent-manager.js +65 -3
  233. package/dist/services/subagents/subagent-manager.js.map +1 -1
  234. package/dist/services/subagents/subagent-role-pool-selector.d.ts +5 -1
  235. package/dist/services/subagents/subagent-role-pool-selector.d.ts.map +1 -1
  236. package/dist/services/subagents/subagent-role-pool-selector.js +24 -5
  237. package/dist/services/subagents/subagent-role-pool-selector.js.map +1 -1
  238. package/dist/services/subagents/tool-policy.d.ts +2 -2
  239. package/dist/services/subagents/tool-policy.d.ts.map +1 -1
  240. package/dist/services/subagents/tool-policy.js +8 -2
  241. package/dist/services/subagents/tool-policy.js.map +1 -1
  242. package/dist/services/subagents/types.d.ts +15 -2
  243. package/dist/services/subagents/types.d.ts.map +1 -1
  244. package/dist/services/subagents/types.js.map +1 -1
  245. package/dist/services/subagents/worker-worktree.d.ts +19 -1
  246. package/dist/services/subagents/worker-worktree.d.ts.map +1 -1
  247. package/dist/services/subagents/worker-worktree.js +128 -4
  248. package/dist/services/subagents/worker-worktree.js.map +1 -1
  249. package/dist/services/workspace/worktree-inventory.d.ts +6 -0
  250. package/dist/services/workspace/worktree-inventory.d.ts.map +1 -1
  251. package/dist/services/workspace/worktree-inventory.js +29 -1
  252. package/dist/services/workspace/worktree-inventory.js.map +1 -1
  253. package/dist/tools/agent/propose-goal.d.ts +17 -0
  254. package/dist/tools/agent/propose-goal.d.ts.map +1 -0
  255. package/dist/tools/agent/propose-goal.js +64 -0
  256. package/dist/tools/agent/propose-goal.js.map +1 -0
  257. package/dist/tools/agent/run-subagent-async.d.ts +61 -3
  258. package/dist/tools/agent/run-subagent-async.d.ts.map +1 -1
  259. package/dist/tools/agent/run-subagent-async.js +13 -4
  260. package/dist/tools/agent/run-subagent-async.js.map +1 -1
  261. package/dist/tools/agent/run-subagent.d.ts +73 -7
  262. package/dist/tools/agent/run-subagent.d.ts.map +1 -1
  263. package/dist/tools/agent/run-subagent.js +84 -22
  264. package/dist/tools/agent/run-subagent.js.map +1 -1
  265. package/dist/tools/system/run-code/index.d.ts +1 -1
  266. package/dist/tools/system/run-code/index.d.ts.map +1 -1
  267. package/dist/tools/system/run-code/index.js +1 -1
  268. package/dist/tools/system/run-code/index.js.map +1 -1
  269. package/dist/tools/system/run-code/run-code-agent-capability.d.ts +99 -0
  270. package/dist/tools/system/run-code/run-code-agent-capability.d.ts.map +1 -0
  271. package/dist/tools/system/run-code/run-code-agent-capability.js +384 -0
  272. package/dist/tools/system/run-code/run-code-agent-capability.js.map +1 -0
  273. package/dist/tools/system/run-code/run-code-runtime.d.ts +9 -0
  274. package/dist/tools/system/run-code/run-code-runtime.d.ts.map +1 -1
  275. package/dist/tools/system/run-code/run-code-runtime.js +54 -1
  276. package/dist/tools/system/run-code/run-code-runtime.js.map +1 -1
  277. package/dist/tools/system/run-code/run-code.d.ts +12 -1
  278. package/dist/tools/system/run-code/run-code.d.ts.map +1 -1
  279. package/dist/tools/system/run-code/run-code.js +48 -1
  280. package/dist/tools/system/run-code/run-code.js.map +1 -1
  281. package/dist/tools/tool-names.d.ts +1 -0
  282. package/dist/tools/tool-names.d.ts.map +1 -1
  283. package/dist/tools/tool-names.js +1 -0
  284. package/dist/tools/tool-names.js.map +1 -1
  285. package/dist/tools/web/web-search.d.ts +18 -0
  286. package/dist/tools/web/web-search.d.ts.map +1 -1
  287. package/dist/tools/web/web-search.js +29 -4
  288. package/dist/tools/web/web-search.js.map +1 -1
  289. package/dist/types/message.d.ts +1 -0
  290. package/dist/types/message.d.ts.map +1 -1
  291. package/dist/types/message.js +13 -0
  292. package/dist/types/message.js.map +1 -1
  293. package/dist/utils/conversation/conversation-event-handler.js +1 -1
  294. package/dist/utils/conversation/conversation-event-handler.js.map +1 -1
  295. package/dist/utils/value-suggestions.d.ts.map +1 -1
  296. package/dist/utils/value-suggestions.js +2 -0
  297. package/dist/utils/value-suggestions.js.map +1 -1
  298. package/package.json +4 -2
@@ -0,0 +1,384 @@
1
+ import { resolveAgentSpecForChild, } from '../../../services/agent-runtime/permission-boundary.js';
2
+ import { applyApprovalGrant } from '../../../services/approval/approval-grant-executor.js';
3
+ import { RUN_CODE_LIMITS } from './run-code-runtime.js';
4
+ const ASYNC_LIFECYCLE_MEMBERS = ['start', 'status', 'result', 'cancel'];
5
+ const isFunction = (value) => typeof value === 'function';
6
+ /** True when at least one launch seam exists; gates capability existence. */
7
+ export function isRunCodeAgentBridgeActive(bridge) {
8
+ if (!bridge)
9
+ return false;
10
+ const foreground = isFunction(bridge.runResolvedSubagent);
11
+ const asyncLifecycle = isFunction(bridge.runResolvedSubagentAsync) &&
12
+ isFunction(bridge.getSubagentResult) &&
13
+ isFunction(bridge.getSubagentStatus) &&
14
+ isFunction(bridge.cancelSubagentRun);
15
+ return foreground || asyncLifecycle;
16
+ }
17
+ /** The exact member list a bound bridge can serve; also rendered into the tool description. */
18
+ export function getRunCodeAgentCapabilityMembers(bridge) {
19
+ const members = [];
20
+ if (isFunction(bridge.runResolvedSubagent))
21
+ members.push('run');
22
+ if (isFunction(bridge.runResolvedSubagentAsync) &&
23
+ isFunction(bridge.getSubagentResult) &&
24
+ isFunction(bridge.getSubagentStatus) &&
25
+ isFunction(bridge.cancelSubagentRun)) {
26
+ members.push(...ASYNC_LIFECYCLE_MEMBERS);
27
+ }
28
+ return members;
29
+ }
30
+ const isRecord = (value) => typeof value === 'object' && value !== null;
31
+ const rejectCall = (error) => ({
32
+ kind: 'result',
33
+ result: { ok: false, error },
34
+ });
35
+ const isAbortError = (error) => error instanceof Error && error.name === 'AbortError';
36
+ /**
37
+ * Extracts the pending tool call from a child run-loop interruption. Other
38
+ * interruption kinds — e.g. a child run-budget check-in — are not tool
39
+ * approvals: the caller leaves those pauses unapplied, so the child settles
40
+ * interrupted and the script keeps its existing catchable error.
41
+ */
42
+ function extractChildToolApproval(interruption) {
43
+ if (!isRecord(interruption) || interruption.type !== 'tool_approval_item')
44
+ return undefined;
45
+ if (typeof interruption.name !== 'string' || interruption.name === '')
46
+ return undefined;
47
+ const argumentsText = typeof interruption.arguments === 'string' ? interruption.arguments : JSON.stringify(interruption.arguments ?? {});
48
+ let argumentsValue = {};
49
+ try {
50
+ argumentsValue = JSON.parse(argumentsText);
51
+ }
52
+ catch {
53
+ // Registry evaluation is fail-closed for arguments it cannot inspect.
54
+ }
55
+ return {
56
+ toolName: interruption.name,
57
+ argumentsText,
58
+ arguments: argumentsValue,
59
+ ...(typeof interruption.callId === 'string' ? { callId: interruption.callId } : {}),
60
+ };
61
+ }
62
+ /** `costRecords` and `nestedRunResult` are host-owned: possibly large, possibly not JSON-safe. */
63
+ const projectNestedResult = (result) => {
64
+ const { costRecords: _costRecords, nestedRunResult: _nestedRunResult, ...projected } = result;
65
+ // The host re-serializes capability results through JSON, so any plain-data
66
+ // projection is transportable even without a JsonValue index signature.
67
+ return projected;
68
+ };
69
+ const AGENT_MEMBERS = ['run', 'start', 'status', 'result', 'cancel'];
70
+ const LAUNCH_PARAM_FIELDS = new Set(['spec', 'worktree', 'name', 'continue_run_id']);
71
+ /** Light, admission-time param checks. Deep AgentSpec validation is the boundary's job. */
72
+ function launchParamError(member, params) {
73
+ const accepted = member === 'run' ? new Set(['spec', 'worktree']) : LAUNCH_PARAM_FIELDS;
74
+ for (const key of Object.keys(params)) {
75
+ if (!accepted.has(key))
76
+ return `unsupported param "${key}"; agent.${member} accepts ${[...accepted].join(', ')}.`;
77
+ }
78
+ if (!isRecord(params.spec) || Array.isArray(params.spec))
79
+ return 'spec must be a plain AgentSpec object.';
80
+ if (params.worktree !== undefined && typeof params.worktree !== 'string')
81
+ return 'worktree must be a string.';
82
+ if (params.name !== undefined && typeof params.name !== 'string')
83
+ return 'name must be a string.';
84
+ if (params.continue_run_id !== undefined && typeof params.continue_run_id !== 'string') {
85
+ return 'continue_run_id must be a string.';
86
+ }
87
+ if (member === 'start' && params.continue_run_id !== undefined) {
88
+ return 'continue_run_id is not supported by script agent.start until continuation authority can be verified.';
89
+ }
90
+ return undefined;
91
+ }
92
+ function lifecycleParamError(member, params) {
93
+ const accepted = member === 'status' ? new Set(['runId']) : new Set([member === 'result' ? 'runId' : 'target']);
94
+ for (const key of Object.keys(params)) {
95
+ if (!accepted.has(key))
96
+ return `unsupported param "${key}"; agent.${member} accepts ${[...accepted].join(', ')}.`;
97
+ }
98
+ const required = member === 'cancel' ? 'target' : 'runId';
99
+ if (member !== 'status' && (params[required] === undefined || typeof params[required] !== 'string')) {
100
+ return `${required} must be a string.`;
101
+ }
102
+ if (member === 'status' && params.runId !== undefined && typeof params.runId !== 'string') {
103
+ return 'runId must be a string.';
104
+ }
105
+ return undefined;
106
+ }
107
+ /**
108
+ * The script-only `agent` capability of one run_code invocation.
109
+ *
110
+ * Every launch resolves an untrusted script AgentSpec through
111
+ * `resolveAgentSpecForChild` against the host-bound root authority snapshot
112
+ * before any bridge callback sees it; the boundary result — never the raw
113
+ * spec — is what reaches the host bridge. Start admission is a synchronous
114
+ * check-and-increment before resolution, so a script can never race itself
115
+ * past the launch cap, and an over-cap start is rejected before the manager
116
+ * launches anything while already-admitted siblings continue untouched.
117
+ */
118
+ export function createRunCodeAgentCapability(deps, invocation) {
119
+ const members = getRunCodeAgentCapabilityMembers(deps);
120
+ if (members.length === 0) {
121
+ throw new Error('run_code agent capability requires a resolved-launch or async lifecycle bridge.');
122
+ }
123
+ // Synchronous admission counter: `prepare` never awaits between the cap
124
+ // check and the increment, so concurrent script starts cannot exceed it.
125
+ let startsAdmitted = 0;
126
+ /**
127
+ * Builds the per-call publisher that surfaces one foreground child approval
128
+ * pause through the session-owned decision owner. The capability attaches it
129
+ * only when the session owner and policy registry are bound; the decision is
130
+ * applied to the pause's exact retained continuation through `pause.apply`,
131
+ * never from script data, and the human wait is bracketed with the host
132
+ * work-clock hooks so paused children do not burn the script timeout.
133
+ */
134
+ const childApprovalPublisher = (callContext) => {
135
+ const owner = deps.nestedApprovalOwner;
136
+ const registry = deps.approvalPolicyRegistry;
137
+ if (!owner || !registry)
138
+ return undefined;
139
+ return async (pause) => {
140
+ const approvalInfo = extractChildToolApproval(pause.interruption);
141
+ // Not a tool approval (e.g. a child run-budget check-in): leave the pause
142
+ // unapplied so the child settles interrupted and the script keeps its
143
+ // existing catchable error.
144
+ if (!approvalInfo)
145
+ return;
146
+ // The host wraps these on the handler per run; the clock pauses only
147
+ // while every admitted call is waiting.
148
+ handler.onWaiting?.(callContext);
149
+ try {
150
+ const resolution = await owner.request({
151
+ requestId: `${pause.runId}:child-approval:${pause.generation}`,
152
+ sessionId: deps.sessionId ?? 'unknown',
153
+ graphIdentity: deps.graphIdentity ?? {},
154
+ outerRunId: invocation.bridgeRunId,
155
+ nestedCallId: pause.runId,
156
+ toolName: approvalInfo.toolName,
157
+ preparedArguments: approvalInfo.arguments,
158
+ authorityContext: invocation.context,
159
+ approval: {
160
+ agentName: `Script child agent (${pause.role})`,
161
+ toolName: approvalInfo.toolName,
162
+ argumentsText: approvalInfo.argumentsText,
163
+ rawInterruption: null,
164
+ ...(approvalInfo.callId !== undefined ? { callId: approvalInfo.callId } : {}),
165
+ },
166
+ signal: callContext.signal,
167
+ revalidate: async () => (await registry.evaluate({
168
+ toolName: approvalInfo.toolName,
169
+ args: approvalInfo.arguments,
170
+ context: invocation.context,
171
+ })).kind,
172
+ grant: (decision) => {
173
+ if (callContext.signal.aborted)
174
+ throw new Error('Tool execution was not approved.');
175
+ // Nested edit tools have no session edit-grant store. Do not claim
176
+ // a durable child edit authorization by mutating the root's state.
177
+ if (decision.answer === 'allow-edit-file-session' || decision.answer === 'allow-edit-folder-session') {
178
+ throw new Error('Session edit grants are unavailable for script child agents.');
179
+ }
180
+ // Session-owned grant memory (allow-session edits, docker, denied
181
+ // reads) applies exactly as the direct child approval path does.
182
+ const applied = applyApprovalGrant({
183
+ sessionId: deps.sessionId ?? 'unknown',
184
+ nestedCompatibility: deps.nestedCompatibility,
185
+ logger: deps.logger,
186
+ }, {
187
+ answer: decision.answer,
188
+ toolName: approvalInfo.toolName,
189
+ rawArguments: approvalInfo.argumentsText,
190
+ callId: approvalInfo.callId,
191
+ interruption: pause.interruption,
192
+ });
193
+ if (!applied.isApproved)
194
+ throw new Error('Tool execution was not approved.');
195
+ // One decision on the exact retained continuation: `apply` consumes
196
+ // only this pause's generation and returns false when stale.
197
+ const resumed = pause.apply(({ handle, interruption }) => {
198
+ handle.approve?.(interruption);
199
+ return true;
200
+ });
201
+ if (!resumed)
202
+ throw new Error('The child approval pause is no longer current.');
203
+ },
204
+ // The child's own loop dispatches after its continuation is approved;
205
+ // the host owns no tool call to run here.
206
+ dispatch: async () => true,
207
+ });
208
+ if (resolution.kind === 'denied') {
209
+ pause.apply(({ handle, interruption }) => {
210
+ handle.reject?.(interruption, { message: resolution.message });
211
+ return true;
212
+ });
213
+ }
214
+ // `approved`: the grant already resumed the exact child continuation.
215
+ // `failed`: the grant threw before or while applying; the lease queue
216
+ // settles the child so the script keeps a truthful outcome.
217
+ }
218
+ finally {
219
+ handler.onResumed?.(callContext);
220
+ }
221
+ };
222
+ };
223
+ const handler = {
224
+ binding: { name: 'agent', kind: 'namespace', members },
225
+ limits: {
226
+ maxCalls: RUN_CODE_LIMITS.maxAgentCalls,
227
+ maxConcurrency: RUN_CODE_LIMITS.maxAgentConcurrency,
228
+ limitExceededMessage: `Agent call limit reached (${RUN_CODE_LIMITS.maxAgentCalls} agent.* calls per script run).`,
229
+ },
230
+ overBudget: ({ usedCalls, maxCalls }) => rejectCall(`Agent call limit reached (${maxCalls} agent.* calls per script run; ${usedCalls} admitted, ${Math.max(0, maxCalls - usedCalls)} remaining). Return the partial results you collected.`),
231
+ onAdmitted: (prepared, context) => {
232
+ const callId = `${invocation.bridgeRunId}:agent:${context.callId}`;
233
+ deps.onCallAdmitted?.(prepared.member, prepared.started, callId);
234
+ },
235
+ onAborted: (prepared, context, reason) => {
236
+ const callId = `${invocation.bridgeRunId}:agent:${context.callId}`;
237
+ deps.onCallSettled?.(prepared.member, prepared.started, callId, 'unknown', reason);
238
+ },
239
+ lane: (prepared) => (prepared.member === 'run' || prepared.member === 'start' ? 'default' : 'serial'),
240
+ prepare: (payload) => {
241
+ const started = Date.now();
242
+ const requested = typeof payload.member === 'string' ? payload.member : '';
243
+ if (!AGENT_MEMBERS.includes(requested)) {
244
+ return rejectCall(`Unknown agent member "${requested}". Available: ${members.join(', ')}.`);
245
+ }
246
+ const member = requested;
247
+ const params = isRecord(payload.params) ? payload.params : {};
248
+ if (member === 'run' || member === 'start') {
249
+ const paramError = launchParamError(member, params);
250
+ if (paramError)
251
+ return rejectCall(`agent.${member} params invalid: ${paramError}`);
252
+ // Admit the start before resolving so the cap holds regardless of what
253
+ // resolution does; a rejected spec consumes its admission like a
254
+ // launched one would, keeping the budget an honest upper bound.
255
+ if (startsAdmitted >= RUN_CODE_LIMITS.maxAgentStarts) {
256
+ return rejectCall(`Agent start limit reached (${RUN_CODE_LIMITS.maxAgentStarts} agent launches per script run; ` +
257
+ `${startsAdmitted} admitted, 0 remaining). Return the partial results you collected; ` +
258
+ 'admitted launches are unaffected.');
259
+ }
260
+ startsAdmitted += 1;
261
+ const boundary = resolveAgentSpecForChild(params.spec, {
262
+ settings: deps.settings,
263
+ logger: deps.logger,
264
+ parent: deps.authority.parent,
265
+ readOnly: deps.authority.readOnly,
266
+ planMode: deps.authority.planMode,
267
+ ...(typeof params.worktree === 'string' ? { worktree: params.worktree } : {}),
268
+ });
269
+ if (!boundary.ok) {
270
+ return rejectCall(`Agent specification rejected: ${boundary.errors.map((error) => error.message).join('; ')}`);
271
+ }
272
+ return member === 'run'
273
+ ? { member, boundary, started }
274
+ : {
275
+ member,
276
+ boundary,
277
+ ...(typeof params.name === 'string' ? { name: params.name } : {}),
278
+ started,
279
+ };
280
+ }
281
+ const lifecycleError = lifecycleParamError(member, params);
282
+ if (lifecycleError)
283
+ return rejectCall(`agent.${member} params invalid: ${lifecycleError}`);
284
+ if (member === 'status') {
285
+ return {
286
+ member,
287
+ ...(typeof params.runId === 'string' ? { runId: params.runId } : {}),
288
+ started,
289
+ };
290
+ }
291
+ if (member === 'result') {
292
+ return { member, runId: params.runId, started };
293
+ }
294
+ return { member: 'cancel', target: params.target, started };
295
+ },
296
+ invoke: async (prepared, callContext) => {
297
+ const callId = `${invocation.bridgeRunId}:agent:${callContext.callId}`;
298
+ try {
299
+ const outcome = await (async () => {
300
+ if (prepared.member === 'run') {
301
+ try {
302
+ const publisher = childApprovalPublisher(callContext);
303
+ const nested = await deps.runResolvedSubagent.call(undefined, {
304
+ resolvedDefinition: prepared.boundary,
305
+ ...(publisher ? { foregroundChildApproval: publisher } : {}),
306
+ }, invocation.context,
307
+ // The host controller signal aborts the child on script timeout or
308
+ // cancellation; the tool call id keeps foreground leases movable.
309
+ {
310
+ toolCall: { callId: `${invocation.bridgeRunId}:agent:${callContext.callId}` },
311
+ signal: callContext.signal,
312
+ });
313
+ if (nested.status === 'interrupted') {
314
+ return rejectCall('Child run interrupted (possibly awaiting a tool approval). The script cannot resume ' +
315
+ 'this foreground child; use the direct subagent tool for approval-interactive work.');
316
+ }
317
+ return { kind: 'result', result: { ok: true, result: projectNestedResult(nested) } };
318
+ }
319
+ catch (error) {
320
+ if (callContext.signal.aborted || isAbortError(error))
321
+ throw error;
322
+ return rejectCall(error instanceof Error ? error.message : String(error));
323
+ }
324
+ }
325
+ if (prepared.member === 'start') {
326
+ try {
327
+ const handle = await deps.runResolvedSubagentAsync.call(undefined, {
328
+ resolvedDefinition: prepared.boundary,
329
+ ...(prepared.name ? { name: prepared.name } : {}),
330
+ });
331
+ return {
332
+ kind: 'result',
333
+ result: {
334
+ ok: true,
335
+ result: {
336
+ runId: handle.runId,
337
+ ...(handle.name ? { name: handle.name } : {}),
338
+ role: handle.role,
339
+ status: handle.status,
340
+ },
341
+ },
342
+ };
343
+ }
344
+ catch (error) {
345
+ // Launch failures are script-catchable; the background run is never
346
+ // bound to this script's signal, so there is no abort case here.
347
+ return rejectCall(error instanceof Error ? error.message : String(error));
348
+ }
349
+ }
350
+ if (prepared.member === 'status') {
351
+ const status = deps.getSubagentStatus.call(undefined, prepared.runId !== undefined ? { runId: prepared.runId } : {}, invocation.context);
352
+ return { kind: 'result', result: { ok: true, result: status } };
353
+ }
354
+ if (prepared.member === 'result') {
355
+ try {
356
+ const settled = await deps.getSubagentResult.call(undefined, { runId: prepared.runId }, invocation.context, {
357
+ signal: callContext.signal,
358
+ });
359
+ return { kind: 'result', result: { ok: true, result: projectNestedResult(settled) } };
360
+ }
361
+ catch (error) {
362
+ if (callContext.signal.aborted || isAbortError(error))
363
+ throw error;
364
+ return rejectCall(error instanceof Error ? error.message : String(error));
365
+ }
366
+ }
367
+ const acknowledgement = deps.cancelSubagentRun.call(undefined, { target: prepared.target });
368
+ return { kind: 'result', result: { ok: true, result: acknowledgement } };
369
+ })();
370
+ const result = outcome.kind === 'result' && isRecord(outcome.result) ? outcome.result : undefined;
371
+ const failed = outcome.kind === 'fail' || result?.ok === false;
372
+ const reason = failed && typeof result?.error === 'string' ? result.error : undefined;
373
+ deps.onCallSettled?.(prepared.member, prepared.started, callId, failed ? 'error' : 'ok', reason);
374
+ return outcome;
375
+ }
376
+ catch (error) {
377
+ deps.onCallSettled?.(prepared.member, prepared.started, callId, 'error', error instanceof Error ? error.message : String(error));
378
+ throw error;
379
+ }
380
+ },
381
+ };
382
+ return handler;
383
+ }
384
+ //# sourceMappingURL=run-code-agent-capability.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"run-code-agent-capability.js","sourceRoot":"","sources":["../../../../source/tools/system/run-code/run-code-agent-capability.ts"],"names":[],"mappings":"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"}
@@ -4,6 +4,8 @@ import type { ILoggingService } from '../../../services/service-interfaces.js';
4
4
  import type { ToolApprovalPolicyRegistry } from '../../../services/approval/tool-approval-policy-registry.js';
5
5
  import type { NestedApprovalOwner } from '../../../services/approval/nested-approval-owner.js';
6
6
  import { type AnyToolDefinition, type ToolRegistry } from '../../types.js';
7
+ import type { AgentSpecAuthoritySnapshot } from '../../../services/agent-runtime/permission-boundary.js';
8
+ import { type RunCodeAgentSpecBridge } from './run-code-agent-capability.js';
7
9
  import type { RunCodeActionOutcome } from './run-code-runtime-contract.js';
8
10
  export type { RunCodeActionOutcome, RunCodeActionReceipt, RunCodeCallRecord } from './run-code-runtime-contract.js';
9
11
  export declare const TOOL_NAME_RUN_CODE = "run_code";
@@ -12,6 +14,9 @@ export declare const TOOL_NAME_DESCRIBE = "describe";
12
14
  export declare const RUN_CODE_LIMITS: {
13
15
  readonly maxCalls: 200;
14
16
  readonly maxConcurrency: 8;
17
+ readonly maxAgentStarts: 16;
18
+ readonly maxAgentConcurrency: 4;
19
+ readonly maxAgentCalls: 200;
15
20
  readonly maxResultChars: 100000;
16
21
  readonly maxMediaBytes: number;
17
22
  readonly maxMediaTotalBytes: number;
@@ -67,6 +72,10 @@ export interface RunCodeRuntimeOptions {
67
72
  nestedApprovalOwner?: NestedApprovalOwner;
68
73
  sessionAccess?: import('../../../services/session/session-access-state.js').SessionAccessState;
69
74
  nestedCompatibility?: import('../../../services/session/nested-tool-compatibility-state.js').NestedToolCompatibilityState;
75
+ /** Host-owned root authority snapshot; required by the agent capability. */
76
+ agentSpecAuthority?: AgentSpecAuthoritySnapshot;
77
+ /** Host-owned resolved-launch bridge; the agent capability exists only when active. */
78
+ agentBridge?: RunCodeAgentSpecBridge;
70
79
  }
71
80
  export interface RunCodeRuntimeInput {
72
81
  code: string;
@@ -1 +1 @@
1
- {"version":3,"file":"run-code-runtime.d.ts","sourceRoot":"","sources":["../../../../source/tools/system/run-code/run-code-runtime.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"run-code-runtime.d.ts","sourceRoot":"","sources":["../../../../source/tools/system/run-code/run-code-runtime.ts"],"names":[],"mappings":"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"}
@@ -11,6 +11,7 @@ import { renderCompactSignature } from './tools-header.js';
11
11
  import { MCP_TOOL_BINDING, describeMcpTool, isMcpToolDefinition, validateMcpArguments } from './mcp-script-surface.js';
12
12
  import { getScriptedReturnContract, scriptedReturnContractJsonSchema, validateScriptedReturn, } from '../../scripted-return-contract.js';
13
13
  import { WORKFLOW_PROHIBITED_TOOLS } from '../../../services/agent-runtime/workflow/workflow-evaluator.js';
14
+ import { createRunCodeAgentCapability, isRunCodeAgentBridgeActive, } from './run-code-agent-capability.js';
14
15
  import { resolveWorkspacePath, resolveWorkspacePathPhysically } from '../../utils.js';
15
16
  import { parseUpstreamApplyPatch } from '../../file/upstream-apply-patch.js';
16
17
  import { TOOL_NAME_APPLY_PATCH } from '../../tool-names.js';
@@ -22,6 +23,11 @@ export const TOOL_NAME_DESCRIBE = 'describe';
22
23
  export const RUN_CODE_LIMITS = {
23
24
  maxCalls: 200,
24
25
  maxConcurrency: 8,
26
+ // Agent capability budgets are separate from the tools ledger by design:
27
+ // launching child agents is scarcer and more expensive than a tool call.
28
+ maxAgentStarts: 16,
29
+ maxAgentConcurrency: 4,
30
+ maxAgentCalls: 200,
25
31
  maxResultChars: 100_000,
26
32
  maxMediaBytes: 8 * 1024 * 1024,
27
33
  maxMediaTotalBytes: 32 * 1024 * 1024,
@@ -421,6 +427,8 @@ export function createRunCodeRuntime(options) {
421
427
  const receipts = [];
422
428
  const pendingReceiptByCallId = new Map();
423
429
  const abortedCallIds = new Set();
430
+ const agentCallIndexes = new Map();
431
+ const abortedAgentCallIds = new Set();
424
432
  let rejectedSeq = 0;
425
433
  const output = [];
426
434
  const consoleValues = [];
@@ -460,6 +468,29 @@ export function createRunCodeRuntime(options) {
460
468
  else
461
469
  receipts.push(value);
462
470
  };
471
+ const recordAgentCall = (member, started, callId, outcome, reason) => {
472
+ if (abortedAgentCallIds.has(callId) && outcome !== 'unknown')
473
+ return;
474
+ let index = agentCallIndexes.get(callId);
475
+ if (index === undefined) {
476
+ index = calls.length;
477
+ agentCallIndexes.set(callId, index);
478
+ calls.push({ tool: `agent.${member}`, outcome: 'unknown', durationMs: 0, callId });
479
+ if (member === 'start')
480
+ recordReceipt(callId, 'agent.start', 'unknown');
481
+ }
482
+ calls[index] = {
483
+ tool: `agent.${member}`,
484
+ outcome,
485
+ durationMs: Date.now() - started,
486
+ callId,
487
+ ...(reason ? { reason: clipReason(reason) } : {}),
488
+ };
489
+ if (member === 'start') {
490
+ const actionOutcome = outcome === 'ok' ? 'applied' : outcome === 'error' ? 'failed' : 'unknown';
491
+ recordReceipt(callId, 'agent.start', actionOutcome, reason);
492
+ }
493
+ };
463
494
  const tools = {
464
495
  binding: {
465
496
  name: 'tools',
@@ -691,6 +722,28 @@ export function createRunCodeRuntime(options) {
691
722
  }
692
723
  },
693
724
  };
725
+ const capabilities = { tools };
726
+ if (options.agentBridge && options.agentSpecAuthority && isRunCodeAgentBridgeActive(options.agentBridge)) {
727
+ capabilities.agent = createRunCodeAgentCapability({
728
+ ...options.agentBridge,
729
+ authority: options.agentSpecAuthority,
730
+ logger: loggingService,
731
+ // Session-owned child approval surfaces: without an owner the child
732
+ // interruption settles as the catchable interrupted error.
733
+ ...(options.nestedApprovalOwner
734
+ ? { nestedApprovalOwner: options.nestedApprovalOwner, approvalPolicyRegistry: approvalRegistry }
735
+ : {}),
736
+ ...(sessionId !== undefined ? { sessionId } : {}),
737
+ ...(options.graphIdentity ? { graphIdentity: options.graphIdentity } : {}),
738
+ ...(options.nestedCompatibility ? { nestedCompatibility: options.nestedCompatibility } : {}),
739
+ onCallAdmitted: (member, started, callId) => recordAgentCall(member, started, callId, 'unknown'),
740
+ onCallSettled: (member, started, callId, outcome, reason) => {
741
+ if (outcome === 'unknown' && reason)
742
+ abortedAgentCallIds.add(callId);
743
+ recordAgentCall(member, started, callId, outcome, reason);
744
+ },
745
+ }, { bridgeRunId, context: input.context });
746
+ }
694
747
  const settleResolved = async (prepared, raw, callId) => {
695
748
  try {
696
749
  if (isActionTool(prepared.tool.name)) {
@@ -732,7 +785,7 @@ export function createRunCodeRuntime(options) {
732
785
  const result = await new SandboxedCodeHostImpl().run({
733
786
  code: input.code,
734
787
  inputData: input.inputs,
735
- capabilities: { tools },
788
+ capabilities,
736
789
  limits: {
737
790
  timeoutMs: input.timeout,
738
791
  maxCodeBytes: RUN_CODE_LIMITS.maxCodeBytes,