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.
- package/CHANGELOG.md +98 -0
- package/NOTICE +14 -0
- package/README.en.md +74 -266
- package/README.md +78 -286
- package/cordis.patch.yml +7 -3
- package/lib/adapters/git.js +8 -0
- package/lib/adapters/git.js.map +1 -1
- package/lib/adapters/registry.js +100 -1
- package/lib/adapters/registry.js.map +1 -1
- package/lib/checkpoint.d.ts +3 -0
- package/lib/checkpoint.js +29 -0
- package/lib/checkpoint.js.map +1 -0
- package/lib/client/WorktreeReviewRow.d.ts +1 -1
- package/lib/client/WorktreeReviewRow.js +32 -4
- package/lib/client/WorktreeReviewRow.js.map +1 -1
- package/lib/client/actions.d.ts +25 -1
- package/lib/client/actions.js.map +1 -1
- package/lib/client/console-remote/adapter.js +11 -3
- package/lib/client/console-remote/adapter.js.map +1 -1
- package/lib/client/index.d.ts +1 -1
- package/lib/client/index.js +3 -1
- package/lib/client/index.js.map +1 -1
- package/lib/client/pre-session/controller.js +9 -0
- package/lib/client/pre-session/controller.js.map +1 -1
- package/lib/client/review-console/PreflightStatus.d.ts +3 -2
- package/lib/client/review-console/PreflightStatus.js +3 -3
- package/lib/client/review-console/PreflightStatus.js.map +1 -1
- package/lib/client/review-console/ReviewActions.js +566 -27
- package/lib/client/review-console/ReviewActions.js.map +1 -1
- package/lib/client/review-console/WorktreeReviewPanel.js +18 -3
- package/lib/client/review-console/WorktreeReviewPanel.js.map +1 -1
- package/lib/client/review-console/preflight-cache.d.ts +2 -0
- package/lib/client/review-console/preflight-cache.js +18 -5
- package/lib/client/review-console/preflight-cache.js.map +1 -1
- package/lib/client/review-console/preview-recovery-cache.d.ts +20 -0
- package/lib/client/review-console/preview-recovery-cache.js +103 -0
- package/lib/client/review-console/preview-recovery-cache.js.map +1 -0
- package/lib/client/review-console/recovery-continuation.d.ts +53 -0
- package/lib/client/review-console/recovery-continuation.js +483 -0
- package/lib/client/review-console/recovery-continuation.js.map +1 -0
- package/lib/client/review-console/review-console.styles.js +9 -1
- package/lib/client/review-console/review-console.styles.js.map +1 -1
- package/lib/client/styles.js +61 -0
- package/lib/client/styles.js.map +1 -1
- package/lib/client/target-console/TargetStatusAction.js +2 -2
- package/lib/client/target-console/TargetStatusAction.js.map +1 -1
- package/lib/client/target-console/WorktreeConsoleView.js +1 -1
- package/lib/client/target-console/WorktreeConsoleView.js.map +1 -1
- package/lib/client/target-console/WorktreeReviewStatus.js +19 -6
- package/lib/client/target-console/WorktreeReviewStatus.js.map +1 -1
- package/lib/client/workspace-sidebar/index.d.ts +33 -0
- package/lib/client/workspace-sidebar/index.js +127 -0
- package/lib/client/workspace-sidebar/index.js.map +1 -0
- package/lib/client/workspace-sidebar/model.d.ts +37 -0
- package/lib/client/workspace-sidebar/model.js +88 -0
- package/lib/client/workspace-sidebar/model.js.map +1 -0
- package/lib/client.js +4511 -106
- package/lib/console-contract.d.ts +124 -1
- package/lib/console-contract.js.map +1 -1
- package/lib/console-host/control-plane.d.ts +7 -1
- package/lib/console-host/control-plane.js +264 -9
- package/lib/console-host/control-plane.js.map +1 -1
- package/lib/console-host/errors.d.ts +2 -2
- package/lib/console-host/errors.js +21 -5
- package/lib/console-host/errors.js.map +1 -1
- package/lib/console-host/projection.js +60 -1
- package/lib/console-host/projection.js.map +1 -1
- package/lib/console-host/service.d.ts +11 -5
- package/lib/console-host/service.js +54 -6
- package/lib/console-host/service.js.map +1 -1
- package/lib/console-remote/descriptors.js +40 -3
- package/lib/console-remote/descriptors.js.map +1 -1
- package/lib/console-remote/remote.d.ts +11 -5
- package/lib/console-remote/remote.js.map +1 -1
- package/lib/console-remote/schemas.d.ts +104 -1
- package/lib/console-remote/schemas.js +161 -5
- package/lib/console-remote/schemas.js.map +1 -1
- package/lib/index.d.ts +13 -2
- package/lib/index.js.map +1 -1
- package/lib/ports.d.ts +76 -1
- package/lib/session-checkout-apply.d.ts +76 -0
- package/lib/session-checkout-apply.js +608 -143
- package/lib/session-checkout-apply.js.map +1 -1
- package/lib/session-checkout-module.js +759 -124
- package/lib/session-checkout-module.js.map +1 -1
- package/lib/tools.js +1 -1
- package/lib/tools.js.map +1 -1
- package/lib/types.d.ts +93 -2
- package/lib/types.js.map +1 -1
- package/package.json +22 -14
- package/scripts/check-publish.mjs +17 -2
- package/scripts/check-workspace-sidebar-version.mjs +14 -0
- package/scripts/dev-dsh-lib.mjs +1 -1
- package/scripts/workspace-sidebar-upstream.d.mts +8 -0
- 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":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AAExC,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAA;AAInD,SAAS,WAAW,CAAC,KAAc;IACjC,MAAM,OAAO,GAAI,KAAmD,EAAE,OAAO,CAAA;IAC7E,IAAI,CAAC,OAAO,IAAI,OAAO,OAAO,CAAC,EAAE,KAAK,QAAQ,EAAE,CAAC;QAC/C,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAA;IACnD,CAAC;IACD,OAAO,OAAO,CAAC,EAAE,CAAA;AACnB,CAAC;AAED,kFAAkF;AAClF,SAAS,UAAU,CAAC,KAAc;IAChC,OAAO,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC,CAAA;AACxD,CAAC;AAED,qDAAqD;AACrD,MAAM,UAAU,aAAa,CAAC,GAAY,EAAE,MAA6B;IACvE,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,UAAU,CAAC;QAC5B,IAAI,EAAE,iBAAiB;QACvB,WAAW,EAAE,2PAA2P;QACxQ,UAAU,EAAE,EAAE;QACd,MAAM,EAAE;YACN,MAAM,EAAE;gBACN,IAAI,EAAE,QAAQ;gBACd,oBAAoB,EAAE,KAAK;gBAC3B,UAAU,EAAE;oBACV,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE;oBACxC,UAAU,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE;oBAC9C,eAAe,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE;oBACnD,WAAW,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE;oBAC/C,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE;oBACzC,UAAU,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE;oBAC9C,eAAe,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE;iBACpD;aACF;YACD,MAAM,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE,CAAC,UAAU,CAAC,KAAK,CAAC;SAC5C;QACD,KAAK,CAAC,OAAO,CAAC,KAAK,EAAE,IAAI;YACvB,MAAM,eAAe,GAAG,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;YAC/C,MAAM,eAAe,GAAG,UAAU,EAAE,CAAA;YACpC,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,oBAAoB,CAAC,eAAe,EAAE,eAAe,CAAC,CAAA;YAClF,OAAO;gBACL,IAAI,EAAE,yBAAyB;gBAC/B,UAAU,EAAE,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE;gBACrC,eAAe;gBACf,WAAW,EAAE,MAAM,CAAC,WAAW;gBAC/B,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK;gBACnC,UAAU,EAAE,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG;gBACrC,eAAe;aAChB,CAAA;QACH,CAAC;QACD,WAAW,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,gCAAgC,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC;KAC/G,CAAC,CAAC,CAAA;IAEH,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,UAAU,CAAC;QAC5B,IAAI,EAAE,eAAe;QACrB,WAAW,EAAE,kJAAkJ;QAC/J,UAAU,EAAE,EAAE;QACd,MAAM,EAAE;YACN,MAAM,EAAE;gBACN,IAAI,EAAE,QAAQ;gBACd,oBAAoB,EAAE,KAAK;gBAC3B,UAAU,EAAE;oBACV,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE;oBACxC,SAAS,EAAE;wBACT,IAAI,EAAE,OAAO;wBACb,QAAQ,EAAE,IAAI;wBACd,KAAK,EAAE;4BACL,IAAI,EAAE,QAAQ;4BACd,oBAAoB,EAAE,KAAK;4BAC3B,UAAU,EAAE;gCACV,UAAU,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE;gCAC9C,WAAW,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE;gCAC/C,cAAc,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE;gCAClD,SAAS,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE;gCAC7C,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE;gCACzC,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE;gCACzC,KAAK,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,IAAI,EAAE;gCAC1C,SAAS,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;6BAC9B;yBACF;qBACF;iBACF;aACF;YACD,MAAM,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE,CAAC,UAAU,CAAC,KAAK,CAAC;SAC5C;QACD,KAAK,CAAC,OAAO,CAAC,KAAK,EAAE,IAAI;YACvB,MAAM,SAAS,GAAG,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;YACzC,MAAM,SAAS,GAAG,MAAM,MAAM,CAAC,8BAA8B,CAAC,SAAS,CAAC,CAAA;YACxE,OAAO;gBACL,IAAI,EAAE,eAAe;gBACrB,SAAS,EAAE,SAAS,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;oBACrC,UAAU,EAAE,OAAO,CAAC,UAAU;oBAC9B,WAAW,EAAE,OAAO,CAAC,OAAO,CAAC,IAAI;oBACjC,cAAc,EAAE,OAAO,CAAC,cAAc;oBACtC,SAAS,EAAE,OAAO,CAAC,SAAS;oBAC5B,KAAK,EAAE,OAAO,CAAC,KAAK;oBACpB,KAAK,EAAE,OAAO,CAAC,KAAK;oBACpB,KAAK,EAAE,OAAO,CAAC,KAAK;oBACpB,SAAS,EAAE,OAAO,CAAC,SAAS,IAAI,SAAS;iBAC1C,CAAC,CAAC;aACJ,CAAA;QACH,CAAC;QACD,WAAW,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,wBAAwB,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC;KACvG,CAAC,CAAC,CAAA;IAEH,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,UAAU,CAAC;QAC5B,IAAI,EAAE,0BAA0B;QAChC,WAAW,EAAE,gKAAgK;QAC7K,UAAU,EAAE,EAAE;QACd,MAAM,EAAE;YACN,MAAM,EAAE;gBACN,IAAI,EAAE,QAAQ;gBACd,oBAAoB,EAAE,KAAK;gBAC3B,UAAU,EAAE;oBACV,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE;oBACxC,UAAU,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE;oBAC9C,SAAS,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE;oBAC7C,QAAQ,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE;oBAC5C,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE;oBACzC,SAAS,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE;iBAC9C;aACF;YACD,MAAM,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE,CAAC,UAAU,CAAC,KAAK,CAAC;SAC5C;QACD,KAAK,CAAC,OAAO,CAAC,KAAK,EAAE,IAAI;YACvB,MAAM,SAAS,GAAG,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;YACzC,MAAM,OAAO,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAA;YAC/C,IAAI,OAAO,CAAC,QAAQ,EAAE,KAAK,KAAK,kBAAkB,EAAE,CAAC;gBACnD,MAAM,IAAI,KAAK,CAAC,iCAAiC,OAAO,CAAC,QAAQ,EAAE,KAAK,IAAI,SAAS,EAAE,CAAC,CAAA;YAC1F,CAAC;YACD,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,cAAc,CACxC,SAAS,EACT,OAAO,CAAC,QAAQ,EAChB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,QAAQ,CACjC,CAAA;YACD,IAAI,MAAM,CAAC,QAAQ,EAAE,KAAK,KAAK,SAAS,EAAE,CAAC;gBACzC,MAAM,IAAI,KAAK,CAAC,6BAA6B,MAAM,CAAC,QAAQ,EAAE,KAAK,IAAI,SAAS,EAAE,CAAC,CAAA;YACrF,CAAC;YACD,OAAO;gBACL,IAAI,EAAE,2BAA2B;gBACjC,UAAU,EAAE,MAAM,CAAC,QAAQ,CAAC,EAAE;gBAC9B,SAAS,EAAE,MAAM,CAAC,QAAQ,CAAC,SAAS;gBACpC,QAAQ,EAAE,MAAM,CAAC,QAAQ;gBACzB,KAAK,EAAE,MAAM,CAAC,QAAQ,CAAC,KAAK;gBAC5B,SAAS;aACV,CAAA;QACH,CAAC;QACD,WAAW,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,0BAA0B,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC;KACzG,CAAC,CAAC,CAAA;IAEH,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,UAAU,CAAC;QAC5B,IAAI,EAAE,+BAA+B;QACrC,WAAW,EAAE,iKAAiK;QAC9K,UAAU,EAAE,EAAE;QACd,MAAM,EAAE;YACN,MAAM,EAAE;gBACN,IAAI,EAAE,QAAQ;gBACd,oBAAoB,EAAE,KAAK;gBAC3B,UAAU,EAAE;oBACV,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE;oBACxC,UAAU,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE;oBAC9C,SAAS,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE;oBAC7C,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE;oBACzC,UAAU,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE;oBAC9C,SAAS,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE;iBAC9C;aACF;YACD,MAAM,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE,CAAC,UAAU,CAAC,KAAK,CAAC;SAC5C;QACD,KAAK,CAAC,OAAO,CAAC,KAAK,EAAE,IAAI;YACvB,MAAM,SAAS,GAAG,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;YACzC,MAAM,OAAO,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAA;YAC/C,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,kBAAkB,CAAC,SAAS,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAA;YAC3E,IAAI,MAAM,CAAC,QAAQ,EAAE,KAAK,KAAK,SAAS,EAAE,CAAC;gBACzC,MAAM,IAAI,KAAK,CAAC,gCAAgC,MAAM,CAAC,QAAQ,EAAE,KAAK,IAAI,SAAS,EAAE,CAAC,CAAA;YACxF,CAAC;YACD,OAAO;gBACL,IAAI,EAAE,iCAAiC;gBACvC,UAAU,EAAE,MAAM,CAAC,QAAQ,CAAC,EAAE;gBAC9B,SAAS,EAAE,MAAM,CAAC,QAAQ,CAAC,SAAS;gBACpC,KAAK,EAAE,MAAM,CAAC,QAAQ,CAAC,KAAK;gBAC5B,UAAU,EAAE,MAAM,CAAC,OAAO,CAAC,GAAG;gBAC9B,SAAS;aACV,CAAA;QACH,CAAC;QACD,WAAW,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,+BAA+B,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC;KAC9G,CAAC,CAAC,CAAA;IAEH,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,UAAU,CAAC;QAC5B,IAAI,EAAE,2BAA2B;QACjC,WAAW,EAAE,
|
|
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;
|
|
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
|
-
"description": "Experimental Git worktree Session Targets for DeepSeek Harness with
|
|
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.
|
|
80
|
-
"@deepseek-ai/dsh-commands": "0.1.
|
|
81
|
-
"@deepseek-ai/dsh-session": "0.1.
|
|
82
|
-
"@deepseek-ai/dsh-subprocess": "0.1.
|
|
83
|
-
"@deepseek-ai/dsh-system-prompt": "0.1.
|
|
84
|
-
"@deepseek-ai/dsh-tools": "0.1.
|
|
85
|
-
"@deepseek-ai/dsh-typert-protocol": "0.1.
|
|
86
|
-
"@deepseek-ai/dsh-typert-registry": "0.1.
|
|
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.
|
|
95
|
-
"@deepseek-ai/dsh-client-connection": "0.1.
|
|
96
|
-
"@deepseek-ai/dsh-
|
|
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
|
-
|
|
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}`)
|
package/scripts/dev-dsh-lib.mjs
CHANGED
|
@@ -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
|
+
}
|