@sentry/warden 0.9.0 → 0.10.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.
Files changed (123) hide show
  1. package/README.md +4 -0
  2. package/conductor.json +8 -0
  3. package/dist/cli/fix.d.ts +3 -1
  4. package/dist/cli/fix.d.ts.map +1 -1
  5. package/dist/cli/fix.js +91 -59
  6. package/dist/cli/fix.js.map +1 -1
  7. package/dist/cli/main.d.ts.map +1 -1
  8. package/dist/cli/main.js +27 -8
  9. package/dist/cli/main.js.map +1 -1
  10. package/dist/cli/output/ink-runner.d.ts +6 -17
  11. package/dist/cli/output/ink-runner.d.ts.map +1 -1
  12. package/dist/cli/output/ink-runner.js +124 -115
  13. package/dist/cli/output/ink-runner.js.map +1 -1
  14. package/dist/cli/output/jsonl.d.ts +7 -1
  15. package/dist/cli/output/jsonl.d.ts.map +1 -1
  16. package/dist/cli/output/jsonl.js +4 -1
  17. package/dist/cli/output/jsonl.js.map +1 -1
  18. package/dist/cli/output/reporter.d.ts +7 -3
  19. package/dist/cli/output/reporter.d.ts.map +1 -1
  20. package/dist/cli/output/reporter.js +15 -1
  21. package/dist/cli/output/reporter.js.map +1 -1
  22. package/dist/cli/output/tasks.d.ts +10 -1
  23. package/dist/cli/output/tasks.d.ts.map +1 -1
  24. package/dist/cli/output/tasks.js +127 -28
  25. package/dist/cli/output/tasks.js.map +1 -1
  26. package/dist/cli/terminal.d.ts +7 -1
  27. package/dist/cli/terminal.d.ts.map +1 -1
  28. package/dist/cli/terminal.js +31 -9
  29. package/dist/cli/terminal.js.map +1 -1
  30. package/dist/config/schema.d.ts +0 -1
  31. package/dist/config/schema.d.ts.map +1 -1
  32. package/dist/config/schema.js +1 -2
  33. package/dist/config/schema.js.map +1 -1
  34. package/dist/evals/index.d.ts +22 -0
  35. package/dist/evals/index.d.ts.map +1 -0
  36. package/dist/evals/index.js +92 -0
  37. package/dist/evals/index.js.map +1 -0
  38. package/dist/evals/judge.d.ts +12 -0
  39. package/dist/evals/judge.d.ts.map +1 -0
  40. package/dist/evals/judge.js +171 -0
  41. package/dist/evals/judge.js.map +1 -0
  42. package/dist/evals/runner.d.ts +18 -0
  43. package/dist/evals/runner.d.ts.map +1 -0
  44. package/dist/evals/runner.js +133 -0
  45. package/dist/evals/runner.js.map +1 -0
  46. package/dist/{examples → evals}/setup.d.ts.map +1 -1
  47. package/dist/evals/setup.js.map +1 -0
  48. package/dist/evals/types.d.ts +166 -0
  49. package/dist/evals/types.d.ts.map +1 -0
  50. package/dist/evals/types.js +134 -0
  51. package/dist/evals/types.js.map +1 -0
  52. package/dist/output/dedup.d.ts.map +1 -1
  53. package/dist/output/dedup.js +29 -57
  54. package/dist/output/dedup.js.map +1 -1
  55. package/dist/output/github-checks.d.ts.map +1 -1
  56. package/dist/output/github-checks.js +37 -8
  57. package/dist/output/github-checks.js.map +1 -1
  58. package/dist/output/renderer.d.ts.map +1 -1
  59. package/dist/output/renderer.js +16 -1
  60. package/dist/output/renderer.js.map +1 -1
  61. package/dist/output/stale.d.ts +1 -0
  62. package/dist/output/stale.d.ts.map +1 -1
  63. package/dist/output/stale.js +14 -8
  64. package/dist/output/stale.js.map +1 -1
  65. package/dist/sdk/analyze.d.ts +11 -0
  66. package/dist/sdk/analyze.d.ts.map +1 -1
  67. package/dist/sdk/analyze.js +93 -17
  68. package/dist/sdk/analyze.js.map +1 -1
  69. package/dist/sdk/extract.d.ts +54 -0
  70. package/dist/sdk/extract.d.ts.map +1 -1
  71. package/dist/sdk/extract.js +175 -2
  72. package/dist/sdk/extract.js.map +1 -1
  73. package/dist/sdk/model-pricing.json +6 -12
  74. package/dist/sdk/prompt.d.ts.map +1 -1
  75. package/dist/sdk/prompt.js +4 -1
  76. package/dist/sdk/prompt.js.map +1 -1
  77. package/dist/sdk/runner.d.ts +2 -2
  78. package/dist/sdk/runner.d.ts.map +1 -1
  79. package/dist/sdk/runner.js +1 -1
  80. package/dist/sdk/runner.js.map +1 -1
  81. package/dist/sdk/types.d.ts +9 -3
  82. package/dist/sdk/types.d.ts.map +1 -1
  83. package/dist/sdk/types.js +1 -1
  84. package/dist/sdk/types.js.map +1 -1
  85. package/dist/sentry.d.ts +15 -0
  86. package/dist/sentry.d.ts.map +1 -1
  87. package/dist/sentry.js +40 -1
  88. package/dist/sentry.js.map +1 -1
  89. package/dist/types/index.d.ts +19 -0
  90. package/dist/types/index.d.ts.map +1 -1
  91. package/dist/types/index.js +25 -0
  92. package/dist/types/index.js.map +1 -1
  93. package/dist/utils/async.d.ts +14 -0
  94. package/dist/utils/async.d.ts.map +1 -1
  95. package/dist/utils/async.js +33 -0
  96. package/dist/utils/async.js.map +1 -1
  97. package/dist/utils/index.d.ts +1 -1
  98. package/dist/utils/index.d.ts.map +1 -1
  99. package/dist/utils/index.js +1 -1
  100. package/dist/utils/index.js.map +1 -1
  101. package/evals/README.md +154 -0
  102. package/evals/bug-detection.yaml +56 -0
  103. package/evals/fixtures/ignores-style-issues/utils.ts +48 -0
  104. package/evals/fixtures/missing-await/cache.ts +45 -0
  105. package/evals/fixtures/null-property-access/handler.ts +36 -0
  106. package/evals/fixtures/off-by-one/paginator.ts +38 -0
  107. package/evals/fixtures/sql-injection/api.ts +59 -0
  108. package/evals/fixtures/stale-closure/counter.tsx +33 -0
  109. package/evals/fixtures/wrong-comparison/validator.ts +52 -0
  110. package/evals/fixtures/xss-reflected/server.ts +55 -0
  111. package/evals/precision.yaml +15 -0
  112. package/evals/security-scanning.yaml +24 -0
  113. package/evals/skills/bug-detection.md +33 -0
  114. package/evals/skills/precision.md +18 -0
  115. package/evals/skills/security-scanning.md +32 -0
  116. package/package.json +4 -2
  117. package/dist/examples/index.d.ts +0 -50
  118. package/dist/examples/index.d.ts.map +0 -1
  119. package/dist/examples/index.js +0 -104
  120. package/dist/examples/index.js.map +0 -1
  121. package/dist/examples/setup.js.map +0 -1
  122. /package/dist/{examples → evals}/setup.d.ts +0 -0
  123. /package/dist/{examples → evals}/setup.js +0 -0
@@ -2,31 +2,21 @@ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  /**
3
3
  * Ink-based skill runner with real-time progress display.
4
4
  *
5
- * ## Ink Rendering Constraints
5
+ * While skills run, the dynamic Ink area shows running skills and active files.
6
+ * After Ink unmounts, the full per-skill + per-file breakdown is printed to
7
+ * stderr, followed by the normal findings report.
6
8
  *
7
- * This file uses Ink (React for CLIs) which has specific constraints that,
8
- * if violated, cause duplicate output lines or corrupted display:
9
+ * UI updates are batched via setImmediate() to prevent rapid consecutive
10
+ * rerender() calls from producing duplicate output lines.
9
11
  *
10
- * 1. **Single Static component**: Ink's Static uses `position: 'absolute'`.
11
- * Multiple Static components cause layout conflicts. We print the header
12
- * before Ink starts to avoid needing a second Static.
13
- *
14
- * 2. **Stable item references**: Static tracks items by reference equality.
15
- * Never wrap items in new objects (e.g., `{ type: 'skill', skill }`) on
16
- * each render. Pass the original objects directly.
17
- *
18
- * 3. **Batched updates**: Rapid consecutive rerender() calls cause duplicate
19
- * output. The updateUI() function batches updates using setImmediate().
20
- *
21
- * 4. **No direct writes to stderr**: Writing to process.stderr while Ink is
22
- * running corrupts cursor tracking. The onLargePrompt/onPromptSize callbacks
23
- * are exceptions that may cause minor display glitches in edge cases.
12
+ * Reporter spec: specs/reporters.md
24
13
  */
