@ironbee-ai/cli 0.1.1 → 0.2.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.
Files changed (74) hide show
  1. package/CHANGELOG.md +4 -0
  2. package/README.md +38 -9
  3. package/dist/assets/banner.txt +9 -6
  4. package/dist/clients/base.d.ts +3 -1
  5. package/dist/clients/base.d.ts.map +1 -1
  6. package/dist/clients/claude/hooks/clear-verdict.d.ts.map +1 -1
  7. package/dist/clients/claude/hooks/clear-verdict.js +2 -1
  8. package/dist/clients/claude/hooks/clear-verdict.js.map +1 -1
  9. package/dist/clients/claude/hooks/require-verdict.d.ts +13 -0
  10. package/dist/clients/claude/hooks/require-verdict.d.ts.map +1 -0
  11. package/dist/clients/claude/hooks/require-verdict.js +42 -0
  12. package/dist/clients/claude/hooks/require-verdict.js.map +1 -0
  13. package/dist/clients/claude/hooks/session-start.d.ts +4 -3
  14. package/dist/clients/claude/hooks/session-start.d.ts.map +1 -1
  15. package/dist/clients/claude/hooks/session-start.js +22 -18
  16. package/dist/clients/claude/hooks/session-start.js.map +1 -1
  17. package/dist/clients/claude/index.d.ts +2 -1
  18. package/dist/clients/claude/index.d.ts.map +1 -1
  19. package/dist/clients/claude/index.js +46 -24
  20. package/dist/clients/claude/index.js.map +1 -1
  21. package/dist/clients/claude/rule.md +10 -8
  22. package/dist/clients/claude/skill.md +32 -9
  23. package/dist/clients/cursor/hooks/clear-verdict.d.ts +11 -0
  24. package/dist/clients/cursor/hooks/clear-verdict.d.ts.map +1 -0
  25. package/dist/clients/cursor/hooks/clear-verdict.js +57 -0
  26. package/dist/clients/cursor/hooks/clear-verdict.js.map +1 -0
  27. package/dist/clients/cursor/hooks/require-verdict.d.ts +12 -0
  28. package/dist/clients/cursor/hooks/require-verdict.d.ts.map +1 -0
  29. package/dist/clients/cursor/hooks/require-verdict.js +48 -0
  30. package/dist/clients/cursor/hooks/require-verdict.js.map +1 -0
  31. package/dist/clients/cursor/hooks/session-start.d.ts +9 -0
  32. package/dist/clients/cursor/hooks/session-start.d.ts.map +1 -0
  33. package/dist/clients/cursor/hooks/session-start.js +75 -0
  34. package/dist/clients/cursor/hooks/session-start.js.map +1 -0
  35. package/dist/clients/cursor/hooks/track-action.d.ts +16 -0
  36. package/dist/clients/cursor/hooks/track-action.d.ts.map +1 -0
  37. package/dist/clients/cursor/hooks/track-action.js +92 -0
  38. package/dist/clients/cursor/hooks/track-action.js.map +1 -0
  39. package/dist/clients/cursor/hooks/verify-gate.d.ts +13 -0
  40. package/dist/clients/cursor/hooks/verify-gate.d.ts.map +1 -0
  41. package/dist/clients/cursor/hooks/verify-gate.js +49 -0
  42. package/dist/clients/cursor/hooks/verify-gate.js.map +1 -0
  43. package/dist/clients/cursor/index.d.ts +20 -0
  44. package/dist/clients/cursor/index.d.ts.map +1 -0
  45. package/dist/clients/cursor/index.js +213 -0
  46. package/dist/clients/cursor/index.js.map +1 -0
  47. package/dist/clients/cursor/rule.md +42 -0
  48. package/dist/clients/cursor/skill.md +86 -0
  49. package/dist/clients/registry.d.ts.map +1 -1
  50. package/dist/clients/registry.js +2 -1
  51. package/dist/clients/registry.js.map +1 -1
  52. package/dist/commands/hook.d.ts.map +1 -1
  53. package/dist/commands/hook.js +61 -0
  54. package/dist/commands/hook.js.map +1 -1
  55. package/dist/commands/install.d.ts.map +1 -1
  56. package/dist/commands/install.js +1 -13
  57. package/dist/commands/install.js.map +1 -1
  58. package/dist/commands/status.js +3 -3
  59. package/dist/commands/verify.js +3 -3
  60. package/dist/hooks/core/actions.d.ts +7 -0
  61. package/dist/hooks/core/actions.d.ts.map +1 -1
  62. package/dist/hooks/core/actions.js +5 -0
  63. package/dist/hooks/core/actions.js.map +1 -1
  64. package/dist/hooks/core/submit-verdict.d.ts +21 -0
  65. package/dist/hooks/core/submit-verdict.d.ts.map +1 -0
  66. package/dist/hooks/core/submit-verdict.js +109 -0
  67. package/dist/hooks/core/submit-verdict.js.map +1 -0
  68. package/dist/hooks/core/verify-gate.d.ts.map +1 -1
  69. package/dist/hooks/core/verify-gate.js +66 -49
  70. package/dist/hooks/core/verify-gate.js.map +1 -1
  71. package/dist/index.js +0 -0
  72. package/dist/lib/icon.js +1 -1
  73. package/dist/lib/icon.js.map +1 -1
  74. package/package.json +12 -4
