@vibesdotdev/studio 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 (136) hide show
  1. package/LICENSE +18 -0
  2. package/README.md +46 -2
  3. package/VIBES.md +120 -0
  4. package/dist/cli/plugin.d.ts +11 -0
  5. package/dist/cli/plugin.d.ts.map +1 -0
  6. package/dist/cli/plugin.js +18 -0
  7. package/dist/cli/plugin.js.map +1 -0
  8. package/dist/cli/studio.descriptor.d.ts +9 -0
  9. package/dist/cli/studio.descriptor.d.ts.map +1 -0
  10. package/dist/cli/studio.descriptor.js +39 -0
  11. package/dist/cli/studio.descriptor.js.map +1 -0
  12. package/dist/client.d.ts +12 -0
  13. package/dist/client.d.ts.map +1 -0
  14. package/dist/client.js +27 -0
  15. package/dist/client.js.map +1 -0
  16. package/dist/index.d.ts +8 -0
  17. package/dist/index.d.ts.map +1 -0
  18. package/dist/index.js +6 -0
  19. package/dist/index.js.map +1 -0
  20. package/dist/logger.d.ts +10 -0
  21. package/dist/logger.d.ts.map +1 -0
  22. package/dist/logger.js +41 -0
  23. package/dist/logger.js.map +1 -0
  24. package/dist/logging/studio.logger.descriptor.d.ts +7 -0
  25. package/dist/logging/studio.logger.descriptor.d.ts.map +1 -0
  26. package/dist/logging/studio.logger.descriptor.js +14 -0
  27. package/dist/logging/studio.logger.descriptor.js.map +1 -0
  28. package/dist/logging/studio.output.descriptor.d.ts +4 -0
  29. package/dist/logging/studio.output.descriptor.d.ts.map +1 -0
  30. package/dist/logging/studio.output.descriptor.js +22 -0
  31. package/dist/logging/studio.output.descriptor.js.map +1 -0
  32. package/dist/prompts/index.d.ts +7 -0
  33. package/dist/prompts/index.d.ts.map +1 -0
  34. package/dist/prompts/index.js +7 -0
  35. package/dist/prompts/index.js.map +1 -0
  36. package/dist/prompts/studio-system.prompt.d.ts +49 -0
  37. package/dist/prompts/studio-system.prompt.d.ts.map +1 -0
  38. package/dist/prompts/studio-system.prompt.descriptor.d.ts +345 -0
  39. package/dist/prompts/studio-system.prompt.descriptor.d.ts.map +1 -0
  40. package/dist/prompts/studio-system.prompt.descriptor.js +22 -0
  41. package/dist/prompts/studio-system.prompt.descriptor.js.map +1 -0
  42. package/dist/prompts/studio-system.prompt.js +116 -0
  43. package/dist/prompts/studio-system.prompt.js.map +1 -0
  44. package/dist/schemas/auth.d.ts +43 -0
  45. package/dist/schemas/auth.d.ts.map +1 -0
  46. package/dist/schemas/auth.js +19 -0
  47. package/dist/schemas/auth.js.map +1 -0
  48. package/dist/schemas/continuity.d.ts +51 -0
  49. package/dist/schemas/continuity.d.ts.map +1 -0
  50. package/dist/schemas/continuity.js +35 -0
  51. package/dist/schemas/continuity.js.map +1 -0
  52. package/dist/schemas/history.d.ts +6 -0
  53. package/dist/schemas/history.d.ts.map +1 -0
  54. package/dist/schemas/history.js +6 -0
  55. package/dist/schemas/history.js.map +1 -0
  56. package/dist/schemas/logging.d.ts +63 -0
  57. package/dist/schemas/logging.d.ts.map +1 -0
  58. package/dist/schemas/logging.js +26 -0
  59. package/dist/schemas/logging.js.map +1 -0
  60. package/dist/schemas/theme.d.ts +9 -0
  61. package/dist/schemas/theme.d.ts.map +1 -0
  62. package/dist/schemas/theme.js +2 -0
  63. package/dist/schemas/theme.js.map +1 -0
  64. package/dist/services/schemas/studio-gateway.d.ts +34 -0
  65. package/dist/services/schemas/studio-gateway.d.ts.map +1 -0
  66. package/dist/services/schemas/studio-gateway.js +21 -0
  67. package/dist/services/schemas/studio-gateway.js.map +1 -0
  68. package/dist/studio.consumer.plugin.d.ts +8 -0
  69. package/dist/studio.consumer.plugin.d.ts.map +1 -0
  70. package/dist/studio.consumer.plugin.js +29 -0
  71. package/dist/studio.consumer.plugin.js.map +1 -0
  72. package/dist/studio.core.plugin.d.ts +4 -0
  73. package/dist/studio.core.plugin.d.ts.map +1 -0
  74. package/dist/studio.core.plugin.js +23 -0
  75. package/dist/studio.core.plugin.js.map +1 -0
  76. package/dist/studio.plugin.d.ts +3 -0
  77. package/dist/studio.plugin.d.ts.map +1 -0
  78. package/dist/studio.plugin.js +3 -0
  79. package/dist/studio.plugin.js.map +1 -0
  80. package/dist/theme.d.ts +67 -0
  81. package/dist/theme.d.ts.map +1 -0
  82. package/dist/theme.js +38 -0
  83. package/dist/theme.js.map +1 -0
  84. package/dist/tui/plugin.d.ts +13 -0
  85. package/dist/tui/plugin.d.ts.map +1 -0
  86. package/dist/tui/plugin.js +29 -0
  87. package/dist/tui/plugin.js.map +1 -0
  88. package/dist/tui/studio-apps.descriptor.d.ts +11 -0
  89. package/dist/tui/studio-apps.descriptor.d.ts.map +1 -0
  90. package/dist/tui/studio-apps.descriptor.js +27 -0
  91. package/dist/tui/studio-apps.descriptor.js.map +1 -0
  92. package/dist/tui/studio-apps.impl.consumer.d.ts +12 -0
  93. package/dist/tui/studio-apps.impl.consumer.d.ts.map +1 -0
  94. package/dist/tui/studio-apps.impl.consumer.js +23 -0
  95. package/dist/tui/studio-apps.impl.consumer.js.map +1 -0
  96. package/dist/tui/studio-auth.d.ts +8 -0
  97. package/dist/tui/studio-auth.d.ts.map +1 -0
  98. package/dist/tui/studio-auth.js +56 -0
  99. package/dist/tui/studio-auth.js.map +1 -0
  100. package/dist/tui/studio-gateway-home.d.ts +56 -0
  101. package/dist/tui/studio-gateway-home.d.ts.map +1 -0
  102. package/dist/tui/studio-gateway-home.js +352 -0
  103. package/dist/tui/studio-gateway-home.js.map +1 -0
  104. package/dist/tui/studio-gateway.actions.d.ts +8 -0
  105. package/dist/tui/studio-gateway.actions.d.ts.map +1 -0
  106. package/dist/tui/studio-gateway.actions.js +133 -0
  107. package/dist/tui/studio-gateway.actions.js.map +1 -0
  108. package/dist/tui/studio-gateway.descriptor.d.ts +14 -0
  109. package/dist/tui/studio-gateway.descriptor.d.ts.map +1 -0
  110. package/dist/tui/studio-gateway.descriptor.js +33 -0
  111. package/dist/tui/studio-gateway.descriptor.js.map +1 -0
  112. package/dist/tui/studio-gateway.impl.consumer.d.ts +32 -0
  113. package/dist/tui/studio-gateway.impl.consumer.d.ts.map +1 -0
  114. package/dist/tui/studio-gateway.impl.consumer.js +422 -0
  115. package/dist/tui/studio-gateway.impl.consumer.js.map +1 -0
  116. package/dist/tui/studio-gateway.logic.d.ts +55 -0
  117. package/dist/tui/studio-gateway.logic.d.ts.map +1 -0
  118. package/dist/tui/studio-gateway.logic.js +255 -0
  119. package/dist/tui/studio-gateway.logic.js.map +1 -0
  120. package/dist/tui/studio-home-sessions.d.ts +14 -0
  121. package/dist/tui/studio-home-sessions.d.ts.map +1 -0
  122. package/dist/tui/studio-home-sessions.js +190 -0
  123. package/dist/tui/studio-home-sessions.js.map +1 -0
  124. package/dist/tui/studio-home.config.descriptor.d.ts +29 -0
  125. package/dist/tui/studio-home.config.descriptor.d.ts.map +1 -0
  126. package/dist/tui/studio-home.config.descriptor.js +20 -0
  127. package/dist/tui/studio-home.config.descriptor.js.map +1 -0
  128. package/dist/tui/studio-sign-in.d.ts +19 -0
  129. package/dist/tui/studio-sign-in.d.ts.map +1 -0
  130. package/dist/tui/studio-sign-in.js +71 -0
  131. package/dist/tui/studio-sign-in.js.map +1 -0
  132. package/dist/tui/studio-ui-state.config.descriptor.d.ts +17 -0
  133. package/dist/tui/studio-ui-state.config.descriptor.d.ts.map +1 -0
  134. package/dist/tui/studio-ui-state.config.descriptor.js +35 -0
  135. package/dist/tui/studio-ui-state.config.descriptor.js.map +1 -0
  136. package/package.json +123 -4