25
14
  import { useState, useEffect } from 'react';
26
- import { render, Box, Text, Static } from 'ink';
15
+ import { render, Box, Text } from 'ink';
16
+ import chalk from 'chalk';
27
17
  import { runSkillTask, } from './tasks.js';
28
18
  import { formatDuration, formatCost, truncate, countBySeverity, formatSeverityDot } from './formatters.js';
29
- import { runPool } from '../../utils/index.js';
19
+ import { runPool, Semaphore } from '../../utils/index.js';
30
20
  import { Verbosity } from './verbosity.js';
31
21
  import { ICON_CHECK, ICON_SKIPPED, ICON_PENDING, ICON_ERROR, SPINNER_FRAMES } from './icons.js';
32
22
  import figures from 'figures';
@@ -41,49 +31,46 @@ function Spinner() {
41
31
  return _jsx(Text, { color: "yellow", children: SPINNER_FRAMES[frame] });
42
32
  }
43
33
  function FileProgress({ file }) {
44
- if (file.status === 'pending')
45
- return null;
46
34
  const filename = truncate(file.filename, 50);
47
- if (file.status === 'skipped') {
48
- return (_jsxs(Box, { children: [_jsx(Text, { color: "yellow", children: ICON_SKIPPED }), _jsxs(Text, { children: [" ", filename] }), _jsx(Text, { dimColor: true, children: " [skipped]" })] }));
49
- }
50
- if (file.status === 'done') {
51
- const counts = countBySeverity(file.findings);
52
- const hasFindings = file.findings.length > 0;
53
- return (_jsxs(Box, { children: [_jsx(Text, { color: "green", children: ICON_CHECK }), _jsxs(Text, { children: [" ", filename] }), _jsxs(Text, { dimColor: true, children: [" [", file.totalHunks, "/", file.totalHunks, "]"] }), hasFindings && (_jsxs(Text, { children: [' ', counts.critical > 0 && _jsxs(Text, { children: [formatSeverityDot('critical'), " ", counts.critical, " "] }), counts.high > 0 && _jsxs(Text, { children: [formatSeverityDot('high'), " ", counts.high, " "] }), counts.medium > 0 && _jsxs(Text, { children: [formatSeverityDot('medium'), " ", counts.medium, " "] }), counts.low > 0 && _jsxs(Text, { children: [formatSeverityDot('low'), " ", counts.low, " "] }), counts.info > 0 && _jsxs(Text, { children: [formatSeverityDot('info'), " ", counts.info] })] })), file.durationMs !== undefined && _jsxs(Text, { dimColor: true, children: [" ", formatDuration(file.durationMs)] }), file.usage !== undefined && _jsxs(Text, { dimColor: true, children: [" ", formatCost(file.usage.costUSD)] })] }));
54
- }
55
- // Running
56
35
  return (_jsxs(Box, { children: [_jsx(Spinner, {}), _jsxs(Text, { children: [" ", filename, " [", file.currentHunk, "/", file.totalHunks, "]"] })] }));
57
36
  }
37
+ function RunningSkill({ skill }) {
38
+ const activeFiles = skill.files.filter((f) => f.status === 'running');
39
+ const doneCount = skill.files.filter((f) => f.status === 'done' || f.status === 'skipped').length;
40
+ const totalCount = skill.files.length;
41
+ const findingCount = skill.files.reduce((sum, f) => sum + f.findings.length, 0);
42
+ const cost = skill.files.reduce((sum, f) => sum + (f.usage?.costUSD ?? 0), 0);
43
+ return (_jsxs(Box, { flexDirection: "column", children: [_jsxs(Box, { children: [_jsx(Spinner, {}), _jsxs(Text, { children: [" ", skill.displayName] }), totalCount > 0 && _jsxs(Text, { dimColor: true, children: [" [", doneCount, "/", totalCount, " files]"] }), findingCount > 0 && _jsxs(Text, { children: [" ", findingCount, " ", findingCount === 1 ? 'finding' : 'findings'] }), cost > 0 && _jsxs(Text, { dimColor: true, children: [" ", formatCost(cost)] })] }), activeFiles.map((file) => (_jsx(Box, { marginLeft: 2, children: _jsx(FileProgress, { file: file }) }, file.filename)))] }));
44
+ }
58
45
  function CompletedSkill({ skill }) {
59
- const duration = skill.durationMs ? formatDuration(skill.durationMs) : '';
60
46
  if (skill.status === 'skipped') {
61
- return (_jsxs(Box, { children: [_jsx(Text, { color: "yellow", children: ICON_SKIPPED }), _jsxs(Text, { children: [" ", skill.displayName] }), _jsx(Text, { dimColor: true, children: " [skipped]" })] }));
47
+ return (_jsxs(Text, { children: [_jsx(Text, { color: "yellow", children: ICON_SKIPPED }), " ", skill.displayName, " ", _jsx(Text, { dimColor: true, children: "[skipped]" })] }));
62
48
  }
49
+ const findingCount = skill.findings.length;
50
+ const cost = skill.usage?.costUSD;
51
+ const duration = skill.durationMs ? formatDuration(skill.durationMs) : undefined;
63
52
  if (skill.status === 'error') {
64
- return (_jsxs(Box, { flexDirection: "column", children: [_jsxs(Box, { children: [_jsx(Text, { color: "red", children: ICON_ERROR }), _jsxs(Text, { children: [" ", skill.displayName] }), duration && _jsxs(Text, { dimColor: true, children: [" [", duration, "]"] })] }), skill.error && _jsxs(Text, { color: "red", children: [" Error: ", skill.error] })] }));
53
+ return (_jsxs(Text, { children: [_jsx(Text, { color: "red", children: ICON_ERROR }), " ", skill.displayName, duration && _jsxs(Text, { dimColor: true, children: [" [", duration, "]"] })] }));
65
54
  }
66
- return (_jsxs(Box, { children: [_jsx(Text, { color: "green", children: ICON_CHECK }), _jsxs(Text, { children: [" ", skill.displayName] }), duration && _jsxs(Text, { dimColor: true, children: [" [", duration, "]"] })] }));
55
+ return (_jsxs(Text, { children: [_jsx(Text, { color: "green", children: ICON_CHECK }), " ", skill.displayName, duration && _jsxs(Text, { dimColor: true, children: [" [", duration, "]"] }), findingCount > 0 && _jsxs(Text, { children: [" ", findingCount, " ", findingCount === 1 ? 'finding' : 'findings'] }), cost !== undefined && cost > 0 && _jsxs(Text, { dimColor: true, children: [" ", formatCost(cost)] })] }));
67
56
  }
