@vibesdotdev/terminal-client 0.0.0-stage → 1.0.0-rc.2

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.
Files changed (195) hide show
  1. package/LICENSE +18 -0
  2. package/README.md +102 -2
  3. package/dist/ansi/index.d.ts +11 -0
  4. package/dist/ansi/index.d.ts.map +1 -0
  5. package/dist/ansi/index.js +11 -0
  6. package/dist/ansi/index.js.map +1 -0
  7. package/dist/ansi/keymap.d.ts +77 -0
  8. package/dist/ansi/keymap.d.ts.map +1 -0
  9. package/dist/ansi/keymap.js +257 -0
  10. package/dist/ansi/keymap.js.map +1 -0
  11. package/dist/api-client-plugin.d.ts +4 -0
  12. package/dist/api-client-plugin.d.ts.map +1 -0
  13. package/dist/api-client-plugin.js +16 -0
  14. package/dist/api-client-plugin.js.map +1 -0
  15. package/dist/client/http-session.d.ts +44 -0
  16. package/dist/client/http-session.d.ts.map +1 -0
  17. package/dist/client/http-session.js +457 -0
  18. package/dist/client/http-session.js.map +1 -0
  19. package/dist/client/index.d.ts +8 -0
  20. package/dist/client/index.d.ts.map +1 -0
  21. package/dist/client/index.js +8 -0
  22. package/dist/client/index.js.map +1 -0
  23. package/dist/client.d.ts +56 -0
  24. package/dist/client.d.ts.map +1 -0
  25. package/dist/client.js +169 -0
  26. package/dist/client.js.map +1 -0
  27. package/dist/index.d.ts +14 -0
  28. package/dist/index.d.ts.map +1 -0
  29. package/dist/index.js +14 -0
  30. package/dist/index.js.map +1 -0
  31. package/dist/pty-bridge/index.d.ts +15 -0
  32. package/dist/pty-bridge/index.d.ts.map +1 -0
  33. package/dist/pty-bridge/index.js +15 -0
  34. package/dist/pty-bridge/index.js.map +1 -0
  35. package/dist/pty-bridge/protocol.d.ts +6 -0
  36. package/dist/pty-bridge/protocol.d.ts.map +1 -0
  37. package/dist/pty-bridge/protocol.js +6 -0
  38. package/dist/pty-bridge/protocol.js.map +1 -0
  39. package/dist/pty-bridge/server.d.ts +7 -0
  40. package/dist/pty-bridge/server.d.ts.map +1 -0
  41. package/dist/pty-bridge/server.js +9 -0
  42. package/dist/pty-bridge/server.js.map +1 -0
  43. package/dist/remote-session.d.ts +51 -0
  44. package/dist/remote-session.d.ts.map +1 -0
  45. package/dist/remote-session.js +326 -0
  46. package/dist/remote-session.js.map +1 -0
  47. package/dist/schemas/http.d.ts +61 -0
  48. package/dist/schemas/http.d.ts.map +1 -0
  49. package/dist/schemas/http.js +45 -0
  50. package/dist/schemas/http.js.map +1 -0
  51. package/dist/schemas/remote.d.ts +25 -0
  52. package/dist/schemas/remote.d.ts.map +1 -0
  53. package/dist/schemas/remote.js +23 -0
  54. package/dist/schemas/remote.js.map +1 -0
  55. package/dist/schemas/session.d.ts +26 -0
  56. package/dist/schemas/session.d.ts.map +1 -0
  57. package/dist/schemas/session.js +17 -0
  58. package/dist/schemas/session.js.map +1 -0
  59. package/dist/schemas/store.d.ts +29 -0
  60. package/dist/schemas/store.d.ts.map +1 -0
  61. package/dist/schemas/store.js +22 -0
  62. package/dist/schemas/store.js.map +1 -0
  63. package/dist/schemas/terminal.d.ts +296 -0
  64. package/dist/schemas/terminal.d.ts.map +1 -0
  65. package/dist/schemas/terminal.js +243 -0
  66. package/dist/schemas/terminal.js.map +1 -0
  67. package/dist/server/index.d.ts +9 -0
  68. package/dist/server/index.d.ts.map +1 -0
  69. package/dist/server/index.js +9 -0
  70. package/dist/server/index.js.map +1 -0
  71. package/dist/server/session-store.d.ts +176 -0
  72. package/dist/server/session-store.d.ts.map +1 -0
  73. package/dist/server/session-store.js +462 -0
  74. package/dist/server/session-store.js.map +1 -0
  75. package/dist/server/sse-stream.d.ts +32 -0
  76. package/dist/server/sse-stream.d.ts.map +1 -0
  77. package/dist/server/sse-stream.js +87 -0
  78. package/dist/server/sse-stream.js.map +1 -0
  79. package/dist/svelte/HostPicker.svelte +256 -0
  80. package/dist/svelte/HostPicker.svelte.d.ts +30 -0
  81. package/dist/svelte/HostPicker.svelte.d.ts.map +1 -0
  82. package/dist/svelte/README.md +52 -0
  83. package/dist/svelte/ReconnectBanner.svelte +88 -0
  84. package/dist/svelte/ReconnectBanner.svelte.d.ts +16 -0
  85. package/dist/svelte/ReconnectBanner.svelte.d.ts.map +1 -0
  86. package/dist/svelte/SessionTabs.svelte +192 -0
  87. package/dist/svelte/SessionTabs.svelte.d.ts +17 -0
  88. package/dist/svelte/SessionTabs.svelte.d.ts.map +1 -0
  89. package/dist/svelte/Terminal.svelte +567 -0
  90. package/dist/svelte/Terminal.svelte.d.ts +25 -0
  91. package/dist/svelte/Terminal.svelte.d.ts.map +1 -0
  92. package/dist/svelte/TerminalMobileToolbar.svelte +56 -0
  93. package/dist/svelte/TerminalMobileToolbar.svelte.d.ts +14 -0
  94. package/dist/svelte/TerminalMobileToolbar.svelte.d.ts.map +1 -0
  95. package/dist/svelte/TerminalWorkspace.svelte +562 -0
  96. package/dist/svelte/TerminalWorkspace.svelte.d.ts +25 -0
  97. package/dist/svelte/TerminalWorkspace.svelte.d.ts.map +1 -0
  98. package/dist/svelte/ambient.d.ts +9 -0
  99. package/dist/svelte/docs/terminal-svelte.docs.descriptor.d.ts +4 -0
  100. package/dist/svelte/docs/terminal-svelte.docs.descriptor.d.ts.map +1 -0
  101. package/dist/svelte/docs/terminal-svelte.docs.descriptor.js +74 -0
  102. package/dist/svelte/index.d.ts +27 -0
  103. package/dist/svelte/index.d.ts.map +1 -0
  104. package/dist/svelte/index.js +26 -0
  105. package/dist/svelte/styles.css +8 -0
  106. package/dist/svelte/terminal-session-authority.d.ts +17 -0
  107. package/dist/svelte/terminal-session-authority.d.ts.map +1 -0
  108. package/dist/svelte/terminal-session-authority.js +25 -0
  109. package/dist/svelte/terminal-svelte.plugin.d.ts +19 -0
  110. package/dist/svelte/terminal-svelte.plugin.d.ts.map +1 -0
  111. package/dist/svelte/terminal-svelte.plugin.js +42 -0
  112. package/dist/svelte/terminal-theme.d.ts +11 -0
  113. package/dist/svelte/terminal-theme.d.ts.map +1 -0
  114. package/dist/svelte/terminal-theme.js +116 -0
  115. package/dist/svelte/tool-widgets/TerminalToolCard.svelte +65 -0
  116. package/dist/svelte/tool-widgets/TerminalToolCard.svelte.d.ts +5 -0
  117. package/dist/svelte/tool-widgets/TerminalToolCard.svelte.d.ts.map +1 -0
  118. package/dist/svelte/tool-widgets/terminal-tool-card.d.ts +25 -0
  119. package/dist/svelte/tool-widgets/terminal-tool-card.d.ts.map +1 -0
  120. package/dist/svelte/tool-widgets/terminal-tool-card.js +116 -0
  121. package/dist/svelte/types.d.ts +160 -0
  122. package/dist/svelte/types.d.ts.map +1 -0
  123. package/dist/svelte/types.js +51 -0
  124. package/dist/svelte/workspace.d.ts +3 -0
  125. package/dist/svelte/workspace.d.ts.map +1 -0
  126. package/dist/svelte/workspace.js +2 -0
  127. package/dist/terminal-client.plugin.d.ts +3 -0
  128. package/dist/terminal-client.plugin.d.ts.map +1 -0
  129. package/dist/terminal-client.plugin.js +3 -0
  130. package/dist/terminal-client.plugin.js.map +1 -0
  131. package/dist/terminal-runtime.d.ts +30 -0
  132. package/dist/terminal-runtime.d.ts.map +1 -0
  133. package/dist/terminal-runtime.js +673 -0
  134. package/dist/terminal-runtime.js.map +1 -0
  135. package/dist/terminal.consumer.plugin.d.ts +14 -0
  136. package/dist/terminal.consumer.plugin.d.ts.map +1 -0
  137. package/dist/terminal.consumer.plugin.js +31 -0
  138. package/dist/terminal.consumer.plugin.js.map +1 -0
  139. package/dist/tools/terminal.impl.consumer.d.ts +11 -0
  140. package/dist/tools/terminal.impl.consumer.d.ts.map +1 -0
  141. package/dist/tools/terminal.impl.consumer.js +20 -0
  142. package/dist/tools/terminal.impl.consumer.js.map +1 -0
  143. package/dist/tools/terminal.schemas.d.ts +3 -0
  144. package/dist/tools/terminal.schemas.d.ts.map +1 -0
  145. package/dist/tools/terminal.schemas.js +3 -0
  146. package/dist/tools/terminal.schemas.js.map +1 -0
  147. package/dist/tools/terminal.unified.descriptor.d.ts +218 -0
  148. package/dist/tools/terminal.unified.descriptor.d.ts.map +1 -0
  149. package/dist/tools/terminal.unified.descriptor.js +36 -0
  150. package/dist/tools/terminal.unified.descriptor.js.map +1 -0
  151. package/dist/tui/index.d.ts +9 -0
  152. package/dist/tui/index.d.ts.map +1 -0
  153. package/dist/tui/index.js +8 -0
  154. package/dist/tui/index.js.map +1 -0
  155. package/dist/tui/terminal-open.descriptor.d.ts +9 -0
  156. package/dist/tui/terminal-open.descriptor.d.ts.map +1 -0
  157. package/dist/tui/terminal-open.descriptor.js +18 -0
  158. package/dist/tui/terminal-open.descriptor.js.map +1 -0
  159. package/dist/tui/terminal-open.impl.consumer.d.ts +9 -0
  160. package/dist/tui/terminal-open.impl.consumer.d.ts.map +1 -0
  161. package/dist/tui/terminal-open.impl.consumer.js +13 -0
  162. package/dist/tui/terminal-open.impl.consumer.js.map +1 -0
  163. package/dist/tui/terminal-registry.descriptor.d.ts +11 -0
  164. package/dist/tui/terminal-registry.descriptor.d.ts.map +1 -0
  165. package/dist/tui/terminal-registry.descriptor.js +17 -0
  166. package/dist/tui/terminal-registry.descriptor.js.map +1 -0
  167. package/dist/tui/terminal-registry.impl.consumer.d.ts +71 -0
  168. package/dist/tui/terminal-registry.impl.consumer.d.ts.map +1 -0
  169. package/dist/tui/terminal-registry.impl.consumer.js +190 -0
  170. package/dist/tui/terminal-registry.impl.consumer.js.map +1 -0
  171. package/dist/tui/terminal-tui.plugin.d.ts +10 -0
  172. package/dist/tui/terminal-tui.plugin.d.ts.map +1 -0
  173. package/dist/tui/terminal-tui.plugin.js +32 -0
  174. package/dist/tui/terminal-tui.plugin.js.map +1 -0
  175. package/dist/tui/terminal.descriptor.d.ts +10 -0
  176. package/dist/tui/terminal.descriptor.d.ts.map +1 -0
  177. package/dist/tui/terminal.descriptor.js +25 -0
  178. package/dist/tui/terminal.descriptor.js.map +1 -0
  179. package/dist/tui/terminal.impl.consumer.d.ts +14 -0
  180. package/dist/tui/terminal.impl.consumer.d.ts.map +1 -0
  181. package/dist/tui/terminal.impl.consumer.js +189 -0
  182. package/dist/tui/terminal.impl.consumer.js.map +1 -0
  183. package/dist/tui/terminal.state-key.d.ts +30 -0
  184. package/dist/tui/terminal.state-key.d.ts.map +1 -0
  185. package/dist/tui/terminal.state-key.js +9 -0
  186. package/dist/tui/terminal.state-key.js.map +1 -0
  187. package/dist/tui/terminal.state.d.ts +152 -0
  188. package/dist/tui/terminal.state.d.ts.map +1 -0
  189. package/dist/tui/terminal.state.js +149 -0
  190. package/dist/tui/terminal.state.js.map +1 -0
  191. package/dist/workspace.d.ts +155 -0
  192. package/dist/workspace.d.ts.map +1 -0
  193. package/dist/workspace.js +292 -0
  194. package/dist/workspace.js.map +1 -0
  195. package/package.json +228 -4
