lockwire 0.1.27 → 0.1.29
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/README.md +12 -1
- package/dist/actions.d.ts.map +1 -1
- package/dist/actions.js +9 -9
- package/dist/actions.js.map +1 -1
- package/dist/autofix.d.ts +85 -0
- package/dist/autofix.d.ts.map +1 -0
- package/dist/autofix.js +506 -0
- package/dist/autofix.js.map +1 -0
- package/dist/changed.d.ts +5 -0
- package/dist/changed.d.ts.map +1 -1
- package/dist/changed.js +16 -0
- package/dist/changed.js.map +1 -1
- package/dist/cli.js +49 -5
- package/dist/cli.js.map +1 -1
- package/dist/ledger.d.ts +2 -0
- package/dist/ledger.d.ts.map +1 -1
- package/dist/ledger.js +15 -11
- package/dist/ledger.js.map +1 -1
- package/dist/mcp-server.d.ts.map +1 -1
- package/dist/mcp-server.js +16 -25
- package/dist/mcp-server.js.map +1 -1
- package/dist/repo.js +1 -1
- package/dist/repo.js.map +1 -1
- package/dist/tasks.d.ts +6 -0
- package/dist/tasks.d.ts.map +1 -1
- package/dist/tasks.js +18 -0
- package/dist/tasks.js.map +1 -1
- package/dist/values.d.ts.map +1 -1
- package/dist/values.js +21 -5
- package/dist/values.js.map +1 -1
- package/package.json +1 -1
package/dist/autofix.js
ADDED
|
@@ -0,0 +1,506 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `lockwire autofix`: run the agent the user already pays for against lockwire's work queue, then
|
|
3
|
+
* check what it did. lockwire supplies no model and never edits a sentence itself; it decides whether
|
|
4
|
+
* there is anything to do (so an agent is only started when a claim is actually wrong), hands the
|
|
5
|
+
* agent the fix-docs instructions and lockwire's own MCP server, and afterwards re-checks every claim
|
|
6
|
+
* from scratch and refuses a run that changed anything other than documentation.
|
|
7
|
+
*
|
|
8
|
+
* Agents: Claude Code (`claude -p`), Codex (`codex exec`), or any command (`--agent-command`), which
|
|
9
|
+
* gets the prompt and an MCP config through LOCKWIRE_PROMPT_FILE / LOCKWIRE_MCP_CONFIG.
|
|
10
|
+
*/
|
|
11
|
+
import { spawn, spawnSync } from "node:child_process";
|
|
12
|
+
import { createHash } from "node:crypto";
|
|
13
|
+
import { closeSync, copyFileSync, existsSync, lstatSync, mkdirSync, mkdtempSync, openSync, readFileSync, readlinkSync, readSync, rmSync, writeFileSync, } from "node:fs";
|
|
14
|
+
import { readFile } from "node:fs/promises";
|
|
15
|
+
import { homedir, tmpdir } from "node:os";
|
|
16
|
+
import { join } from "node:path";
|
|
17
|
+
import { fileURLToPath } from "node:url";
|
|
18
|
+
import { headCommit, indexEntries } from "./changed.js";
|
|
19
|
+
import { readConfig } from "./config.js";
|
|
20
|
+
import { canonicalJson } from "./hash.js";
|
|
21
|
+
import { ledgerPath, verifiedRecord } from "./ledger.js";
|
|
22
|
+
import { readLockfile } from "./lockfile.js";
|
|
23
|
+
import { scanMarkers } from "./markers.js";
|
|
24
|
+
import { isScannedDoc, resolveInsideRepo, walkFiles } from "./repo.js";
|
|
25
|
+
import { fixDocsPrompt, listTasks } from "./tasks.js";
|
|
26
|
+
/** The argv that starts a built-in agent on `prompt`. Exported so the exact flags are tested. */
|
|
27
|
+
export function agentArgv(agent, prompt, files, opts = {}) {
|
|
28
|
+
if (agent === "claude-code")
|
|
29
|
+
return {
|
|
30
|
+
command: "claude",
|
|
31
|
+
args: [
|
|
32
|
+
"-p",
|
|
33
|
+
prompt,
|
|
34
|
+
// In CI, --bare: don't run the repository's own .claude/settings.json hooks or .mcp.json
|
|
35
|
+
// servers (repository-controlled code) with the API key in the environment. Not locally,
|
|
36
|
+
// where it would also switch off a subscription login.
|
|
37
|
+
...(opts.bare ? ["--bare"] : []),
|
|
38
|
+
"--mcp-config",
|
|
39
|
+
files.mcpConfig,
|
|
40
|
+
"--strict-mcp-config",
|
|
41
|
+
// Read and edit files, and use lockwire's tools; no shell, so the agent can't run repo code.
|
|
42
|
+
"--allowedTools",
|
|
43
|
+
"mcp__lockwire__*",
|
|
44
|
+
"Read",
|
|
45
|
+
"Edit",
|
|
46
|
+
"Write",
|
|
47
|
+
"Glob",
|
|
48
|
+
"Grep",
|
|
49
|
+
"--permission-mode",
|
|
50
|
+
"acceptEdits",
|
|
51
|
+
"--max-turns",
|
|
52
|
+
String(opts.maxTurns ?? 40),
|
|
53
|
+
"--output-format",
|
|
54
|
+
"json",
|
|
55
|
+
],
|
|
56
|
+
};
|
|
57
|
+
return {
|
|
58
|
+
command: "codex",
|
|
59
|
+
// MCP servers come from $CODEX_HOME/config.toml, which autofix writes (see codexHome).
|
|
60
|
+
args: ["exec", "--sandbox", "workspace-write", "--skip-git-repo-check", prompt],
|
|
61
|
+
};
|
|
62
|
+
}
|
|
63
|
+
/** Claude Code's `--mcp-config` file: lockwire's MCP server, started the way this lockwire runs. */
|
|
64
|
+
export function mcpConfigJson(lockwire) {
|
|
65
|
+
return `${JSON.stringify({ mcpServers: { lockwire: { command: lockwire.command, args: lockwire.args } } }, null, 2)}\n`;
|
|
66
|
+
}
|
|
67
|
+
const tomlString = (s) => JSON.stringify(s); // a TOML basic string is a JSON string
|
|
68
|
+
/** Codex's config.toml: lockwire's MCP server, required, its tools approved without prompting. */
|
|
69
|
+
export function codexConfigToml(lockwire) {
|
|
70
|
+
return [
|
|
71
|
+
"[mcp_servers.lockwire]",
|
|
72
|
+
`command = ${tomlString(lockwire.command)}`,
|
|
73
|
+
`args = [${lockwire.args.map(tomlString).join(", ")}]`,
|
|
74
|
+
"required = true",
|
|
75
|
+
'default_tools_approval_mode = "approve"',
|
|
76
|
+
"",
|
|
77
|
+
].join("\n");
|
|
78
|
+
}
|
|
79
|
+
function defaultLockwireCommand() {
|
|
80
|
+
const cli = join(fileURLToPath(new URL(".", import.meta.url)), "cli.js");
|
|
81
|
+
return { command: process.execPath, args: [cli, "mcp"] };
|
|
82
|
+
}
|
|
83
|
+
/** A file's content hash, read in chunks (any size); a symlink hashes as its target path. */
|
|
84
|
+
function fileHash(abs) {
|
|
85
|
+
try {
|
|
86
|
+
const st = lstatSync(abs);
|
|
87
|
+
if (st.isSymbolicLink())
|
|
88
|
+
return `link:${readlinkSync(abs)}`;
|
|
89
|
+
if (!st.isFile())
|
|
90
|
+
return null; // a FIFO or device could block a read forever
|
|
91
|
+
}
|
|
92
|
+
catch {
|
|
93
|
+
return null; // vanished mid-walk
|
|
94
|
+
}
|
|
95
|
+
let fd;
|
|
96
|
+
try {
|
|
97
|
+
fd = openSync(abs, "r");
|
|
98
|
+
}
|
|
99
|
+
catch {
|
|
100
|
+
return null;
|
|
101
|
+
}
|
|
102
|
+
try {
|
|
103
|
+
const hash = createHash("sha256");
|
|
104
|
+
const buf = Buffer.allocUnsafe(1 << 20);
|
|
105
|
+
for (let n = readSync(fd, buf, 0, buf.length, null); n > 0; n = readSync(fd, buf, 0, buf.length, null))
|
|
106
|
+
hash.update(buf.subarray(0, n));
|
|
107
|
+
return hash.digest("hex");
|
|
108
|
+
}
|
|
109
|
+
catch {
|
|
110
|
+
return null;
|
|
111
|
+
}
|
|
112
|
+
finally {
|
|
113
|
+
closeSync(fd);
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
/** Files under `dir` (repo-relative, posix), or none if it isn't a directory. */
|
|
117
|
+
function filesUnder(repoRoot, dir) {
|
|
118
|
+
try {
|
|
119
|
+
if (!lstatSync(join(repoRoot, dir)).isDirectory())
|
|
120
|
+
return [];
|
|
121
|
+
}
|
|
122
|
+
catch {
|
|
123
|
+
return [];
|
|
124
|
+
}
|
|
125
|
+
return walkFiles(join(repoRoot, dir)).map((rel) => `${dir}/${rel}`);
|
|
126
|
+
}
|
|
127
|
+
/** lockwire's own scratch files, which its tools rewrite on every call. */
|
|
128
|
+
const LOCKWIRE_SCRATCH = /^\.lockwire\/(cache\/|lock$|hook\.log$)/;
|
|
129
|
+
/**
|
|
130
|
+
* Content hashes of everything a run could change that matters: the tree (minus .git and
|
|
131
|
+
* node_modules), lockwire's state in .lockwire/ (its config and ledger, not its cache), and the git
|
|
132
|
+
* settings that run code on the next git command (.git/config, hooks, info).
|
|
133
|
+
*/
|
|
134
|
+
function treeHashes(repoRoot) {
|
|
135
|
+
const out = new Map();
|
|
136
|
+
const paths = [
|
|
137
|
+
...walkFiles(repoRoot),
|
|
138
|
+
...filesUnder(repoRoot, ".lockwire").filter((p) => !LOCKWIRE_SCRATCH.test(p)),
|
|
139
|
+
".git/config",
|
|
140
|
+
...filesUnder(repoRoot, ".git/hooks"),
|
|
141
|
+
...filesUnder(repoRoot, ".git/info"),
|
|
142
|
+
];
|
|
143
|
+
for (const rel of paths) {
|
|
144
|
+
const h = fileHash(join(repoRoot, rel));
|
|
145
|
+
if (h !== null)
|
|
146
|
+
out.set(rel, h);
|
|
147
|
+
}
|
|
148
|
+
return out;
|
|
149
|
+
}
|
|
150
|
+
/** Paths whose entry differs; if one side is missing altogether (a repo appeared or vanished), all of them. */
|
|
151
|
+
function diffMaps(before, after) {
|
|
152
|
+
if (!before || !after)
|
|
153
|
+
return [...(before ?? after ?? new Map()).keys()];
|
|
154
|
+
const changed = new Set();
|
|
155
|
+
for (const [p, h] of after)
|
|
156
|
+
if (before.get(p) !== h)
|
|
157
|
+
changed.add(p);
|
|
158
|
+
for (const p of before.keys())
|
|
159
|
+
if (!after.has(p))
|
|
160
|
+
changed.add(p);
|
|
161
|
+
return [...changed];
|
|
162
|
+
}
|
|
163
|
+
/** How long an agent gets to exit after SIGTERM before everything it started is killed. */
|
|
164
|
+
const KILL_GRACE_MS = 2000;
|
|
165
|
+
function run(command, args, opts) {
|
|
166
|
+
// On POSIX the agent leads its own process group, so a timeout (or the end of the run) stops
|
|
167
|
+
// everything it started, not just the shell or launcher at the top: nothing it spawned can keep
|
|
168
|
+
// writing to the tree after lockwire has judged it.
|
|
169
|
+
const group = process.platform !== "win32";
|
|
170
|
+
return new Promise((resolve) => {
|
|
171
|
+
let child;
|
|
172
|
+
try {
|
|
173
|
+
child = spawn(command, args, {
|
|
174
|
+
cwd: opts.cwd,
|
|
175
|
+
env: opts.env,
|
|
176
|
+
shell: opts.shell,
|
|
177
|
+
detached: group,
|
|
178
|
+
// The agent's output goes to stderr, so `lockwire autofix --json` keeps stdout for the report.
|
|
179
|
+
stdio: ["ignore", opts.show ? 2 : "ignore", opts.show ? 2 : "ignore"],
|
|
180
|
+
});
|
|
181
|
+
}
|
|
182
|
+
catch (err) {
|
|
183
|
+
resolve({ exitCode: null, error: String(err) });
|
|
184
|
+
return;
|
|
185
|
+
}
|
|
186
|
+
const kill = (signal) => {
|
|
187
|
+
if (child.pid === undefined)
|
|
188
|
+
return;
|
|
189
|
+
try {
|
|
190
|
+
if (group)
|
|
191
|
+
process.kill(-child.pid, signal);
|
|
192
|
+
else if (signal === "SIGKILL")
|
|
193
|
+
spawnSync("taskkill", ["/pid", String(child.pid), "/T", "/F"], { stdio: "ignore" });
|
|
194
|
+
else
|
|
195
|
+
child.kill(signal);
|
|
196
|
+
}
|
|
197
|
+
catch {
|
|
198
|
+
// already gone
|
|
199
|
+
}
|
|
200
|
+
};
|
|
201
|
+
let timedOut = false;
|
|
202
|
+
let hard;
|
|
203
|
+
const timer = setTimeout(() => {
|
|
204
|
+
timedOut = true;
|
|
205
|
+
if (!group)
|
|
206
|
+
return kill("SIGKILL"); // Windows: taskkill the tree while its root is still there
|
|
207
|
+
kill("SIGTERM");
|
|
208
|
+
hard = setTimeout(() => kill("SIGKILL"), KILL_GRACE_MS);
|
|
209
|
+
}, opts.timeoutMs);
|
|
210
|
+
// A detached group doesn't get the terminal's Ctrl-C: pass it on, then die of it as usual.
|
|
211
|
+
const signals = group ? ["SIGINT", "SIGTERM", "SIGHUP"] : [];
|
|
212
|
+
const onSignal = (signal) => {
|
|
213
|
+
kill("SIGKILL");
|
|
214
|
+
for (const s of signals)
|
|
215
|
+
process.off(s, onSignal);
|
|
216
|
+
process.kill(process.pid, signal);
|
|
217
|
+
};
|
|
218
|
+
for (const s of signals)
|
|
219
|
+
process.on(s, onSignal);
|
|
220
|
+
let done = false;
|
|
221
|
+
const finish = (result) => {
|
|
222
|
+
if (done)
|
|
223
|
+
return;
|
|
224
|
+
done = true;
|
|
225
|
+
clearTimeout(timer);
|
|
226
|
+
clearTimeout(hard);
|
|
227
|
+
for (const s of signals)
|
|
228
|
+
process.off(s, onSignal);
|
|
229
|
+
if (group)
|
|
230
|
+
kill("SIGKILL"); // whatever the agent left running in the background
|
|
231
|
+
resolve(result);
|
|
232
|
+
};
|
|
233
|
+
child.on("error", (err) => finish({ exitCode: null, error: err.message }));
|
|
234
|
+
child.on("exit", (code, signal) => finish(timedOut
|
|
235
|
+
? {
|
|
236
|
+
exitCode: null,
|
|
237
|
+
error: `stopped after the ${Math.round(opts.timeoutMs / 1000)}s timeout`,
|
|
238
|
+
}
|
|
239
|
+
: signal
|
|
240
|
+
? { exitCode: null, error: `stopped by ${signal}` }
|
|
241
|
+
: { exitCode: code }));
|
|
242
|
+
});
|
|
243
|
+
}
|
|
244
|
+
const RESOLUTION_EVENTS = new Set([
|
|
245
|
+
"anchor.resolved",
|
|
246
|
+
"anchor.created",
|
|
247
|
+
"anchor.acknowledged",
|
|
248
|
+
]);
|
|
249
|
+
/** lockwire's own files: a run may change them, but only through lockwire (see {@link lockwireStateProblems}). */
|
|
250
|
+
const LOCKWIRE_OWN = new Set(["lockwire.lock", ".lockwire/ledger.jsonl"]);
|
|
251
|
+
const readText = (path) => (existsSync(path) ? readFileSync(path, "utf8") : "");
|
|
252
|
+
const errorText = (err) => (err instanceof Error ? err.message : String(err));
|
|
253
|
+
/** A task's identity across a run: an unlinked marker's id carries its line, which edits above it shift. */
|
|
254
|
+
const identity = (t) => t.id.startsWith("unlinked:") ? t.id.replace(/:\d+:([0-9a-f]{8})$/, ":$1") : t.id;
|
|
255
|
+
/** How many of the tasks before a run are gone after it. New problems don't offset fixed ones. */
|
|
256
|
+
export function fixedCount(before, after) {
|
|
257
|
+
const open = new Set(after.map(identity));
|
|
258
|
+
return before.filter((t) => !open.has(identity(t))).length;
|
|
259
|
+
}
|
|
260
|
+
/** An anchor as written, for comparison; a backfilled `claim.normHash` (lockwire check adds it) isn't a change. */
|
|
261
|
+
function comparable(a, was) {
|
|
262
|
+
if (a.claim && was.claim && !was.claim.normHash && a.claim.normHash) {
|
|
263
|
+
const { normHash: _, ...claim } = a.claim;
|
|
264
|
+
return canonicalJson({ ...a, claim });
|
|
265
|
+
}
|
|
266
|
+
return canonicalJson(a);
|
|
267
|
+
}
|
|
268
|
+
/**
|
|
269
|
+
* The ledger records a run appended, and anything wrong with how lockwire's state changed. lockwire's
|
|
270
|
+
* tools only append verified records to the ledger, and change an anchor only with a record for it;
|
|
271
|
+
* an agent editing either file by hand (to make a claim look fixed) breaks one of those rules.
|
|
272
|
+
*/
|
|
273
|
+
function lockwireStateProblems(ledgerBefore, ledgerAfter, lockBefore, lockAfter) {
|
|
274
|
+
const problems = [];
|
|
275
|
+
const added = [];
|
|
276
|
+
if (!ledgerAfter.startsWith(ledgerBefore)) {
|
|
277
|
+
problems.push("The ledger was rewritten during the run: lockwire only ever appends to it.");
|
|
278
|
+
}
|
|
279
|
+
else {
|
|
280
|
+
const lines = ledgerAfter.slice(ledgerBefore.length).split("\n");
|
|
281
|
+
for (const line of lines) {
|
|
282
|
+
if (!line.trim())
|
|
283
|
+
continue;
|
|
284
|
+
const record = verifiedRecord(line.replace(/\r$/, ""));
|
|
285
|
+
if (record)
|
|
286
|
+
added.push(record);
|
|
287
|
+
else
|
|
288
|
+
problems.push("A ledger record added during the run doesn't verify (its hash doesn't match): it was written by hand, not by lockwire.");
|
|
289
|
+
}
|
|
290
|
+
}
|
|
291
|
+
const recorded = new Set(added.map((r) => r.anchor));
|
|
292
|
+
const created = new Set(added.filter((r) => r.event === "anchor.created").map((r) => r.anchor));
|
|
293
|
+
const was = new Map(lockBefore.anchors.map((a) => [a.id, a]));
|
|
294
|
+
for (const a of lockAfter.anchors) {
|
|
295
|
+
const prev = was.get(a.id);
|
|
296
|
+
if (prev && comparable(a, prev) === canonicalJson(prev))
|
|
297
|
+
continue;
|
|
298
|
+
if (prev ? !recorded.has(a.id) : !created.has(a.id))
|
|
299
|
+
problems.push(`lockwire.lock was edited by hand: anchor ${a.id} ${prev ? "changed" : "appeared"} with no ledger record of lockwire doing it.`);
|
|
300
|
+
}
|
|
301
|
+
return { added, problems: [...new Set(problems)] };
|
|
302
|
+
}
|
|
303
|
+
/**
|
|
304
|
+
* Tasks a run silenced rather than fixed: the anchor was retired (superseded or waived) or dropped,
|
|
305
|
+
* but the claim is still in the doc, marker and all, or as the same sentence with its marker deleted.
|
|
306
|
+
* A wrong claim that's merely no longer tracked is still wrong.
|
|
307
|
+
*/
|
|
308
|
+
async function retiredInPlace(repoRoot, before, after, lockAfter) {
|
|
309
|
+
const open = new Set(after.map(identity));
|
|
310
|
+
const out = [];
|
|
311
|
+
for (const t of before) {
|
|
312
|
+
if (t.id.startsWith("unlinked:") || open.has(identity(t)) || !t.doc)
|
|
313
|
+
continue;
|
|
314
|
+
const anchor = lockAfter.anchors.find((a) => a.id === t.id);
|
|
315
|
+
if (anchor && anchor.status !== "superseded" && anchor.status !== "waived")
|
|
316
|
+
continue;
|
|
317
|
+
const abs = resolveInsideRepo(repoRoot, t.doc);
|
|
318
|
+
if (!abs || !existsSync(abs))
|
|
319
|
+
continue;
|
|
320
|
+
const text = await readFile(abs, "utf8");
|
|
321
|
+
// A marker whose anchor is gone shows up as unlinked already; one whose anchor was retired doesn't.
|
|
322
|
+
const markerThere = scanMarkers(text).some((m) => m.id === t.id);
|
|
323
|
+
const sentence = (t.claim ?? "").replace(/…$/, "").replace(/\s+/g, " ").trim();
|
|
324
|
+
const sentenceThere = t.kind !== "marker-removed" &&
|
|
325
|
+
sentence.length >= 8 &&
|
|
326
|
+
text.replace(/\s+/g, " ").includes(sentence);
|
|
327
|
+
if ((markerThere && anchor) || (!markerThere && sentenceThere))
|
|
328
|
+
out.push({
|
|
329
|
+
...t,
|
|
330
|
+
summary: `retired (${anchor?.status ?? "removed from lockwire.lock"}) during the run, but the claim is still in ${t.doc}: fix or delete the sentence. Was: ${t.summary}`,
|
|
331
|
+
});
|
|
332
|
+
}
|
|
333
|
+
return out;
|
|
334
|
+
}
|
|
335
|
+
export async function autofix(repoRoot, opts = {}) {
|
|
336
|
+
const config = await readConfig(repoRoot);
|
|
337
|
+
const before = await listTasks(repoRoot, config, opts.scope);
|
|
338
|
+
const empty = { fixed: 0, problems: [], resolutions: [], changedFiles: [], outOfBounds: [] };
|
|
339
|
+
if (before.length === 0)
|
|
340
|
+
return {
|
|
341
|
+
status: "nothing-to-do",
|
|
342
|
+
before,
|
|
343
|
+
after: [],
|
|
344
|
+
...empty,
|
|
345
|
+
markdown: "lockwire: no documentation claims need attention.\n",
|
|
346
|
+
};
|
|
347
|
+
const lockwire = opts.lockwireCommand ?? defaultLockwireCommand();
|
|
348
|
+
const prompt = `${fixDocsPrompt(opts.scope)}\n\nThere are ${before.length} task${before.length === 1 ? "" : "s"} right now.`;
|
|
349
|
+
const work = mkdtempSync(join(tmpdir(), "lockwire-autofix-"));
|
|
350
|
+
const files = { prompt: join(work, "prompt.md"), mcpConfig: join(work, "mcp.json") };
|
|
351
|
+
writeFileSync(files.prompt, prompt, "utf8");
|
|
352
|
+
writeFileSync(files.mcpConfig, mcpConfigJson(lockwire), "utf8");
|
|
353
|
+
const env = {
|
|
354
|
+
...(opts.env ?? process.env),
|
|
355
|
+
LOCKWIRE_PROMPT_FILE: files.prompt,
|
|
356
|
+
LOCKWIRE_MCP_CONFIG: files.mcpConfig,
|
|
357
|
+
LOCKWIRE_REPO: repoRoot,
|
|
358
|
+
};
|
|
359
|
+
let command;
|
|
360
|
+
let args;
|
|
361
|
+
let shell = false;
|
|
362
|
+
if (opts.agentCommand) {
|
|
363
|
+
command = opts.agentCommand;
|
|
364
|
+
args = [];
|
|
365
|
+
shell = true;
|
|
366
|
+
}
|
|
367
|
+
else {
|
|
368
|
+
const agent = opts.agent ?? "claude-code";
|
|
369
|
+
({ command, args } = agentArgv(agent, prompt, files, {
|
|
370
|
+
...(opts.maxTurns !== undefined ? { maxTurns: opts.maxTurns } : {}),
|
|
371
|
+
bare: Boolean(env.CI),
|
|
372
|
+
}));
|
|
373
|
+
if (agent === "codex") {
|
|
374
|
+
// Codex reads MCP servers from $CODEX_HOME/config.toml: give it one with lockwire in it, and
|
|
375
|
+
// the user's own login if they have one (CI passes CODEX_API_KEY instead).
|
|
376
|
+
const home = join(work, "codex-home");
|
|
377
|
+
mkdirSync(home);
|
|
378
|
+
writeFileSync(join(home, "config.toml"), codexConfigToml(lockwire), "utf8");
|
|
379
|
+
const auth = join(env.CODEX_HOME ?? join(homedir(), ".codex"), "auth.json");
|
|
380
|
+
if (existsSync(auth))
|
|
381
|
+
copyFileSync(auth, join(home, "auth.json"));
|
|
382
|
+
env.CODEX_HOME = home;
|
|
383
|
+
}
|
|
384
|
+
}
|
|
385
|
+
const shown = shell
|
|
386
|
+
? command
|
|
387
|
+
: [command, ...args.map((a) => (a === prompt ? "<fix-docs prompt>" : a))].join(" ");
|
|
388
|
+
if (opts.dryRun) {
|
|
389
|
+
rmSync(work, { recursive: true, force: true });
|
|
390
|
+
return {
|
|
391
|
+
status: "partial",
|
|
392
|
+
before,
|
|
393
|
+
after: before,
|
|
394
|
+
...empty,
|
|
395
|
+
agent: { command: shown, exitCode: null },
|
|
396
|
+
markdown: `Dry run: would run \`${shown}\` on ${before.length} task(s).\n`,
|
|
397
|
+
};
|
|
398
|
+
}
|
|
399
|
+
// Everything the verdict is judged against is taken before the agent starts, never from state the
|
|
400
|
+
// agent could have edited: which files are docs, the anchors, the ledger, the commit and the index.
|
|
401
|
+
const lockBefore = await readLockfile(repoRoot);
|
|
402
|
+
const knownDocs = new Set(lockBefore.anchors.flatMap((a) => (a.doc ? [a.doc] : [])));
|
|
403
|
+
const ledgerBefore = readText(ledgerPath(repoRoot));
|
|
404
|
+
const headBefore = headCommit(repoRoot);
|
|
405
|
+
const indexBefore = indexEntries(repoRoot);
|
|
406
|
+
const treeBefore = treeHashes(repoRoot);
|
|
407
|
+
const outcome = await run(command, args, {
|
|
408
|
+
cwd: repoRoot,
|
|
409
|
+
env,
|
|
410
|
+
shell,
|
|
411
|
+
timeoutMs: opts.timeoutMs ?? 30 * 60 * 1000,
|
|
412
|
+
show: opts.showAgentOutput !== false,
|
|
413
|
+
});
|
|
414
|
+
rmSync(work, { recursive: true, force: true });
|
|
415
|
+
// The verdict is lockwire's, from scratch, not the agent's account of itself.
|
|
416
|
+
const problems = [];
|
|
417
|
+
const changed = new Set(diffMaps(treeBefore, treeHashes(repoRoot)));
|
|
418
|
+
for (const p of diffMaps(indexBefore, indexEntries(repoRoot)))
|
|
419
|
+
changed.add(p); // staged, not on disk
|
|
420
|
+
const changedFiles = [...changed].sort();
|
|
421
|
+
const outOfBounds = changedFiles.filter((f) => !LOCKWIRE_OWN.has(f) && !knownDocs.has(f) && !isScannedDoc(f, config));
|
|
422
|
+
const headAfter = headCommit(repoRoot);
|
|
423
|
+
if (headAfter !== headBefore)
|
|
424
|
+
problems.push(`The agent moved HEAD (${headBefore ?? "no commit"} to ${headAfter ?? "no commit"}): it committed or checked something out, and its commits would ride into the pull request.`);
|
|
425
|
+
let after = before;
|
|
426
|
+
let lockAfter = lockBefore;
|
|
427
|
+
let added = [];
|
|
428
|
+
try {
|
|
429
|
+
lockAfter = await readLockfile(repoRoot);
|
|
430
|
+
const state = lockwireStateProblems(ledgerBefore, readText(ledgerPath(repoRoot)), lockBefore, lockAfter);
|
|
431
|
+
added = state.added;
|
|
432
|
+
problems.push(...state.problems);
|
|
433
|
+
after = await listTasks(repoRoot, config, opts.scope);
|
|
434
|
+
after = [...after, ...(await retiredInPlace(repoRoot, before, after, lockAfter))];
|
|
435
|
+
}
|
|
436
|
+
catch (err) {
|
|
437
|
+
problems.push(`lockwire couldn't re-check the claims after the run: ${errorText(err)}`);
|
|
438
|
+
}
|
|
439
|
+
const resolutions = added
|
|
440
|
+
.filter((e) => RESOLUTION_EVENTS.has(e.event))
|
|
441
|
+
.map((e) => {
|
|
442
|
+
const a = lockAfter.anchors.find((x) => x.id === e.anchor);
|
|
443
|
+
return {
|
|
444
|
+
event: e.event,
|
|
445
|
+
anchor: e.anchor,
|
|
446
|
+
doc: a?.doc ?? null,
|
|
447
|
+
target: a ? `${a.target.path}${a.target.symbol ? `#${a.target.symbol}` : ""}` : "?",
|
|
448
|
+
claim: a?.claim?.excerpt ?? null,
|
|
449
|
+
note: e.note ?? null,
|
|
450
|
+
by: e.actor.tool?.name ?? e.actor.type,
|
|
451
|
+
};
|
|
452
|
+
});
|
|
453
|
+
const agentFailed = outcome.exitCode !== 0;
|
|
454
|
+
const status = outOfBounds.length > 0 ||
|
|
455
|
+
problems.length > 0 ||
|
|
456
|
+
(agentFailed && changedFiles.length === 0 && after.length === before.length)
|
|
457
|
+
? "refused"
|
|
458
|
+
: after.length === 0
|
|
459
|
+
? "fixed"
|
|
460
|
+
: "partial";
|
|
461
|
+
const report = {
|
|
462
|
+
status,
|
|
463
|
+
before,
|
|
464
|
+
after,
|
|
465
|
+
fixed: fixedCount(before, after),
|
|
466
|
+
problems,
|
|
467
|
+
resolutions,
|
|
468
|
+
changedFiles,
|
|
469
|
+
outOfBounds,
|
|
470
|
+
agent: {
|
|
471
|
+
command: shown,
|
|
472
|
+
exitCode: outcome.exitCode,
|
|
473
|
+
...(outcome.error ? { error: outcome.error } : {}),
|
|
474
|
+
},
|
|
475
|
+
markdown: "",
|
|
476
|
+
};
|
|
477
|
+
report.markdown = summaryMarkdown(report);
|
|
478
|
+
return report;
|
|
479
|
+
}
|
|
480
|
+
const cell = (s) => (s ?? "").replace(/\|/g, "\\|").replace(/\r\n|\r|\n/g, " ");
|
|
481
|
+
/** A pull-request body for an autofix run. */
|
|
482
|
+
export function summaryMarkdown(r) {
|
|
483
|
+
const lines = [];
|
|
484
|
+
const fixed = fixedCount(r.before, r.after);
|
|
485
|
+
lines.push(r.status === "refused"
|
|
486
|
+
? "## lockwire autofix: refused"
|
|
487
|
+
: `## lockwire autofix: ${fixed} of ${r.before.length} documentation claim${r.before.length === 1 ? "" : "s"} fixed`, "");
|
|
488
|
+
if (r.outOfBounds.length > 0)
|
|
489
|
+
lines.push("The agent changed files that aren't documentation, so this run must not be merged as a docs fix:", "", ...r.outOfBounds.map((f) => `- \`${cell(f)}\``), "");
|
|
490
|
+
if ((r.problems ?? []).length > 0)
|
|
491
|
+
lines.push(...(r.problems ?? []).map((p) => `- ${cell(p)}`), "");
|
|
492
|
+
if (r.agent?.error || (r.agent && r.agent.exitCode !== 0))
|
|
493
|
+
lines.push(`The agent (\`${cell(r.agent.command)}\`) ${r.agent.error ? `failed: ${cell(r.agent.error)}` : `exited with code ${r.agent.exitCode}`}.`, "");
|
|
494
|
+
if (r.resolutions.length > 0) {
|
|
495
|
+
lines.push("| Claim | Bound to | What the agent did |", "| --- | --- | --- |");
|
|
496
|
+
for (const x of r.resolutions)
|
|
497
|
+
lines.push(`| ${cell(x.doc)}: ${cell(x.claim)} | \`${cell(x.target)}\` | ${cell(x.event === "anchor.acknowledged" ? `retired (${x.note ?? "superseded"})` : (x.note ?? "re-stamped"))} |`);
|
|
498
|
+
lines.push("");
|
|
499
|
+
}
|
|
500
|
+
if (r.after.length > 0) {
|
|
501
|
+
lines.push(`Still open (${r.after.length}):`, "", ...r.after.map((t) => `- \`${cell(t.id)}\` ${t.kind} — ${cell(t.doc ?? "(lockfile-only)")}:${t.line ?? "-"}: ${cell(t.summary)}`), "");
|
|
502
|
+
}
|
|
503
|
+
lines.push("Every change above was re-checked by lockwire after the agent finished: a number that still disagreed with its data, or a marker pointing at nothing, would still be listed as open. `lockwire history <id>` shows each claim's full record.");
|
|
504
|
+
return `${lines.join("\n")}\n`;
|
|
505
|
+
}
|
|
506
|
+
//# sourceMappingURL=autofix.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"autofix.js","sourceRoot":"","sources":["../src/autofix.ts"],"names":[],"mappings":"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"}
|
package/dist/changed.d.ts
CHANGED
|
@@ -17,6 +17,11 @@ export declare function changedFiles(repoRoot: string, opts?: ChangedOptions): s
|
|
|
17
17
|
* not cached: a long-lived process (the MCP server) outlives many commits.
|
|
18
18
|
*/
|
|
19
19
|
export declare function headCommit(repoRoot: string): string | null;
|
|
20
|
+
/**
|
|
21
|
+
* The git index, path by path (`<mode> <object> <stage>`), or null outside a git repository. A run that
|
|
22
|
+
* only stages a file still changes what the next `git commit` records, so autofix compares this too.
|
|
23
|
+
*/
|
|
24
|
+
export declare function indexEntries(repoRoot: string): Map<string, string> | null;
|
|
20
25
|
/**
|
|
21
26
|
* A file's text at `commit`, read from git, or null if git, the commit or the file isn't there.
|
|
22
27
|
* `commit` comes from the lockfile, which anyone can edit, so only a plain hex object name is passed
|
package/dist/changed.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"changed.d.ts","sourceRoot":"","sources":["../src/changed.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,cAAc;IAC7B,mGAAmG;IACnG,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,sEAAsE;IACtE,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED,KAAK,GAAG,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,MAAM,CAAC;AA2BtC,wFAAwF;AACxF,wBAAgB,WAAW,CACzB,GAAG,EAAE,GAAG,EACR,QAAQ,CAAC,EAAE,MAAM,EACjB,GAAG,GAAE,MAAM,CAAC,UAAwB,GACnC,MAAM,CAiBR;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,GAAE,cAAmB,GAAG,MAAM,EAAE,CAoBlF;AAED;;;GAGG;AACH,wBAAgB,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAE1D;AAED;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAG1F;AAED;;;;GAIG;AACH,wBAAgB,eAAe,CAC7B,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,GAAG,IAAI,EACnB,KAAK,SAAM,GACV,MAAM,EAAE,CAUV"}
|
|
1
|
+
{"version":3,"file":"changed.d.ts","sourceRoot":"","sources":["../src/changed.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,cAAc;IAC7B,mGAAmG;IACnG,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,sEAAsE;IACtE,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED,KAAK,GAAG,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,MAAM,CAAC;AA2BtC,wFAAwF;AACxF,wBAAgB,WAAW,CACzB,GAAG,EAAE,GAAG,EACR,QAAQ,CAAC,EAAE,MAAM,EACjB,GAAG,GAAE,MAAM,CAAC,UAAwB,GACnC,MAAM,CAiBR;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,GAAE,cAAmB,GAAG,MAAM,EAAE,CAoBlF;AAED;;;GAGG;AACH,wBAAgB,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAE1D;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI,CASzE;AAED;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAG1F;AAED;;;;GAIG;AACH,wBAAgB,eAAe,CAC7B,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,GAAG,IAAI,EACnB,KAAK,SAAM,GACV,MAAM,EAAE,CAUV"}
|
package/dist/changed.js
CHANGED
|
@@ -69,6 +69,22 @@ export function changedFiles(repoRoot, opts = {}) {
|
|
|
69
69
|
export function headCommit(repoRoot) {
|
|
70
70
|
return tryGit(gitRunner(repoRoot), ["rev-parse", "--short", "HEAD"])?.trim() || null;
|
|
71
71
|
}
|
|
72
|
+
/**
|
|
73
|
+
* The git index, path by path (`<mode> <object> <stage>`), or null outside a git repository. A run that
|
|
74
|
+
* only stages a file still changes what the next `git commit` records, so autofix compares this too.
|
|
75
|
+
*/
|
|
76
|
+
export function indexEntries(repoRoot) {
|
|
77
|
+
const out = tryGit(gitRunner(repoRoot), ["ls-files", "--stage", "-z"]);
|
|
78
|
+
if (out === null)
|
|
79
|
+
return null;
|
|
80
|
+
const entries = new Map();
|
|
81
|
+
for (const entry of out.split("\0")) {
|
|
82
|
+
const tab = entry.indexOf("\t");
|
|
83
|
+
if (tab > 0)
|
|
84
|
+
entries.set(toPosix(entry.slice(tab + 1)), entry.slice(0, tab));
|
|
85
|
+
}
|
|
86
|
+
return entries;
|
|
87
|
+
}
|
|
72
88
|
/**
|
|
73
89
|
* A file's text at `commit`, read from git, or null if git, the commit or the file isn't there.
|
|
74
90
|
* `commit` comes from the lockfile, which anyone can edit, so only a plain hex object name is passed
|
package/dist/changed.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"changed.js","sourceRoot":"","sources":["../src/changed.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"changed.js","sourceRoot":"","sources":["../src/changed.ts"],"names":[],"mappings":"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"}
|