agent-coord-mcp 0.26.18 → 0.26.20
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 +82 -0
- package/dist/build.js +113 -0
- package/dist/build.js.map +1 -0
- package/dist/capabilities.js +214 -0
- package/dist/capabilities.js.map +1 -0
- package/dist/prefix.js +64 -0
- package/dist/prefix.js.map +1 -0
- package/dist/roles.js +132 -0
- package/dist/roles.js.map +1 -0
- package/dist/server-identity.js +82 -0
- package/dist/server-identity.js.map +1 -0
- package/dist/server.js +668 -0
- package/dist/server.js.map +1 -0
- package/dist/store.js +553 -0
- package/dist/store.js.map +1 -0
- package/dist/tools/admin.js +323 -0
- package/dist/tools/admin.js.map +1 -0
- package/dist/tools/attention.js +73 -0
- package/dist/tools/attention.js.map +1 -0
- package/dist/tools/away.js +285 -0
- package/dist/tools/away.js.map +1 -0
- package/dist/tools/board-ref.js +208 -0
- package/dist/tools/board-ref.js.map +1 -0
- package/dist/tools/event-kinds.js +39 -0
- package/dist/tools/event-kinds.js.map +1 -0
- package/dist/tools/events.js +234 -0
- package/dist/tools/events.js.map +1 -0
- package/dist/tools/index.js +14 -0
- package/dist/tools/index.js.map +1 -0
- package/dist/tools/logwatch.js +85 -0
- package/dist/tools/logwatch.js.map +1 -0
- package/dist/tools/messaging.js +706 -0
- package/dist/tools/messaging.js.map +1 -0
- package/dist/tools/record-events.js +380 -0
- package/dist/tools/record-events.js.map +1 -0
- package/dist/tools/records.js +1205 -0
- package/dist/tools/records.js.map +1 -0
- package/dist/tools/registry.js +529 -0
- package/dist/tools/registry.js.map +1 -0
- package/dist/tools/render.js +2 -0
- package/dist/tools/render.js.map +1 -0
- package/dist/tools/rooms.js +210 -0
- package/dist/tools/rooms.js.map +1 -0
- package/dist/tools/rotate.js +143 -0
- package/dist/tools/rotate.js.map +1 -0
- package/dist/tools/scopes.js +126 -0
- package/dist/tools/scopes.js.map +1 -0
- package/dist/tools/shared.js +104 -0
- package/dist/tools/shared.js.map +1 -0
- package/dist/tools/stall.js +415 -0
- package/dist/tools/stall.js.map +1 -0
- package/dist/tools/transport.js +1918 -0
- package/dist/tools/transport.js.map +1 -0
- package/dist/tools/work.js +465 -0
- package/dist/tools/work.js.map +1 -0
- package/dist/tools/worktrees.js +581 -0
- package/dist/tools/worktrees.js.map +1 -0
- package/dist/transports/config.js +82 -0
- package/dist/transports/config.js.map +1 -0
- package/dist/transports/index.js +113 -0
- package/dist/transports/index.js.map +1 -0
- package/dist/transports/tmux.js +140 -0
- package/dist/transports/tmux.js.map +1 -0
- package/dist/transports/types.js +86 -0
- package/dist/transports/types.js.map +1 -0
- package/dist/typed-records.js +174 -0
- package/dist/typed-records.js.map +1 -0
- package/dist/work.js +2 -0
- package/dist/work.js.map +1 -0
- package/hooks/tmux-pusher.mjs +33 -3
- package/package.json +1 -1
- package/src/capabilities.ts +104 -1
- package/src/server.ts +30 -1
- package/src/tools/records.ts +221 -34
- package/src/tools/registry.ts +36 -5
- package/src/tools/shared.ts +12 -36
- package/src/tools/stall.ts +2 -1
- package/src/tools/transport.ts +96 -43
- package/src/tools/work.ts +95 -3
- package/src/tools/worktrees.ts +234 -32
- package/src/transports/config.ts +110 -0
- package/src/transports/index.ts +126 -0
- package/src/transports/tmux.ts +177 -0
- package/src/transports/types.ts +201 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"work.js","sourceRoot":"","sources":["../../src/tools/work.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,581 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* `ensure_worktree` — the worktree invariant as a verb.
|
|
3
|
+
*
|
|
4
|
+
* `git worktree add` lives on five cards as a RECIPE, which means it is followed
|
|
5
|
+
* from memory and skipped under pressure. The failure it prevents is not
|
|
6
|
+
* theoretical: a shared checkout is how two agents' edits land in one tree, and
|
|
7
|
+
* the primary checkout is the one everybody reaches for because it is the path
|
|
8
|
+
* they already have.
|
|
9
|
+
*
|
|
10
|
+
* CUT FROM `origin/<base>`, NEVER A LOCAL BRANCH. A local `main` is whatever the
|
|
11
|
+
* last person left there; `origin/<base>` is what everyone else will merge into.
|
|
12
|
+
* This is the same rule as `land`'s target-tip check, one step earlier: the
|
|
13
|
+
* question is always "what does the thing I am merging into have?".
|
|
14
|
+
*/
|
|
15
|
+
import { execFileSync } from "node:child_process";
|
|
16
|
+
import { existsSync, realpathSync } from "node:fs";
|
|
17
|
+
import path from "node:path";
|
|
18
|
+
import { z } from "zod";
|
|
19
|
+
/**
|
|
20
|
+
* Compare paths by their REAL path, never by string.
|
|
21
|
+
*
|
|
22
|
+
* git reports `/private/var/...` where a caller passes `/var/...` — macOS's
|
|
23
|
+
* symlink — so `path.resolve` comparison silently MISSES the primary and the
|
|
24
|
+
* guard that refuses it never fires. The same symlink cost a carrier check its
|
|
25
|
+
* main-module guard earlier today: it exited 0 having done nothing.
|
|
26
|
+
*/
|
|
27
|
+
const samePath = (a, b) => {
|
|
28
|
+
const real = (x) => {
|
|
29
|
+
try {
|
|
30
|
+
return realpathSync(x);
|
|
31
|
+
}
|
|
32
|
+
catch {
|
|
33
|
+
return path.resolve(x);
|
|
34
|
+
}
|
|
35
|
+
};
|
|
36
|
+
return real(a) === real(b);
|
|
37
|
+
};
|
|
38
|
+
const git = (repo, args) => execFileSync("git", args, { cwd: repo, encoding: "utf8", stdio: ["ignore", "pipe", "ignore"] }).trim();
|
|
39
|
+
/** Every worktree git knows about: `{path, branch, bare}` in list order. The
|
|
40
|
+
* FIRST entry is the primary checkout — that is what `--porcelain` guarantees. */
|
|
41
|
+
export function listWorktrees(repo) {
|
|
42
|
+
const out = [];
|
|
43
|
+
let cur = null;
|
|
44
|
+
for (const line of git(repo, ["worktree", "list", "--porcelain"]).split("\n")) {
|
|
45
|
+
if (line.startsWith("worktree ")) {
|
|
46
|
+
if (cur)
|
|
47
|
+
out.push(cur);
|
|
48
|
+
cur = { path: line.slice(9), branch: null };
|
|
49
|
+
}
|
|
50
|
+
else if (line.startsWith("branch ") && cur) {
|
|
51
|
+
cur.branch = line.slice(7).replace(/^refs\/heads\//, "");
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
if (cur)
|
|
55
|
+
out.push(cur);
|
|
56
|
+
return out;
|
|
57
|
+
}
|
|
58
|
+
/** The primary checkout — the tree nobody may be given for a slice. */
|
|
59
|
+
export function primaryOf(repo) {
|
|
60
|
+
const all = listWorktrees(repo);
|
|
61
|
+
return all.length ? all[0].path : null;
|
|
62
|
+
}
|
|
63
|
+
const isDirty = (repo) => {
|
|
64
|
+
try {
|
|
65
|
+
return git(repo, ["status", "--porcelain"]).length > 0;
|
|
66
|
+
}
|
|
67
|
+
catch {
|
|
68
|
+
return true; // unreadable is not clean
|
|
69
|
+
}
|
|
70
|
+
};
|
|
71
|
+
export const ensureWorktreeSchema = {
|
|
72
|
+
agentId: z.string().min(1),
|
|
73
|
+
repo: z.string().min(1),
|
|
74
|
+
base: z.string().min(1),
|
|
75
|
+
task: z.string().optional(),
|
|
76
|
+
ephemeral: z.boolean().optional(),
|
|
77
|
+
parent: z.string().optional(),
|
|
78
|
+
};
|
|
79
|
+
export async function ensureWorktreeTool(args) {
|
|
80
|
+
const { agentId, repo, base } = args;
|
|
81
|
+
if (!path.isAbsolute(repo))
|
|
82
|
+
return { ok: false, error: `repo must be an absolute path, got '${repo}'` };
|
|
83
|
+
if (!existsSync(repo))
|
|
84
|
+
return { ok: false, error: `no such repo: ${repo}` };
|
|
85
|
+
let primary;
|
|
86
|
+
try {
|
|
87
|
+
primary = primaryOf(repo);
|
|
88
|
+
}
|
|
89
|
+
catch (e) {
|
|
90
|
+
return { ok: false, error: `not a git repository (${String(e.message).split("\n")[0]})` };
|
|
91
|
+
}
|
|
92
|
+
// `repo` IS the primary checkout in normal use — that is how you address the
|
|
93
|
+
// repository. What must never happen is HANDING AN AGENT THE PRIMARY as its
|
|
94
|
+
// slice tree, so the refusal is on the computed TARGET, not on the input.
|
|
95
|
+
//
|
|
96
|
+
// Reading spec 1.4 literally ("calling with the primary path exits non-zero")
|
|
97
|
+
// would refuse every call and make the verb unusable, since `repo` is always
|
|
98
|
+
// the primary. The invariant it protects is the one implemented here: two
|
|
99
|
+
// agents editing one tree. Flagged in the PR rather than silently chosen.
|
|
100
|
+
return await create({ ...args, primary: primary ?? repo });
|
|
101
|
+
}
|
|
102
|
+
async function create(a) {
|
|
103
|
+
const { repo, base, agentId, primary } = a;
|
|
104
|
+
// The BASE must exist as a REMOTE ref. A missing `origin/<base>` is refused
|
|
105
|
+
// rather than silently falling back to a local branch of the same name — the
|
|
106
|
+
// local one is whatever the last person left there.
|
|
107
|
+
const ref = `origin/${base}`;
|
|
108
|
+
let sha;
|
|
109
|
+
try {
|
|
110
|
+
git(repo, ["fetch", "--quiet", "origin", base]);
|
|
111
|
+
}
|
|
112
|
+
catch {
|
|
113
|
+
/* offline or no remote: fall through to the rev-parse, which is the real test */
|
|
114
|
+
}
|
|
115
|
+
try {
|
|
116
|
+
sha = git(repo, ["rev-parse", "--verify", `${ref}^{commit}`]);
|
|
117
|
+
}
|
|
118
|
+
catch {
|
|
119
|
+
return {
|
|
120
|
+
ok: false,
|
|
121
|
+
error: `${ref} does not resolve — refusing to cut a tree from a local '${base}', which is whatever the last person left there. Fetch the remote, or name a base that exists on origin.`,
|
|
122
|
+
};
|
|
123
|
+
}
|
|
124
|
+
// ONE PROJECT PARENT: trees live beside the primary, named for the agent, so a
|
|
125
|
+
// stray tree is identifiable without opening it.
|
|
126
|
+
const parent = a.parent ?? path.dirname(primary);
|
|
127
|
+
const leaf = `${path.basename(primary)}-${agentId}${a.ephemeral ? "-ephemeral" : ""}`;
|
|
128
|
+
const target = path.join(parent, leaf);
|
|
129
|
+
const branch = a.task ? `${agentId}/${a.task}` : `${agentId}/work`;
|
|
130
|
+
// DEFENCE IN DEPTH, AND IT IS CURRENTLY UNREACHABLE — stated because a guard
|
|
131
|
+
// that cannot fire is worth nothing until someone knows it cannot.
|
|
132
|
+
//
|
|
133
|
+
// The leaf is always `<primary-basename>-<agentId>`, so the target can never
|
|
134
|
+
// equal the primary while that naming holds. I tried to write a test that
|
|
135
|
+
// reaches this branch and could not without symlink contrivance; the honest
|
|
136
|
+
// conclusion is that the NAMING is the real invariant and this is a backstop
|
|
137
|
+
// for the day someone changes it. It is kept rather than deleted for exactly
|
|
138
|
+
// that day, and labelled rather than left looking load-bearing.
|
|
139
|
+
//
|
|
140
|
+
// What actually protects the invariant is tested instead: the target always
|
|
141
|
+
// differs from the primary, for any agent id.
|
|
142
|
+
if (samePath(target, primary)) {
|
|
143
|
+
return {
|
|
144
|
+
ok: false,
|
|
145
|
+
error: `refusing to hand back the PRIMARY checkout (${primary}) as a slice tree — that is the path everyone already has, ` +
|
|
146
|
+
`so it is the one two agents end up editing at once. Pass a different parent or agentId.`,
|
|
147
|
+
};
|
|
148
|
+
}
|
|
149
|
+
const existing = listWorktrees(repo).find((w) => samePath(w.path, target));
|
|
150
|
+
if (existing) {
|
|
151
|
+
// IDEMPOTENT, and it reports what it FOUND rather than what it would have
|
|
152
|
+
// made: a verb that silently returns a tree on a different branch than asked
|
|
153
|
+
// for is the adjacent-answer shape.
|
|
154
|
+
const head = git(existing.path, ["rev-parse", "HEAD"]);
|
|
155
|
+
// IS THE REUSED TREE ACTUALLY AT THE BASE IT CLAIMS?
|
|
156
|
+
//
|
|
157
|
+
// The verb warned when an existing tree was on a different BRANCH and said
|
|
158
|
+
// nothing about it being behind the BASE — so a tree left on last week's
|
|
159
|
+
// main was handed back as ready. Starting a new task there produces the
|
|
160
|
+
// "stale main -> confidently-wrong inventories" failure the worker card
|
|
161
|
+
// already warns about, and nothing about the result looks stale.
|
|
162
|
+
//
|
|
163
|
+
// Reported here, not refused: an existing tree legitimately holds
|
|
164
|
+
// in-progress work mid-slice (1.3). The refusal belongs to `claim`, which
|
|
165
|
+
// is the verb that means "start something new".
|
|
166
|
+
let atBase = false;
|
|
167
|
+
let behindBy = null;
|
|
168
|
+
try {
|
|
169
|
+
const baseSha = git(repo, ["rev-parse", "--verify", `${ref}^{commit}`]);
|
|
170
|
+
atBase = head === baseSha;
|
|
171
|
+
if (!atBase)
|
|
172
|
+
behindBy = Number(git(existing.path, ["rev-list", "--count", `HEAD..${ref}`])) || 0;
|
|
173
|
+
}
|
|
174
|
+
catch {
|
|
175
|
+
// NOT MEASURED IS NOT AT-BASE. Leaving `atBase` false is the safe
|
|
176
|
+
// direction: it makes `claim` ask rather than assume.
|
|
177
|
+
atBase = false;
|
|
178
|
+
}
|
|
179
|
+
return {
|
|
180
|
+
ok: true,
|
|
181
|
+
path: existing.path,
|
|
182
|
+
sha: head,
|
|
183
|
+
branch: existing.branch,
|
|
184
|
+
created: false,
|
|
185
|
+
base: ref,
|
|
186
|
+
atBase,
|
|
187
|
+
behindBy: behindBy ?? 0,
|
|
188
|
+
...(existing.branch !== branch
|
|
189
|
+
? { warning: `existing tree is on '${existing.branch}', not the '${branch}' this call would have created — reusing it, NOT re-pointing it` }
|
|
190
|
+
: {}),
|
|
191
|
+
};
|
|
192
|
+
}
|
|
193
|
+
try {
|
|
194
|
+
git(repo, ["worktree", "add", "-q", "-b", branch, target, sha]);
|
|
195
|
+
}
|
|
196
|
+
catch (e) {
|
|
197
|
+
return { ok: false, error: `git worktree add failed: ${String(e.message).split("\n")[0]}` };
|
|
198
|
+
}
|
|
199
|
+
return {
|
|
200
|
+
ok: true,
|
|
201
|
+
path: target,
|
|
202
|
+
sha,
|
|
203
|
+
branch,
|
|
204
|
+
created: true,
|
|
205
|
+
base: ref,
|
|
206
|
+
// Cut from `sha`, which IS origin/<base> — true by construction here, and
|
|
207
|
+
// stated so callers need not special-case "created" to know it.
|
|
208
|
+
atBase: true,
|
|
209
|
+
behindBy: 0,
|
|
210
|
+
...(a.ephemeral
|
|
211
|
+
? {
|
|
212
|
+
ephemeral: true,
|
|
213
|
+
// A VERB NAME, NOT A COMMAND LINE. This used to hand back the shell to
|
|
214
|
+
// paste — the tool knew the repo, path and branch and spent the agent's
|
|
215
|
+
// tokens on work it could do itself.
|
|
216
|
+
releaseWith: { verb: "release_worktree", args: { repo, path: target, apply: true } },
|
|
217
|
+
}
|
|
218
|
+
: {}),
|
|
219
|
+
};
|
|
220
|
+
}
|
|
221
|
+
// ---------- shared: is this tree's work already in the base? ----------
|
|
222
|
+
/**
|
|
223
|
+
* Are the commits HEAD has beyond `tip` ALREADY LANDED there?
|
|
224
|
+
*
|
|
225
|
+
* `rev-list --count <tip>..HEAD` is pure ANCESTRY, and under squash merge a landed
|
|
226
|
+
* branch's own shas never enter the base's history — so `ahead` stays > 0 FOREVER
|
|
227
|
+
* for work that shipped (q-5c40db91; 20 of the last 20 merges on this repo's main
|
|
228
|
+
* are single-parent). Reading `ahead > 0` as "this tree holds unlanded work" makes
|
|
229
|
+
* the verb whose job is fast-forwarding idle trees classify a FINISHED tree as
|
|
230
|
+
* mid-slice, permanently.
|
|
231
|
+
*
|
|
232
|
+
* MEASURED, and it cost a lane cycle: a `claim` was refused because a worker's tree
|
|
233
|
+
* "reads as 1 commit not on origin/main" while that branch had been squash-merged an
|
|
234
|
+
* hour earlier. Same inverted alarm as the item's headline — landed work reported as
|
|
235
|
+
* unmerged, inviting preservation of work already shipped — inside our own tooling.
|
|
236
|
+
*
|
|
237
|
+
* `git cherry` compares PATCH IDS, so every line marked `-` means every commit's patch
|
|
238
|
+
* is already upstream. It is NOT complete: several commits squashed into one carry a
|
|
239
|
+
* different combined patch id, so a negative is INCONCLUSIVE and is reported as
|
|
240
|
+
* mid-slice exactly as before. Only a positive changes the verdict, which keeps the
|
|
241
|
+
* failure direction the same as today's for everything this cannot prove.
|
|
242
|
+
*/
|
|
243
|
+
function aheadIsLanded(at, tip) {
|
|
244
|
+
// `git` here THROWS rather than returning null, so the catch is what keeps an
|
|
245
|
+
// UNREADABLE answer out of the landed bucket: not measured is not landed, and
|
|
246
|
+
// the tree stays mid-slice, which is the direction that refuses rather than
|
|
247
|
+
// the direction that tells someone their work is safe to discard.
|
|
248
|
+
let cherry;
|
|
249
|
+
try {
|
|
250
|
+
cherry = git(at, ["cherry", tip, "HEAD"]);
|
|
251
|
+
}
|
|
252
|
+
catch {
|
|
253
|
+
return false;
|
|
254
|
+
}
|
|
255
|
+
if (cherry.trim().length === 0)
|
|
256
|
+
return false;
|
|
257
|
+
return cherry
|
|
258
|
+
.trim()
|
|
259
|
+
.split("\n")
|
|
260
|
+
.every((l) => l.trim().startsWith("-"));
|
|
261
|
+
}
|
|
262
|
+
// ---------- 1.2 / 1.3: refresh idle trees, never mid-slice ----------
|
|
263
|
+
export const refreshWorktreesSchema = {
|
|
264
|
+
repo: z.string().min(1),
|
|
265
|
+
base: z.string().min(1),
|
|
266
|
+
apply: z.boolean().optional(),
|
|
267
|
+
};
|
|
268
|
+
/**
|
|
269
|
+
* Fast-forward IDLE trees onto `origin/<base>`. Never `--force`, never a
|
|
270
|
+
* mid-slice tree.
|
|
271
|
+
*
|
|
272
|
+
* A tree is MID-SLICE when it is dirty or holds commits the base does not.
|
|
273
|
+
* Pulling under someone's feet is worse than staleness: staleness is visible in
|
|
274
|
+
* a diff, a clobbered work-in-progress is not. So dirty or diverged is REFUSED
|
|
275
|
+
* per tree and named, and the run continues for the others.
|
|
276
|
+
*/
|
|
277
|
+
export async function refreshWorktreesTool(args) {
|
|
278
|
+
const { repo, base } = args;
|
|
279
|
+
const ref = `origin/${base}`;
|
|
280
|
+
try {
|
|
281
|
+
git(repo, ["fetch", "--quiet", "origin", base]);
|
|
282
|
+
}
|
|
283
|
+
catch {
|
|
284
|
+
/* reported per tree below */
|
|
285
|
+
}
|
|
286
|
+
let tip;
|
|
287
|
+
try {
|
|
288
|
+
tip = git(repo, ["rev-parse", "--verify", `${ref}^{commit}`]);
|
|
289
|
+
}
|
|
290
|
+
catch {
|
|
291
|
+
return { ok: false, error: `${ref} does not resolve — nothing to fast-forward onto` };
|
|
292
|
+
}
|
|
293
|
+
const results = [];
|
|
294
|
+
for (const w of listWorktrees(repo)) {
|
|
295
|
+
const at = w.path;
|
|
296
|
+
if (samePath(at, primaryOf(repo) ?? "")) {
|
|
297
|
+
// THE PRIMARY CHECKOUT IS REPORTED, ALWAYS — it used to be skipped with
|
|
298
|
+
// "not a slice tree", which is true and useless. It is the tree David
|
|
299
|
+
// reads, the one every hand-run measurement runs in, and a silent skip
|
|
300
|
+
// let it sit arbitrarily far behind while this verb reported a clean
|
|
301
|
+
// sweep. "Not ours to fast-forward" and "nothing to say about it" are
|
|
302
|
+
// different claims and only the first one was intended.
|
|
303
|
+
let behind = "unknown";
|
|
304
|
+
let ahead = "unknown";
|
|
305
|
+
try {
|
|
306
|
+
behind = git(at, ["rev-list", "--count", `HEAD..${tip}`]);
|
|
307
|
+
ahead = git(at, ["rev-list", "--count", `${tip}..HEAD`]);
|
|
308
|
+
}
|
|
309
|
+
catch {
|
|
310
|
+
/* left as unknown — an unreadable count must not read as zero */
|
|
311
|
+
}
|
|
312
|
+
const dirty = isDirty(at);
|
|
313
|
+
// FAST-FORWARD ONLY, AND ONLY WHEN CLEAN. A ff-only merge cannot rewrite
|
|
314
|
+
// history or resolve a conflict, so the worst case is a refusal. Dirty is
|
|
315
|
+
// refused for the same reason a slice tree is: uncommitted work is what a
|
|
316
|
+
// diff cannot show and git cannot give back.
|
|
317
|
+
const canFf = !dirty && ahead === "0" && behind !== "0" && behind !== "unknown";
|
|
318
|
+
if (args.apply && canFf) {
|
|
319
|
+
try {
|
|
320
|
+
git(at, ["merge", "--ff-only", ref]);
|
|
321
|
+
results.push({ path: w.path, action: "fast-forwarded", why: `primary checkout advanced ${behind} commit(s) to ${ref}` });
|
|
322
|
+
continue;
|
|
323
|
+
}
|
|
324
|
+
catch (e) {
|
|
325
|
+
results.push({ path: w.path, action: "refused", why: `primary checkout: ff-only merge failed — ${e.message}` });
|
|
326
|
+
continue;
|
|
327
|
+
}
|
|
328
|
+
}
|
|
329
|
+
results.push({
|
|
330
|
+
path: w.path,
|
|
331
|
+
action: behind === "0" ? "current" : "stale",
|
|
332
|
+
why: behind === "0"
|
|
333
|
+
? `primary checkout is at ${ref}`
|
|
334
|
+
: `primary checkout is ${behind} commit(s) behind ${ref}` +
|
|
335
|
+
(dirty
|
|
336
|
+
? " and DIRTY — not fast-forwarded; uncommitted work is what a diff cannot show"
|
|
337
|
+
: ahead !== "0"
|
|
338
|
+
? aheadIsLanded(at, tip)
|
|
339
|
+
? ` and ${ahead} ahead whose patches are ALREADY UPSTREAM — squash-merged, so ancestry will never agree; not fast-forwarded, but nothing here needs preserving`
|
|
340
|
+
: ` and ${ahead} ahead — not fast-forwarded; it has commits ${ref} does not`
|
|
341
|
+
: args.apply
|
|
342
|
+
? ""
|
|
343
|
+
: " — pass apply:true to fast-forward it"),
|
|
344
|
+
});
|
|
345
|
+
continue;
|
|
346
|
+
}
|
|
347
|
+
if (isDirty(at)) {
|
|
348
|
+
results.push({ path: w.path, action: "refused", why: "MID-SLICE: uncommitted changes. Pulling here would clobber work a diff cannot show." });
|
|
349
|
+
continue;
|
|
350
|
+
}
|
|
351
|
+
let head;
|
|
352
|
+
try {
|
|
353
|
+
head = git(at, ["rev-parse", "HEAD"]);
|
|
354
|
+
}
|
|
355
|
+
catch {
|
|
356
|
+
results.push({ path: w.path, action: "refused", why: "unreadable HEAD" });
|
|
357
|
+
continue;
|
|
358
|
+
}
|
|
359
|
+
if (head === tip) {
|
|
360
|
+
results.push({ path: w.path, action: "current", why: `already at ${ref}` });
|
|
361
|
+
continue;
|
|
362
|
+
}
|
|
363
|
+
let ahead = "0";
|
|
364
|
+
try {
|
|
365
|
+
ahead = git(at, ["rev-list", "--count", `${tip}..HEAD`]);
|
|
366
|
+
}
|
|
367
|
+
catch {
|
|
368
|
+
/* treated as diverged below */
|
|
369
|
+
}
|
|
370
|
+
if (ahead !== "0") {
|
|
371
|
+
// LANDED, NOT MID-SLICE — the ancestry count cannot tell these apart.
|
|
372
|
+
if (aheadIsLanded(at, tip)) {
|
|
373
|
+
results.push({
|
|
374
|
+
path: w.path,
|
|
375
|
+
action: "landed",
|
|
376
|
+
why: `${ahead} commit(s) are not ancestors of ${ref}, but every one of their PATCHES is already upstream — ` +
|
|
377
|
+
`this branch was SQUASH-MERGED and its work has shipped. Ancestry can never say so: a squash writes a new ` +
|
|
378
|
+
`commit, so these shas will read as "not on ${ref}" forever. Nothing here needs preserving; detach to ${ref} ` +
|
|
379
|
+
`(or delete the branch) and this tree is reusable. NOT fast-forwarded automatically — moving a tree off ` +
|
|
380
|
+
`committed work is a decision, not a refresh.`,
|
|
381
|
+
});
|
|
382
|
+
continue;
|
|
383
|
+
}
|
|
384
|
+
results.push({
|
|
385
|
+
path: w.path,
|
|
386
|
+
action: "refused",
|
|
387
|
+
why: `MID-SLICE: ${ahead} commit(s) not on ${ref}, and their patches are NOT upstream. Refusing rather than --force. ` +
|
|
388
|
+
`(A squash of SEVERAL commits into one changes the combined patch id, so this cannot prove the negative — ` +
|
|
389
|
+
`it reports mid-slice, which is the same direction it always failed in.)`,
|
|
390
|
+
});
|
|
391
|
+
continue;
|
|
392
|
+
}
|
|
393
|
+
if (!args.apply) {
|
|
394
|
+
results.push({ path: w.path, action: "would-fast-forward", why: `behind ${ref}` });
|
|
395
|
+
continue;
|
|
396
|
+
}
|
|
397
|
+
try {
|
|
398
|
+
git(at, ["merge", "--ff-only", tip]);
|
|
399
|
+
results.push({ path: w.path, action: "fast-forwarded", why: `to ${tip.slice(0, 8)}` });
|
|
400
|
+
}
|
|
401
|
+
catch (e) {
|
|
402
|
+
results.push({ path: w.path, action: "refused", why: `ff-only failed: ${String(e.message).split("\n")[0]}` });
|
|
403
|
+
}
|
|
404
|
+
}
|
|
405
|
+
return { ok: true, base: ref, tip: tip.slice(0, 8), applied: args.apply === true, trees: results };
|
|
406
|
+
}
|
|
407
|
+
// ---------- the counterpart to ensure_worktree: give the tree back ----------
|
|
408
|
+
/*
|
|
409
|
+
* `ensure_worktree` CREATED trees and nothing RELEASED them, so teardown stayed a
|
|
410
|
+
* hand step in five role cards — `git worktree prune` in coord-audit, coord-ci,
|
|
411
|
+
* coord-qa and coord-worker, `git worktree remove` twice in coordinator, which
|
|
412
|
+
* says so itself: "it never removes, so `git worktree remove`/`prune` remain hand
|
|
413
|
+
* steps". Seven commands for one act the bus already had the inputs for.
|
|
414
|
+
*
|
|
415
|
+
* WORSE THAN ABSENT: `ensure_worktree` COMPUTED the teardown command and handed it
|
|
416
|
+
* back as a string for the agent to paste (`removeWith`). The tool knew the repo,
|
|
417
|
+
* the path and the branch, and spent the agent's tokens on shell it could have run.
|
|
418
|
+
* That is the shape David ruled against: "where possible we should hide the
|
|
419
|
+
* plumbing from the agents".
|
|
420
|
+
*
|
|
421
|
+
* THE REFUSALS ARE THE POINT, and they inherit `refresh_worktrees`' direction —
|
|
422
|
+
* report by default, refuse per tree with the reason named, never clobber:
|
|
423
|
+
*
|
|
424
|
+
* - THE PRIMARY CHECKOUT IS NEVER RELEASED. It is the path everyone already has.
|
|
425
|
+
* - A DIRTY TREE IS REFUSED. Uncommitted work is what a diff cannot show and git
|
|
426
|
+
* cannot give back, so this is the one refusal with no override.
|
|
427
|
+
* - A TREE HOLDING UNLANDED COMMITS IS REFUSED — and "unlanded" is decided by
|
|
428
|
+
* `aheadIsLanded` (patch ids), NOT by ancestry. Under squash merge a landed
|
|
429
|
+
* branch's shas never enter the base, so ancestry calls every finished tree
|
|
430
|
+
* mid-slice forever (q-5c40db91). Using ancestry here would refuse to release
|
|
431
|
+
* exactly the trees that are safe to release, which is how the hand step
|
|
432
|
+
* survived: the guard would have been wrong and everyone would have forced it.
|
|
433
|
+
*
|
|
434
|
+
* A NEGATIVE FROM `aheadIsLanded` IS INCONCLUSIVE, NOT A NO. Several commits squashed
|
|
435
|
+
* into one carry a different combined patch id, so it cannot prove landedness for
|
|
436
|
+
* every shape. It therefore refuses and says the check was inconclusive rather than
|
|
437
|
+
* claiming the work is unlanded — the caller lands it, or passes `force:true`, which
|
|
438
|
+
* is recorded in the result so a forced release is findable afterwards.
|
|
439
|
+
*/
|
|
440
|
+
export const releaseWorktreeSchema = {
|
|
441
|
+
repo: z.string().min(1),
|
|
442
|
+
agentId: z.string().min(1).optional(),
|
|
443
|
+
path: z.string().min(1).optional(),
|
|
444
|
+
base: z.string().min(1).optional(),
|
|
445
|
+
apply: z.boolean().optional(),
|
|
446
|
+
force: z.boolean().optional(),
|
|
447
|
+
};
|
|
448
|
+
export async function releaseWorktreeTool(args) {
|
|
449
|
+
const { repo } = args;
|
|
450
|
+
if (!args.agentId && !args.path) {
|
|
451
|
+
return { ok: false, error: "name the tree to release: pass `agentId` or `path`" };
|
|
452
|
+
}
|
|
453
|
+
const trees = listWorktrees(repo);
|
|
454
|
+
const primary = primaryOf(repo) ?? "";
|
|
455
|
+
const target = args.path
|
|
456
|
+
? trees.find((w) => samePath(w.path, args.path))
|
|
457
|
+
: trees.find((w) => (w.branch ?? "").includes(args.agentId) || w.path.includes(args.agentId));
|
|
458
|
+
if (!target) {
|
|
459
|
+
return {
|
|
460
|
+
ok: false,
|
|
461
|
+
error: args.path
|
|
462
|
+
? `no worktree at '${args.path}' — nothing to release`
|
|
463
|
+
: `no worktree found for '${args.agentId}' — nothing to release`,
|
|
464
|
+
// An ABSENCE is reported with what WAS found, so a misaimed lookup is
|
|
465
|
+
// distinguishable from an empty world (the positive-control rule).
|
|
466
|
+
known: trees.map((w) => ({ path: w.path, branch: w.branch })),
|
|
467
|
+
};
|
|
468
|
+
}
|
|
469
|
+
const at = target.path;
|
|
470
|
+
const branch = target.branch;
|
|
471
|
+
if (samePath(at, primary)) {
|
|
472
|
+
return {
|
|
473
|
+
ok: false,
|
|
474
|
+
error: `refusing to release ${at}: that is the PRIMARY checkout, the path everyone already has`,
|
|
475
|
+
path: at,
|
|
476
|
+
};
|
|
477
|
+
}
|
|
478
|
+
if (isDirty(at)) {
|
|
479
|
+
return {
|
|
480
|
+
ok: false,
|
|
481
|
+
error: `refusing to release ${at}: the tree is DIRTY. Uncommitted work is what a diff cannot show and ` +
|
|
482
|
+
`git cannot give back, so this refusal has no override — commit it, stash it, or delete it by hand.`,
|
|
483
|
+
path: at,
|
|
484
|
+
branch,
|
|
485
|
+
dirty: true,
|
|
486
|
+
};
|
|
487
|
+
}
|
|
488
|
+
const base = args.base ?? "main";
|
|
489
|
+
const ref = `origin/${base}`;
|
|
490
|
+
let tip = null;
|
|
491
|
+
try {
|
|
492
|
+
git(repo, ["fetch", "--quiet", "origin", base]);
|
|
493
|
+
}
|
|
494
|
+
catch {
|
|
495
|
+
/* a stale tip is reported below rather than guessed at */
|
|
496
|
+
}
|
|
497
|
+
try {
|
|
498
|
+
tip = git(repo, ["rev-parse", "--verify", `${ref}^{commit}`]);
|
|
499
|
+
}
|
|
500
|
+
catch {
|
|
501
|
+
tip = null;
|
|
502
|
+
}
|
|
503
|
+
let ahead = "unknown";
|
|
504
|
+
if (tip) {
|
|
505
|
+
try {
|
|
506
|
+
ahead = git(at, ["rev-list", "--count", `${tip}..HEAD`]);
|
|
507
|
+
}
|
|
508
|
+
catch {
|
|
509
|
+
/* left unknown — an unreadable count must not read as zero */
|
|
510
|
+
}
|
|
511
|
+
}
|
|
512
|
+
const holdsWork = ahead !== "0";
|
|
513
|
+
const landed = tip && holdsWork ? aheadIsLanded(at, tip) : true;
|
|
514
|
+
if (!tip) {
|
|
515
|
+
return {
|
|
516
|
+
ok: false,
|
|
517
|
+
error: `refusing to release ${at}: ${ref} does not resolve, so whether this tree's work landed cannot be measured`,
|
|
518
|
+
path: at,
|
|
519
|
+
branch,
|
|
520
|
+
};
|
|
521
|
+
}
|
|
522
|
+
if (holdsWork && !landed && !args.force) {
|
|
523
|
+
return {
|
|
524
|
+
ok: false,
|
|
525
|
+
error: `refusing to release ${at}: it is ${ahead} commit(s) ahead of ${ref} and the patch-id check was ` +
|
|
526
|
+
`INCONCLUSIVE — not proof the work is unlanded, but not proof it landed either (several commits ` +
|
|
527
|
+
`squashed into one carry a different combined patch id). Land it, or pass force:true, which is recorded.`,
|
|
528
|
+
path: at,
|
|
529
|
+
branch,
|
|
530
|
+
ahead,
|
|
531
|
+
landedCheck: "inconclusive",
|
|
532
|
+
};
|
|
533
|
+
}
|
|
534
|
+
const plan = {
|
|
535
|
+
path: at,
|
|
536
|
+
branch,
|
|
537
|
+
ahead,
|
|
538
|
+
landedCheck: holdsWork ? (landed ? "landed" : "inconclusive") : "nothing-ahead",
|
|
539
|
+
...(args.force && holdsWork && !landed ? { forced: true } : {}),
|
|
540
|
+
};
|
|
541
|
+
if (!args.apply) {
|
|
542
|
+
return {
|
|
543
|
+
ok: true,
|
|
544
|
+
applied: false,
|
|
545
|
+
would: "remove the worktree and delete its branch",
|
|
546
|
+
...plan,
|
|
547
|
+
note: "reports by default; pass apply:true to remove",
|
|
548
|
+
};
|
|
549
|
+
}
|
|
550
|
+
try {
|
|
551
|
+
git(repo, ["worktree", "remove", "--force", at]);
|
|
552
|
+
}
|
|
553
|
+
catch (e) {
|
|
554
|
+
return {
|
|
555
|
+
ok: false,
|
|
556
|
+
error: `worktree remove failed: ${String(e.message).split("\n")[0]}`,
|
|
557
|
+
...plan,
|
|
558
|
+
};
|
|
559
|
+
}
|
|
560
|
+
// PRUNE IS PART OF THE ACT, not a step the caller remembers. Every card that
|
|
561
|
+
// said `git worktree remove` also said `git worktree prune`, which is the
|
|
562
|
+
// clearest evidence they were one operation split across two lines of prose.
|
|
563
|
+
try {
|
|
564
|
+
git(repo, ["worktree", "prune"]);
|
|
565
|
+
}
|
|
566
|
+
catch {
|
|
567
|
+
/* removal already succeeded; a failed prune is not worth failing the call */
|
|
568
|
+
}
|
|
569
|
+
let branchDeleted = false;
|
|
570
|
+
if (branch) {
|
|
571
|
+
try {
|
|
572
|
+
git(repo, ["branch", "-D", branch.replace(/^refs\/heads\//, "")]);
|
|
573
|
+
branchDeleted = true;
|
|
574
|
+
}
|
|
575
|
+
catch {
|
|
576
|
+
/* a branch that will not delete is reported, not fatal */
|
|
577
|
+
}
|
|
578
|
+
}
|
|
579
|
+
return { ok: true, applied: true, removed: true, branchDeleted, ...plan };
|
|
580
|
+
}
|
|
581
|
+
//# sourceMappingURL=worktrees.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"worktrees.js","sourceRoot":"","sources":["../../src/tools/worktrees.ts"],"names":[],"mappings":"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"}
|