dsh-git-worktree 0.7.4 → 0.8.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 (125) hide show
  1. package/CHANGELOG.md +26 -0
  2. package/README.en.md +7 -3
  3. package/README.md +7 -3
  4. package/cordis.patch.yml +4 -4
  5. package/docs/i18n.md +63 -0
  6. package/lib/adapters/files.d.ts +0 -7
  7. package/lib/adapters/files.js +4 -3
  8. package/lib/adapters/files.js.map +1 -1
  9. package/lib/adapters/git.d.ts +0 -10
  10. package/lib/adapters/git.js +6 -5
  11. package/lib/adapters/git.js.map +1 -1
  12. package/lib/adapters/registry.d.ts +0 -7
  13. package/lib/adapters/registry.js +2 -1
  14. package/lib/adapters/registry.js.map +1 -1
  15. package/lib/adapters/safe-file.d.ts +0 -7
  16. package/lib/adapters/safe-file.js +5 -4
  17. package/lib/adapters/safe-file.js.map +1 -1
  18. package/lib/client/WorktreeCreateRow.js +4 -2
  19. package/lib/client/WorktreeCreateRow.js.map +1 -1
  20. package/lib/client/WorktreeReviewRow.js +10 -8
  21. package/lib/client/WorktreeReviewRow.js.map +1 -1
  22. package/lib/client/actions.d.ts +3 -2
  23. package/lib/client/actions.js +17 -13
  24. package/lib/client/actions.js.map +1 -1
  25. package/lib/client/console-remote/adapter.d.ts +2 -1
  26. package/lib/client/console-remote/adapter.js +35 -32
  27. package/lib/client/console-remote/adapter.js.map +1 -1
  28. package/lib/client/console-remote/index.js +8 -4
  29. package/lib/client/console-remote/index.js.map +1 -1
  30. package/lib/client/i18n.d.ts +25 -0
  31. package/lib/client/i18n.js +43 -0
  32. package/lib/client/i18n.js.map +1 -0
  33. package/lib/client/index.d.ts +1 -1
  34. package/lib/client/index.js +17 -4
  35. package/lib/client/index.js.map +1 -1
  36. package/lib/client/model.d.ts +3 -2
  37. package/lib/client/model.js +8 -8
  38. package/lib/client/model.js.map +1 -1
  39. package/lib/client/pre-session/PreSessionWorktreeToggle.js +14 -12
  40. package/lib/client/pre-session/PreSessionWorktreeToggle.js.map +1 -1
  41. package/lib/client/pre-session/controller.js +11 -9
  42. package/lib/client/pre-session/controller.js.map +1 -1
  43. package/lib/client/pre-session/index.d.ts +12 -1
  44. package/lib/client/pre-session/index.js +9 -1
  45. package/lib/client/pre-session/index.js.map +1 -1
  46. package/lib/client/review-console/DeliveryProof.js +15 -12
  47. package/lib/client/review-console/DeliveryProof.js.map +1 -1
  48. package/lib/client/review-console/PreflightStatus.js +14 -8
  49. package/lib/client/review-console/PreflightStatus.js.map +1 -1
  50. package/lib/client/review-console/ReviewActions.js +97 -92
  51. package/lib/client/review-console/ReviewActions.js.map +1 -1
  52. package/lib/client/review-console/WorktreeReviewPanel.d.ts +1 -1
  53. package/lib/client/review-console/WorktreeReviewPanel.js +19 -16
  54. package/lib/client/review-console/WorktreeReviewPanel.js.map +1 -1
  55. package/lib/client/review-console/recovery-continuation.d.ts +2 -1
  56. package/lib/client/review-console/recovery-continuation.js +12 -8
  57. package/lib/client/review-console/recovery-continuation.js.map +1 -1
  58. package/lib/client/target-console/TargetStatusAction.js +28 -25
  59. package/lib/client/target-console/TargetStatusAction.js.map +1 -1
  60. package/lib/client/target-console/WorktreeConsoleView.js +40 -36
  61. package/lib/client/target-console/WorktreeConsoleView.js.map +1 -1
  62. package/lib/client/target-console/WorktreeManagerModal.js +3 -1
  63. package/lib/client/target-console/WorktreeManagerModal.js.map +1 -1
  64. package/lib/client/target-console/WorktreeReviewStatus.js +14 -12
  65. package/lib/client/target-console/WorktreeReviewStatus.js.map +1 -1
  66. package/lib/client/workspace-sidebar/index.js +4 -2
  67. package/lib/client/workspace-sidebar/index.js.map +1 -1
  68. package/lib/client/workspace-sidebar/model.d.ts +2 -1
  69. package/lib/client/workspace-sidebar/model.js +14 -13
  70. package/lib/client/workspace-sidebar/model.js.map +1 -1
  71. package/lib/client.js +2173 -477
  72. package/lib/commands.js +32 -35
  73. package/lib/commands.js.map +1 -1
  74. package/lib/console-host/control-plane.js +82 -81
  75. package/lib/console-host/control-plane.js.map +1 -1
  76. package/lib/console-host/errors.js +2 -1
  77. package/lib/console-host/errors.js.map +1 -1
  78. package/lib/console-host/projection.js +3 -1
  79. package/lib/console-host/projection.js.map +1 -1
  80. package/lib/console-host/review-diff.js +6 -5
  81. package/lib/console-host/review-diff.js.map +1 -1
  82. package/lib/console-host/service.d.ts +24 -22
  83. package/lib/console-host/service.js +54 -51
  84. package/lib/console-host/service.js.map +1 -1
  85. package/lib/console-remote/descriptors.js +2 -2
  86. package/lib/console-remote/descriptors.js.map +1 -1
  87. package/lib/console-remote/remote.d.ts +22 -21
  88. package/lib/console-remote/remote.js.map +1 -1
  89. package/lib/console-remote/schemas.d.ts +4 -0
  90. package/lib/console-remote/schemas.js +1 -0
  91. package/lib/console-remote/schemas.js.map +1 -1
  92. package/lib/i18n/client-messages.d.ts +1523 -0
  93. package/lib/i18n/client-messages.js +1431 -0
  94. package/lib/i18n/client-messages.js.map +1 -0
  95. package/lib/i18n/core.d.ts +12 -0
  96. package/lib/i18n/core.js +10 -0
  97. package/lib/i18n/core.js.map +1 -0
  98. package/lib/i18n/host-messages.d.ts +1463 -0
  99. package/lib/i18n/host-messages.js +1474 -0
  100. package/lib/i18n/host-messages.js.map +1 -0
  101. package/lib/i18n/host.d.ts +9 -0
  102. package/lib/i18n/host.js +34 -0
  103. package/lib/i18n/host.js.map +1 -0
  104. package/lib/i18n/transport-messages.d.ts +10 -0
  105. package/lib/i18n/transport-messages.js +11 -0
  106. package/lib/i18n/transport-messages.js.map +1 -0
  107. package/lib/index.d.ts +9 -2
  108. package/lib/index.js +4 -2
  109. package/lib/index.js.map +1 -1
  110. package/lib/session-checkout-apply.js +93 -92
  111. package/lib/session-checkout-apply.js.map +1 -1
  112. package/lib/session-checkout-module.js +232 -229
  113. package/lib/session-checkout-module.js.map +1 -1
  114. package/lib/session-target-context.js +2 -1
  115. package/lib/session-target-context.js.map +1 -1
  116. package/lib/tools.d.ts +0 -8
  117. package/lib/tools.js +108 -96
  118. package/lib/tools.js.map +1 -1
  119. package/lib/workspace-provider-lifecycle.d.ts +15 -0
  120. package/lib/workspace-provider-lifecycle.js +65 -0
  121. package/lib/workspace-provider-lifecycle.js.map +1 -0
  122. package/package.json +6 -1
  123. package/scripts/check-publish.mjs +6 -3
  124. package/scripts/dev-dsh-lib.mjs +1 -1
  125. package/scripts/workspace-sidebar-upstream.mjs +1 -1