@@ -0,0 +1,21 @@
1
+ /**
2
+ * IronBee — Submit Verdict Core Logic
3
+ *
4
+ * Validates verdict JSON, writes verdict.json, and records
5
+ * a verdict_write action in actions.jsonl.
6
+ *
7
+ * Called by the agent via: echo '<json>' | ironbee hook submit-verdict
8
+ * Verdict JSON is provided via stdin.
9
+ */
10
+ export interface SubmitVerdictInput {
11
+ sessionId: string;
12
+ verdictFile: string;
13
+ actionsFile: string;
14
+ verdictJson: string;
15
+ }
16
+ export interface SubmitVerdictResult {
17
+ success: boolean;
18
+ message: string;
19
+ }
20
+ export declare function runSubmitVerdict(input: SubmitVerdictInput): SubmitVerdictResult;
21
+ //# sourceMappingURL=submit-verdict.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"submit-verdict.d.ts","sourceRoot":"","sources":["../../../src/hooks/core/submit-verdict.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAOH,MAAM,WAAW,kBAAkB;IAC/B,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,mBAAmB;IAChC,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;CACnB;AAoCD,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,kBAAkB,GAAG,mBAAmB,CA6E/E"}
@@ -0,0 +1,109 @@
1
+ "use strict";
2
+ /**
3
+ * IronBee — Submit Verdict Core Logic
4
+ *
5
+ * Validates verdict JSON, writes verdict.json, and records
6
+ * a verdict_write action in actions.jsonl.
7
+ *
8
+ * Called by the agent via: echo '<json>' | ironbee hook submit-verdict
9
+ * Verdict JSON is provided via stdin.
10
+ */
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.runSubmitVerdict = runSubmitVerdict;
13
+ const fs_1 = require("fs");
14
+ const path_1 = require("path");
15
+ const logger_1 = require("../../lib/logger");
16
+ const actions_1 = require("./actions");
17
+ function getLastVerdictStatus(actionsFile) {
18
+ if (!(0, fs_1.existsSync)(actionsFile)) {
19
+ return undefined;
20
+ }
21
+ try {
22
+ const content = (0, fs_1.readFileSync)(actionsFile, "utf-8");
23
+ const lines = content.trim().split("\n").filter((l) => l.length > 0);
24
+ for (let i = lines.length - 1; i >= 0; i--) {
25
+ try {
26
+ const entry = JSON.parse(lines[i]);
27
+ if (entry.type === "verdict_write") {
28
+ const verdict = entry.verdict;
29
+ return typeof verdict.status === "string" ? verdict.status : undefined;
30
+ }
31
+ }
32
+ catch {
33
+ // skip malformed lines
34
+ }
35
+ }
36
+ return undefined;
37
+ }
38
+ catch {
39
+ return undefined;
40
+ }
41
+ }
42
+ function runSubmitVerdict(input) {
43
+ const { sessionId, verdictFile, actionsFile, verdictJson } = input;
44
+ // parse JSON
45
+ let verdict;
46
+ try {
47
+ verdict = JSON.parse(verdictJson);
48
+ }
49
+ catch (e) {
50
+ logger_1.logger.debug(`submit-verdict: invalid JSON: ${e}`);
51
+ return { success: false, message: "REJECTED: verdict is not valid JSON." };
52
+ }
53
+ // validate status
54
+ if (verdict.status !== "pass" && verdict.status !== "fail") {
55
+ return { success: false, message: `REJECTED: status must be "pass" or "fail", got "${verdict.status}".` };
56
+ }
57
+ // validate required fields
58
+ if (!Array.isArray(verdict.pages_tested) || verdict.pages_tested.length === 0) {
59
+ return { success: false, message: "REJECTED: pages_tested must be a non-empty array." };
60
+ }
61
+ if (!Array.isArray(verdict.checks) || verdict.checks.length === 0) {
62
+ return { success: false, message: "REJECTED: checks must be a non-empty array." };
63
+ }
64
+ if (typeof verdict.console_errors !== "number") {
65
+ return { success: false, message: "REJECTED: console_errors must be a number." };
66
+ }
67
+ if (typeof verdict.network_failures !== "number") {
68
+ return { success: false, message: "REJECTED: network_failures must be a number." };
69
+ }
70
+ // validate issues on fail
71
+ if (verdict.status === "fail") {
72
+ if (!Array.isArray(verdict.issues) || verdict.issues.length === 0) {
73
+ return { success: false, message: "REJECTED: when status is \"fail\", issues must be a non-empty array describing what failed." };
74
+ }
75
+ }
76
+ // validate fixes — required when pass after a previous fail
77
+ if (verdict.status === "pass") {
78
+ const lastStatus = getLastVerdictStatus(actionsFile);
79
+ if (lastStatus === "fail") {
80
+ if (!Array.isArray(verdict.fixes) || verdict.fixes.length === 0) {
81
+ return { success: false, message: "REJECTED: when status is \"pass\" after a previous fail, fixes must be a non-empty array describing what was fixed." };
82
+ }
83
+ }
84
+ }
85
+ // write verdict file
86
+ try {
87
+ (0, fs_1.mkdirSync)((0, path_1.dirname)(verdictFile), { recursive: true });
88
+ (0, fs_1.writeFileSync)(verdictFile, JSON.stringify(verdict, null, 2));
89
+ }
90
+ catch (e) {
91
+ logger_1.logger.debug(`submit-verdict: failed to write ${verdictFile}: ${e}`);
92
+ return { success: false, message: `REJECTED: failed to write verdict file: ${e}` };
93
+ }
94
+ // record verdict_write action
95
+ const entry = {
96
+ type: "verdict_write",
97
+ timestamp: new Date().toISOString(),
98
+ verdict: verdict,
99
+ };
100
+ (0, actions_1.appendAction)(actionsFile, entry);
101
+ logger_1.logger.debug(`submit-verdict: session=${sessionId} status=${verdict.status}`);
102
+ if (verdict.status === "pass") {
103
+ const fixesInfo = verdict.fixes?.length ? ` Fixes: ${verdict.fixes.join(", ")}` : "";
104
+ return { success: true, message: `VERDICT ACCEPTED: pass.${fixesInfo}` };
105
+ }
106
+ const issues = (verdict.issues ?? []).join(", ");
107
+ return { success: true, message: `VERDICT ACCEPTED: fail. Issues: ${issues}. Fix and re-verify.` };
108
+ }
109
+ //# sourceMappingURL=submit-verdict.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"submit-verdict.js","sourceRoot":"","sources":["../../../src/hooks/core/submit-verdict.ts"],"names":[],"mappings":";AAAA;;;;;;;;GAQG;;AAqDH,4CA6EC;AAhID,2BAAwE;AACxE,+BAA+B;AAC/B,6CAA0C;AAC1C,uCAA6D;AAwB7D,SAAS,oBAAoB,CAAC,WAAmB;IAC7C,IAAI,CAAC,IAAA,eAAU,EAAC,WAAW,CAAC,EAAE,CAAC;QAC3B,OAAO,SAAS,CAAC;IACrB,CAAC;IACD,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;QAChG,KAAK,IAAI,CAAC,GAAW,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;YACjD,IAAI,CAAC;gBACD,MAAM,KAAK,GAA4B,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAA4B,CAAC;gBACvF,IAAI,KAAK,CAAC,IAAI,KAAK,eAAe,EAAE,CAAC;oBACjC,MAAM,OAAO,GAA4B,KAAK,CAAC,OAAkC,CAAC;oBAClF,OAAO,OAAO,OAAO,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC;gBAC3E,CAAC;YACL,CAAC;YAAC,MAAM,CAAC;gBACL,uBAAuB;YAC3B,CAAC;QACL,CAAC;QACD,OAAO,SAAS,CAAC;IACrB,CAAC;IAAC,MAAM,CAAC;QACL,OAAO,SAAS,CAAC;IACrB,CAAC;AACL,CAAC;AAED,SAAgB,gBAAgB,CAAC,KAAyB;IACtD,MAAM,EAAE,SAAS,EAAE,WAAW,EAAE,WAAW,EAAE,WAAW,EAAE,GAAG,KAAK,CAAC;IAEnE,aAAa;IACb,IAAI,OAAgB,CAAC;IACrB,IAAI,CAAC;QACD,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,CAAY,CAAC;IACjD,CAAC;IAAC,OAAO,CAAU,EAAE,CAAC;QAClB,eAAM,CAAC,KAAK,CAAC,iCAAiC,CAAC,EAAE,CAAC,CAAC;QACnD,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,sCAAsC,EAAE,CAAC;IAC/E,CAAC;IAED,kBAAkB;IAClB,IAAI,OAAO,CAAC,MAAM,KAAK,MAAM,IAAI,OAAO,CAAC,MAAM,KAAK,MAAM,EAAE,CAAC;QACzD,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,mDAAmD,OAAO,CAAC,MAAM,IAAI,EAAE,CAAC;IAC9G,CAAC;IAED,2BAA2B;IAC3B,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,YAAY,CAAC,IAAI,OAAO,CAAC,YAAY,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC5E,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,mDAAmD,EAAE,CAAC;IAC5F,CAAC;IAED,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,OAAO,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAChE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,6CAA6C,EAAE,CAAC;IACtF,CAAC;IAED,IAAI,OAAO,OAAO,CAAC,cAAc,KAAK,QAAQ,EAAE,CAAC;QAC7C,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,4CAA4C,EAAE,CAAC;IACrF,CAAC;IAED,IAAI,OAAO,OAAO,CAAC,gBAAgB,KAAK,QAAQ,EAAE,CAAC;QAC/C,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,8CAA8C,EAAE,CAAC;IACvF,CAAC;IAED,0BAA0B;IAC1B,IAAI,OAAO,CAAC,MAAM,KAAK,MAAM,EAAE,CAAC;QAC5B,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,OAAO,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAChE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,6FAA6F,EAAE,CAAC;QACtI,CAAC;IACL,CAAC;IAED,4DAA4D;IAC5D,IAAI,OAAO,CAAC,MAAM,KAAK,MAAM,EAAE,CAAC;QAC5B,MAAM,UAAU,GAAuB,oBAAoB,CAAC,WAAW,CAAC,CAAC;QACzE,IAAI,UAAU,KAAK,MAAM,EAAE,CAAC;YACxB,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,OAAO,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBAC9D,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,qHAAqH,EAAE,CAAC;YAC9J,CAAC;QACL,CAAC;IACL,CAAC;IAED,qBAAqB;IACrB,IAAI,CAAC;QACD,IAAA,cAAS,EAAC,IAAA,cAAO,EAAC,WAAW,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QACrD,IAAA,kBAAa,EAAC,WAAW,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;IACjE,CAAC;IAAC,OAAO,CAAU,EAAE,CAAC;QAClB,eAAM,CAAC,KAAK,CAAC,mCAAmC,WAAW,KAAK,CAAC,EAAE,CAAC,CAAC;QACrE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,2CAA2C,CAAC,EAAE,EAAE,CAAC;IACvF,CAAC;IAED,8BAA8B;IAC9B,MAAM,KAAK,GAAuB;QAC9B,IAAI,EAAE,eAAe;QACrB,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;QACnC,OAAO,EAAE,OAA6C;KACzD,CAAC;IACF,IAAA,sBAAY,EAAC,WAAW,EAAE,KAAK,CAAC,CAAC;IAEjC,eAAM,CAAC,KAAK,CAAC,2BAA2B,SAAS,WAAW,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IAE9E,IAAI,OAAO,CAAC,MAAM,KAAK,MAAM,EAAE,CAAC;QAC5B,MAAM,SAAS,GAAW,OAAO,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,WAAW,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC7F,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,0BAA0B,SAAS,EAAE,EAAE,CAAC;IAC7E,CAAC;IAED,MAAM,MAAM,GAAW,CAAC,OAAO,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACzD,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,mCAAmC,MAAM,sBAAsB,EAAE,CAAC;AACvG,CAAC"}
@@ -1 +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"}
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;AA+DD,wBAAgB,aAAa,CAAC,KAAK,EAAE,eAAe,GAAG,gBAAgB,CA6LtE"}
@@ -13,21 +13,27 @@ const path_1 = require("path");
13
13
  const logger_1 = require("../../lib/logger");
