@zhixuan92/multi-model-agent-core 3.0.0 → 3.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +24 -21
- package/dist/batch-registry.d.ts +15 -2
- package/dist/batch-registry.d.ts.map +1 -1
- package/dist/batch-registry.js +18 -1
- package/dist/batch-registry.js.map +1 -1
- package/dist/config/load.d.ts +12 -2
- package/dist/config/load.d.ts.map +1 -1
- package/dist/config/load.js +24 -16
- package/dist/config/load.js.map +1 -1
- package/dist/config/schema.d.ts +3 -0
- package/dist/config/schema.d.ts.map +1 -1
- package/dist/config/schema.js +4 -0
- package/dist/config/schema.js.map +1 -1
- package/dist/diagnostics/disconnect-log.d.ts +45 -0
- package/dist/diagnostics/disconnect-log.d.ts.map +1 -1
- package/dist/diagnostics/disconnect-log.js +96 -2
- package/dist/diagnostics/disconnect-log.js.map +1 -1
- package/dist/executors/audit.d.ts.map +1 -1
- package/dist/executors/audit.js +12 -4
- package/dist/executors/audit.js.map +1 -1
- package/dist/executors/debug.d.ts.map +1 -1
- package/dist/executors/debug.js +7 -2
- package/dist/executors/debug.js.map +1 -1
- package/dist/executors/delegate.d.ts.map +1 -1
- package/dist/executors/delegate.js +18 -4
- package/dist/executors/delegate.js.map +1 -1
- package/dist/executors/execute-plan.d.ts.map +1 -1
- package/dist/executors/execute-plan.js +12 -4
- package/dist/executors/execute-plan.js.map +1 -1
- package/dist/executors/retry.d.ts.map +1 -1
- package/dist/executors/retry.js +8 -1
- package/dist/executors/retry.js.map +1 -1
- package/dist/executors/review.d.ts.map +1 -1
- package/dist/executors/review.js +12 -4
- package/dist/executors/review.js.map +1 -1
- package/dist/executors/types.d.ts +20 -5
- package/dist/executors/types.d.ts.map +1 -1
- package/dist/executors/verify.d.ts.map +1 -1
- package/dist/executors/verify.js +12 -4
- package/dist/executors/verify.js.map +1 -1
- package/dist/heartbeat.d.ts +50 -0
- package/dist/heartbeat.d.ts.map +1 -1
- package/dist/heartbeat.js +48 -0
- package/dist/heartbeat.js.map +1 -1
- package/dist/index.d.ts +5 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -1
- package/dist/index.js.map +1 -1
- package/dist/reporting/compose-running-headline.d.ts +16 -0
- package/dist/reporting/compose-running-headline.d.ts.map +1 -0
- package/dist/reporting/compose-running-headline.js +29 -0
- package/dist/reporting/compose-running-headline.js.map +1 -0
- package/dist/reporting/compose-terminal-headline.d.ts +8 -0
- package/dist/reporting/compose-terminal-headline.d.ts.map +1 -0
- package/dist/reporting/compose-terminal-headline.js +10 -0
- package/dist/reporting/compose-terminal-headline.js.map +1 -0
- package/dist/reporting/not-applicable.d.ts +9 -0
- package/dist/reporting/not-applicable.d.ts.map +1 -0
- package/dist/reporting/not-applicable.js +12 -0
- package/dist/reporting/not-applicable.js.map +1 -0
- package/dist/run-tasks.d.ts +20 -0
- package/dist/run-tasks.d.ts.map +1 -1
- package/dist/run-tasks.js +78 -3
- package/dist/run-tasks.js.map +1 -1
- package/dist/tool-schemas/audit.d.ts +28 -3
- package/dist/tool-schemas/audit.d.ts.map +1 -1
- package/dist/tool-schemas/audit.js +2 -7
- package/dist/tool-schemas/audit.js.map +1 -1
- package/dist/tool-schemas/debug.d.ts +28 -3
- package/dist/tool-schemas/debug.d.ts.map +1 -1
- package/dist/tool-schemas/debug.js +2 -7
- package/dist/tool-schemas/debug.js.map +1 -1
- package/dist/tool-schemas/delegate.d.ts +28 -3
- package/dist/tool-schemas/delegate.d.ts.map +1 -1
- package/dist/tool-schemas/delegate.js +2 -7
- package/dist/tool-schemas/delegate.js.map +1 -1
- package/dist/tool-schemas/execute-plan.d.ts +28 -3
- package/dist/tool-schemas/execute-plan.d.ts.map +1 -1
- package/dist/tool-schemas/execute-plan.js +2 -7
- package/dist/tool-schemas/execute-plan.js.map +1 -1
- package/dist/tool-schemas/retry.d.ts +28 -3
- package/dist/tool-schemas/retry.d.ts.map +1 -1
- package/dist/tool-schemas/retry.js +2 -7
- package/dist/tool-schemas/retry.js.map +1 -1
- package/dist/tool-schemas/review.d.ts +28 -3
- package/dist/tool-schemas/review.d.ts.map +1 -1
- package/dist/tool-schemas/review.js +2 -7
- package/dist/tool-schemas/review.js.map +1 -1
- package/dist/tool-schemas/shared-output.d.ts +41 -0
- package/dist/tool-schemas/shared-output.d.ts.map +1 -0
- package/dist/tool-schemas/shared-output.js +25 -0
- package/dist/tool-schemas/shared-output.js.map +1 -0
- package/dist/tool-schemas/verify.d.ts +28 -3
- package/dist/tool-schemas/verify.d.ts.map +1 -1
- package/dist/tool-schemas/verify.js +2 -7
- package/dist/tool-schemas/verify.js.map +1 -1
- package/dist/types.d.ts +2 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js.map +1 -1
- package/package.json +1 -1
package/dist/executors/verify.js
CHANGED
|
@@ -2,6 +2,8 @@
|
|
|
2
2
|
import { randomUUID } from 'node:crypto';
|
|
3
3
|
import { runTasks } from '../run-tasks.js';
|
|
4
4
|
import { computeTimings, computeAggregateCost } from './shared-compute.js';
|
|
5
|
+
import { notApplicable } from '../reporting/not-applicable.js';
|
|
6
|
+
import { composeTerminalHeadline } from '../reporting/compose-terminal-headline.js';
|
|
5
7
|
// --- Ported from packages/mcp/src/tools/verify-work.ts ---
|
|
6
8
|
function buildFilePathsPrompt(filePaths) {
|
|
7
9
|
if (!filePaths || filePaths.length === 0)
|
|
@@ -70,16 +72,19 @@ export async function executeVerify(ctx, input) {
|
|
|
70
72
|
prompt: buildPerFilePrompt(fp, promptTemplate),
|
|
71
73
|
}));
|
|
72
74
|
const startMs = Date.now();
|
|
73
|
-
const results = await runTasks(tasks, config, { runtime });
|
|
75
|
+
const results = await runTasks(tasks, config, { runtime, ...(ctx.batchId !== undefined && { batchId: ctx.batchId }), ...(ctx.recordHeartbeat !== undefined && { recordHeartbeat: ctx.recordHeartbeat }), logger: ctx.logger });
|
|
74
76
|
const wallClockMs = Date.now() - startMs;
|
|
75
77
|
const ctxId = autoRegisterContextBlock(results, contextBlockStore);
|
|
76
78
|
const batchTimings = computeTimings(wallClockMs, results);
|
|
77
79
|
const costSummary = computeAggregateCost(results);
|
|
78
80
|
return {
|
|
81
|
+
headline: composeTerminalHeadline({ tool: 'verify', awaitingClarification: false, tasksTotal: tasks.length, tasksCompleted: results.length }),
|
|
79
82
|
results,
|
|
80
|
-
headline: '',
|
|
81
83
|
batchTimings,
|
|
82
84
|
costSummary,
|
|
85
|
+
structuredReport: notApplicable('no structured report emitted by this executor'),
|
|
86
|
+
error: notApplicable('batch succeeded'),
|
|
87
|
+
proposedInterpretation: notApplicable('batch not awaiting clarification'),
|
|
83
88
|
batchId: randomUUID(),
|
|
84
89
|
wallClockMs,
|
|
85
90
|
parentModel,
|
|
@@ -87,15 +92,18 @@ export async function executeVerify(ctx, input) {
|
|
|
87
92
|
};
|
|
88
93
|
}
|
|
89
94
|
const prompt = buildVerifyPrompt(input.work, input.filePaths, input.checklist);
|
|
90
|
-
const results = await runTasks([{ ...baseTaskSpec, prompt }], config, { runtime });
|
|
95
|
+
const results = await runTasks([{ ...baseTaskSpec, prompt }], config, { runtime, ...(ctx.batchId !== undefined && { batchId: ctx.batchId }), ...(ctx.recordHeartbeat !== undefined && { recordHeartbeat: ctx.recordHeartbeat }), logger: ctx.logger });
|
|
91
96
|
const ctxId = autoRegisterContextBlock(results, contextBlockStore);
|
|
92
97
|
const batchTimings = computeTimings(0, results);
|
|
93
98
|
const costSummary = computeAggregateCost(results);
|
|
94
99
|
return {
|
|
100
|
+
headline: composeTerminalHeadline({ tool: 'verify', awaitingClarification: false, tasksTotal: 1, tasksCompleted: results.length }),
|
|
95
101
|
results,
|
|
96
|
-
headline: '',
|
|
97
102
|
batchTimings,
|
|
98
103
|
costSummary,
|
|
104
|
+
structuredReport: notApplicable('no structured report emitted by this executor'),
|
|
105
|
+
error: notApplicable('batch succeeded'),
|
|
106
|
+
proposedInterpretation: notApplicable('batch not awaiting clarification'),
|
|
99
107
|
batchId: randomUUID(),
|
|
100
108
|
wallClockMs: 0,
|
|
101
109
|
parentModel,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"verify.js","sourceRoot":"","sources":["../../src/executors/verify.ts"],"names":[],"mappings":"AAAA,wCAAwC;AACxC,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAIzC,OAAO,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAC3C,OAAO,EAAE,cAAc,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"verify.js","sourceRoot":"","sources":["../../src/executors/verify.ts"],"names":[],"mappings":"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"}
|
package/dist/heartbeat.d.ts
CHANGED
|
@@ -1,9 +1,50 @@
|
|
|
1
1
|
import type { ProgressEvent } from './types.js';
|
|
2
2
|
export type HeartbeatStage = 'implementing' | 'spec_review' | 'spec_rework' | 'quality_review' | 'quality_rework';
|
|
3
|
+
/**
|
|
4
|
+
* Lightweight state snapshot passed to `recordHeartbeat` on every tick (including
|
|
5
|
+
* the final flush). The server uses this — combined with the BatchRegistry entry
|
|
6
|
+
* it already holds — to compose the running headline and push it via
|
|
7
|
+
* `BatchRegistry.updateRunningHeadline`.
|
|
8
|
+
*
|
|
9
|
+
* HeartbeatTimer has no knowledge of BatchRegistry; it only emits this payload.
|
|
10
|
+
*/
|
|
11
|
+
export interface HeartbeatTickInfo {
|
|
12
|
+
batchId: string;
|
|
13
|
+
elapsedMs: number;
|
|
14
|
+
stage: HeartbeatStage;
|
|
15
|
+
stageIndex: number;
|
|
16
|
+
stageCount: number;
|
|
17
|
+
reviewRound?: number;
|
|
18
|
+
maxReviewRounds?: number;
|
|
19
|
+
provider: string;
|
|
20
|
+
progress: {
|
|
21
|
+
filesRead: number;
|
|
22
|
+
filesWritten: number;
|
|
23
|
+
toolCalls: number;
|
|
24
|
+
};
|
|
25
|
+
costUSD: number | null;
|
|
26
|
+
savedCostUSD: number | null;
|
|
27
|
+
/** Populated only on the tick immediately following a stage change. */
|
|
28
|
+
phaseChange?: {
|
|
29
|
+
from: HeartbeatStage;
|
|
30
|
+
to: HeartbeatStage;
|
|
31
|
+
};
|
|
32
|
+
}
|
|
3
33
|
export interface HeartbeatTimerOptions {
|
|
4
34
|
provider: string;
|
|
5
35
|
parentModel?: string;
|
|
6
36
|
intervalMs?: number;
|
|
37
|
+
/**
|
|
38
|
+
* Optional callback invoked on every HeartbeatTimer tick (including the
|
|
39
|
+
* final one). Receives a snapshot of the timer's current state so the
|
|
40
|
+
* caller can compose the running headline from the BatchRegistry entry.
|
|
41
|
+
*
|
|
42
|
+
* Core HeartbeatTimer has no knowledge of BatchRegistry — it only invokes
|
|
43
|
+
* this callback if provided.
|
|
44
|
+
*/
|
|
45
|
+
recordHeartbeat?: (tick: HeartbeatTickInfo) => void;
|
|
46
|
+
/** The batchId this timer belongs to. Required when recordHeartbeat is set. */
|
|
47
|
+
batchId?: string;
|
|
7
48
|
}
|
|
8
49
|
export interface TransitionFields {
|
|
9
50
|
stage?: HeartbeatStage;
|
|
@@ -19,6 +60,8 @@ export declare class HeartbeatTimer {
|
|
|
19
60
|
private readonly onProgress;
|
|
20
61
|
private readonly intervalMs;
|
|
21
62
|
private readonly parentModel;
|
|
63
|
+
private readonly _recordHeartbeat?;
|
|
64
|
+
private readonly _batchId?;
|
|
22
65
|
private timer;
|
|
23
66
|
private startTime;
|
|
24
67
|
private started;
|
|
@@ -34,7 +77,14 @@ export declare class HeartbeatTimer {
|
|
|
34
77
|
private toolCalls;
|
|
35
78
|
private costUSD;
|
|
36
79
|
private savedCostUSD;
|
|
80
|
+
private phaseChangeFrom;
|
|
81
|
+
private phaseChangeTo;
|
|
37
82
|
constructor(onProgress: (event: ProgressEvent) => void, options: HeartbeatTimerOptions);
|
|
83
|
+
/**
|
|
84
|
+
* Returns a snapshot of the timer's current state for use by recordHeartbeat
|
|
85
|
+
* callbacks to compose the running headline.
|
|
86
|
+
*/
|
|
87
|
+
getHeartbeatTickInfo(): HeartbeatTickInfo;
|
|
38
88
|
start(stageCount: number): void;
|
|
39
89
|
stop(): void;
|
|
40
90
|
transition(fields: TransitionFields): void;
|
package/dist/heartbeat.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"heartbeat.d.ts","sourceRoot":"","sources":["../src/heartbeat.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAUhD,MAAM,MAAM,cAAc,GAAG,cAAc,GAAG,aAAa,GAAG,aAAa,GAAG,gBAAgB,GAAG,gBAAgB,CAAC;AAclH,MAAM,WAAW,qBAAqB;IACpC,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"heartbeat.d.ts","sourceRoot":"","sources":["../src/heartbeat.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAUhD,MAAM,MAAM,cAAc,GAAG,cAAc,GAAG,aAAa,GAAG,aAAa,GAAG,gBAAgB,GAAG,gBAAgB,CAAC;AAclH;;;;;;;GAOG;AACH,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,cAAc,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE;QACR,SAAS,EAAE,MAAM,CAAC;QAClB,YAAY,EAAE,MAAM,CAAC;QACrB,SAAS,EAAE,MAAM,CAAC;KACnB,CAAC;IACF,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,uEAAuE;IACvE,WAAW,CAAC,EAAE;QAAE,IAAI,EAAE,cAAc,CAAC;QAAC,EAAE,EAAE,cAAc,CAAA;KAAE,CAAC;CAC5D;AAED,MAAM,WAAW,qBAAqB;IACpC,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB;;;;;;;OAOG;IACH,eAAe,CAAC,EAAE,CAAC,IAAI,EAAE,iBAAiB,KAAK,IAAI,CAAC;IACpD,+EAA+E;IAC/E,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,gBAAgB;IAC/B,KAAK,CAAC,EAAE,cAAc,CAAC;IACvB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC9B;AAED,qBAAa,cAAc;IACzB,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAiC;IAC5D,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAS;IACpC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAqB;IACjD,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAC,CAAoC;IACtE,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAS;IACnC,OAAO,CAAC,KAAK,CAA+C;IAC5D,OAAO,CAAC,SAAS,CAAK;IACtB,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,OAAO,CAAS;IAGxB,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,KAAK,CAAkC;IAC/C,OAAO,CAAC,UAAU,CAAK;IACvB,OAAO,CAAC,UAAU,CAAK;IACvB,OAAO,CAAC,WAAW,CAAqB;IACxC,OAAO,CAAC,eAAe,CAAqB;IAG5C,OAAO,CAAC,SAAS,CAAK;IACtB,OAAO,CAAC,YAAY,CAAK;IACzB,OAAO,CAAC,SAAS,CAAK;IAGtB,OAAO,CAAC,OAAO,CAAuB;IACtC,OAAO,CAAC,YAAY,CAAuB;IAI3C,OAAO,CAAC,eAAe,CAA+B;IACtD,OAAO,CAAC,aAAa,CAA+B;gBAGlD,UAAU,EAAE,CAAC,KAAK,EAAE,aAAa,KAAK,IAAI,EAC1C,OAAO,EAAE,qBAAqB;IAUhC;;;OAGG;IACH,oBAAoB,IAAI,iBAAiB;IA4BzC,KAAK,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI;IAyB/B,IAAI,IAAI,IAAI;IAUZ,UAAU,CAAC,MAAM,EAAE,gBAAgB,GAAG,IAAI;IA+E1C,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI;IAInC,QAAQ,CAAC,KAAK,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,MAAM,EAAE,eAAe,CAAC,EAAE,MAAM,GAAG,IAAI;IAIzG,gBAAgB,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI;IAQ1C,cAAc,CAAC,SAAS,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI;IAOhF,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,EAAE,YAAY,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI;IAMrE,OAAO,CAAC,IAAI;IAgCZ,OAAO,CAAC,eAAe;IAiBvB,OAAO,CAAC,iBAAiB;CAa1B"}
|
package/dist/heartbeat.js
CHANGED
|
@@ -20,6 +20,8 @@ export class HeartbeatTimer {
|
|
|
20
20
|
onProgress;
|
|
21
21
|
intervalMs;
|
|
22
22
|
parentModel;
|
|
23
|
+
_recordHeartbeat;
|
|
24
|
+
_batchId;
|
|
23
25
|
timer = null;
|
|
24
26
|
startTime = 0;
|
|
25
27
|
started = false;
|
|
@@ -38,11 +40,47 @@ export class HeartbeatTimer {
|
|
|
38
40
|
// Cost
|
|
39
41
|
costUSD = null;
|
|
40
42
|
savedCostUSD = null;
|
|
43
|
+
// Most recent phase-change, surfaced via getHeartbeatTickInfo so callers can
|
|
44
|
+
// emit task_phase_change events. Cleared after each getHeartbeatTickInfo read.
|
|
45
|
+
phaseChangeFrom = null;
|
|
46
|
+
phaseChangeTo = null;
|
|
41
47
|
constructor(onProgress, options) {
|
|
42
48
|
this.onProgress = onProgress;
|
|
43
49
|
this.provider = options.provider;
|
|
44
50
|
this.parentModel = options.parentModel;
|
|
45
51
|
this.intervalMs = options.intervalMs ?? 5000;
|
|
52
|
+
this._recordHeartbeat = options.recordHeartbeat;
|
|
53
|
+
this._batchId = options.batchId;
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Returns a snapshot of the timer's current state for use by recordHeartbeat
|
|
57
|
+
* callbacks to compose the running headline.
|
|
58
|
+
*/
|
|
59
|
+
getHeartbeatTickInfo() {
|
|
60
|
+
const phaseChange = this.phaseChangeFrom !== null && this.phaseChangeTo !== null
|
|
61
|
+
? { from: this.phaseChangeFrom, to: this.phaseChangeTo }
|
|
62
|
+
: undefined;
|
|
63
|
+
// Consume the pending phase change so the next tick doesn't re-fire it.
|
|
64
|
+
this.phaseChangeFrom = null;
|
|
65
|
+
this.phaseChangeTo = null;
|
|
66
|
+
return {
|
|
67
|
+
batchId: this._batchId ?? '',
|
|
68
|
+
elapsedMs: this.startTime > 0 ? Date.now() - this.startTime : 0,
|
|
69
|
+
stage: this.stage,
|
|
70
|
+
stageIndex: this.stageIndex,
|
|
71
|
+
stageCount: this.stageCount,
|
|
72
|
+
reviewRound: this.reviewRound,
|
|
73
|
+
maxReviewRounds: this.maxReviewRounds,
|
|
74
|
+
provider: this.provider,
|
|
75
|
+
progress: {
|
|
76
|
+
filesRead: this.filesRead,
|
|
77
|
+
filesWritten: this.filesWritten,
|
|
78
|
+
toolCalls: this.toolCalls,
|
|
79
|
+
},
|
|
80
|
+
costUSD: this.costUSD,
|
|
81
|
+
savedCostUSD: this.savedCostUSD,
|
|
82
|
+
...(phaseChange !== undefined && { phaseChange }),
|
|
83
|
+
};
|
|
46
84
|
}
|
|
47
85
|
start(stageCount) {
|
|
48
86
|
// Clear any existing timer without emitting final heartbeat
|
|
@@ -99,8 +137,13 @@ export class HeartbeatTimer {
|
|
|
99
137
|
// Apply stage with invariant enforcement
|
|
100
138
|
if (fields.stage !== undefined) {
|
|
101
139
|
const newStageIndex = fields.stageIndex ?? this.stageIndex;
|
|
140
|
+
const prevStage = this.stage;
|
|
102
141
|
this.stage = fields.stage;
|
|
103
142
|
this.stageIndex = newStageIndex;
|
|
143
|
+
if (prevStage !== fields.stage) {
|
|
144
|
+
this.phaseChangeFrom = prevStage;
|
|
145
|
+
this.phaseChangeTo = fields.stage;
|
|
146
|
+
}
|
|
104
147
|
// Auto-clear review fields for implementing
|
|
105
148
|
if (fields.stage === 'implementing') {
|
|
106
149
|
this.reviewRound = undefined;
|
|
@@ -194,6 +237,11 @@ export class HeartbeatTimer {
|
|
|
194
237
|
final,
|
|
195
238
|
headline: this.composeHeadline(elapsed),
|
|
196
239
|
});
|
|
240
|
+
// Push a tick snapshot so the server can recompose the running headline
|
|
241
|
+
// and call BatchRegistry.updateRunningHeadline on every tick.
|
|
242
|
+
if (this._recordHeartbeat) {
|
|
243
|
+
this._recordHeartbeat(this.getHeartbeatTickInfo());
|
|
244
|
+
}
|
|
197
245
|
}
|
|
198
246
|
composeHeadline(elapsed) {
|
|
199
247
|
const prefix = `[${this.stageIndex}/${this.stageCount}] ${STAGE_LABELS[this.stage]}`;
|
package/dist/heartbeat.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"heartbeat.js","sourceRoot":"","sources":["../src/heartbeat.ts"],"names":[],"mappings":"AAEA,SAAS,aAAa,CAAC,EAAU;IAC/B,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,GAAG,IAAI,CAAC,CAAC;IACtC,IAAI,OAAO,GAAG,EAAE;QAAE,OAAO,GAAG,OAAO,GAAG,CAAC;IACvC,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,EAAE,CAAC,CAAC;IACzC,MAAM,OAAO,GAAG,OAAO,GAAG,EAAE,CAAC;IAC7B,OAAO,GAAG,OAAO,KAAK,OAAO,GAAG,CAAC;AACnC,CAAC;AAID,MAAM,YAAY,GAAmC;IACnD,YAAY,EAAE,cAAc;IAC5B,WAAW,EAAE,aAAa;IAC1B,WAAW,EAAE,aAAa;IAC1B,cAAc,EAAE,gBAAgB;IAChC,cAAc,EAAE,gBAAgB;CACjC,CAAC;AAEF,MAAM,aAAa,GAAgC,IAAI,GAAG,CAAC;IACzD,aAAa,EAAE,aAAa,EAAE,gBAAgB,EAAE,gBAAgB;CACjE,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"heartbeat.js","sourceRoot":"","sources":["../src/heartbeat.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,8 +1,11 @@
|
|
|
1
|
-
export { loadConfigFromFile, loadAuthToken } from './config/load.js';
|
|
1
|
+
export { loadConfigFromFile, loadAuthToken, collectInlineApiKeyOffenders } from './config/load.js';
|
|
2
2
|
export { parseConfig, multiModelConfigSchema, serverConfigSchema } from './config/schema.js';
|
|
3
3
|
export type { ServerConfig } from './config/schema.js';
|
|
4
4
|
export type { ToolMode, SandboxPolicy, AgentType, AgentCapability, AgentConfig, Effort, CostTier, RunStatus, TaskSpec, ProviderConfig, CodexProviderConfig, ClaudeProviderConfig, OpenAICompatibleProviderConfig, MultiModelConfig, TokenUsage, RunResult, BatchTimings, BatchProgress, BatchAggregateCost, Provider, RunOptions, RunTasksRuntime, ProgressEvent, InternalRunnerEvent, EligibilityFailureCheck, EligibilityFailure, ProviderEligibility, BriefQualityWarning, BriefQualityPolicy, ReadinessResult, } from './types.js';
|
|
5
5
|
export { ParsedStructuredReport } from './reporting/structured-report.js';
|
|
6
|
+
export { notApplicableSchema, notApplicable, isNotApplicable, type NotApplicable } from './reporting/not-applicable.js';
|
|
7
|
+
export { composeRunningHeadline, type RunningState, type RunningTask } from './reporting/compose-running-headline.js';
|
|
8
|
+
export { composeTerminalHeadline, type TerminalHeadlineInput } from './reporting/compose-terminal-headline.js';
|
|
6
9
|
export { InMemoryContextBlockStore, ContextBlockNotFoundError, } from './context/context-block-store.js';
|
|
7
10
|
export type { ContextBlockStore, RegisteredBlock, InMemoryContextBlockStoreOptions, } from './context/context-block-store.js';
|
|
8
11
|
export { expandContextBlocks } from './context/expand-context-blocks.js';
|
|
@@ -14,7 +17,7 @@ export type { ProjectContext } from './project-context.js';
|
|
|
14
17
|
export { runTasks } from './run-tasks.js';
|
|
15
18
|
export type { RunTasksOptions } from './run-tasks.js';
|
|
16
19
|
export { HeartbeatTimer } from './heartbeat.js';
|
|
17
|
-
export type { HeartbeatTimerOptions, HeartbeatStage, TransitionFields } from './heartbeat.js';
|
|
20
|
+
export type { HeartbeatTimerOptions, HeartbeatStage, TransitionFields, HeartbeatTickInfo, } from './heartbeat.js';
|
|
18
21
|
export { evaluateReadiness, hasScopePillar, hasInputsPillar, hasDoneConditionPillar, hasOutputContractPillar, detectOutsourcedDiscovery, detectBrittleLineAnchors, detectMixedEnvironmentActions, detectConcretePath, detectNamedCodeArtifact, detectReasonableLength, } from './readiness/readiness.js';
|
|
19
22
|
export { resolveAgent } from './routing/resolve-agent.js';
|
|
20
23
|
export type { ResolvedAgent } from './routing/resolve-agent.js';
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,kBAAkB,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -1,6 +1,9 @@
|
|
|
1
1
|
// Config
|
|
2
|
-
export { loadConfigFromFile, loadAuthToken } from './config/load.js';
|
|
2
|
+
export { loadConfigFromFile, loadAuthToken, collectInlineApiKeyOffenders } from './config/load.js';
|
|
3
3
|
export { parseConfig, multiModelConfigSchema, serverConfigSchema } from './config/schema.js';
|
|
4
|
+
export { notApplicableSchema, notApplicable, isNotApplicable } from './reporting/not-applicable.js';
|
|
5
|
+
export { composeRunningHeadline } from './reporting/compose-running-headline.js';
|
|
6
|
+
export { composeTerminalHeadline } from './reporting/compose-terminal-headline.js';
|
|
4
7
|
// Context blocks
|
|
5
8
|
export { InMemoryContextBlockStore, ContextBlockNotFoundError, } from './context/context-block-store.js';
|
|
6
9
|
export { expandContextBlocks } from './context/expand-context-blocks.js';
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,SAAS;AACT,OAAO,EAAE,kBAAkB,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,SAAS;AACT,OAAO,EAAE,kBAAkB,EAAE,aAAa,EAAE,4BAA4B,EAAE,MAAM,kBAAkB,CAAC;AACnG,OAAO,EAAE,WAAW,EAAE,sBAAsB,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAqC7F,OAAO,EAAE,mBAAmB,EAAE,aAAa,EAAE,eAAe,EAAsB,MAAM,+BAA+B,CAAC;AACxH,OAAO,EAAE,sBAAsB,EAAuC,MAAM,yCAAyC,CAAC;AACtH,OAAO,EAAE,uBAAuB,EAA8B,MAAM,0CAA0C,CAAC;AAE/G,iBAAiB;AACjB,OAAO,EACL,yBAAyB,EACzB,yBAAyB,GAC1B,MAAM,kCAAkC,CAAC;AAM1C,OAAO,EAAE,mBAAmB,EAAE,MAAM,oCAAoC,CAAC;AAEzE,WAAW;AACX,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAE/C,cAAc;AACd,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAG9C,kBAAkB;AAClB,OAAO,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAG5D,YAAY;AACZ,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAG1C,YAAY;AACZ,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAQhD,YAAY;AACZ,OAAO,EACL,iBAAiB,EACjB,cAAc,EACd,eAAe,EACf,sBAAsB,EACtB,uBAAuB,EACvB,yBAAyB,EACzB,wBAAwB,EACxB,6BAA6B,EAC7B,kBAAkB,EAClB,uBAAuB,EACvB,sBAAsB,GACvB,MAAM,0BAA0B,CAAC;AAElC,mBAAmB;AACnB,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAE1D,OAAO,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAC;AAErF,kBAAkB;AAClB,OAAO,EAAE,oBAAoB,EAAE,MAAM,gCAAgC,CAAC;AACtE,OAAO,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAC;AACjE,OAAO,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AAC/D,OAAO,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAC;AACjE,OAAO,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAC;AACnE,OAAO,EAAE,kBAAkB,EAAE,MAAM,oCAAoC,CAAC;AAExE,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AACzD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AACvD,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,kBAAkB,EAAE,MAAM,iCAAiC,CAAC;AACrE,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AAChE,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAuB3D,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAEtF,iBAAiB;AACjB,cAAc,qBAAqB,CAAC;AAEpC,cAAc;AACd,OAAO,EAAE,sBAAsB,EAAE,MAAM,iCAAiC,CAAC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
export interface RunningTask {
|
|
2
|
+
worker: string;
|
|
3
|
+
turn: number;
|
|
4
|
+
}
|
|
5
|
+
export interface RunningState {
|
|
6
|
+
tasksTotal: number;
|
|
7
|
+
tasksStarted: number;
|
|
8
|
+
tasksCompleted: number;
|
|
9
|
+
startedAt: number;
|
|
10
|
+
nowMs: number;
|
|
11
|
+
lastHeartbeatAt: number;
|
|
12
|
+
running: RunningTask[];
|
|
13
|
+
heartbeatIntervalMs?: number;
|
|
14
|
+
}
|
|
15
|
+
export declare function composeRunningHeadline(s: RunningState): string;
|
|
16
|
+
//# sourceMappingURL=compose-running-headline.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"compose-running-headline.d.ts","sourceRoot":"","sources":["../../src/reporting/compose-running-headline.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,YAAY;IAC3B,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,cAAc,EAAE,MAAM,CAAC;IACvB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,eAAe,EAAE,MAAM,CAAC;IACxB,OAAO,EAAE,WAAW,EAAE,CAAC;IACvB,mBAAmB,CAAC,EAAE,MAAM,CAAC;CAC9B;AAID,wBAAgB,sBAAsB,CAAC,CAAC,EAAE,YAAY,GAAG,MAAM,CA6B9D"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
const DEFAULT_HEARTBEAT_INTERVAL_MS = 15_000;
|
|
2
|
+
export function composeRunningHeadline(s) {
|
|
3
|
+
const tasksTotal = Math.max(0, s.tasksTotal);
|
|
4
|
+
const tasksStarted = Math.min(tasksTotal, Math.max(0, s.tasksStarted));
|
|
5
|
+
const tasksCompleted = Math.min(tasksStarted, Math.max(0, s.tasksCompleted));
|
|
6
|
+
const elapsedS = Math.max(0, Math.floor((s.nowMs - s.startedAt) / 1000));
|
|
7
|
+
const hbInterval = s.heartbeatIntervalMs ?? DEFAULT_HEARTBEAT_INTERVAL_MS;
|
|
8
|
+
const stallThresholdMs = 2 * hbInterval;
|
|
9
|
+
const sinceHeartbeatMs = s.lastHeartbeatAt > 0 ? Math.max(0, s.nowMs - s.lastHeartbeatAt) : 0;
|
|
10
|
+
const stalled = s.lastHeartbeatAt > 0 && sinceHeartbeatMs > stallThresholdMs;
|
|
11
|
+
const stallStr = stalled ? ` (stalled: no heartbeat for ${Math.floor(sinceHeartbeatMs / 1000)}s)` : '';
|
|
12
|
+
if (tasksTotal === 0) {
|
|
13
|
+
return `no tasks, ${elapsedS}s elapsed`;
|
|
14
|
+
}
|
|
15
|
+
if (tasksTotal === 1) {
|
|
16
|
+
if (tasksStarted === 0) {
|
|
17
|
+
return `1/1 queued, ${elapsedS}s elapsed`;
|
|
18
|
+
}
|
|
19
|
+
if (tasksCompleted === 1) {
|
|
20
|
+
return `1/1 complete, ${elapsedS}s elapsed`;
|
|
21
|
+
}
|
|
22
|
+
const w = s.running[0];
|
|
23
|
+
const workerStr = w ? `, worker: ${w.worker} (turn ${w.turn})` : '';
|
|
24
|
+
return `1/1 running, ${elapsedS}s elapsed${stallStr}${workerStr}`;
|
|
25
|
+
}
|
|
26
|
+
const nRunning = Math.max(0, tasksStarted - tasksCompleted);
|
|
27
|
+
return `${tasksCompleted}/${tasksTotal} complete, ${nRunning} running, ${elapsedS}s elapsed${stallStr}`;
|
|
28
|
+
}
|
|
29
|
+
//# sourceMappingURL=compose-running-headline.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"compose-running-headline.js","sourceRoot":"","sources":["../../src/reporting/compose-running-headline.ts"],"names":[],"mappings":"AAgBA,MAAM,6BAA6B,GAAG,MAAM,CAAC;AAE7C,MAAM,UAAU,sBAAsB,CAAC,CAAe;IACpD,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,UAAU,CAAC,CAAC;IAC7C,MAAM,YAAY,GAAG,IAAI,CAAC,GAAG,CAAC,UAAU,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC;IACvE,MAAM,cAAc,GAAG,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC;IAC7E,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,SAAS,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC;IACzE,MAAM,UAAU,GAAG,CAAC,CAAC,mBAAmB,IAAI,6BAA6B,CAAC;IAC1E,MAAM,gBAAgB,GAAG,CAAC,GAAG,UAAU,CAAC;IACxC,MAAM,gBAAgB,GAAG,CAAC,CAAC,eAAe,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC9F,MAAM,OAAO,GAAG,CAAC,CAAC,eAAe,GAAG,CAAC,IAAI,gBAAgB,GAAG,gBAAgB,CAAC;IAC7E,MAAM,QAAQ,GAAG,OAAO,CAAC,CAAC,CAAC,+BAA+B,IAAI,CAAC,KAAK,CAAC,gBAAgB,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;IAEvG,IAAI,UAAU,KAAK,CAAC,EAAE,CAAC;QACrB,OAAO,aAAa,QAAQ,WAAW,CAAC;IAC1C,CAAC;IAED,IAAI,UAAU,KAAK,CAAC,EAAE,CAAC;QACrB,IAAI,YAAY,KAAK,CAAC,EAAE,CAAC;YACvB,OAAO,eAAe,QAAQ,WAAW,CAAC;QAC5C,CAAC;QACD,IAAI,cAAc,KAAK,CAAC,EAAE,CAAC;YACzB,OAAO,iBAAiB,QAAQ,WAAW,CAAC;QAC9C,CAAC;QACD,MAAM,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QACvB,MAAM,SAAS,GAAG,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,MAAM,UAAU,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;QACpE,OAAO,gBAAgB,QAAQ,YAAY,QAAQ,GAAG,SAAS,EAAE,CAAC;IACpE,CAAC;IAED,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,YAAY,GAAG,cAAc,CAAC,CAAC;IAC5D,OAAO,GAAG,cAAc,IAAI,UAAU,cAAc,QAAQ,aAAa,QAAQ,YAAY,QAAQ,EAAE,CAAC;AAC1G,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export interface TerminalHeadlineInput {
|
|
2
|
+
tool: string;
|
|
3
|
+
awaitingClarification: boolean;
|
|
4
|
+
tasksTotal: number;
|
|
5
|
+
tasksCompleted: number;
|
|
6
|
+
}
|
|
7
|
+
export declare function composeTerminalHeadline(input: TerminalHeadlineInput): string;
|
|
8
|
+
//# sourceMappingURL=compose-terminal-headline.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"compose-terminal-headline.d.ts","sourceRoot":"","sources":["../../src/reporting/compose-terminal-headline.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,qBAAqB;IACpC,IAAI,EAAE,MAAM,CAAC;IACb,qBAAqB,EAAE,OAAO,CAAC;IAC/B,UAAU,EAAE,MAAM,CAAC;IACnB,cAAc,EAAE,MAAM,CAAC;CACxB;AAED,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,qBAAqB,GAAG,MAAM,CAM5E"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export function composeTerminalHeadline(input) {
|
|
2
|
+
const { tool, awaitingClarification, tasksTotal, tasksCompleted } = input;
|
|
3
|
+
if (awaitingClarification)
|
|
4
|
+
return `${tool}: awaiting clarification`;
|
|
5
|
+
if (tasksTotal <= 0)
|
|
6
|
+
return `${tool}: no tasks executed`;
|
|
7
|
+
const completed = Math.max(0, Math.min(tasksCompleted, tasksTotal));
|
|
8
|
+
return `${tool}: ${completed}/${tasksTotal} tasks complete`;
|
|
9
|
+
}
|
|
10
|
+
//# sourceMappingURL=compose-terminal-headline.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"compose-terminal-headline.js","sourceRoot":"","sources":["../../src/reporting/compose-terminal-headline.ts"],"names":[],"mappings":"AAOA,MAAM,UAAU,uBAAuB,CAAC,KAA4B;IAClE,MAAM,EAAE,IAAI,EAAE,qBAAqB,EAAE,UAAU,EAAE,cAAc,EAAE,GAAG,KAAK,CAAC;IAC1E,IAAI,qBAAqB;QAAE,OAAO,GAAG,IAAI,0BAA0B,CAAC;IACpE,IAAI,UAAU,IAAI,CAAC;QAAE,OAAO,GAAG,IAAI,qBAAqB,CAAC;IACzD,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,cAAc,EAAE,UAAU,CAAC,CAAC,CAAC;IACpE,OAAO,GAAG,IAAI,KAAK,SAAS,IAAI,UAAU,iBAAiB,CAAC;AAC9D,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
export declare const notApplicableSchema: z.ZodObject<{
|
|
3
|
+
kind: z.ZodLiteral<"not_applicable">;
|
|
4
|
+
reason: z.ZodString;
|
|
5
|
+
}, z.core.$strip>;
|
|
6
|
+
export type NotApplicable = z.infer<typeof notApplicableSchema>;
|
|
7
|
+
export declare function notApplicable(reason: string): NotApplicable;
|
|
8
|
+
export declare function isNotApplicable(v: unknown): v is NotApplicable;
|
|
9
|
+
//# sourceMappingURL=not-applicable.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"not-applicable.d.ts","sourceRoot":"","sources":["../../src/reporting/not-applicable.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,eAAO,MAAM,mBAAmB;;;iBAG9B,CAAC;AAEH,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAC;AAEhE,wBAAgB,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,aAAa,CAE3D;AAED,wBAAgB,eAAe,CAAC,CAAC,EAAE,OAAO,GAAG,CAAC,IAAI,aAAa,CAE9D"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
export const notApplicableSchema = z.object({
|
|
3
|
+
kind: z.literal('not_applicable'),
|
|
4
|
+
reason: z.string().min(1),
|
|
5
|
+
});
|
|
6
|
+
export function notApplicable(reason) {
|
|
7
|
+
return { kind: 'not_applicable', reason };
|
|
8
|
+
}
|
|
9
|
+
export function isNotApplicable(v) {
|
|
10
|
+
return typeof v === 'object' && v !== null && v.kind === 'not_applicable';
|
|
11
|
+
}
|
|
12
|
+
//# sourceMappingURL=not-applicable.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"not-applicable.js","sourceRoot":"","sources":["../../src/reporting/not-applicable.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC1C,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,gBAAgB,CAAC;IACjC,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;CAC1B,CAAC,CAAC;AAIH,MAAM,UAAU,aAAa,CAAC,MAAc;IAC1C,OAAO,EAAE,IAAI,EAAE,gBAAgB,EAAE,MAAM,EAAE,CAAC;AAC5C,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,CAAU;IACxC,OAAO,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,KAAK,IAAI,IAAK,CAAmB,CAAC,IAAI,KAAK,gBAAgB,CAAC;AAC/F,CAAC"}
|
package/dist/run-tasks.d.ts
CHANGED
|
@@ -4,6 +4,26 @@ export type RunTasksProgressCallback = (taskIndex: number, event: ProgressEvent)
|
|
|
4
4
|
export interface RunTasksOptions {
|
|
5
5
|
onProgress?: RunTasksProgressCallback;
|
|
6
6
|
runtime?: RunTasksRuntime;
|
|
7
|
+
/** Batch ID this run belongs to; threaded to HeartbeatTimer when set. */
|
|
8
|
+
batchId?: string;
|
|
9
|
+
/** Callback fired on every heartbeat tick with a state snapshot. */
|
|
10
|
+
recordHeartbeat?: (tick: import('./heartbeat.js').HeartbeatTickInfo) => void;
|
|
11
|
+
/**
|
|
12
|
+
* Optional DiagnosticLogger. When present AND `verbose` is true, the
|
|
13
|
+
* runner records per-tool-call + per-LLM-turn events for post-mortem
|
|
14
|
+
* diagnosis of slow tasks. Logger writes are a no-op if diagnostics.log=false,
|
|
15
|
+
* so passing it is always safe.
|
|
16
|
+
*/
|
|
17
|
+
logger?: import('./diagnostics/disconnect-log.js').DiagnosticLogger;
|
|
18
|
+
/**
|
|
19
|
+
* Enable verbose emissions. When true, each tool call and LLM turn is
|
|
20
|
+
* streamed to `verboseStream` (default: process.stderr) so the operator
|
|
21
|
+
* sees the server's work live. Orthogonal to `diagnostics.log` — you
|
|
22
|
+
* can have live streaming without persisting a JSONL file.
|
|
23
|
+
*/
|
|
24
|
+
verbose?: boolean;
|
|
25
|
+
/** Injectable stream target for verbose output. Defaults to process.stderr. */
|
|
26
|
+
verboseStream?: (line: string) => void;
|
|
7
27
|
}
|
|
8
28
|
export declare function runTasks(tasks: TaskSpec[], config: MultiModelConfig, options?: RunTasksOptions): Promise<RunResult[]>;
|
|
9
29
|
//# sourceMappingURL=run-tasks.d.ts.map
|
package/dist/run-tasks.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"run-tasks.d.ts","sourceRoot":"","sources":["../src/run-tasks.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAEV,SAAS,EAET,QAAQ,EACR,gBAAgB,EAEhB,aAAa,EACb,eAAe,EAIhB,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"run-tasks.d.ts","sourceRoot":"","sources":["../src/run-tasks.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAEV,SAAS,EAET,QAAQ,EACR,gBAAgB,EAEhB,aAAa,EACb,eAAe,EAIhB,MAAM,YAAY,CAAC;AAsBpB,wBAAsB,kBAAkB,CACtC,aAAa,EAAE,MAAM,EAAE,EACvB,cAAc,EAAE,MAAM,EACtB,GAAG,EAAE,MAAM,GAAG,SAAS,GACtB,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CA6C7B;AAED,MAAM,MAAM,wBAAwB,GAAG,CACrC,SAAS,EAAE,MAAM,EACjB,KAAK,EAAE,aAAa,KACjB,IAAI,CAAC;AAEV,MAAM,WAAW,eAAe;IAC9B,UAAU,CAAC,EAAE,wBAAwB,CAAC;IACtC,OAAO,CAAC,EAAE,eAAe,CAAC;IAC1B,yEAAyE;IACzE,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,oEAAoE;IACpE,eAAe,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,gBAAgB,EAAE,iBAAiB,KAAK,IAAI,CAAC;IAC7E;;;;;OAKG;IACH,MAAM,CAAC,EAAE,OAAO,iCAAiC,EAAE,gBAAgB,CAAC;IACpE;;;;;OAKG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,+EAA+E;IAC/E,aAAa,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;CACxC;AAwmBD,wBAAsB,QAAQ,CAC5B,KAAK,EAAE,QAAQ,EAAE,EACjB,MAAM,EAAE,gBAAgB,EACxB,OAAO,GAAE,eAAoB,GAC5B,OAAO,CAAC,SAAS,EAAE,CAAC,CAsHtB"}
|
package/dist/run-tasks.js
CHANGED
|
@@ -124,7 +124,7 @@ function buildFallbackImplReport(result) {
|
|
|
124
124
|
unresolved: [],
|
|
125
125
|
};
|
|
126
126
|
}
|
|
127
|
-
async function executeReviewedLifecycle(task, resolved, config, taskIndex, onProgress) {
|
|
127
|
+
async function executeReviewedLifecycle(task, resolved, config, taskIndex, onProgress, heartbeatWiring, diagnostics) {
|
|
128
128
|
const reviewPolicy = task.reviewPolicy ?? 'full';
|
|
129
129
|
const otherSlot = resolved.slot === 'standard' ? 'complex' : 'standard';
|
|
130
130
|
// Partition filePaths into output targets before the worker runs.
|
|
@@ -140,12 +140,44 @@ async function executeReviewedLifecycle(task, resolved, config, taskIndex, onPro
|
|
|
140
140
|
const stageCount = reviewPolicy === 'off' ? 1 :
|
|
141
141
|
reviewPolicy === 'spec_only' ? 3 :
|
|
142
142
|
5;
|
|
143
|
+
const verbose = diagnostics?.verbose ?? false;
|
|
144
|
+
let lastStageSeen;
|
|
145
|
+
const verboseStreamRaw = verbose
|
|
146
|
+
? (diagnostics?.verboseStream ?? ((line) => { process.stderr.write(line + '\n'); }))
|
|
147
|
+
: undefined;
|
|
148
|
+
const verboseBatchIdEarly = heartbeatWiring?.batchId;
|
|
149
|
+
const shortBatchEarly = verboseBatchIdEarly ? verboseBatchIdEarly.slice(0, 8) : '????????';
|
|
143
150
|
const heartbeat = onProgress
|
|
144
|
-
? new HeartbeatTimer((event) =>
|
|
151
|
+
? new HeartbeatTimer((event) => {
|
|
152
|
+
// Detect stage transitions on the heartbeat progress stream. The
|
|
153
|
+
// authoritative phaseChange flag rides HeartbeatTickInfo (server
|
|
154
|
+
// logger path); this redundant detection is for the stderr stream
|
|
155
|
+
// because run-tasks doesn't see HeartbeatTickInfo directly.
|
|
156
|
+
if (verboseStreamRaw && event.kind === 'heartbeat' && event.stage !== lastStageSeen) {
|
|
157
|
+
if (lastStageSeen !== undefined) {
|
|
158
|
+
verboseStreamRaw(`[mmagent verbose] batch=${shortBatchEarly} task=${taskIndex} stage ${lastStageSeen} → ${event.stage}`);
|
|
159
|
+
}
|
|
160
|
+
lastStageSeen = event.stage;
|
|
161
|
+
}
|
|
162
|
+
onProgress(taskIndex, event);
|
|
163
|
+
}, {
|
|
164
|
+
provider: resolved.provider.config.model,
|
|
165
|
+
parentModel: task.parentModel,
|
|
166
|
+
...(heartbeatWiring?.batchId !== undefined && { batchId: heartbeatWiring.batchId }),
|
|
167
|
+
...(heartbeatWiring?.recordHeartbeat !== undefined && { recordHeartbeat: heartbeatWiring.recordHeartbeat }),
|
|
168
|
+
})
|
|
145
169
|
: undefined;
|
|
146
170
|
heartbeat?.start(stageCount);
|
|
147
171
|
const implModel = resolved.provider.config.model;
|
|
148
172
|
const progressCounters = { filesRead: 0, filesWritten: 0, toolCalls: 0 };
|
|
173
|
+
const verboseLogger = verbose && diagnostics?.logger ? diagnostics.logger : undefined;
|
|
174
|
+
const verboseBatchId = verboseBatchIdEarly;
|
|
175
|
+
const verboseStream = verboseStreamRaw;
|
|
176
|
+
const shortBatch = shortBatchEarly;
|
|
177
|
+
if (verboseStream) {
|
|
178
|
+
verboseStream(`[mmagent verbose] batch=${shortBatch} task=${taskIndex} start worker=${resolved.provider.config.model}`);
|
|
179
|
+
}
|
|
180
|
+
let prevEventAtMs = verbose ? Date.now() : 0;
|
|
149
181
|
const wrappedOnProgress = onProgress
|
|
150
182
|
? (event) => {
|
|
151
183
|
if (event.kind === 'tool_call') {
|
|
@@ -158,11 +190,47 @@ async function executeReviewedLifecycle(task, resolved, config, taskIndex, onPro
|
|
|
158
190
|
progressCounters.filesWritten++;
|
|
159
191
|
}
|
|
160
192
|
heartbeat?.updateProgress(progressCounters.filesRead, progressCounters.filesWritten, progressCounters.toolCalls);
|
|
193
|
+
const now = verbose ? Date.now() : 0;
|
|
194
|
+
const sincePrevMs = verbose ? now - prevEventAtMs : 0;
|
|
195
|
+
if (verbose)
|
|
196
|
+
prevEventAtMs = now;
|
|
197
|
+
if (verboseLogger && verboseBatchId) {
|
|
198
|
+
verboseLogger.toolCall({
|
|
199
|
+
batchId: verboseBatchId,
|
|
200
|
+
taskIndex,
|
|
201
|
+
tool: event.toolSummary,
|
|
202
|
+
durationMs: sincePrevMs,
|
|
203
|
+
});
|
|
204
|
+
}
|
|
205
|
+
if (verboseStream) {
|
|
206
|
+
verboseStream(`[mmagent verbose] batch=${shortBatch} task=${taskIndex} tool=${event.toolSummary} +${sincePrevMs}ms`);
|
|
207
|
+
}
|
|
161
208
|
}
|
|
162
209
|
if (event.kind === 'turn_complete') {
|
|
163
210
|
const costUSD = computeCostUSD(event.cumulativeInputTokens, event.cumulativeOutputTokens, resolved.provider.config);
|
|
164
211
|
const savedCostUSD = computeSavedCostUSD(costUSD, event.cumulativeInputTokens, event.cumulativeOutputTokens, task.parentModel);
|
|
165
212
|
heartbeat?.updateCost(costUSD, savedCostUSD);
|
|
213
|
+
const nowTurn = verbose ? Date.now() : 0;
|
|
214
|
+
const turnDurMs = verbose ? nowTurn - prevEventAtMs : 0;
|
|
215
|
+
if (verbose)
|
|
216
|
+
prevEventAtMs = nowTurn;
|
|
217
|
+
if (verboseLogger && verboseBatchId) {
|
|
218
|
+
verboseLogger.llmTurn({
|
|
219
|
+
batchId: verboseBatchId,
|
|
220
|
+
taskIndex,
|
|
221
|
+
turnIndex: progressCounters.toolCalls,
|
|
222
|
+
provider: resolved.provider.config.model,
|
|
223
|
+
inputTokens: event.cumulativeInputTokens,
|
|
224
|
+
outputTokens: event.cumulativeOutputTokens,
|
|
225
|
+
costUSD,
|
|
226
|
+
});
|
|
227
|
+
}
|
|
228
|
+
if (verboseStream) {
|
|
229
|
+
const costStr = costUSD !== null ? ` $${costUSD.toFixed(4)}` : '';
|
|
230
|
+
verboseStream(`[mmagent verbose] batch=${shortBatch} task=${taskIndex} ` +
|
|
231
|
+
`turn in=${event.cumulativeInputTokens} out=${event.cumulativeOutputTokens}${costStr} ` +
|
|
232
|
+
`+${turnDurMs}ms (${resolved.provider.config.model})`);
|
|
233
|
+
}
|
|
166
234
|
}
|
|
167
235
|
}
|
|
168
236
|
: undefined;
|
|
@@ -554,7 +622,14 @@ export async function runTasks(tasks, config, options = {}) {
|
|
|
554
622
|
return Promise.resolve(refused);
|
|
555
623
|
}
|
|
556
624
|
const readiness = readinessResults[index];
|
|
557
|
-
return executeReviewedLifecycle(r.task, r.resolved, config, index, options.onProgress
|
|
625
|
+
return executeReviewedLifecycle(r.task, r.resolved, config, index, options.onProgress, {
|
|
626
|
+
batchId: options.batchId,
|
|
627
|
+
recordHeartbeat: options.recordHeartbeat,
|
|
628
|
+
}, {
|
|
629
|
+
logger: options.logger,
|
|
630
|
+
verbose: options.verbose ?? config.diagnostics?.verbose ?? false,
|
|
631
|
+
verboseStream: options.verboseStream,
|
|
632
|
+
}).then((result) => {
|
|
558
633
|
if (readiness && readiness.briefQualityWarnings.length > 0) {
|
|
559
634
|
return { ...result, briefQualityWarnings: readiness.briefQualityWarnings };
|
|
560
635
|
}
|