codebay 0.8.0 → 0.9.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 (79) hide show
  1. package/.mochi/import-css/xterm-1yy1hf1g.css +252 -0
  2. package/.mochi/manifest.json +330 -211
  3. package/.mochi/svelte-client/HydratableIsland-k6q8esj4.js +1 -0
  4. package/.mochi/svelte-client/_hydrate-AppShell_2rtnxn6pgp2rh-sg96rp17.js +2 -0
  5. package/.mochi/svelte-client/_hydrate-AvatarsView_257s9yq1wwr4f-92hepzby.js +14 -0
  6. package/.mochi/svelte-client/_hydrate-InstanceView_2ma45l9bybfhl-p3f649gk.js +1 -0
  7. package/.mochi/svelte-client/_hydrate-SettingsView_8hmarwmf8onq-dzmgmv78.js +29 -0
  8. package/.mochi/svelte-client/chunk-2j95sv83.js +1 -0
  9. package/.mochi/svelte-client/chunk-6rbs0mhx.js +1 -0
  10. package/.mochi/svelte-client/chunk-7wkvn2vx.js +2 -0
  11. package/.mochi/svelte-client/chunk-a2psjmrm.js +2 -0
  12. package/.mochi/svelte-client/chunk-m497q88s.js +2 -0
  13. package/.mochi/svelte-client/{chunk-fqg2qzj8.js → chunk-m4fzsd5b.js} +1 -1
  14. package/.mochi/svelte-client/chunk-mpv3qx28.js +36 -0
  15. package/.mochi/svelte-client/chunk-rs41by6w.js +2 -0
  16. package/.mochi/svelte-client/{chunk-qj7zy2d9.js → chunk-v65n8th6.js} +4 -4
  17. package/.mochi/svelte-compile/{App-6rcf0d74.server.js → App-7vjcp38v.server.js} +368 -37
  18. package/.mochi/svelte-compile/{Avatars-pzyz0tv3.server.js → Avatars-e2cfc95t.server.js} +130 -25
  19. package/.mochi/svelte-compile/{ClientStats-z3tn9ad6.server.js → ClientStats-4cphmrnp.server.js} +1 -1
  20. package/.mochi/svelte-compile/{DefaultError-wh77vebf.server.js → DefaultError-je52k17d.server.js} +1 -1
  21. package/.mochi/svelte-compile/{Instance-49ksrp11.server.js → Instance-h78n2dsv.server.js} +16 -13
  22. package/.mochi/svelte-compile/{Settings-sz5d6qj7.server.js → Settings-tav2asn7.server.js} +153 -127
  23. package/.mochi/svelte-compile/{chunk-fpe16ywq.js → chunk-60mpagr9.js} +17 -7
  24. package/.mochi/svelte-compile/chunk-9nqc2r0y.js +9706 -0
  25. package/.mochi/svelte-compile/{chunk-6ghzacpg.js → chunk-bpqwf1nw.js} +36 -4
  26. package/.mochi/svelte-compile/chunk-jx6h1xzp.js +20 -0
  27. package/.mochi/svelte-compile/{chunk-q8rbesaw.js → chunk-m8ygpyhr.js} +5 -4
  28. package/.mochi/svelte-compile/chunk-rtdne1m8.js +31 -0
  29. package/.mochi/svelte-compile/{chunk-we0ggtws.js → chunk-xpt1a7jm.js} +2 -1
  30. package/.mochi/svelte-css/AvatarEditor-2mdq8ss346drw.css +1 -0
  31. package/.mochi/svelte-css/{AvatarsView-2ughbzc26luyb.css → AvatarsView-2llo48w0wt0xn.css} +1 -1
  32. package/.mochi/svelte-css/FolderBrowser-2pxp9z1o7zixk.css +1 -0
  33. package/.mochi/svelte-css/{IdeBar-2qoqi2ya9zdn3.css → IdeBar-10xodudcx57qr.css} +1 -1
  34. package/.mochi/svelte-css/{SettingsView-3uycxa8z548m4.css → SettingsView-2qfauz68axro1.css} +1 -1
  35. package/.mochi/svelte-css/TerminalPane-3bwgk6ulzq6b3.css +1 -0
  36. package/.mochi/svelte-css/TerminalSplit-2416xfuln89a3.css +1 -0
  37. package/migrations/0005_instance_mode.sql +1 -0
  38. package/migrations/0006_terminal_split.sql +1 -0
  39. package/package.json +3 -1
  40. package/src/avatars/serialize.ts +35 -6
  41. package/src/components/AppShell.svelte +46 -8
  42. package/src/components/Avatar.svelte +3 -2
  43. package/src/components/AvatarEditor.svelte +96 -19
  44. package/src/components/AvatarsView.svelte +0 -0
  45. package/src/components/DashboardView.svelte +22 -7
  46. package/src/components/FolderBrowser.svelte +88 -8
  47. package/src/components/HealthBox.svelte +12 -5
  48. package/src/components/IdeBar.svelte +10 -0
  49. package/src/components/InstanceCard.svelte +3 -1
  50. package/src/components/InstanceView.svelte +1 -0
  51. package/src/components/SettingsView.svelte +108 -0
  52. package/src/components/TerminalPane.svelte +274 -0
  53. package/src/components/TerminalSplit.svelte +154 -0
  54. package/src/container-injections/claude-code-ide-extension.ts +2 -0
  55. package/src/container-injections/ttyd.ts +49 -0
  56. package/src/lib/config.server.ts +3 -0
  57. package/src/lib/db.server.ts +14 -4
  58. package/src/lib/devcontainer.server.ts +136 -22
  59. package/src/lib/health.server.ts +1 -1
  60. package/src/lib/injections.server.ts +15 -5
  61. package/src/lib/instances.server.ts +64 -10
  62. package/src/lib/proxy.server.ts +87 -11
  63. package/src/pages/App.svelte +5 -3
  64. package/src/pages/Settings.svelte +4 -0
  65. package/src/routes.ts +55 -6
  66. package/src/types.ts +18 -0
  67. package/.mochi/svelte-client/HydratableIsland-qyjx1d98.js +0 -1
  68. package/.mochi/svelte-client/_hydrate-AppShell_2rtnxn6pgp2rh-fkna7bj2.js +0 -2
  69. package/.mochi/svelte-client/_hydrate-AvatarsView_257s9yq1wwr4f-89wtkb86.js +0 -13
  70. package/.mochi/svelte-client/_hydrate-InstanceView_2ma45l9bybfhl-eamnbyqk.js +0 -1
  71. package/.mochi/svelte-client/_hydrate-SettingsView_8hmarwmf8onq-kdra4mcb.js +0 -28
  72. package/.mochi/svelte-client/chunk-330mrspw.js +0 -2
  73. package/.mochi/svelte-client/chunk-4jgkak13.js +0 -1
  74. package/.mochi/svelte-client/chunk-k5m4kt20.js +0 -2
  75. package/.mochi/svelte-client/chunk-rpdphch7.js +0 -2
  76. package/.mochi/svelte-compile/chunk-bacb4b0r.js +0 -14
  77. package/.mochi/svelte-css/AvatarEditor-2ewwtejaml4e2.css +0 -1
  78. package/.mochi/svelte-css/FolderBrowser-1x428zb3f2kti.css +0 -1
  79. /package/.mochi/svelte-compile/{chunk-btmcxhqy.js → chunk-brjv9pyd.js} +0 -0
@@ -1,14 +1,16 @@
1
1
  // @bun
2
2
  import {
3
+ Layout_template,
3
4
  Plus,
5
+ Terminal,
4
6
  playChime,
5
7
  setSoundEnabled,
6
8
  soundEnabled,
7
9
  unlockAudio
8
- } from "./chunk-6ghzacpg.js";
10
+ } from "./chunk-bpqwf1nw.js";
9
11
  import {
10
- X
11
- } from "./chunk-bacb4b0r.js";
12
+ Rotate_ccw
13
+ } from "./chunk-jx6h1xzp.js";
12
14
  import {
13
15
  AppBar,
14
16
  Avatar,
@@ -16,22 +18,23 @@ import {
16
18
  Toaster,
17
19
  avatars,
18
20
  findAvatar
19
- } from "./chunk-q8rbesaw.js";
21
+ } from "./chunk-m8ygpyhr.js";
20
22
  import {
21
23
  HydratableBoundary,
22
24
  Icon,
25
+ X,
23
26
  cookies,
24
27
  emitIslandProps
25
- } from "./chunk-fpe16ywq.js";
26
- import"./chunk-we0ggtws.js";
28
+ } from "./chunk-60mpagr9.js";
29
+ import"./chunk-xpt1a7jm.js";
27
30
 
28
31
  // src/pages/Settings.svelte
29
32
  import"svelte/internal/flags/async";
30
- import * as $21 from "svelte/internal/server";
33
+ import * as $20 from "svelte/internal/server";
31
34
 
32
35
  // src/components/SettingsView.svelte
33
36
  import"svelte/internal/flags/async";
34
- import * as $20 from "svelte/internal/server";
37
+ import * as $19 from "svelte/internal/server";
35
38
 
36
39
  // node_modules/@lucide/svelte/dist/icons/container.svelte
37
40
  import"svelte/internal/flags/async";
@@ -63,23 +66,9 @@ function Power($$renderer, $$props) {
63
66
  ];
64
67
  Icon($$renderer, $2.spread_props([{ name: "power" }, props, { iconNode }]));
65
68
  }
66
- // node_modules/@lucide/svelte/dist/icons/rotate-ccw.svelte
67
- import"svelte/internal/flags/async";
68
- import * as $3 from "svelte/internal/server";
69
- function Rotate_ccw($$renderer, $$props) {
70
- let { $$slots, $$events, ...props } = $$props;
71
- const iconNode = [
72
- [
73
- "path",
74
- { d: "M3 12a9 9 0 1 0 9-9 9.75 9.75 0 0 0-6.74 2.74L3 8" }
75
- ],
76
- ["path", { d: "M3 3v5h5" }]
77
- ];
78
- Icon($$renderer, $3.spread_props([{ name: "rotate-ccw" }, props, { iconNode }]));
79
- }
80
69
  // node_modules/@lucide/svelte/dist/icons/volume-2.svelte
81
70
  import"svelte/internal/flags/async";
82
- import * as $4 from "svelte/internal/server";
71
+ import * as $3 from "svelte/internal/server";
83
72
  function Volume_2($$renderer, $$props) {
84
73
  let { $$slots, $$events, ...props } = $$props;
85
74
  const iconNode = [
@@ -92,11 +81,11 @@ function Volume_2($$renderer, $$props) {
92
81
  ["path", { d: "M16 9a5 5 0 0 1 0 6" }],
93
82
  ["path", { d: "M19.364 18.364a9 9 0 0 0 0-12.728" }]
94
83
  ];
95
- Icon($$renderer, $4.spread_props([{ name: "volume-2" }, props, { iconNode }]));
84
+ Icon($$renderer, $3.spread_props([{ name: "volume-2" }, props, { iconNode }]));
96
85
  }
97
86
  // node_modules/@lucide/svelte/dist/icons/paw-print.svelte
98
87
  import"svelte/internal/flags/async";
99
- import * as $5 from "svelte/internal/server";
88
+ import * as $4 from "svelte/internal/server";
100
89
  function Paw_print($$renderer, $$props) {
101
90
  let { $$slots, $$events, ...props } = $$props;
102
91
  const iconNode = [
@@ -110,11 +99,11 @@ function Paw_print($$renderer, $$props) {
110
99
  }
111
100
  ]
112
101
  ];
113
- Icon($$renderer, $5.spread_props([{ name: "paw-print" }, props, { iconNode }]));
102
+ Icon($$renderer, $4.spread_props([{ name: "paw-print" }, props, { iconNode }]));
114
103
  }
