@ironbee-ai/cli 0.14.1 → 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.
- package/CHANGELOG.md +10 -0
- package/README.md +2 -95
- package/dist/clients/claude/index.d.ts.map +1 -1
- package/dist/clients/claude/index.js +11 -14
- package/dist/clients/claude/index.js.map +1 -1
- package/dist/clients/cursor/hooks/session-start.js +1 -1
- package/dist/clients/cursor/hooks/session-start.js.map +1 -1
- package/dist/clients/cursor/index.d.ts.map +1 -1
- package/dist/clients/cursor/index.js +9 -13
- package/dist/clients/cursor/index.js.map +1 -1
- package/dist/commands/status.js +1 -1
- package/dist/commands/verify.d.ts.map +1 -1
- package/dist/commands/verify.js +1 -2
- package/dist/commands/verify.js.map +1 -1
- package/dist/index.js +0 -3
- package/dist/index.js.map +1 -1
- package/dist/lib/fs-prune.d.ts +1 -1
- package/dist/lib/fs-prune.js +1 -1
- package/dist/tui/sessions/area.d.ts.map +1 -1
- package/dist/tui/sessions/area.js +2 -45
- package/dist/tui/sessions/area.js.map +1 -1
- package/package.json +1 -1
- package/dist/analysis/code-changes.d.ts +0 -22
- package/dist/analysis/code-changes.d.ts.map +0 -1
- package/dist/analysis/code-changes.js +0 -141
- package/dist/analysis/code-changes.js.map +0 -1
- package/dist/analysis/cross-session.d.ts +0 -34
- package/dist/analysis/cross-session.d.ts.map +0 -1
- package/dist/analysis/cross-session.js +0 -230
- package/dist/analysis/cross-session.js.map +0 -1
- package/dist/analysis/fix-effectiveness.d.ts +0 -16
- package/dist/analysis/fix-effectiveness.d.ts.map +0 -1
- package/dist/analysis/fix-effectiveness.js +0 -99
- package/dist/analysis/fix-effectiveness.js.map +0 -1
- package/dist/analysis/scoring.d.ts +0 -15
- package/dist/analysis/scoring.d.ts.map +0 -1
- package/dist/analysis/scoring.js +0 -59
- package/dist/analysis/scoring.js.map +0 -1
- package/dist/analysis/time-analysis.d.ts +0 -22
- package/dist/analysis/time-analysis.d.ts.map +0 -1
- package/dist/analysis/time-analysis.js +0 -174
- package/dist/analysis/time-analysis.js.map +0 -1
- package/dist/analysis/verdict-details.d.ts +0 -23
- package/dist/analysis/verdict-details.d.ts.map +0 -1
- package/dist/analysis/verdict-details.js +0 -59
- package/dist/analysis/verdict-details.js.map +0 -1
- package/dist/analysis/verification-quality.d.ts +0 -20
- package/dist/analysis/verification-quality.d.ts.map +0 -1
- package/dist/analysis/verification-quality.js +0 -145
- package/dist/analysis/verification-quality.js.map +0 -1
- package/dist/clients/claude/commands/ironbee-analyze.md +0 -42
- package/dist/clients/cursor/commands/ironbee-analyze/SKILL.md +0 -48
- package/dist/commands/analyze.d.ts +0 -3
- package/dist/commands/analyze.d.ts.map +0 -1
- package/dist/commands/analyze.js +0 -329
- package/dist/commands/analyze.js.map +0 -1
package/dist/lib/fs-prune.js
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
*
|
|
5
5
|
* Used by client `uninstall` to clean up directories ironbee owned once their
|
|
6
6
|
* files are gone: e.g. `.claude/commands`, `.claude/rules`, `.claude/skills`
|
|
7
|
-
* (and Cursor's nested `.cursor/skills/ironbee-
|
|
7
|
+
* (and Cursor's nested `.cursor/skills/ironbee-verify/`), then the `.claude` /
|
|
8
8
|
* `.cursor` root itself when nothing else remains. A dangling empty `.claude` /
|
|
9
9
|
* `.cursor` also makes `IClient.detect` (which checks for the dir) report the
|
|
10
10
|
* project as still present — pruning keeps detection honest.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"area.d.ts","sourceRoot":"","sources":["../../../src/tui/sessions/area.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;
|
|
1
|
+
{"version":3,"file":"area.d.ts","sourceRoot":"","sources":["../../../src/tui/sessions/area.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,EAA2B,OAAO,EAAE,MAAM,eAAe,CAAC;AAyLjE,eAAO,MAAM,YAAY,EAAE,OAO1B,CAAC"}
|
|
@@ -42,16 +42,9 @@ var __importStar = (this && this.__importStar) || (function () {
|
|
|
42
42
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
43
43
|
exports.sessionsArea = void 0;
|
|
44
44
|
const blessed = __importStar(require("blessed"));
|
|
45
|
-
const path_1 = require("path");
|
|
46
|
-
const code_changes_1 = require("../../analysis/code-changes");
|
|
47
|
-
const cross_session_1 = require("../../analysis/cross-session");
|
|
48
|
-
const fix_effectiveness_1 = require("../../analysis/fix-effectiveness");
|
|
49
|
-
const scoring_1 = require("../../analysis/scoring");
|
|
50
|
-
const time_analysis_1 = require("../../analysis/time-analysis");
|
|
51
|
-
const verification_quality_1 = require("../../analysis/verification-quality");
|
|
52
45
|
const util_1 = require("../shell/util");
|
|
53
46
|
const read_1 = require("./read");
|
|
54
|
-
const STATUS = " {bold}↑/↓{/bold} move {bold}v{/bold} verify
|
|
47
|
+
const STATUS = " {bold}↑/↓{/bold} move {bold}v{/bold} verify "
|
|
55
48
|
+ "{bold}r{/bold} refresh {bold}Esc{/bold} back {bold}q{/bold} quit";
|
|
56
49
|
function verdictColor(status) {
|
|
57
50
|
if (status === "pass") {
|
|
@@ -200,45 +193,9 @@ function mountSessionsView(ctx) {
|
|
|
200
193
|
}
|
|
201
194
|
ctx.session.showPane(`Verify (dry-run) — ${s.id}`, lines.join("\n"));
|
|
202
195
|
}
|
|
203
|
-
function section(title, value) {
|
|
204
|
-
const body = value === null || value === undefined
|
|
205
|
-
? "{gray-fg}(n/a){/gray-fg}"
|
|
206
|
-
: (0, util_1.escapeTags)(JSON.stringify(value, null, 2));
|
|
207
|
-
return `{bold}{cyan-fg}${title}{/cyan-fg}{/bold}\n${body}`;
|
|
208
|
-
}
|
|
209
|
-
function analyzeSession() {
|
|
210
|
-
const s = current();
|
|
211
|
-
if (s === undefined) {
|
|
212
|
-
return;
|
|
213
|
-
}
|
|
214
|
-
const actionsFile = (0, path_1.join)(projectDir, ".ironbee", "sessions", s.id, "actions.jsonl");
|
|
215
|
-
const time = (0, time_analysis_1.analyzeTime)(actionsFile);
|
|
216
|
-
const quality = (0, verification_quality_1.analyzeVerificationQuality)(actionsFile);
|
|
217
|
-
const code = (0, code_changes_1.analyzeCodeChanges)(actionsFile);
|
|
218
|
-
const fix = (0, fix_effectiveness_1.analyzeFixEffectiveness)(actionsFile);
|
|
219
|
-
const scoring = (0, scoring_1.calculateScoring)(time, quality);
|
|
220
|
-
const content = [
|
|
221
|
-
section("Scoring", scoring),
|
|
222
|
-
section("Time", time),
|
|
223
|
-
section("Verification quality", quality),
|
|
224
|
-
section("Code changes", code),
|
|
225
|
-
section("Fix effectiveness", fix),
|
|
226
|
-
].join("\n\n");
|
|
227
|
-
ctx.session.showPane(`Analyze — ${s.id}`, content);
|
|
228
|
-
}
|
|
229
196
|
list.key(["up", "k"], () => move(-1));
|
|
230
197
|
list.key(["down", "j"], () => move(1));
|
|
231
|
-
function analyzeAllSessions() {
|
|
232
|
-
const sessionsDir = (0, path_1.join)(projectDir, ".ironbee", "sessions");
|
|
233
|
-
const analysis = ctx.session.silently(() => (0, cross_session_1.analyzeCrossSessions)(sessionsDir));
|
|
234
|
-
const content = analysis === null
|
|
235
|
-
? "{gray-fg}No sessions to analyze in this project.{/gray-fg}"
|
|
236
|
-
: (0, util_1.escapeTags)(JSON.stringify(analysis, null, 2));
|
|
237
|
-
ctx.session.showPane("Analyze — all sessions (project aggregate)", content);
|
|
238
|
-
}
|
|
239
198
|
list.key(["v"], () => verifySession());
|
|
240
|
-
list.key(["a"], () => analyzeSession());
|
|
241
|
-
list.key(["S-a"], () => analyzeAllSessions());
|
|
242
199
|
list.key(["r"], () => {
|
|
243
200
|
sessions = (0, read_1.listSessions)(projectDir);
|
|
244
201
|
index = (0, util_1.clamp)(index, 0, Math.max(0, sessions.length - 1));
|
|
@@ -258,7 +215,7 @@ function mountSessionsView(ctx) {
|
|
|
258
215
|
exports.sessionsArea = {
|
|
259
216
|
id: "sessions",
|
|
260
217
|
title: "Sessions",
|
|
261
|
-
summary: "Browse sessions + verify
|
|
218
|
+
summary: "Browse sessions + verify (dry-run verdict validation)",
|
|
262
219
|
mount(ctx) {
|
|
263
220
|
return mountSessionsView(ctx);
|
|
264
221
|
},
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"area.js","sourceRoot":"","sources":["../../../src/tui/sessions/area.ts"],"names":[],"mappings":";AAAA;;;;;;GAMG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEH,iDAAmC;
|
|
1
|
+
{"version":3,"file":"area.js","sourceRoot":"","sources":["../../../src/tui/sessions/area.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* IronBee — Code Change Analysis
|
|
3
|
-
*
|
|
4
|
-
* Reads actions.jsonl and calculates code change metrics.
|
|
5
|
-
* Pure logic — no process.exit, no stdin, no side effects.
|
|
6
|
-
*/
|
|
7
|
-
export interface FileStats {
|
|
8
|
-
filePath: string;
|
|
9
|
-
editCount: number;
|
|
10
|
-
fixEditCount: number;
|
|
11
|
-
}
|
|
12
|
-
export interface CodeChangeAnalysis {
|
|
13
|
-
totalFileEdits: number;
|
|
14
|
-
uniqueFilesEdited: number;
|
|
15
|
-
filesEditedPerVerification: number;
|
|
16
|
-
filesChangedPerFix: number;
|
|
17
|
-
hotFiles: FileStats[];
|
|
18
|
-
problematicFiles: FileStats[];
|
|
19
|
-
editChurnFiles: string[];
|
|
20
|
-
}
|
|
21
|
-
export declare function analyzeCodeChanges(actionsFile: string): CodeChangeAnalysis | null;
|
|
22
|
-
//# sourceMappingURL=code-changes.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"code-changes.d.ts","sourceRoot":"","sources":["../../src/analysis/code-changes.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAKH,MAAM,WAAW,SAAS;IACtB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,kBAAkB;IAC/B,cAAc,EAAE,MAAM,CAAC;IACvB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,0BAA0B,EAAE,MAAM,CAAC;IACnC,kBAAkB,EAAE,MAAM,CAAC;IAC3B,QAAQ,EAAE,SAAS,EAAE,CAAC;IACtB,gBAAgB,EAAE,SAAS,EAAE,CAAC;IAC9B,cAAc,EAAE,MAAM,EAAE,CAAC;CAC5B;AAuBD,wBAAgB,kBAAkB,CAAC,WAAW,EAAE,MAAM,GAAG,kBAAkB,GAAG,IAAI,CAqIjF"}
|
|
@@ -1,141 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
/**
|
|
3
|
-
* IronBee — Code Change Analysis
|
|
4
|
-
*
|
|
5
|
-
* Reads actions.jsonl and calculates code change metrics.
|
|
6
|
-
* Pure logic — no process.exit, no stdin, no side effects.
|
|
7
|
-
*/
|
|
8
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
-
exports.analyzeCodeChanges = analyzeCodeChanges;
|
|
10
|
-
const fs_1 = require("fs");
|
|
11
|
-
function parseEntries(actionsFile) {
|
|
12
|
-
if (!(0, fs_1.existsSync)(actionsFile)) {
|
|
13
|
-
return [];
|
|
14
|
-
}
|
|
15
|
-
const content = (0, fs_1.readFileSync)(actionsFile, "utf-8");
|
|
16
|
-
const lines = content.trim().split("\n").filter((l) => l.length > 0);
|
|
17
|
-
const entries = [];
|
|
18
|
-
for (const line of lines) {
|
|
19
|
-
try {
|
|
20
|
-
const entry = JSON.parse(line);
|
|
21
|
-
entries.push(entry);
|
|
22
|
-
}
|
|
23
|
-
catch {
|
|
24
|
-
// skip malformed lines
|
|
25
|
-
}
|
|
26
|
-
}
|
|
27
|
-
return entries;
|
|
28
|
-
}
|
|
29
|
-
function analyzeCodeChanges(actionsFile) {
|
|
30
|
-
const entries = parseEntries(actionsFile);
|
|
31
|
-
// Collect all file_change entries
|
|
32
|
-
const fileEdits = entries.filter((e) => e.type === "file_change");
|
|
33
|
-
if (fileEdits.length === 0) {
|
|
34
|
-
return null;
|
|
35
|
-
}
|
|
36
|
-
const totalFileEdits = fileEdits.length;
|
|
37
|
-
// Unique files
|
|
38
|
-
const uniqueFiles = new Set();
|
|
39
|
-
for (const edit of fileEdits) {
|
|
40
|
-
const filePath = edit.file_path;
|
|
41
|
-
if (typeof filePath === "string") {
|
|
42
|
-
uniqueFiles.add(filePath);
|
|
43
|
-
}
|
|
44
|
-
}
|
|
45
|
-
const uniqueFilesEdited = uniqueFiles.size;
|
|
46
|
-
// Track phases and count edits per phase type
|
|
47
|
-
let inFixPhase = false;
|
|
48
|
-
let currentFixId = null;
|
|
49
|
-
let codingEditCount = 0;
|
|
50
|
-
let fixEditCount = 0;
|
|
51
|
-
let verificationCount = 0;
|
|
52
|
-
let fixCount = 0;
|
|
53
|
-
// Per-file stats
|
|
54
|
-
const fileEditCounts = new Map();
|
|
55
|
-
const fileFixEditCounts = new Map();
|
|
56
|
-
// Track which fix cycles each file appears in (for churn detection)
|
|
57
|
-
const fileFixCycles = new Map();
|
|
58
|
-
for (const entry of entries) {
|
|
59
|
-
if (entry.type === "fix_start") {
|
|
60
|
-
inFixPhase = true;
|
|
61
|
-
currentFixId = entry.fix_id;
|
|
62
|
-
fixCount++;
|
|
63
|
-
continue;
|
|
64
|
-
}
|
|
65
|
-
if (entry.type === "fix_end") {
|
|
66
|
-
inFixPhase = false;
|
|
67
|
-
currentFixId = null;
|
|
68
|
-
continue;
|
|
69
|
-
}
|
|
70
|
-
if (entry.type === "verification_start") {
|
|
71
|
-
inFixPhase = false;
|
|
72
|
-
currentFixId = null;
|
|
73
|
-
verificationCount++;
|
|
74
|
-
continue;
|
|
75
|
-
}
|
|
76
|
-
if (entry.type === "file_change") {
|
|
77
|
-
const filePath = entry.file_path;
|
|
78
|
-
if (inFixPhase) {
|
|
79
|
-
fixEditCount++;
|
|
80
|
-
if (typeof filePath === "string") {
|
|
81
|
-
const currentCount = fileFixEditCounts.get(filePath) ?? 0;
|
|
82
|
-
fileFixEditCounts.set(filePath, currentCount + 1);
|
|
83
|
-
if (typeof currentFixId === "string") {
|
|
84
|
-
let cycles = fileFixCycles.get(filePath);
|
|
85
|
-
if (cycles === undefined) {
|
|
86
|
-
cycles = new Set();
|
|
87
|
-
fileFixCycles.set(filePath, cycles);
|
|
88
|
-
}
|
|
89
|
-
cycles.add(currentFixId);
|
|
90
|
-
}
|
|
91
|
-
}
|
|
92
|
-
}
|
|
93
|
-
else {
|
|
94
|
-
codingEditCount++;
|
|
95
|
-
}
|
|
96
|
-
if (typeof filePath === "string") {
|
|
97
|
-
const currentCount = fileEditCounts.get(filePath) ?? 0;
|
|
98
|
-
fileEditCounts.set(filePath, currentCount + 1);
|
|
99
|
-
}
|
|
100
|
-
}
|
|
101
|
-
}
|
|
102
|
-
// filesEditedPerVerification: coding edits / verification count
|
|
103
|
-
const filesEditedPerVerification = verificationCount > 0
|
|
104
|
-
? Math.round((codingEditCount / verificationCount) * 10) / 10
|
|
105
|
-
: 0;
|
|
106
|
-
// filesChangedPerFix: fix edits / fix count
|
|
107
|
-
const filesChangedPerFix = fixCount > 0
|
|
108
|
-
? Math.round((fixEditCount / fixCount) * 10) / 10
|
|
109
|
-
: 0;
|
|
110
|
-
// hotFiles: top 5 by total edit count
|
|
111
|
-
const allFileStats = [];
|
|
112
|
-
for (const [filePath, editCount] of fileEditCounts) {
|
|
113
|
-
const fixEdits = fileFixEditCounts.get(filePath) ?? 0;
|
|
114
|
-
allFileStats.push({ filePath, editCount, fixEditCount: fixEdits });
|
|
115
|
-
}
|
|
116
|
-
const hotFiles = [...allFileStats]
|
|
117
|
-
.sort((a, b) => b.editCount - a.editCount)
|
|
118
|
-
.slice(0, 5);
|
|
119
|
-
// problematicFiles: top 5 by fix edit count, only those with fixEditCount > 0
|
|
120
|
-
const problematicFiles = [...allFileStats]
|
|
121
|
-
.filter((f) => f.fixEditCount > 0)
|
|
122
|
-
.sort((a, b) => b.fixEditCount - a.fixEditCount)
|
|
123
|
-
.slice(0, 5);
|
|
124
|
-
// editChurnFiles: files edited in 2+ different fix cycles
|
|
125
|
-
const editChurnFiles = [];
|
|
126
|
-
for (const [filePath, cycles] of fileFixCycles) {
|
|
127
|
-
if (cycles.size >= 2) {
|
|
128
|
-
editChurnFiles.push(filePath);
|
|
129
|
-
}
|
|
130
|
-
}
|
|
131
|
-
return {
|
|
132
|
-
totalFileEdits,
|
|
133
|
-
uniqueFilesEdited,
|
|
134
|
-
filesEditedPerVerification,
|
|
135
|
-
filesChangedPerFix,
|
|
136
|
-
hotFiles,
|
|
137
|
-
problematicFiles,
|
|
138
|
-
editChurnFiles,
|
|
139
|
-
};
|
|
140
|
-
}
|
|
141
|
-
//# sourceMappingURL=code-changes.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"code-changes.js","sourceRoot":"","sources":["../../src/analysis/code-changes.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,34 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* IronBee — Cross-Session Analysis
|
|
3
|
-
*
|
|
4
|
-
* Scans all sessions in .ironbee/sessions/ and produces aggregate metrics.
|
|
5
|
-
* Pure logic — no process.exit, no stdin, no side effects.
|
|
6
|
-
*/
|
|
7
|
-
export interface SessionSummary {
|
|
8
|
-
sessionId: string;
|
|
9
|
-
timestamp: number;
|
|
10
|
-
duration: number;
|
|
11
|
-
verificationCycles: number;
|
|
12
|
-
fixCycles: number;
|
|
13
|
-
firstPassSuccess: boolean;
|
|
14
|
-
lastVerdictStatus: string | null;
|
|
15
|
-
agentEfficiencyScore: number;
|
|
16
|
-
}
|
|
17
|
-
export interface CrossSessionAnalysis {
|
|
18
|
-
totalSessions: number;
|
|
19
|
-
sessionSummaries: SessionSummary[];
|
|
20
|
-
aggregateFirstPassRate: number;
|
|
21
|
-
aggregateFixSuccessRate: number;
|
|
22
|
-
averageSessionDuration: number;
|
|
23
|
-
averageVerificationCycles: number;
|
|
24
|
-
averageFixCycles: number;
|
|
25
|
-
averageEfficiencyScore: number;
|
|
26
|
-
averageCodeConfidence: number;
|
|
27
|
-
mostProblematicFiles: Array<{
|
|
28
|
-
filePath: string;
|
|
29
|
-
fixEditCount: number;
|
|
30
|
-
}>;
|
|
31
|
-
abandonRate: number;
|
|
32
|
-
}
|
|
33
|
-
export declare function analyzeCrossSessions(sessionsDir: string): CrossSessionAnalysis | null;
|
|
34
|
-
//# sourceMappingURL=cross-session.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"cross-session.d.ts","sourceRoot":"","sources":["../../src/analysis/cross-session.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAWH,MAAM,WAAW,cAAc;IAC3B,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,SAAS,EAAE,MAAM,CAAC;IAClB,gBAAgB,EAAE,OAAO,CAAC;IAC1B,iBAAiB,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,oBAAoB,EAAE,MAAM,CAAC;CAChC;AAED,MAAM,WAAW,oBAAoB;IACjC,aAAa,EAAE,MAAM,CAAC;IACtB,gBAAgB,EAAE,cAAc,EAAE,CAAC;IACnC,sBAAsB,EAAE,MAAM,CAAC;IAC/B,uBAAuB,EAAE,MAAM,CAAC;IAChC,sBAAsB,EAAE,MAAM,CAAC;IAC/B,yBAAyB,EAAE,MAAM,CAAC;IAClC,gBAAgB,EAAE,MAAM,CAAC;IACzB,sBAAsB,EAAE,MAAM,CAAC;IAC/B,qBAAqB,EAAE,MAAM,CAAC;IAC9B,oBAAoB,EAAE,KAAK,CAAC;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,YAAY,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACxE,WAAW,EAAE,MAAM,CAAC;CACvB;AAiFD,wBAAgB,oBAAoB,CAAC,WAAW,EAAE,MAAM,GAAG,oBAAoB,GAAG,IAAI,CA2KrF"}
|
|
@@ -1,230 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
/**
|
|
3
|
-
* IronBee — Cross-Session Analysis
|
|
4
|
-
*
|
|
5
|
-
* Scans all sessions in .ironbee/sessions/ and produces aggregate metrics.
|
|
6
|
-
* Pure logic — no process.exit, no stdin, no side effects.
|
|
7
|
-
*/
|
|
8
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
-
exports.analyzeCrossSessions = analyzeCrossSessions;
|
|
10
|
-
const fs_1 = require("fs");
|
|
11
|
-
const path_1 = require("path");
|
|
12
|
-
const time_analysis_1 = require("./time-analysis");
|
|
13
|
-
const verification_quality_1 = require("./verification-quality");
|
|
14
|
-
const fix_effectiveness_1 = require("./fix-effectiveness");
|
|
15
|
-
const code_changes_1 = require("./code-changes");
|
|
16
|
-
const scoring_1 = require("./scoring");
|
|
17
|
-
function parseEntries(actionsFile) {
|
|
18
|
-
if (!(0, fs_1.existsSync)(actionsFile)) {
|
|
19
|
-
return [];
|
|
20
|
-
}
|
|
21
|
-
const content = (0, fs_1.readFileSync)(actionsFile, "utf-8");
|
|
22
|
-
const trimmed = content.trim();
|
|
23
|
-
if (trimmed.length === 0) {
|
|
24
|
-
return [];
|
|
25
|
-
}
|
|
26
|
-
const lines = trimmed.split("\n").filter((l) => l.length > 0);
|
|
27
|
-
const entries = [];
|
|
28
|
-
for (const line of lines) {
|
|
29
|
-
try {
|
|
30
|
-
const entry = JSON.parse(line);
|
|
31
|
-
entries.push(entry);
|
|
32
|
-
}
|
|
33
|
-
catch {
|
|
34
|
-
// skip malformed lines
|
|
35
|
-
}
|
|
36
|
-
}
|
|
37
|
-
return entries;
|
|
38
|
-
}
|
|
39
|
-
function hasSessionReconcile(actionsFile) {
|
|
40
|
-
const entries = parseEntries(actionsFile);
|
|
41
|
-
return entries.some((e) => e.reason === "session_reconcile");
|
|
42
|
-
}
|
|
43
|
-
function getSessionTimestamp(actionsFile) {
|
|
44
|
-
const entries = parseEntries(actionsFile);
|
|
45
|
-
const sessionStart = entries.find((e) => e.type === "session_start");
|
|
46
|
-
if (sessionStart) {
|
|
47
|
-
return sessionStart.timestamp;
|
|
48
|
-
}
|
|
49
|
-
// Fallback: use first entry timestamp
|
|
50
|
-
if (entries.length > 0) {
|
|
51
|
-
return entries[0].timestamp;
|
|
52
|
-
}
|
|
53
|
-
return null;
|
|
54
|
-
}
|
|
55
|
-
function isFirstVerdictPass(actionsFile) {
|
|
56
|
-
const entries = parseEntries(actionsFile);
|
|
57
|
-
for (const entry of entries) {
|
|
58
|
-
if (entry.type === "verdict_write") {
|
|
59
|
-
const verdict = entry.verdict;
|
|
60
|
-
if (typeof verdict === "object" && verdict !== null) {
|
|
61
|
-
const v = verdict;
|
|
62
|
-
return v.status === "pass";
|
|
63
|
-
}
|
|
64
|
-
return false;
|
|
65
|
-
}
|
|
66
|
-
}
|
|
67
|
-
return false;
|
|
68
|
-
}
|
|
69
|
-
function hasAnyVerdict(actionsFile) {
|
|
70
|
-
const entries = parseEntries(actionsFile);
|
|
71
|
-
return entries.some((e) => e.type === "verdict_write");
|
|
72
|
-
}
|
|
73
|
-
function getLastVerdictStatus(actionsFile) {
|
|
74
|
-
const entries = parseEntries(actionsFile);
|
|
75
|
-
for (let i = entries.length - 1; i >= 0; i--) {
|
|
76
|
-
if (entries[i].type === "verdict_write") {
|
|
77
|
-
const verdict = entries[i].verdict;
|
|
78
|
-
if (verdict && typeof verdict.status === "string") {
|
|
79
|
-
return verdict.status;
|
|
80
|
-
}
|
|
81
|
-
}
|
|
82
|
-
}
|
|
83
|
-
return null;
|
|
84
|
-
}
|
|
85
|
-
function analyzeCrossSessions(sessionsDir) {
|
|
86
|
-
if (!(0, fs_1.existsSync)(sessionsDir)) {
|
|
87
|
-
return null;
|
|
88
|
-
}
|
|
89
|
-
let dirEntries;
|
|
90
|
-
try {
|
|
91
|
-
dirEntries = (0, fs_1.readdirSync)(sessionsDir);
|
|
92
|
-
}
|
|
93
|
-
catch {
|
|
94
|
-
return null;
|
|
95
|
-
}
|
|
96
|
-
// Filter to actual directories
|
|
97
|
-
const sessionIds = dirEntries.filter((name) => {
|
|
98
|
-
try {
|
|
99
|
-
return (0, fs_1.statSync)((0, path_1.join)(sessionsDir, name)).isDirectory();
|
|
100
|
-
}
|
|
101
|
-
catch {
|
|
102
|
-
return false;
|
|
103
|
-
}
|
|
104
|
-
});
|
|
105
|
-
if (sessionIds.length === 0) {
|
|
106
|
-
return null;
|
|
107
|
-
}
|
|
108
|
-
const summaries = [];
|
|
109
|
-
let totalDuration = 0;
|
|
110
|
-
let totalVerificationCycles = 0;
|
|
111
|
-
let totalFixCycles = 0;
|
|
112
|
-
let totalEfficiencyScore = 0;
|
|
113
|
-
let totalCodeConfidence = 0;
|
|
114
|
-
let sessionsWithVerdicts = 0;
|
|
115
|
-
let firstPassSuccessCount = 0;
|
|
116
|
-
let totalSuccessfulFixes = 0;
|
|
117
|
-
let totalFixAttemptsCounted = 0;
|
|
118
|
-
let abandonedSessions = 0;
|
|
119
|
-
let scoredSessions = 0;
|
|
120
|
-
// Aggregate problematic files across sessions
|
|
121
|
-
const globalFileFixCounts = new Map();
|
|
122
|
-
for (const sessionId of sessionIds) {
|
|
123
|
-
const actionsFile = (0, path_1.join)(sessionsDir, sessionId, "actions.jsonl");
|
|
124
|
-
const timeResult = (0, time_analysis_1.analyzeTime)(actionsFile);
|
|
125
|
-
const qualityResult = (0, verification_quality_1.analyzeVerificationQuality)(actionsFile);
|
|
126
|
-
const fixResult = (0, fix_effectiveness_1.analyzeFixEffectiveness)(actionsFile);
|
|
127
|
-
const codeChanges = (0, code_changes_1.analyzeCodeChanges)(actionsFile);
|
|
128
|
-
const scoring = (0, scoring_1.calculateScoring)(timeResult, qualityResult);
|
|
129
|
-
const timestamp = getSessionTimestamp(actionsFile);
|
|
130
|
-
const duration = timeResult !== null ? timeResult.sessionDuration : 0;
|
|
131
|
-
const verificationCycles = timeResult !== null ? timeResult.verificationCycles : 0;
|
|
132
|
-
const fixCycles = timeResult !== null ? timeResult.fixCycles : 0;
|
|
133
|
-
const hasVerdict = hasAnyVerdict(actionsFile);
|
|
134
|
-
const firstPass = hasVerdict ? isFirstVerdictPass(actionsFile) : false;
|
|
135
|
-
const lastStatus = getLastVerdictStatus(actionsFile);
|
|
136
|
-
const efficiencyScore = scoring !== null ? scoring.agentEfficiencyScore : 0;
|
|
137
|
-
const codeConfidence = scoring !== null ? scoring.codeConfidenceScore : 0;
|
|
138
|
-
if (timestamp !== null) {
|
|
139
|
-
summaries.push({
|
|
140
|
-
sessionId,
|
|
141
|
-
timestamp,
|
|
142
|
-
duration,
|
|
143
|
-
verificationCycles,
|
|
144
|
-
fixCycles,
|
|
145
|
-
firstPassSuccess: firstPass,
|
|
146
|
-
lastVerdictStatus: lastStatus,
|
|
147
|
-
agentEfficiencyScore: efficiencyScore,
|
|
148
|
-
});
|
|
149
|
-
}
|
|
150
|
-
totalDuration += duration;
|
|
151
|
-
totalVerificationCycles += verificationCycles;
|
|
152
|
-
totalFixCycles += fixCycles;
|
|
153
|
-
if (scoring !== null) {
|
|
154
|
-
totalEfficiencyScore += efficiencyScore;
|
|
155
|
-
totalCodeConfidence += codeConfidence;
|
|
156
|
-
scoredSessions++;
|
|
157
|
-
}
|
|
158
|
-
if (hasVerdict) {
|
|
159
|
-
sessionsWithVerdicts++;
|
|
160
|
-
if (firstPass) {
|
|
161
|
-
firstPassSuccessCount++;
|
|
162
|
-
}
|
|
163
|
-
}
|
|
164
|
-
if (fixResult !== null) {
|
|
165
|
-
totalSuccessfulFixes += fixResult.successfulFixes;
|
|
166
|
-
totalFixAttemptsCounted += fixResult.successfulFixes + fixResult.failedFixes;
|
|
167
|
-
}
|
|
168
|
-
if (hasSessionReconcile(actionsFile)) {
|
|
169
|
-
abandonedSessions++;
|
|
170
|
-
}
|
|
171
|
-
// Merge problematic files
|
|
172
|
-
if (codeChanges !== null) {
|
|
173
|
-
for (const f of codeChanges.problematicFiles) {
|
|
174
|
-
const current = globalFileFixCounts.get(f.filePath) ?? 0;
|
|
175
|
-
globalFileFixCounts.set(f.filePath, current + f.fixEditCount);
|
|
176
|
-
}
|
|
177
|
-
}
|
|
178
|
-
}
|
|
179
|
-
// Sort summaries by timestamp desc (most recent first)
|
|
180
|
-
summaries.sort((a, b) => {
|
|
181
|
-
return b.timestamp - a.timestamp;
|
|
182
|
-
});
|
|
183
|
-
const totalSessions = sessionIds.length;
|
|
184
|
-
const aggregateFirstPassRate = sessionsWithVerdicts > 0
|
|
185
|
-
? Math.round((firstPassSuccessCount / sessionsWithVerdicts) * 100)
|
|
186
|
-
: 0;
|
|
187
|
-
const aggregateFixSuccessRate = totalFixAttemptsCounted > 0
|
|
188
|
-
? Math.round((totalSuccessfulFixes / totalFixAttemptsCounted) * 100)
|
|
189
|
-
: 0;
|
|
190
|
-
const averageSessionDuration = totalSessions > 0
|
|
191
|
-
? Math.round(totalDuration / totalSessions)
|
|
192
|
-
: 0;
|
|
193
|
-
const averageVerificationCycles = totalSessions > 0
|
|
194
|
-
? Math.round((totalVerificationCycles / totalSessions) * 10) / 10
|
|
195
|
-
: 0;
|
|
196
|
-
const averageFixCycles = totalSessions > 0
|
|
197
|
-
? Math.round((totalFixCycles / totalSessions) * 10) / 10
|
|
198
|
-
: 0;
|
|
199
|
-
const averageEfficiencyScore = scoredSessions > 0
|
|
200
|
-
? Math.round(totalEfficiencyScore / scoredSessions)
|
|
201
|
-
: 0;
|
|
202
|
-
const averageCodeConfidence = scoredSessions > 0
|
|
203
|
-
? Math.round((totalCodeConfidence / scoredSessions) * 100) / 100
|
|
204
|
-
: 0;
|
|
205
|
-
const abandonRate = totalSessions > 0
|
|
206
|
-
? Math.round((abandonedSessions / totalSessions) * 100)
|
|
207
|
-
: 0;
|
|
208
|
-
// Top 5 most problematic files
|
|
209
|
-
const mostProblematicFiles = [...globalFileFixCounts.entries()]
|
|
210
|
-
.map(([filePath, fixEditCount]) => ({
|
|
211
|
-
filePath,
|
|
212
|
-
fixEditCount,
|
|
213
|
-
}))
|
|
214
|
-
.sort((a, b) => b.fixEditCount - a.fixEditCount)
|
|
215
|
-
.slice(0, 5);
|
|
216
|
-
return {
|
|
217
|
-
totalSessions,
|
|
218
|
-
sessionSummaries: summaries,
|
|
219
|
-
aggregateFirstPassRate,
|
|
220
|
-
aggregateFixSuccessRate,
|
|
221
|
-
averageSessionDuration,
|
|
222
|
-
averageVerificationCycles,
|
|
223
|
-
averageFixCycles,
|
|
224
|
-
averageEfficiencyScore,
|
|
225
|
-
averageCodeConfidence,
|
|
226
|
-
mostProblematicFiles,
|
|
227
|
-
abandonRate,
|
|
228
|
-
};
|
|
229
|
-
}
|
|
230
|
-
//# sourceMappingURL=cross-session.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"cross-session.js","sourceRoot":"","sources":["../../src/analysis/cross-session.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* IronBee — Fix Effectiveness Analysis
|
|
3
|
-
*
|
|
4
|
-
* Reads actions.jsonl and calculates fix effectiveness metrics.
|
|
5
|
-
* Pure logic — no process.exit, no stdin, no side effects.
|
|
6
|
-
*/
|
|
7
|
-
export interface FixEffectivenessAnalysis {
|
|
8
|
-
fixSuccessRate: number;
|
|
9
|
-
totalFixAttempts: number;
|
|
10
|
-
successfulFixes: number;
|
|
11
|
-
failedFixes: number;
|
|
12
|
-
fixToVerifyRatio: number;
|
|
13
|
-
reFailRate: number;
|
|
14
|
-
}
|
|
15
|
-
export declare function analyzeFixEffectiveness(actionsFile: string): FixEffectivenessAnalysis | null;
|
|
16
|
-
//# sourceMappingURL=fix-effectiveness.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"fix-effectiveness.d.ts","sourceRoot":"","sources":["../../src/analysis/fix-effectiveness.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAKH,MAAM,WAAW,wBAAwB;IACrC,cAAc,EAAE,MAAM,CAAC;IACvB,gBAAgB,EAAE,MAAM,CAAC;IACzB,eAAe,EAAE,MAAM,CAAC;IACxB,WAAW,EAAE,MAAM,CAAC;IACpB,gBAAgB,EAAE,MAAM,CAAC;IACzB,UAAU,EAAE,MAAM,CAAC;CACtB;AA4BD,wBAAgB,uBAAuB,CAAC,WAAW,EAAE,MAAM,GAAG,wBAAwB,GAAG,IAAI,CAgF5F"}
|