@workbench-kit/adapters 0.0.2-prototype.0.2.5 → 0.0.2-prototype.0.2.6

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.
@@ -1,68 +1,68 @@
1
- import type { RuntimeStatus } from '@workbench-kit/runtime';
2
-
3
- export type IntegratedShellActivityId = 'explorer' | 'search' | 'chatting' | 'aiChat';
4
-
5
- export const integratedShellActivityOrder: IntegratedShellActivityId[] = [
6
- 'explorer',
7
- 'search',
8
- 'chatting',
9
- 'aiChat',
10
- ];
11
-
12
- export const integratedShellActivityLabels: Record<IntegratedShellActivityId, string> = {
13
- explorer: 'Explorer',
14
- search: 'Search',
15
- chatting: 'Chat',
16
- aiChat: 'AI Chat',
17
- };
18
-
19
- const integratedShellActivityIcons: Record<IntegratedShellActivityId, string> = {
20
- explorer: 'codicon-files',
21
- search: 'codicon-search',
22
- chatting: 'codicon-comment-discussion',
23
- aiChat: 'codicon-sparkle',
24
- };
25
-
26
- export const integratedShellCommandActivities = integratedShellActivityOrder.map((id) => ({
27
- id,
28
- label: integratedShellActivityLabels[id],
29
- icon: integratedShellActivityIcons[id],
30
- }));
31
-
32
- export function isIntegratedShellActivityId(id: string): id is IntegratedShellActivityId {
33
- return id === 'explorer' || id === 'search' || id === 'chatting' || id === 'aiChat';
34
- }
35
-
36
- export interface IntegratedShellBootstrapInitialState {
37
- activeActivityId: IntegratedShellActivityId;
38
- isPrimarySidebarVisible: boolean;
39
- primarySidebarSizePx: number;
40
- primarySidebarMinPx: number;
41
- primarySidebarMaxPx: number;
42
- settingsCategoryId: string;
43
- settingsScopeId: string;
44
- theme: 'dark' | 'light';
45
- }
46
-
47
- export function createIntegratedShellBootstrapInitialState(
48
- overrides: Partial<IntegratedShellBootstrapInitialState> = {},
49
- ): IntegratedShellBootstrapInitialState {
50
- return {
51
- activeActivityId: 'explorer',
52
- isPrimarySidebarVisible: true,
53
- primarySidebarSizePx: 260,
54
- primarySidebarMinPx: 200,
55
- primarySidebarMaxPx: 480,
56
- settingsCategoryId: 'appearance',
57
- settingsScopeId: 'user',
58
- theme: 'dark',
59
- ...overrides,
60
- };
61
- }
62
-
63
- export function runtimeStatusLabel(status: RuntimeStatus): string {
64
- if (status === 'running') return 'Runtime running';
65
- if (status === 'cancelled') return 'Runtime stopped';
66
- if (status === 'error') return 'Runtime error';
67
- return 'Runtime idle';
68
- }
1
+ import type { RuntimeStatus } from '@workbench-kit/runtime';
2
+
3
+ export type IntegratedShellActivityId = 'explorer' | 'search' | 'chatting' | 'aiChat';
4
+
5
+ export const integratedShellActivityOrder: IntegratedShellActivityId[] = [
6
+ 'explorer',
7
+ 'search',
8
+ 'chatting',
9
+ 'aiChat',
10
+ ];
11
+
12
+ export const integratedShellActivityLabels: Record<IntegratedShellActivityId, string> = {
13
+ explorer: 'Explorer',
14
+ search: 'Search',
15
+ chatting: 'Chat',
16
+ aiChat: 'AI Chat',
17
+ };
18
+
19
+ const integratedShellActivityIcons: Record<IntegratedShellActivityId, string> = {
20
+ explorer: 'codicon-files',
21
+ search: 'codicon-search',
22
+ chatting: 'codicon-comment-discussion',
23
+ aiChat: 'codicon-sparkle',
24
+ };
25
+
26
+ export const integratedShellCommandActivities = integratedShellActivityOrder.map((id) => ({
27
+ id,
28
+ label: integratedShellActivityLabels[id],
29
+ icon: integratedShellActivityIcons[id],
30
+ }));
31
+
32
+ export function isIntegratedShellActivityId(id: string): id is IntegratedShellActivityId {
33
+ return id === 'explorer' || id === 'search' || id === 'chatting' || id === 'aiChat';
34
+ }
35
+
36
+ export interface IntegratedShellBootstrapInitialState {
37
+ activeActivityId: IntegratedShellActivityId;
38
+ isPrimarySidebarVisible: boolean;
39
+ primarySidebarSizePx: number;
40
+ primarySidebarMinPx: number;
41
+ primarySidebarMaxPx: number;
42
+ settingsCategoryId: string;
43
+ settingsScopeId: string;
44
+ theme: 'dark' | 'light';
45
+ }
46
+
47
+ export function createIntegratedShellBootstrapInitialState(
48
+ overrides: Partial<IntegratedShellBootstrapInitialState> = {},
49
+ ): IntegratedShellBootstrapInitialState {
50
+ return {
51
+ activeActivityId: 'explorer',
52
+ isPrimarySidebarVisible: true,
53
+ primarySidebarSizePx: 260,
54
+ primarySidebarMinPx: 200,
55
+ primarySidebarMaxPx: 480,
56
+ settingsCategoryId: 'appearance',
57
+ settingsScopeId: 'user',
58
+ theme: 'dark',
59
+ ...overrides,
60
+ };
61
+ }
62
+
63
+ export function runtimeStatusLabel(status: RuntimeStatus): string {
64
+ if (status === 'running') return 'Runtime running';
65
+ if (status === 'cancelled') return 'Runtime stopped';
66
+ if (status === 'error') return 'Runtime error';
67
+ return 'Runtime idle';
68
+ }
@@ -1,271 +1,271 @@
1
- import type { RuntimeChatMessage } from '@workbench-kit/runtime';
2
- import type { WorkspaceFile } from '@workbench-kit/workspace';
3
-
4
- import {
5
- widgetStudioBuiltinAssetFiles,
6
- widgetStudioCustomAssetExampleFiles,
7
- } from './widget-studio-assets.js';
8
-
9
- export const integratedShellWorkspaceFolders = [
10
- 'src',
11
- 'src/components',
12
- 'src/workbench',
13
- 'src/widgets',
14
- 'src/widgets/assets',
15
- 'src/widgets/assets/heading',
16
- 'src/widgets/assets/body',
17
- 'src/widgets/assets/label',
18
- 'src/widgets/assets/caption',
19
- 'src/widgets/assets/row',
20
- 'src/widgets/assets/column',
21
- 'src/widgets/assets/grid-2',
22
- 'src/widgets/assets/grid-3',
23
- 'src/widgets/assets/media-card',
24
- 'src/widgets/assets/section-stack',
25
- 'src/widgets/assets/custom',
26
- 'src/widgets/assets/custom/feature-badge',
27
- 'docs',
28
- 'public',
29
- ] as const;
30
-
31
- const integratedShellCoreWorkspaceFiles: WorkspaceFile[] = [
32
- {
33
- path: 'src/App.tsx',
34
- mimeType: 'application/typescript',
35
- updatedAt: '2026-06-02T09:12:00.000Z',
36
- source: 'user',
37
- content: `import { WorkbenchShell } from './workbench/Shell';
38
-
39
- export function App() {
40
- return <WorkbenchShell title="Public UI Workbench" />;
41
- }
42
- `,
43
- },
44
- {
45
- path: 'src/components/Button.tsx',
46
- mimeType: 'application/typescript',
47
- updatedAt: '2026-06-02T09:18:00.000Z',
48
- source: 'assistant',
49
- content: `import type { ComponentPropsWithRef } from 'react';
50
-
51
- type ButtonVariant = 'default' | 'primary' | 'danger';
52
-
53
- interface ButtonProps extends ComponentPropsWithRef<'button'> {
54
- variant?: ButtonVariant;
55
- }
56
-
57
- export function Button({ variant = 'default', ...props }: ButtonProps) {
58
- return <button data-variant={variant} {...props} />;
59
- }
60
- `,
61
- },
62
- {
63
- path: 'src/components/Panel.tsx',
64
- mimeType: 'application/typescript',
65
- updatedAt: '2026-06-02T09:20:00.000Z',
66
- source: 'assistant',
67
- content: `import type { ComponentPropsWithRef, ReactNode } from 'react';
68
-
69
- interface PanelProps extends ComponentPropsWithRef<'section'> {
70
- title: ReactNode;
71
- }
72
-
73
- export function Panel({ children, title, ...props }: PanelProps) {
74
- return (
75
- <section {...props}>
76
- <header>{title}</header>
77
- <div>{children}</div>
78
- </section>
79
- );
80
- }
81
- `,
82
- },
83
- {
84
- path: 'src/widgets/home.jdw.json',
85
- mimeType: 'application/vnd.workbench-kit.jdw+json',
86
- updatedAt: '2026-06-02T09:28:00.000Z',
87
- source: 'user',
88
- content: `{
89
- "type": "column",
90
- "args": {
91
- "children": [
92
- {
93
- "type": "text",
94
- "args": {
95
- "text": "Welcome"
96
- }
97
- }
98
- ]
99
- }
100
- }
101
- `,
102
- },
103
- {
104
- path: 'src/workbench/Shell.tsx',
105
- mimeType: 'application/typescript',
106
- updatedAt: '2026-06-02T09:30:00.000Z',
107
- source: 'assistant',
108
- content: `import { ActivityBar, StatusBar } from '@workbench-kit/react/workbench';
109
-
110
- export function WorkbenchShell({ title }: { title: string }) {
111
- return (
112
- <main aria-label={title}>
113
- <ActivityBar items={[]} />
114
- <section data-region="editor">
115
- <h1>{title}</h1>
116
- </section>
117
- <StatusBar compact />
118
- </main>
119
- );
120
- }
121
- `,
122
- },
123
- {
124
- path: 'src/workbench/search.ts',
125
- mimeType: 'application/typescript',
126
- updatedAt: '2026-06-02T09:34:00.000Z',
127
- source: 'assistant',
128
- content: `export function compactText(value: string) {
129
- return value.replace(/\\s+/g, ' ').trim();
130
- }
131
-
132
- export function createContentPreview(content: string, query: string) {
133
- const compact = compactText(content);
134
- const index = compact.toLowerCase().indexOf(query.toLowerCase());
135
- if (index < 0) return compact.slice(0, 120);
136
-
137
- const start = Math.max(0, index - 48);
138
- const end = Math.min(compact.length, index + query.length + 72);
139
- return \`\${start > 0 ? '...' : ''}\${compact.slice(start, end)}\${end < compact.length ? '...' : ''}\`;
140
- }
141
- `,
142
- },
143
- {
144
- path: 'docs/getting-started.md',
145
- mimeType: 'text/markdown',
146
- updatedAt: '2026-06-02T09:42:00.000Z',
147
- source: 'user',
148
- content: `# Getting Started
149
-
150
- Import shared styles once, then compose the workbench primitives in your app shell.
151
-
152
- - Use Explorer for file navigation.
153
- - Use Search for path and content matches.
154
- - Use Chat for workspace-side conversations.
155
- `,
156
- },
157
- {
158
- path: 'package.json',
159
- mimeType: 'application/json',
160
- updatedAt: '2026-06-02T09:50:00.000Z',
161
- source: 'user',
162
- content: `{
163
- "name": "@example/workbench-app",
164
- "private": true,
165
- "scripts": {
166
- "storybook": "storybook dev --port 61009"
167
- }
168
- }
169
- `,
170
- },
171
- {
172
- path: 'public/theme.css',
173
- mimeType: 'text/css',
174
- updatedAt: '2026-06-02T09:54:00.000Z',
175
- source: 'assistant',
176
- content: `:root {
177
- color-scheme: dark;
178
- --workspace-accent: #4aa8ff;
179
- }
180
-
181
- .ui-file-icon {
182
- color: var(--workspace-accent);
183
- }
184
- `,
185
- },
186
- ];
187
-
188
- export const integratedShellWorkspaceFiles: WorkspaceFile[] = [
189
- ...integratedShellCoreWorkspaceFiles,
190
- ...widgetStudioBuiltinAssetFiles,
191
- ...widgetStudioCustomAssetExampleFiles,
192
- ];
193
-
194
- export {
195
- widgetStudioBuiltinAssetFiles,
196
- widgetStudioCustomAssetExampleFiles,
197
- } from './widget-studio-assets.js';
198
-
199
- export const integratedShellInitialRuntimeMessages: RuntimeChatMessage[] = [
200
- {
201
- id: 'm1',
202
- source: 'user',
203
- createdAt: '2026-06-18T09:12:00.000Z',
204
- content:
205
- 'Check whether the workbench shell covers explorer, search, chatting, AI chat, settings, and status surfaces.',
206
- },
207
- {
208
- id: 'm2',
209
- source: 'assistant',
210
- createdAt: '2026-06-18T09:12:18.000Z',
211
- content:
212
- 'The integrated story now keeps those surfaces in one stateful shell with public mock data.',
213
- },
214
- {
215
- id: 'm3',
216
- source: 'assistant',
217
- createdAt: '2026-06-18T09:12:42.000Z',
218
- content:
219
- 'Search results, file icons, and the editor preview are driven by the same virtual workspace.',
220
- },
221
- ];
222
-
223
- export const integratedShellInitialChattingMessages: RuntimeChatMessage[] = [
224
- {
225
- id: 'c1',
226
- source: 'assistant',
227
- label: 'Alex',
228
- createdAt: '2026-06-18T10:05:00.000Z',
229
- content: 'Can you review the widget tree changes before we merge?',
230
- },
231
- {
232
- id: 'c2',
233
- source: 'user',
234
- createdAt: '2026-06-18T10:06:14.000Z',
235
- content: 'Sure — I will check after the CI run finishes.',
236
- },
237
- {
238
- id: 'c3',
239
- source: 'assistant',
240
- label: 'Alex',
241
- createdAt: '2026-06-18T10:07:02.000Z',
242
- content: 'Thanks. Ping me in #workbench when the preview is ready.',
243
- },
244
- ];
245
-
246
- export const integratedShellDefaultSelectionByActivity = {
247
- explorer: 'src/App.tsx',
248
- search: 'src/components/Button.tsx',
249
- chatting: 'src/App.tsx',
250
- aiChat: 'src/App.tsx',
251
- } as const;
252
-
253
- export function createIntegratedShellChatRuntimeResponse(message: RuntimeChatMessage) {
254
- return {
255
- chunks: [
256
- 'Mock runtime received the workspace request. ',
257
- 'A workspace patch is ready in `docs/runtime-notes.md`.',
258
- ],
259
- intervalMs: 20,
260
- workspacePatches: [
261
- {
262
- content: `# Runtime Notes\n\nLast request: ${message.content}\n\nThis file was produced by the public mock runtime fixture.\n`,
263
- mimeType: 'text/markdown',
264
- path: 'docs/runtime-notes.md',
265
- source: 'assistant' as const,
266
- type: 'write-file' as const,
267
- updatedAt: '2026-06-02T10:05:00.000Z',
268
- },
269
- ],
270
- };
271
- }
1
+ import type { RuntimeChatMessage } from '@workbench-kit/runtime';
2
+ import type { WorkspaceFile } from '@workbench-kit/workspace';
3
+
4
+ import {
5
+ widgetStudioBuiltinAssetFiles,
6
+ widgetStudioCustomAssetExampleFiles,
7
+ } from './widget-studio-assets.js';
8
+
9
+ export const integratedShellWorkspaceFolders = [
10
+ 'src',
11
+ 'src/components',
12
+ 'src/workbench',
13
+ 'src/widgets',
14
+ 'src/widgets/assets',
15
+ 'src/widgets/assets/heading',
16
+ 'src/widgets/assets/body',
17
+ 'src/widgets/assets/label',
18
+ 'src/widgets/assets/caption',
19
+ 'src/widgets/assets/row',
20
+ 'src/widgets/assets/column',
21
+ 'src/widgets/assets/grid-2',
22
+ 'src/widgets/assets/grid-3',
23
+ 'src/widgets/assets/media-card',
24
+ 'src/widgets/assets/section-stack',
25
+ 'src/widgets/assets/custom',
26
+ 'src/widgets/assets/custom/feature-badge',
27
+ 'docs',
28
+ 'public',
29
+ ] as const;
30
+
31
+ const integratedShellCoreWorkspaceFiles: WorkspaceFile[] = [
32
+ {
33
+ path: 'src/App.tsx',
34
+ mimeType: 'application/typescript',
35
+ updatedAt: '2026-06-02T09:12:00.000Z',
36
+ source: 'user',
37
+ content: `import { WorkbenchShell } from './workbench/Shell';
38
+
39
+ export function App() {
40
+ return <WorkbenchShell title="Public UI Workbench" />;
41
+ }
42
+ `,
43
+ },
44
+ {
45
+ path: 'src/components/Button.tsx',
46
+ mimeType: 'application/typescript',
47
+ updatedAt: '2026-06-02T09:18:00.000Z',
48
+ source: 'assistant',
49
+ content: `import type { ComponentPropsWithRef } from 'react';
50
+
51
+ type ButtonVariant = 'default' | 'primary' | 'danger';
52
+
53
+ interface ButtonProps extends ComponentPropsWithRef<'button'> {
54
+ variant?: ButtonVariant;
55
+ }
56
+
57
+ export function Button({ variant = 'default', ...props }: ButtonProps) {
58
+ return <button data-variant={variant} {...props} />;
59
+ }
60
+ `,
61
+ },
62
+ {
63
+ path: 'src/components/Panel.tsx',
64
+ mimeType: 'application/typescript',
65
+ updatedAt: '2026-06-02T09:20:00.000Z',
66
+ source: 'assistant',
67
+ content: `import type { ComponentPropsWithRef, ReactNode } from 'react';
68
+
69
+ interface PanelProps extends ComponentPropsWithRef<'section'> {
70
+ title: ReactNode;
71
+ }
72
+
73
+ export function Panel({ children, title, ...props }: PanelProps) {
74
+ return (
75
+ <section {...props}>
76
+ <header>{title}</header>
77
+ <div>{children}</div>
78
+ </section>
79
+ );
80
+ }
81
+ `,
82
+ },
83
+ {
84
+ path: 'src/widgets/home.jdw.json',
85
+ mimeType: 'application/vnd.workbench-kit.jdw+json',
86
+ updatedAt: '2026-06-02T09:28:00.000Z',
87
+ source: 'user',
88
+ content: `{
89
+ "type": "column",
90
+ "args": {
91
+ "children": [
92
+ {
93
+ "type": "text",
94
+ "args": {
95
+ "text": "Welcome"
96
+ }
97
+ }
98
+ ]
99
+ }
100
+ }
101
+ `,
102
+ },
103
+ {
104
+ path: 'src/workbench/Shell.tsx',
105
+ mimeType: 'application/typescript',
106
+ updatedAt: '2026-06-02T09:30:00.000Z',
107
+ source: 'assistant',
108
+ content: `import { ActivityBar, StatusBar } from '@workbench-kit/react/workbench';
109
+
110
+ export function WorkbenchShell({ title }: { title: string }) {
111
+ return (
112
+ <main aria-label={title}>
113
+ <ActivityBar items={[]} />
114
+ <section data-region="editor">
115
+ <h1>{title}</h1>
116
+ </section>
117
+ <StatusBar compact />
118
+ </main>
119
+ );
120
+ }
121
+ `,
122
+ },
123
+ {
124
+ path: 'src/workbench/search.ts',
125
+ mimeType: 'application/typescript',
126
+ updatedAt: '2026-06-02T09:34:00.000Z',
127
+ source: 'assistant',
128
+ content: `export function compactText(value: string) {
129
+ return value.replace(/\\s+/g, ' ').trim();
130
+ }
131
+
132
+ export function createContentPreview(content: string, query: string) {
133
+ const compact = compactText(content);
134
+ const index = compact.toLowerCase().indexOf(query.toLowerCase());
135
+ if (index < 0) return compact.slice(0, 120);
136
+
137
+ const start = Math.max(0, index - 48);
138
+ const end = Math.min(compact.length, index + query.length + 72);
139
+ return \`\${start > 0 ? '...' : ''}\${compact.slice(start, end)}\${end < compact.length ? '...' : ''}\`;
140
+ }
141
+ `,
142
+ },
143
+ {
144
+ path: 'docs/getting-started.md',
145
+ mimeType: 'text/markdown',
146
+ updatedAt: '2026-06-02T09:42:00.000Z',
147
+ source: 'user',
148
+ content: `# Getting Started
149
+
150
+ Import shared styles once, then compose the workbench primitives in your app shell.
151
+
152
+ - Use Explorer for file navigation.
153
+ - Use Search for path and content matches.
154
+ - Use Chat for workspace-side conversations.
155
+ `,
156
+ },
157
+ {
158
+ path: 'package.json',
159
+ mimeType: 'application/json',
160
+ updatedAt: '2026-06-02T09:50:00.000Z',
161
+ source: 'user',
162
+ content: `{
163
+ "name": "@example/workbench-app",
164
+ "private": true,
165
+ "scripts": {
166
+ "storybook": "storybook dev --port 61009"
167
+ }
168
+ }
169
+ `,
170
+ },
171
+ {
172
+ path: 'public/theme.css',
173
+ mimeType: 'text/css',
174
+ updatedAt: '2026-06-02T09:54:00.000Z',
175
+ source: 'assistant',
176
+ content: `:root {
177
+ color-scheme: dark;
178
+ --workspace-accent: #4aa8ff;
179
+ }
180
+
181
+ .ui-file-icon {
182
+ color: var(--workspace-accent);
183
+ }
184
+ `,
185
+ },
186
+ ];
187
+
188
+ export const integratedShellWorkspaceFiles: WorkspaceFile[] = [
189
+ ...integratedShellCoreWorkspaceFiles,
190
+ ...widgetStudioBuiltinAssetFiles,
191
+ ...widgetStudioCustomAssetExampleFiles,
192
+ ];
193
+
194
+ export {
195
+ widgetStudioBuiltinAssetFiles,
196
+ widgetStudioCustomAssetExampleFiles,
197
+ } from './widget-studio-assets.js';
198
+
199
+ export const integratedShellInitialRuntimeMessages: RuntimeChatMessage[] = [
200
+ {
201
+ id: 'm1',
202
+ source: 'user',
203
+ createdAt: '2026-06-18T09:12:00.000Z',
204
+ content:
205
+ 'Check whether the workbench shell covers explorer, search, chatting, AI chat, settings, and status surfaces.',
206
+ },
207
+ {
208
+ id: 'm2',
209
+ source: 'assistant',
210
+ createdAt: '2026-06-18T09:12:18.000Z',
211
+ content:
212
+ 'The integrated story now keeps those surfaces in one stateful shell with public mock data.',
213
+ },
214
+ {
215
+ id: 'm3',
216
+ source: 'assistant',
217
+ createdAt: '2026-06-18T09:12:42.000Z',
218
+ content:
219
+ 'Search results, file icons, and the editor preview are driven by the same virtual workspace.',
220
+ },
221
+ ];
222
+
223
+ export const integratedShellInitialChattingMessages: RuntimeChatMessage[] = [
224
+ {
225
+ id: 'c1',
226
+ source: 'assistant',
227
+ label: 'Alex',
228
+ createdAt: '2026-06-18T10:05:00.000Z',
229
+ content: 'Can you review the widget tree changes before we merge?',
230
+ },
231
+ {
232
+ id: 'c2',
233
+ source: 'user',
234
+ createdAt: '2026-06-18T10:06:14.000Z',
235
+ content: 'Sure — I will check after the CI run finishes.',
236
+ },
237
+ {
238
+ id: 'c3',
239
+ source: 'assistant',
240
+ label: 'Alex',
241
+ createdAt: '2026-06-18T10:07:02.000Z',
242
+ content: 'Thanks. Ping me in #workbench when the preview is ready.',
243
+ },
244
+ ];
245
+
246
+ export const integratedShellDefaultSelectionByActivity = {
247
+ explorer: 'src/App.tsx',
248
+ search: 'src/components/Button.tsx',
249
+ chatting: 'src/App.tsx',
250
+ aiChat: 'src/App.tsx',
251
+ } as const;
252
+
253
+ export function createIntegratedShellChatRuntimeResponse(message: RuntimeChatMessage) {
254
+ return {
255
+ chunks: [
256
+ 'Mock runtime received the workspace request. ',
257
+ 'A workspace patch is ready in `docs/runtime-notes.md`.',
258
+ ],
259
+ intervalMs: 20,
260
+ workspacePatches: [
261
+ {
262
+ content: `# Runtime Notes\n\nLast request: ${message.content}\n\nThis file was produced by the public mock runtime fixture.\n`,
263
+ mimeType: 'text/markdown',
264
+ path: 'docs/runtime-notes.md',
265
+ source: 'assistant' as const,
266
+ type: 'write-file' as const,
267
+ updatedAt: '2026-06-02T10:05:00.000Z',
268
+ },
269
+ ],
270
+ };
271
+ }