@cleocode/worktree 2026.8.2 → 2026.8.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/worktree-destroy.d.ts.map +1 -1
- package/dist/worktree-destroy.js +26 -4
- package/dist/worktree-destroy.js.map +1 -1
- package/dist/worktree-locate.d.ts +95 -0
- package/dist/worktree-locate.d.ts.map +1 -0
- package/dist/worktree-locate.js +138 -0
- package/dist/worktree-locate.js.map +1 -0
- package/native/worktree-napi.win32-x64-msvc.node +0 -0
- package/package.json +4 -4
package/dist/index.d.ts
CHANGED
|
@@ -34,6 +34,7 @@ export { destroyWorktree } from './worktree-destroy.js';
|
|
|
34
34
|
export { runWorktreeHooks } from './worktree-hooks.js';
|
|
35
35
|
export { applyIncludePatterns, loadWorktreeIncludePatterns } from './worktree-include.js';
|
|
36
36
|
export { listWorktrees, listWorktreesByProjectRoot, resolveWorktreeRoot, } from './worktree-list.js';
|
|
37
|
+
export * from './worktree-locate.js';
|
|
37
38
|
export type { MigrateWorktreeResult } from './worktree-migrate.js';
|
|
38
39
|
export { discoverParentProjectRoot, migrateAllWorktreeIdentities, migrateWorktreeIdentity, } from './worktree-migrate.js';
|
|
39
40
|
export { installWorktreeDependencies } from './worktree-pnpm.js';
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAGH,YAAY,EACV,qBAAqB,EACrB,oBAAoB,EACpB,sBAAsB,EACtB,qBAAqB,EACrB,oBAAoB,EACpB,qBAAqB,EACrB,oBAAoB,EACpB,YAAY,EACZ,kBAAkB,EAClB,sBAAsB,EACtB,iBAAiB,GAClB,MAAM,qBAAqB,CAAC;AAC7B,YAAY,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAC3D,OAAO,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAC1D,OAAO,EACL,KAAK,2BAA2B,EAChC,oBAAoB,EACpB,sBAAsB,EACtB,UAAU,EACV,SAAS,EACT,OAAO,EACP,uBAAuB,GACxB,MAAM,UAAU,CAAC;AAGlB,OAAO,EACL,eAAe,IAAI,mBAAmB,EACtC,iBAAiB,EACjB,iBAAiB,EACjB,iBAAiB,IAAI,qBAAqB,EAC1C,cAAc,IAAI,kBAAkB,EACpC,SAAS,IAAI,aAAa,GAC3B,MAAM,mBAAmB,CAAC;AAC3B,YAAY,EAAE,sBAAsB,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAC5E,OAAO,EAAE,qBAAqB,EAAE,sBAAsB,EAAE,MAAM,eAAe,CAAC;AAC9E,YAAY,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAChE,OAAO,EACL,0BAA0B,EAC1B,sBAAsB,EACtB,+BAA+B,EAC/B,wBAAwB,EACxB,4BAA4B,EAC5B,6BAA6B,GAC9B,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AACvD,OAAO,EAAE,oBAAoB,EAAE,2BAA2B,EAAE,MAAM,uBAAuB,CAAC;AAC1F,OAAO,EACL,aAAa,EACb,0BAA0B,EAC1B,mBAAmB,GACpB,MAAM,oBAAoB,CAAC;AAC5B,YAAY,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AACnE,OAAO,EACL,yBAAyB,EACzB,4BAA4B,EAC5B,uBAAuB,GACxB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,2BAA2B,EAAE,MAAM,oBAAoB,CAAC;AACjE,YAAY,EAAE,sBAAsB,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AACrF,OAAO,EACL,0BAA0B,EAC1B,6BAA6B,EAC7B,wBAAwB,GACzB,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAGH,YAAY,EACV,qBAAqB,EACrB,oBAAoB,EACpB,sBAAsB,EACtB,qBAAqB,EACrB,oBAAoB,EACpB,qBAAqB,EACrB,oBAAoB,EACpB,YAAY,EACZ,kBAAkB,EAClB,sBAAsB,EACtB,iBAAiB,GAClB,MAAM,qBAAqB,CAAC;AAC7B,YAAY,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAC3D,OAAO,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAC1D,OAAO,EACL,KAAK,2BAA2B,EAChC,oBAAoB,EACpB,sBAAsB,EACtB,UAAU,EACV,SAAS,EACT,OAAO,EACP,uBAAuB,GACxB,MAAM,UAAU,CAAC;AAGlB,OAAO,EACL,eAAe,IAAI,mBAAmB,EACtC,iBAAiB,EACjB,iBAAiB,EACjB,iBAAiB,IAAI,qBAAqB,EAC1C,cAAc,IAAI,kBAAkB,EACpC,SAAS,IAAI,aAAa,GAC3B,MAAM,mBAAmB,CAAC;AAC3B,YAAY,EAAE,sBAAsB,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAC5E,OAAO,EAAE,qBAAqB,EAAE,sBAAsB,EAAE,MAAM,eAAe,CAAC;AAC9E,YAAY,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAChE,OAAO,EACL,0BAA0B,EAC1B,sBAAsB,EACtB,+BAA+B,EAC/B,wBAAwB,EACxB,4BAA4B,EAC5B,6BAA6B,GAC9B,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AACvD,OAAO,EAAE,oBAAoB,EAAE,2BAA2B,EAAE,MAAM,uBAAuB,CAAC;AAC1F,OAAO,EACL,aAAa,EACb,0BAA0B,EAC1B,mBAAmB,GACpB,MAAM,oBAAoB,CAAC;AAC5B,cAAc,sBAAsB,CAAC;AACrC,YAAY,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AACnE,OAAO,EACL,yBAAyB,EACzB,4BAA4B,EAC5B,uBAAuB,GACxB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,2BAA2B,EAAE,MAAM,oBAAoB,CAAC;AACjE,YAAY,EAAE,sBAAsB,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AACrF,OAAO,EACL,0BAA0B,EAC1B,6BAA6B,EAC7B,wBAAwB,GACzB,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -32,6 +32,7 @@ export { destroyWorktree } from './worktree-destroy.js';
|
|
|
32
32
|
export { runWorktreeHooks } from './worktree-hooks.js';
|
|
33
33
|
export { applyIncludePatterns, loadWorktreeIncludePatterns } from './worktree-include.js';
|
|
34
34
|
export { listWorktrees, listWorktreesByProjectRoot, resolveWorktreeRoot, } from './worktree-list.js';
|
|
35
|
+
export * from './worktree-locate.js';
|
|
35
36
|
export { discoverParentProjectRoot, migrateAllWorktreeIdentities, migrateWorktreeIdentity, } from './worktree-migrate.js';
|
|
36
37
|
export { installWorktreeDependencies } from './worktree-pnpm.js';
|
|
37
38
|
export { assertNoWorktreeConfigLeak, detectAndHealCoreWorktreeLeak, ensureWorktreeBuildReady, } from './worktree-preflight.js';
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAiBH,OAAO,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAC1D,OAAO,EAEL,oBAAoB,EACpB,sBAAsB,EACtB,UAAU,EACV,SAAS,EACT,OAAO,EACP,uBAAuB,GACxB,MAAM,UAAU,CAAC;AAClB,mEAAmE;AACnE,sEAAsE;AACtE,OAAO,EACL,eAAe,IAAI,mBAAmB,EACtC,iBAAiB,EACjB,iBAAiB,EACjB,iBAAiB,IAAI,qBAAqB,EAC1C,cAAc,IAAI,kBAAkB,EACpC,SAAS,IAAI,aAAa,GAC3B,MAAM,mBAAmB,CAAC;AAE3B,OAAO,EAAE,qBAAqB,EAAE,sBAAsB,EAAE,MAAM,eAAe,CAAC;AAE9E,OAAO,EACL,0BAA0B,EAC1B,sBAAsB,EACtB,+BAA+B,EAC/B,wBAAwB,EACxB,4BAA4B,EAC5B,6BAA6B,GAC9B,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AACvD,OAAO,EAAE,oBAAoB,EAAE,2BAA2B,EAAE,MAAM,uBAAuB,CAAC;AAC1F,OAAO,EACL,aAAa,EACb,0BAA0B,EAC1B,mBAAmB,GACpB,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAiBH,OAAO,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAC1D,OAAO,EAEL,oBAAoB,EACpB,sBAAsB,EACtB,UAAU,EACV,SAAS,EACT,OAAO,EACP,uBAAuB,GACxB,MAAM,UAAU,CAAC;AAClB,mEAAmE;AACnE,sEAAsE;AACtE,OAAO,EACL,eAAe,IAAI,mBAAmB,EACtC,iBAAiB,EACjB,iBAAiB,EACjB,iBAAiB,IAAI,qBAAqB,EAC1C,cAAc,IAAI,kBAAkB,EACpC,SAAS,IAAI,aAAa,GAC3B,MAAM,mBAAmB,CAAC;AAE3B,OAAO,EAAE,qBAAqB,EAAE,sBAAsB,EAAE,MAAM,eAAe,CAAC;AAE9E,OAAO,EACL,0BAA0B,EAC1B,sBAAsB,EACtB,+BAA+B,EAC/B,wBAAwB,EACxB,4BAA4B,EAC5B,6BAA6B,GAC9B,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AACvD,OAAO,EAAE,oBAAoB,EAAE,2BAA2B,EAAE,MAAM,uBAAuB,CAAC;AAC1F,OAAO,EACL,aAAa,EACb,0BAA0B,EAC1B,mBAAmB,GACpB,MAAM,oBAAoB,CAAC;AAC5B,cAAc,sBAAsB,CAAC;AAErC,OAAO,EACL,yBAAyB,EACzB,4BAA4B,EAC5B,uBAAuB,GACxB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,2BAA2B,EAAE,MAAM,oBAAoB,CAAC;AAEjE,OAAO,EACL,0BAA0B,EAC1B,6BAA6B,EAC7B,wBAAwB,GACzB,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"worktree-destroy.d.ts","sourceRoot":"","sources":["../src/worktree-destroy.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAGH,OAAO,KAAK,EAAE,sBAAsB,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"worktree-destroy.d.ts","sourceRoot":"","sources":["../src/worktree-destroy.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAGH,OAAO,KAAK,EAAE,sBAAsB,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAQzF;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,wBAAsB,eAAe,CACnC,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,sBAAsB,GAC9B,OAAO,CAAC,qBAAqB,CAAC,CA0KhC"}
|
package/dist/worktree-destroy.js
CHANGED
|
@@ -15,6 +15,7 @@ import { destroyWorktree as napiDestroyWorktree } from './napi-binding.js';
|
|
|
15
15
|
import { computeProjectHash, resolveTaskWorktreePath } from './paths.js';
|
|
16
16
|
import { appendWorktreeAuditLog, removeWorktreeFromSentinelIndex } from './worktree-audit.js';
|
|
17
17
|
import { runWorktreeHooks } from './worktree-hooks.js';
|
|
18
|
+
import { locateTaskWorktree } from './worktree-locate.js';
|
|
18
19
|
/**
|
|
19
20
|
* Destroy the git worktree for a task.
|
|
20
21
|
*
|
|
@@ -41,9 +42,15 @@ import { runWorktreeHooks } from './worktree-hooks.js';
|
|
|
41
42
|
export async function destroyWorktree(projectRoot, options) {
|
|
42
43
|
const { taskId, deleteBranch = true, force = false, hooks = [] } = options;
|
|
43
44
|
const gitRoot = getGitRoot(projectRoot);
|
|
45
|
+
// T12086: ask git where the worktree IS and which branch it holds, instead of
|
|
46
|
+
// recomputing both by convention. A worktree provisioned under an earlier
|
|
47
|
+
// project-hash scheme is not at the recomputed path, and real branches carry
|
|
48
|
+
// a slug (`task/T11248-cleo-exodus`, not `task/T11248`) — so both derivations
|
|
49
|
+
// missed, and the function reported success for work it never did.
|
|
50
|
+
const located = locateTaskWorktree(projectRoot, taskId);
|
|
44
51
|
const projectHash = computeProjectHash(projectRoot);
|
|
45
|
-
const worktreePath = resolveTaskWorktreePath(projectHash, taskId);
|
|
46
|
-
const branch = `task/${taskId}`;
|
|
52
|
+
const worktreePath = located?.path ?? resolveTaskWorktreePath(projectHash, taskId);
|
|
53
|
+
const branch = located?.branch ?? `task/${taskId}`;
|
|
47
54
|
let worktreeRemoved = false;
|
|
48
55
|
let branchDeleted = false;
|
|
49
56
|
let error;
|
|
@@ -135,8 +142,14 @@ export async function destroyWorktree(projectRoot, options) {
|
|
|
135
142
|
}
|
|
136
143
|
}
|
|
137
144
|
}
|
|
145
|
+
else if (located !== null) {
|
|
146
|
+
// Registered with git but absent from disk — a stale registration. Pruning
|
|
147
|
+
// it IS the removal; without this the entry lingers forever.
|
|
148
|
+
gitSilent(['worktree', 'prune'], gitRoot);
|
|
149
|
+
worktreeRemoved = true;
|
|
150
|
+
}
|
|
138
151
|
else {
|
|
139
|
-
worktreeRemoved = true; //
|
|
152
|
+
worktreeRemoved = true; // genuinely absent: not on disk, not registered
|
|
140
153
|
}
|
|
141
154
|
// Step 4: Optionally delete the branch.
|
|
142
155
|
if (deleteBranch) {
|
|
@@ -144,8 +157,17 @@ export async function destroyWorktree(projectRoot, options) {
|
|
|
144
157
|
const branchExists = gitSync(['branch', '--list', branch], gitRoot);
|
|
145
158
|
if (branchExists) {
|
|
146
159
|
gitSync(['branch', '-D', branch], gitRoot);
|
|
160
|
+
branchDeleted = true;
|
|
161
|
+
}
|
|
162
|
+
else {
|
|
163
|
+
// T12086: previously returned `branchDeleted: true` here. Reporting a
|
|
164
|
+
// deletion that did not happen is worse than reporting the miss — it is
|
|
165
|
+
// how a branch survives every cleanup pass unnoticed.
|
|
166
|
+
branchDeleted = false;
|
|
167
|
+
if (!error) {
|
|
168
|
+
error = `Branch '${branch}' not found — nothing deleted. The worktree's own HEAD is the source of truth for its branch name; a task id alone is not.`;
|
|
169
|
+
}
|
|
147
170
|
}
|
|
148
|
-
branchDeleted = true;
|
|
149
171
|
}
|
|
150
172
|
catch (err) {
|
|
151
173
|
if (!error) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"worktree-destroy.js","sourceRoot":"","sources":["../src/worktree-destroy.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AAE7C,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,UAAU,CAAC;AAC1D,OAAO,EAAE,eAAe,IAAI,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AAC3E,OAAO,EAAE,kBAAkB,EAAE,uBAAuB,EAAE,MAAM,YAAY,CAAC;AACzE,OAAO,EAAE,sBAAsB,EAAE,+BAA+B,EAAE,MAAM,qBAAqB,CAAC;AAC9F,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"worktree-destroy.js","sourceRoot":"","sources":["../src/worktree-destroy.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Locate a task's worktree by asking git, not by recomputing a path (T12086).
|
|
3
|
+
*
|
|
4
|
+
* ## Why this exists
|
|
5
|
+
*
|
|
6
|
+
* `destroyWorktree` derived everything by convention:
|
|
7
|
+
*
|
|
8
|
+
* ```ts
|
|
9
|
+
* const worktreePath = resolveTaskWorktreePath(computeProjectHash(projectRoot), taskId);
|
|
10
|
+
* const branch = `task/${taskId}`;
|
|
11
|
+
* ```
|
|
12
|
+
*
|
|
13
|
+
* Both assumptions fail in the field, and both fail **silently reporting
|
|
14
|
+
* success**:
|
|
15
|
+
*
|
|
16
|
+
* 1. **The path.** `computeProjectHash` produces the CURRENT hash scheme. A
|
|
17
|
+
* worktree provisioned under an earlier scheme lives at a different
|
|
18
|
+
* directory, so `existsSync(worktreePath)` is false and the code takes its
|
|
19
|
+
* `else` branch — `worktreeRemoved = true // already gone` — for a worktree
|
|
20
|
+
* that is still registered and still on disk. Measured 2026-08-06: 23
|
|
21
|
+
* worktrees under `…/worktrees/L21udC9wcm9qZWN0cy9jbGVvY29kZQ/` all reported
|
|
22
|
+
* `worktreeRemoved: true` and none were touched.
|
|
23
|
+
*
|
|
24
|
+
* 2. **The branch.** Real branches carry a slug — `task/T11248-cleo-exodus`,
|
|
25
|
+
* not `task/T11248`. `git branch --list task/T11248` matches nothing, the
|
|
26
|
+
* delete is skipped, and `branchDeleted = true` is returned anyway.
|
|
27
|
+
*
|
|
28
|
+
* The cost of a cleanup verb that claims success without acting is not one bad
|
|
29
|
+
* call — it is that nobody notices the mess growing. 42 worktrees accumulated
|
|
30
|
+
* behind exactly this.
|
|
31
|
+
*
|
|
32
|
+
* ## The rule
|
|
33
|
+
*
|
|
34
|
+
* `git worktree list --porcelain` is the authoritative registry of what exists
|
|
35
|
+
* and which branch each entry has checked out. Ask it. Fall back to the
|
|
36
|
+
* computed path only when git knows nothing, and then say so.
|
|
37
|
+
*
|
|
38
|
+
* @task T12086
|
|
39
|
+
*/
|
|
40
|
+
/** A worktree as git itself reports it. */
|
|
41
|
+
export interface LocatedWorktree {
|
|
42
|
+
/** Absolute path git has registered. */
|
|
43
|
+
readonly path: string;
|
|
44
|
+
/** Branch checked out there, or `null` when detached. */
|
|
45
|
+
readonly branch: string | null;
|
|
46
|
+
/** Whether git holds a lock on this entry. */
|
|
47
|
+
readonly locked: boolean;
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Parse `git worktree list --porcelain` into structured entries.
|
|
51
|
+
*
|
|
52
|
+
* The porcelain format is a blank-line-separated series of records:
|
|
53
|
+
* `worktree <path>`, then optional `HEAD <sha>`, `branch <ref>`, `locked`,
|
|
54
|
+
* `bare`, `detached`.
|
|
55
|
+
*
|
|
56
|
+
* @param raw - stdout of `git worktree list --porcelain`.
|
|
57
|
+
* @returns one entry per registered worktree, in git's order.
|
|
58
|
+
*
|
|
59
|
+
* @task T12086
|
|
60
|
+
*/
|
|
61
|
+
export declare function parseWorktreePorcelain(raw: string): LocatedWorktree[];
|
|
62
|
+
/**
|
|
63
|
+
* List every worktree git has registered for this repository.
|
|
64
|
+
*
|
|
65
|
+
* Never throws — an unreadable registry yields an empty list, which callers
|
|
66
|
+
* treat as "git knows nothing", NOT as "nothing exists".
|
|
67
|
+
*
|
|
68
|
+
* @param projectRoot - any path inside the repository.
|
|
69
|
+
* @returns registered worktrees.
|
|
70
|
+
*
|
|
71
|
+
* @task T12086
|
|
72
|
+
*/
|
|
73
|
+
export declare function listRegisteredWorktrees(projectRoot: string): LocatedWorktree[];
|
|
74
|
+
/**
|
|
75
|
+
* Find the registered worktree belonging to `taskId`.
|
|
76
|
+
*
|
|
77
|
+
* Matching is on the path's final segment, which is the canonical layout
|
|
78
|
+
* (`…/worktrees/<projectHash>/<taskId>`) regardless of which hash scheme
|
|
79
|
+
* produced the parent directory — that is exactly the drift a recomputed path
|
|
80
|
+
* cannot survive.
|
|
81
|
+
*
|
|
82
|
+
* @param projectRoot - any path inside the repository.
|
|
83
|
+
* @param taskId - task whose worktree to find (e.g. `T11248`).
|
|
84
|
+
* @returns the entry, or `null` when git has no worktree for this task.
|
|
85
|
+
*
|
|
86
|
+
* @example
|
|
87
|
+
* ```ts
|
|
88
|
+
* const wt = locateTaskWorktree('/repo', 'T11248');
|
|
89
|
+
* // → { path: '…/worktrees/L21udC…/T11248', branch: 'task/T11248-cleo-exodus', locked: true }
|
|
90
|
+
* ```
|
|
91
|
+
*
|
|
92
|
+
* @task T12086
|
|
93
|
+
*/
|
|
94
|
+
export declare function locateTaskWorktree(projectRoot: string, taskId: string): LocatedWorktree | null;
|
|
95
|
+
//# sourceMappingURL=worktree-locate.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"worktree-locate.d.ts","sourceRoot":"","sources":["../src/worktree-locate.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAsCG;AAIH,2CAA2C;AAC3C,MAAM,WAAW,eAAe;IAC9B,wCAAwC;IACxC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,yDAAyD;IACzD,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,8CAA8C;IAC9C,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;CAC1B;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,sBAAsB,CAAC,GAAG,EAAE,MAAM,GAAG,eAAe,EAAE,CA+BrE;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,uBAAuB,CAAC,WAAW,EAAE,MAAM,GAAG,eAAe,EAAE,CAO9E;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,kBAAkB,CAAC,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,eAAe,GAAG,IAAI,CAU9F"}
|
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Locate a task's worktree by asking git, not by recomputing a path (T12086).
|
|
3
|
+
*
|
|
4
|
+
* ## Why this exists
|
|
5
|
+
*
|
|
6
|
+
* `destroyWorktree` derived everything by convention:
|
|
7
|
+
*
|
|
8
|
+
* ```ts
|
|
9
|
+
* const worktreePath = resolveTaskWorktreePath(computeProjectHash(projectRoot), taskId);
|
|
10
|
+
* const branch = `task/${taskId}`;
|
|
11
|
+
* ```
|
|
12
|
+
*
|
|
13
|
+
* Both assumptions fail in the field, and both fail **silently reporting
|
|
14
|
+
* success**:
|
|
15
|
+
*
|
|
16
|
+
* 1. **The path.** `computeProjectHash` produces the CURRENT hash scheme. A
|
|
17
|
+
* worktree provisioned under an earlier scheme lives at a different
|
|
18
|
+
* directory, so `existsSync(worktreePath)` is false and the code takes its
|
|
19
|
+
* `else` branch — `worktreeRemoved = true // already gone` — for a worktree
|
|
20
|
+
* that is still registered and still on disk. Measured 2026-08-06: 23
|
|
21
|
+
* worktrees under `…/worktrees/L21udC9wcm9qZWN0cy9jbGVvY29kZQ/` all reported
|
|
22
|
+
* `worktreeRemoved: true` and none were touched.
|
|
23
|
+
*
|
|
24
|
+
* 2. **The branch.** Real branches carry a slug — `task/T11248-cleo-exodus`,
|
|
25
|
+
* not `task/T11248`. `git branch --list task/T11248` matches nothing, the
|
|
26
|
+
* delete is skipped, and `branchDeleted = true` is returned anyway.
|
|
27
|
+
*
|
|
28
|
+
* The cost of a cleanup verb that claims success without acting is not one bad
|
|
29
|
+
* call — it is that nobody notices the mess growing. 42 worktrees accumulated
|
|
30
|
+
* behind exactly this.
|
|
31
|
+
*
|
|
32
|
+
* ## The rule
|
|
33
|
+
*
|
|
34
|
+
* `git worktree list --porcelain` is the authoritative registry of what exists
|
|
35
|
+
* and which branch each entry has checked out. Ask it. Fall back to the
|
|
36
|
+
* computed path only when git knows nothing, and then say so.
|
|
37
|
+
*
|
|
38
|
+
* @task T12086
|
|
39
|
+
*/
|
|
40
|
+
import { getGitRoot, gitSync } from './git.js';
|
|
41
|
+
/**
|
|
42
|
+
* Parse `git worktree list --porcelain` into structured entries.
|
|
43
|
+
*
|
|
44
|
+
* The porcelain format is a blank-line-separated series of records:
|
|
45
|
+
* `worktree <path>`, then optional `HEAD <sha>`, `branch <ref>`, `locked`,
|
|
46
|
+
* `bare`, `detached`.
|
|
47
|
+
*
|
|
48
|
+
* @param raw - stdout of `git worktree list --porcelain`.
|
|
49
|
+
* @returns one entry per registered worktree, in git's order.
|
|
50
|
+
*
|
|
51
|
+
* @task T12086
|
|
52
|
+
*/
|
|
53
|
+
export function parseWorktreePorcelain(raw) {
|
|
54
|
+
const out = [];
|
|
55
|
+
let path = null;
|
|
56
|
+
let branch = null;
|
|
57
|
+
let locked = false;
|
|
58
|
+
/** Flush the record under construction, if any. */
|
|
59
|
+
const flush = () => {
|
|
60
|
+
if (path !== null)
|
|
61
|
+
out.push({ path, branch, locked });
|
|
62
|
+
path = null;
|
|
63
|
+
branch = null;
|
|
64
|
+
locked = false;
|
|
65
|
+
};
|
|
66
|
+
for (const line of raw.split('\n')) {
|
|
67
|
+
const trimmed = line.trimEnd();
|
|
68
|
+
if (trimmed === '') {
|
|
69
|
+
flush();
|
|
70
|
+
continue;
|
|
71
|
+
}
|
|
72
|
+
if (trimmed.startsWith('worktree ')) {
|
|
73
|
+
flush();
|
|
74
|
+
path = trimmed.slice('worktree '.length);
|
|
75
|
+
}
|
|
76
|
+
else if (trimmed.startsWith('branch ')) {
|
|
77
|
+
branch = trimmed.slice('branch '.length).replace(/^refs\/heads\//, '');
|
|
78
|
+
}
|
|
79
|
+
else if (trimmed === 'locked' || trimmed.startsWith('locked ')) {
|
|
80
|
+
locked = true;
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
flush();
|
|
84
|
+
return out;
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* List every worktree git has registered for this repository.
|
|
88
|
+
*
|
|
89
|
+
* Never throws — an unreadable registry yields an empty list, which callers
|
|
90
|
+
* treat as "git knows nothing", NOT as "nothing exists".
|
|
91
|
+
*
|
|
92
|
+
* @param projectRoot - any path inside the repository.
|
|
93
|
+
* @returns registered worktrees.
|
|
94
|
+
*
|
|
95
|
+
* @task T12086
|
|
96
|
+
*/
|
|
97
|
+
export function listRegisteredWorktrees(projectRoot) {
|
|
98
|
+
try {
|
|
99
|
+
const gitRoot = getGitRoot(projectRoot);
|
|
100
|
+
return parseWorktreePorcelain(gitSync(['worktree', 'list', '--porcelain'], gitRoot));
|
|
101
|
+
}
|
|
102
|
+
catch {
|
|
103
|
+
return [];
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
/**
|
|
107
|
+
* Find the registered worktree belonging to `taskId`.
|
|
108
|
+
*
|
|
109
|
+
* Matching is on the path's final segment, which is the canonical layout
|
|
110
|
+
* (`…/worktrees/<projectHash>/<taskId>`) regardless of which hash scheme
|
|
111
|
+
* produced the parent directory — that is exactly the drift a recomputed path
|
|
112
|
+
* cannot survive.
|
|
113
|
+
*
|
|
114
|
+
* @param projectRoot - any path inside the repository.
|
|
115
|
+
* @param taskId - task whose worktree to find (e.g. `T11248`).
|
|
116
|
+
* @returns the entry, or `null` when git has no worktree for this task.
|
|
117
|
+
*
|
|
118
|
+
* @example
|
|
119
|
+
* ```ts
|
|
120
|
+
* const wt = locateTaskWorktree('/repo', 'T11248');
|
|
121
|
+
* // → { path: '…/worktrees/L21udC…/T11248', branch: 'task/T11248-cleo-exodus', locked: true }
|
|
122
|
+
* ```
|
|
123
|
+
*
|
|
124
|
+
* @task T12086
|
|
125
|
+
*/
|
|
126
|
+
export function locateTaskWorktree(projectRoot, taskId) {
|
|
127
|
+
const wanted = taskId.trim();
|
|
128
|
+
if (wanted === '')
|
|
129
|
+
return null;
|
|
130
|
+
for (const entry of listRegisteredWorktrees(projectRoot)) {
|
|
131
|
+
const segments = entry.path.split(/[/\\]/).filter((s) => s !== '');
|
|
132
|
+
const last = segments[segments.length - 1];
|
|
133
|
+
if (last === wanted)
|
|
134
|
+
return entry;
|
|
135
|
+
}
|
|
136
|
+
return null;
|
|
137
|
+
}
|
|
138
|
+
//# sourceMappingURL=worktree-locate.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"worktree-locate.js","sourceRoot":"","sources":["../src/worktree-locate.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAsCG;AAEH,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,UAAU,CAAC;AAY/C;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,sBAAsB,CAAC,GAAW;IAChD,MAAM,GAAG,GAAsB,EAAE,CAAC;IAClC,IAAI,IAAI,GAAkB,IAAI,CAAC;IAC/B,IAAI,MAAM,GAAkB,IAAI,CAAC;IACjC,IAAI,MAAM,GAAG,KAAK,CAAC;IAEnB,mDAAmD;IACnD,MAAM,KAAK,GAAG,GAAS,EAAE;QACvB,IAAI,IAAI,KAAK,IAAI;YAAE,GAAG,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;QACtD,IAAI,GAAG,IAAI,CAAC;QACZ,MAAM,GAAG,IAAI,CAAC;QACd,MAAM,GAAG,KAAK,CAAC;IACjB,CAAC,CAAC;IAEF,KAAK,MAAM,IAAI,IAAI,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;QACnC,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC;QAC/B,IAAI,OAAO,KAAK,EAAE,EAAE,CAAC;YACnB,KAAK,EAAE,CAAC;YACR,SAAS;QACX,CAAC;QACD,IAAI,OAAO,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;YACpC,KAAK,EAAE,CAAC;YACR,IAAI,GAAG,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;QAC3C,CAAC;aAAM,IAAI,OAAO,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;YACzC,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,gBAAgB,EAAE,EAAE,CAAC,CAAC;QACzE,CAAC;aAAM,IAAI,OAAO,KAAK,QAAQ,IAAI,OAAO,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;YACjE,MAAM,GAAG,IAAI,CAAC;QAChB,CAAC;IACH,CAAC;IACD,KAAK,EAAE,CAAC;IACR,OAAO,GAAG,CAAC;AACb,CAAC;AAED;;;;;;;;;;GAUG;AACH,MAAM,UAAU,uBAAuB,CAAC,WAAmB;IACzD,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,UAAU,CAAC,WAAW,CAAC,CAAC;QACxC,OAAO,sBAAsB,CAAC,OAAO,CAAC,CAAC,UAAU,EAAE,MAAM,EAAE,aAAa,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC;IACvF,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,MAAM,UAAU,kBAAkB,CAAC,WAAmB,EAAE,MAAc;IACpE,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC;IAC7B,IAAI,MAAM,KAAK,EAAE;QAAE,OAAO,IAAI,CAAC;IAE/B,KAAK,MAAM,KAAK,IAAI,uBAAuB,CAAC,WAAW,CAAC,EAAE,CAAC;QACzD,MAAM,QAAQ,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC;QACnE,MAAM,IAAI,GAAG,QAAQ,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QAC3C,IAAI,IAAI,KAAK,MAAM;YAAE,OAAO,KAAK,CAAC;IACpC,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC"}
|
|
Binary file
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@cleocode/worktree",
|
|
3
|
-
"version": "2026.8.
|
|
3
|
+
"version": "2026.8.3",
|
|
4
4
|
"private": false,
|
|
5
5
|
"type": "module",
|
|
6
6
|
"description": "Native CLEO worktree backend SDK",
|
|
@@ -25,14 +25,14 @@
|
|
|
25
25
|
"author": "CLEO Code <hello@cleocode.dev>",
|
|
26
26
|
"license": "MIT",
|
|
27
27
|
"dependencies": {
|
|
28
|
-
"@cleocode/contracts": "2026.8.
|
|
29
|
-
"@cleocode/paths": "2026.8.
|
|
28
|
+
"@cleocode/contracts": "2026.8.3",
|
|
29
|
+
"@cleocode/paths": "2026.8.3"
|
|
30
30
|
},
|
|
31
31
|
"devDependencies": {
|
|
32
32
|
"@types/node": "^24.3.0",
|
|
33
33
|
"typescript": "^6.0.2",
|
|
34
34
|
"vitest": "^4.1.4",
|
|
35
|
-
"@cleocode/core": "2026.8.
|
|
35
|
+
"@cleocode/core": "2026.8.3"
|
|
36
36
|
},
|
|
37
37
|
"repository": {
|
|
38
38
|
"type": "git",
|