@@ -1,5 +1,6 @@
1
1
  /** Dynamic replay-stable model context for the current Worktree Session Target. */
2
2
  import '@deepseek-ai/dsh-system-prompt';
3
+ import { languageForInvocation, withHostLanguage } from './i18n/host.js';
3
4
  /** Register a per-assembly snapshot without performing Git or filesystem I/O. */
4
5
  export function registerSessionTargetContext(ctx, module) {
5
6
  ctx.inject(['systemPrompt'], (scope) => {
@@ -8,7 +9,7 @@ export function registerSessionTargetContext(ctx, module) {
8
9
  order: 118,
9
10
  text: (context) => {
10
11
  const sessionId = context.agent?.session?.id;
11
- return typeof sessionId === 'string' ? module.runtimeContext(sessionId) : '';
12
+ return withHostLanguage(languageForInvocation(context.agent, scope), () => (typeof sessionId === 'string' ? module.runtimeContext(sessionId) : ''));
12
13
  },
13
14
  });
14
15
  });
@@ -1 +1 @@
1
- {"version":3,"file":"session-target-context.js","sourceRoot":"","sources":["../src/session-target-context.ts"],"names":[],"mappings":"AAAA,mFAAmF;AAGnF,OAAO,gCAAgC,CAAA;AAOvC,iFAAiF;AACjF,MAAM,UAAU,4BAA4B,CAAC,GAAY,EAAE,MAA6B;IACtF,GAAG,CAAC,MAAM,CAAC,CAAC,cAAc,CAAC,EAAE,CAAC,KAAc,EAAE,EAAE;QAC9C,KAAK,CAAC,YAAY,CAAC,OAAO,CAAC;YACzB,IAAI,EAAE,6BAA6B;YACnC,KAAK,EAAE,GAAG;YACV,IAAI,EAAE,CAAC,OAAO,EAAE,EAAE;gBAChB,MAAM,SAAS,GAAI,OAAO,CAAC,KAAkC,EAAE,OAAO,EAAE,EAAE,CAAA;gBAC1E,OAAO,OAAO,SAAS,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,EAAE,CAAA;YAC9E,CAAC;SACF,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;AACJ,CAAC"}
1
+ {"version":3,"file":"session-target-context.js","sourceRoot":"","sources":["../src/session-target-context.ts"],"names":[],"mappings":"AAAA,mFAAmF;AAGnF,OAAO,gCAAgC,CAAA;AAEvC,OAAO,EAAE,qBAAqB,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAA;AAMxE,iFAAiF;AACjF,MAAM,UAAU,4BAA4B,CAAC,GAAY,EAAE,MAA6B;IACtF,GAAG,CAAC,MAAM,CAAC,CAAC,cAAc,CAAC,EAAE,CAAC,KAAc,EAAE,EAAE;QAC9C,KAAK,CAAC,YAAY,CAAC,OAAO,CAAC;YACzB,IAAI,EAAE,6BAA6B;YACnC,KAAK,EAAE,GAAG;YACV,IAAI,EAAE,CAAC,OAAO,EAAE,EAAE;gBAChB,MAAM,SAAS,GAAI,OAAO,CAAC,KAAkC,EAAE,OAAO,EAAE,EAAE,CAAA;gBAC1E,OAAO,gBAAgB,CAAC,qBAAqB,CAAC,OAAO,CAAC,KAAK,EAAE,KAAK,CAAC,EAAE,GAAG,EAAE,CAAC,CACzE,OAAO,SAAS,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,EAAE,CACtE,CAAC,CAAA;YACJ,CAAC;SACF,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;AACJ,CAAC"}
package/lib/tools.d.ts CHANGED
@@ -1,11 +1,3 @@
1
- /**
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
- * @module dsh-git-worktree/tools
8
- */
9
1
  import type { Context } from '@deepseek-ai/cordis';
