carrick 0.3.111 → 0.3.112
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/bin/carrick.mjs +3 -0
- package/dist/contract.d.ts +6 -0
- package/dist/contract.js +5 -0
- package/dist/contract.js.map +1 -1
- package/dist/hook/post-edit.js +11 -2
- package/dist/hook/post-edit.js.map +1 -1
- package/dist/hook/post-read.d.ts +2 -0
- package/dist/hook/post-read.js +89 -0
- package/dist/hook/post-read.js.map +1 -0
- package/dist/hook/reuse.d.ts +24 -0
- package/dist/hook/reuse.js +58 -2
- package/dist/hook/reuse.js.map +1 -1
- package/dist/init/settings.js +6 -0
- package/dist/init/settings.js.map +1 -1
- package/dist/render.d.ts +22 -2
- package/dist/render.js +53 -2
- package/dist/render.js.map +1 -1
- package/package.json +6 -6
- package/plugin/.claude-plugin/plugin.json +1 -1
- package/plugin/hooks/hooks.json +10 -0
- package/sidecar/dist/src/capture/check-probe.d.ts +8 -0
- package/sidecar/dist/src/capture/check-probe.js +9 -1
- package/sidecar/dist/src/capture/self-check.d.ts +20 -1
- package/sidecar/dist/src/capture/self-check.js +30 -11
- package/sidecar/dist/src/type-inferrer.d.ts +61 -1
- package/sidecar/dist/src/type-inferrer.js +299 -23
package/bin/carrick.mjs
CHANGED
|
@@ -37,6 +37,7 @@ if (nodeMajor() < NODE_FLOOR) {
|
|
|
37
37
|
|
|
38
38
|
const HOOKS = {
|
|
39
39
|
"post-edit": "../dist/hook/post-edit.js",
|
|
40
|
+
"post-read": "../dist/hook/post-read.js",
|
|
40
41
|
"session-start": "../dist/hook/session-start.js",
|
|
41
42
|
stop: "../dist/hook/stop.js",
|
|
42
43
|
"user-prompt": "../dist/hook/user-prompt.js",
|
|
@@ -288,6 +289,8 @@ function extraHelp() {
|
|
|
288
289
|
" that speaks LSP",
|
|
289
290
|
" hook post-edit PostToolUse hook for either host (reads the",
|
|
290
291
|
" tool payload on stdin)",
|
|
292
|
+
" hook post-read Claude Code PostToolUse hook for Read (who",
|
|
293
|
+
" depends on the file, once per file per session)",
|
|
291
294
|
" hook session-start Claude Code SessionStart hook",
|
|
292
295
|
" hook stop Claude Code Stop hook (one reuse nudge per",
|
|
293
296
|
" task, silent when the task added no function)",
|
package/dist/contract.d.ts
CHANGED
|
@@ -130,6 +130,12 @@ export type CheckResult = {
|
|
|
130
130
|
* Absent only on a read that did not ask for a re-check.
|
|
131
131
|
*/
|
|
132
132
|
recheck?: Recheck;
|
|
133
|
+
/**
|
|
134
|
+
* Who uses this file from elsewhere in its repo, already rendered by the CLI:
|
|
135
|
+
* one line per type an operation reads and per function with callers in
|
|
136
|
+
* other files (carrick#2067). Printed as it stands. Absent from an older CLI.
|
|
137
|
+
*/
|
|
138
|
+
uses_lines?: string[];
|
|
133
139
|
};
|
|
134
140
|
/** The `recheck` block of a `carrick.check/0` answer. */
|
|
135
141
|
export type Recheck = {
|
package/dist/contract.js
CHANGED
|
@@ -70,6 +70,11 @@ export function parseCheckResult(stdout) {
|
|
|
70
70
|
if (lines.length)
|
|
71
71
|
result.boundary_lines = lines;
|
|
72
72
|
}
|
|
73
|
+
if (Array.isArray(parsed["uses_lines"])) {
|
|
74
|
+
const lines = parsed["uses_lines"].filter((line) => typeof line === "string");
|
|
75
|
+
if (lines.length)
|
|
76
|
+
result.uses_lines = lines;
|
|
77
|
+
}
|
|
73
78
|
const recheck = parsed["recheck"];
|
|
74
79
|
if (isRecord(recheck) && typeof recheck["ran"] === "string") {
|
|
75
80
|
result.recheck = recheck;
|
package/dist/contract.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"contract.js","sourceRoot":"","sources":["../src/contract.ts"],"names":[],"mappings":"AAAA,4EAA4E;AAC5E,EAAE;AACF,yDAAyD;AACzD,+EAA+E;AAC/E,4DAA4D;AAC5D,6EAA6E;AAC7E,6EAA6E;AAC7E,+EAA+E;AAC/E,0CAA0C;
|
|
1
|
+
{"version":3,"file":"contract.js","sourceRoot":"","sources":["../src/contract.ts"],"names":[],"mappings":"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"}
|
package/dist/hook/post-edit.js
CHANGED
|
@@ -23,7 +23,7 @@ import { resolveRoot, rootNote } from "../root.js";
|
|
|
23
23
|
import { patchedFiles } from "./apply-patch.js";
|
|
24
24
|
import { throttledVersionMismatch } from "../init/outdated.js";
|
|
25
25
|
import { currentVersion } from "../update.js";
|
|
26
|
-
import { record } from "./reuse.js";
|
|
26
|
+
import { markTold, record, toldKey, wasTold } from "./reuse.js";
|
|
27
27
|
const log = createLogger("carrick-hook");
|
|
28
28
|
/** The files the index has rows for. */
|
|
29
29
|
const CHECKED = /\.(ts|tsx|mts|cts)$/;
|
|
@@ -116,6 +116,9 @@ async function main() {
|
|
|
116
116
|
log(note);
|
|
117
117
|
const found = [];
|
|
118
118
|
const contexts = [];
|
|
119
|
+
// Files whose uses lines this message carries, remembered only once it is
|
|
120
|
+
// delivered: who uses a file is shown once per file per session (carrick#2067).
|
|
121
|
+
const told = [];
|
|
119
122
|
for (const file of edited) {
|
|
120
123
|
const relative = path.relative(choice.root, file);
|
|
121
124
|
// The edit just landed, so the index describes the file as it was before
|
|
@@ -130,7 +133,11 @@ async function main() {
|
|
|
130
133
|
continue;
|
|
131
134
|
}
|
|
132
135
|
found.push(...newFunctions(outcome.result, relative));
|
|
133
|
-
const
|
|
136
|
+
const key = toldKey(outcome.result, relative);
|
|
137
|
+
const show = !payload.session_id || !wasTold(payload.session_id, key);
|
|
138
|
+
if (show && outcome.result.uses_lines?.length)
|
|
139
|
+
told.push(key);
|
|
140
|
+
const context = renderPostToolUse(outcome.result, relative, { uses: show });
|
|
134
141
|
log(`check ${relative} -> ${context ? "context" : "nothing to say"} in ${outcome.ms}ms`);
|
|
135
142
|
if (context)
|
|
136
143
|
contexts.push(context);
|
|
@@ -153,6 +160,8 @@ async function main() {
|
|
|
153
160
|
const mismatch = throttledVersionMismatch(choice.root, currentVersion());
|
|
154
161
|
if (mismatch)
|
|
155
162
|
contexts.push(mismatch);
|
|
163
|
+
if (told.length > 0 && payload.session_id)
|
|
164
|
+
markTold(payload.session_id, told);
|
|
156
165
|
if (contexts.length > 0)
|
|
157
166
|
emit(contexts.join("\n\n"));
|
|
158
167
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"post-edit.js","sourceRoot":"","sources":["../../src/hook/post-edit.ts"],"names":[],"mappings":";AACA,oDAAoD;AACpD,EAAE;AACF,+EAA+E;AAC/E,gFAAgF;AAChF,+EAA+E;AAC/E,oEAAoE;AACpE,EAAE;AACF,sEAAsE;AACtE,8EAA8E;AAC9E,sEAAsE;AACtE,+EAA+E;AAC/E,4DAA4D;AAC5D,EAAE;AACF,+EAA+E;AAC/E,mDAAmD;AAEnD,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,KAAK,EAAE,MAAM,WAAW,CAAC;AAClC,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAC/C,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AACjD,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACnD,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAChD,OAAO,EAAE,wBAAwB,EAAE,MAAM,qBAAqB,CAAC;AAC/D,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"post-edit.js","sourceRoot":"","sources":["../../src/hook/post-edit.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
// PostToolUse hook for a file read, on Claude Code (carrick#2069).
|
|
3
|
+
//
|
|
4
|
+
// Before the agent edits a file, tell it who else depends on it: the callers of
|
|
5
|
+
// the file's functions, the operations that read its types, and the other side
|
|
6
|
+
// of each route or call in it. The answer is `carrick check <file> --json` with
|
|
7
|
+
// no re-check, rendered as locations only. The verdicts stay in the post-edit
|
|
8
|
+
// hook, which judges the edited text.
|
|
9
|
+
//
|
|
10
|
+
// A Read fires on every file the agent opens, so the work is bounded: nothing
|
|
11
|
+
// starts for a non-TypeScript file, for a file this session has already asked
|
|
12
|
+
// about, or on a channel that does not print through hooks. A file is asked
|
|
13
|
+
// about once per session whatever the answer was. Whatever happens it exits 0
|
|
14
|
+
// and prints at most the one JSON object.
|
|
15
|
+
import path from "node:path";
|
|
16
|
+
import { check } from "../cli.js";
|
|
17
|
+
import { resolveChannel } from "../channel.js";
|
|
18
|
+
import { createLogger } from "../log.js";
|
|
19
|
+
import { renderPostRead } from "../render.js";
|
|
20
|
+
import { resolveRoot, rootNote } from "../root.js";
|
|
21
|
+
import { markRead, markTold, toldKey, wasRead } from "./reuse.js";
|
|
22
|
+
const log = createLogger("carrick-hook");
|
|
23
|
+
/** The files the index has rows for. */
|
|
24
|
+
const CHECKED = /\.(ts|tsx|mts|cts)$/;
|
|
25
|
+
/** The limit on the one check, unless the caller set its own. */
|
|
26
|
+
const CHECK_TIMEOUT_MS = "2000";
|
|
27
|
+
async function readStdin() {
|
|
28
|
+
const chunks = [];
|
|
29
|
+
for await (const chunk of process.stdin)
|
|
30
|
+
chunks.push(Buffer.from(chunk));
|
|
31
|
+
return Buffer.concat(chunks).toString("utf8");
|
|
32
|
+
}
|
|
33
|
+
async function main() {
|
|
34
|
+
// Only `hook` prints from here; `lsp` and `off` start nothing and write
|
|
35
|
+
// nothing, so a file is not marked as asked about by a channel that said
|
|
36
|
+
// nothing.
|
|
37
|
+
if (resolveChannel({ hooksInstalled: true }).channel !== "hook")
|
|
38
|
+
return;
|
|
39
|
+
// The payload carries the file's text in `tool_response`; it is read to the
|
|
40
|
+
// end and ignored.
|
|
41
|
+
let payload;
|
|
42
|
+
try {
|
|
43
|
+
payload = JSON.parse((await readStdin()) || "{}");
|
|
44
|
+
}
|
|
45
|
+
catch (error) {
|
|
46
|
+
log("unparseable payload", String(error));
|
|
47
|
+
return;
|
|
48
|
+
}
|
|
49
|
+
const named = payload.tool_input?.file_path;
|
|
50
|
+
if (!named || !CHECKED.test(named))
|
|
51
|
+
return;
|
|
52
|
+
const file = path.isAbsolute(named) ? named : path.resolve(payload.cwd ?? process.cwd(), named);
|
|
53
|
+
const session = payload.session_id;
|
|
54
|
+
if (session && wasRead(session, file))
|
|
55
|
+
return;
|
|
56
|
+
const choice = resolveRoot({
|
|
57
|
+
clientRoot: payload.cwd ?? null,
|
|
58
|
+
projectDir: process.env["CLAUDE_PROJECT_DIR"] ?? null,
|
|
59
|
+
filePath: file,
|
|
60
|
+
});
|
|
61
|
+
const note = rootNote(choice);
|
|
62
|
+
if (note)
|
|
63
|
+
log(note);
|
|
64
|
+
const relative = path.relative(choice.root, file);
|
|
65
|
+
const env = { ...process.env, CARRICK_TIMEOUT_MS: process.env["CARRICK_TIMEOUT_MS"] ?? CHECK_TIMEOUT_MS };
|
|
66
|
+
const outcome = await check(relative, { cwd: choice.root, env });
|
|
67
|
+
// Asked once: an error or a timeout is not asked again on the next Read.
|
|
68
|
+
if (session)
|
|
69
|
+
markRead(session, file);
|
|
70
|
+
if (!outcome.result) {
|
|
71
|
+
log("no answer for", relative, outcome.failure ?? "");
|
|
72
|
+
return;
|
|
73
|
+
}
|
|
74
|
+
const context = renderPostRead(outcome.result, relative);
|
|
75
|
+
log(`check ${relative} -> ${context ? "context" : "nothing to say"} in ${outcome.ms}ms`);
|
|
76
|
+
if (!context)
|
|
77
|
+
return;
|
|
78
|
+
process.stdout.write(JSON.stringify({
|
|
79
|
+
hookSpecificOutput: { hookEventName: "PostToolUse", additionalContext: context },
|
|
80
|
+
}));
|
|
81
|
+
// The post-edit hook that follows prints this file's header and items but
|
|
82
|
+
// not the uses lines it was just shown.
|
|
83
|
+
if (session && outcome.result.uses_lines?.length) {
|
|
84
|
+
markTold(session, [toldKey(outcome.result, relative)]);
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
await main();
|
|
88
|
+
process.exit(0);
|
|
89
|
+
//# sourceMappingURL=post-read.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"post-read.js","sourceRoot":"","sources":["../../src/hook/post-read.ts"],"names":[],"mappings":"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"}
|
package/dist/hook/reuse.d.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import type { CheckResult } from "../contract.ts";
|
|
1
2
|
/** One function the working tree declares and the index does not. */
|
|
2
3
|
export type NewFunction = {
|
|
3
4
|
/** As the source spells it. */
|
|
@@ -13,6 +14,16 @@ export type SessionRecord = {
|
|
|
13
14
|
found: NewFunction[];
|
|
14
15
|
/** `file::name` for the ones a nudge has already listed. */
|
|
15
16
|
nudged: string[];
|
|
17
|
+
/**
|
|
18
|
+
* `repo::file` for every file whose uses lines this session has been shown
|
|
19
|
+
* (carrick#2067), so the post-edit hook prints them once per file.
|
|
20
|
+
*/
|
|
21
|
+
told: string[];
|
|
22
|
+
/**
|
|
23
|
+
* Absolute paths the Read hook has already asked about (carrick#2069): it
|
|
24
|
+
* asks once per file per session, whatever the answer was.
|
|
25
|
+
*/
|
|
26
|
+
read: string[];
|
|
16
27
|
/** RFC 3339, when this file was last written. Drives the prune below. */
|
|
17
28
|
updated: string;
|
|
18
29
|
};
|
|
@@ -62,6 +73,19 @@ export declare function record(sessionId: string, found: NewFunction[], home?: s
|
|
|
62
73
|
export declare function pending(record: SessionRecord): NewFunction[];
|
|
63
74
|
/** Mark entries as named, so the next stop of the same task says nothing. */
|
|
64
75
|
export declare function markNudged(sessionId: string, entries: NewFunction[], home?: string): void;
|
|
76
|
+
/**
|
|
77
|
+
* The key a file's uses lines are remembered under: its repo and its
|
|
78
|
+
* repo-relative path, so one path in two repos is two files.
|
|
79
|
+
*/
|
|
80
|
+
export declare function toldKey(result: CheckResult, fallbackFile: string): string;
|
|
81
|
+
/** Whether this session has already been shown the uses lines under `key`. */
|
|
82
|
+
export declare function wasTold(sessionId: string, key: string, home?: string): boolean;
|
|
83
|
+
/** Remember that this session has been shown the uses lines under `keys`. */
|
|
84
|
+
export declare function markTold(sessionId: string, keys: string[], home?: string): void;
|
|
85
|
+
/** Whether the Read hook has already asked about this absolute path. */
|
|
86
|
+
export declare function wasRead(sessionId: string, file: string, home?: string): boolean;
|
|
87
|
+
/** Remember that the Read hook has asked about this absolute path. */
|
|
88
|
+
export declare function markRead(sessionId: string, file: string, home?: string): void;
|
|
65
89
|
/** What one delivery of the nudge said, for the hook that delivered it. */
|
|
66
90
|
export type Drained = {
|
|
67
91
|
/** The line to hand the model. */
|
package/dist/hook/reuse.js
CHANGED
|
@@ -48,7 +48,7 @@ function key(entry) {
|
|
|
48
48
|
}
|
|
49
49
|
/** A session's record, or an empty one. Never throws. */
|
|
50
50
|
export function readSession(sessionId, home) {
|
|
51
|
-
const empty = { found: [], nudged: [], updated: "" };
|
|
51
|
+
const empty = { found: [], nudged: [], told: [], read: [], updated: "" };
|
|
52
52
|
const file = sessionFile(sessionId, home);
|
|
53
53
|
if (file === null)
|
|
54
54
|
return empty;
|
|
@@ -71,6 +71,12 @@ export function readSession(sessionId, home) {
|
|
|
71
71
|
nudged: Array.isArray(record.nudged)
|
|
72
72
|
? record.nudged.filter((entry) => typeof entry === "string")
|
|
73
73
|
: [],
|
|
74
|
+
told: Array.isArray(record.told)
|
|
75
|
+
? record.told.filter((entry) => typeof entry === "string")
|
|
76
|
+
: [],
|
|
77
|
+
read: Array.isArray(record.read)
|
|
78
|
+
? record.read.filter((entry) => typeof entry === "string")
|
|
79
|
+
: [],
|
|
74
80
|
updated: typeof record.updated === "string" ? record.updated : "",
|
|
75
81
|
};
|
|
76
82
|
}
|
|
@@ -84,13 +90,27 @@ function write(sessionId, record, home) {
|
|
|
84
90
|
const file = sessionFile(sessionId, home);
|
|
85
91
|
if (file === null)
|
|
86
92
|
return;
|
|
93
|
+
// Written beside the record and renamed over it: Claude Code runs Reads in
|
|
94
|
+
// parallel, so several hook processes read, change and write one file at
|
|
95
|
+
// once, and a writer that empties the file first lets a reader parse an
|
|
96
|
+
// empty record and write that back over `found` and `told` (carrick#2069).
|
|
97
|
+
// Two complete writes can still overwrite each other, which costs one
|
|
98
|
+
// repeated print or one repeated check.
|
|
99
|
+
const temp = `${file}.${process.pid}.tmp`;
|
|
87
100
|
try {
|
|
88
101
|
fs.mkdirSync(path.dirname(file), { recursive: true, mode: 0o700 });
|
|
89
|
-
fs.writeFileSync(
|
|
102
|
+
fs.writeFileSync(temp, `${JSON.stringify(record, null, 2)}\n`, { mode: 0o600 });
|
|
103
|
+
fs.renameSync(temp, file);
|
|
90
104
|
}
|
|
91
105
|
catch {
|
|
92
106
|
// Nothing to do and nothing to say: the nudge is a nicety and the edit it
|
|
93
107
|
// rides behind is not.
|
|
108
|
+
try {
|
|
109
|
+
fs.unlinkSync(temp);
|
|
110
|
+
}
|
|
111
|
+
catch {
|
|
112
|
+
// No temp file was left.
|
|
113
|
+
}
|
|
94
114
|
}
|
|
95
115
|
prune(home);
|
|
96
116
|
}
|
|
@@ -202,6 +222,42 @@ export function markNudged(sessionId, entries, home) {
|
|
|
202
222
|
current.updated = new Date().toISOString();
|
|
203
223
|
write(sessionId, current, home);
|
|
204
224
|
}
|
|
225
|
+
/**
|
|
226
|
+
* The key a file's uses lines are remembered under: its repo and its
|
|
227
|
+
* repo-relative path, so one path in two repos is two files.
|
|
228
|
+
*/
|
|
229
|
+
export function toldKey(result, fallbackFile) {
|
|
230
|
+
return `${result.repo ?? ""}::${result.file ?? fallbackFile}`;
|
|
231
|
+
}
|
|
232
|
+
/** Whether this session has already been shown the uses lines under `key`. */
|
|
233
|
+
export function wasTold(sessionId, key, home) {
|
|
234
|
+
return readSession(sessionId, home).told.includes(key);
|
|
235
|
+
}
|
|
236
|
+
/** Remember that this session has been shown the uses lines under `keys`. */
|
|
237
|
+
export function markTold(sessionId, keys, home) {
|
|
238
|
+
if (keys.length === 0)
|
|
239
|
+
return;
|
|
240
|
+
const current = readSession(sessionId, home);
|
|
241
|
+
const told = new Set(current.told);
|
|
242
|
+
for (const key of keys)
|
|
243
|
+
told.add(key);
|
|
244
|
+
current.told = [...told];
|
|
245
|
+
current.updated = new Date().toISOString();
|
|
246
|
+
write(sessionId, current, home);
|
|
247
|
+
}
|
|
248
|
+
/** Whether the Read hook has already asked about this absolute path. */
|
|
249
|
+
export function wasRead(sessionId, file, home) {
|
|
250
|
+
return readSession(sessionId, home).read.includes(file);
|
|
251
|
+
}
|
|
252
|
+
/** Remember that the Read hook has asked about this absolute path. */
|
|
253
|
+
export function markRead(sessionId, file, home) {
|
|
254
|
+
const current = readSession(sessionId, home);
|
|
255
|
+
if (current.read.includes(file))
|
|
256
|
+
return;
|
|
257
|
+
current.read.push(file);
|
|
258
|
+
current.updated = new Date().toISOString();
|
|
259
|
+
write(sessionId, current, home);
|
|
260
|
+
}
|
|
205
261
|
/**
|
|
206
262
|
* The nudge for one session, marked as spoken, or nothing to say (carrick#1335).
|
|
207
263
|
*
|
package/dist/hook/reuse.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"reuse.js","sourceRoot":"","sources":["../../src/hook/reuse.ts"],"names":[],"mappings":"AAAA,4EAA4E;AAC5E,oEAAoE;AACpE,EAAE;AACF,2EAA2E;AAC3E,6EAA6E;AAC7E,+EAA+E;AAC/E,4EAA4E;AAC5E,gFAAgF;AAChF,6EAA6E;AAC7E,uEAAuE;AACvE,EAAE;AACF,6EAA6E;AAC7E,+EAA+E;AAC/E,8EAA8E;AAC9E,4EAA4E;AAC5E,6CAA6C;AAC7C,EAAE;AACF,iEAAiE;AAEjE,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"reuse.js","sourceRoot":"","sources":["../../src/hook/reuse.ts"],"names":[],"mappings":"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"}
|
package/dist/init/settings.js
CHANGED
|
@@ -60,6 +60,12 @@ export function carrickHooks(command = "carrick") {
|
|
|
60
60
|
matcher: "Write|Edit|MultiEdit",
|
|
61
61
|
hooks: [{ type: "command", command: `${command} hook post-edit`, timeout: 15 }],
|
|
62
62
|
},
|
|
63
|
+
// Who depends on a file, delivered when the agent opens it rather than
|
|
64
|
+
// after it has edited (carrick#2069).
|
|
65
|
+
{
|
|
66
|
+
matcher: "Read",
|
|
67
|
+
hooks: [{ type: "command", command: `${command} hook post-read`, timeout: 5 }],
|
|
68
|
+
},
|
|
63
69
|
],
|
|
64
70
|
// No matcher: a resumed, cleared or compacted session has lost the map and
|
|
65
71
|
// re-orients for one read of the index.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"settings.js","sourceRoot":"","sources":["../../src/init/settings.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"settings.js","sourceRoot":"","sources":["../../src/init/settings.ts"],"names":[],"mappings":"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"}
|
package/dist/render.d.ts
CHANGED
|
@@ -3,6 +3,8 @@ import { type Boundary, type CheckItem, type CheckResult, type RunningScan, type
|
|
|
3
3
|
export declare const MAX_ITEM_LINES = 12;
|
|
4
4
|
/** How many counterpart sites one item line names before the same. */
|
|
5
5
|
export declare const MAX_COUNTERPARTS = 4;
|
|
6
|
+
/** How many uses lines one hook message carries before it says how many are left. */
|
|
7
|
+
export declare const MAX_USE_LINES = 8;
|
|
6
8
|
export declare function shortHash(commit: string | undefined): string;
|
|
7
9
|
/**
|
|
8
10
|
* The boundary as the CLI prints it: one line per thing the scan could not
|
|
@@ -48,7 +50,9 @@ export declare function stateWord(state: string | undefined): string;
|
|
|
48
50
|
*/
|
|
49
51
|
export declare function typedMismatchClause(item: CheckItem): string | null;
|
|
50
52
|
/** One line for one route or call: where it is, what it is, what is known about it. */
|
|
51
|
-
export declare function itemLine(item: CheckItem, file: string | undefined
|
|
53
|
+
export declare function itemLine(item: CheckItem, file: string | undefined, options?: {
|
|
54
|
+
locatorsOnly?: boolean;
|
|
55
|
+
}): string;
|
|
52
56
|
/** Problems first, then everything that names another service, both by line. */
|
|
53
57
|
export declare function reportableItems(result: CheckResult): CheckItem[];
|
|
54
58
|
/**
|
|
@@ -67,8 +71,24 @@ export declare function unclassifiedLines(result: CheckResult): number[];
|
|
|
67
71
|
* every edit, which is what an agent learns to skip, so `renderSessionStart`
|
|
68
72
|
* prints it once. An edit adds one line, only when this file holds call sites
|
|
69
73
|
* the local index did not classify.
|
|
74
|
+
*
|
|
75
|
+
* Then the CLI's `uses_lines`, who calls this file's functions and which
|
|
76
|
+
* operations read its types (carrick#2067), unless `options.uses` is `false`:
|
|
77
|
+
* the hook shows them once per file per session.
|
|
78
|
+
*/
|
|
79
|
+
export declare function renderPostToolUse(result: CheckResult, displayFile?: string, options?: {
|
|
80
|
+
uses?: boolean;
|
|
81
|
+
}): string | null;
|
|
82
|
+
/**
|
|
83
|
+
* The PostToolUse context for a file the agent has just read (carrick#2069), or
|
|
84
|
+
* `null` when there is nothing to say: no header on an empty answer, because a
|
|
85
|
+
* header on every Read would be noise.
|
|
86
|
+
*
|
|
87
|
+
* Locations only, never verdicts: nothing has been edited, so there is nothing
|
|
88
|
+
* to judge. The CLI's `uses_lines` first, then one line for each route or call
|
|
89
|
+
* that names a counterpart in another service.
|
|
70
90
|
*/
|
|
71
|
-
export declare function
|
|
91
|
+
export declare function renderPostRead(result: CheckResult, displayFile?: string): string | null;
|
|
72
92
|
/**
|
|
73
93
|
* The boundary for one service in a status answer, same preference as a check.
|
|
74
94
|
*/
|
package/dist/render.js
CHANGED
|
@@ -9,6 +9,8 @@ import { connectedItems, problemItems, } from "./contract.js";
|
|
|
9
9
|
export const MAX_ITEM_LINES = 12;
|
|
10
10
|
/** How many counterpart sites one item line names before the same. */
|
|
11
11
|
export const MAX_COUNTERPARTS = 4;
|
|
12
|
+
/** How many uses lines one hook message carries before it says how many are left. */
|
|
13
|
+
export const MAX_USE_LINES = 8;
|
|
12
14
|
export function shortHash(commit) {
|
|
13
15
|
if (!commit)
|
|
14
16
|
return "an unknown commit";
|
|
@@ -228,10 +230,18 @@ function verdictText(item) {
|
|
|
228
230
|
return detail ? ` ${head}: ${detail}` : ` ${head}`;
|
|
229
231
|
}
|
|
230
232
|
/** One line for one route or call: where it is, what it is, what is known about it. */
|
|
231
|
-
export function itemLine(item, file) {
|
|
233
|
+
export function itemLine(item, file, options = {}) {
|
|
232
234
|
const where = `${file ?? "this file"}:${item.line ?? 1}:${item.col ?? 1}`;
|
|
233
235
|
const operation = [item.method, item.path].filter(Boolean).join(" ");
|
|
234
236
|
const counterparts = item.counterparts ?? [];
|
|
237
|
+
// Locators only (carrick#2069): where the row is, what it is, and who is on
|
|
238
|
+
// the other side. The Read hook has no edit to judge, so no verdict words.
|
|
239
|
+
if (options.locatorsOnly) {
|
|
240
|
+
const head = `- ${where} ${item.kind}${operation ? ` ${operation}` : ""}`;
|
|
241
|
+
return counterparts.length
|
|
242
|
+
? `${head}. ${roleLabel(counterparts)}: ${counterpartText(counterparts)}`
|
|
243
|
+
: head;
|
|
244
|
+
}
|
|
235
245
|
const segments = [
|
|
236
246
|
`- ${where} ${item.kind}${operation ? ` ${operation}` : ""}${sourceLabel(item)}${verdictText(item)}`,
|
|
237
247
|
];
|
|
@@ -328,8 +338,12 @@ function unclassifiedLine(result) {
|
|
|
328
338
|
* every edit, which is what an agent learns to skip, so `renderSessionStart`
|
|
329
339
|
* prints it once. An edit adds one line, only when this file holds call sites
|
|
330
340
|
* the local index did not classify.
|
|
341
|
+
*
|
|
342
|
+
* Then the CLI's `uses_lines`, who calls this file's functions and which
|
|
343
|
+
* operations read its types (carrick#2067), unless `options.uses` is `false`:
|
|
344
|
+
* the hook shows them once per file per session.
|
|
331
345
|
*/
|
|
332
|
-
export function renderPostToolUse(result, displayFile) {
|
|
346
|
+
export function renderPostToolUse(result, displayFile, options = {}) {
|
|
333
347
|
if (result.error)
|
|
334
348
|
return null;
|
|
335
349
|
const items = reportableItems(result);
|
|
@@ -355,6 +369,43 @@ export function renderPostToolUse(result, displayFile) {
|
|
|
355
369
|
lines.push(stale);
|
|
356
370
|
if (unclassified)
|
|
357
371
|
lines.push(unclassified);
|
|
372
|
+
if (options.uses !== false) {
|
|
373
|
+
const uses = result.uses_lines ?? [];
|
|
374
|
+
lines.push(...uses.slice(0, MAX_USE_LINES));
|
|
375
|
+
const rest = uses.length - Math.min(uses.length, MAX_USE_LINES);
|
|
376
|
+
if (rest > 0) {
|
|
377
|
+
lines.push(`- and ${rest} more line(s) like these; \`carrick check\` on this file prints them all.`);
|
|
378
|
+
}
|
|
379
|
+
}
|
|
380
|
+
return lines.join("\n");
|
|
381
|
+
}
|
|
382
|
+
/**
|
|
383
|
+
* The PostToolUse context for a file the agent has just read (carrick#2069), or
|
|
384
|
+
* `null` when there is nothing to say: no header on an empty answer, because a
|
|
385
|
+
* header on every Read would be noise.
|
|
386
|
+
*
|
|
387
|
+
* Locations only, never verdicts: nothing has been edited, so there is nothing
|
|
388
|
+
* to judge. The CLI's `uses_lines` first, then one line for each route or call
|
|
389
|
+
* that names a counterpart in another service.
|
|
390
|
+
*/
|
|
391
|
+
export function renderPostRead(result, displayFile) {
|
|
392
|
+
if (result.error)
|
|
393
|
+
return null;
|
|
394
|
+
const where = displayFile ?? result.file ?? "this file";
|
|
395
|
+
const uses = result.uses_lines ?? [];
|
|
396
|
+
const items = connectedItems(result).sort((a, b) => (a.line ?? 0) - (b.line ?? 0));
|
|
397
|
+
if (uses.length === 0 && items.length === 0)
|
|
398
|
+
return null;
|
|
399
|
+
const lines = [
|
|
400
|
+
`Carrick: other code depends on ${where} (indexed at ${shortHash(result.index_commit)}). Open these before you change what they use:`,
|
|
401
|
+
];
|
|
402
|
+
lines.push(...uses.slice(0, MAX_USE_LINES));
|
|
403
|
+
for (const item of items.slice(0, MAX_ITEM_LINES)) {
|
|
404
|
+
lines.push(itemLine(item, where, { locatorsOnly: true }));
|
|
405
|
+
}
|
|
406
|
+
if (uses.length > MAX_USE_LINES || items.length > MAX_ITEM_LINES) {
|
|
407
|
+
lines.push(`- more are listed by \`carrick check ${where}\`.`);
|
|
408
|
+
}
|
|
358
409
|
return lines.join("\n");
|
|
359
410
|
}
|
|
360
411
|
/**
|