@@ -0,0 +1,255 @@
1
+ import { selectNavigationAppsByAudience } from '@vibesdotdev/tui/gateway';
2
+ import { normalizeRoute } from '@vibesdotdev/tui/shell';
3
+ export { normalizeRoute };
4
+ const BUILTIN_TRIGGERS = ['/help', '/?', '/apps', '/find', '/goto', '/history', '/last', '/resume', '/clear', '/home'];
5
+ const STUDIO_AUDIENCE_ICONS = new Map([
6
+ ['primary', '•'],
7
+ ['ops', '◆'],
8
+ ['dev', '◈']
9
+ ]);
10
+ // Single-width glyphs a terminal grid renders predictably: Geometric Shapes
11
+ // (U+25A0-U+25FF) plus a few Mathematical Operators / Misc Technical below U+2600.
12
+ // Letters are deliberately GONE from this set — 'B'/'S' were map artifacts, and a
13
+ // capital letter beside geometric glyphs reads as a rendering bug.
14
+ const STABLE_DESCRIPTOR_SYMBOLS = new Set([
15
+ '•', '◉', '✦', '▣', '◆', '◈', '□', '◇', '▤', '▥', '▦', '▧', '▨', '▩',
16
+ '◌', '◍', '◎', '▸', '⌂', '⌗', '⊙', '⊛', '⊞', '⊟', '⊠', '⊡', '!'
17
+ ]);
18
+ function mapToAppCards(descriptors) {
19
+ return descriptors
20
+ .map((descriptor) => ({
21
+ id: descriptor.id,
22
+ title: descriptor.title,
23
+ description: descriptor.description,
24
+ icon: formatStudioSurfaceIcon(descriptor),
25
+ category: descriptor.category ?? 'Other',
26
+ route: descriptor.route ?? '/',
27
+ audience: descriptor.audience ?? 'unknown',
28
+ hardware: descriptor.hardware ?? [],
29
+ surfaces: descriptor.surfaces ?? [],
30
+ stateIds: descriptor.states ?? [],
31
+ order: descriptor.order ?? 999
32
+ }))
33
+ .sort((a, b) => a.order - b.order);
34
+ }
35
+ export function buildAppCards(appPages) {
36
+ return mapToAppCards(selectNavigationAppsByAudience(appPages, 'primary'));
37
+ }
38
+ export function buildAppCatalog(appPages) {
39
+ return {
40
+ primary: mapToAppCards(selectNavigationAppsByAudience(appPages, 'primary')),
41
+ ops: mapToAppCards(selectNavigationAppsByAudience(appPages, 'ops')),
42
+ dev: mapToAppCards(selectNavigationAppsByAudience(appPages, 'dev'))
43
+ };
44
+ }
45
+ /**
46
+ * The home directory: every navigable app in one list (home groups them by
47
+ * user task, not by this audience taxonomy). De-duplicated because a
48
+ * descriptor without an explicit audience can match more than one fallback
49
+ * category set.
50
+ */
51
+ export function buildHomeAppCards(appPages) {
52
+ const catalog = buildAppCatalog(appPages);
53
+ const seen = new Set();
54
+ const all = [];
55
+ for (const app of [...catalog.primary, ...catalog.ops, ...catalog.dev]) {
56
+ if (seen.has(app.id))
57
+ continue;
58
+ seen.add(app.id);
59
+ all.push(app);
60
+ }
61
+ return all;
62
+ }
63
+ /**
64
+ * THE DESCRIPTOR OWNS ITS ICON. Studio's only jobs here are grid safety
65
+ * (an emoji is double-width and breaks column alignment, so it degrades to a
66
+ * bullet) and a fallback when a surface declares nothing.
67
+ *
68
+ * This used to consult a hard-coded `STUDIO_SURFACE_ICONS` map that listed ~19
69
+ * OTHER packages' surface ids — so studio, an infrastructure package, decided how
70
+ * chat/pm/secrets/knowledge/... presented themselves, and a descriptor's own
71
+ * `icon` was silently ignored. Two costs, both real: adding a surface meant
72
+ * editing studio, and the map had drifted into letters (`B` for AI Benchmarks,
73
+ * `S` for AI Scorecard) sitting beside geometric glyphs, plus heavy collisions
74
+ * (one glyph for three unrelated surfaces). Constitution: infrastructure packages
75
+ * are not feature owners.
76
+ */
77
+ export function formatStudioSurfaceIcon(surface) {
78
+ const own = sanitizeDescriptorIcon(surface.icon);
79
+ if (own !== DESCRIPTOR_ICON_FALLBACK)
80
+ return own;
81
+ // Declared nothing (or declared an emoji we cannot render): fall back by audience.
82
+ const byAudience = surface.audience ? STUDIO_AUDIENCE_ICONS.get(surface.audience) : undefined;
83
+ return byAudience ?? DESCRIPTOR_ICON_FALLBACK;
84
+ }
85
+ const DESCRIPTOR_ICON_FALLBACK = '•';
86
+ function sanitizeDescriptorIcon(icon) {
87
+ const value = icon?.trim();
88
+ if (!value)
89
+ return DESCRIPTOR_ICON_FALLBACK;
90
+ if (STABLE_DESCRIPTOR_SYMBOLS.has(value))
91
+ return value;
92
+ return containsEmojiCodepoint(value) ? DESCRIPTOR_ICON_FALLBACK : value.slice(0, 2);
93
+ }
94
+ function containsEmojiCodepoint(value) {
95
+ for (const character of value) {
96
+ const code = character.codePointAt(0) ?? 0;
97
+ if (code >= 0x1f000 && code <= 0x1faff)
98
+ return true;
99
+ if (code >= 0x2600 && code <= 0x27bf && !STABLE_DESCRIPTOR_SYMBOLS.has(character))
100
+ return true;
101
+ }
102
+ return false;
103
+ }
104
+ export function findCommandMatch(commands, trigger) {
105
+ const normalizedTrigger = normalizeRoute(trigger);
106
+ return commands.find((cmd) => {
107
+ const patterns = [cmd.trigger, ...(cmd.aliases ?? [])]
108
+ .filter((pattern) => pattern !== undefined)
109
+ .map((pattern) => normalizeRoute(pattern));
110
+ return patterns.includes(normalizedTrigger);
111
+ });
112
+ }
113
+ export function findPageMatch(pages, trigger) {
114
+ const normalizedTrigger = normalizeRoute(trigger);
115
+ const ownedRoute = findPageOwningRoute(pages, normalizedTrigger);
116
+ if (ownedRoute)
117
+ return ownedRoute;
118
+ return pages.find((page) => {
119
+ const pagePath = normalizeRoute(page.path);
120
+ const routeAlias = normalizeRoute(pagePath.split('/').filter(Boolean).at(-1) ?? '');
121
+ return pagePath === normalizedTrigger || routeAlias === normalizedTrigger;
122
+ });
123
+ }
124
+ export function findPageOwningRoute(pages, route) {
125
+ const normalizedRoute = normalizeRoute(route);
126
+ const exact = pages.find((page) => normalizeRoute(page.path) === normalizedRoute);
127
+ if (exact)
128
+ return exact;
129
+ return pages
130
+ .filter((page) => {
131
+ return pageOwnsDeclaredRoute(page, normalizedRoute);
132
+ })
133
+ .sort((a, b) => normalizeRoute(b.path).length - normalizeRoute(a.path).length)[0];
134
+ }
135
+ function pageOwnsDeclaredRoute(page, normalizedRoute) {
136
+ for (const route of page.descriptor.ownedRoutes ?? []) {
137
+ const ownedRoute = normalizeRoute(route);
138
+ if (ownedRoute === '/')
139
+ continue;
140
+ if (normalizedRoute === ownedRoute || normalizedRoute.startsWith(`${ownedRoute}/`))
141
+ return true;
142
+ }
143
+ return false;
144
+ }
145
+ export function findPageByQuery(pages, query) {
146
+ const normalizedQuery = query.trim().toLowerCase().replace(/^\//, '');
147
+ if (!normalizedQuery)
148
+ return undefined;
149
+ return pages.find((page) => {
150
+ const path = normalizeRoute(page.path).slice(1).toLowerCase();
151
+ const alias = path.split('/').filter(Boolean).at(-1) ?? '';
152
+ return (path === normalizedQuery ||
153
+ alias === normalizedQuery ||
154
+ page.id.toLowerCase() === normalizedQuery ||
155
+ page.title.toLowerCase() === normalizedQuery);
156
+ });
157
+ }
158
+ export function getCommandTriggers(commands, pages) {
159
+ const triggers = new Set(BUILTIN_TRIGGERS);
160
+ for (const command of commands) {
161
+ if (command.trigger)
162
+ triggers.add(normalizeRoute(command.trigger));
163
+ for (const alias of command.aliases ?? [])
164
+ triggers.add(normalizeRoute(alias));
165
+ }
166
+ for (const page of pages) {
167
+ triggers.add(normalizeRoute(page.path));
168
+ const routeAlias = page.path.split('/').filter(Boolean).at(-1);
169
+ if (routeAlias)
170
+ triggers.add(normalizeRoute(routeAlias));
171
+ }
172
+ return Array.from(triggers).sort();
173
+ }
174
+ export function suggestCommandTriggers(commands, pages, trigger, limit = 5) {
175
+ const needle = normalizeRoute(trigger).slice(1).toLowerCase();
176
+ if (!needle)
177
+ return getCommandTriggers(commands, pages).slice(0, limit);
178
+ return getCommandTriggers(commands, pages)
179
+ .map((candidate) => {
180
+ const haystack = candidate.slice(1).toLowerCase();
181
+ let score = 0;
182
+ if (haystack === needle)
183
+ score += 100;
184
+ if (haystack.startsWith(needle))
185
+ score += 50;
186
+ if (haystack.includes(needle))
187
+ score += 25;
188
+ for (const char of needle) {
189
+ if (haystack.includes(char))
190
+ score += 1;
191
+ }
192
+ return { candidate, score };
193
+ })
194
+ .filter((item) => item.score > 0)
195
+ .sort((a, b) => b.score - a.score || a.candidate.localeCompare(b.candidate))
196
+ .slice(0, limit)
197
+ .map((item) => item.candidate);
198
+ }
199
+ export function searchGatewayItems(commands, pages, query, limit = 8) {
200
+ const needle = query.trim().toLowerCase();
201
+ if (!needle)
202
+ return [];
203
+ const results = [];
204
+ for (const trigger of getCommandTriggers(commands, pages)) {
205
+ const value = trigger.toLowerCase();
206
+ if (value.includes(needle)) {
207
+ results.push({ label: `${trigger} command`, score: value.startsWith(`/${needle}`) ? 2 : 1 });
208
+ }
209
+ }
210
+ for (const page of pages) {
211
+ const haystack = `${page.title} ${page.id} ${page.path}`.toLowerCase();
212
+ if (haystack.includes(needle)) {
213
+ results.push({ label: `${normalizeRoute(page.path)} ${page.title}`, score: haystack.startsWith(needle) ? 2 : 1 });
214
+ }
215
+ }
216
+ return results
217
+ .sort((a, b) => b.score - a.score || a.label.localeCompare(b.label))
218
+ .slice(0, limit)
219
+ .map((result) => result.label);
220
+ }
221
+ export function buildHelpMessage(commands, pages) {
222
+ const triggers = getCommandTriggers(commands, pages).slice(0, 12);
223
+ const suffix = triggers.length > 0 ? ` Try: ${triggers.join(', ')}` : '';
224
+ return `Type text to chat. Use /apps, /find <query>, /goto <page>, /history, /last, Ctrl+\` logs.${suffix}`;
225
+ }
226
+ export function buildAppsMessage(pages) {
227
+ const apps = pages
228
+ .filter((page) => page.id !== 'studio.gateway')
229
+ .slice(0, 18)
230
+ .map((page) => `${normalizeRoute(page.path)} ${page.title}`);
231
+ return apps.length > 0 ? `Apps: ${apps.join(' | ')}` : 'No apps are available yet.';
232
+ }
233
+ export function applyPrefixResult(result, handlers) {
234
+ switch (result.type) {
235
+ case 'navigate':
236
+ handlers.navigateTo(result.route, result.state);
237
+ return;
238
+ case 'insert':
239
+ handlers.setInput(result.text);
240
+ return;
241
+ case 'clear':
242
+ handlers.setInput('');
243
+ return;
244
+ case 'send':
245
+ handlers.sendMessage(result.text);
246
+ return;
247
+ case 'toast':
248
+ handlers.setMessage(result.message);
249
+ return;
250
+ case 'augment':
251
+ case 'noop':
252
+ return;
253
+ }
254
+ }
255
+ //# sourceMappingURL=studio-gateway.logic.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"studio-gateway.logic.js","sourceRoot":"","sources":["../../src/tui/studio-gateway.logic.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ import { type VibesRuntime } from '@vibesdotdev/kernel';
2
+ import { type HomeSessionRow, type HomeSessionsResult, type HomeSessionsError, type HomeSessionLaunchTarget } from '../schemas/continuity.ts';
3
+ export type { HomeSessionRow, HomeSessionsResult, HomeSessionLaunchTarget } from '../schemas/continuity.ts';
4
+ /**
5
+ * Active work opens where the work happens. A typed `chat-room` link resumes
6
+ * the existing conversation; only unlinked work creates a fresh Code room.
7
+ * Transitional/error states stay in the lifecycle monitor.
8
+ */
9
+ export declare function homeSessionLaunchTarget(session: HomeSessionRow): HomeSessionLaunchTarget;
10
+ /** Relative time in user words; falls back to nothing when unparseable. */
11
+ export declare function formatRelativeTime(iso: string, now?: number): string;
12
+ export declare function isHomeSessionsError(result: HomeSessionsResult | 'loading'): result is HomeSessionsError;
13
+ export declare function loadHomeSessions(runtime: VibesRuntime, timeoutMs?: number): Promise<HomeSessionsResult>;
14
+ //# sourceMappingURL=studio-home-sessions.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"studio-home-sessions.d.ts","sourceRoot":"","sources":["../../src/tui/studio-home-sessions.ts"],"names":[],"mappings":"AAEA,OAAO,EAAmE,KAAK,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAMzH,OAAO,EAGN,KAAK,cAAc,EACnB,KAAK,kBAAkB,EACvB,KAAK,iBAAiB,EACtB,KAAK,uBAAuB,EAC5B,MAAM,0BAA0B,CAAC;AAElC,YAAY,EAAE,cAAc,EAAE,kBAAkB,EAAE,uBAAuB,EAAE,MAAM,0BAA0B,CAAC;AAE5G;;;;GAIG;AACH,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,cAAc,GAAG,uBAAuB,CA2BxF;AA8CD,2EAA2E;AAC3E,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,SAAa,GAAG,MAAM,CAWxE;AAED,wBAAgB,mBAAmB,CAClC,MAAM,EAAE,kBAAkB,GAAG,SAAS,GACpC,MAAM,IAAI,iBAAiB,CAE7B;AAED,wBAAsB,gBAAgB,CACrC,OAAO,EAAE,YAAY,EACrB,SAAS,CAAC,EAAE,MAAM,GAChB,OAAO,CAAC,kBAAkB,CAAC,CAuF7B"}
@@ -0,0 +1,190 @@
1
+ /** Home continuity distinguishes signed-out, failed, unavailable and timed-out owners. */
2
+ import { getLogger } from '@vibesdotdev/logging';
3
+ import { CapabilityError, CaughtFailureSchema, isCapabilityError, settle } from '@vibesdotdev/kernel';
4
+ import { studioHomeSettings } from "./studio-home.config.descriptor.js";
5
+ import { getVibesClient } from '@vibesdotdev/kernel/client';
6
+ import { getVibesChatClient } from '@vibesdotdev/chat/client';
7
+ import { ChatContinuityMetadataSchema, HomeSessionsOptionsSchema } from "../schemas/continuity.js";
8
+ /**
9
+ * Active work opens where the work happens. A typed `chat-room` link resumes
10
+ * the existing conversation; only unlinked work creates a fresh Code room.
11
+ * Transitional/error states stay in the lifecycle monitor.
12
+ */
13
+ export function homeSessionLaunchTarget(session) {
14
+ if (session.status !== 'active' || (!session.chatRoomId && session.roomAbsent !== true)) {
15
+ return {
16
+ path: '/code-sessions',
17
+ state: { selectSessionId: session.sessionId }
18
+ };
19
+ }
20
+ const workState = {
21
+ initialTitle: session.title,
22
+ codeSessionId: session.sessionId,
23
+ codeSessionHostKind: session.hostKind,
24
+ workspaceRoot: session.workspacePath
25
+ };
26
+ if (session.chatRoomId) {
27
+ return {
28
+ path: '/chat',
29
+ state: { ...workState, initialRoomId: session.chatRoomId }
30
+ };
31
+ }
32
+ return {
33
+ path: '/chat',
34
+ state: {
35
+ ...workState,
36
+ newRoom: true,
37
+ initialModeId: 'build'
38
+ }
39
+ };
40
+ }
41
+ function sessionTitle(session) {
42
+ return session.repositoryName ?? (session.ephemeral ? 'Ephemeral workspace' : 'Code session');
43
+ }
44
+ function sessionHost(session) {
45
+ return session.hostTarget.kind === 'host' ? session.hostTarget.hostId : session.hostTarget.kind;
46
+ }
47
+ function statusRank(status) {
48
+ if (status === 'active')
49
+ return 0;
50
+ if (status === 'initializing')
51
+ return 1;
52
+ return 2;
53
+ }
54
+ function linkedChatRoomId(session) {
55
+ for (let index = (session.links?.length ?? 0) - 1; index >= 0; index -= 1) {
56
+ const link = session.links?.[index];
57
+ if (link?.kind !== 'chat-room' || link.role !== 'belongs-to')
58
+ continue;
59
+ const id = link.id.trim();
60
+ if (id)
61
+ return id;
62
+ }
63
+ return undefined;
64
+ }
65
+ /** Compose cold/legacy session continuity from Chat-owned room metadata. */
66
+ async function chatRoomLinksBySession(runtime) {
67
+ const client = await getVibesChatClient(runtime);
68
+ await client.load();
69
+ const newest = new Map();
70
+ for (const room of await client.rooms.list()) {
71
+ const metadata = ChatContinuityMetadataSchema.parse(room.data.metadata);
72
+ const sessionId = metadata?.codeSessionId;
73
+ if (!sessionId)
74
+ continue;
75
+ const activity = Date.parse(room.data.updatedAt ?? room.data.lastMessageAt ?? room.data.createdAt) || 0;
76
+ const previous = newest.get(sessionId);
77
+ if (!previous || activity >= previous.activity) {
78
+ newest.set(sessionId, { roomId: room.id, activity });
79
+ }
80
+ }
81
+ return new Map([...newest].map(([sessionId, value]) => [sessionId, value.roomId]));
82
+ }
83
+ /** Relative time in user words; falls back to nothing when unparseable. */
84
+ export function formatRelativeTime(iso, now = Date.now()) {
85
+ const then = new Date(iso).getTime();
86
+ if (!Number.isFinite(then))
87
+ return '';
88
+ const deltaMs = Math.max(0, now - then);
89
+ const minutes = Math.floor(deltaMs / 60_000);
90
+ if (minutes < 1)
91
+ return 'just now';
92
+ if (minutes < 60)
93
+ return `${minutes}m ago`;
94
+ const hours = Math.floor(minutes / 60);
95
+ if (hours < 24)
96
+ return `${hours}h ago`;
97
+ const days = Math.floor(hours / 24);
98
+ return `${days}d ago`;
99
+ }
100
+ export function isHomeSessionsError(result) {
101
+ return result !== null && result !== 'loading' && !Array.isArray(result);
102
+ }
103
+ export async function loadHomeSessions(runtime, timeoutMs) {
104
+ const logger = getLogger('studio.home-sessions', runtime);
105
+ const startedAt = performance.now();
106
+ try {
107
+ const defaults = HomeSessionsOptionsSchema.parse({});
108
+ const configured = await runtime.lifecycle.wait(async () => {
109
+ const config = await getVibesClient('config', runtime);
110
+ return config.read(studioHomeSettings);
111
+ }, { timeoutMs: timeoutMs ?? defaults.timeoutMs, reason: 'studio home settings' });
112
+ const options = HomeSessionsOptionsSchema.parse({
113
+ ...configured,
114
+ timeoutMs: timeoutMs ?? configured.timeoutMs
115
+ });
116
+ const remainingMs = Math.floor(options.timeoutMs - (performance.now() - startedAt));
117
+ if (remainingMs <= 0) {
118
+ throw new CapabilityError('Home continuity deadline expired.', 'TIMEOUT', { reason: 'wait-timeout' });
119
+ }
120
+ const sessions = await runtime.lifecycle.wait(async () => {
121
+ const client = await getVibesClient('code-sessions', runtime);
122
+ await client.ensureLoaded();
123
+ if (!(await client.isAuthenticated()))
124
+ return null;
125
+ return client.list();
126
+ }, { timeoutMs: remainingMs, reason: 'studio home sessions' });
127
+ if (sessions === null)
128
+ return null;
129
+ let fallbackChatRooms = new Map();
130
+ let continuityError;
131
+ if (sessions.some((session) => session.status === 'active' && !linkedChatRoomId(session))) {
132
+ const enrichment = await settle(async () => {
133
+ const remainingMs = Math.floor(options.timeoutMs - (performance.now() - startedAt));
134
+ if (remainingMs <= 0) {
135
+ throw new CapabilityError('Home continuity deadline expired.', 'TIMEOUT', {
136
+ reason: 'wait-timeout'
137
+ });
138
+ }
139
+ return runtime.lifecycle.wait(() => chatRoomLinksBySession(runtime), { timeoutMs: remainingMs, reason: 'studio home chat enrichment' });
140
+ });
141
+ if (enrichment.ok) {
142
+ fallbackChatRooms = enrichment.value;
143
+ }
144
+ else {
145
+ logger.warn('Chat continuity could not be confirmed', { error: enrichment.cause });
146
+ continuityError = 'Conversation unavailable · open session recovery';
147
+ }
148
+ }
149
+ return sessions
150
+ .filter((session) => session.status !== 'ended')
151
+ .sort((a, b) => {
152
+ const rank = statusRank(a.status) - statusRank(b.status);
153
+ return rank || Date.parse(b.lastActivityAt) - Date.parse(a.lastActivityAt);
154
+ })
155
+ .slice(0, options.limit)
156
+ .map((session) => {
157
+ const chatRoomId = linkedChatRoomId(session) ?? fallbackChatRooms.get(session.sessionId);
158
+ const row = {
159
+ sessionId: session.sessionId,
160
+ title: sessionTitle(session),
161
+ status: session.status,
162
+ host: sessionHost(session),
163
+ hostKind: session.hostTarget.kind,
164
+ workspacePath: session.workspacePath,
165
+ lastActivityAt: session.lastActivityAt
166
+ };
167
+ if (chatRoomId)
168
+ row.chatRoomId = chatRoomId;
169
+ else if (session.status === 'active') {
170
+ if (continuityError)
171
+ row.continuityError = continuityError;
172
+ else
173
+ row.roomAbsent = true;
174
+ }
175
+ return row;
176
+ });
177
+ }
178
+ catch (error) {
179
+ const cause = CaughtFailureSchema.parse(error);
180
+ getLogger('studio.home-sessions', runtime).warn('Home sessions could not be loaded', { error: cause });
181
+ if (isCapabilityError(cause) && cause.reason === 'wait-timeout') {
182
+ return { status: 'timed-out', error: 'Recent work timed out. Try again.', cause };
183
+ }
184
+ if (isCapabilityError(cause) && (cause.code === 'UNAVAILABLE' || cause.code === 'NOT_FOUND')) {
185
+ return { status: 'unavailable', error: 'Recent work is unavailable. Try again.', cause };
186
+ }
187
+ return { status: 'failed', error: 'Recent work could not be loaded. Try again.', cause };
188
+ }
189
+ }
190
+ //# sourceMappingURL=studio-home-sessions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"studio-home-sessions.js","sourceRoot":"","sources":["../../src/tui/studio-home-sessions.ts"],"names":[],"mappings":"AAAA,0FAA0F;AAC1F,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACjD,OAAO,EAAE,eAAe,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,MAAM,EAAqB,MAAM,qBAAqB,CAAC;AAEzH,OAAO,EAAE,kBAAkB,EAAE,MAAM,oCAAoC,CAAC;AACxE,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAE5D,OAAO,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAC9D,OAAO,EACN,4BAA4B,EAC5B,yBAAyB,EAKzB,MAAM,0BAA0B,CAAC;AAIlC;;;;GAIG;AACH,MAAM,UAAU,uBAAuB,CAAC,OAAuB;IAC9D,IAAI,OAAO,CAAC,MAAM,KAAK,QAAQ,IAAI,CAAC,CAAC,OAAO,CAAC,UAAU,IAAI,OAAO,CAAC,UAAU,KAAK,IAAI,CAAC,EAAE,CAAC;QACzF,OAAO;YACN,IAAI,EAAE,gBAAgB;YACtB,KAAK,EAAE,EAAE,eAAe,EAAE,OAAO,CAAC,SAAS,EAAE;SAC7C,CAAC;IACH,CAAC;IACD,MAAM,SAAS,GAAG;QACjB,YAAY,EAAE,OAAO,CAAC,KAAK;QAC3B,aAAa,EAAE,OAAO,CAAC,SAAS;QAChC,mBAAmB,EAAE,OAAO,CAAC,QAAQ;QACrC,aAAa,EAAE,OAAO,CAAC,aAAa;KACpC,CAAC;IACF,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC;QACxB,OAAO;YACN,IAAI,EAAE,OAAO;YACb,KAAK,EAAE,EAAE,GAAG,SAAS,EAAE,aAAa,EAAE,OAAO,CAAC,UAAU,EAAE;SAC1D,CAAC;IACH,CAAC;IACD,OAAO;QACN,IAAI,EAAE,OAAO;QACb,KAAK,EAAE;YACN,GAAG,SAAS;YACZ,OAAO,EAAE,IAAI;YACb,aAAa,EAAE,OAAO;SACtB;KACD,CAAC;AACH,CAAC;AAGD,SAAS,YAAY,CAAC,OAA8B;IACnD,OAAO,OAAO,CAAC,cAAc,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC;AAC/F,CAAC;AAED,SAAS,WAAW,CAAC,OAA8B;IAClD,OAAO,OAAO,CAAC,UAAU,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC;AACjG,CAAC;AAED,SAAS,UAAU,CAAC,MAAuC;IAC1D,IAAI,MAAM,KAAK,QAAQ;QAAE,OAAO,CAAC,CAAC;IAClC,IAAI,MAAM,KAAK,cAAc;QAAE,OAAO,CAAC,CAAC;IACxC,OAAO,CAAC,CAAC;AACV,CAAC;AAED,SAAS,gBAAgB,CAAC,OAA8B;IACvD,KAAK,IAAI,KAAK,GAAG,CAAC,OAAO,CAAC,KAAK,EAAE,MAAM,IAAI,CAAC,CAAC,GAAG,CAAC,EAAE,KAAK,IAAI,CAAC,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC;QAC3E,MAAM,IAAI,GAAG,OAAO,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,CAAC;QACpC,IAAI,IAAI,EAAE,IAAI,KAAK,WAAW,IAAI,IAAI,CAAC,IAAI,KAAK,YAAY;YAAE,SAAS;QACvE,MAAM,EAAE,GAAG,IAAI,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC;QAC1B,IAAI,EAAE;YAAE,OAAO,EAAE,CAAC;IACnB,CAAC;IACD,OAAO,SAAS,CAAC;AAClB,CAAC;AAED,4EAA4E;AAC5E,KAAK,UAAU,sBAAsB,CAAC,OAAqB;IAC1D,MAAM,MAAM,GAAG,MAAM,kBAAkB,CAAC,OAAO,CAAC,CAAC;IACjD,MAAM,MAAM,CAAC,IAAI,EAAE,CAAC;IACpB,MAAM,MAAM,GAAG,IAAI,GAAG,EAAgD,CAAC;IACvE,KAAK,MAAM,IAAI,IAAI,MAAM,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE,EAAE,CAAC;QAC9C,MAAM,QAAQ,GAAG,4BAA4B,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACxE,MAAM,SAAS,GAAG,QAAQ,EAAE,aAAa,CAAC;QAC1C,IAAI,CAAC,SAAS;YAAE,SAAS;QACzB,MAAM,QAAQ,GACb,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,IAAI,CAAC,aAAa,IAAI,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;QACxF,MAAM,QAAQ,GAAG,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QACvC,IAAI,CAAC,QAAQ,IAAI,QAAQ,IAAI,QAAQ,CAAC,QAAQ,EAAE,CAAC;YAChD,MAAM,CAAC,GAAG,CAAC,SAAS,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,EAAE,QAAQ,EAAE,CAAC,CAAC;QACtD,CAAC;IACF,CAAC;IACD,OAAO,IAAI,GAAG,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC,SAAS,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;AACpF,CAAC;AAED,2EAA2E;AAC3E,MAAM,UAAU,kBAAkB,CAAC,GAAW,EAAE,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE;IAC/D,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,CAAC;IACrC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC;QAAE,OAAO,EAAE,CAAC;IACtC,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,GAAG,IAAI,CAAC,CAAC;IACxC,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,MAAM,CAAC,CAAC;IAC7C,IAAI,OAAO,GAAG,CAAC;QAAE,OAAO,UAAU,CAAC;IACnC,IAAI,OAAO,GAAG,EAAE;QAAE,OAAO,GAAG,OAAO,OAAO,CAAC;IAC3C,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,EAAE,CAAC,CAAC;IACvC,IAAI,KAAK,GAAG,EAAE;QAAE,OAAO,GAAG,KAAK,OAAO,CAAC;IACvC,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,EAAE,CAAC,CAAC;IACpC,OAAO,GAAG,IAAI,OAAO,CAAC;AACvB,CAAC;AAED,MAAM,UAAU,mBAAmB,CAClC,MAAsC;IAEtC,OAAO,MAAM,KAAK,IAAI,IAAI,MAAM,KAAK,SAAS,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;AAC1E,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACrC,OAAqB,EACrB,SAAkB;IAElB,MAAM,MAAM,GAAG,SAAS,CAAC,sBAAsB,EAAE,OAAO,CAAC,CAAC;IAC1D,MAAM,SAAS,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC;IACpC,IAAI,CAAC;QACJ,MAAM,QAAQ,GAAG,yBAAyB,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QACrD,MAAM,UAAU,GAAG,MAAM,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE;YAC1D,MAAM,MAAM,GAAG,MAAM,cAAc,CAAe,QAAQ,EAAE,OAAO,CAAC,CAAC;YACrE,OAAO,MAAM,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;QACxC,CAAC,EAAE,EAAE,SAAS,EAAE,SAAS,IAAI,QAAQ,CAAC,SAAS,EAAE,MAAM,EAAE,sBAAsB,EAAE,CAAC,CAAC;QACnF,MAAM,OAAO,GAAG,yBAAyB,CAAC,KAAK,CAAC;YAC/C,GAAG,UAAU;YACb,SAAS,EAAE,SAAS,IAAI,UAAU,CAAC,SAAS;SAC5C,CAAC,CAAC;QACH,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,SAAS,GAAG,CAAC,WAAW,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC,CAAC,CAAC;QACpF,IAAI,WAAW,IAAI,CAAC,EAAE,CAAC;YACtB,MAAM,IAAI,eAAe,CAAC,mCAAmC,EAAE,SAAS,EAAE,EAAE,MAAM,EAAE,cAAc,EAAE,CAAC,CAAC;QACvG,CAAC;QACD,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,SAAS,CAAC,IAAI,CAC5C,KAAK,IAAI,EAAE;YACV,MAAM,MAAM,GAAG,MAAM,cAAc,CAAqB,eAAe,EAAE,OAAO,CAAC,CAAC;YAClF,MAAM,MAAM,CAAC,YAAY,EAAE,CAAC;YAC5B,IAAI,CAAC,CAAC,MAAM,MAAM,CAAC,eAAe,EAAE,CAAC;gBAAE,OAAO,IAAI,CAAC;YACnD,OAAO,MAAM,CAAC,IAAI,EAAE,CAAC;QACtB,CAAC,EACD,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,EAAE,sBAAsB,EAAE,CAC1D,CAAC;QACF,IAAI,QAAQ,KAAK,IAAI;YAAE,OAAO,IAAI,CAAC;QAEnC,IAAI,iBAAiB,GAAG,IAAI,GAAG,EAAkB,CAAC;QAClD,IAAI,eAAmC,CAAC;QACxC,IAAI,QAAQ,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,MAAM,KAAK,QAAQ,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC;YAC3F,MAAM,UAAU,GAAG,MAAM,MAAM,CAAC,KAAK,IAAI,EAAE;gBAC1C,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,SAAS,GAAG,CAAC,WAAW,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC,CAAC,CAAC;gBACpF,IAAI,WAAW,IAAI,CAAC,EAAE,CAAC;oBACtB,MAAM,IAAI,eAAe,CAAC,mCAAmC,EAAE,SAAS,EAAE;wBACzE,MAAM,EAAE,cAAc;qBACtB,CAAC,CAAC;gBACJ,CAAC;gBACD,OAAO,OAAO,CAAC,SAAS,CAAC,IAAI,CAC5B,GAAG,EAAE,CAAC,sBAAsB,CAAC,OAAO,CAAC,EACrC,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,EAAE,6BAA6B,EAAE,CACjE,CAAC;YACH,CAAC,CAAC,CAAC;YACH,IAAI,UAAU,CAAC,EAAE,EAAE,CAAC;gBACnB,iBAAiB,GAAG,UAAU,CAAC,KAAK,CAAC;YACtC,CAAC;iBAAM,CAAC;gBACP,MAAM,CAAC,IAAI,CAAC,wCAAwC,EAAE,EAAE,KAAK,EAAE,UAAU,CAAC,KAAK,EAAE,CAAC,CAAC;gBACnF,eAAe,GAAG,kDAAkD,CAAC;YACtE,CAAC;QACF,CAAC;QAED,OAAO,QAAQ;aACb,MAAM,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,MAAM,KAAK,OAAO,CAAC;aAC/C,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;YACd,MAAM,IAAI,GAAG,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;YACzD,OAAO,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,cAAc,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC;QAC5E,CAAC,CAAC;aACD,KAAK,CAAC,CAAC,EAAE,OAAO,CAAC,KAAK,CAAC;aACvB,GAAG,CAAC,CAAC,OAAO,EAAkB,EAAE;YAChC,MAAM,UAAU,GAAG,gBAAgB,CAAC,OAAO,CAAC,IAAI,iBAAiB,CAAC,GAAG,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;YACzF,MAAM,GAAG,GAAmB;gBAC3B,SAAS,EAAE,OAAO,CAAC,SAAS;gBAC5B,KAAK,EAAE,YAAY,CAAC,OAAO,CAAC;gBAC5B,MAAM,EAAE,OAAO,CAAC,MAAM;gBACtB,IAAI,EAAE,WAAW,CAAC,OAAO,CAAC;gBAC1B,QAAQ,EAAE,OAAO,CAAC,UAAU,CAAC,IAAI;gBACjC,aAAa,EAAE,OAAO,CAAC,aAAa;gBACpC,cAAc,EAAE,OAAO,CAAC,cAAc;aACtC,CAAC;YACF,IAAI,UAAU;gBAAE,GAAG,CAAC,UAAU,GAAG,UAAU,CAAC;iBACvC,IAAI,OAAO,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;gBACtC,IAAI,eAAe;oBAAE,GAAG,CAAC,eAAe,GAAG,eAAe,CAAC;;oBACtD,GAAG,CAAC,UAAU,GAAG,IAAI,CAAC;YAC5B,CAAC;YACD,OAAO,GAAG,CAAC;QACZ,CAAC,CAAC,CAAC;IACL,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QAChB,MAAM,KAAK,GAAG,mBAAmB,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QAC/C,SAAS,CAAC,sBAAsB,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC,mCAAmC,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC;QACvG,IAAI,iBAAiB,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,MAAM,KAAK,cAAc,EAAE,CAAC;YACjE,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,KAAK,EAAE,mCAAmC,EAAE,KAAK,EAAE,CAAC;QACnF,CAAC;QACD,IAAI,iBAAiB,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,KAAK,aAAa,IAAI,KAAK,CAAC,IAAI,KAAK,WAAW,CAAC,EAAE,CAAC;YAC9F,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,KAAK,EAAE,wCAAwC,EAAE,KAAK,EAAE,CAAC;QAC1F,CAAC;QACD,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,6CAA6C,EAAE,KAAK,EAAE,CAAC;IAC1F,CAAC;AACF,CAAC"}
@@ -0,0 +1,29 @@
1
+ export declare const studioHomeSettings: {
2
+ id: string;
3
+ schema: import("zod").ZodObject<{
4
+ limit: import("zod").ZodDefault<import("zod").ZodNumber>;
5
+ timeoutMs: import("zod").ZodDefault<import("zod").ZodNumber>;
6
+ }, import("zod/v4/core").$strip>;
7
+ };
8
+ declare const descriptor: {
9
+ name: string;
10
+ description: string;
11
+ namespace: string;
12
+ tier: "user";
13
+ category: string;
14
+ fields: {};
15
+ allowedAdapters: string[];
16
+ defaultAdapter: string;
17
+ scope: "auto";
18
+ customTables: false;
19
+ version: number;
20
+ internal: false;
21
+ id: string;
22
+ schema: import("zod").ZodObject<{
23
+ limit: import("zod").ZodDefault<import("zod").ZodNumber>;
24
+ timeoutMs: import("zod").ZodDefault<import("zod").ZodNumber>;
25
+ }, import("zod/v4/core").$strip>;
26
+ kind: "config/manifest";
27
+ };
28
+ export default descriptor;
29
+ //# sourceMappingURL=studio-home.config.descriptor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"studio-home.config.descriptor.d.ts","sourceRoot":"","sources":["../../src/tui/studio-home.config.descriptor.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,kBAAkB;;;;;;CAA2D,CAAC;AAE3F,QAAA,MAAM,UAAU;;;;;;;;;;;;;;;;;;;CAeoB,CAAC;AAErC,eAAe,UAAU,CAAC"}
@@ -0,0 +1,20 @@
1
+ import { HomeSessionsOptionsSchema } from "../schemas/continuity.js";
2
+ export const studioHomeSettings = { id: 'studio.home', schema: HomeSessionsOptionsSchema };
3
+ const descriptor = {
4
+ kind: 'config/manifest',
5
+ ...studioHomeSettings,
6
+ name: 'Studio Home',
7
+ description: 'Recent work limits and the shared owner deadline.',
8
+ namespace: 'studio',
9
+ tier: 'user',
10
+ category: 'runtime',
11
+ fields: {},
12
+ allowedAdapters: ['storage.localdb', 'storage.json'],
13
+ defaultAdapter: 'storage.localdb',
14
+ scope: 'auto',
15
+ customTables: false,
16
+ version: 1,
17
+ internal: false
18
+ };
19
+ export default descriptor;
20
+ //# sourceMappingURL=studio-home.config.descriptor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"studio-home.config.descriptor.js","sourceRoot":"","sources":["../../src/tui/studio-home.config.descriptor.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,yBAAyB,EAAE,MAAM,0BAA0B,CAAC;AAErE,MAAM,CAAC,MAAM,kBAAkB,GAAG,EAAE,EAAE,EAAE,aAAa,EAAE,MAAM,EAAE,yBAAyB,EAAE,CAAC;AAE3F,MAAM,UAAU,GAAG;IAClB,IAAI,EAAE,iBAAiB;IACvB,GAAG,kBAAkB;IACrB,IAAI,EAAE,aAAa;IACnB,WAAW,EAAE,mDAAmD;IAChE,SAAS,EAAE,QAAQ;IACnB,IAAI,EAAE,MAAM;IACZ,QAAQ,EAAE,SAAS;IACnB,MAAM,EAAE,EAAE;IACV,eAAe,EAAE,CAAC,iBAAiB,EAAE,cAAc,CAAC;IACpD,cAAc,EAAE,iBAAiB;IACjC,KAAK,EAAE,MAAM;IACb,YAAY,EAAE,KAAK;IACnB,OAAO,EAAE,CAAC;IACV,QAAQ,EAAE,KAAK;CACoB,CAAC;AAErC,eAAe,UAAU,CAAC"}
@@ -0,0 +1,19 @@
1
+ /**
2
+ * Sign-in overlay — gateway-owned, like the palette and orientation tour.
3
+ *
4
+ * Any route triggers it through the action registry (`executeAction('signIn')`)
5
+ * instead of telling the user to leave the terminal and run `vibes auth login`.
6
+ * The overlay drives the same device-authorization flow as the CLI: it shows
7
+ * the device code, opens the browser, and waits for approval — every progress
8
+ * line comes verbatim from the auth service (no reconstructed narration).
9
+ */
10
+ import { type ReactNode } from 'react';
11
+ import type { VibesRuntime } from '@vibesdotdev/kernel';
12
+ import { type StudioIdentity } from './studio-auth.ts';
13
+ export declare function SignInOverlay({ runtime, open, onClose, onSignedIn }: {
14
+ runtime: VibesRuntime;
15
+ open: boolean;
16
+ onClose: () => void;
17
+ onSignedIn: (identity: StudioIdentity) => void;
18
+ }): ReactNode;
19
+ //# sourceMappingURL=studio-sign-in.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"studio-sign-in.d.ts","sourceRoot":"","sources":["../../src/tui/studio-sign-in.tsx"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAiC,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAMtE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,EAGN,KAAK,cAAc,EACnB,MAAM,kBAAkB,CAAC;AAwB1B,wBAAgB,aAAa,CAAC,EAC7B,OAAO,EACP,IAAI,EACJ,OAAO,EACP,UAAU,EACV,EAAE;IACF,OAAO,EAAE,YAAY,CAAC;IACtB,IAAI,EAAE,OAAO,CAAC;IACd,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,UAAU,EAAE,CAAC,QAAQ,EAAE,cAAc,KAAK,IAAI,CAAC;CAC/C,GAAG,SAAS,CAqIZ"}