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
package/src/routes.ts CHANGED
@@ -25,8 +25,11 @@ import { pickNamePrompt } from './avatars/name-prompts.ts';
25
25
  import { avatars, findAvatar } from './avatars/index.ts';
26
26
  import {
27
27
  addForwardedPort,
28
+ broadcastDefaultMode,
29
+ broadcastFilter,
28
30
  broadcastPet,
29
31
  createInstance,
32
+ getDefaultMode,
30
33
  deleteAllInstances,
31
34
  deleteDatabaseAndShutdown,
32
35
  deleteInstance,
@@ -36,6 +39,7 @@ import {
36
39
  removeForwardedPort,
37
40
  renameInstance,
38
41
  sanitizeInstance,
42
+ setTerminalSplit,
39
43
  startInstance,
40
44
  stopInstance,
41
45
  streamClose,
@@ -54,6 +58,7 @@ import { wsUpgradeAllowed } from './lib/auth.server.ts';
54
58
  import { clearAttention, setAttention } from './lib/bridge.server.ts';
55
59
  import { timingSafeEqualStr } from './lib/crypto.server.ts';
56
60
  import { proxyRoutes } from './lib/proxy.server.ts';
61
+ import { isInstanceFilter, normalizeMode, type InstanceFilter } from './types.ts';
57
62
 
58
63
  async function preflight() {
59
64
  const [docker, cli, auth] = await Promise.all([
@@ -75,7 +80,7 @@ async function preflight() {
75
80
  })
76
81
  )
77
82
  ]);
78
- return { docker, cli, auth };
83
+ return { docker, cli, auth, defaultMode: getDefaultMode() };
79
84
  }
80
85
 
81
86
  /** The header pet logo, resolved from the DB option. A name that left the catalog reads as "off". */
@@ -83,6 +88,12 @@ function currentPet() {
83
88
  return findAvatar(getOption('pet') ?? undefined);
84
89
  }
85
90
 
91
+ /** The dashboard run-state filter, resolved from the DB option; an unset/invalid value reads as "all". */
92
+ function currentFilter(): InstanceFilter {
93
+ const v = getOption('instance_filter');
94
+ return isInstanceFilter(v) ? v : 'all';
95
+ }
96
+
86
97
  /** Lets a route handler just `throw` for both validation and business-logic failures. */
87
98
  async function mutate(fn: () => Promise<unknown> | unknown): Promise<Response> {
88
99
  try {
@@ -120,7 +131,8 @@ export const routes: Record<string, MochiRouteValue> = {
120
131
  preflight: await preflight(),
121
132
  initialPath: '/',
122
133
  snapshot: await listInstances(),
123
- pet: currentPet()
134
+ pet: currentPet(),
135
+ filter: currentFilter()
124
136
  })
125
137
  }),
126
138
 
@@ -131,7 +143,8 @@ export const routes: Record<string, MochiRouteValue> = {
131
143
  preflight: await preflight(),
132
144
  initialPath: `/ide/${params.id}`,
133
145
  snapshot: await listInstances(),
134
- pet: currentPet()
146
+ pet: currentPet(),
147
+ filter: currentFilter()
135
148
  };
136
149
  }
137
150
  }),
