@vibesdotdev/code-sessions 0.0.0-stage → 1.0.0-rc.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.
Files changed (217) hide show
  1. package/LICENSE +18 -0
  2. package/README.md +165 -2
  3. package/dist/agent/coordinator.agent.descriptor.d.ts +69 -0
  4. package/dist/agent/coordinator.agent.descriptor.d.ts.map +1 -0
  5. package/dist/agent/coordinator.agent.descriptor.js +60 -0
  6. package/dist/agent/coordinator.agent.descriptor.js.map +1 -0
  7. package/dist/agent/coordinator.prompt.descriptor.d.ts +135 -0
  8. package/dist/agent/coordinator.prompt.descriptor.d.ts.map +1 -0
  9. package/dist/agent/coordinator.prompt.descriptor.js +29 -0
  10. package/dist/agent/coordinator.prompt.descriptor.js.map +1 -0
  11. package/dist/agent/coordinator.system-prompt.d.ts +3 -0
  12. package/dist/agent/coordinator.system-prompt.d.ts.map +1 -0
  13. package/dist/agent/coordinator.system-prompt.js +18 -0
  14. package/dist/agent/coordinator.system-prompt.js.map +1 -0
  15. package/dist/agent/developer.agent.descriptor.d.ts +74 -0
  16. package/dist/agent/developer.agent.descriptor.d.ts.map +1 -0
  17. package/dist/agent/developer.agent.descriptor.js +138 -0
  18. package/dist/agent/developer.agent.descriptor.js.map +1 -0
  19. package/dist/agent/developer.prompt.descriptor.d.ts +137 -0
  20. package/dist/agent/developer.prompt.descriptor.d.ts.map +1 -0
  21. package/dist/agent/developer.prompt.descriptor.js +29 -0
  22. package/dist/agent/developer.prompt.descriptor.js.map +1 -0
  23. package/dist/agent/reviewer.agent.descriptor.d.ts +69 -0
  24. package/dist/agent/reviewer.agent.descriptor.d.ts.map +1 -0
  25. package/dist/agent/reviewer.agent.descriptor.js +60 -0
  26. package/dist/agent/reviewer.agent.descriptor.js.map +1 -0
  27. package/dist/agent/reviewer.prompt.descriptor.d.ts +135 -0
  28. package/dist/agent/reviewer.prompt.descriptor.d.ts.map +1 -0
  29. package/dist/agent/reviewer.prompt.descriptor.js +29 -0
  30. package/dist/agent/reviewer.prompt.descriptor.js.map +1 -0
  31. package/dist/agent/reviewer.system-prompt.d.ts +3 -0
  32. package/dist/agent/reviewer.system-prompt.d.ts.map +1 -0
  33. package/dist/agent/reviewer.system-prompt.js +17 -0
  34. package/dist/agent/reviewer.system-prompt.js.map +1 -0
  35. package/dist/agent/system-prompt.d.ts +12 -0
  36. package/dist/agent/system-prompt.d.ts.map +1 -0
  37. package/dist/agent/system-prompt.js +28 -0
  38. package/dist/agent/system-prompt.js.map +1 -0
  39. package/dist/api/code-sessions.api-client.descriptor.d.ts +25 -0
  40. package/dist/api/code-sessions.api-client.descriptor.d.ts.map +1 -0
  41. package/dist/api/code-sessions.api-client.descriptor.js +26 -0
  42. package/dist/api/code-sessions.api-client.descriptor.js.map +1 -0
  43. package/dist/api/code-sessions.api-client.impl.d.ts +156 -0
  44. package/dist/api/code-sessions.api-client.impl.d.ts.map +1 -0
  45. package/dist/api/code-sessions.api-client.impl.js +852 -0
  46. package/dist/api/code-sessions.api-client.impl.js.map +1 -0
  47. package/dist/api/code-sessions.api-client.schemas.d.ts +2 -0
  48. package/dist/api/code-sessions.api-client.schemas.d.ts.map +1 -0
  49. package/dist/api/code-sessions.api-client.schemas.js +2 -0
  50. package/dist/api/code-sessions.api-client.schemas.js.map +1 -0
  51. package/dist/api/code-sessions.api-client.types.d.ts +252 -0
  52. package/dist/api/code-sessions.api-client.types.d.ts.map +1 -0
  53. package/dist/api/code-sessions.api-client.types.js +77 -0
  54. package/dist/api/code-sessions.api-client.types.js.map +1 -0
  55. package/dist/api/index.d.ts +13 -0
  56. package/dist/api/index.d.ts.map +1 -0
  57. package/dist/api/index.js +20 -0
  58. package/dist/api/index.js.map +1 -0
  59. package/dist/capability.d.ts +9 -0
  60. package/dist/capability.d.ts.map +1 -0
  61. package/dist/capability.js +9 -0
  62. package/dist/capability.js.map +1 -0
  63. package/dist/catalog/index.d.ts +2 -0
  64. package/dist/catalog/index.d.ts.map +1 -0
  65. package/dist/catalog/index.js +2 -0
  66. package/dist/catalog/index.js.map +1 -0
  67. package/dist/catalog/session-catalog.d.ts +131 -0
  68. package/dist/catalog/session-catalog.d.ts.map +1 -0
  69. package/dist/catalog/session-catalog.impl.consumer.worker.d.ts +113 -0
  70. package/dist/catalog/session-catalog.impl.consumer.worker.d.ts.map +1 -0
  71. package/dist/catalog/session-catalog.impl.consumer.worker.js +32 -0
  72. package/dist/catalog/session-catalog.impl.consumer.worker.js.map +1 -0
  73. package/dist/catalog/session-catalog.js +126 -0
  74. package/dist/catalog/session-catalog.js.map +1 -0
  75. package/dist/clock/clock.client.d.ts +18 -0
  76. package/dist/clock/clock.client.d.ts.map +1 -0
  77. package/dist/clock/clock.client.js +43 -0
  78. package/dist/clock/clock.client.js.map +1 -0
  79. package/dist/code-sessions.consumer.plugin.d.ts +4 -0
  80. package/dist/code-sessions.consumer.plugin.d.ts.map +1 -0
  81. package/dist/code-sessions.consumer.plugin.js +16 -0
  82. package/dist/code-sessions.consumer.plugin.js.map +1 -0
  83. package/dist/code-sessions.plugin.d.ts +15 -0
  84. package/dist/code-sessions.plugin.d.ts.map +1 -0
  85. package/dist/code-sessions.plugin.js +65 -0
  86. package/dist/code-sessions.plugin.js.map +1 -0
  87. package/dist/config/index.d.ts +9 -0
  88. package/dist/config/index.d.ts.map +1 -0
  89. package/dist/config/index.js +9 -0
  90. package/dist/config/index.js.map +1 -0
  91. package/dist/config/preparation.d.ts +2 -0
  92. package/dist/config/preparation.d.ts.map +1 -0
  93. package/dist/config/preparation.js +2 -0
  94. package/dist/config/preparation.js.map +1 -0
  95. package/dist/docs/code-sessions.docs.descriptor.d.ts +4 -0
  96. package/dist/docs/code-sessions.docs.descriptor.d.ts.map +1 -0
  97. package/dist/docs/code-sessions.docs.descriptor.js +241 -0
  98. package/dist/docs/code-sessions.docs.descriptor.js.map +1 -0
  99. package/dist/index.d.ts +26 -0
  100. package/dist/index.d.ts.map +1 -0
  101. package/dist/index.js +28 -0
  102. package/dist/index.js.map +1 -0
  103. package/dist/pull-request-plan.d.ts +68 -0
  104. package/dist/pull-request-plan.d.ts.map +1 -0
  105. package/dist/pull-request-plan.js +94 -0
  106. package/dist/pull-request-plan.js.map +1 -0
  107. package/dist/schemas/preparation.d.ts +51 -0
  108. package/dist/schemas/preparation.d.ts.map +1 -0
  109. package/dist/schemas/preparation.js +20 -0
  110. package/dist/schemas/preparation.js.map +1 -0
  111. package/dist/schemas/requests.d.ts +411 -0
  112. package/dist/schemas/requests.d.ts.map +1 -0
  113. package/dist/schemas/requests.js +87 -0
  114. package/dist/schemas/requests.js.map +1 -0
  115. package/dist/schemas/responses.d.ts +275 -0
  116. package/dist/schemas/responses.d.ts.map +1 -0
  117. package/dist/schemas/responses.js +90 -0
  118. package/dist/schemas/responses.js.map +1 -0
  119. package/dist/svelte/actions.d.ts +70 -0
  120. package/dist/svelte/actions.d.ts.map +1 -0
  121. package/dist/svelte/actions.js +280 -0
  122. package/dist/svelte/clock.svelte.d.ts +6 -0
  123. package/dist/svelte/clock.svelte.d.ts.map +1 -0
  124. package/dist/svelte/clock.svelte.js +33 -0
  125. package/dist/svelte/components/CreateSessionDialog.svelte +470 -0
  126. package/dist/svelte/components/CreateSessionDialog.svelte.d.ts +57 -0
  127. package/dist/svelte/components/CreateSessionDialog.svelte.d.ts.map +1 -0
  128. package/dist/svelte/components/SessionCard.svelte +216 -0
  129. package/dist/svelte/components/SessionCard.svelte.d.ts +27 -0
  130. package/dist/svelte/components/SessionCard.svelte.d.ts.map +1 -0
  131. package/dist/svelte/components/SessionList.svelte +86 -0
  132. package/dist/svelte/components/SessionList.svelte.d.ts +23 -0
  133. package/dist/svelte/components/SessionList.svelte.d.ts.map +1 -0
  134. package/dist/svelte/components/SessionSeed.svelte +60 -0
  135. package/dist/svelte/components/SessionSeed.svelte.d.ts +9 -0
  136. package/dist/svelte/components/SessionSeed.svelte.d.ts.map +1 -0
  137. package/dist/svelte/components/TranscriptView.svelte +360 -0
  138. package/dist/svelte/components/TranscriptView.svelte.d.ts +26 -0
  139. package/dist/svelte/components/TranscriptView.svelte.d.ts.map +1 -0
  140. package/dist/svelte/create-session-form.d.ts +84 -0
  141. package/dist/svelte/create-session-form.d.ts.map +1 -0
  142. package/dist/svelte/create-session-form.js +107 -0
  143. package/dist/svelte/index.d.ts +20 -0
  144. package/dist/svelte/index.d.ts.map +1 -0
  145. package/dist/svelte/index.js +18 -0
  146. package/dist/svelte/live-session.d.ts +156 -0
  147. package/dist/svelte/live-session.d.ts.map +1 -0
  148. package/dist/svelte/live-session.js +152 -0
  149. package/dist/svelte/loaders.d.ts +74 -0
  150. package/dist/svelte/loaders.d.ts.map +1 -0
  151. package/dist/svelte/loaders.js +124 -0
  152. package/dist/svelte/outcome.d.ts +46 -0
  153. package/dist/svelte/outcome.d.ts.map +1 -0
  154. package/dist/svelte/outcome.js +49 -0
  155. package/dist/svelte/relative-time.d.ts +32 -0
  156. package/dist/svelte/relative-time.d.ts.map +1 -0
  157. package/dist/svelte/relative-time.js +51 -0
  158. package/dist/svelte/session-list-item.d.ts +23 -0
  159. package/dist/svelte/session-list-item.d.ts.map +1 -0
  160. package/dist/svelte/session-list-item.js +1 -0
  161. package/dist/svelte/styles.css +8 -0
  162. package/dist/svelte/transcript-input.d.ts +45 -0
  163. package/dist/svelte/transcript-input.d.ts.map +1 -0
  164. package/dist/svelte/transcript-input.js +188 -0
  165. package/dist/tui/code-sessions-tui.plugin.d.ts +10 -0
  166. package/dist/tui/code-sessions-tui.plugin.d.ts.map +1 -0
  167. package/dist/tui/code-sessions-tui.plugin.js +29 -0
  168. package/dist/tui/code-sessions-tui.plugin.js.map +1 -0
  169. package/dist/tui/code-sessions.tui-app.descriptor.d.ts +7 -0
  170. package/dist/tui/code-sessions.tui-app.descriptor.d.ts.map +1 -0
  171. package/dist/tui/code-sessions.tui-app.descriptor.js +30 -0
  172. package/dist/tui/code-sessions.tui-app.descriptor.js.map +1 -0
  173. package/dist/tui/code-sessions.tui-app.impl.consumer.d.ts +14 -0
  174. package/dist/tui/code-sessions.tui-app.impl.consumer.d.ts.map +1 -0
  175. package/dist/tui/code-sessions.tui-app.impl.consumer.js +453 -0
  176. package/dist/tui/code-sessions.tui-app.impl.consumer.js.map +1 -0
  177. package/dist/tui/code-sessions.tui-client.d.ts +22 -0
  178. package/dist/tui/code-sessions.tui-client.d.ts.map +1 -0
  179. package/dist/tui/code-sessions.tui-client.js +95 -0
  180. package/dist/tui/code-sessions.tui-client.js.map +1 -0
  181. package/dist/tui/code-sessions.tui-open.descriptor.d.ts +7 -0
  182. package/dist/tui/code-sessions.tui-open.descriptor.d.ts.map +1 -0
  183. package/dist/tui/code-sessions.tui-open.descriptor.js +16 -0
  184. package/dist/tui/code-sessions.tui-open.descriptor.js.map +1 -0
  185. package/dist/tui/code-sessions.tui-open.impl.consumer.d.ts +7 -0
  186. package/dist/tui/code-sessions.tui-open.impl.consumer.d.ts.map +1 -0
  187. package/dist/tui/code-sessions.tui-open.impl.consumer.js +11 -0
  188. package/dist/tui/code-sessions.tui-open.impl.consumer.js.map +1 -0
  189. package/dist/tui/code-sessions.tui-state.descriptor.d.ts +16 -0
  190. package/dist/tui/code-sessions.tui-state.descriptor.d.ts.map +1 -0
  191. package/dist/tui/code-sessions.tui-state.descriptor.js +50 -0
  192. package/dist/tui/code-sessions.tui-state.descriptor.js.map +1 -0
  193. package/dist/tui/code-sessions.tui-state.impl.consumer.d.ts +30 -0
  194. package/dist/tui/code-sessions.tui-state.impl.consumer.d.ts.map +1 -0
  195. package/dist/tui/code-sessions.tui-state.impl.consumer.js +533 -0
  196. package/dist/tui/code-sessions.tui-state.impl.consumer.js.map +1 -0
  197. package/dist/tui/code-sessions.tui-state.key.d.ts +322 -0
  198. package/dist/tui/code-sessions.tui-state.key.d.ts.map +1 -0
  199. package/dist/tui/code-sessions.tui-state.key.js +104 -0
  200. package/dist/tui/code-sessions.tui-state.key.js.map +1 -0
  201. package/dist/tui/index.d.ts +9 -0
  202. package/dist/tui/index.d.ts.map +1 -0
  203. package/dist/tui/index.js +8 -0
  204. package/dist/tui/index.js.map +1 -0
  205. package/dist/workspace/index.d.ts +2 -0
  206. package/dist/workspace/index.d.ts.map +1 -0
  207. package/dist/workspace/index.js +2 -0
  208. package/dist/workspace/index.js.map +1 -0
  209. package/dist/workspace/workspace-binding.d.ts +74 -0
  210. package/dist/workspace/workspace-binding.d.ts.map +1 -0
  211. package/dist/workspace/workspace-binding.impl.consumer.worker.d.ts +17 -0
  212. package/dist/workspace/workspace-binding.impl.consumer.worker.d.ts.map +1 -0
  213. package/dist/workspace/workspace-binding.impl.consumer.worker.js +134 -0
  214. package/dist/workspace/workspace-binding.impl.consumer.worker.js.map +1 -0
  215. package/dist/workspace/workspace-binding.js +72 -0
  216. package/dist/workspace/workspace-binding.js.map +1 -0
  217. package/package.json +238 -4
