dsh-git-worktree 0.4.0 → 0.7.1

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 (95) hide show
  1. package/CHANGELOG.md +98 -0
  2. package/NOTICE +14 -0
  3. package/README.en.md +74 -266
  4. package/README.md +78 -286
  5. package/cordis.patch.yml +7 -3
  6. package/lib/adapters/git.js +8 -0
  7. package/lib/adapters/git.js.map +1 -1
  8. package/lib/adapters/registry.js +100 -1
  9. package/lib/adapters/registry.js.map +1 -1
  10. package/lib/checkpoint.d.ts +3 -0
  11. package/lib/checkpoint.js +29 -0
  12. package/lib/checkpoint.js.map +1 -0
  13. package/lib/client/WorktreeReviewRow.d.ts +1 -1
  14. package/lib/client/WorktreeReviewRow.js +32 -4
  15. package/lib/client/WorktreeReviewRow.js.map +1 -1
  16. package/lib/client/actions.d.ts +25 -1
  17. package/lib/client/actions.js.map +1 -1
  18. package/lib/client/console-remote/adapter.js +11 -3
  19. package/lib/client/console-remote/adapter.js.map +1 -1
  20. package/lib/client/index.d.ts +1 -1
  21. package/lib/client/index.js +3 -1
  22. package/lib/client/index.js.map +1 -1
  23. package/lib/client/pre-session/controller.js +9 -0
  24. package/lib/client/pre-session/controller.js.map +1 -1
  25. package/lib/client/review-console/PreflightStatus.d.ts +3 -2
  26. package/lib/client/review-console/PreflightStatus.js +3 -3
  27. package/lib/client/review-console/PreflightStatus.js.map +1 -1
  28. package/lib/client/review-console/ReviewActions.js +566 -27
  29. package/lib/client/review-console/ReviewActions.js.map +1 -1
  30. package/lib/client/review-console/WorktreeReviewPanel.js +18 -3
  31. package/lib/client/review-console/WorktreeReviewPanel.js.map +1 -1
  32. package/lib/client/review-console/preflight-cache.d.ts +2 -0
  33. package/lib/client/review-console/preflight-cache.js +18 -5
  34. package/lib/client/review-console/preflight-cache.js.map +1 -1
  35. package/lib/client/review-console/preview-recovery-cache.d.ts +20 -0
  36. package/lib/client/review-console/preview-recovery-cache.js +103 -0
  37. package/lib/client/review-console/preview-recovery-cache.js.map +1 -0
  38. package/lib/client/review-console/recovery-continuation.d.ts +53 -0
  39. package/lib/client/review-console/recovery-continuation.js +483 -0
  40. package/lib/client/review-console/recovery-continuation.js.map +1 -0
  41. package/lib/client/review-console/review-console.styles.js +9 -1
  42. package/lib/client/review-console/review-console.styles.js.map +1 -1
  43. package/lib/client/styles.js +61 -0
  44. package/lib/client/styles.js.map +1 -1
  45. package/lib/client/target-console/TargetStatusAction.js +2 -2
  46. package/lib/client/target-console/TargetStatusAction.js.map +1 -1
  47. package/lib/client/target-console/WorktreeConsoleView.js +1 -1
  48. package/lib/client/target-console/WorktreeConsoleView.js.map +1 -1
  49. package/lib/client/target-console/WorktreeReviewStatus.js +19 -6
  50. package/lib/client/target-console/WorktreeReviewStatus.js.map +1 -1
  51. package/lib/client/workspace-sidebar/index.d.ts +33 -0
  52. package/lib/client/workspace-sidebar/index.js +127 -0
  53. package/lib/client/workspace-sidebar/index.js.map +1 -0
  54. package/lib/client/workspace-sidebar/model.d.ts +37 -0
  55. package/lib/client/workspace-sidebar/model.js +88 -0
  56. package/lib/client/workspace-sidebar/model.js.map +1 -0
  57. package/lib/client.js +4511 -106
  58. package/lib/console-contract.d.ts +124 -1
  59. package/lib/console-contract.js.map +1 -1
  60. package/lib/console-host/control-plane.d.ts +7 -1
  61. package/lib/console-host/control-plane.js +264 -9
  62. package/lib/console-host/control-plane.js.map +1 -1
  63. package/lib/console-host/errors.d.ts +2 -2
  64. package/lib/console-host/errors.js +21 -5
  65. package/lib/console-host/errors.js.map +1 -1
  66. package/lib/console-host/projection.js +60 -1
  67. package/lib/console-host/projection.js.map +1 -1
  68. package/lib/console-host/service.d.ts +11 -5
  69. package/lib/console-host/service.js +54 -6
  70. package/lib/console-host/service.js.map +1 -1
  71. package/lib/console-remote/descriptors.js +40 -3
  72. package/lib/console-remote/descriptors.js.map +1 -1
  73. package/lib/console-remote/remote.d.ts +11 -5
  74. package/lib/console-remote/remote.js.map +1 -1
  75. package/lib/console-remote/schemas.d.ts +104 -1
  76. package/lib/console-remote/schemas.js +161 -5
  77. package/lib/console-remote/schemas.js.map +1 -1
  78. package/lib/index.d.ts +13 -2
  79. package/lib/index.js.map +1 -1
  80. package/lib/ports.d.ts +76 -1
  81. package/lib/session-checkout-apply.d.ts +76 -0
  82. package/lib/session-checkout-apply.js +608 -143
  83. package/lib/session-checkout-apply.js.map +1 -1
  84. package/lib/session-checkout-module.js +759 -124
  85. package/lib/session-checkout-module.js.map +1 -1
  86. package/lib/tools.js +1 -1
  87. package/lib/tools.js.map +1 -1
  88. package/lib/types.d.ts +93 -2
  89. package/lib/types.js.map +1 -1
  90. package/package.json +22 -14
  91. package/scripts/check-publish.mjs +17 -2
  92. package/scripts/check-workspace-sidebar-version.mjs +14 -0
  93. package/scripts/dev-dsh-lib.mjs +1 -1
  94. package/scripts/workspace-sidebar-upstream.d.mts +8 -0
  95. package/scripts/workspace-sidebar-upstream.mjs +160 -0