115
104
  // node_modules/@lucide/svelte/dist/icons/sun-moon.svelte
116
105
  import"svelte/internal/flags/async";
117
- import * as $6 from "svelte/internal/server";
106
+ import * as $5 from "svelte/internal/server";
118
107
  function Sun_moon($$renderer, $$props) {
119
108
  let { $$slots, $$events, ...props } = $$props;
120
109
  const iconNode = [
@@ -129,15 +118,15 @@ function Sun_moon($$renderer, $$props) {
129
118
  ["path", { d: "m19 5-1.256 1.256" }],
130
119
  ["path", { d: "M20 12h2" }]
131
120
  ];
132
- Icon($$renderer, $6.spread_props([{ name: "sun-moon" }, props, { iconNode }]));
121
+ Icon($$renderer, $5.spread_props([{ name: "sun-moon" }, props, { iconNode }]));
133
122
  }
134
123
  // src/components/ThemePicker.svelte
135
124
  import"svelte/internal/flags/async";
136
- import * as $10 from "svelte/internal/server";
125
+ import * as $9 from "svelte/internal/server";
137
126
 
138
127
  // node_modules/@lucide/svelte/dist/icons/sun.svelte
139
128
  import"svelte/internal/flags/async";
140
- import * as $7 from "svelte/internal/server";
129
+ import * as $6 from "svelte/internal/server";
141
130
  function Sun($$renderer, $$props) {
142
131
  let { $$slots, $$events, ...props } = $$props;
143
132
  const iconNode = [
@@ -151,11 +140,11 @@ function Sun($$renderer, $$props) {
151
140
  ["path", { d: "m6.34 17.66-1.41 1.41" }],
152
141
  ["path", { d: "m19.07 4.93-1.41 1.41" }]
153
142
  ];
154
- Icon($$renderer, $7.spread_props([{ name: "sun" }, props, { iconNode }]));
143
+ Icon($$renderer, $6.spread_props([{ name: "sun" }, props, { iconNode }]));
155
144
  }
156
145
  // node_modules/@lucide/svelte/dist/icons/moon.svelte
157
146
  import"svelte/internal/flags/async";
158
- import * as $8 from "svelte/internal/server";
147
+ import * as $7 from "svelte/internal/server";
159
148
  function Moon($$renderer, $$props) {
160
149
  let { $$slots, $$events, ...props } = $$props;
161
150
  const iconNode = [
@@ -166,11 +155,11 @@ function Moon($$renderer, $$props) {
166
155
  }
167
156
  ]
168
157
  ];
169
- Icon($$renderer, $8.spread_props([{ name: "moon" }, props, { iconNode }]));
158
+ Icon($$renderer, $7.spread_props([{ name: "moon" }, props, { iconNode }]));
170
159
  }
171
160
  // node_modules/@lucide/svelte/dist/icons/monitor.svelte
172
161
  import"svelte/internal/flags/async";
173
- import * as $9 from "svelte/internal/server";
162
+ import * as $8 from "svelte/internal/server";
174
163
  function Monitor($$renderer, $$props) {
175
164
  let { $$slots, $$events, ...props } = $$props;
176
165
  const iconNode = [
@@ -181,7 +170,7 @@ function Monitor($$renderer, $$props) {
181
170
  ["line", { x1: "8", x2: "16", y1: "21", y2: "21" }],
182
171
  ["line", { x1: "12", x2: "12", y1: "17", y2: "21" }]
183
172
  ];
184
- Icon($$renderer, $9.spread_props([{ name: "monitor" }, props, { iconNode }]));
173
+ Icon($$renderer, $8.spread_props([{ name: "monitor" }, props, { iconNode }]));
185
174
  }
186
175
  // src/theme.ts
187
176
  var THEME_KEY = "theme";
@@ -214,10 +203,10 @@ function ThemePicker($$renderer, $$props) {
214
203
  applyTheme(value);
215
204
  }
216
205
  $$renderer2.push(`<div class="picker svelte-3gcwuj" role="radiogroup" aria-label="Theme"><!--[-->`);
217
- const each_array = $10.ensure_array_like(options);
206
+ const each_array = $9.ensure_array_like(options);
218
207
  for (let $$index = 0, $$length = each_array.length;$$index < $$length; $$index++) {
219
208
  let { value, label, icon: Icon2 } = each_array[$$index];
220
- $$renderer2.push(`<button type="button"${$10.attr_class("segment svelte-3gcwuj", undefined, { active: theme === value })} role="radio"${$10.attr("aria-checked", theme === value)}>`);
209
+ $$renderer2.push(`<button type="button"${$9.attr_class("segment svelte-3gcwuj", undefined, { active: theme === value })} role="radio"${$9.attr("aria-checked", theme === value)}>`);
221
210
  if (Icon2) {
222
211
  $$renderer2.push("<!--[-->");
223
212
  Icon2($$renderer2, { size: 13 });
@@ -226,7 +215,7 @@ function ThemePicker($$renderer, $$props) {
226
215
  $$renderer2.push("<!--[!-->");
227
216
  $$renderer2.push("<!--]-->");
228
217
  }
229
- $$renderer2.push(` ${$10.escape(label)}</button>`);
218
+ $$renderer2.push(` ${$9.escape(label)}</button>`);
230
219
  }
231
220
  $$renderer2.push(`<!--]--></div>`);
232
221
  });
@@ -234,7 +223,7 @@ function ThemePicker($$renderer, $$props) {
234
223
 
235
224
  // node_modules/@lucide/svelte/dist/icons/layers.svelte
236
225
  import"svelte/internal/flags/async";
237
- import * as $11 from "svelte/internal/server";
226
+ import * as $10 from "svelte/internal/server";
238
227
  function Layers($$renderer, $$props) {
239
228
  let { $$slots, $$events, ...props } = $$props;
240
229
  const iconNode = [
@@ -257,11 +246,11 @@ function Layers($$renderer, $$props) {
257
246
  }
258
247
  ]
259
248
  ];
260
- Icon($$renderer, $11.spread_props([{ name: "layers" }, props, { iconNode }]));
249
+ Icon($$renderer, $10.spread_props([{ name: "layers" }, props, { iconNode }]));
261
250
  }
262
251
  // node_modules/@lucide/svelte/dist/icons/folder-minus.svelte
263
252
  import"svelte/internal/flags/async";
264
- import * as $12 from "svelte/internal/server";
253
+ import * as $11 from "svelte/internal/server";
265
254
  function Folder_minus($$renderer, $$props) {
266
255
  let { $$slots, $$events, ...props } = $$props;
267
256
  const iconNode = [
@@ -273,11 +262,11 @@ function Folder_minus($$renderer, $$props) {
273
262
  }
274
263
  ]
275
264
  ];
276
- Icon($$renderer, $12.spread_props([{ name: "folder-minus" }, props, { iconNode }]));
265
+ Icon($$renderer, $11.spread_props([{ name: "folder-minus" }, props, { iconNode }]));
277
266
  }
278
267
  // node_modules/@lucide/svelte/dist/icons/trash-2.svelte
279
268
  import"svelte/internal/flags/async";
280
- import * as $13 from "svelte/internal/server";
269
+ import * as $12 from "svelte/internal/server";
281
270
  function Trash_2($$renderer, $$props) {
282
271
  let { $$slots, $$events, ...props } = $$props;
283
272
  const iconNode = [
@@ -287,11 +276,11 @@ function Trash_2($$renderer, $$props) {
287
276
  ["path", { d: "M3 6h18" }],
288
277
  ["path", { d: "M8 6V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v2" }]
289
278
  ];
290
- Icon($$renderer, $13.spread_props([{ name: "trash-2" }, props, { iconNode }]));
279
+ Icon($$renderer, $12.spread_props([{ name: "trash-2" }, props, { iconNode }]));
291
280
  }
292
281
  // node_modules/@lucide/svelte/dist/icons/hammer.svelte
293
282
  import"svelte/internal/flags/async";
294
- import * as $14 from "svelte/internal/server";
283
+ import * as $13 from "svelte/internal/server";
295
284
  function Hammer($$renderer, $$props) {
296
285
  let { $$slots, $$events, ...props } = $$props;
297
286
  const iconNode = [
@@ -304,11 +293,11 @@ function Hammer($$renderer, $$props) {
304
293
  }
305
294
  ]
306
295
  ];
307
- Icon($$renderer, $14.spread_props([{ name: "hammer" }, props, { iconNode }]));
296
+ Icon($$renderer, $13.spread_props([{ name: "hammer" }, props, { iconNode }]));
308
297
  }
309
298
  // node_modules/@lucide/svelte/dist/icons/key-round.svelte
310
299
  import"svelte/internal/flags/async";
311
- import * as $15 from "svelte/internal/server";
300
+ import * as $14 from "svelte/internal/server";
312
301
  function Key_round($$renderer, $$props) {
313
302
  let { $$slots, $$events, ...props } = $$props;
314
303
  const iconNode = [
@@ -323,11 +312,11 @@ function Key_round($$renderer, $$props) {
323
312
  { cx: "16.5", cy: "7.5", r: ".5", fill: "currentColor" }
324
313
  ]
325
314
  ];
326
- Icon($$renderer, $15.spread_props([{ name: "key-round" }, props, { iconNode }]));
315
+ Icon($$renderer, $14.spread_props([{ name: "key-round" }, props, { iconNode }]));
327
316
  }
328
317
  // node_modules/@lucide/svelte/dist/icons/user-cog.svelte
329
318
  import"svelte/internal/flags/async";
