@vibesdotdev/terminal-client 0.0.0-stage → 1.0.0-rc.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/LICENSE +18 -0
- package/README.md +102 -2
- package/dist/ansi/index.d.ts +11 -0
- package/dist/ansi/index.d.ts.map +1 -0
- package/dist/ansi/index.js +11 -0
- package/dist/ansi/index.js.map +1 -0
- package/dist/ansi/keymap.d.ts +77 -0
- package/dist/ansi/keymap.d.ts.map +1 -0
- package/dist/ansi/keymap.js +257 -0
- package/dist/ansi/keymap.js.map +1 -0
- package/dist/api-client-plugin.d.ts +4 -0
- package/dist/api-client-plugin.d.ts.map +1 -0
- package/dist/api-client-plugin.js +16 -0
- package/dist/api-client-plugin.js.map +1 -0
- package/dist/client/http-session.d.ts +44 -0
- package/dist/client/http-session.d.ts.map +1 -0
- package/dist/client/http-session.js +457 -0
- package/dist/client/http-session.js.map +1 -0
- package/dist/client/index.d.ts +8 -0
- package/dist/client/index.d.ts.map +1 -0
- package/dist/client/index.js +8 -0
- package/dist/client/index.js.map +1 -0
- package/dist/client.d.ts +56 -0
- package/dist/client.d.ts.map +1 -0
- package/dist/client.js +169 -0
- package/dist/client.js.map +1 -0
- package/dist/index.d.ts +14 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +14 -0
- package/dist/index.js.map +1 -0
- package/dist/pty-bridge/index.d.ts +15 -0
- package/dist/pty-bridge/index.d.ts.map +1 -0
- package/dist/pty-bridge/index.js +15 -0
- package/dist/pty-bridge/index.js.map +1 -0
- package/dist/pty-bridge/protocol.d.ts +6 -0
- package/dist/pty-bridge/protocol.d.ts.map +1 -0
- package/dist/pty-bridge/protocol.js +6 -0
- package/dist/pty-bridge/protocol.js.map +1 -0
- package/dist/pty-bridge/server.d.ts +7 -0
- package/dist/pty-bridge/server.d.ts.map +1 -0
- package/dist/pty-bridge/server.js +9 -0
- package/dist/pty-bridge/server.js.map +1 -0
- package/dist/remote-session.d.ts +51 -0
- package/dist/remote-session.d.ts.map +1 -0
- package/dist/remote-session.js +326 -0
- package/dist/remote-session.js.map +1 -0
- package/dist/schemas/http.d.ts +61 -0
- package/dist/schemas/http.d.ts.map +1 -0
- package/dist/schemas/http.js +45 -0
- package/dist/schemas/http.js.map +1 -0
- package/dist/schemas/remote.d.ts +25 -0
- package/dist/schemas/remote.d.ts.map +1 -0
- package/dist/schemas/remote.js +23 -0
- package/dist/schemas/remote.js.map +1 -0
- package/dist/schemas/session.d.ts +26 -0
- package/dist/schemas/session.d.ts.map +1 -0
- package/dist/schemas/session.js +17 -0
- package/dist/schemas/session.js.map +1 -0
- package/dist/schemas/store.d.ts +29 -0
- package/dist/schemas/store.d.ts.map +1 -0
- package/dist/schemas/store.js +22 -0
- package/dist/schemas/store.js.map +1 -0
- package/dist/schemas/terminal.d.ts +296 -0
- package/dist/schemas/terminal.d.ts.map +1 -0
- package/dist/schemas/terminal.js +243 -0
- package/dist/schemas/terminal.js.map +1 -0
- package/dist/server/index.d.ts +9 -0
- package/dist/server/index.d.ts.map +1 -0
- package/dist/server/index.js +9 -0
- package/dist/server/index.js.map +1 -0
- package/dist/server/session-store.d.ts +176 -0
- package/dist/server/session-store.d.ts.map +1 -0
- package/dist/server/session-store.js +462 -0
- package/dist/server/session-store.js.map +1 -0
- package/dist/server/sse-stream.d.ts +32 -0
- package/dist/server/sse-stream.d.ts.map +1 -0
- package/dist/server/sse-stream.js +87 -0
- package/dist/server/sse-stream.js.map +1 -0
- package/dist/svelte/HostPicker.svelte +263 -0
- package/dist/svelte/HostPicker.svelte.d.ts +36 -0
- package/dist/svelte/HostPicker.svelte.d.ts.map +1 -0
- package/dist/svelte/README.md +75 -0
- package/dist/svelte/ReconnectBanner.svelte +88 -0
- package/dist/svelte/ReconnectBanner.svelte.d.ts +16 -0
- package/dist/svelte/ReconnectBanner.svelte.d.ts.map +1 -0
- package/dist/svelte/SessionTabs.svelte +192 -0
- package/dist/svelte/SessionTabs.svelte.d.ts +17 -0
- package/dist/svelte/SessionTabs.svelte.d.ts.map +1 -0
- package/dist/svelte/Terminal.svelte +567 -0
- package/dist/svelte/Terminal.svelte.d.ts +25 -0
- package/dist/svelte/Terminal.svelte.d.ts.map +1 -0
- package/dist/svelte/TerminalHostWorkspace.svelte +264 -0
- package/dist/svelte/TerminalHostWorkspace.svelte.d.ts +59 -0
- package/dist/svelte/TerminalHostWorkspace.svelte.d.ts.map +1 -0
- package/dist/svelte/TerminalMobileToolbar.svelte +56 -0
- package/dist/svelte/TerminalMobileToolbar.svelte.d.ts +14 -0
- package/dist/svelte/TerminalMobileToolbar.svelte.d.ts.map +1 -0
- package/dist/svelte/TerminalWorkspace.svelte +562 -0
- package/dist/svelte/TerminalWorkspace.svelte.d.ts +25 -0
- package/dist/svelte/TerminalWorkspace.svelte.d.ts.map +1 -0
- package/dist/svelte/ambient.d.ts +9 -0
- package/dist/svelte/docs/terminal-svelte.docs.descriptor.d.ts +4 -0
- package/dist/svelte/docs/terminal-svelte.docs.descriptor.d.ts.map +1 -0
- package/dist/svelte/docs/terminal-svelte.docs.descriptor.js +74 -0
- package/dist/svelte/index.d.ts +29 -0
- package/dist/svelte/index.d.ts.map +1 -0
- package/dist/svelte/index.js +28 -0
- package/dist/svelte/styles.css +8 -0
- package/dist/svelte/terminal-host-workspace.d.ts +152 -0
- package/dist/svelte/terminal-host-workspace.d.ts.map +1 -0
- package/dist/svelte/terminal-host-workspace.js +335 -0
- package/dist/svelte/terminal-session-authority.d.ts +17 -0
- package/dist/svelte/terminal-session-authority.d.ts.map +1 -0
- package/dist/svelte/terminal-session-authority.js +25 -0
- package/dist/svelte/terminal-svelte.plugin.d.ts +21 -0
- package/dist/svelte/terminal-svelte.plugin.d.ts.map +1 -0
- package/dist/svelte/terminal-svelte.plugin.js +53 -0
- package/dist/svelte/terminal-theme.d.ts +11 -0
- package/dist/svelte/terminal-theme.d.ts.map +1 -0
- package/dist/svelte/terminal-theme.js +116 -0
- package/dist/svelte/tool-widgets/TerminalToolCard.svelte +65 -0
- package/dist/svelte/tool-widgets/TerminalToolCard.svelte.d.ts +5 -0
- package/dist/svelte/tool-widgets/TerminalToolCard.svelte.d.ts.map +1 -0
- package/dist/svelte/tool-widgets/terminal-tool-card.d.ts +25 -0
- package/dist/svelte/tool-widgets/terminal-tool-card.d.ts.map +1 -0
- package/dist/svelte/tool-widgets/terminal-tool-card.js +116 -0
- package/dist/svelte/types.d.ts +160 -0
- package/dist/svelte/types.d.ts.map +1 -0
- package/dist/svelte/types.js +51 -0
- package/dist/svelte/workspace.d.ts +3 -0
- package/dist/svelte/workspace.d.ts.map +1 -0
- package/dist/svelte/workspace.js +2 -0
- package/dist/terminal-client.plugin.d.ts +3 -0
- package/dist/terminal-client.plugin.d.ts.map +1 -0
- package/dist/terminal-client.plugin.js +3 -0
- package/dist/terminal-client.plugin.js.map +1 -0
- package/dist/terminal-runtime.d.ts +30 -0
- package/dist/terminal-runtime.d.ts.map +1 -0
- package/dist/terminal-runtime.js +673 -0
- package/dist/terminal-runtime.js.map +1 -0
- package/dist/terminal.consumer.plugin.d.ts +14 -0
- package/dist/terminal.consumer.plugin.d.ts.map +1 -0
- package/dist/terminal.consumer.plugin.js +31 -0
- package/dist/terminal.consumer.plugin.js.map +1 -0
- package/dist/tools/terminal.impl.consumer.d.ts +11 -0
- package/dist/tools/terminal.impl.consumer.d.ts.map +1 -0
- package/dist/tools/terminal.impl.consumer.js +20 -0
- package/dist/tools/terminal.impl.consumer.js.map +1 -0
- package/dist/tools/terminal.schemas.d.ts +3 -0
- package/dist/tools/terminal.schemas.d.ts.map +1 -0
- package/dist/tools/terminal.schemas.js +3 -0
- package/dist/tools/terminal.schemas.js.map +1 -0
- package/dist/tools/terminal.unified.descriptor.d.ts +218 -0
- package/dist/tools/terminal.unified.descriptor.d.ts.map +1 -0
- package/dist/tools/terminal.unified.descriptor.js +36 -0
- package/dist/tools/terminal.unified.descriptor.js.map +1 -0
- package/dist/tui/index.d.ts +9 -0
- package/dist/tui/index.d.ts.map +1 -0
- package/dist/tui/index.js +8 -0
- package/dist/tui/index.js.map +1 -0
- package/dist/tui/terminal-open.descriptor.d.ts +9 -0
- package/dist/tui/terminal-open.descriptor.d.ts.map +1 -0
- package/dist/tui/terminal-open.descriptor.js +18 -0
- package/dist/tui/terminal-open.descriptor.js.map +1 -0
- package/dist/tui/terminal-open.impl.consumer.d.ts +9 -0
- package/dist/tui/terminal-open.impl.consumer.d.ts.map +1 -0
- package/dist/tui/terminal-open.impl.consumer.js +13 -0
- package/dist/tui/terminal-open.impl.consumer.js.map +1 -0
- package/dist/tui/terminal-registry.descriptor.d.ts +11 -0
- package/dist/tui/terminal-registry.descriptor.d.ts.map +1 -0
- package/dist/tui/terminal-registry.descriptor.js +17 -0
- package/dist/tui/terminal-registry.descriptor.js.map +1 -0
- package/dist/tui/terminal-registry.impl.consumer.d.ts +71 -0
- package/dist/tui/terminal-registry.impl.consumer.d.ts.map +1 -0
- package/dist/tui/terminal-registry.impl.consumer.js +190 -0
- package/dist/tui/terminal-registry.impl.consumer.js.map +1 -0
- package/dist/tui/terminal-tui.plugin.d.ts +10 -0
- package/dist/tui/terminal-tui.plugin.d.ts.map +1 -0
- package/dist/tui/terminal-tui.plugin.js +32 -0
- package/dist/tui/terminal-tui.plugin.js.map +1 -0
- package/dist/tui/terminal.descriptor.d.ts +10 -0
- package/dist/tui/terminal.descriptor.d.ts.map +1 -0
- package/dist/tui/terminal.descriptor.js +25 -0
- package/dist/tui/terminal.descriptor.js.map +1 -0
- package/dist/tui/terminal.impl.consumer.d.ts +14 -0
- package/dist/tui/terminal.impl.consumer.d.ts.map +1 -0
- package/dist/tui/terminal.impl.consumer.js +189 -0
- package/dist/tui/terminal.impl.consumer.js.map +1 -0
- package/dist/tui/terminal.state-key.d.ts +30 -0
- package/dist/tui/terminal.state-key.d.ts.map +1 -0
- package/dist/tui/terminal.state-key.js +9 -0
- package/dist/tui/terminal.state-key.js.map +1 -0
- package/dist/tui/terminal.state.d.ts +152 -0
- package/dist/tui/terminal.state.d.ts.map +1 -0
- package/dist/tui/terminal.state.js +149 -0
- package/dist/tui/terminal.state.js.map +1 -0
- package/dist/workspace.d.ts +155 -0
- package/dist/workspace.d.ts.map +1 -0
- package/dist/workspace.js +292 -0
- package/dist/workspace.js.map +1 -0
- package/package.json +228 -4
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Terminal Registry — tui/state implementation (consumer)
|
|
3
|
+
*
|
|
4
|
+
* Builds the honest place catalog from the LIVE runtime: registered
|
|
5
|
+
* `runtime/execution` providers (device local + cloud exec-only) and
|
|
6
|
+
* `fleet/host` descriptors (remote PTY reached via getVibesRemote). No place
|
|
7
|
+
* is invented — an archetype the runtime cannot back yet is shown as
|
|
8
|
+
* `unconfigured`, never as a fake connection.
|
|
9
|
+
*
|
|
10
|
+
* The launched-session list is owned by the tui/app (transient UI actions); the
|
|
11
|
+
* state only enumerates places and re-derives them on REFRESH / poll.
|
|
12
|
+
*/
|
|
13
|
+
import type { TuiStateImplementation, TuiStateContext, TuiStateAction } from '@vibesdotdev/tui/kinds/tui-state';
|
|
14
|
+
import { type TerminalRegistryState } from './terminal.state.ts';
|
|
15
|
+
export declare class TerminalRegistryImplementation implements TuiStateImplementation<TerminalRegistryState> {
|
|
16
|
+
readonly key: import("@vibesdotdev/tui").TuiStateKey<{
|
|
17
|
+
places: {
|
|
18
|
+
id: string;
|
|
19
|
+
kind: "cloud" | "device" | "fleet";
|
|
20
|
+
label: string;
|
|
21
|
+
capabilities: {
|
|
22
|
+
pty: boolean;
|
|
23
|
+
shell: boolean;
|
|
24
|
+
signals: boolean;
|
|
25
|
+
resize: boolean;
|
|
26
|
+
maxSessions: number;
|
|
27
|
+
};
|
|
28
|
+
availability: "unavailable" | "available" | "unconfigured";
|
|
29
|
+
detail: string;
|
|
30
|
+
executionId?: string | undefined;
|
|
31
|
+
}[];
|
|
32
|
+
sessions: {
|
|
33
|
+
id: string;
|
|
34
|
+
placeId: string;
|
|
35
|
+
placeLabel: string;
|
|
36
|
+
command: string;
|
|
37
|
+
status: "error" | "live" | "exited" | "ran" | "handoff";
|
|
38
|
+
openedAt: string;
|
|
39
|
+
note: string;
|
|
40
|
+
}[];
|
|
41
|
+
loaded: boolean;
|
|
42
|
+
loading: boolean;
|
|
43
|
+
error: string | null;
|
|
44
|
+
}>;
|
|
45
|
+
private readonly scratch;
|
|
46
|
+
init(ctx: TuiStateContext<TerminalRegistryState>): Promise<{
|
|
47
|
+
places: {
|
|
48
|
+
id: string;
|
|
49
|
+
kind: "cloud" | "device" | "fleet";
|
|
50
|
+
label: string;
|
|
51
|
+
capabilities: {
|
|
52
|
+
pty: boolean;
|
|
53
|
+
shell: boolean;
|
|
54
|
+
signals: boolean;
|
|
55
|
+
resize: boolean;
|
|
56
|
+
maxSessions: number;
|
|
57
|
+
};
|
|
58
|
+
availability: "unavailable" | "available" | "unconfigured";
|
|
59
|
+
detail: string;
|
|
60
|
+
executionId?: string | undefined;
|
|
61
|
+
}[];
|
|
62
|
+
sessions: never[];
|
|
63
|
+
loaded: boolean;
|
|
64
|
+
loading: boolean;
|
|
65
|
+
error: string | null;
|
|
66
|
+
}>;
|
|
67
|
+
reduce(state: TerminalRegistryState, action: TuiStateAction, ctx?: TuiStateContext<TerminalRegistryState>): TerminalRegistryState;
|
|
68
|
+
dispose(ctx?: TuiStateContext<TerminalRegistryState>): void;
|
|
69
|
+
}
|
|
70
|
+
export default TerminalRegistryImplementation;
|
|
71
|
+
//# sourceMappingURL=terminal-registry.impl.consumer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"terminal-registry.impl.consumer.d.ts","sourceRoot":"","sources":["../../src/tui/terminal-registry.impl.consumer.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,EACX,sBAAsB,EACtB,eAAe,EACf,cAAc,EACd,MAAM,kCAAkC,CAAC;AAU1C,OAAO,EAIN,KAAK,qBAAqB,EAE1B,MAAM,qBAAqB,CAAC;AA6H7B,qBAAa,8BAA+B,YAAW,sBAAsB,CAAC,qBAAqB,CAAC;IACnG,QAAQ,CAAC,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAA4B;IACxC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA0G;IAE5H,IAAI,CAAC,GAAG,EAAE,eAAe,CAAC,qBAAqB,CAAC;;;;;;;;;;;;;;;;;;;;;IA6BtD,MAAM,CACL,KAAK,EAAE,qBAAqB,EAC5B,MAAM,EAAE,cAAc,EACtB,GAAG,CAAC,EAAE,eAAe,CAAC,qBAAqB,CAAC,GAC1C,qBAAqB;IAmBxB,OAAO,CAAC,GAAG,CAAC,EAAE,eAAe,CAAC,qBAAqB,CAAC;CASpD;AAED,eAAe,8BAA8B,CAAC"}
|
|
@@ -0,0 +1,190 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Terminal Registry — tui/state implementation (consumer)
|
|
3
|
+
*
|
|
4
|
+
* Builds the honest place catalog from the LIVE runtime: registered
|
|
5
|
+
* `runtime/execution` providers (device local + cloud exec-only) and
|
|
6
|
+
* `fleet/host` descriptors (remote PTY reached via getVibesRemote). No place
|
|
7
|
+
* is invented — an archetype the runtime cannot back yet is shown as
|
|
8
|
+
* `unconfigured`, never as a fake connection.
|
|
9
|
+
*
|
|
10
|
+
* The launched-session list is owned by the tui/app (transient UI actions); the
|
|
11
|
+
* state only enumerates places and re-derives them on REFRESH / poll.
|
|
12
|
+
*/
|
|
13
|
+
import { CapabilityError, CaughtFailureSchema } from '@vibesdotdev/kernel';
|
|
14
|
+
import { getLogger } from '@vibesdotdev/logging';
|
|
15
|
+
import * as z from 'zod/v4';
|
|
16
|
+
import { terminalPlaceDefaultCapabilities, sortTerminalPlaces, TerminalSessionViewSchema } from "./terminal.state.js";
|
|
17
|
+
import { terminalRegistryStateKey } from "./terminal.state-key.js";
|
|
18
|
+
/** Minimal fleet/host descriptor shape we read — avoids a @vibesdotdev/fleet dep. */
|
|
19
|
+
const FleetHostDescriptorSchema = z.object({
|
|
20
|
+
id: z.string().min(1),
|
|
21
|
+
hostId: z.string().min(1).optional(),
|
|
22
|
+
name: z.string().min(1).optional()
|
|
23
|
+
}).passthrough();
|
|
24
|
+
function enumerateExecutionDescriptors(runtime) {
|
|
25
|
+
if (!runtime.hasKind('runtime/execution'))
|
|
26
|
+
return [];
|
|
27
|
+
return [...runtime.query('runtime/execution').descriptors()];
|
|
28
|
+
}
|
|
29
|
+
function enumerateFleetHosts(runtime) {
|
|
30
|
+
if (!runtime.hasKind('fleet/host'))
|
|
31
|
+
return [];
|
|
32
|
+
return runtime
|
|
33
|
+
.query('fleet/host')
|
|
34
|
+
.descriptors()
|
|
35
|
+
.map((descriptor) => FleetHostDescriptorSchema.parse(descriptor));
|
|
36
|
+
}
|
|
37
|
+
function isCloudDescriptor(d) {
|
|
38
|
+
if (d.capabilities && d.capabilities.pty === false)
|
|
39
|
+
return true;
|
|
40
|
+
return Array.isArray(d.hardware) && d.hardware.includes('cloud');
|
|
41
|
+
}
|
|
42
|
+
function buildPlaces(runtime) {
|
|
43
|
+
const execs = enumerateExecutionDescriptors(runtime);
|
|
44
|
+
const hosts = enumerateFleetHosts(runtime);
|
|
45
|
+
const places = [];
|
|
46
|
+
// Device — the local interactive PTY. Prefer a descriptor advertising pty.
|
|
47
|
+
const deviceExec = execs.find((d) => d.capabilities?.pty === true && !isCloudDescriptor(d)) ??
|
|
48
|
+
execs.find((d) => !isCloudDescriptor(d));
|
|
49
|
+
if (deviceExec) {
|
|
50
|
+
places.push({
|
|
51
|
+
id: 'device:local',
|
|
52
|
+
kind: 'device',
|
|
53
|
+
label: 'This machine',
|
|
54
|
+
executionId: deviceExec.id,
|
|
55
|
+
capabilities: deviceExec.capabilities ?? terminalPlaceDefaultCapabilities('device'),
|
|
56
|
+
availability: 'available',
|
|
57
|
+
detail: 'Local interactive PTY on this machine. Keystrokes stream live.'
|
|
58
|
+
});
|
|
59
|
+
}
|
|
60
|
+
else {
|
|
61
|
+
places.push({
|
|
62
|
+
id: 'device:local',
|
|
63
|
+
kind: 'device',
|
|
64
|
+
label: 'This machine',
|
|
65
|
+
capabilities: terminalPlaceDefaultCapabilities('device'),
|
|
66
|
+
availability: 'unconfigured',
|
|
67
|
+
detail: 'No local execution provider is registered in this runtime.'
|
|
68
|
+
});
|
|
69
|
+
}
|
|
70
|
+
// Fleet — each reachable host is a remote PTY place (getVibesRemote wire).
|
|
71
|
+
for (const host of hosts) {
|
|
72
|
+
const label = host.name ?? host.hostId ?? host.id;
|
|
73
|
+
places.push({
|
|
74
|
+
id: `fleet:${host.hostId ?? host.id}`,
|
|
75
|
+
kind: 'fleet',
|
|
76
|
+
label,
|
|
77
|
+
capabilities: terminalPlaceDefaultCapabilities('fleet'),
|
|
78
|
+
availability: 'available',
|
|
79
|
+
detail: `Remote PTY on ${label}, reached over the fleet wire (getVibesRemote).`
|
|
80
|
+
});
|
|
81
|
+
}
|
|
82
|
+
if (hosts.length === 0) {
|
|
83
|
+
places.push({
|
|
84
|
+
id: 'fleet:unconfigured',
|
|
85
|
+
kind: 'fleet',
|
|
86
|
+
label: 'Fleet host',
|
|
87
|
+
capabilities: terminalPlaceDefaultCapabilities('fleet'),
|
|
88
|
+
availability: 'unconfigured',
|
|
89
|
+
detail: 'No paired fleet host yet. Pair a machine to open a remote terminal here.'
|
|
90
|
+
});
|
|
91
|
+
}
|
|
92
|
+
// Cloud — an honest exec-only place (workerd has no PTY).
|
|
93
|
+
const cloudExec = execs.find(isCloudDescriptor);
|
|
94
|
+
if (cloudExec) {
|
|
95
|
+
places.push({
|
|
96
|
+
id: 'cloud:exec',
|
|
97
|
+
kind: 'cloud',
|
|
98
|
+
label: 'Cloud exec',
|
|
99
|
+
executionId: cloudExec.id,
|
|
100
|
+
capabilities: cloudExec.capabilities ?? terminalPlaceDefaultCapabilities('cloud'),
|
|
101
|
+
availability: 'available',
|
|
102
|
+
detail: 'Cloud exec session — commands run and return output. No live keystrokes.'
|
|
103
|
+
});
|
|
104
|
+
}
|
|
105
|
+
else {
|
|
106
|
+
places.push({
|
|
107
|
+
id: 'cloud:exec',
|
|
108
|
+
kind: 'cloud',
|
|
109
|
+
label: 'Cloud exec',
|
|
110
|
+
capabilities: terminalPlaceDefaultCapabilities('cloud'),
|
|
111
|
+
availability: 'unconfigured',
|
|
112
|
+
detail: 'No cloud exec provider is registered here. Cloud is exec-only (no PTY).'
|
|
113
|
+
});
|
|
114
|
+
}
|
|
115
|
+
return sortTerminalPlaces(places);
|
|
116
|
+
}
|
|
117
|
+
function derive(runtime) {
|
|
118
|
+
try {
|
|
119
|
+
return { places: buildPlaces(runtime), error: null, failure: null };
|
|
120
|
+
}
|
|
121
|
+
catch (cause) {
|
|
122
|
+
const failure = CapabilityError.from(CaughtFailureSchema.parse(cause));
|
|
123
|
+
return {
|
|
124
|
+
places: [],
|
|
125
|
+
error: failure.message,
|
|
126
|
+
failure
|
|
127
|
+
};
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
export class TerminalRegistryImplementation {
|
|
131
|
+
key = terminalRegistryStateKey;
|
|
132
|
+
scratch = new Map();
|
|
133
|
+
async init(ctx) {
|
|
134
|
+
const runtime = ctx.runtime;
|
|
135
|
+
const logger = getLogger('terminal.registry', runtime);
|
|
136
|
+
const readRegistry = () => {
|
|
137
|
+
const { failure, ...data } = derive(runtime);
|
|
138
|
+
if (failure)
|
|
139
|
+
logger.error('terminal registry refresh failed', { error: failure });
|
|
140
|
+
return data;
|
|
141
|
+
};
|
|
142
|
+
const refresh = () => {
|
|
143
|
+
const data = readRegistry();
|
|
144
|
+
ctx.setState((prev) => ({ ...prev, ...data, loaded: true, loading: false }));
|
|
145
|
+
};
|
|
146
|
+
const initial = readRegistry();
|
|
147
|
+
this.scratch.set(ctx, {
|
|
148
|
+
refresh,
|
|
149
|
+
disposeRefresh: runtime.lifecycle.interval(refresh, 8_000)
|
|
150
|
+
});
|
|
151
|
+
return {
|
|
152
|
+
places: initial.places,
|
|
153
|
+
sessions: [],
|
|
154
|
+
loaded: true,
|
|
155
|
+
loading: false,
|
|
156
|
+
error: initial.error
|
|
157
|
+
};
|
|
158
|
+
}
|
|
159
|
+
reduce(state, action, ctx) {
|
|
160
|
+
const mount = ctx ? this.scratch.get(ctx) : undefined;
|
|
161
|
+
if (action.type === 'REFRESH' && mount) {
|
|
162
|
+
mount.refresh();
|
|
163
|
+
return state;
|
|
164
|
+
}
|
|
165
|
+
if (action.type === 'ADD_SESSION' && action.payload) {
|
|
166
|
+
const parsed = TerminalSessionViewSchema.safeParse(action.payload);
|
|
167
|
+
if (!parsed.success) {
|
|
168
|
+
return { ...state, error: 'The terminal session update is invalid.' };
|
|
169
|
+
}
|
|
170
|
+
return { ...state, sessions: [parsed.data, ...state.sessions] };
|
|
171
|
+
}
|
|
172
|
+
if (action.type === 'CLEAR_SESSIONS') {
|
|
173
|
+
return { ...state, sessions: [] };
|
|
174
|
+
}
|
|
175
|
+
return state;
|
|
176
|
+
}
|
|
177
|
+
dispose(ctx) {
|
|
178
|
+
if (ctx) {
|
|
179
|
+
this.scratch.get(ctx)?.disposeRefresh();
|
|
180
|
+
this.scratch.delete(ctx);
|
|
181
|
+
}
|
|
182
|
+
else {
|
|
183
|
+
for (const mount of this.scratch.values())
|
|
184
|
+
mount.disposeRefresh();
|
|
185
|
+
this.scratch.clear();
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
export default TerminalRegistryImplementation;
|
|
190
|
+
//# sourceMappingURL=terminal-registry.impl.consumer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"terminal-registry.impl.consumer.js","sourceRoot":"","sources":["../../src/tui/terminal-registry.impl.consumer.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Terminal TUI Plugin
|
|
3
|
+
*
|
|
4
|
+
* Registers terminal launcher TUI surfaces: terminal.launcher app,
|
|
5
|
+
* terminal.open command, and terminal.registry state. Kept in a dedicated
|
|
6
|
+
* surface so non-TUI consumers never load JSX.
|
|
7
|
+
*/
|
|
8
|
+
declare const defaultExport: import("@vibesdotdev/kernel").RuntimePlugin;
|
|
9
|
+
export default defaultExport;
|
|
10
|
+
//# sourceMappingURL=terminal-tui.plugin.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"terminal-tui.plugin.d.ts","sourceRoot":"","sources":["../../src/tui/terminal-tui.plugin.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAcH,QAAA,MAAM,aAAa,6CAgBjB,CAAC;AAEH,eAAe,aAAa,CAAC"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Terminal TUI Plugin
|
|
3
|
+
*
|
|
4
|
+
* Registers terminal launcher TUI surfaces: terminal.launcher app,
|
|
5
|
+
* terminal.open command, and terminal.registry state. Kept in a dedicated
|
|
6
|
+
* surface so non-TUI consumers never load JSX.
|
|
7
|
+
*/
|
|
8
|
+
import { createRuntimePlugin, loader } from '@vibesdotdev/kernel';
|
|
9
|
+
import terminalOpen from "./terminal-open.descriptor.js";
|
|
10
|
+
import terminalRegistry from "./terminal-registry.descriptor.js";
|
|
11
|
+
import terminalDescriptor from "./terminal.descriptor.js";
|
|
12
|
+
const TUI_APP = { kind: 'tui/app' };
|
|
13
|
+
const TUI_COMMAND = { kind: 'tui/command' };
|
|
14
|
+
const TUI_STATE = { kind: 'tui/state' };
|
|
15
|
+
// Hoisted const: tsc rewriteRelativeImportExtensions does not rewrite `.ts` specifiers inside `export default <expr>` (TS 6.0.3).
|
|
16
|
+
const defaultExport = createRuntimePlugin({
|
|
17
|
+
id: 'terminal.tui',
|
|
18
|
+
name: 'Terminal TUI Surface',
|
|
19
|
+
description: 'Terminal launcher TUI app + open command + place registry state',
|
|
20
|
+
dependencies: ['tui'],
|
|
21
|
+
descriptors: [terminalOpen, terminalRegistry, terminalDescriptor],
|
|
22
|
+
loaders: [
|
|
23
|
+
loader('terminal.launcher', TUI_APP, () => import("./terminal.impl.consumer.js")),
|
|
24
|
+
loader('terminal.open', TUI_COMMAND, () => import("./terminal-open.impl.consumer.js")),
|
|
25
|
+
loader('terminal.registry', TUI_STATE, () => import("./terminal-registry.impl.consumer.js"))
|
|
26
|
+
],
|
|
27
|
+
async onDispose(runtime) {
|
|
28
|
+
runtime.query('tui/state').withId('terminal.registry').peek?.()?.dispose?.();
|
|
29
|
+
}
|
|
30
|
+
});
|
|
31
|
+
export default defaultExport;
|
|
32
|
+
//# sourceMappingURL=terminal-tui.plugin.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"terminal-tui.plugin.js","sourceRoot":"","sources":["../../src/tui/terminal-tui.plugin.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,EAAE,mBAAmB,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAElE,OAAO,YAAY,MAAM,+BAA+B,CAAC;AACzD,OAAO,gBAAgB,MAAM,mCAAmC,CAAC;AACjE,OAAO,kBAAkB,MAAM,0BAA0B,CAAC;AAE1D,MAAM,OAAO,GAAG,EAAE,IAAI,EAAE,SAAS,EAAW,CAAC;AAC7C,MAAM,WAAW,GAAG,EAAE,IAAI,EAAE,aAAa,EAAW,CAAC;AACrD,MAAM,SAAS,GAAG,EAAE,IAAI,EAAE,WAAW,EAAW,CAAC;AAEjD,kIAAkI;AAClI,MAAM,aAAa,GAAG,mBAAmB,CAAC;IACzC,EAAE,EAAE,cAAc;IAClB,IAAI,EAAE,sBAAsB;IAC5B,WAAW,EAAE,iEAAiE;IAC9E,YAAY,EAAE,CAAC,KAAK,CAAC;IAErB,WAAW,EAAE,CAAC,YAAY,EAAE,gBAAgB,EAAE,kBAAkB,CAAC;IAEjE,OAAO,EAAE;QACR,MAAM,CAAC,mBAAmB,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,6BAA8B,CAAC,CAAC;QAClF,MAAM,CAAC,eAAe,EAAE,WAAW,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,kCAAkC,CAAC,CAAC;QACtF,MAAM,CAAC,mBAAmB,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,sCAAsC,CAAC,CAAC;KAC5F;IACD,KAAK,CAAC,SAAS,CAAC,OAAO;QACtB,OAAO,CAAC,KAAK,CAAgC,WAAW,CAAC,CAAC,MAAM,CAAC,mBAAmB,CAAC,CAAC,IAAI,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,CAAC;IAC7G,CAAC;CACD,CAAC,CAAC;AAEH,eAAe,aAAa,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Terminal — tui/app descriptor
|
|
3
|
+
*
|
|
4
|
+
* Registers the terminal launcher/switcher page as a discoverable tui/app.
|
|
5
|
+
* Auto-registered as a studio page via the plugins-tui gateway bridge.
|
|
6
|
+
*/
|
|
7
|
+
import type { TuiAppDescriptor } from '@vibesdotdev/tui/schemas/tui-app';
|
|
8
|
+
declare const descriptor: TuiAppDescriptor;
|
|
9
|
+
export default descriptor;
|
|
10
|
+
//# sourceMappingURL=terminal.descriptor.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"terminal.descriptor.d.ts","sourceRoot":"","sources":["../../src/tui/terminal.descriptor.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,kCAAkC,CAAC;AAEzE,QAAA,MAAM,UAAU,EAAE,gBAiBjB,CAAC;AAEF,eAAe,UAAU,CAAC"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Terminal — tui/app descriptor
|
|
3
|
+
*
|
|
4
|
+
* Registers the terminal launcher/switcher page as a discoverable tui/app.
|
|
5
|
+
* Auto-registered as a studio page via the plugins-tui gateway bridge.
|
|
6
|
+
*/
|
|
7
|
+
const descriptor = {
|
|
8
|
+
kind: 'tui/app',
|
|
9
|
+
id: 'terminal.launcher',
|
|
10
|
+
title: 'Terminal',
|
|
11
|
+
description: 'Launch or switch a terminal session across places — this device, a fleet host, or cloud exec.',
|
|
12
|
+
icon: '▸',
|
|
13
|
+
category: 'Work',
|
|
14
|
+
audience: 'primary',
|
|
15
|
+
order: 7,
|
|
16
|
+
route: '/terminal',
|
|
17
|
+
states: ['terminal.registry'],
|
|
18
|
+
embeddable: false,
|
|
19
|
+
minSize: { width: 80, height: 24 },
|
|
20
|
+
surfaces: ['tui'],
|
|
21
|
+
hardware: ['consumer'],
|
|
22
|
+
enabled: true
|
|
23
|
+
};
|
|
24
|
+
export default descriptor;
|
|
25
|
+
//# sourceMappingURL=terminal.descriptor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"terminal.descriptor.js","sourceRoot":"","sources":["../../src/tui/terminal.descriptor.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,MAAM,UAAU,GAAqB;IACpC,IAAI,EAAE,SAAS;IACf,EAAE,EAAE,mBAAmB;IACvB,KAAK,EAAE,UAAU;IACjB,WAAW,EACV,+FAA+F;IAChG,IAAI,EAAE,GAAG;IACT,QAAQ,EAAE,MAAM;IAChB,QAAQ,EAAE,SAAS;IACnB,KAAK,EAAE,CAAC;IACR,KAAK,EAAE,WAAW;IAClB,MAAM,EAAE,CAAC,mBAAmB,CAAC;IAC7B,UAAU,EAAE,KAAK;IACjB,OAAO,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE;IAClC,QAAQ,EAAE,CAAC,KAAK,CAAC;IACjB,QAAQ,EAAE,CAAC,UAAU,CAAC;IACtB,OAAO,EAAE,IAAI;CACb,CAAC;AAEF,eAAe,UAAU,CAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Terminal launcher/switcher — tui/app (consumer).
|
|
3
|
+
*
|
|
4
|
+
* A place picker over the control-plane execution matrix: this device (local
|
|
5
|
+
* PTY), a fleet host (remote PTY over the fleet wire), or cloud exec (non-PTY,
|
|
6
|
+
* honest). Selecting a place shows its honest capabilities; launching runs a
|
|
7
|
+
* real bounded command through `runtime/execution` on that place and records
|
|
8
|
+
* the receipt in the session registry. Interactive keystroke terminals open in
|
|
9
|
+
* the terminal surface — this launcher never fakes a live keystroke stream.
|
|
10
|
+
*/
|
|
11
|
+
import type { TuiAppImplementation } from '@vibesdotdev/tui/kinds/tui-app';
|
|
12
|
+
declare const impl: TuiAppImplementation;
|
|
13
|
+
export default impl;
|
|
14
|
+
//# sourceMappingURL=terminal.impl.consumer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"terminal.impl.consumer.d.ts","sourceRoot":"","sources":["../../src/tui/terminal.impl.consumer.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAGH,OAAO,KAAK,EAAE,oBAAoB,EAAe,MAAM,gCAAgC,CAAC;AA+TxF,QAAA,MAAM,IAAI,EAAE,oBAAyD,CAAC;AACtE,eAAe,IAAI,CAAC"}
|
|
@@ -0,0 +1,189 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "@opentui/react/jsx-runtime";
|
|
2
|
+
/**
|
|
3
|
+
* Terminal launcher/switcher — tui/app (consumer).
|
|
4
|
+
*
|
|
5
|
+
* A place picker over the control-plane execution matrix: this device (local
|
|
6
|
+
* PTY), a fleet host (remote PTY over the fleet wire), or cloud exec (non-PTY,
|
|
7
|
+
* honest). Selecting a place shows its honest capabilities; launching runs a
|
|
8
|
+
* real bounded command through `runtime/execution` on that place and records
|
|
9
|
+
* the receipt in the session registry. Interactive keystroke terminals open in
|
|
10
|
+
* the terminal surface — this launcher never fakes a live keystroke stream.
|
|
11
|
+
*/
|
|
12
|
+
import { useCallback, useMemo, useState } from 'react';
|
|
13
|
+
import { CapabilityError, CaughtFailureSchema, composeChildEnv } from '@vibesdotdev/kernel';
|
|
14
|
+
import { getLogger } from '@vibesdotdev/logging';
|
|
15
|
+
import { DSButton, DSStatus, HStack, List, PageHeader, PageLayout, VStack, dsBase, dsColors, dsSpace, useInputModeStore, useKeyboardLayer, useTuiDispatch, useTuiState, useViewport } from '@vibesdotdev/tui';
|
|
16
|
+
import { useContributeScreenStatus } from '@vibesdotdev/tui/shell';
|
|
17
|
+
import { terminalCapabilitySummary, terminalPlaceAvailabilityLabel, terminalPlaceCapabilityBanner, terminalSessionStatusLabel } from "./terminal.state.js";
|
|
18
|
+
import { terminalRegistryStateKey } from "./terminal.state-key.js";
|
|
19
|
+
const KIND_LABEL = {
|
|
20
|
+
device: 'This device',
|
|
21
|
+
fleet: 'Fleet host',
|
|
22
|
+
cloud: 'Cloud'
|
|
23
|
+
};
|
|
24
|
+
function PlaceDetail({ place, sessions }) {
|
|
25
|
+
const banner = terminalPlaceCapabilityBanner(place);
|
|
26
|
+
const caps = place.capabilities;
|
|
27
|
+
const placeSessions = sessions.filter((s) => s.placeId === place.id);
|
|
28
|
+
return (_jsxs(VStack, { style: { paddingLeft: dsSpace.xs, paddingTop: 1 }, gap: 1, children: [_jsx("text", { style: { fg: dsBase.foreground }, children: place.label }), _jsx("text", { style: { fg: dsBase.mutedForeground }, children: `${KIND_LABEL[place.kind]} · ${terminalPlaceAvailabilityLabel(place.availability)}` }), _jsx("text", { style: { fg: dsBase.mutedForeground }, children: place.detail }), _jsx("text", { style: { fg: dsBase.mutedForeground }, children: `Capabilities: ${terminalCapabilitySummary(caps)} · ${caps.maxSessions} max` }), banner ? _jsx("text", { style: { fg: dsColors.warning.solid }, children: banner }) : null, placeSessions.length > 0 ? (_jsxs(VStack, { gap: 0, children: [_jsx("text", { style: { fg: dsBase.foreground }, children: "Launched here" }), placeSessions.slice(0, 6).map((s) => {
|
|
29
|
+
const label = terminalSessionStatusLabel(s.status);
|
|
30
|
+
// A handoff / unavailable receipt carries no real command ('—'); show
|
|
31
|
+
// the outcome + note only, so nothing reads as a shell that ran.
|
|
32
|
+
const head = s.command === '—' ? label : `${label} · ${s.command}`;
|
|
33
|
+
return (_jsx("text", { style: { fg: dsBase.mutedForeground }, children: `• ${head} — ${s.note}` }, s.id));
|
|
34
|
+
})] })) : null] }));
|
|
35
|
+
}
|
|
36
|
+
function TerminalLauncherApp({ runtime, navigate }) {
|
|
37
|
+
const { width, height } = useViewport();
|
|
38
|
+
const compact = width <= 90 || height <= 26;
|
|
39
|
+
const registry = useTuiState(terminalRegistryStateKey);
|
|
40
|
+
const dispatch = useTuiDispatch(terminalRegistryStateKey);
|
|
41
|
+
const logger = useMemo(() => getLogger('terminal.tui', runtime), [runtime]);
|
|
42
|
+
const [selectedPlaceId, setSelectedPlaceId] = useState(null);
|
|
43
|
+
const [actionError, setActionError] = useState(null);
|
|
44
|
+
const places = registry?.places ?? [];
|
|
45
|
+
const loaded = registry?.loaded === true;
|
|
46
|
+
const selectedPlace = useMemo(() => places.find((p) => p.id === (selectedPlaceId ?? places[0]?.id)) ?? null, [places, selectedPlaceId]);
|
|
47
|
+
const triggerRefresh = useCallback(() => dispatch({ type: 'REFRESH' }), [dispatch]);
|
|
48
|
+
const clearSessions = useCallback(() => dispatch({ type: 'CLEAR_SESSIONS' }), [dispatch]);
|
|
49
|
+
const launchSelected = useCallback(async () => {
|
|
50
|
+
const place = selectedPlace;
|
|
51
|
+
if (!place)
|
|
52
|
+
return;
|
|
53
|
+
setActionError(null);
|
|
54
|
+
const now = new Date().toISOString();
|
|
55
|
+
if (place.availability !== 'available') {
|
|
56
|
+
dispatch({
|
|
57
|
+
type: 'ADD_SESSION',
|
|
58
|
+
payload: {
|
|
59
|
+
id: `${place.id}:${now}`,
|
|
60
|
+
placeId: place.id,
|
|
61
|
+
placeLabel: place.label,
|
|
62
|
+
command: '—',
|
|
63
|
+
status: 'error',
|
|
64
|
+
openedAt: now,
|
|
65
|
+
note: place.availability === 'unconfigured'
|
|
66
|
+
? 'Place not configured in this runtime.'
|
|
67
|
+
: 'Place is unreachable right now.'
|
|
68
|
+
}
|
|
69
|
+
});
|
|
70
|
+
return;
|
|
71
|
+
}
|
|
72
|
+
// Fleet places are reached over the wire; the interactive PTY opens in the
|
|
73
|
+
// terminal surface. Record an honest handoff — never fake remote output.
|
|
74
|
+
if (place.kind === 'fleet') {
|
|
75
|
+
dispatch({
|
|
76
|
+
type: 'ADD_SESSION',
|
|
77
|
+
payload: {
|
|
78
|
+
id: `${place.id}:${now}`,
|
|
79
|
+
placeId: place.id,
|
|
80
|
+
placeLabel: place.label,
|
|
81
|
+
command: '—',
|
|
82
|
+
status: 'handoff',
|
|
83
|
+
openedAt: now,
|
|
84
|
+
note: 'Opens a remote PTY over the fleet wire — open it in the terminal surface.'
|
|
85
|
+
}
|
|
86
|
+
});
|
|
87
|
+
return;
|
|
88
|
+
}
|
|
89
|
+
// Device + cloud: run a real bounded command on the resolved provider.
|
|
90
|
+
const outcome = await (async () => {
|
|
91
|
+
const query = runtime.query('runtime/execution');
|
|
92
|
+
const scoped = place.executionId ? query.withIds([place.executionId]) : query;
|
|
93
|
+
const exec = await scoped.resolve();
|
|
94
|
+
return exec.execute({
|
|
95
|
+
command: 'uname',
|
|
96
|
+
args: ['-sm'],
|
|
97
|
+
env: composeChildEnv(runtime, {}),
|
|
98
|
+
envMode: 'replace',
|
|
99
|
+
timeout: 5000
|
|
100
|
+
});
|
|
101
|
+
})().then((result) => ({ kind: 'success', result }), (cause) => ({
|
|
102
|
+
kind: 'failure',
|
|
103
|
+
failure: CapabilityError.from(CaughtFailureSchema.parse(cause))
|
|
104
|
+
}));
|
|
105
|
+
if (outcome.kind === 'failure') {
|
|
106
|
+
logger.error('terminal launch failed', { error: outcome.failure });
|
|
107
|
+
setActionError(outcome.failure.message);
|
|
108
|
+
return;
|
|
109
|
+
}
|
|
110
|
+
const { result } = outcome;
|
|
111
|
+
const firstLine = result.stdout.split('\n')[0]?.trim() ?? '';
|
|
112
|
+
dispatch({
|
|
113
|
+
type: 'ADD_SESSION',
|
|
114
|
+
payload: {
|
|
115
|
+
id: `${place.id}:${now}`,
|
|
116
|
+
placeId: place.id,
|
|
117
|
+
placeLabel: place.label,
|
|
118
|
+
command: 'uname -sm',
|
|
119
|
+
status: result.exitCode === 0 ? 'ran' : 'error',
|
|
120
|
+
openedAt: now,
|
|
121
|
+
note: firstLine || `exit ${result.exitCode ?? '?'}`
|
|
122
|
+
}
|
|
123
|
+
});
|
|
124
|
+
}, [dispatch, logger, runtime, selectedPlace]);
|
|
125
|
+
useKeyboardLayer('global', (key) => {
|
|
126
|
+
if (useInputModeStore.getState().mode === 'insert')
|
|
127
|
+
return false;
|
|
128
|
+
const keyName = key.name?.toLowerCase() ?? '';
|
|
129
|
+
const isPlain = !key.ctrl && !key.meta && !key.shift && !key.alt;
|
|
130
|
+
if (!isPlain)
|
|
131
|
+
return false;
|
|
132
|
+
if (keyName === 'l' || keyName === 'return') {
|
|
133
|
+
void launchSelected();
|
|
134
|
+
return true;
|
|
135
|
+
}
|
|
136
|
+
if (keyName === 'r') {
|
|
137
|
+
triggerRefresh();
|
|
138
|
+
return true;
|
|
139
|
+
}
|
|
140
|
+
if (keyName === 'c') {
|
|
141
|
+
clearSessions();
|
|
142
|
+
return true;
|
|
143
|
+
}
|
|
144
|
+
if (keyName === 'escape') {
|
|
145
|
+
navigate?.('/');
|
|
146
|
+
return true;
|
|
147
|
+
}
|
|
148
|
+
return false;
|
|
149
|
+
}, { description: 'terminal-launcher-actions', deps: [launchSelected, triggerRefresh, clearSessions, navigate] });
|
|
150
|
+
const available = places.filter((p) => p.availability === 'available').length;
|
|
151
|
+
const sessions = registry?.sessions ?? [];
|
|
152
|
+
useContributeScreenStatus('terminal.launcher', {
|
|
153
|
+
facts: loaded
|
|
154
|
+
? [
|
|
155
|
+
{
|
|
156
|
+
slot: 'context',
|
|
157
|
+
value: `${available}/${places.length} places ready · ${sessions.length} launched`,
|
|
158
|
+
tone: 'muted'
|
|
159
|
+
}
|
|
160
|
+
]
|
|
161
|
+
: [],
|
|
162
|
+
hints: loaded
|
|
163
|
+
? [
|
|
164
|
+
{ keys: 'l', label: 'launch', priority: 4 },
|
|
165
|
+
{ keys: 'r', label: 'refresh', priority: 3 },
|
|
166
|
+
{ keys: 'c', label: 'clear', priority: 1 }
|
|
167
|
+
]
|
|
168
|
+
: [{ keys: 'r', label: 'refresh', priority: 3 }]
|
|
169
|
+
});
|
|
170
|
+
const visibleError = actionError ?? registry?.error ?? null;
|
|
171
|
+
const content = !registry || !loaded ? (_jsxs(VStack, { style: { padding: 1 }, gap: 1, children: [_jsx(DSStatus, { status: "loading", label: "Loading places\u2026" }), _jsx(DSButton, { label: "Refresh", size: "xs", color: "neutral", variant: "ghost", onClick: triggerRefresh })] })) : (_jsxs(VStack, { style: { width: '100%', height: '100%' }, gap: 0, children: [visibleError ? (_jsx(HStack, { gap: 1, style: { paddingBottom: 1 }, children: _jsx("text", { style: { fg: dsColors.danger.solid }, children: `⚠ ${visibleError}` }) })) : null, _jsxs(HStack, { align: "stretch", style: { flexGrow: 1, height: 0 }, children: [_jsxs(VStack, { style: { width: compact ? '42%' : '36%', minWidth: 28 }, gap: 1, paddingTop: 1, children: [_jsx("text", { style: { fg: dsBase.mutedForeground, paddingLeft: dsSpace.xs }, children: "Places" }), _jsx(List, { id: "terminal-places", zone: "sidebar", items: places.map((p) => ({
|
|
172
|
+
id: p.id,
|
|
173
|
+
primary: p.label,
|
|
174
|
+
secondary: `${terminalPlaceAvailabilityLabel(p.availability)} · ${terminalCapabilitySummary(p.capabilities)}`
|
|
175
|
+
})), selectedId: selectedPlace?.id, onSelect: (item) => setSelectedPlaceId(item.id), keyboardEnabled: true, density: "normal", showFocusRing: false, emptyMessage: "No execution places found." })] }), _jsx(VStack, { style: { flexGrow: 1, border: ['left'], borderColor: dsBase.border }, children: selectedPlace ? (_jsx(PlaceDetail, { place: selectedPlace, sessions: sessions })) : (_jsx(VStack, { style: { padding: 1 }, children: _jsx("text", { style: { fg: dsBase.mutedForeground }, children: "Select a place to see its capabilities." }) })) })] }), _jsxs(HStack, { style: {
|
|
176
|
+
border: ['top'],
|
|
177
|
+
borderColor: dsBase.border,
|
|
178
|
+
flexDirection: 'row',
|
|
179
|
+
alignItems: 'center',
|
|
180
|
+
paddingLeft: dsSpace.xs,
|
|
181
|
+
paddingRight: dsSpace.xs,
|
|
182
|
+
flexShrink: 0,
|
|
183
|
+
overflow: 'hidden'
|
|
184
|
+
}, gap: 1, children: [_jsx(DSButton, { label: "Launch", size: "xs", color: "primary", variant: "ghost", disabled: !selectedPlace || selectedPlace.availability !== 'available', onClick: () => void launchSelected() }), _jsx(DSButton, { label: "Refresh", size: "xs", color: "neutral", variant: "ghost", onClick: triggerRefresh }), sessions.length > 0 ? (_jsx(DSButton, { label: "Clear", size: "xs", color: "neutral", variant: "ghost", onClick: clearSessions })) : null] })] }));
|
|
185
|
+
return (_jsx(PageLayout, { header: _jsx(PageHeader, { title: "Terminal", description: "Pick a place \u2014 this device, a fleet host, or cloud exec \u2014 and open a terminal." }), noScroll: true, children: content }));
|
|
186
|
+
}
|
|
187
|
+
const impl = { component: TerminalLauncherApp };
|
|
188
|
+
export default impl;
|
|
189
|
+
//# sourceMappingURL=terminal.impl.consumer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"terminal.impl.consumer.js","sourceRoot":"","sources":["../../src/tui/terminal.impl.consumer.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
export declare const terminalRegistryStateKey: import("@vibesdotdev/tui").TuiStateKey<{
|
|
2
|
+
places: {
|
|
3
|
+
id: string;
|
|
4
|
+
kind: "cloud" | "device" | "fleet";
|
|
5
|
+
label: string;
|
|
6
|
+
capabilities: {
|
|
7
|
+
pty: boolean;
|
|
8
|
+
shell: boolean;
|
|
9
|
+
signals: boolean;
|
|
10
|
+
resize: boolean;
|
|
11
|
+
maxSessions: number;
|
|
12
|
+
};
|
|
13
|
+
availability: "unavailable" | "available" | "unconfigured";
|
|
14
|
+
detail: string;
|
|
15
|
+
executionId?: string | undefined;
|
|
16
|
+
}[];
|
|
17
|
+
sessions: {
|
|
18
|
+
id: string;
|
|
19
|
+
placeId: string;
|
|
20
|
+
placeLabel: string;
|
|
21
|
+
command: string;
|
|
22
|
+
status: "error" | "live" | "exited" | "ran" | "handoff";
|
|
23
|
+
openedAt: string;
|
|
24
|
+
note: string;
|
|
25
|
+
}[];
|
|
26
|
+
loaded: boolean;
|
|
27
|
+
loading: boolean;
|
|
28
|
+
error: string | null;
|
|
29
|
+
}>;
|
|
30
|
+
//# sourceMappingURL=terminal.state-key.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"terminal.state-key.d.ts","sourceRoot":"","sources":["../../src/tui/terminal.state-key.ts"],"names":[],"mappings":"AAQA,eAAO,MAAM,wBAAwB;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAAsE,CAAC"}
|