@cerbur/clutch-dsh-worktree 0.1.28 → 0.1.29
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 +17 -2
- package/README.zh.md +14 -2
- package/lib/client/dsh-slot-contract.d.ts +9 -1
- package/lib/client/dsh-slot-contract.d.ts.map +1 -1
- package/lib/client/entry.d.ts.map +1 -1
- package/lib/client/entry.js +9 -6
- package/lib/client/entry.js.map +1 -1
- package/lib/client/overlay/WorktreeOverlay.d.ts +5 -1
- package/lib/client/overlay/WorktreeOverlay.d.ts.map +1 -1
- package/lib/client/overlay/WorktreeOverlay.js +5 -3
- package/lib/client/overlay/WorktreeOverlay.js.map +1 -1
- package/lib/client/surface/components/SessionActivityBell.d.ts.map +1 -1
- package/lib/client/surface/components/SessionActivityBell.js +8 -14
- package/lib/client/surface/components/SessionActivityBell.js.map +1 -1
- package/lib/client/surface/components/SurfaceContent.d.ts +1 -1
- package/lib/client/surface/components/SurfaceContent.d.ts.map +1 -1
- package/lib/client/surface/components/SurfaceContent.js +6 -0
- package/lib/client/surface/components/SurfaceContent.js.map +1 -1
- package/lib/client/surface/components/SurfaceHeader.js +1 -1
- package/lib/client/surface/components/SurfaceHeader.js.map +1 -1
- package/lib/client/view/sidebar-workspace-slot.d.ts +3 -1
- package/lib/client/view/sidebar-workspace-slot.d.ts.map +1 -1
- package/lib/client/view/sidebar-workspace-slot.js +8 -4
- package/lib/client/view/sidebar-workspace-slot.js.map +1 -1
- package/lib/client/view/workspace-directory-flow.d.ts +20 -0
- package/lib/client/view/workspace-directory-flow.d.ts.map +1 -0
- package/lib/client/view/workspace-directory-flow.js +85 -0
- package/lib/client/view/workspace-directory-flow.js.map +1 -0
- package/lib/client.js +198 -44
- package/lib/client.js.map +1 -1
- package/lib/host/native-worktree-cleanup.d.ts +9 -0
- package/lib/host/native-worktree-cleanup.d.ts.map +1 -0
- package/lib/host/native-worktree-cleanup.js +132 -0
- package/lib/host/native-worktree-cleanup.js.map +1 -0
- package/lib/host/service.d.ts.map +1 -1
- package/lib/host/service.js +7 -0
- package/lib/host/service.js.map +1 -1
- package/lib/typert.host.js +31 -31
- package/lib/typert.remote-client.d.ts.map +1 -1
- package/lib/typert.remote-client.js +31 -31
- package/package.json +51 -51
|
@@ -2,16 +2,20 @@ import { jsx as _jsx } from "react/jsx-runtime";
|
|
|
2
2
|
import { useLayoutEffect, useRef } from 'react';
|
|
3
3
|
import styles from '../worktree.css';
|
|
4
4
|
/** The shell owns placement and fold state; no native DOM discovery is needed. */
|
|
5
|
-
export function WorktreeWorkspaceSeat({ wide, publish }) {
|
|
5
|
+
export function WorktreeWorkspaceSeat({ wide, useSectionScroller: useScroller, publish }) {
|
|
6
6
|
const ref = useRef(null);
|
|
7
|
+
const useSectionScroller = useScroller ?? useLegacySectionScroller;
|
|
8
|
+
const bindScrollerRef = useSectionScroller()?.bindScrollerRef;
|
|
7
9
|
useLayoutEffect(() => {
|
|
8
10
|
const element = ref.current;
|
|
9
11
|
if (element)
|
|
10
|
-
publish({ element, wide });
|
|
12
|
+
publish({ element, wide, bindScrollerRef: wide ? bindScrollerRef : undefined });
|
|
11
13
|
return () => publish(undefined);
|
|
12
|
-
}, [wide, publish]);
|
|
13
|
-
return _jsx("div", { ref: ref, className: styles.workspaceSeat, "data-worktree-workspace-seat": true });
|
|
14
|
+
}, [wide, publish, bindScrollerRef]);
|
|
15
|
+
return _jsx("div", { ref: ref, className: styles.workspaceSeat, "data-worktree-workspace-seat": true, "data-worktree-section-scroller": bindScrollerRef !== undefined || undefined });
|
|
14
16
|
}
|
|
17
|
+
// rc.1 supplies the same slot without the rc.2 scrolling capability.
|
|
18
|
+
function useLegacySectionScroller() { return undefined; }
|
|
15
19
|
/** Shadow only the browsing region, preserving the native registration and its children. */
|
|
16
20
|
export function workspaceSidebarMount(slots) {
|
|
17
21
|
return (publish) => slots.inject('sidebar.workspaces', () => slots.register({
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sidebar-workspace-slot.js","sourceRoot":"","sources":["../../../src/client/view/sidebar-workspace-slot.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"sidebar-workspace-slot.js","sourceRoot":"","sources":["../../../src/client/view/sidebar-workspace-slot.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,EAAoB,MAAM,OAAO,CAAC;AAGlE,OAAO,MAAM,MAAM,iBAAiB,CAAC;AAUrC,kFAAkF;AAClF,MAAM,UAAU,qBAAqB,CAAC,EAAE,IAAI,EAAE,kBAAkB,EAAE,WAAW,EAAE,OAAO,EAErF;IACC,MAAM,GAAG,GAAG,MAAM,CAAiB,IAAI,CAAC,CAAC;IACzC,MAAM,kBAAkB,GAAG,WAAW,IAAI,wBAAwB,CAAC;IACnE,MAAM,eAAe,GAAG,kBAAkB,EAAE,EAAE,eAAe,CAAC;IAC9D,eAAe,CAAC,GAAG,EAAE;QACnB,MAAM,OAAO,GAAG,GAAG,CAAC,OAAO,CAAC;QAC5B,IAAI,OAAO;YAAE,OAAO,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,eAAe,EAAE,IAAI,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC;QAC7F,OAAO,GAAG,EAAE,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IAClC,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,EAAE,eAAe,CAAC,CAAC,CAAC;IACrC,OAAO,cAAK,GAAG,EAAE,GAAG,EAAE,SAAS,EAAE,MAAM,CAAC,aAAa,0EACnB,eAAe,KAAK,SAAS,IAAI,SAAS,GAAI,CAAC;AACnF,CAAC;AAED,qEAAqE;AACrE,SAAS,wBAAwB,KAAK,OAAO,SAAS,CAAC,CAAC,CAAC;AAEzD,4FAA4F;AAC5F,MAAM,UAAU,qBAAqB,CAAC,KAA2B;IAC/D,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,oBAAoB,EAAE,GAAG,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC;QAC1E,IAAI,EAAE,oBAAoB;QAC1B,QAAQ,EAAE,CAAC,EAAE;QACb,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC;KAC5B,EAAE,qBAAqB,CAAC,CAAC,CAAC;AAC7B,CAAC"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import type { DirectoryFlowOwnerProps } from '@deepseek-ai/dsh-client-ui-workspace/client';
|
|
2
|
+
import type { SlotCore } from '@deepseek-ai/dsh-client-ui-slots';
|
|
3
|
+
declare const WORKTREE_FLOW = "clutch.worktree.directoryFlow";
|
|
4
|
+
export interface WorkspaceDirectoryFlowState {
|
|
5
|
+
readonly available: boolean;
|
|
6
|
+
readonly owner: DirectoryFlowOwnerProps;
|
|
7
|
+
}
|
|
8
|
+
type FlowRegistry = Pick<SlotCore, 'entriesOfSlot' | 'subscribe'> & {
|
|
9
|
+
inject: (key: typeof WORKTREE_FLOW, callback: () => () => void) => () => void;
|
|
10
|
+
register: SlotCore['register'];
|
|
11
|
+
};
|
|
12
|
+
/** The composed picker owns selection; Worktree owns only adoption and its pending action. */
|
|
13
|
+
export declare function createWorkspaceDirectoryFlow(slots: FlowRegistry, adopt: (path: string) => Promise<void>): {
|
|
14
|
+
store: import("@deepseek-ai/dsh-client-store").SnapshotStore<WorkspaceDirectoryFlowState>;
|
|
15
|
+
request: () => Promise<void>;
|
|
16
|
+
cancel: () => void;
|
|
17
|
+
dispose: () => void;
|
|
18
|
+
};
|
|
19
|
+
export {};
|
|
20
|
+
//# sourceMappingURL=workspace-directory-flow.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workspace-directory-flow.d.ts","sourceRoot":"","sources":["../../../src/client/view/workspace-directory-flow.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,6CAA6C,CAAC;AAC3F,OAAO,KAAK,EAAE,QAAQ,EAAe,MAAM,kCAAkC,CAAC;AAG9E,QAAA,MAAM,aAAa,kCAAkC,CAAC;AAEtD,MAAM,WAAW,2BAA2B;IAC1C,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;IAC5B,QAAQ,CAAC,KAAK,EAAE,uBAAuB,CAAC;CACzC;AAED,KAAK,YAAY,GAAG,IAAI,CAAC,QAAQ,EAAE,eAAe,GAAG,WAAW,CAAC,GAAG;IAClE,MAAM,EAAE,CAAC,GAAG,EAAE,OAAO,aAAa,EAAE,QAAQ,EAAE,MAAM,MAAM,IAAI,KAAK,MAAM,IAAI,CAAC;IAC9E,QAAQ,EAAE,QAAQ,CAAC,UAAU,CAAC,CAAC;CAChC,CAAC;AAQF,8FAA8F;AAC9F,wBAAgB,4BAA4B,CAAC,KAAK,EAAE,YAAY,EAAE,KAAK,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC;;mBAuClF,OAAO,CAAC,IAAI,CAAC;;;EAgClC"}
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
import { createSnapshotStore } from '@deepseek-ai/dsh-client-store';
|
|
2
|
+
const NATIVE_FLOW = 'sidebar.workspaces.directoryFlow';
|
|
3
|
+
const WORKTREE_FLOW = 'clutch.worktree.directoryFlow';
|
|
4
|
+
/** The composed picker owns selection; Worktree owns only adoption and its pending action. */
|
|
5
|
+
export function createWorkspaceDirectoryFlow(slots, adopt) {
|
|
6
|
+
const idle = {
|
|
7
|
+
open: false, busy: false, onPicked() { }, onCancel() { }, onError() { },
|
|
8
|
+
};
|
|
9
|
+
const store = createSnapshotStore({ available: false, owner: idle });
|
|
10
|
+
let pending;
|
|
11
|
+
let disposed = false;
|
|
12
|
+
const cancel = () => {
|
|
13
|
+
const request = pending;
|
|
14
|
+
pending = undefined;
|
|
15
|
+
store.set({ ...store.getSnapshot(), owner: idle });
|
|
16
|
+
request?.resolve();
|
|
17
|
+
};
|
|
18
|
+
// The native browser keeps its declaration even while our sidebar seat wins.
|
|
19
|
+
// Mirror its elected picker into our own child hole: redeclaring the native
|
|
20
|
+
// hole or rendering it through ctx.slots would violate renderer ownership.
|
|
21
|
+
const stop = slots.inject(WORKTREE_FLOW, () => {
|
|
22
|
+
let current;
|
|
23
|
+
let remove;
|
|
24
|
+
const sync = () => {
|
|
25
|
+
const next = slots.entriesOfSlot(NATIVE_FLOW)[0];
|
|
26
|
+
if (next === current)
|
|
27
|
+
return;
|
|
28
|
+
cancel();
|
|
29
|
+
remove?.();
|
|
30
|
+
current = next;
|
|
31
|
+
remove = next === undefined ? undefined : slots.register({
|
|
32
|
+
name: WORKTREE_FLOW,
|
|
33
|
+
...(next.inject === undefined ? {} : { inject: next.inject }),
|
|
34
|
+
...(next.store === undefined ? {} : { store: next.store }),
|
|
35
|
+
...(next.locale === undefined ? {} : { locale: next.locale }),
|
|
36
|
+
}, next.component);
|
|
37
|
+
store.set({ available: next !== undefined, owner: idle });
|
|
38
|
+
};
|
|
39
|
+
const unsubscribe = slots.subscribe(NATIVE_FLOW, sync);
|
|
40
|
+
sync();
|
|
41
|
+
return () => { unsubscribe(); remove?.(); cancel(); store.set({ available: false, owner: idle }); };
|
|
42
|
+
});
|
|
43
|
+
const request = () => {
|
|
44
|
+
if (pending !== undefined)
|
|
45
|
+
return pending.promise;
|
|
46
|
+
if (disposed || !store.getSnapshot().available)
|
|
47
|
+
return Promise.resolve();
|
|
48
|
+
let resolve;
|
|
49
|
+
let reject;
|
|
50
|
+
const promise = new Promise((yes, no) => { resolve = yes; reject = no; });
|
|
51
|
+
const active = { promise, resolve, reject, busy: false };
|
|
52
|
+
pending = active;
|
|
53
|
+
const finish = (error) => {
|
|
54
|
+
if (pending !== active)
|
|
55
|
+
return;
|
|
56
|
+
pending = undefined;
|
|
57
|
+
store.set({ ...store.getSnapshot(), owner: idle });
|
|
58
|
+
if (error)
|
|
59
|
+
reject(error);
|
|
60
|
+
else
|
|
61
|
+
resolve();
|
|
62
|
+
};
|
|
63
|
+
const owner = {
|
|
64
|
+
open: true, busy: false,
|
|
65
|
+
onPicked: (path) => {
|
|
66
|
+
if (pending !== active || active.busy)
|
|
67
|
+
return;
|
|
68
|
+
active.busy = true;
|
|
69
|
+
store.set({ available: true, owner: { ...owner, busy: true } });
|
|
70
|
+
void Promise.resolve().then(() => {
|
|
71
|
+
if (pending === active)
|
|
72
|
+
return adopt(path);
|
|
73
|
+
}).then(() => finish(), (error) => finish(error instanceof Error ? error : new Error(String(error))));
|
|
74
|
+
},
|
|
75
|
+
onCancel: () => { if (!active.busy)
|
|
76
|
+
finish(); },
|
|
77
|
+
onError: (message) => { if (!active.busy)
|
|
78
|
+
finish(new Error(message)); },
|
|
79
|
+
};
|
|
80
|
+
store.set({ available: true, owner });
|
|
81
|
+
return promise;
|
|
82
|
+
};
|
|
83
|
+
return { store, request, cancel, dispose: () => { disposed = true; stop(); cancel(); } };
|
|
84
|
+
}
|
|
85
|
+
//# sourceMappingURL=workspace-directory-flow.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workspace-directory-flow.js","sourceRoot":"","sources":["../../../src/client/view/workspace-directory-flow.ts"],"names":[],"mappings":"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"}
|