@ironbee-ai/cli 0.8.2 → 0.9.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 (143) hide show
  1. package/CHANGELOG.md +12 -0
  2. package/README.md +48 -17
  3. package/dist/clients/claude/commands/ironbee-verify.md +19 -106
  4. package/dist/clients/claude/hooks/clear-verdict.d.ts.map +1 -1
  5. package/dist/clients/claude/hooks/clear-verdict.js +25 -4
  6. package/dist/clients/claude/hooks/clear-verdict.js.map +1 -1
  7. package/dist/clients/claude/hooks/require-verdict.d.ts +3 -3
  8. package/dist/clients/claude/hooks/require-verdict.d.ts.map +1 -1
  9. package/dist/clients/claude/hooks/require-verdict.js +26 -8
  10. package/dist/clients/claude/hooks/require-verdict.js.map +1 -1
  11. package/dist/clients/claude/hooks/require-verification.d.ts +6 -5
  12. package/dist/clients/claude/hooks/require-verification.d.ts.map +1 -1
  13. package/dist/clients/claude/hooks/require-verification.js +20 -17
  14. package/dist/clients/claude/hooks/require-verification.js.map +1 -1
  15. package/dist/clients/claude/hooks/track-action-monitor.d.ts.map +1 -1
  16. package/dist/clients/claude/hooks/track-action-monitor.js +4 -1
  17. package/dist/clients/claude/hooks/track-action-monitor.js.map +1 -1
  18. package/dist/clients/claude/hooks/track-action.d.ts +11 -8
  19. package/dist/clients/claude/hooks/track-action.d.ts.map +1 -1
  20. package/dist/clients/claude/hooks/track-action.js +14 -9
  21. package/dist/clients/claude/hooks/track-action.js.map +1 -1
  22. package/dist/clients/claude/index.d.ts.map +1 -1
  23. package/dist/clients/claude/index.js +79 -18
  24. package/dist/clients/claude/index.js.map +1 -1
  25. package/dist/clients/claude/platforms/command-verify.backend.md +74 -0
  26. package/dist/clients/claude/platforms/command-verify.browser.md +108 -0
  27. package/dist/clients/claude/platforms/command-verify.node.md +67 -0
  28. package/dist/clients/claude/platforms/rule.backend.md +23 -0
  29. package/dist/clients/claude/platforms/rule.browser.md +17 -0
  30. package/dist/clients/claude/{fragments → platforms}/rule.node.md +3 -3
  31. package/dist/clients/claude/platforms/skill.backend.md +65 -0
  32. package/dist/clients/claude/platforms/skill.browser.md +31 -0
  33. package/dist/clients/claude/{fragments → platforms}/skill.node.md +2 -2
  34. package/dist/clients/claude/rules/ironbee-verification.md +14 -13
  35. package/dist/clients/claude/skills/ironbee-verification.md +19 -49
  36. package/dist/clients/cursor/commands/ironbee-verify/SKILL.md +21 -108
  37. package/dist/clients/cursor/hooks/clear-verdict.d.ts.map +1 -1
  38. package/dist/clients/cursor/hooks/clear-verdict.js +31 -5
  39. package/dist/clients/cursor/hooks/clear-verdict.js.map +1 -1
  40. package/dist/clients/cursor/hooks/require-verdict.d.ts +1 -1
  41. package/dist/clients/cursor/hooks/require-verdict.d.ts.map +1 -1
  42. package/dist/clients/cursor/hooks/require-verdict.js +27 -6
  43. package/dist/clients/cursor/hooks/require-verdict.js.map +1 -1
  44. package/dist/clients/cursor/hooks/require-verification.d.ts.map +1 -1
  45. package/dist/clients/cursor/hooks/require-verification.js +9 -5
  46. package/dist/clients/cursor/hooks/require-verification.js.map +1 -1
  47. package/dist/clients/cursor/hooks/track-action-monitor.d.ts.map +1 -1
  48. package/dist/clients/cursor/hooks/track-action-monitor.js +4 -1
  49. package/dist/clients/cursor/hooks/track-action-monitor.js.map +1 -1
  50. package/dist/clients/cursor/hooks/track-action.d.ts +14 -12
  51. package/dist/clients/cursor/hooks/track-action.d.ts.map +1 -1
  52. package/dist/clients/cursor/hooks/track-action.js +25 -16
  53. package/dist/clients/cursor/hooks/track-action.js.map +1 -1
  54. package/dist/clients/cursor/index.d.ts.map +1 -1
  55. package/dist/clients/cursor/index.js +45 -11
  56. package/dist/clients/cursor/index.js.map +1 -1
  57. package/dist/clients/cursor/platforms/command-verify.backend.md +74 -0
  58. package/dist/clients/cursor/platforms/command-verify.browser.md +108 -0
  59. package/dist/clients/cursor/platforms/command-verify.node.md +67 -0
  60. package/dist/clients/cursor/platforms/rule.backend.md +23 -0
  61. package/dist/clients/cursor/platforms/rule.browser.md +17 -0
  62. package/dist/clients/cursor/{fragments → platforms}/rule.node.md +3 -3
  63. package/dist/clients/cursor/platforms/skill.backend.md +65 -0
  64. package/dist/clients/cursor/platforms/skill.browser.md +31 -0
  65. package/dist/clients/cursor/{fragments → platforms}/skill.node.md +2 -2
  66. package/dist/clients/cursor/rules/ironbee-verification.mdc +14 -13
  67. package/dist/clients/cursor/skills/ironbee-verification.md +19 -49
  68. package/dist/commands/backend.d.ts +17 -0
  69. package/dist/commands/backend.d.ts.map +1 -0
  70. package/dist/commands/backend.js +58 -0
  71. package/dist/commands/backend.js.map +1 -0
  72. package/dist/commands/browser.d.ts +19 -0
  73. package/dist/commands/browser.d.ts.map +1 -0
  74. package/dist/commands/browser.js +60 -0
  75. package/dist/commands/browser.js.map +1 -0
  76. package/dist/commands/config.d.ts +45 -10
  77. package/dist/commands/config.d.ts.map +1 -1
  78. package/dist/commands/config.js +80 -28
  79. package/dist/commands/config.js.map +1 -1
  80. package/dist/commands/cycle-toggle.d.ts +89 -0
  81. package/dist/commands/cycle-toggle.d.ts.map +1 -0
  82. package/dist/commands/cycle-toggle.js +264 -0
  83. package/dist/commands/cycle-toggle.js.map +1 -0
  84. package/dist/commands/disable-verification.d.ts.map +1 -1
  85. package/dist/commands/disable-verification.js +5 -2
  86. package/dist/commands/disable-verification.js.map +1 -1
  87. package/dist/commands/enable-verification.d.ts.map +1 -1
  88. package/dist/commands/enable-verification.js +5 -2
  89. package/dist/commands/enable-verification.js.map +1 -1
  90. package/dist/commands/node.d.ts +16 -0
  91. package/dist/commands/node.d.ts.map +1 -0
  92. package/dist/commands/node.js +57 -0
  93. package/dist/commands/node.js.map +1 -0
  94. package/dist/commands/verification-toggle.d.ts +18 -1
  95. package/dist/commands/verification-toggle.d.ts.map +1 -1
  96. package/dist/commands/verification-toggle.js +96 -21
  97. package/dist/commands/verification-toggle.js.map +1 -1
  98. package/dist/hooks/core/actions.d.ts +20 -2
  99. package/dist/hooks/core/actions.d.ts.map +1 -1
  100. package/dist/hooks/core/actions.js.map +1 -1
  101. package/dist/hooks/core/file-diff.d.ts +17 -0
  102. package/dist/hooks/core/file-diff.d.ts.map +1 -1
  103. package/dist/hooks/core/file-diff.js +72 -0
  104. package/dist/hooks/core/file-diff.js.map +1 -1
  105. package/dist/hooks/core/tool-use-stash.d.ts +7 -1
  106. package/dist/hooks/core/tool-use-stash.d.ts.map +1 -1
  107. package/dist/hooks/core/tool-use-stash.js.map +1 -1
  108. package/dist/hooks/core/verify-gate.d.ts.map +1 -1
  109. package/dist/hooks/core/verify-gate.js +44 -14
  110. package/dist/hooks/core/verify-gate.js.map +1 -1
  111. package/dist/index.js +9 -6
  112. package/dist/index.js.map +1 -1
  113. package/dist/lib/config.d.ts +218 -36
  114. package/dist/lib/config.d.ts.map +1 -1
  115. package/dist/lib/config.js +359 -95
  116. package/dist/lib/config.js.map +1 -1
  117. package/dist/lib/gitignore.d.ts +26 -11
  118. package/dist/lib/gitignore.d.ts.map +1 -1
  119. package/dist/lib/gitignore.js +71 -24
  120. package/dist/lib/gitignore.js.map +1 -1
  121. package/dist/lib/platform-section.d.ts +126 -0
  122. package/dist/lib/platform-section.d.ts.map +1 -0
  123. package/dist/lib/platform-section.js +279 -0
  124. package/dist/lib/platform-section.js.map +1 -0
  125. package/package.json +1 -1
  126. package/dist/clients/claude/fragments/command-verify.node.md +0 -33
  127. package/dist/clients/cursor/fragments/command-verify.node.md +0 -33
  128. package/dist/commands/backend-toggle.d.ts +0 -45
  129. package/dist/commands/backend-toggle.d.ts.map +0 -1
  130. package/dist/commands/backend-toggle.js +0 -192
  131. package/dist/commands/backend-toggle.js.map +0 -1
  132. package/dist/commands/disable-backend.d.ts +0 -14
  133. package/dist/commands/disable-backend.d.ts.map +0 -1
  134. package/dist/commands/disable-backend.js +0 -34
  135. package/dist/commands/disable-backend.js.map +0 -1
  136. package/dist/commands/enable-backend.d.ts +0 -15
  137. package/dist/commands/enable-backend.d.ts.map +0 -1
  138. package/dist/commands/enable-backend.js +0 -35
  139. package/dist/commands/enable-backend.js.map +0 -1
  140. package/dist/lib/runtime-section.d.ts +0 -118
  141. package/dist/lib/runtime-section.d.ts.map +0 -1
  142. package/dist/lib/runtime-section.js +0 -256
  143. package/dist/lib/runtime-section.js.map +0 -1
