@ironbee-ai/cli 0.4.0 → 0.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (92) hide show
  1. package/CHANGELOG.md +16 -2
  2. package/README.md +63 -0
  3. package/dist/clients/base.d.ts +6 -6
  4. package/dist/clients/base.d.ts.map +1 -1
  5. package/dist/clients/claude/commands/ironbee-verify.md +127 -0
  6. package/dist/clients/claude/hooks/clear-verdict.d.ts +1 -1
  7. package/dist/clients/claude/hooks/clear-verdict.d.ts.map +1 -1
  8. package/dist/clients/claude/hooks/clear-verdict.js +2 -2
  9. package/dist/clients/claude/hooks/clear-verdict.js.map +1 -1
  10. package/dist/clients/claude/hooks/require-verdict.d.ts +1 -1
  11. package/dist/clients/claude/hooks/require-verdict.d.ts.map +1 -1
  12. package/dist/clients/claude/hooks/require-verdict.js +1 -1
  13. package/dist/clients/claude/hooks/require-verdict.js.map +1 -1
  14. package/dist/clients/claude/hooks/require-verification.d.ts +1 -1
  15. package/dist/clients/claude/hooks/require-verification.d.ts.map +1 -1
  16. package/dist/clients/claude/hooks/require-verification.js +29 -2
  17. package/dist/clients/claude/hooks/require-verification.js.map +1 -1
  18. package/dist/clients/claude/hooks/session-start.d.ts.map +1 -1
  19. package/dist/clients/claude/hooks/session-start.js +5 -5
  20. package/dist/clients/claude/hooks/session-start.js.map +1 -1
  21. package/dist/clients/claude/hooks/track-action.d.ts +1 -1
  22. package/dist/clients/claude/hooks/track-action.d.ts.map +1 -1
  23. package/dist/clients/claude/hooks/track-action.js +21 -4
  24. package/dist/clients/claude/hooks/track-action.js.map +1 -1
  25. package/dist/clients/claude/index.d.ts +6 -6
  26. package/dist/clients/claude/index.d.ts.map +1 -1
  27. package/dist/clients/claude/index.js +28 -30
  28. package/dist/clients/claude/index.js.map +1 -1
  29. package/dist/clients/claude/rule.md +1 -0
  30. package/dist/clients/claude/skill.md +2 -0
  31. package/dist/clients/cursor/commands/ironbee-verify/SKILL.md +133 -0
  32. package/dist/clients/cursor/hooks/clear-verdict.d.ts +1 -1
  33. package/dist/clients/cursor/hooks/clear-verdict.d.ts.map +1 -1
  34. package/dist/clients/cursor/hooks/clear-verdict.js +2 -2
  35. package/dist/clients/cursor/hooks/clear-verdict.js.map +1 -1
  36. package/dist/clients/cursor/hooks/require-verdict.d.ts +1 -1
  37. package/dist/clients/cursor/hooks/require-verdict.d.ts.map +1 -1
  38. package/dist/clients/cursor/hooks/require-verdict.js +3 -1
  39. package/dist/clients/cursor/hooks/require-verdict.js.map +1 -1
  40. package/dist/clients/cursor/hooks/require-verification.d.ts +1 -1
  41. package/dist/clients/cursor/hooks/require-verification.d.ts.map +1 -1
  42. package/dist/clients/cursor/hooks/require-verification.js +35 -2
  43. package/dist/clients/cursor/hooks/require-verification.js.map +1 -1
  44. package/dist/clients/cursor/hooks/session-start.d.ts.map +1 -1
  45. package/dist/clients/cursor/hooks/session-start.js +6 -6
  46. package/dist/clients/cursor/hooks/session-start.js.map +1 -1
  47. package/dist/clients/cursor/hooks/track-action.d.ts +1 -1
  48. package/dist/clients/cursor/hooks/track-action.d.ts.map +1 -1
  49. package/dist/clients/cursor/hooks/track-action.js +25 -6
  50. package/dist/clients/cursor/hooks/track-action.js.map +1 -1
  51. package/dist/clients/cursor/hooks/verify-gate.d.ts.map +1 -1
  52. package/dist/clients/cursor/hooks/verify-gate.js +4 -4
  53. package/dist/clients/cursor/hooks/verify-gate.js.map +1 -1
  54. package/dist/clients/cursor/index.d.ts +6 -6
  55. package/dist/clients/cursor/index.d.ts.map +1 -1
  56. package/dist/clients/cursor/index.js +24 -24
  57. package/dist/clients/cursor/index.js.map +1 -1
  58. package/dist/clients/cursor/rule.md +1 -0
  59. package/dist/clients/cursor/skill.md +2 -0
  60. package/dist/commands/hook.d.ts.map +1 -1
  61. package/dist/commands/hook.js +47 -22
  62. package/dist/commands/hook.js.map +1 -1
  63. package/dist/hooks/core/actions.d.ts +2 -1
  64. package/dist/hooks/core/actions.d.ts.map +1 -1
  65. package/dist/hooks/core/actions.js +18 -1
  66. package/dist/hooks/core/actions.js.map +1 -1
  67. package/dist/hooks/core/session-state.d.ts +7 -1
  68. package/dist/hooks/core/session-state.d.ts.map +1 -1
  69. package/dist/hooks/core/session-state.js +35 -3
  70. package/dist/hooks/core/session-state.js.map +1 -1
  71. package/dist/hooks/core/submit-verdict.d.ts.map +1 -1
  72. package/dist/hooks/core/submit-verdict.js +11 -4
  73. package/dist/hooks/core/submit-verdict.js.map +1 -1
  74. package/dist/hooks/core/verification-lifecycle.d.ts +3 -2
  75. package/dist/hooks/core/verification-lifecycle.d.ts.map +1 -1
  76. package/dist/hooks/core/verification-lifecycle.js +12 -7
  77. package/dist/hooks/core/verification-lifecycle.js.map +1 -1
  78. package/dist/hooks/core/verify-gate.js +2 -2
  79. package/dist/hooks/core/verify-gate.js.map +1 -1
  80. package/dist/lib/collector.d.ts +11 -0
  81. package/dist/lib/collector.d.ts.map +1 -0
  82. package/dist/lib/collector.js +82 -0
  83. package/dist/lib/collector.js.map +1 -0
  84. package/dist/lib/config.d.ts +37 -0
  85. package/dist/lib/config.d.ts.map +1 -1
  86. package/dist/lib/config.js +59 -0
  87. package/dist/lib/config.js.map +1 -1
  88. package/dist/lib/output.d.ts +5 -0
  89. package/dist/lib/output.d.ts.map +1 -1
  90. package/dist/lib/output.js +10 -0
  91. package/dist/lib/output.js.map +1 -1
  92. package/package.json +2 -2
package/CHANGELOG.md CHANGED
@@ -1,10 +1,24 @@
1
1
  # Changelog
2
2
 
3
- ## 0.4.0 (2026-03-22)
3
+ ## 0.5.0 (2026-04-03)
4
4
 
5
5
  ### Features
6
6
 
