@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.
- package/CHANGELOG.md +4 -0
- package/README.md +38 -9
- package/dist/assets/banner.txt +9 -6
- package/dist/clients/base.d.ts +3 -1
- package/dist/clients/base.d.ts.map +1 -1
- package/dist/clients/claude/hooks/clear-verdict.d.ts.map +1 -1
- package/dist/clients/claude/hooks/clear-verdict.js +2 -1
- package/dist/clients/claude/hooks/clear-verdict.js.map +1 -1
- package/dist/clients/claude/hooks/require-verdict.d.ts +13 -0
- package/dist/clients/claude/hooks/require-verdict.d.ts.map +1 -0
- package/dist/clients/claude/hooks/require-verdict.js +42 -0
- package/dist/clients/claude/hooks/require-verdict.js.map +1 -0
- package/dist/clients/claude/hooks/session-start.d.ts +4 -3
- package/dist/clients/claude/hooks/session-start.d.ts.map +1 -1
- package/dist/clients/claude/hooks/session-start.js +22 -18
- package/dist/clients/claude/hooks/session-start.js.map +1 -1
- package/dist/clients/claude/index.d.ts +2 -1
- package/dist/clients/claude/index.d.ts.map +1 -1
- package/dist/clients/claude/index.js +46 -24
- package/dist/clients/claude/index.js.map +1 -1
- package/dist/clients/claude/rule.md +10 -8
- package/dist/clients/claude/skill.md +32 -9
- package/dist/clients/cursor/hooks/clear-verdict.d.ts +11 -0
- package/dist/clients/cursor/hooks/clear-verdict.d.ts.map +1 -0
- package/dist/clients/cursor/hooks/clear-verdict.js +57 -0
- package/dist/clients/cursor/hooks/clear-verdict.js.map +1 -0
- package/dist/clients/cursor/hooks/require-verdict.d.ts +12 -0
- package/dist/clients/cursor/hooks/require-verdict.d.ts.map +1 -0
- package/dist/clients/cursor/hooks/require-verdict.js +48 -0
- package/dist/clients/cursor/hooks/require-verdict.js.map +1 -0
- package/dist/clients/cursor/hooks/session-start.d.ts +9 -0
- package/dist/clients/cursor/hooks/session-start.d.ts.map +1 -0
- package/dist/clients/cursor/hooks/session-start.js +75 -0
- package/dist/clients/cursor/hooks/session-start.js.map +1 -0
- package/dist/clients/cursor/hooks/track-action.d.ts +16 -0
- package/dist/clients/cursor/hooks/track-action.d.ts.map +1 -0
- package/dist/clients/cursor/hooks/track-action.js +92 -0
- package/dist/clients/cursor/hooks/track-action.js.map +1 -0
- package/dist/clients/cursor/hooks/verify-gate.d.ts +13 -0
- package/dist/clients/cursor/hooks/verify-gate.d.ts.map +1 -0
- package/dist/clients/cursor/hooks/verify-gate.js +49 -0
- package/dist/clients/cursor/hooks/verify-gate.js.map +1 -0
- package/dist/clients/cursor/index.d.ts +20 -0
- package/dist/clients/cursor/index.d.ts.map +1 -0
- package/dist/clients/cursor/index.js +213 -0
- package/dist/clients/cursor/index.js.map +1 -0
- package/dist/clients/cursor/rule.md +42 -0
- package/dist/clients/cursor/skill.md +86 -0
- package/dist/clients/registry.d.ts.map +1 -1
- package/dist/clients/registry.js +2 -1
- package/dist/clients/registry.js.map +1 -1
- package/dist/commands/hook.d.ts.map +1 -1
- package/dist/commands/hook.js +61 -0
- package/dist/commands/hook.js.map +1 -1
- package/dist/commands/install.d.ts.map +1 -1
- package/dist/commands/install.js +1 -13
- package/dist/commands/install.js.map +1 -1
- package/dist/commands/status.js +3 -3
- package/dist/commands/verify.js +3 -3
- package/dist/hooks/core/actions.d.ts +7 -0
- package/dist/hooks/core/actions.d.ts.map +1 -1
- package/dist/hooks/core/actions.js +5 -0
- package/dist/hooks/core/actions.js.map +1 -1
- package/dist/hooks/core/submit-verdict.d.ts +21 -0
- package/dist/hooks/core/submit-verdict.d.ts.map +1 -0
- package/dist/hooks/core/submit-verdict.js +109 -0
- package/dist/hooks/core/submit-verdict.js.map +1 -0
- package/dist/hooks/core/verify-gate.d.ts.map +1 -1
- package/dist/hooks/core/verify-gate.js +66 -49
- package/dist/hooks/core/verify-gate.js.map +1 -1
- package/dist/index.js +0 -0
- package/dist/lib/icon.js +1 -1
- package/dist/lib/icon.js.map +1 -1
- 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":"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"}
|
|
@@ -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;
|
|
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
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
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.
|
|
86
|
-
|
|
87
|
-
On 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
|
|
101
|
-
|
|
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
|
|
111
|
-
|
|
112
|
-
|
|
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.
|
|
127
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
|
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
|
-
- ${
|
|
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
|
-
- ${
|
|
215
|
+
- ${issues}
|
|
204
216
|
|
|
205
217
|
Fix the issues, rebuild if needed, re-test functionally through the browser, and re-verify.
|
|
206
|
-
|
|
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
|
-
|
|
218
|
-
|
|
219
|
-
|
|
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":";AAAA;;;;;;GAMG;;
|
|
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, "
|
|
7
|
+
const txtPath = (0, path_1.join)(__dirname, "../assets/banner.txt");
|
|
8
8
|
if (!(0, fs_1.existsSync)(txtPath)) {
|
|
9
9
|
return;
|
|
10
10
|
}
|
package/dist/lib/icon.js.map
CHANGED
|
@@ -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,
|
|
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.
|
|
4
|
-
"description": "
|
|
3
|
+
"version": "0.2.1",
|
|
4
|
+
"description": "The CLI for IronBee — The 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 &&
|
|
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",
|