@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,264 @@
1
+ "use strict";
2
+ /**
3
+ * Shared helpers for the per-platform enable / disable subcommands:
4
+ *
5
+ * - `applyEnableCycle(cycle, projectDir, target, clientName)` — writes a
6
+ * minimal `{ "<cycle>": {} }` block to the targeted config layer (no
7
+ * pattern materialization; code defaults flow in at runtime via
8
+ * `getCyclePatterns`). If a prior `<cycle> disable` left
9
+ * `verifyPatterns: []` behind, it is stripped here so the code defaults
10
+ * flow back in. Refuses (warn + no-op) when the cycle is already
11
+ * enabled at the targeted layer.
12
+ *
13
+ * - `applyDisableCycle(cycle, projectDir, target, clientName)` — disables
14
+ * the cycle. Drops the entire `<cycle>` key from config when no
15
+ * customizations + no lower-layer override (clean config); otherwise
16
+ * writes `verifyPatterns: []` as a load-bearing hard kill while
17
+ * preserving `alwaysRequired` / `evidencePaths` /
18
+ * `additionalVerifyPatterns`.
19
+ *
20
+ * Three platforms use this today: `browser` (default-on; opt out via
21
+ * `browser disable`), `node` (Node.js runtime debug, `node-devtools` MCP,
22
+ * `ndt_*` tools) and `backend` (runtime-agnostic protocol cycle,
23
+ * `backend-devtools` MCP, `bedt_*` tools). Consumed by
24
+ * `src/commands/{browser,node,backend}.ts` — the hierarchical
25
+ * `<platform> <verb>` shape leaves room for future per-platform
26
+ * subcommands beyond enable/disable.
27
+ *
28
+ * Both helpers throw when `<cycle>` isn't a known cycle; callers handle the
29
+ * error and exit.
30
+ */
31
+ Object.defineProperty(exports, "__esModule", { value: true });
32
+ exports.knownCycles = knownCycles;
33
+ exports.assertKnownCycle = assertKnownCycle;
34
+ exports.applyEnableCycle = applyEnableCycle;
35
+ exports.applyDisableCycle = applyDisableCycle;
36
+ const fs_1 = require("fs");
37
+ const path_1 = require("path");
38
+ const registry_1 = require("../clients/registry");
39
+ const logger_1 = require("../lib/logger");
40
+ const output_1 = require("../lib/output");
41
+ const config_1 = require("../lib/config");
42
+ function knownCycles() {
43
+ return [...config_1.ALL_CYCLES];
44
+ }
45
+ function assertKnownCycle(cycle) {
46
+ const known = knownCycles();
47
+ if (!known.includes(cycle)) {
48
+ throw new Error(`Unknown cycle '${cycle}'. Available: ${known.join(", ")}.`);
49
+ }
50
+ }
51
+ function readLayerConfig(configPath) {
52
+ if (!(0, fs_1.existsSync)(configPath)) {
53
+ return {};
54
+ }
55
+ try {
56
+ return JSON.parse((0, fs_1.readFileSync)(configPath, "utf-8"));
57
+ }
58
+ catch (e) {
59
+ logger_1.logger.debug(`failed to read ${configPath}: ${e}`);
60
+ throw new Error(`Config at ${configPath} is not valid JSON: ${e instanceof Error ? e.message : e}`);
61
+ }
62
+ }
63
+ function writeLayerConfig(configPath, config) {
64
+ (0, fs_1.mkdirSync)((0, path_1.join)(configPath, ".."), { recursive: true });
65
+ (0, fs_1.writeFileSync)(configPath, JSON.stringify(config, null, 2) + "\n");
66
+ }
67
+ /**
68
+ * Resolve the clients whose artifacts should be re-rendered after a cycle
69
+ * toggle. `--client all` (or undefined) means every client currently
70
+ * detected in the project — undetected clients are skipped to avoid
71
+ * dropping `.claude/` / `.cursor/` into a project the user never opted
72
+ * into. A specific `<name>` is honored even when undetected so scripted
73
+ * setups can pre-populate one of the dirs.
74
+ */
75
+ function resolveAffectedClients(projectDir, clientName) {
76
+ if (clientName === undefined || clientName === "all") {
77
+ return (0, registry_1.detectClients)(projectDir);
78
+ }
79
+ return (0, registry_1.resolveTargetClients)(projectDir, clientName);
80
+ }
81
+ /**
82
+ * Re-render the artifacts for every affected client off the **just-written**
83
+ * config. Each `client.install(projectDir, config)` call:
84
+ *
85
+ * - Rewrites `.mcp.json` / `.cursor/mcp.json` with `isCycleEnabled`-gated
86
+ * entries (disabled cycles drop their MCP server entry; re-enabled
87
+ * cycles add it back).
88
+ * - Rewrites `.claude/settings.json` permissions with the same per-cycle
89
+ * gating (Claude only — Cursor has no per-permission allowlist).
90
+ * - Calls `syncPlatformSectionsToConfig` which flips the platform
91
+ * marker blocks in installed skill / rule / command md files based
92
+ * on the new cycle-enabled state.
93
+ *
94
+ * Returns the project-relative md files that the platform-section sync
95
+ * actually updated, just for the user-facing log line.
96
+ */
97
+ function rerenderClientArtifacts(projectDir, clientName) {
98
+ const clients = resolveAffectedClients(projectDir, clientName);
99
+ if (clients.length === 0) {
100
+ logger_1.logger.debug(`cycle-toggle: no clients detected in ${projectDir} — skipping artifact rerender`);
101
+ return [];
102
+ }
103
+ const cfg = (0, config_1.loadConfig)(projectDir);
104
+ const updated = [];
105
+ for (const client of clients) {
106
+ try {
107
+ client.install(projectDir, cfg);
108
+ updated.push(client.name);
109
+ }
110
+ catch (e) {
111
+ logger_1.logger.debug(`cycle-toggle: failed to rerender ${client.name}: ${e}`);
112
+ }
113
+ }
114
+ return updated;
115
+ }
116
+ function readCycleBlock(config, cycle) {
117
+ const raw = config[cycle];
118
+ if (raw && typeof raw === "object" && !Array.isArray(raw)) {
119
+ return raw;
120
+ }
121
+ return undefined;
122
+ }
123
+ /** Disable command + flag suffix for a given target. Used in messages only. */
124
+ function disableCommandHint(cycle, target) {
125
+ const flag = target === "project" ? "" : ` --${target}`;
126
+ return `ironbee ${cycle} disable${flag}`;
127
+ }
128
+ /**
129
+ * Enable a cycle and re-render installed skill/rule/command md files.
130
+ *
131
+ * The canonical disable signal is `block.enable: false` (mirrors
132
+ * `recording.enable` / `jobQueue.enable` / `verification.enable`). `<cycle>
133
+ * enable` reverses that: drops the `enable` key. Stale legacy disable
134
+ * markers (`verifyPatterns: []`) are cleaned up at the same time so the
135
+ * cycle truly turns on. Migrates older `{ "disabled": [...] }` shapes too.
136
+ *
137
+ * Result shapes:
138
+ * - Default-on cycle (browser) on a fresh project → block dropped if
139
+ * content becomes empty (block-absent + default-on already activates).
140
+ * - Default-off cycle (node, backend) on a fresh project → minimal
141
+ * `{ "<cycle>": {} }` (block presence is the enable signal).
142
+ * - Undoing `<cycle> disable`: `enable: false` removed; if cleaned block
143
+ * becomes `{}` and cycle is default-on, block dropped too.
144
+ *
145
+ * No-op + warning when the cycle is already enabled at the targeted layer.
146
+ *
147
+ * `target` selects which config layer to write:
148
+ * - `"project"` (default) — committed `<project>/.ironbee/config.json`.
149
+ * - `"global"` — `~/.ironbee/config.json`.
150
+ * - `"local"` — gitignored `<project>/.ironbee/config.local.json`.
151
+ *
152
+ * `clientName`: optional filter for which clients' md files to update.
153
+ * `"all"` / `<name>` / undefined (default: every registered client; per-file
154
+ * existsSync gate skips ones without installed artifacts).
155
+ */
156
+ function applyEnableCycle(cycle, projectDir, target, clientName) {
157
+ assertKnownCycle(cycle);
158
+ const configPath = (0, config_1.getTargetConfigPath)(target, projectDir);
159
+ const config = readLayerConfig(configPath);
160
+ const block = readCycleBlock(config, cycle);
161
+ const explicitlyDisabledAtLayer = block !== undefined
162
+ && (block.enable === false
163
+ || (Array.isArray(block.verifyPatterns) && block.verifyPatterns.length === 0));
164
+ const isDefaultOnCycle = config_1.CYCLES_ENABLED_BY_DEFAULT.has(cycle);
165
+ // "Already enabled at the targeted layer": NOT disabled at this layer
166
+ // AND has an enabled signal (block present OR default-on fallback).
167
+ const alreadyEnabledAtLayer = !explicitlyDisabledAtLayer
168
+ && (block !== undefined || isDefaultOnCycle);
169
+ if (alreadyEnabledAtLayer) {
170
+ console.log(`${output_1.pc.yellow("⚠")} ${cycle} cycle is already enabled in ${target} config (${output_1.pc.dim(configPath)}).\n` +
171
+ ` Run ${output_1.pc.cyan(disableCommandHint(cycle, target))} first to reset, then re-run enable-${cycle}.`);
172
+ return;
173
+ }
174
+ if (block !== undefined) {
175
+ // Strip the disable signals; preserve every other field (customizations).
176
+ const cleaned = { ...block };
177
+ delete cleaned.enable;
178
+ if (Array.isArray(cleaned.verifyPatterns) && cleaned.verifyPatterns.length === 0) {
179
+ delete cleaned.verifyPatterns;
180
+ }
181
+ // Always keep the cleaned block, even when empty. The minimal `{}`
182
+ // shape is the canonical post-enable footprint — uniform across
183
+ // every cycle (browser / node / backend) so users see consistent
184
+ // config output regardless of which platform they toggled.
185
+ config[cycle] = cleaned;
186
+ }
187
+ else if (!isDefaultOnCycle) {
188
+ // Default-off cycle, no block → write a minimal `{}` so the code
189
+ // defaults flow at runtime.
190
+ config[cycle] = {};
191
+ }
192
+ // Else: default-on cycle, block absent → already activated by fallback;
193
+ // no work needed.
194
+ writeLayerConfig(configPath, config);
195
+ const updatedClients = rerenderClientArtifacts(projectDir, clientName);
196
+ console.log(`${output_1.pc.green("✓")} Enabled ${output_1.pc.bold(cycle)} cycle verification in ${target} config (${output_1.pc.dim(configPath)}).`);
197
+ console.log(` ${output_1.pc.dim("Default verifyPatterns from CLI " + cycle + " cycle apply automatically.")}`);
198
+ if (updatedClients.length > 0) {
199
+ console.log(` ${output_1.pc.dim("Re-rendered artifacts (MCP servers, permissions, skill/rule/command md) for: " + updatedClients.join(", "))}`);
200
+ }
201
+ console.log(`\n ${output_1.pc.dim("To customize, set")} ${output_1.pc.cyan(`${cycle}.verifyPatterns`)} ${output_1.pc.dim("(replaces defaults)")} ${output_1.pc.dim("or")} ${output_1.pc.cyan(`${cycle}.additionalVerifyPatterns`)} ${output_1.pc.dim("(appended).")}`);
202
+ }
203
+ /**
204
+ * Disable a cycle and reset the cycle fragment in installed skill / rule /
205
+ * command md files.
206
+ *
207
+ * Writes `block.enable: false` on the cycle block — the canonical disable
208
+ * signal (mirrors `recording.enable` / `jobQueue.enable` /
209
+ * `verification.enable`). Real customizations (`alwaysRequired`,
210
+ * `evidencePaths`, `additionalVerifyPatterns`, non-empty `verifyPatterns`)
211
+ * are preserved untouched; the runtime ignores them because `enable: false`
212
+ * takes precedence in `getCyclePatterns`.
213
+ *
214
+ * Footprint after `<cycle> disable` on a fresh project:
215
+ *
216
+ * `{ "<cycle>": { "enable": false } }`
217
+ *
218
+ * Cleanup pass also runs: stale legacy `verifyPatterns: []` markers are
219
+ * stripped (the user previously disabled with an older CLI), since the
220
+ * canonical signal now lives on `enable`. Empty stub blocks left behind
221
+ * by prior toggles are normalized — the block ends up as
222
+ * `{ "enable": false, ...preservedCustomizations }`.
223
+ *
224
+ * Idempotent: re-running disable is a no-op when `block.enable` is already
225
+ * `false` AND no stale markers need cleanup.
226
+ *
227
+ * `target` / `clientName` semantics match `applyEnableCycle`.
228
+ */
229
+ function applyDisableCycle(cycle, projectDir, target, clientName) {
230
+ assertKnownCycle(cycle);
231
+ const configPath = (0, config_1.getTargetConfigPath)(target, projectDir);
232
+ const config = readLayerConfig(configPath);
233
+ const block = readCycleBlock(config, cycle);
234
+ // Build the new block: { enable: false, ...preservedCustomizations }.
235
+ // Stale legacy `verifyPatterns: []` is dropped (the canonical signal is
236
+ // now `enable: false`). Real customizations stay untouched.
237
+ const cleaned = { ...(block ?? {}) };
238
+ if (Array.isArray(cleaned.verifyPatterns) && cleaned.verifyPatterns.length === 0) {
239
+ delete cleaned.verifyPatterns;
240
+ }
241
+ cleaned.enable = false;
242
+ // Did anything change? Compare against the original block by-key.
243
+ const sameAsOriginal = block !== undefined
244
+ && block.enable === false
245
+ && Object.keys(block).length === Object.keys(cleaned).length
246
+ && Object.keys(cleaned).every((k) => {
247
+ // Shallow equality for primitive fields; reference equality is
248
+ // sufficient because cleaned spreads block's array/object refs.
249
+ return block[k] === cleaned[k];
250
+ });
251
+ if (sameAsOriginal) {
252
+ console.log(`${output_1.pc.dim("·")} ${cycle} cycle already disabled in ${target} config (no-op).`);
253
+ return;
254
+ }
255
+ config[cycle] = cleaned;
256
+ writeLayerConfig(configPath, config);
257
+ const updatedClients = rerenderClientArtifacts(projectDir, clientName);
258
+ console.log(`${output_1.pc.green("✓")} Disabled ${output_1.pc.bold(cycle)} cycle verification in ${target} config (${output_1.pc.dim(configPath)}).`);
259
+ console.log(` ${output_1.pc.dim("Customizations of alwaysRequired, evidencePaths, additionalVerifyPatterns are preserved.")}`);
260
+ if (updatedClients.length > 0) {
261
+ console.log(` ${output_1.pc.dim("Re-rendered artifacts (MCP servers, permissions, skill/rule/command md) for: " + updatedClients.join(", "))}`);
262
+ }
263
+ }
264
+ //# sourceMappingURL=cycle-toggle.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cycle-toggle.js","sourceRoot":"","sources":["../../src/commands/cycle-toggle.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"disable-verification.d.ts","sourceRoot":"","sources":["../../src/commands/disable-verification.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAKpC,eAAO,MAAM,0BAA0B,EAAE,OAanC,CAAC"}
1
+ {"version":3,"file":"disable-verification.d.ts","sourceRoot":"","sources":["../../src/commands/disable-verification.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAMpC,eAAO,MAAM,0BAA0B,EAAE,OAenC,CAAC"}
@@ -16,17 +16,20 @@ Object.defineProperty(exports, "__esModule", { value: true });
16
16
  exports.disableVerificationCommand = void 0;
17
17
  const commander_1 = require("commander");
18
18
  const registry_1 = require("../clients/registry");
19
+ const config_1 = require("../lib/config");
19
20
  const output_1 = require("../lib/output");
20
21
  const verification_toggle_1 = require("./verification-toggle");
21
22
  exports.disableVerificationCommand = new commander_1.Command("disable-verification")
22
- .description("Turn off verification enforcement for the current project; ironbee runs in monitoring-only mode (session/activity/tool_call telemetry still flows to the collector).")
23
+ .description("Turn off verification enforcement; ironbee runs in monitoring-only mode (session/activity/tool_call telemetry still flows to the collector). Default target is the committed project config; -g writes global, --local writes the gitignored personal layer.")
23
24
  .option("-p, --project-dir <dir>", "Project directory (default: cwd).")
24
25
  .option("-g, --global", "Write to the global config (~/.ironbee/config.json) instead of the project.")
26
+ .option("--local", "Write to the gitignored project-local override (<project>/.ironbee/config.local.json). Mutually exclusive with --global.")
25
27
  .option("--client <name>", `Only re-render artifacts for this client (${(0, registry_1.clientNames)()}), or "all". Default: detected clients.`)
26
28
  .action((opts) => {
27
29
  try {
28
30
  const projectDir = opts.projectDir ?? process.cwd();
29
- (0, verification_toggle_1.applyVerificationToggle)(false, projectDir, opts.global ?? false, opts.client);
31
+ const target = (0, config_1.resolveConfigTargetFromFlags)(opts);
32
+ (0, verification_toggle_1.applyVerificationToggle)(false, projectDir, target, opts.client);
30
33
  }
31
34
  catch (e) {
32
35
  console.error(`${output_1.pc.red("✗")} ${e instanceof Error ? e.message : e}`);
@@ -1 +1 @@
1
- {"version":3,"file":"disable-verification.js","sourceRoot":"","sources":["../../src/commands/disable-verification.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;GAYG;;;AAEH,yCAAoC;AACpC,kDAAkD;AAClD,0CAAmC;AACnC,+DAAgE;AAEnD,QAAA,0BAA0B,GAAY,IAAI,mBAAO,CAAC,sBAAsB,CAAC;KACjF,WAAW,CAAC,sKAAsK,CAAC;KACnL,MAAM,CAAC,yBAAyB,EAAE,mCAAmC,CAAC;KACtE,MAAM,CAAC,cAAc,EAAE,6EAA6E,CAAC;KACrG,MAAM,CAAC,iBAAiB,EAAE,6CAA6C,IAAA,sBAAW,GAAE,yCAAyC,CAAC;KAC9H,MAAM,CAAC,CAAC,IAAgE,EAAQ,EAAE;IAC/E,IAAI,CAAC;QACD,MAAM,UAAU,GAAW,IAAI,CAAC,UAAU,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;QAC5D,IAAA,6CAAuB,EAAC,KAAK,EAAE,UAAU,EAAE,IAAI,CAAC,MAAM,IAAI,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;IAClF,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"}
1
+ {"version":3,"file":"disable-verification.js","sourceRoot":"","sources":["../../src/commands/disable-verification.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;GAYG;;;AAEH,yCAAoC;AACpC,kDAAkD;AAClD,0CAA2E;AAC3E,0CAAmC;AACnC,+DAAgE;AAEnD,QAAA,0BAA0B,GAAY,IAAI,mBAAO,CAAC,sBAAsB,CAAC;KACjF,WAAW,CAAC,8PAA8P,CAAC;KAC3Q,MAAM,CAAC,yBAAyB,EAAE,mCAAmC,CAAC;KACtE,MAAM,CAAC,cAAc,EAAE,6EAA6E,CAAC;KACrG,MAAM,CAAC,SAAS,EAAE,0HAA0H,CAAC;KAC7I,MAAM,CAAC,iBAAiB,EAAE,6CAA6C,IAAA,sBAAW,GAAE,yCAAyC,CAAC;KAC9H,MAAM,CAAC,CAAC,IAAiF,EAAQ,EAAE;IAChG,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,6CAAuB,EAAC,KAAK,EAAE,UAAU,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;IACpE,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"}
@@ -1 +1 @@
1
- {"version":3,"file":"enable-verification.d.ts","sourceRoot":"","sources":["../../src/commands/enable-verification.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAKpC,eAAO,MAAM,yBAAyB,EAAE,OAalC,CAAC"}
1
+ {"version":3,"file":"enable-verification.d.ts","sourceRoot":"","sources":["../../src/commands/enable-verification.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAMpC,eAAO,MAAM,yBAAyB,EAAE,OAelC,CAAC"}
@@ -14,17 +14,20 @@ Object.defineProperty(exports, "__esModule", { value: true });
14
14
  exports.enableVerificationCommand = void 0;
15
15
  const commander_1 = require("commander");
16
16
  const registry_1 = require("../clients/registry");
17
+ const config_1 = require("../lib/config");
17
18
  const output_1 = require("../lib/output");
18
19
  const verification_toggle_1 = require("./verification-toggle");
19
20
  exports.enableVerificationCommand = new commander_1.Command("enable-verification")
20
- .description("Turn verification enforcement back on for the current project (writes verification.enable: true and re-renders client artifacts).")
21
+ .description("Turn verification enforcement back on (writes verification.enable: true and re-renders client artifacts). Default target is the committed project config; -g writes global, --local writes the gitignored personal layer.")
21
22
  .option("-p, --project-dir <dir>", "Project directory (default: cwd).")
22
23
  .option("-g, --global", "Write to the global config (~/.ironbee/config.json) instead of the project.")
24
+ .option("--local", "Write to the gitignored project-local override (<project>/.ironbee/config.local.json). Mutually exclusive with --global.")
23
25
  .option("--client <name>", `Only re-render artifacts for this client (${(0, registry_1.clientNames)()}), or "all". Default: detected clients.`)
24
26
  .action((opts) => {
25
27
  try {
26
28
  const projectDir = opts.projectDir ?? process.cwd();
27
- (0, verification_toggle_1.applyVerificationToggle)(true, projectDir, opts.global ?? false, opts.client);
29
+ const target = (0, config_1.resolveConfigTargetFromFlags)(opts);
30
+ (0, verification_toggle_1.applyVerificationToggle)(true, projectDir, target, opts.client);
28
31
  }
29
32
  catch (e) {
30
33
  console.error(`${output_1.pc.red("✗")} ${e instanceof Error ? e.message : e}`);
@@ -1 +1 @@
1
- {"version":3,"file":"enable-verification.js","sourceRoot":"","sources":["../../src/commands/enable-verification.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;GAUG;;;AAEH,yCAAoC;AACpC,kDAAkD;AAClD,0CAAmC;AACnC,+DAAgE;AAEnD,QAAA,yBAAyB,GAAY,IAAI,mBAAO,CAAC,qBAAqB,CAAC;KAC/E,WAAW,CAAC,mIAAmI,CAAC;KAChJ,MAAM,CAAC,yBAAyB,EAAE,mCAAmC,CAAC;KACtE,MAAM,CAAC,cAAc,EAAE,6EAA6E,CAAC;KACrG,MAAM,CAAC,iBAAiB,EAAE,6CAA6C,IAAA,sBAAW,GAAE,yCAAyC,CAAC;KAC9H,MAAM,CAAC,CAAC,IAAgE,EAAQ,EAAE;IAC/E,IAAI,CAAC;QACD,MAAM,UAAU,GAAW,IAAI,CAAC,UAAU,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;QAC5D,IAAA,6CAAuB,EAAC,IAAI,EAAE,UAAU,EAAE,IAAI,CAAC,MAAM,IAAI,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;IACjF,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"}
1
+ {"version":3,"file":"enable-verification.js","sourceRoot":"","sources":["../../src/commands/enable-verification.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;GAUG;;;AAEH,yCAAoC;AACpC,kDAAkD;AAClD,0CAA2E;AAC3E,0CAAmC;AACnC,+DAAgE;AAEnD,QAAA,yBAAyB,GAAY,IAAI,mBAAO,CAAC,qBAAqB,CAAC;KAC/E,WAAW,CAAC,2NAA2N,CAAC;KACxO,MAAM,CAAC,yBAAyB,EAAE,mCAAmC,CAAC;KACtE,MAAM,CAAC,cAAc,EAAE,6EAA6E,CAAC;KACrG,MAAM,CAAC,SAAS,EAAE,0HAA0H,CAAC;KAC7I,MAAM,CAAC,iBAAiB,EAAE,6CAA6C,IAAA,sBAAW,GAAE,yCAAyC,CAAC;KAC9H,MAAM,CAAC,CAAC,IAAiF,EAAQ,EAAE;IAChG,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,6CAAuB,EAAC,IAAI,EAAE,UAAU,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;IACnE,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"}
@@ -0,0 +1,16 @@
1
+ /**
2
+ * `ironbee node <subcommand>` — manage the Node.js runtime debug cycle
3
+ * (V8 inspector probes via the `node-devtools` MCP, `ndt_*` tools).
4
+ *
5
+ * Subcommands today:
6
+ * - `enable` — opt in (writes a minimal `{ "node": {} }` block; code
7
+ * defaults flow in at runtime).
8
+ * - `disable` — opt out (drops the block clean when no customizations
9
+ * + no lower-layer override; otherwise hard-kills via
10
+ * `verifyPatterns: []` while preserving customizations).
11
+ */
12
+ import { Command } from "commander";
13
+ export declare const nodeEnableCommand: Command;
14
+ export declare const nodeDisableCommand: Command;
15
+ export declare const nodeCommand: Command;
16
+ //# sourceMappingURL=node.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"node.d.ts","sourceRoot":"","sources":["../../src/commands/node.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAqBpC,eAAO,MAAM,iBAAiB,EAAE,OAW1B,CAAC;AAEP,eAAO,MAAM,kBAAkB,EAAE,OAW3B,CAAC;AAEP,eAAO,MAAM,WAAW,EAAE,OAGS,CAAC"}
@@ -0,0 +1,57 @@
1
+ "use strict";
2
+ /**
3
+ * `ironbee node <subcommand>` — manage the Node.js runtime debug cycle
4
+ * (V8 inspector probes via the `node-devtools` MCP, `ndt_*` tools).
5
+ *
6
+ * Subcommands today:
7
+ * - `enable` — opt in (writes a minimal `{ "node": {} }` block; code
8
+ * 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: []` while preserving customizations).
12
+ */
13
+ Object.defineProperty(exports, "__esModule", { value: true });
14
+ exports.nodeCommand = exports.nodeDisableCommand = exports.nodeEnableCommand = void 0;
15
+ const commander_1 = require("commander");
16
+ const registry_1 = require("../clients/registry");
17
+ const config_1 = require("../lib/config");
18
+ const output_1 = require("../lib/output");
19
+ const cycle_toggle_1 = require("./cycle-toggle");
20
+ function attachToggleOptions(cmd) {
21
+ return cmd
22
+ .option("-p, --project-dir <dir>", "Project directory (default: cwd).")
23
+ .option("-g, --global", "Write to the global config (~/.ironbee/config.json) instead of the project.")
24
+ .option("--local", "Write to the gitignored project-local override (<project>/.ironbee/config.local.json). Mutually exclusive with --global.")
25
+ .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).`);
26
+ }
27
+ exports.nodeEnableCommand = attachToggleOptions(new commander_1.Command("enable"))
28
+ .description("Enable the Node.js runtime debug cycle. Writes a minimal `{ \"node\": {} }` block — code defaults (server/api/routes paths) flow in at runtime; `config.json` stays minimal. Refuses (warn + no-op) when the cycle is already enabled at this layer.")
29
+ .action((opts) => {
30
+ try {
31
+ const projectDir = opts.projectDir ?? process.cwd();
32
+ const target = (0, config_1.resolveConfigTargetFromFlags)(opts);
33
+ (0, cycle_toggle_1.applyEnableCycle)("node", projectDir, target, opts.client);
34
+ }
35
+ catch (e) {
36
+ console.error(`${output_1.pc.red("✗")} ${e instanceof Error ? e.message : e}`);
37
+ process.exit(1);
38
+ }
39
+ });
40
+ exports.nodeDisableCommand = attachToggleOptions(new commander_1.Command("disable"))
41
+ .description("Disable the Node.js runtime debug cycle. With no customizations + no lower-layer override, drops the entire `node` block. Otherwise writes `verifyPatterns: []` (load-bearing hard kill; preserves `alwaysRequired` / `evidencePaths` / `additionalVerifyPatterns`).")
42
+ .action((opts) => {
43
+ try {
44
+ const projectDir = opts.projectDir ?? process.cwd();
45
+ const target = (0, config_1.resolveConfigTargetFromFlags)(opts);
46
+ (0, cycle_toggle_1.applyDisableCycle)("node", projectDir, target, opts.client);
47
+ }
48
+ catch (e) {
49
+ console.error(`${output_1.pc.red("✗")} ${e instanceof Error ? e.message : e}`);
50
+ process.exit(1);
51
+ }
52
+ });
53
+ exports.nodeCommand = new commander_1.Command("node")
54
+ .description("Manage the Node.js runtime debug cycle (V8 inspector probes via the `node-devtools` MCP, `ndt_*` tools).")
55
+ .addCommand(exports.nodeEnableCommand)
56
+ .addCommand(exports.nodeDisableCommand);
57
+ //# sourceMappingURL=node.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"node.js","sourceRoot":"","sources":["../../src/commands/node.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;GAUG;;;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,iBAAiB,GAAY,mBAAmB,CAAC,IAAI,mBAAO,CAAC,QAAQ,CAAC,CAAC;KAC/E,WAAW,CAAC,sPAAsP,CAAC;KACnQ,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,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;IAC9D,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,kBAAkB,GAAY,mBAAmB,CAAC,IAAI,mBAAO,CAAC,SAAS,CAAC,CAAC;KACjF,WAAW,CAAC,sQAAsQ,CAAC;KACnR,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,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;IAC/D,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,WAAW,GAAY,IAAI,mBAAO,CAAC,MAAM,CAAC;KAClD,WAAW,CAAC,0GAA0G,CAAC;KACvH,UAAU,CAAC,yBAAiB,CAAC;KAC7B,UAAU,CAAC,0BAAkB,CAAC,CAAC"}
@@ -30,6 +30,7 @@
30
30
  * - Session lifecycle / activity / tool_call telemetry continues to
31
31
  * flow to the collector — only enforcement is suppressed.
32
32
  */
33
+ import { ConfigTarget } from "../lib/config";
33
34
  /**
34
35
  * Apply the `enable` flag to client artifacts and persist the config.
35
36
  * Order: artifacts → config (see file header for why).
@@ -37,11 +38,27 @@
37
38
  * Exported so both `enable-verification` and `disable-verification` commands
38
39
  * call the same code path; the only difference is the `enable` arg.
39
40
  *
41
+ * `target` selects which config layer to write:
42
+ * - `"project"` (default for the CLI) — committed `<project>/.ironbee/config.json`.
43
+ * - `"global"` (`-g` / `--global`) — `~/.ironbee/config.json`.
44
+ * - `"local"` (`--local`) — gitignored `<project>/.ironbee/config.local.json`.
45
+ *
40
46
  * `clientName` controls which clients receive new artifacts:
41
47
  * - "all" → every registered client
42
48
  * - <name> → just that one (throws on unknown name)
43
49
  * - undefined → detected clients; falls back to the first registered client
44
50
  * when nothing is detected (matches `install.ts`).
51
+ *
52
+ * Cross-layer awareness:
53
+ * - The no-op check uses both the targeted layer's value AND the merged
54
+ * effective value. If both already match `enable`, we bail (real no-op).
55
+ * - If the targeted layer already matches `enable` but the merged effective
56
+ * state disagrees, a higher-priority layer is shadowing the change. We
57
+ * don't touch artifacts — the user has another layer carrying the value;
58
+ * we print exactly which layer overrides and how to clear it. Without
59
+ * this guard, the function would silently no-op while leaving the
60
+ * installed artifacts in the shadowing layer's state, which is the
61
+ * surprising behavior we want to avoid.
45
62
  */
46
- export declare function applyVerificationToggle(enable: boolean, projectDir: string, useGlobal: boolean, clientName?: string): void;
63
+ export declare function applyVerificationToggle(enable: boolean, projectDir: string, target: ConfigTarget, clientName?: string): void;
47
64
  //# sourceMappingURL=verification-toggle.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"verification-toggle.d.ts","sourceRoot":"","sources":["../../src/commands/verification-toggle.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AAyCH;;;;;;;;;;;;GAYG;AACH,wBAAgB,uBAAuB,CACnC,MAAM,EAAE,OAAO,EACf,UAAU,EAAE,MAAM,EAClB,SAAS,EAAE,OAAO,EAClB,UAAU,CAAC,EAAE,MAAM,GACpB,IAAI,CAgDN"}
1
+ {"version":3,"file":"verification-toggle.d.ts","sourceRoot":"","sources":["../../src/commands/verification-toggle.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AAMH,OAAO,EAEH,YAAY,EAKf,MAAM,eAAe,CAAC;AA0EvB;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,wBAAgB,uBAAuB,CACnC,MAAM,EAAE,OAAO,EACf,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,YAAY,EACpB,UAAU,CAAC,EAAE,MAAM,GACpB,IAAI,CA2EN"}