@@ -0,0 +1,326 @@
1
+ /**
2
+ * remote-session — adapt an RPC session WIRE-PROXY into a real `ExecutionSession`.
3
+ *
4
+ * `openRemoteSession` reaches a fleet host's `runtime/execution` impl over L4's
5
+ * RPC and calls `session(opts)`. What comes back is NOT an `ExecutionSession` — it
6
+ * is a kind-agnostic wire proxy (`makeRemoteProxy`) whose surface is:
7
+ *
8
+ * - the methods the OWNER declared when it classified the session as a ref
9
+ * (`write` / `resize` / `signal` / `exited` / `kill`) — each an `invoke` that
10
+ * resolves to a Promise; and
11
+ * - `__openStream(channel)` — opens the raw byte channel (`stream` verb) the PTY
12
+ * output rides (the consumer names the channel `'pty'`, never the protocol).
13
+ *
14
+ * The terminal-svelte `<Terminal>` component consumes the canonical L3
15
+ * `ExecutionSession` interface UNCHANGED — synchronous `write`/`resize`/`signal`/
16
+ * `kill`, an `onOutput(handler) => unsubscribe`, an `exited(): Promise<…>`, and the
17
+ * readonly `id`/`environmentId`. This adapter is the bridge: it makes a proxy
18
+ * session look IDENTICAL to a local one so the component never forks on transport
19
+ * (the whole point of the proxy model — terminal.md §"Target design").
20
+ *
21
+ * Remoteness stays VISIBLE in behavior (Correction #1): when the transport drops,
22
+ * `exited()` rejects with `RPC_DISCONNECTED` (the proxy invoke fails) — which the
23
+ * component already renders as a disconnect banner. This adapter never silently
24
+ * swallows a disconnect into a clean exit.
25
+ *
26
+ * This module ships NO transport of its own — it composes the proxy `runtime-rpc`
27
+ * already minted. It only translates async-proxy semantics into the synchronous
28
+ * `ExecutionSession` shape the renderer expects.
29
+ */
30
+ import { CapabilityError, settle, CaughtFailureSchema } from '@vibesdotdev/kernel';
31
+ import { getLogger } from '@vibesdotdev/logging';
32
+ import { tryGetVibesClient } from '@vibesdotdev/kernel/client';
33
+ /** The channel name the PTY output/stdin rides. The CONSUMER names it (terminal.md §L4). */
34
+ const PTY_CHANNEL = 'pty';
35
+ import { RemoteSessionProxySchema, RpcChannelSchema, HostIdSchema } from "./schemas/remote.js";
36
+ function invalidRemoteSession(reason, cause) {
37
+ return new CapabilityError('The remote terminal session contract is invalid.', 'UNAVAILABLE', {
38
+ reason,
39
+ retryable: false,
40
+ cause
41
+ });
42
+ }
43
+ /**
44
+ * Wrap a session wire-proxy in the canonical `ExecutionSession` interface.
45
+ *
46
+ * @param proxy the wire proxy returned by `exec.session(opts)` over RPC.
47
+ * @param hostId the explicitly-named host (for a stable, descriptive session id).
48
+ * @param onClose optional teardown run when the session is killed/exited — used by
49
+ * the client to dispose the underlying RPC connection so a closed
50
+ * terminal frees the remote PTY *and* its socket (no leak).
51
+ */
52
+ export function adaptRemoteSession(runtime, proxyInput, hostIdInput, onClose) {
53
+ let proxy;
54
+ let hostId;
55
+ try {
56
+ proxy = RemoteSessionProxySchema.parse(proxyInput);
57
+ hostId = HostIdSchema.parse(hostIdInput);
58
+ }
59
+ catch (cause) {
60
+ throw invalidRemoteSession('terminal-remote-session-proxy-invalid', CaughtFailureSchema.parse(cause));
61
+ }
62
+ const logger = getLogger('terminal.remote-session', runtime);
63
+ // id/environmentId are not carried on the wire (they were readonly props, not
64
+ // invoke-able methods). Synthesize a stable, descriptive identity rooted in the
65
+ // host ref so the renderer + logs can name the session. The component does not
66
+ // read environmentId (terminal.md §ExecutionSession), so the host id stands in.
67
+ const client = tryGetVibesClient('terminal', runtime);
68
+ if (!client)
69
+ throw invalidRemoteSession('terminal-client-not-active');
70
+ const id = client.nextRemoteSessionId(hostId);
71
+ // Subscribers attach synchronously (the component calls onOutput() inside
72
+ // onMount), but the byte channel opens asynchronously. We open it once on first
73
+ // subscribe, fan the channel's bytes out to every handler, and queue any output
74
+ // that arrives before the very first handler registers so nothing is dropped.
75
+ const handlers = new Set();
76
+ let channel = null;
77
+ let channelOpening = null;
78
+ let closed = false;
79
+ const earlyBuffer = [];
80
+ // Stdin written before the byte channel is live. We hold it and flush THROUGH the
81
+ // channel once it opens, rather than racing a `write` invoke against the
82
+ // channel's onData binding — if the command ran before the owner bound the
83
+ // channel, its output would be produced before anything was listening and lost.
84
+ // Queuing stdin until the channel is up guarantees the renderer sees the echo.
85
+ const pendingStdin = [];
86
+ const fanOut = (bytes) => {
87
+ if (handlers.size === 0) {
88
+ // No subscriber yet — retain so the renderer never misses the PTY's
89
+ // opening bytes (prompt/banner) it printed before onOutput ran.
90
+ earlyBuffer.push(bytes);
91
+ return;
92
+ }
93
+ for (const handler of handlers) {
94
+ handler(bytes);
95
+ }
96
+ };
97
+ // Drain the queued stdin through the live channel in strict FIFO order. Only ever
98
+ // called once the channel is open AND its onData binding is in place, so the
99
+ // command's resulting output is captured rather than produced into the void.
100
+ const flushPendingStdin = (ch) => {
101
+ if (pendingStdin.length === 0)
102
+ return;
103
+ const queued = pendingStdin.splice(0);
104
+ for (const bytes of queued) {
105
+ try {
106
+ ch.write(bytes);
107
+ }
108
+ catch (cause) {
109
+ throw new CapabilityError('The remote terminal input could not be delivered.', 'UNAVAILABLE', {
110
+ reason: 'terminal-remote-stdin-flush-failed',
111
+ retryable: true,
112
+ cause
113
+ });
114
+ }
115
+ }
116
+ };
117
+ const ensureChannel = () => {
118
+ if (channel || closed)
119
+ return Promise.resolve();
120
+ if (channelOpening)
121
+ return channelOpening;
122
+ channelOpening = proxy
123
+ .__openStream(PTY_CHANNEL)
124
+ .then(async (channelInput) => {
125
+ const openedChannel = RpcChannelSchema.parse(channelInput);
126
+ if (closed) {
127
+ await openedChannel.close();
128
+ return;
129
+ }
130
+ channel = openedChannel;
131
+ // Bind onData BEFORE flushing queued stdin so the owner is already
132
+ // streaming output back by the time the queued command bytes land — the
133
+ // `__openStream('pty')`-before-write ordering the http transport test
134
+ // relies on. (Flushing first would let the command run and emit output
135
+ // before anything was listening, dropping the opening bytes.)
136
+ openedChannel.onData((data) => fanOut(new Uint8Array(data)));
137
+ flushPendingStdin(openedChannel);
138
+ })
139
+ .catch((cause) => {
140
+ throw new CapabilityError('The remote terminal channel could not be opened.', 'UNAVAILABLE', {
141
+ reason: 'terminal-remote-channel-open-failed',
142
+ retryable: true,
143
+ cause
144
+ });
145
+ });
146
+ return channelOpening;
147
+ };
148
+ const observeChannelOpening = () => {
149
+ void ensureChannel()
150
+ .then(() => ({ kind: 'success' }), (cause) => ({
151
+ kind: 'failure',
152
+ failure: CaughtFailureSchema.parse(cause)
153
+ }))
154
+ .then((outcome) => {
155
+ if (outcome.kind === 'failure' && !runtime.disposed) {
156
+ logger.error('remote terminal channel failed to open', { error: outcome.failure });
157
+ }
158
+ });
159
+ };
160
+ // Fire a proxy invoke without awaiting (the ExecutionSession surface is sync).
161
+ // A rejection (e.g. RPC_DISCONNECTED) is observed here so a keystroke after a
162
+ // drop does not become an unhandled rejection. The disconnect is also surfaced
163
+ // authoritatively via exited()'s rejection, which the component listens for.
164
+ const fireAndForget = (operation) => {
165
+ void operation
166
+ .then(() => ({ kind: 'success' }), (cause) => ({
167
+ kind: 'failure',
168
+ failure: CaughtFailureSchema.parse(cause)
169
+ }))
170
+ .then((outcome) => {
171
+ if (outcome.kind === 'failure' && !runtime.disposed) {
172
+ logger.error('remote terminal operation failed', { error: outcome.failure });
173
+ }
174
+ });
175
+ };
176
+ const captureCleanupFailure = (operation) => {
177
+ try {
178
+ operation();
179
+ return null;
180
+ }
181
+ catch (cause) {
182
+ return CaughtFailureSchema.parse(cause);
183
+ }
184
+ };
185
+ let closing;
186
+ let exitObservation;
187
+ const teardown = (terminate = true) => {
188
+ if (closing)
189
+ return closing;
190
+ closed = true;
191
+ handlers.clear();
192
+ earlyBuffer.length = 0;
193
+ pendingStdin.length = 0;
194
+ const failures = [];
195
+ const closingChannel = channel;
196
+ channel = null;
197
+ closing = (async () => {
198
+ // Releasing a proxy only releases its reference. Terminate the PTY
199
+ // explicitly while live. On runtime disposal the kernel connection's
200
+ // acknowledged owned-reference drain terminates it, including unopened PTYs.
201
+ if (terminate && !runtime.lifecycle.signal.aborted) {
202
+ const killed = await settle(() => proxy.kill());
203
+ if (!killed.ok)
204
+ failures.push(killed.cause);
205
+ }
206
+ // A stream open may still be in flight. Its closed branch joins the
207
+ // newly opened channel's close before the connection is released.
208
+ const opened = await settle(() => channelOpening);
209
+ if (!opened.ok)
210
+ failures.push(opened.cause);
211
+ const channelClosed = await settle(() => closingChannel?.close());
212
+ if (!channelClosed.ok)
213
+ failures.push(channelClosed.cause);
214
+ const disposeFailure = captureCleanupFailure(() => proxy[Symbol.dispose]());
215
+ if (disposeFailure)
216
+ failures.push(disposeFailure);
217
+ const closedRemote = await settle(() => onClose?.());
218
+ if (!closedRemote.ok)
219
+ failures.push(closedRemote.cause);
220
+ if (failures.length === 1)
221
+ throw failures[0];
222
+ if (failures.length > 1)
223
+ throw new AggregateError(failures, 'Remote terminal cleanup failed.');
224
+ })().finally(() => release());
225
+ return closing;
226
+ };
227
+ const release = client.ownRemoteSession(teardown);
228
+ const observeExit = () => {
229
+ exitObservation ??= (async () => {
230
+ const observed = await settle(async () => {
231
+ await ensureChannel();
232
+ return await proxy.exited();
233
+ });
234
+ const cleanup = await settle(() => teardown(false));
235
+ if (!observed.ok && !cleanup.ok) {
236
+ throw new AggregateError([observed.cause, cleanup.cause], 'Remote terminal exit observation and connection cleanup failed.');
237
+ }
238
+ if (!observed.ok)
239
+ throw observed.cause;
240
+ if (!cleanup.ok)
241
+ throw cleanup.cause;
242
+ return observed.value;
243
+ })();
244
+ return exitObservation;
245
+ };
246
+ return {
247
+ id,
248
+ environmentId: hostId,
249
+ write(data) {
250
+ if (closed)
251
+ return;
252
+ const admitted = new Uint8Array(data);
253
+ // Stdin rides the raw stream channel (the PTY fast-path, no per-byte invoke
254
+ // envelope). Until the channel is open, QUEUE the bytes and open it; the
255
+ // queue flushes through the channel once its onData binding is live, so the
256
+ // command's output is never produced before anything is listening for it.
257
+ //
258
+ // Ordering hazard (the write-before-channel-open race): a direct
259
+ // channel.write here must NOT jump ahead of bytes still sitting in
260
+ // pendingStdin (which flush from inside ensureChannel's stream-open .then).
261
+ // So we only fast-path a direct write when the channel is open AND the queue
262
+ // is already drained; otherwise the byte joins the queue and rides the same
263
+ // strict-FIFO flush. This mirrors the passing http transport ordering
264
+ // (`__openStream('pty')` is awaited and onData bound BEFORE any write lands).
265
+ if (channel && pendingStdin.length === 0) {
266
+ try {
267
+ channel.write(admitted);
268
+ }
269
+ catch (cause) {
270
+ throw new CapabilityError('The remote terminal input could not be delivered.', 'UNAVAILABLE', {
271
+ reason: 'terminal-remote-stdin-write-failed',
272
+ retryable: true,
273
+ cause
274
+ });
275
+ }
276
+ return;
277
+ }
278
+ // Channel not open yet, OR a queued byte is still ahead of this one: append
279
+ // and let the strict-FIFO flush deliver it. If the channel is already live
280
+ // (the queue just hasn't drained), flush now; otherwise open it.
281
+ pendingStdin.push(admitted);
282
+ if (channel) {
283
+ flushPendingStdin(channel);
284
+ }
285
+ else {
286
+ observeChannelOpening();
287
+ }
288
+ },
289
+ onOutput(handler) {
290
+ if (closed)
291
+ return () => { };
292
+ handlers.add(handler);
293
+ // Replay anything that arrived before the first subscriber, then open the
294
+ // channel (idempotent) so subsequent PTY output flows.
295
+ if (earlyBuffer.length > 0) {
296
+ const queued = earlyBuffer.splice(0);
297
+ for (const bytes of queued)
298
+ handler(bytes);
299
+ }
300
+ observeChannelOpening();
301
+ return () => {
302
+ handlers.delete(handler);
303
+ };
304
+ },
305
+ resize(cols, rows) {
306
+ if (closed)
307
+ return;
308
+ fireAndForget(proxy.resize(cols, rows));
309
+ },
310
+ signal(sig) {
311
+ if (closed)
312
+ return;
313
+ fireAndForget(proxy.signal(sig));
314
+ },
315
+ exited: observeExit,
316
+ kill() {
317
+ if (closed)
318
+ return;
319
+ // Observe exit even when the caller drops the handle after killing it.
320
+ // Cleanup waits for the native exit reply before closing the connection.
321
+ fireAndForget(observeExit().then(() => undefined));
322
+ fireAndForget(proxy.kill());
323
+ }
324
+ };
325
+ }
326
+ //# sourceMappingURL=remote-session.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"remote-session.js","sourceRoot":"","sources":["../src/remote-session.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,61 @@
1
+ import { type CapabilityErrorCode } from '@vibesdotdev/kernel';
2
+ import * as z from 'zod/v4';
3
+ export declare const HttpSessionOpenResponseSchema: z.ZodObject<{
4
+ id: z.ZodString;
5
+ environmentId: z.ZodString;
6
+ }, z.core.$strict>;
7
+ export declare const HttpSessionExitEventSchema: z.ZodObject<{
8
+ exitCode: z.ZodNullable<z.ZodNumber>;
9
+ }, z.core.$strict>;
10
+ export declare const HttpSessionFailureEventSchema: z.ZodObject<{
11
+ code: z.ZodCustom<CapabilityErrorCode, CapabilityErrorCode>;
12
+ reason: z.ZodString;
13
+ message: z.ZodString;
14
+ retryable: z.ZodBoolean;
15
+ }, z.core.$loose>;
16
+ export declare const ReconnectOptionsSchema: z.ZodObject<{
17
+ maxAttempts: z.ZodDefault<z.ZodNumber>;
18
+ baseDelayMs: z.ZodDefault<z.ZodNumber>;
19
+ maxDelayMs: z.ZodDefault<z.ZodNumber>;
20
+ onReconnecting: z.ZodOptional<z.ZodCustom<(attempt: number, delayMs: number) => void, (attempt: number, delayMs: number) => void>>;
21
+ onReconnected: z.ZodOptional<z.ZodCustom<(attempt: number) => void, (attempt: number) => void>>;
22
+ }, z.core.$strict>;
23
+ export declare const OpenHttpSessionOptionsSchema: z.ZodObject<{
24
+ command: z.ZodOptional<z.ZodString>;
25
+ args: z.ZodOptional<z.ZodArray<z.ZodString>>;
26
+ cols: z.ZodNumber;
27
+ rows: z.ZodNumber;
28
+ baseUrl: z.ZodDefault<z.ZodString>;
29
+ timeoutMs: z.ZodDefault<z.ZodNumber>;
30
+ signal: z.ZodOptional<z.ZodCustom<AbortSignal, AbortSignal>>;
31
+ extra: z.ZodOptional<z.ZodType<import("@vibesdotdev/kernel/schemas/json").JsonObject, import("@vibesdotdev/kernel/schemas/json").JsonObject, z.core.$ZodTypeInternals<import("@vibesdotdev/kernel/schemas/json").JsonObject, import("@vibesdotdev/kernel/schemas/json").JsonObject>>>;
32
+ reconnect: z.ZodPrefault<z.ZodUnion<readonly [z.ZodObject<{
33
+ maxAttempts: z.ZodDefault<z.ZodNumber>;
34
+ baseDelayMs: z.ZodDefault<z.ZodNumber>;
35
+ maxDelayMs: z.ZodDefault<z.ZodNumber>;
36
+ onReconnecting: z.ZodOptional<z.ZodCustom<(attempt: number, delayMs: number) => void, (attempt: number, delayMs: number) => void>>;
37
+ onReconnected: z.ZodOptional<z.ZodCustom<(attempt: number) => void, (attempt: number) => void>>;
38
+ }, z.core.$strict>, z.ZodLiteral<false>]>>;
39
+ existingId: z.ZodOptional<z.ZodString>;
40
+ }, z.core.$strict>;
41
+ export type ReconnectOptions = z.input<typeof ReconnectOptionsSchema>;
42
+ export type OpenHttpSessionOptions = z.input<typeof OpenHttpSessionOptionsSchema>;
43
+ export declare const MessageEventDataSchema: z.ZodObject<{
44
+ data: z.ZodString;
45
+ }, z.core.$strip>;
46
+ export interface TerminalEventSource extends EventTarget {
47
+ close(): void;
48
+ onerror: ((event: Event) => void) | null;
49
+ }
50
+ export interface TerminalEventSourceConstructor {
51
+ new (url: string): TerminalEventSource;
52
+ }
53
+ export declare const TerminalEventSourceConstructorSchema: z.ZodCustom<TerminalEventSourceConstructor, TerminalEventSourceConstructor>;
54
+ export declare const TerminalHttpVerbSchema: z.ZodEnum<{
55
+ write: "write";
56
+ signal: "signal";
57
+ resize: "resize";
58
+ kill: "kill";
59
+ }>;
60
+ export type TerminalHttpVerb = z.infer<typeof TerminalHttpVerbSchema>;
61
+ //# sourceMappingURL=http.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"http.d.ts","sourceRoot":"","sources":["../../src/schemas/http.ts"],"names":[],"mappings":"AAAA,OAAO,EAAyB,KAAK,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AACtF,OAAO,KAAK,CAAC,MAAM,QAAQ,CAAC;AAI5B,eAAO,MAAM,6BAA6B;;;kBAG/B,CAAC;AAEZ,eAAO,MAAM,0BAA0B;;kBAE5B,CAAC;AAEZ,eAAO,MAAM,6BAA6B;;;;;iBAQ1B,CAAC;AAEjB,eAAO,MAAM,sBAAsB;;;;wDAIC,MAAM,WAAW,MAAM,KAAK,IAAI,YAAhC,MAAM,WAAW,MAAM,KAAK,IAAI;uDAGjC,MAAM,KAAK,IAAI,YAAf,MAAM,KAAK,IAAI;kBAGvC,CAAC;AAEZ,eAAO,MAAM,4BAA4B;;;;;;;;;;;;;4DARL,MAAM,WAAW,MAAM,KAAK,IAAI,YAAhC,MAAM,WAAW,MAAM,KAAK,IAAI;2DAGjC,MAAM,KAAK,IAAI,YAAf,MAAM,KAAK,IAAI;;;kBAkBvC,CAAC;AAEZ,MAAM,MAAM,gBAAgB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,sBAAsB,CAAC,CAAC;AACtE,MAAM,MAAM,sBAAsB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,4BAA4B,CAAC,CAAC;AAElF,eAAO,MAAM,sBAAsB;;iBAAiC,CAAC;AAErE,MAAM,WAAW,mBAAoB,SAAQ,WAAW;IACvD,KAAK,IAAI,IAAI,CAAC;IACd,OAAO,EAAE,CAAC,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC,GAAG,IAAI,CAAC;CACzC;AAED,MAAM,WAAW,8BAA8B;IAC9C,KAAK,GAAG,EAAE,MAAM,GAAG,mBAAmB,CAAC;CACvC;AAED,eAAO,MAAM,oCAAoC,6EAEhD,CAAC;AAEF,eAAO,MAAM,sBAAsB;;;;;EAAgD,CAAC;AACpF,MAAM,MAAM,gBAAgB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,sBAAsB,CAAC,CAAC"}
@@ -0,0 +1,45 @@
1
+ import { isCapabilityErrorCode } from '@vibesdotdev/kernel';
2
+ import * as z from 'zod/v4';
3
+ import { OpenTerminalOptionsSchema } from "./session.js";
4
+ import { JsonObjectSchema } from '@vibesdotdev/kernel/schemas/json';
5
+ export const HttpSessionOpenResponseSchema = z.object({
6
+ id: z.string().min(1),
7
+ environmentId: z.string().min(1)
8
+ }).strict();
9
+ export const HttpSessionExitEventSchema = z.object({
10
+ exitCode: z.number().int().nullable()
11
+ }).strict();
12
+ export const HttpSessionFailureEventSchema = z.object({
13
+ code: z.custom(value => {
14
+ const parsed = z.string().safeParse(value);
15
+ return parsed.success && isCapabilityErrorCode(parsed.data);
16
+ }),
17
+ reason: z.string().min(1),
18
+ message: z.string().min(1),
19
+ retryable: z.boolean()
20
+ }).passthrough();
21
+ export const ReconnectOptionsSchema = z.object({
22
+ maxAttempts: z.number().int().nonnegative().default(8),
23
+ baseDelayMs: z.number().int().nonnegative().default(200),
24
+ maxDelayMs: z.number().int().nonnegative().default(10_000),
25
+ onReconnecting: z.custom((value) => z.function().safeParse(value).success).optional(),
26
+ onReconnected: z.custom((value) => z.function().safeParse(value).success).optional()
27
+ }).strict();
28
+ export const OpenHttpSessionOptionsSchema = z.object({
29
+ command: OpenTerminalOptionsSchema.shape.command.optional(),
30
+ args: OpenTerminalOptionsSchema.shape.args,
31
+ cols: OpenTerminalOptionsSchema.shape.cols,
32
+ rows: OpenTerminalOptionsSchema.shape.rows,
33
+ baseUrl: z.string().default(''),
34
+ /** Bound HTTP admission and control requests through the owning lifecycle. */
35
+ timeoutMs: z.number().int().positive().max(120_000).default(30_000),
36
+ /** Cancels admission; it does not terminate an already-open session. */
37
+ signal: z.custom(value => value instanceof AbortSignal).optional(),
38
+ extra: JsonObjectSchema.optional(),
39
+ reconnect: z.union([ReconnectOptionsSchema, z.literal(false)]).prefault({}),
40
+ existingId: z.string().min(1).optional()
41
+ }).strict();
42
+ export const MessageEventDataSchema = z.object({ data: z.string() });
43
+ export const TerminalEventSourceConstructorSchema = z.custom((value) => z.function().safeParse(value).success);
44
+ export const TerminalHttpVerbSchema = z.enum(['write', 'resize', 'signal', 'kill']);
45
+ //# sourceMappingURL=http.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"http.js","sourceRoot":"","sources":["../../src/schemas/http.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,25 @@
1
+ import * as z from 'zod/v4';
2
+ import type { RpcChannel } from '@vibesdotdev/kernel-rpc';
3
+ export declare const RemoteSessionProxySchema: z.ZodCustom<{
4
+ write: (data: Uint8Array) => Promise<void>;
5
+ resize: (cols: number, rows: number) => Promise<void>;
6
+ signal: (signal: string) => Promise<void>;
7
+ exited: () => Promise<{
8
+ exitCode: number | null;
9
+ }>;
10
+ kill: () => Promise<void>;
11
+ __openStream: (channel: string) => Promise<RpcChannel>;
12
+ } & Disposable, {
13
+ write: (data: Uint8Array) => Promise<void>;
14
+ resize: (cols: number, rows: number) => Promise<void>;
15
+ signal: (signal: string) => Promise<void>;
16
+ exited: () => Promise<{
17
+ exitCode: number | null;
18
+ }>;
19
+ kill: () => Promise<void>;
20
+ __openStream: (channel: string) => Promise<RpcChannel>;
21
+ } & Disposable>;
22
+ export declare const RpcChannelSchema: z.ZodCustom<RpcChannel, RpcChannel>;
23
+ export declare const HostIdSchema: z.ZodString;
24
+ export type RemoteSessionProxy = z.infer<typeof RemoteSessionProxySchema>;
25
+ //# sourceMappingURL=remote.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"remote.d.ts","sourceRoot":"","sources":["../../src/schemas/remote.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,QAAQ,CAAC;AAC5B,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAoB1D,eAAO,MAAM,wBAAwB;kBAdb,UAAU,KAAK,OAAO,CAAC,IAAI,CAAC;mBAC3B,MAAM,QAAQ,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC;qBACpC,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC;kBAC3B,OAAO,CAAC;QAAE,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE,CAAC;gBACtC,OAAO,CAAC,IAAI,CAAC;4BACD,MAAM,KAAK,OAAO,CAAC,UAAU,CAAC;;kBALxC,UAAU,KAAK,OAAO,CAAC,IAAI,CAAC;mBAC3B,MAAM,QAAQ,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC;qBACpC,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC;kBAC3B,OAAO,CAAC;QAAE,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE,CAAC;gBACtC,OAAO,CAAC,IAAI,CAAC;4BACD,MAAM,KAAK,OAAO,CAAC,UAAU,CAAC;eAY9D,CAAC;AACH,eAAO,MAAM,gBAAgB,qCAE5B,CAAC;AACF,eAAO,MAAM,YAAY,aAAoC,CAAC;AAG9D,MAAM,MAAM,kBAAkB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,wBAAwB,CAAC,CAAC"}
@@ -0,0 +1,23 @@
1
+ import * as z from 'zod/v4';
2
+ const CallableSchema = z.function();
3
+ const callable = () => z.custom(value => CallableSchema.safeParse(value).success);
4
+ const RemoteSessionProxyContractSchema = z.object({
5
+ write: callable(),
6
+ resize: callable(),
7
+ signal: callable(),
8
+ exited: callable(),
9
+ kill: callable(),
10
+ __openStream: callable()
11
+ });
12
+ const DisposableCandidateSchema = z.custom((value) => z.object({}).passthrough().safeParse(value).success);
13
+ const DisposableContractSchema = z.custom((value) => {
14
+ const parsed = DisposableCandidateSchema.safeParse(value);
15
+ return parsed.success && CallableSchema.safeParse(parsed.data[Symbol.dispose]).success;
16
+ });
17
+ export const RemoteSessionProxySchema = z.custom((value) => {
18
+ return RemoteSessionProxyContractSchema.safeParse(value).success &&
19
+ DisposableContractSchema.safeParse(value).success;
20
+ });
21
+ export const RpcChannelSchema = z.custom((value) => z.object({ write: CallableSchema, onData: CallableSchema, close: CallableSchema }).safeParse(value).success);
22
+ export const HostIdSchema = z.string().trim().min(1).max(256);
23
+ //# sourceMappingURL=remote.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"remote.js","sourceRoot":"","sources":["../../src/schemas/remote.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,QAAQ,CAAC;AAG5B,MAAM,cAAc,GAAG,CAAC,CAAC,QAAQ,EAAE,CAAC;AACpC,MAAM,QAAQ,GAAG,GAAM,EAAE,CACxB,CAAC,CAAC,MAAM,CAAI,KAAK,CAAC,EAAE,CAAC,cAAc,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC;AAC/D,MAAM,gCAAgC,GAAG,CAAC,CAAC,MAAM,CAAC;IACjD,KAAK,EAAE,QAAQ,EAAuC;IACtD,MAAM,EAAE,QAAQ,EAAiD;IACjE,MAAM,EAAE,QAAQ,EAAqC;IACrD,MAAM,EAAE,QAAQ,EAA8C;IAC9D,IAAI,EAAE,QAAQ,EAAuB;IACrC,YAAY,EAAE,QAAQ,EAA4C;CAClE,CAAC,CAAC;AACH,MAAM,yBAAyB,GAAG,CAAC,CAAC,MAAM,CACzC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,OAAO,CAC9D,CAAC;AACF,MAAM,wBAAwB,GAAG,CAAC,CAAC,MAAM,CAAa,CAAC,KAAK,EAAE,EAAE;IAC/D,MAAM,MAAM,GAAG,yBAAyB,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;IAC1D,OAAO,MAAM,CAAC,OAAO,IAAI,cAAc,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC;AACxF,CAAC,CAAC,CAAC;AACH,MAAM,CAAC,MAAM,wBAAwB,GAAG,CAAC,CAAC,MAAM,CAAgE,CAAC,KAAK,EAAE,EAAE;IACzH,OAAO,gCAAgC,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,OAAO;QAC/D,wBAAwB,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC;AACpD,CAAC,CAAC,CAAC;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,CAAC,MAAM,CAAa,CAAC,KAAK,EAAE,EAAE,CAC9D,CAAC,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,cAAc,EAAE,MAAM,EAAE,cAAc,EAAE,KAAK,EAAE,cAAc,EAAE,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,OAAO,CAC3G,CAAC;AACF,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC"}
@@ -0,0 +1,26 @@
1
+ import * as z from 'zod/v4';
2
+ export declare const OpenTerminalOptionsSchema: z.ZodObject<{
3
+ command: z.ZodString;
4
+ args: z.ZodOptional<z.ZodArray<z.ZodString>>;
5
+ cols: z.ZodNumber;
6
+ rows: z.ZodNumber;
7
+ cwd: z.ZodOptional<z.ZodString>;
8
+ env: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
9
+ }, z.core.$strict>;
10
+ export type OpenTerminalOptions = z.infer<typeof OpenTerminalOptionsSchema>;
11
+ /** Kernel RuntimeRefHandle wire shape; kernel currently exports its type only. */
12
+ export declare const TerminalHostRefSchema: z.ZodObject<{
13
+ runtimeId: z.ZodString;
14
+ local: z.ZodBoolean;
15
+ mountGeneration: z.ZodOptional<z.ZodNumber>;
16
+ }, z.core.$strip>;
17
+ export declare const SessionOpenOptionsSchema: z.ZodObject<{
18
+ command: z.ZodString;
19
+ args: z.ZodOptional<z.ZodArray<z.ZodString>>;
20
+ cols: z.ZodNumber;
21
+ rows: z.ZodNumber;
22
+ cwd: z.ZodOptional<z.ZodString>;
23
+ env: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
24
+ }, z.core.$strict>;
25
+ export type SessionOpenOptions = z.infer<typeof SessionOpenOptionsSchema>;
26
+ //# sourceMappingURL=session.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session.d.ts","sourceRoot":"","sources":["../../src/schemas/session.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,QAAQ,CAAC;AAE5B,eAAO,MAAM,yBAAyB;;;;;;;kBAO3B,CAAC;AACZ,MAAM,MAAM,mBAAmB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,yBAAyB,CAAC,CAAC;AAE5E,kFAAkF;AAClF,eAAO,MAAM,qBAAqB;;;;iBAIhC,CAAC;AACH,eAAO,MAAM,wBAAwB;;;;;;;kBAA4B,CAAC;AAClE,MAAM,MAAM,kBAAkB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,wBAAwB,CAAC,CAAC"}
@@ -0,0 +1,17 @@
1
+ import * as z from 'zod/v4';
2
+ export const OpenTerminalOptionsSchema = z.object({
3
+ command: z.string().min(1),
4
+ args: z.array(z.string()).optional(),
5
+ cols: z.number().int().positive(),
6
+ rows: z.number().int().positive(),
7
+ cwd: z.string().min(1).optional(),
8
+ env: z.record(z.string(), z.string()).optional()
9
+ }).strict();
10
+ /** Kernel RuntimeRefHandle wire shape; kernel currently exports its type only. */
11
+ export const TerminalHostRefSchema = z.object({
12
+ runtimeId: z.string().trim().min(1),
13
+ local: z.boolean(),
14
+ mountGeneration: z.number().int().nonnegative().optional()
15
+ });
16
+ export const SessionOpenOptionsSchema = OpenTerminalOptionsSchema;
17
+ //# sourceMappingURL=session.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session.js","sourceRoot":"","sources":["../../src/schemas/session.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,QAAQ,CAAC;AAE5B,MAAM,CAAC,MAAM,yBAAyB,GAAG,CAAC,CAAC,MAAM,CAAC;IACjD,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAC1B,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE;IACpC,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE;IACjC,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE;IACjC,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE;IACjC,GAAG,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE;CAChD,CAAC,CAAC,MAAM,EAAE,CAAC;AAGZ,kFAAkF;AAClF,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC7C,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IACnC,KAAK,EAAE,CAAC,CAAC,OAAO,EAAE;IAClB,eAAe,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,WAAW,EAAE,CAAC,QAAQ,EAAE;CAC1D,CAAC,CAAC;AACH,MAAM,CAAC,MAAM,wBAAwB,GAAG,yBAAyB,CAAC"}
@@ -0,0 +1,29 @@
1
+ import * as z from 'zod/v4';
2
+ import type { ExecutionSession } from '@vibesdotdev/kernel/execution';
3
+ import type { SessionOpenOptions } from './session.ts';
4
+ export declare const TerminalSessionStoreOptionsSchema: z.ZodObject<{
5
+ maxSessions: z.ZodDefault<z.ZodNumber>;
6
+ idleTimeoutMs: z.ZodDefault<z.ZodNumber>;
7
+ reaperIntervalMs: z.ZodDefault<z.ZodNumber>;
8
+ }, z.core.$strict>;
9
+ export type TerminalSessionStoreOptions = z.input<typeof TerminalSessionStoreOptionsSchema>;
10
+ export declare const SessionOpenerSchema: z.ZodCustom<(opts: SessionOpenOptions) => Promise<ExecutionSession>, (opts: SessionOpenOptions) => Promise<ExecutionSession>>;
11
+ export declare const ExecutionSessionContractSchema: z.ZodObject<{
12
+ id: z.ZodString;
13
+ environmentId: z.ZodString;
14
+ write: z.ZodFunction<z.core.$ZodFunctionArgs, z.core.$ZodFunctionOut>;
15
+ onOutput: z.ZodFunction<z.core.$ZodFunctionArgs, z.core.$ZodFunctionOut>;
16
+ resize: z.ZodFunction<z.core.$ZodFunctionArgs, z.core.$ZodFunctionOut>;
17
+ signal: z.ZodFunction<z.core.$ZodFunctionArgs, z.core.$ZodFunctionOut>;
18
+ exited: z.ZodFunction<z.core.$ZodFunctionArgs, z.core.$ZodFunctionOut>;
19
+ kill: z.ZodFunction<z.core.$ZodFunctionArgs, z.core.$ZodFunctionOut>;
20
+ }, z.core.$strip>;
21
+ export declare const ExecutionSessionSchema: z.ZodCustom<ExecutionSession, ExecutionSession>;
22
+ export declare const SessionIdentitySchema: z.ZodString;
23
+ export declare const ResizeSchema: z.ZodObject<{
24
+ cols: z.ZodNumber;
25
+ rows: z.ZodNumber;
26
+ }, z.core.$strict>;
27
+ export declare const SignalSchema: z.ZodString;
28
+ export type SessionOpener = z.infer<typeof SessionOpenerSchema>;
29
+ //# sourceMappingURL=store.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../../src/schemas/store.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,QAAQ,CAAC;AAC5B,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AACtE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAEvD,eAAO,MAAM,iCAAiC;;;;kBAInC,CAAC;AAEZ,MAAM,MAAM,2BAA2B,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iCAAiC,CAAC,CAAC;AAE5F,eAAO,MAAM,mBAAmB,qBAAmB,kBAAkB,KAAK,OAAO,CAAC,gBAAgB,CAAC,SAAhD,kBAAkB,KAAK,OAAO,CAAC,gBAAgB,CAAC,CAAmD,CAAC;AACvJ,eAAO,MAAM,8BAA8B;;;;;;;;;iBASzC,CAAC;AACH,eAAO,MAAM,sBAAsB,iDAElC,CAAC;AACF,eAAO,MAAM,qBAAqB,aAA6B,CAAC;AAChE,eAAO,MAAM,YAAY;;;kBAA8F,CAAC;AACxH,eAAO,MAAM,YAAY,aAAmC,CAAC;AAE7D,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAC"}
@@ -0,0 +1,22 @@
1
+ import * as z from 'zod/v4';
2
+ export const TerminalSessionStoreOptionsSchema = z.object({
3
+ maxSessions: z.number().int().nonnegative().default(0),
4
+ idleTimeoutMs: z.number().int().positive().default(30 * 60_000),
5
+ reaperIntervalMs: z.number().int().positive().default(60_000)
6
+ }).strict();
7
+ export const SessionOpenerSchema = z.custom((value) => z.function().safeParse(value).success);
8
+ export const ExecutionSessionContractSchema = z.object({
9
+ id: z.string().min(1),
10
+ environmentId: z.string().min(1),
11
+ write: z.function(),
12
+ onOutput: z.function(),
13
+ resize: z.function(),
14
+ signal: z.function(),
15
+ exited: z.function(),
16
+ kill: z.function()
17
+ });
18
+ export const ExecutionSessionSchema = z.custom((value) => ExecutionSessionContractSchema.safeParse(value).success);
19
+ export const SessionIdentitySchema = z.string().min(1).max(512);
20
+ export const ResizeSchema = z.object({ cols: z.number().int().positive(), rows: z.number().int().positive() }).strict();
21
+ export const SignalSchema = z.string().trim().min(1).max(64);
22
+ //# sourceMappingURL=store.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"store.js","sourceRoot":"","sources":["../../src/schemas/store.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,QAAQ,CAAC;AAI5B,MAAM,CAAC,MAAM,iCAAiC,GAAG,CAAC,CAAC,MAAM,CAAC;IACzD,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC;IACtD,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,EAAE,GAAG,MAAM,CAAC;IAC/D,gBAAgB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC;CAC7D,CAAC,CAAC,MAAM,EAAE,CAAC;AAIZ,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,CAAC,MAAM,CAA0D,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC;AACvJ,MAAM,CAAC,MAAM,8BAA8B,GAAG,CAAC,CAAC,MAAM,CAAC;IACtD,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IACrB,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAChC,KAAK,EAAE,CAAC,CAAC,QAAQ,EAAE;IACnB,QAAQ,EAAE,CAAC,CAAC,QAAQ,EAAE;IACtB,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE;IACpB,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE;IACpB,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE;IACpB,IAAI,EAAE,CAAC,CAAC,QAAQ,EAAE;CAClB,CAAC,CAAC;AACH,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAAC,CAAC,MAAM,CAC7C,CAAC,KAAK,EAAE,EAAE,CAAC,8BAA8B,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,OAAO,CAClE,CAAC;AACF,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AAChE,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC;AACxH,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC"}