@@ -0,0 +1,31 @@
1
+ <!-- Browser cycle verification is ENABLED for this project. The stop hook
2
+ enforces a browser cycle whenever an edited file matches
3
+ `browser.verifyPatterns` (default: most code extensions). -->
4
+
5
+ ## Browser flow
6
+
7
+ > **Recording (only when `recording.enable` is on in config):** the gate blocks every other browser tool until you first call `MCP:bdt_content_start-recording`, and `submit-verdict` rejects with `"recording is still active"` unless you call `MCP:bdt_content_stop-recording` after the steps below. **Treat start/stop as bookends around steps 1-5.** The same is enforced as step 6 of the Universal flow.
8
+
9
+ 1. **Navigate**: `MCP:bdt_navigation_go-to` — go to the affected page(s)
10
+ 2. **Interact**: actually exercise what changed — click buttons, fill forms, submit data, trigger workflows. Don't just look at the page.
11
+ 3. **Screenshot**: `MCP:bdt_content_take-screenshot` — capture the final visual state
12
+ 4. **Accessibility**: `MCP:bdt_a11y_take-aria-snapshot` — verify page structure
13
+ 5. **Console**: `MCP:bdt_o11y_get-console-messages` — check for errors
14
+
15
+ All four tools are MANDATORY (the stop hook checks each). Functional interaction is expected for every verification.
16
+
17
+ ### Browser verdict fields
18
+ ```json
19
+ {
20
+ "session_id": "<sid>",
21
+ "status": "pass",
22
+ "pages_tested": ["http://localhost:3000/page"],
23
+ "checks": ["form submits successfully", "new item appears in list", "no console errors"],
24
+ "console_errors": 0,
25
+ "network_failures": 0
26
+ }
27
+ ```
28
+
29
+ For `status: "pass"` (browser cycle): `console_errors === 0` AND `network_failures === 0`.
30
+
31
+ On fail, include `issues`. On pass after a previous fail, include `fixes`.
@@ -1,6 +1,6 @@
1
1
  <!-- Node backend verification is ENABLED for this project. The stop hook
2
2
  enforces a node cycle in addition to the browser cycle whenever an
3
- edited file matches `backend.node.verifyPatterns`. -->
3
+ edited file matches `node.verifyPatterns`. -->
4
4
 
5
5
  ## ⚠️ CRITICAL: when NOT to use node-devtools
6
6
 
@@ -15,7 +15,7 @@
15
15
 
16
16
  If you see `pom.xml`, `build.gradle`, `requirements.txt`, `pyproject.toml`, `go.mod`, `Cargo.toml`, `Gemfile`, `composer.json`, `*.csproj` — the backend is NOT Node.js. Do NOT call any `MCP:ndt_*` tools.