10
2
  import type { SessionCheckoutModule } from './index.js';
11
3
  /** Register the safe model-facing worktree tools. */
package/lib/tools.js CHANGED
@@ -1,3 +1,5 @@
1
+ import { hostMessage, withHostLanguage, languageForInvocation } from './i18n/host.js';
2
+ import { hostRegistrationMessage } from './i18n/host-messages.js';
1
3
  /**
2
4
  * Model-facing worktree tools. Destructive delivery actions are deliberately
3
5
  * absent: Finish/Discard/Remove are human commands surfaced by the client
@@ -11,7 +13,7 @@ import { defineTool } from '@deepseek-ai/dsh-tools';
11
13
  function sessionIdOf(agent) {
12
14
  const session = agent?.session;
13
15
  if (!session || typeof session.id !== 'string') {
14
- throw new Error('worktree 工具只能在 DSH Agent 会话中调用');
16
+ throw new Error(hostMessage('worktreeToolsCanOnlyBeCalledInADSH'));
15
17
  }
16
18
  return session.id;
17
19
  }
@@ -23,7 +25,7 @@ function renderJson(value) {
23
25
  export function registerTools(ctx, module) {
24
26
  ctx.tools.register(defineTool({
25
27
  name: 'worktree_create',
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.',
28
+ description: hostRegistrationMessage('reserveAUniqueManagedGitWorktreeAndADistinct'),
27
29
  parameters: {},
28
30
  output: {
29
31
  schema: {
@@ -42,24 +44,26 @@ export function registerTools(ctx, module) {
42
44
  render: (_args, value) => renderJson(value),
43
45
  },
44
46
  async execute(_args, exec) {
45
- const sourceSessionId = sessionIdOf(exec.agent);
46
- const targetSessionId = randomUUID();
47
- const launch = await module.createIsolatedTarget(sourceSessionId, targetSessionId);
48
- return {
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
- };
47
+ return withHostLanguage(languageForInvocation(exec.agent, ctx), async () => {
48
+ const sourceSessionId = sessionIdOf(exec.agent);
49
+ const targetSessionId = randomUUID();
50
+ const launch = await module.createIsolatedTarget(sourceSessionId, targetSessionId);
51
+ return {
52
+ kind: 'worktree_target_created',
53
+ checkoutId: launch.target.checkout.id,
54
+ targetSessionId,
55
+ managedRoot: launch.managedRoot,
56
+ phase: launch.target.checkout.phase,
57
+ currentOid: launch.target.current.oid,
58
+ sourceSessionId,
59
+ };
60
+ });
57
61
  },
58
- presentCall: () => ({ card: 'generic', title: 'Create isolated Session Target', kind: 'other', rawInput: {} }),
62
+ presentCall: () => ({ card: 'generic', title: hostRegistrationMessage('createIsolatedSessionTarget'), kind: 'other', rawInput: {} }),
59
63
  }));
60
64
  ctx.tools.register(defineTool({
61
65
  name: 'worktree_list',
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.',
66
+ description: hostRegistrationMessage('listManagedWorktreesVisibleToTheCurrentSessionResults'),
63
67
  parameters: {},
64
68
  output: {
65
69
  schema: {
@@ -90,27 +94,29 @@ export function registerTools(ctx, module) {
90
94
  render: (_args, value) => renderJson(value),
91
95
  },
92
96
  async execute(_args, exec) {
93
- const sessionId = sessionIdOf(exec.agent);
94
- const summaries = await module.listManagedWorktreesForSession(sessionId);
95
- return {
96
- kind: 'worktree_list',
97
- worktrees: summaries.map((summary) => ({
98
- checkoutId: summary.checkoutId,
99
- projectName: summary.project.name,
100
- ownerSessionId: summary.ownerSessionId,
101
- iteration: summary.iteration,
102
- state: summary.state,
103
- phase: summary.phase,
104
- dirty: summary.dirty,
105
- commitOid: summary.commitOid ?? undefined,
106
- })),
107
- };
97
+ return withHostLanguage(languageForInvocation(exec.agent, ctx), async () => {
98
+ const sessionId = sessionIdOf(exec.agent);
99
+ const summaries = await module.listManagedWorktreesForSession(sessionId);
100
+ return {
101
+ kind: 'worktree_list',
102
+ worktrees: summaries.map((summary) => ({
103
+ checkoutId: summary.checkoutId,
104
+ projectName: summary.project.name,
105
+ ownerSessionId: summary.ownerSessionId,
106
+ iteration: summary.iteration,
107
+ state: summary.state,
108
+ phase: summary.phase,
109
+ dirty: summary.dirty,
110
+ commitOid: summary.commitOid ?? undefined,
111
+ })),
112
+ };
113
+ });
108
114
  },
109
- presentCall: () => ({ card: 'generic', title: 'List managed worktrees', kind: 'other', rawInput: {} }),
115
+ presentCall: () => ({ card: 'generic', title: hostRegistrationMessage('listManagedWorktrees'), kind: 'other', rawInput: {} }),
110
116
  }));
111
117
  ctx.tools.register(defineTool({
112
118
  name: 'worktree_resume_revision',
113
- description: '当前 Isolated Session 处于尚未同步 Local 的 Ready for Review,且用户提出新的代码或文件修改时,必须先自动调用本工具使旧 Review 失效并恢复同一轮 Working,然后直接继续执行请求。纯讨论、问答或补充信息不要调用;不要要求用户点击恢复编辑,也不要先同步 Local。',
119
+ description: hostRegistrationMessage('whenTheCurrentIsolatedSessionIsReadyForReview'),
114
120
  parameters: {},
115
121
  output: {
116
122
  schema: {
@@ -128,29 +134,31 @@ export function registerTools(ctx, module) {
128
134
  render: (_args, value) => renderJson(value),
129
135
  },
130
136
  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
- };
137
+ return withHostLanguage(languageForInvocation(exec.agent, ctx), async () => {
138
+ const sessionId = sessionIdOf(exec.agent);
139
+ const current = await module.inspect(sessionId);
140
+ if (current.delivery?.state !== 'ready_for_review') {
141
+ throw new Error(hostMessage('theCurrentWorktreeHasNoUnsyncedReviewToResume372', { p0: current.delivery?.state ?? 'unknown' }));
142
+ }
143
+ const target = await module.resumeRevision(sessionId, current.revision, current.delivery.review.reviewId);
144
+ if (target.delivery?.state !== 'working') {
145
+ throw new Error(hostMessage('worktreeDidNotReturnToWorkingState', { p0: target.delivery?.state ?? 'unknown' }));
146
+ }
147
+ return {
148
+ kind: 'worktree_revision_resumed',
149
+ checkoutId: target.checkout.id,
150
+ iteration: target.delivery.iteration,
151
+ revision: target.revision,
152
+ phase: target.checkout.phase,
153
+ sessionId,
154
+ };
155
+ });
148
156
  },
149
- presentCall: () => ({ card: 'generic', title: 'Resume Worktree revision', kind: 'other', rawInput: {} }),
157
+ presentCall: () => ({ card: 'generic', title: hostRegistrationMessage('resumeWorktreeRevision'), kind: 'other', rawInput: {} }),
150
158
  }));
151
159
  ctx.tools.register(defineTool({
152
160
  name: 'worktree_begin_next_iteration',
153
- description: '当当前 Isolated Session 已交付并完成 cleanup,而用户在同一对话中提出新的代码或文件修改时,先调用本工具安全重建同一个 immutable cwd 并进入下一轮,然后继续执行用户请求。不要改用 worktree_create;retained 或 cleanup_pending 状态不能调用。',
161
+ description: hostRegistrationMessage('whenTheCurrentIsolatedSessionHasBeenDeliveredAnd'),
154
162
  parameters: {},
155
163
  output: {
156
164
  schema: {
@@ -168,35 +176,37 @@ export function registerTools(ctx, module) {
168
176
  render: (_args, value) => renderJson(value),
169
177
  },
170
178
  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'}`);
176
- }
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
- };
179
+ return withHostLanguage(languageForInvocation(exec.agent, ctx), async () => {
180
+ const sessionId = sessionIdOf(exec.agent);
181
+ const current = await module.inspect(sessionId);
182
+ const target = await module.beginNextIteration(sessionId, current.revision);
183
+ if (target.delivery?.state !== 'working') {
184
+ throw new Error(hostMessage('theNextWorktreeIterationDidNotEnterWorkingState', { p0: target.delivery?.state ?? 'unknown' }));
185
+ }
186
+ return {
187
+ kind: 'worktree_next_iteration_started',
188
+ checkoutId: target.checkout.id,
189
+ iteration: target.delivery.iteration,
190
+ phase: target.checkout.phase,
191
+ currentOid: target.current.oid,
192
+ sessionId,
193
+ };
194
+ });
185
195
  },
186
- presentCall: () => ({ card: 'generic', title: 'Start next Worktree iteration', kind: 'other', rawInput: {} }),
196
+ presentCall: () => ({ card: 'generic', title: hostRegistrationMessage('startNextWorktreeIteration'), kind: 'other', rawInput: {} }),
187
197
  }));
188
198
  ctx.tools.register(defineTool({
189
199
  name: 'worktree_ready_for_review',
190
- description: '仅用于已经选择 Isolated Checkout 的 Worktree Session,普通 Local Checkout 任务必须用正常助手回复结束且不得调用本工具。它是 Isolated Session 的最后一个模型动作:把完整交付报告、验证证据和建议 Commit Message 仅写入本工具参数,然后立即停止。不要在调用前后用普通回复重复完整报告;最多用一句话提示用户通过底部验收条处理。用户会显式决定是否提交或放弃,模型不得自动提交或清理。',
200
+ description: hostRegistrationMessage('onlyForWorktreeSessionsThatHaveAlreadySelectedAn'),
191
201
  parameters: {
192
202
  summary: {
193
203
  type: 'string',
194
204
  required: true,
195
- description: 'One-line summary of the change (max 240 chars).',
205
+ description: hostRegistrationMessage('oneLineSummaryOfTheChangeMax240Chars'),
196
206
  },
197
207
  details: {
198
208
  type: 'string',
199
- description: 'Optional full Markdown details (max 12000 chars).',
209
+ description: hostRegistrationMessage('optionalFullMarkdownDetailsMax12000Chars'),
200
210
  },
201
211
  validationStatus: {
202
212
  type: 'string',
@@ -205,7 +215,7 @@ export function registerTools(ctx, module) {
205
215
  },
206
216
  validationSummary: {
207
217
  type: 'string',
208
- description: 'Optional one-line validation outcome.',
218
+ description: hostRegistrationMessage('optionalOneLineValidationOutcome'),
209
219
  },
210
220
  tests: {
211
221
  type: 'array',
@@ -223,7 +233,7 @@ export function registerTools(ctx, module) {
223
233
  suggestedCommitMessage: {
224
234
  type: 'string',
225
235
  required: true,
226
- description: 'Suggested commit message for the human acceptance action.',
236
+ description: hostRegistrationMessage('suggestedCommitMessageForTheHumanAcceptanceAction'),
227
237
  },
228
238
  },
229
239
  output: {
@@ -242,32 +252,34 @@ export function registerTools(ctx, module) {
242
252
  render: (_args, value) => renderJson(value),
243
253
  },
244
254
  async execute(args, exec) {
245
- const sessionId = sessionIdOf(exec.agent);
246
- const target = await module.markReadyForReview(sessionId, {
247
- summary: args.summary,
248
- detailsMarkdown: args.details,
249
- validationStatus: args.validationStatus,
250
- validationSummary: args.validationSummary,
251
- tests: (args.tests ?? []).map((test) => ({
252
- command: test.command,
253
- status: test.status,
254
- ...(test.summary ? { summary: test.summary } : {}),
255
- })),
256
- suggestedCommitMessage: args.suggestedCommitMessage,
255
+ return withHostLanguage(languageForInvocation(exec.agent, ctx), async () => {
256
+ const sessionId = sessionIdOf(exec.agent);
257
+ const target = await module.markReadyForReview(sessionId, {
258
+ summary: args.summary,
259
+ detailsMarkdown: args.details,
260
+ validationStatus: args.validationStatus,
261
+ validationSummary: args.validationSummary,
262
+ tests: (args.tests ?? []).map((test) => ({
263
+ command: test.command,
264
+ status: test.status,
265
+ ...(test.summary ? { summary: test.summary } : {}),
266
+ })),
267
+ suggestedCommitMessage: args.suggestedCommitMessage,
268
+ });
269
+ if (target.delivery?.state !== 'ready_for_review') {
270
+ throw new Error(hostMessage('worktreeDidNotEnterAReviewableState', { p0: target.delivery?.state ?? 'unknown' }));
271
+ }
272
+ return {
273
+ kind: 'worktree_ready_for_review',
274
+ state: target.delivery.state,
275
+ reviewId: target.delivery.review.reviewId,
276
+ revision: target.revision,
277
+ iteration: target.delivery.review.iteration,
278
+ changedFiles: target.delivery.review.changedFiles,
279
+ };
257
280
  });
258
- if (target.delivery?.state !== 'ready_for_review') {
259
- throw new Error(`worktree 未进入可验收状态: ${target.delivery?.state ?? 'unknown'}`);
260
- }
261
- return {
262
- kind: 'worktree_ready_for_review',
263
- state: target.delivery.state,
264
- reviewId: target.delivery.review.reviewId,
265
- revision: target.revision,
266
- iteration: target.delivery.review.iteration,
267
- changedFiles: target.delivery.review.changedFiles,
268
- };
269
281
  },
270
- presentCall: () => ({ card: 'generic', title: 'Ready for Worktree review', kind: 'other', rawInput: {} }),
282
+ presentCall: () => ({ card: 'generic', title: hostRegistrationMessage('readyForWorktreeReview'), kind: 'other', rawInput: {} }),
271
283
  }));
272
284
  }
273
285
  //# 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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"}
@@ -0,0 +1,15 @@
1
+ import type { Context } from '@deepseek-ai/cordis';
2
+ export declare const WORKSPACE_PROVIDER_CONDITION = "!!get('worktreeWorkspaceProvider') && [...loader.entries()].some(entry => entry.options?.name === 'dsh-git-worktree' && !entry.disabled)";
3
+ declare module '@deepseek-ai/cordis' {
4
+ interface Context {
5
+ worktreeWorkspaceProvider: boolean;
6
+ }
7
+ }
8
+ /**
9
+ * Reconcile the conditional patch with the public Loader lifecycle. A disabled
10
+ * expression is evaluated dynamically, but the Web module registry caches rows
11
+ * by plugin name; a change to the replacement alone does not re-elect Workspace.
12
+ * Restarting the official entry through Loader operations publishes real module
13
+ * events without saving any disabled flag or changing the user's profile.
14
+ */
15
+ export declare function mountWorkspaceProviderLifecycle(ctx: Context): Promise<void>;
@@ -0,0 +1,65 @@
1
+ export const WORKSPACE_PROVIDER_CONDITION = "!!get('worktreeWorkspaceProvider') && [...loader.entries()].some(entry => entry.options?.name === 'dsh-git-worktree' && !entry.disabled)";
2
+ const OFFICIAL_WORKSPACE = '@deepseek-ai/dsh-client-ui-workspace';
3
+ // Cordis exposes FiberState as a declaration-only const enum, not a JS export.
4
+ const UNLOADING = 5;
5
+ /**
6
+ * Reconcile the conditional patch with the public Loader lifecycle. A disabled
7
+ * expression is evaluated dynamically, but the Web module registry caches rows
8
+ * by plugin name; a change to the replacement alone does not re-elect Workspace.
9
+ * Restarting the official entry through Loader operations publishes real module
10
+ * events without saving any disabled flag or changing the user's profile.
11
+ */
12
+ export async function mountWorkspaceProviderLifecycle(ctx) {
13
+ const loader = ctx.loader;
14
+ const owned = () => [...loader.entries()].filter(entry => {
15
+ const disabled = entry.options.disabled;
16
+ return entry.options.name === OFFICIAL_WORKSPACE
17
+ && typeof disabled === 'object' && disabled !== null
18
+ && '__jsExpr' in disabled && disabled.__jsExpr === WORKSPACE_PROVIDER_CONDITION;
19
+ });
20
+ let released = false;
21
+ let pending = Promise.resolve();
22
+ const reconcile = () => {
23
+ pending = pending.then(async () => {
24
+ if (released)
25
+ return;
26
+ for (const entry of owned()) {
27
+ if (entry.disabled) {
28
+ if (!released)
29
+ await entry.update({}, false, true);
30
+ }
31
+ else {
32
+ await entry.refresh();
33
+ }
34
+ }
35
+ });
36
+ return pending;
37
+ };
38
+ ctx.effect(() => async () => {
39
+ released = true;
40
+ // Root/Include teardown owns these entries; do not resurrect that tree.
41
+ if (ctx.root.fiber.uid === null || ctx.root.fiber.state === UNLOADING)
42
+ return;
43
+ await pending.catch(() => { });
44
+ for (const entry of owned()) {
45
+ if (entry.parent.ctx.fiber.uid !== null && entry.parent.ctx.fiber.state !== UNLOADING && !entry.disabled)
46
+ await entry.refresh();
47
+ }
48
+ });
49
+ // Registered after the fallback so LIFO teardown releases the selection
50
+ // before restoring Workspace, including when the replacement apply fails.
51
+ ctx.provide('worktreeWorkspaceProvider', true);
52
+ // Includes may add the official row after the replacement has activated.
53
+ ctx.on('internal/status', fiber => {
54
+ if (fiber === ctx.fiber && !released) {
55
+ void reconcile().catch(error => ctx.logger.warn(error));
56
+ }
57
+ });
58
+ ctx.on('internal/plugin', fiber => {
59
+ if (fiber.uid && fiber.entry?.options.name === OFFICIAL_WORKSPACE) {
60
+ void reconcile().catch(error => ctx.logger.warn(error));
61
+ }
62
+ });
63
+ await reconcile();
64
+ }
65
+ //# sourceMappingURL=workspace-provider-lifecycle.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workspace-provider-lifecycle.js","sourceRoot":"","sources":["../src/workspace-provider-lifecycle.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "dsh-git-worktree",
3
- "version": "0.7.4",
3
+ "version": "0.8.0",
4
4
  "description": "Experimental Git worktree Session Targets for DeepSeek Harness with isolated sessions, review checkpoints, human-confirmed delivery, and safe recovery.",