68
- function RunningSkill({ skill }) {
69
- const visibleFiles = skill.files.filter((f) => f.status !== 'pending');
70
- return (_jsxs(Box, { flexDirection: "column", children: [_jsxs(Box, { children: [_jsx(Spinner, {}), _jsxs(Text, { children: [" ", skill.displayName] })] }), visibleFiles.map((file) => (_jsx(Box, { marginLeft: 2, children: _jsx(FileProgress, { file: file }) }, file.filename)))] }));
71
- }
72
- /**
73
- * Renders the skill execution UI.
74
- *
75
- * IMPORTANT: Ink's Static component tracks items by reference equality.
76
- * Items passed to Static must have stable references across renders.
77
- * Creating new wrapper objects causes Static to mishandle its internal
78
- * state, resulting in duplicate output lines.
79
- *
80
- * We use a SINGLE Static component to avoid layout conflicts from multiple
81
- * absolutely-positioned Static containers.
82
- */
83
- function SkillRunner({ skills, completedItems, interrupted }) {
57
+ function SkillRunner({ skills, interrupted }) {
58
+ const completed = skills.filter((s) => s.status === 'done' || s.status === 'skipped' || s.status === 'error');
84
59
  const running = skills.filter((s) => s.status === 'running');
85
60
  const pending = skills.filter((s) => s.status === 'pending');
86
- return (_jsxs(Box, { flexDirection: "column", children: [_jsx(Static, { items: completedItems, children: (skill) => _jsx(CompletedSkill, { skill: skill }, skill.name) }), running.map((skill) => (_jsx(RunningSkill, { skill: skill }, skill.name))), pending.map((skill) => (_jsxs(Text, { dimColor: true, children: [ICON_PENDING, " ", skill.displayName] }, skill.name))), interrupted && (_jsxs(Text, { color: "yellow", dimColor: true, children: [figures.warning, " Interrupted, finishing up... (press Ctrl+C again to force exit)"] }))] }));
61
+ return (_jsxs(Box, { flexDirection: "column", children: [completed.map((skill) => (_jsx(CompletedSkill, { skill: skill }, skill.name))), running.map((skill) => (_jsx(RunningSkill, { skill: skill }, skill.name))), pending.map((skill) => (_jsxs(Text, { dimColor: true, children: [ICON_PENDING, " ", skill.displayName] }, skill.name))), interrupted && (_jsxs(Text, { color: "yellow", dimColor: true, children: [figures.warning, " Interrupted, finishing up... (press Ctrl+C again to force exit)"] }))] }));
62
+ }
63
+ /** Create a terminal skill state for skills that were skipped or errored before starting. */
64
+ function makeTerminalSkillState(tasks, name, overrides) {
65
+ const task = tasks.find((t) => t.name === name);
66
+ return {
67
+ name,
68
+ displayName: task?.displayName ?? name,
69
+ status: 'pending',
70
+ files: [],
71
+ findings: [],
72
+ ...overrides,
73
+ };
87
74
  }
88
75
  /** No-op callbacks for quiet mode. */
89
76
  // eslint-disable-next-line @typescript-eslint/no-empty-function
@@ -96,33 +83,72 @@ const noopCallbacks = {
96
83
  onSkillSkipped: noop,
97
84
  onSkillError: noop,
98
85
  };
86
+ /** Severity levels in display order. */
87
+ const SEVERITY_LEVELS = ['critical', 'high', 'medium', 'low', 'info'];
88
+ /** Print the per-file line within a skill summary. */
89
+ function printFileSummary(file) {
90
+ if (file.status === 'done') {
91
+ const filename = truncate(file.filename, 50);
92
+ const counts = countBySeverity(file.findings);
93
+ let line = ` ${chalk.green(ICON_CHECK)} ${filename} ${chalk.dim(`[${file.totalHunks}/${file.totalHunks}]`)}`;
94
+ const severityParts = SEVERITY_LEVELS
95
+ .filter((s) => counts[s] > 0)
96
+ .map((s) => `${formatSeverityDot(s)} ${counts[s]}`);
97
+ if (severityParts.length > 0)
98
+ line += ` ${severityParts.join(' ')}`;
99
+ if (file.durationMs !== undefined)
100
+ line += chalk.dim(` ${formatDuration(file.durationMs)}`);
101
+ if (file.usage !== undefined)
102
+ line += chalk.dim(` ${formatCost(file.usage.costUSD)}`);
103
+ process.stderr.write(`${line}\n`);
104
+ }
105
+ else if (file.status === 'skipped') {
106
+ const filename = truncate(file.filename, 50);
107
+ process.stderr.write(` ${chalk.yellow(ICON_SKIPPED)} ${filename} ${chalk.dim('[skipped]')}\n`);
108
+ }
109
+ }
110
+ /** Print the full skill + file breakdown to stderr after Ink unmounts. */
111
+ function printSkillSummary(skillStates) {
112
+ for (const skill of skillStates) {
113
+ const duration = skill.durationMs ? chalk.dim(` [${formatDuration(skill.durationMs)}]`) : '';
114
+ if (skill.status === 'done') {
115
+ process.stderr.write(`${chalk.green(ICON_CHECK)} ${skill.displayName}${duration}\n`);
116
+ }
117
+ else if (skill.status === 'skipped') {
118
+ process.stderr.write(`${chalk.yellow(ICON_SKIPPED)} ${skill.displayName} ${chalk.dim('[skipped]')}\n`);
119
+ }
120
+ else if (skill.status === 'error') {
121
+ process.stderr.write(`${chalk.red(ICON_ERROR)} ${skill.displayName}${duration}\n`);
122
+ if (skill.error) {
123
+ process.stderr.write(`${chalk.red(` Error: ${skill.error}`)}\n`);
124
+ }
125
+ }
126
+ if (skill.status === 'done' || skill.status === 'error') {
127
+ for (const file of skill.files) {
128
+ printFileSummary(file);
129
+ }
130
+ }
131
+ }
132
+ }
99
133
  /**
100
134
  * Run skill tasks with Ink-based real-time progress display.
101
135
  */
102
136
  export async function runSkillTasksWithInk(tasks, options) {
103
137
  const { verbosity, concurrency } = options;
104
138
  if (tasks.length === 0 || verbosity === Verbosity.Quiet) {
105
- // No tasks or quiet mode - run without UI
106
- const results = [];
107
- for (const task of tasks) {
108
- if (task.runnerOptions?.abortController?.signal.aborted)
109
- break;
110
- const result = await runSkillTask(task, 5, noopCallbacks);
111
- results.push(result);
112
- }
139
+ // No tasks or quiet mode - run without UI using global semaphore
140
+ const semaphore = new Semaphore(concurrency);
141
+ const results = await runPool(tasks, tasks.length, (task) => runSkillTask(task, Number.MAX_SAFE_INTEGER, noopCallbacks, semaphore), { shouldAbort: () => tasks[0]?.runnerOptions?.abortController?.signal.aborted ?? false });
113
142
  return results;
114
143
  }
115
144
  // Track skill states
116
145
  const skillStates = [];
117
- const completedItems = [];
118
- const completedNames = new Set();
119
- // Print header before Ink starts - this avoids multiple Static components
120
- // which can cause layout conflicts due to absolute positioning
146
+ // Print header before Ink starts
121
147
  process.stderr.write('\x1b[1mSKILLS\x1b[0m\n');
122
148
  // Track interrupt state for rendering in the Ink component
123
149
  let interrupted = false;
124
150
  // Create Ink instance
125
- const { rerender, unmount } = render(_jsx(SkillRunner, { skills: skillStates, completedItems: completedItems, interrupted: false }), { stdout: process.stderr });
151
+ const { rerender, unmount, clear } = render(_jsx(SkillRunner, { skills: skillStates, interrupted: false }), { stdout: process.stderr });
126
152
  // Batch UI updates to prevent rapid consecutive rerenders that cause duplicate lines.
127
153
  // Without batching, multiple callbacks firing in quick succession (e.g., 5 files
128
154
  // starting simultaneously) trigger 5 immediate rerenders, which Ink cannot
@@ -137,7 +163,7 @@ export async function runSkillTasksWithInk(tasks, options) {
137
163
  updatePending = false;
138
164
  if (unmounted)
139
165
  return;
140
- rerender(_jsx(SkillRunner, { skills: [...skillStates], completedItems: [...completedItems], interrupted: interrupted }));
166
+ rerender(_jsx(SkillRunner, { skills: [...skillStates], interrupted: interrupted }));
141
167
  });
142
168
  };
143
169
  // Listen for abort signal to show interrupt message in the Ink UI
@@ -158,13 +184,7 @@ export async function runSkillTasksWithInk(tasks, options) {
158
184
  const idx = skillStates.findIndex((s) => s.name === name);
159
185
  const existing = skillStates[idx];
160
186
  if (idx >= 0 && existing) {
161
- const updated = { ...existing, ...updates };
162
- skillStates[idx] = updated;
163
- // If skill just completed, add to completedItems (only once)
164
- if (updates.status === 'done' && !completedNames.has(name)) {
165
- completedNames.add(name);
166
- completedItems.push(updated);
167
- }
187
+ skillStates[idx] = { ...existing, ...updates };
168
188
  updateUI();
169
189
  }
170
190
  },
@@ -182,44 +202,17 @@ export async function runSkillTasksWithInk(tasks, options) {
182
202
  updateUI();
183
203
  },
184
204
  onSkillSkipped: (name) => {
185
- const task = tasks.find((t) => t.name === name);
186
- const state = {
187
- name,
188
- displayName: task?.displayName ?? name,
189
- status: 'skipped',
190
- files: [],
191
- findings: [],
192
- };
193
- skillStates.push(state);
194
- if (!completedNames.has(name)) {
195
- completedNames.add(name);
196
- completedItems.push(state);
197
- }
205
+ skillStates.push(makeTerminalSkillState(tasks, name, { status: 'skipped' }));
198
206
  updateUI();
199
207
  },
200
208
  onSkillError: (name, error) => {
201
209
  const idx = skillStates.findIndex((s) => s.name === name);
202
210
  const existing = skillStates[idx];
203
- let state;
204
211
  if (idx >= 0 && existing) {
205
- state = { ...existing, status: 'error', error };
206
- skillStates[idx] = state;
212
+ skillStates[idx] = { ...existing, status: 'error', error };
207
213
  }
208
214
  else {
209
- const task = tasks.find((t) => t.name === name);
210
- state = {
211
- name,
212
- displayName: task?.displayName ?? name,
213
- status: 'error',
214
- error,
215
- files: [],
216
- findings: [],
217
- };
218
- skillStates.push(state);
219
- }
220
- if (!completedNames.has(name)) {
221
- completedNames.add(name);
222
- completedItems.push(state);
215
+ skillStates.push(makeTerminalSkillState(tasks, name, { status: 'error', error }));
223
216
  }
224
217
  updateUI();
225
218
  },
