@orion-agents/orion-code 0.1.0 → 0.1.2

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 (251) hide show
  1. package/README.md +107 -67
  2. package/README.zh-CN.md +192 -217
  3. package/dist/cli.js +23 -21
  4. package/dist/cli.js.map +1 -1
  5. package/dist/commands/index.d.ts +1 -1
  6. package/dist/commands/index.d.ts.map +1 -1
  7. package/dist/commands/index.js +397 -212
  8. package/dist/commands/index.js.map +1 -1
  9. package/dist/commands/target-command.d.ts.map +1 -1
  10. package/dist/commands/target-command.js +43 -9
  11. package/dist/commands/target-command.js.map +1 -1
  12. package/dist/commands/types.d.ts +33 -0
  13. package/dist/commands/types.d.ts.map +1 -1
  14. package/dist/commands/types.js +5 -1
  15. package/dist/commands/types.js.map +1 -1
  16. package/dist/core/agent.d.ts.map +1 -1
  17. package/dist/core/agent.js +2 -2
  18. package/dist/core/agent.js.map +1 -1
  19. package/dist/framework/external-assertion.d.ts +65 -0
  20. package/dist/framework/external-assertion.d.ts.map +1 -0
  21. package/dist/framework/external-assertion.js +571 -0
  22. package/dist/framework/external-assertion.js.map +1 -0
  23. package/dist/framework/index.d.ts +6 -4
  24. package/dist/framework/index.d.ts.map +1 -1
  25. package/dist/framework/index.js +4 -1
  26. package/dist/framework/index.js.map +1 -1
  27. package/dist/framework/query.d.ts +18 -1
  28. package/dist/framework/query.d.ts.map +1 -1
  29. package/dist/framework/query.js +65 -28
  30. package/dist/framework/query.js.map +1 -1
  31. package/dist/framework/tool-scheduler.d.ts +2 -0
  32. package/dist/framework/tool-scheduler.d.ts.map +1 -1
  33. package/dist/framework/tool-scheduler.js +23 -9
  34. package/dist/framework/tool-scheduler.js.map +1 -1
  35. package/dist/framework/tool-serializer.d.ts.map +1 -1
  36. package/dist/framework/tool-serializer.js +20 -4
  37. package/dist/framework/tool-serializer.js.map +1 -1
  38. package/dist/framework/tool.d.ts +11 -5
  39. package/dist/framework/tool.d.ts.map +1 -1
  40. package/dist/framework/tool.js.map +1 -1
  41. package/dist/harness/context-harness.d.ts.map +1 -1
  42. package/dist/harness/context-harness.js +4 -3
  43. package/dist/harness/context-harness.js.map +1 -1
  44. package/dist/harness/drift-guard.d.ts.map +1 -1
  45. package/dist/harness/drift-guard.js +14 -5
  46. package/dist/harness/drift-guard.js.map +1 -1
  47. package/dist/harness/safety.d.ts.map +1 -1
  48. package/dist/harness/safety.js +19 -3
  49. package/dist/harness/safety.js.map +1 -1
  50. package/dist/init.d.ts +1 -1
  51. package/dist/init.d.ts.map +1 -1
  52. package/dist/init.js +115 -34
  53. package/dist/init.js.map +1 -1
  54. package/dist/ink-ui/screens/ReplScreen.d.ts.map +1 -1
  55. package/dist/ink-ui/screens/ReplScreen.js +4 -1
  56. package/dist/ink-ui/screens/ReplScreen.js.map +1 -1
  57. package/dist/memory/storage.d.ts.map +1 -1
  58. package/dist/memory/storage.js +1 -0
  59. package/dist/memory/storage.js.map +1 -1
  60. package/dist/memory/store.d.ts.map +1 -1
  61. package/dist/memory/store.js +11 -5
  62. package/dist/memory/store.js.map +1 -1
  63. package/dist/migration/command.d.ts.map +1 -1
  64. package/dist/migration/command.js +6 -1
  65. package/dist/migration/command.js.map +1 -1
  66. package/dist/migration/migrate.d.ts.map +1 -1
  67. package/dist/migration/migrate.js +4 -1
  68. package/dist/migration/migrate.js.map +1 -1
  69. package/dist/print-ui/launch.d.ts +4 -0
  70. package/dist/print-ui/launch.d.ts.map +1 -1
  71. package/dist/print-ui/launch.js +102 -9
  72. package/dist/print-ui/launch.js.map +1 -1
  73. package/dist/product/identity.d.ts +2 -2
  74. package/dist/product/identity.d.ts.map +1 -1
  75. package/dist/product/identity.js +2 -2
  76. package/dist/product/identity.js.map +1 -1
  77. package/dist/product/index.d.ts +2 -1
  78. package/dist/product/index.d.ts.map +1 -1
  79. package/dist/product/index.js +5 -1
  80. package/dist/product/index.js.map +1 -1
  81. package/dist/product/version.d.ts +12 -0
  82. package/dist/product/version.d.ts.map +1 -0
  83. package/dist/product/version.js +31 -0
  84. package/dist/product/version.js.map +1 -0
  85. package/dist/runtime/agent-runtime-controller.d.ts +49 -0
  86. package/dist/runtime/agent-runtime-controller.d.ts.map +1 -1
  87. package/dist/runtime/agent-runtime-controller.js +1048 -81
  88. package/dist/runtime/agent-runtime-controller.js.map +1 -1
  89. package/dist/runtime/agent-runtime-protocol.d.ts +14 -2
  90. package/dist/runtime/agent-runtime-protocol.d.ts.map +1 -1
  91. package/dist/runtime/agent-runtime-protocol.js +18 -0
  92. package/dist/runtime/agent-runtime-protocol.js.map +1 -1
  93. package/dist/runtime/chat-controller.d.ts +6 -0
  94. package/dist/runtime/chat-controller.d.ts.map +1 -1
  95. package/dist/runtime/chat-controller.js +226 -20
  96. package/dist/runtime/chat-controller.js.map +1 -1
  97. package/dist/runtime/goals/accounting.d.ts +28 -0
  98. package/dist/runtime/goals/accounting.d.ts.map +1 -1
  99. package/dist/runtime/goals/accounting.js +69 -0
  100. package/dist/runtime/goals/accounting.js.map +1 -1
  101. package/dist/runtime/goals/completion-audit.d.ts +13 -8
  102. package/dist/runtime/goals/completion-audit.d.ts.map +1 -1
  103. package/dist/runtime/goals/completion-audit.js +598 -16
  104. package/dist/runtime/goals/completion-audit.js.map +1 -1
  105. package/dist/runtime/goals/coordinator.d.ts +44 -5
  106. package/dist/runtime/goals/coordinator.d.ts.map +1 -1
  107. package/dist/runtime/goals/coordinator.js +1124 -58
  108. package/dist/runtime/goals/coordinator.js.map +1 -1
  109. package/dist/runtime/goals/evidence.d.ts +37 -0
  110. package/dist/runtime/goals/evidence.d.ts.map +1 -0
  111. package/dist/runtime/goals/evidence.js +300 -0
  112. package/dist/runtime/goals/evidence.js.map +1 -0
  113. package/dist/runtime/goals/presentation.d.ts +4 -0
  114. package/dist/runtime/goals/presentation.d.ts.map +1 -0
  115. package/dist/runtime/goals/presentation.js +50 -0
  116. package/dist/runtime/goals/presentation.js.map +1 -0
  117. package/dist/runtime/goals/prompt.d.ts.map +1 -1
  118. package/dist/runtime/goals/prompt.js +38 -8
  119. package/dist/runtime/goals/prompt.js.map +1 -1
  120. package/dist/runtime/goals/tools.d.ts +18 -1
  121. package/dist/runtime/goals/tools.d.ts.map +1 -1
  122. package/dist/runtime/goals/tools.js +308 -28
  123. package/dist/runtime/goals/tools.js.map +1 -1
  124. package/dist/runtime/goals/types.d.ts +241 -7
  125. package/dist/runtime/goals/types.d.ts.map +1 -1
  126. package/dist/runtime/goals/types.js +8 -2
  127. package/dist/runtime/goals/types.js.map +1 -1
  128. package/dist/runtime/subagents/child-executor-guard.d.ts +12 -4
  129. package/dist/runtime/subagents/child-executor-guard.d.ts.map +1 -1
  130. package/dist/runtime/subagents/child-executor-guard.js +397 -61
  131. package/dist/runtime/subagents/child-executor-guard.js.map +1 -1
  132. package/dist/runtime/subagents/presets.d.ts +4 -5
  133. package/dist/runtime/subagents/presets.d.ts.map +1 -1
  134. package/dist/runtime/subagents/presets.js +18 -33
  135. package/dist/runtime/subagents/presets.js.map +1 -1
  136. package/dist/runtime/subagents/production.d.ts +3 -1
  137. package/dist/runtime/subagents/production.d.ts.map +1 -1
  138. package/dist/runtime/subagents/production.js +37 -7
  139. package/dist/runtime/subagents/production.js.map +1 -1
  140. package/dist/runtime/subagents/runner.d.ts.map +1 -1
  141. package/dist/runtime/subagents/runner.js +24 -3
  142. package/dist/runtime/subagents/runner.js.map +1 -1
  143. package/dist/runtime/subagents/runtime-integration.d.ts +3 -0
  144. package/dist/runtime/subagents/runtime-integration.d.ts.map +1 -1
  145. package/dist/runtime/subagents/runtime-integration.js +18 -7
  146. package/dist/runtime/subagents/runtime-integration.js.map +1 -1
  147. package/dist/runtime/subagents/supervisor.d.ts +4 -4
  148. package/dist/runtime/subagents/supervisor.d.ts.map +1 -1
  149. package/dist/runtime/subagents/supervisor.js +39 -19
  150. package/dist/runtime/subagents/supervisor.js.map +1 -1
  151. package/dist/runtime/subagents/types.d.ts +7 -0
  152. package/dist/runtime/subagents/types.d.ts.map +1 -1
  153. package/dist/runtime/subagents/types.js +12 -1
  154. package/dist/runtime/subagents/types.js.map +1 -1
  155. package/dist/runtime/ui-events.d.ts +10 -0
  156. package/dist/runtime/ui-events.d.ts.map +1 -1
  157. package/dist/runtime/ui-events.js +5 -5
  158. package/dist/runtime/ui-events.js.map +1 -1
  159. package/dist/runtime/ui-view-model.d.ts +3 -3
  160. package/dist/runtime/ui-view-model.d.ts.map +1 -1
  161. package/dist/runtime/ui-view-model.js +11 -4
  162. package/dist/runtime/ui-view-model.js.map +1 -1
  163. package/dist/services/config.d.ts +18 -7
  164. package/dist/services/config.d.ts.map +1 -1
  165. package/dist/services/config.js +79 -57
  166. package/dist/services/config.js.map +1 -1
  167. package/dist/services/doctor.d.ts.map +1 -1
  168. package/dist/services/doctor.js +164 -18
  169. package/dist/services/doctor.js.map +1 -1
  170. package/dist/services/global-config.d.ts +1 -1
  171. package/dist/services/global-config.d.ts.map +1 -1
  172. package/dist/services/goal-storage.d.ts +9 -4
  173. package/dist/services/goal-storage.d.ts.map +1 -1
  174. package/dist/services/goal-storage.js +1113 -75
  175. package/dist/services/goal-storage.js.map +1 -1
  176. package/dist/services/llm.d.ts +19 -0
  177. package/dist/services/llm.d.ts.map +1 -1
  178. package/dist/services/llm.js +153 -20
  179. package/dist/services/llm.js.map +1 -1
  180. package/dist/services/model-registry.d.ts +1 -1
  181. package/dist/services/model-registry.d.ts.map +1 -1
  182. package/dist/services/model-registry.js +69 -19
  183. package/dist/services/model-registry.js.map +1 -1
  184. package/dist/services/provider-resilience/coordinator.d.ts +2 -1
  185. package/dist/services/provider-resilience/coordinator.d.ts.map +1 -1
  186. package/dist/services/provider-resilience/coordinator.js +7 -6
  187. package/dist/services/provider-resilience/coordinator.js.map +1 -1
  188. package/dist/services/provider-resilience/error-classifier.d.ts.map +1 -1
  189. package/dist/services/provider-resilience/error-classifier.js +67 -17
  190. package/dist/services/provider-resilience/error-classifier.js.map +1 -1
  191. package/dist/services/provider-resilience/types.d.ts +1 -1
  192. package/dist/services/provider-resilience/types.d.ts.map +1 -1
  193. package/dist/services/provider-resilience/types.js.map +1 -1
  194. package/dist/services/redaction.d.ts.map +1 -1
  195. package/dist/services/redaction.js +9 -1
  196. package/dist/services/redaction.js.map +1 -1
  197. package/dist/services/session-storage.d.ts +12 -1
  198. package/dist/services/session-storage.d.ts.map +1 -1
  199. package/dist/services/session-storage.js +23 -7
  200. package/dist/services/session-storage.js.map +1 -1
  201. package/dist/services/storage-maintenance.d.ts +73 -3
  202. package/dist/services/storage-maintenance.d.ts.map +1 -1
  203. package/dist/services/storage-maintenance.js +771 -104
  204. package/dist/services/storage-maintenance.js.map +1 -1
  205. package/dist/services/task-manager.d.ts.map +1 -1
  206. package/dist/services/task-manager.js +2 -2
  207. package/dist/services/task-manager.js.map +1 -1
  208. package/dist/services/web-search-adapters.d.ts.map +1 -1
  209. package/dist/services/web-search-adapters.js +89 -49
  210. package/dist/services/web-search-adapters.js.map +1 -1
  211. package/dist/services/web-search-mcp.d.ts.map +1 -1
  212. package/dist/services/web-search-mcp.js +34 -37
  213. package/dist/services/web-search-mcp.js.map +1 -1
  214. package/dist/services/workspace-state.d.ts +4 -0
  215. package/dist/services/workspace-state.d.ts.map +1 -1
  216. package/dist/services/workspace-state.js +30 -9
  217. package/dist/services/workspace-state.js.map +1 -1
  218. package/dist/terminal-ui/completion.js +1 -1
  219. package/dist/terminal-ui/completion.js.map +1 -1
  220. package/dist/terminal-ui/launch.d.ts +3 -0
  221. package/dist/terminal-ui/launch.d.ts.map +1 -1
  222. package/dist/terminal-ui/launch.js +26 -98
  223. package/dist/terminal-ui/launch.js.map +1 -1
  224. package/dist/tools/git.d.ts.map +1 -1
  225. package/dist/tools/git.js +275 -27
  226. package/dist/tools/git.js.map +1 -1
  227. package/dist/tools/index.d.ts +2 -0
  228. package/dist/tools/index.d.ts.map +1 -1
  229. package/dist/tools/index.js +29 -10
  230. package/dist/tools/index.js.map +1 -1
  231. package/dist/tools/mcp.d.ts.map +1 -1
  232. package/dist/tools/mcp.js +20 -12
  233. package/dist/tools/mcp.js.map +1 -1
  234. package/dist/tools/web.d.ts.map +1 -1
  235. package/dist/tools/web.js +38 -14
  236. package/dist/tools/web.js.map +1 -1
  237. package/dist/tui-ui/layout.d.ts.map +1 -1
  238. package/dist/tui-ui/layout.js +36 -23
  239. package/dist/tui-ui/layout.js.map +1 -1
  240. package/dist/tui-ui/pickers.d.ts.map +1 -1
  241. package/dist/tui-ui/pickers.js +5 -4
  242. package/dist/tui-ui/pickers.js.map +1 -1
  243. package/dist/tui-ui/runner.d.ts +1 -0
  244. package/dist/tui-ui/runner.d.ts.map +1 -1
  245. package/dist/tui-ui/runner.js +15 -17
  246. package/dist/tui-ui/runner.js.map +1 -1
  247. package/dist/tui-ui/state.d.ts +6 -0
  248. package/dist/tui-ui/state.d.ts.map +1 -1
  249. package/dist/tui-ui/state.js +61 -30
  250. package/dist/tui-ui/state.js.map +1 -1
  251. package/package.json +14 -9