@@ -0,0 +1,453 @@
1
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "@opentui/react/jsx-runtime";
2
+ /**
3
+ * Code Sessions route - tui/app implementation.
4
+ *
5
+ * Thin projection over `code-sessions.sessions`; the state implementation owns
6
+ * runtime-client resolution and transport errors. Spec:
7
+ * docs/architecture/tui-page-specs/code-sessions.md — list · create · inspect,
8
+ * actions appear with a selection, facts/hints ride the screen-status
9
+ * contract (never a free-printed footer), and the signed-out state is one
10
+ * sentence with a real Sign in action.
11
+ */
12
+ import { useCallback, useEffect, useMemo, useRef, useState } from 'react';
13
+ import { useViewport } from '@vibesdotdev/tui';
14
+ import { useTuiDispatch, useTuiState, useTuiStateOptional } from '@vibesdotdev/tui/state/hooks';
15
+ import { List } from '@vibesdotdev/tui/components/data/List';
16
+ import { HStack, VStack, Spacer } from '@vibesdotdev/tui/components/layout';
17
+ import { DSBadge, DSButton, DSStatus, DSText, Panel } from '@vibesdotdev/tui/components/content';
18
+ import { DSSelect, DSTextArea } from '@vibesdotdev/tui/components/form/controls';
19
+ import { DSInput } from '@vibesdotdev/tui/components/form/controls/Input';
20
+ import { PageHeader, PageLayout } from '@vibesdotdev/tui/components/page';
21
+ import { dsBase, dsColors } from '@vibesdotdev/tui/theme';
22
+ import { executeAction, useInputModeStore, useKeyboardLayer } from '@vibesdotdev/tui/input';
23
+ import { useFocusStore } from '@vibesdotdev/tui/stores';
24
+ import { useContributeScreenStatus } from '@vibesdotdev/tui/shell';
25
+ import * as z from 'zod/v4';
26
+ import { defineTuiStateKey } from '@vibesdotdev/tui/kinds/tui-state';
27
+ import { codeSessionsStateKey } from "./code-sessions.tui-state.key.js";
28
+ /**
29
+ * The fields of the Forge TUI's `forge.status` state this screen shows: read
30
+ * through its own key, so the forge owner's state is checked against what
31
+ * this screen relies on without a package edge on forge.
32
+ */
33
+ const forgeStatusReadKey = defineTuiStateKey('forge.status', z.object({ dirty: z.boolean(), label: z.string().nullable() }));
34
+ /**
35
+ * Workspace-scoped PM handoff: opens /pm with this session's workspace so PM
36
+ * can scope its process table to it. A selection-scoped action — it exists
37
+ * only for the session you are looking at.
38
+ */
39
+ /** A caller's deep link (home's Continue band): the session to select once it is loaded. */
40
+ const SelectSessionRouteStateSchema = z.object({ selectSessionId: z.string() });
41
+ function pmRouteNotice(session) {
42
+ return {
43
+ routeNoticeTitle: 'Workspace PM diagnostics',
44
+ routeNoticeBody: `Diagnostics for processes running in ${session.workspacePath}.`,
45
+ sourceSurface: '/code-sessions',
46
+ sourceCorrelationId: `code-session:${session.sessionId}`,
47
+ sourceCodeSessionId: session.sessionId,
48
+ sourceWorkspacePath: session.workspacePath,
49
+ sourceHostTarget: formatHost(session),
50
+ sourceCapability: session.capability
51
+ };
52
+ }
53
+ function formatHost(session) {
54
+ if (session.hostTarget.kind === 'cloud')
55
+ return 'cloud sandbox';
56
+ if (session.hostTarget.kind === 'host')
57
+ return `host:${session.hostTarget.hostId}`;
58
+ return `provisioned:${session.hostTarget.adapter}`;
59
+ }
60
+ function formatSessionTitle(session) {
61
+ return session.repositoryName ?? (session.ephemeral ? 'Ephemeral workspace' : 'Code session');
62
+ }
63
+ function statusColor(status) {
64
+ if (status === 'active')
65
+ return 'success';
66
+ if (status === 'initializing')
67
+ return 'warning';
68
+ if (status === 'error')
69
+ return 'danger';
70
+ return 'neutral';
71
+ }
72
+ function capabilityLabel(session) {
73
+ return session.capability === 'interactive' ? 'interactive terminal' : 'snapshot transcript';
74
+ }
75
+ function parseCommandInput(value) {
76
+ const raw = value.trim();
77
+ if (!raw)
78
+ return [];
79
+ return (raw.match(/(?:[^\s"']+|"[^"]*"|'[^']*')+/g) ?? [raw])
80
+ .map((part) => part.replace(/^['"]|['"]$/g, ''))
81
+ .filter(Boolean);
82
+ }
83
+ function formatCommand(command) {
84
+ return command.join(' ');
85
+ }
86
+ /** One-line preview of a seed body — the full text lives in the sandbox env. */
87
+ function truncateSeedBody(body) {
88
+ const firstLine = body.split('\n', 1)[0]?.trim() ?? '';
89
+ return firstLine.length > 96 ? `${firstLine.slice(0, 95)}…` : firstLine;
90
+ }
91
+ function formatDuration(ms) {
92
+ if (ms < 1000)
93
+ return `${ms}ms`;
94
+ return `${(ms / 1000).toFixed(1)}s`;
95
+ }
96
+ function sortedSessions(sessions) {
97
+ return [...sessions].sort((a, b) => {
98
+ const statusRank = (status) => {
99
+ if (status === 'active')
100
+ return 0;
101
+ if (status === 'initializing')
102
+ return 1;
103
+ if (status === 'error')
104
+ return 2;
105
+ return 3;
106
+ };
107
+ const statusDelta = statusRank(a.status) - statusRank(b.status);
108
+ if (statusDelta !== 0)
109
+ return statusDelta;
110
+ return new Date(b.lastActivityAt).getTime() - new Date(a.lastActivityAt).getTime();
111
+ });
112
+ }
113
+ /**
114
+ * Signed-out / empty / error boundary — one panel, one sentence, one action
115
+ * per state (the web sibling's shape). The sign-in state raises the gateway's
116
+ * sign-in overlay; the CLI command stays as the one-line alternative a
117
+ * terminal is allowed to name.
118
+ */
119
+ function SessionsUnavailable({ error, onRefresh, onCreate }) {
120
+ const auth = error?.toLowerCase().includes('sign-in') ?? false;
121
+ const unavailable = !!error && !auth;
122
+ const status = auth || unavailable ? 'warning' : 'info';
123
+ const headline = auth
124
+ ? 'Code sessions live in your Vibes account'
125
+ : unavailable
126
+ ? 'Code sessions unavailable'
127
+ : 'No code sessions yet';
128
+ const [signInRaised, setSignInRaised] = useState(false);
129
+ return (_jsx(VStack, { padding: 2, justify: "start", style: { width: '100%' }, children: _jsxs(Panel, { padding: "sm", gap: "xs", status: status, children: [_jsxs(HStack, { gap: 1, children: [_jsx(DSStatus, { status: status, label: auth ? 'sign-in needed' : unavailable ? 'unavailable' : 'ready' }), _jsx(DSText, { color: auth || unavailable ? dsColors.warning.solid : dsColors.primary.solid, children: headline }), _jsx(Spacer, {}), auth ? (_jsx(DSButton, { label: "Sign in", size: "sm", color: "primary", variant: "outlined", onClick: () => setSignInRaised(executeAction('signIn')) })) : (_jsx(DSButton, { label: "New session", size: "sm", color: "primary", variant: "ghost", onClick: onCreate })), _jsx(DSButton, { label: "Refresh", size: "sm", color: "neutral", variant: "ghost", onClick: onRefresh })] }), auth ? (_jsx(DSText, { variant: "muted", children: signInRaised
130
+ ? 'Approve in the browser, then press R to refresh.'
131
+ : 'Or run `vibes auth login` in a shell, then press R to refresh.' })) : unavailable ? (_jsx(DSText, { variant: "muted", children: error })) : (_jsx(DSText, { variant: "muted", children: "Press N to use this directory, or pick another host and repository." }))] }) }));
132
+ }
133
+ /** Selected-session detail: what it is, where it runs, what you can do NOW. */
134
+ function SessionDetail({ session, commandDraft, onCommandDraftChange, onRunCommand, commandRun, sessionDelete, deleteConfirmArmed, onDeleteSession, onOpenPm }) {
135
+ const runAppliesToSelection = commandRun.sessionId === session.sessionId;
136
+ const runDisabled = session.capability !== 'transcript' ||
137
+ commandRun.status === 'running' ||
138
+ parseCommandInput(commandDraft).length === 0;
139
+ const deleteAppliesToSelection = sessionDelete.sessionId === session.sessionId;
140
+ const deleteInProgress = deleteAppliesToSelection && sessionDelete.status === 'deleting';
141
+ return (_jsxs(VStack, { padding: 2, gap: 1, children: [_jsxs(HStack, { gap: 1, children: [_jsx(DSBadge, { label: session.status, color: statusColor(session.status), variant: "subtle" }), _jsx(DSBadge, { label: capabilityLabel(session), color: session.capability === 'interactive' ? 'primary' : 'neutral', variant: "subtle" }), _jsx(DSBadge, { label: formatHost(session), color: "neutral", variant: "outline" }), _jsx(Spacer, {}), onOpenPm ? (_jsx(DSButton, { label: "PM", size: "sm", color: "neutral", variant: "ghost", onClick: onOpenPm })) : null, _jsx(DSButton, { label: deleteConfirmArmed ? 'Confirm delete' : 'Delete', size: "sm", color: deleteConfirmArmed ? 'danger' : 'neutral', variant: "ghost", disabled: deleteInProgress, loading: deleteInProgress, onClick: onDeleteSession })] }), deleteConfirmArmed ? (_jsx("text", { style: { fg: dsColors.warning.solid }, children: `Press D again to delete ${session.sessionId}; Esc cancels.` })) : null, _jsxs(VStack, { gap: 0, children: [_jsx(DSText, { children: `Session ${session.sessionId}` }), _jsx(DSText, { children: `Workspace ${session.workspacePath}` }), session.previewUrl ? _jsx(DSText, { children: `Preview ${session.previewUrl}` }) : null] }), session.seed ? (_jsxs(VStack, { gap: 0, paddingTop: 1, style: { border: ['top'], borderColor: dsBase.border }, children: [_jsxs(HStack, { gap: 1, children: [_jsx(DSText, { variant: "muted", children: "Task" }), _jsx(DSText, { bold: true, children: session.seed.title })] }), session.seed.body ? (_jsx(DSText, { variant: "muted", children: truncateSeedBody(session.seed.body) })) : null] })) : null, sessionDelete.status !== 'idle' && deleteAppliesToSelection === false && sessionDelete.sessionId ? (_jsxs(HStack, { gap: 1, children: [_jsx(DSText, { variant: "muted", children: "Delete" }), _jsx(DSText, { children: sessionDelete.sessionId }), _jsx("text", { style: {
142
+ fg: sessionDelete.status === 'success'
143
+ ? dsColors.success.solid
144
+ : sessionDelete.status === 'deleting'
145
+ ? dsColors.warning.solid
146
+ : dsColors.danger.solid
147
+ }, children: sessionDelete.status })] })) : null, session.capability === 'transcript' ? (_jsxs(VStack, { gap: 1, paddingTop: 1, style: { border: ['top'], borderColor: dsBase.border }, children: [_jsxs(HStack, { gap: 1, children: [_jsx(DSText, { bold: true, children: "Run a command" }), _jsx(DSButton, { label: "Run", size: "sm", color: "primary", variant: "ghost", disabled: runDisabled, loading: runAppliesToSelection && commandRun.status === 'running', onClick: onRunCommand })] }), _jsx(DSTextArea, { id: "code-sessions-command", value: commandDraft, onChange: onCommandDraftChange, placeholder: "pwd", height: 1, minHeight: 1, maxHeight: 3, autoGrow: true, submitOnEnter: true, onSubmit: onRunCommand }), runAppliesToSelection && commandRun.status !== 'idle' ? (_jsxs(VStack, { gap: 0, children: [_jsxs(HStack, { gap: 1, children: [_jsx(DSText, { variant: "muted", children: "Command" }), _jsx(DSText, { children: formatCommand(commandRun.command) }), _jsx("text", { style: {
148
+ fg: commandRun.status === 'success'
149
+ ? dsColors.success.solid
150
+ : commandRun.status === 'running'
151
+ ? dsColors.warning.solid
152
+ : dsColors.danger.solid
153
+ }, children: commandRun.status }), commandRun.result ? (_jsxs(_Fragment, { children: [_jsx(DSText, { children: commandRun.result.timedOut
154
+ ? 'timed out'
155
+ : commandRun.result.exitCode === null
156
+ ? 'exit unknown'
157
+ : `exit ${commandRun.result.exitCode}` }), _jsx(DSText, { children: formatDuration(commandRun.result.durationMs) })] })) : null] }), commandRun.result ? (_jsxs(_Fragment, { children: [commandRun.result.stdout ? (_jsx(DSText, { children: commandRun.result.stdout.trim() })) : null, commandRun.result.stderr ? (_jsx("text", { style: { fg: dsColors.danger.solid }, children: commandRun.result.stderr.trim() })) : null] })) : null, commandRun.error ? (_jsx("text", { style: { fg: dsColors.danger.solid }, children: commandRun.error })) : null] })) : null] })) : (_jsx(DSText, { variant: "muted", children: "Interactive session \u2014 attach through /chat's workspace binding." }))] }));
158
+ }
159
+ function CreateSessionForm({ startOptions, targetId, sourceId, onTargetIdChange, onSourceIdChange, onSubmit, onCancel, sessionCreate }) {
160
+ const creating = sessionCreate.status === 'creating';
161
+ const compatibleSources = startOptions.sources.filter((source) => targetId && source.compatibleTargetIds.includes(targetId));
162
+ const target = startOptions.targets.find((option) => option.id === targetId);
163
+ const source = compatibleSources.find((option) => option.id === sourceId);
164
+ const canCreate = Boolean(target && source && !creating);
165
+ return (_jsxs(Panel, { padding: "sm", gap: "xs", status: sessionCreate.status === 'fail' ? 'error' : 'info', children: [_jsxs(HStack, { gap: 1, children: [_jsx(DSText, { bold: true, children: "New code session" }), _jsx(Spacer, {}), _jsx(DSButton, { label: "Create", size: "sm", color: "primary", variant: "ghost", disabled: !canCreate, loading: creating, onClick: onSubmit }), _jsx(DSButton, { label: "Cancel", size: "sm", color: "neutral", variant: "ghost", disabled: creating, onClick: onCancel })] }), _jsx(DSText, { variant: "muted", children: "Environment" }), startOptions.targets.length > 0 ? (_jsx(DSSelect, { id: "code-sessions-create-target", options: startOptions.targets.map((option) => ({
166
+ name: option.name,
167
+ value: option.id,
168
+ description: option.description
169
+ })), value: targetId ?? undefined, onChange: onTargetIdChange, disabled: creating, autoFocus: true, visibleItems: Math.min(3, startOptions.targets.length) })) : (_jsx(DSText, { variant: "danger", children: "No code-session runtime is available." })), _jsx(DSText, { variant: "muted", children: "Workspace" }), compatibleSources.length > 0 ? (_jsx(DSSelect, { id: "code-sessions-create-source", options: compatibleSources.map((option) => ({
170
+ name: option.name,
171
+ value: option.id,
172
+ description: option.description
173
+ })), value: sourceId ?? undefined, onChange: onSourceIdChange, disabled: creating, visibleItems: Math.min(4, compatibleSources.length) })) : (_jsx(DSText, { variant: "warning", children: "No workspace is compatible with this environment." })), startOptions.degraded.length > 0 ? (_jsx(DSText, { variant: "muted", children: `Some alternatives are unavailable: ${startOptions.degraded.join(', ')}.` })) : null, sessionCreate.status !== 'idle' ? (_jsx("text", { style: {
174
+ fg: sessionCreate.status === 'success'
175
+ ? dsColors.success.solid
176
+ : sessionCreate.status === 'creating'
177
+ ? dsColors.warning.solid
178
+ : dsColors.danger.solid
179
+ }, children: sessionCreate.status === 'success'
180
+ ? `Created ${sessionCreate.sessionId ?? ''}`
181
+ : sessionCreate.status === 'creating'
182
+ ? 'Creating…'
183
+ : (sessionCreate.error ?? 'Create failed') })) : null] }));
184
+ }
185
+ function CodeSessionsApp({ navigate, embedded = false, routeState }) {
186
+ const { width, height } = useViewport();
187
+ const compact = width <= 90 || height <= 26;
188
+ const state = useTuiState(codeSessionsStateKey);
189
+ const dispatch = useTuiDispatch(codeSessionsStateKey);
190
+ const sessions = useMemo(() => sortedSessions(state?.sessions ?? []), [state?.sessions]);
191
+ const [selectedId, setSelectedId] = useState(null);
192
+ const [filter, setFilter] = useState('');
193
+ const [commandDraft, setCommandDraft] = useState('pwd');
194
+ const [deleteConfirmId, setDeleteConfirmId] = useState(null);
195
+ const [showCreateForm, setShowCreateForm] = useState(false);
196
+ const [createTargetId, setCreateTargetId] = useState(null);
197
+ const [createSourceId, setCreateSourceId] = useState(null);
198
+ const acknowledgedCreateCompletedAt = useRef(null);
199
+ // A caller (home's Continue band) can deep-link a session; honor it once
200
+ // when that session is present in the loaded list.
201
+ const requested = SelectSessionRouteStateSchema.safeParse(routeState);
202
+ const requestedId = requested.success ? requested.data.selectSessionId : null;
203
+ const consumedRequestedId = useRef(null);
204
+ useEffect(() => {
205
+ if (requestedId &&
206
+ consumedRequestedId.current !== requestedId &&
207
+ sessions.some((session) => session.sessionId === requestedId)) {
208
+ consumedRequestedId.current = requestedId;
209
+ setSelectedId(requestedId);
210
+ return;
211
+ }
212
+ if (!selectedId && sessions.length > 0) {
213
+ setSelectedId(sessions[0].sessionId);
214
+ }
215
+ else if (selectedId && !sessions.some((session) => session.sessionId === selectedId)) {
216
+ setSelectedId(sessions[0]?.sessionId ?? null);
217
+ }
218
+ }, [requestedId, selectedId, sessions]);
219
+ useEffect(() => {
220
+ if (deleteConfirmId && deleteConfirmId !== selectedId) {
221
+ setDeleteConfirmId(null);
222
+ }
223
+ }, [deleteConfirmId, selectedId]);
224
+ useEffect(() => {
225
+ if (!showCreateForm || !state)
226
+ return;
227
+ const { targets, sources, defaultTargetId, defaultSourceId } = state.startOptions;
228
+ const target = targets.find((option) => option.id === createTargetId) ??
229
+ targets.find((option) => option.id === defaultTargetId) ??
230
+ targets[0];
231
+ const compatibleSources = sources.filter((source) => target && source.compatibleTargetIds.includes(target.id));
232
+ const source = compatibleSources.find((option) => option.id === createSourceId) ??
233
+ compatibleSources.find((option) => option.id === defaultSourceId) ??
234
+ compatibleSources[0];
235
+ if ((target?.id ?? null) !== createTargetId)
236
+ setCreateTargetId(target?.id ?? null);
237
+ if ((source?.id ?? null) !== createSourceId)
238
+ setCreateSourceId(source?.id ?? null);
239
+ }, [createSourceId, createTargetId, showCreateForm, state]);
240
+ useEffect(() => {
241
+ const sessionCreate = state?.sessionCreate;
242
+ if (!sessionCreate || sessionCreate.status !== 'success' || !sessionCreate.sessionId)
243
+ return;
244
+ if (acknowledgedCreateCompletedAt.current === sessionCreate.completedAt)
245
+ return;
246
+ acknowledgedCreateCompletedAt.current = sessionCreate.completedAt;
247
+ setSelectedId(sessionCreate.sessionId);
248
+ setShowCreateForm(false);
249
+ setCreateTargetId(null);
250
+ setCreateSourceId(null);
251
+ }, [state?.sessionCreate]);
252
+ const selected = useMemo(() => sessions.find((session) => session.sessionId === selectedId) ?? null, [sessions, selectedId]);
253
+ const refresh = useCallback(() => dispatch({ type: 'REFRESH' }), [dispatch]);
254
+ const goHome = useCallback(() => navigate?.('/'), [navigate]);
255
+ const openPmForSelected = useCallback(() => {
256
+ if (!selected)
257
+ return;
258
+ navigate?.('/pm', pmRouteNotice(selected));
259
+ }, [navigate, selected]);
260
+ const runSelectedCommand = useCallback(() => {
261
+ if (!selected)
262
+ return;
263
+ const command = parseCommandInput(commandDraft);
264
+ if (command.length === 0)
265
+ return;
266
+ dispatch({
267
+ type: 'RUN_COMMAND',
268
+ payload: {
269
+ sessionId: selected.sessionId,
270
+ command
271
+ }
272
+ });
273
+ }, [commandDraft, dispatch, selected]);
274
+ const deleteSelectedSession = useCallback(() => {
275
+ if (!selected)
276
+ return;
277
+ if (deleteConfirmId !== selected.sessionId) {
278
+ setDeleteConfirmId(selected.sessionId);
279
+ return;
280
+ }
281
+ dispatch({
282
+ type: 'DELETE_SESSION',
283
+ payload: {
284
+ sessionId: selected.sessionId
285
+ }
286
+ });
287
+ setDeleteConfirmId(null);
288
+ }, [deleteConfirmId, dispatch, selected]);
289
+ const openCreateForm = useCallback(() => {
290
+ setCreateTargetId(state?.startOptions.defaultTargetId ?? null);
291
+ setCreateSourceId(state?.startOptions.defaultSourceId ?? null);
292
+ setShowCreateForm(true);
293
+ }, [state?.startOptions.defaultSourceId, state?.startOptions.defaultTargetId]);
294
+ const closeCreateForm = useCallback(() => {
295
+ setShowCreateForm(false);
296
+ setCreateTargetId(null);
297
+ setCreateSourceId(null);
298
+ }, []);
299
+ const changeCreateTarget = useCallback((targetId) => {
300
+ setCreateTargetId(targetId);
301
+ setCreateSourceId((current) => {
302
+ const compatible = state?.startOptions.sources.filter((source) => source.compatibleTargetIds.includes(targetId)) ?? [];
303
+ return compatible.some((source) => source.id === current)
304
+ ? current
305
+ : (compatible[0]?.id ?? null);
306
+ });
307
+ }, [state?.startOptions.sources]);
308
+ const submitCreateSession = useCallback(() => {
309
+ if (!createTargetId || !createSourceId)
310
+ return;
311
+ dispatch({
312
+ type: 'CREATE_SESSION',
313
+ payload: {
314
+ targetId: createTargetId,
315
+ sourceId: createSourceId
316
+ }
317
+ });
318
+ }, [createSourceId, createTargetId, dispatch]);
319
+ useKeyboardLayer('global', (key) => {
320
+ const focusedId = useFocusStore.getState().focusedId;
321
+ const keyName = key.name?.toLowerCase() ?? '';
322
+ const isPlain = !key.ctrl && !key.meta && !key.shift && !key.alt;
323
+ if (showCreateForm && isPlain && keyName === 'c') {
324
+ submitCreateSession();
325
+ return true;
326
+ }
327
+ if (showCreateForm && isPlain && keyName === 'escape') {
328
+ closeCreateForm();
329
+ return true;
330
+ }
331
+ // Form controls own navigation keys. Selects deliberately remain in
332
+ // normal mode for j/k navigation; C/Esc are the explicit form actions.
333
+ if (useInputModeStore.getState().mode === 'insert' ||
334
+ (showCreateForm && focusedId?.startsWith('code-sessions-create-'))) {
335
+ return false;
336
+ }
337
+ if (!isPlain)
338
+ return false;
339
+ if (keyName === 'n') {
340
+ openCreateForm();
341
+ return true;
342
+ }
343
+ if (keyName === 'r') {
344
+ refresh();
345
+ return true;
346
+ }
347
+ if (keyName === 'x') {
348
+ runSelectedCommand();
349
+ return true;
350
+ }
351
+ if (keyName === 'd') {
352
+ deleteSelectedSession();
353
+ return true;
354
+ }
355
+ if (keyName === 'p') {
356
+ openPmForSelected();
357
+ return true;
358
+ }
359
+ if (keyName === 'escape') {
360
+ if (deleteConfirmId) {
361
+ setDeleteConfirmId(null);
362
+ return true;
363
+ }
364
+ if (!navigate)
365
+ return false;
366
+ goHome();
367
+ return true;
368
+ }
369
+ return false;
370
+ }, {
371
+ allowInInsertMode: true,
372
+ description: 'code-sessions-route-actions',
373
+ deps: [
374
+ openCreateForm,
375
+ closeCreateForm,
376
+ refresh,
377
+ runSelectedCommand,
378
+ deleteSelectedSession,
379
+ openPmForSelected,
380
+ goHome,
381
+ deleteConfirmId,
382
+ showCreateForm,
383
+ submitCreateSession
384
+ ]
385
+ });
386
+ const loading = !state || (!state.loaded && sessions.length === 0);
387
+ const error = state?.error ?? null;
388
+ const authBlocked = error?.toLowerCase().includes('sign-in') ?? false;
389
+ const forge = useTuiStateOptional(forgeStatusReadKey);
390
+ // Facts + hints ride the one gateway-owned status line: the session count
391
+ // is stated HERE (nowhere else) and only when the list actually loaded
392
+ // (signed out means unknown, not zero); run/delete hints appear only once
393
+ // a session is selected. No-op when mounted standalone in tests.
394
+ useContributeScreenStatus('code-sessions.monitor', {
395
+ facts: state?.loaded && !error
396
+ ? [
397
+ {
398
+ slot: 'context',
399
+ value: [
400
+ `${sessions.length} session${sessions.length === 1 ? '' : 's'}`,
401
+ forge?.label
402
+ ]
403
+ .filter(Boolean)
404
+ .join(' · '),
405
+ tone: forge?.dirty ? 'warning' : 'muted'
406
+ }
407
+ ]
408
+ : [],
409
+ hints: showCreateForm
410
+ ? [
411
+ { keys: 'c', label: 'create', priority: 5 },
412
+ { keys: 'esc', label: 'cancel', priority: 4 }
413
+ ]
414
+ : selected
415
+ ? [
416
+ { keys: 'n', label: 'new', priority: 5 },
417
+ { keys: 'r', label: 'refresh', priority: 4 },
418
+ { keys: 'x', label: 'run', priority: 3 },
419
+ { keys: 'd', label: 'delete', priority: 2 },
420
+ { keys: 'p', label: 'pm', priority: 1 }
421
+ ]
422
+ : authBlocked
423
+ ? [{ keys: 'r', label: 'refresh', priority: 3 }]
424
+ : [
425
+ { keys: 'n', label: 'new', priority: 4 },
426
+ { keys: 'r', label: 'refresh', priority: 3 }
427
+ ]
428
+ });
429
+ const filtering = filter.trim().length > 0;
430
+ const filteredSessions = useMemo(() => {
431
+ const q = filter.trim().toLowerCase();
432
+ if (!q)
433
+ return sessions;
434
+ return sessions.filter((session) => formatSessionTitle(session).toLowerCase().includes(q) ||
435
+ session.sessionId.toLowerCase().includes(q) ||
436
+ (session.capability ?? '').toLowerCase().includes(q));
437
+ }, [sessions, filter]);
438
+ const listItems = filteredSessions.map((session) => ({
439
+ id: session.sessionId,
440
+ primary: formatSessionTitle(session),
441
+ secondary: `${session.status} - ${session.capability} - ${formatHost(session)}`
442
+ }));
443
+ const content = showCreateForm && state ? (_jsx(VStack, { padding: 2, style: { width: '100%', height: '100%' }, children: _jsx(CreateSessionForm, { startOptions: state.startOptions, targetId: createTargetId, sourceId: createSourceId, onTargetIdChange: changeCreateTarget, onSourceIdChange: setCreateSourceId, onSubmit: submitCreateSession, onCancel: closeCreateForm, sessionCreate: state.sessionCreate }) })) : loading || error || sessions.length === 0 ? (_jsx(SessionsUnavailable, { error: error, onRefresh: refresh, onCreate: openCreateForm })) : (_jsxs(HStack, { align: "stretch", style: { width: '100%', height: '100%' }, children: [_jsxs(VStack, { style: { width: '34%', minWidth: 30, border: ['right'], borderColor: dsBase.border }, children: [_jsxs(HStack, { justify: "between", paddingLeft: 1, paddingRight: 1, children: [_jsxs(HStack, { gap: 1, children: [_jsx(DSText, { bold: true, children: "Sessions" }), _jsx(DSText, { variant: "muted", children: filtering
444
+ ? `${filteredSessions.length}/${sessions.length}`
445
+ : `${sessions.length}` })] }), _jsxs(HStack, { gap: 1, children: [_jsx(DSButton, { label: "New", size: compact ? 'xs' : 'sm', color: "primary", variant: "ghost", onClick: openCreateForm }), _jsx(DSButton, { label: "Refresh", size: compact ? 'xs' : 'sm', color: "neutral", variant: "ghost", onClick: refresh })] })] }), _jsx("box", { style: { paddingLeft: 1, paddingRight: 1 }, children: _jsx(DSInput, { id: "code-sessions-filter", zone: "code-sessions-sidebar", value: filter, onChange: setFilter, placeholder: "Filter sessions", variant: "search", size: "sm" }) }), listItems.length === 0 ? (_jsx(VStack, { paddingLeft: 1, paddingRight: 1, paddingTop: 1, children: _jsx(DSText, { variant: "muted", children: `No sessions match "${filter.trim()}".` }) })) : (_jsx(List, { id: "code-sessions-list", zone: "code-sessions-sidebar", items: listItems, selectedId: selectedId ?? undefined, onSelect: (item) => setSelectedId(item.id), keyboardEnabled: true, autoFocus: true, showFocusRing: false, showCursor: true, emptyMessage: "No code sessions." }))] }), _jsx(VStack, { grow: true, children: selected ? (_jsx(SessionDetail, { session: selected, commandDraft: commandDraft, onCommandDraftChange: setCommandDraft, onRunCommand: runSelectedCommand, commandRun: state.commandRun, sessionDelete: state.sessionDelete, deleteConfirmArmed: deleteConfirmId === selected.sessionId, onDeleteSession: deleteSelectedSession, onOpenPm: navigate ? openPmForSelected : undefined })) : (_jsx(VStack, { padding: 2, children: _jsx(DSText, { variant: "muted", children: "Select a session to inspect it." }) })) })] }));
446
+ if (embedded) {
447
+ return _jsx(VStack, { style: { width: '100%', height: '100%' }, children: content });
448
+ }
449
+ return (_jsx(PageLayout, { header: _jsx(PageHeader, { title: "Code Sessions", description: "Use this machine and directory by default; choose runtime alternatives when needed." }), children: content }));
450
+ }
451
+ const impl = { component: CodeSessionsApp };
452
+ export default impl;
453
+ //# sourceMappingURL=code-sessions.tui-app.impl.consumer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"code-sessions.tui-app.impl.consumer.js","sourceRoot":"","sources":["../../src/tui/code-sessions.tui-app.impl.consumer.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,22 @@
1
+ import { type CaughtFailure, type RuntimeRef, type VibesRuntime } from '@vibesdotdev/kernel';
2
+ import { type CodeSessionsClient } from '@vibesdotdev/code-sessions/api';
3
+ /**
4
+ * Product copy for a code-sessions failure. Branches on the typed failure
5
+ * (`CapabilityError` code and the runtime's typed kind absence), never on its
6
+ * text: a plain `Error('Not signed in')` is only words. Any other failure's
7
+ * message is frame-safe before it is shown (control characters removed,
8
+ * credentials redacted, length bounded).
9
+ */
10
+ export declare function formatCodeSessionsClientError(failure: CaughtFailure): string;
11
+ /**
12
+ * Create-session error formatter. Create refusals are server-authoritative
13
+ * decisions — quota/entitlement (402/403: build-mode plan gate,
14
+ * sandbox-minutes quota) but also e.g. 404 "Host not found" when no sandbox
15
+ * host target is registered. The route's own message names the reason
16
+ * precisely, so whenever the body carries a readable message it is surfaced
17
+ * (sanitized) instead of being flattened into `code-sessions POST … → <status>`.
18
+ * `runtime` is the surface's handed runtime, which reports an unreadable body.
19
+ */
20
+ export declare function formatCodeSessionsCreateError(failure: CaughtFailure, runtime: RuntimeRef): string;
21
+ export declare function resolveCodeSessionsTuiClient(runtime: VibesRuntime): Promise<CodeSessionsClient>;
22
+ //# sourceMappingURL=code-sessions.tui-client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"code-sessions.tui-client.d.ts","sourceRoot":"","sources":["../../src/tui/code-sessions.tui-client.ts"],"names":[],"mappings":"AACA,OAAO,EAGN,KAAK,aAAa,EAElB,KAAK,UAAU,EACf,KAAK,YAAY,EACjB,MAAM,qBAAqB,CAAC;AAG7B,OAAO,EAAwB,KAAK,kBAAkB,EAAE,MAAM,gCAAgC,CAAC;AAO/F;;;;;;GAMG;AACH,wBAAgB,6BAA6B,CAAC,OAAO,EAAE,aAAa,GAAG,MAAM,CAK5E;AA+CD;;;;;;;;GAQG;AACH,wBAAgB,6BAA6B,CAAC,OAAO,EAAE,aAAa,EAAE,OAAO,EAAE,UAAU,GAAG,MAAM,CAMjG;AAED,wBAAsB,4BAA4B,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,kBAAkB,CAAC,CASrG"}
@@ -0,0 +1,95 @@
1
+ import { getLogger } from '@vibesdotdev/logging';
2
+ import { CapabilityError, isCapabilityError } from '@vibesdotdev/kernel';
3
+ import { redactedExcerpt } from '@vibesdotdev/shared/utils';
4
+ import * as z from 'zod/v4';
5
+ import { CodeSessionsApiError } from '@vibesdotdev/code-sessions/api';
6
+ import { attemptSync } from "../svelte/outcome.js";
7
+ const SIGN_IN_COPY = 'Code sessions require sign-in. Sign in, then refresh this route.';
8
+ const UNAVAILABLE_COPY = "Code sessions aren't available right now. Try again in a moment.";
9
+ const GENERIC_COPY = 'Code sessions could not complete that. Try again.';
10
+ /**
11
+ * Product copy for a code-sessions failure. Branches on the typed failure
12
+ * (`CapabilityError` code and the runtime's typed kind absence), never on its
13
+ * text: a plain `Error('Not signed in')` is only words. Any other failure's
14
+ * message is frame-safe before it is shown (control characters removed,
15
+ * credentials redacted, length bounded).
16
+ */
17
+ export function formatCodeSessionsClientError(failure) {
18
+ if (isCapabilityError(failure) && failure.code === 'AUTH_REQUIRED')
19
+ return SIGN_IN_COPY;
20
+ // Confirmed absence of the `runtime/client` kind itself (the runtime's typed refusal, never its text).
21
+ if (CapabilityError.isAbsenceOf(failure, 'runtime/kind', 'runtime/client'))
22
+ return UNAVAILABLE_COPY;
23
+ return (failure instanceof Error ? sanitizeServerMessage(failure.message) : null) ?? GENERIC_COPY;
24
+ }
25
+ const MAX_SERVER_ERROR_CHARS = 300;
26
+ /**
27
+ * A "verbatim" server message still has to be SAFE to put in a TUI frame:
28
+ * control characters removed (a body carrying ESC sequences would otherwise be
29
+ * written into the terminal cell stream), credential-shaped text redacted
30
+ * through the shared redaction owner, and the length bounded (a proxy's HTML
31
+ * error page is a body too — the status strip is one line, not a pager).
32
+ */
33
+ function sanitizeServerMessage(text) {
34
+ const clean = redactedExcerpt(text, { maxChars: MAX_SERVER_ERROR_CHARS + 1 })
35
+ .replace(/\s{2,}/g, ' ')
36
+ .trim();
37
+ if (clean.length === 0)
38
+ return null;
39
+ if (clean.length <= MAX_SERVER_ERROR_CHARS)
40
+ return clean;
41
+ return `${clean.slice(0, MAX_SERVER_ERROR_CHARS)}…`;
42
+ }
43
+ const NonBlankStringSchema = z.string().refine((value) => value.trim().length > 0);
44
+ /** SvelteKit's `error(status, message)` body (`{ message }`), or a route's nested `{ error: { message } }`. */
45
+ const ServerMessageSchema = z.union([
46
+ z.object({ message: NonBlankStringSchema }).transform((body) => body.message),
47
+ z.object({ error: z.object({ message: NonBlankStringSchema }) }).transform((body) => body.error.message)
48
+ ]);
49
+ /**
50
+ * The platform route's own error message from a failed response body, always
51
+ * sanitized; `null` when the body carries nothing readable, so callers fall
52
+ * back to the generic formatter instead of surfacing raw JSON.
53
+ */
54
+ function extractServerErrorMessage(body, runtime) {
55
+ if (!body)
56
+ return null;
57
+ const parsed = attemptSync(() => JSON.parse(body));
58
+ if (!parsed.ok) {
59
+ // Declared fallback: the body is not JSON (a proxy page). Its sanitized text is
60
+ // still more honest than a generic status message; the parse failure is reported once.
61
+ const logger = getLogger('code-sessions:tui-client', runtime);
62
+ logger.warn('server error body was not JSON; showing it sanitized', { error: parsed.failure });
63
+ return sanitizeServerMessage(body);
64
+ }
65
+ const message = ServerMessageSchema.safeParse(parsed.value);
66
+ return sanitizeServerMessage(message.success ? message.data : body);
67
+ }
68
+ /**
69
+ * Create-session error formatter. Create refusals are server-authoritative
70
+ * decisions — quota/entitlement (402/403: build-mode plan gate,
71
+ * sandbox-minutes quota) but also e.g. 404 "Host not found" when no sandbox
72
+ * host target is registered. The route's own message names the reason
73
+ * precisely, so whenever the body carries a readable message it is surfaced
74
+ * (sanitized) instead of being flattened into `code-sessions POST … → <status>`.
75
+ * `runtime` is the surface's handed runtime, which reports an unreadable body.
76
+ */
77
+ export function formatCodeSessionsCreateError(failure, runtime) {
78
+ if (failure instanceof CodeSessionsApiError && failure.status !== 401) {
79
+ const verbatim = extractServerErrorMessage(failure.body, runtime);
80
+ if (verbatim)
81
+ return verbatim;
82
+ }
83
+ return formatCodeSessionsClientError(failure);
84
+ }
85
+ export async function resolveCodeSessionsTuiClient(runtime) {
86
+ const client = await runtime
87
+ .query('runtime/client')
88
+ .withId('code-sessions')
89
+ .resolve();
90
+ await client.ensureLoaded();
91
+ // The client takes the signed-in `vibes auth login` bearer itself (auth's
92
+ // `resolveCallerBearer`, the device session on a TUI host): nothing to bridge.
93
+ return client;
94
+ }
95
+ //# sourceMappingURL=code-sessions.tui-client.js.map