17
17
 
18
- **Misconfiguration recovery.** If you read this section it means the operator enabled the node cycle for this project. If the backend isn't actually Node.js, this was a mistake — the stop hook will keep blocking the gate (with `incomplete_tools` for the node cycle) until you call `MCP:ndt_debug_connect` (which will fail) or `maxRetries` is exhausted. Don't attempt the connection. Stop and tell the user clearly: the project's backend is not Node.js; ask them to run `ironbee disable-backend node` to unblock the gate. Continue with browser-cycle verification only in the meantime.
18
+ **Misconfiguration recovery.** If you read this section it means the operator enabled the node cycle for this project. If the backend isn't actually Node.js, this was a mistake — the stop hook will keep blocking the gate (with `incomplete_tools` for the node cycle) until you call `MCP:ndt_debug_connect` (which will fail) or `maxRetries` is exhausted. Don't attempt the connection. Stop and tell the user clearly: the project's backend is not Node.js; ask them to run `ironbee node disable` to unblock the gate. Continue with browser-cycle verification only in the meantime.
19
19
 
20
20
  ## Node flow
21
21
 
@@ -1,15 +1,13 @@
1
1
  ---
2
- description: "MANDATORY verification after code changes — IronBee enforcement (browser + runtime cycles)"
2
+ description: "MANDATORY verification after code changes — IronBee enforcement (per-cycle verification gate)"
3
3
  alwaysApply: true
4
4
  ---
5
5
 
6
6
  You MUST verify all code changes through real tools before completing any task. After every verification attempt, you MUST submit a verdict (pass or fail) via `ironbee hook submit-verdict` before doing anything else. If verification fails, submit the fail verdict first, then fix.
7
7
 
8
- Verification runs in **cycles** decided by file pattern match — you don't choose, the gate detects:
8
+ Verification runs in **cycles** decided by file-pattern match — you don't choose, the gate detects. Multiple cycles can run in parallel within a single stop hook; each one has its own activation patterns, tools, and verdict fields.
9
9
 
10
- - **Browser cycle** frontend file changes (default: most code extensions). Tools come from the **browser-devtools** MCP server (prefix `MCP:bdt_*`). Verification means navigating to the affected page and FUNCTIONALLY exercising the change in the browser clicking, typing, submitting — not just looking at it.
11
-
12
- A backend-runtime cycle (e.g. `node` after `ironbee enable-backend node`) may also be active for this project — **see the runtime section near the bottom of this file** for whether it applies and which tools to call.
10
+ **See the platform sections near the bottom of this file** for which cycles are active for this project, the tools they expose, and the per-cycle verdict fields you must include.
13
11
 
14
12
  ## Application lifecycle
15
13
 
@@ -24,11 +22,9 @@ Skip start if already running. Fix build errors before proceeding. **Don't guess
24
22
 
25
23
  1. Build and start the application if not already running.
26
24
  2. **Start verification**: `echo '{"session_id":"<your-session-id>"}' | ironbee hook verification-start` — required before any devtools tool call.
27
- 3. Run the **Browser cycle** flow: navigate (`MCP:bdt_navigation_go-to`) functionally test screenshot (`MCP:bdt_content_take-screenshot`) accessibility (`MCP:bdt_a11y_take-aria-snapshot`) console (`MCP:bdt_o11y_get-console-messages`). All four are MANDATORY.
28
- - If `recording.enable` is on, the gate forces `MCP:bdt_content_start-recording` BEFORE the steps above and rejects the verdict if you don't call `MCP:bdt_content_stop-recording` AFTER them. Always pair start/stop around steps above.
29
- - **See the runtime section near the bottom of this file** — if a backend-runtime cycle is active for this project, run its flow within the same verification cycle as well.
25
+ 3. **Run the per-cycle flow for every active cycle** see the platform sections near the bottom of this file. Multiple cycles can be active in the same stop run; every one of them must be exercised within this single verification cycle.
30
26
  4. Stop the dev server when done.
31
- 5. **If recording was started, stop it NOW** `MCP:bdt_content_stop-recording` BEFORE submit-verdict. submit-verdict rejects with "recording is still active" if you skip this.
27
+ 5. **Honor any cycle-specific teardown** noted in the platform sections BEFORE submit-verdict.
32
28
  6. **IMMEDIATELY submit your verdict** — do NOT edit any code before submitting: `echo '<verdict-json>' | ironbee hook submit-verdict`.
33
29
  - Pass verdict carries fields for every active cycle. Fail verdict adds `issues`. Pass after fail adds `fixes`.
34
30
  - Status `pass` is overridden to fail by the gate when evidence doesn't back it.
@@ -46,8 +42,13 @@ Every file edit automatically clears your verdict, requiring re-verification.
46
42
  - Submitting a verdict without actually performing verification through real tools.
47
43
  - Submitting a verdict based on assumptions, code reading, or prior knowledge.
48
44
  - Copying example verdicts from hook messages without doing real verification first.
49
- - Calling `MCP:bdt_*` tools without first opening a verification cycle (`ironbee hook verification-start`).
50
- - **Submitting a verdict while a browser recording is still active** — always call `MCP:bdt_content_stop-recording` BEFORE `ironbee hook submit-verdict`. The recording start/stop pair brackets the verification flow.
45
+ - Calling devtools tools for any cycle without first opening a verification cycle (`ironbee hook verification-start`).
46
+
47
+ <!--IRONBEE:PLATFORM:browser-->
48
+ <!--/IRONBEE:PLATFORM:browser-->
49
+
50
+ <!--IRONBEE:PLATFORM:node-->
51
+ <!--/IRONBEE:PLATFORM:node-->
51
52
 
52
- <!--IRONBEE:RUNTIME:node-->
53
- <!--/IRONBEE:RUNTIME:node-->
53
+ <!--IRONBEE:PLATFORM:backend-->
54
+ <!--/IRONBEE:PLATFORM:backend-->
@@ -3,31 +3,30 @@ name: ironbee-verification
3
3
  description: >
4
4
  MANDATORY verification after code changes. Activates when implementing features, fixing
5
5
  bugs, modifying UI components, API endpoints, styles, refactoring, or any task that