@@ -139,9 +152,13 @@ export const routes: Record<string, MochiRouteValue> = {
139
152
  '/instances/:id': Mochi.page('./src/pages/Instance.svelte', {
140
153
  serverProps: (_req, params) => {
141
154
  // Only validates existence — the view hydrates its data from the stream.
142
- if (!params.id || !getInstance(params.id)) error(404, 'Instance not found');
155
+ const row = params.id ? getInstance(params.id) : null;
156
+ if (!row) error(404, 'Instance not found');
143
157
  // Lets the health panel's skeleton render one row per real check before the first snapshot.
144
- return { id: params.id, injectionChecks: resolveInjections().filter((i) => i.check).length };
158
+ return {
159
+ id: params.id,
160
+ injectionChecks: resolveInjections(row.mode).filter((i) => i.check).length
161
+ };
145
162
  },
146
163
  actions: {
147
164
  restart: ({ params }) => {
@@ -169,6 +186,7 @@ export const routes: Record<string, MochiRouteValue> = {
169
186
  const hostEnvVarNames = parseHostEnvVarNames(getOption('host_env_var_names'));
170
187
  return {
171
188
  pet: currentPet(),
189
+ defaultMode: getDefaultMode(),
172
190
  defaultImage: getOption('default_image') ?? DEFAULT_IMAGE,
173
191
  builtinImage: DEFAULT_IMAGE,
174
192
  disableBuildCache: getOption('disable_build_cache') === '1',
@@ -213,6 +231,14 @@ export const routes: Record<string, MochiRouteValue> = {
213
231
  };
214
232
  },
215
233
  actions: {
234
+ // The default editor surface (full IDE vs terminal) new instances start in.
235
+ defaultMode: ({ formData }) => {
236
+ const mode = normalizeMode(str(formData, 'mode'));
237
+ setOption('default_mode', mode);
238
+ broadcastDefaultMode(mode);
239
+ return success({ mode });
240
+ },
241
+
216
242
  // Persist the default container image used when a source folder ships no devcontainer.json.
217
243
  defaultImage: ({ formData }) => {
218
244
  const image = str(formData, 'image');
@@ -382,6 +408,16 @@ export const routes: Record<string, MochiRouteValue> = {
382
408
  }
383
409
  }),
384
410
 
411
+ // Persists the dashboard filter and pushes it to every open tab over the central stream.
412
+ '/api/settings/filter': Mochi.api(async ({ method, request }) => {
413
+ if (method !== 'POST') return apiError(405, 'Method Not Allowed');
414
+ const body = (await request.json().catch(() => null)) as { value?: string } | null;
415
+ if (!body || !isInstanceFilter(body.value)) return apiError(400, 'Invalid filter');
416
+ setOption('instance_filter', body.value);
417
+ broadcastFilter(body.value);
418
+ return json({ value: body.value });
419
+ }),
420
+
385
421
  '/api/stream': Mochi.ws({
386
422
  // Mochi.ws routes bypass the global basicAuth handle, so enforce origin + auth here.
387
423
  upgrade: (req) => (wsUpgradeAllowed(req) ? {} : false),
@@ -397,10 +433,16 @@ export const routes: Record<string, MochiRouteValue> = {
397
433
  sourcePath?: string;
398
434
  name?: string;
399
435
  branch?: string;
436
+ mode?: string;
400
437
  } | null;
401
438
  if (!body?.sourcePath) return apiError(400, 'sourcePath is required');
402
439
  try {
403
- const instance = await createInstance(body.sourcePath, body.name, { branch: body.branch });
440
+ // An omitted mode falls back to the global default inside createInstance.
441
+ const mode = body.mode === undefined ? undefined : normalizeMode(body.mode);
442
+ const instance = await createInstance(body.sourcePath, body.name, {
443
+ branch: body.branch,
444
+ mode
445
+ });
404
446
  return json({ instance: sanitizeInstance(instance) }, { status: 201 });
405
447
  } catch (err) {
406
448
  return apiError(400, (err as Error).message);
@@ -433,6 +475,13 @@ export const routes: Record<string, MochiRouteValue> = {
433
475
  return { instance: sanitizeInstance(renameInstance(params.id!, body.name)) };
434
476
  }),
435
477
 
478
+ // Terminal mode's split-view toggle; purely a remembered UI preference.
479
+ '/api/instances/:id/split': mutationRoute('POST', async ({ params, request }) => {
480
+ const body = (await request.json().catch(() => null)) as { open?: boolean } | null;
481
+ if (typeof body?.open !== 'boolean') throw new Error('open (boolean) is required');
482
+ return { instance: sanitizeInstance(setTerminalSplit(params.id!, body.open)) };
483
+ }),
484
+
436
485
  // Both port routes only mutate the persisted set; /rebuild is what applies it.
437
486
  '/api/instances/:id/ports': mutationRoute('POST', async ({ params, request }) => {
438
487
  const body = (await request.json().catch(() => null)) as { port?: number } | null;
package/src/types.ts CHANGED
@@ -19,15 +19,31 @@ export interface Instance {
19
19
  created_at: number;
20
20
  /** `'local'` when the folder shipped its own config; null until provisioned. */
21
21
  image_source: string | null;
22
+ /** `'ide'` serves full code-server; `'terminal'` serves only ttyd + Claude Code. */
23
+ mode: InstanceMode;
24
+ /** Terminal mode only: 1 when the scratch-shell pane was left open, so a reload restores it. */
25
+ terminal_split: number;
22
26
  /** Polled per reconcile rather than persisted; null if unknown. */
23
27
  git_branch: string | null;
24
28
  attention: 'done' | 'waiting' | null;
25
29
  forwarded_ports: PortForward[];
26
30
  }
27
31
 
32
+ /** `'ide'` serves full code-server; `'terminal'` serves only ttyd + Claude Code. */
33
+ export type InstanceMode = 'ide' | 'terminal';
34
+
35
+ /** Anything that isn't the explicit terminal opt-in falls back to the full IDE. */
36
+ export function normalizeMode(value: unknown): InstanceMode {
37
+ return value === 'terminal' ? 'terminal' : 'ide';
38
+ }
39
+
28
40
  /** Dashboard run-state view filter: All | Active (running/creating) | Stopped (stopped/error). */
29
41
  export type InstanceFilter = 'all' | 'active' | 'stopped';
30
42
 
43
+ export function isInstanceFilter(v: unknown): v is InstanceFilter {
44
+ return v === 'all' || v === 'active' || v === 'stopped';
45
+ }
46
+
31
47
  /** Live only — never persisted, so it always reflects the most recent probe. */
32
48
  export interface InstanceHealth {
33
49
  containerRunning: boolean;
@@ -52,6 +68,8 @@ export interface Preflight {
52
68
  docker: boolean;
53
69
  cli: boolean;
54
70
  auth: AuthProvider[];
71
+ /** Global default the picker's mode toggle starts on; per-instance override wins. */
72
+ defaultMode: InstanceMode;
55
73
  }
56
74
 
57
75
  /** Same-origin so the app's Basic Auth covers the editor too. */
@@ -1 +0,0 @@
1
- import{Za as a}from"/_mochi/client/chunk-qj7zy2d9.js";export{a as registerComponent};
@@ -1,2 +0,0 @@
1
- import{a as ti,b as Nt,c as De,d as Ht,e as Et,f as Jt,h as ni}from"/_mochi/client/chunk-fqg2qzj8.js";import{i as gt,l as je,m as ri}from"/_mochi/client/chunk-rpdphch7.js";import{n as Xe}from"/_mochi/client/chunk-4jgkak13.js";import{u as ii,v as Re,w as $e,x as ai,y as Ue,z as jt}from"/_mochi/client/chunk-k5m4kt20.js";import{A as te,B as Ve}from"/_mochi/client/chunk-330mrspw.js";import{$ as xe,Aa as de,Da as Xt,G as s,Ga as le,H as j,Ja as Te,L as X,M as U,Ma as H,Oa as ye,Pa as Zt,Qa as Gt,Ra as q,S as ft,Sa as ee,T as wt,Ta as Se,U as L,W as it,X as S,Xa as Ut,Z as l,Za as li,_ as fe,aa as d,ba as ue,ca as $,da as ne,ga as M,ha as ht,ia as xt,ja as Qe,ka as Yt,la as e,oa as ei,pa as Ae,qa as W,ra as _e,sa as m,ua as ce,va as ot,wa as f,xa as V,ya as C,za as qt}from"/_mochi/client/chunk-qj7zy2d9.js";var zt=!1;class bt extends Date{#e=S(super.getTime());#t=new Map;#i=ht;constructor(...i){super(...i);if(!zt)this.#a()}#a(){zt=!0;var i=bt.prototype,t=Date.prototype,a=Object.getOwnPropertyNames(t);for(let r of a){if(r.startsWith("get")||r.startsWith("to")||r==="valueOf")i[r]=function(...b){if(b.length>0)return e(this.#e),t[r].apply(this,b);var g=this.#t.get(r);if(g===void 0){let p=ht;xt(this.#i),g=L(()=>{return e(this.#e),t[r].apply(this,b)}),this.#t.set(r,g),xt(p)}return e(g)};if(r.startsWith("set"))i[r]=function(...b){var g=t[r].apply(this,b);return l(this.#e,t.getTime.call(this)),g}}}}var di=["forEach","isDisjointFrom","isSubsetOf","isSupersetOf"],oi=["difference","intersection","symmetricDifference","union"],Vt=!1;class Le extends Set{#e=new Map;#t=S(0);#i=S(0);#a=Qe||-1;constructor(i){super();if(i){for(var t of i)super.add(t);this.#i.v=super.size}if(!Vt)this.#n()}#r(i){return Qe===this.#a?S(i):it(i)}#n(){Vt=!0;var i=Le.prototype,t=Set.prototype;for(let a of di)i[a]=function(...r){return e(this.#t),t[a].apply(this,r)};for(let a of oi)i[a]=function(...r){e(this.#t);var b=t[a].apply(this,r);return new Le(b)}}has(i){var t=super.has(i),a=this.#e,r=a.get(i);if(r===void 0){if(!t)return e(this.#t),!1;r=this.#r(!0),a.set(i,r)}return e(r),t}add(i){if(!super.has(i))super.add(i),l(this.#i,super.size),fe(this.#t);return this}delete(i){var t=super.delete(i),a=this.#e,r=a.get(i);if(r!==void 0)a.delete(i),l(r,!1);if(t)l(this.#i,super.size),fe(this.#t);return t}clear(){if(super.size===0)return;super.clear();var i=this.#e;for(var t of i.values())l(t,!1);i.clear(),l(this.#i,0),fe(this.#t)}keys(){return this.values()}values(){return e(this.#t),super.values()}entries(){return e(this.#t),super.entries()}[Symbol.iterator](){return this.keys()}get size(){return e(this.#i)}}class Rt extends Map{#e=new Map;#t=S(0);#i=S(0);#a=Qe||-1;constructor(i){super();if(i){for(var[t,a]of i)super.set(t,a);this.#i.v=super.size}}#r(i){return Qe===this.#a?S(i):it(i)}has(i){var t=this.#e,a=t.get(i);if(a===void 0)if(super.has(i))a=this.#r(0),t.set(i,a);else return e(this.#t),!1;return e(a),!0}forEach(i,t){this.#n(),super.forEach(i,t)}get(i){var t=this.#e,a=t.get(i);if(a===void 0)if(super.has(i))a=this.#r(0),t.set(i,a);else{e(this.#t);return}return e(a),super.get(i)}set(i,t){var a=this.#e,r=a.get(i),b=super.get(i),g=super.set(i,t),p=this.#t;if(r===void 0)r=this.#r(0),a.set(i,r),l(this.#i,super.size),fe(p);else if(b!==t){fe(r);var x=p.reactions===null?null:new Set(p.reactions),w=x===null||!r.reactions?.every((A)=>x.has(A));if(w)fe(p)}return g}delete(i){var t=this.#e,a=t.get(i),r=super.delete(i);if(a!==void 0)t.delete(i),l(a,-1);if(r)l(this.#i,super.size),fe(this.#t);return r}clear(){if(super.size===0)return;super.clear();var i=this.#e;l(this.#i,0);for(var t of i.values())l(t,-1);fe(this.#t),i.clear()}#n(){e(this.#t);var i=this.#e;if(this.#i.v!==i.size){for(var t of super.keys())if(!i.has(t)){var a=this.#r(0);i.set(t,a)}}for([,a]of this.#e)e(a)}keys(){return e(this.#t),super.keys()}values(){return this.#n(),super.values()}entries(){return this.#n(),super.entries()}[Symbol.iterator](){return this.entries()}get size(){return e(this.#i),super.size}}var at=Symbol("replace");class rt extends URLSearchParams{#e=S(0);#t=Wt();#i=!1;#a(){if(!this.#t||this.#i)return;this.#i=!0;let i=this.toString();this.#t.search=i&&`?${i}`,this.#i=!1}[at](i){if(this.#i)return;if(i.toString()===super.toString())return;this.#i=!0;for(let t of[...super.keys()])super.delete(t);for(let[t,a]of i)super.append(t,a);fe(this.#e),this.#i=!1}append(i,t){super.append(i,t),this.#a(),fe(this.#e)}delete(i,t){var a=super.has(i,t);if(super.delete(i,t),a)this.#a(),fe(this.#e)}get(i){return e(this.#e),super.get(i)}getAll(i){return e(this.#e),super.getAll(i)}has(i,t){return e(this.#e),super.has(i,t)}keys(){return e(this.#e),super.keys()}forEach(i,t){e(this.#e),super.forEach(i,t)}set(i,t){var a=super.getAll(i);super.set(i,t);var r=super.getAll(i);if(a.length!==r.length||a.some((b,g)=>b!==r[g]))this.#a(),fe(this.#e)}sort(){super.sort(),this.#a(),fe(this.#e)}toString(){return e(this.#e),super.toString()}values(){return e(this.#e),super.values()}entries(){return e(this.#e),super.entries()}[Symbol.iterator](){return this.entries()}get size(){return e(this.#e),super.size}}var St=null;function Wt(){return St}class Kt extends URL{#e=S(super.protocol);#t=S(super.username);#i=S(super.password);#a=S(super.hostname);#r=S(super.port);#n=S(super.pathname);#l=S(super.hash);#s=S(super.search);#d;constructor(i,t){i=new URL(i,t);super(i);St=this,this.#d=new rt(i.searchParams),St=null}get hash(){return e(this.#l)}set hash(i){super.hash=i,l(this.#l,super.hash)}get host(){return e(this.#a),e(this.#r),super.host}set host(i){super.host=i,l(this.#a,super.hostname),l(this.#r,super.port)}get hostname(){return e(this.#a)}set hostname(i){super.hostname=i,l(this.#a,super.hostname)}get href(){return e(this.#e),e(this.#t),e(this.#i),e(this.#a),e(this.#r),e(this.#n),e(this.#l),e(this.#s),super.href}set href(i){super.href=i,l(this.#e,super.protocol),l(this.#t,super.username),l(this.#i,super.password),l(this.#a,super.hostname),l(this.#r,super.port),l(this.#n,super.pathname),l(this.#l,super.hash),l(this.#s,super.search),this.#d[at](super.searchParams)}get password(){return e(this.#i)}set password(i){super.password=i,l(this.#i,super.password)}get pathname(){return e(this.#n)}set pathname(i){super.pathname=i,l(this.#n,super.pathname)}get port(){return e(this.#r)}set port(i){super.port=i,l(this.#r,super.port)}get protocol(){return e(this.#e)}set protocol(i){super.protocol=i,l(this.#e,super.protocol)}get search(){return e(this.#s)}set search(i){super.search=i,l(this.#s,super.search),this.#d[at](super.searchParams)}get username(){return e(this.#t)}set username(i){super.username=i,l(this.#t,super.username)}get origin(){return e(this.#e),e(this.#a),e(this.#r),super.origin}get searchParams(){return this.#d}toString(){return this.href}toJSON(){return this.href}}class Ot{#e;#t;constructor(i,t){this.#e=i,this.#t=wt(t)}get current(){return this.#t(),this.#e()}}var Qt=/^[A-Za-z0-9._-]+$/;function ci(i){let t=i.trim();if(!t)return null;let a,r,b=t.match(/^[A-Za-z0-9._-]+@([A-Za-z0-9.-]+):(.+)$/);if(b)a=b[1],r=b[2];else if(/^[a-z][a-z0-9+.-]*:\/\//i.test(t)){let w;try{w=new URL(t)}catch{return null}if(w.protocol!=="http:"&&w.protocol!=="https:"&&w.protocol!=="ssh:")return null;a=w.hostname,r=w.pathname}else{let w=t.match(/^([A-Za-z0-9-]+\.[A-Za-z0-9.-]+)\/(.+)$/);if(!w)return null;a=w[1],r=w[2]}if(!a||!r)return null;let g=r.replace(/\.git$/i,"").split("/").filter(Boolean),[p,x]=g;if(!p||!x||!Qt.test(p)||!Qt.test(x))return null;return{host:a,owner:p,repo:x,cloneUrl:`https://${a}/${p}/${x}.git`}}function It(i){return ci(i)!==null}var $i=new Set(["$$slots","$$events","$$legacy"]);function nt(i,t){let a=q(t,$i),r=[["path",{d:"M16 14v2.2l1.6 1"}],["path",{d:"M7 20H4a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h3.9a2 2 0 0 1 1.69.9l.81 1.2a2 2 0 0 0 1.67.9H20a2 2 0 0 1 2 2"}],["circle",{cx:"16",cy:"16",r:"6"}]];te(i,ee({name:"folder-clock"},()=>a,{get iconNode(){return r}}))}var mi=new Set(["$$slots","$$events","$$legacy"]);function Ye(i,t){let a=q(t,mi),r=[["path",{d:"M15 6a9 9 0 0 0-9 9V3"}],["circle",{cx:"18",cy:"6",r:"3"}],["circle",{cx:"6",cy:"18",r:"3"}]];te(i,ee({name:"git-branch"},()=>a,{get iconNode(){return r}}))}var gi=new Set(["$$slots","$$events","$$legacy"]);function lt(i,t){let a=q(t,gi),r=[["path",{d:"m5 12 7-7 7 7"}],["path",{d:"M12 19V5"}]];te(i,ee({name:"arrow-up"},()=>a,{get iconNode(){return r}}))}var vi=new Set(["$$slots","$$events","$$legacy"]);function st(i,t){let a=q(t,vi),r=[["path",{d:"M20 20a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2h-7.9a2 2 0 0 1-1.69-.9L9.6 3.9A2 2 0 0 0 7.93 3H4a2 2 0 0 0-2 2v13a2 2 0 0 0 2 2Z"}]];te(i,ee({name:"folder"},()=>a,{get iconNode(){return r}}))}var pi=new Set(["$$slots","$$events","$$legacy"]);function Ze(i,t){let a=q(t,pi),r=[["path",{d:"m21.73 18-8-14a2 2 0 0 0-3.48 0l-8 14A2 2 0 0 0 4 21h16a2 2 0 0 0 1.73-3"}],["path",{d:"M12 9v4"}],["path",{d:"M12 17h.01"}]];te(i,ee({name:"triangle-alert"},()=>a,{get iconNode(){return r}}))}var ui=m('<div class="recent-row svelte-oq97c4"><button class="recent-pick svelte-oq97c4"><span class="icon svelte-oq97c4"><!></span> <span class="recent-text svelte-oq97c4"><span class="recent-name svelte-oq97c4"> </span> <span class="recent-path svelte-oq97c4"> </span></span></button> <button class="recent-x svelte-oq97c4" title="Remove from history"><!></button></div>'),hi=m('<button class="recent-toggle svelte-oq97c4"> </button>'),xi=m('<div class="recent svelte-oq97c4"><div class="recent-label svelte-oq97c4">Recent</div> <!> <!></div>'),bi=m('<div class="muted svelte-oq97c4">Loading…</div>'),Si=m('<div class="muted err svelte-oq97c4"> </div>'),wi=m('<div class="row svelte-oq97c4"><button class="nav svelte-oq97c4"><span class="icon svelte-oq97c4"><!></span> <span class="ename svelte-oq97c4">..</span></button></div>'),Ii=m('<div class="muted svelte-oq97c4"> </div>'),Ni=m('<span class="badge svelte-oq97c4">devcontainer</span>'),Ci=m('<div><button class="nav svelte-oq97c4"><span class="icon svelte-oq97c4"><!></span> <span class="ename svelte-oq97c4"> </span> <!></button> <button class="pick-inline svelte-oq97c4">Select</button></div>'),_i=m("<!> <!> <!>",1),Ei=m(`<div class="warn svelte-oq97c4"><!> <span>No <code class="svelte-oq97c4">devcontainer.json</code> in this folder — a default image will be used if you select
2
- it.</span></div>`),Mi=m('<div class="overlay svelte-oq97c4" role="button" tabindex="0"><div class="modal panel svelte-oq97c4" role="dialog" aria-modal="true" aria-label="Pick a project folder" tabindex="-1"><div class="head svelte-oq97c4"><h2 class="svelte-oq97c4">Pick a project folder</h2> <button class="x svelte-oq97c4" aria-label="Close"><!></button></div> <div class="clone svelte-oq97c4"><div class="clone-label svelte-oq97c4">Clone a Git repository</div> <div class="clone-row svelte-oq97c4"><input class="clone-url svelte-oq97c4" type="text" placeholder="https://github.com/owner/repo" spellcheck="false" autocomplete="off"/> <input class="clone-branch svelte-oq97c4" type="text" placeholder="branch (optional)" spellcheck="false" autocomplete="off"/> <button class="clone-btn svelte-oq97c4">Clone</button></div></div> <div class="crumbs svelte-oq97c4"><code class="svelte-oq97c4"> </code></div> <!> <div class="search svelte-oq97c4"><input type="text" placeholder="Filter folders…" spellcheck="false" autocomplete="off" class="svelte-oq97c4"/></div> <div class="list svelte-oq97c4"><!></div> <!> <div class="foot svelte-oq97c4"><span class="hint svelte-oq97c4">Browse to a folder, then select this folder or any subfolder.</span> <button class="primary svelte-oq97c4">Select this folder</button></div></div></div>');function Ct(i,t){X(t,!0);let a=S(null),r=S(!0),b=S(null),g=S(""),p=S(null),x=S(xe([])),w=S(!1),A=S(""),D=S(""),z=L(()=>It(e(A)));function O(){if(!e(z))return;t.onpick(e(A).trim(),{branch:e(D).trim()||void 0})}let u=L(()=>e(a)?e(a).entries.filter((h)=>h.name.toLowerCase().includes(e(g).trim().toLowerCase())):[]),T=L(()=>e(w)?e(x):e(x).slice(0,5));async function P(){try{let h=await Nt("/api/history");l(x,h.history??[],!0)}catch{}}async function I(h){let K=e(x);l(x,e(x).filter((pe)=>pe.source_path!==h),!0);try{await Ht("/api/history",{sourcePath:h})}catch{l(x,K,!0)}}async function B(h=null){l(r,!0),l(b,null),l(g,"");try{let K=h?`/api/browse?path=${encodeURIComponent(h)}`:"/api/browse";l(a,await Nt(K,void 0,"Could not list folder"),!0)}catch(K){l(b,K.message,!0)}finally{l(r,!1)}await Yt(),e(p)?.focus()}ne(()=>{B(),P()});var F=Mi(),E=d(F),k=d(E),Y=$(d(k),2),Z=d(Y);Xe(Z,{size:16}),s(Y),s(k);var re=$(k,2),we=$(d(re),2),ve=d(we);Te(ve);var he=$(ve,2);Te(he);var Ie=$(he,2);s(we),s(re);var Ee=$(re,2),Pe=d(Ee),Me=d(Pe,!0);s(Pe),s(Ee);var Ne=$(Ee,2);{var v=(h)=>{var K=xi(),pe=$(d(K),2);de(pe,17,()=>e(T),(be)=>be.source_path,(be,me)=>{var ie=ui(),ae=d(ie),J=d(ae),ge=d(J);{var Be=(Ce)=>{Ye(Ce,{size:16})},Ke=L(()=>It(e(me).source_path)),Ge=(Ce)=>{nt(Ce,{size:16})};C(ge,(Ce)=>{if(e(Ke))Ce(Be);else Ce(Ge,-1)})}s(J);var qe=$(J,2),Fe=d(qe),pt=d(Fe,!0);s(Fe);var et=$(Fe,2),ut=d(et,!0);s(et),s(qe),s(ae);var Oe=$(ae,2),ze=d(Oe);Xe(ze,{size:14}),s(Oe),s(ie),M(()=>{V(pt,e(me).name),V(ut,e(me).source_path),H(Oe,"aria-label",`Remove ${e(me).name??""} from history`)}),W("click",ae,()=>t.onpick(e(me).source_path)),W("click",Oe,(Ce)=>{Ce.stopPropagation(),I(e(me).source_path)}),f(be,ie)});var Je=$(pe,2);{var We=(be)=>{var me=hi(),ie=d(me,!0);s(me),M(()=>V(ie,e(w)?"Show fewer":`Show all (${e(x).length})`)),W("click",me,()=>l(w,!e(w))),f(be,me)};C(Je,(be)=>{if(e(x).length>5)be(We)})}s(K),f(h,K)};C(Ne,(h)=>{if(e(x).length>0)h(v)})}var N=$(Ne,2),y=d(N);Te(y),Zt(y,(h)=>l(p,h),()=>e(p)),s(N);var c=$(N,2),n=d(c);{var o=(h)=>{var K=bi();f(h,K)},_=(h)=>{var K=Si(),pe=d(K,!0);s(K),M(()=>V(pe,e(b))),f(h,K)},Q=(h)=>{var K=_i(),pe=ue(K);{var Je=(ie)=>{var ae=wi(),J=d(ae),ge=d(J),Be=d(ge);lt(Be,{size:16}),s(ge),j(2),s(J),s(ae),W("click",J,()=>B(e(a)?.parent??null)),f(ie,ae)};C(pe,(ie)=>{if(e(a).parent&&!e(g))ie(Je)})}var We=$(pe,2);{var be=(ie)=>{var ae=Ii(),J=d(ae,!0);s(ae),M(()=>V(J,e(g)?"No folders match.":"No subfolders here.")),f(ie,ae)};C(We,(ie)=>{if(e(u).length===0)ie(be)})}var me=$(We,2);de(me,19,()=>e(u),(ie)=>ie.path,(ie,ae,J)=>{var ge=Ci();let Be;var Ke=d(ge),Ge=d(Ke),qe=d(Ge);st(qe,{size:16}),s(Ge);var Fe=$(Ge,2),pt=d(Fe,!0);s(Fe);var et=$(Fe,2);{var ut=(ze)=>{var Ce=Ni();f(ze,Ce)};C(et,(ze)=>{if(e(ae).hasDevcontainer)ze(ut)})}s(Ke);var Oe=$(Ke,2);s(ge),M((ze)=>{Be=le(ge,1,"row svelte-oq97c4",null,Be,ze),V(pt,e(ae).name)},[()=>({"first-match":e(g).trim()&&e(J)===0})]),W("click",Ke,()=>B(e(ae).path)),W("click",Oe,()=>t.onpick(e(ae).path)),f(ie,ge)}),f(h,K)};C(n,(h)=>{if(e(r))h(o);else if(e(b))h(_,1);else if(e(a))h(Q,2)})}s(c);var se=$(c,2);{var R=(h)=>{var K=Ei(),pe=d(K);Ze(pe,{size:15}),j(2),s(K),f(h,K)};C(se,(h)=>{if(e(a)&&!e(a).hasDevcontainer)h(R)})}var oe=$(se,2),ke=$(d(oe),2);s(oe),s(E),s(F),M(()=>{Ie.disabled=!e(z),V(Me,e(a)?.path??"…"),ke.disabled=!e(a)}),W("click",F,function(...h){t.onclose?.apply(this,h)}),W("keydown",F,(h)=>h.key==="Escape"&&t.onclose()),W("click",E,(h)=>h.stopPropagation()),W("keydown",E,()=>{}),W("click",Y,function(...h){t.onclose?.apply(this,h)}),W("keydown",ve,(h)=>{if(h.key==="Enter")h.preventDefault(),O()}),ye(ve,()=>e(A),(h)=>l(A,h)),W("keydown",he,(h)=>{if(h.key==="Enter")h.preventDefault(),O()}),ye(he,()=>e(D),(h)=>l(D,h)),W("click",Ie,O),W("keydown",y,(h)=>{let K=e(u)[0];if(h.key==="Enter"&&K)h.preventDefault(),B(K.path)}),ye(y,()=>e(g),(h)=>l(g,h)),W("click",ke,()=>e(a)&&t.onpick(e(a).path)),f(i,F),U()}_e(["click","keydown"]);var Li=m('<div class="branch svelte-jv8lut" title="Branch checked out in the container"><!><span class="svelte-jv8lut"> </span></div>');function _t(i,t){var a=Li(),r=d(a);Ye(r,{size:12});var b=$(r),g=d(b,!0);s(b),s(a),M(()=>V(g,t.branch)),f(i,a)}var Pi=new Set(["$$slots","$$events","$$legacy"]);function dt(i,t){let a=q(t,Pi),r=[["path",{d:"M17 19a1 1 0 0 1-1-1v-2a2 2 0 0 1 2-2h2a2 2 0 0 1 2 2v2a1 1 0 0 1-1 1z"}],["path",{d:"M17 21v-2"}],["path",{d:"M19 14V6.5a1 1 0 0 0-7 0v11a1 1 0 0 1-7 0V10"}],["path",{d:"M21 21v-2"}],["path",{d:"M3 5V3"}],["path",{d:"M4 10a2 2 0 0 1-2-2V6a1 1 0 0 1 1-1h4a1 1 0 0 1 1 1v2a2 2 0 0 1-2 2z"}],["path",{d:"M7 5V3"}]];te(i,ee({name:"cable"},()=>a,{get iconNode(){return r}}))}var Bi=m('<a target="_blank" rel="noopener"> </a>'),Ti=m('<div class="fports svelte-1uaz383" title="Forwarded ports — click to open"><!> <span class="list svelte-1uaz383"></span></div>');function Mt(i,t){X(t,!0);var a=ot(),r=ue(a);{var b=(g)=>{var p=Ti(),x=d(p);dt(x,{size:12});var w=$(x,2);de(w,21,()=>t.ports,(A)=>A.container_port,(A,D)=>{var z=Bi();let O;var u=d(z,!0);s(z),M((T,P)=>{O=le(z,1,"fport svelte-1uaz383",null,O,{open:e(D).open}),H(z,"href",T),H(z,"title",P),V(u,e(D).container_port)},[()=>Et(e(D).host_port),()=>`container :${e(D).container_port} → ${Et(e(D).host_port)} ${e(D).open?"(open)":"(not published yet)"}`]),f(A,z)}),s(w),s(p),f(g,p)};C(r,(g)=>{if(t.ports.length)g(b)})}f(i,a),U()}var yi=m('<div class="busy-overlay svelte-13338y7" aria-live="polite"><span class="busy-label svelte-13338y7"> </span></div>'),Ai=m('<input class="name-edit svelte-13338y7"/>'),Di=m('<button class="name svelte-13338y7" title="Click to rename"> </button>'),ki=m("<span></span>"),Fi=m('<div class="card-error svelte-13338y7"> </div>'),zi=m("<!> <!>",1),Vi=m('<li><!> <div class="card-head svelte-13338y7"><!> <!> <!> <!></div> <div class="path svelte-13338y7"> </div> <!> <!> <!> <div class="actions svelte-13338y7"><!> <!> <!> <!></div></li>');function Lt(i,t){X(t,!0);let a=Se(t,"editingName",15),r=Se(t,"pending",3,null),b=L(()=>t.instance.status==="running"||t.instance.status==="stopped"||t.instance.status==="error"&&!!t.instance.container_id),g={start:"Starting…",stop:"Stopping…",delete:"Deleting…",rebuild:"Rebuilding…"};var p=Vi();let x;var w=d(p);{var A=(c)=>{var n=yi(),o=d(n),_=d(o,!0);s(o),s(n),M(()=>V(_,g[r()])),f(c,n)};C(w,(c)=>{if(r())c(A)})}var D=$(w,2),z=d(D);Re(z,{get id(){return t.instance.id},get name(){return t.instance.name},interactive:!0});var O=$(z,2);{var u=(c)=>{var n=Ai();Te(n),ft(n,!0),Ae("focus",n,(o)=>o.currentTarget.select()),Ae("blur",n,function(...o){t.oncommitrename?.apply(this,o)}),W("keydown",n,(o)=>{if(o.key==="Enter")o.currentTarget.blur();else if(o.key==="Escape")t.oncancelrename()}),ye(n,a),f(c,n)},T=(c)=>{var n=Di(),o=d(n,!0);s(n),M(()=>V(o,t.instance.name)),W("click",n,function(..._){t.onstartrename?.apply(this,_)}),f(c,n)};C(O,(c)=>{if(t.editing)c(u);else c(T,-1)})}var P=$(O,2);{var I=(c)=>{var n=ki();let o;M(()=>{o=le(n,1,"attn svelte-13338y7",null,o,{"attn-done":t.instance.attention==="done","attn-waiting":t.instance.attention==="waiting"}),H(n,"title",t.instance.attention==="waiting"?"Claude is waiting for input":"Claude finished"),H(n,"aria-label",t.instance.attention==="waiting"?"Claude is waiting for input":"Claude finished")}),f(c,n)};C(P,(c)=>{if(t.instance.attention)c(I)})}var B=$(P,2);Jt(B,{get status(){return t.instance.status}}),s(D);var F=$(D,2),E=d(F,!0);s(F);var k=$(F,2);{var Y=(c)=>{Mt(c,{get ports(){return t.instance.forwarded_ports}})};C(k,(c)=>{if(t.instance.status==="running")c(Y)})}var Z=$(k,2);{var re=(c)=>{_t(c,{get branch(){return t.instance.git_branch}})};C(Z,(c)=>{if(t.instance.git_branch)c(re)})}var we=$(Z,2);{var ve=(c)=>{var n=Fi(),o=d(n,!0);s(n),M(()=>V(o,t.instance.error)),f(c,n)};C(we,(c)=>{if(t.instance.status==="error"&&t.instance.error)c(ve)})}var he=$(we,2),Ie=d(he);{var Ee=(c)=>{var n=zi(),o=ue(n);{let Q=L(()=>`/ide/${t.instance.id}`);$e(o,{variant:"primary",size:"sm",get href(){return e(Q)},children:(se,R)=>{j();var oe=ce("Open IDE");f(se,oe)},$$slots:{default:!0}})}var _=$(o,2);$e(_,{size:"sm",onclick:()=>t.onact("stop"),children:(Q,se)=>{j();var R=ce("Stop");f(Q,R)},$$slots:{default:!0}}),f(c,n)},Pe=(c)=>{$e(c,{size:"sm",onclick:()=>t.onact("start"),children:(n,o)=>{j();var _=ce("Start");f(n,_)},$$slots:{default:!0}})},Me=(c)=>{{let n=L(()=>Ve(`/instances/${t.instance.id}`));$e(c,{size:"sm",get href(){return e(n)},target:"_blank",rel:"noopener noreferrer",children:(o,_)=>{j();var Q=ce("View logs");f(o,Q)},$$slots:{default:!0}})}};C(Ie,(c)=>{if(t.instance.status==="running")c(Ee);else if(t.instance.status==="stopped"||t.instance.status==="error"&&t.instance.container_id)c(Pe,1);else if(t.instance.status==="creating")c(Me,2)})}var Ne=$(Ie,2);{var v=(c)=>{$e(c,{size:"sm",title:"Recreate the container and re-run setup (credentials, hooks, port forwards)",onclick:()=>t.onact("rebuild"),children:(n,o)=>{j();var _=ce("Rebuild");f(n,_)},$$slots:{default:!0}})};C(Ne,(c)=>{if(e(b))c(v)})}var N=$(Ne,2);{let c=L(()=>Ve(`/instances/${t.instance.id}`));$e(N,{size:"sm",ghost:!0,get href(){return e(c)},target:"_blank",rel:"noopener noreferrer",children:(n,o)=>{j();var _=ce("Details");f(n,_)},$$slots:{default:!0}})}var y=$(N,2);$e(y,{variant:"danger",size:"sm",onclick:()=>t.onact("delete"),children:(c,n)=>{j();var o=ce("Delete");f(c,o)},$$slots:{default:!0}}),s(he),s(p),M(()=>{x=le(p,1,"card panel svelte-13338y7",null,x,{busy:!!r()}),H(p,"aria-busy",!!r()||void 0),H(F,"title",t.instance.source_path),V(E,t.instance.source_path)}),f(i,p),U()}_e(["keydown","click"]);var Ri=new Set(["$$slots","$$events","$$legacy"]);function ct(i,t){let a=q(t,Ri),r=[["path",{d:"M15.536 11.293a1 1 0 0 0 0 1.414l2.376 2.377a1 1 0 0 0 1.414 0l2.377-2.377a1 1 0 0 0 0-1.414l-2.377-2.377a1 1 0 0 0-1.414 0z"}],["path",{d:"M2.297 11.293a1 1 0 0 0 0 1.414l2.377 2.377a1 1 0 0 0 1.414 0l2.377-2.377a1 1 0 0 0 0-1.414L6.088 8.916a1 1 0 0 0-1.414 0z"}],["path",{d:"M8.916 17.912a1 1 0 0 0 0 1.415l2.377 2.376a1 1 0 0 0 1.414 0l2.377-2.376a1 1 0 0 0 0-1.415l-2.377-2.376a1 1 0 0 0-1.414 0z"}],["path",{d:"M8.916 4.674a1 1 0 0 0 0 1.414l2.377 2.376a1 1 0 0 0 1.414 0l2.377-2.376a1 1 0 0 0 0-1.414l-2.377-2.377a1 1 0 0 0-1.414 0z"}]];te(i,ee({name:"component"},()=>a,{get iconNode(){return r}}))}var Wi=new Set(["$$slots","$$events","$$legacy"]);function $t(i,t){let a=q(t,Wi),r=[["path",{d:"M11 21.73a2 2 0 0 0 2 0l7-4A2 2 0 0 0 21 16V8a2 2 0 0 0-1-1.73l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.73z"}],["path",{d:"M12 22V12"}],["polyline",{points:"3.29 7 12 12 20.71 7"}],["path",{d:"m7.5 4.27 9 5.15"}]];te(i,ee({name:"package"},()=>a,{get iconNode(){return r}}))}var Ki=m('<a class="brand svelte-94cd8h" href="/"><span class="logo svelte-94cd8h"><!></span><span class="words svelte-94cd8h"><span>Codebay</span><span class="tagline svelte-94cd8h">devcontainer manager</span></span></a>');function Pt(i,t){X(t,!0);var a=Ki(),r=d(a),b=d(r);{var g=(x)=>{Re(x,{get art(){return t.pet},get name(){return t.pet.name},scale:4})},p=(x)=>{$t(x,{size:22})};C(b,(x)=>{if(t.pet)x(g);else x(p,-1)})}s(r),j(),s(a),f(i,a),U()}var Oi=m('<button type="button" role="radio"> </button>'),Qi=m('<div class="picker svelte-12yor8r" role="radiogroup" aria-label="Filter instances"></div>');function Bt(i,t){X(t,!0);let a=[{value:"all",label:"All"},{value:"active",label:"Active"},{value:"stopped",label:"Stopped"}];var r=Qi();de(r,21,()=>a,(b)=>b.value,(b,g)=>{var p=Oi();let x;var w=d(p,!0);s(p),M(()=>{x=le(p,1,"segment svelte-12yor8r",null,x,{active:t.value===e(g).value}),H(p,"aria-checked",t.value===e(g).value),V(w,e(g).label)}),W("click",p,()=>t.onchange(e(g).value)),f(b,p)}),s(r),f(i,r),U()}_e(["click"]);var Yi=new Set(["$$slots","$$events","$$legacy"]);function He(i,t){let a=q(t,Yi),r=[["path",{d:"M9.671 4.136a2.34 2.34 0 0 1 4.659 0 2.34 2.34 0 0 0 3.319 1.915 2.34 2.34 0 0 1 2.33 4.033 2.34 2.34 0 0 0 0 3.831 2.34 2.34 0 0 1-2.33 4.033 2.34 2.34 0 0 0-3.319 1.915 2.34 2.34 0 0 1-4.659 0 2.34 2.34 0 0 0-3.32-1.915 2.34 2.34 0 0 1-2.33-4.033 2.34 2.34 0 0 0 0-3.831A2.34 2.34 0 0 1 6.35 6.051a2.34 2.34 0 0 0 3.319-1.915"}],["circle",{cx:"12",cy:"12",r:"3"}]];te(i,ee({name:"settings"},()=>a,{get iconNode(){return r}}))}var Zi=m('<a class="cog svelte-1e745g8" target="_blank" rel="noopener noreferrer" aria-label="Settings" title="Settings"><!></a>');function Tt(i,t){X(t,!1),Gt();var a=Zi(),r=d(a);He(r,{size:16}),s(a),M((b)=>H(a,"href",b),[()=>Ve("/settings")]),f(i,a),U()}var Hi=new Set(["$$slots","$$events","$$legacy"]);function mt(i,t){let a=q(t,Hi),r=[["path",{d:"M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"}],["path",{d:"M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"}]];te(i,ee({name:"link"},()=>a,{get iconNode(){return r}}))}var Ji=m('<button type="button" class="cred-row svelte-vongf9" role="menuitem"><span></span> <span class="cred-label"> </span> <span class="cred-state svelte-vongf9"> </span></button>'),Gi=m('<div class="cred-dropdown panel svelte-vongf9" role="menu"></div>'),Xi=m('<div class="cred-menu svelte-vongf9"><button aria-haspopup="menu" aria-label="Credentials" title="Credentials"><!></button> <!></div>');function yt(i,t){X(t,!0);let a=S(!1),r=L(()=>t.auth.filter((u)=>u.available).length),b=L(()=>e(r)===t.auth.length?"ok":e(r)===0?"error":"warn"),g={ok:mt,warn:Ze,error:Xe},p=L(()=>g[e(b)]);function x(u){if(u.available)Ue.success(`${u.label} credentials come from ${u.source}.`);else{let T=u.hint?` — ${u.hint}`:"";Ue.error(`No ${u.label} credentials found${T}.`)}}ne(()=>{if(!e(a))return;let u=(P)=>{if(!P.target?.closest(".cred-menu"))l(a,!1)},T=(P)=>{if(P.key==="Escape")l(a,!1)};return window.addEventListener("click",u),window.addEventListener("keydown",T),()=>{window.removeEventListener("click",u),window.removeEventListener("keydown",T)}});var w=Xi(),A=d(w),D=d(A);Xt(D,()=>e(p),(u,T)=>{T(u,{size:16})}),s(A);var z=$(A,2);{var O=(u)=>{var T=Gi();de(T,21,()=>t.auth,(P)=>P.id,(P,I)=>{var B=Ji(),F=d(B),E=$(F,2),k=d(E,!0);s(E);var Y=$(E,2),Z=d(Y,!0);s(Y),s(B),M(()=>{H(B,"title",e(I).available?`Credentials from ${e(I).source}, copied into each new instance.`:`No credentials found on this computer${e(I).hint?` — ${e(I).hint}`:""}.`),le(F,1,`dot ${e(I).available?"on":"off"}`,"svelte-vongf9"),V(k,e(I).label),V(Z,e(I).available?"Authorized":"Not found")}),W("click",B,()=>x(e(I))),f(P,B)}),s(T),f(u,T)};C(z,(u)=>{if(e(a))u(O)})}s(w),M(()=>{le(A,1,`cred ${e(b)??""}`,"svelte-vongf9"),H(A,"aria-expanded",e(a))}),W("click",A,()=>l(a,!e(a))),f(i,w),U()}_e(["click"]);var Ui=m('<header class="topbar svelte-1h259us"><!> <div class="topbar-actions svelte-1h259us"><!> <!> <!> <!> <!> <!></div></header>');function At(i,t){let a=Se(t,"canDelete",3,!1),r=Se(t,"ready",3,!0),b=Se(t,"creating",3,!1);var g=Ui(),p=d(g);Pt(p,{get pet(){return t.pet}});var x=$(p,2),w=d(x);{var A=(I)=>{$e(I,{variant:"default",size:"sm",get icon(){return ct},href:"/debug",children:(B,F)=>{j();var E=ce("Debug");f(B,E)},$$slots:{default:!0}})};C(w,(I)=>{if(Ut)I(A)})}var D=$(w,2);{var z=(I)=>{Bt(I,{get value(){return t.filter},get onchange(){return t.onFilter}})};C(D,(I)=>{if(t.filter&&t.onFilter)I(z)})}var O=$(D,2);Tt(O,{});var u=$(O,2);yt(u,{get auth(){return t.auth}});var T=$(u,2);{let I=L(()=>!a());$e(T,{variant:"danger",size:"sm",get onclick(){return t.onDeleteAll},get disabled(){return e(I)},children:(B,F)=>{j();var E=ce("Delete all");f(B,E)},$$slots:{default:!0}})}var P=$(T,2);{let I=L(()=>b()?void 0:gt),B=L(()=>!r()||b());$e(P,{variant:"primary",get icon(){return e(I)},get onclick(){return t.onNew},get disabled(){return e(B)},children:(F,E)=>{j();var k=ce();M(()=>V(k,b()?"Creating…":"New instance")),f(F,k)},$$slots:{default:!0}})}s(x),s(g),f(i,g)}var ji=m("<span>Docker daemon is not reachable.</span>"),qi=m("<span>The devcontainer CLI is not available.</span>"),ea=m('<div class="banner error svelte-146pixd"><strong>Setup needed.</strong> <!> <!></div>'),ta=m('<div class="banner error svelte-146pixd"><strong>Error.</strong> <span> </span></div>'),ia=m('<div class="empty svelte-146pixd"><p class="empty-sub svelte-146pixd">Loading…</p></div>'),aa=m('<div class="empty svelte-146pixd"><p class="empty-title svelte-146pixd">No instances yet</p> <p class="empty-sub svelte-146pixd">Pick a project folder to spin up an isolated devcontainer.</p> <!></div>'),ra=m('<div class="empty svelte-146pixd"><p class="empty-sub svelte-146pixd"> </p></div>'),na=m('<ul class="grid svelte-146pixd"></ul>'),la=m('<!> <main class="stage svelte-146pixd"><!> <!> <!></main> <!>',1);function Dt(i,t){X(t,!0);let a=S(!1),r=S("all"),b=S(!1),g=S(null),p=S(null),x=S(""),w=S(xe({})),A=L(()=>t.preflight.docker&&t.preflight.cli),D=L(()=>t.instances.filter((v)=>{if(e(r)==="active")return v.status==="running"||v.status==="creating";if(e(r)==="stopped")return v.status==="stopped"||v.status==="error";return!0}));ne(()=>{for(let[v,{since:N}]of Object.entries(e(w))){let y=t.instances.find((c)=>c.id===v);if(!y||y.status!==N)z(v)}});function z(v){let{[v]:N,...y}=e(w);l(w,y,!0)}async function O(v,N){l(a,!1),l(b,!0),l(g,null);try{await De("/api/instances",{sourcePath:v,branch:N?.branch},"Failed to create instance")}catch(y){l(g,y.message,!0)}finally{l(b,!1)}}async function u(v,N){if(l(g,null),N==="delete"&&!confirm("Delete this instance and its copied files?"))return;if(N==="rebuild"&&!confirm("Recreate this container and re-run setup? The workspace is kept."))return;let y=t.instances.find((c)=>c.id===v)?.status;if(y)l(w,{...e(w),[v]:{action:N,since:y}},!0);try{await De(`/api/instances/${v}/${N}`,void 0,`Failed to ${N}`)}catch(c){l(g,c.message,!0),z(v)}}function T(v){l(p,v.id,!0),l(x,v.name,!0)}function P(){l(p,null),l(x,"")}async function I(v){let N=e(x).trim(),y=t.instances.find((c)=>c.id===v)?.name;if(!N||N===y){P();return}P(),l(g,null);try{await De(`/api/instances/${v}/rename`,{name:N},"Failed to rename")}catch(c){l(g,c.message,!0)}}async function B(){if(l(g,null),!confirm(`Delete all ${t.instances.length} instances and their copied files?`))return;try{await De("/api/instances/delete-all",void 0,"Failed to delete all")}catch(v){l(g,v.message,!0)}}var F=la(),E=ue(F);{let v=L(()=>t.instances.length>0);At(E,{get auth(){return t.preflight.auth},get pet(){return t.pet},get canDelete(){return e(v)},get ready(){return e(A)},get creating(){return e(b)},get filter(){return e(r)},onFilter:(N)=>l(r,N,!0),onNew:()=>l(a,!0),onDeleteAll:B})}var k=$(E,2),Y=d(k);{var Z=(v)=>{var N=ea(),y=$(d(N),2);{var c=(_)=>{var Q=ji();f(_,Q)};C(y,(_)=>{if(!t.preflight.docker)_(c)})}var n=$(y,2);{var o=(_)=>{var Q=qi();f(_,Q)};C(n,(_)=>{if(!t.preflight.cli)_(o)})}s(N),f(v,N)};C(Y,(v)=>{if(!e(A))v(Z)})}var re=$(Y,2);{var we=(v)=>{var N=ta(),y=$(d(N),2),c=d(y,!0);s(y),s(N),M(()=>V(c,e(g))),f(v,N)};C(re,(v)=>{if(e(g))v(we)})}var ve=$(re,2);{var he=(v)=>{var N=ia();f(v,N)},Ie=(v)=>{var N=aa(),y=$(d(N),4);{let c=L(()=>!e(A));$e(y,{variant:"primary",get icon(){return gt},onclick:()=>l(a,!0),get disabled(){return e(c)},children:(n,o)=>{j();var _=ce("New instance");f(n,_)},$$slots:{default:!0}})}s(N),f(v,N)},Ee=(v)=>{var N=ra(),y=d(N),c=d(y);s(y),s(N),M(()=>V(c,`No ${e(r)??""} instances.`)),f(v,N)},Pe=(v)=>{var N=na();de(N,21,()=>e(D),(y)=>y.id,(y,c)=>{{let n=L(()=>e(p)===e(c).id),o=L(()=>e(w)[e(c).id]?.action??null);Lt(y,{get instance(){return e(c)},get editing(){return e(n)},get pending(){return e(o)},onact:(_)=>u(e(c).id,_),onstartrename:()=>T(e(c)),oncommitrename:()=>I(e(c).id),oncancelrename:P,get editingName(){return e(x)},set editingName(_){l(x,_,!0)}})}}),s(N),f(v,N)};C(ve,(v)=>{if(!t.loaded)v(he);else if(t.instances.length===0)v(Ie,1);else if(e(D).length===0)v(Ee,2);else v(Pe,-1)})}s(k);var Me=$(k,2);{var Ne=(v)=>{Ct(v,{onpick:O,onclose:()=>l(a,!1)})};C(Me,(v)=>{if(e(a))v(Ne)})}f(i,F),U()}var sa=m('<div class="tab-label editing svelte-r39acv"><!> <input class="tab-name-edit svelte-r39acv"/></div>'),da=m('<button type="button" class="tab-label svelte-r39acv"><!> <span class="tab-name svelte-r39acv"> </span></button>'),oa=m("<div><!></div>"),fa=m('<nav class="tabs svelte-r39acv"></nav>'),ca=m('<!> <a class="cog svelte-r39acv" target="_blank" rel="noopener noreferrer" title="Settings" aria-label="Settings"><!></a>',1);function kt(i,t){X(t,!0);let a=Se(t,"editingName",15);jt(i,{children:(r,b)=>{var g=ca(),p=ue(g);{var x=(D)=>{var z=fa();de(z,21,()=>t.running,(O)=>O.id,(O,u)=>{var T=oa();let P;var I=d(T);{var B=(E)=>{var k=sa(),Y=d(k);Re(Y,{get id(){return e(u).id},get name(){return e(u).name},scale:4});var Z=$(Y,2);Te(Z),ft(Z,!0),s(k),Ae("focus",Z,(re)=>re.currentTarget.select()),Ae("blur",Z,()=>t.oncommitrename(e(u).id)),W("keydown",Z,(re)=>{if(re.key==="Enter")re.currentTarget.blur();else if(re.key==="Escape")t.oncancelrename()}),ye(Z,a),f(E,k)},F=(E)=>{var k=da(),Y=d(k);Re(Y,{get id(){return e(u).id},get name(){return e(u).name},scale:4});var Z=$(Y,2),re=d(Z,!0);s(Z),s(k),M(()=>{H(k,"title",e(u).name),V(re,e(u).name)}),W("click",k,()=>t.onselect(e(u).id)),W("dblclick",k,()=>t.onstartrename(e(u))),f(E,k)};C(I,(E)=>{if(t.editingId===e(u).id)E(B);else E(F,-1)})}s(T),M(()=>P=le(T,1,"tab svelte-r39acv",null,P,{active:e(u).id===t.active,"attn-done":e(u).id!==t.active&&t.attention[e(u).id]==="done","attn-waiting":e(u).id!==t.active&&t.attention[e(u).id]==="waiting"})),f(O,T)}),s(z),f(D,z)};C(p,(D)=>{if(t.running.length>0)D(x)})}var w=$(p,2),A=d(w);He(A,{size:18}),s(w),M((D)=>H(w,"href",D),[()=>Ve("/settings")]),f(r,g)},$$slots:{default:!0}}),U()}_e(["keydown","click","dblclick"]);var $a=m('<div class="row svelte-w5e143"> </div>'),ma=m('<div class="stalled svelte-w5e143"><p class="svelte-w5e143">Waiting for code-server to answer inside the container.</p> <!></div>'),ga=m('<div class="loader svelte-w5e143"><div class="grid svelte-w5e143" aria-hidden="true"></div> <div class="label svelte-w5e143">Loading editor<span class="dot svelte-w5e143">.</span><span class="dot svelte-w5e143">.</span><span class="dot svelte-w5e143">.</span></div> <!></div>');function vt(i,t){X(t,!0);let a=Se(t,"speed",3,1),r=S(!1);ne(()=>{if(t.stalledAfterMs===void 0)return;let P=setTimeout(()=>l(r,!0),t.stalledAfterMs);return()=>clearTimeout(P)});let b=3,g=22,p=140,x=7,w=L(()=>Math.max(20,p/a())),D=S(xe((()=>Array.from({length:b},()=>Array.from({length:g},()=>Math.random()<0.5?0:1)))()));ne(()=>{if(window.matchMedia?.("(prefers-reduced-motion: reduce)").matches)return;let P=setInterval(()=>{let I=e(D).map((B)=>B.slice());for(let B=0;B<x;B++){let F=I[Math.floor(Math.random()*b)],E=Math.floor(Math.random()*g);F[E]=F[E]?0:1}l(D,I,!0)},e(w));return()=>clearInterval(P)});var z=ga(),O=d(z);de(O,21,()=>e(D),qt,(P,I)=>{var B=$a(),F=d(B,!0);s(B),M((E)=>V(F,E),[()=>e(I).join("")]),f(P,B)}),s(O);var u=$(O,4);{var T=(P)=>{var I=ma(),B=$(d(I),2);{var F=(E)=>{$e(E,{size:"sm",get onclick(){return t.onoverride},children:(k,Y)=>{j();var Z=ce("Open anyway");f(k,Z)},$$slots:{default:!0}})};C(B,(E)=>{if(t.onoverride)E(F)})}s(I),f(P,I)};C(u,(P)=>{if(e(r))P(T)})}s(z),f(i,z),U()}var va=m('<iframe class="svelte-1duc7gd"></iframe>'),pa=m("<div><!> <!></div>"),ua=m('<div class="empty svelte-1duc7gd">No running instances.</div>'),ha=m("<div><!> <div><!> <!></div></div> <!>",1);function Ft(i,t){X(t,!0);let a=S(xe(t.snapshot)),r=S(xe(t.preflight)),b=S(xe(t.pet)),g=S(t.snapshot.length>0),p=L(()=>e(a).filter((n)=>n.status==="running")),x=S(xe(Object.fromEntries(t.snapshot.map((n)=>[n.id,n.attention])))),w=S(null),A=S("");function D(n){l(w,n.id,!0),l(A,n.name,!0)}function z(){l(w,null),l(A,"")}async function O(n){let o=e(A).trim(),_=e(a).find((Q)=>Q.id===n)?.name;if(!o||o===_){z();return}z();try{await De(`/api/instances/${n}/rename`,{name:o},"Failed to rename")}catch(Q){Ue.error(Q.message)}}let u=S(xe(t.initialPath)),T=L(()=>e(u).startsWith("/ide")),P=L(()=>e(u).startsWith("/ide/")?e(u).slice(5):""),I=L(()=>e(T)?e(p).some((n)=>n.id===e(P))?e(P):e(p)[0]?.id??"":"");function B(n){if(n===e(u))return;history.pushState({},"",n),l(u,n,!0)}ne(()=>{function n(o){if(o.defaultPrevented||o.button!==0||o.metaKey||o.ctrlKey||o.shiftKey||o.altKey)return;let _=o.target?.closest?.("a");if(!_)return;let Q=_.getAttribute("href");if(!Q||_.target==="_blank"||_.hasAttribute("download"))return;let se=new URL(Q,location.href);if(se.origin!==location.origin)return;if(se.pathname==="/"||se.pathname.startsWith("/ide/"))o.preventDefault(),B(se.pathname)}return document.addEventListener("click",n),()=>document.removeEventListener("click",n)}),ne(()=>{function n(){l(u,location.pathname,!0)}return window.addEventListener("popstate",n),()=>window.removeEventListener("popstate",n)}),ne(()=>{if(e(p).length===0)return;function n(o){o.preventDefault(),o.returnValue=""}return window.addEventListener("beforeunload",n),()=>window.removeEventListener("beforeunload",n)});let F=new Le;ne(()=>{if(e(I))F.add(e(I))});let E=new Le,k=new Le,Y=new Le,Z=(n)=>k.has(n)||Y.has(n),re=1e4;ne(()=>{let n=e(p).find((o)=>o.id===e(I));document.title=e(T)&&n?`${n.name} — Codebay`:"Codebay"}),ne(()=>{return window.addEventListener("pointerdown",je),window.addEventListener("keydown",je),()=>{window.removeEventListener("pointerdown",je),window.removeEventListener("keydown",je)}}),ne(()=>{let n=!1;return ni((o)=>{if(o.type==="preflight"){l(r,{...e(r),docker:o.data.docker,cli:o.data.cli},!0);return}if(o.type==="pet"){l(b,ii(o.data.name??void 0),!0);return}if(o.type==="health"){let R=e(a).find((oe)=>oe.id===o.data.id);if(o.data.health.codeServerAccessible&&R?.status==="running")k.add(o.data.id);return}if(o.type!=="instances")return;let _=o.data,Q=new Set(_.filter((R)=>R.status==="running").map((R)=>R.id));for(let R of[...k])if(!Q.has(R))k.delete(R);for(let R of[...Y])if(!Q.has(R))Y.delete(R);for(let R of[...E])if(!Q.has(R))E.delete(R);let se={};for(let R of _)se[R.id]=R.attention;if(n)for(let R in se){let oe=se[R];if(oe&&oe!==e(x)[R])if(R===e(I))console.log(`[chime] attention id=${R} state=${oe} — skipped (tab is active/focused)`);else console.log(`[chime] attention id=${R} state=${oe} → playChime`),ri(oe)}else console.log("[chime] first frame after (re)connect — baselining, no chimes");n=!0,l(a,_,!0),l(x,se,!0),l(g,!0)},()=>{n=!1})}),ne(()=>{if(!e(I)||!e(x)[e(I)])return;let n=()=>{if(document.visibilityState==="visible")De(`/api/instances/${e(I)}/attention/clear`).catch(()=>{})};return n(),document.addEventListener("visibilitychange",n),()=>document.removeEventListener("visibilitychange",n)});var we=ha(),ve=ue(we);let he;var Ie=d(ve);{var Ee=(n)=>{kt(n,{get running(){return e(p)},get active(){return e(I)},get attention(){return e(x)},get editingId(){return e(w)},onselect:(o)=>B(`/ide/${o}`),onstartrename:D,oncommitrename:O,oncancelrename:z,get editingName(){return e(A)},set editingName(o){l(A,o,!0)}})},Pe=(n)=>{Dt(n,{get preflight(){return e(r)},get instances(){return e(a)},get loaded(){return e(g)},get pet(){return e(b)}})};C(Ie,(n)=>{if(e(T))n(Ee);else n(Pe,-1)})}var Me=$(Ie,2);let Ne;var v=d(Me);de(v,17,()=>e(p),(n)=>n.id,(n,o)=>{var _=ot(),Q=ue(_);{var se=(oe)=>{var ke=pa();let h;var K=d(ke);{var pe=(J)=>{var ge=va();M((Be)=>{H(ge,"src",Be),H(ge,"title",e(o).name)},[()=>ti(e(o))]),Ae("load",ge,()=>E.add(e(o).id)),ei(ge),f(J,ge)},Je=L(()=>Z(e(o).id));C(K,(J)=>{if(e(Je))J(pe)})}var We=$(K,2);{var be=(J)=>{vt(J,{stalledAfterMs:re,onoverride:()=>Y.add(e(o).id)})},me=L(()=>!Z(e(o).id)),ie=(J)=>{vt(J,{})},ae=L(()=>!E.has(e(o).id));C(We,(J)=>{if(e(me))J(be);else if(e(ae))J(ie,1)})}s(ke),M(()=>h=le(ke,1,"pane svelte-1duc7gd",null,h,{active:e(o).id===e(I)})),f(oe,ke)},R=L(()=>F.has(e(o).id));C(Q,(oe)=>{if(e(R))oe(se)})}f(n,_)});var N=$(v,2);{var y=(n)=>{var o=ua();f(n,o)};C(N,(n)=>{if(e(T)&&e(p).length===0)n(y)})}s(Me),s(ve);var c=$(ve,2);ai(c,{toastOptions:{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;"}}),M(()=>{he=le(ve,1,"app svelte-1duc7gd",null,he,{ide:e(T)}),Ne=le(Me,1,"panes svelte-1duc7gd",null,Ne,{hidden:!e(T)})}),f(i,we),U()}li("AppShell_2rtnxn6pgp2rh",Ft);
@@ -1,13 +0,0 @@
1
- import{o as $,p as n,q as u,r as J,s as S,t as Te,v as F,w as R,x as Ye,y as ue,z as Ae}from"/_mochi/client/chunk-k5m4kt20.js";import{A as v}from"/_mochi/client/chunk-330mrspw.js";import{$ as Ie,Aa as b,G as f,Ga as ge,H as A,Ha as be,Ja as De,L as he,M as ie,Ma as fe,Oa as Be,Pa as qe,Ra as x,Sa as I,U as Q,X as G,Z as X,Za as Ge,aa as a,ba as We,ca as i,ga as y,la as s,pa as ve,qa as U,ra as Ue,sa as k,ua as w,wa as m,xa as _,ya as Le,za as ke}from"/_mochi/client/chunk-qj7zy2d9.js";var es=new Set(["$$slots","$$events","$$legacy"]);function re(p,o){let t=x(o,es),l=[["rect",{width:"14",height:"14",x:"8",y:"8",rx:"2",ry:"2"}],["path",{d:"M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2"}]];v(p,I({name:"copy"},()=>t,{get iconNode(){return l}}))}var ss=new Set(["$$slots","$$events","$$legacy"]);function te(p,o){let t=x(o,ss),l=[["path",{d:"M21 21H8a2 2 0 0 1-1.42-.587l-3.994-3.999a2 2 0 0 1 0-2.828l10-10a2 2 0 0 1 2.829 0l5.999 6a2 2 0 0 1 0 2.828L12.834 21"}],["path",{d:"m5.082 11.09 8.828 8.828"}]];v(p,I({name:"eraser"},()=>t,{get iconNode(){return l}}))}var rs=new Set(["$$slots","$$events","$$legacy"]);function pe(p,o){let t=x(o,rs),l=[["circle",{cx:"12",cy:"12",r:"10"}],["path",{d:"M12 18a6 6 0 0 0 0-12v12z"}]];v(p,I({name:"contrast"},()=>t,{get iconNode(){return l}}))}var ts=new Set(["$$slots","$$events","$$legacy"]);function oe(p,o){let t=x(o,ts),l=[["path",{d:"M15 3h6v6"}],["path",{d:"M10 14 21 3"}],["path",{d:"M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6"}]];v(p,I({name:"external-link"},()=>t,{get iconNode(){return l}}))}var Y=[{id:"black",label:"Black"},{id:"gray",label:"Gray"},{id:"cycle",label:"Cycle"}];function Ze(p,o){if(p==="black")return o===n?$:n;if(p==="gray")return o===u?$:u;return o===$?u:o===u?n:$}var ps="https://github.com/khromov/codebay";function Ke(p){return p.trim().toLowerCase().replace(/[^a-z0-9-]+/g,"-").replace(/^-+|-+$/g,"")}function Pe(p){let o=[];for(let t=0;t<J;t++){let l="";for(let g=0;g<S;g++){let c=p[t*S+g];l+=c===n?"#":c===u?"+":"."}o.push(l)}return o}function xe(p){let o=p.pixels.map((t)=>` '${t}'`).join(`,
2
- `);return`import type { AvatarArt } from './types.ts';
3
-
4
- const art: AvatarArt = {
5
- name: '${p.name}',
6
- pixels: [
7
- ${o}
8
- ]
9
- };
10
-
11
- export default art;
12
- `}function Ve(p){let o=`Avatar contribution: ${p.name}`,t=["Hi! I drew this avatar in the editor easter egg and I'd love to see it in the official set.","","```",...p.pixels,"```","",`Ready-to-paste module (\`src/avatars/${p.name}.ts\`, plus a line in \`src/avatars/index.ts\`):`,"","```ts",xe(p).trimEnd(),"```","","_It should satisfy `src/avatars/avatars.test.ts`: exactly 8×8, only `#`/`+`/`.` pixels, unique name._"].join(`
13
- `),l=new URLSearchParams({title:o,body:t});return`${ps}/issues/new?${l}`}var os=k('<span class="ring-cell svelte-qu6vp4" aria-hidden="true"></span>'),fs=k("<span></span>"),hs=k('<button type="button" role="radio"> </button>'),is=k('<section class="editor svelte-qu6vp4"><div class="head svelte-qu6vp4"><h2 class="svelte-qu6vp4">Draw your own avatar</h2></div> <div class="body svelte-qu6vp4"><div class="grid-frame svelte-qu6vp4"><!> <div class="grid svelte-qu6vp4" role="img" aria-label="8 by 8 pixel drawing canvas"></div></div> <div class="side svelte-qu6vp4"><div class="preview"><div class="preview-label svelte-qu6vp4">Preview</div> <div class="preview-row svelte-qu6vp4"><!> <!></div></div> <label class="name-field svelte-qu6vp4"><span class="preview-label svelte-qu6vp4">Name</span> <input type="text" spellcheck="false" autocapitalize="off" autocorrect="off" autocomplete="off" maxlength="24" class="svelte-qu6vp4"/></label> <div class="mode-field svelte-qu6vp4"><span class="preview-label svelte-qu6vp4">Mode</span> <div class="modes svelte-qu6vp4" role="radiogroup" aria-label="Drawing mode"></div></div> <div class="tools svelte-qu6vp4"><!> <!></div></div></div> <div class="foot svelte-qu6vp4"><span class="hint svelte-qu6vp4">Draw something, then open an issue to get it into the official set.</span> <div class="actions svelte-qu6vp4"><!> <!></div></div></section>');function Se(p,o){he(o,!0);let t=G(Ie(Array(J*S).fill($))),l=G(""),g=Q(()=>Ke(s(l))),c=Q(()=>({name:s(g)||"my-avatar",pixels:Pe(s(t))})),D=Q(()=>s(g).length>0&&s(t).some((e)=>e!==$)),q=G("cycle"),H=Ie([]);function O(e,r){let d=e.key==="ArrowRight"||e.key==="ArrowDown"?1:e.key==="ArrowLeft"||e.key==="ArrowUp"?-1:0;if(d===0)return;e.preventDefault();let h=(r+d+Y.length)%Y.length;X(q,Y[h].id,!0),H[h]?.focus()}let Z=G(null),K=!1,B=n,M=Array.from({length:100},(e,r)=>({r:Math.floor(r/10),c:r%10})).filter(({r:e,c:r})=>e===0||e===9||r===0||r===9);function T(e){if(!s(Z))return null;let r=s(Z).getBoundingClientRect(),d=Math.floor((e.clientX-r.left)/r.width*S),h=Math.floor((e.clientY-r.top)/r.height*J);if(h<0||h>=J||d<0||d>=S)return null;return h*S+d}function N(e){let r=T(e);if(r==null)return;e.currentTarget.setPointerCapture?.(e.pointerId),K=!0,B=Ze(s(q),s(t)[r]),s(t)[r]=B}function ee(e){if(!K)return;let r=T(e);if(r!=null)s(t)[r]=B}function P(){K=!1}function se(){X(t,Array(J*S).fill($),!0)}function ae(){X(t,s(t).map((e)=>e===n?$:e===$?n:e),!0)}async function de(){try{await navigator.clipboard.writeText(xe(s(c))),ue("Copied — paste it into the GitHub issue")}catch(e){ue.error(`Copy failed: ${e.message}`)}}var z=is(),E=i(a(z),2),W=a(E),ye=a(W);b(ye,17,()=>M,ke,(e,r)=>{let d=()=>s(r).r,h=()=>s(r).c;var j=os();y(()=>be(j,`grid-row:${d()+1};grid-column:${h()+1}`)),m(e,j)});var C=i(ye,2);b(C,21,()=>s(t),ke,(e,r)=>{var d=fs();let h;y(()=>h=ge(d,1,"cell svelte-qu6vp4",null,h,{on:s(r)===n,gray:s(r)===u})),m(e,d)}),f(C),qe(C,(e)=>X(Z,e),()=>s(Z)),f(W);var He=i(W,2),me=a(He),Me=i(a(me),2),Ne=a(Me);F(Ne,{get art(){return s(c)},get name(){return s(c).name},scale:6});var we=i(Ne,2);F(we,{get art(){return s(c)},get name(){return s(c).name},scale:3}),f(Me),f(me);var ce=i(me,2),$e=i(a(ce),2);De($e),f(ce);var ne=i(ce,2),ze=i(a(ne),2);b(ze,23,()=>Y,(e)=>e.id,(e,r,d)=>{var h=hs();let j;var _e=a(h,!0);f(h),qe(h,(L,Oe)=>H[Oe]=L,(L)=>H?.[L],()=>[s(d)]),y(()=>{j=ge(h,1,"mode svelte-qu6vp4",null,j,{active:s(q)===s(r).id}),fe(h,"aria-checked",s(q)===s(r).id),fe(h,"tabindex",s(q)===s(r).id?0:-1),_(_e,s(r).label)}),U("click",h,()=>X(q,s(r).id,!0)),U("keydown",h,(L)=>O(L,s(d))),m(e,h)}),f(ze),f(ne);var Ee=i(ne,2),je=a(Ee);R(je,{size:"sm",get icon(){return te},onclick:se,children:(e,r)=>{A();var d=w("Clear");m(e,d)},$$slots:{default:!0}});var Re=i(je,2);R(Re,{size:"sm",get icon(){return pe},onclick:ae,children:(e,r)=>{A();var d=w("Invert");m(e,d)},$$slots:{default:!0}}),f(Ee),f(He),f(E);var Je=i(E,2),Qe=i(a(Je),2),Xe=a(Qe);{let e=Q(()=>!s(D));R(Xe,{size:"sm",get icon(){return re},get disabled(){return s(e)},onclick:de,children:(r,d)=>{A();var h=w("Copy");m(r,h)},$$slots:{default:!0}})}var Fe=i(Xe,2);{let e=Q(()=>!s(D)),r=Q(()=>Ve(s(c)));R(Fe,{size:"sm",variant:"primary",get icon(){return oe},get disabled(){return s(e)},get href(){return s(r)},target:"_blank",rel:"noopener",children:(d,h)=>{A();var j=w("Open GitHub issue");m(d,j)},$$slots:{default:!0}})}f(Qe),f(Je),f(z),y(()=>fe($e,"placeholder",o.namePlaceholder)),U("pointerdown",C,N),U("pointermove",C,ee),U("pointerup",C,P),ve("pointercancel",C,P),ve("lostpointercapture",C,P),Be($e,()=>s(l),(e)=>X(l,e)),m(p,z),ie()}Ue(["pointerdown","pointermove","pointerup","click","keydown"]);var ls=new Set(["$$slots","$$events","$$legacy"]);function le(p,o){let t=x(o,ls),l=[["path",{d:"M12 8V4H8"}],["rect",{width:"16",height:"12",x:"4",y:"8",rx:"2"}],["path",{d:"M2 14h2"}],["path",{d:"M20 14h2"}],["path",{d:"M15 13v2"}],["path",{d:"M9 13v2"}]];v(p,I({name:"bot"},()=>t,{get iconNode(){return l}}))}var as=k('<span class="title svelte-fkq7sr">Avatars</span>'),ds=k('<span class="robot-mark svelte-fkq7sr" title="AI-generated"><!></span>'),ms=k('<li class="svelte-fkq7sr"><!> <span class="label svelte-fkq7sr"><!> </span></li>'),cs=k('<div class="page svelte-fkq7sr"><!> <main class="content svelte-fkq7sr"><!> <section class="catalog svelte-fkq7sr"><header class="svelte-fkq7sr"><h2 class="svelte-fkq7sr">The set</h2> <p class="svelte-fkq7sr"> </p></header> <ul class="svelte-fkq7sr"></ul></section></main></div> <!>',1);function Ce(p,o){he(o,!0);var t=cs(),l=We(t),g=a(l);Ae(g,{children:(M,T)=>{var N=as();m(M,N)},$$slots:{default:!0}});var c=i(g,2),D=a(c);Se(D,{get namePlaceholder(){return o.namePlaceholder}});var q=i(D,2),H=a(q),O=i(a(H),2),Z=a(O);f(O),f(H);var K=i(H,2);b(K,21,()=>Te,(M)=>M.name,(M,T)=>{var N=ms(),ee=a(N);F(ee,{get art(){return s(T)},get name(){return s(T).name},scale:8,interactive:!0});var P=i(ee,2),se=a(P);{var ae=(z)=>{var E=ds(),W=a(E);le(W,{size:11}),f(E),m(z,E)};Le(se,(z)=>{if(s(T).robot)z(ae)})}var de=i(se);f(P),f(N),y(()=>_(de,` ${s(T).name??""}`)),m(M,N)}),f(K),f(q),f(c),f(l);var B=i(l,2);Ye(B,{toastOptions:{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;"}}),y(()=>_(Z,`${Te.length??""} hand-crafted 8×8 sprites`)),m(p,t),ie()}Ge("AvatarsView_257s9yq1wwr4f",Ce);
@@ -1 +0,0 @@
1
- import{a as es,c as Yv,d as is,e as Zv,f as fs,g as as,h as ts}from"/_mochi/client/chunk-fqg2qzj8.js";import{n as rv}from"/_mochi/client/chunk-4jgkak13.js";import{A as n,C as ms,D as ps}from"/_mochi/client/chunk-330mrspw.js";import{$ as qv,Aa as sv,Fa as nv,G as h,Ga as c,H as E,Ha as dv,Ja as vs,L as jv,M as zv,Ma as Tv,Oa as ss,Pa as ls,Ra as _,Sa as o,Ta as Z,U as R,Wa as hs,X as M,Z as p,Za as ys,aa as e,ba as B,ca as f,da as u,ga as N,ka as _v,la as s,pa as Qv,qa as lv,ra as ov,sa as y,va as vv,wa as m,xa as x,ya as S,za as gv}from"/_mochi/client/chunk-qj7zy2d9.js";var Rs=new Set(["$$slots","$$events","$$legacy"]);function Mv(X,a){let W=_(a,Rs),i=[["path",{d:"m12 19-7-7 7-7"}],["path",{d:"M19 12H5"}]];n(X,o({name:"arrow-left"},()=>W,{get iconNode(){return i}}))}var ws=new Set(["$$slots","$$events","$$legacy"]);function tv(X,a){let W=_(a,ws),i=[["path",{d:"M7 7h10v10"}],["path",{d:"M7 17 17 7"}]];n(X,o({name:"arrow-up-right"},()=>W,{get iconNode(){return i}}))}var bs=new Set(["$$slots","$$events","$$legacy"]);function Wv(X,a){let W=_(a,bs),i=[["path",{d:"M20 6 9 17l-5-5"}]];n(X,o({name:"check"},()=>W,{get iconNode(){return i}}))}var Ps=y("<span></span>");function U(X,a){let W=Z(a,"variant",3,"text");var i=Ps();let A;N(()=>{c(i,1,`skel ${W()??""}`,"svelte-tl058d"),A=dv(i,"",A,{width:a.width})}),m(X,i)}var cs=y('<div class="hrow svelte-1hnopyv"><span><!></span> <span class="hlabel svelte-1hnopyv"> </span> <span class="hvalue svelte-1hnopyv"> </span></div>'),Es=y('<div class="hrow svelte-1hnopyv"><span class="box idle svelte-1hnopyv"></span> <!> <!></div>'),us=y('<div class="hrow svelte-1hnopyv"><span class="box idle svelte-1hnopyv"></span> <span class="hlabel svelte-1hnopyv"> </span> <span class="hvalue svelte-1hnopyv">—</span></div>'),ds=y('<div><div class="panel-bar">Health</div> <div class="health svelte-1hnopyv"><!></div> <div class="hfoot svelte-1hnopyv"> </div></div>');function Lv(X,a){jv(a,!0);let W=["Container running","Code-server reachable"],i=Z(a,"health",3,null),A=Z(a,"lastFetchedAt",3,null),d=Z(a,"active",3,!0),L=Z(a,"injectionChecks",3,0),z=R(()=>{if(!i())return[];let I=(C)=>({ok:C,value:C?"OK":"—"});return[{label:W[0],...I(i().containerRunning)},{label:W[1],...I(i().codeServerAccessible)},...i().injections.map((C)=>({label:C.label,...I(C.ok)}))]});function G(){return i()?s(z).length:W.length+L()}let yv=M(qv(Date.now()));u(()=>{let I=setInterval(()=>p(yv,Date.now(),!0),1000);return()=>clearInterval(I)});let Dv=R(()=>{if(!d()&&!i())return"Container not running";if(!A())return"Waiting for first check…";return`Updated ${Math.max(0,Math.round((s(yv)-A())/1000))}s ago`});var q=ds();let w;var Q=f(e(q),2),b=e(Q);{var Cv=(I)=>{var C=vv(),T=B(C);sv(T,17,()=>s(z),(O)=>O.label,(O,F)=>{var j=cs(),H=e(j),V=e(H);{var ev=(k)=>{Wv(k,{size:12,strokeWidth:3})},r=(k)=>{rv(k,{size:12,strokeWidth:3})};S(V,(k)=>{if(s(F).ok)k(ev);else k(r,-1)})}h(H);var iv=f(H,2),fv=e(iv,!0);h(iv);var $=f(iv,2),Kv=e($,!0);h($),h(j),N(()=>{c(H,1,`box ${s(F).ok?"ok":"bad"}`,"svelte-1hnopyv"),x(fv,s(F).label),x(Kv,s(F).value)}),m(O,j)}),m(I,C)},g=(I)=>{var C=vv(),T=B(C);sv(T,17,()=>Array(G()),gv,(O,F)=>{var j=Es(),H=f(e(j),2);U(H,{width:"120px"});var V=f(H,2);U(V,{variant:"pill"}),h(j),m(O,j)}),m(I,C)},hv=(I)=>{var C=vv(),T=B(C);sv(T,16,()=>W,(O)=>O,(O,F)=>{var j=us(),H=f(e(j),2),V=e(H,!0);h(H),E(2),h(j),N(()=>x(V,F)),m(O,j)}),m(I,C)};S(b,(I)=>{if(i())I(Cv);else if(d())I(g,1);else I(hv,-1)})}h(Q);var xv=f(Q,2),Hv=e(xv,!0);h(xv),h(q),N(()=>{w=c(q,1,"healthwrap panel svelte-1hnopyv",null,w,{dim:!d()&&!i()}),x(Hv,s(Dv))}),m(X,q),zv()}var qs=y('<form method="POST" action="?/restart" class="svelte-15fxkvm"><button class="restart svelte-15fxkvm" type="submit"> </button></form> <a class="open svelte-15fxkvm" target="_blank" rel="noopener">Open in new tab <!></a>',1),gs=y('<p class="restart-err svelte-15fxkvm"> </p>'),$v=y('<code class="svelte-15fxkvm"> </code>'),rs=y('<code class="svelte-15fxkvm">local (project devcontainer.json)</code>'),$s=y('<code class="muted svelte-15fxkvm">—</code>'),_s=y('<button class="rebuild svelte-15fxkvm"> </button>'),os=y('<li class="svelte-15fxkvm"><span class="cp svelte-15fxkvm"> </span> <span class="arr svelte-15fxkvm">→</span> <a target="_blank" rel="noopener" class="svelte-15fxkvm"> <!></a> <button class="rm svelte-15fxkvm" title="Remove">×</button></li>'),ns=y('<ul class="port-list svelte-15fxkvm"></ul>'),v1=y('<p class="empty svelte-15fxkvm">No ports forwarded yet.</p>'),s1=y('<p class="port-err svelte-15fxkvm"> </p>'),l1=y('<p class="hint pending svelte-15fxkvm">Port changes apply when you <strong class="svelte-15fxkvm">Restart</strong> (recreates the container).</p>'),h1=y('<div class="err svelte-15fxkvm"> </div>'),e1=y('<header class="topbar svelte-15fxkvm"><a class="back svelte-15fxkvm" href="/"><!> All instances</a> <div class="title svelte-15fxkvm"><span class="name svelte-15fxkvm"> </span> <!></div> <!></header> <!> <main class="stage svelte-15fxkvm"><div class="meta svelte-15fxkvm"><span class="k svelte-15fxkvm">Source</span> <!> <span class="k svelte-15fxkvm">Image</span> <!></div> <div class="healthslot svelte-15fxkvm"><!></div> <section class="ports panel svelte-15fxkvm"><div class="ports-bar panel-bar svelte-15fxkvm"><span class="svelte-15fxkvm">Forwarded ports</span> <!></div> <div class="ports-body svelte-15fxkvm"><!> <form class="add svelte-15fxkvm"><input type="number" min="1" max="65535" placeholder="container port (e.g. 3000)" spellcheck="false" class="svelte-15fxkvm"/> <button type="submit" class="svelte-15fxkvm">Add</button></form> <!> <!> <p class="hint svelte-15fxkvm">Your app must bind to <code class="svelte-15fxkvm">0.0.0.0</code> inside the container to be reachable.</p></div></section> <div class="logwrap panel svelte-15fxkvm"><div class="log-bar panel-bar svelte-15fxkvm"><span class="svelte-15fxkvm">Boot log</span> <div class="log-actions svelte-15fxkvm"><button> </button> <button class="copy svelte-15fxkvm"> </button></div></div> <div class="logs svelte-15fxkvm"><pre class="svelte-15fxkvm"> <span class="caret svelte-15fxkvm"></span></pre></div> <!></div></main>',1);function Av(X,a){jv(a,!0);let W=Z(a,"injectionChecks",3,0),i=M(null),A=M(null),d=M(null),L=M(""),z=M(null),G=M(!0);u(()=>{if(!s(G)||s(L).length===0)return;_v().then(()=>{if(s(G))s(z)?.scrollTo(0,s(z).scrollHeight)})});function yv(){if(!s(z))return;if(s(z).scrollHeight-s(z).clientHeight-s(z).scrollTop>40)p(G,!1)}function Dv(){if(p(G,!s(G)),s(G))s(z)?.scrollTo(0,s(z).scrollHeight)}u(()=>ps()),u(()=>as(`/api/instances/${a.id}/logs`,(v)=>p(L,s(L)+v),()=>p(L,""))),u(()=>ts((v)=>{if(v.type==="instances"){let l=v.data.find((t)=>t.id===a.id);if(l)p(i,l,!0)}else if(v.type==="health"&&v.data.id===a.id)p(A,v.data.health,!0),p(d,Date.now(),!0)}));let q=R(()=>s(i)?es(s(i)):"#"),w=M(""),Q=M(null),b=M(!1),Cv=R(()=>s(i)?.forwarded_ports??[]),g=R(()=>s(i)?.status==="creating");async function hv(v){p(Q,null);try{return await v(),!0}catch(l){return p(Q,l.message,!0),!1}}async function xv(v){v.preventDefault();let l=Number.parseInt(s(w),10);if(!Number.isInteger(l)||l<1||l>65535){p(Q,"Enter a port number between 1 and 65535");return}if(await hv(()=>Yv(`/api/instances/${a.id}/ports`,{port:l})))p(w,""),p(b,!0)}async function Hv(v){if(await hv(()=>is(`/api/instances/${a.id}/ports/${v}`)))p(b,!0)}async function I(){if(await hv(()=>Yv(`/api/instances/${a.id}/rebuild`)))p(b,!1)}let C=M(null),T=M(!1),O={onPending:(v)=>p(T,v,!0),submit:()=>{return p(C,null),({result:v})=>{if(v.type==="failure")p(C,v.data?.error??"Restart failed",!0);else if(v.type==="error")p(C,"Network error. Try again.")}}},F=M(!1),j;async function H(){await navigator.clipboard.writeText(s(L)),p(F,!0),clearTimeout(j),j=setTimeout(()=>p(F,!1),2000)}var V=e1(),ev=B(V),r=e(ev),iv=e(r);Mv(iv,{size:15}),E(),h(r);var fv=f(r,2),$=e(fv),Kv=e($,!0);h($);var k=f($,2);{var Cs=(v)=>{fs(v,{get status(){return s(i).status}})},xs=(v)=>{U(v,{variant:"pill"})};S(k,(v)=>{if(s(i))v(Cs);else v(xs,-1)})}h(fv);var Is=f(fv,2);{var Ns=(v)=>{var l=qs(),t=B(l),J=e(t),P=e(J,!0);h(J),h(t),nv(t,()=>hs(O));var Y=f(t,2),D=f(e(Y));tv(D,{size:15}),h(Y),N(()=>{J.disabled=s(T)||s(g),x(P,s(T)||s(g)?"Restarting…":"Restart container"),Tv(Y,"href",s(q))}),m(v,l)};S(Is,(v)=>{if(s(i)?.status==="running")v(Ns)})}h(ev);var Vv=f(ev,2);{var Ss=(v)=>{var l=gs(),t=e(l,!0);h(l),N(()=>x(t,s(C))),m(v,l)};S(Vv,(v)=>{if(s(C))v(Ss)})}var kv=f(Vv,2),Xv=e(kv),Uv=f(e(Xv),2);{var Ms=(v)=>{var l=$v(),t=e(l,!0);h(l),N(()=>x(t,s(i).source_path)),m(v,l)},Ws=(v)=>{U(v,{variant:"wide"})};S(Uv,(v)=>{if(s(i))v(Ms);else v(Ws,-1)})}var js=f(Uv,4);{var zs=(v)=>{var l=vv(),t=B(l);{var J=(D)=>{var K=rs();m(D,K)},P=(D)=>{var K=$v(),Sv=e(K,!0);h(K),N(()=>x(Sv,s(i).image_source)),m(D,K)},Y=(D)=>{var K=$s();m(D,K)};S(t,(D)=>{if(s(i).image_source==="local")D(J);else if(s(i).image_source)D(P,1);else D(Y,-1)})}m(v,l)},Ds=(v)=>{U(v,{variant:"wide"})};S(js,(v)=>{if(s(i))v(zs);else v(Ds,-1)})}h(Xv);var Ov=f(Xv,2),Hs=e(Ov);{let v=R(()=>!s(i)||s(i).status==="running");Lv(Hs,{get health(){return s(A)},get lastFetchedAt(){return s(d)},get injectionChecks(){return W()},get active(){return s(v)}})}h(Ov);var Fv=f(Ov,2),Gv=e(Fv),Ks=f(e(Gv),2);{var Xs=(v)=>{var l=_s(),t=e(l,!0);h(l),N(()=>{l.disabled=s(g),x(t,s(g)?"Restarting…":"Restart to apply")}),lv("click",l,I),m(v,l)};S(Ks,(v)=>{if(s(b))v(Xs)})}h(Gv);var Bv=f(Gv,2),Rv=e(Bv);{var Os=(v)=>{var l=ns();sv(l,21,()=>s(Cv),(t)=>t.container_port,(t,J)=>{var P=os(),Y=e(P),D=e(Y);h(Y);var K=f(Y,4),Sv=e(K),Vs=f(Sv);tv(Vs,{size:12}),h(K);var ks=f(K,2);h(P),N((Us,Bs)=>{x(D,`:${s(J).container_port??""}`),Tv(K,"href",Us),x(Sv,`${Bs??""} `)},[()=>Zv(s(J).host_port),()=>Zv(s(J).host_port).replace("http://","")]),lv("click",ks,()=>Hv(s(J).container_port)),m(t,P)}),h(l),m(v,l)},Fs=(v)=>{var l=v1();m(v,l)};S(Rv,(v)=>{if(s(Cv).length)v(Os);else v(Fs,-1)})}var Iv=f(Rv,2),wv=e(Iv);vs(wv),E(2),h(Iv);var bv=f(Iv,2);{var Gs=(v)=>{var l=s1(),t=e(l,!0);h(l),N(()=>x(t,s(Q))),m(v,l)};S(bv,(v)=>{if(s(Q))v(Gs)})}var Js=f(bv,2);{var Ls=(v)=>{var l=l1();m(v,l)};S(Js,(v)=>{if(s(b))v(Ls)})}E(2),h(Bv),h(Fv);var Pv=f(Fv,2),Jv=e(Pv),cv=f(e(Jv),2),mv=e(cv);let Ev;var Qs=e(mv,!0);h(mv);var Nv=f(mv,2),Ts=e(Nv,!0);h(Nv),h(cv),h(Jv);var pv=f(Jv,2),uv=e(pv),Ys=e(uv,!0);E(),h(uv),h(pv),ls(pv,(v)=>p(z,v),()=>s(z));var Zs=f(pv,2);{var As=(v)=>{var l=h1(),t=e(l,!0);h(l),N(()=>x(t,s(i).error)),m(v,l)};S(Zs,(v)=>{if(s(i)?.status==="error"&&s(i).error)v(As)})}h(Pv),h(kv),N(()=>{x(Kv,s(i)?.name??"Instance"),Ev=c(mv,1,"copy svelte-15fxkvm",null,Ev,{active:s(G)}),x(Qs,s(G)?"Following":"Follow log"),Nv.disabled=!s(L),x(Ts,s(F)?"Copied!":"Copy logs"),x(Ys,s(L)||"Waiting for output…")}),lv("click",r,function(...v){ms?.apply(this,v)}),Qv("submit",Iv,xv),ss(wv,()=>s(w),(v)=>p(w,v)),lv("click",mv,Dv),lv("click",Nv,H),Qv("scroll",pv,yv),m(X,V),zv()}ov(["click"]);ys("InstanceView_2ma45l9bybfhl",Av);
@@ -1,28 +0,0 @@
1
- import{i as BI,j as pI,k as TI,l as OI,m as hI}from"/_mochi/client/chunk-rpdphch7.js";import{n as HI}from"/_mochi/client/chunk-4jgkak13.js";import{t as UI,u as of,v as B0,w as v,x as MI,z as kI}from"/_mochi/client/chunk-k5m4kt20.js";import{A as H,D as PI}from"/_mochi/client/chunk-330mrspw.js";import{$ as k,Aa as V1,Da as KI,Fa as E,G as I,Ga as z1,H as R,Ja as p,Ka as M0,L as K0,La as w1,M as R0,Ma as r,Oa as l,Pa as $f,Ra as D,Sa as U,Ta as RI,U as FI,V as rf,Wa as c,X as y,Ya as df,Z as N,Za as bI,aa as L,ba as T1,ca as x,da as DI,ga as J,la as S,qa as L1,ra as G0,sa as T,ua as g,wa as j,xa as X,ya as G}from"/_mochi/client/chunk-qj7zy2d9.js";var UC=new Set(["$$slots","$$events","$$legacy"]);function Z0(Q,z){let W=D(z,UC),V=[["path",{d:"M22 7.7c0-.6-.4-1.2-.8-1.5l-6.3-3.9a1.72 1.72 0 0 0-1.7 0l-10.3 6c-.5.2-.9.8-.9 1.4v6.6c0 .5.4 1.2.8 1.5l6.3 3.9a1.72 1.72 0 0 0 1.7 0l10.3-6c.5-.3.9-1 .9-1.5Z"}],["path",{d:"M10 21.9V14L2.1 9.1"}],["path",{d:"m10 14 11.9-6.9"}],["path",{d:"M14 19.8v-8.1"}],["path",{d:"M18 17.5V9.4"}]];H(Q,U({name:"container"},()=>W,{get iconNode(){return V}}))}var HC=new Set(["$$slots","$$events","$$legacy"]);function Q0(Q,z){let W=D(z,HC),V=[["path",{d:"M12 2v10"}],["path",{d:"M18.4 6.6a9 9 0 1 1-12.77.04"}]];H(Q,U({name:"power"},()=>W,{get iconNode(){return V}}))}var PC=new Set(["$$slots","$$events","$$legacy"]);function B1(Q,z){let W=D(z,PC),V=[["path",{d:"M3 12a9 9 0 1 0 9-9 9.75 9.75 0 0 0-6.74 2.74L3 8"}],["path",{d:"M3 3v5h5"}]];H(Q,U({name:"rotate-ccw"},()=>W,{get iconNode(){return V}}))}var BC=new Set(["$$slots","$$events","$$legacy"]);function J0(Q,z){let W=D(z,BC),V=[["path",{d:"M11 4.702a.705.705 0 0 0-1.203-.498L6.413 7.587A1.4 1.4 0 0 1 5.416 8H3a1 1 0 0 0-1 1v6a1 1 0 0 0 1 1h2.416a1.4 1.4 0 0 1 .997.413l3.383 3.384A.705.705 0 0 0 11 19.298z"}],["path",{d:"M16 9a5 5 0 0 1 0 6"}],["path",{d:"M19.364 18.364a9 9 0 0 0 0-12.728"}]];H(Q,U({name:"volume-2"},()=>W,{get iconNode(){return V}}))}var MC=new Set(["$$slots","$$events","$$legacy"]);function V0(Q,z){let W=D(z,MC),V=[["circle",{cx:"11",cy:"4",r:"2"}],["circle",{cx:"18",cy:"8",r:"2"}],["circle",{cx:"20",cy:"16",r:"2"}],["path",{d:"M9 10a5 5 0 0 1 5 5v3.5a3.5 3.5 0 0 1-6.84 1.045Q6.52 17.48 4.46 16.84A3.5 3.5 0 0 1 5.5 10Z"}]];H(Q,U({name:"paw-print"},()=>W,{get iconNode(){return V}}))}var kC=new Set(["$$slots","$$events","$$legacy"]);function W0(Q,z){let W=D(z,kC),V=[["path",{d:"M12 2v2"}],["path",{d:"M14.837 16.385a6 6 0 1 1-7.223-7.222c.624-.147.97.66.715 1.248a4 4 0 0 0 5.26 5.259c.589-.255 1.396.09 1.248.715"}],["path",{d:"M16 12a4 4 0 0 0-4-4"}],["path",{d:"m19 5-1.256 1.256"}],["path",{d:"M20 12h2"}]];H(Q,U({name:"sun-moon"},()=>W,{get iconNode(){return V}}))}var pC=new Set(["$$slots","$$events","$$legacy"]);function A0(Q,z){let W=D(z,pC),V=[["circle",{cx:"12",cy:"12",r:"4"}],["path",{d:"M12 2v2"}],["path",{d:"M12 20v2"}],["path",{d:"m4.93 4.93 1.41 1.41"}],["path",{d:"m17.66 17.66 1.41 1.41"}],["path",{d:"M2 12h2"}],["path",{d:"M20 12h2"}],["path",{d:"m6.34 17.66-1.41 1.41"}],["path",{d:"m19.07 4.93-1.41 1.41"}]];H(Q,U({name:"sun"},()=>W,{get iconNode(){return V}}))}var TC=new Set(["$$slots","$$events","$$legacy"]);function X0(Q,z){let W=D(z,TC),V=[["path",{d:"M20.985 12.486a9 9 0 1 1-9.473-9.472c.405-.022.617.46.402.803a6 6 0 0 0 8.268 8.268c.344-.215.825-.004.803.401"}]];H(Q,U({name:"moon"},()=>W,{get iconNode(){return V}}))}var OC=new Set(["$$slots","$$events","$$legacy"]);function Y0(Q,z){let W=D(z,OC),V=[["rect",{width:"20",height:"14",x:"2",y:"3",rx:"2"}],["line",{x1:"8",x2:"16",y1:"21",y2:"21"}],["line",{x1:"12",x2:"12",y1:"17",y2:"21"}]];H(Q,U({name:"monitor"},()=>W,{get iconNode(){return V}}))}var WI="theme";function AI(){let Q=df.get(WI);return Q==="dark"||Q==="light"?Q:"auto"}function XI(Q){df.set(WI,Q,{expires:400,path:"/"})}function YI(Q){if(Q==="auto")delete document.documentElement.dataset.theme;else document.documentElement.dataset.theme=Q}var hC=T('<button type="button" role="radio"><!> </button>'),bC=T('<div class="picker svelte-3gcwuj" role="radiogroup" aria-label="Theme"></div>');function vf(Q,z){K0(z,!0);let W=y(k(AI())),V=[{value:"auto",label:"Auto",icon:Y0},{value:"light",label:"Light",icon:A0},{value:"dark",label:"Dark",icon:X0}];function C1(o){N(W,o,!0),XI(o),YI(o)}var $=bC();V1($,21,()=>V,({value:o,label:m,icon:S1})=>o,(o,m)=>{let S1=()=>S(m).value,j1=()=>S(m).label,D1=()=>S(m).icon;var N1=hC();let A1;var X1=L(N1);KI(X1,D1,(p0,Z1)=>{Z1(p0,{size:13})});var k0=x(X1);I(N1),J(()=>{A1=z1(N1,1,"segment svelte-3gcwuj",null,A1,{active:S(W)===S1()}),r(N1,"aria-checked",S(W)===S1()),X(k0,` ${j1()??""}`)}),L1("click",N1,()=>C1(S1())),j(o,N1)}),I($),j(Q,$),R0()}G0(["click"]);var qC=new Set(["$$slots","$$events","$$legacy"]);function F0(Q,z){let W=D(z,qC),V=[["path",{d:"M12.83 2.18a2 2 0 0 0-1.66 0L2.6 6.08a1 1 0 0 0 0 1.83l8.58 3.91a2 2 0 0 0 1.66 0l8.58-3.9a1 1 0 0 0 0-1.83z"}],["path",{d:"M2 12a1 1 0 0 0 .58.91l8.6 3.91a2 2 0 0 0 1.65 0l8.58-3.9A1 1 0 0 0 22 12"}],["path",{d:"M2 17a1 1 0 0 0 .58.91l8.6 3.91a2 2 0 0 0 1.65 0l8.58-3.9A1 1 0 0 0 22 17"}]];H(Q,U({name:"layers"},()=>W,{get iconNode(){return V}}))}var EC=new Set(["$$slots","$$events","$$legacy"]);function D0(Q,z){let W=D(z,EC),V=[["path",{d:"M9 13h6"}],["path",{d:"M20 20a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2h-7.9a2 2 0 0 1-1.69-.9L9.6 3.9A2 2 0 0 0 7.93 3H4a2 2 0 0 0-2 2v13a2 2 0 0 0 2 2Z"}]];H(Q,U({name:"folder-minus"},()=>W,{get iconNode(){return V}}))}var cC=new Set(["$$slots","$$events","$$legacy"]);function M1(Q,z){let W=D(z,cC),V=[["path",{d:"M10 11v6"}],["path",{d:"M14 11v6"}],["path",{d:"M19 6v14a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V6"}],["path",{d:"M3 6h18"}],["path",{d:"M8 6V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v2"}]];H(Q,U({name:"trash-2"},()=>W,{get iconNode(){return V}}))}var mC=new Set(["$$slots","$$events","$$legacy"]);function k1(Q,z){let W=D(z,mC),V=[["path",{d:"m15 12-9.373 9.373a1 1 0 0 1-3.001-3L12 9"}],["path",{d:"m18 15 4-4"}],["path",{d:"m21.5 11.5-1.914-1.914A2 2 0 0 1 19 8.172v-.344a2 2 0 0 0-.586-1.414l-1.657-1.657A6 6 0 0 0 12.516 3H9l1.243 1.243A6 6 0 0 1 12 8.485V10l2 2h1.172a2 2 0 0 1 1.414.586L18.5 14.5"}]];H(Q,U({name:"hammer"},()=>W,{get iconNode(){return V}}))}var lC=new Set(["$$slots","$$events","$$legacy"]);function p1(Q,z){let W=D(z,lC),V=[["path",{d:"M2.586 17.414A2 2 0 0 0 2 18.828V21a1 1 0 0 0 1 1h3a1 1 0 0 0 1-1v-1a1 1 0 0 1 1-1h1a1 1 0 0 0 1-1v-1a1 1 0 0 1 1-1h.172a2 2 0 0 0 1.414-.586l.814-.814a6.5 6.5 0 1 0-4-4z"}],["circle",{cx:"16.5",cy:"7.5",r:".5",fill:"currentColor"}]];H(Q,U({name:"key-round"},()=>W,{get iconNode(){return V}}))}var iC=new Set(["$$slots","$$events","$$legacy"]);function U0(Q,z){let W=D(z,iC),V=[["path",{d:"M10 15H6a4 4 0 0 0-4 4v2"}],["path",{d:"m14.305 16.53.923-.382"}],["path",{d:"m15.228 13.852-.923-.383"}],["path",{d:"m16.852 12.228-.383-.923"}],["path",{d:"m16.852 17.772-.383.924"}],["path",{d:"m19.148 12.228.383-.923"}],["path",{d:"m19.53 18.696-.382-.924"}],["path",{d:"m20.772 13.852.924-.383"}],["path",{d:"m20.772 16.148.924.383"}],["circle",{cx:"18",cy:"15",r:"3"}],["circle",{cx:"9",cy:"7",r:"4"}]];H(Q,U({name:"user-cog"},()=>W,{get iconNode(){return V}}))}var gC=new Set(["$$slots","$$events","$$legacy"]);function H0(Q,z){let W=D(z,gC),V=[["path",{d:"M12 20v2"}],["path",{d:"M12 2v2"}],["path",{d:"M17 20v2"}],["path",{d:"M17 2v2"}],["path",{d:"M2 12h2"}],["path",{d:"M2 17h2"}],["path",{d:"M2 7h2"}],["path",{d:"M20 12h2"}],["path",{d:"M20 17h2"}],["path",{d:"M20 7h2"}],["path",{d:"M7 20v2"}],["path",{d:"M7 2v2"}],["rect",{x:"4",y:"4",width:"16",height:"16",rx:"2"}],["rect",{x:"8",y:"8",width:"8",height:"8",rx:"1"}]];H(Q,U({name:"cpu"},()=>W,{get iconNode(){return V}}))}var sC=new Set(["$$slots","$$events","$$legacy"]);function P0(Q,z){let W=D(z,sC),V=[["path",{d:"M8 21s-4-3-4-9 4-9 4-9"}],["path",{d:"M16 3s4 3 4 9-4 9-4 9"}],["line",{x1:"15",x2:"9",y1:"9",y2:"15"}],["line",{x1:"9",x2:"15",y1:"9",y2:"15"}]];H(Q,U({name:"variable"},()=>W,{get iconNode(){return V}}))}var uC=T('<div class="coin-row svelte-1ioj7vz"><span class="pixel-line svelte-1ioj7vz" aria-hidden="true"></span> <a class="coin-btn svelte-1ioj7vz" 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"><!></span></a> <span class="pixel-line svelte-1ioj7vz" aria-hidden="true"></span></div>');function ef(Q,z){let W=RI(z,"href",3,"/avatars"),V={name:"coin",pixels:["..####..",".#....#.","#..##..#","#.####.#","#.####.#","#..##..#",".#....#.","..####.."]};var C1=uC(),$=x(L(C1),2),o=x(L($),2),m=L(o);B0(m,{get art(){return V},name:"coin",scale:3}),I(o),I($),R(2),I(C1),J(()=>r($,"href",W())),j(Q,C1)}var tC=T('<span class="title svelte-1n6ht58">Settings</span>'),dC=T('<span class="arch svelte-1n6ht58" title="Docker daemon architecture"> </span>'),vC=T(`Your Docker daemon runs on <strong> </strong> — pick an image that publishes
2
- an <strong> </strong> manifest, or the pull will fail.`,1),f1=T('<div class="msg error svelte-1n6ht58"> </div>'),af=T('<div class="msg ok svelte-1n6ht58">Saved.</div>'),W1=T('<div class="sub svelte-1n6ht58"><div class="msg error svelte-1n6ht58"> </div></div>'),eC=T(`<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 — leave either blank and the container falls back to the
3
- 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" 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" spellcheck="false" autocapitalize="off" autocorrect="off" placeholder="jane@example.com"/></label> <div class="model-save-row svelte-1n6ht58"><!></div></div> <!></form>`),x1=T('<div class="msg ok svelte-1n6ht58"> </div>'),aC=T('<span class="arch svelte-1n6ht58" title="Disabled while LiteLLM + Bedrock mode is on">disabled</span>'),rC=T(`<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
4
- 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" spellcheck="false" autocapitalize="off" autocorrect="off" autocomplete="off"/> <!></div> <!></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
5
- 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 —
6
- the first <code class="svelte-1n6ht58">claude</code> to refresh it signs the other one out. Leave blank and Save
7
- to clear.</div></div></div> <div class="image-controls svelte-1n6ht58"><input type="password" name="claudeToken" class="image-input svelte-1n6ht58" spellcheck="false" autocapitalize="off" autocorrect="off" autocomplete="off"/> <!></div> <!></form>`,1),$C=T('<span class="arch svelte-1n6ht58">disabled</span>'),oC=T(`Route <code class="svelte-1n6ht58">claude</code> through a LiteLLM proxy fronting AWS Bedrock instead of Anthropic's
8
- default API. When enabled, the Bedrock endpoint variables are injected into every new
9
- container, host OAuth credentials are not used, and "Set tokens manually" is disabled.`,1),nC=T('<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" spellcheck="false" autocapitalize="off" autocorrect="off" autocomplete="off" placeholder="https://litellm.example.com/bedrock"/> <!></div> <!></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\n\t\t\t\t\t\t\t\tSave to clear.</div></div></div> <div class="image-controls svelte-1n6ht58"><input type="password" name="token" class="image-input svelte-1n6ht58" spellcheck="false" autocapitalize="off" autocorrect="off" autocomplete="off"/> <!></div> <!></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\n\t\t\t\t\t\t\t\tlauncher 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" 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" 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" 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" 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" spellcheck="false" autocapitalize="off" autocorrect="off" autocomplete="off"/></label> <div class="model-save-row svelte-1n6ht58"><!></div></div> <!></form>',1),_C=T('<span class="arch svelte-1n6ht58" title="Disabled while LiteLLM + Bedrock is on">disabled</span>'),fN=T(`Pin which model <code class="svelte-1n6ht58">claude</code> uses on the standard (subscription) path. Only
10
- 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.`,1),SN=T('<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-…</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" 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" 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" 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" 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" spellcheck="false" autocapitalize="off" autocorrect="off" autocomplete="off"/></label> <div class="model-save-row svelte-1n6ht58"><!></div></div> <!></form>'),GI=T('<input type="hidden" name="names"/>'),IN=T('<form class="var-item svelte-1n6ht58" method="POST" action="?/hostEnvVarNames"><!> <span class="var-name svelte-1n6ht58"> </span> <span> </span> <button type="submit" class="var-remove svelte-1n6ht58"><!></button></form>'),LN=T('<div class="var-empty svelte-1n6ht58">No variables added yet.</div>'),CN=T('<div class="row divided var-row svelte-1n6ht58"><div class="var-list svelte-1n6ht58"></div> <form class="var-add svelte-1n6ht58" method="POST" action="?/hostEnvVarNames"><!> <input type="text" name="names" class="image-input svelte-1n6ht58" spellcheck="false" autocapitalize="off" autocorrect="off" autocomplete="off" placeholder="AWS_ACCESS_KEY_ID"/> <!></form> <!></div>'),NN=T('<form method="POST" action="?/petChoose" class="svelte-1n6ht58"><input type="hidden" name="name"/> <button type="submit"><!></button></form>'),xN=T('<div class="sub pets svelte-1n6ht58"></div>'),wN=T('<span class="shutting svelte-1n6ht58">Server is shutting down — you can close this tab.</span>'),yN=T(`<div class="page svelte-1n6ht58"><!> <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"><!> <div class="text svelte-1n6ht58"><div class="name svelte-1n6ht58">Default container image <!></div> <div class="desc svelte-1n6ht58">Used only when a project folder ships no devcontainer.json. Takes effect for instances
11
- created from now on.</div></div></div> <div class="image-controls svelte-1n6ht58"><input type="text" name="image" class="image-input svelte-1n6ht58" spellcheck="false" autocapitalize="off" autocorrect="off" placeholder="mcr.microsoft.com/devcontainers/base:ubuntu"/> <!> <!></div> <div class="desc tip svelte-1n6ht58"><!></div> <!></form></section> <section class="card svelte-1n6ht58"><form class="row image-row svelte-1n6ht58" method="POST" action="?/copyIgnorePatterns"><div class="label svelte-1n6ht58"><!> <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
12
- new instance's workspace. Leave blank to copy everything. Only applies to local
13
- folders — 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" spellcheck="false" autocapitalize="off" autocorrect="off" placeholder="node_modules, .venv, dist"/> <!> <!></div> <!></form></section> <section class="card svelte-1n6ht58"><form class="row svelte-1n6ht58" method="POST" action="?/gitIdentityToggle"><div class="label svelte-1n6ht58"><!> <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
14
- new container, taking precedence over the host's own git config. When off, each container
15
- falls back to the host's identity.</div></div></div> <label class="switch svelte-1n6ht58"><input type="checkbox" name="enabled" class="svelte-1n6ht58"/> <span class="track svelte-1n6ht58"><span class="thumb svelte-1n6ht58"></span></span></label></form> <!> <!></section> <section class="card svelte-1n6ht58"><form class="row svelte-1n6ht58" method="POST" action="?/disableBuildCache"><div class="label svelte-1n6ht58"><!> <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
16
- and rebuilds — slower, but always picks up upstream image/layer changes.</div></div></div> <label class="switch svelte-1n6ht58"><input type="checkbox" name="enabled" class="svelte-1n6ht58"/> <span class="track svelte-1n6ht58"><span class="thumb svelte-1n6ht58"></span></span></label></form> <!> <form class="row divided svelte-1n6ht58" method="POST" action="?/clearBuildCache"><div class="label svelte-1n6ht58"><!> <div class="text svelte-1n6ht58"><div class="name svelte-1n6ht58">Clear build cache</div> <div class="desc svelte-1n6ht58">Purge Docker's BuildKit layer cache now, so the next build runs uncached. Doesn't
17
- remove pulled images.</div> <!></div></div> <!></form> <form class="row divided svelte-1n6ht58" method="POST" action="?/rebuildAllNoCache"><div class="label svelte-1n6ht58"><!> <div class="text svelte-1n6ht58"><div class="name svelte-1n6ht58">Rebuild running containers (no cache)</div> <div class="desc svelte-1n6ht58">Rebuild every currently-running instance from scratch, without using any cached image
18
- layers. In-container edits are kept; stopped instances are left alone.</div> <!></div></div> <!></form></section> <section><form class="row svelte-1n6ht58" method="POST" action="?/manualTokensToggle"><div class="label svelte-1n6ht58"><!> <div class="text svelte-1n6ht58"><div class="name svelte-1n6ht58">Set tokens manually <!></div> <div class="desc svelte-1n6ht58"><!></div></div></div> <label class="switch svelte-1n6ht58"><input type="checkbox" name="enabled" class="svelte-1n6ht58"/> <span class="track svelte-1n6ht58"><span class="thumb svelte-1n6ht58"></span></span></label></form> <!> <!></section> <section><form class="row svelte-1n6ht58" method="POST" action="?/customEndpointToggle"><div class="label svelte-1n6ht58"><!> <div class="text svelte-1n6ht58"><div class="name svelte-1n6ht58">LiteLLM + Bedrock <!></div> <div class="desc svelte-1n6ht58"><!></div></div></div> <label class="switch svelte-1n6ht58"><input type="checkbox" name="enabled" class="svelte-1n6ht58"/> <span class="track svelte-1n6ht58"><span class="thumb svelte-1n6ht58"></span></span></label></form> <!> <!></section> <section><form class="row svelte-1n6ht58" method="POST" action="?/manualModelToggle"><div class="label svelte-1n6ht58"><!> <div class="text svelte-1n6ht58"><div class="name svelte-1n6ht58">Override models manually <!></div> <div class="desc svelte-1n6ht58"><!></div></div></div> <label class="switch svelte-1n6ht58"><input type="checkbox" name="enabled" class="svelte-1n6ht58"/> <span class="track svelte-1n6ht58"><span class="thumb svelte-1n6ht58"></span></span></label></form> <!> <!></section> <section class="card svelte-1n6ht58"><form class="row svelte-1n6ht58" method="POST" action="?/hostEnvVarsToggle"><div class="label svelte-1n6ht58"><!> <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
19
- interactive shells. Values are read from this process's own environment at container
20
- start and are never shown here or stored — only the variable names are saved.</div></div></div> <label class="switch svelte-1n6ht58"><input type="checkbox" name="enabled" class="svelte-1n6ht58"/> <span class="track svelte-1n6ht58"><span class="thumb svelte-1n6ht58"></span></span></label></form> <!> <!></section> <section class="card svelte-1n6ht58"><div class="row svelte-1n6ht58"><div class="label svelte-1n6ht58"><!> <div class="text svelte-1n6ht58"><div class="name svelte-1n6ht58">Theme</div> <div class="desc svelte-1n6ht58">Light, dark, or follow the browser preference automatically (auto).</div></div></div> <!></div></section> <section class="card svelte-1n6ht58"><div class="row svelte-1n6ht58"><div class="label svelte-1n6ht58"><!> <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" 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"><!> <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" class="svelte-1n6ht58"/> <span class="track svelte-1n6ht58"><span class="thumb svelte-1n6ht58"></span></span></label></form> <!> <!></section> <section class="card danger-card svelte-1n6ht58"><form class="row svelte-1n6ht58" method="POST" action="?/shutdown"><div class="label svelte-1n6ht58"><!> <div class="text svelte-1n6ht58"><div class="name svelte-1n6ht58">Delete database, containers, and shut down</div> <div class="desc svelte-1n6ht58">Stop and remove every instance and its container, delete all copied workspaces and the
21
- database, then shut down the server. This cannot be undone.</div></div></div> <!></form></section> <!> <div class="version svelte-1n6ht58"> </div></main></div> <!>`,1);function nf(Q,z){K0(z,!0);let W=y(k(pI())),V=y(k(z.pet)),C1=y(!1),$=y(null),o=y(!1);DI(()=>PI());function m(f){return{onPending:f.setSaving,submit:({cancel:C})=>{if(f.confirmMessage&&!confirm(f.confirmMessage)){C();return}return f.setError(null),f.setMsg?.(null),({result:w})=>{if(w.type==="success")f.onSuccess(w.data);else if(w.type==="failure")f.setError(w.data?.error??"Request failed");else if(w.type==="error")f.setError("Network error. Try again.")}}}}function S1(f){return{onPending:f.setSaving,submit:({formData:C})=>{let w=C.get("enabled")==="on";return f.setError(null),({result:Z})=>{if(Z.type==="success"){f.onSuccess?.(Z.data);return}f.set(!w),f.setError(Z.type==="failure"?Z.data?.error??"Request failed":"Network error. Try again.")}}}}let j1=y(k(z.defaultImage)),D1=y(!1),N1=y(null),A1=y(!1),X1,k0=m({setSaving:(f)=>N(D1,f,!0),setError:(f)=>N(N1,f,!0),setMsg:(f)=>N(A1,!!f),onSuccess:(f)=>{N(j1,f?.image??S(j1),!0),N(A1,!0)}});function p0(){rf(()=>N(j1,z.builtinImage,!0)),X1?.requestSubmit()}let Z1=y(k(z.copyIgnorePatterns)),T0=y(!1),O0=y(null),h0=y(!1),b0,qI=m({setSaving:(f)=>N(T0,f,!0),setError:(f)=>N(O0,f,!0),setMsg:(f)=>N(h0,!!f),onSuccess:(f)=>{N(Z1,f?.patterns??S(Z1),!0),N(h0,!0)}});function EI(){rf(()=>N(Z1,z.builtinCopyIgnore,!0)),b0?.requestSubmit()}let O1=y(k(z.gitIdentityEnabled)),_f=y(!1),q0=y(null),cI=S1({set:(f)=>N(O1,f,!0),setSaving:(f)=>N(_f,f,!0),setError:(f)=>N(q0,f,!0)}),h1=y(k(z.gitIdentityName)),b1=y(k(z.gitIdentityEmail)),fS=y(!1),E0=y(null),c0=y(!1),mI=m({setSaving:(f)=>N(fS,f,!0),setError:(f)=>N(E0,f,!0),setMsg:(f)=>N(c0,!!f),onSuccess:(f)=>{N(h1,f?.name??S(h1),!0),N(b1,f?.email??S(b1),!0),N(c0,!0)}}),m0=y(k(z.disableBuildCache)),SS=y(!1),l0=y(null),lI=S1({set:(f)=>N(m0,f,!0),setSaving:(f)=>N(SS,f,!0),setError:(f)=>N(l0,f,!0)}),i0=y(!1),q1=y(null),g0=y(null);function iI(f){if(f<=0)return"0 B";let C=["B","KB","MB","GB","TB"],w=Math.min(Math.floor(Math.log(f)/Math.log(1024)),C.length-1);return`${(f/1024**w).toFixed(w===0?0:1)} ${C[w]}`}let gI=m({setSaving:(f)=>N(i0,f,!0),setError:(f)=>N(g0,f,!0),setMsg:(f)=>N(q1,f,!0),onSuccess:(f)=>{N(q1,`Cleared — freed ${iI(f?.spaceReclaimed??0)}.`)}}),s0=y(!1),E1=y(null),u0=y(null),sI=m({setSaving:(f)=>N(s0,f,!0),setError:(f)=>N(u0,f,!0),setMsg:(f)=>N(E1,f,!0),confirmMessage:"Rebuild every running container from scratch (no build cache)? Each will restart and may take a while.",onSuccess:(f)=>{let C=f?.count??0;N(E1,C===0?"No running containers to rebuild.":`Rebuilding ${C} container(s)…`,!0)}}),U1=y(k(z.manualTokensEnabled)),IS=y(!1),t0=y(null),uI=S1({set:(f)=>N(U1,f,!0),setSaving:(f)=>N(IS,f,!0),setError:(f)=>N(t0,f,!0)}),d0=y(k(z.githubTokenSet)),v0=y(""),LS=y(!1),c1=y(null),e0=y(null),tI=m({setSaving:(f)=>N(LS,f,!0),setError:(f)=>N(e0,f,!0),setMsg:(f)=>N(c1,f,!0),onSuccess:(f)=>{N(d0,f?.set??!1,!0),N(v0,""),N(c1,S(d0)?"Saved.":"Cleared.",!0)}}),a0=y(k(z.claudeTokenSet)),r0=y(""),CS=y(!1),m1=y(null),$0=y(null),dI=m({setSaving:(f)=>N(CS,f,!0),setError:(f)=>N($0,f,!0),setMsg:(f)=>N(m1,f,!0),onSuccess:(f)=>{N(a0,f?.set??!1,!0),N(r0,""),N(m1,S(a0)?"Saved.":"Cleared.",!0)}}),a=y(k(z.customEndpointEnabled)),NS=y(!1),o0=y(null),vI=S1({set:(f)=>N(a,f,!0),setSaving:(f)=>N(NS,f,!0),setError:(f)=>N(o0,f,!0),onSuccess:(f)=>{if(f?.enabled)N(Y1,!1)}}),xS=y(k(z.customEndpointBaseUrl)),wS=y(!1),l1=y(null),n0=y(null),eI=m({setSaving:(f)=>N(wS,f,!0),setError:(f)=>N(n0,f,!0),setMsg:(f)=>N(l1,f,!0),onSuccess:(f)=>{N(l1,f?.set?"Saved.":"Cleared.",!0)}}),_0=y(""),ff=y(k(z.customEndpointTokenSet)),yS=y(!1),i1=y(null),Sf=y(null),aI=m({setSaving:(f)=>N(yS,f,!0),setError:(f)=>N(Sf,f,!0),setMsg:(f)=>N(i1,f,!0),onSuccess:(f)=>{N(ff,f?.set??!1,!0),N(_0,""),N(i1,S(ff)?"Saved.":"Cleared.",!0)}}),zS=y(k(z.customEndpointOpusModel)),jS=y(k(z.customEndpointSonnetModel)),ZS=y(k(z.customEndpointHaikuModel)),QS=y(k(z.customEndpointSmallFastModel)),JS=y(k(z.customEndpointModel)),VS=y(!1),g1=y(null),If=y(null),rI=m({setSaving:(f)=>N(VS,f,!0),setError:(f)=>N(If,f,!0),setMsg:(f)=>N(g1,f,!0),onSuccess:()=>{N(g1,"Saved.")}}),Y1=y(k(z.manualModelOverrideEnabled)),WS=y(!1),Lf=y(null),$I=S1({set:(f)=>N(Y1,f,!0),setSaving:(f)=>N(WS,f,!0),setError:(f)=>N(Lf,f,!0),onSuccess:(f)=>{if(f?.enabled)N(a,!1)}}),AS=y(k(z.manualOpusModel)),XS=y(k(z.manualSonnetModel)),YS=y(k(z.manualHaikuModel)),KS=y(k(z.manualSmallFastModel)),RS=y(k(z.manualModel)),GS=y(!1),s1=y(null),Cf=y(null),oI=m({setSaving:(f)=>N(GS,f,!0),setError:(f)=>N(Cf,f,!0),setMsg:(f)=>N(s1,f,!0),onSuccess:()=>{N(s1,"Saved.")}}),K1=FI(()=>S(U1)?"Set tokens manually":S(Y1)?"Override models manually":null),u1=y(k(z.hostEnvVarsEnabled)),FS=y(!1),Nf=y(null),nI=S1({set:(f)=>N(u1,f,!0),setSaving:(f)=>N(FS,f,!0),setError:(f)=>N(Nf,f,!0),onSuccess:(f)=>{N(G1,f?.presence??{},!0)}}),R1=y(k([...z.hostEnvVarNames])),G1=y(k({...z.hostEnvVarPresence})),xf=y(""),t1=y(!1),H1=y(null),Q1=y(null),_I={onPending:(f)=>N(t1,f,!0),submit:({formData:f,cancel:C})=>{N(Q1,null),N(H1,null);let w=f.getAll("names").map(String),M=(w.pop()??"").trim().toUpperCase();if(!M){C();return}if(!/^[A-Za-z_][A-Za-z0-9_]*$/.test(M)){N(Q1,`Invalid variable name: ${M}`),C();return}if(N(xf,""),w.includes(M)){C();return}let q=[...w,M];f.delete("names");for(let O of q)f.append("names",O);return({result:O})=>{if(O.type==="success")N(R1,q,!0),N(G1,O.data?.presence??{},!0),N(H1,"Saved.");else if(O.type==="failure")N(Q1,O.data?.error??"Request failed",!0);else if(O.type==="error")N(Q1,"Network error. Try again.")}}};function fL(f){return m({setSaving:(C)=>N(t1,C,!0),setError:(C)=>N(Q1,C,!0),setMsg:(C)=>N(H1,C,!0),onSuccess:(C)=>{N(R1,S(R1).filter((w)=>w!==f),!0),N(G1,C?.presence??{},!0)}})}function SL(f){if(N(W,f,!0),TI(f),OI(),f)hI("done")}let IL={onPending:(f)=>N(C1,f,!0),submit:()=>{return N($,null),({result:f})=>{if(f.type==="success"){N(V,f.data?.name?of(f.data.name):void 0,!0);return}N($,f.type==="failure"?f.data?.error??"Request failed":"Network error. Try again.",!0)}}};function LL(f){return m({setSaving:(C)=>N(C1,C,!0),setError:(C)=>N($,C,!0),onSuccess:(C)=>{N(V,(C?.name?of(C.name):void 0)??f,!0)}})}let CL={submit:({cancel:f})=>{if(!confirm("Delete the database, remove all instances and their containers, and shut down the server? This cannot be undone.")){f();return}N(o,!0)}};var DS=yN(),wf=T1(DS),US=L(wf);kI(US,{children:(f,C)=>{var w=tC();j(f,w)},$$slots:{default:!0}});var HS=x(US,2),yf=L(HS),d1=L(yf),zf=L(d1),PS=L(zf);Z0(PS,{size:20});var BS=x(PS,2),MS=L(BS),NL=x(L(MS));{var xL=(f)=>{var C=dC(),w=L(C,!0);I(C),J(()=>X(w,z.dockerArch)),j(f,C)};G(NL,(f)=>{if(z.dockerArch)f(xL)})}I(MS),R(2),I(BS),I(zf);var jf=x(zf,2),Zf=L(jf);p(Zf);var kS=x(Zf,2);v(kS,{type:"submit",get disabled(){return S(D1)},children:(f,C)=>{R();var w=g("Save");j(f,w)},$$slots:{default:!0}});var wL=x(kS,2);v(wL,{type:"button",get icon(){return B1},get disabled(){return S(D1)},onclick:p0,get title(){return`Reset to default (${z.builtinImage??""})`},"aria-label":"Reset to default image"}),I(jf);var Qf=x(jf,2),yL=L(Qf);{var zL=(f)=>{var C=vC(),w=x(T1(C)),Z=L(w,!0);I(w);var M=x(w,2),q=L(M,!0);I(M),R(),J(()=>{X(Z,z.dockerArch),X(q,z.dockerArch)}),j(f,C)},jL=(f)=>{var C=g(`Pick an image whose manifest covers your Docker daemon's architecture, or the pull will
22
- fail.`);j(f,C)};G(yL,(f)=>{if(z.dockerArch)f(zL);else f(jL,-1)})}I(Qf);var ZL=x(Qf,2);{var QL=(f)=>{var C=f1(),w=L(C,!0);I(C),J(()=>X(w,S(N1))),j(f,C)},JL=(f)=>{var C=af();j(f,C)};G(ZL,(f)=>{if(S(N1))f(QL);else if(S(A1))f(JL,1)})}I(d1),$f(d1,(f)=>X1=f,()=>X1),E(d1,()=>c(k0)),I(yf);var Jf=x(yf,2),v1=L(Jf),Vf=L(v1),VL=L(Vf);D0(VL,{size:20}),R(2),I(Vf);var Wf=x(Vf,2),Af=L(Wf);p(Af);var pS=x(Af,2);v(pS,{type:"submit",get disabled(){return S(T0)},children:(f,C)=>{R();var w=g("Save");j(f,w)},$$slots:{default:!0}});var WL=x(pS,2);v(WL,{type:"button",get icon(){return B1},get disabled(){return S(T0)},onclick:EI,get title(){return`Reset to default (${z.builtinCopyIgnore??""})`},"aria-label":"Reset to default copy-ignore patterns"}),I(Wf);var AL=x(Wf,2);{var XL=(f)=>{var C=f1(),w=L(C,!0);I(C),J(()=>X(w,S(O0))),j(f,C)},YL=(f)=>{var C=af();j(f,C)};G(AL,(f)=>{if(S(O0))f(XL);else if(S(h0))f(YL,1)})}I(v1),$f(v1,(f)=>b0=f,()=>b0),E(v1,()=>c(qI)),I(Jf);var Xf=x(Jf,2),e1=L(Xf),Yf=L(e1),KL=L(Yf);U0(KL,{size:20}),R(2),I(Yf);var TS=x(Yf,2),a1=L(TS);p(a1),R(2),I(TS),I(e1),E(e1,()=>c(cI));var OS=x(e1,2);{var RL=(f)=>{var C=W1(),w=L(C),Z=L(w,!0);I(w),I(C),J(()=>X(Z,S(q0))),j(f,C)};G(OS,(f)=>{if(S(q0))f(RL)})}var GL=x(OS,2);{var FL=(f)=>{var C=eC(),w=x(L(C),2),Z=L(w),M=x(L(Z),2);p(M),I(Z);var q=x(Z,2),O=x(L(q),2);p(O),I(q);var e=x(q,2),_=L(e);v(_,{type:"submit",get disabled(){return S(fS)},children:(F,t)=>{R();var n=g("Save");j(F,n)},$$slots:{default:!0}}),I(e),I(w);var u=x(w,2);{var P=(F)=>{var t=f1(),n=L(t,!0);I(t),J(()=>X(n,S(E0))),j(F,t)},Y=(F)=>{var t=af();j(F,t)};G(u,(F)=>{if(S(E0))F(P);else if(S(c0))F(Y,1)})}I(C),E(C,()=>c(mI)),l(M,()=>S(h1),(F)=>N(h1,F)),l(O,()=>S(b1),(F)=>N(b1,F)),j(f,C)};G(GL,(f)=>{if(S(O1))f(FL)})}I(Xf);var Kf=x(Xf,2),r1=L(Kf),Rf=L(r1),DL=L(Rf);F0(DL,{size:20}),R(2),I(Rf);var hS=x(Rf,2),$1=L(hS);p($1),R(2),I(hS),I(r1),E(r1,()=>c(lI));var bS=x(r1,2);{var UL=(f)=>{var C=W1(),w=L(C),Z=L(w,!0);I(w),I(C),J(()=>X(Z,S(l0))),j(f,C)};G(bS,(f)=>{if(S(l0))f(UL)})}var o1=x(bS,2),Gf=L(o1),qS=L(Gf);M1(qS,{size:20});var ES=x(qS,2),HL=x(L(ES),4);{var PL=(f)=>{var C=f1(),w=L(C,!0);I(C),J(()=>X(w,S(g0))),j(f,C)},BL=(f)=>{var C=x1(),w=L(C,!0);I(C),J(()=>X(w,S(q1))),j(f,C)};G(HL,(f)=>{if(S(g0))f(PL);else if(S(q1))f(BL,1)})}I(ES),I(Gf);var ML=x(Gf,2);v(ML,{type:"submit",get icon(){return M1},get disabled(){return S(i0)},children:(f,C)=>{R();var w=g();J(()=>X(w,S(i0)?"Clearing…":"Clear cache")),j(f,w)},$$slots:{default:!0}}),I(o1),E(o1,()=>c(gI));var Ff=x(o1,2),Df=L(Ff),cS=L(Df);k1(cS,{size:20});var mS=x(cS,2),kL=x(L(mS),4);{var pL=(f)=>{var C=f1(),w=L(C,!0);I(C),J(()=>X(w,S(u0))),j(f,C)},TL=(f)=>{var C=x1(),w=L(C,!0);I(C),J(()=>X(w,S(E1))),j(f,C)};G(kL,(f)=>{if(S(u0))f(pL);else if(S(E1))f(TL,1)})}I(mS),I(Df);var OL=x(Df,2);v(OL,{type:"submit",get icon(){return k1},get disabled(){return S(s0)},children:(f,C)=>{R();var w=g();J(()=>X(w,S(s0)?"Starting…":"Rebuild all")),j(f,w)},$$slots:{default:!0}}),I(Ff),E(Ff,()=>c(sI)),I(Kf);var n1=x(Kf,2);let lS;var _1=L(n1),Uf=L(_1),iS=L(Uf);p1(iS,{size:20});var gS=x(iS,2),Hf=L(gS),hL=x(L(Hf));{var bL=(f)=>{var C=aC();j(f,C)};G(hL,(f)=>{if(S(a))f(bL)})}I(Hf);var sS=x(Hf,2),qL=L(sS);{var EL=(f)=>{var C=g(`Not available while LiteLLM + Bedrock mode is enabled — Claude credentials are
23
- provided by the LiteLLM endpoint instead.`);j(f,C)},cL=(f)=>{var C=g(`Provide GitHub and Claude Code tokens yourself instead of discovering them from this
24
- machine. Useful on a headless server or when signed in as a different identity. A
25
- token set here is injected into every new container and overrides host credential
26
- discovery.`);j(f,C)};G(qL,(f)=>{if(S(a))f(EL);else f(cL,-1)})}I(sS),I(gS),I(Uf);var uS=x(Uf,2),f0=L(uS);p(f0),R(2),I(uS),I(_1),E(_1,()=>c(uI));var tS=x(_1,2);{var mL=(f)=>{var C=W1(),w=L(C),Z=L(w,!0);I(w),I(C),J(()=>X(Z,S(t0))),j(f,C)};G(tS,(f)=>{if(S(t0))f(mL)})}var lL=x(tS,2);{var iL=(f)=>{var C=rC(),w=T1(C),Z=x(L(w),2),M=L(Z);p(M);var q=x(M,2);v(q,{type:"submit",get disabled(){return S(LS)},children:(B,h)=>{R();var K=g("Save");j(B,K)},$$slots:{default:!0}}),I(Z);var O=x(Z,2);{var e=(B)=>{var h=f1(),K=L(h,!0);I(h),J(()=>X(K,S(e0))),j(B,h)},_=(B)=>{var h=x1(),K=L(h,!0);I(h),J(()=>X(K,S(c1))),j(B,h)};G(O,(B)=>{if(S(e0))B(e);else if(S(c1))B(_,1)})}I(w),E(w,()=>c(tI));var u=x(w,2),P=x(L(u),2),Y=L(P);p(Y);var F=x(Y,2);v(F,{type:"submit",get disabled(){return S(CS)},children:(B,h)=>{R();var K=g("Save");j(B,K)},$$slots:{default:!0}}),I(P);var t=x(P,2);{var n=(B)=>{var h=f1(),K=L(h,!0);I(h),J(()=>X(K,S($0))),j(B,h)},J1=(B)=>{var h=x1(),K=L(h,!0);I(h),J(()=>X(K,S(m1))),j(B,h)};G(t,(B)=>{if(S($0))B(n);else if(S(m1))B(J1,1)})}I(u),E(u,()=>c(dI)),J(()=>{r(M,"placeholder",S(d0)?"•••••••• (saved)":"ghp_… / gho_…"),r(Y,"placeholder",S(a0)?"•••••••• (saved)":"sk-ant-oat…")}),l(M,()=>S(v0),(B)=>N(v0,B)),l(Y,()=>S(r0),(B)=>N(r0,B)),j(f,C)};G(lL,(f)=>{if(S(U1)&&!S(a))f(iL)})}I(n1);var S0=x(n1,2);let dS;var I0=L(S0),Pf=L(I0),vS=L(Pf);p1(vS,{size:20});var eS=x(vS,2),Bf=L(eS),gL=x(L(Bf));{var sL=(f)=>{var C=$C();J(()=>r(C,"title",`Disabled while ${S(K1)??""} is on`)),j(f,C)};G(gL,(f)=>{if(S(K1))f(sL)})}I(Bf);var aS=x(Bf,2),uL=L(aS);{var tL=(f)=>{var C=g();J(()=>X(C,`Not available while "${S(K1)??""}" is enabled — these modes are mutually
27
- incompatible.`)),j(f,C)},dL=(f)=>{var C=oC();R(2),j(f,C)};G(uL,(f)=>{if(S(K1))f(tL);else f(dL,-1)})}I(aS),I(eS),I(Pf);var rS=x(Pf,2),L0=L(rS);p(L0),R(2),I(rS),I(I0),E(I0,()=>c(vI));var $S=x(I0,2);{var vL=(f)=>{var C=W1(),w=L(C),Z=L(w,!0);I(w),I(C),J(()=>X(Z,S(o0))),j(f,C)};G($S,(f)=>{if(S(o0))f(vL)})}var eL=x($S,2);{var aL=(f)=>{var C=nC(),w=T1(C),Z=x(L(w),2),M=L(Z);p(M);var q=x(M,2);v(q,{type:"submit",get disabled(){return S(wS)},children:(A,b)=>{R();var s=g("Save");j(A,s)},$$slots:{default:!0}}),I(Z);var O=x(Z,2);{var e=(A)=>{var b=f1(),s=L(b,!0);I(b),J(()=>X(s,S(n0))),j(A,b)},_=(A)=>{var b=x1(),s=L(b,!0);I(b),J(()=>X(s,S(l1))),j(A,b)};G(O,(A)=>{if(S(n0))A(e);else if(S(l1))A(_,1)})}I(w),E(w,()=>c(eI));var u=x(w,2),P=x(L(u),2),Y=L(P);p(Y);var F=x(Y,2);v(F,{type:"submit",get disabled(){return S(yS)},children:(A,b)=>{R();var s=g("Save");j(A,s)},$$slots:{default:!0}}),I(P);var t=x(P,2);{var n=(A)=>{var b=f1(),s=L(b,!0);I(b),J(()=>X(s,S(Sf))),j(A,b)},J1=(A)=>{var b=x1(),s=L(b,!0);I(b),J(()=>X(s,S(i1))),j(A,b)};G(t,(A)=>{if(S(Sf))A(n);else if(S(i1))A(J1,1)})}I(u),E(u,()=>c(aI));var B=x(u,2),h=x(L(B),2),K=L(h),d=x(L(K),2);p(d),I(K);var I1=x(K,2),y1=x(L(I1),2);p(y1),I(I1);var P1=x(I1,2),F1=x(L(P1),2);p(F1),I(P1);var uf=x(P1,2),QI=x(L(uf),2);p(QI),I(uf);var tf=x(uf,2),JI=x(L(tf),2);p(JI),I(tf);var VI=x(tf,2),RC=L(VI);v(RC,{type:"submit",get disabled(){return S(VS)},children:(A,b)=>{R();var s=g("Save models");j(A,s)},$$slots:{default:!0}}),I(VI),I(h);var GC=x(h,2);{var FC=(A)=>{var b=f1(),s=L(b,!0);I(b),J(()=>X(s,S(If))),j(A,b)},DC=(A)=>{var b=x1(),s=L(b,!0);I(b),J(()=>X(s,S(g1))),j(A,b)};G(GC,(A)=>{if(S(If))A(FC);else if(S(g1))A(DC,1)})}I(B),E(B,()=>c(rI)),J(()=>r(Y,"placeholder",S(ff)?"•••••••• (saved)":"sk-…")),l(M,()=>S(xS),(A)=>N(xS,A)),l(Y,()=>S(_0),(A)=>N(_0,A)),l(d,()=>S(zS),(A)=>N(zS,A)),l(y1,()=>S(jS),(A)=>N(jS,A)),l(F1,()=>S(ZS),(A)=>N(ZS,A)),l(QI,()=>S(QS),(A)=>N(QS,A)),l(JI,()=>S(JS),(A)=>N(JS,A)),j(f,C)};G(eL,(f)=>{if(S(a))f(aL)})}I(S0);var C0=x(S0,2);let oS;var N0=L(C0),Mf=L(N0),nS=L(Mf);H0(nS,{size:18});var _S=x(nS,2),kf=L(_S),rL=x(L(kf));{var $L=(f)=>{var C=_C();j(f,C)};G(rL,(f)=>{if(S(a))f($L)})}I(kf);var fI=x(kf,2),oL=L(fI);{var nL=(f)=>{var C=g(`Not available while "LiteLLM + Bedrock" is enabled — these modes are mutually
28
- incompatible.`);j(f,C)},_L=(f)=>{var C=fN();R(4),j(f,C)};G(oL,(f)=>{if(S(a))f(nL);else f(_L,-1)})}I(fI),I(_S),I(Mf);var SI=x(Mf,2),x0=L(SI);p(x0),R(2),I(SI),I(N0),E(N0,()=>c($I));var II=x(N0,2);{var fC=(f)=>{var C=W1(),w=L(C),Z=L(w,!0);I(w),I(C),J(()=>X(Z,S(Lf))),j(f,C)};G(II,(f)=>{if(S(Lf))f(fC)})}var SC=x(II,2);{var IC=(f)=>{var C=SN(),w=x(L(C),2),Z=L(w),M=x(L(Z),2);p(M),I(Z);var q=x(Z,2),O=x(L(q),2);p(O),I(q);var e=x(q,2),_=x(L(e),2);p(_),I(e);var u=x(e,2),P=x(L(u),2);p(P),I(u);var Y=x(u,2),F=x(L(Y),2);p(F),I(Y);var t=x(Y,2),n=L(t);v(n,{type:"submit",get disabled(){return S(GS)},children:(K,d)=>{R();var I1=g("Save models");j(K,I1)},$$slots:{default:!0}}),I(t),I(w);var J1=x(w,2);{var B=(K)=>{var d=f1(),I1=L(d,!0);I(d),J(()=>X(I1,S(Cf))),j(K,d)},h=(K)=>{var d=x1(),I1=L(d,!0);I(d),J(()=>X(I1,S(s1))),j(K,d)};G(J1,(K)=>{if(S(Cf))K(B);else if(S(s1))K(h,1)})}I(C),E(C,()=>c(oI)),l(M,()=>S(AS),(K)=>N(AS,K)),l(O,()=>S(XS),(K)=>N(XS,K)),l(_,()=>S(YS),(K)=>N(YS,K)),l(P,()=>S(KS),(K)=>N(KS,K)),l(F,()=>S(RS),(K)=>N(RS,K)),j(f,C)};G(SC,(f)=>{if(S(Y1))f(IC)})}I(C0);var pf=x(C0,2),w0=L(pf),Tf=L(w0),LC=L(Tf);P0(LC,{size:20}),R(2),I(Tf);var LI=x(Tf,2),y0=L(LI);p(y0),R(2),I(LI),I(w0),E(w0,()=>c(nI));var CI=x(w0,2);{var CC=(f)=>{var C=W1(),w=L(C),Z=L(w,!0);I(w),I(C),J(()=>X(Z,S(Nf))),j(f,C)};G(CI,(f)=>{if(S(Nf))f(CC)})}var NC=x(CI,2);{var xC=(f)=>{var C=CN(),w=L(C);V1(w,20,()=>S(R1),(P)=>P,(P,Y)=>{var F=IN(),t=L(F);V1(t,16,()=>S(R1).filter((y1)=>y1!==Y),(y1)=>y1,(y1,P1)=>{var F1=GI();p(F1),J(()=>M0(F1,P1)),j(y1,F1)});var n=x(t,2),J1=L(n,!0);I(n);var B=x(n,2);let h;var K=L(B,!0);I(B);var d=x(B,2),I1=L(d);HI(I1,{size:13}),I(d),I(F),E(F,()=>c(fL(Y))),J(()=>{X(J1,Y),h=z1(B,1,"var-status svelte-1n6ht58",null,h,{present:S(G1)[Y]}),r(B,"title",S(G1)[Y]?"Set on this host — will be injected":"Not set on this host — will be skipped"),X(K,S(G1)[Y]?"set":"missing"),d.disabled=S(t1),r(d,"aria-label",`Remove ${Y}`)}),j(P,F)},(P)=>{var Y=LN();j(P,Y)}),I(w);var Z=x(w,2),M=L(Z);V1(M,16,()=>S(R1),(P)=>P,(P,Y)=>{var F=GI();p(F),J(()=>M0(F,Y)),j(P,F)});var q=x(M,2);p(q);var O=x(q,2);v(O,{type:"submit",get icon(){return BI},get disabled(){return S(t1)},children:(P,Y)=>{R();var F=g("Add");j(P,F)},$$slots:{default:!0}}),I(Z),E(Z,()=>c(_I));var e=x(Z,2);{var _=(P)=>{var Y=f1(),F=L(Y,!0);I(Y),J(()=>X(F,S(Q1))),j(P,Y)},u=(P)=>{var Y=x1(),F=L(Y,!0);I(Y),J(()=>X(F,S(H1))),j(P,Y)};G(e,(P)=>{if(S(Q1))P(_);else if(S(H1))P(u,1)})}I(C),l(q,()=>S(xf),(P)=>N(xf,P)),j(f,C)};G(NC,(f)=>{if(S(u1))f(xC)})}I(pf);var Of=x(pf,2),NI=L(Of),hf=L(NI),wC=L(hf);W0(wC,{size:20}),R(2),I(hf);var yC=x(hf,2);vf(yC,{}),I(NI),I(Of);var bf=x(Of,2),xI=L(bf),qf=L(xI),zC=L(qf);J0(zC,{size:20}),R(2),I(qf);var wI=x(qf,2),Ef=L(wI);p(Ef),R(2),I(wI),I(xI),I(bf);var cf=x(bf,2),z0=L(cf),mf=L(z0),jC=L(mf);V0(jC,{size:18}),R(2),I(mf);var yI=x(mf,2),j0=L(yI);p(j0),R(2),I(yI),I(z0),E(z0,()=>c(IL));var zI=x(z0,2);{var ZC=(f)=>{var C=W1(),w=L(C),Z=L(w,!0);I(w),I(C),J(()=>X(Z,S($))),j(f,C)};G(zI,(f)=>{if(S($))f(ZC)})}var QC=x(zI,2);{var JC=(f)=>{var C=xN();V1(C,21,()=>UI,(w)=>w.name,(w,Z)=>{var M=NN(),q=L(M);p(q);var O=x(q,2);let e;var _=L(O);B0(_,{get art(){return S(Z)},get name(){return S(Z).name},scale:4}),I(O),I(M),E(M,()=>c(LL(S(Z)))),J(()=>{M0(q,S(Z).name),e=z1(O,1,"pet svelte-1n6ht58",null,e,{selected:S(Z).name===S(V).name}),O.disabled=S(C1),r(O,"title",S(Z).name),r(O,"aria-label",S(Z).name),r(O,"aria-pressed",S(Z).name===S(V).name)}),j(w,M)}),I(C),j(f,C)};G(QC,(f)=>{if(S(V))f(JC)})}I(cf);var lf=x(cf,2),gf=L(lf),sf=L(gf),VC=L(sf);Q0(VC,{size:20}),R(2),I(sf);var WC=x(sf,2);{var AC=(f)=>{var C=wN();j(f,C)},XC=(f)=>{v(f,{type:"submit",variant:"danger",children:(C,w)=>{R();var Z=g("Delete & shut down");j(C,Z)},$$slots:{default:!0}})};G(WC,(f)=>{if(S(o))f(AC);else f(XC,-1)})}I(gf),E(gf,()=>c(CL)),I(lf);var jI=x(lf,2);ef(jI,{});var ZI=x(jI,2),YC=L(ZI);I(ZI),I(HS),I(wf);var KC=x(wf,2);MI(KC,{toastOptions:{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;"}}),J(()=>{w1(a1,S(O1)),a1.disabled=S(_f),w1($1,S(m0)),$1.disabled=S(SS),lS=z1(n1,1,"card svelte-1n6ht58",null,lS,{"disabled-card":S(a)}),w1(f0,S(U1)),f0.disabled=S(IS)||S(a),dS=z1(S0,1,"card svelte-1n6ht58",null,dS,{"disabled-card":S(K1)}),w1(L0,S(a)),L0.disabled=S(NS)||!!S(K1),oS=z1(C0,1,"card svelte-1n6ht58",null,oS,{"disabled-card":S(a)}),w1(x0,S(Y1)),x0.disabled=S(WS)||S(a),w1(y0,S(u1)),y0.disabled=S(FS),w1(Ef,S(W)),w1(j0,!!S(V)),j0.disabled=S(C1),X(YC,`Codebay v${z.version??""}`)}),l(Zf,()=>S(j1),(f)=>N(j1,f)),l(Af,()=>S(Z1),(f)=>N(Z1,f)),L1("change",a1,(f)=>{N(O1,f.currentTarget.checked,!0),f.currentTarget.form?.requestSubmit()}),L1("change",$1,(f)=>{N(m0,f.currentTarget.checked,!0),f.currentTarget.form?.requestSubmit()}),L1("change",f0,(f)=>{N(U1,f.currentTarget.checked,!0),f.currentTarget.form?.requestSubmit()}),L1("change",L0,(f)=>{N(a,f.currentTarget.checked,!0),f.currentTarget.form?.requestSubmit()}),L1("change",x0,(f)=>{N(Y1,f.currentTarget.checked,!0),f.currentTarget.form?.requestSubmit()}),L1("change",y0,(f)=>{N(u1,f.currentTarget.checked,!0),f.currentTarget.form?.requestSubmit()}),L1("change",Ef,(f)=>SL(f.currentTarget.checked)),L1("change",j0,(f)=>f.currentTarget.form?.requestSubmit()),j(Q,DS),R0()}G0(["change"]);bI("SettingsView_8hmarwmf8onq",nf);
@@ -1,2 +0,0 @@
1
- import{Aa as T,Ca as j,E as x,Ea as B,F as y,G as _,I as p,K as b,L as W,M as I,Na as a,Ra as q,Ta as o,U as l,aa as w,ba as N,ca as L,la as i,ta as E,va as z,wa as d,za as A}from"/_mochi/client/chunk-qj7zy2d9.js";p();function te(e){return`${e}?popup=1`}function $(){return new URLSearchParams(location.search).has("popup")}function g(){window.close(),setTimeout(()=>{location.href="/"},100)}function oe(e){if(e.defaultPrevented||e.button!==0||e.metaKey||e.ctrlKey||e.shiftKey||e.altKey)return;if(!$())return;e.preventDefault(),g()}function re(){if(!$())return()=>{};history.pushState({},"",location.href);let e=()=>g();return window.addEventListener("popstate",e),()=>window.removeEventListener("popstate",e)}var Y={xmlns:"http://www.w3.org/2000/svg",width:24,height:24,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":2,"stroke-linecap":"round","stroke-linejoin":"round"},S=Y;var C=(e)=>{for(let t in e)if(t.startsWith("aria-")||t==="role"||t==="title")return!0;return!1};var Z=Symbol("lucide-context");var k=()=>b(Z);var G=new Set(["$$slots","$$events","$$legacy","name","color","size","strokeWidth","absoluteStrokeWidth","iconNode","children"]),H=E("<svg><!><!></svg>");function O(e,t){W(t,!0);let r=k()??{},D=o(t,"color",19,()=>r.color??"currentColor"),c=o(t,"size",19,()=>r.size??24),h=o(t,"strokeWidth",19,()=>r.strokeWidth??2),F=o(t,"absoluteStrokeWidth",19,()=>r.absoluteStrokeWidth??!1),J=o(t,"iconNode",19,()=>[]),u=q(t,G),K=l(()=>F()?Number(h())*24/Number(c()):h());var n=H();a(n,(s)=>({...S,...s,...u,width:c(),height:c(),stroke:D(),"stroke-width":i(K),class:["lucide-icon lucide",r.class,t.name&&`lucide-${t.name}`,t.class]}),[()=>!t.children&&!C(u)&&{"aria-hidden":"true"}]);var f=w(n);T(f,17,J,A,(s,Q)=>{var m=l(()=>y(i(Q),2));let R=()=>i(m)[0],U=()=>i(m)[1];var v=z(),V=N(v);B(V,R,!0,(X,P)=>{a(X,()=>({...U()}))}),d(s,v)});var M=L(f);j(M,()=>t.children??x),_(n),d(e,n),I()}
2
- export{O as A,te as B,oe as C,re as D};
@@ -1 +0,0 @@
1
- import{A as o}from"/_mochi/client/chunk-330mrspw.js";import{Ra as e,Sa as t}from"/_mochi/client/chunk-qj7zy2d9.js";var p=new Set(["$$slots","$$events","$$legacy"]);function r(s,i){let c=e(i,p),n=[["path",{d:"M18 6 6 18"}],["path",{d:"m6 6 12 12"}]];o(s,t({name:"x"},()=>c,{get iconNode(){return n}}))}export{r as n};