@@ -20,12 +20,10 @@ exports.READ_ONLY_INVESTIGATION_TOOLS = [
20
20
  'glob',
21
21
  'grep',
22
22
  'batch_read',
23
- // NOTE: mcp_call and mcp_list are intentionally EXCLUDED from the child
24
- // allowlist. mcp_call is a generic escape hatch that can invoke any MCP
25
- // action (including mutating ones) without going through the root's
26
- // permission flow. mcp_list leaks server topology. Instead, first-class
27
- // MCP tools (mcp__<server>__<tool>) with readOnlyHint === true are
28
- // dynamically included by filterToolsForRole at runtime.
23
+ // MCP tools are intentionally excluded. `readOnlyHint` says whether a tool
24
+ // mutates remote state, but does not certify that its arguments are pathless
25
+ // or constrained to the packet scope. Dynamic MCP exposure can return only
26
+ // after the runtime has explicit path-scope capability metadata.
29
27
  ];
30
28
  /**
31
29
  * Tools a child must NEVER receive. Kept as an explicit deny-set so the
@@ -41,8 +39,8 @@ exports.SUBAGENT_FORBIDDEN_TOOLS = [
41
39
  'memory_forget',
42
40
  'orion-code',
43
41
  'subtask',
44
- // Generic MCP escape hatches children must use first-class MCP tools
45
- // (mcp__<server>__<tool>) with readOnlyHint === true instead.
42
+ // Generic MCP escape hatches. First-class mcp__ tools are also rejected by
43
+ // filterToolsForRole/assertNoForbiddenTools until path-scope metadata exists.
46
44
  'mcp_call',
47
45
  'mcp_list',
48
46
  // Cross-session information leak: history_search reads transcripts from
@@ -73,7 +71,7 @@ exports.ROLE_PRESETS = {
73
71
  tools: exports.READ_ONLY_INVESTIGATION_TOOLS,
74
72
  systemPrompt: `You are a read-only research subagent for Orion Code. Your job is to gather repository facts, official documentation, or API behavior and return a structured conclusion.
75
73
 
76
- You may only read files, list/glob/grep, batch read-only steps, and use configured read-only MCP tools (e.g. web search/fetch). You may inspect git state only through read-only means available to you.
74
+ You may only read files, list/glob/grep, and batch repository read-only steps exposed by the runtime. You may inspect git state only through read-only means available to you.
77
75
 
78
76
  Focus narrowly on the objective you were given. Do not attempt edits or commands.${JSON_OUTPUT_CONTRACT}`,
79
77
  },
@@ -82,14 +80,14 @@ Focus narrowly on the objective you were given. Do not attempt edits or commands
82
80
  tools: exports.READ_ONLY_INVESTIGATION_TOOLS,
83
81
  systemPrompt: `You are a read-only code review subagent for Orion Code. Your job is to review a diff, changeset, or code area for risks, regressions, and test gaps, and return a structured conclusion.
84
82
 
85
- You may read files, list/glob/grep, batch read-only steps, and use read-only MCP tools. You may NOT fix code, change review scope, execute shell, or commit.${JSON_OUTPUT_CONTRACT}`,
83
+ You may read files, list/glob/grep, and batch repository read-only steps. You may NOT fix code, change review scope, execute shell, use MCP tools, or commit.${JSON_OUTPUT_CONTRACT}`,
86
84
  },
87
85
  'test-investigate': {
88
86
  role: 'test-investigate',
89
87
  tools: exports.READ_ONLY_INVESTIGATION_TOOLS,
90
88
  systemPrompt: `You are a read-only test investigation subagent for Orion Code. You analyze failing test logs, test code, and configuration to identify likely root causes, and return a structured conclusion.
91
89
 
92
- You may read files, list/glob/grep, batch read-only steps, and use read-only MCP tools. You may NOT execute tests, install dependencies, update snapshots, write fixtures, or publish. If a command would help diagnose the failure, suggest it in "commands" for the root Agent to run.${JSON_OUTPUT_CONTRACT}`,
90
+ You may read files, list/glob/grep, and batch repository read-only steps. You may NOT execute tests, use MCP tools, install dependencies, update snapshots, write fixtures, or publish. If a command would help diagnose the failure, suggest it in "commands" for the root Agent to run.${JSON_OUTPUT_CONTRACT}`,
93
91
  },
94
92
  };
95
93
  /** Resolve the tool allowlist for a role. Falls back to the read-only set. */