7
- * **analyze:** add session analytics with time, quality, code changes, fix effectiveness, scoring, cross-session analysis, and /ironbee-analyze command ([61fe0c8](https://github.com/ironbee-ai/ironbee-cli/commit/61fe0c8060731e66e23a9e17d010fc9d373fcbe9))
7
+ * **recording:** enforce recording during verification if it is enabled ([5ad1088](https://github.com/ironbee-ai/ironbee-cli/commit/5ad1088fa1f3052f1b07e02f1de93f32232916d1))
8
+
9
+ ## 0.4.1 (2026-03-25)
10
+
11
+ ### Features
12
+
13
+ * **verify-command:** add parametric modes and improve verification quality ([b274813](https://github.com/ironbee-ai/ironbee-cli/commit/b2748139d0dc17f9ffcf5e211a6c1b95b0ec9d33))
14
+
15
+ ## [0.4.0](https://github.com/ironbee-ai/ironbee-cli/compare/v0.3.0...v0.4.0) (2026-03-22)
16
+
17
+ ### Features
18
+
19
+ * **verification:** add verification lifecycle with start/end boundaries, trace IDs, tool input metadata injection, and bdt_ tool name prefix ([a5df3e8](https://github.com/ironbee-ai/ironbee-cli/commit/a5df3e8))
20
+ * **lifecycle:** add fix start/stop tracking with phase state and session reconciliation ([b10f878](https://github.com/ironbee-ai/ironbee-cli/commit/b10f878))
21
+ * **analyze:** add session analytics with time, quality, code changes, fix effectiveness, scoring, cross-session analysis, and /ironbee-analyze command ([61fe0c8](https://github.com/ironbee-ai/ironbee-cli/commit/61fe0c8))
8
22
 
9
23
  All notable changes to this project will be documented in this file.
10
24
 
package/README.md CHANGED
@@ -23,6 +23,10 @@ IronBee also tracks every verification cycle — coding time, fix time, pass/fai
23
23
 
24
24
  Powered by [browser-devtools-mcp](https://browser-devtools.com) — the agent navigates pages, clicks buttons, fills forms, takes screenshots, checks console errors, and writes a structured verdict.
25
25
 
26
+ ## Demo
27
+
28
+ https://github.com/user-attachments/assets/9d4e602b-6c05-4b48-89a8-3df429d10e00
29
+
26
30
  ## Supported Clients
27
31
 
28
32
  | Client | Status |
@@ -77,6 +81,20 @@ ironbee verify [session-id] Dry-run verdict validation
77
81
  ironbee analyze [session-id] Analyze session metrics (or all sessions)
78
82
  ```
79
83
 
84
+ ### Agent Commands (slash commands)
85
+
86
+ IronBee installs slash commands that the agent can use inside Claude Code or Cursor:
87
+
88
+ | Command | Description |
89
+ |---------|-------------|
90
+ | `/ironbee-verify` | Verify changes — focused on affected areas (default) |
91
+ | `/ironbee-verify full` | Full verification — complete visual + functional + accessibility checklists |
92
+ | `/ironbee-verify visual` | Visual-only — contrast, layout, spacing, fonts, images, theming |
93
+ | `/ironbee-verify functional` | Functional-only — clicks, forms, navigation, data flow, error handling |
94
+ | `/ironbee-analyze` | Run session analytics and provide LLM-powered semantic insights |
95
+
96
+ `/ironbee-verify` guides the agent through a systematic verification process. The default mode focuses on what changed, while `full` runs every checklist item. Use `visual` or `functional` to narrow the scope when you know what type of testing is needed.
97
+
80
98
  ## Configuration
81
99
 
82
100
  IronBee loads config from two locations (project overrides global):
@@ -106,6 +124,51 @@ By default, IronBee requires verification for common code file extensions: `.ts`
106
124
 
107
125
  Non-code files like `README.md`, `package.json`, or `.gitignore` do not trigger verification.
108
126
 
127
+ ### Browser DevTools MCP config
128
+
129
+ By default, IronBee configures `browser-devtools-mcp` via npx. To customize the MCP server (e.g., use a local server or HTTP transport), add a `browserDevTools` key to your config:
130
+
131
+ ```json
132
+ {
133
+ "browserDevTools": {
134
+ "mcp": {
135
+ "url": "http://localhost:4000/mcp"
136
+ }
137
+ }
138
+ }
139
+ ```
140
+
141
+ Or with a custom stdio command:
142
+
143
+ ```json
144
+ {
145
+ "browserDevTools": {
146
+ "mcp": {
147
+ "command": "node",
148
+ "args": ["./my-server.js"],
149
+ "env": { "MY_VAR": "value" }
150
+ }
151
+ }
152
+ }
153
+ ```
154
+
155
+ You can also pass extra env vars to the default npx server without replacing it:
156
+
157
+ ```json
158
+ {
159
+ "browserDevTools": {
160
+ "env": { "BROWSER_HEADLESS_ENABLE": "true", "OTEL_ENABLE": "true" }
161
+ }
162
+ }
163
+ ```
164
+
165
+ | Key | Description |
166
+ |-----|-------------|
167
+ | `browserDevTools.mcp` | Full MCP server config — used as-is when provided. Supports `command`+`args` (stdio) or `url` (HTTP) |
168
+ | `browserDevTools.env` | Extra env vars merged into the default config. Only used when `mcp` is not provided |
169
+
170
+ > **Note:** IronBee always sets `TOOL_NAME_PREFIX=bdt_` and `TOOL_INPUT_METADATA_ENABLE=true` — these cannot be overridden.
171
+
109
172
  ## Verification Flow
110
173
 
111
174
  When the agent tries to complete a task, IronBee runs these checks:
@@ -9,16 +9,16 @@ export interface IClient {
9
9
  /** Resolves the project directory from client-specific env vars, falling back to cwd. */
10
10
  resolveProjectDir(): string;
11
11
  /** Runs the verify-gate Stop hook for this client. */
12
- runVerifyGate(projectDir: string): void;
12
+ runVerifyGate(projectDir: string): Promise<void>;
13
13
  /** Runs the clear-verdict PostToolUse hook for this client. */
14
- runClearVerdict(projectDir: string): void;
14
+ runClearVerdict(projectDir: string): Promise<void>;
15
15
  /** Runs the track-action PostToolUse hook for this client. */
16
- runTrackAction(projectDir: string): void;
16
+ runTrackAction(projectDir: string): Promise<void>;
17
17
  /** Runs the session-start hook for this client. */
18
- runSessionStart(projectDir: string): void;
18
+ runSessionStart(projectDir: string): Promise<void>;
19
19
  /** Runs the require-verdict PreToolUse hook for this client. */
20
- runRequireVerdict(projectDir: string): void;
20
+ runRequireVerdict(projectDir: string): Promise<void>;
21
21
  /** Runs the require-verification PreToolUse hook for this client. */
22
- runRequireVerification(projectDir: string): void;
22
+ runRequireVerification(projectDir: string): Promise<void>;
23
23
  }
24
24
  //# sourceMappingURL=base.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"base.d.ts","sourceRoot":"","sources":["../../src/clients/base.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,OAAO;IACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAEtB,wEAAwE;IACxE,MAAM,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC;IAEpC,oEAAoE;IACpE,OAAO,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAElC,2EAA2E;IAC3E,SAAS,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAEpC,yFAAyF;IACzF,iBAAiB,IAAI,MAAM,CAAC;IAE5B,sDAAsD;IACtD,aAAa,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAExC,+DAA+D;IAC/D,eAAe,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAE1C,8DAA8D;IAC9D,cAAc,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAEzC,mDAAmD;IACnD,eAAe,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAE1C,gEAAgE;IAChE,iBAAiB,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAE5C,qEAAqE;IACrE,sBAAsB,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;CAClD"}
1
+ {"version":3,"file":"base.d.ts","sourceRoot":"","sources":["../../src/clients/base.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,OAAO;IACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAEtB,wEAAwE;IACxE,MAAM,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC;IAEpC,oEAAoE;IACpE,OAAO,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAElC,2EAA2E;IAC3E,SAAS,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAEpC,yFAAyF;IACzF,iBAAiB,IAAI,MAAM,CAAC;IAE5B,sDAAsD;IACtD,aAAa,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAEjD,+DAA+D;IAC/D,eAAe,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAEnD,8DAA8D;IAC9D,cAAc,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAElD,mDAAmD;IACnD,eAAe,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAEnD,gEAAgE;IAChE,iBAAiB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAErD,qEAAqE;IACrE,sBAAsB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAC3D"}
@@ -0,0 +1,127 @@
1
+ # IronBee Verify
2
+
3
+ Verify the current code changes in the browser.
4
+
5
+ ## Usage
6
+ - `/ironbee-verify` — **default** — focus on what changed, visual + functional checks on affected areas
7
+ - `/ironbee-verify full` — **full scope** — entire application, all checklists, edge cases, responsive, accessibility deep dive
8
+ - `/ironbee-verify visual` — **visual only** — contrast, layout, spacing, fonts, images, theming
9
+ - `/ironbee-verify functional` — **functional only** — clicks, forms, navigation, data flow, error handling
10
+
11
+ If no argument is given, use **default** mode.
12
+
13
+ ---
14
+
15
+ ## Steps (all modes)
16
+
17
+ 1. **Start verification**: Run `echo '{"session_id":"$IRONBEE_SESSION_ID"}' | ironbee hook verification-start` via Bash
18
+ 2. **Build and start** the application if not already running
19
+ 3. **For EVERY page you visit**, repeat this cycle:
20
+ a. **Navigate** using `mcp__browser-devtools__bdt_navigation_go-to`
21
+ b. **Take a FULL PAGE screenshot** using `mcp__browser-devtools__bdt_content_take-screenshot` with `fullPage: true`
22
+ c. **Take an ARIA snapshot** using `mcp__browser-devtools__bdt_a11y_take-aria-snapshot`
23
+ d. **STOP and visually analyze the screenshot** — switch your focus entirely to finding visual problems. Look at this screenshot as if your ONLY job is to find visual defects:
24
+ **WARNING: ARIA reports DOM content, not what the user actually sees.** Do NOT assume the page looks correct just because ARIA shows the right content. Only the screenshot tells you what the user actually sees.
25
+ - Text readability — is it readable against its background? Look for text that blends in or poor contrast
26
+ - Layout — overlapping elements, unexpected gaps, overflow, content cut off
27
+ - Spacing — consistent padding/margin? Too cramped or too far apart?
28
+ - Colors — intentional and consistent? Any jarring mismatches?
29
+ - Typography — right sizes? Clipped or truncated text?
30
+ - Images/icons — loaded? Right size and aspect ratio?
31
+ - States — empty, loading, disabled, error states rendered properly?
32
+ Report your visual findings before continuing.
33
+ e. **Read the ARIA snapshot** — verify headings, labels, landmarks, and structure
34
+ f. If anything looks wrong → note it as an issue
35
+ 4. **Functionally test** — run the checklist for your mode (see below). After each significant interaction, take another screenshot and repeat the visual analysis.
36
+ 5. **Check console** for errors using `mcp__browser-devtools__bdt_o11y_get-console-messages`
37
+ 6. **Stop** the dev server when verification is complete
38
+ 7. **Submit your verdict** via Bash:
39
+ - Pass: `echo '{"session_id":"...","status":"pass","pages_tested":[...],"checks":[...],"console_errors":0,"network_failures":0}' | ironbee hook submit-verdict`
40
+ - Fail: `echo '{"session_id":"...","status":"fail","pages_tested":[...],"checks":[...],"console_errors":N,"network_failures":N,"issues":["describe what failed"]}' | ironbee hook submit-verdict`
41
+ 8. **If failed** → collect ALL issues first (finish testing all affected pages), submit one fail verdict with all issues, then fix everything, rebuild, and re-verify. Do not fix one issue at a time — batch fixes to avoid repeated build/restart cycles.
42
+ 9. If pass after a previous fail, include `"fixes"` in the verdict describing what was fixed
43
+
44
+ ---
45
+
46
+ ## Default Mode
47
+
48
+ Focus on the code you changed — not the entire application.
49
+
50
+ ### 1. Study the changes
51
+ 1. Run `git diff --name-only` and `git diff --name-only HEAD~1`
52
+ 2. **Ignore `.ironbee/`, `.claude/`, `.cursor/`** — tool config, not application code
53
+ 3. **Read the full diff** (`git diff` and/or `git diff HEAD~1`) — understand every change: what was added, removed, modified. Note specific values (colors, sizes, conditions, logic, API endpoints, component props).
54
+ 4. Before opening the browser, you should be able to answer: what exactly changed, what should look or behave differently, and what could go wrong?
55
+
56
+ ### 2. Verify in the browser
57
+ - **Cross-reference the diff against what you see.** For each change in the diff, verify it is correctly reflected in the browser. If the diff changes a color → check that color. If it changes a calculation → verify the result. If it adds a component → confirm it renders.
58
+ - **Test the flow end-to-end** — navigate, click, fill forms, submit, verify the outcome
59
+ - **Check one edge case** — empty input, invalid data, or double-click
60
+ - **Console** — any new errors or warnings?
61
+
62
+ ---
63
+
64
+ ## Full Mode (`/ironbee-verify full`)
65
+
66
+ Comprehensive verification of the **entire application**. Do NOT run `git diff` or scope to recent changes. Test every page, every flow, every visual detail. Any issue is a failure, regardless of when it was introduced.
67
+
68
+ ### Visual Checklist
69
+ In addition to the per-page visual analysis in step 3d:
70
+ - **Responsiveness** — does the layout adapt if viewport changes? No horizontal scrolling on standard widths
71
+ - **Borders & separators** — visible and consistent? Not too faint or missing
72
+ - **Scroll behavior** — does the page scroll smoothly? No content hidden behind sticky headers/footers?
73
+
74
+ ### Functional Checklist
75
+ - **Navigation** — do links and buttons navigate to the correct pages?
76
+ - **Forms** — fill inputs with real data, select options, submit. Do validation messages appear correctly?
77
+ - **Buttons & interactions** — do click handlers fire? Do toggles, dropdowns, and modals work?
78
+ - **Data flow** — does submitted data appear where expected?
79
+ - **Error handling** — what happens with invalid input? Does the UI handle errors gracefully?
80
+ - **Authentication** — if applicable, do protected routes redirect correctly?
81
+ - **API calls** — do network requests succeed? Check for failed requests in console/network
82
+ - **State persistence** — does state survive page refresh where expected?
83
+ - **Edge cases** — empty inputs, very long text, special characters, rapid clicks
84
+
85
+ ### Accessibility (deep dive)
86
+ - Are headings hierarchical? Do form inputs have labels? Are landmarks present?
87
+ - Check for missing alt text on images
88
+
89
+ ---
90
+
91
+ ## Visual Mode (`/ironbee-verify visual`)
92
+
93
+ Focus exclusively on visual quality. Run the per-page visual analysis from step 3d on every page, plus:
94
+ - **Responsiveness** — viewport changes, no horizontal scrolling
95
+ - **Borders & separators** — visible and consistent?
96
+ - **Scroll behavior** — smooth scrolling, no hidden content
97
+
98
+ Take screenshots of **multiple states** if applicable (hover, active, disabled, empty, populated).
99
+
100
+ ---
101
+
102
+ ## Functional Mode (`/ironbee-verify functional`)
103
+
104
+ Focus exclusively on behavior. Use the same functional checklist as Full Mode above.
105
+
106
+ Test the **complete user flow**, not just the single step you changed.
107
+
108
+ ---
109
+
110
+ ## When to FAIL
111
+
112
+ If you observe ANY problem — wrong data, unexpected errors, visual defects, broken interactions, console errors, data inconsistency between pages — you MUST submit a **fail** verdict.
113
+
114
+ **Do NOT rationalize away problems.** If something looks wrong or behaves unexpectedly, it IS wrong. In **full** mode, there is no such thing as "pre-existing" — if it's broken, fail it.
115
+
116
+ **After a fail verdict, you MUST fix the issues and re-verify.** Do not just report and stop.
117
+
118
+ ## Verdict Quality
119
+
120
+ Your `checks` array must list **specific observations**, not generic statements:
121
+ - GOOD: `["login form renders with email and password fields", "submitted valid credentials, redirected to /dashboard", "console clean — 0 errors"]`
122
+ - BAD: `["it works", "looks good", "feature implemented"]`
123
+
124
+ ## Important
125
+ - ALWAYS submit a verdict after every verification attempt — both pass AND fail
126
+ - Do NOT edit code before submitting a fail verdict
127
+ - **Noticing a bug and submitting pass is the #1 violation** — if you see it, fail it
@@ -7,5 +7,5 @@
7
7
  * Only records file_edit and clears verdict for files with
8
8
  * extensions in the verifyExtensions whitelist.
9
9
  */
10
- export declare function run(projectDir: string): void;
10
+ export declare function run(projectDir: string): Promise<void>;
11
11
  //# sourceMappingURL=clear-verdict.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"clear-verdict.d.ts","sourceRoot":"","sources":["../../../../src/clients/claude/hooks/clear-verdict.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAgBH,wBAAgB,GAAG,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI,CA6C5C"}
1
+ {"version":3,"file":"clear-verdict.d.ts","sourceRoot":"","sources":["../../../../src/clients/claude/hooks/clear-verdict.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAgBH,wBAAsB,GAAG,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CA6C3D"}
@@ -15,7 +15,7 @@ const actions_1 = require("../../../hooks/core/actions");
15
15
  const config_1 = require("../../../lib/config");
16
16
  const logger_1 = require("../../../lib/logger");
17
17
  const stdin_1 = require("../../../lib/stdin");
18
- function run(projectDir) {
18
+ async function run(projectDir) {
19
19
  let sessionId = "default";
20
20
  let input;
21
21
  try {
@@ -49,7 +49,7 @@ function run(projectDir) {
49
49
  tool_name: input.tool_name ?? "unknown",
50
50
  file_path: writtenFile,
51
51
  };
52
- (0, actions_1.appendAction)(actionsFile, fileEditEntry);
52
+ await (0, actions_1.appendAction)(actionsFile, fileEditEntry);
53
53
  (0, clear_verdict_1.runClearVerdict)({
54
54
  verdictFile: `${projectDir}/.ironbee/sessions/${sessionId}/verdict.json`,
55
55
  sessionDir: `${projectDir}/.ironbee/sessions/${sessionId}`,
@@ -1 +1 @@
1
- {"version":3,"file":"clear-verdict.js","sourceRoot":"","sources":["../../../../src/clients/claude/hooks/clear-verdict.ts"],"names":[],"mappings":";AAAA;;;;;;;;GAQG;;AAgBH,kBA6CC;AA3DD,qEAAoE;AACpE,yDAA2E;AAC3E,gDAAsF;AACtF,gDAAyD;AACzD,8CAA+C;AAU/C,SAAgB,GAAG,CAAC,UAAkB;IAClC,IAAI,SAAS,GAAW,SAAS,CAAC;IAClC,IAAI,KAA6B,CAAC;IAClC,IAAI,CAAC;QACD,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAA,iBAAS,GAAE,CAA2B,CAAC;QAC1D,SAAS,GAAG,KAAK,CAAC,UAAU,IAAI,SAAS,CAAC;QAC1C,IAAA,mBAAU,EAAC,GAAG,UAAU,sBAAsB,SAAS,cAAc,CAAC,CAAC;IAC3E,CAAC;IAAC,OAAO,CAAU,EAAE,CAAC;QAClB,eAAM,CAAC,KAAK,CAAC,0BAA0B,CAAC,EAAE,CAAC,CAAC;QAC5C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACpB,CAAC;IAED,4DAA4D;IAC5D,MAAM,WAAW,GAAuB,KAAK,CAAC,UAAU,EAAE,SAAS,CAAC;IACpE,IAAI,WAAW,IAAI,WAAW,CAAC,QAAQ,CAAC,oBAAoB,CAAC,IAAI,WAAW,CAAC,QAAQ,CAAC,cAAc,CAAC,EAAE,CAAC;QACpG,eAAM,CAAC,KAAK,CAAC,wDAAwD,WAAW,EAAE,CAAC,CAAC;QACpF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACpB,CAAC;IAED,6CAA6C;IAC7C,IAAI,WAAW,EAAE,CAAC;QACd,MAAM,MAAM,GAAkB,IAAA,mBAAU,EAAC,UAAU,CAAC,CAAC;QACrD,IAAI,CAAC,IAAA,6BAAoB,EAAC,WAAW,EAAE,MAAM,CAAC,EAAE,CAAC;YAC7C,eAAM,CAAC,KAAK,CAAC,+DAA+D,WAAW,GAAG,CAAC,CAAC;YAC5F,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACpB,CAAC;IACL,CAAC;IAED,MAAM,WAAW,GAAW,GAAG,UAAU,sBAAsB,SAAS,gBAAgB,CAAC;IAEzF,oCAAoC;IACpC,MAAM,aAAa,GAAmB;QAClC,IAAI,EAAE,WAAW;QACjB,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;QACnC,SAAS,EAAE,KAAK,CAAC,SAAS,IAAI,SAAS;QACvC,SAAS,EAAE,WAAW;KACzB,CAAC;IACF,IAAA,sBAAY,EAAC,WAAW,EAAE,aAAa,CAAC,CAAC;IAEzC,IAAA,+BAAe,EAAC;QACZ,WAAW,EAAE,GAAG,UAAU,sBAAsB,SAAS,eAAe;QACxE,UAAU,EAAE,GAAG,UAAU,sBAAsB,SAAS,EAAE;KAC7D,CAAC,CAAC;IAEH,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACpB,CAAC"}
1
+ {"version":3,"file":"clear-verdict.js","sourceRoot":"","sources":["../../../../src/clients/claude/hooks/clear-verdict.ts"],"names":[],"mappings":";AAAA;;;;;;;;GAQG;;AAgBH,kBA6CC;AA3DD,qEAAoE;AACpE,yDAA2E;AAC3E,gDAAsF;AACtF,gDAAyD;AACzD,8CAA+C;AAUxC,KAAK,UAAU,GAAG,CAAC,UAAkB;IACxC,IAAI,SAAS,GAAW,SAAS,CAAC;IAClC,IAAI,KAA6B,CAAC;IAClC,IAAI,CAAC;QACD,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAA,iBAAS,GAAE,CAA2B,CAAC;QAC1D,SAAS,GAAG,KAAK,CAAC,UAAU,IAAI,SAAS,CAAC;QAC1C,IAAA,mBAAU,EAAC,GAAG,UAAU,sBAAsB,SAAS,cAAc,CAAC,CAAC;IAC3E,CAAC;IAAC,OAAO,CAAU,EAAE,CAAC;QAClB,eAAM,CAAC,KAAK,CAAC,0BAA0B,CAAC,EAAE,CAAC,CAAC;QAC5C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACpB,CAAC;IAED,4DAA4D;IAC5D,MAAM,WAAW,GAAuB,KAAK,CAAC,UAAU,EAAE,SAAS,CAAC;IACpE,IAAI,WAAW,IAAI,WAAW,CAAC,QAAQ,CAAC,oBAAoB,CAAC,IAAI,WAAW,CAAC,QAAQ,CAAC,cAAc,CAAC,EAAE,CAAC;QACpG,eAAM,CAAC,KAAK,CAAC,wDAAwD,WAAW,EAAE,CAAC,CAAC;QACpF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACpB,CAAC;IAED,6CAA6C;IAC7C,IAAI,WAAW,EAAE,CAAC;QACd,MAAM,MAAM,GAAkB,IAAA,mBAAU,EAAC,UAAU,CAAC,CAAC;QACrD,IAAI,CAAC,IAAA,6BAAoB,EAAC,WAAW,EAAE,MAAM,CAAC,EAAE,CAAC;YAC7C,eAAM,CAAC,KAAK,CAAC,+DAA+D,WAAW,GAAG,CAAC,CAAC;YAC5F,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACpB,CAAC;IACL,CAAC;IAED,MAAM,WAAW,GAAW,GAAG,UAAU,sBAAsB,SAAS,gBAAgB,CAAC;IAEzF,oCAAoC;IACpC,MAAM,aAAa,GAAmB;QAClC,IAAI,EAAE,WAAW;QACjB,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;QACnC,SAAS,EAAE,KAAK,CAAC,SAAS,IAAI,SAAS;QACvC,SAAS,EAAE,WAAW;KACzB,CAAC;IACF,MAAM,IAAA,sBAAY,EAAC,WAAW,EAAE,aAAa,CAAC,CAAC;IAE/C,IAAA,+BAAe,EAAC;QACZ,WAAW,EAAE,GAAG,UAAU,sBAAsB,SAAS,eAAe;QACxE,UAAU,EAAE,GAAG,UAAU,sBAAsB,SAAS,EAAE;KAC7D,CAAC,CAAC;IAEH,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACpB,CAAC"}
@@ -9,5 +9,5 @@
9
9
  * Exit 0 = allow edit
10
10
  * Exit 2 = block edit (stderr message shown to agent)
11
11
  */
12
- export declare function run(projectDir: string): void;
12
+ export declare function run(projectDir: string): Promise<void>;
13
13
  //# sourceMappingURL=require-verdict.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"require-verdict.d.ts","sourceRoot":"","sources":["../../../../src/clients/claude/hooks/require-verdict.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAcH,wBAAgB,GAAG,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI,CA0B5C"}
1
+ {"version":3,"file":"require-verdict.d.ts","sourceRoot":"","sources":["../../../../src/clients/claude/hooks/require-verdict.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAcH,wBAAsB,GAAG,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CA0B3D"}
@@ -15,7 +15,7 @@ exports.run = run;
15
15
  const actions_1 = require("../../../hooks/core/actions");
16
16
  const logger_1 = require("../../../lib/logger");
17
17
  const stdin_1 = require("../../../lib/stdin");
18
- function run(projectDir) {
18
+ async function run(projectDir) {
19
19
  let input;
20
20
  try {
21
21
  input = JSON.parse((0, stdin_1.readStdin)());
@@ -1 +1 @@
1
- {"version":3,"file":"require-verdict.js","sourceRoot":"","sources":["../../../../src/clients/claude/hooks/require-verdict.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;GAUG;;AAcH,kBA0BC;AAtCD,yDAA2E;AAC3E,gDAAyD;AACzD,8CAA+C;AAU/C,SAAgB,GAAG,CAAC,UAAkB;IAClC,IAAI,KAA4B,CAAC;IACjC,IAAI,CAAC;QACD,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAA,iBAAS,GAAE,CAA0B,CAAC;IAC7D,CAAC;IAAC,OAAO,CAAU,EAAE,CAAC;QAClB,eAAM,CAAC,KAAK,CAAC,0BAA0B,CAAC,EAAE,CAAC,CAAC;QAC5C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACpB,CAAC;IAED,MAAM,SAAS,GAAW,KAAK,CAAC,UAAU,IAAI,SAAS,CAAC;IACxD,IAAA,mBAAU,EAAC,GAAG,UAAU,sBAAsB,SAAS,cAAc,CAAC,CAAC;IAEvE,MAAM,WAAW,GAAW,GAAG,UAAU,sBAAsB,SAAS,gBAAgB,CAAC;IAEzF,IAAI,IAAA,sCAA4B,EAAC,WAAW,CAAC,EAAE,CAAC;QAC5C,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC;;;yBAGJ,SAAS;;;CAGjC,CAAC,CAAC;QACK,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACpB,CAAC;IAED,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACpB,CAAC"}
1
+ {"version":3,"file":"require-verdict.js","sourceRoot":"","sources":["../../../../src/clients/claude/hooks/require-verdict.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;GAUG;;AAcH,kBA0BC;AAtCD,yDAA2E;AAC3E,gDAAyD;AACzD,8CAA+C;AAUxC,KAAK,UAAU,GAAG,CAAC,UAAkB;IACxC,IAAI,KAA4B,CAAC;IACjC,IAAI,CAAC;QACD,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAA,iBAAS,GAAE,CAA0B,CAAC;IAC7D,CAAC;IAAC,OAAO,CAAU,EAAE,CAAC;QAClB,eAAM,CAAC,KAAK,CAAC,0BAA0B,CAAC,EAAE,CAAC,CAAC;QAC5C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACpB,CAAC;IAED,MAAM,SAAS,GAAW,KAAK,CAAC,UAAU,IAAI,SAAS,CAAC;IACxD,IAAA,mBAAU,EAAC,GAAG,UAAU,sBAAsB,SAAS,cAAc,CAAC,CAAC;IAEvE,MAAM,WAAW,GAAW,GAAG,UAAU,sBAAsB,SAAS,gBAAgB,CAAC;IAEzF,IAAI,IAAA,sCAA4B,EAAC,WAAW,CAAC,EAAE,CAAC;QAC5C,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC;;;yBAGJ,SAAS;;;CAGjC,CAAC,CAAC;QACK,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACpB,CAAC;IAED,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACpB,CAAC"}
@@ -11,5 +11,5 @@
11
11
  * Exit 0 = allow tool (with updatedInput containing _metadata)
12
12
  * Exit 2 = block tool
13
13
  */
14
- export declare function run(projectDir: string): void;
14
+ export declare function run(projectDir: string): Promise<void>;
15
15
  //# sourceMappingURL=require-verification.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"require-verification.d.ts","sourceRoot":"","sources":["../../../../src/clients/claude/hooks/require-verification.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAoBH,wBAAgB,GAAG,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI,CA6C5C"}
1
+ {"version":3,"file":"require-verification.d.ts","sourceRoot":"","sources":["../../../../src/clients/claude/hooks/require-verification.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAsBH,wBAAsB,GAAG,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAuE3D"}
@@ -14,10 +14,12 @@
14
14
  */
15
15
  Object.defineProperty(exports, "__esModule", { value: true });
16
16
  exports.run = run;
17
+ const path_1 = require("path");
17
18
  const session_state_1 = require("../../../hooks/core/session-state");
19
+ const config_1 = require("../../../lib/config");
18
20
  const logger_1 = require("../../../lib/logger");
19
21
  const stdin_1 = require("../../../lib/stdin");
20
- function run(projectDir) {
22
+ async function run(projectDir) {
21
23
  let input;
22
24
  try {
23
25
  input = JSON.parse((0, stdin_1.readStdin)());
@@ -37,17 +39,42 @@ Start verification first:
37
39
  echo '{"session_id":"${sessionId}"}' | ironbee hook verification-start
38
40
 
39
41
  Then use browser tools to verify your changes.
42
+ `);
43
+ process.exit(2);
44
+ }
45
+ // enforce recording if required (allow recording start tool through)
46
+ const toolName = input.tool_name ?? "";
47
+ const isRecordingStartTool = toolName.endsWith("bdt_content_start-recording");
48
+ if ((0, session_state_1.isRecordingRequired)(sessionDir) && !(0, session_state_1.isRecordingActive)(sessionDir) && !isRecordingStartTool) {
49
+ process.stderr.write(`BLOCKED: Recording is required but not started.
50
+
51
+ Start recording first:
52
+ Use mcp__browser-devtools__bdt_content_start-recording to begin recording.
53
+
54
+ Then use other browser tools to verify your changes.
40
55
  `);
41
56
  process.exit(2);
42
57
  }
43
58
  const traceId = (0, session_state_1.getActiveTraceId)(sessionDir);
44
59
  // inject _metadata into tool input so MCP server knows session/trace context
60
+ const projectName = (0, path_1.basename)(projectDir);
61
+ const traceState = `ironbee=sid:${sessionId};vid:${verificationId};prj:${projectName}`;
62
+ const config = (0, config_1.loadConfig)(projectDir);
45
63
  const updatedInput = { ...(input.tool_input ?? {}) };
46
- updatedInput._metadata = {
64
+ const metadata = {
65
+ projectName,
47
66
  sessionId,
48
67
  verificationId,
49
68
  traceId,
69
+ traceState,
50
70
  };
71
+ if (config.collector?.url) {
72
+ metadata.collectorUrl = config.collector.url;
73
+ }
74
+ if (config.collector?.apiKey) {
75
+ metadata.collectorApiKey = config.collector.apiKey;
76
+ }
77
+ updatedInput._metadata = metadata;
51
78
  const output = {
52
79
  hookSpecificOutput: {
53
80
  hookEventName: "PreToolUse",
@@ -1 +1 @@
1
- {"version":3,"file":"require-verification.js","sourceRoot":"","sources":["../../../../src/clients/claude/hooks/require-verification.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;GAYG;;AAoBH,kBA6CC;AA/DD,qEAA8F;AAC9F,gDAAyD;AACzD,8CAA+C;AAgB/C,SAAgB,GAAG,CAAC,UAAkB;IAClC,IAAI,KAA4B,CAAC;IACjC,IAAI,CAAC;QACD,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAA,iBAAS,GAAE,CAA0B,CAAC;IAC7D,CAAC;IAAC,OAAO,CAAU,EAAE,CAAC;QAClB,eAAM,CAAC,KAAK,CAAC,0BAA0B,CAAC,EAAE,CAAC,CAAC;QAC5C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACpB,CAAC;IAED,MAAM,SAAS,GAAW,KAAK,CAAC,UAAU,IAAI,SAAS,CAAC;IACxD,MAAM,UAAU,GAAW,GAAG,UAAU,sBAAsB,SAAS,EAAE,CAAC;IAC1E,IAAA,mBAAU,EAAC,GAAG,UAAU,cAAc,CAAC,CAAC;IAExC,MAAM,cAAc,GAAuB,IAAA,uCAAuB,EAAC,UAAU,CAAC,CAAC;IAC/E,IAAI,CAAC,cAAc,EAAE,CAAC;QAClB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC;;;yBAGJ,SAAS;;;CAGjC,CAAC,CAAC;QACK,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACpB,CAAC;IAED,MAAM,OAAO,GAAuB,IAAA,gCAAgB,EAAC,UAAU,CAAC,CAAC;IAEjE,6EAA6E;IAC7E,MAAM,YAAY,GAA4B,EAAE,GAAG,CAAC,KAAK,CAAC,UAAU,IAAI,EAAE,CAAC,EAAE,CAAC;IAC9E,YAAY,CAAC,SAAS,GAAG;QACrB,SAAS;QACT,cAAc;QACd,OAAO;KACV,CAAC;IAEF,MAAM,MAAM,GAA2B;QACnC,kBAAkB,EAAE;YAChB,aAAa,EAAE,YAAY;YAC3B,kBAAkB,EAAE,OAAO;YAC3B,YAAY;SACf;KACJ,CAAC;IAEF,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;IAC7C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACpB,CAAC"}
1
+ {"version":3,"file":"require-verification.js","sourceRoot":"","sources":["../../../../src/clients/claude/hooks/require-verification.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;GAYG;;AAsBH,kBAuEC;AA3FD,+BAAgC;AAChC,qEAAsI;AACtI,gDAAiD;AACjD,gDAAyD;AACzD,8CAA+C;AAgBxC,KAAK,UAAU,GAAG,CAAC,UAAkB;IACxC,IAAI,KAA4B,CAAC;IACjC,IAAI,CAAC;QACD,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAA,iBAAS,GAAE,CAA0B,CAAC;IAC7D,CAAC;IAAC,OAAO,CAAU,EAAE,CAAC;QAClB,eAAM,CAAC,KAAK,CAAC,0BAA0B,CAAC,EAAE,CAAC,CAAC;QAC5C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACpB,CAAC;IAED,MAAM,SAAS,GAAW,KAAK,CAAC,UAAU,IAAI,SAAS,CAAC;IACxD,MAAM,UAAU,GAAW,GAAG,UAAU,sBAAsB,SAAS,EAAE,CAAC;IAC1E,IAAA,mBAAU,EAAC,GAAG,UAAU,cAAc,CAAC,CAAC;IAExC,MAAM,cAAc,GAAuB,IAAA,uCAAuB,EAAC,UAAU,CAAC,CAAC;IAC/E,IAAI,CAAC,cAAc,EAAE,CAAC;QAClB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC;;;yBAGJ,SAAS;;;CAGjC,CAAC,CAAC;QACK,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACpB,CAAC;IAED,qEAAqE;IACrE,MAAM,QAAQ,GAAW,KAAK,CAAC,SAAS,IAAI,EAAE,CAAC;IAC/C,MAAM,oBAAoB,GAAY,QAAQ,CAAC,QAAQ,CAAC,6BAA6B,CAAC,CAAC;IACvF,IAAI,IAAA,mCAAmB,EAAC,UAAU,CAAC,IAAI,CAAC,IAAA,iCAAiB,EAAC,UAAU,CAAC,IAAI,CAAC,oBAAoB,EAAE,CAAC;QAC7F,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC;;;;;;CAM5B,CAAC,CAAC;QACK,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACpB,CAAC;IAED,MAAM,OAAO,GAAuB,IAAA,gCAAgB,EAAC,UAAU,CAAC,CAAC;IAEjE,6EAA6E;IAC7E,MAAM,WAAW,GAAW,IAAA,eAAQ,EAAC,UAAU,CAAC,CAAC;IACjD,MAAM,UAAU,GAAW,eAAe,SAAS,QAAQ,cAAc,QAAQ,WAAW,EAAE,CAAC;IAC/F,MAAM,MAAM,GAAkC,IAAA,mBAAU,EAAC,UAAU,CAAC,CAAC;IACrE,MAAM,YAAY,GAA4B,EAAE,GAAG,CAAC,KAAK,CAAC,UAAU,IAAI,EAAE,CAAC,EAAE,CAAC;IAC9E,MAAM,QAAQ,GAA4B;QACtC,WAAW;QACX,SAAS;QACT,cAAc;QACd,OAAO;QACP,UAAU;KACb,CAAC;IACF,IAAI,MAAM,CAAC,SAAS,EAAE,GAAG,EAAE,CAAC;QACxB,QAAQ,CAAC,YAAY,GAAG,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC;IACjD,CAAC;IACD,IAAI,MAAM,CAAC,SAAS,EAAE,MAAM,EAAE,CAAC;QAC3B,QAAQ,CAAC,eAAe,GAAG,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC;IACvD,CAAC;IACD,YAAY,CAAC,SAAS,GAAG,QAAQ,CAAC;IAElC,MAAM,MAAM,GAA2B;QACnC,kBAAkB,EAAE;YAChB,aAAa,EAAE,YAAY;YAC3B,kBAAkB,EAAE,OAAO;YAC3B,YAAY;SACf;KACJ,CAAC;IAEF,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;IAC7C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACpB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"session-start.d.ts","sourceRoot":"","sources":["../../../../src/clients/claude/hooks/session-start.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAaH,wBAAsB,GAAG,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CA0E3D"}
1
+ {"version":3,"file":"session-start.d.ts","sourceRoot":"","sources":["../../../../src/clients/claude/hooks/session-start.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAcH,wBAAsB,GAAG,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAwE3D"}
@@ -12,6 +12,7 @@ exports.run = run;
12
12
  const actions_1 = require("../../../hooks/core/actions");
13
13
  const session_state_1 = require("../../../hooks/core/session-state");
14
14
  const logger_1 = require("../../../lib/logger");
15
+ const output_1 = require("../../../lib/output");
15
16
  const stdin_1 = require("../../../lib/stdin");
16
17
  const telemetry_1 = require("../../../lib/telemetry");
17
18
  async function run(projectDir) {
@@ -33,11 +34,11 @@ async function run(projectDir) {
33
34
  source: input.source,
34
35
  };
35
36
  const sessionDir = `${projectDir}/.ironbee/sessions/${sessionId}`;
36
- (0, actions_1.appendAction)(actionsFile, entry);
37
+ await (0, actions_1.appendAction)(actionsFile, entry);
37
38
  // reconcile state on startup/resume/clear — but NOT on compact
38
39
  // (compact just compresses context, session continues mid-flow)
39
40
  if (input.source !== "compact") {
40
- (0, session_state_1.reconcileSessionState)(sessionDir, actionsFile, actions_1.appendAction);
41
+ await (0, session_state_1.reconcileSessionState)(sessionDir, actionsFile, actions_1.appendAction);
41
42
  }
42
43
  await (0, telemetry_1.trackSessionStart)("claude", sessionId);
43
44
  logger_1.logger.debug(`session-start: ${sessionId} (${input.source ?? "unknown"})`);
@@ -58,7 +59,7 @@ async function run(projectDir) {
58
59
  network_failures: 0,
59
60
  issues: ["button click handler not firing", "TypeError in console"],
60
61
  });
61
- process.stdout.write(`
62
+ (0, output_1.writeAndExit)(`
62
63
  =====================================
63
64
  IRONBEE VERIFICATION — SESSION ACTIVE
64
65
  =====================================
@@ -79,7 +80,6 @@ Required fields: session_id, status, pages_tested, checks, console_errors, netwo
79
80
  On fail, include: issues (array of strings describing what failed)
80
81
  On pass after a previous fail, include: fixes (array of strings describing what was fixed)
81
82
  =====================================
82
- `);
83
- process.exit(0);
83
+ `, 0);
84
84
  }
85
85
  //# sourceMappingURL=session-start.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"session-start.js","sourceRoot":"","sources":["../../../../src/clients/claude/hooks/session-start.ts"],"names":[],"mappings":";AAAA;;;;;;;GAOG;;AAaH,kBA0EC;AArFD,yDAA+E;AAC/E,qEAA0E;AAC1E,gDAAyD;AACzD,8CAA+C;AAC/C,sDAA2D;AAOpD,KAAK,UAAU,GAAG,CAAC,UAAkB;IACxC,IAAI,KAA8B,CAAC;IACnC,IAAI,CAAC;QACD,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAA,iBAAS,GAAE,CAA4B,CAAC;IAC/D,CAAC;IAAC,OAAO,CAAU,EAAE,CAAC;QAClB,eAAM,CAAC,KAAK,CAAC,0BAA0B,CAAC,EAAE,CAAC,CAAC;QAC5C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACpB,CAAC;IAED,MAAM,SAAS,GAAW,KAAK,CAAC,UAAU,IAAI,SAAS,CAAC;IACxD,MAAM,WAAW,GAAW,GAAG,UAAU,sBAAsB,SAAS,gBAAgB,CAAC;IACzF,IAAA,mBAAU,EAAC,GAAG,UAAU,sBAAsB,SAAS,cAAc,CAAC,CAAC;IAEvE,MAAM,KAAK,GAAuB;QAC9B,IAAI,EAAE,eAAe;QACrB,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;QACnC,UAAU,EAAE,SAAS;QACrB,MAAM,EAAE,KAAK,CAAC,MAAM;KACvB,CAAC;IAEF,MAAM,UAAU,GAAW,GAAG,UAAU,sBAAsB,SAAS,EAAE,CAAC;IAC1E,IAAA,sBAAY,EAAC,WAAW,EAAE,KAAK,CAAC,CAAC;IAEjC,+DAA+D;IAC/D,gEAAgE;IAChE,IAAI,KAAK,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;QAC7B,IAAA,qCAAqB,EAAC,UAAU,EAAE,WAAW,EAAE,sBAAY,CAAC,CAAC;IACjE,CAAC;IAED,MAAM,IAAA,6BAAiB,EAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;IAC7C,eAAM,CAAC,KAAK,CAAC,kBAAkB,SAAS,KAAK,KAAK,CAAC,MAAM,IAAI,SAAS,GAAG,CAAC,CAAC;IAE3E,MAAM,WAAW,GAAW,IAAI,CAAC,SAAS,CAAC;QACvC,UAAU,EAAE,SAAS;QACrB,MAAM,EAAE,MAAM;QACd,YAAY,EAAE,CAAC,qCAAqC,CAAC;QACrD,MAAM,EAAE,CAAC,2BAA2B,EAAE,0BAA0B,CAAC;QACjE,cAAc,EAAE,CAAC;QACjB,gBAAgB,EAAE,CAAC;KACtB,CAAC,CAAC;IACH,MAAM,WAAW,GAAW,IAAI,CAAC,SAAS,CAAC;QACvC,UAAU,EAAE,SAAS;QACrB,MAAM,EAAE,MAAM;QACd,YAAY,EAAE,CAAC,qCAAqC,CAAC;QACrD,MAAM,EAAE,CAAC,cAAc,EAAE,4BAA4B,CAAC;QACtD,cAAc,EAAE,CAAC;QACjB,gBAAgB,EAAE,CAAC;QACnB,MAAM,EAAE,CAAC,iCAAiC,EAAE,sBAAsB,CAAC;KACtE,CAAC,CAAC;IAEH,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC;;;;cAIX,SAAS;;;;;;;;UAQb,WAAW;;;UAGX,WAAW;;;;;;CAMpB,CAAC,CAAC;IAEC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACpB,CAAC"}
1
+ {"version":3,"file":"session-start.js","sourceRoot":"","sources":["../../../../src/clients/claude/hooks/session-start.ts"],"names":[],"mappings":";AAAA;;;;;;;GAOG;;AAcH,kBAwEC;AApFD,yDAA+E;AAC/E,qEAA0E;AAC1E,gDAAyD;AACzD,gDAAmD;AACnD,8CAA+C;AAC/C,sDAA2D;AAOpD,KAAK,UAAU,GAAG,CAAC,UAAkB;IACxC,IAAI,KAA8B,CAAC;IACnC,IAAI,CAAC;QACD,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAA,iBAAS,GAAE,CAA4B,CAAC;IAC/D,CAAC;IAAC,OAAO,CAAU,EAAE,CAAC;QAClB,eAAM,CAAC,KAAK,CAAC,0BAA0B,CAAC,EAAE,CAAC,CAAC;QAC5C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACpB,CAAC;IAED,MAAM,SAAS,GAAW,KAAK,CAAC,UAAU,IAAI,SAAS,CAAC;IACxD,MAAM,WAAW,GAAW,GAAG,UAAU,sBAAsB,SAAS,gBAAgB,CAAC;IACzF,IAAA,mBAAU,EAAC,GAAG,UAAU,sBAAsB,SAAS,cAAc,CAAC,CAAC;IAEvE,MAAM,KAAK,GAAuB;QAC9B,IAAI,EAAE,eAAe;QACrB,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;QACnC,UAAU,EAAE,SAAS;QACrB,MAAM,EAAE,KAAK,CAAC,MAAM;KACvB,CAAC;IAEF,MAAM,UAAU,GAAW,GAAG,UAAU,sBAAsB,SAAS,EAAE,CAAC;IAC1E,MAAM,IAAA,sBAAY,EAAC,WAAW,EAAE,KAAK,CAAC,CAAC;IAEvC,+DAA+D;IAC/D,gEAAgE;IAChE,IAAI,KAAK,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;QAC7B,MAAM,IAAA,qCAAqB,EAAC,UAAU,EAAE,WAAW,EAAE,sBAAY,CAAC,CAAC;IACvE,CAAC;IAED,MAAM,IAAA,6BAAiB,EAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;IAC7C,eAAM,CAAC,KAAK,CAAC,kBAAkB,SAAS,KAAK,KAAK,CAAC,MAAM,IAAI,SAAS,GAAG,CAAC,CAAC;IAE3E,MAAM,WAAW,GAAW,IAAI,CAAC,SAAS,CAAC;QACvC,UAAU,EAAE,SAAS;QACrB,MAAM,EAAE,MAAM;QACd,YAAY,EAAE,CAAC,qCAAqC,CAAC;QACrD,MAAM,EAAE,CAAC,2BAA2B,EAAE,0BAA0B,CAAC;QACjE,cAAc,EAAE,CAAC;QACjB,gBAAgB,EAAE,CAAC;KACtB,CAAC,CAAC;IACH,MAAM,WAAW,GAAW,IAAI,CAAC,SAAS,CAAC;QACvC,UAAU,EAAE,SAAS;QACrB,MAAM,EAAE,MAAM;QACd,YAAY,EAAE,CAAC,qCAAqC,CAAC;QACrD,MAAM,EAAE,CAAC,cAAc,EAAE,4BAA4B,CAAC;QACtD,cAAc,EAAE,CAAC;QACjB,gBAAgB,EAAE,CAAC;QACnB,MAAM,EAAE,CAAC,iCAAiC,EAAE,sBAAsB,CAAC;KACtE,CAAC,CAAC;IAEH,IAAA,qBAAY,EAAC;;;;cAIH,SAAS;;;;;;;;UAQb,WAAW;;;UAGX,WAAW;;;;;;CAMpB,EAAE,CAAC,CAAC,CAAC;AACN,CAAC"}
@@ -7,5 +7,5 @@
7
7
  * Handles both direct tool calls and nested callTool() invocations
8
8
  * inside the execute tool (mcp__browser-devtools__bdt_execute).
9
9
  */
10
- export declare function run(projectDir: string): void;
10
+ export declare function run(projectDir: string): Promise<void>;
11
11
  //# sourceMappingURL=track-action.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"track-action.d.ts","sourceRoot":"","sources":["../../../../src/clients/claude/hooks/track-action.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAqFH,wBAAgB,GAAG,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI,CA2C5C"}
1
+ {"version":3,"file":"track-action.d.ts","sourceRoot":"","sources":["../../../../src/clients/claude/hooks/track-action.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAwFH,wBAAsB,GAAG,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CA0D3D"}
@@ -11,12 +11,15 @@
11
11
  Object.defineProperty(exports, "__esModule", { value: true });
12
12
  exports.run = run;
13
13
  const actions_1 = require("../../../hooks/core/actions");
14
+ const session_state_1 = require("../../../hooks/core/session-state");
14
15
  const logger_1 = require("../../../lib/logger");
15
16
  const stdin_1 = require("../../../lib/stdin");
16
17
  const CALL_TOOL_NAME_PATTERN = /callTool\(\s*['"]([^'"]+)['"]/g;
17
18
  const MCP_PREFIX = "mcp__browser-devtools__";
18
19
  const TOOL_NAME_PREFIX = "bdt_";
19
20
  const EXECUTE_TOOL = `${MCP_PREFIX}${TOOL_NAME_PREFIX}execute`;
21
+ const RECORDING_START_TOOL = `${MCP_PREFIX}${TOOL_NAME_PREFIX}content_start-recording`;
22
+ const RECORDING_STOP_TOOL = `${MCP_PREFIX}${TOOL_NAME_PREFIX}content_stop-recording`;
20
23
  function toFullName(shortName) {
21
24
  return shortName.startsWith(MCP_PREFIX) ? shortName : `${MCP_PREFIX}${shortName}`;
22
25
  }
@@ -75,7 +78,7 @@ function extractNestedToolCalls(toolInput) {
75
78
  }
76
79
  return results;
77
80
  }
78
- function run(projectDir) {
81
+ async function run(projectDir) {
79
82
  let input;
80
83
  try {
81
84
  input = JSON.parse((0, stdin_1.readStdin)());
@@ -89,16 +92,30 @@ function run(projectDir) {
89
92
  (0, logger_1.setLogFile)(`${projectDir}/.ironbee/sessions/${sessionId}/session.log`);
90
93
  const toolName = input.tool_name ?? "unknown";
91
94
  const timestamp = new Date().toISOString();
95
+ // strip _metadata from tool_input before recording
96
+ const toolInput = (input.tool_input && typeof input.tool_input === "object" && !Array.isArray(input.tool_input))
97
+ ? { ...input.tool_input, _metadata: undefined }
98
+ : input.tool_input;
92
99
  // record the direct tool call
93
100
  const entry = {
94
101
  type: "tool_call",
95
102
  timestamp,
96
103
  tool_name: toolName,
97
- tool_input: input.tool_input,
104
+ tool_input: toolInput,
98
105
  tool_response: input.tool_response,
99
106
  };
100
- (0, actions_1.appendAction)(actionsFile, entry);
107
+ await (0, actions_1.appendAction)(actionsFile, entry);
101
108
  logger_1.logger.debug(`track-action: ${toolName}`);
109
+ // update recording state
110
+ const sessionDir = `${projectDir}/.ironbee/sessions/${sessionId}`;
111
+ if (toolName === RECORDING_START_TOOL) {
112
+ (0, session_state_1.setRecordingActive)(sessionDir, true);
113
+ logger_1.logger.debug("track-action: recording started");
114
+ }
115
+ else if (toolName === RECORDING_STOP_TOOL) {
116
+ (0, session_state_1.setRecordingActive)(sessionDir, false);
117
+ logger_1.logger.debug("track-action: recording stopped");
118
+ }
102
119
  // for execute tool, extract and record nested callTool() invocations
103
120
  if (toolName === EXECUTE_TOOL) {
104
121
  const nested = extractNestedToolCalls(input.tool_input);
@@ -109,7 +126,7 @@ function run(projectDir) {
109
126
  tool_name: call.name,
110
127
  tool_input: call.args,
111
128
  };
112
- (0, actions_1.appendAction)(actionsFile, nestedEntry);
129
+ await (0, actions_1.appendAction)(actionsFile, nestedEntry);
113
130
  logger_1.logger.debug(`track-action (nested): ${call.name}`);
114
131
  }
115
132
  }
@@ -1 +1 @@
1
- {"version":3,"file":"track-action.js","sourceRoot":"","sources":["../../../../src/clients/claude/hooks/track-action.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"track-action.js","sourceRoot":"","sources":["../../../../src/clients/claude/hooks/track-action.ts"],"names":[],"mappings":"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"}
@@ -6,12 +6,12 @@ export declare class ClaudeClient implements IClient {
6
6
  install(projectDir: string): void;
7
7
  uninstall(projectDir: string): void;
8
8
  private cleanupArtifacts;
9
- runVerifyGate(projectDir: string): void;
10
- runClearVerdict(projectDir: string): void;
11
- runTrackAction(projectDir: string): void;
12
- runSessionStart(projectDir: string): void;
13
- runRequireVerdict(projectDir: string): void;
14
- runRequireVerification(projectDir: string): void;
9
+ runVerifyGate(projectDir: string): Promise<void>;
10
+ runClearVerdict(projectDir: string): Promise<void>;
11
+ runTrackAction(projectDir: string): Promise<void>;
12
+ runSessionStart(projectDir: string): Promise<void>;
13
+ runRequireVerdict(projectDir: string): Promise<void>;
14
+ runRequireVerification(projectDir: string): Promise<void>;
15
15
  private isIronBeeHook;
16
16
  private mergeHooksConfig;
17
17
  private removeIronBeeHooks;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/clients/claude/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AA2ClC,qBAAa,YAAa,YAAW,OAAO;IACxC,SAAgB,IAAI,EAAE,MAAM,CAAY;IAEjC,MAAM,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO;IAInC,iBAAiB,IAAI,MAAM;IAI3B,OAAO,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI;IA2CjC,SAAS,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI;IAK1C,OAAO,CAAC,gBAAgB;IAuBjB,aAAa,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI;IAIvC,eAAe,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI;IAIzC,cAAc,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI;IAIxC,eAAe,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI;IAIzC,iBAAiB,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI;IAI3C,sBAAsB,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI;IAIvD,OAAO,CAAC,aAAa;IAIrB,OAAO,CAAC,gBAAgB;IAsGxB,OAAO,CAAC,kBAAkB;IAuB1B,OAAO,CAAC,eAAe;IAgBvB,OAAO,CAAC,gBAAgB;IAqBxB,OAAO,CAAC,UAAU;IAMlB,OAAO,CAAC,cAAc;IA4BtB,OAAO,CAAC,gBAAgB;CAgC3B;AAuBD,wBAAgB,iBAAiB,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI,CAG1D"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/clients/claude/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AA6ClC,qBAAa,YAAa,YAAW,OAAO;IACxC,SAAgB,IAAI,EAAE,MAAM,CAAY;IAEjC,MAAM,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO;IAInC,iBAAiB,IAAI,MAAM;IAI3B,OAAO,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI;IA+CjC,SAAS,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI;IAK1C,OAAO,CAAC,gBAAgB;IAyBX,aAAa,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAIhD,eAAe,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAIlD,cAAc,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAIjD,eAAe,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAIlD,iBAAiB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAIpD,sBAAsB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAItE,OAAO,CAAC,aAAa;IAIrB,OAAO,CAAC,gBAAgB;IAsGxB,OAAO,CAAC,kBAAkB;IAuB1B,OAAO,CAAC,eAAe;IAgBvB,OAAO,CAAC,gBAAgB;IAqBxB,OAAO,CAAC,UAAU;IAMlB,OAAO,CAAC,cAAc;IAqBtB,OAAO,CAAC,gBAAgB;CAgC3B;AAuBD,wBAAgB,iBAAiB,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI,CAG1D"}