@ironbee-ai/cli 0.14.0 → 0.15.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 (75) hide show
  1. package/CHANGELOG.md +16 -0
  2. package/README.md +2 -95
  3. package/dist/clients/claude/hooks/session-status.d.ts +5 -0
  4. package/dist/clients/claude/hooks/session-status.d.ts.map +1 -1
  5. package/dist/clients/claude/hooks/session-status.js +120 -17
  6. package/dist/clients/claude/hooks/session-status.js.map +1 -1
  7. package/dist/clients/claude/index.d.ts.map +1 -1
  8. package/dist/clients/claude/index.js +11 -14
  9. package/dist/clients/claude/index.js.map +1 -1
  10. package/dist/clients/claude/oauth.d.ts +96 -0
  11. package/dist/clients/claude/oauth.d.ts.map +1 -0
  12. package/dist/clients/claude/oauth.js +290 -0
  13. package/dist/clients/claude/oauth.js.map +1 -0
  14. package/dist/clients/cursor/hooks/session-start.js +1 -1
  15. package/dist/clients/cursor/hooks/session-start.js.map +1 -1
  16. package/dist/clients/cursor/index.d.ts.map +1 -1
  17. package/dist/clients/cursor/index.js +9 -13
  18. package/dist/clients/cursor/index.js.map +1 -1
  19. package/dist/commands/claude.d.ts +30 -0
  20. package/dist/commands/claude.d.ts.map +1 -0
  21. package/dist/commands/claude.js +188 -0
  22. package/dist/commands/claude.js.map +1 -0
  23. package/dist/commands/status.js +1 -1
  24. package/dist/commands/verify.d.ts.map +1 -1
  25. package/dist/commands/verify.js +1 -2
  26. package/dist/commands/verify.js.map +1 -1
  27. package/dist/index.js +2 -3
  28. package/dist/index.js.map +1 -1
  29. package/dist/lib/config.d.ts +41 -0
  30. package/dist/lib/config.d.ts.map +1 -1
  31. package/dist/lib/config.js +42 -1
  32. package/dist/lib/config.js.map +1 -1
  33. package/dist/lib/fs-prune.d.ts +1 -1
  34. package/dist/lib/fs-prune.js +1 -1
  35. package/dist/tui/config/schema.d.ts.map +1 -1
  36. package/dist/tui/config/schema.js +19 -0
  37. package/dist/tui/config/schema.js.map +1 -1
  38. package/dist/tui/sessions/area.d.ts.map +1 -1
  39. package/dist/tui/sessions/area.js +2 -45
  40. package/dist/tui/sessions/area.js.map +1 -1
  41. package/package.json +1 -1
  42. package/dist/analysis/code-changes.d.ts +0 -22
  43. package/dist/analysis/code-changes.d.ts.map +0 -1
  44. package/dist/analysis/code-changes.js +0 -141
  45. package/dist/analysis/code-changes.js.map +0 -1
  46. package/dist/analysis/cross-session.d.ts +0 -34
  47. package/dist/analysis/cross-session.d.ts.map +0 -1
  48. package/dist/analysis/cross-session.js +0 -230
  49. package/dist/analysis/cross-session.js.map +0 -1
  50. package/dist/analysis/fix-effectiveness.d.ts +0 -16
  51. package/dist/analysis/fix-effectiveness.d.ts.map +0 -1
  52. package/dist/analysis/fix-effectiveness.js +0 -99
  53. package/dist/analysis/fix-effectiveness.js.map +0 -1
  54. package/dist/analysis/scoring.d.ts +0 -15
  55. package/dist/analysis/scoring.d.ts.map +0 -1
  56. package/dist/analysis/scoring.js +0 -59
  57. package/dist/analysis/scoring.js.map +0 -1
  58. package/dist/analysis/time-analysis.d.ts +0 -22
  59. package/dist/analysis/time-analysis.d.ts.map +0 -1
  60. package/dist/analysis/time-analysis.js +0 -174
  61. package/dist/analysis/time-analysis.js.map +0 -1
  62. package/dist/analysis/verdict-details.d.ts +0 -23
  63. package/dist/analysis/verdict-details.d.ts.map +0 -1
  64. package/dist/analysis/verdict-details.js +0 -59
  65. package/dist/analysis/verdict-details.js.map +0 -1
  66. package/dist/analysis/verification-quality.d.ts +0 -20
  67. package/dist/analysis/verification-quality.d.ts.map +0 -1
  68. package/dist/analysis/verification-quality.js +0 -145
  69. package/dist/analysis/verification-quality.js.map +0 -1
  70. package/dist/clients/claude/commands/ironbee-analyze.md +0 -42
  71. package/dist/clients/cursor/commands/ironbee-analyze/SKILL.md +0 -48
  72. package/dist/commands/analyze.d.ts +0 -3
  73. package/dist/commands/analyze.d.ts.map +0 -1
  74. package/dist/commands/analyze.js +0 -329
  75. package/dist/commands/analyze.js.map +0 -1
