@zhixuan92/multi-model-agent-core 4.0.1 → 4.0.3
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 +18 -6
- package/dist/bounded-execution/activity-tracker-types.d.ts +2 -2
- package/dist/bounded-execution/activity-tracker-types.d.ts.map +1 -1
- package/dist/bounded-execution/activity-tracker.d.ts +3 -3
- package/dist/bounded-execution/activity-tracker.d.ts.map +1 -1
- package/dist/bounded-execution/activity-tracker.js +15 -15
- package/dist/bounded-execution/activity-tracker.js.map +1 -1
- package/dist/config/model-profile-registry.d.ts +0 -10
- package/dist/config/model-profile-registry.d.ts.map +1 -1
- package/dist/config/model-profile-registry.js +126 -8
- package/dist/config/model-profile-registry.js.map +1 -1
- package/dist/config/schema.d.ts +0 -1
- package/dist/config/schema.d.ts.map +1 -1
- package/dist/config/schema.js +3 -1
- package/dist/config/schema.js.map +1 -1
- package/dist/escalation/delegate-with-escalation.d.ts +24 -0
- package/dist/escalation/delegate-with-escalation.d.ts.map +1 -1
- package/dist/escalation/delegate-with-escalation.js +5 -0
- package/dist/escalation/delegate-with-escalation.js.map +1 -1
- package/dist/escalation/fallback-types.d.ts +1 -1
- package/dist/escalation/fallback-types.d.ts.map +1 -1
- package/dist/escalation/fallback.js +2 -2
- package/dist/escalation/fallback.js.map +1 -1
- package/dist/events/cloud-events.d.ts +3 -4
- package/dist/events/cloud-events.d.ts.map +1 -1
- package/dist/events/cloud-events.js +0 -1
- package/dist/events/cloud-events.js.map +1 -1
- package/dist/events/event-builder.d.ts +4 -2
- package/dist/events/event-builder.d.ts.map +1 -1
- package/dist/events/event-builder.js +47 -45
- package/dist/events/event-builder.js.map +1 -1
- package/dist/events/observability-events.d.ts +7 -8
- package/dist/events/observability-events.d.ts.map +1 -1
- package/dist/events/running-headline-sink.d.ts +26 -0
- package/dist/events/running-headline-sink.d.ts.map +1 -0
- package/dist/events/running-headline-sink.js +116 -0
- package/dist/events/running-headline-sink.js.map +1 -0
- package/dist/events/telemetry-types.d.ts +20 -20
- package/dist/events/telemetry-types.js +8 -8
- package/dist/events/telemetry-types.js.map +1 -1
- package/dist/events/verbose-log-channel.d.ts +22 -2
- package/dist/events/verbose-log-channel.d.ts.map +1 -1
- package/dist/events/verbose-log-channel.js +46 -9
- package/dist/events/verbose-log-channel.js.map +1 -1
- package/dist/index.d.ts +4 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -1
- package/dist/index.js.map +1 -1
- package/dist/intake/brief-compiler-slots/delegate.d.ts +1 -0
- package/dist/intake/brief-compiler-slots/delegate.d.ts.map +1 -1
- package/dist/intake/brief-compiler-slots/delegate.js +10 -2
- package/dist/intake/brief-compiler-slots/delegate.js.map +1 -1
- package/dist/lifecycle/executor-output-types.d.ts +2 -2
- package/dist/lifecycle/executor-output-types.d.ts.map +1 -1
- package/dist/lifecycle/handlers/baseline-handlers.d.ts.map +1 -1
- package/dist/lifecycle/handlers/baseline-handlers.js +48 -1
- package/dist/lifecycle/handlers/baseline-handlers.js.map +1 -1
- package/dist/lifecycle/handlers/quality-chain-handlers.d.ts.map +1 -1
- package/dist/lifecycle/handlers/quality-chain-handlers.js +126 -6
- package/dist/lifecycle/handlers/quality-chain-handlers.js.map +1 -1
- package/dist/lifecycle/handlers/review-diff-handler.d.ts.map +1 -1
- package/dist/lifecycle/handlers/review-diff-handler.js +36 -1
- package/dist/lifecycle/handlers/review-diff-handler.js.map +1 -1
- package/dist/lifecycle/handlers/run-verify-command-handler.js +11 -2
- package/dist/lifecycle/handlers/run-verify-command-handler.js.map +1 -1
- package/dist/lifecycle/handlers/spec-chain-handlers.d.ts.map +1 -1
- package/dist/lifecycle/handlers/spec-chain-handlers.js +107 -6
- package/dist/lifecycle/handlers/spec-chain-handlers.js.map +1 -1
- package/dist/lifecycle/handlers/terminal-handlers.d.ts +8 -0
- package/dist/lifecycle/handlers/terminal-handlers.d.ts.map +1 -1
- package/dist/lifecycle/handlers/terminal-handlers.js +168 -11
- package/dist/lifecycle/handlers/terminal-handlers.js.map +1 -1
- package/dist/lifecycle/lifecycle-context.d.ts +0 -2
- package/dist/lifecycle/lifecycle-context.d.ts.map +1 -1
- package/dist/lifecycle/merge-stage-stats.d.ts +31 -0
- package/dist/lifecycle/merge-stage-stats.d.ts.map +1 -0
- package/dist/lifecycle/merge-stage-stats.js +64 -0
- package/dist/lifecycle/merge-stage-stats.js.map +1 -0
- package/dist/lifecycle/shared-compute.js +4 -4
- package/dist/lifecycle/shared-compute.js.map +1 -1
- package/dist/lifecycle/stage-plan-builder.d.ts.map +1 -1
- package/dist/lifecycle/stage-plan-builder.js +6 -0
- package/dist/lifecycle/stage-plan-builder.js.map +1 -1
- package/dist/lifecycle/stage-plan-types.d.ts +3 -0
- package/dist/lifecycle/stage-plan-types.d.ts.map +1 -1
- package/dist/lifecycle/stage-progression.d.ts +20 -0
- package/dist/lifecycle/stage-progression.d.ts.map +1 -0
- package/dist/lifecycle/stage-progression.js +165 -0
- package/dist/lifecycle/stage-progression.js.map +1 -0
- package/dist/lifecycle/task-executor.d.ts.map +1 -1
- package/dist/lifecycle/task-executor.js +55 -10
- package/dist/lifecycle/task-executor.js.map +1 -1
- package/dist/lifecycle/task-runner.d.ts +7 -3
- package/dist/lifecycle/task-runner.d.ts.map +1 -1
- package/dist/lifecycle/task-runner.js +43 -7
- package/dist/lifecycle/task-runner.js.map +1 -1
- package/dist/providers/anthropic-messages-adapter.d.ts.map +1 -1
- package/dist/providers/anthropic-messages-adapter.js +25 -1
- package/dist/providers/anthropic-messages-adapter.js.map +1 -1
- package/dist/providers/base/result-builders.d.ts +1 -1
- package/dist/providers/base/result-builders.d.ts.map +1 -1
- package/dist/providers/base/result-builders.js +4 -4
- package/dist/providers/base/result-builders.js.map +1 -1
- package/dist/providers/make-runner-shell.d.ts.map +1 -1
- package/dist/providers/make-runner-shell.js +6 -5
- package/dist/providers/make-runner-shell.js.map +1 -1
- package/dist/providers/openai-chat-adapter.d.ts +0 -2
- package/dist/providers/openai-chat-adapter.d.ts.map +1 -1
- package/dist/providers/openai-chat-adapter.js +2 -3
- package/dist/providers/openai-chat-adapter.js.map +1 -1
- package/dist/providers/openai-responses-adapter.d.ts +1 -2
- package/dist/providers/openai-responses-adapter.d.ts.map +1 -1
- package/dist/providers/openai-responses-adapter.js +67 -39
- package/dist/providers/openai-responses-adapter.js.map +1 -1
- package/dist/providers/provider-factory.d.ts.map +1 -1
- package/dist/providers/provider-factory.js +45 -9
- package/dist/providers/provider-factory.js.map +1 -1
- package/dist/providers/runner-adapter.d.ts +10 -0
- package/dist/providers/runner-adapter.d.ts.map +1 -1
- package/dist/providers/runner-shell-types.d.ts +33 -0
- package/dist/providers/runner-shell-types.d.ts.map +1 -1
- package/dist/providers/runner-shell.d.ts +10 -1
- package/dist/providers/runner-shell.d.ts.map +1 -1
- package/dist/providers/runner-shell.js +251 -18
- package/dist/providers/runner-shell.js.map +1 -1
- package/dist/providers/runner-types.d.ts +21 -2
- package/dist/providers/runner-types.d.ts.map +1 -1
- package/dist/providers/tool-name-sets.d.ts +29 -0
- package/dist/providers/tool-name-sets.d.ts.map +1 -0
- package/dist/providers/tool-name-sets.js +41 -0
- package/dist/providers/tool-name-sets.js.map +1 -0
- package/dist/reporting/headline-composer.d.ts +12 -0
- package/dist/reporting/headline-composer.d.ts.map +1 -1
- package/dist/reporting/headline-composer.js.map +1 -1
- package/dist/reporting/headline-templates/audit.d.ts.map +1 -1
- package/dist/reporting/headline-templates/audit.js +26 -6
- package/dist/reporting/headline-templates/audit.js.map +1 -1
- package/dist/reporting/headline-templates/delegate.d.ts.map +1 -1
- package/dist/reporting/headline-templates/delegate.js +25 -6
- package/dist/reporting/headline-templates/delegate.js.map +1 -1
- package/dist/reporting/headline-templates/execute-plan.d.ts.map +1 -1
- package/dist/reporting/headline-templates/execute-plan.js +4 -1
- package/dist/reporting/headline-templates/execute-plan.js.map +1 -1
- package/dist/reporting/headline-templates/review.d.ts.map +1 -1
- package/dist/reporting/headline-templates/review.js +14 -7
- package/dist/reporting/headline-templates/review.js.map +1 -1
- package/dist/reporting/headline-text.d.ts +31 -0
- package/dist/reporting/headline-text.d.ts.map +1 -0
- package/dist/reporting/headline-text.js +42 -0
- package/dist/reporting/headline-text.js.map +1 -0
- package/dist/reporting/severity.d.ts +40 -0
- package/dist/reporting/severity.d.ts.map +1 -0
- package/dist/reporting/severity.js +57 -0
- package/dist/reporting/severity.js.map +1 -0
- package/dist/reporting/structured-report.d.ts +3 -3
- package/dist/research/explore-orchestrator.d.ts.map +1 -1
- package/dist/research/explore-orchestrator.js +4 -5
- package/dist/research/explore-orchestrator.js.map +1 -1
- package/dist/review/annotator-engine.d.ts +8 -0
- package/dist/review/annotator-engine.d.ts.map +1 -1
- package/dist/review/annotator-engine.js +7 -1
- package/dist/review/annotator-engine.js.map +1 -1
- package/dist/review/review-types.d.ts +6 -2
- package/dist/review/review-types.d.ts.map +1 -1
- package/dist/review/reviewer-engine.d.ts +11 -0
- package/dist/review/reviewer-engine.d.ts.map +1 -1
- package/dist/review/reviewer-engine.js +18 -1
- package/dist/review/reviewer-engine.js.map +1 -1
- package/dist/review/reviewer-output-parser.d.ts.map +1 -1
- package/dist/review/reviewer-output-parser.js +27 -5
- package/dist/review/reviewer-output-parser.js.map +1 -1
- package/dist/stores/batch-registry.d.ts +18 -0
- package/dist/stores/batch-registry.d.ts.map +1 -1
- package/dist/stores/batch-registry.js +10 -0
- package/dist/stores/batch-registry.js.map +1 -1
- package/dist/stores/context-block-tool.d.ts +14 -0
- package/dist/stores/context-block-tool.d.ts.map +1 -1
- package/dist/stores/context-block-tool.js.map +1 -1
- package/dist/stores/file-backed-context-block-store.d.ts +63 -0
- package/dist/stores/file-backed-context-block-store.d.ts.map +1 -0
- package/dist/stores/file-backed-context-block-store.js +293 -0
- package/dist/stores/file-backed-context-block-store.js.map +1 -0
- package/dist/stores/project-context-registry.d.ts +16 -3
- package/dist/stores/project-context-registry.d.ts.map +1 -1
- package/dist/stores/project-context-registry.js +9 -2
- package/dist/stores/project-context-registry.js.map +1 -1
- package/dist/tools/audit/schema.d.ts +2 -2
- package/dist/tools/retry/tool-config.js +1 -1
- package/dist/tools/retry/tool-config.js.map +1 -1
- package/dist/tools/review/schema.d.ts +1 -1
- package/dist/types/enums.d.ts +10 -10
- package/package.json +5 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"provider-factory.d.ts","sourceRoot":"","sources":["../../src/providers/provider-factory.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAa,gBAAgB,EAAkB,MAAM,aAAa,CAAC;AAOpG,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"provider-factory.d.ts","sourceRoot":"","sources":["../../src/providers/provider-factory.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAa,gBAAgB,EAAkB,MAAM,aAAa,CAAC;AAOpG,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAYzD,wBAAgB,6BAA6B,CAAC,QAAQ,EAAE,QAAQ,GAAG,IAAI,GAAG,IAAI,CAG7E;AAED,wBAAgB,gCAAgC,CAAC,GAAG,EAAE,GAAG,CAAC,MAAM,EAAE,QAAQ,CAAC,GAAG,IAAI,GAAG,IAAI,CAGxF;AAcD,wBAAgB,YAAY,CAAC,WAAW,EAAE;IACxC,IAAI,EAAE,mBAAmB,GAAG,QAAQ,GAAG,mBAAmB,GAAG,OAAO,CAAC;IACrE,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,GAAG,aAAa,CA4ChB;AAQD,wBAAgB,cAAc,CAAC,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,gBAAgB,GAAG,QAAQ,CAuFlF"}
|
|
@@ -3,6 +3,7 @@ import { AnthropicMessagesAdapter } from './anthropic-messages-adapter.js';
|
|
|
3
3
|
import { OpenAIChatAdapter } from './openai-chat-adapter.js';
|
|
4
4
|
import { OpenAIResponsesAdapter } from './openai-responses-adapter.js';
|
|
5
5
|
import { makeToolDefinitions } from './tool-definitions.js';
|
|
6
|
+
import { getCodexAuth } from '../identity/auth-token-store.js';
|
|
6
7
|
let coreTestProviderOverride = null;
|
|
7
8
|
let coreTestProviderOverrideMap = null;
|
|
8
9
|
function assertTestProviderEnabled() {
|
|
@@ -18,10 +19,20 @@ export function __setCoreTestProviderOverrideMap(map) {
|
|
|
18
19
|
assertTestProviderEnabled();
|
|
19
20
|
coreTestProviderOverrideMap = map;
|
|
20
21
|
}
|
|
22
|
+
// No output-token caps anywhere — the only worker bounds are the
|
|
23
|
+
// task-level wall-clock deadline and (when set) the per-task cost
|
|
24
|
+
// ceiling. OpenAI Chat + Responses adapters omit max_tokens entirely
|
|
25
|
+
// so the model uses its full output budget. Anthropic Messages
|
|
26
|
+
// **requires** max_tokens per API spec, so we pass a value high
|
|
27
|
+
// enough to never bite in practice (matches the largest documented
|
|
28
|
+
// ceiling across the Claude family). If a model accepts less, the
|
|
29
|
+
// API rejects loudly — easier to triage than a silent truncation,
|
|
30
|
+
// which is the failure mode 4.0.x hit at the 4096 default when
|
|
31
|
+
// deepseek-v4-pro burned its budget on a thinking block.
|
|
32
|
+
const ANTHROPIC_MAX_TOKENS_REQUIRED = 64000;
|
|
21
33
|
export function buildAdapter(agentConfig) {
|
|
22
34
|
const apiKey = agentConfig.apiKey
|
|
23
35
|
?? (agentConfig.apiKeyEnv ? process.env[agentConfig.apiKeyEnv] : undefined);
|
|
24
|
-
const maxOutputTokens = 4096;
|
|
25
36
|
switch (agentConfig.type) {
|
|
26
37
|
case 'claude':
|
|
27
38
|
case 'claude-compatible':
|
|
@@ -29,7 +40,7 @@ export function buildAdapter(agentConfig) {
|
|
|
29
40
|
apiKey: apiKey || 'not-needed',
|
|
30
41
|
baseURL: agentConfig.baseUrl,
|
|
31
42
|
model: agentConfig.model,
|
|
32
|
-
maxOutputTokens,
|
|
43
|
+
maxOutputTokens: ANTHROPIC_MAX_TOKENS_REQUIRED,
|
|
33
44
|
providerType: agentConfig.type,
|
|
34
45
|
});
|
|
35
46
|
case 'openai-compatible':
|
|
@@ -37,16 +48,30 @@ export function buildAdapter(agentConfig) {
|
|
|
37
48
|
apiKey: apiKey || 'not-needed',
|
|
38
49
|
baseURL: agentConfig.baseUrl,
|
|
39
50
|
model: agentConfig.model,
|
|
40
|
-
maxOutputTokens,
|
|
41
51
|
providerType: 'openai-compatible',
|
|
42
52
|
});
|
|
43
|
-
case 'codex':
|
|
53
|
+
case 'codex': {
|
|
54
|
+
// Prefer ChatGPT/Codex OAuth (~/.codex/auth.json) — this is how
|
|
55
|
+
// users who logged in via `codex` CLI authenticate. Without it, the
|
|
56
|
+
// request hits api.openai.com with a placeholder key and 401s. If
|
|
57
|
+
// OAuth is missing, fall back to whatever apiKey the user supplied
|
|
58
|
+
// (so the codex type can also be pointed at api.openai.com with a
|
|
59
|
+
// real key, or any other OpenAI-Responses-compatible endpoint).
|
|
60
|
+
const oauth = getCodexAuth();
|
|
61
|
+
if (oauth && !apiKey && !agentConfig.baseUrl) {
|
|
62
|
+
return new OpenAIResponsesAdapter({
|
|
63
|
+
apiKey: oauth.accessToken,
|
|
64
|
+
baseURL: 'https://chatgpt.com/backend-api/codex',
|
|
65
|
+
model: agentConfig.model,
|
|
66
|
+
defaultHeaders: { 'chatgpt-account-id': oauth.accountId },
|
|
67
|
+
});
|
|
68
|
+
}
|
|
44
69
|
return new OpenAIResponsesAdapter({
|
|
45
70
|
apiKey: apiKey || 'not-needed',
|
|
46
71
|
baseURL: agentConfig.baseUrl,
|
|
47
72
|
model: agentConfig.model,
|
|
48
|
-
maxOutputTokens,
|
|
49
73
|
});
|
|
74
|
+
}
|
|
50
75
|
}
|
|
51
76
|
}
|
|
52
77
|
const SYSTEM_PROMPT = [
|
|
@@ -77,13 +102,20 @@ export function createProvider(slot, config) {
|
|
|
77
102
|
? `${SYSTEM_PROMPT}\n\n${options.instructionsSuffix}`
|
|
78
103
|
: SYSTEM_PROMPT;
|
|
79
104
|
const adapter = buildAdapter(agentConfig);
|
|
80
|
-
const shell = new RunnerShell(adapter);
|
|
105
|
+
const shell = new RunnerShell(adapter, providerConfig.model);
|
|
81
106
|
const result = await shell.run({
|
|
82
107
|
systemPrompt: effectiveSystemPrompt,
|
|
83
108
|
userMessage: prompt,
|
|
84
109
|
toolDefinitions,
|
|
85
110
|
maxTurns,
|
|
86
111
|
cwd,
|
|
112
|
+
...(options.abortSignal && { abortSignal: options.abortSignal }),
|
|
113
|
+
...(options.bus && { bus: options.bus }),
|
|
114
|
+
...(options.batchId !== undefined && { batchId: options.batchId }),
|
|
115
|
+
...(options.taskIndex !== undefined && { taskIndex: options.taskIndex }),
|
|
116
|
+
...(options.tier !== undefined && { tier: options.tier }),
|
|
117
|
+
...(options.stageLabel !== undefined && { stageLabel: options.stageLabel }),
|
|
118
|
+
model: providerConfig.model,
|
|
87
119
|
});
|
|
88
120
|
const toolCallSummaries = result.toolCalls.map(tc => {
|
|
89
121
|
const inputPreview = typeof tc.input === 'object' && tc.input !== null
|
|
@@ -95,15 +127,19 @@ export function createProvider(slot, config) {
|
|
|
95
127
|
output: result.finalAssistantText,
|
|
96
128
|
status: result.workerStatus === 'done' ? 'ok' : 'incomplete',
|
|
97
129
|
usage: result.usage,
|
|
98
|
-
turns: result.
|
|
99
|
-
|
|
100
|
-
|
|
130
|
+
turns: result.turns,
|
|
131
|
+
durationMs: result.durationMs,
|
|
132
|
+
filesRead: result.filesRead,
|
|
133
|
+
filesWritten: result.filesWritten,
|
|
101
134
|
toolCalls: toolCallSummaries,
|
|
102
135
|
outputIsDiagnostic: false,
|
|
103
136
|
escalationLog: [],
|
|
104
137
|
parsedFindings: null,
|
|
105
138
|
workerStatus: result.workerStatus,
|
|
106
139
|
errorCode: result.errorCode,
|
|
140
|
+
...(result.costUSD !== null && {
|
|
141
|
+
cost: { costUSD: result.costUSD, costDeltaVsMainUSD: null },
|
|
142
|
+
}),
|
|
107
143
|
};
|
|
108
144
|
}
|
|
109
145
|
catch (err) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"provider-factory.js","sourceRoot":"","sources":["../../src/providers/provider-factory.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,wBAAwB,EAAE,MAAM,iCAAiC,CAAC;AAC3E,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,EAAE,sBAAsB,EAAE,MAAM,+BAA+B,CAAC;AACvE,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"provider-factory.js","sourceRoot":"","sources":["../../src/providers/provider-factory.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,wBAAwB,EAAE,MAAM,iCAAiC,CAAC;AAC3E,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,EAAE,sBAAsB,EAAE,MAAM,+BAA+B,CAAC;AACvE,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAE5D,OAAO,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAC;AAE/D,IAAI,wBAAwB,GAAoB,IAAI,CAAC;AACrD,IAAI,2BAA2B,GAAiC,IAAI,CAAC;AAErE,SAAS,yBAAyB;IAChC,IAAI,OAAO,CAAC,GAAG,CAAC,8BAA8B,KAAK,GAAG,EAAE,CAAC;QACvD,MAAM,IAAI,KAAK,CAAC,mFAAmF,CAAC,CAAC;IACvG,CAAC;AACH,CAAC;AAED,MAAM,UAAU,6BAA6B,CAAC,QAAyB;IACrE,yBAAyB,EAAE,CAAC;IAC5B,wBAAwB,GAAG,QAAQ,CAAC;AACtC,CAAC;AAED,MAAM,UAAU,gCAAgC,CAAC,GAAiC;IAChF,yBAAyB,EAAE,CAAC;IAC5B,2BAA2B,GAAG,GAAG,CAAC;AACpC,CAAC;AAED,iEAAiE;AACjE,kEAAkE;AAClE,qEAAqE;AACrE,+DAA+D;AAC/D,gEAAgE;AAChE,mEAAmE;AACnE,kEAAkE;AAClE,kEAAkE;AAClE,+DAA+D;AAC/D,yDAAyD;AACzD,MAAM,6BAA6B,GAAG,KAAK,CAAC;AAE5C,MAAM,UAAU,YAAY,CAAC,WAM5B;IACC,MAAM,MAAM,GAAG,WAAW,CAAC,MAAM;WAC5B,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;IAE9E,QAAQ,WAAW,CAAC,IAAI,EAAE,CAAC;QACzB,KAAK,QAAQ,CAAC;QACd,KAAK,mBAAmB;YACtB,OAAO,IAAI,wBAAwB,CAAC;gBAClC,MAAM,EAAE,MAAM,IAAI,YAAY;gBAC9B,OAAO,EAAE,WAAW,CAAC,OAAO;gBAC5B,KAAK,EAAE,WAAW,CAAC,KAAK;gBACxB,eAAe,EAAE,6BAA6B;gBAC9C,YAAY,EAAE,WAAW,CAAC,IAAI;aAC/B,CAAC,CAAC;QACL,KAAK,mBAAmB;YACtB,OAAO,IAAI,iBAAiB,CAAC;gBAC3B,MAAM,EAAE,MAAM,IAAI,YAAY;gBAC9B,OAAO,EAAE,WAAW,CAAC,OAAO;gBAC5B,KAAK,EAAE,WAAW,CAAC,KAAK;gBACxB,YAAY,EAAE,mBAAmB;aAClC,CAAC,CAAC;QACL,KAAK,OAAO,CAAC,CAAC,CAAC;YACb,gEAAgE;YAChE,oEAAoE;YACpE,kEAAkE;YAClE,mEAAmE;YACnE,kEAAkE;YAClE,gEAAgE;YAChE,MAAM,KAAK,GAAG,YAAY,EAAE,CAAC;YAC7B,IAAI,KAAK,IAAI,CAAC,MAAM,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,CAAC;gBAC7C,OAAO,IAAI,sBAAsB,CAAC;oBAChC,MAAM,EAAE,KAAK,CAAC,WAAW;oBACzB,OAAO,EAAE,uCAAuC;oBAChD,KAAK,EAAE,WAAW,CAAC,KAAK;oBACxB,cAAc,EAAE,EAAE,oBAAoB,EAAE,KAAK,CAAC,SAAS,EAAE;iBAC1D,CAAC,CAAC;YACL,CAAC;YACD,OAAO,IAAI,sBAAsB,CAAC;gBAChC,MAAM,EAAE,MAAM,IAAI,YAAY;gBAC9B,OAAO,EAAE,WAAW,CAAC,OAAO;gBAC5B,KAAK,EAAE,WAAW,CAAC,KAAK;aACzB,CAAC,CAAC;QACL,CAAC;IACH,CAAC;AACH,CAAC;AAED,MAAM,aAAa,GAAG;IACpB,kFAAkF;IAClF,oDAAoD;IACpD,oFAAoF;CACrF,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAEb,MAAM,UAAU,cAAc,CAAC,IAAe,EAAE,MAAwB;IACtE,IAAI,2BAA2B,EAAE,GAAG,CAAC,IAAI,CAAC;QAAE,OAAO,2BAA2B,CAAC,GAAG,CAAC,IAAI,CAAE,CAAC;IAC1F,IAAI,wBAAwB;QAAE,OAAO,wBAAwB,CAAC;IAE9D,MAAM,WAAW,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IACxC,IAAI,CAAC,WAAW,EAAE,CAAC;QACjB,MAAM,IAAI,KAAK,CAAC,wBAAwB,IAAI,+CAA+C,CAAC,CAAC;IAC/F,CAAC;IAED,MAAM,cAAc,GAAG,WAAwC,CAAC;IAChE,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;IAEjC,MAAM,GAAG,GAAG,KAAK,EAAE,MAAc,EAAE,UAAsB,EAAE,EAAsB,EAAE;QACjF,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;YACzC,MAAM,QAAQ,GAAG,OAAO,CAAC,KAAK,IAAI,QAAQ,CAAC,KAAK,IAAI,MAAM,CAAC;YAC3D,MAAM,QAAQ,GAAG,EAAE,CAAC;YAEpB,MAAM,eAAe,GAAG,QAAQ,KAAK,MAAM;gBACzC,CAAC,CAAC,mBAAmB,CAAC,EAAE,GAAG,EAAE,CAAC;gBAC9B,CAAC,CAAC,EAAE,CAAC;YAEP,MAAM,qBAAqB,GAAG,OAAO,CAAC,kBAAkB;gBACtD,CAAC,CAAC,GAAG,aAAa,OAAO,OAAO,CAAC,kBAAkB,EAAE;gBACrD,CAAC,CAAC,aAAa,CAAC;YAElB,MAAM,OAAO,GAAG,YAAY,CAAC,WAAW,CAAC,CAAC;YAC1C,MAAM,KAAK,GAAG,IAAI,WAAW,CAAC,OAAO,EAAE,cAAc,CAAC,KAAK,CAAC,CAAC;YAE7D,MAAM,MAAM,GAAG,MAAM,KAAK,CAAC,GAAG,CAAC;gBAC7B,YAAY,EAAE,qBAAqB;gBACnC,WAAW,EAAE,MAAM;gBACnB,eAAe;gBACf,QAAQ;gBACR,GAAG;gBACH,GAAG,CAAC,OAAO,CAAC,WAAW,IAAI,EAAE,WAAW,EAAE,OAAO,CAAC,WAAW,EAAE,CAAC;gBAChE,GAAG,CAAC,OAAO,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE,CAAC;gBACxC,GAAG,CAAC,OAAO,CAAC,OAAO,KAAK,SAAS,IAAI,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,CAAC;gBAClE,GAAG,CAAC,OAAO,CAAC,SAAS,KAAK,SAAS,IAAI,EAAE,SAAS,EAAE,OAAO,CAAC,SAAS,EAAE,CAAC;gBACxE,GAAG,CAAC,OAAO,CAAC,IAAI,KAAK,SAAS,IAAI,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,CAAC;gBACzD,GAAG,CAAC,OAAO,CAAC,UAAU,KAAK,SAAS,IAAI,EAAE,UAAU,EAAE,OAAO,CAAC,UAAU,EAAE,CAAC;gBAC3E,KAAK,EAAE,cAAc,CAAC,KAAK;aAC5B,CAAC,CAAC;YAEH,MAAM,iBAAiB,GAAG,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE;gBAClD,MAAM,YAAY,GAAG,OAAO,EAAE,CAAC,KAAK,KAAK,QAAQ,IAAI,EAAE,CAAC,KAAK,KAAK,IAAI;oBACpE,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC;oBACxC,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;gBACzC,OAAO,GAAG,EAAE,CAAC,IAAI,IAAI,YAAY,GAAG,CAAC;YACvC,CAAC,CAAC,CAAC;YAEH,OAAO;gBACL,MAAM,EAAE,MAAM,CAAC,kBAAkB;gBACjC,MAAM,EAAE,MAAM,CAAC,YAAY,KAAK,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,YAAY;gBAC5D,KAAK,EAAE,MAAM,CAAC,KAAK;gBACnB,KAAK,EAAE,MAAM,CAAC,KAAK;gBACnB,UAAU,EAAE,MAAM,CAAC,UAAU;gBAC7B,SAAS,EAAE,MAAM,CAAC,SAAS;gBAC3B,YAAY,EAAE,MAAM,CAAC,YAAY;gBACjC,SAAS,EAAE,iBAAiB;gBAC5B,kBAAkB,EAAE,KAAK;gBACzB,aAAa,EAAE,EAAE;gBACjB,cAAc,EAAE,IAAI;gBACpB,YAAY,EAAE,MAAM,CAAC,YAAY;gBACjC,SAAS,EAAE,MAAM,CAAC,SAAS;gBAC3B,GAAG,CAAC,MAAM,CAAC,OAAO,KAAK,IAAI,IAAI;oBAC7B,IAAI,EAAE,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,kBAAkB,EAAE,IAAI,EAAE;iBAC5D,CAAC;aACH,CAAC;QACJ,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO;gBACL,MAAM,EAAE,oBAAoB,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE;gBAC9E,MAAM,EAAE,OAAO;gBACf,KAAK,EAAE,EAAE,WAAW,EAAE,CAAC,EAAE,YAAY,EAAE,CAAC,EAAE,gBAAgB,EAAE,CAAC,EAAE,mBAAmB,EAAE,CAAC,EAAE;gBACvF,KAAK,EAAE,CAAC;gBACR,SAAS,EAAE,EAAE;gBACb,YAAY,EAAE,EAAE;gBAChB,SAAS,EAAE,EAAE;gBACb,kBAAkB,EAAE,IAAI;gBACxB,aAAa,EAAE,EAAE;gBACjB,cAAc,EAAE,IAAI;gBACpB,KAAK,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC;aACxD,CAAC;QACJ,CAAC;IACH,CAAC,CAAC;IAEF,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,cAAc,EAAE,GAAG,EAAE,CAAC;AACrD,CAAC"}
|
|
@@ -26,6 +26,16 @@ export interface AdapterTurnResult {
|
|
|
26
26
|
usage: TokenUsage;
|
|
27
27
|
finishReason: 'stop' | 'tool_use' | 'max_tokens' | 'error';
|
|
28
28
|
errorCode?: string;
|
|
29
|
+
/** Provider-side response shape for verbose diagnostics. Adapters report
|
|
30
|
+
* the raw stop_reason and a count of each content block type so the
|
|
31
|
+
* runner-shell can emit a `runner_response_received` event when the
|
|
32
|
+
* bus is wired. Lets operators see e.g. `{ text: 0, thinking: 1 }`
|
|
33
|
+
* when a provider returns reasoning-only and no narrative — the
|
|
34
|
+
* signature failure mode that produced silent empty output in 4.0.x. */
|
|
35
|
+
responseShape?: {
|
|
36
|
+
stopReason?: string;
|
|
37
|
+
contentBlocks?: Record<string, number>;
|
|
38
|
+
};
|
|
29
39
|
}
|
|
30
40
|
export interface AdapterCapabilities {
|
|
31
41
|
cache_control: boolean;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runner-adapter.d.ts","sourceRoot":"","sources":["../../src/providers/runner-adapter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,8BAA8B,CAAC;AAC/D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAE9D,MAAM,WAAW,iBAAiB;IAChC,aAAa,EAAE,MAAM,CAAC;IACtB,SAAS,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,OAAO,CAAC;QAAC,MAAM,EAAE,OAAO,CAAA;KAAE,CAAC,CAAC;CACrE;AAED,MAAM,WAAW,gBAAgB;IAC/B,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,iBAAiB,EAAE,CAAC;IAChC,eAAe,EAAE,cAAc,EAAE,CAAC;IAClC,YAAY,EAAE,mBAAmB,CAAC;IAClC,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,iBAAiB;IAChC,aAAa,EAAE,MAAM,CAAC;IACtB,SAAS,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,OAAO,CAAA;KAAE,EAAE,CAAC;IAC9C,KAAK,EAAE,UAAU,CAAC;IAClB,YAAY,EAAE,MAAM,GAAG,UAAU,GAAG,YAAY,GAAG,OAAO,CAAC;IAC3D,SAAS,CAAC,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"runner-adapter.d.ts","sourceRoot":"","sources":["../../src/providers/runner-adapter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,8BAA8B,CAAC;AAC/D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAE9D,MAAM,WAAW,iBAAiB;IAChC,aAAa,EAAE,MAAM,CAAC;IACtB,SAAS,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,OAAO,CAAC;QAAC,MAAM,EAAE,OAAO,CAAA;KAAE,CAAC,CAAC;CACrE;AAED,MAAM,WAAW,gBAAgB;IAC/B,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,iBAAiB,EAAE,CAAC;IAChC,eAAe,EAAE,cAAc,EAAE,CAAC;IAClC,YAAY,EAAE,mBAAmB,CAAC;IAClC,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,iBAAiB;IAChC,aAAa,EAAE,MAAM,CAAC;IACtB,SAAS,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,OAAO,CAAA;KAAE,EAAE,CAAC;IAC9C,KAAK,EAAE,UAAU,CAAC;IAClB,YAAY,EAAE,MAAM,GAAG,UAAU,GAAG,YAAY,GAAG,OAAO,CAAC;IAC3D,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;;;;6EAKyE;IACzE,aAAa,CAAC,EAAE;QACd,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,aAAa,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;KACxC,CAAC;CACH;AAED,MAAM,WAAW,mBAAmB;IAClC,aAAa,EAAE,OAAO,CAAC;IACvB,QAAQ,EAAE,OAAO,CAAC;IAClB,MAAM,EAAE,OAAO,CAAC;IAChB,QAAQ,EAAE,OAAO,CAAC;IAClB,SAAS,EAAE,OAAO,CAAC;IACnB,KAAK,EAAE,MAAM,EAAE,CAAC;CACjB;AAED,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,YAAY,EAAE,QAAQ,GAAG,mBAAmB,GAAG,QAAQ,GAAG,mBAAmB,GAAG,OAAO,CAAC;IACjG,IAAI,CAAC,KAAK,EAAE,gBAAgB,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAAC;CAC3D"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import type { TokenUsage } from './runner-types.js';
|
|
2
|
+
import type { EventEmitter } from '../events/event-emitter.js';
|
|
2
3
|
export type WorkerStatus = 'done' | 'done_with_concerns' | 'needs_context' | 'blocked' | 'failed';
|
|
3
4
|
export interface RunInput {
|
|
4
5
|
systemPrompt: string;
|
|
@@ -9,6 +10,25 @@ export interface RunInput {
|
|
|
9
10
|
capabilities?: import('./runner-adapter.js').AdapterCapabilities;
|
|
10
11
|
abortSignal?: AbortSignal;
|
|
11
12
|
deadlineMs?: number;
|
|
13
|
+
/** Bus for per-turn / per-runner-call observability events. When present,
|
|
14
|
+
* shell + adapter emit `runner_turn_started` / `runner_response_received`
|
|
15
|
+
* / `runner_turn_completed` events so VerboseLogChannel surfaces them
|
|
16
|
+
* on stderr in real time during a long task run. */
|
|
17
|
+
bus?: EventEmitter;
|
|
18
|
+
/** Identifies the in-flight batch in emitted events. */
|
|
19
|
+
batchId?: string;
|
|
20
|
+
/** Identifies which task within a batch is running. Carried through to
|
|
21
|
+
* every emitted event so polling can show per-task progress when a
|
|
22
|
+
* batch has multiple parallel tasks. */
|
|
23
|
+
taskIndex?: number;
|
|
24
|
+
/** Tier label (`'standard'` | `'complex'`) included in emitted events. */
|
|
25
|
+
tier?: string;
|
|
26
|
+
/** Provider model id included in emitted events. */
|
|
27
|
+
model?: string;
|
|
28
|
+
/** Lifecycle stage label (e.g. 'Implementing', 'Spec review'). Surfaced
|
|
29
|
+
* on the running-headline polling response so the main agent's poll
|
|
30
|
+
* loop shows which lifecycle stage is currently active. */
|
|
31
|
+
stageLabel?: string;
|
|
12
32
|
}
|
|
13
33
|
export interface RunResult {
|
|
14
34
|
workerStatus: WorkerStatus;
|
|
@@ -16,6 +36,19 @@ export interface RunResult {
|
|
|
16
36
|
toolCalls: ToolCall[];
|
|
17
37
|
usage: TokenUsage;
|
|
18
38
|
errorCode?: ErrorCode;
|
|
39
|
+
/** Number of LLM turns executed (one per adapter.turn() call). Distinct
|
|
40
|
+
* from toolCalls.length — a turn can return multiple tool calls or none. */
|
|
41
|
+
turns: number;
|
|
42
|
+
/** Wall-clock for the entire shell.run() invocation. */
|
|
43
|
+
durationMs: number;
|
|
44
|
+
/** Files read during this run (paths from successful read_file/readFile tool calls). */
|
|
45
|
+
filesRead: string[];
|
|
46
|
+
/** Files written during this run (paths from successful write_file/writeFile/edit_file tool calls). */
|
|
47
|
+
filesWritten: string[];
|
|
48
|
+
/** USD cost computed from usage tokens and the model's rate card.
|
|
49
|
+
* null when the model isn't in the rate-card registry (treated as honest-null
|
|
50
|
+
* by the wire, not zero). */
|
|
51
|
+
costUSD: number | null;
|
|
19
52
|
}
|
|
20
53
|
export interface ToolDefinition {
|
|
21
54
|
name: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runner-shell-types.d.ts","sourceRoot":"","sources":["../../src/providers/runner-shell-types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"runner-shell-types.d.ts","sourceRoot":"","sources":["../../src/providers/runner-shell-types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAE/D,MAAM,MAAM,YAAY,GAAG,MAAM,GAAG,oBAAoB,GAAG,eAAe,GAAG,SAAS,GAAG,QAAQ,CAAC;AAElG,MAAM,WAAW,QAAQ;IACvB,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;IACpB,eAAe,EAAE,cAAc,EAAE,CAAC;IAClC,QAAQ,EAAE,MAAM,CAAC;IACjB,GAAG,EAAE,MAAM,CAAC;IACZ,YAAY,CAAC,EAAE,OAAO,qBAAqB,EAAE,mBAAmB,CAAC;IACjE,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB;;;yDAGqD;IACrD,GAAG,CAAC,EAAE,YAAY,CAAC;IACnB,wDAAwD;IACxD,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB;;6CAEyC;IACzC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,0EAA0E;IAC1E,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,oDAAoD;IACpD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;;gEAE4D;IAC5D,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,SAAS;IACxB,YAAY,EAAE,YAAY,CAAC;IAC3B,kBAAkB,EAAE,MAAM,CAAC;IAC3B,SAAS,EAAE,QAAQ,EAAE,CAAC;IACtB,KAAK,EAAE,UAAU,CAAC;IAClB,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB;iFAC6E;IAC7E,KAAK,EAAE,MAAM,CAAC;IACd,wDAAwD;IACxD,UAAU,EAAE,MAAM,CAAC;IACnB,wFAAwF;IACxF,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,uGAAuG;IACvG,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB;;kCAE8B;IAC9B,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;CACxB;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,KAAK,EAAE,OAAO,EAAE,GAAG,EAAE,gBAAgB,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;CAClE;AAED,MAAM,WAAW,gBAAgB;IAC/B,GAAG,EAAE,MAAM,CAAC;IACZ,SAAS,EAAE,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACjC;AAED,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,EAAE,CAAC,EAAE,MAAM,CAAC;CACb;AAED,MAAM,MAAM,SAAS,GAAG,MAAM,CAAC"}
|
|
@@ -1,8 +1,17 @@
|
|
|
1
1
|
import type { RunInput, RunResult } from './runner-shell-types.js';
|
|
2
2
|
import type { RunnerAdapter } from './runner-adapter.js';
|
|
3
|
+
export declare function shellCommandWritesFs(command: string): boolean;
|
|
3
4
|
export declare class RunnerShell {
|
|
4
5
|
private adapter;
|
|
5
|
-
|
|
6
|
+
/** Default model id used for cost computation when input.model is absent.
|
|
7
|
+
* Reviewer/annotator engines call shell.run() without setting input.model,
|
|
8
|
+
* so without this default every reviewer-side stage would record costUSD=null. */
|
|
9
|
+
private defaultModel?;
|
|
10
|
+
constructor(adapter: RunnerAdapter,
|
|
11
|
+
/** Default model id used for cost computation when input.model is absent.
|
|
12
|
+
* Reviewer/annotator engines call shell.run() without setting input.model,
|
|
13
|
+
* so without this default every reviewer-side stage would record costUSD=null. */
|
|
14
|
+
defaultModel?: string | undefined);
|
|
6
15
|
run(input: RunInput): Promise<RunResult>;
|
|
7
16
|
}
|
|
8
17
|
//# sourceMappingURL=runner-shell.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runner-shell.d.ts","sourceRoot":"","sources":["../../src/providers/runner-shell.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,SAAS,EAA8B,MAAM,yBAAyB,CAAC;AAC/F,OAAO,KAAK,EAAE,aAAa,EAA6D,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"runner-shell.d.ts","sourceRoot":"","sources":["../../src/providers/runner-shell.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,SAAS,EAA8B,MAAM,yBAAyB,CAAC;AAC/F,OAAO,KAAK,EAAE,aAAa,EAA6D,MAAM,qBAAqB,CAAC;AAoEpH,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAM7D;AAaD,qBAAa,WAAW;IAEpB,OAAO,CAAC,OAAO;IACf;;uFAEmF;IACnF,OAAO,CAAC,YAAY,CAAC;gBAJb,OAAO,EAAE,aAAa;IAC9B;;uFAEmF;IAC3E,YAAY,CAAC,EAAE,MAAM,YAAA;IAGzB,GAAG,CAAC,KAAK,EAAE,QAAQ,GAAG,OAAO,CAAC,SAAS,CAAC;CAqN/C"}
|
|
@@ -1,18 +1,123 @@
|
|
|
1
|
+
import { resolveRateCard, priceTokens } from '../bounded-execution/cost-compute.js';
|
|
1
2
|
const DEFAULT_CAPABILITIES = {
|
|
2
3
|
cache_control: false, thinking: false, vision: false, tool_use: true, streaming: false, other: [],
|
|
3
4
|
};
|
|
5
|
+
// Tool-name sets are centralized in `tool-name-sets.ts` so the
|
|
6
|
+
// runner-shell + running-headline-sink can't drift. Note: this
|
|
7
|
+
// runner's READ list is intentionally narrower than the central
|
|
8
|
+
// READ_TOOL_NAMES — runner-shell tracks filesRead by extractable
|
|
9
|
+
// path, and grep/glob/listFiles don't have a single "file" arg. The
|
|
10
|
+
// central set is for the polling headline's read activity counter,
|
|
11
|
+
// which counts every read-class tool call regardless of args.
|
|
12
|
+
import { WRITE_TOOL_NAMES, SHELL_TOOL_NAMES } from './tool-name-sets.js';
|
|
13
|
+
const READ_TOOL_NAMES = new Set(['readFile', 'read_file']);
|
|
14
|
+
function extractPathFromToolInput(input) {
|
|
15
|
+
if (typeof input !== 'object' || input === null)
|
|
16
|
+
return undefined;
|
|
17
|
+
const obj = input;
|
|
18
|
+
for (const key of ['path', 'file_path', 'filePath']) {
|
|
19
|
+
const v = obj[key];
|
|
20
|
+
if (typeof v === 'string')
|
|
21
|
+
return v;
|
|
22
|
+
}
|
|
23
|
+
return undefined;
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Heuristic: does the given shell command write to the filesystem?
|
|
27
|
+
*
|
|
28
|
+
* Gap 11 fix (4.0.3+): the polling headline tracks file writes by tool
|
|
29
|
+
* name (writeFile/write_file/edit_file). Workers that bypass these and
|
|
30
|
+
* write via run_shell (cat >, sed -i, tee, etc.) used to show "0 write"
|
|
31
|
+
* for the entire run despite actively producing artifacts. This
|
|
32
|
+
* heuristic looks for common write patterns in the command string;
|
|
33
|
+
* false positives are acceptable (operator gets a slightly noisy count)
|
|
34
|
+
* but false negatives are not (the headline lies about progress).
|
|
35
|
+
*
|
|
36
|
+
* Patterns detected:
|
|
37
|
+
* - Output redirects: `> file`, `>> file`, `&> file`, `>| file`
|
|
38
|
+
* - Heredoc to file: `<<EOF > file`, `cat <<...> file`
|
|
39
|
+
* - `sed -i` / `sed -i ''` (in-place edit)
|
|
40
|
+
* - `awk -i inplace` / `gawk -i inplace`
|
|
41
|
+
* - `tee file`, `tee -a file`
|
|
42
|
+
* - `cp/mv/touch/install` (file creation/moves)
|
|
43
|
+
* - `mkdir`, `rm`, `chmod`, `chown` (filesystem mutation)
|
|
44
|
+
* - `git checkout/reset/restore/pull/merge` (modifies files)
|
|
45
|
+
* - `python/node -c '... open(... "w") ...'` is NOT detected — too
|
|
46
|
+
* ambiguous; keeps false-positive rate low.
|
|
47
|
+
*/
|
|
48
|
+
const SHELL_WRITE_PATTERNS = [
|
|
49
|
+
/[^&|>]>>?\s*[^&|>\s]/, // > file or >> file (excluding 2>&1, &> handled below)
|
|
50
|
+
/&>\s*[^&|>\s]/, // &> file
|
|
51
|
+
/>\|\s*[^&|>\s]/, // >| file
|
|
52
|
+
/\bsed\s+(?:-[a-z]*i[a-z]*\b|--in-place\b)/i, // sed -i / sed --in-place
|
|
53
|
+
/\b(?:awk|gawk|nawk)\s+-i\s+inplace\b/i,
|
|
54
|
+
/\btee\b/,
|
|
55
|
+
/\b(?:cp|mv|touch|install|ln)\s+/,
|
|
56
|
+
/\bmkdir\s+/,
|
|
57
|
+
/\brm\s+/,
|
|
58
|
+
/\bchmod\s+/,
|
|
59
|
+
/\bchown\s+/,
|
|
60
|
+
/\bgit\s+(?:checkout|reset|restore|pull|merge|clean|stash|cherry-pick|rebase|apply)\b/,
|
|
61
|
+
/\bnpm\s+(?:install|i|ci|uninstall|update|run\s+build|run\s+test)\b/,
|
|
62
|
+
/\bpnpm\s+(?:install|add|remove|update|run)\b/,
|
|
63
|
+
/\byarn\s+(?:install|add|remove|upgrade)\b/,
|
|
64
|
+
];
|
|
65
|
+
export function shellCommandWritesFs(command) {
|
|
66
|
+
if (!command || command.length === 0)
|
|
67
|
+
return false;
|
|
68
|
+
for (const pattern of SHELL_WRITE_PATTERNS) {
|
|
69
|
+
if (pattern.test(command))
|
|
70
|
+
return true;
|
|
71
|
+
}
|
|
72
|
+
return false;
|
|
73
|
+
}
|
|
74
|
+
function extractShellCommand(input) {
|
|
75
|
+
if (typeof input !== 'object' || input === null)
|
|
76
|
+
return undefined;
|
|
77
|
+
const obj = input;
|
|
78
|
+
for (const key of ['command', 'cmd', 'shell']) {
|
|
79
|
+
const v = obj[key];
|
|
80
|
+
if (typeof v === 'string')
|
|
81
|
+
return v;
|
|
82
|
+
if (Array.isArray(v))
|
|
83
|
+
return v.join(' ');
|
|
84
|
+
}
|
|
85
|
+
return undefined;
|
|
86
|
+
}
|
|
4
87
|
export class RunnerShell {
|
|
5
88
|
adapter;
|
|
6
|
-
|
|
89
|
+
defaultModel;
|
|
90
|
+
constructor(adapter,
|
|
91
|
+
/** Default model id used for cost computation when input.model is absent.
|
|
92
|
+
* Reviewer/annotator engines call shell.run() without setting input.model,
|
|
93
|
+
* so without this default every reviewer-side stage would record costUSD=null. */
|
|
94
|
+
defaultModel) {
|
|
7
95
|
this.adapter = adapter;
|
|
96
|
+
this.defaultModel = defaultModel;
|
|
8
97
|
}
|
|
9
98
|
async run(input) {
|
|
99
|
+
const startMs = Date.now();
|
|
100
|
+
const modelForCost = input.model ?? this.defaultModel;
|
|
10
101
|
const ctx = { cwd: input.cwd, callCache: new Map() };
|
|
11
102
|
const usage = { inputTokens: 0, outputTokens: 0, cachedReadTokens: 0, cachedNonReadTokens: 0 };
|
|
12
103
|
const allToolCalls = [];
|
|
104
|
+
const filesRead = [];
|
|
105
|
+
const filesWritten = [];
|
|
106
|
+
let turns = 0;
|
|
13
107
|
const history = [];
|
|
14
108
|
let finalText = '';
|
|
15
109
|
let stoppedByAdapter = false;
|
|
110
|
+
// Common fields stamped on every emitted bus event so VerboseLogChannel
|
|
111
|
+
// surfaces enough context for an operator to see which run a line belongs
|
|
112
|
+
// to without grepping back to the originating request.
|
|
113
|
+
const baseEventFields = {
|
|
114
|
+
...(input.batchId !== undefined && { batchId: input.batchId }),
|
|
115
|
+
...(input.taskIndex !== undefined && { taskIndex: input.taskIndex }),
|
|
116
|
+
...(input.tier !== undefined && { tier: input.tier }),
|
|
117
|
+
...(input.model !== undefined && { model: input.model }),
|
|
118
|
+
...(input.stageLabel !== undefined && { stageLabel: input.stageLabel }),
|
|
119
|
+
providerType: this.adapter.providerType,
|
|
120
|
+
};
|
|
16
121
|
for (let turn = 0; turn < input.maxTurns; turn++) {
|
|
17
122
|
if (input.abortSignal?.aborted) {
|
|
18
123
|
return {
|
|
@@ -21,8 +126,28 @@ export class RunnerShell {
|
|
|
21
126
|
toolCalls: allToolCalls,
|
|
22
127
|
usage,
|
|
23
128
|
errorCode: 'aborted',
|
|
129
|
+
turns,
|
|
130
|
+
durationMs: Date.now() - startMs,
|
|
131
|
+
filesRead,
|
|
132
|
+
filesWritten,
|
|
133
|
+
costUSD: computeCost(modelForCost, usage),
|
|
24
134
|
};
|
|
25
135
|
}
|
|
136
|
+
// Three-event-per-turn lifecycle so verbose stderr surfaces every
|
|
137
|
+
// state change. `runner_turn_started` fires before the LLM call so
|
|
138
|
+
// operators see "now waiting on the model" in real time. After the
|
|
139
|
+
// adapter returns, `runner_response_received` carries the raw
|
|
140
|
+
// provider response shape (stop_reason + content-block tally). After
|
|
141
|
+
// local tool execution, `runner_turn_completed` carries per-tool
|
|
142
|
+
// counts (read vs write etc.) so operators can see what work the
|
|
143
|
+
// model is doing without grepping the JSONL log.
|
|
144
|
+
input.bus?.emit({
|
|
145
|
+
event: 'runner_turn_started',
|
|
146
|
+
ts: new Date().toISOString(),
|
|
147
|
+
...baseEventFields,
|
|
148
|
+
turnIndex: turn,
|
|
149
|
+
});
|
|
150
|
+
turns++;
|
|
26
151
|
const turnResult = await this.adapter.turn({
|
|
27
152
|
systemPrompt: input.systemPrompt,
|
|
28
153
|
userMessage: input.userMessage,
|
|
@@ -37,34 +162,131 @@ export class RunnerShell {
|
|
|
37
162
|
usage.cachedReadTokens += turnResult.usage.cachedReadTokens;
|
|
38
163
|
usage.cachedNonReadTokens += turnResult.usage.cachedNonReadTokens;
|
|
39
164
|
finalText = turnResult.assistantText;
|
|
165
|
+
input.bus?.emit({
|
|
166
|
+
event: 'runner_response_received',
|
|
167
|
+
ts: new Date().toISOString(),
|
|
168
|
+
...baseEventFields,
|
|
169
|
+
turnIndex: turn,
|
|
170
|
+
finishReason: turnResult.finishReason,
|
|
171
|
+
assistantTextLen: turnResult.assistantText.length,
|
|
172
|
+
toolCallCount: turnResult.toolCalls.length,
|
|
173
|
+
...(turnResult.responseShape?.stopReason !== undefined && { stopReason: turnResult.responseShape.stopReason }),
|
|
174
|
+
...(turnResult.responseShape?.contentBlocks !== undefined && { contentBlocks: turnResult.responseShape.contentBlocks }),
|
|
175
|
+
usage: turnResult.usage,
|
|
176
|
+
});
|
|
40
177
|
const turnRecord = {
|
|
41
178
|
assistantText: turnResult.assistantText,
|
|
42
179
|
toolCalls: [],
|
|
43
180
|
};
|
|
44
|
-
|
|
181
|
+
const willTerminate = turnResult.toolCalls.length === 0;
|
|
182
|
+
if (willTerminate) {
|
|
45
183
|
history.push(turnRecord);
|
|
46
184
|
stoppedByAdapter = true;
|
|
47
|
-
break;
|
|
48
185
|
}
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
186
|
+
else {
|
|
187
|
+
for (const call of turnResult.toolCalls) {
|
|
188
|
+
const def = input.toolDefinitions.find(d => d.name === call.name);
|
|
189
|
+
let result;
|
|
190
|
+
if (!def) {
|
|
191
|
+
result = { error: `unknown tool: ${call.name}` };
|
|
192
|
+
}
|
|
193
|
+
else {
|
|
194
|
+
try {
|
|
195
|
+
result = await def.execute(call.input, ctx);
|
|
196
|
+
}
|
|
197
|
+
catch (err) {
|
|
198
|
+
result = { error: `tool execution failed: ${err instanceof Error ? err.message : String(err)}` };
|
|
199
|
+
}
|
|
58
200
|
}
|
|
59
|
-
|
|
60
|
-
|
|
201
|
+
const enriched = { name: call.name, input: call.input, result };
|
|
202
|
+
allToolCalls.push(enriched);
|
|
203
|
+
turnRecord.toolCalls.push(enriched);
|
|
204
|
+
// Track file ops so the wire telemetry's filesReadCount /
|
|
205
|
+
// filesWrittenCount aren't perpetually 0. Only count successful
|
|
206
|
+
// calls (a tool that threw produced { error: ... } as result).
|
|
207
|
+
const succeeded = !(typeof result === 'object' && result !== null && 'error' in result);
|
|
208
|
+
if (succeeded) {
|
|
209
|
+
const path = extractPathFromToolInput(call.input);
|
|
210
|
+
if (READ_TOOL_NAMES.has(call.name) && path)
|
|
211
|
+
filesRead.push(path);
|
|
212
|
+
else if (WRITE_TOOL_NAMES.has(call.name) && path)
|
|
213
|
+
filesWritten.push(path);
|
|
214
|
+
else if (SHELL_TOOL_NAMES.has(call.name)) {
|
|
215
|
+
// Gap 11 fix (4.0.3+): workers writing via run_shell
|
|
216
|
+
// (cat >, sed -i, tee, etc.) used to show "0 write" in
|
|
217
|
+
// polling for the entire run despite actively producing
|
|
218
|
+
// artifacts. Detect common write patterns in the command
|
|
219
|
+
// arg and attribute as a synthetic write entry tagged
|
|
220
|
+
// `shell:` so callers can distinguish it from explicit
|
|
221
|
+
// write_file calls. False positives acceptable; false
|
|
222
|
+
// negatives are not — the headline must reflect reality.
|
|
223
|
+
const command = extractShellCommand(call.input);
|
|
224
|
+
if (command && shellCommandWritesFs(command)) {
|
|
225
|
+
filesWritten.push(`shell:${command.slice(0, 80)}`);
|
|
226
|
+
}
|
|
227
|
+
}
|
|
61
228
|
}
|
|
62
229
|
}
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
230
|
+
history.push(turnRecord);
|
|
231
|
+
}
|
|
232
|
+
// Per-tool counts for THIS turn so operators see "5 readFile, 1 grep"
|
|
233
|
+
// instead of the bare "tool_call_count=6". The user can immediately
|
|
234
|
+
// tell read vs write activity without inspecting the JSONL log.
|
|
235
|
+
const toolCallsByName = {};
|
|
236
|
+
// Gap 11 (4.0.3+): also count shell calls that wrote to the
|
|
237
|
+
// filesystem so the headline reflects worker-produced artifacts
|
|
238
|
+
// even when the worker bypassed write_file/edit_file.
|
|
239
|
+
let shellWritesThisTurn = 0;
|
|
240
|
+
for (const tc of turnResult.toolCalls) {
|
|
241
|
+
toolCallsByName[tc.name] = (toolCallsByName[tc.name] ?? 0) + 1;
|
|
242
|
+
if (SHELL_TOOL_NAMES.has(tc.name)) {
|
|
243
|
+
const cmd = extractShellCommand(tc.input);
|
|
244
|
+
if (cmd && shellCommandWritesFs(cmd))
|
|
245
|
+
shellWritesThisTurn += 1;
|
|
246
|
+
}
|
|
66
247
|
}
|
|
67
|
-
|
|
248
|
+
input.bus?.emit({
|
|
249
|
+
event: 'runner_turn_completed',
|
|
250
|
+
ts: new Date().toISOString(),
|
|
251
|
+
...baseEventFields,
|
|
252
|
+
turnIndex: turn,
|
|
253
|
+
terminated: willTerminate,
|
|
254
|
+
toolCallCount: turnResult.toolCalls.length,
|
|
255
|
+
...(turnResult.toolCalls.length > 0 && { toolCalls: toolCallsByName }),
|
|
256
|
+
...(shellWritesThisTurn > 0 && { shellWrites: shellWritesThisTurn }),
|
|
257
|
+
});
|
|
258
|
+
if (willTerminate)
|
|
259
|
+
break;
|
|
260
|
+
}
|
|
261
|
+
// Empty-output regression guard (4.0.3). The 4.0.x runner-shell
|
|
262
|
+
// unconditionally reported `workerStatus: 'done'` whenever the adapter
|
|
263
|
+
// returned no tool calls — even when assistantText was empty. Combined
|
|
264
|
+
// with the anthropic-messages adapter's text-only extraction, a
|
|
265
|
+
// reasoning model that emitted thinking blocks with no text block (or
|
|
266
|
+
// any provider that returned end_turn with empty content) silently
|
|
267
|
+
// produced an "ok" RunResult carrying `output: ''`. The reviewer
|
|
268
|
+
// engine then approved that empty output and the audit/delegate
|
|
269
|
+
// looked successful while emitting nothing useful.
|
|
270
|
+
//
|
|
271
|
+
// 3.12.7's claude-agent-sdk owned the agent loop and didn't have this
|
|
272
|
+
// failure mode. This branch restores the missing check: stopping with
|
|
273
|
+
// empty narrative AND no tool calls is `incomplete`, surfaced as a
|
|
274
|
+
// structured error with errorCode `empty_output` so callers can tell
|
|
275
|
+
// the difference between "model finished cleanly" and "model returned
|
|
276
|
+
// nothing usable".
|
|
277
|
+
if (stoppedByAdapter && finalText.trim() === '' && allToolCalls.length === 0) {
|
|
278
|
+
return {
|
|
279
|
+
workerStatus: 'failed',
|
|
280
|
+
finalAssistantText: '',
|
|
281
|
+
toolCalls: allToolCalls,
|
|
282
|
+
usage,
|
|
283
|
+
errorCode: 'empty_output',
|
|
284
|
+
turns,
|
|
285
|
+
durationMs: Date.now() - startMs,
|
|
286
|
+
filesRead,
|
|
287
|
+
filesWritten,
|
|
288
|
+
costUSD: computeCost(modelForCost, usage),
|
|
289
|
+
};
|
|
68
290
|
}
|
|
69
291
|
return {
|
|
70
292
|
workerStatus: stoppedByAdapter ? 'done' : 'blocked',
|
|
@@ -72,7 +294,18 @@ export class RunnerShell {
|
|
|
72
294
|
toolCalls: allToolCalls,
|
|
73
295
|
usage,
|
|
74
296
|
...(stoppedByAdapter ? {} : { errorCode: 'max_turns_exhausted' }),
|
|
297
|
+
turns,
|
|
298
|
+
durationMs: Date.now() - startMs,
|
|
299
|
+
filesRead,
|
|
300
|
+
filesWritten,
|
|
301
|
+
costUSD: computeCost(modelForCost, usage),
|
|
75
302
|
};
|
|
76
303
|
}
|
|
77
304
|
}
|
|
305
|
+
function computeCost(model, usage) {
|
|
306
|
+
const card = resolveRateCard(model ?? null);
|
|
307
|
+
if (!card)
|
|
308
|
+
return null;
|
|
309
|
+
return priceTokens(usage, card);
|
|
310
|
+
}
|
|
78
311
|
//# sourceMappingURL=runner-shell.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runner-shell.js","sourceRoot":"","sources":["../../src/providers/runner-shell.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"runner-shell.js","sourceRoot":"","sources":["../../src/providers/runner-shell.ts"],"names":[],"mappings":"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"}
|