@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.
- package/README.md +107 -67
- package/README.zh-CN.md +192 -217
- package/dist/cli.js +23 -21
- package/dist/cli.js.map +1 -1
- package/dist/commands/index.d.ts +1 -1
- package/dist/commands/index.d.ts.map +1 -1
- package/dist/commands/index.js +397 -212
- package/dist/commands/index.js.map +1 -1
- package/dist/commands/target-command.d.ts.map +1 -1
- package/dist/commands/target-command.js +43 -9
- package/dist/commands/target-command.js.map +1 -1
- package/dist/commands/types.d.ts +33 -0
- package/dist/commands/types.d.ts.map +1 -1
- package/dist/commands/types.js +5 -1
- package/dist/commands/types.js.map +1 -1
- package/dist/core/agent.d.ts.map +1 -1
- package/dist/core/agent.js +2 -2
- package/dist/core/agent.js.map +1 -1
- package/dist/framework/external-assertion.d.ts +65 -0
- package/dist/framework/external-assertion.d.ts.map +1 -0
- package/dist/framework/external-assertion.js +571 -0
- package/dist/framework/external-assertion.js.map +1 -0
- package/dist/framework/index.d.ts +6 -4
- package/dist/framework/index.d.ts.map +1 -1
- package/dist/framework/index.js +4 -1
- package/dist/framework/index.js.map +1 -1
- package/dist/framework/query.d.ts +18 -1
- package/dist/framework/query.d.ts.map +1 -1
- package/dist/framework/query.js +65 -28
- package/dist/framework/query.js.map +1 -1
- package/dist/framework/tool-scheduler.d.ts +2 -0
- package/dist/framework/tool-scheduler.d.ts.map +1 -1
- package/dist/framework/tool-scheduler.js +23 -9
- package/dist/framework/tool-scheduler.js.map +1 -1
- package/dist/framework/tool-serializer.d.ts.map +1 -1
- package/dist/framework/tool-serializer.js +20 -4
- package/dist/framework/tool-serializer.js.map +1 -1
- package/dist/framework/tool.d.ts +11 -5
- package/dist/framework/tool.d.ts.map +1 -1
- package/dist/framework/tool.js.map +1 -1
- package/dist/harness/context-harness.d.ts.map +1 -1
- package/dist/harness/context-harness.js +4 -3
- package/dist/harness/context-harness.js.map +1 -1
- package/dist/harness/drift-guard.d.ts.map +1 -1
- package/dist/harness/drift-guard.js +14 -5
- package/dist/harness/drift-guard.js.map +1 -1
- package/dist/harness/safety.d.ts.map +1 -1
- package/dist/harness/safety.js +19 -3
- package/dist/harness/safety.js.map +1 -1
- package/dist/init.d.ts +1 -1
- package/dist/init.d.ts.map +1 -1
- package/dist/init.js +115 -34
- package/dist/init.js.map +1 -1
- package/dist/ink-ui/screens/ReplScreen.d.ts.map +1 -1
- package/dist/ink-ui/screens/ReplScreen.js +4 -1
- package/dist/ink-ui/screens/ReplScreen.js.map +1 -1
- package/dist/memory/storage.d.ts.map +1 -1
- package/dist/memory/storage.js +1 -0
- package/dist/memory/storage.js.map +1 -1
- package/dist/memory/store.d.ts.map +1 -1
- package/dist/memory/store.js +11 -5
- package/dist/memory/store.js.map +1 -1
- package/dist/migration/command.d.ts.map +1 -1
- package/dist/migration/command.js +6 -1
- package/dist/migration/command.js.map +1 -1
- package/dist/migration/migrate.d.ts.map +1 -1
- package/dist/migration/migrate.js +4 -1
- package/dist/migration/migrate.js.map +1 -1
- package/dist/print-ui/launch.d.ts +4 -0
- package/dist/print-ui/launch.d.ts.map +1 -1
- package/dist/print-ui/launch.js +102 -9
- package/dist/print-ui/launch.js.map +1 -1
- package/dist/product/identity.d.ts +2 -2
- package/dist/product/identity.d.ts.map +1 -1
- package/dist/product/identity.js +2 -2
- package/dist/product/identity.js.map +1 -1
- package/dist/product/index.d.ts +2 -1
- package/dist/product/index.d.ts.map +1 -1
- package/dist/product/index.js +5 -1
- package/dist/product/index.js.map +1 -1
- package/dist/product/version.d.ts +12 -0
- package/dist/product/version.d.ts.map +1 -0
- package/dist/product/version.js +31 -0
- package/dist/product/version.js.map +1 -0
- package/dist/runtime/agent-runtime-controller.d.ts +49 -0
- package/dist/runtime/agent-runtime-controller.d.ts.map +1 -1
- package/dist/runtime/agent-runtime-controller.js +1048 -81
- package/dist/runtime/agent-runtime-controller.js.map +1 -1
- package/dist/runtime/agent-runtime-protocol.d.ts +14 -2
- package/dist/runtime/agent-runtime-protocol.d.ts.map +1 -1
- package/dist/runtime/agent-runtime-protocol.js +18 -0
- package/dist/runtime/agent-runtime-protocol.js.map +1 -1
- package/dist/runtime/chat-controller.d.ts +6 -0
- package/dist/runtime/chat-controller.d.ts.map +1 -1
- package/dist/runtime/chat-controller.js +226 -20
- package/dist/runtime/chat-controller.js.map +1 -1
- package/dist/runtime/goals/accounting.d.ts +28 -0
- package/dist/runtime/goals/accounting.d.ts.map +1 -1
- package/dist/runtime/goals/accounting.js +69 -0
- package/dist/runtime/goals/accounting.js.map +1 -1
- package/dist/runtime/goals/completion-audit.d.ts +13 -8
- package/dist/runtime/goals/completion-audit.d.ts.map +1 -1
- package/dist/runtime/goals/completion-audit.js +598 -16
- package/dist/runtime/goals/completion-audit.js.map +1 -1
- package/dist/runtime/goals/coordinator.d.ts +44 -5
- package/dist/runtime/goals/coordinator.d.ts.map +1 -1
- package/dist/runtime/goals/coordinator.js +1124 -58
- package/dist/runtime/goals/coordinator.js.map +1 -1
- package/dist/runtime/goals/evidence.d.ts +37 -0
- package/dist/runtime/goals/evidence.d.ts.map +1 -0
- package/dist/runtime/goals/evidence.js +300 -0
- package/dist/runtime/goals/evidence.js.map +1 -0
- package/dist/runtime/goals/presentation.d.ts +4 -0
- package/dist/runtime/goals/presentation.d.ts.map +1 -0
- package/dist/runtime/goals/presentation.js +50 -0
- package/dist/runtime/goals/presentation.js.map +1 -0
- package/dist/runtime/goals/prompt.d.ts.map +1 -1
- package/dist/runtime/goals/prompt.js +38 -8
- package/dist/runtime/goals/prompt.js.map +1 -1
- package/dist/runtime/goals/tools.d.ts +18 -1
- package/dist/runtime/goals/tools.d.ts.map +1 -1
- package/dist/runtime/goals/tools.js +308 -28
- package/dist/runtime/goals/tools.js.map +1 -1
- package/dist/runtime/goals/types.d.ts +241 -7
- package/dist/runtime/goals/types.d.ts.map +1 -1
- package/dist/runtime/goals/types.js +8 -2
- package/dist/runtime/goals/types.js.map +1 -1
- package/dist/runtime/subagents/child-executor-guard.d.ts +12 -4
- package/dist/runtime/subagents/child-executor-guard.d.ts.map +1 -1
- package/dist/runtime/subagents/child-executor-guard.js +397 -61
- package/dist/runtime/subagents/child-executor-guard.js.map +1 -1
- package/dist/runtime/subagents/presets.d.ts +4 -5
- package/dist/runtime/subagents/presets.d.ts.map +1 -1
- package/dist/runtime/subagents/presets.js +18 -33
- package/dist/runtime/subagents/presets.js.map +1 -1
- package/dist/runtime/subagents/production.d.ts +3 -1
- package/dist/runtime/subagents/production.d.ts.map +1 -1
- package/dist/runtime/subagents/production.js +37 -7
- package/dist/runtime/subagents/production.js.map +1 -1
- package/dist/runtime/subagents/runner.d.ts.map +1 -1
- package/dist/runtime/subagents/runner.js +24 -3
- package/dist/runtime/subagents/runner.js.map +1 -1
- package/dist/runtime/subagents/runtime-integration.d.ts +3 -0
- package/dist/runtime/subagents/runtime-integration.d.ts.map +1 -1
- package/dist/runtime/subagents/runtime-integration.js +18 -7
- package/dist/runtime/subagents/runtime-integration.js.map +1 -1
- package/dist/runtime/subagents/supervisor.d.ts +4 -4
- package/dist/runtime/subagents/supervisor.d.ts.map +1 -1
- package/dist/runtime/subagents/supervisor.js +39 -19
- package/dist/runtime/subagents/supervisor.js.map +1 -1
- package/dist/runtime/subagents/types.d.ts +7 -0
- package/dist/runtime/subagents/types.d.ts.map +1 -1
- package/dist/runtime/subagents/types.js +12 -1
- package/dist/runtime/subagents/types.js.map +1 -1
- package/dist/runtime/ui-events.d.ts +10 -0
- package/dist/runtime/ui-events.d.ts.map +1 -1
- package/dist/runtime/ui-events.js +5 -5
- package/dist/runtime/ui-events.js.map +1 -1
- package/dist/runtime/ui-view-model.d.ts +3 -3
- package/dist/runtime/ui-view-model.d.ts.map +1 -1
- package/dist/runtime/ui-view-model.js +11 -4
- package/dist/runtime/ui-view-model.js.map +1 -1
- package/dist/services/config.d.ts +18 -7
- package/dist/services/config.d.ts.map +1 -1
- package/dist/services/config.js +79 -57
- package/dist/services/config.js.map +1 -1
- package/dist/services/doctor.d.ts.map +1 -1
- package/dist/services/doctor.js +164 -18
- package/dist/services/doctor.js.map +1 -1
- package/dist/services/global-config.d.ts +1 -1
- package/dist/services/global-config.d.ts.map +1 -1
- package/dist/services/goal-storage.d.ts +9 -4
- package/dist/services/goal-storage.d.ts.map +1 -1
- package/dist/services/goal-storage.js +1113 -75
- package/dist/services/goal-storage.js.map +1 -1
- package/dist/services/llm.d.ts +19 -0
- package/dist/services/llm.d.ts.map +1 -1
- package/dist/services/llm.js +153 -20
- package/dist/services/llm.js.map +1 -1
- package/dist/services/model-registry.d.ts +1 -1
- package/dist/services/model-registry.d.ts.map +1 -1
- package/dist/services/model-registry.js +69 -19
- package/dist/services/model-registry.js.map +1 -1
- package/dist/services/provider-resilience/coordinator.d.ts +2 -1
- package/dist/services/provider-resilience/coordinator.d.ts.map +1 -1
- package/dist/services/provider-resilience/coordinator.js +7 -6
- package/dist/services/provider-resilience/coordinator.js.map +1 -1
- package/dist/services/provider-resilience/error-classifier.d.ts.map +1 -1
- package/dist/services/provider-resilience/error-classifier.js +67 -17
- package/dist/services/provider-resilience/error-classifier.js.map +1 -1
- package/dist/services/provider-resilience/types.d.ts +1 -1
- package/dist/services/provider-resilience/types.d.ts.map +1 -1
- package/dist/services/provider-resilience/types.js.map +1 -1
- package/dist/services/redaction.d.ts.map +1 -1
- package/dist/services/redaction.js +9 -1
- package/dist/services/redaction.js.map +1 -1
- package/dist/services/session-storage.d.ts +12 -1
- package/dist/services/session-storage.d.ts.map +1 -1
- package/dist/services/session-storage.js +23 -7
- package/dist/services/session-storage.js.map +1 -1
- package/dist/services/storage-maintenance.d.ts +73 -3
- package/dist/services/storage-maintenance.d.ts.map +1 -1
- package/dist/services/storage-maintenance.js +771 -104
- package/dist/services/storage-maintenance.js.map +1 -1
- package/dist/services/task-manager.d.ts.map +1 -1
- package/dist/services/task-manager.js +2 -2
- package/dist/services/task-manager.js.map +1 -1
- package/dist/services/web-search-adapters.d.ts.map +1 -1
- package/dist/services/web-search-adapters.js +89 -49
- package/dist/services/web-search-adapters.js.map +1 -1
- package/dist/services/web-search-mcp.d.ts.map +1 -1
- package/dist/services/web-search-mcp.js +34 -37
- package/dist/services/web-search-mcp.js.map +1 -1
- package/dist/services/workspace-state.d.ts +4 -0
- package/dist/services/workspace-state.d.ts.map +1 -1
- package/dist/services/workspace-state.js +30 -9
- package/dist/services/workspace-state.js.map +1 -1
- package/dist/terminal-ui/completion.js +1 -1
- package/dist/terminal-ui/completion.js.map +1 -1
- package/dist/terminal-ui/launch.d.ts +3 -0
- package/dist/terminal-ui/launch.d.ts.map +1 -1
- package/dist/terminal-ui/launch.js +26 -98
- package/dist/terminal-ui/launch.js.map +1 -1
- package/dist/tools/git.d.ts.map +1 -1
- package/dist/tools/git.js +275 -27
- package/dist/tools/git.js.map +1 -1
- package/dist/tools/index.d.ts +2 -0
- package/dist/tools/index.d.ts.map +1 -1
- package/dist/tools/index.js +29 -10
- package/dist/tools/index.js.map +1 -1
- package/dist/tools/mcp.d.ts.map +1 -1
- package/dist/tools/mcp.js +20 -12
- package/dist/tools/mcp.js.map +1 -1
- package/dist/tools/web.d.ts.map +1 -1
- package/dist/tools/web.js +38 -14
- package/dist/tools/web.js.map +1 -1
- package/dist/tui-ui/layout.d.ts.map +1 -1
- package/dist/tui-ui/layout.js +36 -23
- package/dist/tui-ui/layout.js.map +1 -1
- package/dist/tui-ui/pickers.d.ts.map +1 -1
- package/dist/tui-ui/pickers.js +5 -4
- package/dist/tui-ui/pickers.js.map +1 -1
- package/dist/tui-ui/runner.d.ts +1 -0
- package/dist/tui-ui/runner.d.ts.map +1 -1
- package/dist/tui-ui/runner.js +15 -17
- package/dist/tui-ui/runner.js.map +1 -1
- package/dist/tui-ui/state.d.ts +6 -0
- package/dist/tui-ui/state.d.ts.map +1 -1
- package/dist/tui-ui/state.js +61 -30
- package/dist/tui-ui/state.js.map +1 -1
- 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
|
-
//
|
|
24
|
-
//
|
|
25
|
-
//
|
|
26
|
-
//
|
|
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
|
|
45
|
-
//
|
|
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,
|
|
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
|
|
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
|
|
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`
|
|
106
|
-
*
|
|
107
|
-
*
|
|
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,
|
|
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
|
|
128
|
-
//
|
|
129
|
-
|
|
130
|
-
|
|
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":";AAAA;;;;;;;GAOG;;;
|
|
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,
|
|
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 ??
|
|
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
|
-
//
|
|
107
|
-
//
|
|
108
|
-
|
|
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
|
-
|
|
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":";AAAA;;;;;;;;;;;;GAYG;;
|
|
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,
|
|
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 =
|
|
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":";AAAA;;;;;;;;;;GAUG;;
|
|
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,
|
|
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
|
|
69
|
-
//
|
|
70
|
-
//
|
|
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({
|
|
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({
|
|
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 = {
|
|
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":";AAAA;;;;;;;;;GASG;;;
|
|
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:
|
|
30
|
-
* canonical scope
|
|
31
|
-
*
|
|
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,
|
|
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,
|
|
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: {
|
|
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
|
-
|
|
198
|
-
|
|
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.
|
|
220
|
+
return await deps.scopeHolder.runWithScope(runnerDeps.canonicalScopePaths ?? [], execute);
|
|
201
221
|
}
|
|
202
|
-
|
|
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,
|
|
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':
|
|
255
|
-
|
|
256
|
-
case '
|
|
257
|
-
|
|
258
|
-
case '
|
|
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). */
|