14
14
  const actions_1 = require("./actions");
15
15
  const DEFAULT_MAX_RETRIES = 3;
16
- const VERDICT_EXAMPLE_PASS = JSON.stringify({
17
- status: "pass",
18
- pages_tested: ["http://localhost:3000/affected-page"],
19
- checks: ["form submits successfully", "new item appears in list", "no console errors"],
20
- console_errors: 0,
21
- network_failures: 0,
22
- });
23
- const VERDICT_EXAMPLE_FAIL = JSON.stringify({
24
- status: "fail",
25
- pages_tested: ["http://localhost:3000/affected-page"],
26
- checks: ["form renders", "submit button unresponsive"],
27
- console_errors: 2,
28
- network_failures: 0,
29
- errors: ["button click handler not firing", "TypeError in console"],
30
- });
16
+ function verdictExamplePass(sessionId) {
17
+ return JSON.stringify({
18
+ session_id: sessionId,
19
+ status: "pass",
20
+ pages_tested: ["http://localhost:3000/affected-page"],
21
+ checks: ["form submits successfully", "new item appears in list", "no console errors"],
22
+ console_errors: 0,
23
+ network_failures: 0,
24
+ });
25
+ }
26
+ function verdictExampleFail(sessionId) {
27
+ return JSON.stringify({
28
+ session_id: sessionId,
29
+ status: "fail",
30
+ pages_tested: ["http://localhost:3000/affected-page"],
31
+ checks: ["form renders", "submit button unresponsive"],
32
+ console_errors: 2,
33
+ network_failures: 0,
34
+ issues: ["button click handler not firing", "TypeError in console"],
35
+ });
36
+ }
31
37
  const MCP_SERVER = "browser-devtools";