330
- import * as $16 from "svelte/internal/server";
319
+ import * as $15 from "svelte/internal/server";
331
320
  function User_cog($$renderer, $$props) {
332
321
  let { $$slots, $$events, ...props } = $$props;
333
322
  const iconNode = [
@@ -343,11 +332,11 @@ function User_cog($$renderer, $$props) {
343
332
  ["circle", { cx: "18", cy: "15", r: "3" }],
344
333
  ["circle", { cx: "9", cy: "7", r: "4" }]
345
334
  ];
346
- Icon($$renderer, $16.spread_props([{ name: "user-cog" }, props, { iconNode }]));
335
+ Icon($$renderer, $15.spread_props([{ name: "user-cog" }, props, { iconNode }]));
347
336
  }
348
337
  // node_modules/@lucide/svelte/dist/icons/cpu.svelte
349
338
  import"svelte/internal/flags/async";
350
- import * as $17 from "svelte/internal/server";
339
+ import * as $16 from "svelte/internal/server";
351
340
  function Cpu($$renderer, $$props) {
352
341
  let { $$slots, $$events, ...props } = $$props;
353
342
  const iconNode = [
@@ -369,11 +358,11 @@ function Cpu($$renderer, $$props) {
369
358
  ],
370
359
  ["rect", { x: "8", y: "8", width: "8", height: "8", rx: "1" }]
371
360
  ];
372
- Icon($$renderer, $17.spread_props([{ name: "cpu" }, props, { iconNode }]));
361
+ Icon($$renderer, $16.spread_props([{ name: "cpu" }, props, { iconNode }]));
373
362
  }
374
363
  // node_modules/@lucide/svelte/dist/icons/variable.svelte
375
364
  import"svelte/internal/flags/async";
376
- import * as $18 from "svelte/internal/server";
365
+ import * as $17 from "svelte/internal/server";
377
366
  function Variable($$renderer, $$props) {
378
367
  let { $$slots, $$events, ...props } = $$props;
379
368
  const iconNode = [
@@ -382,14 +371,14 @@ function Variable($$renderer, $$props) {
382
371
  ["line", { x1: "15", x2: "9", y1: "9", y2: "15" }],
383
372
  ["line", { x1: "9", x2: "15", y1: "9", y2: "15" }]
384
373
  ];
385
- Icon($$renderer, $18.spread_props([{ name: "variable" }, props, { iconNode }]));
374
+ Icon($$renderer, $17.spread_props([{ name: "variable" }, props, { iconNode }]));
386
375
  }
387
376
  // src/components/SettingsView.svelte
388
377
  import { flushSync } from "svelte";
389
378
 
390
379
  // src/components/CoinButton.svelte
391
380
  import"svelte/internal/flags/async";
392
- import * as $19 from "svelte/internal/server";
381
+ import * as $18 from "svelte/internal/server";
393
382
  function CoinButton($$renderer, $$props) {
394
383
  let { href = "/avatars" } = $$props;
395
384
  const coinArt = {
@@ -405,7 +394,7 @@ function CoinButton($$renderer, $$props) {
405
394
  "..####.."
406
395
  ]
407
396
  };
408
- $$renderer.push(`<div class="coin-row svelte-1ioj7vz"><span class="pixel-line svelte-1ioj7vz" aria-hidden="true"></span> <a class="coin-btn svelte-1ioj7vz"${$19.attr("href", href)} aria-label="Draw your own avatar" title="Draw your own avatar"><span class="new svelte-1ioj7vz" aria-hidden="true">New</span> <span class="coin svelte-1ioj7vz" aria-hidden="true">`);
397
+ $$renderer.push(`<div class="coin-row svelte-1ioj7vz"><span class="pixel-line svelte-1ioj7vz" aria-hidden="true"></span> <a class="coin-btn svelte-1ioj7vz"${$18.attr("href", href)} aria-label="Draw your own avatar" title="Draw your own avatar"><span class="new svelte-1ioj7vz" aria-hidden="true">New</span> <span class="coin svelte-1ioj7vz" aria-hidden="true">`);
409
398
  Avatar($$renderer, { art: coinArt, name: "coin", scale: 3 });
410
399
  $$renderer.push(`<!----></span></a> <span class="pixel-line svelte-1ioj7vz" aria-hidden="true"></span></div>`);
411
400
  }
@@ -415,6 +404,7 @@ function SettingsView($$renderer, $$props) {
415
404
  $$renderer.component(($$renderer2) => {
416
405
  let {
417
406
  pet,
407
+ defaultMode,
418
408
  defaultImage,
419
409
  builtinImage,
420
410
  disableBuildCache,
@@ -490,6 +480,25 @@ function SettingsView($$renderer, $$props) {
490
480
  }
491
481
  };
492
482
  }
483
+ let modeChoice = defaultMode;
484
+ let savingMode = false;
485
+ let modeError = null;
486
+ let modeFormEl;
487
+ const defaultModeOpts = saveOpts({
488
+ setSaving: (v) => savingMode = v,
489
+ setError: (v) => modeError = v,
490
+ setMsg: () => {},
491
+ onSuccess: (data) => {
492
+ if (data?.mode)
493
+ modeChoice = data.mode;
494
+ }
495
+ });
496
+ function chooseMode(next) {
497
+ if (next === modeChoice)
498
+ return;
499
+ flushSync(() => modeChoice = next);
500
+ modeFormEl?.requestSubmit();
501
+ }
493
502
  let image = defaultImage;
494
503
  let savingImage = false;
495
504
  let imageError = null;
@@ -709,7 +718,7 @@ function SettingsView($$renderer, $$props) {
709
718
  manualModelsMsg = "Saved.";
710
719
  }
711
720
  });
712
- let litellmBlocker = $20.derived(() => manualTokens ? "Set tokens manually" : manualModelOverride ? "Override models manually" : null);
721
+ let litellmBlocker = $19.derived(() => manualTokens ? "Set tokens manually" : manualModelOverride ? "Override models manually" : null);
713
722
  let hostEnvVars = hostEnvVarsEnabled;
714
723
  let savingHostEnvToggle = false;
715
724
  let hostEnvToggleError = null;
@@ -822,17 +831,31 @@ function SettingsView($$renderer, $$props) {
822
831
  },
823
832
  $$slots: { default: true }
824
833
  });
825
- $$renderer2.push(`<!----> <main class="content svelte-1n6ht58"><section class="card svelte-1n6ht58"><form class="row image-row svelte-1n6ht58" method="POST" action="?/defaultImage"><div class="label svelte-1n6ht58">`);
834
+ $$renderer2.push(`<!----> <main class="content svelte-1n6ht58"><section class="card svelte-1n6ht58"><form class="row svelte-1n6ht58" method="POST" action="?/defaultMode"><div class="label svelte-1n6ht58">`);
835
+ Terminal($$renderer2, { size: 20 });
836
+ $$renderer2.push(`<!----> <div class="text svelte-1n6ht58"><div class="name svelte-1n6ht58">Default editor</div> <div class="desc svelte-1n6ht58">What new instances start in. <strong>Full IDE</strong> serves browser VS Code; <strong>Terminal</strong> is lighter \u2014 just Claude Code in a terminal, no code-server. You
837
+ can override this per instance when creating one.</div></div></div> <input type="hidden" name="mode"${$19.attr("value", modeChoice)}/> <div class="mode-toggle svelte-1n6ht58" role="group" aria-label="Default editor mode"><button type="button"${$19.attr_class("mode-btn svelte-1n6ht58", undefined, { active: modeChoice === "ide" })}${$19.attr("aria-pressed", modeChoice === "ide")}${$19.attr("disabled", savingMode, true)}>`);
838
+ Layout_template($$renderer2, { size: 15 });
839
+ $$renderer2.push(`<!----> Full IDE</button> <button type="button"${$19.attr_class("mode-btn svelte-1n6ht58", undefined, { active: modeChoice === "terminal" })}${$19.attr("aria-pressed", modeChoice === "terminal")}${$19.attr("disabled", savingMode, true)}>`);
840
+ Terminal($$renderer2, { size: 15 });
841
+ $$renderer2.push(`<!----> Terminal</button></div></form> `);
842
+ if (modeError) {
843
+ $$renderer2.push("<!--[0-->");
844
+ $$renderer2.push(`<div class="sub svelte-1n6ht58"><div class="msg error svelte-1n6ht58">${$19.escape(modeError)}</div></div>`);
845
+ } else {
846
+ $$renderer2.push("<!--[-1-->");
847
+ }
848
+ $$renderer2.push(`<!--]--></section> <section class="card svelte-1n6ht58"><form class="row image-row svelte-1n6ht58" method="POST" action="?/defaultImage"><div class="label svelte-1n6ht58">`);
826
849
  Container($$renderer2, { size: 20 });
827
850
  $$renderer2.push(`<!----> <div class="text svelte-1n6ht58"><div class="name svelte-1n6ht58">Default container image `);
828
851
  if (dockerArch) {
829
852
  $$renderer2.push("<!--[0-->");
830
- $$renderer2.push(`<span class="arch svelte-1n6ht58" title="Docker daemon architecture">${$20.escape(dockerArch)}</span>`);
853
+ $$renderer2.push(`<span class="arch svelte-1n6ht58" title="Docker daemon architecture">${$19.escape(dockerArch)}</span>`);
831
854
  } else {
832
855
  $$renderer2.push("<!--[-1-->");
833
856
  }
834
857
  $$renderer2.push(`<!--]--></div> <div class="desc svelte-1n6ht58">Used only when a project folder ships no devcontainer.json. Takes effect for instances
835
- created from now on.</div></div></div> <div class="image-controls svelte-1n6ht58"><input type="text" name="image" class="image-input svelte-1n6ht58"${$20.attr("value", image)} spellcheck="false" autocapitalize="off" autocorrect="off" placeholder="mcr.microsoft.com/devcontainers/base:ubuntu"/> `);
858
+ created from now on.</div></div></div> <div class="image-controls svelte-1n6ht58"><input type="text" name="image" class="image-input svelte-1n6ht58"${$19.attr("value", image)} spellcheck="false" autocapitalize="off" autocorrect="off" placeholder="mcr.microsoft.com/devcontainers/base:ubuntu"/> `);
836
859
  Button($$renderer2, {
837
860
  type: "submit",
838
861
  disabled: savingImage,
@@ -847,14 +870,14 @@ function SettingsView($$renderer, $$props) {
847
870
  icon: Rotate_ccw,
848
871
  disabled: savingImage,
849
872
  onclick: resetImage,
850
- title: `Reset to default (${$20.stringify(builtinImage)})`,
873
+ title: `Reset to default (${$19.stringify(builtinImage)})`,
851
874
  "aria-label": "Reset to default image"
852
875
  });
853
876
  $$renderer2.push(`<!----></div> <div class="desc tip svelte-1n6ht58">`);
854
877
  if (dockerArch) {
855
878
  $$renderer2.push("<!--[0-->");
856
- $$renderer2.push(`Your Docker daemon runs on <strong>${$20.escape(dockerArch)}</strong> \u2014 pick an image that publishes
857
- an <strong>${$20.escape(dockerArch)}</strong> manifest, or the pull will fail.`);
879
+ $$renderer2.push(`Your Docker daemon runs on <strong>${$19.escape(dockerArch)}</strong> \u2014 pick an image that publishes
880
+ an <strong>${$19.escape(dockerArch)}</strong> manifest, or the pull will fail.`);
858
881
  } else {
859
882
  $$renderer2.push("<!--[-1-->");
860
883
  $$renderer2.push(`Pick an image whose manifest covers your Docker daemon's architecture, or the pull will