@@ -237,24 +230,40 @@ export async function runSkillTasksWithInk(tasks, options) {
237
230
  process.stderr.write(`\x1b[2m[debug] Prompt for ${location}: system=${systemChars}, user=${userChars}, total=${totalChars} chars (~${estimatedTokens} tokens)\x1b[0m\n`);
238
231
  }
239
232
  : undefined,
233
+ onHunkFailed: verbosity >= Verbosity.Verbose
234
+ ? (_skillName, filename, lineRange, error) => {
235
+ const location = `${filename}:${lineRange}`;
236
+ process.stderr.write(`\x1b[33m${figures.warning}\x1b[0m Chunk failed: ${location} \x1b[2m\u2014 ${error}\x1b[0m\n`);
237
+ }
238
+ : undefined,
239
+ onExtractionFailure: verbosity >= Verbosity.Verbose
240
+ ? (_skillName, filename, lineRange, error, preview) => {
241
+ const location = `${filename}:${lineRange}`;
242
+ process.stderr.write(`\x1b[33m${figures.warning}\x1b[0m Extraction failed: ${location} \x1b[2m\u2014 ${error}\x1b[0m\n`);
243
+ if (verbosity >= Verbosity.Debug && preview) {
244
+ process.stderr.write(`\x1b[2m[debug] Output preview: ${preview.slice(0, 200)}\x1b[0m\n`);
245
+ }
246
+ }
247
+ : undefined,
248
+ onRetry: verbosity >= Verbosity.Verbose
249
+ ? (_skillName, filename, lineRange, attempt, maxRetries, error, delayMs) => {
250
+ const location = `${filename}:${lineRange}`;
251
+ const retryInfo = `attempt ${attempt}/${maxRetries}`;
252
+ const delay = delayMs > 0 ? `, retrying in ${Math.round(delayMs / 1000)}s` : '';
253
+ process.stderr.write(`\x1b[2m[debug] Retry ${location} (${retryInfo}${delay}): ${error}\x1b[0m\n`);
254
+ }
255
+ : undefined,
240
256
  };
241
- const fileConcurrency = 5;
242
- const results = [];
243
- if (concurrency <= 1) {
244
- for (const task of tasks) {
245
- if (task.runnerOptions?.abortController?.signal.aborted)
246
- break;
247
- const result = await runSkillTask(task, fileConcurrency, callbacks);
248
- results.push(result);
249
- }
250
- }
251
- else {
252
- results.push(...await runPool(tasks, concurrency, (task) => runSkillTask(task, fileConcurrency, callbacks), { shouldAbort: () => tasks[0]?.runnerOptions?.abortController?.signal.aborted ?? false }));
253
- }
257
+ // Global semaphore gates file-level work across all skills.
258
+ const semaphore = new Semaphore(concurrency);
259
+ // Launch all skills in parallel; the semaphore is the sole concurrency gate.
260
+ const results = await runPool(tasks, tasks.length, (task) => runSkillTask(task, Number.MAX_SAFE_INTEGER, callbacks, semaphore), { shouldAbort: () => tasks[0]?.runnerOptions?.abortController?.signal.aborted ?? false });
254
261
  // Cleanup - set unmounted flag before unmount to prevent pending setImmediate
255
262
  // callbacks from calling rerender on the unmounted Ink instance
256
263
  unmounted = true;
264
+ clear();
257
265
  unmount();
266
+ printSkillSummary(skillStates);
258
267
  return results;
259
268
  }
