dsh-git-worktree 0.1.2 → 0.3.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.
Files changed (136) hide show
  1. package/CHANGELOG.md +93 -0
  2. package/LICENSE +21 -21
  3. package/README.md +187 -43
  4. package/README.zh.md +187 -41
  5. package/cordis.patch.yml +7 -7
  6. package/lib/adapters/lookup.d.ts +4 -2
  7. package/lib/adapters/lookup.js +31 -3
  8. package/lib/adapters/lookup.js.map +1 -1
  9. package/lib/adapters/registry.js +41 -0
  10. package/lib/adapters/registry.js.map +1 -1
  11. package/lib/adapters/safe-file.js +34 -4
  12. package/lib/adapters/safe-file.js.map +1 -1
  13. package/lib/client/WorktreeCreateRow.d.ts +7 -0
  14. package/lib/client/WorktreeCreateRow.js +26 -0
  15. package/lib/client/WorktreeCreateRow.js.map +1 -0
  16. package/lib/client/WorktreeReviewRow.d.ts +11 -0
  17. package/lib/client/WorktreeReviewRow.js +67 -0
  18. package/lib/client/WorktreeReviewRow.js.map +1 -0
  19. package/lib/client/actions.d.ts +86 -0
  20. package/lib/client/actions.js +35 -0
  21. package/lib/client/actions.js.map +1 -0
  22. package/lib/client/console-remote/adapter.d.ts +3 -0
  23. package/lib/client/console-remote/adapter.js +61 -0
  24. package/lib/client/console-remote/adapter.js.map +1 -0
  25. package/lib/client/console-remote/index.d.ts +18 -0
  26. package/lib/client/console-remote/index.js +17 -0
  27. package/lib/client/console-remote/index.js.map +1 -0
  28. package/lib/client/index.d.ts +17 -0
  29. package/lib/client/index.js +44 -0
  30. package/lib/client/index.js.map +1 -0
  31. package/lib/client/model.d.ts +68 -0
  32. package/lib/client/model.js +127 -0
  33. package/lib/client/model.js.map +1 -0
  34. package/lib/client/pre-session/PreSessionWorktreeToggle.d.ts +16 -0
  35. package/lib/client/pre-session/PreSessionWorktreeToggle.js +128 -0
  36. package/lib/client/pre-session/PreSessionWorktreeToggle.js.map +1 -0
  37. package/lib/client/pre-session/controller.d.ts +42 -0
  38. package/lib/client/pre-session/controller.js +149 -0
  39. package/lib/client/pre-session/controller.js.map +1 -0
  40. package/lib/client/pre-session/index.d.ts +15 -0
  41. package/lib/client/pre-session/index.js +16 -0
  42. package/lib/client/pre-session/index.js.map +1 -0
  43. package/lib/client/review-console/ReviewActions.d.ts +15 -0
  44. package/lib/client/review-console/ReviewActions.js +234 -0
  45. package/lib/client/review-console/ReviewActions.js.map +1 -0
  46. package/lib/client/review-console/WorktreeReviewPanel.d.ts +20 -0
  47. package/lib/client/review-console/WorktreeReviewPanel.js +75 -0
  48. package/lib/client/review-console/WorktreeReviewPanel.js.map +1 -0
  49. package/lib/client/review-console/index.d.ts +8 -0
  50. package/lib/client/review-console/index.js +22 -0
  51. package/lib/client/review-console/index.js.map +1 -0
  52. package/lib/client/review-console/review-console.styles.d.ts +1 -0
  53. package/lib/client/review-console/review-console.styles.js +81 -0
  54. package/lib/client/review-console/review-console.styles.js.map +1 -0
  55. package/lib/client/review-console/status-events.d.ts +3 -0
  56. package/lib/client/review-console/status-events.js +6 -0
  57. package/lib/client/review-console/status-events.js.map +1 -0
  58. package/lib/client/styles.d.ts +1 -0
  59. package/lib/client/styles.js +78 -0
  60. package/lib/client/styles.js.map +1 -0
  61. package/lib/client/target-console/TargetStatusAction.d.ts +7 -0
  62. package/lib/client/target-console/TargetStatusAction.js +46 -0
  63. package/lib/client/target-console/TargetStatusAction.js.map +1 -0
  64. package/lib/client/target-console/WorktreeConsoleView.d.ts +9 -0
  65. package/lib/client/target-console/WorktreeConsoleView.js +362 -0
  66. package/lib/client/target-console/WorktreeConsoleView.js.map +1 -0
  67. package/lib/client/target-console/WorktreeReviewStatus.d.ts +9 -0
  68. package/lib/client/target-console/WorktreeReviewStatus.js +125 -0
  69. package/lib/client/target-console/WorktreeReviewStatus.js.map +1 -0
  70. package/lib/client/target-console/index.d.ts +14 -0
  71. package/lib/client/target-console/index.js +23 -0
  72. package/lib/client/target-console/index.js.map +1 -0
  73. package/lib/client/target-console/target-console.styles.d.ts +1 -0
  74. package/lib/client/target-console/target-console.styles.js +130 -0
  75. package/lib/client/target-console/target-console.styles.js.map +1 -0
  76. package/lib/client.js +6902 -0
  77. package/lib/commands.d.ts +2 -4
  78. package/lib/commands.js +69 -28
  79. package/lib/commands.js.map +1 -1
  80. package/lib/console-contract.d.ts +253 -0
  81. package/lib/console-contract.js +86 -0
  82. package/lib/console-contract.js.map +1 -0
  83. package/lib/console-host/control-plane.d.ts +31 -0
  84. package/lib/console-host/control-plane.js +502 -0
  85. package/lib/console-host/control-plane.js.map +1 -0
  86. package/lib/console-host/errors.d.ts +6 -0
  87. package/lib/console-host/errors.js +31 -0
  88. package/lib/console-host/errors.js.map +1 -0
  89. package/lib/console-host/projection.d.ts +12 -0
  90. package/lib/console-host/projection.js +136 -0
  91. package/lib/console-host/projection.js.map +1 -0
  92. package/lib/console-host/review-diff.d.ts +18 -0
  93. package/lib/console-host/review-diff.js +176 -0
  94. package/lib/console-host/review-diff.js.map +1 -0
  95. package/lib/console-host/service.d.ts +26 -0
  96. package/lib/console-host/service.js +143 -0
  97. package/lib/console-host/service.js.map +1 -0
  98. package/lib/console-remote/descriptors.d.ts +3 -0
  99. package/lib/console-remote/descriptors.js +105 -0
  100. package/lib/console-remote/descriptors.js.map +1 -0
  101. package/lib/console-remote/remote.d.ts +29 -0
  102. package/lib/console-remote/remote.js +4 -0
  103. package/lib/console-remote/remote.js.map +1 -0
  104. package/lib/console-remote/schemas.d.ts +29 -0
  105. package/lib/console-remote/schemas.js +145 -0
  106. package/lib/console-remote/schemas.js.map +1 -0
  107. package/lib/console-remote/typert.d.ts +3 -0
  108. package/lib/console-remote/typert.js +14 -0
  109. package/lib/console-remote/typert.js.map +1 -0
  110. package/lib/index.d.ts +26 -8
  111. package/lib/index.js +28 -10
  112. package/lib/index.js.map +1 -1
  113. package/lib/managed-worktree-path.d.ts +14 -13
  114. package/lib/managed-worktree-path.js +32 -22
  115. package/lib/managed-worktree-path.js.map +1 -1
  116. package/lib/ports.d.ts +39 -1
  117. package/lib/session-checkout-apply.d.ts +54 -1
  118. package/lib/session-checkout-apply.js +318 -28
  119. package/lib/session-checkout-apply.js.map +1 -1
  120. package/lib/session-checkout-module.js +1098 -36
  121. package/lib/session-checkout-module.js.map +1 -1
  122. package/lib/session-target-context.d.ts +6 -0
  123. package/lib/session-target-context.js +16 -0
  124. package/lib/session-target-context.js.map +1 -0
  125. package/lib/tools.d.ts +6 -6
  126. package/lib/tools.js +107 -218
  127. package/lib/tools.js.map +1 -1
  128. package/lib/types.d.ts +57 -11
  129. package/lib/types.js +6 -6
  130. package/lib/types.js.map +1 -1
  131. package/package.json +116 -69
  132. package/scripts/check-publish.mjs +193 -0
  133. package/scripts/clean-lib.mjs +7 -0
  134. package/scripts/dev-dsh-lib.mjs +509 -0
  135. package/scripts/dev-dsh.mjs +95 -0
  136. package/scripts/dsh-source-runner.mjs +14 -0