@@ -102,37 +100,24 @@ function systemPromptForRole(role) {
102
100
  }
103
101
  /**
104
102
  * Filter an upstream tool list to a role's allowlist, removing any forbidden
105
- * tool and the recursive `subtask` capability. Also includes first-class MCP
106
- * tools (mcp__<server>__<tool>) that declare `readOnlyHint === true` via
107
- * their `isReadOnly()` method these are safe for children because they
108
- * cannot invoke arbitrary MCP actions.
103
+ * tool, every dynamic first-class MCP tool, and the recursive `subtask`
104
+ * capability. `readOnlyHint` is not a path-containment capability, so it must
105
+ * not make an MCP tool child-visible.
109
106
  *
110
107
  * Returns the names the child may receive; the caller is responsible for
111
108
  * resolving them to tool definitions.
112
109
  */
113
- function filterToolsForRole(availableToolNames, role, runtimeTools) {
110
+ function filterToolsForRole(availableToolNames, role, _runtimeTools) {
114
111
  const allowed = new Set(toolsForRole(role));
115
112
  const denied = new Set(exports.SUBAGENT_FORBIDDEN_TOOLS);
116
- // Build a map of tool name → tool definition for annotation checks.
117
- const toolMap = new Map();
118
- if (runtimeTools) {
119
- for (const t of runtimeTools) {
120
- toolMap.set(t.name, t);
121
- }
122
- }
123
113
  return availableToolNames.filter(name => {
124
114
  // Explicitly denied tools are never allowed.
125
115
  if (denied.has(name))
126
116
  return false;
127
- // First-class MCP tools (mcp__<server>__<tool>) are allowed only if
128
- // they declare isReadOnly() === true. Unknown or missing annotation
129
- // means denied — conservative default.
130
- if (name.startsWith('mcp__')) {
131
- const tool = toolMap.get(name);
132
- if (!tool)
133
- return false;
134
- return tool.isReadOnly?.({}) === true;
135
- }
117
+ // First-class MCP tools remain unavailable even with readOnlyHint=true:
118
+ // read-only does not prove project-root or packet-scope containment.
119
+ if (name.startsWith('mcp__'))
120
+ return false;
136
121
  // Static allowlist covers non-MCP tools.
137
122
  return allowed.has(name);
138
123
  });
@@ -140,7 +125,7 @@ function filterToolsForRole(availableToolNames, role, runtimeTools) {
140
125
  /** Assert a filtered tool list contains no forbidden tool. Used by the runner. */
141
126
  function assertNoForbiddenTools(toolNames) {
142
127
  const denied = new Set(exports.SUBAGENT_FORBIDDEN_TOOLS);
143
- const found = toolNames.filter(name => denied.has(name));
128
+ const found = toolNames.filter(name => denied.has(name) || name.startsWith('mcp__'));
144
129
  if (found.length > 0) {
145
130
  throw new Error(`Subagent tool list contains forbidden tools: ${found.join(', ')}`);
146
131
  }
@@ -1 +1 @@
1
- {"version":3,"file":"presets.js","sourceRoot":"","sources":["../../../src/runtime/subagents/presets.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"presets.js","sourceRoot":"","sources":["../../../src/runtime/subagents/presets.ts"],"names":[],"mappings":";AAAA;;;;;;;GAOG;;;AA+FH,oCAEC;AAGD,kDAEC;AAWD,gDAmBC;AAGD,wDAMC;AAxID,sEAAsE;AACzD,QAAA,6BAA6B,GAAG;IAC3C,WAAW;IACX,YAAY;IACZ,MAAM;IACN,MAAM;IACN,YAAY;IACZ,2EAA2E;IAC3E,6EAA6E;IAC7E,2EAA2E;IAC3E,iEAAiE;CACzD,CAAC;AAEX;;;;GAIG;AACU,QAAA,wBAAwB,GAAG;IACtC,cAAc;IACd,WAAW;IACX,YAAY;IACZ,aAAa;IACb,eAAe;IACf,eAAe;IACf,YAAY;IACZ,SAAS;IACT,2EAA2E;IAC3E,8EAA8E;IAC9E,UAAU;IACV,UAAU;IACV,wEAAwE;IACxE,4DAA4D;IAC5D,gBAAgB;CACR,CAAC;AAUX,MAAM,oBAAoB,GAAG;;;;;;;;;;;;;;;;;6DAiBgC,CAAC;AAEjD,QAAA,YAAY,GAAqC;IAC5D,QAAQ,EAAE;QACR,IAAI,EAAE,UAAU;QAChB,KAAK,EAAE,qCAA6B;QACpC,YAAY,EAAE;;;;mFAIiE,oBAAoB,EAAE;KACtG;IACD,MAAM,EAAE;QACN,IAAI,EAAE,QAAQ;QACd,KAAK,EAAE,qCAA6B;QACpC,YAAY,EAAE;;+JAE6I,oBAAoB,EAAE;KAClL;IACD,kBAAkB,EAAE;QAClB,IAAI,EAAE,kBAAkB;QACxB,KAAK,EAAE,qCAA6B;QACpC,YAAY,EAAE;;2RAEyQ,oBAAoB,EAAE;KAC9S;CACF,CAAC;AAEF,8EAA8E;AAC9E,SAAgB,YAAY,CAAC,IAAkB;IAC7C,OAAO,oBAAY,CAAC,IAAI,CAAC,EAAE,KAAK,IAAI,qCAA6B,CAAC;AACpE,CAAC;AAED,4CAA4C;AAC5C,SAAgB,mBAAmB,CAAC,IAAkB;IACpD,OAAO,oBAAY,CAAC,IAAI,CAAC,EAAE,YAAY,IAAI,oBAAY,CAAC,QAAQ,CAAC,YAAY,CAAC;AAChF,CAAC;AAED;;;;;;;;GAQG;AACH,SAAgB,kBAAkB,CAChC,kBAAqC,EACrC,IAAkB,EAClB,aAAwC;IAExC,MAAM,OAAO,GAAG,IAAI,GAAG,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC;IAC5C,MAAM,MAAM,GAAG,IAAI,GAAG,CAAS,gCAAwB,CAAC,CAAC;IAEzD,OAAO,kBAAkB,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE;QACtC,6CAA6C;QAC7C,IAAI,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC;YAAE,OAAO,KAAK,CAAC;QAEnC,wEAAwE;QACxE,qEAAqE;QACrE,IAAI,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC;YAAE,OAAO,KAAK,CAAC;QAE3C,yCAAyC;QACzC,OAAO,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAC3B,CAAC,CAAC,CAAC;AACL,CAAC;AAED,kFAAkF;AAClF,SAAgB,sBAAsB,CAAC,SAA4B;IACjE,MAAM,MAAM,GAAG,IAAI,GAAG,CAAS,gCAAwB,CAAC,CAAC;IACzD,MAAM,KAAK,GAAG,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC;IACrF,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACrB,MAAM,IAAI,KAAK,CAAC,gDAAgD,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACtF,CAAC;AACH,CAAC"}
@@ -11,7 +11,7 @@
11
11
  * without a live provider; production wires them to `new LLMService(...)` and
12
12
  * `query()`.
13
13
  */
14
- import { LLMService, type LLMConfig } from '../../services/llm';
14
+ import { LLMService, type LLMConfig, type ProviderRequestPreflight } from '../../services/llm';
15
15
  import type { ProviderResilienceCoordinator } from '../../services/provider-resilience';
16
16
  import { type QueryEvent, type QueryParams } from '../../framework/query';
17
17
  import type { ExecuteChildQuery } from './runner';
@@ -29,6 +29,8 @@ export interface SubagentLlmFactoryDeps {
29
29
  providerGate: SubagentProviderGate;
30
30
  /** Per-child turn cap. */
31
31
  maxTurnsPerTask: number;
32
+ /** Shared Goal token-budget preflight applied to every child provider attempt. */
33
+ beforeProviderRequest?: ProviderRequestPreflight;
32
34
  }
33
35
  /**
34
36
  * Create a per-child LLMService. Children share the provider account but not
@@ -1 +1 @@
1
- {"version":3,"file":"production.d.ts","sourceRoot":"","sources":["../../../src/runtime/subagents/production.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,EAAE,UAAU,EAAE,KAAK,SAAS,EAAgB,MAAM,oBAAoB,CAAC;AAC9E,OAAO,KAAK,EAAE,6BAA6B,EAAE,MAAM,oCAAoC,CAAC;AAExF,OAAO,EAAS,KAAK,UAAU,EAAE,KAAK,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACjF,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAC;AAGlD,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;AAE5D,MAAM,WAAW,sBAAsB;IACrC,yDAAyD;IACzD,UAAU,EAAE,IAAI,CAAC,SAAS,EAAE,QAAQ,GAAG,SAAS,GAAG,OAAO,GAAG,eAAe,CAAC,CAAC;IAC9E,4EAA4E;IAC5E,SAAS,CAAC,EAAE,CAAC,MAAM,EAAE,SAAS,KAAK,UAAU,CAAC;IAC9C,+EAA+E;IAC/E,UAAU,CAAC,EAAE,6BAA6B,CAAC;IAC3C,mDAAmD;IACnD,QAAQ,CAAC,EAAE,CAAC,MAAM,EAAE,WAAW,KAAK,aAAa,CAAC,UAAU,CAAC,CAAC;IAC9D,6EAA6E;IAC7E,YAAY,EAAE,oBAAoB,CAAC;IACnC,0BAA0B;IAC1B,eAAe,EAAE,MAAM,CAAC;CACzB;AAED;;;;GAIG;AACH,wBAAgB,oBAAoB,CAClC,UAAU,EAAE,IAAI,CAAC,SAAS,EAAE,QAAQ,GAAG,SAAS,GAAG,OAAO,GAAG,eAAe,CAAC,GAC5E,SAAS,CAQX;AAED;;;;;;GAMG;AACH,wBAAgB,4BAA4B,CAAC,IAAI,EAAE,sBAAsB,GAAG,iBAAiB,CA6E5F"}
1
+ {"version":3,"file":"production.d.ts","sourceRoot":"","sources":["../../../src/runtime/subagents/production.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,EACL,UAAU,EACV,KAAK,SAAS,EAEd,KAAK,wBAAwB,EAC9B,MAAM,oBAAoB,CAAC;AAC5B,OAAO,KAAK,EAAE,6BAA6B,EAAE,MAAM,oCAAoC,CAAC;AAExF,OAAO,EAAS,KAAK,UAAU,EAAE,KAAK,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACjF,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAC;AAGlD,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;AAE5D,MAAM,WAAW,sBAAsB;IACrC,yDAAyD;IACzD,UAAU,EAAE,IAAI,CAAC,SAAS,EAAE,QAAQ,GAAG,SAAS,GAAG,OAAO,GAAG,eAAe,CAAC,CAAC;IAC9E,4EAA4E;IAC5E,SAAS,CAAC,EAAE,CAAC,MAAM,EAAE,SAAS,KAAK,UAAU,CAAC;IAC9C,+EAA+E;IAC/E,UAAU,CAAC,EAAE,6BAA6B,CAAC;IAC3C,mDAAmD;IACnD,QAAQ,CAAC,EAAE,CAAC,MAAM,EAAE,WAAW,KAAK,aAAa,CAAC,UAAU,CAAC,CAAC;IAC9D,6EAA6E;IAC7E,YAAY,EAAE,oBAAoB,CAAC;IACnC,0BAA0B;IAC1B,eAAe,EAAE,MAAM,CAAC;IACxB,kFAAkF;IAClF,qBAAqB,CAAC,EAAE,wBAAwB,CAAC;CAClD;AAED;;;;GAIG;AACH,wBAAgB,oBAAoB,CAClC,UAAU,EAAE,IAAI,CAAC,SAAS,EAAE,QAAQ,GAAG,SAAS,GAAG,OAAO,GAAG,eAAe,CAAC,GAC5E,SAAS,CAQX;AAED;;;;;;GAMG;AACH,wBAAgB,4BAA4B,CAAC,IAAI,EAAE,sBAAsB,GAAG,iBAAiB,CA0H5F"}
@@ -41,7 +41,8 @@ function createChildLlmConfig(rootConfig) {
41
41
  */
42
42
  function createProductionExecuteQuery(deps) {
43
43
  const createLlm = deps.createLlm ?? ((config) => new llm_1.LLMService(config));
44
- const runQuery = deps.runQuery ?? ((params) => (0, query_1.query)(params));
44
+ const runQuery = deps.runQuery ??
45
+ ((params) => (0, query_1.query)(params));
45
46
  return async (messages, toolSet, abortSignal) => {
46
47
  const llm = createLlm(createChildLlmConfig(deps.rootConfig));
47
48
  // v0.2.26: inject the shared resilience coordinator so child requests
@@ -49,12 +50,22 @@ function createProductionExecuteQuery(deps) {
49
50
  if (deps.resilience) {
50
51
  llm.resilience = deps.resilience;
51
52
  }
53
+ let providerAttempts = 0;
54
+ const providerPreflight = async (context) => {
55
+ providerAttempts += 1;
56
+ return deps.beforeProviderRequest ? deps.beforeProviderRequest(context) : { available: true };
57
+ };
58
+ const restoreProviderPreflight = typeof llm.setProviderRequestPreflight === 'function'
59
+ ? llm.setProviderRequestPreflight(providerPreflight)
60
+ : undefined;
52
61
  let finalContent = '';
53
62
  const usage = { ...types_1.EMPTY_SUBTASK_USAGE };
63
+ const startedAt = Date.now();
54
64
  let modelRequests = 0;
55
65
  let observedModelRequests = 0;
56
66
  let providerCostComplete = true;
57
67
  let providerCostUsd = 0;
68
+ let completionUsageComplete = false;
58
69
  const unsubscribeUsage = typeof llm.subscribeUsage === 'function'
59
70
  ? llm.subscribeUsage(event => {
60
71
  observedModelRequests++;
@@ -66,6 +77,13 @@ function createProductionExecuteQuery(deps) {
66
77
  providerCostUsd += event.usage.costUsd;
67
78
  })
68
79
  : undefined;
80
+ const finalizeUsage = (usageComplete) => {
81
+ usage.modelRequests = Math.max(usage.modelRequests, modelRequests, observedModelRequests);
82
+ usage.durationMs = Math.max(0, Date.now() - startedAt);
83
+ usage.usageComplete = usageComplete;
84
+ if (observedModelRequests > 0 && providerCostComplete)
85
+ usage.costUsd = providerCostUsd;
86
+ };
69
87
  try {
70
88
  const params = {
71
89
  messages: messages,
@@ -90,11 +108,23 @@ function createProductionExecuteQuery(deps) {
90
108
  usage.promptTokens = loopUsage.promptTokens;
91
109
  usage.completionTokens = loopUsage.completionTokens;
92
110
  }
111
+ const expectedSuccessfulRequests = Math.max(event.stats?.llmRequests ?? 0, loopUsage.modelRequests);
112
+ const hasAggregateUsage = Boolean(event.usage &&
113
+ Number.isFinite(event.usage.promptTokens) &&
114
+ Number.isFinite(event.usage.completionTokens));
115
+ const successfulUsageCovered = observedModelRequests >= expectedSuccessfulRequests || hasAggregateUsage;
116
+ const unknownFailedAttempts = (event.stats?.providerRetryCount ?? 0) > 0 ||
117
+ (event.stats?.providerFallbackCount ?? 0) > 0 ||
118
+ (Boolean(unsubscribeUsage) && providerAttempts > observedModelRequests);
119
+ completionUsageComplete = successfulUsageCovered && !unknownFailedAttempts;
93
120
  }
94
121
  else if (event.type === 'assistant_tool_calls') {
95
122
  modelRequests += 1;
96
123
  finalContent = event.content;
97
124
  }
125
+ else if (event.type === 'tool_result') {
126
+ usage.toolCalls += 1;
127
+ }
98
128
  }
99
129
  }
100
130
  catch (err) {
@@ -103,16 +133,16 @@ function createProductionExecuteQuery(deps) {
103
133
  const retryAfter = extractRetryAfterMs(err);
104
134
  deps.providerGate.enterCooldown(retryAfter);
105
135
  }
106
- // Re-throw so the runner normalizes into failed/cancelled. The runner
107
- // never lets this propagate to the root loop.
108
- throw err;
136
+ // Preserve already-observed usage as a lower bound. The runner
137
+ // normalizes this into failed/cancelled without losing provider cost.
138
+ finalizeUsage(false);
139
+ throw new types_1.SubtaskExecutionError(err instanceof Error ? err.message : String(err), usage);
109
140
  }
110
141
  finally {
111
142
  unsubscribeUsage?.();
143
+ restoreProviderPreflight?.();
112
144
  }
113
- usage.modelRequests = Math.max(usage.modelRequests, modelRequests, observedModelRequests);
114
- if (observedModelRequests > 0 && providerCostComplete)
115
- usage.costUsd = providerCostUsd;
145
+ finalizeUsage(completionUsageComplete);
116
146
  return { content: finalContent, usage };
117
147
  };
118
148
  }
@@ -1 +1 @@
1
- {"version":3,"file":"production.js","sourceRoot":"","sources":["../../../src/runtime/subagents/production.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"production.js","sourceRoot":"","sources":["../../../src/runtime/subagents/production.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"runner.d.ts","sourceRoot":"","sources":["../../../src/runtime/subagents/runner.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAEvD,OAAO,KAAK,EACV,aAAa,EACb,aAAa,EAEb,YAAY,EACb,MAAM,SAAS,CAAC;AA4BjB,0DAA0D;AAC1D,MAAM,WAAW,YAAY;IAC3B,oDAAoD;IACpD,KAAK,EAAE,OAAO,EAAE,CAAC;IACjB,6BAA6B;IAC7B,YAAY,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,WAAW,CAAC,EAAE,WAAW,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;CAC3G;AAED,iFAAiF;AACjF,MAAM,MAAM,iBAAiB,GAAG,CAC9B,QAAQ,EAAE,UAAU,CAAC,OAAO,kBAAkB,CAAC,EAC/C,OAAO,EAAE,YAAY,EACrB,WAAW,EAAE,WAAW,KACrB,OAAO,CAAC;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,YAAY,CAAA;CAAE,CAAC,CAAC;AAEvD,MAAM,WAAW,kBAAkB;IACjC,8BAA8B;IAC9B,GAAG,EAAE,MAAM,CAAC;IACZ,iDAAiD;IACjD,mBAAmB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC/B,uCAAuC;IACvC,OAAO,EAAE,YAAY,CAAC;IACtB,0EAA0E;IAC1E,YAAY,EAAE,iBAAiB,CAAC;IAChC,oCAAoC;IACpC,SAAS,EAAE,MAAM,CAAC;IAClB,2DAA2D;IAC3D,iBAAiB,CAAC,EAAE,WAAW,CAAC;IAChC,0EAA0E;IAC1E,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,aAAa,CAAC;IACtB,wEAAwE;IACxE,eAAe,EAAE,OAAO,CAAC;CAC1B;AAED;;;GAGG;AACH,wBAAsB,UAAU,CAC9B,MAAM,EAAE,aAAa,EACrB,IAAI,EAAE,kBAAkB,EACxB,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,iBAAiB,CAAC,CA6H5B"}
1
+ {"version":3,"file":"runner.d.ts","sourceRoot":"","sources":["../../../src/runtime/subagents/runner.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAEvD,OAAO,KAAK,EAAE,aAAa,EAAE,aAAa,EAAuB,YAAY,EAAE,MAAM,SAAS,CAAC;AA4B/F,0DAA0D;AAC1D,MAAM,WAAW,YAAY;IAC3B,oDAAoD;IACpD,KAAK,EAAE,OAAO,EAAE,CAAC;IACjB,6BAA6B;IAC7B,YAAY,EAAE,CACZ,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC7B,WAAW,CAAC,EAAE,WAAW,KACtB,OAAO,CAAC,MAAM,CAAC,CAAC;CACtB;AAED,iFAAiF;AACjF,MAAM,MAAM,iBAAiB,GAAG,CAC9B,QAAQ,EAAE,UAAU,CAAC,OAAO,kBAAkB,CAAC,EAC/C,OAAO,EAAE,YAAY,EACrB,WAAW,EAAE,WAAW,KACrB,OAAO,CAAC;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,YAAY,CAAA;CAAE,CAAC,CAAC;AAEvD,MAAM,WAAW,kBAAkB;IACjC,8BAA8B;IAC9B,GAAG,EAAE,MAAM,CAAC;IACZ,iDAAiD;IACjD,mBAAmB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC/B,uCAAuC;IACvC,OAAO,EAAE,YAAY,CAAC;IACtB,0EAA0E;IAC1E,YAAY,EAAE,iBAAiB,CAAC;IAChC,oCAAoC;IACpC,SAAS,EAAE,MAAM,CAAC;IAClB,2DAA2D;IAC3D,iBAAiB,CAAC,EAAE,WAAW,CAAC;IAChC,0EAA0E;IAC1E,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,aAAa,CAAC;IACtB,wEAAwE;IACxE,eAAe,EAAE,OAAO,CAAC;CAC1B;AAED;;;GAGG;AACH,wBAAsB,UAAU,CAC9B,MAAM,EAAE,aAAa,EACrB,IAAI,EAAE,kBAAkB,EACxB,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,iBAAiB,CAAC,CAqJ5B"}
@@ -93,16 +93,24 @@ async function runSubtask(packet, deps, taskId) {
93
93
  deps.parentAbortSignal.addEventListener('abort', handler, { once: true });
94
94
  }
95
95
  });
96
+ let settledQueryOutcome;
96
97
  const queryPromise = deps
97
98
  .executeQuery(messages, deps.toolSet, childController.signal)
98
99
  .then(content => ({ kind: 'done', content }))
99
100
  .catch(err => ({
100
101
  kind: 'error',
101
102
  message: err instanceof Error ? err.message : String(err),
102
- }));
103
+ usage: err instanceof types_1.SubtaskExecutionError
104
+ ? err.usage
105
+ : { ...types_1.EMPTY_SUBTASK_USAGE, usageComplete: false },
106
+ }))
107
+ .then(outcome => {
108
+ settledQueryOutcome = outcome;
109
+ return outcome;
110
+ });
103
111
  let status;
104
112
  let content = '';
105
- let usage = types_1.EMPTY_SUBTASK_USAGE;
113
+ let usage = { ...types_1.EMPTY_SUBTASK_USAGE, usageComplete: false };
106
114
  let parentCancelled = false;
107
115
  try {
108
116
  const outcome = await Promise.race([parentAbortPromise, queryPromise, timeoutPromise]);
@@ -115,6 +123,7 @@ async function runSubtask(packet, deps, taskId) {
115
123
  status = 'timed_out';
116
124
  }
117
125
  else if (outcome.kind === 'error') {
126
+ usage = outcome.usage;
118
127
  // If the parent aborted, treat as cancel; otherwise a failure.
119
128
  if (parentAborted && !timedOut) {
120
129
  status = 'cancelled';
@@ -135,7 +144,10 @@ async function runSubtask(packet, deps, taskId) {
135
144
  else {
136
145
  status = 'completed';
137
146
  content = outcome.content.content;
138
- usage = outcome.content.usage;
147
+ usage = {
148
+ ...outcome.content.usage,
149
+ usageComplete: outcome.content.usage.usageComplete === true,
150
+ };
139
151
  }
140
152
  }
141
153
  }
@@ -159,6 +171,15 @@ async function runSubtask(packet, deps, taskId) {
159
171
  // stuck child cannot hang the whole turn forever.
160
172
  if (status === 'timed_out' || status === 'cancelled') {
161
173
  await settleWithGrace(queryPromise, CHILD_SHUTDOWN_GRACE_MS);
174
+ if (settledQueryOutcome?.kind === 'done') {
175
+ usage = {
176
+ ...settledQueryOutcome.content.usage,
177
+ usageComplete: settledQueryOutcome.content.usage.usageComplete === true,
178
+ };
179
+ }
180
+ else if (settledQueryOutcome?.kind === 'error') {
181
+ usage = settledQueryOutcome.usage;
182
+ }
162
183
  }
163
184
  const result = (0, result_parser_1.parseSubtaskResult)({
164
185
  id: taskId,
@@ -1 +1 @@
1
- {"version":3,"file":"runner.js","sourceRoot":"","sources":["../../../src/runtime/subagents/runner.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"runner.js","sourceRoot":"","sources":["../../../src/runtime/subagents/runner.ts"],"names":[],"mappings":"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"}
@@ -13,6 +13,7 @@ import { runSubtaskBatch } from './supervisor';
13
13
  import type { RuntimeSubtaskEvent, SubagentConfig, SubtaskUsage } from './types';
14
14
  import type { LLMConfig } from '../../services/llm';
15
15
  import type { ProviderResilienceCoordinator } from '../../services/provider-resilience';
16
+ import type { ProviderRequestPreflight } from '../../services/llm';
16
17
  import type { OpenHorseCLIConfig } from '../../services/config';
17
18
  export interface SubagentTurnInputs {
18
19
  /** Resolved subagent config (from runtime.config.subagents). */
@@ -46,6 +47,8 @@ export interface SubagentTurnInputs {
46
47
  onChildUsage?: (taskId: string, role: import('./types').SubagentRole, usage: import('./types').SubtaskUsage, modelLabel?: string) => void;
47
48
  /** v0.2.26: shared resilience coordinator for child LLM requests. */
48
49
  resilience?: ProviderResilienceCoordinator;
50
+ /** Shared Goal token-budget preflight for every child provider attempt. */
51
+ beforeProviderRequest?: ProviderRequestPreflight;
49
52
  }
50
53
  /**
51
54
  * Build the `subtask` tool for a root turn, or null if disabled.
@@ -1 +1 @@
1
- {"version":3,"file":"runtime-integration.d.ts","sourceRoot":"","sources":["../../../src/runtime/subagents/runtime-integration.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAe,MAAM,sBAAsB,CAAC;AAIvE,OAAO,EAAE,eAAe,EAA+B,MAAM,cAAc,CAAC;AAI5E,OAAO,KAAK,EAAE,mBAAmB,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACjF,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AACpD,OAAO,KAAK,EAAE,6BAA6B,EAAE,MAAM,oCAAoC,CAAC;AACxF,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAiBhE,MAAM,WAAW,kBAAkB;IACjC,gEAAgE;IAChE,MAAM,EAAE,cAAc,CAAC;IACvB,8BAA8B;IAC9B,GAAG,EAAE,MAAM,CAAC;IACZ,iFAAiF;IACjF,aAAa,EAAE,IAAI,CAAC,SAAS,EAAE,QAAQ,GAAG,SAAS,GAAG,OAAO,GAAG,eAAe,CAAC,CAAC;IACjF,qCAAqC;IACrC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,oDAAoD;IACpD,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,yDAAyD;IACzD,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,oDAAoD;IACpD,cAAc,CAAC,EAAE,CAAC,KAAK,EAAE,mBAAmB,KAAK,IAAI,CAAC;IACtD,0FAA0F;IAC1F,eAAe,CAAC,EAAE,CAAC,MAAM,EAAE,OAAO,SAAS,EAAE,aAAa,EAAE,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IACrF;;;;;OAKG;IACH,oBAAoB,CAAC,EAAE,MAAM,OAAO,CAAC;IACrC;;;;OAIG;IACH,YAAY,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,SAAS,EAAE,YAAY,EAAE,KAAK,EAAE,OAAO,SAAS,EAAE,YAAY,EAAE,UAAU,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;IAC1I,qEAAqE;IACrE,UAAU,CAAC,EAAE,6BAA6B,CAAC;CAC5C;AAED;;;;;;GAMG;AACH,wBAAgB,2BAA2B,CAAC,MAAM,EAAE,kBAAkB,GAAG,kBAAkB,GAAG,IAAI,CA6FjG;AAED;;;;GAIG;AACH,wBAAgB,yBAAyB,CAAC,MAAM,EAAE,kBAAkB,GAAG,aAAa,GAAG,IAAI,CAG1F;AAED,8EAA8E;AAC9E,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,aAAa,CAAC;IACpB,yEAAyE;IACzE,iBAAiB,EAAE,MAAM,YAAY,CAAC;IACtC,wDAAwD;IACxD,eAAe,EAAE,MAAM,MAAM,CAAC;CAC/B;AAED,gEAAgE;AAChE,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,kBAAkB,GAAG,IAAI,CAAC,SAAS,EAAE,QAAQ,GAAG,SAAS,GAAG,OAAO,GAAG,eAAe,CAAC,CAOjI;AAED,0EAA0E;AAC1E,OAAO,EAAE,eAAe,EAAE,CAAC"}
1
+ {"version":3,"file":"runtime-integration.d.ts","sourceRoot":"","sources":["../../../src/runtime/subagents/runtime-integration.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAe,MAAM,sBAAsB,CAAC;AAIvE,OAAO,EAAE,eAAe,EAA+B,MAAM,cAAc,CAAC;AAI5E,OAAO,KAAK,EAAE,mBAAmB,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACjF,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AACpD,OAAO,KAAK,EAAE,6BAA6B,EAAE,MAAM,oCAAoC,CAAC;AACxF,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,oBAAoB,CAAC;AACnE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAiBhE,MAAM,WAAW,kBAAkB;IACjC,gEAAgE;IAChE,MAAM,EAAE,cAAc,CAAC;IACvB,8BAA8B;IAC9B,GAAG,EAAE,MAAM,CAAC;IACZ,iFAAiF;IACjF,aAAa,EAAE,IAAI,CAAC,SAAS,EAAE,QAAQ,GAAG,SAAS,GAAG,OAAO,GAAG,eAAe,CAAC,CAAC;IACjF,qCAAqC;IACrC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,oDAAoD;IACpD,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,yDAAyD;IACzD,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,oDAAoD;IACpD,cAAc,CAAC,EAAE,CAAC,KAAK,EAAE,mBAAmB,KAAK,IAAI,CAAC;IACtD,0FAA0F;IAC1F,eAAe,CAAC,EAAE,CAAC,MAAM,EAAE,OAAO,SAAS,EAAE,aAAa,EAAE,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IACrF;;;;;OAKG;IACH,oBAAoB,CAAC,EAAE,MAAM,OAAO,CAAC;IACrC;;;;OAIG;IACH,YAAY,CAAC,EAAE,CACb,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,OAAO,SAAS,EAAE,YAAY,EACpC,KAAK,EAAE,OAAO,SAAS,EAAE,YAAY,EACrC,UAAU,CAAC,EAAE,MAAM,KAChB,IAAI,CAAC;IACV,qEAAqE;IACrE,UAAU,CAAC,EAAE,6BAA6B,CAAC;IAC3C,2EAA2E;IAC3E,qBAAqB,CAAC,EAAE,wBAAwB,CAAC;CAClD;AAED;;;;;;GAMG;AACH,wBAAgB,2BAA2B,CAAC,MAAM,EAAE,kBAAkB,GAAG,kBAAkB,GAAG,IAAI,CA8GjG;AAED;;;;GAIG;AACH,wBAAgB,yBAAyB,CAAC,MAAM,EAAE,kBAAkB,GAAG,aAAa,GAAG,IAAI,CAG1F;AAED,8EAA8E;AAC9E,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,aAAa,CAAC;IACpB,yEAAyE;IACzE,iBAAiB,EAAE,MAAM,YAAY,CAAC;IACtC,wDAAwD;IACxD,eAAe,EAAE,MAAM,MAAM,CAAC;CAC/B;AAED,gEAAgE;AAChE,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,kBAAkB,GACzB,IAAI,CAAC,SAAS,EAAE,QAAQ,GAAG,SAAS,GAAG,OAAO,GAAG,eAAe,CAAC,CAOnE;AAED,0EAA0E;AAC1E,OAAO,EAAE,eAAe,EAAE,CAAC"}
@@ -65,21 +65,31 @@ function createSubagentBundleForTurn(inputs) {
65
65
  const childToolByName = new Map();
66
66
  for (const t of childTools)
67
67
  childToolByName.set(t.name, t);
68
- // R3: scope holder lets the supervisor set the current packet's scope
69
- // before each child runs, so the turn-level guard enforces per-packet
70
- // containment without rebuilding the executor.
68
+ // R3: the async-context scope holder lets the supervisor bind each child to
69
+ // its packet scope, so parallel children cannot overwrite one another while
70
+ // sharing the same guarded executor.
71
71
  const scopeHolder = new child_executor_guard_1.ScopeHolder();
72
72
  const unguardedExecutor = async (name, args, signal) => {
73
73
  if (!allowedNames.has(name)) {
74
- return JSON.stringify({ success: false, error: `Tool ${name} is not available to subagents.` });
74
+ return JSON.stringify({
75
+ success: false,
76
+ error: `Tool ${name} is not available to subagents.`,
77
+ });
75
78
  }
76
79
  // Re-verify read-only at execution time: catches tools whose isReadOnly()
77
80
  // returns false (mutating MCP actions, future regressions).
78
81
  const tool = childToolByName.get(name);
79
82
  if (!tool || tool.isReadOnly?.(args) !== true) {
80
- return JSON.stringify({ success: false, error: `Tool ${name} is not read-only and cannot run in a subagent.` });
83
+ return JSON.stringify({
84
+ success: false,
85
+ error: `Tool ${name} is not read-only and cannot run in a subagent.`,
86
+ });
81
87
  }
82
- const toolContext = { cwd, config: { name: 'orion-code-subagent', mode: 'subagent' }, abortSignal: signal };
88
+ const toolContext = {
89
+ cwd,
90
+ config: { name: 'orion-code-subagent', mode: 'subagent' },
91
+ abortSignal: signal,
92
+ };
83
93
  return executeTool(name, args, signal, toolContext);
84
94
  };
85
95
  const childToolExecutor = (0, child_executor_guard_1.createChildToolExecutorGuard)(unguardedExecutor, {
@@ -88,7 +98,7 @@ function createSubagentBundleForTurn(inputs) {
88
98
  });
89
99
  const providerGate = new provider_gate_1.SubagentProviderGate({
90
100
  maxConcurrent: config.maxParallel,
91
- sharedGate: inputs.resilience ? inputs.sharedGate ?? undefined : undefined,
101
+ sharedGate: inputs.resilience ? (inputs.sharedGate ?? undefined) : undefined,
92
102
  });
93
103
  const budget = new budget_1.SubagentBudgetLedger((0, budget_1.budgetLimitsFromConfig)({
94
104
  maxModelRequestsPerTurn: config.maxModelRequestsPerTurn,
@@ -104,6 +114,7 @@ function createSubagentBundleForTurn(inputs) {
104
114
  providerGate,
105
115
  maxTurnsPerTask: config.maxTurnsPerTask,
106
116
  resilience: inputs.resilience,
117
+ beforeProviderRequest: inputs.beforeProviderRequest,
107
118
  });
108
119
  const supervisorDeps = {
109
120
  config,
@@ -1 +1 @@
1
- {"version":3,"file":"runtime-integration.js","sourceRoot":"","sources":["../../../src/runtime/subagents/runtime-integration.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"runtime-integration.js","sourceRoot":"","sources":["../../../src/runtime/subagents/runtime-integration.ts"],"names":[],"mappings":"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"}
@@ -26,10 +26,10 @@ export interface SubagentSupervisorDeps {
26
26
  /** Filtered, child-safe tool set (already passed through presets). */
27
27
  toolSet: ChildToolSet;
28
28
  /**
29
- * R3: mutable scope holder. The supervisor sets the current packet's
30
- * canonical scope before running it, so the turn-level executor guard can
31
- * enforce per-packet containment. Optional: when absent, only root
32
- * containment is enforced.
29
+ * R3: async-context scope holder. The supervisor binds each child run to
30
+ * its packet's canonical scope so parallel children cannot overwrite or
31
+ * clear one another's containment boundary. Optional: when absent, only
32
+ * root containment is enforced.
33
33
  */
34
34
  scopeHolder?: ScopeHolder;
35
35
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"supervisor.d.ts","sourceRoot":"","sources":["../../../src/runtime/subagents/supervisor.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EAAE,oBAAoB,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAC/D,OAAO,EAA6C,KAAK,kBAAkB,EAAE,MAAM,UAAU,CAAC;AAC9F,OAAO,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;AACvD,OAAO,EAAc,KAAK,iBAAiB,EAAE,KAAK,YAAY,EAA2B,MAAM,UAAU,CAAC;AAC1G,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,EAEL,KAAK,mBAAmB,EACxB,KAAK,cAAc,EACnB,KAAK,kBAAkB,EAEvB,KAAK,cAAc,EACnB,KAAK,aAAa,EACnB,MAAM,SAAS,CAAC;AAEjB,MAAM,WAAW,sBAAsB;IACrC,MAAM,EAAE,cAAc,CAAC;IACvB,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,oBAAoB,CAAC;IAC7B,YAAY,EAAE,oBAAoB,CAAC;IACnC,yEAAyE;IACzE,YAAY,EAAE,iBAAiB,CAAC;IAChC,sEAAsE;IACtE,OAAO,EAAE,YAAY,CAAC;IACtB;;;;;OAKG;IACH,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B;;;;OAIG;IACH,aAAa,CAAC,EAAE,aAAa,CAAC;IAC9B;;;;;OAKG;IACH,oBAAoB,CAAC,EAAE,MAAM,OAAO,CAAC;IACrC;;;;;OAKG;IACH,YAAY,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,SAAS,EAAE,YAAY,EAAE,KAAK,EAAE,OAAO,SAAS,EAAE,YAAY,EAAE,UAAU,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;IAC1I,2DAA2D;IAC3D,iBAAiB,CAAC,EAAE,WAAW,CAAC;IAChC,iDAAiD;IACjD,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,oDAAoD;IACpD,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,mBAAmB,KAAK,IAAI,CAAC;IAC/C,oFAAoF;IACpF,eAAe,CAAC,EAAE,CAAC,MAAM,EAAE,aAAa,EAAE,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;CACpE;AAeD,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,kBAAkB,CAAC;IAC3B,qEAAqE;IACrE,QAAQ,EAAE,OAAO,CAAC;IAClB,YAAY,CAAC,EAAE,kBAAkB,CAAC;CACnC;AAED;;;;;;GAMG;AACH,wBAAsB,eAAe,CACnC,OAAO,EAAE,cAAc,EACvB,IAAI,EAAE,sBAAsB,GAC3B,OAAO,CAAC,eAAe,CAAC,CAyG1B"}
1
+ {"version":3,"file":"supervisor.d.ts","sourceRoot":"","sources":["../../../src/runtime/subagents/supervisor.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EAAE,oBAAoB,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAC/D,OAAO,EAA6C,KAAK,kBAAkB,EAAE,MAAM,UAAU,CAAC;AAC9F,OAAO,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;AACvD,OAAO,EAEL,KAAK,iBAAiB,EACtB,KAAK,YAAY,EAElB,MAAM,UAAU,CAAC;AAClB,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,EAEL,KAAK,mBAAmB,EACxB,KAAK,cAAc,EACnB,KAAK,kBAAkB,EAEvB,KAAK,cAAc,EACnB,KAAK,aAAa,EACnB,MAAM,SAAS,CAAC;AAEjB,MAAM,WAAW,sBAAsB;IACrC,MAAM,EAAE,cAAc,CAAC;IACvB,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,oBAAoB,CAAC;IAC7B,YAAY,EAAE,oBAAoB,CAAC;IACnC,yEAAyE;IACzE,YAAY,EAAE,iBAAiB,CAAC;IAChC,sEAAsE;IACtE,OAAO,EAAE,YAAY,CAAC;IACtB;;;;;OAKG;IACH,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B;;;;OAIG;IACH,aAAa,CAAC,EAAE,aAAa,CAAC;IAC9B;;;;;OAKG;IACH,oBAAoB,CAAC,EAAE,MAAM,OAAO,CAAC;IACrC;;;;;OAKG;IACH,YAAY,CAAC,EAAE,CACb,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,OAAO,SAAS,EAAE,YAAY,EACpC,KAAK,EAAE,OAAO,SAAS,EAAE,YAAY,EACrC,UAAU,CAAC,EAAE,MAAM,KAChB,IAAI,CAAC;IACV,2DAA2D;IAC3D,iBAAiB,CAAC,EAAE,WAAW,CAAC;IAChC,iDAAiD;IACjD,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,oDAAoD;IACpD,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,mBAAmB,KAAK,IAAI,CAAC;IAC/C,oFAAoF;IACpF,eAAe,CAAC,EAAE,CAAC,MAAM,EAAE,aAAa,EAAE,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;CACpE;AAeD,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,kBAAkB,CAAC;IAC3B,qEAAqE;IACrE,QAAQ,EAAE,OAAO,CAAC;IAClB,YAAY,CAAC,EAAE,kBAAkB,CAAC;CACnC;AAED;;;;;;GAMG;AACH,wBAAsB,eAAe,CACnC,OAAO,EAAE,cAAc,EACvB,IAAI,EAAE,sBAAsB,GAC3B,OAAO,CAAC,eAAe,CAAC,CA+G1B"}
@@ -96,7 +96,10 @@ async function runSubtaskBatch(request, deps) {
96
96
  };
97
97
  }
98
98
  emit(deps, {
99
- batchId, taskId: taskIds[i], role: tasks[i].role, state: 'queued',
99
+ batchId,
100
+ taskId: taskIds[i],
101
+ role: tasks[i].role,
102
+ state: 'queued',
100
103
  objective: tasks[i].objective,
101
104
  });
102
105
  }
@@ -150,7 +153,14 @@ async function runParallel(tasks, taskIds, batchId, deps, runnerDeps) {
150
153
  commands: [],
151
154
  verification: [],
152
155
  risks: ['runner threw unexpectedly'],
153
- usage: { modelRequests: 0, toolCalls: 0, promptTokens: 0, completionTokens: 0, durationMs: 0 },
156
+ usage: {
157
+ modelRequests: 0,
158
+ toolCalls: 0,
159
+ promptTokens: 0,
160
+ completionTokens: 0,
161
+ durationMs: 0,
162
+ usageComplete: false,
163
+ },
154
164
  };
155
165
  finalizeTask(deps, batchId, taskIds[i], task, result);
156
166
  return { result, parentCancelled: false };
@@ -194,22 +204,25 @@ async function runOne(task, taskId, batchId, _index, deps, runnerDeps) {
194
204
  return { result: cancelled, parentCancelled: true };
195
205
  }
196
206
  try {
197
- // R3: set the current packet's canonical scope so the executor guard
198
- // enforces per-packet containment. Cleared in finally.
207
+ const execute = async () => {
208
+ emit(deps, { batchId, taskId, role: task.role, state: 'running', objective: task.objective });
209
+ const outcome = await (0, runner_1.runSubtask)(task, runnerDeps, taskId);
210
+ // R7: single finalize path - terminal event + result callback + usage
211
+ // callback all happen here, exactly once, with errors isolated so a
212
+ // throwing sink cannot reject the batch or corrupt sibling aggregation.
213
+ finalizeTask(deps, batchId, taskId, task, outcome.result);
214
+ return outcome;
215
+ };
216
+ // R3: bind the full child async chain to its canonical packet scope.
217
+ // AsyncLocalStorage automatically restores the parent context when this
218
+ // run finishes, so no child can clear a sibling or root boundary.
199
219
  if (deps.scopeHolder) {
200
- deps.scopeHolder.setScope(runnerDeps.canonicalScopePaths ?? []);
220
+ return await deps.scopeHolder.runWithScope(runnerDeps.canonicalScopePaths ?? [], execute);
201
221
  }
202
- emit(deps, { batchId, taskId, role: task.role, state: 'running', objective: task.objective });
203
- const outcome = await (0, runner_1.runSubtask)(task, runnerDeps, taskId);
204
- // R7: single finalize path - terminal event + result callback + usage
205
- // callback all happen here, exactly once, with errors isolated so a
206
- // throwing sink cannot reject the batch or corrupt sibling aggregation.
207
- finalizeTask(deps, batchId, taskId, task, outcome.result);
208
- return outcome;
222
+ return await execute();
209
223
  }
210
224
  finally {
211
225
  deps.providerGate.release();
212
- deps.scopeHolder?.clear();
213
226
  }
214
227
  }
215
228
  /**
@@ -223,7 +236,9 @@ function finalizeTask(deps, batchId, taskId, task, result) {
223
236
  // Terminal lifecycle event - isolated.
224
237
  try {
225
238
  emit(deps, {
226
- batchId, taskId, role: task.role,
239
+ batchId,
240
+ taskId,
241
+ role: task.role,
227
242
  state: toEventState(result.status),
228
243
  objective: task.objective,
229
244
  summary: result.summary,
@@ -251,11 +266,16 @@ function finalizeTask(deps, batchId, taskId, task, result) {
251
266
  }
252
267
  function toEventState(status) {
253
268
  switch (status) {
254
- case 'completed': return 'completed';
255
- case 'failed': return 'failed';
256
- case 'cancelled': return 'cancelled';
257
- case 'timed_out': return 'timed_out';
258
- case 'rejected': return 'rejected';
269
+ case 'completed':
270
+ return 'completed';
271
+ case 'failed':
272
+ return 'failed';
273
+ case 'cancelled':
274
+ return 'cancelled';
275
+ case 'timed_out':
276
+ return 'timed_out';
277
+ case 'rejected':
278
+ return 'rejected';
259
279
  }
260
280
  }
261
281
  /** Build a rejected result (does not emit - finalizeTask handles that). */