@ironbee-ai/cli 0.1.1
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 +5 -0
- package/LICENSE +21 -0
- package/README.md +159 -0
- package/dist/assets/banner.txt +6 -0
- package/dist/assets/icon.svg +59 -0
- package/dist/clients/base.d.ts +20 -0
- package/dist/clients/base.d.ts.map +1 -0
- package/dist/clients/base.js +3 -0
- package/dist/clients/base.js.map +1 -0
- package/dist/clients/claude/hooks/clear-verdict.d.ts +11 -0
- package/dist/clients/claude/hooks/clear-verdict.d.ts.map +1 -0
- package/dist/clients/claude/hooks/clear-verdict.js +58 -0
- package/dist/clients/claude/hooks/clear-verdict.js.map +1 -0
- package/dist/clients/claude/hooks/session-start.d.ts +9 -0
- package/dist/clients/claude/hooks/session-start.d.ts.map +1 -0
- package/dist/clients/claude/hooks/session-start.js +72 -0
- package/dist/clients/claude/hooks/session-start.js.map +1 -0
- package/dist/clients/claude/hooks/track-action.d.ts +11 -0
- package/dist/clients/claude/hooks/track-action.d.ts.map +1 -0
- package/dist/clients/claude/hooks/track-action.js +73 -0
- package/dist/clients/claude/hooks/track-action.js.map +1 -0
- package/dist/clients/claude/hooks/verify-gate.d.ts +11 -0
- package/dist/clients/claude/hooks/verify-gate.d.ts.map +1 -0
- package/dist/clients/claude/hooks/verify-gate.js +48 -0
- package/dist/clients/claude/hooks/verify-gate.js.map +1 -0
- package/dist/clients/claude/index.d.ts +22 -0
- package/dist/clients/claude/index.d.ts.map +1 -0
- package/dist/clients/claude/index.js +270 -0
- package/dist/clients/claude/index.js.map +1 -0
- package/dist/clients/claude/rule.md +35 -0
- package/dist/clients/claude/skill.md +63 -0
- package/dist/clients/registry.d.ts +6 -0
- package/dist/clients/registry.d.ts.map +1 -0
- package/dist/clients/registry.js +20 -0
- package/dist/clients/registry.js.map +1 -0
- package/dist/commands/hook.d.ts +3 -0
- package/dist/commands/hook.d.ts.map +1 -0
- package/dist/commands/hook.js +57 -0
- package/dist/commands/hook.js.map +1 -0
- package/dist/commands/install.d.ts +3 -0
- package/dist/commands/install.d.ts.map +1 -0
- package/dist/commands/install.js +69 -0
- package/dist/commands/install.js.map +1 -0
- package/dist/commands/status.d.ts +3 -0
- package/dist/commands/status.d.ts.map +1 -0
- package/dist/commands/status.js +71 -0
- package/dist/commands/status.js.map +1 -0
- package/dist/commands/uninstall.d.ts +3 -0
- package/dist/commands/uninstall.d.ts.map +1 -0
- package/dist/commands/uninstall.js +54 -0
- package/dist/commands/uninstall.js.map +1 -0
- package/dist/commands/update.d.ts +3 -0
- package/dist/commands/update.d.ts.map +1 -0
- package/dist/commands/update.js +38 -0
- package/dist/commands/update.js.map +1 -0
- package/dist/commands/verify.d.ts +3 -0
- package/dist/commands/verify.d.ts.map +1 -0
- package/dist/commands/verify.js +150 -0
- package/dist/commands/verify.js.map +1 -0
- package/dist/hooks/core/actions.d.ts +35 -0
- package/dist/hooks/core/actions.d.ts.map +1 -0
- package/dist/hooks/core/actions.js +61 -0
- package/dist/hooks/core/actions.js.map +1 -0
- package/dist/hooks/core/clear-verdict.d.ts +12 -0
- package/dist/hooks/core/clear-verdict.d.ts.map +1 -0
- package/dist/hooks/core/clear-verdict.js +25 -0
- package/dist/hooks/core/clear-verdict.js.map +1 -0
- package/dist/hooks/core/verify-gate.d.ts +20 -0
- package/dist/hooks/core/verify-gate.d.ts.map +1 -0
- package/dist/hooks/core/verify-gate.js +222 -0
- package/dist/hooks/core/verify-gate.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +56 -0
- package/dist/index.js.map +1 -0
- package/dist/lib/config.d.ts +44 -0
- package/dist/lib/config.d.ts.map +1 -0
- package/dist/lib/config.js +135 -0
- package/dist/lib/config.js.map +1 -0
- package/dist/lib/icon.d.ts +2 -0
- package/dist/lib/icon.d.ts.map +1 -0
- package/dist/lib/icon.js +14 -0
- package/dist/lib/icon.js.map +1 -0
- package/dist/lib/logger.d.ts +7 -0
- package/dist/lib/logger.d.ts.map +1 -0
- package/dist/lib/logger.js +70 -0
- package/dist/lib/logger.js.map +1 -0
- package/dist/lib/output.d.ts +21 -0
- package/dist/lib/output.d.ts.map +1 -0
- package/dist/lib/output.js +45 -0
- package/dist/lib/output.js.map +1 -0
- package/dist/lib/stdin.d.ts +6 -0
- package/dist/lib/stdin.d.ts.map +1 -0
- package/dist/lib/stdin.js +18 -0
- package/dist/lib/stdin.js.map +1 -0
- package/dist/lib/version.d.ts +10 -0
- package/dist/lib/version.d.ts.map +1 -0
- package/dist/lib/version.js +81 -0
- package/dist/lib/version.js.map +1 -0
- package/package.json +72 -0
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.statusCommand = 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
|
+
exports.statusCommand = new commander_1.Command("status")
|
|
9
|
+
.description("Show verification status for all active sessions")
|
|
10
|
+
.argument("[project-dir]", "target project directory", ".")
|
|
11
|
+
.action((dir) => {
|
|
12
|
+
const projectDir = (0, path_1.resolve)(dir);
|
|
13
|
+
const sessionsDir = (0, path_1.join)(projectDir, ".ironbee", "sessions");
|
|
14
|
+
if (!(0, fs_1.existsSync)(sessionsDir)) {
|
|
15
|
+
output_1.log.warn("No .ironbee/sessions/ directory found. Run `ironbee install` first.");
|
|
16
|
+
return;
|
|
17
|
+
}
|
|
18
|
+
const entries = (0, fs_1.readdirSync)(sessionsDir).filter((f) => (0, fs_1.statSync)((0, path_1.join)(sessionsDir, f)).isDirectory());
|
|
19
|
+
if (entries.length === 0) {
|
|
20
|
+
output_1.log.dim(" .ironbee/sessions/ (no active sessions)");
|
|
21
|
+
return;
|
|
22
|
+
}
|
|
23
|
+
output_1.log.info(`Sessions in ${output_1.pc.dim(sessionsDir)}`);
|
|
24
|
+
output_1.log.blank();
|
|
25
|
+
for (const sid of entries) {
|
|
26
|
+
const verdictPath = (0, path_1.join)(sessionsDir, sid, "verdict.json");
|
|
27
|
+
const retryPath = (0, path_1.join)(sessionsDir, sid, "retries");
|
|
28
|
+
const retries = (0, fs_1.existsSync)(retryPath)
|
|
29
|
+
? parseInt((0, fs_1.readFileSync)(retryPath, "utf-8"), 10) || 0
|
|
30
|
+
: 0;
|
|
31
|
+
if (!(0, fs_1.existsSync)(verdictPath)) {
|
|
32
|
+
console.log(` ${output_1.pc.bold(output_1.pc.cyan(sid))}`);
|
|
33
|
+
console.log(` ${output_1.pc.dim("verdict")} : ${output_1.pc.yellow("missing")}`);
|
|
34
|
+
if (retries > 0) {
|
|
35
|
+
console.log(` ${output_1.pc.dim("retries")} : ${output_1.pc.yellow(`${retries}/3`)}`);
|
|
36
|
+
}
|
|
37
|
+
output_1.log.blank();
|
|
38
|
+
continue;
|
|
39
|
+
}
|
|
40
|
+
let verdict;
|
|
41
|
+
try {
|
|
42
|
+
verdict = JSON.parse((0, fs_1.readFileSync)(verdictPath, "utf-8"));
|
|
43
|
+
}
|
|
44
|
+
catch {
|
|
45
|
+
console.log(` ${output_1.pc.bold(output_1.pc.cyan(sid))}`);
|
|
46
|
+
console.log(` ${output_1.pc.dim("verdict")} : ${output_1.pc.red("invalid JSON")}`);
|
|
47
|
+
output_1.log.blank();
|
|
48
|
+
continue;
|
|
49
|
+
}
|
|
50
|
+
const pages = Array.isArray(verdict.pages_tested) ? verdict.pages_tested.length : 0;
|
|
51
|
+
const checks = Array.isArray(verdict.checks) ? verdict.checks.length : 0;
|
|
52
|
+
const statusColor = verdict.status === "pass" ? output_1.pc.green : output_1.pc.red;
|
|
53
|
+
console.log(` ${output_1.pc.bold(output_1.pc.cyan(sid))}`);
|
|
54
|
+
console.log(` ${output_1.pc.dim("status")} : ${statusColor(verdict.status)}`);
|
|
55
|
+
console.log(` ${output_1.pc.dim("pages")} : ${pages > 0 ? output_1.pc.green(String(pages)) : output_1.pc.yellow("0")}`);
|
|
56
|
+
console.log(` ${output_1.pc.dim("checks")} : ${checks > 0 ? output_1.pc.green(String(checks)) : output_1.pc.yellow("0")}`);
|
|
57
|
+
console.log(` ${output_1.pc.dim("console_errors")} : ${verdict.console_errors ?? output_1.pc.dim("?")}`);
|
|
58
|
+
console.log(` ${output_1.pc.dim("network_failures")} : ${verdict.network_failures ?? output_1.pc.dim("?")}`);
|
|
59
|
+
if (retries > 0) {
|
|
60
|
+
console.log(` ${output_1.pc.dim("retries")} : ${output_1.pc.yellow(`${retries}/3`)}`);
|
|
61
|
+
}
|
|
62
|
+
if (verdict.status === "fail" && verdict.errors?.length) {
|
|
63
|
+
console.log(` ${output_1.pc.dim("errors")} :`);
|
|
64
|
+
for (const e of verdict.errors) {
|
|
65
|
+
console.log(` ${output_1.pc.red("•")} ${e}`);
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
output_1.log.blank();
|
|
69
|
+
}
|
|
70
|
+
});
|
|
71
|
+
//# sourceMappingURL=status.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"status.js","sourceRoot":"","sources":["../../src/commands/status.ts"],"names":[],"mappings":";;;AAAA,yCAAoC;AACpC,2BAAqE;AACrE,+BAAqC;AACrC,0CAAwC;AAW3B,QAAA,aAAa,GAAY,IAAI,mBAAO,CAAC,QAAQ,CAAC;KACtD,WAAW,CAAC,kDAAkD,CAAC;KAC/D,QAAQ,CAAC,eAAe,EAAE,0BAA0B,EAAE,GAAG,CAAC;KAC1D,MAAM,CAAC,CAAC,GAAW,EAAQ,EAAE;IAC1B,MAAM,UAAU,GAAW,IAAA,cAAO,EAAC,GAAG,CAAC,CAAC;IACxC,MAAM,WAAW,GAAW,IAAA,WAAI,EAAC,UAAU,EAAE,UAAU,EAAE,UAAU,CAAC,CAAC;IAErE,IAAI,CAAC,IAAA,eAAU,EAAC,WAAW,CAAC,EAAE,CAAC;QAC3B,YAAG,CAAC,IAAI,CAAC,qEAAqE,CAAC,CAAC;QAChF,OAAO;IACX,CAAC;IAED,MAAM,OAAO,GAAa,IAAA,gBAAW,EAAC,WAAW,CAAC,CAAC,MAAM,CACrD,CAAC,CAAS,EAAW,EAAE,CAAC,IAAA,aAAQ,EAAC,IAAA,WAAI,EAAC,WAAW,EAAE,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CACvE,CAAC;IAEF,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACvB,YAAG,CAAC,GAAG,CAAC,6CAA6C,CAAC,CAAC;QACvD,OAAO;IACX,CAAC;IAED,YAAG,CAAC,IAAI,CAAC,eAAe,WAAE,CAAC,GAAG,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;IAC/C,YAAG,CAAC,KAAK,EAAE,CAAC;IAEZ,KAAK,MAAM,GAAG,IAAI,OAAO,EAAE,CAAC;QACxB,MAAM,WAAW,GAAW,IAAA,WAAI,EAAC,WAAW,EAAE,GAAG,EAAE,cAAc,CAAC,CAAC;QACnE,MAAM,SAAS,GAAW,IAAA,WAAI,EAAC,WAAW,EAAE,GAAG,EAAE,SAAS,CAAC,CAAC;QAE5D,MAAM,OAAO,GAAW,IAAA,eAAU,EAAC,SAAS,CAAC;YACzC,CAAC,CAAC,QAAQ,CAAC,IAAA,iBAAY,EAAC,SAAS,EAAE,OAAO,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC;YACrD,CAAC,CAAC,CAAC,CAAC;QAER,IAAI,CAAC,IAAA,eAAU,EAAC,WAAW,CAAC,EAAE,CAAC;YAC3B,OAAO,CAAC,GAAG,CAAC,KAAK,WAAE,CAAC,IAAI,CAAC,WAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC;YAC1C,OAAO,CAAC,GAAG,CAAC,OAAO,WAAE,CAAC,GAAG,CAAC,SAAS,CAAC,MAAM,WAAE,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;YAClE,IAAI,OAAO,GAAG,CAAC,EAAE,CAAC;gBACd,OAAO,CAAC,GAAG,CAAC,OAAO,WAAE,CAAC,GAAG,CAAC,SAAS,CAAC,MAAM,WAAE,CAAC,MAAM,CAAC,GAAG,OAAO,IAAI,CAAC,EAAE,CAAC,CAAC;YAC3E,CAAC;YACD,YAAG,CAAC,KAAK,EAAE,CAAC;YACZ,SAAS;QACb,CAAC;QAED,IAAI,OAAgB,CAAC;QACrB,IAAI,CAAC;YACD,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,IAAA,iBAAY,EAAC,WAAW,EAAE,OAAO,CAAC,CAAY,CAAC;QACxE,CAAC;QAAC,MAAM,CAAC;YACL,OAAO,CAAC,GAAG,CAAC,KAAK,WAAE,CAAC,IAAI,CAAC,WAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC;YAC1C,OAAO,CAAC,GAAG,CAAC,OAAO,WAAE,CAAC,GAAG,CAAC,SAAS,CAAC,MAAM,WAAE,CAAC,GAAG,CAAC,cAAc,CAAC,EAAE,CAAC,CAAC;YACpE,YAAG,CAAC,KAAK,EAAE,CAAC;YACZ,SAAS;QACb,CAAC;QAED,MAAM,KAAK,GAAW,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;QAC5F,MAAM,MAAM,GAAW,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;QACjF,MAAM,WAAW,GAA0B,OAAO,CAAC,MAAM,KAAK,MAAM,CAAC,CAAC,CAAC,WAAE,CAAC,KAAK,CAAC,CAAC,CAAC,WAAE,CAAC,GAAG,CAAC;QAEzF,OAAO,CAAC,GAAG,CAAC,KAAK,WAAE,CAAC,IAAI,CAAC,WAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC;QAC1C,OAAO,CAAC,GAAG,CAAC,OAAO,WAAE,CAAC,GAAG,CAAC,QAAQ,CAAC,OAAO,WAAW,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QACzE,OAAO,CAAC,GAAG,CAAC,OAAO,WAAE,CAAC,GAAG,CAAC,OAAO,CAAC,QAAQ,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,WAAE,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,WAAE,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAClG,OAAO,CAAC,GAAG,CAAC,OAAO,WAAE,CAAC,GAAG,CAAC,QAAQ,CAAC,OAAO,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,WAAE,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,WAAE,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACpG,OAAO,CAAC,GAAG,CAAC,OAAO,WAAE,CAAC,GAAG,CAAC,gBAAgB,CAAC,QAAQ,OAAO,CAAC,cAAc,IAAI,WAAE,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAC5F,OAAO,CAAC,GAAG,CAAC,OAAO,WAAE,CAAC,GAAG,CAAC,kBAAkB,CAAC,MAAM,OAAO,CAAC,gBAAgB,IAAI,WAAE,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAE9F,IAAI,OAAO,GAAG,CAAC,EAAE,CAAC;YACd,OAAO,CAAC,GAAG,CAAC,OAAO,WAAE,CAAC,GAAG,CAAC,SAAS,CAAC,MAAM,WAAE,CAAC,MAAM,CAAC,GAAG,OAAO,IAAI,CAAC,EAAE,CAAC,CAAC;QAC3E,CAAC;QAED,IAAI,OAAO,CAAC,MAAM,KAAK,MAAM,IAAI,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC;YACtD,OAAO,CAAC,GAAG,CAAC,OAAO,WAAE,CAAC,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;YAC1C,KAAK,MAAM,CAAC,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;gBAC7B,OAAO,CAAC,GAAG,CAAC,SAAS,WAAE,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAC7C,CAAC;QACL,CAAC;QAED,YAAG,CAAC,KAAK,EAAE,CAAC;IAChB,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"uninstall.d.ts","sourceRoot":"","sources":["../../src/commands/uninstall.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAYpC,eAAO,MAAM,gBAAgB,EAAE,OA4CzB,CAAC"}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.uninstallCommand = void 0;
|
|
4
|
+
const commander_1 = require("commander");
|
|
5
|
+
const fs_1 = require("fs");
|
|
6
|
+
const path_1 = require("path");
|
|
7
|
+
const registry_1 = require("../clients/registry");
|
|
8
|
+
const output_1 = require("../lib/output");
|
|
9
|
+
function clientNames() {
|
|
10
|
+
const names = registry_1.REGISTERED_CLIENTS.map((c) => c.name);
|
|
11
|
+
return names.join(", ");
|
|
12
|
+
}
|
|
13
|
+
exports.uninstallCommand = new commander_1.Command("uninstall")
|
|
14
|
+
.description("Remove IronBee hooks and guidance files from a project")
|
|
15
|
+
.argument("[project-dir]", "target project directory", ".")
|
|
16
|
+
.option("--client <name>", `client to uninstall for (${clientNames()}), or "all"`)
|
|
17
|
+
.action((dir, options) => {
|
|
18
|
+
const projectDir = (0, path_1.resolve)(dir);
|
|
19
|
+
if (!(0, fs_1.existsSync)(projectDir)) {
|
|
20
|
+
output_1.log.error(`Directory not found: ${projectDir}`);
|
|
21
|
+
process.exit(1);
|
|
22
|
+
}
|
|
23
|
+
let clients;
|
|
24
|
+
if (options.client === "all") {
|
|
25
|
+
clients = registry_1.REGISTERED_CLIENTS;
|
|
26
|
+
}
|
|
27
|
+
else if (options.client) {
|
|
28
|
+
const found = (0, registry_1.findClient)(options.client);
|
|
29
|
+
if (!found) {
|
|
30
|
+
output_1.log.error(`Unknown client: "${options.client}". Available: ${clientNames()}`);
|
|
31
|
+
process.exit(1);
|
|
32
|
+
}
|
|
33
|
+
clients = [found];
|
|
34
|
+
}
|
|
35
|
+
else {
|
|
36
|
+
clients = (0, registry_1.detectClients)(projectDir);
|
|
37
|
+
if (clients.length === 0) {
|
|
38
|
+
output_1.log.info("No client detected. Nothing to uninstall.");
|
|
39
|
+
return;
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
for (const client of clients) {
|
|
43
|
+
client.uninstall(projectDir);
|
|
44
|
+
}
|
|
45
|
+
// remove .ironbee runtime directory
|
|
46
|
+
const ironbeeDir = (0, path_1.join)(projectDir, ".ironbee");
|
|
47
|
+
if ((0, fs_1.existsSync)(ironbeeDir)) {
|
|
48
|
+
(0, fs_1.rmSync)(ironbeeDir, { recursive: true, force: true });
|
|
49
|
+
output_1.log.step(`Removed ${output_1.pc.dim(ironbeeDir)}`);
|
|
50
|
+
}
|
|
51
|
+
output_1.log.blank();
|
|
52
|
+
output_1.log.success(`IronBee removed. ${output_1.pc.dim("Restart your AI coding client to apply changes.")}`);
|
|
53
|
+
});
|
|
54
|
+
//# sourceMappingURL=uninstall.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"uninstall.js","sourceRoot":"","sources":["../../src/commands/uninstall.ts"],"names":[],"mappings":";;;AAAA,yCAAoC;AACpC,2BAAwC;AACxC,+BAAqC;AAErC,kDAAoF;AACpF,0CAAwC;AAExC,SAAS,WAAW;IAChB,MAAM,KAAK,GAAa,6BAAkB,CAAC,GAAG,CAAC,CAAC,CAAU,EAAU,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;IAC/E,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC5B,CAAC;AAEY,QAAA,gBAAgB,GAAY,IAAI,mBAAO,CAAC,WAAW,CAAC;KAC5D,WAAW,CAAC,wDAAwD,CAAC;KACrE,QAAQ,CAAC,eAAe,EAAE,0BAA0B,EAAE,GAAG,CAAC;KAC1D,MAAM,CAAC,iBAAiB,EAAE,4BAA4B,WAAW,EAAE,aAAa,CAAC;KACjF,MAAM,CAAC,CAAC,GAAW,EAAE,OAA4B,EAAQ,EAAE;IACxD,MAAM,UAAU,GAAW,IAAA,cAAO,EAAC,GAAG,CAAC,CAAC;IAExC,IAAI,CAAC,IAAA,eAAU,EAAC,UAAU,CAAC,EAAE,CAAC;QAC1B,YAAG,CAAC,KAAK,CAAC,wBAAwB,UAAU,EAAE,CAAC,CAAC;QAChD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACpB,CAAC;IAED,IAAI,OAAkB,CAAC;IAEvB,IAAI,OAAO,CAAC,MAAM,KAAK,KAAK,EAAE,CAAC;QAC3B,OAAO,GAAG,6BAAkB,CAAC;IACjC,CAAC;SAAM,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;QACxB,MAAM,KAAK,GAAwB,IAAA,qBAAU,EAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QAC9D,IAAI,CAAC,KAAK,EAAE,CAAC;YACT,YAAG,CAAC,KAAK,CAAC,oBAAoB,OAAO,CAAC,MAAM,iBAAiB,WAAW,EAAE,EAAE,CAAC,CAAC;YAC9E,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACpB,CAAC;QACD,OAAO,GAAG,CAAC,KAAK,CAAC,CAAC;IACtB,CAAC;SAAM,CAAC;QACJ,OAAO,GAAG,IAAA,wBAAa,EAAC,UAAU,CAAC,CAAC;QACpC,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACvB,YAAG,CAAC,IAAI,CAAC,2CAA2C,CAAC,CAAC;YACtD,OAAO;QACX,CAAC;IACL,CAAC;IAED,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;QAC3B,MAAM,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;IACjC,CAAC;IAED,oCAAoC;IACpC,MAAM,UAAU,GAAW,IAAA,WAAI,EAAC,UAAU,EAAE,UAAU,CAAC,CAAC;IACxD,IAAI,IAAA,eAAU,EAAC,UAAU,CAAC,EAAE,CAAC;QACzB,IAAA,WAAM,EAAC,UAAU,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QACrD,YAAG,CAAC,IAAI,CAAC,WAAW,WAAE,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;IAC9C,CAAC;IAED,YAAG,CAAC,KAAK,EAAE,CAAC;IACZ,YAAG,CAAC,OAAO,CAAC,oBAAoB,WAAE,CAAC,GAAG,CAAC,iDAAiD,CAAC,EAAE,CAAC,CAAC;AACjG,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"update.d.ts","sourceRoot":"","sources":["../../src/commands/update.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAKpC,eAAO,MAAM,aAAa,EAAE,OAiCtB,CAAC"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.updateCommand = void 0;
|
|
4
|
+
const commander_1 = require("commander");
|
|
5
|
+
const child_process_1 = require("child_process");
|
|
6
|
+
const output_1 = require("../lib/output");
|
|
7
|
+
const version_1 = require("../lib/version");
|
|
8
|
+
exports.updateCommand = new commander_1.Command("update")
|
|
9
|
+
.description("Update IronBee CLI to the latest version")
|
|
10
|
+
.action(async () => {
|
|
11
|
+
const local = (0, version_1.getLocalVersion)();
|
|
12
|
+
output_1.log.info(`Current version: ${output_1.pc.bold(local)}`);
|
|
13
|
+
output_1.log.step("Checking npm registry...");
|
|
14
|
+
const latest = await (0, version_1.fetchLatestVersion)();
|
|
15
|
+
if (!latest) {
|
|
16
|
+
output_1.log.error("Could not reach npm registry. Check your internet connection.");
|
|
17
|
+
process.exit(1);
|
|
18
|
+
}
|
|
19
|
+
if (latest === local) {
|
|
20
|
+
output_1.log.success(`Already on the latest version (${output_1.pc.bold(local)})`);
|
|
21
|
+
return;
|
|
22
|
+
}
|
|
23
|
+
output_1.log.info(`New version available: ${output_1.pc.dim(local)} ${output_1.pc.yellow("→")} ${output_1.pc.green(output_1.pc.bold(latest))}`);
|
|
24
|
+
output_1.log.step(`Running ${output_1.pc.cyan("npm install -g @ironbee-ai/cli@latest")}...`);
|
|
25
|
+
try {
|
|
26
|
+
(0, child_process_1.execSync)("npm install -g @ironbee-ai/cli@latest", { stdio: "inherit" });
|
|
27
|
+
output_1.log.blank();
|
|
28
|
+
output_1.log.success(`Updated to ${output_1.pc.green(output_1.pc.bold(latest))}`);
|
|
29
|
+
output_1.log.step(`Restart your AI coding client to use the new version.`);
|
|
30
|
+
}
|
|
31
|
+
catch {
|
|
32
|
+
output_1.log.blank();
|
|
33
|
+
output_1.log.error("Update failed. Try running manually:");
|
|
34
|
+
console.log(` ${output_1.pc.cyan("npm install -g @ironbee-ai/cli@latest")}`);
|
|
35
|
+
process.exit(1);
|
|
36
|
+
}
|
|
37
|
+
});
|
|
38
|
+
//# sourceMappingURL=update.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"update.js","sourceRoot":"","sources":["../../src/commands/update.ts"],"names":[],"mappings":";;;AAAA,yCAAoC;AACpC,iDAAyC;AACzC,0CAAwC;AACxC,4CAAqE;AAExD,QAAA,aAAa,GAAY,IAAI,mBAAO,CAAC,QAAQ,CAAC;KACtD,WAAW,CAAC,0CAA0C,CAAC;KACvD,MAAM,CAAC,KAAK,IAAmB,EAAE;IAC9B,MAAM,KAAK,GAAW,IAAA,yBAAe,GAAE,CAAC;IACxC,YAAG,CAAC,IAAI,CAAC,oBAAoB,WAAE,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IAC/C,YAAG,CAAC,IAAI,CAAC,0BAA0B,CAAC,CAAC;IAErC,MAAM,MAAM,GAAkB,MAAM,IAAA,4BAAkB,GAAE,CAAC;IAEzD,IAAI,CAAC,MAAM,EAAE,CAAC;QACV,YAAG,CAAC,KAAK,CAAC,+DAA+D,CAAC,CAAC;QAC3E,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACpB,CAAC;IAED,IAAI,MAAM,KAAK,KAAK,EAAE,CAAC;QACnB,YAAG,CAAC,OAAO,CAAC,kCAAkC,WAAE,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QACjE,OAAO;IACX,CAAC;IAED,YAAG,CAAC,IAAI,CAAC,0BAA0B,WAAE,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,WAAE,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,WAAE,CAAC,KAAK,CAAC,WAAE,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC;IACnG,YAAG,CAAC,IAAI,CAAC,WAAW,WAAE,CAAC,IAAI,CAAC,uCAAuC,CAAC,KAAK,CAAC,CAAC;IAE3E,IAAI,CAAC;QACD,IAAA,wBAAQ,EAAC,uCAAuC,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC;QACxE,YAAG,CAAC,KAAK,EAAE,CAAC;QACZ,YAAG,CAAC,OAAO,CAAC,cAAc,WAAE,CAAC,KAAK,CAAC,WAAE,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC;QACvD,YAAG,CAAC,IAAI,CAAC,uDAAuD,CAAC,CAAC;IACtE,CAAC;IAAC,MAAM,CAAC;QACL,YAAG,CAAC,KAAK,EAAE,CAAC;QACZ,YAAG,CAAC,KAAK,CAAC,sCAAsC,CAAC,CAAC;QAClD,OAAO,CAAC,GAAG,CAAC,KAAK,WAAE,CAAC,IAAI,CAAC,uCAAuC,CAAC,EAAE,CAAC,CAAC;QACrE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACpB,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"verify.d.ts","sourceRoot":"","sources":["../../src/commands/verify.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAkHpC,eAAO,MAAM,aAAa,EAAE,OA2EtB,CAAC"}
|
|
@@ -0,0 +1,150 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.verifyCommand = 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
|
+
function pass(label) {
|
|
9
|
+
console.log(` ${output_1.pc.green("✓")} ${label}`);
|
|
10
|
+
}
|
|
11
|
+
function fail(label, reason) {
|
|
12
|
+
console.log(` ${output_1.pc.red("✗")} ${label}: ${output_1.pc.dim(reason)}`);
|
|
13
|
+
}
|
|
14
|
+
function checkVerdict(verdict) {
|
|
15
|
+
let allPassed = true;
|
|
16
|
+
const pages = verdict.pages_tested;
|
|
17
|
+
const pageCheck = Array.isArray(pages) && pages.length > 0
|
|
18
|
+
? { ok: true }
|
|
19
|
+
: { ok: false, reason: "pages_tested is missing or empty" };
|
|
20
|
+
if (pageCheck.ok) {
|
|
21
|
+
pass(`pages_tested (${pages.length} page(s))`);
|
|
22
|
+
}
|
|
23
|
+
else {
|
|
24
|
+
fail("pages_tested", pageCheck.reason);
|
|
25
|
+
allPassed = false;
|
|
26
|
+
}
|
|
27
|
+
const checks = verdict.checks;
|
|
28
|
+
const checksCheck = Array.isArray(checks) && checks.length > 0
|
|
29
|
+
? { ok: true }
|
|
30
|
+
: { ok: false, reason: "checks is missing or empty" };
|
|
31
|
+
if (checksCheck.ok) {
|
|
32
|
+
pass(`checks (${checks.length} item(s))`);
|
|
33
|
+
}
|
|
34
|
+
else {
|
|
35
|
+
fail("checks", checksCheck.reason);
|
|
36
|
+
allPassed = false;
|
|
37
|
+
}
|
|
38
|
+
const consoleErrors = verdict.console_errors;
|
|
39
|
+
const consoleCheck = typeof consoleErrors === "number"
|
|
40
|
+
? { ok: true }
|
|
41
|
+
: { ok: false, reason: "console_errors must be a number" };
|
|
42
|
+
if (consoleCheck.ok) {
|
|
43
|
+
pass(`console_errors: ${consoleErrors}`);
|
|
44
|
+
}
|
|
45
|
+
else {
|
|
46
|
+
fail("console_errors", consoleCheck.reason);
|
|
47
|
+
allPassed = false;
|
|
48
|
+
}
|
|
49
|
+
const networkFailures = verdict.network_failures;
|
|
50
|
+
const networkCheck = typeof networkFailures === "number"
|
|
51
|
+
? { ok: true }
|
|
52
|
+
: { ok: false, reason: "network_failures must be a number" };
|
|
53
|
+
if (networkCheck.ok) {
|
|
54
|
+
pass(`network_failures: ${networkFailures}`);
|
|
55
|
+
}
|
|
56
|
+
else {
|
|
57
|
+
fail("network_failures", networkCheck.reason);
|
|
58
|
+
allPassed = false;
|
|
59
|
+
}
|
|
60
|
+
if (!["pass", "fail"].includes(verdict.status)) {
|
|
61
|
+
fail("status", `unknown value "${verdict.status}" — must be "pass" or "fail"`);
|
|
62
|
+
allPassed = false;
|
|
63
|
+
}
|
|
64
|
+
else {
|
|
65
|
+
pass(`status: ${verdict.status}`);
|
|
66
|
+
}
|
|
67
|
+
if (verdict.status === "fail") {
|
|
68
|
+
if (!Array.isArray(verdict.errors) || verdict.errors.length === 0) {
|
|
69
|
+
fail("errors", 'required when status is "fail"');
|
|
70
|
+
allPassed = false;
|
|
71
|
+
}
|
|
72
|
+
else {
|
|
73
|
+
pass(`errors (${verdict.errors.length} item(s))`);
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
return allPassed;
|
|
77
|
+
}
|
|
78
|
+
function resolveSession(sessionsDir, sessionId) {
|
|
79
|
+
if (sessionId) {
|
|
80
|
+
return sessionId;
|
|
81
|
+
}
|
|
82
|
+
const entries = (0, fs_1.readdirSync)(sessionsDir).filter((f) => (0, fs_1.statSync)((0, path_1.join)(sessionsDir, f)).isDirectory());
|
|
83
|
+
if (entries.length === 1) {
|
|
84
|
+
return entries[0];
|
|
85
|
+
}
|
|
86
|
+
return null;
|
|
87
|
+
}
|
|
88
|
+
exports.verifyCommand = new commander_1.Command("verify")
|
|
89
|
+
.description("Validate a session verdict file (dry-run of the Stop hook checks)")
|
|
90
|
+
.argument("[session-id]", "session ID to verify (auto-detected if only one active session)")
|
|
91
|
+
.option("-p, --project-dir <dir>", "target project directory", ".")
|
|
92
|
+
.action((sessionId, options) => {
|
|
93
|
+
const projectDir = (0, path_1.resolve)(options.projectDir);
|
|
94
|
+
const sessionsDir = (0, path_1.join)(projectDir, ".ironbee", "sessions");
|
|
95
|
+
if (!(0, fs_1.existsSync)(sessionsDir)) {
|
|
96
|
+
output_1.log.error("No .ironbee/sessions/ directory found. Run `ironbee install` first.");
|
|
97
|
+
process.exit(1);
|
|
98
|
+
}
|
|
99
|
+
const sid = resolveSession(sessionsDir, sessionId);
|
|
100
|
+
if (!sid) {
|
|
101
|
+
const entries = (0, fs_1.readdirSync)(sessionsDir).filter((f) => (0, fs_1.statSync)((0, path_1.join)(sessionsDir, f)).isDirectory());
|
|
102
|
+
if (entries.length === 0) {
|
|
103
|
+
output_1.log.info("No sessions found. No verification has been written yet.");
|
|
104
|
+
return;
|
|
105
|
+
}
|
|
106
|
+
output_1.log.error(`Multiple sessions found. Specify a session ID:\n ${entries.join("\n ")}`);
|
|
107
|
+
process.exit(1);
|
|
108
|
+
}
|
|
109
|
+
const verdictPath = (0, path_1.join)(sessionsDir, sid, "verdict.json");
|
|
110
|
+
const retryPath = (0, path_1.join)(sessionsDir, sid, "retries");
|
|
111
|
+
output_1.log.info(`Verifying session: ${output_1.pc.bold(output_1.pc.cyan(sid))}`);
|
|
112
|
+
output_1.log.blank();
|
|
113
|
+
if (!(0, fs_1.existsSync)(verdictPath)) {
|
|
114
|
+
fail("verdict file", `not found at ${output_1.pc.dim(verdictPath)}`);
|
|
115
|
+
output_1.log.blank();
|
|
116
|
+
console.log(` ${output_1.pc.bold(output_1.pc.red("✗ FAIL"))} ${output_1.pc.dim("— no verdict written yet.")}`);
|
|
117
|
+
process.exit(1);
|
|
118
|
+
}
|
|
119
|
+
pass(`verdict file exists: ${output_1.pc.dim(verdictPath)}`);
|
|
120
|
+
let verdict;
|
|
121
|
+
try {
|
|
122
|
+
verdict = JSON.parse((0, fs_1.readFileSync)(verdictPath, "utf-8"));
|
|
123
|
+
}
|
|
124
|
+
catch {
|
|
125
|
+
fail("verdict file", "invalid JSON");
|
|
126
|
+
output_1.log.blank();
|
|
127
|
+
console.log(` ${output_1.pc.bold(output_1.pc.red("✗ FAIL"))} ${output_1.pc.dim("— verdict is not valid JSON.")}`);
|
|
128
|
+
process.exit(1);
|
|
129
|
+
}
|
|
130
|
+
pass("verdict is valid JSON");
|
|
131
|
+
output_1.log.blank();
|
|
132
|
+
const allPassed = checkVerdict(verdict);
|
|
133
|
+
const retries = (0, fs_1.existsSync)(retryPath)
|
|
134
|
+
? parseInt((0, fs_1.readFileSync)(retryPath, "utf-8"), 10) || 0
|
|
135
|
+
: 0;
|
|
136
|
+
if (retries > 0) {
|
|
137
|
+
console.log(`\n ${output_1.pc.dim("retries:")} ${output_1.pc.yellow(`${retries}/3`)}`);
|
|
138
|
+
}
|
|
139
|
+
output_1.log.blank();
|
|
140
|
+
if (allPassed && verdict.status === "pass") {
|
|
141
|
+
console.log(` ${output_1.pc.bold(output_1.pc.green("✓ PASS"))} ${output_1.pc.dim("— hook would allow completion.")}`);
|
|
142
|
+
}
|
|
143
|
+
else if (allPassed && verdict.status === "fail") {
|
|
144
|
+
console.log(` ${output_1.pc.bold(output_1.pc.red("✗ BLOCKED"))} ${output_1.pc.dim("— verdict status is fail. Fix issues and re-verify.")}`);
|
|
145
|
+
}
|
|
146
|
+
else {
|
|
147
|
+
console.log(` ${output_1.pc.bold(output_1.pc.red("✗ BLOCKED"))} ${output_1.pc.dim("— verdict has schema errors.")}`);
|
|
148
|
+
}
|
|
149
|
+
});
|
|
150
|
+
//# sourceMappingURL=verify.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"verify.js","sourceRoot":"","sources":["../../src/commands/verify.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* IronBee — Session Action Logger
|
|
3
|
+
*
|
|
4
|
+
* Appends typed events to .ironbee/sessions/{sessionId}/actions.jsonl
|
|
5
|
+
* Event types: session_start, tool_call, verification_requested, etc.
|
|
6
|
+
*/
|
|
7
|
+
export interface ActionEntry {
|
|
8
|
+
type: string;
|
|
9
|
+
timestamp: string;
|
|
10
|
+
[key: string]: unknown;
|
|
11
|
+
}
|
|
12
|
+
export interface ToolCallAction extends ActionEntry {
|
|
13
|
+
type: "tool_call";
|
|
14
|
+
tool_name: string;
|
|
15
|
+
tool_input?: unknown;
|
|
16
|
+
tool_response?: unknown;
|
|
17
|
+
}
|
|
18
|
+
export interface VerificationRequestedAction extends ActionEntry {
|
|
19
|
+
type: "verification_requested";
|
|
20
|
+
}
|
|
21
|
+
export interface FileEditAction extends ActionEntry {
|
|
22
|
+
type: "file_edit";
|
|
23
|
+
tool_name: string;
|
|
24
|
+
file_path?: string;
|
|
25
|
+
}
|
|
26
|
+
export interface SessionStartAction extends ActionEntry {
|
|
27
|
+
type: "session_start";
|
|
28
|
+
session_id: string;
|
|
29
|
+
source?: string;
|
|
30
|
+
}
|
|
31
|
+
export declare function appendAction(actionsFile: string, entry: ActionEntry): void;
|
|
32
|
+
export declare function readActionsSinceLastMarker(actionsFile: string, markerType: string): ActionEntry[];
|
|
33
|
+
export declare function getToolCallsSinceLastVerification(actionsFile: string): ToolCallAction[];
|
|
34
|
+
export declare function hasFileEditsSinceLastVerification(actionsFile: string): boolean;
|
|
35
|
+
//# sourceMappingURL=actions.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"actions.d.ts","sourceRoot":"","sources":["../../../src/hooks/core/actions.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAMH,MAAM,WAAW,WAAW;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CAC1B;AAED,MAAM,WAAW,cAAe,SAAQ,WAAW;IAC/C,IAAI,EAAE,WAAW,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,aAAa,CAAC,EAAE,OAAO,CAAC;CAC3B;AAED,MAAM,WAAW,2BAA4B,SAAQ,WAAW;IAC5D,IAAI,EAAE,wBAAwB,CAAC;CAClC;AAED,MAAM,WAAW,cAAe,SAAQ,WAAW;IAC/C,IAAI,EAAE,WAAW,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,kBAAmB,SAAQ,WAAW;IACnD,IAAI,EAAE,eAAe,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,wBAAgB,YAAY,CAAC,WAAW,EAAE,MAAM,EAAE,KAAK,EAAE,WAAW,GAAG,IAAI,CAO1E;AAED,wBAAgB,0BAA0B,CAAC,WAAW,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,WAAW,EAAE,CA6BjG;AAED,wBAAgB,iCAAiC,CAAC,WAAW,EAAE,MAAM,GAAG,cAAc,EAAE,CAGvF;AAED,wBAAgB,iCAAiC,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAG9E"}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* IronBee — Session Action Logger
|
|
4
|
+
*
|
|
5
|
+
* Appends typed events to .ironbee/sessions/{sessionId}/actions.jsonl
|
|
6
|
+
* Event types: session_start, tool_call, verification_requested, etc.
|
|
7
|
+
*/
|
|
8
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
+
exports.appendAction = appendAction;
|
|
10
|
+
exports.readActionsSinceLastMarker = readActionsSinceLastMarker;
|
|
11
|
+
exports.getToolCallsSinceLastVerification = getToolCallsSinceLastVerification;
|
|
12
|
+
exports.hasFileEditsSinceLastVerification = hasFileEditsSinceLastVerification;
|
|
13
|
+
const fs_1 = require("fs");
|
|
14
|
+
const path_1 = require("path");
|
|
15
|
+
const logger_1 = require("../../lib/logger");
|
|
16
|
+
function appendAction(actionsFile, entry) {
|
|
17
|
+
try {
|
|
18
|
+
(0, fs_1.mkdirSync)((0, path_1.dirname)(actionsFile), { recursive: true });
|
|
19
|
+
(0, fs_1.appendFileSync)(actionsFile, JSON.stringify(entry) + "\n");
|
|
20
|
+
}
|
|
21
|
+
catch (e) {
|
|
22
|
+
logger_1.logger.debug(`failed to append action to ${actionsFile}: ${e}`);
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
function readActionsSinceLastMarker(actionsFile, markerType) {
|
|
26
|
+
if (!(0, fs_1.existsSync)(actionsFile)) {
|
|
27
|
+
return [];
|
|
28
|
+
}
|
|
29
|
+
try {
|
|
30
|
+
const content = (0, fs_1.readFileSync)(actionsFile, "utf-8");
|
|
31
|
+
const lines = content.trim().split("\n").filter((l) => l.length > 0);
|
|
32
|
+
let lastMarkerIndex = -1;
|
|
33
|
+
const entries = [];
|
|
34
|
+
for (let i = 0; i < lines.length; i++) {
|
|
35
|
+
try {
|
|
36
|
+
const entry = JSON.parse(lines[i]);
|
|
37
|
+
entries.push(entry);
|
|
38
|
+
if (entry.type === markerType) {
|
|
39
|
+
lastMarkerIndex = i;
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
catch {
|
|
43
|
+
// skip malformed lines
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
return entries.slice(lastMarkerIndex + 1);
|
|
47
|
+
}
|
|
48
|
+
catch (e) {
|
|
49
|
+
logger_1.logger.debug(`failed to read actions from ${actionsFile}: ${e}`);
|
|
50
|
+
return [];
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
function getToolCallsSinceLastVerification(actionsFile) {
|
|
54
|
+
const entries = readActionsSinceLastMarker(actionsFile, "verification_requested");
|
|
55
|
+
return entries.filter((e) => e.type === "tool_call");
|
|
56
|
+
}
|
|
57
|
+
function hasFileEditsSinceLastVerification(actionsFile) {
|
|
58
|
+
const entries = readActionsSinceLastMarker(actionsFile, "verification_requested");
|
|
59
|
+
return entries.some((e) => e.type === "file_edit");
|
|
60
|
+
}
|
|
61
|
+
//# sourceMappingURL=actions.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"actions.js","sourceRoot":"","sources":["../../../src/hooks/core/actions.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;AAmCH,oCAOC;AAED,gEA6BC;AAED,8EAGC;AAED,8EAGC;AAjFD,2BAAyE;AACzE,+BAA+B;AAC/B,6CAA0C;AA+B1C,SAAgB,YAAY,CAAC,WAAmB,EAAE,KAAkB;IAChE,IAAI,CAAC;QACD,IAAA,cAAS,EAAC,IAAA,cAAO,EAAC,WAAW,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QACrD,IAAA,mBAAc,EAAC,WAAW,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,CAAC;IAC9D,CAAC;IAAC,OAAO,CAAU,EAAE,CAAC;QAClB,eAAM,CAAC,KAAK,CAAC,8BAA8B,WAAW,KAAK,CAAC,EAAE,CAAC,CAAC;IACpE,CAAC;AACL,CAAC;AAED,SAAgB,0BAA0B,CAAC,WAAmB,EAAE,UAAkB;IAC9E,IAAI,CAAC,IAAA,eAAU,EAAC,WAAW,CAAC,EAAE,CAAC;QAC3B,OAAO,EAAE,CAAC;IACd,CAAC;IAED,IAAI,CAAC;QACD,MAAM,OAAO,GAAW,IAAA,iBAAY,EAAC,WAAW,EAAE,OAAO,CAAC,CAAC;QAC3D,MAAM,KAAK,GAAa,OAAO,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,CAAS,EAAW,EAAE,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QAEhG,IAAI,eAAe,GAAW,CAAC,CAAC,CAAC;QACjC,MAAM,OAAO,GAAkB,EAAE,CAAC;QAElC,KAAK,IAAI,CAAC,GAAW,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YAC5C,IAAI,CAAC;gBACD,MAAM,KAAK,GAAgB,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAgB,CAAC;gBAC/D,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;gBACpB,IAAI,KAAK,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;oBAC5B,eAAe,GAAG,CAAC,CAAC;gBACxB,CAAC;YACL,CAAC;YAAC,MAAM,CAAC;gBACL,uBAAuB;YAC3B,CAAC;QACL,CAAC;QAED,OAAO,OAAO,CAAC,KAAK,CAAC,eAAe,GAAG,CAAC,CAAC,CAAC;IAC9C,CAAC;IAAC,OAAO,CAAU,EAAE,CAAC;QAClB,eAAM,CAAC,KAAK,CAAC,+BAA+B,WAAW,KAAK,CAAC,EAAE,CAAC,CAAC;QACjE,OAAO,EAAE,CAAC;IACd,CAAC;AACL,CAAC;AAED,SAAgB,iCAAiC,CAAC,WAAmB;IACjE,MAAM,OAAO,GAAkB,0BAA0B,CAAC,WAAW,EAAE,wBAAwB,CAAC,CAAC;IACjG,OAAO,OAAO,CAAC,MAAM,CAAC,CAAC,CAAc,EAAuB,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,WAAW,CAAC,CAAC;AAC3F,CAAC;AAED,SAAgB,iCAAiC,CAAC,WAAmB;IACjE,MAAM,OAAO,GAAkB,0BAA0B,CAAC,WAAW,EAAE,wBAAwB,CAAC,CAAC;IACjG,OAAO,OAAO,CAAC,IAAI,CAAC,CAAC,CAAc,EAAW,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,WAAW,CAAC,CAAC;AAC7E,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* IronBee PostToolUse Hook — Core Clear Logic
|
|
3
|
+
*
|
|
4
|
+
* Pure logic — no stdin reading, no client-specific parsing.
|
|
5
|
+
* Client hook adapters call this after extracting their inputs.
|
|
6
|
+
*/
|
|
7
|
+
export interface ClearVerdictInput {
|
|
8
|
+
verdictFile: string;
|
|
9
|
+
retryFile: string;
|
|
10
|
+
}
|
|
11
|
+
export declare function runClearVerdict(input: ClearVerdictInput): void;
|
|
12
|
+
//# sourceMappingURL=clear-verdict.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"clear-verdict.d.ts","sourceRoot":"","sources":["../../../src/hooks/core/clear-verdict.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAKH,MAAM,WAAW,iBAAiB;IAChC,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,wBAAgB,eAAe,CAAC,KAAK,EAAE,iBAAiB,GAAG,IAAI,CAY9D"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* IronBee PostToolUse Hook — Core Clear Logic
|
|
4
|
+
*
|
|
5
|
+
* Pure logic — no stdin reading, no client-specific parsing.
|
|
6
|
+
* Client hook adapters call this after extracting their inputs.
|
|
7
|
+
*/
|
|
8
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
+
exports.runClearVerdict = runClearVerdict;
|
|
10
|
+
const fs_1 = require("fs");
|
|
11
|
+
const logger_1 = require("../../lib/logger");
|
|
12
|
+
function runClearVerdict(input) {
|
|
13
|
+
const files = [input.verdictFile, input.retryFile];
|
|
14
|
+
for (const f of files) {
|
|
15
|
+
try {
|
|
16
|
+
if ((0, fs_1.existsSync)(f)) {
|
|
17
|
+
(0, fs_1.unlinkSync)(f);
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
catch (e) {
|
|
21
|
+
logger_1.logger.debug(`failed to cleanup ${f}: ${e}`);
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
//# sourceMappingURL=clear-verdict.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"clear-verdict.js","sourceRoot":"","sources":["../../../src/hooks/core/clear-verdict.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;AAUH,0CAYC;AApBD,2BAA4C;AAC5C,6CAA0C;AAO1C,SAAgB,eAAe,CAAC,KAAwB;IACpD,MAAM,KAAK,GAAa,CAAC,KAAK,CAAC,WAAW,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC;IAE7D,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;QACpB,IAAI,CAAC;YACD,IAAI,IAAA,eAAU,EAAC,CAAC,CAAC,EAAE,CAAC;gBAChB,IAAA,eAAU,EAAC,CAAC,CAAC,CAAC;YAClB,CAAC;QACL,CAAC;QAAC,OAAO,CAAU,EAAE,CAAC;YAClB,eAAM,CAAC,KAAK,CAAC,qBAAqB,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QACjD,CAAC;IACL,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* IronBee Stop Hook — Core Verification Logic
|
|
3
|
+
*
|
|
4
|
+
* Pure logic — no stdin reading, no process.exit, no client-specific code.
|
|
5
|
+
* Returns a VerifyGateResult that the client adapter translates
|
|
6
|
+
* into the appropriate exit code / output mechanism.
|
|
7
|
+
*/
|
|
8
|
+
export interface VerifyGateInput {
|
|
9
|
+
sessionId: string;
|
|
10
|
+
actionsFile: string;
|
|
11
|
+
verdictFile: string;
|
|
12
|
+
retryFile: string;
|
|
13
|
+
maxRetries?: number;
|
|
14
|
+
}
|
|
15
|
+
export interface VerifyGateResult {
|
|
16
|
+
action: "allow" | "block";
|
|
17
|
+
message?: string;
|
|
18
|
+
}
|
|
19
|
+
export declare function runVerifyGate(input: VerifyGateInput): VerifyGateResult;
|
|
20
|
+
//# sourceMappingURL=verify-gate.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"verify-gate.d.ts","sourceRoot":"","sources":["../../../src/hooks/core/verify-gate.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAaH,MAAM,WAAW,eAAe;IAC5B,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,gBAAgB;IAC7B,MAAM,EAAE,OAAO,GAAG,OAAO,CAAC;IAC1B,OAAO,CAAC,EAAE,MAAM,CAAC;CACpB;AAyDD,wBAAgB,aAAa,CAAC,KAAK,EAAE,eAAe,GAAG,gBAAgB,CA2LtE"}
|