32
38
  const REQUIRED_TOOLS = [
33
39
  { toolName: `mcp__${MCP_SERVER}__navigation_go-to`, name: `mcp__${MCP_SERVER}__navigation_go-to`, purpose: "navigate to a page" },
@@ -55,6 +61,7 @@ function runVerifyGate(input) {
55
61
  const hasEdit = (0, actions_1.hasFileEditsSinceLastVerification)(actionsFile);
56
62
  if (!hasEdit) {
57
63
  logger_1.logger.debug("no code edits detected, allowing completion");
64
+ recordMarker(actionsFile, "allow", "no_edits");
58
65
  return { action: "allow" };
59
66
  }
60
67
  // ── Check 2: Were required IronBee tools used? ─────────
@@ -62,13 +69,14 @@ function runVerifyGate(input) {
62
69
  const usedToolNames = new Set(toolCalls.map((t) => t.tool_name));
63
70
  const missingTools = REQUIRED_TOOLS.filter((t) => !usedToolNames.has(t.toolName));
64
71
  logger_1.logger.debug(`verify-gate: missingTools=${missingTools.length}/${REQUIRED_TOOLS.length} usedTools=${[...usedToolNames].join(",")}`);
65
- // Write verification_requested marker for this check
66
- const marker = {
67
- type: "verification_requested",
68
- timestamp: new Date().toISOString(),
69
- };
70
- (0, actions_1.appendAction)(actionsFile, marker);
71
72
  if (missingTools.length === REQUIRED_TOOLS.length) {
73
+ const marker = {
74
+ type: "verification_requested",
75
+ timestamp: new Date().toISOString(),
76
+ action: "block",
77
+ reason: "no_tools",
78
+ };
79
+ (0, actions_1.appendAction)(actionsFile, marker);
72
80
  return {
73
81
  action: "block",
74
82
  message: `VERIFICATION REQUIRED.
@@ -82,14 +90,15 @@ You made code changes but did not verify them through the browser.
82
90
  5. Take an accessibility snapshot to verify page structure
83
91
  6. Check console for errors
84
92
  7. Stop the dev server when done
85
- 8. Use the Write tool to write your verdict to .ironbee/sessions/${sid}/verdict.json
86
- On pass: ${VERDICT_EXAMPLE_PASS}
87
- On fail: ${VERDICT_EXAMPLE_FAIL}
93
+ 8. Submit your verdict:
94
+ echo '${verdictExamplePass(sid)}' | ironbee hook submit-verdict
95
+ On fail: echo '${verdictExampleFail(sid)}' | ironbee hook submit-verdict
88
96
  9. If failed, fix the code and re-verify until it passes`,
89
97
  };
90
98
  }
91
99
  if (missingTools.length > 0) {
92
100
  const missing = missingTools.map((t) => ` - ${t.name} (${t.purpose})`).join("\n");
101
+ recordMarker(actionsFile, "block", "incomplete_tools");
93
102
  return {
94
103
  action: "block",
95
104
  message: `INCOMPLETE VERIFICATION.
@@ -97,20 +106,20 @@ You made code changes but did not verify them through the browser.
97
106
  You used the IronBee browser agent but skipped required checks:
98
107
  ${missing}
99
108
 
100
- Run the missing tools, functionally test your changes, then update your verdict:
101
- .ironbee/sessions/${sid}/verdict.json`,
109
+ Run the missing tools, functionally test your changes, then submit your verdict:
110
+ echo '${verdictExamplePass(sid)}' | ironbee hook submit-verdict`,
102
111
  };
103
112
  }
104
113
  // ── Check 3: Verdict file exists? ──────────────────────
105
114
  if (!(0, fs_1.existsSync)(verdictFile)) {
115
+ recordMarker(actionsFile, "block", "no_verdict");
106
116
  return {
107
117
  action: "block",
108
118
  message: `VERDICT MISSING.
109
119
 
110
- You used the IronBee browser agent but did not write a verdict.
111
- Use the Write tool to write your verdict to .ironbee/sessions/${sid}/verdict.json
112
- On pass: ${VERDICT_EXAMPLE_PASS}
113
- On fail: ${VERDICT_EXAMPLE_FAIL}`,
120
+ You used the IronBee browser agent but did not submit a verdict.
121
+ Submit your verdict:
122
+ echo '${verdictExamplePass(sid)}' | ironbee hook submit-verdict`,
114
123
  };
115
124
  }
116
125
  // ── Check 4: Valid JSON? ────────────────────────────────
@@ -121,11 +130,11 @@ Use the Write tool to write your verdict to .ironbee/sessions/${sid}/verdict.jso
121
130
  catch (e) {
122
131
  logger_1.logger.debug(`failed to parse verdict ${verdictFile}: ${e}`);
123
132
  cleanup(verdictFile);
133
+ recordMarker(actionsFile, "block", "invalid_verdict");
124
134
  return {
125
135
  action: "block",
126
- message: `INVALID VERDICT. Use the Write tool to write valid JSON to .ironbee/sessions/${sid}/verdict.json
127
- On pass: ${VERDICT_EXAMPLE_PASS}
128
- On fail: ${VERDICT_EXAMPLE_FAIL}`,
136
+ message: `INVALID VERDICT. Submit valid JSON:
137
+ echo '${verdictExamplePass(sid)}' | ironbee hook submit-verdict`,
129
138
  };
130
139
  }
131
140
  // ── Check 5: Evidence present? ─────────────────────────
@@ -133,41 +142,42 @@ Use the Write tool to write your verdict to .ironbee/sessions/${sid}/verdict.jso
133
142
  const checks = verdict.checks;
134
143
  if (!Array.isArray(pages) || pages.length === 0) {
135
144
  cleanup(verdictFile);
145
+ recordMarker(actionsFile, "block", "invalid_verdict");
136
146
  return {
137
147
  action: "block",
138
148
  message: `VERDICT REJECTED: missing pages_tested.
139
149
 
140
150
  Your verdict must include which pages you tested.
141
- Use the Write tool to write to .ironbee/sessions/${sid}/verdict.json
142
- Example: ${VERDICT_EXAMPLE_PASS}`,
151
+ Example: echo '${verdictExamplePass(sid)}' | ironbee hook submit-verdict`,
143
152
  };
144
153
  }
145
154
  if (!Array.isArray(checks) || checks.length === 0) {
146
155
  cleanup(verdictFile);
156
+ recordMarker(actionsFile, "block", "invalid_verdict");
147
157
  return {
148
158
  action: "block",
149
159
  message: `VERDICT REJECTED: missing checks.
150
160
 
151
161
  Your verdict must describe what you functionally tested.
152
- Use the Write tool to write to .ironbee/sessions/${sid}/verdict.json
153
- Example: ${VERDICT_EXAMPLE_PASS}`,
162
+ Example: echo '${verdictExamplePass(sid)}' | ironbee hook submit-verdict`,
154
163
  };
155
164
  }
156
165
  if (typeof verdict.console_errors !== "number" || typeof verdict.network_failures !== "number") {
157
166
  cleanup(verdictFile);
167
+ recordMarker(actionsFile, "block", "invalid_verdict");
158
168
  return {
159
169
  action: "block",
160
170
  message: `VERDICT REJECTED: missing console_errors or network_failures count.
161
171
 
162
172
  Your verdict must include error counts.
163
- Use the Write tool to write to .ironbee/sessions/${sid}/verdict.json
164
- Example: ${VERDICT_EXAMPLE_PASS}`,
173
+ Example: echo '${verdictExamplePass(sid)}' | ironbee hook submit-verdict`,
165
174
  };
166
175
  }
167
176
  // ── Check 6: Pass or fail? ─────────────────────────────
168
177
  if (verdict.status === "pass") {
169
178
  logger_1.logger.debug("verdict passed, allowing completion");
170
179
  cleanup(retryFile);
180
+ recordMarker(actionsFile, "allow", "verdict_pass");
171
181
  return { action: "allow" };
172
182
  }
173
183
  if (verdict.status === "fail") {
@@ -181,42 +191,49 @@ Use the Write tool to write to .ironbee/sessions/${sid}/verdict.json
181
191
  retries++;
182
192
  (0, fs_1.mkdirSync)((0, path_1.dirname)(retryFile), { recursive: true });
183
193
  (0, fs_1.writeFileSync)(retryFile, String(retries));
184
- const errors = (verdict.errors ?? ["unknown"]).join("\n - ");
194
+ const issues = (verdict.issues ?? ["unknown"]).join("\n - ");
185
195
  if (retries >= maxRetries) {
186
196
  cleanup(verdictFile, retryFile);
197
+ recordMarker(actionsFile, "allow", "max_retries_exceeded");
187
198
  return {
188
199
  action: "allow",
189
200
  message: `VERIFICATION FAILED ${maxRetries} TIMES. Allowing completion.
190
201
 
191
202
  Unresolved issues:
192
- - ${errors}
203
+ - ${issues}
193
204
 
194
205
  Report these issues in your final response.`,
195
206
  };
196
207
  }
197
208
  cleanup(verdictFile);
209
+ recordMarker(actionsFile, "block", "verdict_fail");
198
210
  return {
199
211
  action: "block",
200
212
  message: `VERIFICATION FAILED (attempt ${retries}/${maxRetries}).
201
213
 
202
214
  Issues found:
203
- - ${errors}
215
+ - ${issues}
204
216
 
205
217
  Fix the issues, rebuild if needed, re-test functionally through the browser, and re-verify.
206
- Write verdict to: .ironbee/sessions/${sid}/verdict.json
207
-
208
- Required verdict format:
209
- ${VERDICT_EXAMPLE_FAIL}`,
218
+ Submit verdict: echo '<verdict-json>' | ironbee hook submit-verdict`,
210
219
  };
211
220
  }
212
221
  // ── Unknown status ─────────────────────────────────────
213
222
  cleanup(verdictFile);
223
+ recordMarker(actionsFile, "block", "invalid_verdict");
214
224
  return {
215
225
  action: "block",
216
226
  message: `INVALID VERDICT STATUS: "${verdict.status}". Status must be "pass" or "fail".
217
- Use the Write tool to write to .ironbee/sessions/${sid}/verdict.json
218
- On pass: ${VERDICT_EXAMPLE_PASS}
219
- On fail: ${VERDICT_EXAMPLE_FAIL}`,
227
+ echo '${verdictExamplePass(sid)}' | ironbee hook submit-verdict`,
228
+ };
229
+ }
230
+ function recordMarker(actionsFile, action, reason) {
231
+ const marker = {
232
+ type: "verification_requested",
233
+ timestamp: new Date().toISOString(),
234
+ action,
235
+ reason,
220
236
  };
237
+ (0, actions_1.appendAction)(actionsFile, marker);
221
238
  }
222
239
  //# sourceMappingURL=verify-gate.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"verify-gate.js","sourceRoot":"","sources":["../../../src/hooks/core/verify-gate.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"verify-gate.js","sourceRoot":"","sources":["../../../src/hooks/core/verify-gate.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
File without changes
package/dist/lib/icon.js CHANGED
@@ -4,7 +4,7 @@ exports.printBanner = printBanner;
4
4
  const path_1 = require("path");
5
5
  const fs_1 = require("fs");
6
6
  function printBanner() {
7
- const txtPath = (0, path_1.join)(__dirname, "../../assets/banner.txt");
7
+ const txtPath = (0, path_1.join)(__dirname, "../assets/banner.txt");
8
8
  if (!(0, fs_1.existsSync)(txtPath)) {
9
9
  return;
10
10
  }
@@ -1 +1 @@
1
- {"version":3,"file":"icon.js","sourceRoot":"","sources":["../../src/lib/icon.ts"],"names":[],"mappings":";;AAGA,kCAQC;AAXD,+BAA4B;AAC5B,2BAA8C;AAE9C,SAAgB,WAAW;IACvB,MAAM,OAAO,GAAW,IAAA,WAAI,EAAC,SAAS,EAAE,yBAAyB,CAAC,CAAC;IACnE,IAAI,CAAC,IAAA,eAAU,EAAC,OAAO,CAAC,EAAE,CAAC;QACvB,OAAO;IACX,CAAC;IAED,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAA,iBAAY,EAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC;IACrD,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;AAC/B,CAAC"}
1
+ {"version":3,"file":"icon.js","sourceRoot":"","sources":["../../src/lib/icon.ts"],"names":[],"mappings":";;AAGA,kCAQC;AAXD,+BAA4B;AAC5B,2BAA8C;AAE9C,SAAgB,WAAW;IACvB,MAAM,OAAO,GAAW,IAAA,WAAI,EAAC,SAAS,EAAE,sBAAsB,CAAC,CAAC;IAChE,IAAI,CAAC,IAAA,eAAU,EAAC,OAAO,CAAC,EAAE,CAAC;QACvB,OAAO;IACX,CAAC;IAED,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAA,iBAAY,EAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC;IACrD,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;AAC/B,CAAC"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@ironbee-ai/cli",
3
- "version": "0.1.1",
4
- "description": "Browser verification gate for AI coding agents ensures code changes are tested before completion",
3
+ "version": "0.2.1",
4
+ "description": "The CLI for IronBeeThe Verification Layer for Agentic Development",
5
5
  "main": "dist/index.js",
6
6
  "bin": {
7
7
  "ironbee": "dist/index.js"
@@ -13,7 +13,7 @@
13
13
  "CHANGELOG.md"
14
14
  ],
15
15
  "scripts": {
16
- "build": "tsc && find src -name '*.md' | while read f; do mkdir -p dist/$(dirname ${f#src/}) && cp $f dist/${f#src/}; done && cp -r assets dist/assets",
16
+ "build": "tsc && chmod +x dist/index.js && find src -name '*.md' | while read f; do mkdir -p dist/$(dirname ${f#src/}) && cp $f dist/${f#src/}; done && mkdir -p dist/assets && cp assets/* dist/assets/",
17
17
  "dev": "ts-node src/index.ts",
18
18
  "start": "node dist/index.js",
19
19
  "test": "jest",
@@ -26,15 +26,23 @@
26
26
  },
27
27
  "keywords": [
28
28
  "ai",
29
+ "ai-agent",
29
30
  "verification",
30
31
  "browser-testing",
31
32
  "claude",
32
33
  "claude-code",
34
+ "cursor",
35
+ "cursor-ide",
33
36
  "mcp",
37
+ "mcp-server",
34
38
  "browser-devtools",
35
39
  "coding-agent",
40
+ "agentic",
41
+ "devtools",
36
42
  "e2e",
37
- "qa"
43
+ "qa",
44
+ "testing",
45
+ "automation"
38
46
  ],
39
47
  "author": "IronBee",
40
48
  "license": "MIT",