package/lib/tools.js CHANGED
@@ -187,7 +187,7 @@ export function registerTools(ctx, module) {
187
187
  }));
188
188
  ctx.tools.register(defineTool({
189
189
  name: 'worktree_ready_for_review',
190
- description: 'Isolated Session 的最后一个模型动作:把完整交付报告、验证证据和建议 Commit Message 仅写入本工具参数,然后立即停止。不要在调用前后用普通回复重复完整报告;最多用一句话提示用户通过底部验收条处理。用户会显式决定是否提交或放弃,模型不得自动提交或清理。',
190
+ description: '仅用于已经选择 Isolated Checkout 的 Worktree Session,普通 Local Checkout 任务必须用正常助手回复结束且不得调用本工具。它是 Isolated Session 的最后一个模型动作:把完整交付报告、验证证据和建议 Commit Message 仅写入本工具参数,然后立即停止。不要在调用前后用普通回复重复完整报告;最多用一句话提示用户通过底部验收条处理。用户会显式决定是否提交或放弃,模型不得自动提交或清理。',
191
191
  parameters: {
192
192
  summary: {
193
193
  type: 'string',
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
@@ -28,6 +28,16 @@ export interface WorktreeValidationItem {
28
28
  status: 'passed' | 'failed' | 'not_run';
29
29
  summary?: string;
30
30
  }
31
+ /** A saved stage that exists only in the managed Worktree history until final delivery. */
32
+ export interface WorktreeCheckpointView {
33
+ checkpointId: string;
34
+ sequence: number;
35
+ reviewId: string;
36
+ createdAt: number;
37
+ summary: string;
38
+ validationStatus: WorktreeValidationStatus;
39
+ changedFiles: string[];
40
+ }
31
41
  export interface WorktreeReviewView {
32
42
  reviewId: string;
33
43
  iteration: number;
@@ -110,6 +120,7 @@ export interface WorktreeApplyPreflightFacts {
110
120
  export interface WorktreeAcceptanceBlockerView {
111
121
  checkoutId: string;
112
122
  ownerSessionId: string;
123
+ revision: number;
113
124
  state: 'preview_active' | 'preview_detached' | 'finalized' | 'retained' | 'working' | 'ready_for_review' | 'delivered';
114
125
  }
115
126
  export type WorktreeApplyPreflightView = ({
@@ -160,6 +171,10 @@ export interface SessionTargetView {
160
171
  revision: number;
161
172
  /** Delivery state for isolated checkouts; Local targets do not carry it. */
162
173
  delivery?: WorktreeDeliveryView;
174
+ /** Linear saved stages that remain unpublished to Local. */
175
+ checkpoints?: WorktreeCheckpointView[];
176
+ /** Host-derived CAS generation for the exact active Review/checkpoint state. */
177
+ checkpointGeneration?: string;
163
178
  /** Current project Local Preview slot state; does not expose another checkout identity. */
164
179
  reviewSlot?: 'available' | 'waiting';
165
180
  /** Owner Session holding the slot, used only for navigation/status. */
@@ -187,15 +202,83 @@ export interface SessionCheckoutFinishOperation extends SessionCheckoutOperation
187
202
  export interface SessionCheckoutPreviewOperation extends SessionCheckoutOperationBase {
188
203
  action: 'preview';
189
204
  }
205
+ export interface SessionCheckoutCheckpointOperation extends SessionCheckoutOperationBase {
206
+ action: 'checkpoint';
207
+ commitMessage: string;
208
+ expectedReviewId: string;
209
+ expectedGeneration: string;
210
+ requestId: string;
211
+ }
212
+ export type WorktreePreviewRecoveryActionBlockReason = 'stale_local' | 'preview_modified' | 'commit_isolation_conflict' | 'operation_not_allowed' | 'project_acceptance_busy';
213
+ export type WorktreePreviewRecoveryRollbackAction = {
214
+ status: 'safe';
215
+ targetTreeOid: string;
216
+ } | {
217
+ status: 'blocked';
218
+ code: WorktreePreviewRecoveryActionBlockReason;
219
+ message: string;
220
+ conflictingFiles?: string[];
221
+ };
222
+ export type WorktreePreviewRecoveryFinalizeAction = {
223
+ status: 'safe';
224
+ taskTreeOid: string;
225
+ finalIndexTreeOid: string;
226
+ expectedWorkingTreeOid: string;
227
+ commitRequired: boolean;
228
+ } | {
229
+ status: 'blocked';
230
+ code: WorktreePreviewRecoveryActionBlockReason;
231
+ message: string;
232
+ conflictingFiles?: string[];
233
+ };
234
+ /** Host-issued read-only recovery context. Mutation always recomputes and compares it under the Host lock. */
235
+ export interface WorktreePreviewRecoveryProof {
236
+ sessionId: string;
237
+ checkoutId: string;
238
+ reviewId: string;
239
+ previewId: string;
240
+ revision: number;
241
+ generation: string;
242
+ /** SHA-256 over the complete durable receipt; binds proof to retained recovery evidence. */
243
+ receiptFingerprint: string;
244
+ localFingerprint: string;
245
+ localHeadOid: string;
246
+ localHeadRef: string | null;
247
+ localHeadTreeOid: string;
248
+ localIndexTreeOid: string;
249
+ localWorkingTreeOid: string;
250
+ rollback: WorktreePreviewRecoveryRollbackAction;
251
+ finalize: WorktreePreviewRecoveryFinalizeAction;
252
+ blocker?: WorktreeAcceptanceBlockerView;
253
+ }
254
+ export type WorktreePreviewRecoveryPreflightBlockedReason = 'not_owner' | 'not_preview_detached' | 'stale_target' | 'artifacts_missing' | 'checkout_unavailable' | 'git_error';
255
+ export type WorktreePreviewRecoveryPreflightView = {
256
+ status: 'assessed';
257
+ localModified: false;
258
+ proof: WorktreePreviewRecoveryProof;
259
+ } | {
260
+ status: 'blocked';
261
+ localModified: false;
262
+ checkoutId: string;
263
+ reviewId: string | null;
264
+ previewId: string | null;
265
+ revision: number;
266
+ reason: WorktreePreviewRecoveryPreflightBlockedReason;
267
+ message: string;
268
+ };
190
269
  export interface SessionCheckoutRollbackPreviewOperation extends SessionCheckoutOperationBase {
191
270
  action: 'rollback_preview';
192
271
  /** Structured withdraw-and-continue flow returns to working instead of preserving the review. */
193
272
  resumeRevision?: boolean;
273
+ /** Required only for preview_detached; it is context to re-verify, never bearer permission. */
274
+ recoveryProof?: WorktreePreviewRecoveryProof;
194
275
  }
195
276
  export interface SessionCheckoutFinalizePreviewOperation extends SessionCheckoutOperationBase {
196
277
  action: 'finalize_preview';
197
278
  commitMessage: string;
198
279
  retention?: WorktreeRetentionMode;
280
+ /** Required only for preview_detached; it is context to re-verify, never bearer permission. */
281
+ recoveryProof?: WorktreePreviewRecoveryProof;
199
282
  }
200
283
  export interface SessionCheckoutRetryCleanupOperation extends SessionCheckoutOperationBase {
201
284
  action: 'retry_cleanup';
@@ -208,7 +291,7 @@ export interface SessionCheckoutDiscardOperation extends SessionCheckoutOperatio
208
291
  export interface SessionCheckoutRecoverOperation extends SessionCheckoutOperationBase {
209
292
  action: 'recover';
210
293
  }
211
- export type SessionCheckoutOperation = SessionCheckoutApplyOperation | SessionCheckoutFinishOperation | SessionCheckoutPreviewOperation | SessionCheckoutRollbackPreviewOperation | SessionCheckoutFinalizePreviewOperation | SessionCheckoutRetryCleanupOperation | SessionCheckoutDiscardOperation | SessionCheckoutRecoverOperation;
294
+ export type SessionCheckoutOperation = SessionCheckoutApplyOperation | SessionCheckoutFinishOperation | SessionCheckoutPreviewOperation | SessionCheckoutCheckpointOperation | SessionCheckoutRollbackPreviewOperation | SessionCheckoutFinalizePreviewOperation | SessionCheckoutRetryCleanupOperation | SessionCheckoutDiscardOperation | SessionCheckoutRecoverOperation;
212
295
  export interface SessionCheckoutAppliedResult {
213
296
  status: 'applied';
214
297
  target: SessionTargetView;
@@ -219,6 +302,12 @@ export interface SessionCheckoutPreviewedResult {
219
302
  target: SessionTargetView;
220
303
  changedFiles: string[];
221
304
  }
305
+ export interface SessionCheckoutCheckpointedResult {
306
+ status: 'checkpointed';
307
+ target: SessionTargetView;
308
+ checkpoint: WorktreeCheckpointView;
309
+ changedFiles: string[];
310
+ }
222
311
  export interface SessionCheckoutPreviewRolledBackResult {
223
312
  status: 'preview_rolled_back';
224
313
  target: SessionTargetView;
@@ -280,6 +369,8 @@ export interface ManagedWorktreeSummaryView {
280
369
  phase: SessionCheckoutPhase;
281
370
  dirty: boolean;
282
371
  commitOid: string | null;
372
+ /** Number of saved managed-Worktree stages not yet delivered to Local. */
373
+ checkpointCount?: number;
283
374
  retention?: Exclude<WorktreeRetentionMode, 'cleanup'>;
284
375
  retainedAt?: number;
285
376
  expiresAt?: number | null;
@@ -321,7 +412,7 @@ export interface SessionCheckoutOperationErrorResult {
321
412
  message: string;
322
413
  target?: SessionTargetView;
323
414
  }
324
- export type SessionCheckoutOperationResult = SessionCheckoutAppliedResult | SessionCheckoutPreviewedResult | SessionCheckoutPreviewRolledBackResult | SessionCheckoutPreviewDetachedResult | SessionCheckoutFinishedResult | SessionCheckoutConflictResult | SessionCheckoutDiscardedResult | SessionCheckoutRecoveredResult | SessionCheckoutOperationErrorResult;
415
+ export type SessionCheckoutOperationResult = SessionCheckoutAppliedResult | SessionCheckoutPreviewedResult | SessionCheckoutCheckpointedResult | SessionCheckoutPreviewRolledBackResult | SessionCheckoutPreviewDetachedResult | SessionCheckoutFinishedResult | SessionCheckoutConflictResult | SessionCheckoutDiscardedResult | SessionCheckoutRecoveredResult | SessionCheckoutOperationErrorResult;
325
416
  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"];
326
417
  export type SessionCheckoutErrorCode = typeof SESSION_CHECKOUT_ERROR_CODES[number];
327
418
  export interface SessionCheckoutFailure {
package/lib/types.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AA0YH,MAAM,CAAC,MAAM,4BAA4B,GAAG;IAC1C,mBAAmB;IACnB,mBAAmB;IACnB,sBAAsB;IACtB,oBAAoB;IACpB,mBAAmB;IACnB,sBAAsB;IACtB,kBAAkB;IAClB,kBAAkB;IAClB,mBAAmB;IACnB,mBAAmB;IACnB,kBAAkB;IAClB,sBAAsB;IACtB,WAAW;IACX,cAAc;IACd,6BAA6B;IAC7B,gBAAgB;IAChB,cAAc;IACd,eAAe;IACf,cAAc;IACd,aAAa;IACb,gBAAgB;IAChB,WAAW;IACX,2BAA2B;IAC3B,wBAAwB;IACxB,yBAAyB;IACzB,uBAAuB;IACvB,oBAAoB;IACpB,kBAAkB;IAClB,iBAAiB;CACT,CAAA"}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAgfH,MAAM,CAAC,MAAM,4BAA4B,GAAG;IAC1C,mBAAmB;IACnB,mBAAmB;IACnB,sBAAsB;IACtB,oBAAoB;IACpB,mBAAmB;IACnB,sBAAsB;IACtB,kBAAkB;IAClB,kBAAkB;IAClB,mBAAmB;IACnB,mBAAmB;IACnB,kBAAkB;IAClB,sBAAsB;IACtB,WAAW;IACX,cAAc;IACd,6BAA6B;IAC7B,gBAAgB;IAChB,cAAc;IACd,eAAe;IACf,cAAc;IACd,aAAa;IACb,gBAAgB;IAChB,WAAW;IACX,2BAA2B;IAC3B,wBAAwB;IACxB,yBAAyB;IACzB,uBAAuB;IACvB,oBAAoB;IACpB,kBAAkB;IAClB,iBAAiB;CACT,CAAA"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "dsh-git-worktree",
3
- "version": "0.4.0",
4
- "description": "Experimental Git worktree Session Targets for DeepSeek Harness with real isolated sessions, review ToolViews, human-confirmed delivery, and safe cleanup.",
3
+ "version": "0.7.1",
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",
7
7
  "types": "lib/index.d.ts",
@@ -33,6 +33,7 @@
33
33
  "lib",
34
34
  "scripts",
35
35
  "CHANGELOG.md",
36
+ "NOTICE",
36
37
  "cordis.patch.yml"
37
38
  ],
38
39
  "license": "MIT",
@@ -43,6 +44,8 @@
43
44
  "client": {
44
45
  "inject": [
45
46
  "@deepseek-ai/dsh-client-runtime",
47
+ "@deepseek-ai/dsh-client-connection",
48
+ "@deepseek-ai/dsh-client-locale",
46
49
  "@deepseek-ai/dsh-client-ui-conversation",
47
50
  "@deepseek-ai/dsh-client-ui-tool",
48
51
  "@deepseek-ai/dsh-api-gateway"
@@ -66,34 +69,39 @@
66
69
  "typecheck": "tsc --noEmit",
67
70
  "test": "vitest run",
68
71
  "prepare": "pnpm run build",
72
+ "check:sidebar-version": "node scripts/check-workspace-sidebar-version.mjs",
69
73
  "check:publish": "node scripts/check-publish.mjs",
70
74
  "check:publish:release": "node scripts/check-publish.mjs --require-clean",
71
75
  "dev:dsh": "node scripts/dev-dsh.mjs run",
72
76
  "dev:dsh:install": "node scripts/dev-dsh.mjs install",
73
77
  "dev:dsh:smoke": "node scripts/dev-dsh.mjs smoke",
74
78
  "dev:dsh:remove": "node scripts/dev-dsh.mjs remove",
75
- "prepublishOnly": "pnpm run build && pnpm run check:publish:release && pnpm run test"
79
+ "prepublishOnly": "pnpm run check:sidebar-version && pnpm run build && pnpm run check:publish:release && pnpm run test"
76
80
  },
77
81
  "dependencies": {
78
82
  "@deepseek-ai/cordis": "4.0.1",
79
- "@deepseek-ai/dsh-agent": "0.1.0-rc.8",
80
- "@deepseek-ai/dsh-commands": "0.1.0-rc.8",
81
- "@deepseek-ai/dsh-session": "0.1.0-rc.8",
82
- "@deepseek-ai/dsh-subprocess": "0.1.0-rc.8",
83
- "@deepseek-ai/dsh-system-prompt": "0.1.0-rc.8",
84
- "@deepseek-ai/dsh-tools": "0.1.0-rc.8",
85
- "@deepseek-ai/dsh-typert-protocol": "0.1.0-rc.8",
86
- "@deepseek-ai/dsh-typert-registry": "0.1.0-rc.8",
83
+ "@deepseek-ai/dsh-agent": "0.1.1-rc.2",
84
+ "@deepseek-ai/dsh-commands": "0.1.1-rc.2",
85
+ "@deepseek-ai/dsh-session": "0.1.1-rc.2",
86
+ "@deepseek-ai/dsh-subprocess": "0.1.1-rc.2",
87
+ "@deepseek-ai/dsh-system-prompt": "0.1.1-rc.2",
88
+ "@deepseek-ai/dsh-tools": "0.1.1-rc.2",
89
+ "@deepseek-ai/dsh-typert-protocol": "0.1.1-rc.2",
90
+ "@deepseek-ai/dsh-typert-registry": "0.1.1-rc.2",
87
91
  "@deepseek-ai/schemastery": "3.18.1",
88
92
  "zod": "4.4.3"
89
93
  },
90
94
  "peerDependencies": {
95
+ "@deepseek-ai/dsh-client-locale": "0.1.1-rc.2",
91
96
  "react": "^18.2.0"
92
97
  },
93
98
  "devDependencies": {
94
- "@deepseek-ai/dsh-api-gateway": "0.1.0-rc.8",
95
- "@deepseek-ai/dsh-client-connection": "0.1.0-rc.8",
96
- "@deepseek-ai/dsh-typert-loader": "0.1.0-rc.8",
99
+ "@deepseek-ai/dsh-api-gateway": "0.1.1-rc.2",
100
+ "@deepseek-ai/dsh-client-connection": "0.1.1-rc.2",
101
+ "@deepseek-ai/dsh-client-locale": "0.1.1-rc.2",
102
+ "@deepseek-ai/dsh-client-runtime": "0.1.1-rc.2",
103
+ "@deepseek-ai/dsh-client-ui-workspace": "0.1.1-rc.2",
104
+ "@deepseek-ai/dsh-typert-loader": "0.1.1-rc.2",
97
105
  "@testing-library/react": "^16.3.2",
98
106
  "@types/node": "^22.0.0",
99
107
  "@types/react": "~18.3.31",
@@ -47,7 +47,16 @@ const patch = readFileSync(patchPath, 'utf8')
47
47
  if (!patch.includes('- insert:') || !patch.includes(`name: ${manifest.name}`)) {
48
48
  fail(`${patchRel} must insert one plugin row named ${manifest.name}`)
49
49
  }
50
- ok(`Host mount patch ${patchRel}`)
50
+ if (!/- id: ui-workspace\s+name: ['"]?@deepseek-ai\/dsh-client-ui-workspace['"]?\s+disabled: true/u.test(patch)) {
51
+ fail(`${patchRel} must disable the original ui-workspace row while the gated derivative owns its Slot tree`)
52
+ }
53
+ if (manifest.dsh?.client?.inject?.includes('@deepseek-ai/dsh-client-ui-workspace')) {
54
+ fail('dsh.client.inject must not request the disabled official ui-workspace Client module')
55
+ }
56
+ if (!manifest.files?.includes('NOTICE') || !existsSync(resolve(root, 'NOTICE'))) {
57
+ fail('the official Workspace Client derivative requires a published NOTICE')
58
+ }
59
+ ok(`Host mount patch ${patchRel} replaces official ui-workspace with one gated derivative`)
51
60
 
52
61
  // 2. Every package export must exist and be included in the tarball.
53
62
  const exportsMap = manifest.exports
@@ -94,7 +103,7 @@ try {
94
103
  if (hostContribution?.package !== manifest.name || hostContribution.face !== 'host') fail('./typert has invalid package/face identity')
95
104
  if (remoteContribution?.package !== manifest.name) fail('./remote has invalid package identity')
96
105
  if (hostContribution.invocations !== remoteContribution.descriptors) fail('./typert and ./remote must share one descriptor array instance')
97
- const expectedRemoteMethods = ['current', 'list', 'create', 'inspect', 'reviewDiff', 'preflight', 'preview', 'resumeRevision', 'rollbackPreview', 'discard', 'finalize', 'finalizePreview', 'setRetention', 'retryCleanup', 'beginNextIteration']
106
+ const expectedRemoteMethods = ['sidebarTopology', 'current', 'list', 'create', 'inspect', 'reviewDiff', 'preflight', 'previewRecoveryPreflight', 'preparePreviewRecoveryAnalysis', 'createPreviewRecoveryHandoff', 'preview', 'checkpoint', 'resumeRevision', 'prepareReviewRegeneration', 'rollbackPreview', 'discard', 'finalize', 'finalizePreview', 'setRetention', 'retryCleanup', 'beginNextIteration']
98
107
  if (JSON.stringify(hostContribution.invocations.map(value => value.method)) !== JSON.stringify(expectedRemoteMethods)) {
99
108
  fail(`manual Remote methods differ from the required surface: ${hostContribution.invocations.map(value => value.method).join(', ')}`)
100
109
  }
@@ -137,6 +146,7 @@ const allowedBrowserRequires = new Set([
137
146
  'react',
138
147
  'react/jsx-runtime',
139
148
  '@deepseek-ai/dsh-client-ui-primitives',
149
+ '@deepseek-ai/dsh-client-runtime/client',
140
150
  ])
141
151
  const unsupportedBrowserRequires = browserRequires.filter(specifier => !allowedBrowserRequires.has(specifier))
142
152
  if (unsupportedBrowserRequires.length > 0) {
@@ -162,6 +172,11 @@ if (!handoff || handoff.id !== manifest.name || typeof handoff.factory !== 'func
162
172
  }
163
173
  const browserRequire = (specifier) => {
164
174
  if (specifier === '@deepseek-ai/dsh-client-ui-primitives') return { Modal: () => null, Menu: () => null }
175
+ if (specifier === '@deepseek-ai/dsh-client-runtime/client') return {
176
+ defineStore: spec => ({ spec, create: () => ({ actions: {} }) }),
177
+ indexSubagentDescendants: () => new Map(),
178
+ abbreviateHomePath: path => path,
179
+ }
165
180
  return require(specifier)
166
181
  }
167
182
  let clientExports
@@ -0,0 +1,14 @@
1
+ import { createRequire } from 'node:module'
2
+ import {
3
+ readOfficialWorkspaceClient,
4
+ WORKSPACE_LOCALE_VERSION,
5
+ WORKSPACE_UI_VERSION,
6
+ } from './workspace-sidebar-upstream.mjs'
7
+
8
+ const require = createRequire(import.meta.url)
9
+ const locale = require('@deepseek-ai/dsh-client-locale/package.json').version
10
+ if (locale !== WORKSPACE_LOCALE_VERSION) {
11
+ throw new Error(`Workspace Sidebar compatibility gate failed: locale=${locale}, expected ${WORKSPACE_LOCALE_VERSION}`)
12
+ }
13
+ readOfficialWorkspaceClient()
14
+ console.log(`✓ Workspace Sidebar compatibility gate: ui-workspace ${WORKSPACE_UI_VERSION} + SHA-256, locale ${locale}`)
@@ -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']) {
465
+ for (const entry of ['lib', 'cordis.patch.yml', 'README.md', 'README.en.md', 'LICENSE', 'NOTICE']) {
466
466
  const source = join(options.projectRoot, entry)
467
467
  if (existsSync(source)) copyPackageEntry(source, join(stagingRoot, entry))
468
468
  }
@@ -0,0 +1,8 @@
1
+ export const WORKSPACE_UI_VERSION: string
2
+ export const WORKSPACE_LOCALE_VERSION: string
3
+ export const WORKSPACE_CLIENT_SHA256: string
4
+ export const OFFICIAL_WORKSPACE_VIRTUAL_ID: string
5
+ export const RESOLVED_OFFICIAL_WORKSPACE_VIRTUAL_ID: string
6
+ export function readOfficialWorkspaceClient(): { source: string; clientPath: string }
7
+ export function decorateOfficialWorkspaceClient(source: string): string
8
+ export function materializeOfficialWorkspaceClientModule(): string
@@ -0,0 +1,160 @@
1
+ import { createHash } from 'node:crypto'
2
+ import { readFileSync } from 'node:fs'
3
+ import { createRequire } from 'node:module'
4
+
5
+ export const WORKSPACE_UI_VERSION = '0.1.1-rc.2'
6
+ export const WORKSPACE_LOCALE_VERSION = '0.1.1-rc.2'
7
+ export const WORKSPACE_CLIENT_SHA256 = '75d8a09a43a820e0ff8470e7b9c87b6dced523764ee650a8382317f6ef7a314b'
8
+ export const OFFICIAL_WORKSPACE_VIRTUAL_ID = 'virtual:dsh-official-workspace-client'
9
+ export const RESOLVED_OFFICIAL_WORKSPACE_VIRTUAL_ID = `\0${OFFICIAL_WORKSPACE_VIRTUAL_ID}`
10
+
11
+ export function readOfficialWorkspaceClient() {
12
+ const require = createRequire(import.meta.url)
13
+ const packagePath = require.resolve('@deepseek-ai/dsh-client-ui-workspace/package.json')
14
+ const packageJson = JSON.parse(readFileSync(packagePath, 'utf8'))
15
+ if (packageJson.version !== WORKSPACE_UI_VERSION) {
16
+ throw new Error(`Unsupported @deepseek-ai/dsh-client-ui-workspace ${packageJson.version}; expected ${WORKSPACE_UI_VERSION}`)
17
+ }
18
+ const clientPath = require.resolve('@deepseek-ai/dsh-client-ui-workspace/client')
19
+ const source = readFileSync(clientPath, 'utf8')
20
+ const digest = createHash('sha256').update(source).digest('hex')
21
+ if (digest !== WORKSPACE_CLIENT_SHA256) {
22
+ throw new Error(`Official Workspace Client hash drifted: ${digest}; expected ${WORKSPACE_CLIENT_SHA256}`)
23
+ }
24
+ return { source, clientPath }
25
+ }
26
+
27
+ function replaceExactlyOnce(source, needle, replacement, label) {
28
+ const first = source.indexOf(needle)
29
+ const last = source.lastIndexOf(needle)
30
+ if (first < 0 || first !== last) {
31
+ throw new Error(`Unable to derive official Workspace Client ${label}: expected one stable source seam`)
32
+ }
33
+ return source.slice(0, first) + replacement + source.slice(first + needle.length)
34
+ }
35
+
36
+ /**
37
+ * Add one package-owned row decoration to the already version/hash-gated
38
+ * official Browser. Every replacement is exact and therefore fails closed if
39
+ * the upstream generated structure changes.
40
+ */
41
+ export function decorateOfficialWorkspaceClient(source) {
42
+ let derived = source
43
+ derived = replaceExactlyOnce(derived,
44
+ '\t\tconst zh = {',
45
+ `\t\tconst zh = {\n\t\t\t"dshGitWorktree.managed": "托管 Worktree",\n\t\t\t"dshGitWorktree.state.working": "进行中",\n\t\t\t"dshGitWorktree.state.ready_for_review": "待验收",\n\t\t\t"dshGitWorktree.state.preview_active": "预览中",\n\t\t\t"dshGitWorktree.state.preview_detached": "待恢复",\n\t\t\t"dshGitWorktree.state.recovery_required": "需要恢复",\n\t\t\t"dshGitWorktree.state.finalized": "已完成",\n\t\t\t"dshGitWorktree.state.discarded": "已放弃",`,
46
+ 'Chinese Worktree locale')
47
+ derived = replaceExactlyOnce(derived,
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",`,
50
+ 'English Worktree locale')
51
+ derived = replaceExactlyOnce(derived,
52
+ '\t\t\t\tgroups.push(buildGroup(workspace.workspaceId, workspace.workspaceId, workspace.path, Date.parse(workspace.createdAt), workspace.title, members, "account"));',
53
+ '\t\t\t\tconst group = buildGroup(workspace.workspaceId, workspace.workspaceId, workspace.path, Date.parse(workspace.createdAt), workspace.title, members, "account");\n\t\t\t\tif (workspace.__dshGitWorktreeProtected === true) group.__dshGitWorktreeProtected = true;\n\t\t\t\tgroups.push(group);',
54
+ 'Managed workspace metadata')
55
+ derived = replaceExactlyOnce(derived,
56
+ '\t\t\t\tupdatedAt: s.updatedAt,\n\t\t\t\t...s.pendingInteraction === void 0 ? {} : { pendingInteraction: s.pendingInteraction }',
57
+ '\t\t\t\tupdatedAt: s.updatedAt,\n\t\t\t\t...s.__dshGitWorktree === void 0 ? {} : { __dshGitWorktree: s.__dshGitWorktree },\n\t\t\t\t...s.pendingInteraction === void 0 ? {} : { pendingInteraction: s.pendingInteraction }',
58
+ 'session node metadata')
59
+ derived = replaceExactlyOnce(derived,
60
+ '\t\t\t\t\t\trunningSubagentCount: descendants.get(summary.id)?.runningCount ?? 0,\n\t\t\t\t\t\t...summary.pendingInteraction === void 0 ? {} : { pendingInteraction: summary.pendingInteraction },',
61
+ '\t\t\t\t\t\trunningSubagentCount: descendants.get(summary.id)?.runningCount ?? 0,\n\t\t\t\t\t\t...summary.__dshGitWorktree === void 0 ? {} : { __dshGitWorktree: summary.__dshGitWorktree },\n\t\t\t\t\t\t...summary.pendingInteraction === void 0 ? {} : { pendingInteraction: summary.pendingInteraction },',
62
+ 'search result metadata')
63
+ derived = replaceExactlyOnce(derived,
64
+ '\t\t\t\t\tlabel: g.label,\n\t\t\t\t\tsessionCount: g.sessions.length,',
65
+ '\t\t\t\t\tlabel: g.label,\n\t\t\t\t\t...g.__dshGitWorktreeProtected === true ? { __dshGitWorktreeProtected: true } : {},\n\t\t\t\t\tsessionCount: g.sessions.length,',
66
+ 'Managed workspace group metadata')
67
+ derived = replaceExactlyOnce(derived,
68
+ '\t\t/** Hover-card body: full title, relative time, and every relevant live status. */\n\t\tfunction SessionHoverContent',
69
+ `\t\tfunction managedWorktreeDecoration(node, t) {\n\t\t\tconst value = node.__dshGitWorktree;\n\t\t\tif (value?.kind !== "managed-worktree" || typeof value.state !== "string") return void 0;\n\t\t\tconst label = t(\`dshGitWorktree.state.\${value.state}\`);\n\t\t\treturn {\n\t\t\t\tstate: value.state,\n\t\t\t\tlabel,\n\t\t\t\tariaLabel: \`\${t("dshGitWorktree.managed")}, \${label}, \${displayTitle(node, t)}\`\n\t\t\t};\n\t\t}\n\t\tfunction ManagedWorktreeIdentity({ decoration }) {\n\t\t\treturn (0, react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, { children: [(0, react_jsx_runtime.jsx)("span", {\n\t\t\t\tclassName: "dsh-git-worktree-sidebar-icon",\n\t\t\t\t"data-worktree-state": decoration.state,\n\t\t\t\t"aria-hidden": "true",\n\t\t\t\tchildren: (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.IconBranchOutline16, {})\n\t\t\t}), (0, react_jsx_runtime.jsx)("span", {\n\t\t\t\tclassName: "dsh-git-worktree-sidebar-badge",\n\t\t\t\t"data-worktree-state": decoration.state,\n\t\t\t\t"aria-hidden": "true",\n\t\t\t\tchildren: decoration.label\n\t\t\t})] });\n\t\t}\n\t\t/** Hover-card body: full title, relative time, and every relevant live status. */\n\t\tfunction SessionHoverContent`,
70
+ 'Managed row helper')
71
+ derived = replaceExactlyOnce(derived,
72
+ '\t\t\tconst statuses = sessionStatuses(node, t);\n\t\t\treturn (0, react_jsx_runtime.jsxs)("div", {\n\t\t\t\tclassName: Rows_module_css_default.hoverContent,',
73
+ '\t\t\tconst statuses = sessionStatuses(node, t);\n\t\t\tconst worktreeDecoration = managedWorktreeDecoration(node, t);\n\t\t\treturn (0, react_jsx_runtime.jsxs)("div", {\n\t\t\t\tclassName: Rows_module_css_default.hoverContent,',
74
+ 'hover metadata')
75
+ derived = replaceExactlyOnce(derived,
76
+ '\t\t\t\t\t\tchildren: displayTitle(node, t)\n\t\t\t\t\t}),\n\t\t\t\t\t!node.blank',
77
+ '\t\t\t\t\t\tchildren: displayTitle(node, t)\n\t\t\t\t\t}),\n\t\t\t\t\tworktreeDecoration !== void 0 && (0, react_jsx_runtime.jsxs)("div", {\n\t\t\t\t\t\tclassName: Rows_module_css_default.hoverStatus,\n\t\t\t\t\t\tchildren: [(0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.IconBranchOutline16, {}), (0, react_jsx_runtime.jsx)("span", { children: worktreeDecoration.ariaLabel })]\n\t\t\t\t\t}),\n\t\t\t\t\t!node.blank',
78
+ 'hover Worktree identity')
79
+ derived = replaceExactlyOnce(derived,
80
+ '\t\t\tconst primaryStatus = statuses[0];\n\t\t\treturn (0, react_jsx_runtime.jsxs)("button", {\n\t\t\t\ttype: "button",\n\t\t\t\tclassName: clsx(Rows_module_css_default.searchResultRow, selected && Rows_module_css_default.selected),',
81
+ '\t\t\tconst primaryStatus = statuses[0];\n\t\t\tconst worktreeDecoration = managedWorktreeDecoration(result, t);\n\t\t\treturn (0, react_jsx_runtime.jsxs)("button", {\n\t\t\t\ttype: "button",\n\t\t\t\tclassName: clsx(Rows_module_css_default.searchResultRow, selected && Rows_module_css_default.selected),\n\t\t\t\t...worktreeDecoration === void 0 ? {} : { "aria-label": worktreeDecoration.ariaLabel, "data-managed-worktree": "true" },',
82
+ 'search Worktree identity')
83
+ derived = replaceExactlyOnce(derived,
84
+ '\t\t\t\t\t\tchildren: (primaryStatus.state !== "done" || result.completed) && (0, react_jsx_runtime.jsx)(SessionStatusDots, { statuses })\n\t\t\t\t\t}), (0, react_jsx_runtime.jsx)("span", {\n\t\t\t\t\t\tclassName: Rows_module_css_default.searchResultTitle,',
85
+ '\t\t\t\t\t\tchildren: (primaryStatus.state !== "done" || result.completed) && (0, react_jsx_runtime.jsx)(SessionStatusDots, { statuses })\n\t\t\t\t\t}), worktreeDecoration !== void 0 && (0, react_jsx_runtime.jsx)(ManagedWorktreeIdentity, { decoration: worktreeDecoration }), (0, react_jsx_runtime.jsx)("span", {\n\t\t\t\t\t\tclassName: Rows_module_css_default.searchResultTitle,',
86
+ 'search Worktree decoration')
87
+ derived = replaceExactlyOnce(derived,
88
+ '\t\t\tconst label = row.workspaceId === void 0 ? t("group.ungrouped") : row.label;\n\t\t\tconst active = group.expanded && group.containsCurrent;',
89
+ '\t\t\tconst label = row.workspaceId === void 0 ? t("group.ungrouped") : row.label;\n\t\t\tconst protectedManagedWorkspace = row.__dshGitWorktreeProtected === true;\n\t\t\tconst active = group.expanded && group.containsCurrent;',
90
+ 'Managed workspace row metadata')
91
+ derived = replaceExactlyOnce(derived,
92
+ '\t\t\t\tclassName: clsx(Rows_module_css_default.projectRow, menuOpen && Rows_module_css_default.menuOpen),\n\t\t\t\trole: "treeitem",\n\t\t\t\t"aria-expanded": row.expanded,\n\t\t\t\tonClick: onToggle,\n\t\t\t\tdraggable: drag !== void 0,',
93
+ '\t\t\t\tclassName: clsx(Rows_module_css_default.projectRow, menuOpen && Rows_module_css_default.menuOpen),\n\t\t\t\trole: "treeitem",\n\t\t\t\t"aria-expanded": row.expanded,\n\t\t\t\tonClick: onToggle,\n\t\t\t\tdraggable: !protectedManagedWorkspace && drag !== void 0,',
94
+ 'Managed workspace drag')
95
+ derived = replaceExactlyOnce(derived,
96
+ '\t\t\t\t\t\tchildren: [actions !== void 0 && (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.Menu, {',
97
+ '\t\t\t\t\t\tchildren: [!protectedManagedWorkspace && actions !== void 0 && (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.Menu, {',
98
+ 'Managed workspace menu')
99
+ derived = replaceExactlyOnce(derived,
100
+ '\t\t\t\t\t\t}), (0, react_jsx_runtime.jsx)("button", {\n\t\t\t\t\t\t\ttype: "button",\n\t\t\t\t\t\t\tclassName: Rows_module_css_default.iconButton,\n\t\t\t\t\t\t\t"aria-label": t("actions.newSession.aria", { name: label }),',
101
+ '\t\t\t\t\t\t}), !protectedManagedWorkspace && (0, react_jsx_runtime.jsx)("button", {\n\t\t\t\t\t\t\ttype: "button",\n\t\t\t\t\t\t\tclassName: Rows_module_css_default.iconButton,\n\t\t\t\t\t\t\t"aria-label": t("actions.newSession.aria", { name: label }),',
102
+ 'Managed workspace new Session')
103
+ derived = replaceExactlyOnce(derived,
104
+ '\t\t\tconst showStatus = statuses[0].state !== "done" || row.completed;\n\t\t\tconst [menuOpen, setMenuOpen]',
105
+ '\t\t\tconst showStatus = statuses[0].state !== "done" || row.completed;\n\t\t\tconst worktreeDecoration = managedWorktreeDecoration(row, t);\n\t\t\tconst [menuOpen, setMenuOpen]',
106
+ 'session Worktree metadata')
107
+ derived = replaceExactlyOnce(derived,
108
+ '\t\t\t];\n\t\t\treturn (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.HoverCard, {',
109
+ '\t\t\t];\n\t\t\tconst visibleSessionMenuItems = worktreeDecoration === void 0 ? sessionMenuItems : sessionMenuItems.filter((item) => item.id !== "fork");\n\t\t\treturn (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.HoverCard, {',
110
+ 'Managed session menu')
111
+ derived = replaceExactlyOnce(derived,
112
+ '\t\t\t\t\tclassName: clsx(Rows_module_css_default.sessionRow, selected && Rows_module_css_default.selected, menuOpen && Rows_module_css_default.menuOpen, flat && !showStatus && Rows_module_css_default.flatSessionRowWithoutStatus, drag?.marker === "before" && Rows_module_css_default.dropBefore, drag?.marker === "after" && Rows_module_css_default.dropAfter),\n\t\t\t\t\trole: "treeitem",',
113
+ '\t\t\t\t\tclassName: clsx(Rows_module_css_default.sessionRow, selected && Rows_module_css_default.selected, menuOpen && Rows_module_css_default.menuOpen, flat && !showStatus && Rows_module_css_default.flatSessionRowWithoutStatus, drag?.marker === "before" && Rows_module_css_default.dropBefore, drag?.marker === "after" && Rows_module_css_default.dropAfter),\n\t\t\t\t\trole: "treeitem",\n\t\t\t\t\t...worktreeDecoration === void 0 ? {} : { "aria-label": worktreeDecoration.ariaLabel, "data-managed-worktree": "true" },',
114
+ 'session Worktree aria')
115
+ derived = replaceExactlyOnce(derived,
116
+ '\t\t\t\t\t"aria-selected": selected,\n\t\t\t\t\tonClick: () => {\n\t\t\t\t\t\tonOpen(node.id);\n\t\t\t\t\t},\n\t\t\t\t\tdraggable: drag !== void 0,',
117
+ '\t\t\t\t\t"aria-selected": selected,\n\t\t\t\t\tonClick: () => {\n\t\t\t\t\t\tonOpen(node.id);\n\t\t\t\t\t},\n\t\t\t\t\tdraggable: worktreeDecoration === void 0 && drag !== void 0,',
118
+ 'Managed session drag')
119
+ derived = replaceExactlyOnce(derived,
120
+ '\t\t\t\t\t\t(!flat || showStatus) && (0, react_jsx_runtime.jsx)("span", {\n\t\t\t\t\t\t\tclassName: Rows_module_css_default.slot,\n\t\t\t\t\t\t\tchildren: showStatus && (0, react_jsx_runtime.jsx)(SessionStatusDots, { statuses })\n\t\t\t\t\t\t}),\n\t\t\t\t\t\t(0, react_jsx_runtime.jsx)("span", {',
121
+ '\t\t\t\t\t\tworktreeDecoration === void 0 && (!flat || showStatus) && (0, react_jsx_runtime.jsx)("span", {\n\t\t\t\t\t\t\tclassName: Rows_module_css_default.slot,\n\t\t\t\t\t\t\tchildren: showStatus && (0, react_jsx_runtime.jsx)(SessionStatusDots, { statuses })\n\t\t\t\t\t\t}),\n\t\t\t\t\t\tworktreeDecoration !== void 0 && (0, react_jsx_runtime.jsx)(ManagedWorktreeIdentity, { decoration: worktreeDecoration }),\n\t\t\t\t\t\t(0, react_jsx_runtime.jsx)("span", {',
122
+ 'session Worktree decoration')
123
+ derived = replaceExactlyOnce(derived,
124
+ '\t\t\t\t\t\t\t\titems: sessionMenuItems,',
125
+ '\t\t\t\t\t\t\t\titems: visibleSessionMenuItems,',
126
+ 'Managed session visible menu')
127
+ return derived
128
+ }
129
+
130
+ export function materializeOfficialWorkspaceClientModule() {
131
+ const official = readOfficialWorkspaceClient()
132
+ const source = decorateOfficialWorkspaceClient(official.source)
133
+ const factoryToken = 'factory: (require) => {'
134
+ const start = source.indexOf(factoryToken)
135
+ const end = source.lastIndexOf('\n\t}\n});')
136
+ if (start < 0 || end < 0 || end <= start) {
137
+ throw new Error('Unable to extract the official Workspace Client ModuleLoader factory')
138
+ }
139
+ const body = source.slice(start + factoryToken.length, end)
140
+ return `
141
+ import * as runtime from '@deepseek-ai/dsh-client-runtime/client'
142
+ import * as jsxRuntime from 'react/jsx-runtime'
143
+ import * as react from 'react'
144
+ import * as primitives from '@deepseek-ai/dsh-client-ui-primitives'
145
+ const modules = {
146
+ '@deepseek-ai/dsh-client-runtime/client': runtime,
147
+ 'react/jsx-runtime': jsxRuntime,
148
+ 'react': react,
149
+ '@deepseek-ai/dsh-client-ui-primitives': primitives,
150
+ }
151
+ const official = ((require) => {${body}
152
+ })(specifier => {
153
+ const value = modules[specifier]
154
+ if (value === undefined) throw new Error('Unsupported official Workspace Client require: ' + specifier)
155
+ return value
156
+ })
157
+ export const apply = official.apply
158
+ export const inject = official.inject
159
+ `
160
+ }