@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,6 +1,7 @@
|
|
|
1
1
|
import type { ContextBlockStore } from '../stores/context-block-tool.js';
|
|
2
2
|
import type { AgentType, Effort, FormatConstraints, SandboxPolicy, TaskSpec, ToolMode } from '../types.js';
|
|
3
3
|
import type { ResearchToolDefinition } from '../research/types.js';
|
|
4
|
+
import type { EventEmitter } from '../events/event-emitter.js';
|
|
4
5
|
export type RunStatus = 'ok' | 'incomplete' | 'timeout' | 'api_aborted' | 'api_error' | 'provider_transport_failure' | 'error' | 'brief_too_vague' | 'cost_exceeded' | 'unavailable';
|
|
5
6
|
/** Canonical 4-field token-count shape. reasoningTokens are summed into
|
|
6
7
|
* outputTokens by each runner before emitting. totalTokens, cachedTokens,
|
|
@@ -16,7 +17,7 @@ export interface TokenUsage {
|
|
|
16
17
|
export interface CostBreakdown {
|
|
17
18
|
costUSD: number | null;
|
|
18
19
|
/** Actual cost minus estimated parent cost. Negative = worker cheaper (savings). */
|
|
19
|
-
|
|
20
|
+
costDeltaVsMainUSD: number | null;
|
|
20
21
|
}
|
|
21
22
|
export interface TerminationReason {
|
|
22
23
|
/** Why the task stopped. 'finished' means the worker returned normally — check
|
|
@@ -92,6 +93,24 @@ export interface RunOptions {
|
|
|
92
93
|
cacheHints?: {
|
|
93
94
|
cacheableSystemPrompt?: boolean;
|
|
94
95
|
};
|
|
96
|
+
/** Bus for emitting per-turn / per-runner-call observability events. When
|
|
97
|
+
* present, the runner-shell + adapter emit `runner_turn_started`,
|
|
98
|
+
* `runner_turn_completed`, and `runner_response_received` events that the
|
|
99
|
+
* server's VerboseLogChannel + LocalLogSink + TelemetrySink consume. */
|
|
100
|
+
bus?: EventEmitter;
|
|
101
|
+
/** Identifies the in-flight batch in emitted runner events. Plumbed
|
|
102
|
+
* through delegateWithEscalation so consumers can correlate runner-shell
|
|
103
|
+
* output back to the originating /audit, /delegate, etc. request. */
|
|
104
|
+
batchId?: string;
|
|
105
|
+
/** Identifies which task within a batch is running. Threaded through every
|
|
106
|
+
* emitted event so per-task running-headline progress can be tracked when
|
|
107
|
+
* a batch has multiple parallel tasks. */
|
|
108
|
+
taskIndex?: number;
|
|
109
|
+
/** Tier label (`'standard'` | `'complex'`) included in emitted events. */
|
|
110
|
+
tier?: string;
|
|
111
|
+
/** Lifecycle stage label (e.g. `'Implementing'`, `'Spec review'`). Forwarded
|
|
112
|
+
* to the runner-shell so its emitted events carry the current stage. */
|
|
113
|
+
stageLabel?: string;
|
|
95
114
|
}
|
|
96
115
|
/** Runtime dependencies for `runTasks`. */
|
|
97
116
|
export interface RunTasksRuntime {
|
|
@@ -163,7 +182,7 @@ export type ProgressEvent = {
|
|
|
163
182
|
toolCalls: number;
|
|
164
183
|
};
|
|
165
184
|
costUSD: number | null;
|
|
166
|
-
|
|
185
|
+
costDeltaVsMainUSD: number | null;
|
|
167
186
|
final: boolean;
|
|
168
187
|
headline: string;
|
|
169
188
|
/** Per-stage idle time (ms since last LLM/tool/text event in the current stage). */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runner-types.d.ts","sourceRoot":"","sources":["../../src/providers/runner-types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,iCAAiC,CAAC;AACzE,OAAO,KAAK,EACV,SAAS,EACT,MAAM,EACN,iBAAiB,EACjB,aAAa,EACb,QAAQ,EACR,QAAQ,EACT,MAAM,aAAa,CAAC;AACrB,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"runner-types.d.ts","sourceRoot":"","sources":["../../src/providers/runner-types.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Single source of truth for tool-name → category sets.
|
|
3
|
+
*
|
|
4
|
+
* Two consumers historically maintained their own copies and drifted:
|
|
5
|
+
* - `runner-shell.ts` tracks `filesRead` / `filesWritten` arrays based
|
|
6
|
+
* on tool name → these flow into wire telemetry's
|
|
7
|
+
* `filesReadCount` / `filesWrittenCount`.
|
|
8
|
+
* - `running-headline-sink.ts` increments the polling headline's
|
|
9
|
+
* `read` / `write` counts from per-turn `toolCalls` records.
|
|
10
|
+
*
|
|
11
|
+
* Pre-4.0.3 the sink had `WRITE_TOOLS = {writeFile, write_file}` while
|
|
12
|
+
* the runner had `WRITE_TOOL_NAMES = {writeFile, write_file, editFile,
|
|
13
|
+
* edit_file}`. A worker calling `edit_file` correctly bumped the
|
|
14
|
+
* runner's counter (so `filesWrittenCount` was right on the wire) but
|
|
15
|
+
* the polling headline reported "0 write" — drift. This module
|
|
16
|
+
* eliminates that risk: both consumers import from here.
|
|
17
|
+
*/
|
|
18
|
+
/** File-reading tools. Includes search/grep tools because they READ
|
|
19
|
+
* file content even though they don't return whole files — the wire
|
|
20
|
+
* attribution treats them uniformly as "read activity". */
|
|
21
|
+
export declare const READ_TOOL_NAMES: ReadonlySet<string>;
|
|
22
|
+
/** File-writing tools. Both `writeFile` (full overwrite) and
|
|
23
|
+
* `editFile` (patch) modify the filesystem and count as writes. */
|
|
24
|
+
export declare const WRITE_TOOL_NAMES: ReadonlySet<string>;
|
|
25
|
+
/** Shell tools. Uncategorized for read/write attribution by name —
|
|
26
|
+
* the runner-shell inspects the command argument via
|
|
27
|
+
* `shellCommandWritesFs` (Gap 11) to attribute writes heuristically. */
|
|
28
|
+
export declare const SHELL_TOOL_NAMES: ReadonlySet<string>;
|
|
29
|
+
//# sourceMappingURL=tool-name-sets.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tool-name-sets.d.ts","sourceRoot":"","sources":["../../src/providers/tool-name-sets.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH;;4DAE4D;AAC5D,eAAO,MAAM,eAAe,EAAE,WAAW,CAAC,MAAM,CAK9C,CAAC;AAEH;oEACoE;AACpE,eAAO,MAAM,gBAAgB,EAAE,WAAW,CAAC,MAAM,CAG/C,CAAC;AAEH;;yEAEyE;AACzE,eAAO,MAAM,gBAAgB,EAAE,WAAW,CAAC,MAAM,CAI/C,CAAC"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Single source of truth for tool-name → category sets.
|
|
3
|
+
*
|
|
4
|
+
* Two consumers historically maintained their own copies and drifted:
|
|
5
|
+
* - `runner-shell.ts` tracks `filesRead` / `filesWritten` arrays based
|
|
6
|
+
* on tool name → these flow into wire telemetry's
|
|
7
|
+
* `filesReadCount` / `filesWrittenCount`.
|
|
8
|
+
* - `running-headline-sink.ts` increments the polling headline's
|
|
9
|
+
* `read` / `write` counts from per-turn `toolCalls` records.
|
|
10
|
+
*
|
|
11
|
+
* Pre-4.0.3 the sink had `WRITE_TOOLS = {writeFile, write_file}` while
|
|
12
|
+
* the runner had `WRITE_TOOL_NAMES = {writeFile, write_file, editFile,
|
|
13
|
+
* edit_file}`. A worker calling `edit_file` correctly bumped the
|
|
14
|
+
* runner's counter (so `filesWrittenCount` was right on the wire) but
|
|
15
|
+
* the polling headline reported "0 write" — drift. This module
|
|
16
|
+
* eliminates that risk: both consumers import from here.
|
|
17
|
+
*/
|
|
18
|
+
/** File-reading tools. Includes search/grep tools because they READ
|
|
19
|
+
* file content even though they don't return whole files — the wire
|
|
20
|
+
* attribution treats them uniformly as "read activity". */
|
|
21
|
+
export const READ_TOOL_NAMES = new Set([
|
|
22
|
+
'readFile', 'read_file',
|
|
23
|
+
'grep',
|
|
24
|
+
'glob',
|
|
25
|
+
'listFiles', 'list_files',
|
|
26
|
+
]);
|
|
27
|
+
/** File-writing tools. Both `writeFile` (full overwrite) and
|
|
28
|
+
* `editFile` (patch) modify the filesystem and count as writes. */
|
|
29
|
+
export const WRITE_TOOL_NAMES = new Set([
|
|
30
|
+
'writeFile', 'write_file',
|
|
31
|
+
'editFile', 'edit_file',
|
|
32
|
+
]);
|
|
33
|
+
/** Shell tools. Uncategorized for read/write attribution by name —
|
|
34
|
+
* the runner-shell inspects the command argument via
|
|
35
|
+
* `shellCommandWritesFs` (Gap 11) to attribute writes heuristically. */
|
|
36
|
+
export const SHELL_TOOL_NAMES = new Set([
|
|
37
|
+
'runShell', 'run_shell',
|
|
38
|
+
'shell',
|
|
39
|
+
'bash',
|
|
40
|
+
]);
|
|
41
|
+
//# sourceMappingURL=tool-name-sets.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tool-name-sets.js","sourceRoot":"","sources":["../../src/providers/tool-name-sets.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH;;4DAE4D;AAC5D,MAAM,CAAC,MAAM,eAAe,GAAwB,IAAI,GAAG,CAAC;IAC1D,UAAU,EAAE,WAAW;IACvB,MAAM;IACN,MAAM;IACN,WAAW,EAAE,YAAY;CAC1B,CAAC,CAAC;AAEH;oEACoE;AACpE,MAAM,CAAC,MAAM,gBAAgB,GAAwB,IAAI,GAAG,CAAC;IAC3D,WAAW,EAAE,YAAY;IACzB,UAAU,EAAE,WAAW;CACxB,CAAC,CAAC;AAEH;;yEAEyE;AACzE,MAAM,CAAC,MAAM,gBAAgB,GAAwB,IAAI,GAAG,CAAC;IAC3D,UAAU,EAAE,WAAW;IACvB,OAAO;IACP,MAAM;CACP,CAAC,CAAC"}
|
|
@@ -1,8 +1,18 @@
|
|
|
1
|
+
import type { RunResult, TaskSpec } from '../types.js';
|
|
2
|
+
/**
|
|
3
|
+
* 4.0.3+: signature accepts optional `runResult` and `task` so composers
|
|
4
|
+
* can read fields the structured `report` doesn't carry (e.g.,
|
|
5
|
+
* `annotatedFindings` from runResult, `filePaths` from task).
|
|
6
|
+
* Backwards-compatible at runtime — composers that ignore both keep
|
|
7
|
+
* working.
|
|
8
|
+
*/
|
|
1
9
|
export interface HeadlineTemplate {
|
|
2
10
|
compose(input: {
|
|
3
11
|
taskBrief: string;
|
|
4
12
|
report: unknown;
|
|
5
13
|
status: string;
|
|
14
|
+
runResult?: RunResult;
|
|
15
|
+
task?: TaskSpec;
|
|
6
16
|
}): string;
|
|
7
17
|
}
|
|
8
18
|
export declare class HeadlineComposer {
|
|
@@ -12,6 +22,8 @@ export declare class HeadlineComposer {
|
|
|
12
22
|
taskBrief: string;
|
|
13
23
|
report: unknown;
|
|
14
24
|
status: string;
|
|
25
|
+
runResult?: RunResult;
|
|
26
|
+
task?: TaskSpec;
|
|
15
27
|
}): string;
|
|
16
28
|
}
|
|
17
29
|
//# sourceMappingURL=headline-composer.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"headline-composer.d.ts","sourceRoot":"","sources":["../../src/reporting/headline-composer.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,gBAAgB;IAC/B,OAAO,CAAC,KAAK,EAAE;
|
|
1
|
+
{"version":3,"file":"headline-composer.d.ts","sourceRoot":"","sources":["../../src/reporting/headline-composer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAEvD;;;;;;GAMG;AACH,MAAM,WAAW,gBAAgB;IAC/B,OAAO,CAAC,KAAK,EAAE;QACb,SAAS,EAAE,MAAM,CAAC;QAClB,MAAM,EAAE,OAAO,CAAC;QAChB,MAAM,EAAE,MAAM,CAAC;QACf,SAAS,CAAC,EAAE,SAAS,CAAC;QACtB,IAAI,CAAC,EAAE,QAAQ,CAAC;KACjB,GAAG,MAAM,CAAC;CACZ;AAED,qBAAa,gBAAgB;IACf,OAAO,CAAC,QAAQ;gBAAR,QAAQ,EAAE,gBAAgB;IAE9C,OAAO,CAAC,KAAK,EAAE;QACb,SAAS,EAAE,MAAM,CAAC;QAClB,MAAM,EAAE,OAAO,CAAC;QAChB,MAAM,EAAE,MAAM,CAAC;QACf,SAAS,CAAC,EAAE,SAAS,CAAC;QACtB,IAAI,CAAC,EAAE,QAAQ,CAAC;KACjB,GAAG,MAAM;CAGX"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"headline-composer.js","sourceRoot":"","sources":["../../src/reporting/headline-composer.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"headline-composer.js","sourceRoot":"","sources":["../../src/reporting/headline-composer.ts"],"names":[],"mappings":"AAmBA,MAAM,OAAO,gBAAgB;IACP;IAApB,YAAoB,QAA0B;QAA1B,aAAQ,GAAR,QAAQ,CAAkB;IAAG,CAAC;IAElD,OAAO,CAAC,KAMP;QACC,OAAO,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IACtC,CAAC;CACF"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"audit.d.ts","sourceRoot":"","sources":["../../../src/reporting/headline-templates/audit.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;
|
|
1
|
+
{"version":3,"file":"audit.d.ts","sourceRoot":"","sources":["../../../src/reporting/headline-templates/audit.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAKhE,eAAO,MAAM,qBAAqB,EAAE,gBAkCnC,CAAC"}
|
|
@@ -1,12 +1,32 @@
|
|
|
1
1
|
import { isNotApplicable } from '../not-applicable.js';
|
|
2
|
+
import { countHighOrCritical } from '../severity.js';
|
|
2
3
|
export const auditHeadlineTemplate = {
|
|
3
|
-
compose({ report, status }) {
|
|
4
|
-
if (!report || isNotApplicable(report))
|
|
5
|
-
return `[${status}] audit completed`;
|
|
4
|
+
compose({ report, status, runResult, task }) {
|
|
6
5
|
const r = report;
|
|
7
|
-
const
|
|
8
|
-
|
|
9
|
-
|
|
6
|
+
const reportInapplicable = !r || isNotApplicable(r);
|
|
7
|
+
// Source priority for findings (4.0.3+ Gap 2 fix):
|
|
8
|
+
// 1. Structured report's `findings` (rare — only when the worker
|
|
9
|
+
// emitted proper JSON matching the audit reportSchema).
|
|
10
|
+
// 2. runResult.annotatedFindings (canonical narrative-path source,
|
|
11
|
+
// populated by the quality-chain handler when verdict='annotated').
|
|
12
|
+
// Pre-fix the composer only read (1) — when the worker emitted
|
|
13
|
+
// narrative `## Finding N:` blocks, the structuredReport fallback
|
|
14
|
+
// had no `findings` field, so the headline reported "0 findings"
|
|
15
|
+
// even when the annotator returned dozens.
|
|
16
|
+
const reportFindings = !reportInapplicable && Array.isArray(r?.findings) ? r.findings : [];
|
|
17
|
+
const annotated = runResult?.annotatedFindings ?? [];
|
|
18
|
+
const findings = reportFindings.length > 0 ? reportFindings : annotated;
|
|
19
|
+
if (findings.length === 0 && reportInapplicable) {
|
|
20
|
+
return `[${status}] audit completed`;
|
|
21
|
+
}
|
|
22
|
+
const high = countHighOrCritical(findings);
|
|
23
|
+
// Document path fallback (per round-2 audit F3): when we fall back
|
|
24
|
+
// to annotatedFindings, the structured report's documentPath is
|
|
25
|
+
// absent. Pull from the task's filePaths instead.
|
|
26
|
+
const path = (!reportInapplicable && typeof r?.documentPath === 'string' ? r.documentPath : '')
|
|
27
|
+
|| task?.filePaths?.[0]
|
|
28
|
+
|| '';
|
|
29
|
+
return `[${status}] audit ${path}: ${findings.length} findings (${high} high)`;
|
|
10
30
|
},
|
|
11
31
|
};
|
|
12
32
|
//# sourceMappingURL=audit.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"audit.js","sourceRoot":"","sources":["../../../src/reporting/headline-templates/audit.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"audit.js","sourceRoot":"","sources":["../../../src/reporting/headline-templates/audit.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AAErD,MAAM,CAAC,MAAM,qBAAqB,GAAqB;IACrD,OAAO,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,IAAI,EAAE;QACzC,MAAM,CAAC,GAAG,MAAiD,CAAC;QAC5D,MAAM,kBAAkB,GAAG,CAAC,CAAC,IAAI,eAAe,CAAC,CAAC,CAAC,CAAC;QAEpD,mDAAmD;QACnD,mEAAmE;QACnE,6DAA6D;QAC7D,qEAAqE;QACrE,yEAAyE;QACzE,+DAA+D;QAC/D,kEAAkE;QAClE,iEAAiE;QACjE,2CAA2C;QAC3C,MAAM,cAAc,GAAG,CAAC,kBAAkB,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC;QAC5F,MAAM,SAAS,GAAG,SAAS,EAAE,iBAAiB,IAAI,EAAE,CAAC;QACrD,MAAM,QAAQ,GAAG,cAAc,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,SAAS,CAAC;QAExE,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,IAAI,kBAAkB,EAAE,CAAC;YAChD,OAAO,IAAI,MAAM,mBAAmB,CAAC;QACvC,CAAC;QAED,MAAM,IAAI,GAAG,mBAAmB,CAAC,QAAyC,CAAC,CAAC;QAE5E,mEAAmE;QACnE,gEAAgE;QAChE,kDAAkD;QAClD,MAAM,IAAI,GACR,CAAC,CAAC,kBAAkB,IAAI,OAAO,CAAC,EAAE,YAAY,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAE,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,CAAC;eAC/E,IAA6C,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC;eAC9D,EAAE,CAAC;QAER,OAAO,IAAI,MAAM,WAAW,IAAI,KAAK,QAAQ,CAAC,MAAM,cAAc,IAAI,QAAQ,CAAC;IACjF,CAAC;CACF,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"delegate.d.ts","sourceRoot":"","sources":["../../../src/reporting/headline-templates/delegate.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;
|
|
1
|
+
{"version":3,"file":"delegate.d.ts","sourceRoot":"","sources":["../../../src/reporting/headline-templates/delegate.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAKhE,eAAO,MAAM,wBAAwB,EAAE,gBA+BtC,CAAC"}
|
|
@@ -1,12 +1,31 @@
|
|
|
1
1
|
import { isNotApplicable } from '../not-applicable.js';
|
|
2
|
+
import { firstSentenceOrTruncate } from '../headline-text.js';
|
|
2
3
|
export const delegateHeadlineTemplate = {
|
|
3
|
-
compose({ report, status }) {
|
|
4
|
-
if (!report || isNotApplicable(report))
|
|
5
|
-
return `[${status}] no structured report available`;
|
|
4
|
+
compose({ report, status, runResult }) {
|
|
6
5
|
const r = report;
|
|
7
|
-
const
|
|
8
|
-
|
|
9
|
-
|
|
6
|
+
const reportInapplicable = !r || isNotApplicable(r);
|
|
7
|
+
// Gap 13 fix (4.0.3+): file count source priority is
|
|
8
|
+
// `report.filesChanged` (rare — only when the worker emits proper
|
|
9
|
+
// structured output) → `runResult.filesWritten` (canonical
|
|
10
|
+
// runner-shell signal that always reflects reality, including
|
|
11
|
+
// synthetic `shell:<cmd>` entries from Gap 11). Pre-fix, the
|
|
12
|
+
// composer only read report.filesChanged and reported "(0 files)"
|
|
13
|
+
// even when the worker had successfully edited files via
|
|
14
|
+
// edit_file or run_shell.
|
|
15
|
+
const reportFiles = !reportInapplicable && Array.isArray(r?.filesChanged) ? r.filesChanged : [];
|
|
16
|
+
const runFiles = Array.isArray(runResult?.filesWritten) ? runResult.filesWritten : [];
|
|
17
|
+
const fileCount = reportFiles.length > 0 ? reportFiles.length : runFiles.length;
|
|
18
|
+
if (reportInapplicable && fileCount === 0) {
|
|
19
|
+
return `[${status}] no structured report available`;
|
|
20
|
+
}
|
|
21
|
+
// Gap 12 fix (4.0.3+): trim worker's narrative `summary` to first
|
|
22
|
+
// sentence (or 80-char truncate). Pre-fix, the entire summary —
|
|
23
|
+
// sometimes multi-sentence prose ending mid-thought — was inlined
|
|
24
|
+
// into the headline.
|
|
25
|
+
const rawSummary = !reportInapplicable && typeof r?.summary === 'string' ? r.summary : '';
|
|
26
|
+
const summary = firstSentenceOrTruncate(rawSummary);
|
|
27
|
+
const summaryClause = summary.length > 0 ? ` ${summary}` : '';
|
|
28
|
+
return `[${status}]${summaryClause} (${fileCount} file${fileCount === 1 ? '' : 's'})`;
|
|
10
29
|
},
|
|
11
30
|
};
|
|
12
31
|
//# sourceMappingURL=delegate.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"delegate.js","sourceRoot":"","sources":["../../../src/reporting/headline-templates/delegate.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"delegate.js","sourceRoot":"","sources":["../../../src/reporting/headline-templates/delegate.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,uBAAuB,EAAE,MAAM,qBAAqB,CAAC;AAE9D,MAAM,CAAC,MAAM,wBAAwB,GAAqB;IACxD,OAAO,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE;QACnC,MAAM,CAAC,GAAG,MAA8D,CAAC;QACzE,MAAM,kBAAkB,GAAG,CAAC,CAAC,IAAI,eAAe,CAAC,CAAC,CAAC,CAAC;QAEpD,qDAAqD;QACrD,kEAAkE;QAClE,2DAA2D;QAC3D,8DAA8D;QAC9D,6DAA6D;QAC7D,kEAAkE;QAClE,yDAAyD;QACzD,0BAA0B;QAC1B,MAAM,WAAW,GAAG,CAAC,kBAAkB,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,EAAE,YAAY,CAAC,CAAC,CAAC,CAAC,CAAE,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,CAAC;QACjG,MAAM,QAAQ,GAAG,KAAK,CAAC,OAAO,CAAC,SAAS,EAAE,YAAY,CAAC,CAAC,CAAC,CAAC,SAAU,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,CAAC;QACvF,MAAM,SAAS,GAAG,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC;QAEhF,IAAI,kBAAkB,IAAI,SAAS,KAAK,CAAC,EAAE,CAAC;YAC1C,OAAO,IAAI,MAAM,kCAAkC,CAAC;QACtD,CAAC;QAED,kEAAkE;QAClE,gEAAgE;QAChE,kEAAkE;QAClE,qBAAqB;QACrB,MAAM,UAAU,GAAG,CAAC,kBAAkB,IAAI,OAAO,CAAC,EAAE,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAE,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;QAC3F,MAAM,OAAO,GAAG,uBAAuB,CAAC,UAAU,CAAC,CAAC;QAEpD,MAAM,aAAa,GAAG,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC9D,OAAO,IAAI,MAAM,IAAI,aAAa,KAAK,SAAS,QAAQ,SAAS,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;IACxF,CAAC;CACF,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"execute-plan.d.ts","sourceRoot":"","sources":["../../../src/reporting/headline-templates/execute-plan.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;
|
|
1
|
+
{"version":3,"file":"execute-plan.d.ts","sourceRoot":"","sources":["../../../src/reporting/headline-templates/execute-plan.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAahE,eAAO,MAAM,2BAA2B,EAAE,gBAgBzC,CAAC"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { firstSentenceOrTruncate } from '../headline-text.js';
|
|
1
2
|
export const executePlanHeadlineTemplate = {
|
|
2
3
|
compose({ report, status }) {
|
|
3
4
|
const r = report;
|
|
@@ -6,7 +7,9 @@ export const executePlanHeadlineTemplate = {
|
|
|
6
7
|
return `execute_plan: ${completed}/${r.taskOutcomes.length} tasks complete`;
|
|
7
8
|
}
|
|
8
9
|
if (r?.summary && typeof r.summary === 'string') {
|
|
9
|
-
|
|
10
|
+
// Gap 12 fix (4.0.3+): trim worker's narrative summary so the
|
|
11
|
+
// headline doesn't dump multi-sentence prose ending mid-thought.
|
|
12
|
+
return `[${status}] execute_plan: ${firstSentenceOrTruncate(r.summary)}`;
|
|
10
13
|
}
|
|
11
14
|
return `[${status}] execute_plan`;
|
|
12
15
|
},
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"execute-plan.js","sourceRoot":"","sources":["../../../src/reporting/headline-templates/execute-plan.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"execute-plan.js","sourceRoot":"","sources":["../../../src/reporting/headline-templates/execute-plan.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,uBAAuB,EAAE,MAAM,qBAAqB,CAAC;AAY9D,MAAM,CAAC,MAAM,2BAA2B,GAAqB;IAC3D,OAAO,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE;QACxB,MAAM,CAAC,GAAG,MAA2C,CAAC;QACtD,IAAI,CAAC,EAAE,YAAY,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAClF,MAAM,SAAS,GAAG,CAAC,CAAC,YAAY,CAAC,MAAM,CACrC,CAAC,CAAc,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,WAAW,IAAI,CAAC,CAAC,MAAM,KAAK,SAAS,CACvE,CAAC,MAAM,CAAC;YACT,OAAO,iBAAiB,SAAS,IAAI,CAAC,CAAC,YAAY,CAAC,MAAM,iBAAiB,CAAC;QAC9E,CAAC;QACD,IAAI,CAAC,EAAE,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,KAAK,QAAQ,EAAE,CAAC;YAChD,8DAA8D;YAC9D,iEAAiE;YACjE,OAAO,IAAI,MAAM,mBAAmB,uBAAuB,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC;QAC3E,CAAC;QACD,OAAO,IAAI,MAAM,gBAAgB,CAAC;IACpC,CAAC;CACF,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"review.d.ts","sourceRoot":"","sources":["../../../src/reporting/headline-templates/review.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;
|
|
1
|
+
{"version":3,"file":"review.d.ts","sourceRoot":"","sources":["../../../src/reporting/headline-templates/review.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAKhE,eAAO,MAAM,sBAAsB,EAAE,gBAuBpC,CAAC"}
|
|
@@ -1,15 +1,22 @@
|
|
|
1
1
|
import { isNotApplicable } from '../not-applicable.js';
|
|
2
|
+
import { countHighOrCritical } from '../severity.js';
|
|
2
3
|
export const reviewHeadlineTemplate = {
|
|
3
|
-
compose({ report, status, taskBrief }) {
|
|
4
|
-
if (isNotApplicable(report)) {
|
|
5
|
-
return `[${status}] review: ${taskBrief}`;
|
|
6
|
-
}
|
|
4
|
+
compose({ report, status, taskBrief, runResult, task }) {
|
|
7
5
|
const r = report;
|
|
8
|
-
|
|
6
|
+
const reportInapplicable = !r || isNotApplicable(r);
|
|
7
|
+
// 4.0.3+ Gap 2 fix: prefer report.findings (structured), fall back
|
|
8
|
+
// to runResult.annotatedFindings (narrative-path canonical source).
|
|
9
|
+
const reportFindings = !reportInapplicable && Array.isArray(r?.findings) ? r.findings : [];
|
|
10
|
+
const annotated = runResult?.annotatedFindings ?? [];
|
|
11
|
+
const findings = reportFindings.length > 0 ? reportFindings : annotated;
|
|
12
|
+
if (findings.length === 0) {
|
|
9
13
|
return `[${status}] review: ${taskBrief}`;
|
|
10
14
|
}
|
|
11
|
-
const blocking =
|
|
12
|
-
|
|
15
|
+
const blocking = countHighOrCritical(findings);
|
|
16
|
+
const path = (!reportInapplicable && typeof r?.filePath === 'string' ? r.filePath : '')
|
|
17
|
+
|| task?.filePaths?.[0]
|
|
18
|
+
|| '';
|
|
19
|
+
return `[${status}] review ${path}: ${findings.length} findings (${blocking} blocking)`;
|
|
13
20
|
},
|
|
14
21
|
};
|
|
15
22
|
//# sourceMappingURL=review.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"review.js","sourceRoot":"","sources":["../../../src/reporting/headline-templates/review.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"review.js","sourceRoot":"","sources":["../../../src/reporting/headline-templates/review.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AAErD,MAAM,CAAC,MAAM,sBAAsB,GAAqB;IACtD,OAAO,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,IAAI,EAAE;QACpD,MAAM,CAAC,GAAG,MAAkD,CAAC;QAC7D,MAAM,kBAAkB,GAAG,CAAC,CAAC,IAAI,eAAe,CAAC,CAAC,CAAC,CAAC;QAEpD,mEAAmE;QACnE,oEAAoE;QACpE,MAAM,cAAc,GAAG,CAAC,kBAAkB,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC;QAC5F,MAAM,SAAS,GAAG,SAAS,EAAE,iBAAiB,IAAI,EAAE,CAAC;QACrD,MAAM,QAAQ,GAAG,cAAc,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,SAAS,CAAC;QAExE,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC1B,OAAO,IAAI,MAAM,aAAa,SAAS,EAAE,CAAC;QAC5C,CAAC;QAED,MAAM,QAAQ,GAAG,mBAAmB,CAAC,QAAyC,CAAC,CAAC;QAChF,MAAM,IAAI,GACR,CAAC,CAAC,kBAAkB,IAAI,OAAO,CAAC,EAAE,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC;eACvE,IAA6C,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC;eAC9D,EAAE,CAAC;QAER,OAAO,IAAI,MAAM,YAAY,IAAI,KAAK,QAAQ,CAAC,MAAM,cAAc,QAAQ,YAAY,CAAC;IAC1F,CAAC;CACF,CAAC"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Helpers for headline text shaping.
|
|
3
|
+
*
|
|
4
|
+
* Headlines are operator-facing single-line strings that appear in
|
|
5
|
+
* polling output and the terminal envelope. They MUST stay short and
|
|
6
|
+
* structured — workers' free-form `summary` fields can be paragraphs
|
|
7
|
+
* long and end mid-sentence (the v4.0.3 Gap 12 case: "...now ends
|
|
8
|
+
* with:" cut off because the worker meant to put a code excerpt
|
|
9
|
+
* after the colon).
|
|
10
|
+
*
|
|
11
|
+
* `firstSentenceOrTruncate` is the single helper composers use to
|
|
12
|
+
* sanitize narrative text for headline display.
|
|
13
|
+
*/
|
|
14
|
+
/**
|
|
15
|
+
* Return the first sentence of `s`, or a hard-truncated form with
|
|
16
|
+
* trailing ellipsis when no sentence boundary exists in the first
|
|
17
|
+
* `max` characters.
|
|
18
|
+
*
|
|
19
|
+
* Why first-sentence? Worker summaries follow a "headline sentence,
|
|
20
|
+
* then details" pattern; the first sentence carries the operator-
|
|
21
|
+
* relevant signal. Truncating mid-sentence (the prior bug) loses
|
|
22
|
+
* that signal AND looks broken.
|
|
23
|
+
*
|
|
24
|
+
* @param s raw text (may be empty / whitespace-only)
|
|
25
|
+
* @param max hard truncation cap when no sentence break is found.
|
|
26
|
+
* 80 keeps headlines well under the typical 120-char
|
|
27
|
+
* terminal-line target after the bracket prefix +
|
|
28
|
+
* file-count suffix are added.
|
|
29
|
+
*/
|
|
30
|
+
export declare function firstSentenceOrTruncate(s: string, max?: number): string;
|
|
31
|
+
//# sourceMappingURL=headline-text.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"headline-text.d.ts","sourceRoot":"","sources":["../../src/reporting/headline-text.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAIH;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,uBAAuB,CAAC,CAAC,EAAE,MAAM,EAAE,GAAG,SAAK,GAAG,MAAM,CAOnE"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Helpers for headline text shaping.
|
|
3
|
+
*
|
|
4
|
+
* Headlines are operator-facing single-line strings that appear in
|
|
5
|
+
* polling output and the terminal envelope. They MUST stay short and
|
|
6
|
+
* structured — workers' free-form `summary` fields can be paragraphs
|
|
7
|
+
* long and end mid-sentence (the v4.0.3 Gap 12 case: "...now ends
|
|
8
|
+
* with:" cut off because the worker meant to put a code excerpt
|
|
9
|
+
* after the colon).
|
|
10
|
+
*
|
|
11
|
+
* `firstSentenceOrTruncate` is the single helper composers use to
|
|
12
|
+
* sanitize narrative text for headline display.
|
|
13
|
+
*/
|
|
14
|
+
const SENTENCE_END = /^([^.!?\n]{1,80}[.!?])(\s|$)/;
|
|
15
|
+
/**
|
|
16
|
+
* Return the first sentence of `s`, or a hard-truncated form with
|
|
17
|
+
* trailing ellipsis when no sentence boundary exists in the first
|
|
18
|
+
* `max` characters.
|
|
19
|
+
*
|
|
20
|
+
* Why first-sentence? Worker summaries follow a "headline sentence,
|
|
21
|
+
* then details" pattern; the first sentence carries the operator-
|
|
22
|
+
* relevant signal. Truncating mid-sentence (the prior bug) loses
|
|
23
|
+
* that signal AND looks broken.
|
|
24
|
+
*
|
|
25
|
+
* @param s raw text (may be empty / whitespace-only)
|
|
26
|
+
* @param max hard truncation cap when no sentence break is found.
|
|
27
|
+
* 80 keeps headlines well under the typical 120-char
|
|
28
|
+
* terminal-line target after the bracket prefix +
|
|
29
|
+
* file-count suffix are added.
|
|
30
|
+
*/
|
|
31
|
+
export function firstSentenceOrTruncate(s, max = 80) {
|
|
32
|
+
if (!s || typeof s !== 'string')
|
|
33
|
+
return '';
|
|
34
|
+
const trimmed = s.trim();
|
|
35
|
+
if (trimmed.length === 0)
|
|
36
|
+
return '';
|
|
37
|
+
const m = trimmed.match(SENTENCE_END);
|
|
38
|
+
if (m)
|
|
39
|
+
return m[1];
|
|
40
|
+
return trimmed.length > max ? trimmed.slice(0, max - 1) + '…' : trimmed;
|
|
41
|
+
}
|
|
42
|
+
//# sourceMappingURL=headline-text.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"headline-text.js","sourceRoot":"","sources":["../../src/reporting/headline-text.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,MAAM,YAAY,GAAG,8BAA8B,CAAC;AAEpD;;;;;;;;;;;;;;;GAeG;AACH,MAAM,UAAU,uBAAuB,CAAC,CAAS,EAAE,GAAG,GAAG,EAAE;IACzD,IAAI,CAAC,CAAC,IAAI,OAAO,CAAC,KAAK,QAAQ;QAAE,OAAO,EAAE,CAAC;IAC3C,MAAM,OAAO,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;IACzB,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IACpC,MAAM,CAAC,GAAG,OAAO,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;IACtC,IAAI,CAAC;QAAE,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;IACnB,OAAO,OAAO,CAAC,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC;AAC1E,CAAC"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Severity helpers shared across headline composers and telemetry
|
|
3
|
+
* event-builder. Per the wire-telemetry-gaps plan (Gap 2 + round-2 F1):
|
|
4
|
+
* THREE distinct helpers, NOT one — conflating headline counting with
|
|
5
|
+
* telemetry bucketing would corrupt the wire's findings_critical /
|
|
6
|
+
* findings_high columns.
|
|
7
|
+
*/
|
|
8
|
+
export type FindingSeverity = 'critical' | 'high' | 'medium' | 'low';
|
|
9
|
+
/**
|
|
10
|
+
* Normalize a raw severity string to the canonical lowercase enum.
|
|
11
|
+
* Returns null for unknown / unparseable values.
|
|
12
|
+
*
|
|
13
|
+
* Used by both headline counting and telemetry bucketing — single
|
|
14
|
+
* source of truth for "what's the severity of this finding".
|
|
15
|
+
*/
|
|
16
|
+
export declare function normalizeSeverity(raw: unknown): FindingSeverity | null;
|
|
17
|
+
/**
|
|
18
|
+
* Headline-only helper. Counts findings whose normalized severity is
|
|
19
|
+
* 'high' OR 'critical'. Used by audit + review headline composers to
|
|
20
|
+
* surface the "(N high)" annotation.
|
|
21
|
+
*
|
|
22
|
+
* MUST NOT be used for telemetry bucketing — see
|
|
23
|
+
* `bucketFindingsBySeverity` for that.
|
|
24
|
+
*/
|
|
25
|
+
export declare function countHighOrCritical(findings: ReadonlyArray<{
|
|
26
|
+
severity?: unknown;
|
|
27
|
+
}>): number;
|
|
28
|
+
/**
|
|
29
|
+
* Telemetry-only helper. Returns separate per-severity buckets:
|
|
30
|
+
* `{ critical, high, medium, low }`. Used by event-builder so the
|
|
31
|
+
* wire's findings_critical / findings_high / findings_medium /
|
|
32
|
+
* findings_low DB columns each carry exact counts.
|
|
33
|
+
*
|
|
34
|
+
* MUST NOT be replaced by countHighOrCritical — that conflates
|
|
35
|
+
* critical and high into one count.
|
|
36
|
+
*/
|
|
37
|
+
export declare function bucketFindingsBySeverity(findings: ReadonlyArray<{
|
|
38
|
+
severity?: unknown;
|
|
39
|
+
}>): Record<FindingSeverity, number>;
|
|
40
|
+
//# sourceMappingURL=severity.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"severity.d.ts","sourceRoot":"","sources":["../../src/reporting/severity.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,MAAM,MAAM,eAAe,GAAG,UAAU,GAAG,MAAM,GAAG,QAAQ,GAAG,KAAK,CAAC;AAIrE;;;;;;GAMG;AACH,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,OAAO,GAAG,eAAe,GAAG,IAAI,CAItE;AAED;;;;;;;GAOG;AACH,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,aAAa,CAAC;IAAE,QAAQ,CAAC,EAAE,OAAO,CAAA;CAAE,CAAC,GAAG,MAAM,CAO3F;AAED;;;;;;;;GAQG;AACH,wBAAgB,wBAAwB,CACtC,QAAQ,EAAE,aAAa,CAAC;IAAE,QAAQ,CAAC,EAAE,OAAO,CAAA;CAAE,CAAC,GAC9C,MAAM,CAAC,eAAe,EAAE,MAAM,CAAC,CAOjC"}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Severity helpers shared across headline composers and telemetry
|
|
3
|
+
* event-builder. Per the wire-telemetry-gaps plan (Gap 2 + round-2 F1):
|
|
4
|
+
* THREE distinct helpers, NOT one — conflating headline counting with
|
|
5
|
+
* telemetry bucketing would corrupt the wire's findings_critical /
|
|
6
|
+
* findings_high columns.
|
|
7
|
+
*/
|
|
8
|
+
const VALID = new Set(['critical', 'high', 'medium', 'low']);
|
|
9
|
+
/**
|
|
10
|
+
* Normalize a raw severity string to the canonical lowercase enum.
|
|
11
|
+
* Returns null for unknown / unparseable values.
|
|
12
|
+
*
|
|
13
|
+
* Used by both headline counting and telemetry bucketing — single
|
|
14
|
+
* source of truth for "what's the severity of this finding".
|
|
15
|
+
*/
|
|
16
|
+
export function normalizeSeverity(raw) {
|
|
17
|
+
if (typeof raw !== 'string')
|
|
18
|
+
return null;
|
|
19
|
+
const lc = raw.trim().toLowerCase();
|
|
20
|
+
return VALID.has(lc) ? lc : null;
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Headline-only helper. Counts findings whose normalized severity is
|
|
24
|
+
* 'high' OR 'critical'. Used by audit + review headline composers to
|
|
25
|
+
* surface the "(N high)" annotation.
|
|
26
|
+
*
|
|
27
|
+
* MUST NOT be used for telemetry bucketing — see
|
|
28
|
+
* `bucketFindingsBySeverity` for that.
|
|
29
|
+
*/
|
|
30
|
+
export function countHighOrCritical(findings) {
|
|
31
|
+
let n = 0;
|
|
32
|
+
for (const f of findings) {
|
|
33
|
+
const s = normalizeSeverity(f.severity);
|
|
34
|
+
if (s === 'high' || s === 'critical')
|
|
35
|
+
n += 1;
|
|
36
|
+
}
|
|
37
|
+
return n;
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Telemetry-only helper. Returns separate per-severity buckets:
|
|
41
|
+
* `{ critical, high, medium, low }`. Used by event-builder so the
|
|
42
|
+
* wire's findings_critical / findings_high / findings_medium /
|
|
43
|
+
* findings_low DB columns each carry exact counts.
|
|
44
|
+
*
|
|
45
|
+
* MUST NOT be replaced by countHighOrCritical — that conflates
|
|
46
|
+
* critical and high into one count.
|
|
47
|
+
*/
|
|
48
|
+
export function bucketFindingsBySeverity(findings) {
|
|
49
|
+
const buckets = { critical: 0, high: 0, medium: 0, low: 0 };
|
|
50
|
+
for (const f of findings) {
|
|
51
|
+
const s = normalizeSeverity(f.severity);
|
|
52
|
+
if (s)
|
|
53
|
+
buckets[s] += 1;
|
|
54
|
+
}
|
|
55
|
+
return buckets;
|
|
56
|
+
}
|
|
57
|
+
//# sourceMappingURL=severity.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"severity.js","sourceRoot":"","sources":["../../src/reporting/severity.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAIH,MAAM,KAAK,GAAG,IAAI,GAAG,CAAkB,CAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAC,CAAC;AAE9E;;;;;;GAMG;AACH,MAAM,UAAU,iBAAiB,CAAC,GAAY;IAC5C,IAAI,OAAO,GAAG,KAAK,QAAQ;QAAE,OAAO,IAAI,CAAC;IACzC,MAAM,EAAE,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC,WAAW,EAAqB,CAAC;IACvD,OAAO,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;AACnC,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,mBAAmB,CAAC,QAA+C;IACjF,IAAI,CAAC,GAAG,CAAC,CAAC;IACV,KAAK,MAAM,CAAC,IAAI,QAAQ,EAAE,CAAC;QACzB,MAAM,CAAC,GAAG,iBAAiB,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;QACxC,IAAI,CAAC,KAAK,MAAM,IAAI,CAAC,KAAK,UAAU;YAAE,CAAC,IAAI,CAAC,CAAC;IAC/C,CAAC;IACD,OAAO,CAAC,CAAC;AACX,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,wBAAwB,CACtC,QAA+C;IAE/C,MAAM,OAAO,GAAoC,EAAE,QAAQ,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC;IAC7F,KAAK,MAAM,CAAC,IAAI,QAAQ,EAAE,CAAC;QACzB,MAAM,CAAC,GAAG,iBAAiB,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;QACxC,IAAI,CAAC;YAAE,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;IACzB,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC"}
|
|
@@ -2,13 +2,13 @@ import { z } from 'zod';
|
|
|
2
2
|
export declare const structuredReportSuffix: string;
|
|
3
3
|
export declare const commitSchema: z.ZodObject<{
|
|
4
4
|
type: z.ZodEnum<{
|
|
5
|
-
feat: "feat";
|
|
6
5
|
fix: "fix";
|
|
7
|
-
|
|
6
|
+
style: "style";
|
|
8
7
|
test: "test";
|
|
8
|
+
feat: "feat";
|
|
9
|
+
refactor: "refactor";
|
|
9
10
|
docs: "docs";
|
|
10
11
|
chore: "chore";
|
|
11
|
-
style: "style";
|
|
12
12
|
}>;
|
|
13
13
|
scope: z.ZodOptional<z.ZodString>;
|
|
14
14
|
subject: z.ZodString;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"explore-orchestrator.d.ts","sourceRoot":"","sources":["../../src/research/explore-orchestrator.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,mCAAmC,CAAC;AAC1E,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uCAAuC,CAAC;AAC5E,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,4BAA4B,CAAC;AAExD,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,YAAY,CAAC;AAOzD,OAAO,EAEL,KAAK,oBAAoB,EAC1B,MAAM,2CAA2C,CAAC;AASnD,MAAM,WAAW,wBAAwB;IACvC,KAAK,EAAE,KAAK,CAAC;IACb,qBAAqB,EAAE,oBAAoB,EAAE,CAAC;IAC9C,oBAAoB,EAAE,MAAM,EAAE,CAAC;IAC/B,wBAAwB,EAAE,MAAM,EAAE,CAAC;IACnC,aAAa,CAAC,EAAE,sBAAsB,EAAE,CAAC;CAC1C;
|
|
1
|
+
{"version":3,"file":"explore-orchestrator.d.ts","sourceRoot":"","sources":["../../src/research/explore-orchestrator.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,mCAAmC,CAAC;AAC1E,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uCAAuC,CAAC;AAC5E,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,4BAA4B,CAAC;AAExD,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,YAAY,CAAC;AAOzD,OAAO,EAEL,KAAK,oBAAoB,EAC1B,MAAM,2CAA2C,CAAC;AASnD,MAAM,WAAW,wBAAwB;IACvC,KAAK,EAAE,KAAK,CAAC;IACb,qBAAqB,EAAE,oBAAoB,EAAE,CAAC;IAC9C,oBAAoB,EAAE,MAAM,EAAE,CAAC;IAC/B,wBAAwB,EAAE,MAAM,EAAE,CAAC;IACnC,aAAa,CAAC,EAAE,sBAAsB,EAAE,CAAC;CAC1C;AAkFD,wBAAsB,cAAc,CAClC,GAAG,EAAE,gBAAgB,EACrB,IAAI,EAAE,wBAAwB,GAC7B,OAAO,CAAC,cAAc,CAAC,CA6UzB"}
|