@@ -863,7 +886,7 @@ function SettingsView($$renderer, $$props) {
863
886
  $$renderer2.push(`<!--]--></div> `);
864
887
  if (imageError) {
865
888
  $$renderer2.push("<!--[0-->");
866
- $$renderer2.push(`<div class="msg error svelte-1n6ht58">${$20.escape(imageError)}</div>`);
889
+ $$renderer2.push(`<div class="msg error svelte-1n6ht58">${$19.escape(imageError)}</div>`);
867
890
  } else if (imageSaved) {
868
891
  $$renderer2.push("<!--[1-->");
869
892
  $$renderer2.push(`<div class="msg ok svelte-1n6ht58">Saved.</div>`);
@@ -874,7 +897,7 @@ function SettingsView($$renderer, $$props) {
874
897
  Folder_minus($$renderer2, { size: 20 });
875
898
  $$renderer2.push(`<!----> <div class="text svelte-1n6ht58"><div class="name svelte-1n6ht58">Skip when copying a local folder</div> <div class="desc svelte-1n6ht58">Comma-separated folder/file names excluded when copying a local source folder into a
876
899
  new instance's workspace. Leave blank to copy everything. Only applies to local
877
- folders \u2014 cloning a Git repo URL is unaffected.</div></div></div> <div class="image-controls svelte-1n6ht58"><input type="text" name="patterns" class="image-input svelte-1n6ht58"${$20.attr("value", copyIgnore)} spellcheck="false" autocapitalize="off" autocorrect="off" placeholder="node_modules, .venv, dist"/> `);
900
+ folders \u2014 cloning a Git repo URL is unaffected.</div></div></div> <div class="image-controls svelte-1n6ht58"><input type="text" name="patterns" class="image-input svelte-1n6ht58"${$19.attr("value", copyIgnore)} spellcheck="false" autocapitalize="off" autocorrect="off" placeholder="node_modules, .venv, dist"/> `);
878
901
  Button($$renderer2, {
879
902
  type: "submit",
880
903
  disabled: savingCopyIgnore,
@@ -889,13 +912,13 @@ function SettingsView($$renderer, $$props) {
889
912
  icon: Rotate_ccw,
890
913
  disabled: savingCopyIgnore,
891
914
  onclick: resetCopyIgnore,
892
- title: `Reset to default (${$20.stringify(builtinCopyIgnore)})`,
915
+ title: `Reset to default (${$19.stringify(builtinCopyIgnore)})`,
893
916
  "aria-label": "Reset to default copy-ignore patterns"
894
917
  });
895
918
  $$renderer2.push(`<!----></div> `);
896
919
  if (copyIgnoreError) {
897
920
  $$renderer2.push("<!--[0-->");
898
- $$renderer2.push(`<div class="msg error svelte-1n6ht58">${$20.escape(copyIgnoreError)}</div>`);
921
+ $$renderer2.push(`<div class="msg error svelte-1n6ht58">${$19.escape(copyIgnoreError)}</div>`);
899
922
  } else if (copyIgnoreSaved) {
900
923
  $$renderer2.push("<!--[1-->");
901
924
  $$renderer2.push(`<div class="msg ok svelte-1n6ht58">Saved.</div>`);
@@ -906,10 +929,10 @@ function SettingsView($$renderer, $$props) {
906
929
  User_cog($$renderer2, { size: 20 });
907
930
  $$renderer2.push(`<!----> <div class="text svelte-1n6ht58"><div class="name svelte-1n6ht58">Override git identity</div> <div class="desc svelte-1n6ht58">Inject a name and email as <code class="svelte-1n6ht58">git config --global user.name/user.email</code> in every
908
931
  new container, taking precedence over the host's own git config. When off, each container
909
- falls back to the host's identity.</div></div></div> <label class="switch svelte-1n6ht58"><input type="checkbox" name="enabled"${$20.attr("checked", gitIdentity, true)}${$20.attr("disabled", savingGitToggle, true)} class="svelte-1n6ht58"/> <span class="track svelte-1n6ht58"><span class="thumb svelte-1n6ht58"></span></span></label></form> `);
932
+ falls back to the host's identity.</div></div></div> <label class="switch svelte-1n6ht58"><input type="checkbox" name="enabled"${$19.attr("checked", gitIdentity, true)}${$19.attr("disabled", savingGitToggle, true)} class="svelte-1n6ht58"/> <span class="track svelte-1n6ht58"><span class="thumb svelte-1n6ht58"></span></span></label></form> `);
910
933
  if (gitToggleError) {
911
934
  $$renderer2.push("<!--[0-->");
912
- $$renderer2.push(`<div class="sub svelte-1n6ht58"><div class="msg error svelte-1n6ht58">${$20.escape(gitToggleError)}</div></div>`);
935
+ $$renderer2.push(`<div class="sub svelte-1n6ht58"><div class="msg error svelte-1n6ht58">${$19.escape(gitToggleError)}</div></div>`);
913
936
  } else {
914
937
  $$renderer2.push("<!--[-1-->");
915
938
  }
@@ -917,7 +940,7 @@ function SettingsView($$renderer, $$props) {
917
940
  if (gitIdentity) {
918
941
  $$renderer2.push("<!--[0-->");
919
942
  $$renderer2.push(`<form class="row divided token-row svelte-1n6ht58" method="POST" action="?/gitIdentityOverride"><div class="label svelte-1n6ht58"><div class="text svelte-1n6ht58"><div class="name svelte-1n6ht58">Identity</div> <div class="desc svelte-1n6ht58">Both fields are required \u2014 leave either blank and the container falls back to the
920
- host's identity.</div></div></div> <div class="model-fields svelte-1n6ht58"><label class="model-row svelte-1n6ht58"><span class="model-label svelte-1n6ht58">Name</span> <input type="text" name="name" class="image-input svelte-1n6ht58"${$20.attr("value", gitName)} spellcheck="false" autocapitalize="off" autocorrect="off" placeholder="Jane Doe"/></label> <label class="model-row svelte-1n6ht58"><span class="model-label svelte-1n6ht58">Email</span> <input type="text" name="email" class="image-input svelte-1n6ht58"${$20.attr("value", gitEmail)} spellcheck="false" autocapitalize="off" autocorrect="off" placeholder="jane@example.com"/></label> <div class="model-save-row svelte-1n6ht58">`);
943
+ host's identity.</div></div></div> <div class="model-fields svelte-1n6ht58"><label class="model-row svelte-1n6ht58"><span class="model-label svelte-1n6ht58">Name</span> <input type="text" name="name" class="image-input svelte-1n6ht58"${$19.attr("value", gitName)} spellcheck="false" autocapitalize="off" autocorrect="off" placeholder="Jane Doe"/></label> <label class="model-row svelte-1n6ht58"><span class="model-label svelte-1n6ht58">Email</span> <input type="text" name="email" class="image-input svelte-1n6ht58"${$19.attr("value", gitEmail)} spellcheck="false" autocapitalize="off" autocorrect="off" placeholder="jane@example.com"/></label> <div class="model-save-row svelte-1n6ht58">`);
921
944
  Button($$renderer2, {
922
945
  type: "submit",
923
946
  disabled: savingGitIdentity,
@@ -929,7 +952,7 @@ function SettingsView($$renderer, $$props) {
929
952
  $$renderer2.push(`<!----></div></div> `);
930
953
  if (gitIdentityError) {
931
954
  $$renderer2.push("<!--[0-->");
932
- $$renderer2.push(`<div class="msg error svelte-1n6ht58">${$20.escape(gitIdentityError)}</div>`);
955
+ $$renderer2.push(`<div class="msg error svelte-1n6ht58">${$19.escape(gitIdentityError)}</div>`);
933
956
  } else if (gitIdentitySaved) {
934
957
  $$renderer2.push("<!--[1-->");
935
958
  $$renderer2.push(`<div class="msg ok svelte-1n6ht58">Saved.</div>`);
@@ -943,10 +966,10 @@ function SettingsView($$renderer, $$props) {
943
966
  $$renderer2.push(`<!--]--></section> <section class="card svelte-1n6ht58"><form class="row svelte-1n6ht58" method="POST" action="?/disableBuildCache"><div class="label svelte-1n6ht58">`);
944
967
  Layers($$renderer2, { size: 20 });
945
968
  $$renderer2.push(`<!----> <div class="text svelte-1n6ht58"><div class="name svelte-1n6ht58">Disable build cache</div> <div class="desc svelte-1n6ht58">Build every new container with <code class="svelte-1n6ht58">--build-no-cache</code>. Applies to first boot
946
- and rebuilds \u2014 slower, but always picks up upstream image/layer changes.</div></div></div> <label class="switch svelte-1n6ht58"><input type="checkbox" name="enabled"${$20.attr("checked", noCache, true)}${$20.attr("disabled", savingCache, true)} class="svelte-1n6ht58"/> <span class="track svelte-1n6ht58"><span class="thumb svelte-1n6ht58"></span></span></label></form> `);
969
+ and rebuilds \u2014 slower, but always picks up upstream image/layer changes.</div></div></div> <label class="switch svelte-1n6ht58"><input type="checkbox" name="enabled"${$19.attr("checked", noCache, true)}${$19.attr("disabled", savingCache, true)} class="svelte-1n6ht58"/> <span class="track svelte-1n6ht58"><span class="thumb svelte-1n6ht58"></span></span></label></form> `);
947
970
  if (cacheError) {
948
971
  $$renderer2.push("<!--[0-->");
949
- $$renderer2.push(`<div class="sub svelte-1n6ht58"><div class="msg error svelte-1n6ht58">${$20.escape(cacheError)}</div></div>`);
972
+ $$renderer2.push(`<div class="sub svelte-1n6ht58"><div class="msg error svelte-1n6ht58">${$19.escape(cacheError)}</div></div>`);
950
973
  } else {
951
974
  $$renderer2.push("<!--[-1-->");
952
975
  }
@@ -956,10 +979,10 @@ function SettingsView($$renderer, $$props) {
956
979
  remove pulled images.</div> `);
957
980
  if (clearError) {
958
981
  $$renderer2.push("<!--[0-->");
959
- $$renderer2.push(`<div class="msg error svelte-1n6ht58">${$20.escape(clearError)}</div>`);
982
+ $$renderer2.push(`<div class="msg error svelte-1n6ht58">${$19.escape(clearError)}</div>`);
960
983
  } else if (clearMsg) {
961
984
  $$renderer2.push("<!--[1-->");
962
- $$renderer2.push(`<div class="msg ok svelte-1n6ht58">${$20.escape(clearMsg)}</div>`);
985
+ $$renderer2.push(`<div class="msg ok svelte-1n6ht58">${$19.escape(clearMsg)}</div>`);
963
986
  } else {
964
987
  $$renderer2.push("<!--[-1-->");
965
988
  }
@@ -969,7 +992,7 @@ function SettingsView($$renderer, $$props) {
969
992
  icon: Trash_2,
970
993
  disabled: clearing,
971
994
  children: ($$renderer3) => {
972
- $$renderer3.push(`<!---->${$20.escape(clearing ? "Clearing\u2026" : "Clear cache")}`);
995
+ $$renderer3.push(`<!---->${$19.escape(clearing ? "Clearing\u2026" : "Clear cache")}`);
973
996
  },
974
997
  $$slots: { default: true }
975
998
  });
@@ -979,10 +1002,10 @@ function SettingsView($$renderer, $$props) {
979
1002
  layers. In-container edits are kept; stopped instances are left alone.</div> `);
980
1003
  if (rebuildError) {
981
1004
  $$renderer2.push("<!--[0-->");
982
- $$renderer2.push(`<div class="msg error svelte-1n6ht58">${$20.escape(rebuildError)}</div>`);
1005
+ $$renderer2.push(`<div class="msg error svelte-1n6ht58">${$19.escape(rebuildError)}</div>`);
983
1006
  } else if (rebuildMsg) {
984
1007
  $$renderer2.push("<!--[1-->");
985
- $$renderer2.push(`<div class="msg ok svelte-1n6ht58">${$20.escape(rebuildMsg)}</div>`);
1008
+ $$renderer2.push(`<div class="msg ok svelte-1n6ht58">${$19.escape(rebuildMsg)}</div>`);
986
1009
  } else {
987
1010
  $$renderer2.push("<!--[-1-->");
988
1011
  }
@@ -992,11 +1015,11 @@ function SettingsView($$renderer, $$props) {
992
1015
  icon: Hammer,
993
1016
  disabled: rebuilding,
994
1017
  children: ($$renderer3) => {
995
- $$renderer3.push(`<!---->${$20.escape(rebuilding ? "Starting\u2026" : "Rebuild all")}`);
1018
+ $$renderer3.push(`<!---->${$19.escape(rebuilding ? "Starting\u2026" : "Rebuild all")}`);
996
1019
  },
997
1020
  $$slots: { default: true }
998
1021
  });
999
- $$renderer2.push(`<!----></form></section> <section${$20.attr_class("card svelte-1n6ht58", undefined, { "disabled-card": customEndpoint })}><form class="row svelte-1n6ht58" method="POST" action="?/manualTokensToggle"><div class="label svelte-1n6ht58">`);
1022
+ $$renderer2.push(`<!----></form></section> <section${$19.attr_class("card svelte-1n6ht58", undefined, { "disabled-card": customEndpoint })}><form class="row svelte-1n6ht58" method="POST" action="?/manualTokensToggle"><div class="label svelte-1n6ht58">`);
1000
1023
  Key_round($$renderer2, { size: 20 });
1001
1024
  $$renderer2.push(`<!----> <div class="text svelte-1n6ht58"><div class="name svelte-1n6ht58">Set tokens manually `);
1002
1025
  if (customEndpoint) {
@@ -1017,10 +1040,10 @@ function SettingsView($$renderer, $$props) {
1017
1040
  token set here is injected into every new container and overrides host credential
1018
1041
  discovery.`);
1019
1042
  }
1020
- $$renderer2.push(`<!--]--></div></div></div> <label class="switch svelte-1n6ht58"><input type="checkbox" name="enabled"${$20.attr("checked", manualTokens, true)}${$20.attr("disabled", savingManualToggle || customEndpoint, true)} class="svelte-1n6ht58"/> <span class="track svelte-1n6ht58"><span class="thumb svelte-1n6ht58"></span></span></label></form> `);
1043
+ $$renderer2.push(`<!--]--></div></div></div> <label class="switch svelte-1n6ht58"><input type="checkbox" name="enabled"${$19.attr("checked", manualTokens, true)}${$19.attr("disabled", savingManualToggle || customEndpoint, true)} class="svelte-1n6ht58"/> <span class="track svelte-1n6ht58"><span class="thumb svelte-1n6ht58"></span></span></label></form> `);
1021
1044
  if (manualToggleError) {
1022
1045
  $$renderer2.push("<!--[0-->");
1023
- $$renderer2.push(`<div class="sub svelte-1n6ht58"><div class="msg error svelte-1n6ht58">${$20.escape(manualToggleError)}</div></div>`);
1046
+ $$renderer2.push(`<div class="sub svelte-1n6ht58"><div class="msg error svelte-1n6ht58">${$19.escape(manualToggleError)}</div></div>`);
1024
1047
  } else {
1025
1048
  $$renderer2.push("<!--[-1-->");
1026
1049
  }
@@ -1028,7 +1051,7 @@ function SettingsView($$renderer, $$props) {
1028
1051
  if (manualTokens && !customEndpoint) {
1029
1052
  $$renderer2.push("<!--[0-->");
1030
1053
  $$renderer2.push(`<form class="row divided token-row svelte-1n6ht58" method="POST" action="?/githubToken"><div class="label svelte-1n6ht58"><div class="text svelte-1n6ht58"><div class="name svelte-1n6ht58">GitHub token</div> <div class="desc svelte-1n6ht58">macOS / Linux: run <code class="svelte-1n6ht58">gh auth token</code> to print your GitHub CLI token, or
1031
- create a Personal Access Token at <code class="svelte-1n6ht58">github.com/settings/tokens</code> (scopes: <code class="svelte-1n6ht58">repo</code>, <code class="svelte-1n6ht58">read:org</code>). Leave blank and Save to clear.</div></div></div> <div class="image-controls svelte-1n6ht58"><input type="password" name="githubToken" class="image-input svelte-1n6ht58"${$20.attr("value", githubToken)} spellcheck="false" autocapitalize="off" autocorrect="off" autocomplete="off"${$20.attr("placeholder", ghSaved ? "\u2022\u2022\u2022\u2022\u2022\u2022\u2022\u2022 (saved)" : "ghp_\u2026 / gho_\u2026")}/> `);
1054
+ create a Personal Access Token at <code class="svelte-1n6ht58">github.com/settings/tokens</code> (scopes: <code class="svelte-1n6ht58">repo</code>, <code class="svelte-1n6ht58">read:org</code>). Leave blank and Save to clear.</div></div></div> <div class="image-controls svelte-1n6ht58"><input type="password" name="githubToken" class="image-input svelte-1n6ht58"${$19.attr("value", githubToken)} spellcheck="false" autocapitalize="off" autocorrect="off" autocomplete="off"${$19.attr("placeholder", ghSaved ? "\u2022\u2022\u2022\u2022\u2022\u2022\u2022\u2022 (saved)" : "ghp_\u2026 / gho_\u2026")}/> `);
1032
1055
  Button($$renderer2, {
1033
1056
  type: "submit",
1034
1057
  disabled: savingGithub,
@@ -1040,17 +1063,17 @@ function SettingsView($$renderer, $$props) {
1040
1063
  $$renderer2.push(`<!----></div> `);
1041
1064
  if (githubError) {
1042
1065
  $$renderer2.push("<!--[0-->");
1043
- $$renderer2.push(`<div class="msg error svelte-1n6ht58">${$20.escape(githubError)}</div>`);
1066
+ $$renderer2.push(`<div class="msg error svelte-1n6ht58">${$19.escape(githubError)}</div>`);
1044
1067
  } else if (githubMsg) {
1045
1068
  $$renderer2.push("<!--[1-->");
1046
- $$renderer2.push(`<div class="msg ok svelte-1n6ht58">${$20.escape(githubMsg)}</div>`);
1069
+ $$renderer2.push(`<div class="msg ok svelte-1n6ht58">${$19.escape(githubMsg)}</div>`);
1047
1070
  } else {
1048
1071
  $$renderer2.push("<!--[-1-->");
1049
1072
  }
1050
1073
  $$renderer2.push(`<!--]--></form> <form class="row divided token-row svelte-1n6ht58" method="POST" action="?/claudeToken"><div class="label svelte-1n6ht58"><div class="text svelte-1n6ht58"><div class="name svelte-1n6ht58">Claude Code token</div> <div class="desc svelte-1n6ht58">macOS / Linux: run <code class="svelte-1n6ht58">claude setup-token</code> to mint a long-lived token and
1051
1074
  paste it here. Copying a live login out of the keychain or <code class="svelte-1n6ht58">~/.claude/.credentials.json</code> works too, but that credential rotates \u2014
1052
1075
  the first <code class="svelte-1n6ht58">claude</code> to refresh it signs the other one out. Leave blank and Save
1053
- to clear.</div></div></div> <div class="image-controls svelte-1n6ht58"><input type="password" name="claudeToken" class="image-input svelte-1n6ht58"${$20.attr("value", claudeToken)} spellcheck="false" autocapitalize="off" autocorrect="off" autocomplete="off"${$20.attr("placeholder", claudeSaved ? "\u2022\u2022\u2022\u2022\u2022\u2022\u2022\u2022 (saved)" : "sk-ant-oat\u2026")}/> `);
1076
+ to clear.</div></div></div> <div class="image-controls svelte-1n6ht58"><input type="password" name="claudeToken" class="image-input svelte-1n6ht58"${$19.attr("value", claudeToken)} spellcheck="false" autocapitalize="off" autocorrect="off" autocomplete="off"${$19.attr("placeholder", claudeSaved ? "\u2022\u2022\u2022\u2022\u2022\u2022\u2022\u2022 (saved)" : "sk-ant-oat\u2026")}/> `);
1054
1077
  Button($$renderer2, {
1055
1078
  type: "submit",
1056
1079
  disabled: savingClaude,
@@ -1062,10 +1085,10 @@ function SettingsView($$renderer, $$props) {
1062
1085
  $$renderer2.push(`<!----></div> `);
1063
1086
  if (claudeError) {
1064
1087
  $$renderer2.push("<!--[0-->");
1065
- $$renderer2.push(`<div class="msg error svelte-1n6ht58">${$20.escape(claudeError)}</div>`);
1088
+ $$renderer2.push(`<div class="msg error svelte-1n6ht58">${$19.escape(claudeError)}</div>`);
1066
1089
  } else if (claudeMsg) {
1067
1090
  $$renderer2.push("<!--[1-->");
1068
- $$renderer2.push(`<div class="msg ok svelte-1n6ht58">${$20.escape(claudeMsg)}</div>`);
1091
+ $$renderer2.push(`<div class="msg ok svelte-1n6ht58">${$19.escape(claudeMsg)}</div>`);
1069
1092
  } else {
1070
1093
  $$renderer2.push("<!--[-1-->");
1071
1094
  }
@@ -1073,19 +1096,19 @@ function SettingsView($$renderer, $$props) {
1073
1096
  } else {
1074
1097
  $$renderer2.push("<!--[-1-->");
1075
1098
  }
1076
- $$renderer2.push(`<!--]--></section> <section${$20.attr_class("card svelte-1n6ht58", undefined, { "disabled-card": litellmBlocker() })}><form class="row svelte-1n6ht58" method="POST" action="?/customEndpointToggle"><div class="label svelte-1n6ht58">`);
1099
+ $$renderer2.push(`<!--]--></section> <section${$19.attr_class("card svelte-1n6ht58", undefined, { "disabled-card": litellmBlocker() })}><form class="row svelte-1n6ht58" method="POST" action="?/customEndpointToggle"><div class="label svelte-1n6ht58">`);
1077
1100
  Key_round($$renderer2, { size: 20 });
1078
1101
  $$renderer2.push(`<!----> <div class="text svelte-1n6ht58"><div class="name svelte-1n6ht58">LiteLLM + Bedrock `);
1079
1102
  if (litellmBlocker()) {
1080
1103
  $$renderer2.push("<!--[0-->");
1081
- $$renderer2.push(`<span class="arch svelte-1n6ht58"${$20.attr("title", `Disabled while ${$20.stringify(litellmBlocker())} is on`)}>disabled</span>`);
1104
+ $$renderer2.push(`<span class="arch svelte-1n6ht58"${$19.attr("title", `Disabled while ${$19.stringify(litellmBlocker())} is on`)}>disabled</span>`);
1082
1105
  } else {
1083
1106
  $$renderer2.push("<!--[-1-->");
1084
1107
  }
1085
1108
  $$renderer2.push(`<!--]--></div> <div class="desc svelte-1n6ht58">`);
1086
1109
  if (litellmBlocker()) {
1087
1110
  $$renderer2.push("<!--[0-->");
1088
- $$renderer2.push(`Not available while "${$20.escape(litellmBlocker())}" is enabled \u2014 these modes are mutually
1111
+ $$renderer2.push(`Not available while "${$19.escape(litellmBlocker())}" is enabled \u2014 these modes are mutually
1089
1112
  incompatible.`);
1090
1113
  } else {
1091
1114
  $$renderer2.push("<!--[-1-->");
@@ -1093,17 +1116,17 @@ function SettingsView($$renderer, $$props) {
1093
1116
  default API. When enabled, the Bedrock endpoint variables are injected into every new
1094
1117
  container, host OAuth credentials are not used, and "Set tokens manually" is disabled.`);
1095
1118
  }
1096
- $$renderer2.push(`<!--]--></div></div></div> <label class="switch svelte-1n6ht58"><input type="checkbox" name="enabled"${$20.attr("checked", customEndpoint, true)}${$20.attr("disabled", savingCustomToggle || !!litellmBlocker(), true)} class="svelte-1n6ht58"/> <span class="track svelte-1n6ht58"><span class="thumb svelte-1n6ht58"></span></span></label></form> `);
1119
+ $$renderer2.push(`<!--]--></div></div></div> <label class="switch svelte-1n6ht58"><input type="checkbox" name="enabled"${$19.attr("checked", customEndpoint, true)}${$19.attr("disabled", savingCustomToggle || !!litellmBlocker(), true)} class="svelte-1n6ht58"/> <span class="track svelte-1n6ht58"><span class="thumb svelte-1n6ht58"></span></span></label></form> `);
1097
1120
  if (customToggleError) {
1098
1121
  $$renderer2.push("<!--[0-->");
1099
- $$renderer2.push(`<div class="sub svelte-1n6ht58"><div class="msg error svelte-1n6ht58">${$20.escape(customToggleError)}</div></div>`);
1122
+ $$renderer2.push(`<div class="sub svelte-1n6ht58"><div class="msg error svelte-1n6ht58">${$19.escape(customToggleError)}</div></div>`);
1100
1123
  } else {
1101
1124
  $$renderer2.push("<!--[-1-->");
1102
1125
  }
1103
1126
  $$renderer2.push(`<!--]--> `);
1104
1127
  if (customEndpoint) {
1105
1128
  $$renderer2.push("<!--[0-->");
1106
- $$renderer2.push(`<form class="row divided token-row svelte-1n6ht58" method="POST" action="?/customBaseUrl"><div class="label svelte-1n6ht58"><div class="text svelte-1n6ht58"><div class="name svelte-1n6ht58">Base URL</div> <div class="desc svelte-1n6ht58">The LiteLLM proxy endpoint, e.g. <code class="svelte-1n6ht58">https://litellm.example.com/bedrock</code>. Passed as <code class="svelte-1n6ht58">ANTHROPIC_BEDROCK_BASE_URL</code>.</div></div></div> <div class="image-controls svelte-1n6ht58"><input type="text" name="baseUrl" class="image-input svelte-1n6ht58"${$20.attr("value", customBaseUrl)} spellcheck="false" autocapitalize="off" autocorrect="off" autocomplete="off" placeholder="https://litellm.example.com/bedrock"/> `);
1129
+ $$renderer2.push(`<form class="row divided token-row svelte-1n6ht58" method="POST" action="?/customBaseUrl"><div class="label svelte-1n6ht58"><div class="text svelte-1n6ht58"><div class="name svelte-1n6ht58">Base URL</div> <div class="desc svelte-1n6ht58">The LiteLLM proxy endpoint, e.g. <code class="svelte-1n6ht58">https://litellm.example.com/bedrock</code>. Passed as <code class="svelte-1n6ht58">ANTHROPIC_BEDROCK_BASE_URL</code>.</div></div></div> <div class="image-controls svelte-1n6ht58"><input type="text" name="baseUrl" class="image-input svelte-1n6ht58"${$19.attr("value", customBaseUrl)} spellcheck="false" autocapitalize="off" autocorrect="off" autocomplete="off" placeholder="https://litellm.example.com/bedrock"/> `);
1107
1130
  Button($$renderer2, {
1108
1131
  type: "submit",
1109
1132
  disabled: savingCustomBaseUrl,
@@ -1115,15 +1138,15 @@ function SettingsView($$renderer, $$props) {
1115
1138
  $$renderer2.push(`<!----></div> `);
1116
1139
  if (customBaseUrlError) {
1117
1140
  $$renderer2.push("<!--[0-->");
1118
- $$renderer2.push(`<div class="msg error svelte-1n6ht58">${$20.escape(customBaseUrlError)}</div>`);
1141
+ $$renderer2.push(`<div class="msg error svelte-1n6ht58">${$19.escape(customBaseUrlError)}</div>`);
1119
1142
  } else if (customBaseUrlMsg) {
1120
1143
  $$renderer2.push("<!--[1-->");
1121
- $$renderer2.push(`<div class="msg ok svelte-1n6ht58">${$20.escape(customBaseUrlMsg)}</div>`);
1144
+ $$renderer2.push(`<div class="msg ok svelte-1n6ht58">${$19.escape(customBaseUrlMsg)}</div>`);
1122
1145
  } else {
1123
1146
  $$renderer2.push("<!--[-1-->");
1124
1147
  }
1125
1148
  $$renderer2.push(`<!--]--></form> <form class="row divided token-row svelte-1n6ht58" method="POST" action="?/customToken"><div class="label svelte-1n6ht58"><div class="text svelte-1n6ht58"><div class="name svelte-1n6ht58">Auth token</div> <div class="desc svelte-1n6ht58">Your LiteLLM API key. Passed as <code class="svelte-1n6ht58">ANTHROPIC_AUTH_TOKEN</code>. Leave blank and
1126
- Save to clear.</div></div></div> <div class="image-controls svelte-1n6ht58"><input type="password" name="token" class="image-input svelte-1n6ht58"${$20.attr("value", customToken)} spellcheck="false" autocapitalize="off" autocorrect="off" autocomplete="off"${$20.attr("placeholder", customTokenSaved ? "\u2022\u2022\u2022\u2022\u2022\u2022\u2022\u2022 (saved)" : "sk-\u2026")}/> `);
1149
+ Save to clear.</div></div></div> <div class="image-controls svelte-1n6ht58"><input type="password" name="token" class="image-input svelte-1n6ht58"${$19.attr("value", customToken)} spellcheck="false" autocapitalize="off" autocorrect="off" autocomplete="off"${$19.attr("placeholder", customTokenSaved ? "\u2022\u2022\u2022\u2022\u2022\u2022\u2022\u2022 (saved)" : "sk-\u2026")}/> `);
1127
1150
  Button($$renderer2, {
1128
1151
  type: "submit",
1129
1152
  disabled: savingCustomToken,
@@ -1135,15 +1158,15 @@ function SettingsView($$renderer, $$props) {
1135
1158
  $$renderer2.push(`<!----></div> `);
1136
1159
  if (customTokenError) {
1137
1160
  $$renderer2.push("<!--[0-->");
1138
- $$renderer2.push(`<div class="msg error svelte-1n6ht58">${$20.escape(customTokenError)}</div>`);
1161
+ $$renderer2.push(`<div class="msg error svelte-1n6ht58">${$19.escape(customTokenError)}</div>`);
1139
1162
  } else if (customTokenMsg) {
1140
1163
  $$renderer2.push("<!--[1-->");
1141
- $$renderer2.push(`<div class="msg ok svelte-1n6ht58">${$20.escape(customTokenMsg)}</div>`);
1164
+ $$renderer2.push(`<div class="msg ok svelte-1n6ht58">${$19.escape(customTokenMsg)}</div>`);
1142
1165
  } else {
1143
1166
  $$renderer2.push("<!--[-1-->");
1144
1167
  }
1145
1168
  $$renderer2.push(`<!--]--></form> <form class="row divided token-row svelte-1n6ht58" method="POST" action="?/customModels"><div class="label svelte-1n6ht58"><div class="text svelte-1n6ht58"><div class="name svelte-1n6ht58">Model IDs</div> <div class="desc svelte-1n6ht58">Model aliases to use for each tier. Prefilled with defaults from the reference
1146
- launcher script. Leave a field as-is to keep its current value.</div></div></div> <div class="model-fields svelte-1n6ht58"><label class="model-row svelte-1n6ht58"><span class="model-label svelte-1n6ht58">Opus</span> <input type="text" name="opusModel" class="image-input svelte-1n6ht58"${$20.attr("value", customOpusModel)} spellcheck="false" autocapitalize="off" autocorrect="off" autocomplete="off"/></label> <label class="model-row svelte-1n6ht58"><span class="model-label svelte-1n6ht58">Sonnet</span> <input type="text" name="sonnetModel" class="image-input svelte-1n6ht58"${$20.attr("value", customSonnetModel)} spellcheck="false" autocapitalize="off" autocorrect="off" autocomplete="off"/></label> <label class="model-row svelte-1n6ht58"><span class="model-label svelte-1n6ht58">Haiku</span> <input type="text" name="haikuModel" class="image-input svelte-1n6ht58"${$20.attr("value", customHaikuModel)} spellcheck="false" autocapitalize="off" autocorrect="off" autocomplete="off"/></label> <label class="model-row svelte-1n6ht58"><span class="model-label svelte-1n6ht58">Small/fast</span> <input type="text" name="smallFastModel" class="image-input svelte-1n6ht58"${$20.attr("value", customSmallFastModel)} spellcheck="false" autocapitalize="off" autocorrect="off" autocomplete="off"/></label> <label class="model-row svelte-1n6ht58"><span class="model-label svelte-1n6ht58">Default</span> <input type="text" name="defaultModel" class="image-input svelte-1n6ht58"${$20.attr("value", customDefaultModel)} spellcheck="false" autocapitalize="off" autocorrect="off" autocomplete="off"/></label> <div class="model-save-row svelte-1n6ht58">`);
1169
+ launcher script. Leave a field as-is to keep its current value.</div></div></div> <div class="model-fields svelte-1n6ht58"><label class="model-row svelte-1n6ht58"><span class="model-label svelte-1n6ht58">Opus</span> <input type="text" name="opusModel" class="image-input svelte-1n6ht58"${$19.attr("value", customOpusModel)} spellcheck="false" autocapitalize="off" autocorrect="off" autocomplete="off"/></label> <label class="model-row svelte-1n6ht58"><span class="model-label svelte-1n6ht58">Sonnet</span> <input type="text" name="sonnetModel" class="image-input svelte-1n6ht58"${$19.attr("value", customSonnetModel)} spellcheck="false" autocapitalize="off" autocorrect="off" autocomplete="off"/></label> <label class="model-row svelte-1n6ht58"><span class="model-label svelte-1n6ht58">Haiku</span> <input type="text" name="haikuModel" class="image-input svelte-1n6ht58"${$19.attr("value", customHaikuModel)} spellcheck="false" autocapitalize="off" autocorrect="off" autocomplete="off"/></label> <label class="model-row svelte-1n6ht58"><span class="model-label svelte-1n6ht58">Small/fast</span> <input type="text" name="smallFastModel" class="image-input svelte-1n6ht58"${$19.attr("value", customSmallFastModel)} spellcheck="false" autocapitalize="off" autocorrect="off" autocomplete="off"/></label> <label class="model-row svelte-1n6ht58"><span class="model-label svelte-1n6ht58">Default</span> <input type="text" name="defaultModel" class="image-input svelte-1n6ht58"${$19.attr("value", customDefaultModel)} spellcheck="false" autocapitalize="off" autocorrect="off" autocomplete="off"/></label> <div class="model-save-row svelte-1n6ht58">`);
1147
1170
  Button($$renderer2, {
1148
1171
  type: "submit",
1149
1172
  disabled: savingCustomModels,
@@ -1155,10 +1178,10 @@ function SettingsView($$renderer, $$props) {
1155
1178
  $$renderer2.push(`<!----></div></div> `);
1156
1179
  if (customModelsError) {
1157
1180
  $$renderer2.push("<!--[0-->");
1158
- $$renderer2.push(`<div class="msg error svelte-1n6ht58">${$20.escape(customModelsError)}</div>`);
1181
+ $$renderer2.push(`<div class="msg error svelte-1n6ht58">${$19.escape(customModelsError)}</div>`);
1159
1182
  } else if (customModelsMsg) {
1160
1183
  $$renderer2.push("<!--[1-->");
1161
- $$renderer2.push(`<div class="msg ok svelte-1n6ht58">${$20.escape(customModelsMsg)}</div>`);
1184
+ $$renderer2.push(`<div class="msg ok svelte-1n6ht58">${$19.escape(customModelsMsg)}</div>`);
1162
1185
  } else {
1163
1186
  $$renderer2.push("<!--[-1-->");
1164
1187
  }
@@ -1166,7 +1189,7 @@ function SettingsView($$renderer, $$props) {
1166
1189
  } else {
1167
1190
  $$renderer2.push("<!--[-1-->");
1168
1191
  }
1169
- $$renderer2.push(`<!--]--></section> <section${$20.attr_class("card svelte-1n6ht58", undefined, { "disabled-card": customEndpoint })}><form class="row svelte-1n6ht58" method="POST" action="?/manualModelToggle"><div class="label svelte-1n6ht58">`);
1192
+ $$renderer2.push(`<!--]--></section> <section${$19.attr_class("card svelte-1n6ht58", undefined, { "disabled-card": customEndpoint })}><form class="row svelte-1n6ht58" method="POST" action="?/manualModelToggle"><div class="label svelte-1n6ht58">`);
1170
1193
  Cpu($$renderer2, { size: 18 });
1171
1194
  $$renderer2.push(`<!----> <div class="text svelte-1n6ht58"><div class="name svelte-1n6ht58">Override models manually `);
1172
1195
  if (customEndpoint) {
@@ -1185,17 +1208,17 @@ function SettingsView($$renderer, $$props) {
1185
1208
  $$renderer2.push(`Pin which model <code class="svelte-1n6ht58">claude</code> uses on the standard (subscription) path. Only
1186
1209
  the fields you fill are injected into new containers as <code class="svelte-1n6ht58">ANTHROPIC_*_MODEL</code> variables; blanks fall through to Claude Code's own defaults.`);
1187
1210
  }
1188
- $$renderer2.push(`<!--]--></div></div></div> <label class="switch svelte-1n6ht58"><input type="checkbox" name="enabled"${$20.attr("checked", manualModelOverride, true)}${$20.attr("disabled", savingManualModelToggle || customEndpoint, true)} class="svelte-1n6ht58"/> <span class="track svelte-1n6ht58"><span class="thumb svelte-1n6ht58"></span></span></label></form> `);
1211
+ $$renderer2.push(`<!--]--></div></div></div> <label class="switch svelte-1n6ht58"><input type="checkbox" name="enabled"${$19.attr("checked", manualModelOverride, true)}${$19.attr("disabled", savingManualModelToggle || customEndpoint, true)} class="svelte-1n6ht58"/> <span class="track svelte-1n6ht58"><span class="thumb svelte-1n6ht58"></span></span></label></form> `);
1189
1212
  if (manualModelToggleError) {
1190
1213
  $$renderer2.push("<!--[0-->");
1191
- $$renderer2.push(`<div class="sub svelte-1n6ht58"><div class="msg error svelte-1n6ht58">${$20.escape(manualModelToggleError)}</div></div>`);
1214
+ $$renderer2.push(`<div class="sub svelte-1n6ht58"><div class="msg error svelte-1n6ht58">${$19.escape(manualModelToggleError)}</div></div>`);
1192
1215
  } else {
1193
1216
  $$renderer2.push("<!--[-1-->");
1194
1217
  }
1195
1218
  $$renderer2.push(`<!--]--> `);
1196
1219
  if (manualModelOverride) {
1197
1220
  $$renderer2.push("<!--[0-->");
1198
- $$renderer2.push(`<form class="row divided token-row svelte-1n6ht58" method="POST" action="?/manualModels"><div class="label svelte-1n6ht58"><div class="text svelte-1n6ht58"><div class="name svelte-1n6ht58">Model IDs</div> <div class="desc svelte-1n6ht58">A model name or alias per tier, e.g. <code class="svelte-1n6ht58">opusplan</code>, <code class="svelte-1n6ht58">opus</code>, <code class="svelte-1n6ht58">sonnet</code>, or a full <code class="svelte-1n6ht58">claude-\u2026</code> id. Leave a field blank to skip it.</div></div></div> <div class="model-fields svelte-1n6ht58"><label class="model-row svelte-1n6ht58"><span class="model-label svelte-1n6ht58">Opus</span> <input type="text" name="opusModel" class="image-input svelte-1n6ht58"${$20.attr("value", manualOpus)} spellcheck="false" autocapitalize="off" autocorrect="off" autocomplete="off"/></label> <label class="model-row svelte-1n6ht58"><span class="model-label svelte-1n6ht58">Sonnet</span> <input type="text" name="sonnetModel" class="image-input svelte-1n6ht58"${$20.attr("value", manualSonnet)} spellcheck="false" autocapitalize="off" autocorrect="off" autocomplete="off"/></label> <label class="model-row svelte-1n6ht58"><span class="model-label svelte-1n6ht58">Haiku</span> <input type="text" name="haikuModel" class="image-input svelte-1n6ht58"${$20.attr("value", manualHaiku)} spellcheck="false" autocapitalize="off" autocorrect="off" autocomplete="off"/></label> <label class="model-row svelte-1n6ht58"><span class="model-label svelte-1n6ht58">Small/fast</span> <input type="text" name="smallFastModel" class="image-input svelte-1n6ht58"${$20.attr("value", manualSmallFast)} spellcheck="false" autocapitalize="off" autocorrect="off" autocomplete="off"/></label> <label class="model-row svelte-1n6ht58"><span class="model-label svelte-1n6ht58">Default</span> <input type="text" name="defaultModel" class="image-input svelte-1n6ht58"${$20.attr("value", manualDefault)} spellcheck="false" autocapitalize="off" autocorrect="off" autocomplete="off"/></label> <div class="model-save-row svelte-1n6ht58">`);
1221
+ $$renderer2.push(`<form class="row divided token-row svelte-1n6ht58" method="POST" action="?/manualModels"><div class="label svelte-1n6ht58"><div class="text svelte-1n6ht58"><div class="name svelte-1n6ht58">Model IDs</div> <div class="desc svelte-1n6ht58">A model name or alias per tier, e.g. <code class="svelte-1n6ht58">opusplan</code>, <code class="svelte-1n6ht58">opus</code>, <code class="svelte-1n6ht58">sonnet</code>, or a full <code class="svelte-1n6ht58">claude-\u2026</code> id. Leave a field blank to skip it.</div></div></div> <div class="model-fields svelte-1n6ht58"><label class="model-row svelte-1n6ht58"><span class="model-label svelte-1n6ht58">Opus</span> <input type="text" name="opusModel" class="image-input svelte-1n6ht58"${$19.attr("value", manualOpus)} spellcheck="false" autocapitalize="off" autocorrect="off" autocomplete="off"/></label> <label class="model-row svelte-1n6ht58"><span class="model-label svelte-1n6ht58">Sonnet</span> <input type="text" name="sonnetModel" class="image-input svelte-1n6ht58"${$19.attr("value", manualSonnet)} spellcheck="false" autocapitalize="off" autocorrect="off" autocomplete="off"/></label> <label class="model-row svelte-1n6ht58"><span class="model-label svelte-1n6ht58">Haiku</span> <input type="text" name="haikuModel" class="image-input svelte-1n6ht58"${$19.attr("value", manualHaiku)} spellcheck="false" autocapitalize="off" autocorrect="off" autocomplete="off"/></label> <label class="model-row svelte-1n6ht58"><span class="model-label svelte-1n6ht58">Small/fast</span> <input type="text" name="smallFastModel" class="image-input svelte-1n6ht58"${$19.attr("value", manualSmallFast)} spellcheck="false" autocapitalize="off" autocorrect="off" autocomplete="off"/></label> <label class="model-row svelte-1n6ht58"><span class="model-label svelte-1n6ht58">Default</span> <input type="text" name="defaultModel" class="image-input svelte-1n6ht58"${$19.attr("value", manualDefault)} spellcheck="false" autocapitalize="off" autocorrect="off" autocomplete="off"/></label> <div class="model-save-row svelte-1n6ht58">`);
1199
1222
  Button($$renderer2, {
1200
1223
  type: "submit",
1201
1224
  disabled: savingManualModels,
@@ -1207,10 +1230,10 @@ function SettingsView($$renderer, $$props) {
1207
1230
  $$renderer2.push(`<!----></div></div> `);
1208
1231
  if (manualModelsError) {
1209
1232
  $$renderer2.push("<!--[0-->");
1210
- $$renderer2.push(`<div class="msg error svelte-1n6ht58">${$20.escape(manualModelsError)}</div>`);
1233
+ $$renderer2.push(`<div class="msg error svelte-1n6ht58">${$19.escape(manualModelsError)}</div>`);
1211
1234
  } else if (manualModelsMsg) {
1212
1235
  $$renderer2.push("<!--[1-->");
1213
- $$renderer2.push(`<div class="msg ok svelte-1n6ht58">${$20.escape(manualModelsMsg)}</div>`);
1236
+ $$renderer2.push(`<div class="msg ok svelte-1n6ht58">${$19.escape(manualModelsMsg)}</div>`);
1214
1237
  } else {
1215
1238
  $$renderer2.push("<!--[-1-->");
1216
1239
  }
@@ -1222,10 +1245,10 @@ function SettingsView($$renderer, $$props) {
1222
1245
  Variable($$renderer2, { size: 20 });
1223
1246
  $$renderer2.push(`<!----> <div class="text svelte-1n6ht58"><div class="name svelte-1n6ht58">Host environment variables</div> <div class="desc svelte-1n6ht58">Forward selected environment variables from this machine into every new container's
1224
1247
  interactive shells. Values are read from this process's own environment at container
1225
- start and are never shown here or stored \u2014 only the variable names are saved.</div></div></div> <label class="switch svelte-1n6ht58"><input type="checkbox" name="enabled"${$20.attr("checked", hostEnvVars, true)}${$20.attr("disabled", savingHostEnvToggle, true)} class="svelte-1n6ht58"/> <span class="track svelte-1n6ht58"><span class="thumb svelte-1n6ht58"></span></span></label></form> `);
1248
+ start and are never shown here or stored \u2014 only the variable names are saved.</div></div></div> <label class="switch svelte-1n6ht58"><input type="checkbox" name="enabled"${$19.attr("checked", hostEnvVars, true)}${$19.attr("disabled", savingHostEnvToggle, true)} class="svelte-1n6ht58"/> <span class="track svelte-1n6ht58"><span class="thumb svelte-1n6ht58"></span></span></label></form> `);
1226
1249
  if (hostEnvToggleError) {
1227
1250
  $$renderer2.push("<!--[0-->");
1228
- $$renderer2.push(`<div class="sub svelte-1n6ht58"><div class="msg error svelte-1n6ht58">${$20.escape(hostEnvToggleError)}</div></div>`);
1251
+ $$renderer2.push(`<div class="sub svelte-1n6ht58"><div class="msg error svelte-1n6ht58">${$19.escape(hostEnvToggleError)}</div></div>`);
1229
1252
  } else {
1230
1253
  $$renderer2.push("<!--[-1-->");
1231
1254
  }
@@ -1233,18 +1256,18 @@ function SettingsView($$renderer, $$props) {
1233
1256
  if (hostEnvVars) {
1234
1257
  $$renderer2.push("<!--[0-->");
1235
1258
  $$renderer2.push(`<div class="row divided var-row svelte-1n6ht58"><div class="var-list svelte-1n6ht58">`);
1236
- const each_array = $20.ensure_array_like(hostEnvNames);
1259
+ const each_array = $19.ensure_array_like(hostEnvNames);
1237
1260
  if (each_array.length !== 0) {
1238
1261
  $$renderer2.push("<!--[-->");
1239
1262
  for (let $$index_1 = 0, $$length = each_array.length;$$index_1 < $$length; $$index_1++) {
1240
1263
  let name = each_array[$$index_1];
1241
1264
  $$renderer2.push(`<form class="var-item svelte-1n6ht58" method="POST" action="?/hostEnvVarNames"><!--[-->`);
1242
- const each_array_1 = $20.ensure_array_like(hostEnvNames.filter((n) => n !== name));
1265
+ const each_array_1 = $19.ensure_array_like(hostEnvNames.filter((n) => n !== name));
1243
1266
  for (let $$index = 0, $$length2 = each_array_1.length;$$index < $$length2; $$index++) {
1244
1267
  let other = each_array_1[$$index];
1245
- $$renderer2.push(`<input type="hidden" name="names"${$20.attr("value", other)}/>`);
1268
+ $$renderer2.push(`<input type="hidden" name="names"${$19.attr("value", other)}/>`);
1246
1269
  }
1247
- $$renderer2.push(`<!--]--> <span class="var-name svelte-1n6ht58">${$20.escape(name)}</span> <span${$20.attr_class("var-status svelte-1n6ht58", undefined, { present: hostEnvPresence[name] })}${$20.attr("title", hostEnvPresence[name] ? "Set on this host \u2014 will be injected" : "Not set on this host \u2014 will be skipped")}>${$20.escape(hostEnvPresence[name] ? "set" : "missing")}</span> <button type="submit" class="var-remove svelte-1n6ht58"${$20.attr("disabled", savingHostEnvNames, true)}${$20.attr("aria-label", `Remove ${name}`)}>`);
1270
+ $$renderer2.push(`<!--]--> <span class="var-name svelte-1n6ht58">${$19.escape(name)}</span> <span${$19.attr_class("var-status svelte-1n6ht58", undefined, { present: hostEnvPresence[name] })}${$19.attr("title", hostEnvPresence[name] ? "Set on this host \u2014 will be injected" : "Not set on this host \u2014 will be skipped")}>${$19.escape(hostEnvPresence[name] ? "set" : "missing")}</span> <button type="submit" class="var-remove svelte-1n6ht58"${$19.attr("disabled", savingHostEnvNames, true)}${$19.attr("aria-label", `Remove ${name}`)}>`);
1248
1271
  X($$renderer2, { size: 13 });
1249
1272
  $$renderer2.push(`<!----></button></form>`);
1250
1273
  }
@@ -1253,12 +1276,12 @@ function SettingsView($$renderer, $$props) {
1253
1276
  $$renderer2.push(`<div class="var-empty svelte-1n6ht58">No variables added yet.</div>`);
1254
1277
  }
1255
1278
  $$renderer2.push(`<!--]--></div> <form class="var-add svelte-1n6ht58" method="POST" action="?/hostEnvVarNames"><!--[-->`);
1256
- const each_array_2 = $20.ensure_array_like(hostEnvNames);
1279
+ const each_array_2 = $19.ensure_array_like(hostEnvNames);
1257
1280
  for (let $$index_2 = 0, $$length = each_array_2.length;$$index_2 < $$length; $$index_2++) {
1258
1281
  let name = each_array_2[$$index_2];
1259
- $$renderer2.push(`<input type="hidden" name="names"${$20.attr("value", name)}/>`);
1282
+ $$renderer2.push(`<input type="hidden" name="names"${$19.attr("value", name)}/>`);
1260
1283
  }
1261
- $$renderer2.push(`<!--]--> <input type="text" name="names" class="image-input svelte-1n6ht58"${$20.attr("value", newHostEnvName)} spellcheck="false" autocapitalize="off" autocorrect="off" autocomplete="off" placeholder="AWS_ACCESS_KEY_ID"/> `);
1284
+ $$renderer2.push(`<!--]--> <input type="text" name="names" class="image-input svelte-1n6ht58"${$19.attr("value", newHostEnvName)} spellcheck="false" autocapitalize="off" autocorrect="off" autocomplete="off" placeholder="AWS_ACCESS_KEY_ID"/> `);
1262
1285
  Button($$renderer2, {
1263
1286
  type: "submit",
1264
1287
  icon: Plus,
@@ -1271,10 +1294,10 @@ function SettingsView($$renderer, $$props) {
1271
1294
  $$renderer2.push(`<!----></form> `);
1272
1295
  if (hostEnvNamesError) {
1273
1296
  $$renderer2.push("<!--[0-->");
1274
- $$renderer2.push(`<div class="msg error svelte-1n6ht58">${$20.escape(hostEnvNamesError)}</div>`);
1297
+ $$renderer2.push(`<div class="msg error svelte-1n6ht58">${$19.escape(hostEnvNamesError)}</div>`);
1275
1298
  } else if (hostEnvNamesMsg) {
1276
1299
  $$renderer2.push("<!--[1-->");
1277
- $$renderer2.push(`<div class="msg ok svelte-1n6ht58">${$20.escape(hostEnvNamesMsg)}</div>`);
1300
+ $$renderer2.push(`<div class="msg ok svelte-1n6ht58">${$19.escape(hostEnvNamesMsg)}</div>`);
1278
1301
  } else {
1279
1302
  $$renderer2.push("<!--[-1-->");
1280
1303
  }
@@ -1288,12 +1311,12 @@ function SettingsView($$renderer, $$props) {
1288
1311
  ThemePicker($$renderer2, {});
1289
1312
  $$renderer2.push(`<!----></div></section> <section class="card svelte-1n6ht58"><div class="row svelte-1n6ht58"><div class="label svelte-1n6ht58">`);
1290
1313
  Volume_2($$renderer2, { size: 20 });
1291
- $$renderer2.push(`<!----> <div class="text svelte-1n6ht58"><div class="name svelte-1n6ht58">Attention sound</div> <div class="desc svelte-1n6ht58">Play a chime when an instance finishes a task or needs your input.</div></div></div> <label class="switch svelte-1n6ht58"><input type="checkbox"${$20.attr("checked", sound, true)} class="svelte-1n6ht58"/> <span class="track svelte-1n6ht58"><span class="thumb svelte-1n6ht58"></span></span></label></div></section> <section class="card svelte-1n6ht58"><form class="row svelte-1n6ht58" method="POST" action="?/petToggle"><div class="label svelte-1n6ht58">`);
1314
+ $$renderer2.push(`<!----> <div class="text svelte-1n6ht58"><div class="name svelte-1n6ht58">Attention sound</div> <div class="desc svelte-1n6ht58">Play a chime when an instance finishes a task or needs your input.</div></div></div> <label class="switch svelte-1n6ht58"><input type="checkbox"${$19.attr("checked", sound, true)} class="svelte-1n6ht58"/> <span class="track svelte-1n6ht58"><span class="thumb svelte-1n6ht58"></span></span></label></div></section> <section class="card svelte-1n6ht58"><form class="row svelte-1n6ht58" method="POST" action="?/petToggle"><div class="label svelte-1n6ht58">`);
1292
1315
  Paw_print($$renderer2, { size: 18 });
1293
- $$renderer2.push(`<!----> <div class="text svelte-1n6ht58"><div class="name svelte-1n6ht58">Pet logo</div> <div class="desc svelte-1n6ht58">Swap the box in the header for a pixel pet.</div></div></div> <label class="switch svelte-1n6ht58"><input type="checkbox" name="enabled"${$20.attr("checked", !!petArt, true)}${$20.attr("disabled", savingPet, true)} class="svelte-1n6ht58"/> <span class="track svelte-1n6ht58"><span class="thumb svelte-1n6ht58"></span></span></label></form> `);
1316
+ $$renderer2.push(`<!----> <div class="text svelte-1n6ht58"><div class="name svelte-1n6ht58">Pet logo</div> <div class="desc svelte-1n6ht58">Swap the box in the header for a pixel pet.</div></div></div> <label class="switch svelte-1n6ht58"><input type="checkbox" name="enabled"${$19.attr("checked", !!petArt, true)}${$19.attr("disabled", savingPet, true)} class="svelte-1n6ht58"/> <span class="track svelte-1n6ht58"><span class="thumb svelte-1n6ht58"></span></span></label></form> `);
1294
1317
  if (petError) {
1295
1318
  $$renderer2.push("<!--[0-->");
1296
- $$renderer2.push(`<div class="sub svelte-1n6ht58"><div class="msg error svelte-1n6ht58">${$20.escape(petError)}</div></div>`);
1319
+ $$renderer2.push(`<div class="sub svelte-1n6ht58"><div class="msg error svelte-1n6ht58">${$19.escape(petError)}</div></div>`);
1297
1320
  } else {
1298
1321
  $$renderer2.push("<!--[-1-->");
1299
1322
  }
@@ -1301,10 +1324,10 @@ function SettingsView($$renderer, $$props) {
1301
1324
  if (petArt) {
1302
1325
  $$renderer2.push("<!--[0-->");
1303
1326
  $$renderer2.push(`<div class="sub pets svelte-1n6ht58"><!--[-->`);
1304
- const each_array_3 = $20.ensure_array_like(avatars);
1327
+ const each_array_3 = $19.ensure_array_like(avatars);
1305
1328
  for (let $$index_3 = 0, $$length = each_array_3.length;$$index_3 < $$length; $$index_3++) {
1306
1329
  let art = each_array_3[$$index_3];
1307
- $$renderer2.push(`<form method="POST" action="?/petChoose" class="svelte-1n6ht58"><input type="hidden" name="name"${$20.attr("value", art.name)}/> <button type="submit"${$20.attr_class("pet svelte-1n6ht58", undefined, { selected: art.name === petArt.name })}${$20.attr("disabled", savingPet, true)}${$20.attr("title", art.name)}${$20.attr("aria-label", art.name)}${$20.attr("aria-pressed", art.name === petArt.name)}>`);
1330
+ $$renderer2.push(`<form method="POST" action="?/petChoose" class="svelte-1n6ht58"><input type="hidden" name="name"${$19.attr("value", art.name)}/> <button type="submit"${$19.attr_class("pet svelte-1n6ht58", undefined, { selected: art.name === petArt.name })}${$19.attr("disabled", savingPet, true)}${$19.attr("title", art.name)}${$19.attr("aria-label", art.name)}${$19.attr("aria-pressed", art.name === petArt.name)}>`);
1308
1331
  Avatar($$renderer2, { art, name: art.name, scale: 4 });
1309
1332
  $$renderer2.push(`<!----></button></form>`);
1310
1333
  }
@@ -1332,7 +1355,7 @@ function SettingsView($$renderer, $$props) {
1332
1355
  }
1333
1356
  $$renderer2.push(`<!--]--></form></section> `);
1334
1357
  CoinButton($$renderer2, {});
1335
- $$renderer2.push(`<!----> <div class="version svelte-1n6ht58">Codebay v${$20.escape(version)}</div></main></div> `);
1358
+ $$renderer2.push(`<!----> <div class="version svelte-1n6ht58">Codebay v${$19.escape(version)}</div></main></div> `);
1336
1359
  Toaster($$renderer2, {
1337
1360
  toastOptions: {
1338
1361
  style: "border:1px solid var(--ink); background:var(--bg-card); color:var(--ink); box-shadow:4px 4px 0 var(--ink); font-family:var(--font-mono); font-size:13px;"
@@ -1347,6 +1370,7 @@ function Settings($$renderer, $$props) {
1347
1370
  $$renderer.component(($$renderer2) => {
1348
1371
  let {
1349
1372
  pet,
1373
+ defaultMode,
1350
1374
  defaultImage,
1351
1375
  builtinImage,
1352
1376
  disableBuildCache,
@@ -1380,7 +1404,7 @@ function Settings($$renderer, $$props) {
1380
1404
  } = $$props;
1381
1405
  if (true) {
1382
1406
  let failed = function($$renderer3, error) {
1383
- $$renderer3.push(`<mochi-island-failure data-component="SettingsView"${$21.attr("data-message", error.message)}></mochi-island-failure>`);
1407
+ $$renderer3.push(`<mochi-island-failure data-component="SettingsView"${$20.attr("data-message", error.message)}></mochi-island-failure>`);
1384
1408
  };
1385
1409
  $$renderer2.push("<!--[0-->");
1386
1410
  $$renderer2.boundary({ failed }, ($$renderer3) => {
@@ -1388,8 +1412,9 @@ function Settings($$renderer, $$props) {
1388
1412
  {
1389
1413
  HydratableBoundary($$renderer3, {
1390
1414
  children: ($$renderer4) => {
1391
- $$renderer4.push(`<mochi-hydratable-island component-name="SettingsView_8hmarwmf8onq" component-url="__MOCHI_COMPONENT_URL__SettingsView_8hmarwmf8onq__"${$21.attr("props-ref", emitIslandProps({
1415
+ $$renderer4.push(`<mochi-hydratable-island component-name="SettingsView_8hmarwmf8onq" component-url="__MOCHI_COMPONENT_URL__SettingsView_8hmarwmf8onq__"${$20.attr("props-ref", emitIslandProps({
1392
1416
  pet,
1417
+ defaultMode,
1393
1418
  defaultImage,
1394
1419
  builtinImage,
1395
1420
  disableBuildCache,
@@ -1425,6 +1450,7 @@ function Settings($$renderer, $$props) {
1425
1450
  {
1426
1451
  SettingsView($$renderer4, {
1427
1452
  pet,
1453
+ defaultMode,
1428
1454
  defaultImage,
1429
1455
  builtinImage,
1430
1456
  disableBuildCache,