@codingame/monaco-vscode-walkthrough-service-override 38.0.7 → 39.0.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 (22) hide show
  1. package/package.json +2 -2
  2. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentsWindowGraphic.d.ts +42 -0
  3. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentsWindowGraphic.js +438 -0
  4. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/media/agentsWindowGraphic.css +405 -0
  5. package/vscode/src/vs/workbench/contrib/welcomeGettingStarted/browser/gettingStarted.contribution.js +21 -32
  6. package/vscode/src/vs/workbench/contrib/welcomeGettingStarted/browser/gettingStarted.d.ts +8 -0
  7. package/vscode/src/vs/workbench/contrib/welcomeGettingStarted/browser/gettingStarted.js +105 -48
  8. package/vscode/src/vs/workbench/contrib/welcomeGettingStarted/browser/gettingStartedAccessibleView.js +2 -2
  9. package/vscode/src/vs/workbench/contrib/welcomeGettingStarted/browser/gettingStartedColors.js +8 -7
  10. package/vscode/src/vs/workbench/contrib/welcomeGettingStarted/browser/gettingStartedExtensionPoint.js +37 -37
  11. package/vscode/src/vs/workbench/contrib/welcomeGettingStarted/browser/gettingStartedIcons.js +2 -2
  12. package/vscode/src/vs/workbench/contrib/welcomeGettingStarted/browser/gettingStartedService._contribution.js +3 -3
  13. package/vscode/src/vs/workbench/contrib/welcomeGettingStarted/browser/gettingStartedService.js +1 -1
  14. package/vscode/src/vs/workbench/contrib/welcomeGettingStarted/browser/startupPage.js +2 -2
  15. package/vscode/src/vs/workbench/contrib/welcomeGettingStarted/common/gettingStartedContent.js +149 -159
  16. package/vscode/src/vs/workbench/contrib/welcomeGettingStarted/common/media/notebookProfile.js +3 -3
  17. package/vscode/src/vs/workbench/contrib/welcomeGettingStarted/common/media/theme_picker.js +5 -5
  18. package/vscode/src/vs/workbench/contrib/welcomeGettingStarted/common/media/theme_picker_small.js +4 -4
  19. package/vscode/src/vs/workbench/contrib/welcomeWalkthrough/browser/editor/editorWalkThrough.js +3 -3
  20. package/vscode/src/vs/workbench/contrib/welcomeWalkthrough/browser/walkThrough.contribution.js +2 -2
  21. package/vscode/src/vs/workbench/contrib/welcomeWalkthrough/browser/walkThroughPart.js +2 -2
  22. package/vscode/src/vs/workbench/contrib/welcomeWalkthrough/common/walkThroughUtils.js +2 -1
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@codingame/monaco-vscode-walkthrough-service-override",
3
- "version": "38.0.7",
3
+ "version": "39.0.0",
4
4
  "private": false,
5
5
  "description": "VSCode public API plugged on the monaco editor - walkthrough service-override",
6
6
  "keywords": [],
@@ -15,7 +15,7 @@
15
15
  },
16
16
  "type": "module",
17
17
  "dependencies": {
18
- "@codingame/monaco-vscode-api": "38.0.7",
18
+ "@codingame/monaco-vscode-api": "39.0.0",
19
19
  "marked": "14.0.0"
20
20
  },
21
21
  "main": "index.js",
