@cerbur/clutch-dsh-worktree 0.1.2 → 0.1.3
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 +20 -5
- 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 -1
- package/lib/client/WorktreeSurface.d.ts.map +1 -1
- package/lib/client/WorktreeSurface.js +200 -57
- 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-view.d.ts +37 -3
- package/lib/client/worktree-view.d.ts.map +1 -1
- package/lib/client/worktree-view.js +145 -7
- package/lib/client/worktree-view.js.map +1 -1
- package/lib/client.js +1003 -133
- 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.d.ts +6 -1
- package/lib/manage/manager.d.ts.map +1 -1
- package/lib/manage/manager.js +12 -1
- package/lib/manage/manager.js.map +1 -1
- package/lib/provider/sidecar.d.ts +2 -1
- package/lib/provider/sidecar.d.ts.map +1 -1
- package/lib/provider/sidecar.js +40 -0
- 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
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
const none = (reason) => ({
|
|
2
|
+
kind: 'none',
|
|
3
|
+
reason,
|
|
4
|
+
});
|
|
5
|
+
/** Resolve the branch or active Worktree label for one current DSH Session. */
|
|
6
|
+
export function resolveWorktreeSessionContext(input) {
|
|
7
|
+
const sessionId = input.currentSessionId;
|
|
8
|
+
if (sessionId === undefined && input.currentWorkspaceId === undefined)
|
|
9
|
+
return none('no-session');
|
|
10
|
+
const workspace = sessionId === undefined
|
|
11
|
+
? input.workspaces.find(({ workspaceId }) => workspaceId === input.currentWorkspaceId)
|
|
12
|
+
: input.workspaces.find(({ sessionIds }) => sessionIds.includes(sessionId));
|
|
13
|
+
if (workspace === undefined)
|
|
14
|
+
return none('unbound');
|
|
15
|
+
const binding = sessionId === undefined
|
|
16
|
+
? undefined
|
|
17
|
+
: input.bindings.find((candidate) => candidate.sessionId === sessionId);
|
|
18
|
+
if (binding !== undefined) {
|
|
19
|
+
if (binding.workspaceId !== workspace.workspaceId)
|
|
20
|
+
return none('workspace-mismatch');
|
|
21
|
+
if (binding.status === 'detached')
|
|
22
|
+
return none('detached');
|
|
23
|
+
const record = input.worktrees.find((candidate) => candidate.worktreeId === binding.worktreeId);
|
|
24
|
+
if (record === undefined || record.workspaceId !== workspace.workspaceId) {
|
|
25
|
+
return none(record === undefined ? 'stale' : 'workspace-mismatch');
|
|
26
|
+
}
|
|
27
|
+
if (record.status !== 'active')
|
|
28
|
+
return none('stale');
|
|
29
|
+
if (record.health === 'repair')
|
|
30
|
+
return none('repair');
|
|
31
|
+
if (record.branch.length === 0)
|
|
32
|
+
return none('not-ready');
|
|
33
|
+
return {
|
|
34
|
+
kind: 'worktree',
|
|
35
|
+
workspaceId: workspace.workspaceId,
|
|
36
|
+
worktreeId: record.worktreeId,
|
|
37
|
+
label: record.branch,
|
|
38
|
+
source: 'active-binding',
|
|
39
|
+
};
|
|
40
|
+
}
|
|
41
|
+
const currentBranch = input.branches.find(({ isCurrent }) => isCurrent);
|
|
42
|
+
if (currentBranch === undefined || currentBranch.name.length === 0)
|
|
43
|
+
return none('not-ready');
|
|
44
|
+
return {
|
|
45
|
+
kind: 'main',
|
|
46
|
+
workspaceId: workspace.workspaceId,
|
|
47
|
+
label: currentBranch.name,
|
|
48
|
+
source: 'current-branch',
|
|
49
|
+
};
|
|
50
|
+
}
|
|
51
|
+
//# sourceMappingURL=worktree-context.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"worktree-context.js","sourceRoot":"","sources":["../../src/client/worktree-context.ts"],"names":[],"mappings":"AA2CA,MAAM,IAAI,GAAG,CAAC,MAAoC,EAA0B,EAAE,CAAC,CAAC;IAC9E,IAAI,EAAE,MAAM;IACZ,MAAM;CACP,CAAC,CAAC;AAEH,+EAA+E;AAC/E,MAAM,UAAU,6BAA6B,CAC3C,KAA2B;IAE3B,MAAM,SAAS,GAAG,KAAK,CAAC,gBAAgB,CAAC;IACzC,IAAI,SAAS,KAAK,SAAS,IAAI,KAAK,CAAC,kBAAkB,KAAK,SAAS;QAAE,OAAO,IAAI,CAAC,YAAY,CAAC,CAAC;IAEjG,MAAM,SAAS,GAAG,SAAS,KAAK,SAAS;QACvC,CAAC,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,EAAE,WAAW,EAAE,EAAE,EAAE,CAAC,WAAW,KAAK,KAAK,CAAC,kBAAkB,CAAC;QACtF,CAAC,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,EAAE,UAAU,EAAE,EAAE,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC;IAC9E,IAAI,SAAS,KAAK,SAAS;QAAE,OAAO,IAAI,CAAC,SAAS,CAAC,CAAC;IAEpD,MAAM,OAAO,GAAG,SAAS,KAAK,SAAS;QACrC,CAAC,CAAC,SAAS;QACX,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC;IAC1E,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;QAC1B,IAAI,OAAO,CAAC,WAAW,KAAK,SAAS,CAAC,WAAW;YAAE,OAAO,IAAI,CAAC,oBAAoB,CAAC,CAAC;QACrF,IAAI,OAAO,CAAC,MAAM,KAAK,UAAU;YAAE,OAAO,IAAI,CAAC,UAAU,CAAC,CAAC;QAE3D,MAAM,MAAM,GAAG,KAAK,CAAC,SAAS,CAAC,IAAI,CACjC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,UAAU,KAAK,OAAO,CAAC,UAAU,CAC3D,CAAC;QACF,IAAI,MAAM,KAAK,SAAS,IAAI,MAAM,CAAC,WAAW,KAAK,SAAS,CAAC,WAAW,EAAE,CAAC;YACzE,OAAO,IAAI,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,oBAAoB,CAAC,CAAC;QACrE,CAAC;QACD,IAAI,MAAM,CAAC,MAAM,KAAK,QAAQ;YAAE,OAAO,IAAI,CAAC,OAAO,CAAC,CAAC;QACrD,IAAI,MAAM,CAAC,MAAM,KAAK,QAAQ;YAAE,OAAO,IAAI,CAAC,QAAQ,CAAC,CAAC;QACtD,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,IAAI,CAAC,WAAW,CAAC,CAAC;QAEzD,OAAO;YACL,IAAI,EAAE,UAAU;YAChB,WAAW,EAAE,SAAS,CAAC,WAAW;YAClC,UAAU,EAAE,MAAM,CAAC,UAAU;YAC7B,KAAK,EAAE,MAAM,CAAC,MAAM;YACpB,MAAM,EAAE,gBAAgB;SACzB,CAAC;IACJ,CAAC;IAED,MAAM,aAAa,GAAG,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,EAAE,SAAS,EAAE,EAAE,EAAE,CAAC,SAAS,CAAC,CAAC;IACxE,IAAI,aAAa,KAAK,SAAS,IAAI,aAAa,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC,WAAW,CAAC,CAAC;IAE7F,OAAO;QACL,IAAI,EAAE,MAAM;QACZ,WAAW,EAAE,SAAS,CAAC,WAAW;QAClC,KAAK,EAAE,aAAa,CAAC,IAAI;QACzB,MAAM,EAAE,gBAAgB;KACzB,CAAC;AACJ,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"worktree-error-copy.d.ts","sourceRoot":"","sources":["../../src/client/worktree-error-copy.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kCAAkC,CAAC;AACpE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAC5D,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAE3C,KAAK,iBAAiB,GAAG,WAAW,CAAC,OAAO,WAAW,CAAC,CAAC;AAWzD,wBAAgB,uBAAuB,CACrC,KAAK,EAAE,iBAAiB,EACxB,CAAC,EAAE,iBAAiB,GACnB,MAAM,
|
|
1
|
+
{"version":3,"file":"worktree-error-copy.d.ts","sourceRoot":"","sources":["../../src/client/worktree-error-copy.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kCAAkC,CAAC;AACpE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAC5D,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAE3C,KAAK,iBAAiB,GAAG,WAAW,CAAC,OAAO,WAAW,CAAC,CAAC;AAWzD,wBAAgB,uBAAuB,CACrC,KAAK,EAAE,iBAAiB,EACxB,CAAC,EAAE,iBAAiB,GACnB,MAAM,CAiDR"}
|
|
@@ -20,6 +20,8 @@ export function formatWorktreeViewError(error, t) {
|
|
|
20
20
|
return t('error.workspaceOrderingUnavailable');
|
|
21
21
|
case 'SESSION_ORDER_UNAVAILABLE':
|
|
22
22
|
return t('error.sessionOrderingUnavailable');
|
|
23
|
+
case 'WORKTREE_ORDER_UNAVAILABLE':
|
|
24
|
+
return t('error.worktreeOrderingUnavailable');
|
|
23
25
|
case 'SESSION_CREATE_UNAVAILABLE':
|
|
24
26
|
return t('error.sessionCreationUnavailable');
|
|
25
27
|
case 'WORKTREE_CREATED_SESSION_UNAVAILABLE':
|
|
@@ -37,6 +39,18 @@ export function formatWorktreeViewError(error, t) {
|
|
|
37
39
|
sessionId: detail(error, 'sessionId'),
|
|
38
40
|
reason: reason(error, t),
|
|
39
41
|
});
|
|
42
|
+
case 'SESSION_ALREADY_BOUND':
|
|
43
|
+
return t('error.sessionAlreadyBound');
|
|
44
|
+
case 'SESSION_LIST_NOT_READY':
|
|
45
|
+
return t('error.sessionListNotReady');
|
|
46
|
+
case 'SESSION_FACTS_INCOMPLETE':
|
|
47
|
+
return t('error.sessionFactsIncomplete');
|
|
48
|
+
case 'WORKTREE_SESSION_REPAIR_REQUIRED':
|
|
49
|
+
return t('error.worktreeSessionRepairRequired');
|
|
50
|
+
case 'WORKTREE_SESSION_UNAVAILABLE':
|
|
51
|
+
return t('error.worktreeSessionUnavailable');
|
|
52
|
+
case 'SESSION_ARCHIVED':
|
|
53
|
+
return t('error.sessionArchived');
|
|
40
54
|
default:
|
|
41
55
|
return error.message.length > 0 ? error.message : t('error.worktreeDataUnavailable');
|
|
42
56
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"worktree-error-copy.js","sourceRoot":"","sources":["../../src/client/worktree-error-copy.ts"],"names":[],"mappings":"AAMA,SAAS,MAAM,CAAC,KAAwB,EAAE,IAAY;IACpD,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,CAAC;IACpC,OAAO,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;AAChD,CAAC;AAED,SAAS,MAAM,CAAC,KAAwB,EAAE,CAAoB;IAC5D,OAAO,KAAK,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,+BAA+B,CAAC,CAAC;AACvF,CAAC;AAED,MAAM,UAAU,uBAAuB,CACrC,KAAwB,EACxB,CAAoB;IAEpB,QAAQ,KAAK,CAAC,IAAI,EAAE,CAAC;QACnB,KAAK,iBAAiB;YACpB,OAAO,CAAC,CAAC,0BAA0B,CAAC,CAAC;QACvC,KAAK,wBAAwB;YAC3B,OAAO,CAAC,CAAC,wBAAwB,EAAE;gBACjC,QAAQ,EAAE,MAAM,CAAC,KAAK,EAAE,UAAU,CAAC;gBACnC,MAAM,EAAE,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;aACzB,CAAC,CAAC;QACL,KAAK,6BAA6B;YAChC,OAAO,CAAC,CAAC,qBAAqB,EAAE,EAAE,QAAQ,EAAE,MAAM,CAAC,KAAK,EAAE,UAAU,CAAC,EAAE,CAAC,CAAC;QAC3E,KAAK,6BAA6B;YAChC,OAAO,CAAC,CAAC,oCAAoC,CAAC,CAAC;QACjD,KAAK,2BAA2B;YAC9B,OAAO,CAAC,CAAC,kCAAkC,CAAC,CAAC;QAC/C,KAAK,4BAA4B;YAC/B,OAAO,CAAC,CAAC,kCAAkC,CAAC,CAAC;QAC/C,KAAK,sCAAsC;YACzC,OAAO,CAAC,CAAC,yCAAyC,CAAC,CAAC;QACtD,KAAK,yBAAyB;YAC5B,OAAO,CAAC,CAAC,6BAA6B,CAAC,CAAC;QAC1C,KAAK,8BAA8B;YACjC,OAAO,CAAC,CAAC,kCAAkC,CAAC,CAAC;QAC/C,KAAK,8BAA8B;YACjC,OAAO,CAAC,CAAC,kCAAkC,CAAC,CAAC;QAC/C,KAAK,4BAA4B;YAC/B,OAAO,CAAC,CAAC,gCAAgC,CAAC,CAAC;QAC7C,KAAK,wBAAwB;YAC3B,OAAO,CAAC,CAAC,4BAA4B,EAAE;gBACrC,SAAS,EAAE,MAAM,CAAC,KAAK,EAAE,WAAW,CAAC;gBACrC,MAAM,EAAE,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;aACzB,CAAC,CAAC;QACL;YACE,OAAO,KAAK,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,+BAA+B,CAAC,CAAC;IACzF,CAAC;AACH,CAAC"}
|
|
1
|
+
{"version":3,"file":"worktree-error-copy.js","sourceRoot":"","sources":["../../src/client/worktree-error-copy.ts"],"names":[],"mappings":"AAMA,SAAS,MAAM,CAAC,KAAwB,EAAE,IAAY;IACpD,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,CAAC;IACpC,OAAO,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;AAChD,CAAC;AAED,SAAS,MAAM,CAAC,KAAwB,EAAE,CAAoB;IAC5D,OAAO,KAAK,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,+BAA+B,CAAC,CAAC;AACvF,CAAC;AAED,MAAM,UAAU,uBAAuB,CACrC,KAAwB,EACxB,CAAoB;IAEpB,QAAQ,KAAK,CAAC,IAAI,EAAE,CAAC;QACnB,KAAK,iBAAiB;YACpB,OAAO,CAAC,CAAC,0BAA0B,CAAC,CAAC;QACvC,KAAK,wBAAwB;YAC3B,OAAO,CAAC,CAAC,wBAAwB,EAAE;gBACjC,QAAQ,EAAE,MAAM,CAAC,KAAK,EAAE,UAAU,CAAC;gBACnC,MAAM,EAAE,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;aACzB,CAAC,CAAC;QACL,KAAK,6BAA6B;YAChC,OAAO,CAAC,CAAC,qBAAqB,EAAE,EAAE,QAAQ,EAAE,MAAM,CAAC,KAAK,EAAE,UAAU,CAAC,EAAE,CAAC,CAAC;QAC3E,KAAK,6BAA6B;YAChC,OAAO,CAAC,CAAC,oCAAoC,CAAC,CAAC;QACjD,KAAK,2BAA2B;YAC9B,OAAO,CAAC,CAAC,kCAAkC,CAAC,CAAC;QAC/C,KAAK,4BAA4B;YAC/B,OAAO,CAAC,CAAC,mCAAmC,CAAC,CAAC;QAChD,KAAK,4BAA4B;YAC/B,OAAO,CAAC,CAAC,kCAAkC,CAAC,CAAC;QAC/C,KAAK,sCAAsC;YACzC,OAAO,CAAC,CAAC,yCAAyC,CAAC,CAAC;QACtD,KAAK,yBAAyB;YAC5B,OAAO,CAAC,CAAC,6BAA6B,CAAC,CAAC;QAC1C,KAAK,8BAA8B;YACjC,OAAO,CAAC,CAAC,kCAAkC,CAAC,CAAC;QAC/C,KAAK,8BAA8B;YACjC,OAAO,CAAC,CAAC,kCAAkC,CAAC,CAAC;QAC/C,KAAK,4BAA4B;YAC/B,OAAO,CAAC,CAAC,gCAAgC,CAAC,CAAC;QAC7C,KAAK,wBAAwB;YAC3B,OAAO,CAAC,CAAC,4BAA4B,EAAE;gBACrC,SAAS,EAAE,MAAM,CAAC,KAAK,EAAE,WAAW,CAAC;gBACrC,MAAM,EAAE,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;aACzB,CAAC,CAAC;QACL,KAAK,uBAAuB;YAC1B,OAAO,CAAC,CAAC,2BAA2B,CAAC,CAAC;QACxC,KAAK,wBAAwB;YAC3B,OAAO,CAAC,CAAC,2BAA2B,CAAC,CAAC;QACxC,KAAK,0BAA0B;YAC7B,OAAO,CAAC,CAAC,8BAA8B,CAAC,CAAC;QAC3C,KAAK,kCAAkC;YACrC,OAAO,CAAC,CAAC,qCAAqC,CAAC,CAAC;QAClD,KAAK,8BAA8B;YACjC,OAAO,CAAC,CAAC,kCAAkC,CAAC,CAAC;QAC/C,KAAK,kBAAkB;YACrB,OAAO,CAAC,CAAC,uBAAuB,CAAC,CAAC;QACpC;YACE,OAAO,KAAK,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,+BAA+B,CAAC,CAAC;IACzF,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
import type { SessionBinding, WorktreeHealth, WorktreeManager, WorktreeStatus } from '../contract/index.js';
|
|
2
|
+
import { type CreateSessionForWorktreeInput } from './worktree-view.js';
|
|
3
|
+
export interface WorktreeSessionSummary {
|
|
4
|
+
readonly blank?: boolean;
|
|
5
|
+
readonly cwd?: string;
|
|
6
|
+
}
|
|
7
|
+
export interface WorktreeSessionListSnapshot {
|
|
8
|
+
readonly phase: 'pending' | 'ready';
|
|
9
|
+
readonly ids: readonly string[];
|
|
10
|
+
readonly byId: Readonly<Record<string, WorktreeSessionSummary | undefined>>;
|
|
11
|
+
}
|
|
12
|
+
export interface WorktreeSessionTarget {
|
|
13
|
+
readonly workspaceId: string;
|
|
14
|
+
readonly worktreeId: string;
|
|
15
|
+
readonly absolutePath: string;
|
|
16
|
+
readonly status: WorktreeStatus;
|
|
17
|
+
readonly health?: WorktreeHealth;
|
|
18
|
+
}
|
|
19
|
+
export type WorktreeSessionAction = {
|
|
20
|
+
readonly kind: 'open-bound';
|
|
21
|
+
readonly sessionId: string;
|
|
22
|
+
} | {
|
|
23
|
+
readonly kind: 'bind-existing';
|
|
24
|
+
readonly sessionId: string;
|
|
25
|
+
} | {
|
|
26
|
+
readonly kind: 'create';
|
|
27
|
+
} | {
|
|
28
|
+
readonly kind: 'wait';
|
|
29
|
+
readonly reason: string;
|
|
30
|
+
} | {
|
|
31
|
+
readonly kind: 'repair';
|
|
32
|
+
readonly reason: string;
|
|
33
|
+
readonly sessionId?: string;
|
|
34
|
+
} | {
|
|
35
|
+
readonly kind: 'reject';
|
|
36
|
+
readonly reason: string;
|
|
37
|
+
};
|
|
38
|
+
export interface ResolveWorktreeSessionActionInput {
|
|
39
|
+
readonly target: WorktreeSessionTarget;
|
|
40
|
+
readonly sessions: WorktreeSessionListSnapshot;
|
|
41
|
+
readonly archivedSessionIds: readonly string[];
|
|
42
|
+
readonly bindings: readonly SessionBinding[];
|
|
43
|
+
}
|
|
44
|
+
export declare class WorktreeSessionActionError extends Error {
|
|
45
|
+
readonly code: string;
|
|
46
|
+
readonly retryable: boolean;
|
|
47
|
+
readonly details: Readonly<Record<string, unknown>>;
|
|
48
|
+
constructor(code: string, message: string, retryable: boolean, details?: Readonly<Record<string, unknown>>);
|
|
49
|
+
}
|
|
50
|
+
export interface WorktreeSessionSnapshotReader {
|
|
51
|
+
getSnapshot(): WorktreeSessionListSnapshot;
|
|
52
|
+
}
|
|
53
|
+
export interface WorktreeSessionConnectorOptions {
|
|
54
|
+
readonly manager: Pick<WorktreeManager, 'listWorktrees' | 'listBindings' | 'bindSession'>;
|
|
55
|
+
readonly sessions: WorktreeSessionSnapshotReader;
|
|
56
|
+
readonly archivedSessionIds: () => readonly string[];
|
|
57
|
+
readonly createSession: (input: {
|
|
58
|
+
readonly cwd: string;
|
|
59
|
+
}) => Promise<string>;
|
|
60
|
+
readonly ensureSessionWorkspace: (workspaceId: string, sessionId: string) => void;
|
|
61
|
+
readonly openSession: (sessionId: string) => void;
|
|
62
|
+
}
|
|
63
|
+
export interface WorktreeSessionConnector {
|
|
64
|
+
create(input: CreateSessionForWorktreeInput): Promise<string>;
|
|
65
|
+
dispose(): void;
|
|
66
|
+
}
|
|
67
|
+
export interface PendingWorktreeSessionBinding extends CreateSessionForWorktreeInput {
|
|
68
|
+
readonly sessionId: string;
|
|
69
|
+
}
|
|
70
|
+
export declare function resolveWorktreeSessionAction(input: ResolveWorktreeSessionActionInput): WorktreeSessionAction;
|
|
71
|
+
export declare function retryWorktreeSessionBinding(input: {
|
|
72
|
+
readonly manager: Pick<WorktreeManager, 'bindSession'>;
|
|
73
|
+
readonly pending: PendingWorktreeSessionBinding;
|
|
74
|
+
readonly archived: boolean;
|
|
75
|
+
readonly ensureSessionWorkspace: (workspaceId: string, sessionId: string) => void;
|
|
76
|
+
readonly openSession: (sessionId: string) => void;
|
|
77
|
+
}): Promise<string>;
|
|
78
|
+
/**
|
|
79
|
+
* Browser-only Worktree `+` connector. It owns the read/resolve/bind/create/open
|
|
80
|
+
* sequence and coalesces repeated calls for one Worktree within one Client fiber.
|
|
81
|
+
*/
|
|
82
|
+
export declare function createWorktreeSessionConnector(options: WorktreeSessionConnectorOptions): WorktreeSessionConnector;
|
|
83
|
+
//# sourceMappingURL=worktree-session.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"worktree-session.d.ts","sourceRoot":"","sources":["../../src/client/worktree-session.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,cAAc,EACd,cAAc,EACd,eAAe,EACf,cAAc,EACf,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAGL,KAAK,6BAA6B,EACnC,MAAM,oBAAoB,CAAC;AAE5B,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC;IACzB,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,2BAA2B;IAC1C,QAAQ,CAAC,KAAK,EAAE,SAAS,GAAG,OAAO,CAAC;IACpC,QAAQ,CAAC,GAAG,EAAE,SAAS,MAAM,EAAE,CAAC;IAChC,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,sBAAsB,GAAG,SAAS,CAAC,CAAC,CAAC;CAC7E;AAED,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,MAAM,EAAE,cAAc,CAAC;IAChC,QAAQ,CAAC,MAAM,CAAC,EAAE,cAAc,CAAC;CAClC;AAED,MAAM,MAAM,qBAAqB,GAC7B;IAAE,QAAQ,CAAC,IAAI,EAAE,YAAY,CAAC;IAAC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;CAAE,GAC3D;IAAE,QAAQ,CAAC,IAAI,EAAE,eAAe,CAAC;IAAC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;CAAE,GAC9D;IAAE,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAA;CAAE,GAC3B;IAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GAClD;IAAE,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,GACjF;IAAE,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC;AAEzD,MAAM,WAAW,iCAAiC;IAChD,QAAQ,CAAC,MAAM,EAAE,qBAAqB,CAAC;IACvC,QAAQ,CAAC,QAAQ,EAAE,2BAA2B,CAAC;IAC/C,QAAQ,CAAC,kBAAkB,EAAE,SAAS,MAAM,EAAE,CAAC;IAC/C,QAAQ,CAAC,QAAQ,EAAE,SAAS,cAAc,EAAE,CAAC;CAC9C;AAED,qBAAa,0BAA2B,SAAQ,KAAK;IAIjD,QAAQ,CAAC,IAAI,EAAE,MAAM;IAErB,QAAQ,CAAC,SAAS,EAAE,OAAO;IAL7B,QAAQ,CAAC,OAAO,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;gBAGzC,IAAI,EAAE,MAAM,EACrB,OAAO,EAAE,MAAM,EACN,SAAS,EAAE,OAAO,EAC3B,OAAO,GAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAM;CAMlD;AAED,MAAM,WAAW,6BAA6B;IAC5C,WAAW,IAAI,2BAA2B,CAAC;CAC5C;AAED,MAAM,WAAW,+BAA+B;IAC9C,QAAQ,CAAC,OAAO,EAAE,IAAI,CAAC,eAAe,EAAE,eAAe,GAAG,cAAc,GAAG,aAAa,CAAC,CAAC;IAC1F,QAAQ,CAAC,QAAQ,EAAE,6BAA6B,CAAC;IACjD,QAAQ,CAAC,kBAAkB,EAAE,MAAM,SAAS,MAAM,EAAE,CAAC;IACrD,QAAQ,CAAC,aAAa,EAAE,CAAC,KAAK,EAAE;QAAE,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAA;KAAE,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;IAC7E,QAAQ,CAAC,sBAAsB,EAAE,CAAC,WAAW,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,KAAK,IAAI,CAAC;IAClF,QAAQ,CAAC,WAAW,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,IAAI,CAAC;CACnD;AAED,MAAM,WAAW,wBAAwB;IACvC,MAAM,CAAC,KAAK,EAAE,6BAA6B,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IAC9D,OAAO,IAAI,IAAI,CAAC;CACjB;AAED,MAAM,WAAW,6BAA8B,SAAQ,6BAA6B;IAClF,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;CAC5B;AAED,wBAAgB,4BAA4B,CAC1C,KAAK,EAAE,iCAAiC,GACvC,qBAAqB,CA2DvB;AAqBD,wBAAsB,2BAA2B,CAAC,KAAK,EAAE;IACvD,QAAQ,CAAC,OAAO,EAAE,IAAI,CAAC,eAAe,EAAE,aAAa,CAAC,CAAC;IACvD,QAAQ,CAAC,OAAO,EAAE,6BAA6B,CAAC;IAChD,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;IAC3B,QAAQ,CAAC,sBAAsB,EAAE,CAAC,WAAW,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,KAAK,IAAI,CAAC;IAClF,QAAQ,CAAC,WAAW,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,IAAI,CAAC;CACnD,GAAG,OAAO,CAAC,MAAM,CAAC,CAkBlB;AAED;;;GAGG;AACH,wBAAgB,8BAA8B,CAC5C,OAAO,EAAE,+BAA+B,GACvC,wBAAwB,CA2E1B"}
|
|
@@ -0,0 +1,185 @@
|
|
|
1
|
+
import { createSessionForWorktree, WorktreeSessionBindingError, } from './worktree-view.js';
|
|
2
|
+
export class WorktreeSessionActionError extends Error {
|
|
3
|
+
code;
|
|
4
|
+
retryable;
|
|
5
|
+
details;
|
|
6
|
+
constructor(code, message, retryable, details = {}) {
|
|
7
|
+
super(message);
|
|
8
|
+
this.code = code;
|
|
9
|
+
this.retryable = retryable;
|
|
10
|
+
this.name = 'WorktreeSessionActionError';
|
|
11
|
+
this.details = details;
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
export function resolveWorktreeSessionAction(input) {
|
|
15
|
+
if (input.target.status !== 'active' || input.target.health === 'repair') {
|
|
16
|
+
return { kind: 'reject', reason: 'worktree-not-available' };
|
|
17
|
+
}
|
|
18
|
+
if (input.sessions.phase !== 'ready') {
|
|
19
|
+
return { kind: 'wait', reason: 'sessions-not-ready' };
|
|
20
|
+
}
|
|
21
|
+
const targetBinding = input.bindings.find((binding) => binding.worktreeId === input.target.worktreeId && binding.status === 'active');
|
|
22
|
+
if (targetBinding !== undefined) {
|
|
23
|
+
const summary = input.sessions.byId[targetBinding.sessionId];
|
|
24
|
+
if (summary === undefined) {
|
|
25
|
+
return {
|
|
26
|
+
kind: 'repair',
|
|
27
|
+
reason: 'active-binding-session-missing',
|
|
28
|
+
sessionId: targetBinding.sessionId,
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
if (summary.cwd !== input.target.absolutePath) {
|
|
32
|
+
return {
|
|
33
|
+
kind: 'repair',
|
|
34
|
+
reason: 'active-binding-cwd-mismatch',
|
|
35
|
+
sessionId: targetBinding.sessionId,
|
|
36
|
+
};
|
|
37
|
+
}
|
|
38
|
+
if (summary.blank === true &&
|
|
39
|
+
!input.archivedSessionIds.includes(targetBinding.sessionId)) {
|
|
40
|
+
return { kind: 'open-bound', sessionId: targetBinding.sessionId };
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
for (const sessionId of input.sessions.ids) {
|
|
44
|
+
const summary = input.sessions.byId[sessionId];
|
|
45
|
+
if (summary === undefined ||
|
|
46
|
+
summary.blank === undefined ||
|
|
47
|
+
(summary.blank === true && summary.cwd === undefined)) {
|
|
48
|
+
return { kind: 'wait', reason: 'session-facts-incomplete' };
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
for (const sessionId of input.sessions.ids) {
|
|
52
|
+
const summary = input.sessions.byId[sessionId];
|
|
53
|
+
if (summary?.blank !== true ||
|
|
54
|
+
summary.cwd !== input.target.absolutePath ||
|
|
55
|
+
input.archivedSessionIds.includes(sessionId)) {
|
|
56
|
+
continue;
|
|
57
|
+
}
|
|
58
|
+
if (!input.bindings.some((binding) => binding.sessionId === sessionId)) {
|
|
59
|
+
return { kind: 'bind-existing', sessionId };
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
return { kind: 'create' };
|
|
63
|
+
}
|
|
64
|
+
function actionError(action) {
|
|
65
|
+
switch (action.kind) {
|
|
66
|
+
case 'wait':
|
|
67
|
+
return new WorktreeSessionActionError(action.reason === 'sessions-not-ready' ? 'SESSION_LIST_NOT_READY' : 'SESSION_FACTS_INCOMPLETE', '', true);
|
|
68
|
+
case 'repair':
|
|
69
|
+
return new WorktreeSessionActionError('WORKTREE_SESSION_REPAIR_REQUIRED', action.reason, true, {
|
|
70
|
+
...(action.sessionId === undefined ? {} : { sessionId: action.sessionId }),
|
|
71
|
+
});
|
|
72
|
+
case 'reject':
|
|
73
|
+
return new WorktreeSessionActionError('WORKTREE_SESSION_UNAVAILABLE', action.reason, false);
|
|
74
|
+
default:
|
|
75
|
+
return new WorktreeSessionActionError('WORKTREE_SESSION_ACTION_FAILED', '', true);
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
export async function retryWorktreeSessionBinding(input) {
|
|
79
|
+
if (input.archived) {
|
|
80
|
+
throw new WorktreeSessionActionError('SESSION_ARCHIVED', '', false, {
|
|
81
|
+
sessionId: input.pending.sessionId,
|
|
82
|
+
});
|
|
83
|
+
}
|
|
84
|
+
try {
|
|
85
|
+
await input.manager.bindSession({
|
|
86
|
+
workspaceId: input.pending.workspaceId,
|
|
87
|
+
worktreeId: input.pending.worktreeId,
|
|
88
|
+
sessionId: input.pending.sessionId,
|
|
89
|
+
});
|
|
90
|
+
}
|
|
91
|
+
catch (error) {
|
|
92
|
+
throw new WorktreeSessionBindingError(input.pending.sessionId, error);
|
|
93
|
+
}
|
|
94
|
+
input.ensureSessionWorkspace(input.pending.workspaceId, input.pending.sessionId);
|
|
95
|
+
input.openSession(input.pending.sessionId);
|
|
96
|
+
return input.pending.sessionId;
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* Browser-only Worktree `+` connector. It owns the read/resolve/bind/create/open
|
|
100
|
+
* sequence and coalesces repeated calls for one Worktree within one Client fiber.
|
|
101
|
+
*/
|
|
102
|
+
export function createWorktreeSessionConnector(options) {
|
|
103
|
+
const inFlight = new Map();
|
|
104
|
+
let disposed = false;
|
|
105
|
+
const run = async (input) => {
|
|
106
|
+
const [worktrees, bindings] = await Promise.all([
|
|
107
|
+
options.manager.listWorktrees({ workspaceId: input.workspaceId }),
|
|
108
|
+
options.manager.listBindings({ workspaceId: input.workspaceId }),
|
|
109
|
+
]);
|
|
110
|
+
if (disposed) {
|
|
111
|
+
throw new WorktreeSessionActionError('CLIENT_DISPOSED', '', false);
|
|
112
|
+
}
|
|
113
|
+
const target = worktrees.find((record) => record.worktreeId === input.worktreeId);
|
|
114
|
+
if (target === undefined || target.absolutePath !== input.cwd) {
|
|
115
|
+
throw new WorktreeSessionActionError('WORKTREE_SESSION_REPAIR_REQUIRED', 'worktree target unavailable', true);
|
|
116
|
+
}
|
|
117
|
+
const action = resolveWorktreeSessionAction({
|
|
118
|
+
target,
|
|
119
|
+
sessions: options.sessions.getSnapshot(),
|
|
120
|
+
archivedSessionIds: options.archivedSessionIds(),
|
|
121
|
+
bindings,
|
|
122
|
+
});
|
|
123
|
+
if (action.kind === 'open-bound') {
|
|
124
|
+
options.ensureSessionWorkspace(input.workspaceId, action.sessionId);
|
|
125
|
+
if (!disposed)
|
|
126
|
+
options.openSession(action.sessionId);
|
|
127
|
+
return action.sessionId;
|
|
128
|
+
}
|
|
129
|
+
if (action.kind === 'bind-existing') {
|
|
130
|
+
try {
|
|
131
|
+
await options.manager.bindSession({
|
|
132
|
+
workspaceId: input.workspaceId,
|
|
133
|
+
worktreeId: input.worktreeId,
|
|
134
|
+
sessionId: action.sessionId,
|
|
135
|
+
});
|
|
136
|
+
}
|
|
137
|
+
catch (error) {
|
|
138
|
+
throw new WorktreeSessionBindingError(action.sessionId, error);
|
|
139
|
+
}
|
|
140
|
+
if (!disposed) {
|
|
141
|
+
options.ensureSessionWorkspace(input.workspaceId, action.sessionId);
|
|
142
|
+
if (!disposed)
|
|
143
|
+
options.openSession(action.sessionId);
|
|
144
|
+
}
|
|
145
|
+
return action.sessionId;
|
|
146
|
+
}
|
|
147
|
+
if (action.kind !== 'create')
|
|
148
|
+
throw actionError(action);
|
|
149
|
+
if (disposed)
|
|
150
|
+
throw new WorktreeSessionActionError('CLIENT_DISPOSED', '', false);
|
|
151
|
+
return createSessionForWorktree({
|
|
152
|
+
...input,
|
|
153
|
+
createSession: options.createSession,
|
|
154
|
+
manager: options.manager,
|
|
155
|
+
beforeOpen: (sessionId) => {
|
|
156
|
+
if (disposed)
|
|
157
|
+
throw new WorktreeSessionActionError('CLIENT_DISPOSED', '', false);
|
|
158
|
+
options.ensureSessionWorkspace(input.workspaceId, sessionId);
|
|
159
|
+
},
|
|
160
|
+
openSession: (sessionId) => {
|
|
161
|
+
if (!disposed)
|
|
162
|
+
options.openSession(sessionId);
|
|
163
|
+
},
|
|
164
|
+
});
|
|
165
|
+
};
|
|
166
|
+
return {
|
|
167
|
+
create(input) {
|
|
168
|
+
const key = `${input.workspaceId}\u0000${input.worktreeId}`;
|
|
169
|
+
const current = inFlight.get(key);
|
|
170
|
+
if (current !== undefined)
|
|
171
|
+
return current;
|
|
172
|
+
const promise = run(input).finally(() => {
|
|
173
|
+
if (inFlight.get(key) === promise)
|
|
174
|
+
inFlight.delete(key);
|
|
175
|
+
});
|
|
176
|
+
inFlight.set(key, promise);
|
|
177
|
+
return promise;
|
|
178
|
+
},
|
|
179
|
+
dispose() {
|
|
180
|
+
disposed = true;
|
|
181
|
+
inFlight.clear();
|
|
182
|
+
},
|
|
183
|
+
};
|
|
184
|
+
}
|
|
185
|
+
//# sourceMappingURL=worktree-session.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"worktree-session.js","sourceRoot":"","sources":["../../src/client/worktree-session.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,24 +1,52 @@
|
|
|
1
1
|
import type { BranchRecord, SessionBinding, WorktreeManager, WorktreeRecord } from '../contract/index.js';
|
|
2
2
|
/** A DSH Session exists even when the external Worktree binding needs repair. */
|
|
3
3
|
export declare class WorktreeSessionBindingError extends Error {
|
|
4
|
-
readonly code
|
|
5
|
-
readonly retryable
|
|
4
|
+
readonly code: string;
|
|
5
|
+
readonly retryable: boolean;
|
|
6
|
+
readonly details: Readonly<Record<string, unknown>>;
|
|
6
7
|
readonly sessionId: string;
|
|
7
8
|
readonly cause: unknown;
|
|
8
9
|
constructor(sessionId: string, cause: unknown);
|
|
9
10
|
}
|
|
11
|
+
export type WorktreeGitReadiness = {
|
|
12
|
+
readonly status: 'ready';
|
|
13
|
+
} | {
|
|
14
|
+
readonly status: 'noRepository';
|
|
15
|
+
readonly error: WorktreeViewError;
|
|
16
|
+
} | {
|
|
17
|
+
readonly status: 'noInitialCommit';
|
|
18
|
+
readonly error: WorktreeViewError;
|
|
19
|
+
} | {
|
|
20
|
+
readonly status: 'noLocalBranch';
|
|
21
|
+
};
|
|
10
22
|
export interface WorktreeViewData {
|
|
11
23
|
readonly worktrees: readonly WorktreeRecord[];
|
|
12
24
|
readonly branches: readonly BranchRecord[];
|
|
13
25
|
readonly bindings: readonly SessionBinding[];
|
|
26
|
+
readonly readiness: WorktreeGitReadiness;
|
|
14
27
|
}
|
|
15
28
|
export interface WorktreeWorkspaceView extends WorktreeViewData {
|
|
16
29
|
readonly workspaceId: string;
|
|
17
30
|
}
|
|
31
|
+
export interface LoadWorktreeViewsOptions {
|
|
32
|
+
readonly invalidateContext?: boolean;
|
|
33
|
+
readonly invalidateWorktreeContext?: () => Promise<void>;
|
|
34
|
+
}
|
|
18
35
|
/** Reuse the previous ID snapshot when DSH republishes equivalent Workspace items. */
|
|
19
36
|
export declare function stableWorkspaceIds(previous: readonly string[], next: readonly string[]): readonly string[];
|
|
37
|
+
/** Keep only the most recently started Worktree surface refresh authoritative. */
|
|
38
|
+
export declare function createWorktreeRefreshGuard(): {
|
|
39
|
+
begin: () => number;
|
|
40
|
+
isCurrent: (generation: number) => boolean;
|
|
41
|
+
invalidate: () => void;
|
|
42
|
+
run<T>(load: () => Promise<T>, onSuccess: (value: T) => void, onError: (error: unknown) => void): Promise<void>;
|
|
43
|
+
};
|
|
20
44
|
/** Prefer the branch checked out by the DSH Workspace, then fall back to any local branch. */
|
|
21
45
|
export declare function selectDefaultBaseBranch(branches: readonly BranchRecord[]): string;
|
|
46
|
+
/** Keep a valid user choice across branch-list refreshes, otherwise choose the current branch. */
|
|
47
|
+
export declare function reconcileBaseBranchSelection(selectedBranch: string, branches: readonly BranchRecord[]): string;
|
|
48
|
+
/** Return copyable, read-only setup commands for a Git readiness state. */
|
|
49
|
+
export declare function worktreeSetupCommands(status: WorktreeGitReadiness['status']): readonly string[];
|
|
22
50
|
/** Generate a short, editable default branch name without colliding with known local names. */
|
|
23
51
|
export declare function createDefaultWorktreeName(existingNames: Iterable<string>, randomUuid?: () => string): string;
|
|
24
52
|
export interface CreateSessionForWorktreeInput {
|
|
@@ -44,7 +72,11 @@ export type WorktreeViewAction = {
|
|
|
44
72
|
/** Read all three Worktree projections needed by the surface in one refresh. */
|
|
45
73
|
export declare function loadWorktreeView(manager: WorktreeManager, workspaceId: string): Promise<WorktreeViewData>;
|
|
46
74
|
/** Load one independent projection per DSH Workspace for the flat sidebar hierarchy. */
|
|
47
|
-
export declare function loadWorktreeViews(manager: WorktreeManager, workspaceIds: readonly string[]): Promise<readonly WorktreeWorkspaceView[]>;
|
|
75
|
+
export declare function loadWorktreeViews(manager: WorktreeManager, workspaceIds: readonly string[], options?: LoadWorktreeViewsOptions): Promise<readonly WorktreeWorkspaceView[]>;
|
|
76
|
+
/** Resolve a row-half drop target to native-style optional before-anchor semantics. */
|
|
77
|
+
export declare function resolveWorktreeMove(worktreeIds: readonly string[], sourceWorktreeId: string, targetWorktreeId: string, half: 'before' | 'after'): {
|
|
78
|
+
readonly beforeWorktreeId?: string;
|
|
79
|
+
} | undefined;
|
|
48
80
|
/** Keep mutation routing in the browser Consumer while leaving wire details to the adapter. */
|
|
49
81
|
export declare function executeWorktreeAction(manager: WorktreeManager, action: WorktreeViewAction): Promise<WorktreeRecord | void>;
|
|
50
82
|
/**
|
|
@@ -61,4 +93,6 @@ export declare function createSessionForWorktree(input: CreateSessionForWorktree
|
|
|
61
93
|
}): Promise<string>;
|
|
62
94
|
/** Convert any adapter/Gateway failure into renderable, retry-aware UI data. */
|
|
63
95
|
export declare function toWorktreeViewError(error: unknown): WorktreeViewError;
|
|
96
|
+
/** Keep ordering mutation/refresh failures reachable from the surface Retry control. */
|
|
97
|
+
export declare function toRetryableWorktreeOrderError(error: unknown): WorktreeViewError;
|
|
64
98
|
//# sourceMappingURL=worktree-view.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"worktree-view.d.ts","sourceRoot":"","sources":["../../src/client/worktree-view.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,YAAY,EACZ,cAAc,EACd,eAAe,EACf,cAAc,EACf,MAAM,sBAAsB,CAAC;AAE9B,iFAAiF;AACjF,qBAAa,2BAA4B,SAAQ,KAAK;IACpD,QAAQ,CAAC,IAAI,
|
|
1
|
+
{"version":3,"file":"worktree-view.d.ts","sourceRoot":"","sources":["../../src/client/worktree-view.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,YAAY,EACZ,cAAc,EACd,eAAe,EACf,cAAc,EACf,MAAM,sBAAsB,CAAC;AAE9B,iFAAiF;AACjF,qBAAa,2BAA4B,SAAQ,KAAK;IACpD,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;IAC5B,QAAQ,CAAC,OAAO,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;IACpD,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;gBAEZ,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO;CA0B9C;AAED,MAAM,MAAM,oBAAoB,GAC5B;IAAE,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAA;CAAE,GAC5B;IAAE,QAAQ,CAAC,MAAM,EAAE,cAAc,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,iBAAiB,CAAA;CAAE,GACtE;IAAE,QAAQ,CAAC,MAAM,EAAE,iBAAiB,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,iBAAiB,CAAA;CAAE,GACzE;IAAE,QAAQ,CAAC,MAAM,EAAE,eAAe,CAAA;CAAE,CAAC;AAEzC,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,SAAS,EAAE,SAAS,cAAc,EAAE,CAAC;IAC9C,QAAQ,CAAC,QAAQ,EAAE,SAAS,YAAY,EAAE,CAAC;IAC3C,QAAQ,CAAC,QAAQ,EAAE,SAAS,cAAc,EAAE,CAAC;IAC7C,QAAQ,CAAC,SAAS,EAAE,oBAAoB,CAAC;CAC1C;AAED,MAAM,WAAW,qBAAsB,SAAQ,gBAAgB;IAC7D,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;CAC9B;AAED,MAAM,WAAW,wBAAwB;IACvC,QAAQ,CAAC,iBAAiB,CAAC,EAAE,OAAO,CAAC;IACrC,QAAQ,CAAC,yBAAyB,CAAC,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CAC1D;AAED,sFAAsF;AACtF,wBAAgB,kBAAkB,CAChC,QAAQ,EAAE,SAAS,MAAM,EAAE,EAC3B,IAAI,EAAE,SAAS,MAAM,EAAE,GACtB,SAAS,MAAM,EAAE,CAMnB;AAED,kFAAkF;AAClF,wBAAgB,0BAA0B;iBAEtB,MAAM;4BAIO,MAAM,KAAG,OAAO;sBACxB,IAAI;QAQf,CAAC,QACH,MAAM,OAAO,CAAC,CAAC,CAAC,aACX,CAAC,KAAK,EAAE,CAAC,KAAK,IAAI,WACpB,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,GAChC,OAAO,CAAC,IAAI,CAAC;EAcnB;AAED,8FAA8F;AAC9F,wBAAgB,uBAAuB,CAAC,QAAQ,EAAE,SAAS,YAAY,EAAE,GAAG,MAAM,CAEjF;AAED,kGAAkG;AAClG,wBAAgB,4BAA4B,CAC1C,cAAc,EAAE,MAAM,EACtB,QAAQ,EAAE,SAAS,YAAY,EAAE,GAChC,MAAM,CAGR;AAED,2EAA2E;AAC3E,wBAAgB,qBAAqB,CACnC,MAAM,EAAE,oBAAoB,CAAC,QAAQ,CAAC,GACrC,SAAS,MAAM,EAAE,CAoBnB;AAQD,+FAA+F;AAC/F,wBAAgB,yBAAyB,CACvC,aAAa,EAAE,QAAQ,CAAC,MAAM,CAAC,EAC/B,UAAU,GAAE,MAAM,MAA0B,GAC3C,MAAM,CASR;AAED,MAAM,WAAW,6BAA6B;IAC5C,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;IAC5B,QAAQ,CAAC,OAAO,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;CACtD;AAED,6EAA6E;AAC7E,wBAAgB,wBAAwB,CACtC,UAAU,EAAE,SAAS,MAAM,EAAE,EAC7B,kBAAkB,EAAE,SAAS,MAAM,EAAE,GACpC,SAAS,MAAM,EAAE,CAEnB;AAED,MAAM,MAAM,kBAAkB,GAC1B;IACE,QAAQ,CAAC,IAAI,EAAE,gBAAgB,CAAC;IAChC,QAAQ,CAAC,KAAK,EAAE,UAAU,CAAC,eAAe,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;CAClE,GACD;IACE,QAAQ,CAAC,IAAI,EAAE,gBAAgB,CAAC;IAChC,QAAQ,CAAC,KAAK,EAAE,UAAU,CAAC,eAAe,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;CAClE,CAAC;AAaN,gFAAgF;AAChF,wBAAsB,gBAAgB,CACpC,OAAO,EAAE,eAAe,EACxB,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC,gBAAgB,CAAC,CA8B3B;AAED,wFAAwF;AACxF,wBAAsB,iBAAiB,CACrC,OAAO,EAAE,eAAe,EACxB,YAAY,EAAE,SAAS,MAAM,EAAE,EAC/B,OAAO,GAAE,wBAA6B,GACrC,OAAO,CAAC,SAAS,qBAAqB,EAAE,CAAC,CAW3C;AAED,uFAAuF;AACvF,wBAAgB,mBAAmB,CACjC,WAAW,EAAE,SAAS,MAAM,EAAE,EAC9B,gBAAgB,EAAE,MAAM,EACxB,gBAAgB,EAAE,MAAM,EACxB,IAAI,EAAE,QAAQ,GAAG,OAAO,GACvB;IAAE,QAAQ,CAAC,gBAAgB,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,SAAS,CAepD;AAED,+FAA+F;AAC/F,wBAAsB,qBAAqB,CACzC,OAAO,EAAE,eAAe,EACxB,MAAM,EAAE,kBAAkB,GACzB,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC,CAQhC;AAED;;;GAGG;AACH,wBAAsB,wBAAwB,CAAC,KAAK,EAAE,6BAA6B,GAAG;IACpF,QAAQ,CAAC,aAAa,EAAE,CAAC,KAAK,EAAE;QAAE,GAAG,EAAE,MAAM,CAAA;KAAE,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;IACpE,QAAQ,CAAC,OAAO,EAAE,IAAI,CAAC,eAAe,EAAE,aAAa,CAAC,CAAC;IACvD,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,IAAI,CAAC;IAClD,QAAQ,CAAC,WAAW,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,IAAI,CAAC;CACnD,GAAG,OAAO,CAAC,MAAM,CAAC,CAclB;AASD,gFAAgF;AAChF,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,OAAO,GAAG,iBAAiB,CAsBrE;AAED,wFAAwF;AACxF,wBAAgB,6BAA6B,CAAC,KAAK,EAAE,OAAO,GAAG,iBAAiB,CAK/E"}
|