@cerbur/clutch-dsh-worktree 0.1.2 → 0.1.4
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/README.md +247 -92
- package/README.zh.md +297 -0
- package/lib/client/WorktreeContext.d.ts +15 -0
- package/lib/client/WorktreeContext.d.ts.map +1 -0
- package/lib/client/WorktreeContext.js +19 -0
- package/lib/client/WorktreeContext.js.map +1 -0
- package/lib/client/WorktreeHeroContext.d.ts +10 -0
- package/lib/client/WorktreeHeroContext.d.ts.map +1 -0
- package/lib/client/WorktreeHeroContext.js +128 -0
- package/lib/client/WorktreeHeroContext.js.map +1 -0
- package/lib/client/WorktreeOverlay.d.ts +6 -0
- package/lib/client/WorktreeOverlay.d.ts.map +1 -0
- package/lib/client/WorktreeOverlay.js +8 -0
- package/lib/client/WorktreeOverlay.js.map +1 -0
- package/lib/client/WorktreeSurface.d.ts +3 -29
- package/lib/client/WorktreeSurface.d.ts.map +1 -1
- package/lib/client/WorktreeSurface.js +170 -314
- package/lib/client/WorktreeSurface.js.map +1 -1
- package/lib/client/entry.d.ts +1 -1
- package/lib/client/entry.d.ts.map +1 -1
- package/lib/client/entry.js +41 -14
- package/lib/client/entry.js.map +1 -1
- package/lib/client/locales.d.ts +30 -0
- package/lib/client/locales.d.ts.map +1 -1
- package/lib/client/locales.js +32 -2
- package/lib/client/locales.js.map +1 -1
- package/lib/client/session-view.d.ts +21 -0
- package/lib/client/session-view.d.ts.map +1 -0
- package/lib/client/session-view.js +26 -0
- package/lib/client/session-view.js.map +1 -0
- package/lib/client/sidebar-overlay-geometry.d.ts +1 -0
- package/lib/client/sidebar-overlay-geometry.d.ts.map +1 -1
- package/lib/client/sidebar-overlay-geometry.js +28 -17
- package/lib/client/sidebar-overlay-geometry.js.map +1 -1
- package/lib/client/virtual-workspace-membership.d.ts.map +1 -1
- package/lib/client/virtual-workspace-membership.js +17 -6
- package/lib/client/virtual-workspace-membership.js.map +1 -1
- package/lib/client/worktree-connection.d.ts +1 -0
- package/lib/client/worktree-connection.d.ts.map +1 -1
- package/lib/client/worktree-connection.js +4 -0
- package/lib/client/worktree-connection.js.map +1 -1
- package/lib/client/worktree-context-store.d.ts +45 -0
- package/lib/client/worktree-context-store.d.ts.map +1 -0
- package/lib/client/worktree-context-store.js +199 -0
- package/lib/client/worktree-context-store.js.map +1 -0
- package/lib/client/worktree-context.d.ts +32 -0
- package/lib/client/worktree-context.d.ts.map +1 -0
- package/lib/client/worktree-context.js +51 -0
- package/lib/client/worktree-context.js.map +1 -0
- package/lib/client/worktree-error-copy.d.ts.map +1 -1
- package/lib/client/worktree-error-copy.js +14 -0
- package/lib/client/worktree-error-copy.js.map +1 -1
- package/lib/client/worktree-session.d.ts +83 -0
- package/lib/client/worktree-session.d.ts.map +1 -0
- package/lib/client/worktree-session.js +185 -0
- package/lib/client/worktree-session.js.map +1 -0
- package/lib/client/worktree-surface-dialogs.d.ts +7 -0
- package/lib/client/worktree-surface-dialogs.d.ts.map +1 -0
- package/lib/client/worktree-surface-dialogs.js +86 -0
- package/lib/client/worktree-surface-dialogs.js.map +1 -0
- package/lib/client/worktree-surface-rows.d.ts +9 -0
- package/lib/client/worktree-surface-rows.d.ts.map +1 -0
- package/lib/client/worktree-surface-rows.js +223 -0
- package/lib/client/worktree-surface-rows.js.map +1 -0
- package/lib/client/worktree-surface-selectors.d.ts +9 -0
- package/lib/client/worktree-surface-selectors.d.ts.map +1 -0
- package/lib/client/worktree-surface-selectors.js +28 -0
- package/lib/client/worktree-surface-selectors.js.map +1 -0
- package/lib/client/worktree-surface-types.d.ts +233 -0
- package/lib/client/worktree-surface-types.d.ts.map +1 -0
- package/lib/client/worktree-surface-types.js +2 -0
- package/lib/client/worktree-surface-types.js.map +1 -0
- package/lib/client/worktree-view-actions.d.ts +34 -0
- package/lib/client/worktree-view-actions.d.ts.map +1 -0
- package/lib/client/worktree-view-actions.js +69 -0
- package/lib/client/worktree-view-actions.js.map +1 -0
- package/lib/client/worktree-view-errors.d.ts +20 -0
- package/lib/client/worktree-view-errors.d.ts.map +1 -0
- package/lib/client/worktree-view-errors.js +65 -0
- package/lib/client/worktree-view-errors.js.map +1 -0
- package/lib/client/worktree-view-read.d.ts +48 -0
- package/lib/client/worktree-view-read.d.ts.map +1 -0
- package/lib/client/worktree-view-read.js +134 -0
- package/lib/client/worktree-view-read.js.map +1 -0
- package/lib/client/worktree-view.d.ts +4 -63
- package/lib/client/worktree-view.d.ts.map +1 -1
- package/lib/client/worktree-view.js +4 -125
- package/lib/client/worktree-view.js.map +1 -1
- package/lib/client.js +1313 -363
- package/lib/client.js.map +1 -1
- package/lib/contract/index.contract.js +2 -0
- package/lib/contract/index.contract.js.map +1 -1
- package/lib/contract/index.d.ts +17 -2
- package/lib/contract/index.d.ts.map +1 -1
- package/lib/contract/index.js +2 -0
- package/lib/contract/index.js.map +1 -1
- package/lib/host/remote.d.ts.map +1 -1
- package/lib/host/remote.js +1 -0
- package/lib/host/remote.js.map +1 -1
- package/lib/host/service.d.ts +6 -1
- package/lib/host/service.d.ts.map +1 -1
- package/lib/host/service.js +6 -0
- package/lib/host/service.js.map +1 -1
- package/lib/manage/manager-context.d.ts +11 -0
- package/lib/manage/manager-context.d.ts.map +1 -0
- package/lib/manage/manager-context.js +2 -0
- package/lib/manage/manager-context.js.map +1 -0
- package/lib/manage/manager-sessions.d.ts +18 -0
- package/lib/manage/manager-sessions.d.ts.map +1 -0
- package/lib/manage/manager-sessions.js +91 -0
- package/lib/manage/manager-sessions.js.map +1 -0
- package/lib/manage/manager-support.d.ts +18 -0
- package/lib/manage/manager-support.d.ts.map +1 -0
- package/lib/manage/manager-support.js +174 -0
- package/lib/manage/manager-support.js.map +1 -0
- package/lib/manage/manager-worktrees.d.ts +27 -0
- package/lib/manage/manager-worktrees.d.ts.map +1 -0
- package/lib/manage/manager-worktrees.js +259 -0
- package/lib/manage/manager-worktrees.js.map +1 -0
- package/lib/manage/manager.d.ts +25 -62
- package/lib/manage/manager.d.ts.map +1 -1
- package/lib/manage/manager.js +32 -554
- package/lib/manage/manager.js.map +1 -1
- package/lib/provider/sidecar-persistence.d.ts +18 -0
- package/lib/provider/sidecar-persistence.d.ts.map +1 -0
- package/lib/provider/sidecar-persistence.js +162 -0
- package/lib/provider/sidecar-persistence.js.map +1 -0
- package/lib/provider/sidecar-schema.d.ts +6 -0
- package/lib/provider/sidecar-schema.d.ts.map +1 -0
- package/lib/provider/sidecar-schema.js +123 -0
- package/lib/provider/sidecar-schema.js.map +1 -0
- package/lib/provider/sidecar.d.ts +12 -68
- package/lib/provider/sidecar.d.ts.map +1 -1
- package/lib/provider/sidecar.js +61 -346
- package/lib/provider/sidecar.js.map +1 -1
- package/lib/provider/types.d.ts +2 -1
- package/lib/provider/types.d.ts.map +1 -1
- package/lib/provider/types.js.map +1 -1
- package/lib/typert.host.js +60 -18
- package/lib/typert.remote-client.d.ts +3 -1
- package/lib/typert.remote-client.d.ts.map +1 -1
- package/lib/typert.remote-client.js +60 -18
- package/package.json +6 -2
|
@@ -5,6 +5,7 @@ const expectedManagerKeys = [
|
|
|
5
5
|
'listBranches',
|
|
6
6
|
'createWorktree',
|
|
7
7
|
'removeWorktree',
|
|
8
|
+
'insertWorktreeBefore',
|
|
8
9
|
'listBindings',
|
|
9
10
|
'bindSession',
|
|
10
11
|
];
|
|
@@ -13,6 +14,7 @@ const expectedRemoteKeys = [
|
|
|
13
14
|
'listBranches',
|
|
14
15
|
'createWorktree',
|
|
15
16
|
'removeWorktree',
|
|
17
|
+
'insertWorktreeBefore',
|
|
16
18
|
'listBindings',
|
|
17
19
|
'bindSession',
|
|
18
20
|
];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.contract.js","sourceRoot":"","sources":["../../src/contract/index.contract.ts"],"names":[],"mappings":"AAQA,iDAAiD;AACjD,2HAA2H;AAC3H,MAAM,mBAAmB,GAAG;IAC1B,eAAe;IACf,cAAc;IACd,gBAAgB;IAChB,gBAAgB;IAChB,cAAc;IACd,aAAa;CACL,CAAC;AACX,MAAM,kBAAkB,GAAG;IACzB,eAAe;IACf,cAAc;IACd,gBAAgB;IAChB,gBAAgB;IAChB,cAAc;IACd,aAAa;CACL,CAAC;AAiBX,MAAM,oBAAoB,GAAyB,IAAI,CAAC;AACxD,MAAM,mBAAmB,GAAwB,IAAI,CAAC;AAEtD,4DAA4D;AAC5D,6IAA6I;AAC7I,MAAM,QAAQ,GAAmB;IAC/B,UAAU,EAAE,YAAY;IACxB,WAAW,EAAE,YAAY;IACzB,YAAY,EAAE,8BAA8B;IAC5C,MAAM,EAAE,iBAAiB;IACzB,MAAM,EAAE,QAAQ;CACjB,CAAC;AACF,MAAM,MAAM,GAAiB;IAC3B,IAAI,EAAE,iBAAiB;IACvB,SAAS,EAAE,KAAK;IAChB,UAAU,EAAE,KAAK;CAClB,CAAC;AACF,MAAM,OAAO,GAAmB;IAC9B,WAAW,EAAE,YAAY;IACzB,UAAU,EAAE,YAAY;IACxB,SAAS,EAAE,iBAAiB;IAC5B,MAAM,EAAE,QAAQ;CACjB,CAAC;AAEF,8CAA8C;AAC9C,8FAA8F;AAC9F,KAAK,oBAAoB,CAAC;AAC1B,KAAK,mBAAmB,CAAC;AACzB,KAAK,mBAAmB,CAAC;AACzB,KAAK,kBAAkB,CAAC;AACxB,KAAK,QAAQ,CAAC;AACd,KAAK,MAAM,CAAC;AACZ,KAAK,OAAO,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.contract.js","sourceRoot":"","sources":["../../src/contract/index.contract.ts"],"names":[],"mappings":"AAQA,iDAAiD;AACjD,2HAA2H;AAC3H,MAAM,mBAAmB,GAAG;IAC1B,eAAe;IACf,cAAc;IACd,gBAAgB;IAChB,gBAAgB;IAChB,sBAAsB;IACtB,cAAc;IACd,aAAa;CACL,CAAC;AACX,MAAM,kBAAkB,GAAG;IACzB,eAAe;IACf,cAAc;IACd,gBAAgB;IAChB,gBAAgB;IAChB,sBAAsB;IACtB,cAAc;IACd,aAAa;CACL,CAAC;AAiBX,MAAM,oBAAoB,GAAyB,IAAI,CAAC;AACxD,MAAM,mBAAmB,GAAwB,IAAI,CAAC;AAEtD,4DAA4D;AAC5D,6IAA6I;AAC7I,MAAM,QAAQ,GAAmB;IAC/B,UAAU,EAAE,YAAY;IACxB,WAAW,EAAE,YAAY;IACzB,YAAY,EAAE,8BAA8B;IAC5C,MAAM,EAAE,iBAAiB;IACzB,MAAM,EAAE,QAAQ;CACjB,CAAC;AACF,MAAM,MAAM,GAAiB;IAC3B,IAAI,EAAE,iBAAiB;IACvB,SAAS,EAAE,KAAK;IAChB,UAAU,EAAE,KAAK;CAClB,CAAC;AACF,MAAM,OAAO,GAAmB;IAC9B,WAAW,EAAE,YAAY;IACzB,UAAU,EAAE,YAAY;IACxB,SAAS,EAAE,iBAAiB;IAC5B,MAAM,EAAE,QAAQ;CACjB,CAAC;AAEF,8CAA8C;AAC9C,8FAA8F;AAC9F,KAAK,oBAAoB,CAAC;AAC1B,KAAK,mBAAmB,CAAC;AACzB,KAAK,mBAAmB,CAAC;AACzB,KAAK,kBAAkB,CAAC;AACxB,KAAK,QAAQ,CAAC;AACd,KAAK,MAAM,CAAC;AACZ,KAAK,OAAO,CAAC"}
|
package/lib/contract/index.d.ts
CHANGED
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
* 跨 Host/浏览器边界保持稳定的领域错误码;新增、删除或重命名成员都属于公开契约变更。
|
|
9
9
|
* Stable domain error codes shared across the Host/browser boundary; adding, removing, or renaming a member is a public contract change.
|
|
10
10
|
*/
|
|
11
|
-
export declare const WORKTREE_ERROR_CODES: readonly ["WORKSPACE_NOT_FOUND", "WORKSPACE_NOT_GIT_REPOSITORY", "WORKTREE_REQUIRES_INITIAL_COMMIT", "WORKTREE_BRANCH_CONFLICT", "WORKTREE_NOT_FOUND", "WORKTREE_REMOVED", "SESSION_NOT_FOUND", "SESSION_CWD_MISMATCH", "SESSION_ALREADY_BOUND", "SIDECAR_UNAVAILABLE", "SIDECAR_CORRUPT", "SIDECAR_SYNC_REQUIRED", "GIT_OPERATION_FAILED"];
|
|
11
|
+
export declare const WORKTREE_ERROR_CODES: readonly ["WORKSPACE_NOT_FOUND", "WORKSPACE_NOT_GIT_REPOSITORY", "WORKTREE_REQUIRES_INITIAL_COMMIT", "WORKTREE_BRANCH_CONFLICT", "WORKTREE_NOT_FOUND", "WORKTREE_ORDER_INVALID", "WORKTREE_REMOVED", "SESSION_NOT_FOUND", "SESSION_CWD_MISMATCH", "SESSION_ALREADY_BOUND", "SIDECAR_UNAVAILABLE", "SIDECAR_CORRUPT", "SIDECAR_SYNC_REQUIRED", "GIT_OPERATION_FAILED"];
|
|
12
12
|
export type WorktreeErrorCode = (typeof WORKTREE_ERROR_CODES)[number];
|
|
13
13
|
export type WorkspaceId = string;
|
|
14
14
|
export type WorktreeId = string;
|
|
@@ -115,6 +115,16 @@ export interface WorktreeManager {
|
|
|
115
115
|
workspaceId: WorkspaceId;
|
|
116
116
|
worktreeId: WorktreeId;
|
|
117
117
|
}): Promise<void>;
|
|
118
|
+
/**
|
|
119
|
+
* Move one Worktree within the Workspace's durable order. With an anchor it
|
|
120
|
+
* lands before that Worktree; without one it appends. Invalid and unchanged
|
|
121
|
+
* moves resolve without changing the sidecar.
|
|
122
|
+
*/
|
|
123
|
+
insertWorktreeBefore(input: {
|
|
124
|
+
workspaceId: WorkspaceId;
|
|
125
|
+
worktreeId: WorktreeId;
|
|
126
|
+
beforeWorktreeId?: WorktreeId;
|
|
127
|
+
}): Promise<readonly WorktreeId[]>;
|
|
118
128
|
/**
|
|
119
129
|
* 返回 active 与 detached 关系,使调用方能够区分当前归属和待修复历史。
|
|
120
130
|
* Returns active and detached relations so callers can distinguish current ownership from repairable history.
|
|
@@ -136,7 +146,7 @@ export interface WorktreeManager {
|
|
|
136
146
|
* Browser Remote 可调用的方法白名单;runtime cwd 解析刻意不进入该边界。
|
|
137
147
|
* Allowlist of Browser Remote methods; runtime cwd resolution is intentionally excluded from this boundary.
|
|
138
148
|
*/
|
|
139
|
-
export declare const WORKTREE_REMOTE_METHODS: readonly ["listWorktrees", "listBranches", "createWorktree", "removeWorktree", "listBindings", "bindSession"];
|
|
149
|
+
export declare const WORKTREE_REMOTE_METHODS: readonly ["listWorktrees", "listBranches", "createWorktree", "removeWorktree", "insertWorktreeBefore", "listBindings", "bindSession"];
|
|
140
150
|
export type WorktreeRemoteMethod = (typeof WORKTREE_REMOTE_METHODS)[number];
|
|
141
151
|
/**
|
|
142
152
|
* Remote 的可辨识结果:已知领域失败作为数据返回,未知或未分类异常仍由 Host 抛出。
|
|
@@ -169,6 +179,11 @@ export interface WorktreeRemoteManager {
|
|
|
169
179
|
workspaceId: WorkspaceId;
|
|
170
180
|
worktreeId: WorktreeId;
|
|
171
181
|
}): Promise<WorktreeRemoteResult<null>>;
|
|
182
|
+
insertWorktreeBefore(input: {
|
|
183
|
+
workspaceId: WorkspaceId;
|
|
184
|
+
worktreeId: WorktreeId;
|
|
185
|
+
beforeWorktreeId?: WorktreeId;
|
|
186
|
+
}): Promise<WorktreeRemoteResult<readonly WorktreeId[]>>;
|
|
172
187
|
listBindings(input: {
|
|
173
188
|
workspaceId: WorkspaceId;
|
|
174
189
|
}): Promise<WorktreeRemoteResult<readonly SessionBinding[]>>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/contract/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH;;;GAGG;AACH,eAAO,MAAM,oBAAoB,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/contract/index.ts"],"names":[],"mappings":"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"}
|
package/lib/contract/index.js
CHANGED
|
@@ -14,6 +14,7 @@ export const WORKTREE_ERROR_CODES = Object.freeze([
|
|
|
14
14
|
'WORKTREE_REQUIRES_INITIAL_COMMIT',
|
|
15
15
|
'WORKTREE_BRANCH_CONFLICT',
|
|
16
16
|
'WORKTREE_NOT_FOUND',
|
|
17
|
+
'WORKTREE_ORDER_INVALID',
|
|
17
18
|
'WORKTREE_REMOVED',
|
|
18
19
|
'SESSION_NOT_FOUND',
|
|
19
20
|
'SESSION_CWD_MISMATCH',
|
|
@@ -39,6 +40,7 @@ export const WORKTREE_REMOTE_METHODS = Object.freeze([
|
|
|
39
40
|
'listBranches',
|
|
40
41
|
'createWorktree',
|
|
41
42
|
'removeWorktree',
|
|
43
|
+
'insertWorktreeBefore',
|
|
42
44
|
'listBindings',
|
|
43
45
|
'bindSession',
|
|
44
46
|
]);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/contract/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH;;;GAGG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG,MAAM,CAAC,MAAM,CAAC;IAChD,qBAAqB;IACrB,8BAA8B;IAC9B,kCAAkC;IAClC,0BAA0B;IAC1B,oBAAoB;IACpB,kBAAkB;IAClB,mBAAmB;IACnB,sBAAsB;IACtB,uBAAuB;IACvB,qBAAqB;IACrB,iBAAiB;IACjB,uBAAuB;IACvB,sBAAsB;CACd,CAAC,CAAC;AAyEZ;;;GAGG;AACH,MAAM,UAAU,mBAAmB,CACjC,IAAuB,EACvB,OAAe,EACf,UAAgC,EAAE;IAElC,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC;AACpC,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/contract/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH;;;GAGG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG,MAAM,CAAC,MAAM,CAAC;IAChD,qBAAqB;IACrB,8BAA8B;IAC9B,kCAAkC;IAClC,0BAA0B;IAC1B,oBAAoB;IACpB,wBAAwB;IACxB,kBAAkB;IAClB,mBAAmB;IACnB,sBAAsB;IACtB,uBAAuB;IACvB,qBAAqB;IACrB,iBAAiB;IACjB,uBAAuB;IACvB,sBAAsB;CACd,CAAC,CAAC;AAyEZ;;;GAGG;AACH,MAAM,UAAU,mBAAmB,CACjC,IAAuB,EACvB,OAAe,EACf,UAAgC,EAAE;IAElC,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC;AACpC,CAAC;AAkED;;;GAGG;AACH,MAAM,CAAC,MAAM,uBAAuB,GAAG,MAAM,CAAC,MAAM,CAAC;IACnD,eAAe;IACf,cAAc;IACd,gBAAgB;IAChB,gBAAgB;IAChB,sBAAsB;IACtB,cAAc;IACd,aAAa;CACL,CAAC,CAAC"}
|
package/lib/host/remote.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"remote.d.ts","sourceRoot":"","sources":["../../src/host/remote.ts"],"names":[],"mappings":"AAAA,OAAO,EAIL,KAAK,eAAe,EACpB,KAAK,qBAAqB,EAE3B,MAAM,sBAAsB,CAAC;AAkC9B;;;;;;;;;;;;GAYG;AACH,wBAAgB,8BAA8B,CAAC,OAAO,EAAE,eAAe,GAAG,qBAAqB,
|
|
1
|
+
{"version":3,"file":"remote.d.ts","sourceRoot":"","sources":["../../src/host/remote.ts"],"names":[],"mappings":"AAAA,OAAO,EAIL,KAAK,eAAe,EACpB,KAAK,qBAAqB,EAE3B,MAAM,sBAAsB,CAAC;AAkC9B;;;;;;;;;;;;GAYG;AACH,wBAAgB,8BAA8B,CAAC,OAAO,EAAE,eAAe,GAAG,qBAAqB,CAiB9F"}
|
package/lib/host/remote.js
CHANGED
|
@@ -54,6 +54,7 @@ export function createWorktreeRemoteProjection(manager) {
|
|
|
54
54
|
// to null in the wire contract.
|
|
55
55
|
return null;
|
|
56
56
|
}),
|
|
57
|
+
insertWorktreeBefore: (input) => project(() => manager.insertWorktreeBefore(input)),
|
|
57
58
|
listBindings: (input) => project(() => manager.listBindings(input)),
|
|
58
59
|
bindSession: (input) => project(() => manager.bindSession(input)),
|
|
59
60
|
};
|
package/lib/host/remote.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"remote.js","sourceRoot":"","sources":["../../src/host/remote.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,oBAAoB,EACpB,mBAAmB,GAKpB,MAAM,sBAAsB,CAAC;AAE9B,MAAM,kBAAkB,GAAG,IAAI,GAAG,CAAS,oBAAoB,CAAC,CAAC;AAEjE,SAAS,eAAe,CAAC,KAAc;IACrC,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IACtF,MAAM,SAAS,GAAG,KAA+B,CAAC;IAClD,OAAO,CACL,OAAO,SAAS,CAAC,IAAI,KAAK,QAAQ;QAClC,kBAAkB,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC;QACtC,OAAO,SAAS,CAAC,OAAO,KAAK,QAAQ;QACrC,OAAO,SAAS,CAAC,OAAO,KAAK,QAAQ;QACrC,SAAS,CAAC,OAAO,KAAK,IAAI;QAC1B,CAAC,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,OAAO,CAAC,CAClC,CAAC;AACJ,CAAC;AAED,KAAK,UAAU,OAAO,CAAQ,SAA+B;IAC3D,IAAI,CAAC;QACH,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,SAAS,EAAE,EAAE,CAAC;IAChD,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,mDAAmD;QACnD,yDAAyD;QACzD,+EAA+E;QAC/E,qFAAqF;QACrF,oCAAoC;QACpC,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC;YAAE,MAAM,KAAK,CAAC;QACzC,OAAO;YACL,EAAE,EAAE,KAAK;YACT,KAAK,EAAE,mBAAmB,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,OAAO,CAAC;SACrE,CAAC;IACJ,CAAC;AACH,CAAC;AAED;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,8BAA8B,CAAC,OAAwB;IACrE,OAAO;QACL,aAAa,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;QACrE,YAAY,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;QACnE,cAAc,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;QACvE,cAAc,EAAE,CAAC,KAAK,EAAE,EAAE,CACxB,OAAO,CAAC,KAAK,IAAI,EAAE;YACjB,MAAM,OAAO,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;YACpC,uDAAuD;YACvD,mFAAmF;YACnF,gCAAgC;YAChC,OAAO,IAAI,CAAC;QACd,CAAC,CAAC;QACJ,YAAY,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;QACnE,WAAW,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;KAClE,CAAC;AACJ,CAAC"}
|
|
1
|
+
{"version":3,"file":"remote.js","sourceRoot":"","sources":["../../src/host/remote.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,oBAAoB,EACpB,mBAAmB,GAKpB,MAAM,sBAAsB,CAAC;AAE9B,MAAM,kBAAkB,GAAG,IAAI,GAAG,CAAS,oBAAoB,CAAC,CAAC;AAEjE,SAAS,eAAe,CAAC,KAAc;IACrC,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IACtF,MAAM,SAAS,GAAG,KAA+B,CAAC;IAClD,OAAO,CACL,OAAO,SAAS,CAAC,IAAI,KAAK,QAAQ;QAClC,kBAAkB,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC;QACtC,OAAO,SAAS,CAAC,OAAO,KAAK,QAAQ;QACrC,OAAO,SAAS,CAAC,OAAO,KAAK,QAAQ;QACrC,SAAS,CAAC,OAAO,KAAK,IAAI;QAC1B,CAAC,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,OAAO,CAAC,CAClC,CAAC;AACJ,CAAC;AAED,KAAK,UAAU,OAAO,CAAQ,SAA+B;IAC3D,IAAI,CAAC;QACH,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,SAAS,EAAE,EAAE,CAAC;IAChD,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,mDAAmD;QACnD,yDAAyD;QACzD,+EAA+E;QAC/E,qFAAqF;QACrF,oCAAoC;QACpC,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC;YAAE,MAAM,KAAK,CAAC;QACzC,OAAO;YACL,EAAE,EAAE,KAAK;YACT,KAAK,EAAE,mBAAmB,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,OAAO,CAAC;SACrE,CAAC;IACJ,CAAC;AACH,CAAC;AAED;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,8BAA8B,CAAC,OAAwB;IACrE,OAAO;QACL,aAAa,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;QACrE,YAAY,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;QACnE,cAAc,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;QACvE,cAAc,EAAE,CAAC,KAAK,EAAE,EAAE,CACxB,OAAO,CAAC,KAAK,IAAI,EAAE;YACjB,MAAM,OAAO,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;YACpC,uDAAuD;YACvD,mFAAmF;YACnF,gCAAgC;YAChC,OAAO,IAAI,CAAC;QACd,CAAC,CAAC;QACJ,oBAAoB,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,oBAAoB,CAAC,KAAK,CAAC,CAAC;QACnF,YAAY,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;QACnE,WAAW,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;KAClE,CAAC;AACJ,CAAC"}
|
package/lib/host/service.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { Context } from '@deepseek-ai/cordis';
|
|
2
2
|
import { TypertRemoteService } from '@deepseek-ai/dsh-typert-protocol';
|
|
3
|
-
import type { BranchRecord, SessionBinding, WorktreeRecord, WorktreeRemoteResult } from '../contract/index.js';
|
|
3
|
+
import type { BranchRecord, SessionBinding, WorktreeId, WorktreeRecord, WorktreeRemoteResult } from '../contract/index.js';
|
|
4
4
|
/**
|
|
5
5
|
* Host composition 所需且由 DSH bundle 注入的配置。
|
|
6
6
|
* Configuration supplied by the DSH bundle to the Host composition.
|
|
@@ -45,6 +45,11 @@ export declare class WorktreeRemoteService extends TypertRemoteService {
|
|
|
45
45
|
readonly workspaceId: string;
|
|
46
46
|
readonly worktreeId: string;
|
|
47
47
|
}): Promise<WorktreeRemoteResult<null>>;
|
|
48
|
+
insertWorktreeBefore(input: {
|
|
49
|
+
readonly workspaceId: string;
|
|
50
|
+
readonly worktreeId: string;
|
|
51
|
+
readonly beforeWorktreeId?: string;
|
|
52
|
+
}): Promise<WorktreeRemoteResult<readonly WorktreeId[]>>;
|
|
48
53
|
listBindings(input: {
|
|
49
54
|
readonly workspaceId: string;
|
|
50
55
|
}): Promise<WorktreeRemoteResult<readonly SessionBinding[]>>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"service.d.ts","sourceRoot":"","sources":["../../src/host/service.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAU,mBAAmB,EAAE,MAAM,kCAAkC,CAAC;AAE/E,OAAO,KAAK,EACV,YAAY,EACZ,cAAc,EACd,cAAc,EAEd,oBAAoB,EACrB,MAAM,sBAAsB,CAAC;AAQ9B;;;GAGG;AACH,MAAM,WAAW,kBAAkB;IACjC,sEAAsE;IACtE,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CAC1B;AAED;;;;;;;;;;;GAWG;AACH,qBAAa,qBAAsB,SAAQ,mBAAmB;IAI5D,MAAM,CAAC,MAAM,WAA2D;IAExE,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAwB;IAE/C;;;;OAIG;gBACS,GAAG,EAAE,OAAO,EAAE,MAAM,EAAE,kBAAkB;IAgBpD,aAAa,CAAC,KAAK,EAAE;QACnB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;KAC9B,GAAG,OAAO,CAAC,oBAAoB,CAAC,SAAS,cAAc,EAAE,CAAC,CAAC;IAK5D,YAAY,CAAC,KAAK,EAAE;QAClB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;KAC9B,GAAG,OAAO,CAAC,oBAAoB,CAAC,SAAS,YAAY,EAAE,CAAC,CAAC;IAK1D,cAAc,CAAC,KAAK,EAAE;QACpB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;QAC7B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;QACxB,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;KAC7B,GAAG,OAAO,CAAC,oBAAoB,CAAC,cAAc,CAAC,CAAC;IAKjD,cAAc,CAAC,KAAK,EAAE;QACpB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;QAC7B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;KAC7B,GAAG,OAAO,CAAC,oBAAoB,CAAC,IAAI,CAAC,CAAC;IAKvC,YAAY,CAAC,KAAK,EAAE;QAClB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;KAC9B,GAAG,OAAO,CAAC,oBAAoB,CAAC,SAAS,cAAc,EAAE,CAAC,CAAC;IAK5D,WAAW,CAAC,KAAK,EAAE;QACjB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;QAC7B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;QAC5B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;KAC5B,GAAG,OAAO,CAAC,oBAAoB,CAAC,cAAc,CAAC,CAAC;CAGlD;AAED,eAAe,qBAAqB,CAAC"}
|
|
1
|
+
{"version":3,"file":"service.d.ts","sourceRoot":"","sources":["../../src/host/service.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAU,mBAAmB,EAAE,MAAM,kCAAkC,CAAC;AAE/E,OAAO,KAAK,EACV,YAAY,EACZ,cAAc,EACd,UAAU,EACV,cAAc,EAEd,oBAAoB,EACrB,MAAM,sBAAsB,CAAC;AAQ9B;;;GAGG;AACH,MAAM,WAAW,kBAAkB;IACjC,sEAAsE;IACtE,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CAC1B;AAED;;;;;;;;;;;GAWG;AACH,qBAAa,qBAAsB,SAAQ,mBAAmB;IAI5D,MAAM,CAAC,MAAM,WAA2D;IAExE,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAwB;IAE/C;;;;OAIG;gBACS,GAAG,EAAE,OAAO,EAAE,MAAM,EAAE,kBAAkB;IAgBpD,aAAa,CAAC,KAAK,EAAE;QACnB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;KAC9B,GAAG,OAAO,CAAC,oBAAoB,CAAC,SAAS,cAAc,EAAE,CAAC,CAAC;IAK5D,YAAY,CAAC,KAAK,EAAE;QAClB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;KAC9B,GAAG,OAAO,CAAC,oBAAoB,CAAC,SAAS,YAAY,EAAE,CAAC,CAAC;IAK1D,cAAc,CAAC,KAAK,EAAE;QACpB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;QAC7B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;QACxB,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;KAC7B,GAAG,OAAO,CAAC,oBAAoB,CAAC,cAAc,CAAC,CAAC;IAKjD,cAAc,CAAC,KAAK,EAAE;QACpB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;QAC7B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;KAC7B,GAAG,OAAO,CAAC,oBAAoB,CAAC,IAAI,CAAC,CAAC;IAKvC,oBAAoB,CAAC,KAAK,EAAE;QAC1B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;QAC7B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;QAC5B,QAAQ,CAAC,gBAAgB,CAAC,EAAE,MAAM,CAAC;KACpC,GAAG,OAAO,CAAC,oBAAoB,CAAC,SAAS,UAAU,EAAE,CAAC,CAAC;IAKxD,YAAY,CAAC,KAAK,EAAE;QAClB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;KAC9B,GAAG,OAAO,CAAC,oBAAoB,CAAC,SAAS,cAAc,EAAE,CAAC,CAAC;IAK5D,WAAW,CAAC,KAAK,EAAE;QACjB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;QAC7B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;QAC5B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;KAC5B,GAAG,OAAO,CAAC,oBAAoB,CAAC,cAAc,CAAC,CAAC;CAGlD;AAED,eAAe,qBAAqB,CAAC"}
|
package/lib/host/service.js
CHANGED
|
@@ -55,6 +55,7 @@ let WorktreeRemoteService = (() => {
|
|
|
55
55
|
let _listBranches_decorators;
|
|
56
56
|
let _createWorktree_decorators;
|
|
57
57
|
let _removeWorktree_decorators;
|
|
58
|
+
let _insertWorktreeBefore_decorators;
|
|
58
59
|
let _listBindings_decorators;
|
|
59
60
|
let _bindSession_decorators;
|
|
60
61
|
return class WorktreeRemoteService extends _classSuper {
|
|
@@ -64,12 +65,14 @@ let WorktreeRemoteService = (() => {
|
|
|
64
65
|
_listBranches_decorators = [Remote];
|
|
65
66
|
_createWorktree_decorators = [Remote];
|
|
66
67
|
_removeWorktree_decorators = [Remote];
|
|
68
|
+
_insertWorktreeBefore_decorators = [Remote];
|
|
67
69
|
_listBindings_decorators = [Remote];
|
|
68
70
|
_bindSession_decorators = [Remote];
|
|
69
71
|
__esDecorate(this, null, _listWorktrees_decorators, { kind: "method", name: "listWorktrees", static: false, private: false, access: { has: obj => "listWorktrees" in obj, get: obj => obj.listWorktrees }, metadata: _metadata }, null, _instanceExtraInitializers);
|
|
70
72
|
__esDecorate(this, null, _listBranches_decorators, { kind: "method", name: "listBranches", static: false, private: false, access: { has: obj => "listBranches" in obj, get: obj => obj.listBranches }, metadata: _metadata }, null, _instanceExtraInitializers);
|
|
71
73
|
__esDecorate(this, null, _createWorktree_decorators, { kind: "method", name: "createWorktree", static: false, private: false, access: { has: obj => "createWorktree" in obj, get: obj => obj.createWorktree }, metadata: _metadata }, null, _instanceExtraInitializers);
|
|
72
74
|
__esDecorate(this, null, _removeWorktree_decorators, { kind: "method", name: "removeWorktree", static: false, private: false, access: { has: obj => "removeWorktree" in obj, get: obj => obj.removeWorktree }, metadata: _metadata }, null, _instanceExtraInitializers);
|
|
75
|
+
__esDecorate(this, null, _insertWorktreeBefore_decorators, { kind: "method", name: "insertWorktreeBefore", static: false, private: false, access: { has: obj => "insertWorktreeBefore" in obj, get: obj => obj.insertWorktreeBefore }, metadata: _metadata }, null, _instanceExtraInitializers);
|
|
73
76
|
__esDecorate(this, null, _listBindings_decorators, { kind: "method", name: "listBindings", static: false, private: false, access: { has: obj => "listBindings" in obj, get: obj => obj.listBindings }, metadata: _metadata }, null, _instanceExtraInitializers);
|
|
74
77
|
__esDecorate(this, null, _bindSession_decorators, { kind: "method", name: "bindSession", static: false, private: false, access: { has: obj => "bindSession" in obj, get: obj => obj.bindSession }, metadata: _metadata }, null, _instanceExtraInitializers);
|
|
75
78
|
if (_metadata) Object.defineProperty(this, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
|
|
@@ -108,6 +111,9 @@ let WorktreeRemoteService = (() => {
|
|
|
108
111
|
removeWorktree(input) {
|
|
109
112
|
return this.remote.removeWorktree(input);
|
|
110
113
|
}
|
|
114
|
+
insertWorktreeBefore(input) {
|
|
115
|
+
return this.remote.insertWorktreeBefore(input);
|
|
116
|
+
}
|
|
111
117
|
listBindings(input) {
|
|
112
118
|
return this.remote.listBindings(input);
|
|
113
119
|
}
|
package/lib/host/service.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"service.js","sourceRoot":"","sources":["../../src/host/service.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AACA,OAAO,EAAE,MAAM,EAAE,mBAAmB,EAAE,MAAM,kCAAkC,CAAC;
|
|
1
|
+
{"version":3,"file":"service.js","sourceRoot":"","sources":["../../src/host/service.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AACA,OAAO,EAAE,MAAM,EAAE,mBAAmB,EAAE,MAAM,kCAAkC,CAAC;AAU/E,OAAO,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AAC3D,OAAO,EACL,kBAAkB,GAEnB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,8BAA8B,EAAE,MAAM,aAAa,CAAC;AAW7D;;;;;;;;;;;GAWG;IACU,qBAAqB;sBAAS,mBAAmB;;;;;;;;;iBAAjD,qBAAsB,SAAQ,WAAmB;;;yCA4B3D,MAAM;wCAON,MAAM;0CAON,MAAM;0CASN,MAAM;gDAQN,MAAM;wCASN,MAAM;uCAON,MAAM;YA9CP,0LAAA,aAAa,6DAIZ;YAGD,uLAAA,YAAY,6DAIX;YAGD,6LAAA,cAAc,6DAMb;YAGD,6LAAA,cAAc,6DAKb;YAGD,+MAAA,oBAAoB,6DAMnB;YAGD,uLAAA,YAAY,6DAIX;YAGD,oLAAA,WAAW,6DAMV;;;QAjFD,0DAA0D;QAC1D,oFAAoF;QACpF,qCAAqC;QACrC,MAAM,CAAC,MAAM,GAAG,CAAC,mBAAmB,EAAE,UAAU,EAAE,oBAAoB,CAAC,CAAC;QAEvD,MAAM,GANZ,mDAAqB,CAMe;QAE/C;;;;WAIG;QACH,YAAY,GAAY,EAAE,MAA0B;YAClD,KAAK,CAAC,GAAG,EAAE,iBAAiB,CAAC,CAAC;YAC9B,IAAI,CAAC,MAAM,GAAG,8BAA8B,CAC1C,qBAAqB,CAAC;gBACpB,GAAG,EAAE,IAAI,kBAAkB,CAAC,GAAmC,CAAC;gBAChE,OAAO,EAAE,MAAM,CAAC,OAAO;aACxB,CAAC,CACH,CAAC;QACJ,CAAC;QAED,sDAAsD;QACtD,oDAAoD;QACpD,gFAAgF;QAChF,uFAAuF;QACvF,uCAAuC;QAEvC,aAAa,CAAC,KAEb;YACC,OAAO,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;QAC1C,CAAC;QAGD,YAAY,CAAC,KAEZ;YACC,OAAO,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;QACzC,CAAC;QAGD,cAAc,CAAC,KAId;YACC,OAAO,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;QAC3C,CAAC;QAGD,cAAc,CAAC,KAGd;YACC,OAAO,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;QAC3C,CAAC;QAGD,oBAAoB,CAAC,KAIpB;YACC,OAAO,IAAI,CAAC,MAAM,CAAC,oBAAoB,CAAC,KAAK,CAAC,CAAC;QACjD,CAAC;QAGD,YAAY,CAAC,KAEZ;YACC,OAAO,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;QACzC,CAAC;QAGD,WAAW,CAAC,KAIX;YACC,OAAO,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;QACxC,CAAC;;;SAlFU,qBAAqB;AAqFlC,eAAe,qBAAqB,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { WorktreeManagerOptions } from './types.js';
|
|
2
|
+
import type { GitWorktreeAdapter, SidecarStore } from '../provider/types.js';
|
|
3
|
+
/** Internal Manage composition context shared by the responsibility-specific use-case modules. */
|
|
4
|
+
export interface WorktreeManagerContext {
|
|
5
|
+
readonly dsh: WorktreeManagerOptions['dsh'];
|
|
6
|
+
readonly dshHome: string;
|
|
7
|
+
readonly git: GitWorktreeAdapter;
|
|
8
|
+
readonly sidecar: SidecarStore;
|
|
9
|
+
readonly idFactory: () => string;
|
|
10
|
+
}
|
|
11
|
+
//# sourceMappingURL=manager-context.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"manager-context.d.ts","sourceRoot":"","sources":["../../src/manage/manager-context.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,YAAY,CAAC;AACzD,OAAO,KAAK,EAAE,kBAAkB,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAE7E,kGAAkG;AAClG,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,GAAG,EAAE,sBAAsB,CAAC,KAAK,CAAC,CAAC;IAC5C,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,GAAG,EAAE,kBAAkB,CAAC;IACjC,QAAQ,CAAC,OAAO,EAAE,YAAY,CAAC;IAC/B,QAAQ,CAAC,SAAS,EAAE,MAAM,MAAM,CAAC;CAClC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"manager-context.js","sourceRoot":"","sources":["../../src/manage/manager-context.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import type { SessionBinding, WorkspaceId } from '../contract/index.js';
|
|
2
|
+
import type { WorktreeManagerContext } from './manager-context.js';
|
|
3
|
+
/** Return active/detached Session relations for one Workspace. */
|
|
4
|
+
export declare function listBindings(context: WorktreeManagerContext, input: {
|
|
5
|
+
readonly workspaceId: WorkspaceId;
|
|
6
|
+
}): Promise<readonly SessionBinding[]>;
|
|
7
|
+
/** Bind a DSH-created Session whose cwd already targets the Worktree. */
|
|
8
|
+
export declare function bindSession(context: WorktreeManagerContext, input: {
|
|
9
|
+
readonly workspaceId: WorkspaceId;
|
|
10
|
+
readonly worktreeId: string;
|
|
11
|
+
readonly sessionId: string;
|
|
12
|
+
}): Promise<SessionBinding>;
|
|
13
|
+
/** Derive one execution cwd from the current Workspace and binding projection. */
|
|
14
|
+
export declare function resolveRuntimeCwd(context: WorktreeManagerContext, input: {
|
|
15
|
+
readonly workspaceId: WorkspaceId;
|
|
16
|
+
readonly sessionId: string;
|
|
17
|
+
}): Promise<string>;
|
|
18
|
+
//# sourceMappingURL=manager-sessions.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"manager-sessions.d.ts","sourceRoot":"","sources":["../../src/manage/manager-sessions.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAExE,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AAGnE,kEAAkE;AAClE,wBAAsB,YAAY,CAChC,OAAO,EAAE,sBAAsB,EAC/B,KAAK,EAAE;IAAE,QAAQ,CAAC,WAAW,EAAE,WAAW,CAAA;CAAE,GAC3C,OAAO,CAAC,SAAS,cAAc,EAAE,CAAC,CAGpC;AAED,yEAAyE;AACzE,wBAAsB,WAAW,CAC/B,OAAO,EAAE,sBAAsB,EAC/B,KAAK,EAAE;IAAE,QAAQ,CAAC,WAAW,EAAE,WAAW,CAAC;IAAC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;CAAE,GACpG,OAAO,CAAC,cAAc,CAAC,CAoDzB;AAED,kFAAkF;AAClF,wBAAsB,iBAAiB,CACrC,OAAO,EAAE,sBAAsB,EAC/B,KAAK,EAAE;IAAE,QAAQ,CAAC,WAAW,EAAE,WAAW,CAAC;IAAC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;CAAE,GACvE,OAAO,CAAC,MAAM,CAAC,CAgCjB"}
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
import { providerError } from '../provider/types.js';
|
|
2
|
+
import { assertSessionMatchesWorkspace, isDirectory, requireWorkspace } from './manager-support.js';
|
|
3
|
+
/** Return active/detached Session relations for one Workspace. */
|
|
4
|
+
export async function listBindings(context, input) {
|
|
5
|
+
await requireWorkspace(context, input.workspaceId);
|
|
6
|
+
return (await context.sidecar.read(input.workspaceId)).bindings;
|
|
7
|
+
}
|
|
8
|
+
/** Bind a DSH-created Session whose cwd already targets the Worktree. */
|
|
9
|
+
export async function bindSession(context, input) {
|
|
10
|
+
const workspace = await requireWorkspace(context, input.workspaceId);
|
|
11
|
+
// Duplicate checks, DSH fact validation, and append happen in one serialized mutation.
|
|
12
|
+
return context.sidecar.mutate(input.workspaceId, async (snapshot) => {
|
|
13
|
+
const worktree = snapshot.worktrees.find((candidate) => candidate.worktreeId === input.worktreeId);
|
|
14
|
+
if (!worktree) {
|
|
15
|
+
throw providerError('WORKTREE_NOT_FOUND', `Worktree not found: ${input.worktreeId}`, {
|
|
16
|
+
workspaceId: input.workspaceId,
|
|
17
|
+
worktreeId: input.worktreeId,
|
|
18
|
+
});
|
|
19
|
+
}
|
|
20
|
+
if (worktree.status === 'removed') {
|
|
21
|
+
throw providerError('WORKTREE_REMOVED', `Worktree has been removed: ${input.worktreeId}`, {
|
|
22
|
+
workspaceId: input.workspaceId,
|
|
23
|
+
worktreeId: input.worktreeId,
|
|
24
|
+
});
|
|
25
|
+
}
|
|
26
|
+
const existing = snapshot.bindings.find((binding) => binding.sessionId === input.sessionId);
|
|
27
|
+
if (existing) {
|
|
28
|
+
if (existing.worktreeId === input.worktreeId && existing.status === 'active') {
|
|
29
|
+
// Exact retries do not write; detached history is never implicitly reactivated.
|
|
30
|
+
return { result: existing, snapshot, changed: false };
|
|
31
|
+
}
|
|
32
|
+
throw providerError('SESSION_ALREADY_BOUND', `Session is already bound to Worktree ${existing.worktreeId}`, {
|
|
33
|
+
sessionId: input.sessionId,
|
|
34
|
+
worktreeId: existing.worktreeId,
|
|
35
|
+
});
|
|
36
|
+
}
|
|
37
|
+
// Session identity, Workspace ownership, and cwd come from DSH; validation never writes corrections back.
|
|
38
|
+
const session = await context.dsh.getSession(input.sessionId);
|
|
39
|
+
if (!session) {
|
|
40
|
+
throw providerError('SESSION_NOT_FOUND', `Session not found: ${input.sessionId}`, {
|
|
41
|
+
sessionId: input.sessionId,
|
|
42
|
+
});
|
|
43
|
+
}
|
|
44
|
+
assertSessionMatchesWorkspace(session, workspace, worktree);
|
|
45
|
+
const binding = {
|
|
46
|
+
workspaceId: input.workspaceId,
|
|
47
|
+
worktreeId: input.worktreeId,
|
|
48
|
+
sessionId: input.sessionId,
|
|
49
|
+
status: 'active',
|
|
50
|
+
};
|
|
51
|
+
return {
|
|
52
|
+
result: binding,
|
|
53
|
+
// Worktree Session groups render bindings in sidecar order; prepend the newly created Session.
|
|
54
|
+
snapshot: { ...snapshot, bindings: [binding, ...snapshot.bindings] },
|
|
55
|
+
};
|
|
56
|
+
});
|
|
57
|
+
}
|
|
58
|
+
/** Derive one execution cwd from the current Workspace and binding projection. */
|
|
59
|
+
export async function resolveRuntimeCwd(context, input) {
|
|
60
|
+
const workspace = await requireWorkspace(context, input.workspaceId);
|
|
61
|
+
const snapshot = await context.sidecar.read(input.workspaceId);
|
|
62
|
+
const binding = snapshot.bindings.find((candidate) => candidate.sessionId === input.sessionId);
|
|
63
|
+
// Detached is a safe main fallback; a broken active relation fails explicitly below.
|
|
64
|
+
if (!binding || binding.status === 'detached')
|
|
65
|
+
return workspace.rootPath;
|
|
66
|
+
const worktree = snapshot.worktrees.find((candidate) => candidate.worktreeId === binding.worktreeId);
|
|
67
|
+
if (!worktree) {
|
|
68
|
+
throw providerError('WORKTREE_NOT_FOUND', `Active binding points to a missing Worktree: ${binding.worktreeId}`, {
|
|
69
|
+
workspaceId: input.workspaceId,
|
|
70
|
+
worktreeId: binding.worktreeId,
|
|
71
|
+
sessionId: input.sessionId,
|
|
72
|
+
});
|
|
73
|
+
}
|
|
74
|
+
if (worktree.status !== 'active') {
|
|
75
|
+
throw providerError('WORKTREE_REMOVED', `Active binding points to a removed Worktree: ${worktree.worktreeId}`, {
|
|
76
|
+
workspaceId: input.workspaceId,
|
|
77
|
+
worktreeId: worktree.worktreeId,
|
|
78
|
+
sessionId: input.sessionId,
|
|
79
|
+
});
|
|
80
|
+
}
|
|
81
|
+
if (!(await isDirectory(worktree.absolutePath))) {
|
|
82
|
+
throw providerError('WORKTREE_NOT_FOUND', `Active Worktree path does not exist: ${worktree.absolutePath}`, {
|
|
83
|
+
workspaceId: input.workspaceId,
|
|
84
|
+
worktreeId: worktree.worktreeId,
|
|
85
|
+
sessionId: input.sessionId,
|
|
86
|
+
absolutePath: worktree.absolutePath,
|
|
87
|
+
});
|
|
88
|
+
}
|
|
89
|
+
return worktree.absolutePath;
|
|
90
|
+
}
|
|
91
|
+
//# sourceMappingURL=manager-sessions.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"manager-sessions.js","sourceRoot":"","sources":["../../src/manage/manager-sessions.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import type { WorktreeRecord } from '../contract/index.js';
|
|
2
|
+
import { type DshSessionSummary, type DshWorkspaceSummary, type SidecarSnapshot, WorktreeProviderError } from '../provider/types.js';
|
|
3
|
+
import type { WorktreeManagerContext } from './manager-context.js';
|
|
4
|
+
export declare function isSameOrInside(parent: string, candidate: string): boolean;
|
|
5
|
+
export declare function isDirectory(filePath: string): Promise<boolean>;
|
|
6
|
+
export declare function pathExists(filePath: string): Promise<boolean>;
|
|
7
|
+
export declare function samePhysicalPath(left: string, right: string): Promise<boolean>;
|
|
8
|
+
export declare function rejectSymlink(filePath: string, label: string): Promise<void>;
|
|
9
|
+
export declare function asGitError(operation: string, workspaceRoot: string, targetPath: string | undefined, error: unknown): WorktreeProviderError;
|
|
10
|
+
export declare function asSidecarError(error: unknown, workspaceId: string): WorktreeProviderError;
|
|
11
|
+
export declare function describeError(error: unknown): string;
|
|
12
|
+
export declare function generatedId(idFactory: () => string): string;
|
|
13
|
+
export declare function requireWorkspace(context: WorktreeManagerContext, workspaceId: string): Promise<DshWorkspaceSummary>;
|
|
14
|
+
export declare function validateGeneratedPath(context: WorktreeManagerContext, workspaceRoot: string, targetPath: string, worktreeId: string): void;
|
|
15
|
+
export declare function validatePhysicalGeneratedPath(context: WorktreeManagerContext, workspaceRoot: string, targetPath: string): Promise<void>;
|
|
16
|
+
export declare function assertSessionMatchesWorkspace(session: DshSessionSummary, workspace: DshWorkspaceSummary, worktree: WorktreeRecord): void;
|
|
17
|
+
export type { SidecarSnapshot };
|
|
18
|
+
//# sourceMappingURL=manager-support.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"manager-support.d.ts","sourceRoot":"","sources":["../../src/manage/manager-support.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAC3D,OAAO,EACL,KAAK,iBAAiB,EACtB,KAAK,mBAAmB,EACxB,KAAK,eAAe,EACpB,qBAAqB,EAGtB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AAInE,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAGzE;AAED,wBAAsB,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAOpE;AAED,wBAAsB,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAQnE;AAID,wBAAsB,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAMpF;AAID,wBAAsB,aAAa,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAelF;AAED,wBAAgB,UAAU,CACxB,SAAS,EAAE,MAAM,EACjB,aAAa,EAAE,MAAM,EACrB,UAAU,EAAE,MAAM,GAAG,SAAS,EAC9B,KAAK,EAAE,OAAO,GACb,qBAAqB,CAOvB;AAED,wBAAgB,cAAc,CAAC,KAAK,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,GAAG,qBAAqB,CAMzF;AAED,wBAAgB,aAAa,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAEpD;AAED,wBAAgB,WAAW,CAAC,SAAS,EAAE,MAAM,MAAM,GAAG,MAAM,CAM3D;AAED,wBAAsB,gBAAgB,CACpC,OAAO,EAAE,sBAAsB,EAC/B,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC,mBAAmB,CAAC,CAyB9B;AAID,wBAAgB,qBAAqB,CACnC,OAAO,EAAE,sBAAsB,EAC/B,aAAa,EAAE,MAAM,EACrB,UAAU,EAAE,MAAM,EAClB,UAAU,EAAE,MAAM,GACjB,IAAI,CASN;AAID,wBAAsB,6BAA6B,CACjD,OAAO,EAAE,sBAAsB,EAC/B,aAAa,EAAE,MAAM,EACrB,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,IAAI,CAAC,CAwBf;AAID,wBAAgB,6BAA6B,CAC3C,OAAO,EAAE,iBAAiB,EAC1B,SAAS,EAAE,mBAAmB,EAC9B,QAAQ,EAAE,cAAc,GACvB,IAAI,CAkBN;AAED,YAAY,EAAE,eAAe,EAAE,CAAC"}
|
|
@@ -0,0 +1,174 @@
|
|
|
1
|
+
import { lstat, realpath, stat } from 'node:fs/promises';
|
|
2
|
+
import path from 'node:path';
|
|
3
|
+
import { isWorktreeProviderError, providerError, } from '../provider/types.js';
|
|
4
|
+
// 这是词法边界检查,既接受 parent 本身也接受其后代;物理路径边界会在后续单独校验。
|
|
5
|
+
// This is a lexical boundary check that accepts parent itself and descendants; physical boundaries are validated separately later.
|
|
6
|
+
export function isSameOrInside(parent, candidate) {
|
|
7
|
+
const relative = path.relative(parent, candidate);
|
|
8
|
+
return relative === '' || (!relative.startsWith(`..${path.sep}`) && relative !== '..' && !path.isAbsolute(relative));
|
|
9
|
+
}
|
|
10
|
+
export async function isDirectory(filePath) {
|
|
11
|
+
try {
|
|
12
|
+
return (await stat(filePath)).isDirectory();
|
|
13
|
+
}
|
|
14
|
+
catch (error) {
|
|
15
|
+
if (error.code === 'ENOENT')
|
|
16
|
+
return false;
|
|
17
|
+
throw error;
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
export async function pathExists(filePath) {
|
|
21
|
+
try {
|
|
22
|
+
await stat(filePath);
|
|
23
|
+
return true;
|
|
24
|
+
}
|
|
25
|
+
catch (error) {
|
|
26
|
+
if (error.code === 'ENOENT')
|
|
27
|
+
return false;
|
|
28
|
+
throw error;
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
// 优先比较 canonical path 以覆盖符号链接/路径别名;无法 canonicalize 时退回绝对词法比较。
|
|
32
|
+
// Prefer canonical paths to cover symlinks and aliases; fall back to absolute lexical comparison when canonicalization is unavailable.
|
|
33
|
+
export async function samePhysicalPath(left, right) {
|
|
34
|
+
try {
|
|
35
|
+
return (await realpath(left)) === (await realpath(right));
|
|
36
|
+
}
|
|
37
|
+
catch {
|
|
38
|
+
return path.resolve(left) === path.resolve(right);
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
// 已存在的受信边界不允许是 symlink,避免后续创建绕过 DSH Home 的物理目录约束。
|
|
42
|
+
// Existing trusted boundaries may not be symlinks, preventing later creation from escaping the physical DSH Home boundary.
|
|
43
|
+
export async function rejectSymlink(filePath, label) {
|
|
44
|
+
try {
|
|
45
|
+
if ((await lstat(filePath)).isSymbolicLink()) {
|
|
46
|
+
throw providerError('GIT_OPERATION_FAILED', `${label} must not be a symlink: ${filePath}`, {
|
|
47
|
+
path: filePath,
|
|
48
|
+
});
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
catch (error) {
|
|
52
|
+
if (error.code === 'ENOENT')
|
|
53
|
+
return;
|
|
54
|
+
if (isWorktreeProviderError(error))
|
|
55
|
+
throw error;
|
|
56
|
+
throw providerError('GIT_OPERATION_FAILED', `Unable to inspect ${label}: ${filePath}`, {
|
|
57
|
+
path: filePath,
|
|
58
|
+
cause: String(error),
|
|
59
|
+
});
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
export function asGitError(operation, workspaceRoot, targetPath, error) {
|
|
63
|
+
if (isWorktreeProviderError(error))
|
|
64
|
+
return error;
|
|
65
|
+
return providerError('GIT_OPERATION_FAILED', `Git ${operation} failed: ${String(error)}`, {
|
|
66
|
+
workspaceRoot,
|
|
67
|
+
...(targetPath ? { targetPath } : {}),
|
|
68
|
+
operation,
|
|
69
|
+
});
|
|
70
|
+
}
|
|
71
|
+
export function asSidecarError(error, workspaceId) {
|
|
72
|
+
if (isWorktreeProviderError(error))
|
|
73
|
+
return error;
|
|
74
|
+
return providerError('SIDECAR_UNAVAILABLE', `Sidecar operation failed for Workspace ${workspaceId}`, {
|
|
75
|
+
workspaceId,
|
|
76
|
+
cause: String(error),
|
|
77
|
+
});
|
|
78
|
+
}
|
|
79
|
+
export function describeError(error) {
|
|
80
|
+
return error instanceof Error ? error.message : String(error);
|
|
81
|
+
}
|
|
82
|
+
export function generatedId(idFactory) {
|
|
83
|
+
const worktreeId = idFactory();
|
|
84
|
+
if (!/^[A-Za-z0-9][A-Za-z0-9._-]*$/.test(worktreeId)) {
|
|
85
|
+
throw providerError('GIT_OPERATION_FAILED', 'Provider generated an invalid Worktree ID', { worktreeId });
|
|
86
|
+
}
|
|
87
|
+
return worktreeId;
|
|
88
|
+
}
|
|
89
|
+
export async function requireWorkspace(context, workspaceId) {
|
|
90
|
+
const workspace = await context.dsh.getWorkspace(workspaceId);
|
|
91
|
+
if (!workspace || workspace.workspaceId !== workspaceId || !path.isAbsolute(workspace.rootPath)) {
|
|
92
|
+
throw providerError('WORKSPACE_NOT_FOUND', `Workspace is missing or has a non-absolute root: ${workspaceId}`, {
|
|
93
|
+
workspaceId,
|
|
94
|
+
rootPath: workspace?.rootPath ?? '',
|
|
95
|
+
});
|
|
96
|
+
}
|
|
97
|
+
const rootPath = path.resolve(workspace.rootPath);
|
|
98
|
+
if (!(await isDirectory(rootPath))) {
|
|
99
|
+
throw providerError('WORKSPACE_NOT_FOUND', `Workspace root does not exist: ${rootPath}`, {
|
|
100
|
+
workspaceId,
|
|
101
|
+
rootPath,
|
|
102
|
+
});
|
|
103
|
+
}
|
|
104
|
+
try {
|
|
105
|
+
await realpath(rootPath);
|
|
106
|
+
}
|
|
107
|
+
catch (error) {
|
|
108
|
+
throw providerError('WORKSPACE_NOT_FOUND', `Unable to resolve Workspace root: ${rootPath}`, {
|
|
109
|
+
workspaceId,
|
|
110
|
+
rootPath,
|
|
111
|
+
cause: String(error),
|
|
112
|
+
});
|
|
113
|
+
}
|
|
114
|
+
return { ...workspace, rootPath };
|
|
115
|
+
}
|
|
116
|
+
// 第一层使用未解析路径验证目标属于插件根且不位于 Workspace 内。
|
|
117
|
+
// The first layer uses unresolved paths to ensure the target belongs to the plugin root and is not inside the Workspace.
|
|
118
|
+
export function validateGeneratedPath(context, workspaceRoot, targetPath, worktreeId) {
|
|
119
|
+
const pluginRoot = path.resolve(context.dshHome, 'clutch-dsh-worktree');
|
|
120
|
+
if (!isSameOrInside(pluginRoot, targetPath) || isSameOrInside(workspaceRoot, targetPath)) {
|
|
121
|
+
throw providerError('GIT_OPERATION_FAILED', 'Generated Worktree path is outside the allowed boundary', {
|
|
122
|
+
workspaceRoot,
|
|
123
|
+
targetPath,
|
|
124
|
+
worktreeId,
|
|
125
|
+
});
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
// 第二层拒绝受信祖先 symlink,并以 realpath 后的根重新计算目标,防止物理路径逃逸。
|
|
129
|
+
// The second layer rejects symlinked trusted ancestors and recomputes the target from the realpath root to prevent physical path escape.
|
|
130
|
+
export async function validatePhysicalGeneratedPath(context, workspaceRoot, targetPath) {
|
|
131
|
+
await rejectSymlink(context.dshHome, 'DSH Home');
|
|
132
|
+
await rejectSymlink(path.join(context.dshHome, 'clutch-dsh-worktree'), 'plugin sidecar root');
|
|
133
|
+
await rejectSymlink(path.join(context.dshHome, 'clutch-dsh-worktree', 'worktree'), 'Worktree root');
|
|
134
|
+
let canonicalDshHome;
|
|
135
|
+
try {
|
|
136
|
+
canonicalDshHome = await realpath(context.dshHome);
|
|
137
|
+
}
|
|
138
|
+
catch (error) {
|
|
139
|
+
throw providerError('SIDECAR_UNAVAILABLE', `Unable to resolve DSH Home: ${context.dshHome}`, {
|
|
140
|
+
dshHome: context.dshHome,
|
|
141
|
+
cause: String(error),
|
|
142
|
+
});
|
|
143
|
+
}
|
|
144
|
+
const targetRelativeToDshHome = path.relative(context.dshHome, targetPath);
|
|
145
|
+
const canonicalTarget = path.resolve(canonicalDshHome, targetRelativeToDshHome);
|
|
146
|
+
const canonicalWorkspace = await realpath(workspaceRoot);
|
|
147
|
+
if (!isSameOrInside(canonicalDshHome, canonicalTarget) || isSameOrInside(canonicalWorkspace, canonicalTarget)) {
|
|
148
|
+
throw providerError('GIT_OPERATION_FAILED', 'Generated Worktree path crosses a physical boundary', {
|
|
149
|
+
workspaceRoot: canonicalWorkspace,
|
|
150
|
+
dshHome: canonicalDshHome,
|
|
151
|
+
targetPath: canonicalTarget,
|
|
152
|
+
});
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
// 绑定只接受 DSH 已按目标 Worktree cwd 创建的 Session;Manager 不替用户迁移或改写 Session。
|
|
156
|
+
// Binding accepts only Sessions already created by DSH with the target Worktree cwd; the Manager never migrates or rewrites a Session.
|
|
157
|
+
export function assertSessionMatchesWorkspace(session, workspace, worktree) {
|
|
158
|
+
if ((session.workspaceId !== undefined && session.workspaceId !== workspace.workspaceId) ||
|
|
159
|
+
(session.projectId !== undefined &&
|
|
160
|
+
workspace.projectId !== undefined &&
|
|
161
|
+
session.projectId !== workspace.projectId) ||
|
|
162
|
+
!path.isAbsolute(session.cwd) ||
|
|
163
|
+
path.resolve(session.cwd) !== path.resolve(worktree.absolutePath)) {
|
|
164
|
+
throw providerError('SESSION_CWD_MISMATCH', `Session cwd or Workspace association does not match Worktree`, {
|
|
165
|
+
sessionId: session.sessionId,
|
|
166
|
+
workspaceId: workspace.workspaceId,
|
|
167
|
+
expectedCwd: worktree.absolutePath,
|
|
168
|
+
actualCwd: session.cwd,
|
|
169
|
+
sessionWorkspaceId: session.workspaceId ?? '',
|
|
170
|
+
sessionProjectId: session.projectId ?? '',
|
|
171
|
+
});
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
//# sourceMappingURL=manager-support.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"manager-support.js","sourceRoot":"","sources":["../../src/manage/manager-support.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import type { BranchRecord, WorktreeId, WorktreeRecord, WorkspaceId } from '../contract/index.js';
|
|
2
|
+
import type { WorktreeManagerContext } from './manager-context.js';
|
|
3
|
+
/** Return the sidecar Worktree projection with runtime Git health attached. */
|
|
4
|
+
export declare function listWorktrees(context: WorktreeManagerContext, input: {
|
|
5
|
+
readonly workspaceId: WorkspaceId;
|
|
6
|
+
}): Promise<readonly WorktreeRecord[]>;
|
|
7
|
+
/** Project local branches against all Git worktrees and mark checkout/current state. */
|
|
8
|
+
export declare function listBranches(context: WorktreeManagerContext, input: {
|
|
9
|
+
readonly workspaceId: WorkspaceId;
|
|
10
|
+
}): Promise<readonly BranchRecord[]>;
|
|
11
|
+
/** Create a Git Worktree first, then commit its external relation to the sidecar. */
|
|
12
|
+
export declare function createWorktree(context: WorktreeManagerContext, input: {
|
|
13
|
+
readonly workspaceId: WorkspaceId;
|
|
14
|
+
readonly branch: string;
|
|
15
|
+
readonly newBranch?: string;
|
|
16
|
+
}): Promise<WorktreeRecord>;
|
|
17
|
+
/** Remove Git state first, then mark the relation removed while preserving detached bindings. */
|
|
18
|
+
export declare function removeWorktree(context: WorktreeManagerContext, input: {
|
|
19
|
+
readonly workspaceId: WorkspaceId;
|
|
20
|
+
readonly worktreeId: string;
|
|
21
|
+
}): Promise<void>;
|
|
22
|
+
export declare function insertWorktreeBefore(context: WorktreeManagerContext, input: {
|
|
23
|
+
readonly workspaceId: WorkspaceId;
|
|
24
|
+
readonly worktreeId: WorktreeId;
|
|
25
|
+
readonly beforeWorktreeId?: WorktreeId;
|
|
26
|
+
}): Promise<readonly WorktreeId[]>;
|
|
27
|
+
//# sourceMappingURL=manager-worktrees.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"manager-worktrees.d.ts","sourceRoot":"","sources":["../../src/manage/manager-worktrees.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,YAAY,EAAE,UAAU,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAElG,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AAanE,+EAA+E;AAC/E,wBAAsB,aAAa,CACjC,OAAO,EAAE,sBAAsB,EAC/B,KAAK,EAAE;IAAE,QAAQ,CAAC,WAAW,EAAE,WAAW,CAAA;CAAE,GAC3C,OAAO,CAAC,SAAS,cAAc,EAAE,CAAC,CAoCpC;AAED,wFAAwF;AACxF,wBAAsB,YAAY,CAChC,OAAO,EAAE,sBAAsB,EAC/B,KAAK,EAAE;IAAE,QAAQ,CAAC,WAAW,EAAE,WAAW,CAAA;CAAE,GAC3C,OAAO,CAAC,SAAS,YAAY,EAAE,CAAC,CAsBlC;AAED,qFAAqF;AACrF,wBAAsB,cAAc,CAClC,OAAO,EAAE,sBAAsB,EAC/B,KAAK,EAAE;IAAE,QAAQ,CAAC,WAAW,EAAE,WAAW,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,GACjG,OAAO,CAAC,cAAc,CAAC,CAqIzB;AAED,iGAAiG;AACjG,wBAAsB,cAAc,CAClC,OAAO,EAAE,sBAAsB,EAC/B,KAAK,EAAE;IAAE,QAAQ,CAAC,WAAW,EAAE,WAAW,CAAC;IAAC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAA;CAAE,GACxE,OAAO,CAAC,IAAI,CAAC,CAuEf;AAED,wBAAsB,oBAAoB,CACxC,OAAO,EAAE,sBAAsB,EAC/B,KAAK,EAAE;IAAE,QAAQ,CAAC,WAAW,EAAE,WAAW,CAAC;IAAC,QAAQ,CAAC,UAAU,EAAE,UAAU,CAAC;IAAC,QAAQ,CAAC,gBAAgB,CAAC,EAAE,UAAU,CAAA;CAAE,GACpH,OAAO,CAAC,SAAS,UAAU,EAAE,CAAC,CAWhC"}
|