@ironbee-ai/cli 0.8.2 → 0.8.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +6 -0
- package/README.md +6 -0
- package/dist/clients/claude/hooks/clear-verdict.d.ts.map +1 -1
- package/dist/clients/claude/hooks/clear-verdict.js +25 -4
- package/dist/clients/claude/hooks/clear-verdict.js.map +1 -1
- package/dist/clients/claude/hooks/require-verdict.d.ts.map +1 -1
- package/dist/clients/claude/hooks/require-verdict.js +21 -3
- package/dist/clients/claude/hooks/require-verdict.js.map +1 -1
- package/dist/clients/cursor/hooks/clear-verdict.d.ts.map +1 -1
- package/dist/clients/cursor/hooks/clear-verdict.js +31 -5
- package/dist/clients/cursor/hooks/clear-verdict.js.map +1 -1
- package/dist/clients/cursor/hooks/require-verdict.d.ts.map +1 -1
- package/dist/clients/cursor/hooks/require-verdict.js +24 -3
- package/dist/clients/cursor/hooks/require-verdict.js.map +1 -1
- package/dist/commands/backend-toggle.d.ts +20 -9
- package/dist/commands/backend-toggle.d.ts.map +1 -1
- package/dist/commands/backend-toggle.js +33 -26
- package/dist/commands/backend-toggle.js.map +1 -1
- package/dist/commands/config.d.ts +40 -5
- package/dist/commands/config.d.ts.map +1 -1
- package/dist/commands/config.js +67 -17
- package/dist/commands/config.js.map +1 -1
- package/dist/commands/disable-backend.d.ts.map +1 -1
- package/dist/commands/disable-backend.js +6 -2
- package/dist/commands/disable-backend.js.map +1 -1
- package/dist/commands/disable-verification.d.ts.map +1 -1
- package/dist/commands/disable-verification.js +5 -2
- package/dist/commands/disable-verification.js.map +1 -1
- package/dist/commands/enable-backend.d.ts.map +1 -1
- package/dist/commands/enable-backend.js +6 -2
- package/dist/commands/enable-backend.js.map +1 -1
- package/dist/commands/enable-verification.d.ts.map +1 -1
- package/dist/commands/enable-verification.js +5 -2
- package/dist/commands/enable-verification.js.map +1 -1
- package/dist/commands/verification-toggle.d.ts +18 -1
- package/dist/commands/verification-toggle.d.ts.map +1 -1
- package/dist/commands/verification-toggle.js +96 -21
- package/dist/commands/verification-toggle.js.map +1 -1
- package/dist/hooks/core/actions.d.ts +9 -0
- package/dist/hooks/core/actions.d.ts.map +1 -1
- package/dist/hooks/core/actions.js.map +1 -1
- package/dist/hooks/core/file-diff.d.ts +17 -0
- package/dist/hooks/core/file-diff.d.ts.map +1 -1
- package/dist/hooks/core/file-diff.js +72 -0
- package/dist/hooks/core/file-diff.js.map +1 -1
- package/dist/hooks/core/tool-use-stash.d.ts +7 -1
- package/dist/hooks/core/tool-use-stash.d.ts.map +1 -1
- package/dist/hooks/core/tool-use-stash.js.map +1 -1
- package/dist/lib/config.d.ts +87 -6
- package/dist/lib/config.d.ts.map +1 -1
- package/dist/lib/config.js +124 -29
- package/dist/lib/config.js.map +1 -1
- package/dist/lib/gitignore.d.ts +26 -11
- package/dist/lib/gitignore.d.ts.map +1 -1
- package/dist/lib/gitignore.js +71 -24
- package/dist/lib/gitignore.js.map +1 -1
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,11 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 0.8.3 (2026-05-09)
|
|
4
|
+
|
|
5
|
+
### Features
|
|
6
|
+
|
|
7
|
+
* **config:** optional .ironbee/config.local.json personal-override layer ([770c2f3](https://github.com/ironbee-ai/ironbee-cli/commit/770c2f333f5d1d9146aaafb6fd975c5966e1d681))
|
|
8
|
+
|
|
3
9
|
## 0.8.2 (2026-05-08)
|
|
4
10
|
|
|
5
11
|
### Features
|
package/README.md
CHANGED
|
@@ -222,6 +222,10 @@ IronBee loads config from two locations (project deep-merges over global):
|
|
|
222
222
|
|
|
223
223
|
"verification": {
|
|
224
224
|
"enable": false
|
|
225
|
+
},
|
|
226
|
+
|
|
227
|
+
"fileChange": {
|
|
228
|
+
"captureChangeset": true
|
|
225
229
|
}
|
|
226
230
|
}
|
|
227
231
|
```
|
|
@@ -235,6 +239,8 @@ IronBee loads config from two locations (project deep-merges over global):
|
|
|
235
239
|
| `ignoredVerifyPatterns` | Patterns to exclude from verification (checked first, applies to all cycles) | `[]` |
|
|
236
240
|
| `maxRetries` | Max retry attempts before allowing completion (single global counter regardless of how many cycles run) | `3` |
|
|
237
241
|
| `verification.enable` | Master switch for enforcement. **Inverse semantics from `recording`/`jobQueue`/`collector`** — verification is the core feature, opt-out via `enable: false`. When disabled, ironbee runs in monitoring-only mode (no enforcement hooks, skill, rule, or MCP servers; only session/activity/tool_call telemetry flows to the collector). | `true` |
|
|
242
|
+
| `fileChange.captureChangeset` | When `true`, every `file_change` event carries a hunks-only unified-diff `changeset` string (`@@` headers + `space`/`-`/`+` lines, no filename header — `file_path` already lives on the parent event). Off by default — the default `tool_input` whitelist deliberately strips file content from the wire; turning this on routes content through `file_change` instead. PreToolUse pre-reads the file when enabled so PostToolUse can produce a real before/after diff (Write/Edit on Claude; Write/StrReplace/Delete on Cursor). Skipped on binary content (NUL byte in first 4 KB). | `false` |
|
|
243
|
+
| `fileChange.maxChangesetBytes` | Hard cap on the `changeset` string size. Diffs over the cap are sliced on a UTF-8 byte boundary and end with a `\n... (truncated, N bytes omitted)\n` footer so the collector POST stays within typical reverse-proxy body limits. | `65536` (64 KB) |
|
|
238
244
|
|
|
239
245
|
> **Migrating from older versions:** the previous flat `verifyPatterns` / `additionalVerifyPatterns` at the top level is no longer supported. The config loader fails loudly on legacy shape — move them under `browser.*` (or the appropriate runtime under `backend.<runtime>.*`).
|
|
240
246
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"clear-verdict.d.ts","sourceRoot":"","sources":["../../../../src/clients/claude/hooks/clear-verdict.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;
|
|
1
|
+
{"version":3,"file":"clear-verdict.d.ts","sourceRoot":"","sources":["../../../../src/clients/claude/hooks/clear-verdict.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAmFH,wBAAsB,GAAG,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAgE3D"}
|
|
@@ -15,6 +15,7 @@
|
|
|
15
15
|
*/
|
|
16
16
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
17
|
exports.run = run;
|
|
18
|
+
const fs_1 = require("fs");
|
|
18
19
|
const clear_verdict_1 = require("../../../hooks/core/clear-verdict");
|
|
19
20
|
const actions_1 = require("../../../hooks/core/actions");
|
|
20
21
|
const session_state_1 = require("../../../hooks/core/session-state");
|
|
@@ -29,27 +30,41 @@ function deriveChangeFacts(input, sessionId) {
|
|
|
29
30
|
if (!ti) {
|
|
30
31
|
return null;
|
|
31
32
|
}
|
|
33
|
+
const stash = input.tool_use_id
|
|
34
|
+
? (0, tool_use_stash_1.consumeToolUseData)(sessionId, input.tool_use_id)
|
|
35
|
+
: null;
|
|
32
36
|
if (tool === "Edit") {
|
|
33
37
|
const oldStr = ti.old_string ?? "";
|
|
34
38
|
const newStr = ti.new_string ?? "";
|
|
35
39
|
const counts = (0, file_diff_1.diffLineCounts)(oldStr, newStr);
|
|
36
|
-
return { tool_name: "Edit", operation: "update", lines_added: counts.added, lines_removed: counts.removed };
|
|
40
|
+
return { tool_name: "Edit", operation: "update", lines_added: counts.added, lines_removed: counts.removed, stash };
|
|
37
41
|
}
|
|
38
42
|
if (tool === "Write") {
|
|
39
43
|
const content = ti.content ?? "";
|
|
40
|
-
const stash = input.tool_use_id
|
|
41
|
-
? (0, tool_use_stash_1.consumeToolUseData)(sessionId, input.tool_use_id)
|
|
42
|
-
: null;
|
|
43
44
|
const fileExisted = stash?.file_existed ?? false;
|
|
44
45
|
return {
|
|
45
46
|
tool_name: "Write",
|
|
46
47
|
operation: fileExisted ? "update" : "create",
|
|
47
48
|
lines_added: (0, file_diff_1.countLines)(content),
|
|
48
49
|
lines_removed: fileExisted ? null : 0,
|
|
50
|
+
stash,
|
|
49
51
|
};
|
|
50
52
|
}
|
|
51
53
|
return null;
|
|
52
54
|
}
|
|
55
|
+
function buildChangeset(filePath, stash, maxBytes) {
|
|
56
|
+
const priorContent = stash?.prior_content ?? "";
|
|
57
|
+
let postContent;
|
|
58
|
+
try {
|
|
59
|
+
postContent = (0, fs_1.existsSync)(filePath) ? (0, fs_1.readFileSync)(filePath, "utf-8") : "";
|
|
60
|
+
}
|
|
61
|
+
catch (e) {
|
|
62
|
+
logger_1.logger.debug(`failed to read post-edit content of ${filePath} for changeset: ${e}`);
|
|
63
|
+
return undefined;
|
|
64
|
+
}
|
|
65
|
+
const diff = (0, file_diff_1.createUnifiedDiff)(priorContent, postContent, maxBytes);
|
|
66
|
+
return diff ?? undefined;
|
|
67
|
+
}
|
|
53
68
|
async function run(projectDir) {
|
|
54
69
|
let sessionId = "default";
|
|
55
70
|
let input;
|
|
@@ -95,6 +110,12 @@ async function run(projectDir) {
|
|
|
95
110
|
activity_id: (0, session_state_1.getActiveActivityId)(sessionDir),
|
|
96
111
|
fix_id: (0, session_state_1.getActiveFixId)(sessionDir),
|
|
97
112
|
};
|
|
113
|
+
if ((0, config_1.getCaptureFileChangeset)(config)) {
|
|
114
|
+
const changeset = buildChangeset(writtenFile, facts.stash, (0, config_1.getMaxChangesetBytes)(config));
|
|
115
|
+
if (changeset !== undefined) {
|
|
116
|
+
entry.changeset = changeset;
|
|
117
|
+
}
|
|
118
|
+
}
|
|
98
119
|
await (0, actions_1.appendAction)(actionsFile, entry);
|
|
99
120
|
(0, clear_verdict_1.runClearVerdict)({
|
|
100
121
|
verdictFile: `${projectDir}/.ironbee/sessions/${sessionId}/verdict.json`,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"clear-verdict.js","sourceRoot":"","sources":["../../../../src/clients/claude/hooks/clear-verdict.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;GAaG;;
|
|
1
|
+
{"version":3,"file":"clear-verdict.js","sourceRoot":"","sources":["../../../../src/clients/claude/hooks/clear-verdict.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"require-verdict.d.ts","sourceRoot":"","sources":["../../../../src/clients/claude/hooks/require-verdict.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;
|
|
1
|
+
{"version":3,"file":"require-verdict.d.ts","sourceRoot":"","sources":["../../../../src/clients/claude/hooks/require-verdict.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAmBH,wBAAsB,GAAG,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAmD3D"}
|
|
@@ -21,6 +21,7 @@ const fs_1 = require("fs");
|
|
|
21
21
|
const actions_1 = require("../../../hooks/core/actions");
|
|
22
22
|
const activity_1 = require("../../../hooks/core/activity");
|
|
23
23
|
const tool_use_stash_1 = require("../../../hooks/core/tool-use-stash");
|
|
24
|
+
const config_1 = require("../../../lib/config");
|
|
24
25
|
const logger_1 = require("../../../lib/logger");
|
|
25
26
|
const stdin_1 = require("../../../lib/stdin");
|
|
26
27
|
async function run(projectDir) {
|
|
@@ -46,9 +47,26 @@ Then you can edit code to fix the issues.
|
|
|
46
47
|
`);
|
|
47
48
|
process.exit(2);
|
|
48
49
|
}
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
(0,
|
|
50
|
+
const filePath = input.tool_input?.file_path;
|
|
51
|
+
if (filePath && input.tool_use_id) {
|
|
52
|
+
const config = (0, config_1.loadConfig)(projectDir);
|
|
53
|
+
const captureChangeset = (0, config_1.getCaptureFileChangeset)(config);
|
|
54
|
+
const fileExisted = (0, fs_1.existsSync)(filePath);
|
|
55
|
+
// We always stash for Write so PostToolUse can label create vs update.
|
|
56
|
+
// For Edit we only stash when changeset capture is on — there's no
|
|
57
|
+
// operation-derivation need otherwise (Edit is always "update").
|
|
58
|
+
if (input.tool_name === "Write" || (input.tool_name === "Edit" && captureChangeset)) {
|
|
59
|
+
const state = { file_existed: fileExisted };
|
|
60
|
+
if (captureChangeset && fileExisted) {
|
|
61
|
+
try {
|
|
62
|
+
state.prior_content = (0, fs_1.readFileSync)(filePath, "utf-8");
|
|
63
|
+
}
|
|
64
|
+
catch (e) {
|
|
65
|
+
logger_1.logger.debug(`failed to pre-read ${filePath} for changeset capture: ${e}`);
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
(0, tool_use_stash_1.stashToolUseData)(sessionId, input.tool_use_id, state);
|
|
69
|
+
}
|
|
52
70
|
}
|
|
53
71
|
await (0, activity_1.startActivity)({ sessionDir, actionsFile, source: "pre_tool_use" });
|
|
54
72
|
process.exit(0);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"require-verdict.js","sourceRoot":"","sources":["../../../../src/clients/claude/hooks/require-verdict.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;GAeG;;
|
|
1
|
+
{"version":3,"file":"require-verdict.js","sourceRoot":"","sources":["../../../../src/clients/claude/hooks/require-verdict.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;GAeG;;AAmBH,kBAmDC;AApED,2BAA8C;AAC9C,yDAA2E;AAC3E,2DAA6D;AAC7D,uEAAsF;AACtF,gDAAyF;AACzF,gDAAyD;AACzD,8CAA+C;AAWxC,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,UAAU,GAAW,GAAG,UAAU,sBAAsB,SAAS,EAAE,CAAC;IAC1E,MAAM,WAAW,GAAW,GAAG,UAAU,gBAAgB,CAAC;IAE1D,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,MAAM,QAAQ,GAAuB,KAAK,CAAC,UAAU,EAAE,SAAS,CAAC;IACjE,IAAI,QAAQ,IAAI,KAAK,CAAC,WAAW,EAAE,CAAC;QAChC,MAAM,MAAM,GAAkB,IAAA,mBAAU,EAAC,UAAU,CAAC,CAAC;QACrD,MAAM,gBAAgB,GAAY,IAAA,gCAAuB,EAAC,MAAM,CAAC,CAAC;QAClE,MAAM,WAAW,GAAY,IAAA,eAAU,EAAC,QAAQ,CAAC,CAAC;QAElD,uEAAuE;QACvE,mEAAmE;QACnE,iEAAiE;QACjE,IAAI,KAAK,CAAC,SAAS,KAAK,OAAO,IAAI,CAAC,KAAK,CAAC,SAAS,KAAK,MAAM,IAAI,gBAAgB,CAAC,EAAE,CAAC;YAClF,MAAM,KAAK,GAAmB,EAAE,YAAY,EAAE,WAAW,EAAE,CAAC;YAC5D,IAAI,gBAAgB,IAAI,WAAW,EAAE,CAAC;gBAClC,IAAI,CAAC;oBACD,KAAK,CAAC,aAAa,GAAG,IAAA,iBAAY,EAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;gBAC1D,CAAC;gBAAC,OAAO,CAAU,EAAE,CAAC;oBAClB,eAAM,CAAC,KAAK,CAAC,sBAAsB,QAAQ,2BAA2B,CAAC,EAAE,CAAC,CAAC;gBAC/E,CAAC;YACL,CAAC;YACD,IAAA,iCAAgB,EAAC,SAAS,EAAE,KAAK,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC;QAC1D,CAAC;IACL,CAAC;IAED,MAAM,IAAA,wBAAa,EAAC,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,EAAE,cAAc,EAAE,CAAC,CAAC;IAEzE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACpB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"clear-verdict.d.ts","sourceRoot":"","sources":["../../../../src/clients/cursor/hooks/clear-verdict.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;
|
|
1
|
+
{"version":3,"file":"clear-verdict.d.ts","sourceRoot":"","sources":["../../../../src/clients/cursor/hooks/clear-verdict.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AA6FH,wBAAsB,GAAG,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAiE3D"}
|
|
@@ -19,6 +19,7 @@
|
|
|
19
19
|
*/
|
|
20
20
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
21
21
|
exports.run = run;
|
|
22
|
+
const fs_1 = require("fs");
|
|
22
23
|
const clear_verdict_1 = require("../../../hooks/core/clear-verdict");
|
|
23
24
|
const actions_1 = require("../../../hooks/core/actions");
|
|
24
25
|
const session_state_1 = require("../../../hooks/core/session-state");
|
|
@@ -33,30 +34,49 @@ function deriveChangeFacts(input, sessionId) {
|
|
|
33
34
|
if (!ti) {
|
|
34
35
|
return null;
|
|
35
36
|
}
|
|
37
|
+
const stash = input.tool_use_id
|
|
38
|
+
? (0, tool_use_stash_1.consumeToolUseData)(sessionId, input.tool_use_id)
|
|
39
|
+
: null;
|
|
36
40
|
if (tool === "StrReplace") {
|
|
37
41
|
const oldStr = ti.old_string ?? "";
|
|
38
42
|
const newStr = ti.new_string ?? "";
|
|
39
43
|
const counts = (0, file_diff_1.diffLineCounts)(oldStr, newStr);
|
|
40
|
-
return { tool_name: "StrReplace", operation: "update", lines_added: counts.added, lines_removed: counts.removed };
|
|
44
|
+
return { tool_name: "StrReplace", operation: "update", lines_added: counts.added, lines_removed: counts.removed, stash };
|
|
41
45
|
}
|
|
42
46
|
if (tool === "Write") {
|
|
43
47
|
const contents = ti.contents ?? "";
|
|
44
|
-
const stash = input.tool_use_id
|
|
45
|
-
? (0, tool_use_stash_1.consumeToolUseData)(sessionId, input.tool_use_id)
|
|
46
|
-
: null;
|
|
47
48
|
const fileExisted = stash?.file_existed ?? false;
|
|
48
49
|
return {
|
|
49
50
|
tool_name: "Write",
|
|
50
51
|
operation: fileExisted ? "update" : "create",
|
|
51
52
|
lines_added: (0, file_diff_1.countLines)(contents),
|
|
52
53
|
lines_removed: fileExisted ? null : 0,
|
|
54
|
+
stash,
|
|
53
55
|
};
|
|
54
56
|
}
|
|
55
57
|
if (tool === "Delete") {
|
|
56
|
-
return { tool_name: "Delete", operation: "delete", lines_added: 0, lines_removed: null };
|
|
58
|
+
return { tool_name: "Delete", operation: "delete", lines_added: 0, lines_removed: null, stash };
|
|
57
59
|
}
|
|
58
60
|
return null;
|
|
59
61
|
}
|
|
62
|
+
function buildChangeset(filePath, operation, stash, maxBytes) {
|
|
63
|
+
const priorContent = stash?.prior_content ?? "";
|
|
64
|
+
let postContent;
|
|
65
|
+
if (operation === "delete") {
|
|
66
|
+
postContent = "";
|
|
67
|
+
}
|
|
68
|
+
else {
|
|
69
|
+
try {
|
|
70
|
+
postContent = (0, fs_1.existsSync)(filePath) ? (0, fs_1.readFileSync)(filePath, "utf-8") : "";
|
|
71
|
+
}
|
|
72
|
+
catch (e) {
|
|
73
|
+
logger_1.logger.debug(`failed to read post-edit content of ${filePath} for changeset: ${e}`);
|
|
74
|
+
return undefined;
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
const diff = (0, file_diff_1.createUnifiedDiff)(priorContent, postContent, maxBytes);
|
|
78
|
+
return diff ?? undefined;
|
|
79
|
+
}
|
|
60
80
|
async function run(projectDir) {
|
|
61
81
|
let input;
|
|
62
82
|
try {
|
|
@@ -101,6 +121,12 @@ async function run(projectDir) {
|
|
|
101
121
|
activity_id: (0, session_state_1.getActiveActivityId)(sessionDir),
|
|
102
122
|
fix_id: (0, session_state_1.getActiveFixId)(sessionDir),
|
|
103
123
|
};
|
|
124
|
+
if ((0, config_1.getCaptureFileChangeset)(config)) {
|
|
125
|
+
const changeset = buildChangeset(writtenFile, facts.operation, facts.stash, (0, config_1.getMaxChangesetBytes)(config));
|
|
126
|
+
if (changeset !== undefined) {
|
|
127
|
+
entry.changeset = changeset;
|
|
128
|
+
}
|
|
129
|
+
}
|
|
104
130
|
await (0, actions_1.appendAction)(actionsFile, entry);
|
|
105
131
|
(0, clear_verdict_1.runClearVerdict)({
|
|
106
132
|
verdictFile: `${sessionDir}/verdict.json`,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"clear-verdict.js","sourceRoot":"","sources":["../../../../src/clients/cursor/hooks/clear-verdict.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;GAiBG;;
|
|
1
|
+
{"version":3,"file":"clear-verdict.js","sourceRoot":"","sources":["../../../../src/clients/cursor/hooks/clear-verdict.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"require-verdict.d.ts","sourceRoot":"","sources":["../../../../src/clients/cursor/hooks/require-verdict.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;
|
|
1
|
+
{"version":3,"file":"require-verdict.d.ts","sourceRoot":"","sources":["../../../../src/clients/cursor/hooks/require-verdict.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AA0BH,wBAAsB,GAAG,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CA+D3D"}
|
|
@@ -20,6 +20,7 @@ const fs_1 = require("fs");
|
|
|
20
20
|
const actions_1 = require("../../../hooks/core/actions");
|
|
21
21
|
const activity_1 = require("../../../hooks/core/activity");
|
|
22
22
|
const tool_use_stash_1 = require("../../../hooks/core/tool-use-stash");
|
|
23
|
+
const config_1 = require("../../../lib/config");
|
|
23
24
|
const logger_1 = require("../../../lib/logger");
|
|
24
25
|
const stdin_1 = require("../../../lib/stdin");
|
|
25
26
|
async function run(projectDir) {
|
|
@@ -52,9 +53,29 @@ Then you can edit code to fix the issues.`,
|
|
|
52
53
|
process.exit(2);
|
|
53
54
|
return;
|
|
54
55
|
}
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
(0,
|
|
56
|
+
const filePath = input.tool_input?.path;
|
|
57
|
+
if (filePath && input.tool_use_id) {
|
|
58
|
+
const config = (0, config_1.loadConfig)(projectDir);
|
|
59
|
+
const captureChangeset = (0, config_1.getCaptureFileChangeset)(config);
|
|
60
|
+
const fileExisted = (0, fs_1.existsSync)(filePath);
|
|
61
|
+
// Always stash for Write so PostToolUse can label create vs update.
|
|
62
|
+
// For StrReplace / Delete we only stash when changeset capture is on
|
|
63
|
+
// (StrReplace is always "update" and Delete is always "delete" — no
|
|
64
|
+
// operation-derivation need otherwise).
|
|
65
|
+
const isWrite = input.tool_name === "Write";
|
|
66
|
+
const isOtherEdit = input.tool_name === "StrReplace" || input.tool_name === "Delete";
|
|
67
|
+
if (isWrite || (isOtherEdit && captureChangeset)) {
|
|
68
|
+
const state = { file_existed: fileExisted };
|
|
69
|
+
if (captureChangeset && fileExisted) {
|
|
70
|
+
try {
|
|
71
|
+
state.prior_content = (0, fs_1.readFileSync)(filePath, "utf-8");
|
|
72
|
+
}
|
|
73
|
+
catch (e) {
|
|
74
|
+
logger_1.logger.debug(`failed to pre-read ${filePath} for changeset capture: ${e}`);
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
(0, tool_use_stash_1.stashToolUseData)(sessionId, input.tool_use_id, state);
|
|
78
|
+
}
|
|
58
79
|
}
|
|
59
80
|
await (0, activity_1.startActivity)({ sessionDir, actionsFile, source: "pre_tool_use" });
|
|
60
81
|
const output = { permission: "allow" };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"require-verdict.js","sourceRoot":"","sources":["../../../../src/clients/cursor/hooks/require-verdict.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;GAcG;;
|
|
1
|
+
{"version":3,"file":"require-verdict.js","sourceRoot":"","sources":["../../../../src/clients/cursor/hooks/require-verdict.ts"],"names":[],"mappings":"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"}
|
|
@@ -16,30 +16,41 @@
|
|
|
16
16
|
* Both throw when `<runtime>` isn't in the registered runtime set
|
|
17
17
|
* (today: just `node`); callers handle the error and exit.
|
|
18
18
|
*/
|
|
19
|
+
import { ConfigTarget } from "../lib/config";
|
|
19
20
|
export declare function knownRuntimes(): string[];
|
|
20
21
|
export declare function assertKnownRuntime(runtime: string): void;
|
|
21
22
|
/**
|
|
22
23
|
* Enable a backend runtime: write default `verifyPatterns` + splice the
|
|
23
24
|
* runtime fragment into installed skill/rule/command md files.
|
|
24
25
|
*
|
|
25
|
-
* No-op + warning when patterns are already populated
|
|
26
|
-
* `disable-backend` first to reset, since we don't
|
|
27
|
-
* custom additions).
|
|
26
|
+
* No-op + warning when patterns are already populated **in the targeted
|
|
27
|
+
* layer** (the user must `disable-backend` first to reset, since we don't
|
|
28
|
+
* want to clobber their custom additions). Higher-priority layers' patterns
|
|
29
|
+
* are not consulted by this check — they ride along through `loadConfig`
|
|
30
|
+
* at runtime, but they don't shadow our writes the way they do for boolean
|
|
31
|
+
* `verification.enable` flips.
|
|
32
|
+
*
|
|
33
|
+
* `target` selects which config layer to write:
|
|
34
|
+
* - `"project"` (default) — committed `<project>/.ironbee/config.json`.
|
|
35
|
+
* - `"global"` — `~/.ironbee/config.json`.
|
|
36
|
+
* - `"local"` — gitignored `<project>/.ironbee/config.local.json`.
|
|
28
37
|
*
|
|
29
38
|
* `clientName`: optional filter for which clients' md files to update.
|
|
30
39
|
* Same semantics as `applyVerificationToggle` — `"all"` / `<name>` /
|
|
31
40
|
* undefined (default: every registered client; per-file existsSync gate
|
|
32
41
|
* skips ones without installed artifacts).
|
|
33
42
|
*/
|
|
34
|
-
export declare function applyEnableBackend(runtime: string, projectDir: string, clientName?: string): void;
|
|
43
|
+
export declare function applyEnableBackend(runtime: string, projectDir: string, target: ConfigTarget, clientName?: string): void;
|
|
35
44
|
/**
|
|
36
|
-
* Disable a backend runtime: reset `verifyPatterns` to `[]`
|
|
37
|
-
* runtime fragment in installed
|
|
45
|
+
* Disable a backend runtime: reset `verifyPatterns` to `[]` in the
|
|
46
|
+
* targeted layer and reset the runtime fragment in installed
|
|
47
|
+
* skill/rule/command md files.
|
|
38
48
|
*
|
|
39
49
|
* Customizations of `alwaysRequired`, `evidencePaths`, and
|
|
40
|
-
* `additionalVerifyPatterns` are preserved
|
|
50
|
+
* `additionalVerifyPatterns` are preserved (we only touch `verifyPatterns`).
|
|
51
|
+
* Idempotent — no-op when the targeted layer has no patterns to clear.
|
|
41
52
|
*
|
|
42
|
-
* `clientName
|
|
53
|
+
* `target` / `clientName` semantics match `applyEnableBackend`.
|
|
43
54
|
*/
|
|
44
|
-
export declare function applyDisableBackend(runtime: string, projectDir: string, clientName?: string): void;
|
|
55
|
+
export declare function applyDisableBackend(runtime: string, projectDir: string, target: ConfigTarget, clientName?: string): void;
|
|
45
56
|
//# sourceMappingURL=backend-toggle.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"backend-toggle.d.ts","sourceRoot":"","sources":["../../src/commands/backend-toggle.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;
|
|
1
|
+
{"version":3,"file":"backend-toggle.d.ts","sourceRoot":"","sources":["../../src/commands/backend-toggle.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAQH,OAAO,EAAmB,YAAY,EAA0C,MAAM,eAAe,CAAC;AAyCtG,wBAAgB,aAAa,IAAI,MAAM,EAAE,CAWxC;AAED,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAKxD;AAqCD;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,kBAAkB,CAC9B,OAAO,EAAE,MAAM,EACf,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,YAAY,EACpB,UAAU,CAAC,EAAE,MAAM,GACpB,IAAI,CAgDN;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,mBAAmB,CAC/B,OAAO,EAAE,MAAM,EACf,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,YAAY,EACpB,UAAU,CAAC,EAAE,MAAM,GACpB,IAAI,CAwBN"}
|
|
@@ -68,10 +68,7 @@ function assertKnownRuntime(runtime) {
|
|
|
68
68
|
throw new Error(`Unknown runtime '${runtime}'. Available: ${known.join(", ")}.`);
|
|
69
69
|
}
|
|
70
70
|
}
|
|
71
|
-
function
|
|
72
|
-
return (0, path_1.join)((0, path_1.resolve)(projectDir), ".ironbee", "config.json");
|
|
73
|
-
}
|
|
74
|
-
function readProjectConfig(configPath) {
|
|
71
|
+
function readLayerConfig(configPath) {
|
|
75
72
|
if (!(0, fs_1.existsSync)(configPath)) {
|
|
76
73
|
return {};
|
|
77
74
|
}
|
|
@@ -80,10 +77,10 @@ function readProjectConfig(configPath) {
|
|
|
80
77
|
}
|
|
81
78
|
catch (e) {
|
|
82
79
|
logger_1.logger.debug(`failed to read ${configPath}: ${e}`);
|
|
83
|
-
throw new Error(`
|
|
80
|
+
throw new Error(`Config at ${configPath} is not valid JSON: ${e instanceof Error ? e.message : e}`);
|
|
84
81
|
}
|
|
85
82
|
}
|
|
86
|
-
function
|
|
83
|
+
function writeLayerConfig(configPath, config) {
|
|
87
84
|
(0, fs_1.mkdirSync)((0, path_1.join)(configPath, ".."), { recursive: true });
|
|
88
85
|
(0, fs_1.writeFileSync)(configPath, JSON.stringify(config, null, 2) + "\n");
|
|
89
86
|
}
|
|
@@ -108,27 +105,35 @@ function clientFilterForRuntime(projectDir, clientName) {
|
|
|
108
105
|
* Enable a backend runtime: write default `verifyPatterns` + splice the
|
|
109
106
|
* runtime fragment into installed skill/rule/command md files.
|
|
110
107
|
*
|
|
111
|
-
* No-op + warning when patterns are already populated
|
|
112
|
-
* `disable-backend` first to reset, since we don't
|
|
113
|
-
* custom additions).
|
|
108
|
+
* No-op + warning when patterns are already populated **in the targeted
|
|
109
|
+
* layer** (the user must `disable-backend` first to reset, since we don't
|
|
110
|
+
* want to clobber their custom additions). Higher-priority layers' patterns
|
|
111
|
+
* are not consulted by this check — they ride along through `loadConfig`
|
|
112
|
+
* at runtime, but they don't shadow our writes the way they do for boolean
|
|
113
|
+
* `verification.enable` flips.
|
|
114
|
+
*
|
|
115
|
+
* `target` selects which config layer to write:
|
|
116
|
+
* - `"project"` (default) — committed `<project>/.ironbee/config.json`.
|
|
117
|
+
* - `"global"` — `~/.ironbee/config.json`.
|
|
118
|
+
* - `"local"` — gitignored `<project>/.ironbee/config.local.json`.
|
|
114
119
|
*
|
|
115
120
|
* `clientName`: optional filter for which clients' md files to update.
|
|
116
121
|
* Same semantics as `applyVerificationToggle` — `"all"` / `<name>` /
|
|
117
122
|
* undefined (default: every registered client; per-file existsSync gate
|
|
118
123
|
* skips ones without installed artifacts).
|
|
119
124
|
*/
|
|
120
|
-
function applyEnableBackend(runtime, projectDir, clientName) {
|
|
125
|
+
function applyEnableBackend(runtime, projectDir, target, clientName) {
|
|
121
126
|
assertKnownRuntime(runtime);
|
|
122
|
-
const configPath =
|
|
123
|
-
const config =
|
|
127
|
+
const configPath = (0, config_1.getTargetConfigPath)(target, projectDir);
|
|
128
|
+
const config = readLayerConfig(configPath);
|
|
124
129
|
if (!config.backend) {
|
|
125
130
|
config.backend = {};
|
|
126
131
|
}
|
|
127
132
|
const block = config.backend[runtime] ?? {};
|
|
128
133
|
const existing = Array.isArray(block.verifyPatterns) ? block.verifyPatterns : [];
|
|
129
134
|
if (existing.length > 0) {
|
|
130
|
-
console.log(`${output_1.pc.yellow("⚠")} ${runtime} backend is already enabled in ${output_1.pc.dim(configPath)}.\n` +
|
|
131
|
-
` Run ${output_1.pc.cyan(`ironbee disable-backend ${runtime}`)} first, or empty the verifyPatterns array manually,\n` +
|
|
135
|
+
console.log(`${output_1.pc.yellow("⚠")} ${runtime} backend is already enabled in ${target} config (${output_1.pc.dim(configPath)}).\n` +
|
|
136
|
+
` Run ${output_1.pc.cyan(`ironbee disable-backend ${runtime}${target === "project" ? "" : ` --${target}`}`)} first, or empty the verifyPatterns array manually,\n` +
|
|
132
137
|
` then re-run enable-backend to re-apply defaults.`);
|
|
133
138
|
return;
|
|
134
139
|
}
|
|
@@ -138,13 +143,13 @@ function applyEnableBackend(runtime, projectDir, clientName) {
|
|
|
138
143
|
}
|
|
139
144
|
block.verifyPatterns = [...defaults];
|
|
140
145
|
config.backend[runtime] = block;
|
|
141
|
-
|
|
146
|
+
writeLayerConfig(configPath, config);
|
|
142
147
|
// Splice the runtime fragment into installed md files (skill/rule/command).
|
|
143
148
|
// `clientName` narrows the iteration; without it we sweep every registered
|
|
144
149
|
// client and rely on existsSync to skip ones without installed artifacts.
|
|
145
150
|
const clientFilter = clientFilterForRuntime(projectDir, clientName);
|
|
146
151
|
const updatedFiles = (0, runtime_section_1.applyRuntimeToProjectFiles)(projectDir, runtime, true, fragmentsDirFor, clientFilter);
|
|
147
|
-
console.log(`${output_1.pc.green("✓")} Enabled ${output_1.pc.bold(runtime)} backend verification in ${output_1.pc.dim(configPath)}.`);
|
|
152
|
+
console.log(`${output_1.pc.green("✓")} Enabled ${output_1.pc.bold(runtime)} backend verification in ${target} config (${output_1.pc.dim(configPath)}).`);
|
|
148
153
|
console.log(` ${output_1.pc.dim("Patterns applied to backend." + runtime + ".verifyPatterns:")}`);
|
|
149
154
|
for (const p of defaults) {
|
|
150
155
|
console.log(` ${output_1.pc.dim("- " + p)}`);
|
|
@@ -158,29 +163,31 @@ function applyEnableBackend(runtime, projectDir, clientName) {
|
|
|
158
163
|
console.log(`\n ${output_1.pc.dim("Edit the patterns to match your project, or add overrides via")} ${output_1.pc.cyan(`backend.${runtime}.additionalVerifyPatterns`)}${output_1.pc.dim(".")}`);
|
|
159
164
|
}
|
|
160
165
|
/**
|
|
161
|
-
* Disable a backend runtime: reset `verifyPatterns` to `[]`
|
|
162
|
-
* runtime fragment in installed
|
|
166
|
+
* Disable a backend runtime: reset `verifyPatterns` to `[]` in the
|
|
167
|
+
* targeted layer and reset the runtime fragment in installed
|
|
168
|
+
* skill/rule/command md files.
|
|
163
169
|
*
|
|
164
170
|
* Customizations of `alwaysRequired`, `evidencePaths`, and
|
|
165
|
-
* `additionalVerifyPatterns` are preserved
|
|
171
|
+
* `additionalVerifyPatterns` are preserved (we only touch `verifyPatterns`).
|
|
172
|
+
* Idempotent — no-op when the targeted layer has no patterns to clear.
|
|
166
173
|
*
|
|
167
|
-
* `clientName
|
|
174
|
+
* `target` / `clientName` semantics match `applyEnableBackend`.
|
|
168
175
|
*/
|
|
169
|
-
function applyDisableBackend(runtime, projectDir, clientName) {
|
|
176
|
+
function applyDisableBackend(runtime, projectDir, target, clientName) {
|
|
170
177
|
assertKnownRuntime(runtime);
|
|
171
|
-
const configPath =
|
|
172
|
-
const config =
|
|
178
|
+
const configPath = (0, config_1.getTargetConfigPath)(target, projectDir);
|
|
179
|
+
const config = readLayerConfig(configPath);
|
|
173
180
|
const block = config.backend?.[runtime];
|
|
174
181
|
const currentPatterns = Array.isArray(block?.verifyPatterns) ? block.verifyPatterns : [];
|
|
175
182
|
if (block === undefined || currentPatterns.length === 0) {
|
|
176
|
-
console.log(`${output_1.pc.dim("·")} ${runtime} backend already disabled (no-op).`);
|
|
183
|
+
console.log(`${output_1.pc.dim("·")} ${runtime} backend already disabled in ${target} config (no-op).`);
|
|
177
184
|
return;
|
|
178
185
|
}
|
|
179
186
|
block.verifyPatterns = [];
|
|
180
|
-
|
|
187
|
+
writeLayerConfig(configPath, config);
|
|
181
188
|
const clientFilter = clientFilterForRuntime(projectDir, clientName);
|
|
182
189
|
const updatedFiles = (0, runtime_section_1.applyRuntimeToProjectFiles)(projectDir, runtime, false, fragmentsDirFor, clientFilter);
|
|
183
|
-
console.log(`${output_1.pc.green("✓")} Disabled ${output_1.pc.bold(runtime)} backend verification in ${output_1.pc.dim(configPath)}.`);
|
|
190
|
+
console.log(`${output_1.pc.green("✓")} Disabled ${output_1.pc.bold(runtime)} backend verification in ${target} config (${output_1.pc.dim(configPath)}).`);
|
|
184
191
|
console.log(` ${output_1.pc.dim("Customizations of alwaysRequired, evidencePaths, additionalVerifyPatterns are preserved.")}`);
|
|
185
192
|
if (updatedFiles.length > 0) {
|
|
186
193
|
console.log(` ${output_1.pc.dim("Reset agent guidance for the runtime block in:")}`);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"backend-toggle.js","sourceRoot":"","sources":["../../src/commands/backend-toggle.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;GAiBG;;AAiDH,sCAWC;AAED,gDAKC;
|
|
1
|
+
{"version":3,"file":"backend-toggle.js","sourceRoot":"","sources":["../../src/commands/backend-toggle.ts"],"names":[],"mappings":"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"}
|