260
269
  //# sourceMappingURL=ink-runner.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ink-runner.js","sourceRoot":"","sources":["../../../src/cli/output/ink-runner.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ink-runner.js","sourceRoot":"","sources":["../../../src/cli/output/ink-runner.tsx"],"names":[],"mappings":";AAAA;;;;;;;;;;;GAWG;AAEH,OAAc,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AACnD,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,KAAK,CAAC;AACxC,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EACL,YAAY,GAOb,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,cAAc,EAAE,UAAU,EAAE,QAAQ,EAAE,eAAe,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AAC3G,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,YAAY,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAChG,OAAO,OAAO,MAAM,SAAS,CAAC;AAO9B,SAAS,OAAO;IACd,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;IAEtC,SAAS,CAAC,GAAG,EAAE;QACb,MAAM,KAAK,GAAG,WAAW,CAAC,GAAG,EAAE;YAC7B,QAAQ,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC;QACnD,CAAC,EAAE,EAAE,CAAC,CAAC;QACP,OAAO,GAAG,EAAE,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;IACpC,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,OAAO,KAAC,IAAI,IAAC,KAAK,EAAC,QAAQ,YAAE,cAAc,CAAC,KAAK,CAAC,GAAQ,CAAC;AAC7D,CAAC;AAED,SAAS,YAAY,CAAC,EAAE,IAAI,EAAuB;IACjD,MAAM,QAAQ,GAAG,QAAQ,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;IAC7C,OAAO,CACL,MAAC,GAAG,eACF,KAAC,OAAO,KAAG,EACX,MAAC,IAAI,oBAAG,QAAQ,QAAI,IAAI,CAAC,WAAW,OAAG,IAAI,CAAC,UAAU,SAAS,IAC3D,CACP,CAAC;AACJ,CAAC;AAED,SAAS,YAAY,CAAC,EAAE,KAAK,EAAyB;IACpD,MAAM,WAAW,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC;IACtE,MAAM,SAAS,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,MAAM,IAAI,CAAC,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,MAAM,CAAC;IAClG,MAAM,UAAU,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC;IACtC,MAAM,YAAY,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;IAChF,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,KAAK,EAAE,OAAO,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAE9E,OAAO,CACL,MAAC,GAAG,IAAC,aAAa,EAAC,QAAQ,aACzB,MAAC,GAAG,eACF,KAAC,OAAO,KAAG,EACX,MAAC,IAAI,oBAAG,KAAK,CAAC,WAAW,IAAQ,EAChC,UAAU,GAAG,CAAC,IAAI,MAAC,IAAI,IAAC,QAAQ,0BAAK,SAAS,OAAG,UAAU,eAAe,EAC1E,YAAY,GAAG,CAAC,IAAI,MAAC,IAAI,qBAAI,YAAY,OAAG,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,UAAU,IAAQ,EAC/F,IAAI,GAAG,CAAC,IAAI,MAAC,IAAI,IAAC,QAAQ,yBAAI,UAAU,CAAC,IAAI,CAAC,IAAQ,IACnD,EACL,WAAW,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CACzB,KAAC,GAAG,IAAqB,UAAU,EAAE,CAAC,YACpC,KAAC,YAAY,IAAC,IAAI,EAAE,IAAI,GAAI,IADpB,IAAI,CAAC,QAAQ,CAEjB,CACP,CAAC,IACE,CACP,CAAC;AACJ,CAAC;AAED,SAAS,cAAc,CAAC,EAAE,KAAK,EAAyB;IACtD,IAAI,KAAK,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;QAC/B,OAAO,CACL,MAAC,IAAI,eACH,KAAC,IAAI,IAAC,KAAK,EAAC,QAAQ,YAAE,YAAY,GAAQ,OAAE,KAAK,CAAC,WAAW,OAAE,KAAC,IAAI,IAAC,QAAQ,gCAAiB,IACzF,CACR,CAAC;IACJ,CAAC;IAED,MAAM,YAAY,GAAG,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC;IAC3C,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,EAAE,OAAO,CAAC;IAClC,MAAM,QAAQ,GAAG,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,cAAc,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAEjF,IAAI,KAAK,CAAC,MAAM,KAAK,OAAO,EAAE,CAAC;QAC7B,OAAO,CACL,MAAC,IAAI,eACH,KAAC,IAAI,IAAC,KAAK,EAAC,KAAK,YAAE,UAAU,GAAQ,OAAE,KAAK,CAAC,WAAW,EACvD,QAAQ,IAAI,MAAC,IAAI,IAAC,QAAQ,yBAAI,QAAQ,SAAS,IAC3C,CACR,CAAC;IACJ,CAAC;IAED,OAAO,CACL,MAAC,IAAI,eACH,KAAC,IAAI,IAAC,KAAK,EAAC,OAAO,YAAE,UAAU,GAAQ,OAAE,KAAK,CAAC,WAAW,EACzD,QAAQ,IAAI,MAAC,IAAI,IAAC,QAAQ,yBAAI,QAAQ,SAAS,EAC/C,YAAY,GAAG,CAAC,IAAI,MAAC,IAAI,qBAAI,YAAY,OAAG,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,UAAU,IAAQ,EAC/F,IAAI,KAAK,SAAS,IAAI,IAAI,GAAG,CAAC,IAAI,MAAC,IAAI,IAAC,QAAQ,yBAAI,UAAU,CAAC,IAAI,CAAC,IAAQ,IACxE,CACR,CAAC;AACJ,CAAC;AAED,SAAS,WAAW,CAAC,EAAE,MAAM,EAAE,WAAW,EAAoB;IAC5D,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,MAAM,IAAI,CAAC,CAAC,MAAM,KAAK,SAAS,IAAI,CAAC,CAAC,MAAM,KAAK,OAAO,CAAC,CAAC;IAC9G,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC;IAC7D,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC;IAE7D,OAAO,CACL,MAAC,GAAG,IAAC,aAAa,EAAC,QAAQ,aACxB,SAAS,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CACxB,KAAC,cAAc,IAAkB,KAAK,EAAE,KAAK,IAAxB,KAAK,CAAC,IAAI,CAAkB,CAClD,CAAC,EACD,OAAO,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CACtB,KAAC,YAAY,IAAkB,KAAK,EAAE,KAAK,IAAxB,KAAK,CAAC,IAAI,CAAkB,CAChD,CAAC,EACD,OAAO,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CACtB,MAAC,IAAI,IAAkB,QAAQ,mBAC5B,YAAY,OAAG,KAAK,CAAC,WAAW,KADxB,KAAK,CAAC,IAAI,CAEd,CACR,CAAC,EACD,WAAW,IAAI,CACd,MAAC,IAAI,IAAC,KAAK,EAAC,QAAQ,EAAC,QAAQ,mBAC1B,OAAO,CAAC,OAAO,wEACX,CACR,IACG,CACP,CAAC;AACJ,CAAC;AAED,6FAA6F;AAC7F,SAAS,sBAAsB,CAC7B,KAAyB,EACzB,IAAY,EACZ,SAA8B;IAE9B,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC;IAChD,OAAO;QACL,IAAI;QACJ,WAAW,EAAE,IAAI,EAAE,WAAW,IAAI,IAAI;QACtC,MAAM,EAAE,SAAS;QACjB,KAAK,EAAE,EAAE;QACT,QAAQ,EAAE,EAAE;QACZ,GAAG,SAAS;KACb,CAAC;AACJ,CAAC;AAED,sCAAsC;AACtC,gEAAgE;AAChE,MAAM,IAAI,GAAG,GAAG,EAAE,GAAE,CAAC,CAAC;AACtB,MAAM,aAAa,GAA2B;IAC5C,YAAY,EAAE,IAAI;IAClB,aAAa,EAAE,IAAI;IACnB,YAAY,EAAE,IAAI;IAClB,eAAe,EAAE,IAAI;IACrB,cAAc,EAAE,IAAI;IACpB,YAAY,EAAE,IAAI;CACnB,CAAC;AAEF,wCAAwC;AACxC,MAAM,eAAe,GAAG,CAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,CAAU,CAAC;AAE/E,sDAAsD;AACtD,SAAS,gBAAgB,CAAC,IAAe;IACvC,IAAI,IAAI,CAAC,MAAM,KAAK,MAAM,EAAE,CAAC;QAC3B,MAAM,QAAQ,GAAG,QAAQ,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;QAC7C,MAAM,MAAM,GAAG,eAAe,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC9C,IAAI,IAAI,GAAG,KAAK,KAAK,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,QAAQ,IAAI,KAAK,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,UAAU,GAAG,CAAC,EAAE,CAAC;QAE9G,MAAM,aAAa,GAAG,eAAe;aAClC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;aAC5B,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,iBAAiB,CAAC,CAAC,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QACtD,IAAI,aAAa,CAAC,MAAM,GAAG,CAAC;YAAE,IAAI,IAAI,KAAK,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;QAEtE,IAAI,IAAI,CAAC,UAAU,KAAK,SAAS;YAAE,IAAI,IAAI,KAAK,CAAC,GAAG,CAAC,KAAK,cAAc,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;QAC7F,IAAI,IAAI,CAAC,KAAK,KAAK,SAAS;YAAE,IAAI,IAAI,KAAK,CAAC,GAAG,CAAC,KAAK,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QACvF,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,IAAI,IAAI,CAAC,CAAC;IACpC,CAAC;SAAM,IAAI,IAAI,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;QACrC,MAAM,QAAQ,GAAG,QAAQ,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;QAC7C,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,KAAK,CAAC,MAAM,CAAC,YAAY,CAAC,IAAI,QAAQ,IAAI,KAAK,CAAC,GAAG,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;IAClG,CAAC;AACH,CAAC;AAED,0EAA0E;AAC1E,SAAS,iBAAiB,CAAC,WAAyB;IAClD,KAAK,MAAM,KAAK,IAAI,WAAW,EAAE,CAAC;QAChC,MAAM,QAAQ,GAAG,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,cAAc,CAAC,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAE7F,IAAI,KAAK,CAAC,MAAM,KAAK,MAAM,EAAE,CAAC;YAC5B,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,KAAK,CAAC,WAAW,GAAG,QAAQ,IAAI,CAAC,CAAC;QACvF,CAAC;aAAM,IAAI,KAAK,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;YACtC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC,YAAY,CAAC,IAAI,KAAK,CAAC,WAAW,IAAI,KAAK,CAAC,GAAG,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;QACzG,CAAC;aAAM,IAAI,KAAK,CAAC,MAAM,KAAK,OAAO,EAAE,CAAC;YACpC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,KAAK,CAAC,WAAW,GAAG,QAAQ,IAAI,CAAC,CAAC;YACnF,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC;gBAChB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,YAAY,KAAK,CAAC,KAAK,EAAE,CAAC,IAAI,CAAC,CAAC;YACpE,CAAC;QACH,CAAC;QAED,IAAI,KAAK,CAAC,MAAM,KAAK,MAAM,IAAI,KAAK,CAAC,MAAM,KAAK,OAAO,EAAE,CAAC;YACxD,KAAK,MAAM,IAAI,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC;gBAC/B,gBAAgB,CAAC,IAAI,CAAC,CAAC;YACzB,CAAC;QACH,CAAC;IACH,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,oBAAoB,CACxC,KAAyB,EACzB,OAAwB;IAExB,MAAM,EAAE,SAAS,EAAE,WAAW,EAAE,GAAG,OAAO,CAAC;IAE3C,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,IAAI,SAAS,KAAK,SAAS,CAAC,KAAK,EAAE,CAAC;QACxD,iEAAiE;QACjE,MAAM,SAAS,GAAG,IAAI,SAAS,CAAC,WAAW,CAAC,CAAC;QAC7C,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,KAAK,EAAE,KAAK,CAAC,MAAM,EAC/C,CAAC,IAAI,EAAE,EAAE,CAAC,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,gBAAgB,EAAE,aAAa,EAAE,SAAS,CAAC,EAC/E,EAAE,WAAW,EAAE,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,CAAC,OAAO,IAAI,KAAK,EAAE,CACzF,CAAC;QACF,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,qBAAqB;IACrB,MAAM,WAAW,GAAiB,EAAE,CAAC;IAErC,iCAAiC;IACjC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,wBAAwB,CAAC,CAAC;IAE/C,2DAA2D;IAC3D,IAAI,WAAW,GAAG,KAAK,CAAC;IAExB,sBAAsB;IACtB,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,KAAK,EAAE,GAAG,MAAM,CACzC,KAAC,WAAW,IAAC,MAAM,EAAE,WAAW,EAAE,WAAW,EAAE,KAAK,GAAI,EACxD,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,CAC3B,CAAC;IAEF,sFAAsF;IACtF,iFAAiF;IACjF,2EAA2E;IAC3E,0EAA0E;IAC1E,IAAI,aAAa,GAAG,KAAK,CAAC;IAC1B,IAAI,SAAS,GAAG,KAAK,CAAC;IACtB,MAAM,QAAQ,GAAG,GAAG,EAAE;QACpB,IAAI,aAAa,IAAI,SAAS;YAAE,OAAO;QACvC,aAAa,GAAG,IAAI,CAAC;QACrB,YAAY,CAAC,GAAG,EAAE;YAChB,aAAa,GAAG,KAAK,CAAC;YACtB,IAAI,SAAS;gBAAE,OAAO;YACtB,QAAQ,CAAC,KAAC,WAAW,IAAC,MAAM,EAAE,CAAC,GAAG,WAAW,CAAC,EAAE,WAAW,EAAE,WAAW,GAAI,CAAC,CAAC;QAChF,CAAC,CAAC,CAAC;IACL,CAAC,CAAC;IAEF,kEAAkE;IAClE,MAAM,WAAW,GAAG,KAAK,CAAC,CAAC,CAAC,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,CAAC;IACrE,IAAI,WAAW,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,CAAC;QACxC,WAAW,CAAC,gBAAgB,CAAC,OAAO,EAAE,GAAG,EAAE;YACzC,WAAW,GAAG,IAAI,CAAC;YACnB,QAAQ,EAAE,CAAC;QACb,CAAC,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;IACrB,CAAC;IAED,4BAA4B;IAC5B,MAAM,SAAS,GAA2B;QACxC,YAAY,EAAE,CAAC,KAAK,EAAE,EAAE;YACtB,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACxB,QAAQ,EAAE,CAAC;QACb,CAAC;QACD,aAAa,EAAE,CAAC,IAAI,EAAE,OAAO,EAAE,EAAE;YAC/B,MAAM,GAAG,GAAG,WAAW,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC;YAC1D,MAAM,QAAQ,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC;YAClC,IAAI,GAAG,IAAI,CAAC,IAAI,QAAQ,EAAE,CAAC;gBACzB,WAAW,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,QAAQ,EAAE,GAAG,OAAO,EAAE,CAAC;gBAC/C,QAAQ,EAAE,CAAC;YACb,CAAC;QACH,CAAC;QACD,YAAY,EAAE,CAAC,SAAS,EAAE,QAAQ,EAAE,OAAO,EAAE,EAAE;YAC7C,MAAM,KAAK,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC;YAC5D,IAAI,KAAK,EAAE,CAAC;gBACV,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,QAAQ,CAAC,CAAC;gBAC9D,IAAI,IAAI,EAAE,CAAC;oBACT,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;oBAC7B,QAAQ,EAAE,CAAC;gBACb,CAAC;YACH,CAAC;QACH,CAAC;QACD,eAAe,EAAE,GAAG,EAAE;YACpB,QAAQ,EAAE,CAAC;QACb,CAAC;QACD,cAAc,EAAE,CAAC,IAAI,EAAE,EAAE;YACvB,WAAW,CAAC,IAAI,CAAC,sBAAsB,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC;YAC7E,QAAQ,EAAE,CAAC;QACb,CAAC;QACD,YAAY,EAAE,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE;YAC5B,MAAM,GAAG,GAAG,WAAW,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC;YAC1D,MAAM,QAAQ,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC;YAElC,IAAI,GAAG,IAAI,CAAC,IAAI,QAAQ,EAAE,CAAC;gBACzB,WAAW,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;YAC7D,CAAC;iBAAM,CAAC;gBACN,WAAW,CAAC,IAAI,CAAC,sBAAsB,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;YACpF,CAAC;YAED,QAAQ,EAAE,CAAC;QACb,CAAC;QACD,iFAAiF;QACjF,sFAAsF;QACtF,kFAAkF;QAClF,aAAa,EAAE,CAAC,UAAU,EAAE,QAAQ,EAAE,SAAS,EAAE,KAAK,EAAE,eAAe,EAAE,EAAE;YACzE,MAAM,QAAQ,GAAG,GAAG,QAAQ,IAAI,SAAS,EAAE,CAAC;YAC5C,MAAM,IAAI,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC,aAAa,IAAI,CAAC,KAAK,CAAC,eAAe,GAAG,IAAI,CAAC,WAAW,CAAC;YACnG,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,WAAW,OAAO,CAAC,OAAO,6BAA6B,QAAQ,KAAK,IAAI,IAAI,CAAC,CAAC;QACrG,CAAC;QACD,YAAY,EAAE,SAAS,IAAI,SAAS,CAAC,KAAK;YACxC,CAAC,CAAC,CAAC,UAAU,EAAE,QAAQ,EAAE,SAAS,EAAE,WAAW,EAAE,SAAS,EAAE,UAAU,EAAE,eAAe,EAAE,EAAE;gBACvF,MAAM,QAAQ,GAAG,GAAG,QAAQ,IAAI,SAAS,EAAE,CAAC;gBAC5C,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,6BAA6B,QAAQ,YAAY,WAAW,UAAU,SAAS,WAAW,UAAU,YAAY,eAAe,mBAAmB,CAAC,CAAC;YAC3K,CAAC;YACH,CAAC,CAAC,SAAS;QACb,YAAY,EAAE,SAAS,IAAI,SAAS,CAAC,OAAO;YAC1C,CAAC,CAAC,CAAC,UAAU,EAAE,QAAQ,EAAE,SAAS,EAAE,KAAK,EAAE,EAAE;gBACzC,MAAM,QAAQ,GAAG,GAAG,QAAQ,IAAI,SAAS,EAAE,CAAC;gBAC5C,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,WAAW,OAAO,CAAC,OAAO,0BAA0B,QAAQ,kBAAkB,KAAK,WAAW,CAAC,CAAC;YACvH,CAAC;YACH,CAAC,CAAC,SAAS;QACb,mBAAmB,EAAE,SAAS,IAAI,SAAS,CAAC,OAAO;YACjD,CAAC,CAAC,CAAC,UAAU,EAAE,QAAQ,EAAE,SAAS,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE;gBAClD,MAAM,QAAQ,GAAG,GAAG,QAAQ,IAAI,SAAS,EAAE,CAAC;gBAC5C,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,WAAW,OAAO,CAAC,OAAO,+BAA+B,QAAQ,kBAAkB,KAAK,WAAW,CAAC,CAAC;gBAC1H,IAAI,SAAS,IAAI,SAAS,CAAC,KAAK,IAAI,OAAO,EAAE,CAAC;oBAC5C,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,oCAAoC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,WAAW,CAAC,CAAC;gBAC7F,CAAC;YACH,CAAC;YACH,CAAC,CAAC,SAAS;QACb,OAAO,EAAE,SAAS,IAAI,SAAS,CAAC,OAAO;YACrC,CAAC,CAAC,CAAC,UAAU,EAAE,QAAQ,EAAE,SAAS,EAAE,OAAO,EAAE,UAAU,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE;gBACvE,MAAM,QAAQ,GAAG,GAAG,QAAQ,IAAI,SAAS,EAAE,CAAC;gBAC5C,MAAM,SAAS,GAAG,WAAW,OAAO,IAAI,UAAU,EAAE,CAAC;gBACrD,MAAM,KAAK,GAAG,OAAO,GAAG,CAAC,CAAC,CAAC,CAAC,iBAAiB,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;gBAChF,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,wBAAwB,QAAQ,KAAK,SAAS,GAAG,KAAK,MAAM,KAAK,WAAW,CAAC,CAAC;YACrG,CAAC;YACH,CAAC,CAAC,SAAS;KACd,CAAC;IAEF,4DAA4D;IAC5D,MAAM,SAAS,GAAG,IAAI,SAAS,CAAC,WAAW,CAAC,CAAC;IAE7C,6EAA6E;IAC7E,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,KAAK,EAAE,KAAK,CAAC,MAAM,EAC/C,CAAC,IAAI,EAAE,EAAE,CAAC,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,gBAAgB,EAAE,SAAS,EAAE,SAAS,CAAC,EAC3E,EAAE,WAAW,EAAE,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,CAAC,OAAO,IAAI,KAAK,EAAE,CACzF,CAAC;IAEF,8EAA8E;IAC9E,gEAAgE;IAChE,SAAS,GAAG,IAAI,CAAC;IACjB,KAAK,EAAE,CAAC;IACR,OAAO,EAAE,CAAC;IAEV,iBAAiB,CAAC,WAAW,CAAC,CAAC;IAE/B,OAAO,OAAO,CAAC;AACjB,CAAC"}