package/lib/tools.js CHANGED
@@ -1,11 +1,12 @@
1
1
  /**
2
- * Model-facing worktree tools. Every tool operates on the receiving agent's
3
- * own session through the session-checkout module; the module's revision CAS
4
- * guards all mutations. Outputs are canonical JSON (the UI card is a separate
5
- * concern); conflict results carry `localHeadOid` so the agent can sync the
6
- * isolated checkout to Local HEAD and resolve before retrying.
2
+ * Model-facing worktree tools. Destructive delivery actions are deliberately
3
+ * absent: Finish/Discard/Remove are human commands surfaced by the client
4
+ * ToolView. The model can reserve a real target session, inspect its own
5
+ * scoped worktrees, invalidate an unsynced review before further file edits,
6
+ * safely begin a cleaned same-session iteration, and stop at Ready for Review.
7
7
  * @module dsh-git-worktree/tools
8
8
  */
9
+ import { randomUUID } from 'node:crypto';
9
10
  import { defineTool } from '@deepseek-ai/dsh-tools';
10
11
  function sessionIdOf(agent) {
11
12
  const session = agent?.session;
@@ -14,58 +15,58 @@ function sessionIdOf(agent) {
14
15
  }
15
16
  return session.id;
16
17
  }
17
- function targetText(target) {
18
- const lines = [
19
- `checkout: ${target.checkout.label} (${target.checkout.kind}, phase ${target.checkout.phase})`,
20
- `dirty: ${target.dirty}`,
21
- `current: ${target.current.branch ?? 'detached'} @ ${target.current.oid.slice(0, 7)}`,
22
- ];
23
- if (target.delivery)
24
- lines.push(`delivery: ${target.delivery.state}`);
25
- return lines.join('\n');
18
+ /** Canonical logged payload consumed by both the model and the keyed ToolView. */
19
+ function renderJson(value) {
20
+ return [{ type: 'text', text: JSON.stringify(value) }];
26
21
  }
27
- /** Register the seven worktree tools. */
22
+ /** Register the safe model-facing worktree tools. */
28
23
  export function registerTools(ctx, module) {
29
24
  ctx.tools.register(defineTool({
30
25
  name: 'worktree_create',
31
- description: 'Create a Domi-grade managed git worktree for the current session: a detached checkout at the Local HEAD under <repo>/.dsh-worktrees/, registered as a DSH workspace, with the session bound to it as owner. Use it to isolate experimental or parallel work from the Local checkout.',
26
+ description: 'Reserve a unique managed Git worktree and a distinct owner Session ID. This does not change the current Session cwd. After the tool returns, stop modifying code in this Local Session and let the user open the isolated Session from the Worktree card.',
32
27
  parameters: {},
33
28
  output: {
34
29
  schema: {
35
30
  type: 'object',
36
31
  additionalProperties: false,
37
32
  properties: {
33
+ kind: { type: 'string', required: true },
38
34
  checkoutId: { type: 'string', required: true },
35
+ targetSessionId: { type: 'string', required: true },
36
+ managedRoot: { type: 'string', required: true },
39
37
  phase: { type: 'string', required: true },
40
- dirty: { type: 'boolean', required: true },
41
- currentBranch: { type: 'string' },
42
38
  currentOid: { type: 'string', required: true },
39
+ sourceSessionId: { type: 'string', required: true },
43
40
  },
44
41
  },
45
- render: (_args, value) => [{ type: 'text', text: `Worktree created: ${value.checkoutId} (${value.phase}, dirty=${value.dirty}, ${value.currentBranch ?? 'detached'} @ ${value.currentOid.slice(0, 7)})` }],
42
+ render: (_args, value) => renderJson(value),
46
43
  },
47
44
  async execute(_args, exec) {
48
- const sessionId = sessionIdOf(exec.agent);
49
- const target = await module.bind(sessionId, { kind: 'isolated' });
45
+ const sourceSessionId = sessionIdOf(exec.agent);
46
+ const targetSessionId = randomUUID();
47
+ const launch = await module.createIsolatedTarget(sourceSessionId, targetSessionId);
50
48
  return {
51
- checkoutId: target.checkout.id,
52
- phase: target.checkout.phase,
53
- dirty: target.dirty,
54
- currentBranch: target.current.branch ?? undefined,
55
- currentOid: target.current.oid,
49
+ kind: 'worktree_target_created',
50
+ checkoutId: launch.target.checkout.id,
51
+ targetSessionId,
52
+ managedRoot: launch.managedRoot,
53
+ phase: launch.target.checkout.phase,
54
+ currentOid: launch.target.current.oid,
55
+ sourceSessionId,
56
56
  };
57
57
  },
58
- presentCall: () => ({ card: 'generic', title: 'Create managed worktree', kind: 'other', rawInput: {} }),
58
+ presentCall: () => ({ card: 'generic', title: 'Create isolated Session Target', kind: 'other', rawInput: {} }),
59
59
  }));
60
60
  ctx.tools.register(defineTool({
61
61
  name: 'worktree_list',
62
- description: 'List every managed worktree of the current project with its checkout id, iteration, state, and dirty flag. Use the checkout id with worktree_remove or to find where a task left off.',
62
+ description: 'List managed worktrees visible to the current Session. Results are scoped to the original project and to worktrees this Session owns or created.',
63
63
  parameters: {},
64
64
  output: {
65
65
  schema: {
66
66
  type: 'object',
67
67
  additionalProperties: false,
68
68
  properties: {
69
+ kind: { type: 'string', required: true },
69
70
  worktrees: {
70
71
  type: 'array',
71
72
  required: true,
@@ -75,6 +76,7 @@ export function registerTools(ctx, module) {
75
76
  properties: {
76
77
  checkoutId: { type: 'string', required: true },
77
78
  projectName: { type: 'string', required: true },
79
+ ownerSessionId: { type: 'string', required: true },
78
80
  iteration: { type: 'number', required: true },
79
81
  state: { type: 'string', required: true },
80
82
  phase: { type: 'string', required: true },
@@ -85,19 +87,17 @@ export function registerTools(ctx, module) {
85
87
  },
86
88
  },
87
89
  },
88
- render: (_args, value) => [{
89
- type: 'text',
90
- text: value.worktrees.length === 0
91
- ? 'No managed worktrees.'
92
- : value.worktrees.map((entry) => (`${entry.checkoutId} ${entry.projectName} i${entry.iteration} ${entry.state}/${entry.phase} dirty=${entry.dirty}${entry.commitOid ? ` commit ${entry.commitOid.slice(0, 7)}` : ''}`)).join('\n'),
93
- }],
90
+ render: (_args, value) => renderJson(value),
94
91
  },
95
92
  async execute(_args, exec) {
96
- const summaries = await module.listManagedWorktrees();
93
+ const sessionId = sessionIdOf(exec.agent);
94
+ const summaries = await module.listManagedWorktreesForSession(sessionId);
97
95
  return {
96
+ kind: 'worktree_list',
98
97
  worktrees: summaries.map((summary) => ({
99
98
  checkoutId: summary.checkoutId,
100
99
  projectName: summary.project.name,
100
+ ownerSessionId: summary.ownerSessionId,
101
101
  iteration: summary.iteration,
102
102
  state: summary.state,
103
103
  phase: summary.phase,
@@ -109,50 +109,85 @@ export function registerTools(ctx, module) {
109
109
  presentCall: () => ({ card: 'generic', title: 'List managed worktrees', kind: 'other', rawInput: {} }),
110
110
  }));
111
111
  ctx.tools.register(defineTool({
112
- name: 'worktree_remove',
113
- description: 'Remove a managed worktree by checkout id (see worktree_list). Dirty worktrees require confirmDirty: true and are still never force-removed silently — the lifecycle refuses when the worktree is the current session target.',
114
- parameters: {
115
- checkoutId: {
116
- type: 'string',
117
- required: true,
118
- description: 'Checkout id from worktree_list.',
119
- },
120
- confirmDirty: {
121
- type: 'boolean',
122
- required: true,
123
- description: 'Confirm discarding uncommitted changes inside the worktree.',
112
+ name: 'worktree_resume_revision',
113
+ description: '当前 Isolated Session 处于尚未同步 Local 的 Ready for Review,且用户提出新的代码或文件修改时,必须先自动调用本工具使旧 Review 失效并恢复同一轮 Working,然后直接继续执行请求。纯讨论、问答或补充信息不要调用;不要要求用户点击恢复编辑,也不要先同步 Local。',
114
+ parameters: {},
115
+ output: {
116
+ schema: {
117
+ type: 'object',
118
+ additionalProperties: false,
119
+ properties: {
120
+ kind: { type: 'string', required: true },
121
+ checkoutId: { type: 'string', required: true },
122
+ iteration: { type: 'number', required: true },
123
+ revision: { type: 'number', required: true },
124
+ phase: { type: 'string', required: true },
125
+ sessionId: { type: 'string', required: true },
126
+ },
124
127
  },
128
+ render: (_args, value) => renderJson(value),
125
129
  },
130
+ async execute(_args, exec) {
131
+ const sessionId = sessionIdOf(exec.agent);
132
+ const current = await module.inspect(sessionId);
133
+ if (current.delivery?.state !== 'ready_for_review') {
134
+ throw new Error(`当前 Worktree 没有可恢复的未同步 Review: ${current.delivery?.state ?? 'unknown'}`);
135
+ }
136
+ const target = await module.resumeRevision(sessionId, current.revision, current.delivery.review.reviewId);
137
+ if (target.delivery?.state !== 'working') {
138
+ throw new Error(`Worktree 未恢复到 working 状态: ${target.delivery?.state ?? 'unknown'}`);
139
+ }
140
+ return {
141
+ kind: 'worktree_revision_resumed',
142
+ checkoutId: target.checkout.id,
143
+ iteration: target.delivery.iteration,
144
+ revision: target.revision,
145
+ phase: target.checkout.phase,
146
+ sessionId,
147
+ };
148
+ },
149
+ presentCall: () => ({ card: 'generic', title: 'Resume Worktree revision', kind: 'other', rawInput: {} }),
150
+ }));
151
+ ctx.tools.register(defineTool({
152
+ name: 'worktree_begin_next_iteration',
153
+ description: '当当前 Isolated Session 已交付并完成 cleanup,而用户在同一对话中提出新的代码或文件修改时,先调用本工具安全重建同一个 immutable cwd 并进入下一轮,然后继续执行用户请求。不要改用 worktree_create;retained 或 cleanup_pending 状态不能调用。',
154
+ parameters: {},
126
155
  output: {
127
156
  schema: {
128
157
  type: 'object',
129
158
  additionalProperties: false,
130
159
  properties: {
160
+ kind: { type: 'string', required: true },
131
161
  checkoutId: { type: 'string', required: true },
132
- discarded: { type: 'boolean', required: true },
162
+ iteration: { type: 'number', required: true },
163
+ phase: { type: 'string', required: true },
164
+ currentOid: { type: 'string', required: true },
165
+ sessionId: { type: 'string', required: true },
133
166
  },
134
167
  },
135
- render: (_args, value) => [{ type: 'text', text: value.discarded ? `Removed worktree ${value.checkoutId}.` : `Worktree ${value.checkoutId} retained (not discarded).` }],
168
+ render: (_args, value) => renderJson(value),
136
169
  },
137
- async execute(args, exec) {
138
- const summaries = await module.listManagedWorktrees({ checkoutId: args.checkoutId });
139
- const summary = summaries[0];
140
- if (!summary) {
141
- return { checkoutId: args.checkoutId, discarded: false };
170
+ async execute(_args, exec) {
171
+ const sessionId = sessionIdOf(exec.agent);
172
+ const current = await module.inspect(sessionId);
173
+ const target = await module.beginNextIteration(sessionId, current.revision);
174
+ if (target.delivery?.state !== 'working') {
175
+ throw new Error(`下一轮 Worktree 未进入 working 状态: ${target.delivery?.state ?? 'unknown'}`);
142
176
  }
143
- await module.manageManagedWorktree({
144
- checkoutId: args.checkoutId,
145
- expectedRevision: summary.revision,
146
- action: 'discard',
147
- confirmDirty: args.confirmDirty === true,
148
- });
149
- return { checkoutId: args.checkoutId, discarded: true };
177
+ return {
178
+ kind: 'worktree_next_iteration_started',
179
+ checkoutId: target.checkout.id,
180
+ iteration: target.delivery.iteration,
181
+ phase: target.checkout.phase,
182
+ currentOid: target.current.oid,
183
+ sessionId,
184
+ };
150
185
  },
151
- presentCall: (args) => ({ card: 'generic', title: 'Remove managed worktree', kind: 'other', rawInput: args }),
186
+ presentCall: () => ({ card: 'generic', title: 'Start next Worktree iteration', kind: 'other', rawInput: {} }),
152
187
  }));
153
188
  ctx.tools.register(defineTool({
154
189
  name: 'worktree_ready_for_review',
155
- description: 'Mark the current managed worktree as ready for review: the agent submits what changed, what validation ran (tests), and a suggested commit message. After this, worktree_apply merges the changes into the Local checkout and worktree_finish commits them directly.',
190
+ description: 'Isolated Session 的最后一个模型动作:把完整交付报告、验证证据和建议 Commit Message 仅写入本工具参数,然后立即停止。不要在调用前后用普通回复重复完整报告;最多用一句话提示用户通过底部验收条处理。用户会显式决定是否提交或放弃,模型不得自动提交或清理。',
156
191
  parameters: {
157
192
  summary: {
158
193
  type: 'string',
@@ -188,7 +223,7 @@ export function registerTools(ctx, module) {
188
223
  suggestedCommitMessage: {
189
224
  type: 'string',
190
225
  required: true,
191
- description: 'Suggested commit message for the change.',
226
+ description: 'Suggested commit message for the human acceptance action.',
192
227
  },
193
228
  },
194
229
  output: {
@@ -196,12 +231,15 @@ export function registerTools(ctx, module) {
196
231
  type: 'object',
197
232
  additionalProperties: false,
198
233
  properties: {
234
+ kind: { type: 'string', required: true },
199
235
  state: { type: 'string', required: true },
200
236
  reviewId: { type: 'string', required: true },
237
+ revision: { type: 'number', required: true },
238
+ iteration: { type: 'number', required: true },
201
239
  changedFiles: { type: 'array', required: true, items: { type: 'string' } },
202
240
  },
203
241
  },
204
- render: (_args, value) => [{ type: 'text', text: `Ready for review: ${value.reviewId} — ${value.changedFiles.length} file(s) changed (${value.state}).` }],
242
+ render: (_args, value) => renderJson(value),
205
243
  },
206
244
  async execute(args, exec) {
207
245
  const sessionId = sessionIdOf(exec.agent);
@@ -221,164 +259,15 @@ export function registerTools(ctx, module) {
221
259
  throw new Error(`worktree 未进入可验收状态: ${target.delivery?.state ?? 'unknown'}`);
222
260
  }
223
261
  return {
262
+ kind: 'worktree_ready_for_review',
224
263
  state: target.delivery.state,
225
264
  reviewId: target.delivery.review.reviewId,
265
+ revision: target.revision,
266
+ iteration: target.delivery.review.iteration,
226
267
  changedFiles: target.delivery.review.changedFiles,
227
268
  };
228
269
  },
229
- presentCall: () => ({ card: 'generic', title: 'Mark worktree ready for review', kind: 'other', rawInput: {} }),
230
- }));
231
- ctx.tools.register(defineTool({
232
- name: 'worktree_apply',
233
- description: 'Merge the current managed worktree\'s changes into the Local checkout: conflict-aware, fingerprint-CAS, and Local untouched until the plan is verified. On conflict the result carries conflictingFiles and localHeadOid — sync the worktree to Local HEAD, resolve, and retry. After a successful apply the worktree stays ready_for_review; use worktree_finish to commit or worktree_discard to abandon.',
234
- parameters: {},
235
- output: {
236
- schema: {
237
- type: 'object',
238
- additionalProperties: false,
239
- properties: {
240
- status: { type: 'string', required: true, enum: ['applied', 'conflict', 'error'] },
241
- changedFiles: { type: 'array', items: { type: 'string' } },
242
- conflictingFiles: { type: 'array', items: { type: 'string' } },
243
- localHeadOid: { type: 'string' },
244
- message: { type: 'string' },
245
- },
246
- },
247
- render: (_args, value) => {
248
- if (value.status === 'applied') {
249
- return [{ type: 'text', text: `Applied ${value.changedFiles?.length ?? 0} file(s) to Local.` }];
250
- }
251
- if (value.status === 'conflict') {
252
- return [{ type: 'text', text: `Conflict in ${value.conflictingFiles?.join(', ')} — sync worktree to Local HEAD ${value.localHeadOid?.slice(0, 7)} and resolve.` }];
253
- }
254
- return [{ type: 'text', text: value.message ?? 'Apply failed.' }];
255
- },
256
- },
257
- async execute(_args, exec) {
258
- const sessionId = sessionIdOf(exec.agent);
259
- const target = await module.inspect(sessionId);
260
- const result = await module.operate({
261
- action: 'apply',
262
- sessionId,
263
- expectedRevision: target.revision,
264
- });
265
- if (result.status === 'applied') {
266
- return { status: 'applied', changedFiles: result.changedFiles };
267
- }
268
- if (result.status === 'conflict') {
269
- return {
270
- status: 'conflict',
271
- conflictingFiles: result.conflictingFiles,
272
- localHeadOid: result.localHeadOid,
273
- };
274
- }
275
- if (result.status === 'error') {
276
- return { status: 'error', message: `${result.code}: ${result.message}` };
277
- }
278
- return { status: 'error', message: 'Apply 未返回预期结果' };
279
- },
280
- presentCall: () => ({ card: 'generic', title: 'Apply worktree to Local', kind: 'other', rawInput: {} }),
281
- }));
282
- ctx.tools.register(defineTool({
283
- name: 'worktree_finish',
284
- description: 'Commit the current managed worktree\'s changes onto the Local branch as one task commit, preserving any unrelated staged/working state the user has in Local, then clean up the worktree. Refuses when Local is detached. Optional retention keeps the frozen worktree for a while instead of removing it.',
285
- parameters: {
286
- commitMessage: {
287
- type: 'string',
288
- required: true,
289
- description: 'Commit message for the task delta.',
290
- },
291
- retention: {
292
- type: 'string',
293
- enum: ['cleanup', 'retain_24h', 'retain_3d', 'retain_manual'],
294
- description: 'Default cleanup removes the worktree after the commit; retain_* keeps it.',
295
- },
296
- },
297
- output: {
298
- schema: {
299
- type: 'object',
300
- additionalProperties: false,
301
- properties: {
302
- status: { type: 'string', required: true, enum: ['finished', 'conflict', 'error'] },
303
- commitOid: { type: 'string' },
304
- changedFiles: { type: 'array', items: { type: 'string' } },
305
- cleanup: { type: 'string' },
306
- message: { type: 'string' },
307
- },
308
- },
309
- render: (_args, value) => {
310
- if (value.status === 'finished') {
311
- return [{ type: 'text', text: `Finished: committed ${value.changedFiles?.length ?? 0} file(s) as ${value.commitOid?.slice(0, 7)} (cleanup: ${value.cleanup ?? 'unknown'}).` }];
312
- }
313
- return [{ type: 'text', text: value.message ?? 'Finish failed.' }];
314
- },
315
- },
316
- async execute(args, exec) {
317
- const sessionId = sessionIdOf(exec.agent);
318
- const target = await module.inspect(sessionId);
319
- const result = await module.operate({
320
- action: 'finish',
321
- sessionId,
322
- expectedRevision: target.revision,
323
- commitMessage: args.commitMessage,
324
- ...(args.retention ? { retention: args.retention } : {}),
325
- });
326
- if (result.status === 'finished') {
327
- return {
328
- status: 'finished',
329
- commitOid: result.commitOid ?? undefined,
330
- changedFiles: result.changedFiles,
331
- cleanup: result.cleanup,
332
- };
333
- }
334
- if (result.status === 'conflict') {
335
- return { status: 'conflict', message: `冲突:${result.conflictingFiles.join('、')} — 请先在 worktree 内同步 Local HEAD 并解决。` };
336
- }
337
- if (result.status === 'error') {
338
- return { status: 'error', message: `${result.code}: ${result.message}` };
339
- }
340
- return { status: 'error', message: 'Finish 未返回预期结果' };
341
- },
342
- presentCall: () => ({ card: 'generic', title: 'Finish worktree (commit to Local)', kind: 'other', rawInput: {} }),
343
- }));
344
- ctx.tools.register(defineTool({
345
- name: 'worktree_discard',
346
- description: 'Discard the current managed worktree and all its uncommitted changes. Requires confirmDirty: true. The worktree the current session is working inside cannot be discarded; use worktree_remove from a Local session instead.',
347
- parameters: {
348
- confirmDirty: {
349
- type: 'boolean',
350
- required: true,
351
- description: 'Confirm discarding uncommitted worktree changes.',
352
- },
353
- },
354
- output: {
355
- schema: {
356
- type: 'object',
357
- additionalProperties: false,
358
- properties: {
359
- status: { type: 'string', required: true, enum: ['discarded', 'error'] },
360
- message: { type: 'string' },
361
- },
362
- },
363
- render: (_args, value) => [{ type: 'text', text: value.status === 'discarded' ? 'Worktree discarded.' : (value.message ?? 'Discard failed.') }],
364
- },
365
- async execute(args, exec) {
366
- const sessionId = sessionIdOf(exec.agent);
367
- const target = await module.inspect(sessionId);
368
- const result = await module.operate({
369
- action: 'discard',
370
- sessionId,
371
- expectedRevision: target.revision,
372
- confirmDirty: args.confirmDirty === true,
373
- });
374
- if (result.status === 'discarded')
375
- return { status: 'discarded' };
376
- if (result.status === 'error') {
377
- return { status: 'error', message: `${result.code}: ${result.message}` };
378
- }
379
- return { status: 'error', message: 'Discard 未返回预期结果' };
380
- },
381
- presentCall: () => ({ card: 'generic', title: 'Discard worktree', kind: 'other', rawInput: {} }),
270
+ presentCall: () => ({ card: 'generic', title: 'Ready for Worktree review', kind: 'other', rawInput: {} }),
382
271
  }));
383
272
  }
384
273
  //# sourceMappingURL=tools.js.map
package/lib/tools.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"tools.js","sourceRoot":"","sources":["../src/tools.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"tools.js","sourceRoot":"","sources":["../src/tools.ts"],"names":[],"mappings":"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"}
package/lib/types.d.ts CHANGED
@@ -1,11 +1,9 @@
1
1
  /**
2
2
  * Type surface for dsh-git-worktree, ported from Domi's session-checkout
3
- * domain (`@proma/shared` types/session-target.ts) with the Domi-specific
4
- * surface removed: Local preview (preview/rollback_preview/finalize_preview),
5
- * collaborator delegation, and Electron reveal IPC. The remaining lifecycle
6
- * is: bind → working → ready_for_review → apply/finish/discard → delivered
7
- * (or retained/finalized), with journal-based crash recovery and fingerprint
8
- * CAS throughout.
3
+ * domain (`@proma/shared` types/session-target.ts). The plugin keeps Domi's
4
+ * Local preview/rollback/finalize lifecycle while omitting collaborator and
5
+ * Electron-only surfaces. Harness transport and Session separation live above
6
+ * this host-agnostic state machine.
9
7
  * @module dsh-git-worktree/types
10
8
  */
11
9
  /** Stable session-target reference in the durable layer. Paths and branches are not checkout identity. */
@@ -58,6 +56,17 @@ export type WorktreeDeliveryView = {
58
56
  } | {
59
57
  state: 'ready_for_review';
60
58
  review: WorktreeReviewView;
59
+ } | {
60
+ state: 'preview_active';
61
+ review: WorktreeReviewView;
62
+ previewedAt: number;
63
+ } | {
64
+ state: 'preview_detached';
65
+ review: WorktreeReviewView;
66
+ previewedAt: number;
67
+ detachedAt: number;
68
+ reason: 'stale_local' | 'preview_modified';
69
+ attemptedAction: 'rollback_preview' | 'finalize_preview' | 'discard';
61
70
  } | {
62
71
  state: 'finalized';
63
72
  review: WorktreeReviewView;
@@ -141,6 +150,10 @@ export interface SessionTargetView {
141
150
  revision: number;
142
151
  /** Delivery state for isolated checkouts; Local targets do not carry it. */
143
152
  delivery?: WorktreeDeliveryView;
153
+ /** Current project Local Preview slot state; does not expose another checkout identity. */
154
+ reviewSlot?: 'available' | 'waiting';
155
+ /** Owner Session holding the slot, used only for navigation/status. */
156
+ reviewSlotOwnerSessionId?: string;
144
157
  }
145
158
  export type SessionTargetBindChoice = {
146
159
  kind: 'local';
@@ -158,6 +171,21 @@ export interface SessionCheckoutFinishOperation extends SessionCheckoutOperation
158
171
  action: 'finish';
159
172
  commitMessage: string;
160
173
  retention?: WorktreeRetentionMode;
174
+ /** When present, Finish is bound to this persisted human-reviewed snapshot. */
175
+ expectedReviewId?: string;
176
+ }
177
+ export interface SessionCheckoutPreviewOperation extends SessionCheckoutOperationBase {
178
+ action: 'preview';
179
+ }
180
+ export interface SessionCheckoutRollbackPreviewOperation extends SessionCheckoutOperationBase {
181
+ action: 'rollback_preview';
182
+ /** Structured withdraw-and-continue flow returns to working instead of preserving the review. */
183
+ resumeRevision?: boolean;
184
+ }
185
+ export interface SessionCheckoutFinalizePreviewOperation extends SessionCheckoutOperationBase {
186
+ action: 'finalize_preview';
187
+ commitMessage: string;
188
+ retention?: WorktreeRetentionMode;
161
189
  }
162
190
  export interface SessionCheckoutRetryCleanupOperation extends SessionCheckoutOperationBase {
163
191
  action: 'retry_cleanup';
@@ -165,16 +193,34 @@ export interface SessionCheckoutRetryCleanupOperation extends SessionCheckoutOpe
165
193
  export interface SessionCheckoutDiscardOperation extends SessionCheckoutOperationBase {
166
194
  action: 'discard';
167
195
  confirmDirty: boolean;
196
+ rollbackPreview?: boolean;
168
197
  }
169
198
  export interface SessionCheckoutRecoverOperation extends SessionCheckoutOperationBase {
170
199
  action: 'recover';
171
200
  }
172
- export type SessionCheckoutOperation = SessionCheckoutApplyOperation | SessionCheckoutFinishOperation | SessionCheckoutRetryCleanupOperation | SessionCheckoutDiscardOperation | SessionCheckoutRecoverOperation;
201
+ export type SessionCheckoutOperation = SessionCheckoutApplyOperation | SessionCheckoutFinishOperation | SessionCheckoutPreviewOperation | SessionCheckoutRollbackPreviewOperation | SessionCheckoutFinalizePreviewOperation | SessionCheckoutRetryCleanupOperation | SessionCheckoutDiscardOperation | SessionCheckoutRecoverOperation;
173
202
  export interface SessionCheckoutAppliedResult {
174
203
  status: 'applied';
175
204
  target: SessionTargetView;
176
205
  changedFiles: string[];
177
206
  }
207
+ export interface SessionCheckoutPreviewedResult {
208
+ status: 'previewed';
209
+ target: SessionTargetView;
210
+ changedFiles: string[];
211
+ }
212
+ export interface SessionCheckoutPreviewRolledBackResult {
213
+ status: 'preview_rolled_back';
214
+ target: SessionTargetView;
215
+ changedFiles: string[];
216
+ }
217
+ export interface SessionCheckoutPreviewDetachedResult {
218
+ status: 'preview_detached';
219
+ target: SessionTargetView;
220
+ changedFiles: string[];
221
+ reason: 'stale_local' | 'preview_modified';
222
+ attemptedAction: 'rollback_preview' | 'finalize_preview' | 'discard';
223
+ }
178
224
  export interface SessionCheckoutFinishedResult {
179
225
  status: 'finished';
180
226
  target: SessionTargetView;
@@ -187,7 +233,7 @@ export interface SessionCheckoutFinishedResult {
187
233
  cleanupReason?: WorktreeCleanupReason;
188
234
  }
189
235
  export type ManagedWorktreeCleanupEligibility = 'safe' | 'retained' | 'blocked';
190
- export type ManagedWorktreeCleanupBlockReason = 'working' | 'review_pending' | 'retention_active' | 'uncommitted_changes' | 'identity_mismatch' | 'cleanup_failed' | 'unknown';
236
+ export type ManagedWorktreeCleanupBlockReason = 'working' | 'review_pending' | 'preview_active' | 'retention_active' | 'uncommitted_changes' | 'identity_mismatch' | 'cleanup_failed' | 'unknown';
191
237
  /** Read-only inspection conclusion without paths. Bulk mutations re-validate; this result is never authorization. */
192
238
  export interface ManagedWorktreeCleanupView {
193
239
  eligibility: ManagedWorktreeCleanupEligibility;
@@ -211,7 +257,7 @@ export interface BulkCleanupManagedWorktreesResult {
211
257
  cleanup: ManagedWorktreeCleanupView;
212
258
  }>;
213
259
  }
214
- export type ManagedWorktreeSummaryState = 'working' | 'ready_for_review' | 'retained' | 'cleanup_pending' | 'needs_attention' | 'delivered';
260
+ export type ManagedWorktreeSummaryState = 'working' | 'ready_for_review' | 'preview_active' | 'retained' | 'cleanup_pending' | 'needs_attention' | 'delivered';
215
261
  /** Path-free projection for the management surface. */
216
262
  export interface ManagedWorktreeSummaryView {
217
263
  checkoutId: string;
@@ -265,8 +311,8 @@ export interface SessionCheckoutOperationErrorResult {
265
311
  message: string;
266
312
  target?: SessionTargetView;
267
313
  }
268
- export type SessionCheckoutOperationResult = SessionCheckoutAppliedResult | SessionCheckoutFinishedResult | SessionCheckoutConflictResult | SessionCheckoutDiscardedResult | SessionCheckoutRecoveredResult | SessionCheckoutOperationErrorResult;
269
- export declare const SESSION_CHECKOUT_ERROR_CODES: readonly ["session_not_found", "project_not_found", "project_root_missing", "not_git_repository", "target_unselected", "target_already_bound", "project_mismatch", "checkout_missing", "checkout_mismatch", "recovery_required", "registry_corrupt", "git_operation_failed", "not_owner", "stale_target", "dirty_confirmation_required", "apply_conflict", "apply_failed", "invalid_input", "invalid_plan", "stale_local", "stale_isolated", "git_error", "commit_isolation_conflict", "checkout_limit_reached", "project_acceptance_busy", "operation_not_allowed", "recovery_unsafe"];
314
+ export type SessionCheckoutOperationResult = SessionCheckoutAppliedResult | SessionCheckoutPreviewedResult | SessionCheckoutPreviewRolledBackResult | SessionCheckoutPreviewDetachedResult | SessionCheckoutFinishedResult | SessionCheckoutConflictResult | SessionCheckoutDiscardedResult | SessionCheckoutRecoveredResult | SessionCheckoutOperationErrorResult;
315
+ export declare const SESSION_CHECKOUT_ERROR_CODES: readonly ["session_not_found", "project_not_found", "project_root_missing", "not_git_repository", "target_unselected", "target_already_bound", "project_mismatch", "checkout_missing", "checkout_mismatch", "recovery_required", "registry_corrupt", "git_operation_failed", "not_owner", "stale_target", "dirty_confirmation_required", "apply_conflict", "apply_failed", "invalid_input", "invalid_plan", "stale_local", "stale_isolated", "git_error", "commit_isolation_conflict", "checkout_limit_reached", "project_acceptance_busy", "operation_not_allowed", "preview_not_active", "preview_modified", "recovery_unsafe"];
270
316
  export type SessionCheckoutErrorCode = typeof SESSION_CHECKOUT_ERROR_CODES[number];
271
317
  export interface SessionCheckoutFailure {
272
318
  code: SessionCheckoutErrorCode;