5
5
  "type": "module",
6
6
  "main": "lib/index.js",
@@ -33,6 +33,7 @@
33
33
  "lib",
34
34
  "scripts",
35
35
  "CHANGELOG.md",
36
+ "docs/i18n.md",
36
37
  "NOTICE",
37
38
  "cordis.patch.yml"
38
39
  ],
@@ -85,6 +86,7 @@
85
86
  },
86
87
  "peerDependencies": {
87
88
  "@deepseek-ai/cordis": "^4.0.2",
89
+ "@deepseek-ai/cordis-plugin-loader": "^1.0.3",
88
90
  "@deepseek-ai/dsh-agent": "^0.1.2-rc.1",
89
91
  "@deepseek-ai/dsh-client-locale": "0.1.2-rc.1",
90
92
  "@deepseek-ai/dsh-commands": "^0.1.2-rc.1",
@@ -98,12 +100,15 @@
98
100
  },
99
101
  "devDependencies": {
100
102
  "@deepseek-ai/cordis": "4.0.2",
103
+ "@deepseek-ai/cordis-plugin-include": "1.0.7",
104
+ "@deepseek-ai/cordis-plugin-loader": "1.0.3",
101
105
  "@deepseek-ai/dsh-agent": "0.1.2-rc.1",
102
106
  "@deepseek-ai/dsh-api-gateway": "0.1.2-rc.1",
103
107
  "@deepseek-ai/dsh-api-session-controller": "0.1.2-rc.1",
104
108
  "@deepseek-ai/dsh-api-workspace-controller": "0.1.2-rc.1",
105
109
  "@deepseek-ai/dsh-client-connection": "0.1.2-rc.1",
106
110
  "@deepseek-ai/dsh-client-locale": "0.1.2-rc.1",
111
+ "@deepseek-ai/dsh-client-modules": "0.1.2-rc.1",
107
112
  "@deepseek-ai/dsh-client-store": "0.1.2-rc.1",
108
113
  "@deepseek-ai/dsh-client-ui-primitives": "0.1.2-rc.1",
109
114
  "@deepseek-ai/dsh-client-ui-workspace": "0.1.2-rc.1",
@@ -38,6 +38,7 @@ function includedByFiles(target) {
38
38
  // 1. Host singleton packages must resolve from DSH instead of a plugin-private dependency tree.
39
39
  const hostSingletonPackages = [
40
40
  '@deepseek-ai/cordis',
41
+ '@deepseek-ai/cordis-plugin-loader',
41
42
  '@deepseek-ai/dsh-agent',
42
43
  '@deepseek-ai/dsh-commands',
43
44
  '@deepseek-ai/dsh-session',
@@ -72,8 +73,10 @@ const patch = readFileSync(patchPath, 'utf8')
72
73
  if (!patch.includes('- insert:') || !patch.includes(`name: ${manifest.name}`)) {
73
74
  fail(`${patchRel} must insert one plugin row named ${manifest.name}`)
74
75
  }
75
- if (!/- id: ui-workspace\s+name: ['"]?@deepseek-ai\/dsh-client-ui-workspace['"]?\s+disabled: true/u.test(patch)) {
76
- fail(`${patchRel} must disable the original ui-workspace row while the gated derivative owns its Slot tree`)
76
+ const { WORKSPACE_PROVIDER_CONDITION } = await import(pathToFileURL(resolve(root, 'lib/workspace-provider-lifecycle.js')).href)
77
+ if (!/- id: ui-workspace\s+name: ['"]?@deepseek-ai\/dsh-client-ui-workspace['"]?\s+disabled: !!js /u.test(patch)
78
+ || !patch.includes(`disabled: !!js ${JSON.stringify(WORKSPACE_PROVIDER_CONDITION)}`)) {
79
+ fail(`${patchRel} must share the conditional Workspace selection used by the Host lifecycle`)
77
80
  }
78
81
  if (manifest.dsh?.client?.inject?.includes('@deepseek-ai/dsh-client-ui-workspace')) {
79
82
  fail('dsh.client.inject must not request the disabled official ui-workspace Client module')
@@ -145,7 +148,7 @@ ok(`manual strict ./typert + ./remote contribution (${expectedRemoteMethods.leng
145
148
  const entryRel = exportsMap['.']?.default ?? manifest.main
146
149
  if (typeof entryRel !== 'string') fail('exports["."].default is not a path')
147
150
  const entry = readFileSync(resolve(root, entryRel), 'utf8')
148
- if (!/export\s+function\s+apply\b/.test(entry)) fail(`${entryRel} does not export function apply`)
151
+ if (!/export\s+(?:async\s+)?function\s+apply\b/.test(entry)) fail(`${entryRel} does not export function apply`)
149
152
  if (!/export\s+const\s+inject\b/.test(entry)) fail(`${entryRel} does not export const inject`)
150
153
  ok(`${entryRel} exports Host apply + inject`)
151
154
 
@@ -462,7 +462,7 @@ export function installLocalSnapshot(options) {
462
462
  scripts: {},
463
463
  }
464
464
  writeFileSync(join(stagingRoot, 'package.json'), `${JSON.stringify(stagedManifest, null, 2)}\n`)
465
- for (const entry of ['lib', 'cordis.patch.yml', 'README.md', 'README.en.md', 'LICENSE', 'NOTICE']) {
465
+ for (const entry of ['lib', 'cordis.patch.yml', 'README.md', 'README.en.md', 'docs/i18n.md', 'LICENSE', 'NOTICE']) {
466
466
  const source = join(options.projectRoot, entry)
467
467
  if (existsSync(source)) copyPackageEntry(source, join(stagingRoot, entry))
468
468
  }
@@ -46,7 +46,7 @@ export function decorateOfficialWorkspaceClient(source) {
46
46
  'Chinese Worktree locale')
47
47
  derived = replaceExactlyOnce(derived,
48
48
  '\t\tconst en = {',
49
- `\t\tconst en = {\n\t\t\t"dshGitWorktree.managed": "Managed Worktree",\n\t\t\t"dshGitWorktree.state.working": "Working",\n\t\t\t"dshGitWorktree.state.ready_for_review": "Ready",\n\t\t\t"dshGitWorktree.state.preview_active": "Preview",\n\t\t\t"dshGitWorktree.state.preview_detached": "Resume preview",\n\t\t\t"dshGitWorktree.state.recovery_required": "Recovery required",\n\t\t\t"dshGitWorktree.state.finalized": "Done",\n\t\t\t"dshGitWorktree.state.discarded": "Discarded",`,
49
+ `\t\tconst en = {\n\t\t\t"dshGitWorktree.managed": "Managed Worktree",\n\t\t\t"dshGitWorktree.state.working": "In progress",\n\t\t\t"dshGitWorktree.state.ready_for_review": "Ready for review",\n\t\t\t"dshGitWorktree.state.preview_active": "Preview",\n\t\t\t"dshGitWorktree.state.preview_detached": "Resume preview",\n\t\t\t"dshGitWorktree.state.recovery_required": "Recovery required",\n\t\t\t"dshGitWorktree.state.finalized": "Done",\n\t\t\t"dshGitWorktree.state.discarded": "Discarded",`,
50
50
  'English Worktree locale')
51
51
  derived = replaceExactlyOnce(derived,
52
52
  '\t\t\t\tgroups.push(buildGroup(workspace.workspaceId, workspace.workspaceId, workspace.path, Date.parse(workspace.createdAt), workspace.title, members, "account"));',