@fourshore/graft-core 0.0.8 → 0.0.10
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/dist/agents.d.ts +1 -1
- package/dist/agents.js +10 -4
- package/dist/agents.js.map +1 -1
- package/dist/capture.d.ts +21 -0
- package/dist/capture.js +64 -0
- package/dist/capture.js.map +1 -0
- package/dist/ci.d.ts +18 -0
- package/dist/ci.js +50 -0
- package/dist/ci.js.map +1 -0
- package/dist/claude-code.d.ts +46 -0
- package/dist/claude-code.js +72 -0
- package/dist/claude-code.js.map +1 -0
- package/dist/context.d.ts +37 -0
- package/dist/context.js +77 -0
- package/dist/context.js.map +1 -0
- package/dist/graft.d.ts +105 -1
- package/dist/graft.js +278 -26
- package/dist/graft.js.map +1 -1
- package/dist/hooks.d.ts +17 -0
- package/dist/hooks.js +81 -0
- package/dist/hooks.js.map +1 -0
- package/dist/index.d.ts +7 -2
- package/dist/index.js +6 -1
- package/dist/index.js.map +1 -1
- package/dist/policy.d.ts +75 -0
- package/dist/policy.js +99 -1
- package/dist/policy.js.map +1 -1
- package/dist/record.d.ts +35 -8
- package/dist/record.js +57 -25
- package/dist/record.js.map +1 -1
- package/dist/redact.d.ts +8 -1
- package/dist/redact.js +18 -3
- package/dist/redact.js.map +1 -1
- package/package.json +1 -1
package/dist/graft.js
CHANGED
|
@@ -1,10 +1,13 @@
|
|
|
1
1
|
import { spawn } from "node:child_process";
|
|
2
|
+
import { DEFAULT_CONTEXT_BUDGET, DEFAULT_CONTEXT_LIMIT, fitContext } from "./context.js";
|
|
2
3
|
import { Git } from "./git.js";
|
|
3
4
|
import { EVIDENCE_OUTPUT_CAP, NOTES_REF, TRAILER_KEYS, isChangeId, newChangeId, parseTrailers, parseMessageRecord, evidenceLines, EVIDENCE_HEADER, trailersFor, } from "./record.js";
|
|
4
5
|
import { OpenChangeStore } from "./store.js";
|
|
5
|
-
import { DEFAULT_POLICY, POLICY_PATH, readPolicy } from "./policy.js";
|
|
6
|
-
import { looksLikeSecretFile, redact } from "./redact.js";
|
|
6
|
+
import { DEFAULT_POLICY, POLICY_PATH, readPolicy, expandTrailers, evaluateRules } from "./policy.js";
|
|
7
|
+
import { looksLikeSecretFile, redact, secretFilesNamed } from "./redact.js";
|
|
8
|
+
import { writeCiWorkflow } from "./ci.js";
|
|
7
9
|
import { writeAgentsSection } from "./agents.js";
|
|
10
|
+
import { installHooks } from "./hooks.js";
|
|
8
11
|
import { mkdir, readFile, writeFile } from "node:fs/promises";
|
|
9
12
|
import { join } from "node:path";
|
|
10
13
|
export class GraftError extends Error {
|
|
@@ -26,6 +29,20 @@ export class Graft {
|
|
|
26
29
|
}
|
|
27
30
|
async start(opts) {
|
|
28
31
|
const open = await this.store.read();
|
|
32
|
+
if (open?.capturedBy && !opts.replace) {
|
|
33
|
+
// A hook opened this change from the prompt; an explicit start names the task and keeps what was captured.
|
|
34
|
+
if (!opts.task?.trim())
|
|
35
|
+
throw new GraftError("A task is required.");
|
|
36
|
+
open.task = opts.task.trim();
|
|
37
|
+
if (opts.plan?.trim())
|
|
38
|
+
open.plan = opts.plan.trim();
|
|
39
|
+
if (opts.ref?.trim())
|
|
40
|
+
open.ref = opts.ref.trim();
|
|
41
|
+
if (opts.author)
|
|
42
|
+
open.author = defaultAuthor(opts.author);
|
|
43
|
+
await this.store.write(open);
|
|
44
|
+
return open;
|
|
45
|
+
}
|
|
29
46
|
if (open && !opts.replace) {
|
|
30
47
|
throw new GraftError(`A change is already open (${open.id}: ${open.task}, opened ${age(open.startedAt)} ago). ` +
|
|
31
48
|
"Land it, run `graft abandon`, or pass --replace to drop it.");
|
|
@@ -37,9 +54,11 @@ export class Graft {
|
|
|
37
54
|
id: newChangeId(),
|
|
38
55
|
task: opts.task.trim(),
|
|
39
56
|
plan: opts.plan?.trim() || undefined,
|
|
57
|
+
ref: opts.ref?.trim() || undefined,
|
|
40
58
|
author: defaultAuthor(opts.author),
|
|
41
59
|
startedAt: new Date().toISOString(),
|
|
42
60
|
evidence: [],
|
|
61
|
+
...(opts.capturedBy ? { capturedBy: opts.capturedBy } : {}),
|
|
43
62
|
};
|
|
44
63
|
await this.store.write(record);
|
|
45
64
|
return record;
|
|
@@ -55,10 +74,19 @@ export class Graft {
|
|
|
55
74
|
await this.store.write(open);
|
|
56
75
|
return open;
|
|
57
76
|
}
|
|
77
|
+
topLevelCache;
|
|
78
|
+
/** The working tree root, asked of git once per Graft instance. */
|
|
79
|
+
topLevel() {
|
|
80
|
+
this.topLevelCache ??= this.git.topLevel().catch((err) => {
|
|
81
|
+
this.topLevelCache = undefined;
|
|
82
|
+
throw err;
|
|
83
|
+
});
|
|
84
|
+
return this.topLevelCache;
|
|
85
|
+
}
|
|
58
86
|
/** Run a command, capture its result as evidence. The command runs in the repo root. */
|
|
59
|
-
async evidenceCommand(command, label) {
|
|
87
|
+
async evidenceCommand(command, label, name) {
|
|
60
88
|
const open = await this.requireOpen();
|
|
61
|
-
const cwd = await this.
|
|
89
|
+
const cwd = await this.topLevel();
|
|
62
90
|
const started = Date.now();
|
|
63
91
|
const { exitCode, output } = await runShell(command, cwd);
|
|
64
92
|
const ev = {
|
|
@@ -67,8 +95,56 @@ export class Graft {
|
|
|
67
95
|
command,
|
|
68
96
|
exitCode,
|
|
69
97
|
durationMs: Date.now() - started,
|
|
70
|
-
output:
|
|
98
|
+
output: await this.keepOutput(command, output),
|
|
99
|
+
label,
|
|
100
|
+
...(name ? { name } : {}),
|
|
101
|
+
};
|
|
102
|
+
open.evidence.push(ev);
|
|
103
|
+
await this.store.write(open);
|
|
104
|
+
return ev;
|
|
105
|
+
}
|
|
106
|
+
/** The policy's named commands, for `graft evidence <name>` and for showing what a repo expects. */
|
|
107
|
+
async catalog() {
|
|
108
|
+
return (await readPolicy(await this.git.topLevel())).commands ?? {};
|
|
109
|
+
}
|
|
110
|
+
/**
|
|
111
|
+
* Run a command from the policy catalog by name and record it under that
|
|
112
|
+
* name, or with `attest` record a run of it the author already made.
|
|
113
|
+
*/
|
|
114
|
+
async evidenceNamed(name, label, attest) {
|
|
115
|
+
const commands = await this.catalog();
|
|
116
|
+
const command = commands[name];
|
|
117
|
+
if (!command) {
|
|
118
|
+
const known = Object.keys(commands);
|
|
119
|
+
throw new GraftError(known.length
|
|
120
|
+
? `No command named "${name}" in ${POLICY_PATH}. Known: ${known.join(", ")}.`
|
|
121
|
+
: `${POLICY_PATH} names no commands, so "${name}" cannot be run by name. Add a "commands" map, or run it with --.`);
|
|
122
|
+
}
|
|
123
|
+
if (attest)
|
|
124
|
+
return this.evidenceAttested(command, attest.exitCode, attest.output ?? "", label, name);
|
|
125
|
+
return this.evidenceCommand(command, label, name);
|
|
126
|
+
}
|
|
127
|
+
/**
|
|
128
|
+
* Attach a run the author already made through their own tools, so a slow
|
|
129
|
+
* build or test suite is not run twice. Graft did not run it, so the record
|
|
130
|
+
* marks it attested: the exit code and output are the author's claim.
|
|
131
|
+
*/
|
|
132
|
+
async evidenceAttested(command, exitCode, output = "", label, name) {
|
|
133
|
+
const open = await this.requireOpen();
|
|
134
|
+
if (!command.trim())
|
|
135
|
+
throw new GraftError("The command you ran is required, so the record says what was attested.");
|
|
136
|
+
if (!Number.isInteger(exitCode))
|
|
137
|
+
throw new GraftError("Exit code must be an integer.");
|
|
138
|
+
const ev = {
|
|
139
|
+
kind: "command",
|
|
140
|
+
at: new Date().toISOString(),
|
|
141
|
+
command: command.trim(),
|
|
142
|
+
exitCode,
|
|
143
|
+
durationMs: 0,
|
|
144
|
+
output: await this.keepOutput(command, output),
|
|
71
145
|
label,
|
|
146
|
+
...(name ? { name } : {}),
|
|
147
|
+
attested: true,
|
|
72
148
|
};
|
|
73
149
|
open.evidence.push(ev);
|
|
74
150
|
await this.store.write(open);
|
|
@@ -84,45 +160,175 @@ export class Graft {
|
|
|
84
160
|
await this.store.write(open);
|
|
85
161
|
return ev;
|
|
86
162
|
}
|
|
87
|
-
/**
|
|
88
|
-
|
|
163
|
+
/**
|
|
164
|
+
* Record a command a harness ran and reported through a hook, with the
|
|
165
|
+
* exit code and output the harness itself saw. It is command evidence
|
|
166
|
+
* like any other, marked with `via` so a reader knows who ran it.
|
|
167
|
+
*/
|
|
168
|
+
async evidenceCaptured(run) {
|
|
89
169
|
const open = await this.requireOpen();
|
|
90
|
-
if (
|
|
91
|
-
|
|
92
|
-
const
|
|
170
|
+
if (!run.command.trim())
|
|
171
|
+
throw new GraftError("A command is required.");
|
|
172
|
+
const ev = {
|
|
173
|
+
kind: "command",
|
|
174
|
+
at: new Date().toISOString(),
|
|
175
|
+
command: run.command.trim(),
|
|
176
|
+
exitCode: run.exitCode,
|
|
177
|
+
durationMs: run.durationMs ?? 0,
|
|
178
|
+
output: await this.keepOutput(run.command, run.output ?? ""),
|
|
179
|
+
label: run.label,
|
|
180
|
+
...(run.name ? { name: run.name } : {}),
|
|
181
|
+
via: run.via,
|
|
182
|
+
};
|
|
183
|
+
open.evidence.push(ev);
|
|
184
|
+
await this.store.write(open);
|
|
185
|
+
return ev;
|
|
186
|
+
}
|
|
187
|
+
/**
|
|
188
|
+
* The output a record may keep: scrubbed of secret-looking environment
|
|
189
|
+
* values and capped, or withheld entirely when the command names a file
|
|
190
|
+
* that looks like credentials (`cat .env && npm test`), since a captured
|
|
191
|
+
* hook sees the whole transcript and the record outlives the key.
|
|
192
|
+
*/
|
|
193
|
+
async keepOutput(command, output) {
|
|
194
|
+
const policy = await readPolicy(await this.topLevel());
|
|
195
|
+
const named = secretFilesNamed(command, policy.secretFiles);
|
|
196
|
+
if (named.length)
|
|
197
|
+
return `[output withheld: the command names ${named.join(", ")}, which looks like a credential file]`;
|
|
198
|
+
return capOutput(redact(output));
|
|
199
|
+
}
|
|
200
|
+
/** The landing gate: policy on evidence, then on staged files. Shared by land and the commit hook. */
|
|
201
|
+
async assertLandable(open, policy, staged, opts) {
|
|
93
202
|
if (policy.requireEvidence && !opts.allowNoEvidence) {
|
|
94
203
|
if (open.evidence.length === 0) {
|
|
95
204
|
throw new GraftError("No evidence recorded. Run `graft evidence -- <command>` or pass --allow-no-evidence.");
|
|
96
205
|
}
|
|
97
|
-
const passed = open.evidence.some((e) => e.kind === "command" && e.exitCode === 0);
|
|
206
|
+
const passed = open.evidence.some((e) => e.kind === "command" && e.exitCode === 0 && !e.attested);
|
|
98
207
|
if (policy.requireEvidence === "command" && !passed) {
|
|
99
|
-
throw new GraftError("Policy requires a passing command
|
|
208
|
+
throw new GraftError("Policy requires a passing command that Graft or a harness ran; notes and attested runs alone do not count. " +
|
|
100
209
|
"Run `graft evidence -- <command>` or pass --allow-no-evidence.");
|
|
101
210
|
}
|
|
102
211
|
}
|
|
103
|
-
if (opts.paths?.length)
|
|
104
|
-
await this.git.run(["add", "--", ...opts.paths]);
|
|
105
|
-
if (opts.all)
|
|
106
|
-
await this.git.run(["add", "-A"]);
|
|
107
|
-
const staged = await this.git.stagedFiles();
|
|
108
212
|
if (staged.length === 0) {
|
|
109
213
|
throw new GraftError("Nothing staged to commit. Stage files, name paths, or pass --all.");
|
|
110
214
|
}
|
|
215
|
+
if (!opts.allowNoEvidence) {
|
|
216
|
+
const unmet = evaluateRules(policy, staged, open.evidence);
|
|
217
|
+
if (unmet.length) {
|
|
218
|
+
const wants = unmet.map((u) => `"${u.name}" (${u.command})`).join(" and ");
|
|
219
|
+
const files = [...new Set(unmet.flatMap((u) => u.files))];
|
|
220
|
+
throw new GraftError(`Policy requires a passing run of ${wants} for changes to ${files.join(", ")}. ` +
|
|
221
|
+
`Run graft evidence ${unmet.map((u) => u.name).join(", graft evidence ")}, or pass --allow-no-evidence.`);
|
|
222
|
+
}
|
|
223
|
+
}
|
|
111
224
|
const suspicious = staged.filter((p) => looksLikeSecretFile(p, policy.secretFiles));
|
|
112
225
|
if (suspicious.length > 0 && !opts.allowSecrets) {
|
|
113
226
|
throw new GraftError(`Refusing to land: staged files look like credentials: ${suspicious.join(", ")}. ` +
|
|
114
227
|
"Unstage them (git restore --staged <file>) or pass --allow-secrets if they are not.");
|
|
115
228
|
}
|
|
229
|
+
}
|
|
230
|
+
/** Commit the staged changes with the record in trailers and a git note. */
|
|
231
|
+
async land(opts = {}) {
|
|
232
|
+
const open = await this.requireOpen();
|
|
233
|
+
if (opts.plan)
|
|
234
|
+
open.plan = opts.plan.trim();
|
|
235
|
+
const policy = await readPolicy(await this.git.topLevel());
|
|
236
|
+
if (opts.paths?.length)
|
|
237
|
+
await this.git.run(["add", "--", ...opts.paths]);
|
|
238
|
+
if (opts.all)
|
|
239
|
+
await this.git.run(["add", "-A"]);
|
|
240
|
+
const staged = await this.git.stagedFiles();
|
|
241
|
+
await this.assertLandable(open, policy, staged, opts);
|
|
116
242
|
open.landedAt = new Date().toISOString();
|
|
117
|
-
const
|
|
118
|
-
|
|
243
|
+
const fromPolicy = expandTrailers(policy.trailers ?? []);
|
|
244
|
+
const explicit = opts.trailers ?? [];
|
|
245
|
+
const trailers = [...fromPolicy.trailers.filter((t) => !explicit.includes(t)), ...explicit];
|
|
246
|
+
const message = buildCommitMessage(open, opts.title, trailers);
|
|
247
|
+
// The git hooks graft init installs step aside while Graft itself commits.
|
|
248
|
+
const previous = process.env.GRAFT_LANDING;
|
|
249
|
+
process.env.GRAFT_LANDING = "1";
|
|
250
|
+
try {
|
|
251
|
+
await this.git.run(["commit", "-q", "-F", "-"], { input: message });
|
|
252
|
+
}
|
|
253
|
+
finally {
|
|
254
|
+
if (previous === undefined)
|
|
255
|
+
delete process.env.GRAFT_LANDING;
|
|
256
|
+
else
|
|
257
|
+
process.env.GRAFT_LANDING = previous;
|
|
258
|
+
}
|
|
119
259
|
const commit = (await this.git.head());
|
|
120
260
|
open.commit = commit;
|
|
121
261
|
await this.git.run(["notes", `--ref=${NOTES_REF}`, "add", "-f", "-F", "-", commit], {
|
|
122
262
|
input: JSON.stringify(open, null, 2) + "\n",
|
|
123
263
|
});
|
|
124
264
|
await this.store.clear();
|
|
125
|
-
return { record: open, commit };
|
|
265
|
+
return { record: open, commit, skippedTrailers: fromPolicy.skipped };
|
|
266
|
+
}
|
|
267
|
+
/**
|
|
268
|
+
* The prepare-commit-msg hook: when a change is open and the message does
|
|
269
|
+
* not already carry a record, run the landing gate and append the record
|
|
270
|
+
* (plan, evidence, trailers) to the message file, so a plain `git commit`
|
|
271
|
+
* lands like `graft land`. Merges, squashes and amends are left alone.
|
|
272
|
+
*/
|
|
273
|
+
async prepareCommitMessage(messageFile, source) {
|
|
274
|
+
if (source === "merge" || source === "squash" || source === "commit") {
|
|
275
|
+
return { applied: false, reason: `${source} commit` };
|
|
276
|
+
}
|
|
277
|
+
const open = await this.store.read();
|
|
278
|
+
if (!open)
|
|
279
|
+
return { applied: false, reason: "no change is open" };
|
|
280
|
+
const current = await readFile(messageFile, "utf8");
|
|
281
|
+
if (parseTrailers(current)[TRAILER_KEYS.change])
|
|
282
|
+
return { applied: false, reason: "message already carries a record" };
|
|
283
|
+
const policy = await readPolicy(await this.git.topLevel());
|
|
284
|
+
const staged = await this.git.stagedFiles();
|
|
285
|
+
try {
|
|
286
|
+
await this.assertLandable(open, policy, staged, {
|
|
287
|
+
allowNoEvidence: Boolean(process.env.GRAFT_ALLOW_NO_EVIDENCE),
|
|
288
|
+
allowSecrets: Boolean(process.env.GRAFT_ALLOW_SECRETS),
|
|
289
|
+
});
|
|
290
|
+
}
|
|
291
|
+
catch (err) {
|
|
292
|
+
if (!(err instanceof GraftError))
|
|
293
|
+
throw err;
|
|
294
|
+
throw new GraftError(err.message
|
|
295
|
+
.replace("pass --allow-no-evidence", "set GRAFT_ALLOW_NO_EVIDENCE=1 for this commit")
|
|
296
|
+
.replace("pass --allow-secrets if they are not", "set GRAFT_ALLOW_SECRETS=1 if they are not"));
|
|
297
|
+
}
|
|
298
|
+
open.landedAt = new Date().toISOString();
|
|
299
|
+
await this.store.write(open);
|
|
300
|
+
const block = recordBlock(open, expandTrailers(policy.trailers ?? []).trailers).join("\n");
|
|
301
|
+
// Keep git's own comment lines (the editor template) after the record.
|
|
302
|
+
const lines = current.split("\n");
|
|
303
|
+
const firstComment = lines.findIndex((l) => l.startsWith("#"));
|
|
304
|
+
const body = (firstComment === -1 ? lines : lines.slice(0, firstComment)).join("\n").replace(/\s+$/, "");
|
|
305
|
+
const comments = firstComment === -1 ? "" : "\n" + lines.slice(firstComment).join("\n");
|
|
306
|
+
const head = body ? body + "\n\n" : "\n\n";
|
|
307
|
+
await writeFile(messageFile, head + block + "\n" + comments);
|
|
308
|
+
return { applied: true, id: open.id };
|
|
309
|
+
}
|
|
310
|
+
/**
|
|
311
|
+
* The post-commit hook: when HEAD carries the open change's id, attach the
|
|
312
|
+
* full record as the note and close the change.
|
|
313
|
+
*/
|
|
314
|
+
async finishCommit() {
|
|
315
|
+
const open = await this.store.read();
|
|
316
|
+
if (!open)
|
|
317
|
+
return { attached: false, reason: "no change is open" };
|
|
318
|
+
const commit = await this.git.head();
|
|
319
|
+
if (!commit)
|
|
320
|
+
return { attached: false, reason: "no commit" };
|
|
321
|
+
const message = await this.git.run(["log", "-1", "--format=%B", commit]);
|
|
322
|
+
if (parseTrailers(message)[TRAILER_KEYS.change] !== open.id) {
|
|
323
|
+
return { attached: false, reason: "HEAD does not carry the open change" };
|
|
324
|
+
}
|
|
325
|
+
open.landedAt ??= new Date().toISOString();
|
|
326
|
+
open.commit = commit;
|
|
327
|
+
await this.git.run(["notes", `--ref=${NOTES_REF}`, "add", "-f", "-F", "-", commit], {
|
|
328
|
+
input: JSON.stringify(open, null, 2) + "\n",
|
|
329
|
+
});
|
|
330
|
+
await this.store.clear();
|
|
331
|
+
return { attached: true, commit, id: open.id };
|
|
126
332
|
}
|
|
127
333
|
/**
|
|
128
334
|
* Prepare a repository: make git carry notes through amend and rebase,
|
|
@@ -168,7 +374,9 @@ export class Graft {
|
|
|
168
374
|
policyWritten = true;
|
|
169
375
|
}
|
|
170
376
|
const agents = opts.agents === false ? undefined : await writeAgentsSection(topLevel);
|
|
171
|
-
|
|
377
|
+
const hooks = opts.hooks === false ? undefined : await installHooks(this.git, topLevel);
|
|
378
|
+
const ci = opts.ci ? await writeCiWorkflow(topLevel) : undefined;
|
|
379
|
+
return { topLevel, configured, policyWritten, remote: remote ?? undefined, agents, hooks, ci };
|
|
172
380
|
}
|
|
173
381
|
/**
|
|
174
382
|
* Exchange change records with a remote: fetch its notes, merge them into
|
|
@@ -223,7 +431,9 @@ export class Graft {
|
|
|
223
431
|
const raw = await this.git.run([
|
|
224
432
|
"log",
|
|
225
433
|
`--max-count=${limit}`,
|
|
434
|
+
...(opts.noMerges ? ["--no-merges"] : []),
|
|
226
435
|
"--format=%H%x1f%s%x1f%an%x1f%aI%x1f%B%x1e",
|
|
436
|
+
...(opts.range ? [opts.range] : []),
|
|
227
437
|
]);
|
|
228
438
|
const entries = [];
|
|
229
439
|
for (const chunk of raw.split("\x1e")) {
|
|
@@ -237,6 +447,42 @@ export class Graft {
|
|
|
237
447
|
}
|
|
238
448
|
return entries;
|
|
239
449
|
}
|
|
450
|
+
/**
|
|
451
|
+
* The history of the files you are about to touch: commits that changed any
|
|
452
|
+
* of `paths` (files or directories, relative to the working directory),
|
|
453
|
+
* newest first, with their records, rendered to fit a prompt. With no paths
|
|
454
|
+
* it covers the whole repository.
|
|
455
|
+
*/
|
|
456
|
+
async context(paths, opts = {}) {
|
|
457
|
+
const budget = opts.budget ?? DEFAULT_CONTEXT_BUDGET;
|
|
458
|
+
if (!(await this.git.head()))
|
|
459
|
+
return fitContext(paths, [], 0, budget);
|
|
460
|
+
const raw = await this.git.run([
|
|
461
|
+
"log",
|
|
462
|
+
`--max-count=${opts.limit ?? DEFAULT_CONTEXT_LIMIT}`,
|
|
463
|
+
"--name-only",
|
|
464
|
+
"--format=%x1e%H%x1f%s%x1f%an%x1f%aI%x1f%B%x1d",
|
|
465
|
+
"--",
|
|
466
|
+
...paths,
|
|
467
|
+
]);
|
|
468
|
+
const matched = [];
|
|
469
|
+
let unrecorded = 0;
|
|
470
|
+
for (const chunk of raw.split("\x1e")) {
|
|
471
|
+
if (!chunk.trim())
|
|
472
|
+
continue;
|
|
473
|
+
const [meta, named = ""] = chunk.split("\x1d");
|
|
474
|
+
const [commit, title, authorName, authoredAt, body] = meta.split("\x1f");
|
|
475
|
+
const files = named.split("\n").map((l) => l.trim()).filter(Boolean);
|
|
476
|
+
const trailers = parseTrailers(body ?? "");
|
|
477
|
+
const read = await this.readRecord(commit, body ?? "", authoredAt);
|
|
478
|
+
if (!read.record)
|
|
479
|
+
unrecorded++;
|
|
480
|
+
if (!read.record && !opts.all)
|
|
481
|
+
continue;
|
|
482
|
+
matched.push({ commit, title, authorName, authoredAt, trailers, files, ...read });
|
|
483
|
+
}
|
|
484
|
+
return fitContext(paths, matched, unrecorded, budget);
|
|
485
|
+
}
|
|
240
486
|
/** Look up one change by id or commit SHA. */
|
|
241
487
|
async show(ref) {
|
|
242
488
|
if (isChangeId(ref)) {
|
|
@@ -322,6 +568,12 @@ export function buildCommitMessage(record, title, extraTrailers = []) {
|
|
|
322
568
|
const lines = [subject, ""];
|
|
323
569
|
if (record.task !== subject)
|
|
324
570
|
lines.push(record.task, "");
|
|
571
|
+
lines.push(...recordBlock(record, extraTrailers));
|
|
572
|
+
return lines.join("\n") + "\n";
|
|
573
|
+
}
|
|
574
|
+
/** The record as message lines: Plan and Evidence blocks, then the trailers. */
|
|
575
|
+
export function recordBlock(record, extraTrailers = []) {
|
|
576
|
+
const lines = [];
|
|
325
577
|
if (record.plan)
|
|
326
578
|
lines.push("Plan:", indent(record.plan), "");
|
|
327
579
|
if (record.evidence.length)
|
|
@@ -330,7 +582,7 @@ export function buildCommitMessage(record, title, extraTrailers = []) {
|
|
|
330
582
|
lines.push(`${k}: ${v}`);
|
|
331
583
|
for (const t of extraTrailers)
|
|
332
584
|
lines.push(checkTrailer(t));
|
|
333
|
-
return lines
|
|
585
|
+
return lines;
|
|
334
586
|
}
|
|
335
587
|
const TRAILER = /^([A-Za-z][A-Za-z0-9-]*): (\S.*)$/;
|
|
336
588
|
function checkTrailer(t) {
|
|
@@ -357,9 +609,8 @@ function indent(s) {
|
|
|
357
609
|
function defaultAuthor(partial) {
|
|
358
610
|
const env = process.env;
|
|
359
611
|
const name = partial?.name ?? env.GRAFT_AUTHOR ?? (env.CLAUDECODE ? "claude-code" : env.USER ?? "unknown");
|
|
360
|
-
const
|
|
361
|
-
|
|
362
|
-
return { kind, name, model };
|
|
612
|
+
const kind = partial?.kind ?? (env.CLAUDECODE || env.GRAFT_AUTHOR ? "agent" : "human");
|
|
613
|
+
return { kind, name };
|
|
363
614
|
}
|
|
364
615
|
function capOutput(s) {
|
|
365
616
|
if (Buffer.byteLength(s) <= EVIDENCE_OUTPUT_CAP)
|
|
@@ -367,7 +618,8 @@ function capOutput(s) {
|
|
|
367
618
|
const tail = Buffer.from(s).subarray(-EVIDENCE_OUTPUT_CAP).toString("utf8");
|
|
368
619
|
return "[... truncated ...]\n" + tail;
|
|
369
620
|
}
|
|
370
|
-
|
|
621
|
+
/** Run a shell command from `cwd`, capturing its exit code and combined output. Records nothing. */
|
|
622
|
+
export function runShell(command, cwd) {
|
|
371
623
|
return new Promise((resolve) => {
|
|
372
624
|
const child = spawn(command, { cwd, shell: true, env: process.env, stdio: ["ignore", "pipe", "pipe"] });
|
|
373
625
|
const chunks = [];
|
package/dist/graft.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"graft.js","sourceRoot":"","sources":["../src/graft.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"graft.js","sourceRoot":"","sources":["../src/graft.ts"],"names":[],"mappings":"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"}
|
package/dist/hooks.d.ts
ADDED
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import type { Git } from "./git.js";
|
|
2
|
+
export declare const CLAUDE_SETTINGS_PATH = ".claude/settings.json";
|
|
3
|
+
export interface HooksResult {
|
|
4
|
+
/** What happened to .claude/settings.json. */
|
|
5
|
+
claudeCode: "written" | "present" | "unreadable";
|
|
6
|
+
/** Per git hook: written, already Graft's, or left alone because another hook is there. */
|
|
7
|
+
git: Record<"prepare-commit-msg" | "post-commit", "written" | "present" | "foreign">;
|
|
8
|
+
/** Where the git hooks went, for the message. */
|
|
9
|
+
hooksDir: string;
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* Install the capture hooks: Claude Code hooks in .claude/settings.json so
|
|
13
|
+
* the prompt opens a change and every test, build or lint command the agent
|
|
14
|
+
* runs is recorded, and git hooks so a plain `git commit` carries the record.
|
|
15
|
+
* Idempotent; never overwrites a hook Graft did not write.
|
|
16
|
+
*/
|
|
17
|
+
export declare function installHooks(git: Git, topLevel: string): Promise<HooksResult>;
|
package/dist/hooks.js
ADDED
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
import { chmod, mkdir, readFile, writeFile } from "node:fs/promises";
|
|
2
|
+
import { join, resolve } from "node:path";
|
|
3
|
+
export const CLAUDE_SETTINGS_PATH = ".claude/settings.json";
|
|
4
|
+
const HOOK_COMMAND = "graft hook claude-code";
|
|
5
|
+
const MARK = "# graft-hook";
|
|
6
|
+
/**
|
|
7
|
+
* Install the capture hooks: Claude Code hooks in .claude/settings.json so
|
|
8
|
+
* the prompt opens a change and every test, build or lint command the agent
|
|
9
|
+
* runs is recorded, and git hooks so a plain `git commit` carries the record.
|
|
10
|
+
* Idempotent; never overwrites a hook Graft did not write.
|
|
11
|
+
*/
|
|
12
|
+
export async function installHooks(git, topLevel) {
|
|
13
|
+
return {
|
|
14
|
+
claudeCode: await writeClaudeSettings(topLevel),
|
|
15
|
+
...(await writeGitHooks(git)),
|
|
16
|
+
};
|
|
17
|
+
}
|
|
18
|
+
async function writeClaudeSettings(topLevel) {
|
|
19
|
+
const file = join(topLevel, CLAUDE_SETTINGS_PATH);
|
|
20
|
+
let settings = {};
|
|
21
|
+
try {
|
|
22
|
+
settings = JSON.parse(await readFile(file, "utf8"));
|
|
23
|
+
}
|
|
24
|
+
catch (err) {
|
|
25
|
+
if (err.code !== "ENOENT")
|
|
26
|
+
return "unreadable";
|
|
27
|
+
}
|
|
28
|
+
const hooks = (settings.hooks ??= {});
|
|
29
|
+
const entry = (matcher) => ({ ...(matcher ? { matcher } : {}), hooks: [{ type: "command", command: HOOK_COMMAND, timeout: 15 }] });
|
|
30
|
+
const wanted = [
|
|
31
|
+
["UserPromptSubmit", undefined],
|
|
32
|
+
["PostToolUse", "Bash"],
|
|
33
|
+
["PostToolUseFailure", "Bash"],
|
|
34
|
+
];
|
|
35
|
+
let changed = false;
|
|
36
|
+
for (const [event, matcher] of wanted) {
|
|
37
|
+
const list = (hooks[event] ??= []);
|
|
38
|
+
if (list.some((e) => e.hooks?.some((h) => h.command === HOOK_COMMAND)))
|
|
39
|
+
continue;
|
|
40
|
+
list.push(entry(matcher));
|
|
41
|
+
changed = true;
|
|
42
|
+
}
|
|
43
|
+
if (!changed)
|
|
44
|
+
return "present";
|
|
45
|
+
await mkdir(join(topLevel, ".claude"), { recursive: true });
|
|
46
|
+
await writeFile(file, JSON.stringify(settings, null, 2) + "\n");
|
|
47
|
+
return "written";
|
|
48
|
+
}
|
|
49
|
+
async function writeGitHooks(git) {
|
|
50
|
+
// --git-path answers relative to git's cwd, which is not necessarily ours.
|
|
51
|
+
const hooksDir = resolve(git.cwd, await git.run(["rev-parse", "--git-path", "hooks"]));
|
|
52
|
+
await mkdir(hooksDir, { recursive: true });
|
|
53
|
+
const scripts = {
|
|
54
|
+
"prepare-commit-msg": `#!/bin/sh\n${MARK}: add the open Graft change to the commit message\n[ -n "$GRAFT_LANDING" ] && exit 0\nexec graft hook prepare-commit-msg "$@"\n`,
|
|
55
|
+
"post-commit": `#!/bin/sh\n${MARK}: attach the Graft record to the commit just made\n[ -n "$GRAFT_LANDING" ] && exit 0\nexec graft hook post-commit\n`,
|
|
56
|
+
};
|
|
57
|
+
const result = {};
|
|
58
|
+
for (const name of Object.keys(scripts)) {
|
|
59
|
+
const file = join(hooksDir, name);
|
|
60
|
+
let existing = null;
|
|
61
|
+
try {
|
|
62
|
+
existing = await readFile(file, "utf8");
|
|
63
|
+
}
|
|
64
|
+
catch (err) {
|
|
65
|
+
if (err.code !== "ENOENT")
|
|
66
|
+
throw err;
|
|
67
|
+
}
|
|
68
|
+
if (existing !== null) {
|
|
69
|
+
result[name] = existing.includes(MARK) ? "present" : "foreign";
|
|
70
|
+
if (result[name] === "foreign")
|
|
71
|
+
continue;
|
|
72
|
+
if (existing === scripts[name])
|
|
73
|
+
continue;
|
|
74
|
+
}
|
|
75
|
+
await writeFile(file, scripts[name]);
|
|
76
|
+
await chmod(file, 0o755);
|
|
77
|
+
result[name] = existing === null ? "written" : "present";
|
|
78
|
+
}
|
|
79
|
+
return { git: result, hooksDir };
|
|
80
|
+
}
|
|
81
|
+
//# sourceMappingURL=hooks.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hooks.js","sourceRoot":"","sources":["../src/hooks.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AACrE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAG1C,MAAM,CAAC,MAAM,oBAAoB,GAAG,uBAAuB,CAAC;AAC5D,MAAM,YAAY,GAAG,wBAAwB,CAAC;AAC9C,MAAM,IAAI,GAAG,cAAc,CAAC;AAW5B;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,GAAQ,EAAE,QAAgB;IAC3D,OAAO;QACL,UAAU,EAAE,MAAM,mBAAmB,CAAC,QAAQ,CAAC;QAC/C,GAAG,CAAC,MAAM,aAAa,CAAC,GAAG,CAAC,CAAC;KAC9B,CAAC;AACJ,CAAC;AAED,KAAK,UAAU,mBAAmB,CAAC,QAAgB;IACjD,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,EAAE,oBAAoB,CAAC,CAAC;IAClD,IAAI,QAAQ,GAA4B,EAAE,CAAC;IAC3C,IAAI,CAAC;QACH,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,CAA4B,CAAC;IACjF,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,IAAK,GAA6B,CAAC,IAAI,KAAK,QAAQ;YAAE,OAAO,YAAY,CAAC;IAC5E,CAAC;IACD,MAAM,KAAK,GAAG,CAAC,QAAQ,CAAC,KAAK,KAAK,EAAE,CAAyG,CAAC;IAC9I,MAAM,KAAK,GAAG,CAAC,OAAgB,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,YAAY,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC;IAC5I,MAAM,MAAM,GAAmC;QAC7C,CAAC,kBAAkB,EAAE,SAAS,CAAC;QAC/B,CAAC,aAAa,EAAE,MAAM,CAAC;QACvB,CAAC,oBAAoB,EAAE,MAAM,CAAC;KAC/B,CAAC;IACF,IAAI,OAAO,GAAG,KAAK,CAAC;IACpB,KAAK,MAAM,CAAC,KAAK,EAAE,OAAO,CAAC,IAAI,MAAM,EAAE,CAAC;QACtC,MAAM,IAAI,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC;QACnC,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,KAAK,YAAY,CAAC,CAAC;YAAE,SAAS;QACjF,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;QAC1B,OAAO,GAAG,IAAI,CAAC;IACjB,CAAC;IACD,IAAI,CAAC,OAAO;QAAE,OAAO,SAAS,CAAC;IAC/B,MAAM,KAAK,CAAC,IAAI,CAAC,QAAQ,EAAE,SAAS,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC5D,MAAM,SAAS,CAAC,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;IAChE,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,KAAK,UAAU,aAAa,CAAC,GAAQ;IACnC,2EAA2E;IAC3E,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,CAAC,GAAG,CAAC,CAAC,WAAW,EAAE,YAAY,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC;IACvF,MAAM,KAAK,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC3C,MAAM,OAAO,GAAyD;QACpE,oBAAoB,EAAE,cAAc,IAAI,iIAAiI;QACzK,aAAa,EAAE,cAAc,IAAI,qHAAqH;KACvJ,CAAC;IACF,MAAM,MAAM,GAAG,EAAwB,CAAC;IACxC,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,IAAI,CAAC,OAAO,CAA6B,EAAE,CAAC;QACpE,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;QAClC,IAAI,QAAQ,GAAkB,IAAI,CAAC;QACnC,IAAI,CAAC;YACH,QAAQ,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QAC1C,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,IAAK,GAA6B,CAAC,IAAI,KAAK,QAAQ;gBAAE,MAAM,GAAG,CAAC;QAClE,CAAC;QACD,IAAI,QAAQ,KAAK,IAAI,EAAE,CAAC;YACtB,MAAM,CAAC,IAAI,CAAC,GAAG,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC;YAC/D,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,SAAS;gBAAE,SAAS;YACzC,IAAI,QAAQ,KAAK,OAAO,CAAC,IAAI,CAAC;gBAAE,SAAS;QAC3C,CAAC;QACD,MAAM,SAAS,CAAC,IAAI,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;QACrC,MAAM,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QACzB,MAAM,CAAC,IAAI,CAAC,GAAG,QAAQ,KAAK,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC;IAC3D,CAAC;IACD,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC;AACnC,CAAC"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,6 +1,11 @@
|
|
|
1
|
-
export { Graft, GraftError, buildCommitMessage } from "./graft.js";
|
|
2
|
-
export type { InitResult, LandOptions, LandedChange, LogEntry, StartOptions, SyncResult } from "./graft.js";
|
|
1
|
+
export { Graft, GraftError, buildCommitMessage, recordBlock, runShell } from "./graft.js";
|
|
2
|
+
export type { CapturedRun, FinishResult, InitResult, LandOptions, LandedChange, LogEntry, PrepareResult, StartOptions, SyncResult } from "./graft.js";
|
|
3
3
|
export * from "./policy.js";
|
|
4
4
|
export * from "./record.js";
|
|
5
5
|
export * from "./redact.js";
|
|
6
6
|
export * from "./agents.js";
|
|
7
|
+
export * from "./capture.js";
|
|
8
|
+
export * from "./claude-code.js";
|
|
9
|
+
export * from "./hooks.js";
|
|
10
|
+
export * from "./context.js";
|
|
11
|
+
export * from "./ci.js";
|