@vibecook/ghosttea-react 0.6.2 → 0.8.0
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 +8 -0
- package/dist/TerminalSurface.d.ts +4 -1
- package/dist/TerminalSurface.d.ts.map +1 -1
- package/dist/TerminalSurface.js +6 -3
- package/dist/TerminalSurface.js.map +1 -1
- package/dist/bindings/action-route.d.ts.map +1 -1
- package/dist/bindings/action-route.js +4 -0
- package/dist/bindings/action-route.js.map +1 -1
- package/dist/bindings/ghostty-bindings.d.ts +13 -0
- package/dist/bindings/ghostty-bindings.d.ts.map +1 -1
- package/dist/bindings/ghostty-bindings.js +57 -0
- package/dist/bindings/ghostty-bindings.js.map +1 -1
- package/dist/bindings/index.d.ts +1 -1
- package/dist/bindings/index.d.ts.map +1 -1
- package/dist/bindings/index.js +1 -1
- package/dist/bindings/index.js.map +1 -1
- package/dist/config.d.ts +7 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +21 -0
- package/dist/config.js.map +1 -0
- package/dist/index.d.ts +2 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -1
- package/dist/index.js.map +1 -1
- package/dist/renderers/types.d.ts +6 -0
- package/dist/renderers/types.d.ts.map +1 -1
- package/dist/renderers/types.js +3 -0
- package/dist/renderers/types.js.map +1 -1
- package/dist/renderers/webgpu-renderer.d.ts.map +1 -1
- package/dist/renderers/webgpu-renderer.js +33 -4
- package/dist/renderers/webgpu-renderer.js.map +1 -1
- package/dist/runtime.d.ts +40 -3
- package/dist/runtime.d.ts.map +1 -1
- package/dist/runtime.js +458 -32
- package/dist/runtime.js.map +1 -1
- package/dist/terminal-bindings.d.ts +2 -2
- package/dist/terminal-bindings.d.ts.map +1 -1
- package/dist/terminal-bindings.js +2 -1
- package/dist/terminal-bindings.js.map +1 -1
- package/dist/terminal-render.worker.js +93 -7
- package/dist/terminal-render.worker.js.map +2 -2
- package/dist/worker-messages.d.ts +26 -1
- package/dist/worker-messages.d.ts.map +1 -1
- package/dist/workspace/RemoteSessionBanner.d.ts +22 -0
- package/dist/workspace/RemoteSessionBanner.d.ts.map +1 -0
- package/dist/workspace/RemoteSessionBanner.js +108 -0
- package/dist/workspace/RemoteSessionBanner.js.map +1 -0
- package/dist/workspace/RemoteSessionPalette.d.ts +5 -1
- package/dist/workspace/RemoteSessionPalette.d.ts.map +1 -1
- package/dist/workspace/RemoteSessionPalette.js +19 -15
- package/dist/workspace/RemoteSessionPalette.js.map +1 -1
- package/dist/workspace/Workspace.d.ts +25 -2
- package/dist/workspace/Workspace.d.ts.map +1 -1
- package/dist/workspace/Workspace.js +125 -27
- package/dist/workspace/Workspace.js.map +1 -1
- package/dist/workspace/index.d.ts +4 -2
- package/dist/workspace/index.d.ts.map +1 -1
- package/dist/workspace/index.js +3 -1
- package/dist/workspace/index.js.map +1 -1
- package/dist/workspace/pane-layout.d.ts +9 -2
- package/dist/workspace/pane-layout.d.ts.map +1 -1
- package/dist/workspace/pane-layout.js +37 -11
- package/dist/workspace/pane-layout.js.map +1 -1
- package/dist/workspace/remote-banner.d.ts +36 -0
- package/dist/workspace/remote-banner.d.ts.map +1 -0
- package/dist/workspace/remote-banner.js +108 -0
- package/dist/workspace/remote-banner.js.map +1 -0
- package/dist/workspace/workspace-model.d.ts +2 -0
- package/dist/workspace/workspace-model.d.ts.map +1 -1
- package/dist/workspace/workspace-model.js +6 -1
- package/dist/workspace/workspace-model.js.map +1 -1
- package/dist/workspace.css +93 -0
- package/package.json +4 -4
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { CellSelection, TerminalTheme } from "./renderers/types.js";
|
|
1
|
+
import type { CellSelection, TerminalEffects, TerminalTheme } from "./renderers/types.js";
|
|
2
2
|
import type { TerminalScrollbarState } from "@vibecook/ghosttea-protocol";
|
|
3
3
|
import type { TerminalRenderPerformanceSnapshot } from "./performance.js";
|
|
4
4
|
export type RendererToWorkerMessage = {
|
|
@@ -38,6 +38,11 @@ export type RendererToWorkerMessage = {
|
|
|
38
38
|
sessionHandle: string;
|
|
39
39
|
surfaceId?: string;
|
|
40
40
|
theme: TerminalTheme;
|
|
41
|
+
} | {
|
|
42
|
+
type: "effects";
|
|
43
|
+
sessionHandle: string;
|
|
44
|
+
surfaceId?: string;
|
|
45
|
+
effects: TerminalEffects;
|
|
41
46
|
} | {
|
|
42
47
|
type: "selection";
|
|
43
48
|
sessionHandle: string;
|
|
@@ -53,6 +58,12 @@ export type RendererToWorkerMessage = {
|
|
|
53
58
|
surfaceId: string;
|
|
54
59
|
sessionHandle: string;
|
|
55
60
|
focused: boolean;
|
|
61
|
+
}
|
|
62
|
+
/** Hold the cursor steady while a replica is frozen, leaving focus untouched. */
|
|
63
|
+
| {
|
|
64
|
+
type: "cursor-frozen";
|
|
65
|
+
surfaceId: string;
|
|
66
|
+
frozen: boolean;
|
|
56
67
|
} | {
|
|
57
68
|
type: "cursor-activity";
|
|
58
69
|
sessionHandle: string;
|
|
@@ -90,6 +101,20 @@ export type WorkerToRendererMessage = {
|
|
|
90
101
|
} | {
|
|
91
102
|
type: "frame-resync-complete";
|
|
92
103
|
sessionHandle: string;
|
|
104
|
+
}
|
|
105
|
+
/**
|
|
106
|
+
* A frame has been applied and its invalidation scheduled. Unlike
|
|
107
|
+
* `frame-resync-complete` this carries the sequence it committed, so a
|
|
108
|
+
* consumer can tell a recovered frame from the one it replaced.
|
|
109
|
+
* `fullSnapshot` marks a complete screen — what a resume publishes, and the
|
|
110
|
+
* only kind of frame that can prove a replica is current again.
|
|
111
|
+
*/
|
|
112
|
+
| {
|
|
113
|
+
type: "frame-committed";
|
|
114
|
+
sessionHandle: string;
|
|
115
|
+
sessionEpoch: bigint;
|
|
116
|
+
frameSequence: bigint;
|
|
117
|
+
fullSnapshot: boolean;
|
|
93
118
|
} | {
|
|
94
119
|
type: "catalog-pressure";
|
|
95
120
|
sessionHandle: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"worker-messages.d.ts","sourceRoot":"","sources":["../src/worker-messages.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"worker-messages.d.ts","sourceRoot":"","sources":["../src/worker-messages.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { type RemoteSessionRuntimeState } from "../runtime.js";
|
|
2
|
+
/**
|
|
3
|
+
* Tracks one session's lifecycle. The runtime is the external store: it keeps
|
|
4
|
+
* one stable record per session, so the snapshot's identity only changes when
|
|
5
|
+
* a lifecycle event replaces it.
|
|
6
|
+
*/
|
|
7
|
+
export declare function useRemoteSessionLifecycle(sessionId: string): RemoteSessionRuntimeState | undefined;
|
|
8
|
+
/**
|
|
9
|
+
* The transient note shown after a swallowed keypress. It answers a question
|
|
10
|
+
* the user just asked by typing, so it is deliberately short-lived.
|
|
11
|
+
*/
|
|
12
|
+
export declare function useInputSuppressionHint(sessionId: string): string | undefined;
|
|
13
|
+
export interface RemoteSessionBannerProps {
|
|
14
|
+
lifecycle: RemoteSessionRuntimeState;
|
|
15
|
+
hint?: string | undefined;
|
|
16
|
+
retrying?: boolean;
|
|
17
|
+
onRetry: () => void;
|
|
18
|
+
onClose: () => void;
|
|
19
|
+
onBrowse: () => void;
|
|
20
|
+
}
|
|
21
|
+
export declare function RemoteSessionBanner({ lifecycle, hint, retrying, onRetry, onClose, onBrowse, }: RemoteSessionBannerProps): import("react").JSX.Element | null;
|
|
22
|
+
//# sourceMappingURL=RemoteSessionBanner.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RemoteSessionBanner.d.ts","sourceRoot":"","sources":["../../src/workspace/RemoteSessionBanner.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAiD,KAAK,yBAAyB,EAAE,MAAM,eAAe,CAAC;AAY9G;;;;GAIG;AACH,wBAAgB,yBAAyB,CAAC,SAAS,EAAE,MAAM,GAAG,yBAAyB,GAAG,SAAS,CAclG;AAED;;;GAGG;AACH,wBAAgB,uBAAuB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAmB7E;AAoCD,MAAM,WAAW,wBAAwB;IACvC,SAAS,EAAE,yBAAyB,CAAC;IACrC,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1B,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,QAAQ,EAAE,MAAM,IAAI,CAAC;CACtB;AAED,wBAAgB,mBAAmB,CAAC,EAClC,SAAS,EACT,IAAI,EACJ,QAAQ,EACR,OAAO,EACP,OAAO,EACP,QAAQ,GACT,EAAE,wBAAwB,sCAyC1B"}
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { useCallback, useEffect, useState, useSyncExternalStore } from "react";
|
|
3
|
+
import { useGhostteaRuntime } from "../context.js";
|
|
4
|
+
import { showsStaleScreen } from "../runtime.js";
|
|
5
|
+
import { contactElapsedMs, inputSuppressionHint, remoteBannerActionLabel, remoteBannerContent, retryCountdownMs, } from "./remote-banner.js";
|
|
6
|
+
const SUPPRESSION_HINT_MS = 4_000;
|
|
7
|
+
const RECONNECTED_FLASH_MS = 2_000;
|
|
8
|
+
/**
|
|
9
|
+
* Tracks one session's lifecycle. The runtime is the external store: it keeps
|
|
10
|
+
* one stable record per session, so the snapshot's identity only changes when
|
|
11
|
+
* a lifecycle event replaces it.
|
|
12
|
+
*/
|
|
13
|
+
export function useRemoteSessionLifecycle(sessionId) {
|
|
14
|
+
const terminalRuntime = useGhostteaRuntime();
|
|
15
|
+
const subscribe = useCallback((onStoreChange) => {
|
|
16
|
+
const update = (event) => {
|
|
17
|
+
const detail = event.detail;
|
|
18
|
+
if (detail.sessionId === sessionId)
|
|
19
|
+
onStoreChange();
|
|
20
|
+
};
|
|
21
|
+
terminalRuntime.addEventListener("remote-session-state", update);
|
|
22
|
+
return () => terminalRuntime.removeEventListener("remote-session-state", update);
|
|
23
|
+
}, [sessionId, terminalRuntime]);
|
|
24
|
+
return useSyncExternalStore(subscribe, () => terminalRuntime.remoteSession(sessionId));
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* The transient note shown after a swallowed keypress. It answers a question
|
|
28
|
+
* the user just asked by typing, so it is deliberately short-lived.
|
|
29
|
+
*/
|
|
30
|
+
export function useInputSuppressionHint(sessionId) {
|
|
31
|
+
const terminalRuntime = useGhostteaRuntime();
|
|
32
|
+
const [hint, setHint] = useState();
|
|
33
|
+
useEffect(() => {
|
|
34
|
+
let timer;
|
|
35
|
+
const suppressed = (event) => {
|
|
36
|
+
const detail = event.detail;
|
|
37
|
+
if (detail.sessionId !== sessionId || detail.state === "live")
|
|
38
|
+
return;
|
|
39
|
+
setHint(inputSuppressionHint(detail.state));
|
|
40
|
+
if (timer !== undefined)
|
|
41
|
+
window.clearTimeout(timer);
|
|
42
|
+
timer = window.setTimeout(() => setHint(undefined), SUPPRESSION_HINT_MS);
|
|
43
|
+
};
|
|
44
|
+
terminalRuntime.addEventListener("input-suppressed", suppressed);
|
|
45
|
+
return () => {
|
|
46
|
+
if (timer !== undefined)
|
|
47
|
+
window.clearTimeout(timer);
|
|
48
|
+
terminalRuntime.removeEventListener("input-suppressed", suppressed);
|
|
49
|
+
};
|
|
50
|
+
}, [sessionId, terminalRuntime]);
|
|
51
|
+
return hint;
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* A resume is acknowledged once, and only after the restored screen is
|
|
55
|
+
* actually on display — announcing "Reconnected" over the pre-outage frame
|
|
56
|
+
* would be the same lie the cooling exists to prevent.
|
|
57
|
+
*/
|
|
58
|
+
function useReconnectedFlash(lifecycle) {
|
|
59
|
+
const [flashing, setFlashing] = useState(false);
|
|
60
|
+
// Transitions are derived during render (the sanctioned adjust-on-change
|
|
61
|
+
// pattern) so the effect below owns nothing but the timer. `armed` means a
|
|
62
|
+
// stale-screen episode happened and its recovery has not flashed yet; every
|
|
63
|
+
// branch guards on the state it changes, so renders converge.
|
|
64
|
+
const [armed, setArmed] = useState(false);
|
|
65
|
+
const [prevThawed, setPrevThawed] = useState(false);
|
|
66
|
+
const stale = showsStaleScreen(lifecycle.state);
|
|
67
|
+
const thawed = lifecycle.state === "live" && !lifecycle.awaitingRecoveryFrame;
|
|
68
|
+
if (stale && !armed) {
|
|
69
|
+
setArmed(true);
|
|
70
|
+
if (flashing)
|
|
71
|
+
setFlashing(false);
|
|
72
|
+
if (prevThawed)
|
|
73
|
+
setPrevThawed(false);
|
|
74
|
+
}
|
|
75
|
+
else if (!stale && thawed && !prevThawed) {
|
|
76
|
+
setPrevThawed(true);
|
|
77
|
+
if (armed) {
|
|
78
|
+
setArmed(false);
|
|
79
|
+
setFlashing(true);
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
useEffect(() => {
|
|
83
|
+
if (!flashing)
|
|
84
|
+
return undefined;
|
|
85
|
+
const timer = window.setTimeout(() => setFlashing(false), RECONNECTED_FLASH_MS);
|
|
86
|
+
return () => window.clearTimeout(timer);
|
|
87
|
+
}, [flashing]);
|
|
88
|
+
return flashing;
|
|
89
|
+
}
|
|
90
|
+
export function RemoteSessionBanner({ lifecycle, hint, retrying, onRetry, onClose, onBrowse, }) {
|
|
91
|
+
const [now, setNow] = useState(() => performance.now());
|
|
92
|
+
const ticking = lifecycle.state === "reconnecting" && (lifecycle.lastContactMs !== null || lifecycle.nextRetryMs !== null);
|
|
93
|
+
useEffect(() => {
|
|
94
|
+
if (!ticking)
|
|
95
|
+
return undefined;
|
|
96
|
+
const timer = window.setInterval(() => setNow(performance.now()), 1_000);
|
|
97
|
+
return () => window.clearInterval(timer);
|
|
98
|
+
}, [ticking]);
|
|
99
|
+
const reconnected = useReconnectedFlash(lifecycle);
|
|
100
|
+
const content = remoteBannerContent(lifecycle, contactElapsedMs(lifecycle, now), {
|
|
101
|
+
reconnected,
|
|
102
|
+
retryMs: retryCountdownMs(lifecycle, now),
|
|
103
|
+
});
|
|
104
|
+
if (!content)
|
|
105
|
+
return null;
|
|
106
|
+
return (_jsxs("div", { className: `remote-session-banner is-${lifecycle.state}`, role: "status", children: [content.glyph ? (_jsx("span", { className: `remote-session-banner-glyph${content.spinning ? " is-spinning" : ""}`, "aria-hidden": "true", children: content.glyph })) : null, _jsx("span", { className: "remote-session-banner-message", children: content.message }), hint ? _jsx("span", { className: "remote-session-banner-hint", children: hint }) : null, content.actions.length > 0 ? (_jsx("span", { className: "remote-session-banner-actions", children: content.actions.map((action) => (_jsx("button", { type: "button", disabled: action === "retry" && retrying === true, onClick: action === "retry" ? onRetry : action === "close" ? onClose : onBrowse, children: action === "retry" && retrying ? "Retrying…" : remoteBannerActionLabel(action, lifecycle) }, action))) })) : null] }));
|
|
107
|
+
}
|
|
108
|
+
//# sourceMappingURL=RemoteSessionBanner.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RemoteSessionBanner.js","sourceRoot":"","sources":["../../src/workspace/RemoteSessionBanner.tsx"],"names":[],"mappings":"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"}
|
|
@@ -3,10 +3,14 @@ export interface RemoteChoice {
|
|
|
3
3
|
host: RemoteHostSummary;
|
|
4
4
|
session: SharedSessionSummary;
|
|
5
5
|
}
|
|
6
|
+
/** Attachable sessions matching the search text, optionally on one host only. */
|
|
7
|
+
export declare function remoteSessionChoices(hosts: readonly RemoteHostSummary[], query: string, deviceId?: string): RemoteChoice[];
|
|
6
8
|
interface RemoteSessionPaletteProps {
|
|
9
|
+
/** Restrict the listing to one host; every discovered host when omitted. */
|
|
10
|
+
deviceId?: string;
|
|
7
11
|
onClose: () => void;
|
|
8
12
|
onOpen: (choice: RemoteChoice) => Promise<void>;
|
|
9
13
|
}
|
|
10
|
-
export declare function RemoteSessionPalette({ onClose, onOpen }: RemoteSessionPaletteProps): import("react").JSX.Element;
|
|
14
|
+
export declare function RemoteSessionPalette({ deviceId, onClose, onOpen }: RemoteSessionPaletteProps): import("react").JSX.Element;
|
|
11
15
|
export {};
|
|
12
16
|
//# sourceMappingURL=RemoteSessionPalette.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RemoteSessionPalette.d.ts","sourceRoot":"","sources":["../../src/workspace/RemoteSessionPalette.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,iBAAiB,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAC;AAG3F,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,iBAAiB,CAAC;IACxB,OAAO,EAAE,oBAAoB,CAAC;CAC/B;AAED,UAAU,yBAAyB;IACjC,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,MAAM,EAAE,CAAC,MAAM,EAAE,YAAY,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CACjD;AAED,wBAAgB,oBAAoB,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE,yBAAyB,+
|
|
1
|
+
{"version":3,"file":"RemoteSessionPalette.d.ts","sourceRoot":"","sources":["../../src/workspace/RemoteSessionPalette.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,iBAAiB,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAC;AAG3F,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,iBAAiB,CAAC;IACxB,OAAO,EAAE,oBAAoB,CAAC;CAC/B;AAED,iFAAiF;AACjF,wBAAgB,oBAAoB,CAClC,KAAK,EAAE,SAAS,iBAAiB,EAAE,EACnC,KAAK,EAAE,MAAM,EACb,QAAQ,CAAC,EAAE,MAAM,GAChB,YAAY,EAAE,CAgBhB;AAED,UAAU,yBAAyB;IACjC,4EAA4E;IAC5E,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,MAAM,EAAE,CAAC,MAAM,EAAE,YAAY,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CACjD;AAED,wBAAgB,oBAAoB,CAAC,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE,yBAAyB,+BA6L5F"}
|
|
@@ -1,7 +1,24 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
2
|
import { useCallback, useEffect, useMemo, useRef, useState } from "react";
|
|
3
3
|
import { useGhostteaRuntime } from "../context.js";
|
|
4
|
-
|
|
4
|
+
/** Attachable sessions matching the search text, optionally on one host only. */
|
|
5
|
+
export function remoteSessionChoices(hosts, query, deviceId) {
|
|
6
|
+
const normalized = query.trim().toLocaleLowerCase();
|
|
7
|
+
return hosts
|
|
8
|
+
.filter((host) => deviceId === undefined || host.deviceId === deviceId)
|
|
9
|
+
.flatMap((host) => host.sessions
|
|
10
|
+
.filter((session) => session.attachable && session.running)
|
|
11
|
+
.filter((session) => {
|
|
12
|
+
if (!normalized)
|
|
13
|
+
return true;
|
|
14
|
+
return [host.deviceName, session.title, session.cwdLabel ?? ""]
|
|
15
|
+
.join(" ")
|
|
16
|
+
.toLocaleLowerCase()
|
|
17
|
+
.includes(normalized);
|
|
18
|
+
})
|
|
19
|
+
.map((session) => ({ host, session })));
|
|
20
|
+
}
|
|
21
|
+
export function RemoteSessionPalette({ deviceId, onClose, onOpen }) {
|
|
5
22
|
const terminalRuntime = useGhostteaRuntime();
|
|
6
23
|
const inputRef = useRef(null);
|
|
7
24
|
const aliveRef = useRef(true);
|
|
@@ -65,20 +82,7 @@ export function RemoteSessionPalette({ onClose, onOpen }) {
|
|
|
65
82
|
window.clearInterval(refresh);
|
|
66
83
|
};
|
|
67
84
|
}, [load]);
|
|
68
|
-
const choices = useMemo(() =>
|
|
69
|
-
const normalized = query.trim().toLocaleLowerCase();
|
|
70
|
-
return hosts.flatMap((host) => host.sessions
|
|
71
|
-
.filter((session) => session.attachable && session.running)
|
|
72
|
-
.filter((session) => {
|
|
73
|
-
if (!normalized)
|
|
74
|
-
return true;
|
|
75
|
-
return [host.deviceName, session.title, session.cwdLabel ?? ""]
|
|
76
|
-
.join(" ")
|
|
77
|
-
.toLocaleLowerCase()
|
|
78
|
-
.includes(normalized);
|
|
79
|
-
})
|
|
80
|
-
.map((session) => ({ host, session })));
|
|
81
|
-
}, [hosts, query]);
|
|
85
|
+
const choices = useMemo(() => remoteSessionChoices(hosts, query, deviceId), [deviceId, hosts, query]);
|
|
82
86
|
const selectedIndex = Math.min(selected, Math.max(0, choices.length - 1));
|
|
83
87
|
const openChoice = async (choice) => {
|
|
84
88
|
if (opening)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RemoteSessionPalette.js","sourceRoot":"","sources":["../../src/workspace/RemoteSessionPalette.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAG1E,OAAO,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"RemoteSessionPalette.js","sourceRoot":"","sources":["../../src/workspace/RemoteSessionPalette.tsx"],"names":[],"mappings":"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"}
|
|
@@ -2,7 +2,8 @@ import { type ComponentType } from "react";
|
|
|
2
2
|
import type { SessionSummary } from "@vibecook/ghosttea-protocol";
|
|
3
3
|
import { type TerminalMenuAction } from "../TerminalSurface.js";
|
|
4
4
|
import type { TerminalTheme } from "../renderers/types.js";
|
|
5
|
-
import {
|
|
5
|
+
import { useGhostteaRuntime } from "../context.js";
|
|
6
|
+
import { type PaneNode, type SplitAxis } from "./pane-layout.js";
|
|
6
7
|
export declare function workspaceOwnsHotkey(active: boolean, root: Pick<HTMLElement, "contains"> | null, target: EventTarget | null, activeElement: Element | null): boolean;
|
|
7
8
|
export interface GhostteaWorkspacePlatform {
|
|
8
9
|
platform?: string;
|
|
@@ -48,6 +49,13 @@ export interface GhostteaWorkspacePaneDecoration {
|
|
|
48
49
|
color?: string;
|
|
49
50
|
label?: string;
|
|
50
51
|
}
|
|
52
|
+
export interface GhostteaPaneRehydration {
|
|
53
|
+
/** The value `paneMeta` returned for this pane when the workspace was persisted, if any. */
|
|
54
|
+
meta: unknown;
|
|
55
|
+
/** The session id the pane referenced when it was persisted; it is no longer live. */
|
|
56
|
+
sessionId: string;
|
|
57
|
+
paneId: string;
|
|
58
|
+
}
|
|
51
59
|
export interface GhostteaWorkspaceProps {
|
|
52
60
|
platform: GhostteaWorkspacePlatform;
|
|
53
61
|
storageKey?: string;
|
|
@@ -56,6 +64,14 @@ export interface GhostteaWorkspaceProps {
|
|
|
56
64
|
}>;
|
|
57
65
|
theme?: TerminalTheme;
|
|
58
66
|
decoratePane?: ((session: SessionSummary, paneId: string) => GhostteaWorkspacePaneDecoration | undefined) | undefined;
|
|
67
|
+
/** Attach durable, embedder-defined data to a pane as it is persisted; opaque to Ghosttea. */
|
|
68
|
+
paneMeta?: ((session: SessionSummary, paneId: string) => unknown) | undefined;
|
|
69
|
+
/**
|
|
70
|
+
* Called at load for a persisted pane whose session is no longer live. Return a live session
|
|
71
|
+
* to keep the pane (and its splits) in place, or null to drop it (the default behavior).
|
|
72
|
+
* Panes are resolved concurrently and applied in tree order.
|
|
73
|
+
*/
|
|
74
|
+
onRehydratePane?: ((context: GhostteaPaneRehydration) => Promise<SessionSummary | null> | SessionSummary | null) | undefined;
|
|
59
75
|
onActiveSessionChange?: (session: SessionSummary | undefined) => void;
|
|
60
76
|
createSplitSession?: (activeSession: SessionSummary, axis: SplitAxis) => Promise<SessionSummary>;
|
|
61
77
|
enableRemoteSessions?: boolean;
|
|
@@ -65,5 +81,12 @@ export interface GhostteaWorkspaceProps {
|
|
|
65
81
|
initialCwd?: string;
|
|
66
82
|
onSessionsChange?: (sessionIds: readonly string[]) => void;
|
|
67
83
|
}
|
|
68
|
-
|
|
84
|
+
interface InitialWorkspace {
|
|
85
|
+
layout: PaneNode;
|
|
86
|
+
activePaneId: string;
|
|
87
|
+
zoomedPaneId: string | null;
|
|
88
|
+
}
|
|
89
|
+
export declare function initializeWorkspace(terminalRuntime: ReturnType<typeof useGhostteaRuntime>, storageKey: string, defaultShell: string, claimExistingSessions: boolean, initialCwd: string | undefined, rehydratePane: (context: GhostteaPaneRehydration) => Promise<SessionSummary | null> | SessionSummary | null): Promise<InitialWorkspace>;
|
|
90
|
+
export declare function GhostteaWorkspace({ platform, storageKey, sidebar, theme, decoratePane, paneMeta, onRehydratePane, onActiveSessionChange, createSplitSession, enableRemoteSessions, active, showTitlebar, claimExistingSessions, initialCwd, onSessionsChange, }: GhostteaWorkspaceProps): import("react").JSX.Element;
|
|
91
|
+
export {};
|
|
69
92
|
//# sourceMappingURL=Workspace.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Workspace.d.ts","sourceRoot":"","sources":["../../src/workspace/Workspace.tsx"],"names":[],"mappings":"AAAA,OAAO,EAOL,KAAK,aAAa,EAEnB,MAAM,OAAO,CAAC;AACf,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"Workspace.d.ts","sourceRoot":"","sources":["../../src/workspace/Workspace.tsx"],"names":[],"mappings":"AAAA,OAAO,EAOL,KAAK,aAAa,EAEnB,MAAM,OAAO,CAAC;AACf,OAAO,KAAK,EAAkB,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAClF,OAAO,EAAmB,KAAK,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AACjF,OAAO,KAAK,EAAmB,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAC5E,OAAO,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AAMnD,OAAO,EAgBL,KAAK,QAAQ,EACb,KAAK,SAAS,EACf,MAAM,kBAAkB,CAAC;AAU1B,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,OAAO,EACf,IAAI,EAAE,IAAI,CAAC,WAAW,EAAE,UAAU,CAAC,GAAG,IAAI,EAC1C,MAAM,EAAE,WAAW,GAAG,IAAI,EAC1B,aAAa,EAAE,OAAO,GAAG,IAAI,GAC5B,OAAO,CAKT;AAED,MAAM,WAAW,yBAAyB;IACxC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IAC9C,kFAAkF;IAClF,UAAU,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,CAAC;IACxC,eAAe,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,CAAC;IAC5C,gBAAgB,EAAE,MAAM,IAAI,CAAC;IAC7B,WAAW,EAAE,MAAM,IAAI,CAAC;IACxB,+DAA+D;IAC/D,SAAS,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;IACnC,wDAAwD;IACxD,IAAI,CAAC,EAAE,MAAM,IAAI,CAAC;IAClB,mCAAmC;IACnC,eAAe,CAAC,EAAE,MAAM,IAAI,CAAC;IAC7B,mEAAmE;IACnE,UAAU,CAAC,EAAE,MAAM,IAAI,CAAC;IACxB,+DAA+D;IAC/D,YAAY,CAAC,EAAE,MAAM,IAAI,CAAC;IAC1B,MAAM,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;IAChC,SAAS,CAAC,EAAE,CAAC,MAAM,EAAE,UAAU,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,KAAK,IAAI,CAAC;IACpE,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAC;IACtB,YAAY,EAAE,CAAC,QAAQ,EAAE,CAAC,MAAM,EAAE,kBAAkB,KAAK,IAAI,KAAK,MAAM,IAAI,CAAC;CAC9E;AAED,MAAM,WAAW,qBAAqB;IACpC,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,cAAc,CAAC;CACzB;AAED,MAAM,WAAW,wBAAwB;IACvC,YAAY,EAAE,MAAM,GAAG,SAAS,CAAC;IACjC,aAAa,EAAE,cAAc,GAAG,SAAS,CAAC;IAC1C,KAAK,EAAE,SAAS,qBAAqB,EAAE,CAAC;IACxC,QAAQ,EAAE,SAAS,cAAc,EAAE,CAAC;IACpC,UAAU,EAAE,CAAC,OAAO,EAAE,cAAc,EAAE,IAAI,CAAC,EAAE,SAAS,KAAK,IAAI,CAAC;IAChE,eAAe,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,IAAI,CAAC;IAC7C,YAAY,EAAE,CAAC,OAAO,EAAE,cAAc,KAAK,IAAI,CAAC;IAChD,YAAY,EAAE,CAAC,OAAO,EAAE,cAAc,KAAK,IAAI,CAAC;IAChD,yBAAyB,EAAE,MAAM,OAAO,CAAC,cAAc,GAAG,SAAS,CAAC,CAAC;IACrE,WAAW,EAAE,CAAC,IAAI,CAAC,EAAE,SAAS,KAAK,OAAO,CAAC,cAAc,GAAG,SAAS,CAAC,CAAC;CACxE;AAED,MAAM,WAAW,+BAA+B;IAC9C,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,uBAAuB;IACtC,4FAA4F;IAC5F,IAAI,EAAE,OAAO,CAAC;IACd,sFAAsF;IACtF,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,sBAAsB;IACrC,QAAQ,EAAE,yBAAyB,CAAC;IACpC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,aAAa,CAAC;QAAE,SAAS,EAAE,wBAAwB,CAAA;KAAE,CAAC,CAAC;IACjE,KAAK,CAAC,EAAE,aAAa,CAAC;IACtB,YAAY,CAAC,EAAE,CAAC,CAAC,OAAO,EAAE,cAAc,EAAE,MAAM,EAAE,MAAM,KAAK,+BAA+B,GAAG,SAAS,CAAC,GAAG,SAAS,CAAC;IACtH,8FAA8F;IAC9F,QAAQ,CAAC,EAAE,CAAC,CAAC,OAAO,EAAE,cAAc,EAAE,MAAM,EAAE,MAAM,KAAK,OAAO,CAAC,GAAG,SAAS,CAAC;IAC9E;;;;OAIG;IACH,eAAe,CAAC,EACd,CAAC,CAAC,OAAO,EAAE,uBAAuB,KAAK,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC,GAAG,cAAc,GAAG,IAAI,CAAC,GAAG,SAAS,CAAC;IAC7G,qBAAqB,CAAC,EAAE,CAAC,OAAO,EAAE,cAAc,GAAG,SAAS,KAAK,IAAI,CAAC;IACtE,kBAAkB,CAAC,EAAE,CAAC,aAAa,EAAE,cAAc,EAAE,IAAI,EAAE,SAAS,KAAK,OAAO,CAAC,cAAc,CAAC,CAAC;IACjG,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,qBAAqB,CAAC,EAAE,OAAO,CAAC;IAChC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,gBAAgB,CAAC,EAAE,CAAC,UAAU,EAAE,SAAS,MAAM,EAAE,KAAK,IAAI,CAAC;CAC5D;AAED,UAAU,gBAAgB;IACxB,MAAM,EAAE,QAAQ,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;CAC7B;AAUD,wBAAsB,mBAAmB,CACvC,eAAe,EAAE,UAAU,CAAC,OAAO,kBAAkB,CAAC,EACtD,UAAU,EAAE,MAAM,EAClB,YAAY,EAAE,MAAM,EACpB,qBAAqB,EAAE,OAAO,EAC9B,UAAU,EAAE,MAAM,GAAG,SAAS,EAC9B,aAAa,EAAE,CAAC,OAAO,EAAE,uBAAuB,KAAK,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC,GAAG,cAAc,GAAG,IAAI,GAC1G,OAAO,CAAC,gBAAgB,CAAC,CAuD3B;AAiPD,wBAAgB,iBAAiB,CAAC,EAChC,QAAQ,EACR,UAAgC,EAChC,OAAO,EACP,KAAK,EACL,YAAY,EACZ,QAAQ,EACR,eAAe,EACf,qBAAqB,EACrB,kBAAkB,EAClB,oBAA2B,EAC3B,MAAa,EACb,YAAmB,EACnB,qBAA4B,EAC5B,UAAU,EACV,gBAAgB,GACjB,EAAE,sBAAsB,+BA+jBxB"}
|