@@ -1,329 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.analyzeCommand = void 0;
4
- const commander_1 = require("commander");
5
- const fs_1 = require("fs");
6
- const path_1 = require("path");
7
- const output_1 = require("../lib/output");
8
- const time_analysis_1 = require("../analysis/time-analysis");
9
- const verification_quality_1 = require("../analysis/verification-quality");
10
- const code_changes_1 = require("../analysis/code-changes");
11
- const fix_effectiveness_1 = require("../analysis/fix-effectiveness");
12
- const scoring_1 = require("../analysis/scoring");
13
- const cross_session_1 = require("../analysis/cross-session");
14
- const verdict_details_1 = require("../analysis/verdict-details");
15
- /**
16
- * Detect a monitoring-only-mode session (verification disabled when it ran).
17
- * The reliable signal is zero `verification_requested` events: enabled mode
18
- * emits one per Stop hook fire (allow or block path), while monitoring mode
19
- * runs `activity-end` instead, which never writes that event.
20
- *
21
- * We deliberately do NOT use zero `verification_start` — an enabled-mode
22
- * session where the agent never edited code also has zero of those, but
23
- * still gets `verification_requested` from the Stop hook.
24
- */
25
- function isMonitoringOnlySession(actionsFile) {
26
- if (!(0, fs_1.existsSync)(actionsFile)) {
27
- return false;
28
- }
29
- let content;
30
- try {
31
- content = (0, fs_1.readFileSync)(actionsFile, "utf-8");
32
- }
33
- catch {
34
- return false;
35
- }
36
- const lines = content.split("\n");
37
- for (const line of lines) {
38
- if (line.includes("\"type\":\"verification_requested\"") || line.includes("\"type\": \"verification_requested\"")) {
39
- return false;
40
- }
41
- }
42
- // No verification_requested at all: monitoring-only OR a session that
43
- // never reached Stop. Distinguish by requiring at least one session_start
44
- // — without that we have no useful context anyway.
45
- return content.includes("\"type\":\"session_start\"") || content.includes("\"type\": \"session_start\"");
46
- }
47
- function formatDuration(ms) {
48
- if (ms < 1000) {
49
- return "0s";
50
- }
51
- const totalSeconds = Math.floor(ms / 1000);
52
- const hours = Math.floor(totalSeconds / 3600);
53
- const minutes = Math.floor((totalSeconds % 3600) / 60);
54
- const seconds = totalSeconds % 60;
55
- if (hours > 0) {
56
- return `${hours}h ${minutes}m`;
57
- }
58
- if (minutes > 0) {
59
- return `${minutes}m ${seconds.toString().padStart(2, "0")}s`;
60
- }
61
- return `${seconds}s`;
62
- }
63
- function bar(percent, width = 20) {
64
- const filled = Math.round(percent / 100 * width);
65
- const empty = width - filled;
66
- return `${"█".repeat(filled)}${"░".repeat(empty)}`;
67
- }
68
- function scoreColor(score, max = 100) {
69
- const pct = max === 1 ? score * 100 : (score / max) * 100;
70
- if (pct >= 80) {
71
- return (s) => output_1.pc.bold(output_1.pc.green(s));
72
- }
73
- if (pct >= 50) {
74
- return (s) => output_1.pc.yellow(s);
75
- }
76
- return (s) => output_1.pc.red(s);
77
- }
78
- function rateColor(rate) {
79
- if (rate >= 80) {
80
- return (s) => output_1.pc.green(s);
81
- }
82
- if (rate >= 50) {
83
- return (s) => output_1.pc.yellow(s);
84
- }
85
- return (s) => output_1.pc.red(s);
86
- }
87
- function shortPath(filePath) {
88
- const parts = filePath.split("/");
89
- if (parts.length <= 3) {
90
- return filePath;
91
- }
92
- return ".../" + parts.slice(-3).join("/");
93
- }
94
- function section(title, emoji) {
95
- console.log();
96
- console.log(` ${emoji} ${output_1.pc.bold(output_1.pc.underline(title))}`);
97
- }
98
- // ── Cross-Session Output ─────────────────────────────────
99
- function printCrossSessionAnalysis(analysis, projectDir, opts) {
100
- console.log();
101
- console.log(` ${output_1.pc.bold("📊 Project Analysis")} ${output_1.pc.dim(`(${analysis.totalSessions} session${analysis.totalSessions !== 1 ? "s" : ""})`)}`);
102
- // Session History
103
- const displaySummaries = analysis.sessionSummaries.slice(0, 20);
104
- if (displaySummaries.length > 0) {
105
- section("Session History", "📋");
106
- for (const s of displaySummaries) {
107
- const dateStr = new Date(s.timestamp).toISOString().slice(0, 10);
108
- const durationStr = formatDuration(s.duration).padEnd(10);
109
- const verifyStr = `${s.verificationCycles} verify`;
110
- const fixStr = `${s.fixCycles} fix`;
111
- const firstPassStr = s.lastVerdictStatus === "pass" ? output_1.pc.green("✓") : s.lastVerdictStatus === "fail" ? output_1.pc.red("✗") : output_1.pc.dim("—");
112
- const scoreVal = s.agentEfficiencyScore;
113
- const color = scoreColor(scoreVal);
114
- const idShort = s.sessionId.length > 12 ? s.sessionId.slice(0, 12) : s.sessionId;
115
- console.log(` ${firstPassStr} ${output_1.pc.cyan(idShort.padEnd(14))} ${output_1.pc.dim(dateStr)} ${durationStr} ${verifyStr.padEnd(10)} ${fixStr.padEnd(8)} ${color(`${scoreVal}pts`)}`);
116
- }
117
- if (analysis.sessionSummaries.length > 20) {
118
- console.log(` ${output_1.pc.dim(`... and ${analysis.sessionSummaries.length - 20} more`)}`);
119
- }
120
- }
121
- // Aggregate Metrics
122
- section("Aggregate Metrics", "📈");
123
- console.log(` ${"Avg duration".padEnd(18)} ${output_1.pc.cyan(formatDuration(analysis.averageSessionDuration))}`);
124
- console.log(` ${"Avg verifies".padEnd(18)} ${output_1.pc.cyan(String(analysis.averageVerificationCycles))}`);
125
- console.log(` ${"Avg fixes".padEnd(18)} ${output_1.pc.cyan(String(analysis.averageFixCycles))}`);
126
- console.log(` ${"First-pass".padEnd(18)} ${rateColor(analysis.aggregateFirstPassRate)(`${analysis.aggregateFirstPassRate}%`.padEnd(8))} ${output_1.pc.dim(bar(analysis.aggregateFirstPassRate))}`);
127
- console.log(` ${"Fix success".padEnd(18)} ${rateColor(analysis.aggregateFixSuccessRate)(`${analysis.aggregateFixSuccessRate}%`.padEnd(8))} ${output_1.pc.dim(bar(analysis.aggregateFixSuccessRate))}`);
128
- console.log(` ${"Abandon rate".padEnd(18)} ${output_1.pc.dim(`${analysis.abandonRate}%`)}`);
129
- // Scores
130
- section("Scores", "🏆");
131
- console.log(` ${"Efficiency".padEnd(18)} ${scoreColor(analysis.averageEfficiencyScore)(`${analysis.averageEfficiencyScore}%`.padEnd(8))} ${output_1.pc.dim(bar(analysis.averageEfficiencyScore))}`);
132
- console.log(` ${"Confidence".padEnd(18)} ${scoreColor(analysis.averageCodeConfidence)(`${analysis.averageCodeConfidence}%`.padEnd(8))} ${output_1.pc.dim(bar(analysis.averageCodeConfidence))}`);
133
- // Most Problematic Files
134
- if (analysis.mostProblematicFiles.length > 0) {
135
- section("Problematic Files", "🔥");
136
- for (const f of analysis.mostProblematicFiles) {
137
- const label = shortPath(f.filePath);
138
- console.log(` ${output_1.pc.red("●")} ${label.padEnd(40)} ${output_1.pc.dim(`${f.fixEditCount} fix edit${f.fixEditCount !== 1 ? "s" : ""}`)}`);
139
- }
140
- }
141
- // Verdict Details (--detailed)
142
- if (opts.detailed) {
143
- section("All Verdict Details", "📋");
144
- for (const s of analysis.sessionSummaries) {
145
- const actionsFile = (0, path_1.join)(projectDir, ".ironbee", "sessions", s.sessionId, "actions.jsonl");
146
- const details = (0, verdict_details_1.extractVerdictDetails)(actionsFile);
147
- if (details && details.verdicts.length > 0) {
148
- const idShort = s.sessionId.length > 12 ? s.sessionId.slice(0, 12) : s.sessionId;
149
- console.log();
150
- console.log(` ${output_1.pc.bold(output_1.pc.cyan(idShort))} ${output_1.pc.dim(new Date(s.timestamp).toISOString().slice(0, 10))}`);
151
- for (let i = 0; i < details.verdicts.length; i++) {
152
- const v = details.verdicts[i];
153
- const statusIcon = v.status === "pass" ? output_1.pc.green("✓") : output_1.pc.red("✗");
154
- console.log(` ${statusIcon} ${output_1.pc.bold(`#${i + 1}`)} ${v.status === "pass" ? output_1.pc.green(v.status) : output_1.pc.red(v.status)}`);
155
- if (v.issues.length > 0) {
156
- console.log(` ${"Issues".padEnd(8)} ${output_1.pc.red(v.issues.join(", "))}`);
157
- }
158
- if (v.fixes.length > 0) {
159
- console.log(` ${"Fixes".padEnd(8)} ${output_1.pc.green(v.fixes.join(", "))}`);
160
- }
161
- }
162
- }
163
- }
164
- }
165
- console.log();
166
- }
167
- // ── Single-Session Output ────────────────────────────────
168
- function runSingleSessionAnalysis(sessionId, projectDir, opts) {
169
- const actionsFile = (0, path_1.join)(projectDir, ".ironbee", "sessions", sessionId, "actions.jsonl");
170
- const result = (0, time_analysis_1.analyzeTime)(actionsFile);
171
- const qualityResult = (0, verification_quality_1.analyzeVerificationQuality)(actionsFile);
172
- const codeChanges = (0, code_changes_1.analyzeCodeChanges)(actionsFile);
173
- const fixEffectiveness = (0, fix_effectiveness_1.analyzeFixEffectiveness)(actionsFile);
174
- const scoring = (0, scoring_1.calculateScoring)(result, qualityResult);
175
- if (result === null && qualityResult === null && codeChanges === null && fixEffectiveness === null) {
176
- output_1.log.warn("No analyzable session data found.");
177
- return;
178
- }
179
- const monitoringOnly = isMonitoringOnlySession(actionsFile);
180
- if (opts.json) {
181
- const output = { ...result, ...qualityResult, ...codeChanges, ...fixEffectiveness, ...scoring };
182
- if (monitoringOnly) {
183
- output.mode = "monitoring-only";
184
- }
185
- if (opts.detailed) {
186
- const details = (0, verdict_details_1.extractVerdictDetails)(actionsFile);
187
- if (details) {
188
- output.verdicts = details.verdicts;
189
- }
190
- }
191
- console.log(JSON.stringify(output, null, 2));
192
- return;
193
- }
194
- if (result !== null) {
195
- console.log();
196
- console.log(` 📊 ${output_1.pc.bold("Session:")} ${output_1.pc.cyan(sessionId)}`);
197
- console.log(` ${output_1.pc.bold("Duration:")} ${output_1.pc.cyan(formatDuration(result.sessionDuration))}`);
198
- if (monitoringOnly) {
199
- console.log(` ${output_1.pc.yellow("⚠")} ${output_1.pc.yellow("Monitoring-only mode")} ${output_1.pc.dim("— verification metrics unavailable for this session")}`);
200
- }
201
- section("Phase Distribution", "⏱️");
202
- const codingBar = bar(result.codingPercent);
203
- const verifyBar = bar(result.verificationPercent);
204
- const fixBar = bar(result.fixPercent);
205
- console.log(` ${"Coding".padEnd(18)} ${output_1.pc.cyan(formatDuration(result.codingTime).padEnd(10))} ${output_1.pc.green(codingBar)} ${output_1.pc.dim(`${result.codingPercent}%`)}`);
206
- console.log(` ${"Verification".padEnd(18)} ${output_1.pc.cyan(formatDuration(result.verificationTime).padEnd(10))} ${output_1.pc.blue(verifyBar)} ${output_1.pc.dim(`${result.verificationPercent}%`)}`);
207
- console.log(` ${"Fixing".padEnd(18)} ${output_1.pc.cyan(formatDuration(result.fixTime).padEnd(10))} ${output_1.pc.yellow(fixBar)} ${output_1.pc.dim(`${result.fixPercent}%`)}`);
208
- section("Cycles", "🔄");
209
- console.log(` ${"Verifications".padEnd(18)} ${output_1.pc.cyan(String(result.verificationCycles))}`);
210
- console.log(` ${"Fixes".padEnd(18)} ${output_1.pc.cyan(String(result.fixCycles))}`);
211
- console.log(` ${"Avg verify".padEnd(18)} ${result.averageVerificationDuration !== null ? output_1.pc.cyan(formatDuration(result.averageVerificationDuration)) : output_1.pc.dim("n/a")}`);
212
- console.log(` ${"Avg fix".padEnd(18)} ${result.averageFixDuration !== null ? output_1.pc.cyan(formatDuration(result.averageFixDuration)) : output_1.pc.dim("n/a")}`);
213
- console.log(` ${"First verify".padEnd(18)} ${result.timeToFirstVerification !== null ? output_1.pc.cyan(formatDuration(result.timeToFirstVerification)) : output_1.pc.dim("n/a")}`);
214
- }
215
- if (qualityResult !== null) {
216
- section("Verification Quality", "✅");
217
- const passRate = `${qualityResult.firstPassSuccessRate}%`;
218
- console.log(` ${"First-pass rate".padEnd(18)} ${rateColor(qualityResult.firstPassSuccessRate)(passRate.padEnd(8))} ${output_1.pc.dim(bar(qualityResult.firstPassSuccessRate))}`);
219
- console.log(` ${"Verdicts".padEnd(18)} ${output_1.pc.cyan(String(qualityResult.totalVerifications).padEnd(8))} ${output_1.pc.dim(`(${output_1.pc.green(`${qualityResult.passCount} pass`)}, ${output_1.pc.red(`${qualityResult.failCount} fail`)})`)}`);
220
- console.log(` ${"Avg retries".padEnd(18)} ${output_1.pc.cyan(String(qualityResult.averageRetries))}`);
221
- console.log(` ${"Avg checks".padEnd(18)} ${output_1.pc.cyan(String(qualityResult.averageChecksCount))}`);
222
- }
223
- if (codeChanges !== null) {
224
- section("Code Changes", "📝");
225
- console.log(` ${"Total edits".padEnd(18)} ${output_1.pc.cyan(String(codeChanges.totalFileEdits))}`);
226
- console.log(` ${"Unique files".padEnd(18)} ${output_1.pc.cyan(String(codeChanges.uniqueFilesEdited))}`);
227
- console.log(` ${"Avg per verify".padEnd(18)} ${output_1.pc.cyan(String(codeChanges.filesEditedPerVerification))}`);
228
- console.log(` ${"Avg per fix".padEnd(18)} ${output_1.pc.cyan(String(codeChanges.filesChangedPerFix))}`);
229
- if (codeChanges.hotFiles.length > 0) {
230
- console.log();
231
- console.log(` ${output_1.pc.bold("🔥 Hot Files:")}`);
232
- for (const f of codeChanges.hotFiles) {
233
- const label = shortPath(f.filePath);
234
- console.log(` ${output_1.pc.yellow("●")} ${label.padEnd(40)} ${output_1.pc.dim(`${f.editCount} edit${f.editCount !== 1 ? "s" : ""}`)}`);
235
- }
236
- }
237
- if (codeChanges.problematicFiles.length > 0) {
238
- console.log();
239
- console.log(` ${output_1.pc.bold("⚠️ Problematic Files:")}`);
240
- for (const f of codeChanges.problematicFiles) {
241
- const label = shortPath(f.filePath);
242
- console.log(` ${output_1.pc.red("●")} ${label.padEnd(40)} ${output_1.pc.dim(`${f.fixEditCount} fix edit${f.fixEditCount !== 1 ? "s" : ""}`)}`);
243
- }
244
- }
245
- if (codeChanges.editChurnFiles.length > 0) {
246
- console.log();
247
- console.log(` ${output_1.pc.bold("🔁 Edit Churn")} ${output_1.pc.dim("(edited in 2+ fix cycles):")}`);
248
- for (const filePath of codeChanges.editChurnFiles) {
249
- console.log(` ${output_1.pc.red("●")} ${shortPath(filePath)}`);
250
- }
251
- }
252
- }
253
- if (fixEffectiveness !== null) {
254
- section("Fix Effectiveness", "🔧");
255
- console.log(` ${"Success rate".padEnd(18)} ${rateColor(fixEffectiveness.fixSuccessRate)(`${fixEffectiveness.fixSuccessRate}%`.padEnd(8))} ${output_1.pc.dim(bar(fixEffectiveness.fixSuccessRate))} ${output_1.pc.dim(`${fixEffectiveness.successfulFixes}/${fixEffectiveness.totalFixAttempts}`)}`);
256
- const reFailStr = fixEffectiveness.reFailRate > 0 ? `${fixEffectiveness.reFailRate}%` : "0%";
257
- const reFailColored = fixEffectiveness.reFailRate > 0 ? output_1.pc.red(reFailStr.padEnd(8)) : output_1.pc.green(reFailStr.padEnd(8));
258
- console.log(` ${"Re-fail rate".padEnd(18)} ${reFailColored} ${output_1.pc.dim(bar(fixEffectiveness.reFailRate))} ${output_1.pc.dim(`${fixEffectiveness.failedFixes}/${fixEffectiveness.totalFixAttempts}`)}`);
259
- console.log(` ${"Fix/verify".padEnd(18)} ${output_1.pc.cyan(String(fixEffectiveness.fixToVerifyRatio))}`);
260
- }
261
- if (scoring !== null) {
262
- section("Scoring", "🏆");
263
- console.log(` ${"Efficiency".padEnd(18)} ${scoreColor(scoring.agentEfficiencyScore)(`${scoring.agentEfficiencyScore}%`.padEnd(8))} ${output_1.pc.dim(bar(scoring.agentEfficiencyScore))}`);
264
- console.log(` ${"Quality".padEnd(18)} ${scoreColor(scoring.verificationQualityScore)(`${scoring.verificationQualityScore}%`.padEnd(8))} ${output_1.pc.dim(bar(scoring.verificationQualityScore))}`);
265
- console.log(` ${"Confidence".padEnd(18)} ${scoreColor(scoring.codeConfidenceScore)(`${scoring.codeConfidenceScore}%`.padEnd(8))} ${output_1.pc.dim(bar(scoring.codeConfidenceScore))}`);
266
- }
267
- if (opts.detailed) {
268
- const details = (0, verdict_details_1.extractVerdictDetails)(actionsFile);
269
- if (details) {
270
- section("Verdict Details", "📋");
271
- for (let i = 0; i < details.verdicts.length; i++) {
272
- const v = details.verdicts[i];
273
- const statusIcon = v.status === "pass" ? output_1.pc.green("✓") : output_1.pc.red("✗");
274
- const dateStr = new Date(v.timestamp).toISOString().slice(0, 19).replace("T", " ");
275
- console.log(` ${statusIcon} ${output_1.pc.bold(`#${i + 1}`)} ${output_1.pc.dim(dateStr)} ${v.status === "pass" ? output_1.pc.green(v.status) : output_1.pc.red(v.status)}`);
276
- if (v.checks.length > 0) {
277
- console.log(` ${"Checks".padEnd(10)} ${v.checks.join(", ")}`);
278
- }
279
- if (v.issues.length > 0) {
280
- console.log(` ${"Issues".padEnd(10)} ${output_1.pc.red(v.issues.join(", "))}`);
281
- }
282
- if (v.fixes.length > 0) {
283
- console.log(` ${"Fixes".padEnd(10)} ${output_1.pc.green(v.fixes.join(", "))}`);
284
- }
285
- }
286
- }
287
- }
288
- console.log();
289
- }
290
- exports.analyzeCommand = new commander_1.Command("analyze")
291
- .description("Analyze session metrics (single session or all sessions)")
292
- .argument("[session-id]", "session ID to analyze (omit for cross-session analysis)")
293
- .option("--project-dir <dir>", "project directory")
294
- .option("--json", "output as JSON")
295
- .option("--detailed", "include verdict details (checks, issues, fixes) for semantic analysis")
296
- .option("--all", "analyze all sessions in the project")
297
- .action((sessionId, opts) => {
298
- const projectDir = (0, path_1.resolve)(opts.projectDir ?? ".");
299
- // Cross-session mode: no session-id or --all flag
300
- if (sessionId === undefined || opts.all === true) {
301
- const sessionsDir = (0, path_1.join)(projectDir, ".ironbee", "sessions");
302
- const crossResult = (0, cross_session_1.analyzeCrossSessions)(sessionsDir);
303
- if (crossResult === null) {
304
- output_1.log.warn("No sessions found to analyze.");
305
- return;
306
- }
307
- if (opts.json) {
308
- const output = crossResult;
309
- if (opts.detailed) {
310
- const allVerdicts = [];
311
- for (const s of crossResult.sessionSummaries) {
312
- const actionsFile = (0, path_1.join)(projectDir, ".ironbee", "sessions", s.sessionId, "actions.jsonl");
313
- const details = (0, verdict_details_1.extractVerdictDetails)(actionsFile);
314
- if (details) {
315
- allVerdicts.push({ sessionId: s.sessionId, verdicts: details.verdicts });
316
- }
317
- }
318
- output.verdictDetails = allVerdicts;
319
- }
320
- console.log(JSON.stringify(output, null, 2));
321
- return;
322
- }
323
- printCrossSessionAnalysis(crossResult, projectDir, opts);
324
- return;
325
- }
326
- // Single-session mode
327
- runSingleSessionAnalysis(sessionId, projectDir, opts);
328
- });
329
- //# sourceMappingURL=analyze.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"analyze.js","sourceRoot":"","sources":["../../src/commands/analyze.ts"],"names":[],"mappings":"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"}