@cleocode/worktree 2026.4.158 → 2026.5.0

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/compat.d.ts CHANGED
@@ -105,8 +105,8 @@ export declare function legacyCreateWorktree(request: LegacyWorktreeRequest, con
105
105
  /**
106
106
  * Merge a worktree's branch back into the current branch (legacy API).
107
107
  *
108
- * @deprecated Use `destroyWorktree` with `cherryPickFirst: true` from
109
- * `@cleocode/worktree`.
108
+ * @deprecated Use `completeAgentWorktreeViaMerge` from `@cleocode/core`
109
+ * followed by `destroyWorktree` from `@cleocode/worktree` (ADR-062).
110
110
  * @param handle - Legacy worktree handle.
111
111
  * @param config - Legacy worktree config.
112
112
  * @param options - Merge strategy options.
package/dist/compat.js CHANGED
@@ -66,8 +66,8 @@ export function legacyCreateWorktree(request, config) {
66
66
  /**
67
67
  * Merge a worktree's branch back into the current branch (legacy API).
68
68
  *
69
- * @deprecated Use `destroyWorktree` with `cherryPickFirst: true` from
70
- * `@cleocode/worktree`.
69
+ * @deprecated Use `completeAgentWorktreeViaMerge` from `@cleocode/core`
70
+ * followed by `destroyWorktree` from `@cleocode/worktree` (ADR-062).
71
71
  * @param handle - Legacy worktree handle.
72
72
  * @param config - Legacy worktree config.
73
73
  * @param options - Merge strategy options.
@@ -1,30 +1,34 @@
1
1
  /**
2
2
  * Worktree destroy operation for @cleocode/worktree.
3
3
  *
4
- * Removes the git worktree for a completed task. Optionally cherry-picks
5
- * commits from the task branch back to the orchestrator's current branch
6
- * before destroying.
4
+ * Removes the git worktree for a completed task. Integration (merge) is
5
+ * performed separately via `completeAgentWorktreeViaMerge` (ADR-062) before
6
+ * calling destroy. Destroy only removes the worktree filesystem entry and
7
+ * optionally the task branch.
7
8
  *
8
9
  * @task T1161
10
+ * @adr ADR-062
9
11
  */
10
12
  import type { DestroyWorktreeOptions, DestroyWorktreeResult } from '@cleocode/contracts';
11
13
  /**
12
14
  * Destroy the git worktree for a task.
13
15
  *
14
16
  * Steps:
15
- * 1. Optionally cherry-pick commits from the task branch to the base ref.
16
- * 2. Unlock the worktree (`git worktree unlock`).
17
- * 3. Remove the worktree directory (`git worktree remove --force`).
18
- * 4. Optionally delete the task branch.
17
+ * 1. Unlock the worktree (`git worktree unlock`).
18
+ * 2. Remove the worktree directory (`git worktree remove --force`).
19
+ * 3. Optionally delete the task branch.
19
20
  *
20
- * Non-fatal errors are captured in the result's `error` field. The caller
21
- * decides whether to propagate them.
21
+ * Integration (merging commits back to the target branch) is performed by
22
+ * `completeAgentWorktreeViaMerge` before this function is called. Non-fatal
23
+ * errors are captured in the result's `error` field. The caller decides
24
+ * whether to propagate them.
22
25
  *
23
26
  * @param projectRoot - Absolute path to the project root directory.
24
- * @param options - Destroy options including task ID and optional cherry-pick.
27
+ * @param options - Destroy options including task ID and optional branch deletion.
25
28
  * @returns Structured result of the destroy operation.
26
29
  *
27
30
  * @task T1161
31
+ * @adr ADR-062
28
32
  */
29
33
  export declare function destroyWorktree(projectRoot: string, options: DestroyWorktreeOptions): DestroyWorktreeResult;
30
34
  //# sourceMappingURL=worktree-destroy.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"worktree-destroy.d.ts","sourceRoot":"","sources":["../src/worktree-destroy.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAGH,OAAO,KAAK,EAAE,sBAAsB,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAIzF;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,eAAe,CAC7B,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,sBAAsB,GAC9B,qBAAqB,CA8EvB"}
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;AAIzF;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,eAAe,CAC7B,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,sBAAsB,GAC9B,qBAAqB,CAiDvB"}
@@ -1,72 +1,47 @@
1
1
  /**
2
2
  * Worktree destroy operation for @cleocode/worktree.
3
3
  *
4
- * Removes the git worktree for a completed task. Optionally cherry-picks
5
- * commits from the task branch back to the orchestrator's current branch
6
- * before destroying.
4
+ * Removes the git worktree for a completed task. Integration (merge) is
5
+ * performed separately via `completeAgentWorktreeViaMerge` (ADR-062) before
6
+ * calling destroy. Destroy only removes the worktree filesystem entry and
7
+ * optionally the task branch.
7
8
  *
8
9
  * @task T1161
10
+ * @adr ADR-062
9
11
  */
10
12
  import { existsSync, rmSync } from 'node:fs';
11
- import { getGitRoot, gitSilent, gitSync, resolveHeadRef } from './git.js';
13
+ import { getGitRoot, gitSilent, gitSync } from './git.js';
12
14
  import { computeProjectHash, resolveTaskWorktreePath } from './paths.js';
13
15
  /**
14
16
  * Destroy the git worktree for a task.
15
17
  *
16
18
  * Steps:
17
- * 1. Optionally cherry-pick commits from the task branch to the base ref.
18
- * 2. Unlock the worktree (`git worktree unlock`).
19
- * 3. Remove the worktree directory (`git worktree remove --force`).
20
- * 4. Optionally delete the task branch.
19
+ * 1. Unlock the worktree (`git worktree unlock`).
20
+ * 2. Remove the worktree directory (`git worktree remove --force`).
21
+ * 3. Optionally delete the task branch.
21
22
  *
22
- * Non-fatal errors are captured in the result's `error` field. The caller
23
- * decides whether to propagate them.
23
+ * Integration (merging commits back to the target branch) is performed by
24
+ * `completeAgentWorktreeViaMerge` before this function is called. Non-fatal
25
+ * errors are captured in the result's `error` field. The caller decides
26
+ * whether to propagate them.
24
27
  *
25
28
  * @param projectRoot - Absolute path to the project root directory.
26
- * @param options - Destroy options including task ID and optional cherry-pick.
29
+ * @param options - Destroy options including task ID and optional branch deletion.
27
30
  * @returns Structured result of the destroy operation.
28
31
  *
29
32
  * @task T1161
33
+ * @adr ADR-062
30
34
  */
31
35
  export function destroyWorktree(projectRoot, options) {
32
- const { taskId, deleteBranch = true, cherryPickFirst = false } = options;
36
+ const { taskId, deleteBranch = true } = options;
33
37
  const gitRoot = getGitRoot(projectRoot);
34
38
  const projectHash = computeProjectHash(projectRoot);
35
39
  const worktreePath = resolveTaskWorktreePath(projectHash, taskId);
36
40
  const branch = `task/${taskId}`;
37
- const baseRef = resolveHeadRef(gitRoot);
38
- let cherryPicked = false;
39
- let commitCount = 0;
40
41
  let worktreeRemoved = false;
41
42
  let branchDeleted = false;
42
43
  let error;
43
- // Step 1: Cherry-pick if requested.
44
- if (cherryPickFirst) {
45
- try {
46
- const branchExists = gitSync(['branch', '--list', branch], gitRoot);
47
- if (branchExists) {
48
- const log = gitSync(['log', '--reverse', '--format=%H', `${baseRef}..${branch}`], gitRoot);
49
- const commits = log
50
- .split('\n')
51
- .map((s) => s.trim())
52
- .filter(Boolean);
53
- if (commits.length > 0) {
54
- gitSync(['cherry-pick', ...commits], gitRoot);
55
- cherryPicked = true;
56
- commitCount = commits.length;
57
- }
58
- else {
59
- cherryPicked = true;
60
- commitCount = 0;
61
- }
62
- }
63
- }
64
- catch (err) {
65
- gitSilent(['cherry-pick', '--abort'], gitRoot);
66
- error = `Cherry-pick failed: ${err instanceof Error ? err.message : String(err)}`;
67
- }
68
- }
69
- // Step 2: Unlock + remove the worktree (even if cherry-pick failed — caller decided).
44
+ // Step 1: Unlock + remove the worktree.
70
45
  if (existsSync(worktreePath)) {
71
46
  gitSilent(['worktree', 'unlock', worktreePath], gitRoot);
72
47
  if (gitSilent(['worktree', 'remove', '--force', worktreePath], gitRoot)) {
@@ -87,7 +62,7 @@ export function destroyWorktree(projectRoot, options) {
87
62
  else {
88
63
  worktreeRemoved = true; // already gone
89
64
  }
90
- // Step 3: Optionally delete the branch.
65
+ // Step 2: Optionally delete the branch.
91
66
  if (deleteBranch) {
92
67
  try {
93
68
  const branchExists = gitSync(['branch', '--list', branch], gitRoot);
@@ -105,6 +80,6 @@ export function destroyWorktree(projectRoot, options) {
105
80
  else {
106
81
  branchDeleted = false;
107
82
  }
108
- return { taskId, cherryPicked, commitCount, worktreeRemoved, branchDeleted, error };
83
+ return { taskId, worktreeRemoved, branchDeleted, error };
109
84
  }
110
85
  //# sourceMappingURL=worktree-destroy.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"worktree-destroy.js","sourceRoot":"","sources":["../src/worktree-destroy.ts"],"names":[],"mappings":"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"}
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,kBAAkB,EAAE,uBAAuB,EAAE,MAAM,YAAY,CAAC;AAEzE;;;;;;;;;;;;;;;;;;;GAmBG;AACH,MAAM,UAAU,eAAe,CAC7B,WAAmB,EACnB,OAA+B;IAE/B,MAAM,EAAE,MAAM,EAAE,YAAY,GAAG,IAAI,EAAE,GAAG,OAAO,CAAC;IAEhD,MAAM,OAAO,GAAG,UAAU,CAAC,WAAW,CAAC,CAAC;IACxC,MAAM,WAAW,GAAG,kBAAkB,CAAC,WAAW,CAAC,CAAC;IACpD,MAAM,YAAY,GAAG,uBAAuB,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;IAClE,MAAM,MAAM,GAAG,QAAQ,MAAM,EAAE,CAAC;IAEhC,IAAI,eAAe,GAAG,KAAK,CAAC;IAC5B,IAAI,aAAa,GAAG,KAAK,CAAC;IAC1B,IAAI,KAAyB,CAAC;IAE9B,wCAAwC;IACxC,IAAI,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;QAC7B,SAAS,CAAC,CAAC,UAAU,EAAE,QAAQ,EAAE,YAAY,CAAC,EAAE,OAAO,CAAC,CAAC;QACzD,IAAI,SAAS,CAAC,CAAC,UAAU,EAAE,QAAQ,EAAE,SAAS,EAAE,YAAY,CAAC,EAAE,OAAO,CAAC,EAAE,CAAC;YACxE,eAAe,GAAG,IAAI,CAAC;QACzB,CAAC;aAAM,CAAC;YACN,IAAI,CAAC;gBACH,MAAM,CAAC,YAAY,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;gBACvD,eAAe,GAAG,IAAI,CAAC;YACzB,CAAC;YAAC,OAAO,IAAI,EAAE,CAAC;gBACd,IAAI,CAAC,KAAK,EAAE,CAAC;oBACX,KAAK,GAAG,8BAA8B,IAAI,YAAY,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;gBAC9F,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;SAAM,CAAC;QACN,eAAe,GAAG,IAAI,CAAC,CAAC,eAAe;IACzC,CAAC;IAED,wCAAwC;IACxC,IAAI,YAAY,EAAE,CAAC;QACjB,IAAI,CAAC;YACH,MAAM,YAAY,GAAG,OAAO,CAAC,CAAC,QAAQ,EAAE,QAAQ,EAAE,MAAM,CAAC,EAAE,OAAO,CAAC,CAAC;YACpE,IAAI,YAAY,EAAE,CAAC;gBACjB,OAAO,CAAC,CAAC,QAAQ,EAAE,IAAI,EAAE,MAAM,CAAC,EAAE,OAAO,CAAC,CAAC;YAC7C,CAAC;YACD,aAAa,GAAG,IAAI,CAAC;QACvB,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,IAAI,CAAC,KAAK,EAAE,CAAC;gBACX,KAAK,GAAG,4BAA4B,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC;YACzF,CAAC;QACH,CAAC;IACH,CAAC;SAAM,CAAC;QACN,aAAa,GAAG,KAAK,CAAC;IACxB,CAAC;IAED,OAAO,EAAE,MAAM,EAAE,eAAe,EAAE,aAAa,EAAE,KAAK,EAAE,CAAC;AAC3D,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cleocode/worktree",
3
- "version": "2026.4.158",
3
+ "version": "2026.5.0",
4
4
  "private": false,
5
5
  "type": "module",
6
6
  "description": "Native CLEO worktree backend SDK — createWorktree, destroyWorktree, listWorktrees, pruneWorktrees with XDG path canon and declarative hooks (T1161)",
@@ -31,7 +31,7 @@
31
31
  "license": "MIT",
32
32
  "dependencies": {
33
33
  "env-paths": "^4.0.0",
34
- "@cleocode/contracts": "2026.4.158"
34
+ "@cleocode/contracts": "2026.5.0"
35
35
  },
36
36
  "devDependencies": {
37
37
  "@types/node": "^24.3.0",