@@ -0,0 +1,42 @@
1
+ import { Disposable } from "@codingame/monaco-vscode-api/vscode/vs/base/common/lifecycle";
2
+ import { IObservable } from "@codingame/monaco-vscode-api/vscode/vs/base/common/observable";
3
+ import { IConfigurationService } from "@codingame/monaco-vscode-api/vscode/vs/platform/configuration/common/configuration.service";
4
+ import { IWorkbenchEnvironmentService } from "@codingame/monaco-vscode-api/vscode/vs/workbench/services/environment/common/environmentService.service";
5
+ import { IHostService } from "@codingame/monaco-vscode-api/vscode/vs/workbench/services/host/browser/host.service";
6
+ import { AgentsWindowGraphicVariant, AgentsWindowSectionStyle } from "@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/chat/common/constants";
7
+ /** A graphic that can be shown. {@link AgentsWindowGraphicVariant.Auto} resolves to one of these. */
8
+ export type AgentsWindowGraphicDesign = AgentsWindowGraphicVariant.WindowComparison | AgentsWindowGraphicVariant.ManyWindowsToOne;
9
+ /**
10
+ * Picks the graphic for a variant, or `undefined` for none. {@link AgentsWindowGraphicVariant.Auto} picks
11
+ * {@link AgentsWindowGraphicVariant.ManyWindowsToOne} when more than one editor window is open and
12
+ * {@link AgentsWindowGraphicVariant.WindowComparison} otherwise, and shows nothing while that is unknown.
13
+ */
14
+ export declare function resolveAgentsWindowGraphicDesign(variant: AgentsWindowGraphicVariant, hasMultipleEditorWindows: boolean | undefined): AgentsWindowGraphicDesign | undefined;
15
+ /**
16
+ * Shows the graphic selected by {@link ChatConfiguration.WelcomePageAgentsWindowGraphic}
17
+ * and updates it when the setting changes. The element is hidden while no graphic is shown.
18
+ */
19
+ export declare class AgentsWindowGraphic extends Disposable {
20
+ readonly element: HTMLElement;
21
+ private readonly _shownDesign;
22
+ /** The graphic rendered in {@link element}, or `undefined` when none is. Changes after the element has been updated. */
23
+ readonly shownDesign: IObservable<AgentsWindowGraphicDesign | undefined>;
24
+ /**
25
+ * How the graphic, its captions and the Agents window button should be set apart from the rest of the page,
26
+ * see {@link ChatConfiguration.WelcomePageAgentsWindowSectionStyle}. The page that shows the graphic applies it.
27
+ */
28
+ readonly sectionStyle: IObservable<AgentsWindowSectionStyle>;
29
+ constructor(configurationService: IConfigurationService, hostService: IHostService, environmentService: IWorkbenchEnvironmentService);
30
+ }
31
+ export interface IAgentsWindowGraphicOptions {
32
+ /**
33
+ * Renders a small graphic for surfaces that explain the Agents window in their own words, such as a hover:
34
+ * the drawings keep only the window titles of {@link AgentsWindowGraphicVariant.WindowComparison} and have no descriptions.
35
+ */
36
+ readonly compact?: boolean;
37
+ }
38
+ /**
39
+ * Renders a graphic and its captions.
40
+ * The drawings are decorative and hidden from screen readers; the captions carry their meaning.
41
+ */
42
+ export declare function renderAgentsWindowGraphic(design: AgentsWindowGraphicDesign, options?: IAgentsWindowGraphicOptions): HTMLElement;
@@ -0,0 +1,438 @@
1
+
2
+ import { registerCss } from '@codingame/monaco-vscode-api/css';
3
+ import { __decorate, __param } from '@codingame/monaco-vscode-api/external/tslib/tslib.es6';
4
+ import * as agentsWindowGraphic from './media/agentsWindowGraphic.css';
5
+ import { $, reset, setVisibility } from '@codingame/monaco-vscode-api/vscode/vs/base/browser/dom';
6
+ import { onUnexpectedError } from '@codingame/monaco-vscode-api/vscode/vs/base/common/errors';
7
+ import { Event } from '@codingame/monaco-vscode-api/vscode/vs/base/common/event';
8
+ import { Disposable, toDisposable } from '@codingame/monaco-vscode-api/vscode/vs/base/common/lifecycle';
9
+ import '@codingame/monaco-vscode-api/vscode/vs/base/common/observableInternal/index';
10
+ import { isEqual } from '@codingame/monaco-vscode-api/vscode/vs/base/common/resources';
11
+ import { localize } from '@codingame/monaco-vscode-api/vscode/vs/nls';
12
+ import { IConfigurationService } from '@codingame/monaco-vscode-api/vscode/vs/platform/configuration/common/configuration.service';
13
+ import { isWorkspaceIdentifier } from '@codingame/monaco-vscode-api/vscode/vs/platform/workspace/common/workspace';
14
+ import { IWorkbenchEnvironmentService } from '@codingame/monaco-vscode-api/vscode/vs/workbench/services/environment/common/environmentService.service';
15
+ import { IHostService } from '@codingame/monaco-vscode-api/vscode/vs/workbench/services/host/browser/host.service';
16
+ import { AgentsWindowGraphicVariant, ChatConfiguration, getAgentsWindowGraphicVariant, getAgentsWindowSectionStyle } from '@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/chat/common/constants';
17
+ import { observableValue } from '@codingame/monaco-vscode-api/vscode/vs/base/common/observableInternal/observables/observableValue';
18
+ import { observableFromEvent } from '@codingame/monaco-vscode-api/vscode/vs/base/common/observableInternal/observables/observableFromEvent';
19
+ import { autorun } from '@codingame/monaco-vscode-api/vscode/vs/base/common/observableInternal/reactions/autorun';
20
+ import { derived } from '@codingame/monaco-vscode-api/vscode/vs/base/common/observableInternal/observables/derived';
21
+
22
+ registerCss(agentsWindowGraphic, 1);
23
+ function resolveAgentsWindowGraphicDesign(variant, hasMultipleEditorWindows) {
24
+ switch (variant) {
25
+ case AgentsWindowGraphicVariant.WindowComparison:
26
+ case AgentsWindowGraphicVariant.ManyWindowsToOne:
27
+ return variant;
28
+ case AgentsWindowGraphicVariant.Auto:
29
+ if (hasMultipleEditorWindows === undefined) {
30
+ return undefined;
31
+ }
32
+ return hasMultipleEditorWindows ? AgentsWindowGraphicVariant.ManyWindowsToOne : AgentsWindowGraphicVariant.WindowComparison;
33
+ default:
34
+ return undefined;
35
+ }
36
+ }
37
+ let AgentsWindowGraphic = class AgentsWindowGraphic extends Disposable {
38
+ constructor(configurationService, hostService, environmentService) {
39
+ super();
40
+ this._shownDesign = observableValue(this, undefined);
41
+ this.shownDesign = this._shownDesign;
42
+ this.element = $(".agents-window-graphic-container");
43
+ const variant = observableFromEvent(this, Event.filter(
44
+ configurationService.onDidChangeConfiguration,
45
+ e => e.affectsConfiguration(ChatConfiguration.WelcomePageAgentsWindowGraphic)
46
+ ), () => getAgentsWindowGraphicVariant(configurationService));
47
+ this.sectionStyle = observableFromEvent(this, Event.filter(
48
+ configurationService.onDidChangeConfiguration,
49
+ e => e.affectsConfiguration(ChatConfiguration.WelcomePageAgentsWindowSectionStyle)
50
+ ), () => getAgentsWindowSectionStyle(configurationService));
51
+ const hasMultipleEditorWindows = observableValue(this, undefined);
52
+ this._register(autorun(reader => {
53
+ if (variant.read(reader) !== AgentsWindowGraphicVariant.Auto) {
54
+ return;
55
+ }
56
+ let disposed = false;
57
+ reader.store.add(toDisposable(() => disposed = true));
58
+ const update = async () => {
59
+ let hasMultiple = false;
60
+ try {
61
+ hasMultiple = (await countEditorWindows(hostService, environmentService)) > 1;
62
+ } catch (error) {
63
+ onUnexpectedError(error);
64
+ }
65
+ if (!disposed) {
66
+ hasMultipleEditorWindows.set(hasMultiple, undefined);
67
+ }
68
+ };
69
+ update();
70
+ }));
71
+ const design = derived(
72
+ this,
73
+ reader => resolveAgentsWindowGraphicDesign(variant.read(reader), hasMultipleEditorWindows.read(reader))
74
+ );
75
+ this._register(autorun(reader => {
76
+ const shownDesign = design.read(reader);
77
+ reset(
78
+ this.element,
79
+ ...(shownDesign ? [renderAgentsWindowGraphic(shownDesign)] : [])
80
+ );
81
+ setVisibility(!!shownDesign, this.element);
82
+ this._shownDesign.set(shownDesign, undefined);
83
+ }));
84
+ }
85
+ };
86
+ AgentsWindowGraphic = ( __decorate([( __param(0, IConfigurationService)), ( __param(1, IHostService)), ( __param(2, IWorkbenchEnvironmentService))], AgentsWindowGraphic));
87
+ async function countEditorWindows(hostService, environmentService) {
88
+ const windows = await hostService.getWindows({
89
+ includeAuxiliaryWindows: false
90
+ });
91
+ return windows.filter(
92
+ window => !(isWorkspaceIdentifier(window.workspace) && isEqual(window.workspace.configPath, environmentService.agentSessionsWorkspace))
93
+ ).length;
94
+ }
95
+ function renderAgentsWindowGraphic(design, options) {
96
+ const ids = ( new GraphicIds());
97
+ switch (design) {
98
+ case AgentsWindowGraphicVariant.WindowComparison:
99
+ return $(
100
+ `.agents-window-graphic.window-comparison${""}`,
101
+ {},
102
+ figure(graphicSvg(300, 180, editorWindow(ids, 0, 0)), ( localize(11954, "Editor window")), ( localize(11955, "Work on one task at a time, with AI at your side."))),
103
+ figure(
104
+ graphicSvg(300, 180, agentsWindow(ids, 0, 0, false, windowComparisonProjects)),
105
+ ( localize(11956, "Agents window")),
106
+ ( localize(11957, "Run multiple tasks at the same time, isolated from each other.")),
107
+ ( localize(11958, "New"))
108
+ )
109
+ );
110
+ case AgentsWindowGraphicVariant.ManyWindowsToOne:
111
+ return $(
112
+ `.agents-window-graphic.many-windows-to-one${""}`,
113
+ {},
114
+ figure(graphicSvg(672, 204, ...agentsWindowProjects.map((
115
+ {
116
+ color,
117
+ sessions
118
+ },
119
+ index
120
+ ) => projectEditorWindow(ids, 8 + 32 * index, 8 + 36 * index, color, sessions[0].state)), svg("path", "awg-arrow", {
121
+ d: "M290 104H340M333 97L340 104L333 111"
122
+ }), agentsWindow(ids, 364, 14, true, agentsWindowProjects)), undefined, ( localize(11959, "All your projects and agents, in one window.")))
123
+ );
124
+ }
125
+ }
126
+ const agentsWindowProjects = [{
127
+ color: "orange",
128
+ nameWidth: 30,
129
+ sessions: [{
130
+ state: "working",
131
+ titleWidth: 62,
132
+ selected: true
133
+ }, {
134
+ state: "done",
135
+ titleWidth: 48
136
+ }]
137
+ }, {
138
+ color: "purple",
139
+ nameWidth: 22,
140
+ sessions: [{
141
+ state: "waiting",
142
+ titleWidth: 66
143
+ }]
144
+ }, {
145
+ color: "blue",
146
+ nameWidth: 26,
147
+ sessions: [{
148
+ state: "working",
149
+ titleWidth: 44
150
+ }, {
151
+ state: "done",
152
+ titleWidth: 54
153
+ }]
154
+ }];
155
+ const [topProject, ...otherProjects] = agentsWindowProjects;
156
+ const windowComparisonProjects = [{
157
+ ...topProject,
158
+ sessions: [{
159
+ state: "working",
160
+ titleWidth: 62,
161
+ selected: true
162
+ }, {
163
+ state: "working",
164
+ titleWidth: 48
165
+ }]
166
+ }, ...otherProjects];
167
+ class GraphicIds {
168
+ constructor() {
169
+ this.prefix = `agents-window-graphic-${++GraphicIds.instanceCount}`;
170
+ this.count = 0;
171
+ }
172
+ static {
173
+ this.instanceCount = 0;
174
+ }
175
+ next() {
176
+ return `${this.prefix}-${++this.count}`;
177
+ }
178
+ }
179
+ function figure(graphic, title, description, badge) {
180
+ if (!title && !description) {
181
+ return $("figure.agents-window-graphic-figure", {}, graphic);
182
+ }
183
+ return $(
184
+ "figure.agents-window-graphic-figure",
185
+ {},
186
+ graphic,
187
+ $("figcaption.agents-window-graphic-caption", {}, ...(title ? [$(
188
+ ".agents-window-graphic-title",
189
+ {},
190
+ title,
191
+ ...(badge ? [$("span.agents-window-graphic-badge", {}, badge)] : [])
192
+ )] : []), ...(description ? [$(".agents-window-graphic-description", {}, description)] : []))
193
+ );
194
+ }
195
+ function graphicSvg(width, height, ...children) {
196
+ return svg("svg", "agents-window-graphic-svg", {
197
+ viewBox: `0 0 ${width} ${height}`,
198
+ "aria-hidden": "true",
199
+ focusable: "false"
200
+ }, ...children);
201
+ }
202
+ function svg(tag, className, attributes, ...children) {
203
+ return $.SVG(tag, className ? {
204
+ class: className,
205
+ ...attributes
206
+ } : attributes, ...children);
207
+ }
208
+ function rect(className, x, y, width, height, rx) {
209
+ return svg("rect", className, rx === undefined ? {
210
+ x,
211
+ y,
212
+ width,
213
+ height
214
+ } : {
215
+ x,
216
+ y,
217
+ width,
218
+ height,
219
+ rx
220
+ });
221
+ }
222
+ function bar(className, x, y, width, height = 4) {
223
+ return rect(className, x, y, width, height, height / 2);
224
+ }
225
+ function folder(color, x, y) {
226
+ return svg("path", `awg-project-${color}`, {
227
+ d: `M${x} ${y + 1.5}a1.5 1.5 0 0 1 1.5-1.5h2.5l1 1h3.5a1.5 1.5 0 0 1 1.5 1.5v4a1.5 1.5 0 0 1-1.5 1.5h-7a1.5 1.5 0 0 1-1.5-1.5z`
228
+ });
229
+ }
230
+ function spinner(cx, cy, r) {
231
+ return svg("g", "awg-spinner", {}, svg("circle", "awg-spinner-track", {
232
+ cx,
233
+ cy,
234
+ r
235
+ }), svg("path", "awg-spinner-arc", {
236
+ d: `M${cx} ${cy - r}A${r} ${r} 0 0 1 ${cx + r} ${cy}`
237
+ }));
238
+ }
239
+ function done(cx, cy, compact) {
240
+ return svg("path", "awg-done", {
241
+ d: compact ? `M${cx - 2.4} ${cy + 0.16}l1.76 1.76l3.2-3.68` : `M${cx - 3} ${cy + 0.2}l2.2 2.2l4-4.6`
242
+ });
243
+ }
244
+ function waiting(cx, cy, halo) {
245
+ const dot = svg("circle", "awg-waiting", {
246
+ cx,
247
+ cy,
248
+ r: 3
249
+ });
250
+ return halo ? [svg("circle", "awg-waiting-halo", {
251
+ cx,
252
+ cy,
253
+ r: 5.5
254
+ }), dot] : [dot];
255
+ }
256
+ function agentStateIcon(state, cx, cy, compact) {
257
+ switch (state) {
258
+ case "working":
259
+ return [spinner(cx, cy, compact ? 3 : 4)];
260
+ case "waiting":
261
+ return waiting(cx, cy, !compact);
262
+ case "done":
263
+ return [done(cx, cy, compact)];
264
+ }
265
+ }
266
+ function sessionsList(projects) {
267
+ const sessionIconCenter = 23;
268
+ const elements = [];
269
+ let rowCenter = 56.5;
270
+ for (const [index, {
271
+ color,
272
+ nameWidth,
273
+ sessions
274
+ }] of projects.entries()) {
275
+ if (index > 0) {
276
+ rowCenter += 17.5;
277
+ }
278
+ elements.push(
279
+ folder(color, 10, rowCenter - 3.5),
280
+ bar("awg-ink-medium", 23, rowCenter - 2, nameWidth)
281
+ );
282
+ for (const [sessionIndex, {
283
+ state,
284
+ titleWidth,
285
+ selected
286
+ }] of sessions.entries()) {
287
+ rowCenter += sessionIndex === 0 ? 14.5 : 16;
288
+ if (selected) {
289
+ elements.push(rect("awg-row-selected awg-radius-small", 4, rowCenter - 8, 116, 16, 4));
290
+ }
291
+ elements.push(
292
+ ...agentStateIcon(state, sessionIconCenter, rowCenter, false),
293
+ bar(
294
+ selected || state === "waiting" ? "awg-ink-strong" : "awg-ink-medium",
295
+ sessionIconCenter + 10,
296
+ rowCenter - 2,
297
+ titleWidth
298
+ )
299
+ );
300
+ }
301
+ }
302
+ return elements;
303
+ }
304
+ function windowFrame(
305
+ ids,
306
+ x,
307
+ y,
308
+ width,
309
+ height,
310
+ titleBarHeight,
311
+ commandCenter,
312
+ shadow,
313
+ ...content
314
+ ) {
315
+ const clipId = ids.next();
316
+ return svg("g", shadow ? "awg-window awg-window-shadow" : "awg-window", {
317
+ transform: `translate(${x} ${y})`
318
+ }, svg("clipPath", undefined, {
319
+ id: clipId
320
+ }, rect("awg-window-shape", 0, 0, width, height, 8)), svg("g", undefined, {
321
+ "clip-path": `url(#${clipId})`
322
+ }, rect("awg-editor", 0, 0, width, height), rect("awg-titlebar", 0, 0, width, titleBarHeight), rect("awg-divider", 0, titleBarHeight, width, 1), rect(
323
+ "awg-command-center",
324
+ commandCenter.x,
325
+ commandCenter.y,
326
+ commandCenter.width,
327
+ commandCenter.height,
328
+ commandCenter.height / 2
329
+ ), ...content), rect("awg-window-frame", 0.5, 0.5, width - 1, height - 1, 7.5));
330
+ }
331
+ function editorWindow(ids, x, y) {
332
+ const tree = [
333
+ [0, 46, 34],
334
+ [1, 57, 22],
335
+ [1, 68, 18],
336
+ [1, 79, 28],
337
+ [0, 90, 28],
338
+ [1, 101, 24],
339
+ [1, 112, 16],
340
+ [1, 123, 22],
341
+ [0, 134, 26],
342
+ [1, 145, 26],
343
+ [1, 156, 14]
344
+ ];
345
+ const code = [[
346
+ [112, 14, "awg-syntax-blue"],
347
+ [130, 30, "awg-syntax-yellow"],
348
+ [164, 8, "awg-ink-subtle"]
349
+ ], [
350
+ [120, 12, "awg-syntax-blue"],
351
+ [136, 20, "awg-ink-medium"],
352
+ [160, 6, "awg-ink-subtle"],
353
+ [170, 26, "awg-syntax-orange"]
354
+ ], [
355
+ [120, 10, "awg-syntax-blue"],
356
+ [134, 18, "awg-ink-medium"],
357
+ [156, 22, "awg-syntax-yellow"]
358
+ ], [[128, 26, "awg-syntax-yellow"], [158, 16, "awg-syntax-orange"]], [[120, 6, "awg-ink-subtle"]], [[120, 14, "awg-syntax-blue"], [138, 28, "awg-ink-medium"]], [[112, 6, "awg-ink-subtle"]], [], [
359
+ [112, 14, "awg-syntax-blue"],
360
+ [130, 24, "awg-syntax-yellow"],
361
+ [158, 8, "awg-ink-subtle"]
362
+ ], [[120, 22, "awg-ink-medium"], [146, 30, "awg-syntax-orange"]], [[112, 6, "awg-ink-subtle"]]];
363
+ const cursorLine = 5;
364
+ return windowFrame(ids, x, y, 300, 180, 24, {
365
+ x: 105.5,
366
+ y: 6.5,
367
+ width: 89,
368
+ height: 11
369
+ }, false, folder("blue", 136, 8.5), bar("awg-ink-medium", 149, 10, 16, 3),
370
+ rect("awg-sidebar", 0, 25, 24, 155), rect("awg-ink-full", 0, 33, 2, 12), rect("awg-icon-active", 7.5, 33.5, 9, 9, 2), rect("awg-icon", 7.5, 53.5, 9, 9, 2), rect("awg-icon", 7.5, 73.5, 9, 9, 2), rect("awg-divider", 24, 25, 1, 155),
371
+ rect("awg-sidebar", 25, 25, 67, 155), folder("blue", 32, 32), bar("awg-ink-medium", 45, 33.5, 30), rect("awg-row-selected", 25, 64.5, 67, 11), ...tree.flatMap(([indent, rowY, width]) => [rect(
372
+ indent ? "awg-ink-faint" : "awg-ink-subtle",
373
+ 32 + 8 * indent,
374
+ rowY - 0.5,
375
+ 5,
376
+ 5,
377
+ 1
378
+ ), bar("awg-ink-subtle", 41 + 8 * indent, rowY, width)]), rect("awg-divider", 92, 25, 1, 155),
379
+ rect("awg-titlebar", 93, 25, 131, 16), rect("awg-editor", 93, 25, 60, 16), rect("awg-accent", 93, 25, 60, 1), rect("awg-syntax-blue", 99, 30.5, 5, 5, 1), bar("awg-ink-strong", 108, 31, 32), rect("awg-surface-faint", 93, 50 + 11 * cursorLine - 3.5, 131, 11), ...code.flatMap(
380
+ (tokens, line) => [bar("awg-ink-faint", 99, 50.5 + 11 * line, 6, 3), ...tokens.map(
381
+ ([tokenX, width, className]) => bar(className, tokenX, 50 + 11 * line, width)
382
+ )]
383
+ ), rect("awg-ink-full", 168, 50 + 11 * cursorLine - 2.5, 1.5, 9), rect("awg-divider", 224, 25, 1, 155),
384
+ rect("awg-sidebar", 225, 25, 75, 155), bar("awg-ink-medium", 232, 33.5, 28), rect("awg-surface-subtle awg-radius-medium", 244, 46, 48, 22, 6), bar("awg-ink-medium", 250, 51, 34, 3), bar("awg-ink-medium", 250, 58, 24, 3), svg("circle", "awg-avatar", {
385
+ cx: 235,
386
+ cy: 79,
387
+ r: 3
388
+ }), bar("awg-ink-subtle", 243, 77, 46, 3), bar("awg-ink-subtle", 243, 84, 42, 3), bar("awg-ink-subtle", 243, 91, 30, 3), rect("awg-input awg-radius-medium", 231.5, 148.5, 62, 23, 6), bar("awg-ink-faint", 238, 158.5, 28, 3));
389
+ }
390
+ function agentsWindow(ids, x, y, shadow, projects) {
391
+ return windowFrame(ids, x, y, 300, 180, 24, {
392
+ x: 105.5,
393
+ y: 6.5,
394
+ width: 89,
395
+ height: 11
396
+ }, shadow, bar("awg-ink-medium", 132, 10, 36, 3),
397
+ rect("awg-sidebar", 0, 25, 124, 155), rect("awg-divider", 124, 25, 1, 155), rect("awg-button awg-radius-small", 8, 33, 50, 14, 4), svg("path", "awg-button-icon", {
398
+ d: "M13.5 40h5M16 37.5v5"
399
+ }), bar("awg-button-label", 23, 38.5, 27, 3), ...sessionsList(projects),
400
+ bar("awg-ink-strong", 134, 33.5, 70), rect("awg-surface-subtle awg-radius-medium", 190, 46, 102, 22, 6), bar("awg-ink-medium", 196, 51, 80, 3), bar("awg-ink-medium", 196, 58, 56, 3), ...[["done", 80, 70], ["done", 92, 56], ["working", 104, 64]].flatMap(([state, cy, width]) => [
401
+ ...agentStateIcon(state, 139, cy, true),
402
+ bar("awg-ink-subtle", 148, cy - 1.5, width, 3)
403
+ ]),
404
+ rect("awg-input awg-radius-medium", 134.5, 114.5, 157, 29, 6), rect("awg-ink-medium", 142, 121, 5, 6, 1), bar("awg-ink-medium", 152, 122.5, 56, 3), bar("awg-diff-added", 254, 122.5, 14, 3), bar("awg-diff-removed", 272, 122.5, 8, 3), rect("awg-ink-medium", 142, 131, 5, 6, 1), bar("awg-ink-medium", 152, 132.5, 44, 3), bar("awg-diff-added", 254, 132.5, 10, 3), bar("awg-diff-removed", 272, 132.5, 4, 3), rect("awg-input awg-radius-medium", 134.5, 152.5, 157, 19, 6), bar("awg-ink-faint", 142, 160.5, 48, 3));
405
+ }
406
+ function projectEditorWindow(ids, x, y, color, state) {
407
+ const tree = [
408
+ [22, 28, 28],
409
+ [28, 38, 16],
410
+ [28, 48, 20],
411
+ [22, 58, 18],
412
+ [28, 68, 18],
413
+ [28, 78, 14]
414
+ ];
415
+ const code = [
416
+ [68, 28, 10, "awg-syntax-blue"],
417
+ [81, 28, 22, "awg-syntax-yellow"],
418
+ [74, 38, 8, "awg-syntax-blue"],
419
+ [85, 38, 14, "awg-ink-medium"],
420
+ [102, 38, 20, "awg-syntax-orange"],
421
+ [74, 48, 18, "awg-syntax-yellow"],
422
+ [95, 48, 12, "awg-syntax-orange"],
423
+ [68, 58, 4, "awg-ink-medium"],
424
+ [68, 78, 10, "awg-syntax-blue"],
425
+ [81, 78, 18, "awg-syntax-yellow"],
426
+ [74, 88, 16, "awg-ink-medium"],
427
+ [93, 88, 22, "awg-syntax-orange"],
428
+ [68, 98, 4, "awg-ink-medium"]
429
+ ];
430
+ return windowFrame(ids, x, y, 188, 112, 20, {
431
+ x: 56.5,
432
+ y: 5.5,
433
+ width: 75,
434
+ height: 10
435
+ }, true, folder(color, 64, 7), bar("awg-ink-medium", 77, 9, 26, 3), ...agentStateIcon(state, 118, 10.5, true), rect("awg-sidebar", 0, 21, 16, 91), rect("awg-icon-active", 4.5, 27.5, 7, 7, 1.5), rect("awg-icon", 4.5, 41.5, 7, 7, 1.5), rect("awg-sidebar", 16, 21, 44, 91), rect("awg-divider", 60, 21, 1, 91), ...tree.map(([barX, barY, width]) => bar("awg-ink-faint", barX, barY, width, 3)), ...code.map(([barX, barY, width, className]) => bar(className, barX, barY, width, 3)), rect("awg-divider", 148, 21, 1, 91), rect("awg-sidebar", 149, 21, 39, 91), rect("awg-surface-subtle awg-radius-small", 155, 28, 27, 14, 4), bar("awg-ink-subtle", 155, 50, 26, 3), bar("awg-ink-subtle", 155, 57, 22, 3), bar("awg-ink-subtle", 155, 64, 16, 3));
436
+ }
437
+
438
+ export { AgentsWindowGraphic, renderAgentsWindowGraphic, resolveAgentsWindowGraphicDesign };