@@ -22,6 +22,7 @@ export interface JsonlRunMetadata {
22
22
  timestamp: string;
23
23
  durationMs: number;
24
24
  cwd: string;
25
+ traceId?: string;
25
26
  }
26
27
  /**
27
28
  * Per-file record within a JSONL skill record.
@@ -34,6 +35,7 @@ export interface JsonlFileRecord {
34
35
  }
35
36
  /**
36
37
  * A single JSONL record representing one skill's report.
38
+ * See specs/reporters.md Section 3 "JSONL Specification" for schema.
37
39
  */
38
40
  export interface JsonlRecord {
39
41
  run: JsonlRunMetadata;
@@ -45,6 +47,8 @@ export interface JsonlRecord {
45
47
  usage?: UsageStats;
46
48
  auxiliaryUsage?: AuxiliaryUsageMap;
47
49
  files?: JsonlFileRecord[];
50
+ failedHunks?: number;
51
+ failedExtractions?: number;
48
52
  }
49
53
  /**
50
54
  * Per-evaluation detail for JSONL fix evaluation records.
@@ -77,5 +81,7 @@ export interface JsonlFixEvaluationRecord {
77
81
  * Each line contains one skill report with run metadata.
78
82
  * A final summary line is appended at the end.
79
83
  */
80
- export declare function writeJsonlReport(outputPath: string, reports: SkillReport[], durationMs: number): void;
84
+ export declare function writeJsonlReport(outputPath: string, reports: SkillReport[], durationMs: number, options?: {
85
+ traceId?: string;
86
+ }): void;
81
87
  //# sourceMappingURL=jsonl.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"jsonl.d.ts","sourceRoot":"","sources":["../../../src/cli/output/jsonl.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,WAAW,EAAE,UAAU,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AACvF,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,sCAAsC,CAAC;AAItE;;;GAGG;AACH,wBAAgB,aAAa,IAAI,MAAM,CAMtC;AAED;;;;GAIG;AACH,wBAAgB,sBAAsB,CAAC,GAAG,EAAE,MAAM,EAAE,SAAS,GAAE,IAAiB,GAAG,MAAM,CAIxF;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,EAAE,SAAS,GAAE,IAAiB,GAAG,MAAM,CAE/E;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,GAAG,EAAE,MAAM,CAAC;CACb;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,UAAU,CAAC;CACpB;AAED;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,GAAG,EAAE,gBAAgB,CAAC;IACtB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,WAAW,CAAC,UAAU,CAAC,CAAC;IAClC,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACnC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,UAAU,CAAC;IACnB,cAAc,CAAC,EAAE,iBAAiB,CAAC;IACnC,KAAK,CAAC,EAAE,eAAe,EAAE,CAAC;CAC3B;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,SAAS,GAAG,aAAa,CAAC;IACnC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,UAAU,CAAC;CACnB;AAED;;GAEG;AACH,MAAM,WAAW,wBAAwB;IACvC,GAAG,EAAE,gBAAgB,CAAC;IACtB,IAAI,EAAE,gBAAgB,CAAC;IACvB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,cAAc,EAAE,MAAM,CAAC;IACvB,OAAO,EAAE,MAAM,CAAC;IAChB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,KAAK,CAAC,EAAE,UAAU,CAAC;IACnB,WAAW,CAAC,EAAE,kBAAkB,EAAE,CAAC;CACpC;AAkBD;;;;GAIG;AACH,wBAAgB,gBAAgB,CAC9B,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,WAAW,EAAE,EACtB,UAAU,EAAE,MAAM,GACjB,IAAI,CAwDN"}
1
+ {"version":3,"file":"jsonl.d.ts","sourceRoot":"","sources":["../../../src/cli/output/jsonl.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,WAAW,EAAE,UAAU,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AACvF,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,sCAAsC,CAAC;AAItE;;;GAGG;AACH,wBAAgB,aAAa,IAAI,MAAM,CAMtC;AAED;;;;GAIG;AACH,wBAAgB,sBAAsB,CAAC,GAAG,EAAE,MAAM,EAAE,SAAS,GAAE,IAAiB,GAAG,MAAM,CAIxF;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,EAAE,SAAS,GAAE,IAAiB,GAAG,MAAM,CAE/E;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,UAAU,CAAC;CACpB;AAED;;;GAGG;AACH,MAAM,WAAW,WAAW;IAC1B,GAAG,EAAE,gBAAgB,CAAC;IACtB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,WAAW,CAAC,UAAU,CAAC,CAAC;IAClC,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACnC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,UAAU,CAAC;IACnB,cAAc,CAAC,EAAE,iBAAiB,CAAC;IACnC,KAAK,CAAC,EAAE,eAAe,EAAE,CAAC;IAC1B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,SAAS,GAAG,aAAa,CAAC;IACnC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,UAAU,CAAC;CACnB;AAED;;GAEG;AACH,MAAM,WAAW,wBAAwB;IACvC,GAAG,EAAE,gBAAgB,CAAC;IACtB,IAAI,EAAE,gBAAgB,CAAC;IACvB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,cAAc,EAAE,MAAM,CAAC;IACvB,OAAO,EAAE,MAAM,CAAC;IAChB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,KAAK,CAAC,EAAE,UAAU,CAAC;IACnB,WAAW,CAAC,EAAE,kBAAkB,EAAE,CAAC;CACpC;AAkBD;;;;GAIG;AACH,wBAAgB,gBAAgB,CAC9B,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,WAAW,EAAE,EACtB,UAAU,EAAE,MAAM,EAClB,OAAO,CAAC,EAAE;IAAE,OAAO,CAAC,EAAE,MAAM,CAAA;CAAE,GAC7B,IAAI,CA2DN"}
@@ -50,7 +50,7 @@ function aggregateUsage(reports) {
50
50
  * Each line contains one skill report with run metadata.
51
51
  * A final summary line is appended at the end.
52
52
  */
53
- export function writeJsonlReport(outputPath, reports, durationMs) {
53
+ export function writeJsonlReport(outputPath, reports, durationMs, options) {
54
54
  const resolvedPath = resolve(process.cwd(), outputPath);
55
55
  const timestamp = new Date().toISOString();
56
56
  const cwd = process.cwd();
@@ -58,6 +58,7 @@ export function writeJsonlReport(outputPath, reports, durationMs) {
58
58
  timestamp,
59
59
  durationMs,
60
60
  cwd,
61
+ traceId: options?.traceId,
61
62
  };
62
63
  const lines = [];
63
64
  // Write one line per skill report
@@ -77,6 +78,8 @@ export function writeJsonlReport(outputPath, reports, durationMs) {
77
78
  durationMs: f.durationMs,
78
79
  usage: f.usage,
79
80
  })),
81
+ failedHunks: report.failedHunks || undefined,
82
+ failedExtractions: report.failedExtractions || undefined,
80
83
  };
81
84
  lines.push(JSON.stringify(record));
82
85
  }
@@ -1 +1 @@
1
- {"version":3,"file":"jsonl.js","sourceRoot":"","sources":["../../../src/cli/output/jsonl.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AACnD,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAG7D,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAElD;;;GAGG;AACH,MAAM,UAAU,aAAa;IAC3B,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC;IACjD,IAAI,QAAQ,EAAE,CAAC;QACb,OAAO,IAAI,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;IAChC,CAAC;IACD,OAAO,IAAI,CAAC,OAAO,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC;AACrD,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,sBAAsB,CAAC,GAAW,EAAE,YAAkB,IAAI,IAAI,EAAE;IAC9E,MAAM,OAAO,GAAG,QAAQ,CAAC,GAAG,CAAC,IAAI,SAAS,CAAC;IAC3C,MAAM,EAAE,GAAG,SAAS,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;IACtD,OAAO,GAAG,OAAO,IAAI,EAAE,QAAQ,CAAC;AAClC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,aAAa,CAAC,GAAW,EAAE,YAAkB,IAAI,IAAI,EAAE;IACrE,OAAO,IAAI,CAAC,aAAa,EAAE,EAAE,sBAAsB,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC,CAAC;AACvE,CAAC;AAgED;;GAEG;AACH,SAAS,cAAc,CAAC,OAAsB;IAC5C,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,SAAS,CAAC,CAAC;IAC1E,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,SAAS,CAAC;IAE1C,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;QAChC,WAAW,EAAE,GAAG,CAAC,WAAW,GAAG,CAAC,CAAC,WAAW;QAC5C,YAAY,EAAE,GAAG,CAAC,YAAY,GAAG,CAAC,CAAC,YAAY;QAC/C,oBAAoB,EAAE,CAAC,GAAG,CAAC,oBAAoB,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,oBAAoB,IAAI,CAAC,CAAC;QACrF,wBAAwB,EAAE,CAAC,GAAG,CAAC,wBAAwB,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,wBAAwB,IAAI,CAAC,CAAC;QACjG,OAAO,EAAE,GAAG,CAAC,OAAO,GAAG,CAAC,CAAC,OAAO;KACjC,CAAC,CAAC,CAAC;AACN,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,gBAAgB,CAC9B,UAAkB,EAClB,OAAsB,EACtB,UAAkB;IAElB,MAAM,YAAY,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,UAAU,CAAC,CAAC;IACxD,MAAM,SAAS,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IAC3C,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;IAE1B,MAAM,WAAW,GAAqB;QACpC,SAAS;QACT,UAAU;QACV,GAAG;KACJ,CAAC;IAEF,MAAM,KAAK,GAAa,EAAE,CAAC;IAE3B,kCAAkC;IAClC,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;QAC7B,MAAM,MAAM,GAAgB;YAC1B,GAAG,EAAE,WAAW;YAChB,KAAK,EAAE,MAAM,CAAC,KAAK;YACnB,OAAO,EAAE,MAAM,CAAC,OAAO;YACvB,QAAQ,EAAE,MAAM,CAAC,QAAQ;YACzB,QAAQ,EAAE,MAAM,CAAC,QAAQ;YACzB,UAAU,EAAE,MAAM,CAAC,UAAU;YAC7B,KAAK,EAAE,MAAM,CAAC,KAAK;YACnB,cAAc,EAAE,MAAM,CAAC,cAAc;YACrC,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;gBAC/B,QAAQ,EAAE,CAAC,CAAC,QAAQ;gBACpB,QAAQ,EAAE,CAAC,CAAC,YAAY;gBACxB,UAAU,EAAE,CAAC,CAAC,UAAU;gBACxB,KAAK,EAAE,CAAC,CAAC,KAAK;aACf,CAAC,CAAC;SACJ,CAAC;QACF,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;IACrC,CAAC;IAED,kCAAkC;IAClC,MAAM,WAAW,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;IACvD,MAAM,mBAAmB,GAAG,OAAO,CAAC,MAAM,CACxC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,mBAAmB,CAAC,GAAG,EAAE,CAAC,CAAC,cAAc,CAAC,EACtD,SAAS,CACV,CAAC;IACF,MAAM,aAAa,GAA4B;QAC7C,GAAG,EAAE,WAAW;QAChB,IAAI,EAAE,SAAS;QACf,aAAa,EAAE,WAAW,CAAC,MAAM;QACjC,UAAU,EAAE,eAAe,CAAC,WAAW,CAAC;QACxC,KAAK,EAAE,cAAc,CAAC,OAAO,CAAC;KAC/B,CAAC;IACF,IAAI,mBAAmB,EAAE,CAAC;QACxB,aAAa,CAAC,gBAAgB,CAAC,GAAG,mBAAmB,CAAC;IACxD,CAAC;IACD,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC,CAAC;IAE1C,iCAAiC;IACjC,SAAS,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAEtD,aAAa,CAAC,YAAY,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC;AACvD,CAAC"}
1
+ {"version":3,"file":"jsonl.js","sourceRoot":"","sources":["../../../src/cli/output/jsonl.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import type { SkillReport, Finding, FileChange } from '../../types/index.js';
1
+ import type { SkillReport, Finding, FileChange, UsageStats } from '../../types/index.js';
2
2
  import { Verbosity } from './verbosity.js';
3
3
  import { type OutputMode } from './tty.js';
4
4
  /**
@@ -9,12 +9,14 @@ export interface SkillRunnerCallbacks {
9
9
  skillStartTime?: number;
10
10
  onFileStart?: (file: string, index: number, total: number) => void;
11
11
  onHunkStart?: (file: string, hunkNum: number, total: number, lineRange: string) => void;
12
- onHunkComplete?: (file: string, hunkNum: number, findings: Finding[]) => void;
12
+ onHunkComplete?: (file: string, hunkNum: number, findings: Finding[], usage: UsageStats) => void;
13
13
  onFileComplete?: (file: string, index: number, total: number) => void;
14
14
  }
15
15
  /**
16
16
  * Main reporter class for CLI output.
17
17
  * Handles different verbosity levels and TTY/non-TTY modes.
18
+ *
19
+ * Reporter spec: specs/reporters.md
18
20
  */
19
21
  export declare class Reporter {
20
22
  readonly mode: OutputMode;
@@ -47,7 +49,9 @@ export declare class Reporter {
47
49
  /**
48
50
  * Render the summary section.
49
51
  */
50
- renderSummary(reports: SkillReport[], totalDuration: number): void;
52
+ renderSummary(reports: SkillReport[], totalDuration: number, options?: {
53
+ traceId?: string;
54
+ }): void;
51
55
  /**
52
56
  * Display the configuration section with triggers.
53
57
  */
@@ -1 +1 @@
1
- {"version":3,"file":"reporter.d.ts","sourceRoot":"","sources":["../../../src/cli/output/reporter.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,OAAO,EAAE,UAAU,EAAc,MAAM,sBAAsB,CAAC;AACzF,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EAAE,KAAK,UAAU,EAAa,MAAM,UAAU,CAAC;AA4CtD;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,wEAAwE;IACxE,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,WAAW,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACnE,WAAW,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,KAAK,IAAI,CAAC;IACxF,cAAc,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,KAAK,IAAI,CAAC;IAC9E,cAAc,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;CACvE;AAED;;;GAGG;AACH,qBAAa,QAAQ;IACnB,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAC;IAC1B,QAAQ,CAAC,SAAS,EAAE,SAAS,CAAC;gBAElB,IAAI,EAAE,UAAU,EAAE,SAAS,EAAE,SAAS;IAKlD;;OAEG;IACH,OAAO,CAAC,GAAG;IAOX;;OAEG;IACH,OAAO,CAAC,QAAQ;IAIhB;;OAEG;IACH,MAAM,IAAI,IAAI;IAiBd;;OAEG;IACH,YAAY,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI;IAavC;;OAEG;IACH,YAAY,CAAC,KAAK,EAAE,UAAU,EAAE,GAAG,IAAI;IAqCvC;;OAEG;IACH,OAAO,CAAC,cAAc;IAatB;;OAEG;IACH,aAAa,CAAC,OAAO,EAAE,WAAW,EAAE,EAAE,aAAa,EAAE,MAAM,GAAG,IAAI;IAyDlE;;OAEG;IACH,cAAc,CACZ,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,EAAE,GAC1C,IAAI;IA0BP;;OAEG;IACH,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAY3B;;OAEG;IACH,OAAO,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAY9B;;OAEG;IACH,OAAO,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI;IAY/B;;OAEG;IACH,OAAO,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI;IAahD;;OAEG;IACH,OAAO,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAY9B;;;OAGG;IACH,KAAK,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAQ5B;;OAEG;IACH,KAAK,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAY5B;;OAEG;IACH,GAAG,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAW1B;;OAEG;IACH,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAY3B;;OAEG;IACH,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAY3B;;OAEG;IACH,KAAK,IAAI,IAAI;IAOb;;OAEG;IACH,gBAAgB,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,IAAI;CAgCtD"}
1
+ {"version":3,"file":"reporter.d.ts","sourceRoot":"","sources":["../../../src/cli/output/reporter.ts"],"names":[],"mappings":"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"}
@@ -40,6 +40,8 @@ const LOGO = `
40
40
  /**
41
41
  * Main reporter class for CLI output.
42
42
  * Handles different verbosity levels and TTY/non-TTY modes.
43
+ *
44
+ * Reporter spec: specs/reporters.md
43
45
  */
44
46
  export class Reporter {
45
47
  mode;
@@ -148,7 +150,7 @@ export class Reporter {
148
150
  /**
149
151
  * Render the summary section.
150
152
  */
151
- renderSummary(reports, totalDuration) {
153
+ renderSummary(reports, totalDuration, options) {
152
154
  const allFindings = [];
153
155
  let totalFailedHunks = 0;
154
156
  let totalFailedExtractions = 0;
@@ -176,6 +178,9 @@ export class Reporter {
176
178
  if (totalFailedExtractions > 0) {
177
179
  this.log(chalk.yellow(`${figures.warning} ${totalFailedExtractions} finding ${pluralize(totalFailedExtractions, 'extraction')} failed`));
178
180
  }
181
+ if ((totalFailedHunks > 0 || totalFailedExtractions > 0) && this.verbosity < Verbosity.Verbose) {
182
+ this.log(chalk.dim(' Use -v for failure details'));
183
+ }
179
184
  if (totalSkippedFiles > 0) {
180
185
  this.log(chalk.dim(`${totalSkippedFiles} ${pluralize(totalSkippedFiles, 'file')} skipped`));
181
186
  }
@@ -186,6 +191,9 @@ export class Reporter {
186
191
  else {
187
192
  this.log(chalk.dim(durationLine));
188
193
  }
194
+ if (options?.traceId && this.verbosity >= Verbosity.Verbose) {
195
+ this.log(chalk.dim(`Trace: ${options.traceId}`));
196
+ }
189
197
  }
190
198
  else {
191
199
  this.logPlain(`Summary: ${formatFindingCountsPlain(counts)}`);
@@ -195,6 +203,9 @@ export class Reporter {
195
203
  if (totalFailedExtractions > 0) {
196
204
  this.logPlain(`WARN: ${totalFailedExtractions} finding ${pluralize(totalFailedExtractions, 'extraction')} failed`);
197
205
  }
206
+ if ((totalFailedHunks > 0 || totalFailedExtractions > 0) && this.verbosity < Verbosity.Verbose) {
207
+ this.logPlain('Use -v for failure details');
208
+ }
198
209
  if (totalSkippedFiles > 0) {
199
210
  this.logPlain(`${totalSkippedFiles} ${pluralize(totalSkippedFiles, 'file')} skipped`);
200
211
  }
@@ -202,6 +213,9 @@ export class Reporter {
202
213
  this.logPlain(`Usage: ${formatUsagePlain(totalUsage)}`);
203
214
  }
204
215
  this.logPlain(`Total time: ${formatDuration(totalDuration)}`);
216
+ if (options?.traceId && this.verbosity >= Verbosity.Verbose) {
217
+ this.logPlain(`Trace: ${options.traceId}`);
218
+ }
205
219
  }
206
220
  }
207
221
  /**