6
- changes application behavior. Frontend changes require browser verification via the
7
- browser-devtools MCP server. Backend changes ALSO require runtime-specific verification
8
- via the matching MCP server when the operator has enabled that runtime (see
9
- `ironbee enable-backend <runtime>`). After every code edit you MUST verify the affected
10
- cycle(s) through real tools and submit a single verdict (pass or fail) before reporting
11
- task completion. If verification fails, submit the fail verdict first, then fix.
6
+ changes application behavior. Verification runs in cycles activated by file-pattern
7
+ match which cycles are wired up for this project is shown in the platform sections
8
+ near the bottom of this file. After every code edit you MUST verify the affected
9
+ cycle(s) through real tools and submit a single verdict (pass or fail) before
10
+ reporting task completion. If verification fails, submit the fail verdict first,
11
+ then fix.
12
12
  ---
13
13
 
14
14
  # IronBee Verification
15
15
 
16
16
  ## Rule
17
- No task is complete until changes are verified — through **real tools** (browser interaction or, when enabled, a backend-runtime debugger), not by reading code or inferring behavior. After verification, you MUST submit a verdict (pass or fail) before doing anything else. If verification fails, submit the fail verdict first, then fix.
17
+ No task is complete until changes are verified — through **real tools**, not by reading code or inferring behavior. After verification, you MUST submit a verdict (pass or fail) before doing anything else. If verification fails, submit the fail verdict first, then fix.
18
18
 
19
19
  ## Cycles
20
20
 
21
21
  IronBee runs verification in **cycles**. A single stop hook can drive multiple cycles in parallel — every active cycle must pass for your task to complete.
22
22
 
23
- - **Browser cycle** always available. Triggered when a changed file matches `browser.verifyPatterns` (default: most code extensions `.ts`, `.tsx`, `.css`, `.html`, `.py`, `.go`, `.java`, etc.). Tools come from the **browser-devtools** MCP server (prefix `MCP:bdt_*`). Verification means navigating to the affected page and FUNCTIONALLY exercising the change in the browser.
24
- - **Backend-runtime cycle(s)** — opt-in per project via `ironbee enable-backend <runtime>` (e.g. `node`). Triggered when a changed file matches `backend.<runtime>.verifyPatterns`. Tools come from a runtime-specific MCP server. **See the runtime section near the bottom of this file** for whether a backend cycle is active for this project and which tools to call.
23
+ You don't choose which cycle runs the file pattern decides. A single edited file can match multiple cycles' patterns and activate them all. Cycles always run in parallel within a single stop run. Each cycle has its own tools, flow steps, and verdict fields.
25
24
 
26
- You don't choose which cycle runs — the file pattern decides. A single file can match multiple cycles' patterns and activate them all. Cycles always run in parallel within a single stop run.
25
+ **See the platform sections near the bottom of this file** for which cycles are active for this project, the tools they expose, and the per-cycle verdict fields you must include.
27
26
 
28
27
  ## Application lifecycle (your responsibility)
29
28
 
30
- For both cycles you manage the running application:
29
+ For every active cycle you manage the running application:
31
30
  - **Build** if needed (`npm run build`, `docker compose build`, …)
32
31
  - **Start** before navigating/connecting (`npm run dev`, `docker compose up -d`, …)
33
32
  - **Stop** when verification is complete
@@ -39,15 +38,15 @@ If already running, skip start. If the build fails, fix it before proceeding.
39
38
  ## Universal flow
40
39
 
41
40
  1. Implement your changes (write/edit code).
42
- 2. **Start verification** (one cycle covers every active mode — browser plus any enabled backend-runtime cycles):
41
+ 2. **Start verification** (one cycle covers every active mode — every active cycle's flow runs within the same verification cycle):
43
42
  ```
44
43
  echo '{"session_id":"<your-session-id>"}' | ironbee hook verification-start
45
44
  ```
46
45
  Devtools tools are blocked without this.
47
46
  3. Build and start the application if not already running.
48
- 4. Run the **Browser flow** below. **See the runtime section near the bottom of this file**if a backend-runtime cycle is active for this project, run its flow within the same verification cycle as well.
47
+ 4. **Run the per-cycle flows for every active cycle.** See the platform sections near the bottom of this file — each enabled cycle's section has its own flow steps, mandatory tools, and verdict fields. All active cycles must be exercised within this one verification cycle.
49
48
  5. Stop the dev server when verification is complete.
50
- 6. **If recording was started, stop it now** `MCP:bdt_content_stop-recording`. submit-verdict rejects when recording is still active.
49
+ 6. **Honor any cycle-specific teardown** noted in the platform sections (e.g. recording stop) BEFORE submitting your verdict.
51
50
  7. **Submit your verdict immediately** — do NOT edit any code first:
52
51
  ```
53
52
  echo '<verdict-json>' | ironbee hook submit-verdict
@@ -57,43 +56,14 @@ If already running, skip start. If the build fails, fix it before proceeding.
57
56
  - **The stop hook overrides `status: pass` to fail when evidence doesn't back it.**
58
57
  8. If failed → fix → rebuild → go back to step 2 → repeat until pass.
59
58
 
60
- ## Browser flow (when browser cycle is active)
59
+ <!--IRONBEE:PLATFORM:browser-->
60
+ <!--/IRONBEE:PLATFORM:browser-->
61
61
 
62
- > **Recording (only when `recording.enable` is on in config):** the gate blocks every other browser tool until you first call `MCP:bdt_content_start-recording`, and `submit-verdict` rejects with `"recording is still active"` unless you call `MCP:bdt_content_stop-recording` after the steps below. **Treat start/stop as bookends around steps 1-5.** This is also enforced as step 6 of the Universal flow above.
62
+ <!--IRONBEE:PLATFORM:node-->
63
+ <!--/IRONBEE:PLATFORM:node-->
63
64
 
64
- 1. **Navigate**: `MCP:bdt_navigation_go-to` — go to the affected page(s)
65
- 2. **Interact**: actually exercise what changed — click buttons, fill forms, submit data, trigger workflows. Don't just look at the page.
66
- 3. **Screenshot**: `MCP:bdt_content_take-screenshot` — capture the final visual state
67
- 4. **Accessibility**: `MCP:bdt_a11y_take-aria-snapshot` — verify page structure
68
- 5. **Console**: `MCP:bdt_o11y_get-console-messages` — check for errors
69
-
70
- All four tools are MANDATORY (the stop hook checks each). Functional interaction is expected for every verification.
71
-
72
- ### Browser verdict fields
73
- ```json
74
- {
75
- "session_id": "<sid>",
76
- "status": "pass",
77
- "pages_tested": ["http://localhost:3000/page"],
78
- "checks": ["form submits successfully", "new item appears in list", "no console errors"],
79
- "console_errors": 0,
80
- "network_failures": 0
81
- }
82
- ```
83
-
84
- For `status: "pass"` (browser cycle): `console_errors === 0` AND `network_failures === 0`.
85
-
86
- On fail, include `issues`. On pass after a previous fail, include `fixes`.
87
-
88
- <!--IRONBEE:RUNTIME:node-->
89
- <!--/IRONBEE:RUNTIME:node-->
90
-
91
- ## What good verification looks like
92
-
93
- - Changed a form handler? → Start the app, fill the form, submit it, verify the response (browser flow).
94
- - Added an API endpoint in a backend file (when a runtime cycle is enabled)? → Run that runtime's flow per the runtime section: attach to the running process, set a probe at the handler, exercise the path from the browser, confirm the probe triggered (or inspect runtime logs).
95
- - Fixed a bug that surfaced as both a UI glitch AND a server error? → Multi-cycle: visual confirmation in the browser AND probe/log proof on the server.
96
- - Changed styling only? → Browser flow with extra attention on screenshot review.
65
+ <!--IRONBEE:PLATFORM:backend-->
66
+ <!--/IRONBEE:PLATFORM:backend-->
97
67
 
98
68
  ## Important
99
69
  - **Always submit a verdict after every verification attempt** — both pass AND fail. Fail verdicts are tracked for analytics.
@@ -0,0 +1,17 @@
1
+ /**
2
+ * `ironbee backend <subcommand>` — manage the runtime-agnostic backend
3
+ * protocol cycle (HTTP / gRPC / GraphQL / WebSocket via the
4
+ * `backend-devtools` MCP, `bedt_*` tools).
5
+ *
6
+ * Subcommands today:
7
+ * - `enable` — opt in (writes a minimal `{ "backend": {} }` block;
8
+ * multi-language code defaults flow in at runtime).
9
+ * - `disable` — opt out (drops the block clean when no customizations
10
+ * + no lower-layer override; otherwise hard-kills via
11
+ * `verifyPatterns: []`).
12
+ */
13
+ import { Command } from "commander";
14
+ export declare const backendEnableCommand: Command;
15
+ export declare const backendDisableCommand: Command;
16
+ export declare const backendCommand: Command;
17
+ //# sourceMappingURL=backend.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"backend.d.ts","sourceRoot":"","sources":["../../src/commands/backend.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAqBpC,eAAO,MAAM,oBAAoB,EAAE,OAW7B,CAAC;AAEP,eAAO,MAAM,qBAAqB,EAAE,OAW9B,CAAC;AAEP,eAAO,MAAM,cAAc,EAAE,OAGS,CAAC"}
@@ -0,0 +1,58 @@
1
+ "use strict";
2
+ /**
3
+ * `ironbee backend <subcommand>` — manage the runtime-agnostic backend
4
+ * protocol cycle (HTTP / gRPC / GraphQL / WebSocket via the
5
+ * `backend-devtools` MCP, `bedt_*` tools).
6
+ *
7
+ * Subcommands today:
8
+ * - `enable` — opt in (writes a minimal `{ "backend": {} }` block;
9
+ * multi-language code defaults flow in at runtime).
10
+ * - `disable` — opt out (drops the block clean when no customizations
11
+ * + no lower-layer override; otherwise hard-kills via
12
+ * `verifyPatterns: []`).
13
+ */
14
+ Object.defineProperty(exports, "__esModule", { value: true });
15
+ exports.backendCommand = exports.backendDisableCommand = exports.backendEnableCommand = void 0;
16
+ const commander_1 = require("commander");
17
+ const registry_1 = require("../clients/registry");
18
+ const config_1 = require("../lib/config");
19
+ const output_1 = require("../lib/output");
20
+ const cycle_toggle_1 = require("./cycle-toggle");
21
+ function attachToggleOptions(cmd) {
22
+ return cmd
23
+ .option("-p, --project-dir <dir>", "Project directory (default: cwd).")
24
+ .option("-g, --global", "Write to the global config (~/.ironbee/config.json) instead of the project.")
25
+ .option("--local", "Write to the gitignored project-local override (<project>/.ironbee/config.local.json). Mutually exclusive with --global.")
26
+ .option("--client <name>", `Only update guidance md files for this client (${(0, registry_1.clientNames)()}), or "all". Default: every registered client (per-file existsSync gate skips uninstalled ones).`);
27
+ }
28
+ exports.backendEnableCommand = attachToggleOptions(new commander_1.Command("enable"))
29
+ .description("Enable the runtime-agnostic backend protocol cycle. Writes a minimal `{ \"backend\": {} }` block — multi-language code defaults (TS/JS/Py/Go/Java/Ruby/.NET/Rust/Kotlin/Scala paths) flow in at runtime.")
30
+ .action((opts) => {
31
+ try {
32
+ const projectDir = opts.projectDir ?? process.cwd();
33
+ const target = (0, config_1.resolveConfigTargetFromFlags)(opts);
34
+ (0, cycle_toggle_1.applyEnableCycle)("backend", projectDir, target, opts.client);
35
+ }
36
+ catch (e) {
37
+ console.error(`${output_1.pc.red("✗")} ${e instanceof Error ? e.message : e}`);
38
+ process.exit(1);
39
+ }
40
+ });
41
+ exports.backendDisableCommand = attachToggleOptions(new commander_1.Command("disable"))
42
+ .description("Disable the backend protocol cycle. Drops the entire `backend` block when no customizations + no lower-layer override exist; otherwise writes `backend.verifyPatterns: []` (hard kill, preserves customizations).")
43
+ .action((opts) => {
44
+ try {
45
+ const projectDir = opts.projectDir ?? process.cwd();
46
+ const target = (0, config_1.resolveConfigTargetFromFlags)(opts);
47
+ (0, cycle_toggle_1.applyDisableCycle)("backend", projectDir, target, opts.client);
48
+ }
49
+ catch (e) {
50
+ console.error(`${output_1.pc.red("✗")} ${e instanceof Error ? e.message : e}`);
51
+ process.exit(1);
52
+ }
53
+ });
54
+ exports.backendCommand = new commander_1.Command("backend")
55
+ .description("Manage the runtime-agnostic backend protocol cycle (HTTP / gRPC / GraphQL / WebSocket via the `backend-devtools` MCP, `bedt_*` tools).")
56
+ .addCommand(exports.backendEnableCommand)
57
+ .addCommand(exports.backendDisableCommand);
58
+ //# sourceMappingURL=backend.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"backend.js","sourceRoot":"","sources":["../../src/commands/backend.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;GAWG;;;AAEH,yCAAoC;AACpC,kDAAkD;AAClD,0CAA2E;AAC3E,0CAAmC;AACnC,iDAAqE;AASrE,SAAS,mBAAmB,CAAC,GAAY;IACrC,OAAO,GAAG;SACL,MAAM,CAAC,yBAAyB,EAAE,mCAAmC,CAAC;SACtE,MAAM,CAAC,cAAc,EAAE,6EAA6E,CAAC;SACrG,MAAM,CAAC,SAAS,EAAE,0HAA0H,CAAC;SAC7I,MAAM,CAAC,iBAAiB,EAAE,kDAAkD,IAAA,sBAAW,GAAE,kGAAkG,CAAC,CAAC;AACtM,CAAC;AAEY,QAAA,oBAAoB,GAAY,mBAAmB,CAAC,IAAI,mBAAO,CAAC,QAAQ,CAAC,CAAC;KAClF,WAAW,CAAC,0MAA0M,CAAC;KACvN,MAAM,CAAC,CAAC,IAAmB,EAAQ,EAAE;IAClC,IAAI,CAAC;QACD,MAAM,UAAU,GAAW,IAAI,CAAC,UAAU,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;QAC5D,MAAM,MAAM,GAAiB,IAAA,qCAA4B,EAAC,IAAI,CAAC,CAAC;QAChE,IAAA,+BAAgB,EAAC,SAAS,EAAE,UAAU,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;IACjE,CAAC;IAAC,OAAO,CAAU,EAAE,CAAC;QAClB,OAAO,CAAC,KAAK,CAAC,GAAG,WAAE,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QACvE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACpB,CAAC;AACL,CAAC,CAAC,CAAC;AAEM,QAAA,qBAAqB,GAAY,mBAAmB,CAAC,IAAI,mBAAO,CAAC,SAAS,CAAC,CAAC;KACpF,WAAW,CAAC,mNAAmN,CAAC;KAChO,MAAM,CAAC,CAAC,IAAmB,EAAQ,EAAE;IAClC,IAAI,CAAC;QACD,MAAM,UAAU,GAAW,IAAI,CAAC,UAAU,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;QAC5D,MAAM,MAAM,GAAiB,IAAA,qCAA4B,EAAC,IAAI,CAAC,CAAC;QAChE,IAAA,gCAAiB,EAAC,SAAS,EAAE,UAAU,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;IAClE,CAAC;IAAC,OAAO,CAAU,EAAE,CAAC;QAClB,OAAO,CAAC,KAAK,CAAC,GAAG,WAAE,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QACvE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACpB,CAAC;AACL,CAAC,CAAC,CAAC;AAEM,QAAA,cAAc,GAAY,IAAI,mBAAO,CAAC,SAAS,CAAC;KACxD,WAAW,CAAC,wIAAwI,CAAC;KACrJ,UAAU,CAAC,4BAAoB,CAAC;KAChC,UAAU,CAAC,6BAAqB,CAAC,CAAC"}
@@ -0,0 +1,19 @@
1
+ /**
2
+ * `ironbee browser <subcommand>` — manage the browser verification cycle.
3
+ *
4
+ * Subcommands today:
5
+ * - `enable` — turn the browser cycle on (default-on; use this to re-enable
6
+ * after `disable`, or to strip a prior `verifyPatterns: []`
7
+ * override).
8
+ * - `disable` — turn the browser cycle off (writes `verifyPatterns: []` as
9
+ * a hard kill; preserves customizations).
10
+ *
11
+ * The hierarchical `browser <verb>` shape leaves room for future per-platform
12
+ * commands beyond enable/disable (e.g. `browser status`, `browser inspect`,
13
+ * `browser test`) without name-spacing them at the top level.
14
+ */
15
+ import { Command } from "commander";
16
+ export declare const browserEnableCommand: Command;
17
+ export declare const browserDisableCommand: Command;
18
+ export declare const browserCommand: Command;
19
+ //# sourceMappingURL=browser.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"browser.d.ts","sourceRoot":"","sources":["../../src/commands/browser.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAqBpC,eAAO,MAAM,oBAAoB,EAAE,OAW7B,CAAC;AAEP,eAAO,MAAM,qBAAqB,EAAE,OAW9B,CAAC;AAEP,eAAO,MAAM,cAAc,EAAE,OAGS,CAAC"}
@@ -0,0 +1,60 @@
1
+ "use strict";
2
+ /**
3
+ * `ironbee browser <subcommand>` — manage the browser verification cycle.
4
+ *
5
+ * Subcommands today:
6
+ * - `enable` — turn the browser cycle on (default-on; use this to re-enable
7
+ * after `disable`, or to strip a prior `verifyPatterns: []`
8
+ * override).
9
+ * - `disable` — turn the browser cycle off (writes `verifyPatterns: []` as
10
+ * a hard kill; preserves customizations).
11
+ *
12
+ * The hierarchical `browser <verb>` shape leaves room for future per-platform
13
+ * commands beyond enable/disable (e.g. `browser status`, `browser inspect`,
14
+ * `browser test`) without name-spacing them at the top level.
15
+ */
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ exports.browserCommand = exports.browserDisableCommand = exports.browserEnableCommand = void 0;
18
+ const commander_1 = require("commander");
19
+ const registry_1 = require("../clients/registry");
20
+ const config_1 = require("../lib/config");
21
+ const output_1 = require("../lib/output");
22
+ const cycle_toggle_1 = require("./cycle-toggle");
23
+ function attachToggleOptions(cmd) {
24
+ return cmd
25
+ .option("-p, --project-dir <dir>", "Project directory (default: cwd).")
26
+ .option("-g, --global", "Write to the global config (~/.ironbee/config.json) instead of the project.")
27
+ .option("--local", "Write to the gitignored project-local override (<project>/.ironbee/config.local.json). Mutually exclusive with --global.")
28
+ .option("--client <name>", `Only update guidance md files for this client (${(0, registry_1.clientNames)()}), or "all". Default: every registered client (per-file existsSync gate skips uninstalled ones).`);
29
+ }
30
+ exports.browserEnableCommand = attachToggleOptions(new commander_1.Command("enable"))
31
+ .description("Enable the browser cycle. Browser is default-on; this command writes a minimal `{ \"browser\": {} }` block (no pattern materialization; code defaults flow in at runtime) OR strips a prior `verifyPatterns: []` disable-override.")
32
+ .action((opts) => {
33
+ try {
34
+ const projectDir = opts.projectDir ?? process.cwd();
35
+ const target = (0, config_1.resolveConfigTargetFromFlags)(opts);
36
+ (0, cycle_toggle_1.applyEnableCycle)("browser", projectDir, target, opts.client);
37
+ }
38
+ catch (e) {
39
+ console.error(`${output_1.pc.red("✗")} ${e instanceof Error ? e.message : e}`);
40
+ process.exit(1);
41
+ }
42
+ });
43
+ exports.browserDisableCommand = attachToggleOptions(new commander_1.Command("disable"))
44
+ .description("Disable the browser cycle (writes `browser.verifyPatterns: []` to override the default 40+ extension fallback; preserves customizations of `alwaysRequired` / `evidencePaths` / `additionalVerifyPatterns`).")
45
+ .action((opts) => {
46
+ try {
47
+ const projectDir = opts.projectDir ?? process.cwd();
48
+ const target = (0, config_1.resolveConfigTargetFromFlags)(opts);
49
+ (0, cycle_toggle_1.applyDisableCycle)("browser", projectDir, target, opts.client);
50
+ }
51
+ catch (e) {
52
+ console.error(`${output_1.pc.red("✗")} ${e instanceof Error ? e.message : e}`);
53
+ process.exit(1);
54
+ }
55
+ });
56
+ exports.browserCommand = new commander_1.Command("browser")
57
+ .description("Manage the browser verification cycle (DOM / console / a11y / screenshots via the `browser-devtools` MCP, `bdt_*` tools).")
58
+ .addCommand(exports.browserEnableCommand)
59
+ .addCommand(exports.browserDisableCommand);
60
+ //# sourceMappingURL=browser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"browser.js","sourceRoot":"","sources":["../../src/commands/browser.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;GAaG;;;AAEH,yCAAoC;AACpC,kDAAkD;AAClD,0CAA2E;AAC3E,0CAAmC;AACnC,iDAAqE;AASrE,SAAS,mBAAmB,CAAC,GAAY;IACrC,OAAO,GAAG;SACL,MAAM,CAAC,yBAAyB,EAAE,mCAAmC,CAAC;SACtE,MAAM,CAAC,cAAc,EAAE,6EAA6E,CAAC;SACrG,MAAM,CAAC,SAAS,EAAE,0HAA0H,CAAC;SAC7I,MAAM,CAAC,iBAAiB,EAAE,kDAAkD,IAAA,sBAAW,GAAE,kGAAkG,CAAC,CAAC;AACtM,CAAC;AAEY,QAAA,oBAAoB,GAAY,mBAAmB,CAAC,IAAI,mBAAO,CAAC,QAAQ,CAAC,CAAC;KAClF,WAAW,CAAC,oOAAoO,CAAC;KACjP,MAAM,CAAC,CAAC,IAAmB,EAAQ,EAAE;IAClC,IAAI,CAAC;QACD,MAAM,UAAU,GAAW,IAAI,CAAC,UAAU,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;QAC5D,MAAM,MAAM,GAAiB,IAAA,qCAA4B,EAAC,IAAI,CAAC,CAAC;QAChE,IAAA,+BAAgB,EAAC,SAAS,EAAE,UAAU,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;IACjE,CAAC;IAAC,OAAO,CAAU,EAAE,CAAC;QAClB,OAAO,CAAC,KAAK,CAAC,GAAG,WAAE,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QACvE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACpB,CAAC;AACL,CAAC,CAAC,CAAC;AAEM,QAAA,qBAAqB,GAAY,mBAAmB,CAAC,IAAI,mBAAO,CAAC,SAAS,CAAC,CAAC;KACpF,WAAW,CAAC,8MAA8M,CAAC;KAC3N,MAAM,CAAC,CAAC,IAAmB,EAAQ,EAAE;IAClC,IAAI,CAAC;QACD,MAAM,UAAU,GAAW,IAAI,CAAC,UAAU,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;QAC5D,MAAM,MAAM,GAAiB,IAAA,qCAA4B,EAAC,IAAI,CAAC,CAAC;QAChE,IAAA,gCAAiB,EAAC,SAAS,EAAE,UAAU,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;IAClE,CAAC;IAAC,OAAO,CAAU,EAAE,CAAC;QAClB,OAAO,CAAC,KAAK,CAAC,GAAG,WAAE,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QACvE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACpB,CAAC;AACL,CAAC,CAAC,CAAC;AAEM,QAAA,cAAc,GAAY,IAAI,mBAAO,CAAC,SAAS,CAAC;KACxD,WAAW,CAAC,2HAA2H,CAAC;KACxI,UAAU,CAAC,4BAAoB,CAAC;KAChC,UAAU,CAAC,6BAAqB,CAAC,CAAC"}
@@ -1,11 +1,23 @@
1
1
  /**
2
- * `ironbee config` — generic config reader / writer for project & global
3
- * `<root>/.ironbee/config.json` files.
2
+ * `ironbee config` — generic config reader / writer for the three config
3
+ * layers IronBee resolves at runtime:
4
+ *
5
+ * 1. Global — `~/.ironbee/config.json` (`--global` / `-g`)
6
+ * 2. Project — `<projectDir>/.ironbee/config.json` (default; committed)
7
+ * 3. Project-local — `<projectDir>/.ironbee/config.local.json` (`--local`; gitignored)
8
+ *
9
+ * `loadConfig` merges them in that order — each later layer overrides the
10
+ * earlier ones (see `lib/config.ts` for deep-merge semantics on `browser` /
11
+ * `backend.<runtime>` blocks). The local layer is for per-machine /
12
+ * per-developer overrides (debug toggles, machine-specific paths, alternate
13
+ * collector endpoints) and must not be committed; `ironbee install`
14
+ * gitignores `.ironbee/config.local.json` automatically.
4
15
  *
5
16
  * Subcommands:
6
17
  * - `config get <key>` — print the value at a dotted path. Default reads
7
- * the merged effective value (global + project);
8
- * `--global` / `--project` narrow to one source.
18
+ * the merged effective value (global + project +
19
+ * local); `--global` / `--project` / `--local`
20
+ * narrow to one source.
9
21
  * - `config set <key> <value>` — write a value. Smart re-render: when the
10
22
  * top-level key affects installed client artifacts
11
23
  * (hooks, MCP servers, skill/rule md, permissions),
@@ -15,9 +27,13 @@
15
27
  * state (artifacts-before-config ordering, same as
16
28
  * `applyVerificationToggle`).
17
29
  * - `config unset <key>` — remove a key. Same rerender rules as `set`.
18
- * - `config list` — print the whole config (merged / global / project).
30
+ * - `config list` — print the whole config (merged / global / project / local).
19
31
  * - `config path` — print the on-disk path of the targeted config file.
20
32
  *
33
+ * `--global`, `--project`, and `--local` are mutually exclusive on read
34
+ * paths; on write paths only one of `--global` / `--local` may be set
35
+ * (project is the implicit default when neither is given).
36
+ *
21
37
  * Type coercion for `set`: tries `JSON.parse(value)` first (so `true`,
22
38
  * `false`, `42`, `null`, `[…]`, `{…}` come through as their JSON types).
23
39
  * Falls back to the raw string when JSON parse fails, which lets URLs,
@@ -27,16 +43,24 @@
27
43
  * misinterpreted (e.g. a string that happens to look like a number).
28
44
  *
29
45
  * Artifact-affecting top-level keys (the `ARTIFACT_AFFECTING_TOP_KEYS`
30
- * registry below) are: `verification`, `collector`, `browser`, `backend`,
31
- * `browserDevTools`, `nodeDevTools`. Changing anything else (e.g.
32
- * `maxRetries`, `import.concurrency`, `recording`, `jobQueue`, `analytics`)
33
- * is a pure config flip — runtime hooks read it on next session, no
34
- * artifact regeneration needed.
46
+ * registry below) are: `verification`, `collector`, `browser`, `node`,
47
+ * `backend`, `browserDevTools`, `nodeDevTools`, `backendDevTools`. Changing
48
+ * anything else (e.g. `maxRetries`, `import.concurrency`, `recording`,
49
+ * `jobQueue`, `analytics`) is a pure config flip — runtime hooks read it on
50
+ * next session, no artifact regeneration needed.
35
51
  */
36
52
  import { Command } from "commander";
37
53
  export interface SetOpts {
38
54
  projectDir?: string;
55
+ /** Write to `~/.ironbee/config.json`. Mutually exclusive with `local`. */
39
56
  global?: boolean;
57
+ /**
58
+ * Write to `<projectDir>/.ironbee/config.local.json` (gitignored
59
+ * personal override layer). Mutually exclusive with `global`. When
60
+ * neither flag is set, writes go to the committed project config
61
+ * (`<projectDir>/.ironbee/config.json`).
62
+ */
63
+ local?: boolean;
40
64
  client?: string;
41
65
  rerender?: boolean;
42
66
  json?: boolean;
@@ -46,13 +70,19 @@ export interface SetOpts {
46
70
  * - `true` → apply everywhere, no prompt (CLI: `--apply-all`)
47
71
  * - `false` → skip everywhere, no prompt (CLI: `--no-apply-all`)
48
72
  * - `undefined` → prompt on TTY; skip with hint on non-TTY
73
+ *
74
+ * Only consulted on `--global` writes — local and project writes never
75
+ * propagate to other projects.
49
76
  */
50
77
  applyAll?: boolean;
51
78
  }
52
79
  export declare function runSet(key: string, rawValue: string, opts: SetOpts): Promise<void>;
53
80
  export interface UnsetOpts {
54
81
  projectDir?: string;
82
+ /** Write to `~/.ironbee/config.json`. Mutually exclusive with `local`. */
55
83
  global?: boolean;
84
+ /** Write to the gitignored project-local layer. Mutually exclusive with `global`. */
85
+ local?: boolean;
56
86
  client?: string;
57
87
  rerender?: boolean;
58
88
  /** See `SetOpts.applyAll`. */
@@ -61,14 +91,19 @@ export interface UnsetOpts {
61
91
  export declare function runUnset(key: string, opts: UnsetOpts): Promise<void>;
62
92
  export interface GetOpts {
63
93
  projectDir?: string;
94
+ /** Read only the global layer (`~/.ironbee/config.json`). */
64
95
  global?: boolean;
96
+ /** Read only the committed project layer (`<projectDir>/.ironbee/config.json`). */
65
97
  project?: boolean;
98
+ /** Read only the gitignored local layer (`<projectDir>/.ironbee/config.local.json`). */
99
+ local?: boolean;
66
100
  }
67
101
  export declare function runGet(key: string, opts: GetOpts): void;
68
102
  export declare function runList(opts: GetOpts): void;
69
103
  export declare function runPath(opts: {
70
104
  projectDir?: string;
71
105
  global?: boolean;
106
+ local?: boolean;
72
107
  }): void;
73
108
  /**
74
109
  * `ironbee config` parent command. Subcommands attached below; each one
@@ -1 +1 @@
1
- {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/commands/config.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA6XpC,MAAM,WAAW,OAAO;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf;;;;;;OAMG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;CACtB;AAED,wBAAsB,MAAM,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAiCxF;AAED,MAAM,WAAW,SAAS;IACtB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,8BAA8B;IAC9B,QAAQ,CAAC,EAAE,OAAO,CAAC;CACtB;AAED,wBAAsB,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC,CAgC1E;AAED,MAAM,WAAW,OAAO;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,OAAO,CAAC,EAAE,OAAO,CAAC;CACrB;AAED,wBAAgB,MAAM,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,GAAG,IAAI,CAevD;AAED,wBAAgB,OAAO,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI,CAI3C;AAED,wBAAgB,OAAO,CAAC,IAAI,EAAE;IAAE,UAAU,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,IAAI,CAG7E;AAED;;;;GAIG;AACH,eAAO,MAAM,aAAa,EAAE,OACoI,CAAC"}
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/commands/config.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkDG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA6ZpC,MAAM,WAAW,OAAO;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,0EAA0E;IAC1E,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB;;;;;OAKG;IACH,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf;;;;;;;;;OASG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;CACtB;AAED,wBAAsB,MAAM,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAiCxF;AAED,MAAM,WAAW,SAAS;IACtB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,0EAA0E;IAC1E,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,qFAAqF;IACrF,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,8BAA8B;IAC9B,QAAQ,CAAC,EAAE,OAAO,CAAC;CACtB;AAED,wBAAsB,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC,CAgC1E;AAED,MAAM,WAAW,OAAO;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,6DAA6D;IAC7D,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,mFAAmF;IACnF,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,wFAAwF;IACxF,KAAK,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,wBAAgB,MAAM,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,GAAG,IAAI,CAevD;AAED,wBAAgB,OAAO,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI,CAI3C;AAED,wBAAgB,OAAO,CAAC,IAAI,EAAE;IAAE,UAAU,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,IAAI,CAG9F;AAED;;;;GAIG;AACH,eAAO,MAAM,aAAa,EAAE,OACoI,CAAC"}