codebay 0.3.0 → 0.5.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 (56) hide show
  1. package/.mochi/manifest.json +296 -268
  2. package/.mochi/svelte-client/HydratableIsland-79z9xq4b.js +1 -0
  3. package/.mochi/svelte-client/_hydrate-AppShell_2rtnxn6pgp2rh-f5rzyjm8.js +2 -0
  4. package/.mochi/svelte-client/{_hydrate-AvatarsView_257s9yq1wwr4f-3w16y9jh.js → _hydrate-AvatarsView_257s9yq1wwr4f-fxyd5qx4.js} +2 -2
  5. package/.mochi/svelte-client/_hydrate-InstanceView_2ma45l9bybfhl-nv31ptdp.js +1 -0
  6. package/.mochi/svelte-client/_hydrate-SettingsView_8hmarwmf8onq-r9vvc7rx.js +28 -0
  7. package/.mochi/svelte-client/chunk-6eexkr6p.js +2 -0
  8. package/.mochi/svelte-client/chunk-7znwaf7t.js +2 -0
  9. package/.mochi/svelte-client/chunk-dz1019cy.js +1 -0
  10. package/.mochi/svelte-client/{chunk-qxwt25hn.js → chunk-nmf4dq86.js} +1 -1
  11. package/.mochi/svelte-client/{chunk-0jtmkpx4.js → chunk-ssa0ad2f.js} +2 -2
  12. package/.mochi/svelte-client/chunk-zmmb1c4b.js +2 -0
  13. package/.mochi/svelte-compile/{App-f0q5n4rk.server.js → App-9qjy14bc.server.js} +38 -23
  14. package/.mochi/svelte-compile/{Avatars-p8gfef7x.server.js → Avatars-sq8mjn6k.server.js} +2 -2
  15. package/.mochi/svelte-compile/{Instance-atjwsczx.server.js → Instance-13j59daw.server.js} +2 -2
  16. package/.mochi/svelte-compile/{Settings-q88xw6h8.server.js → Settings-p0s2awg1.server.js} +404 -103
  17. package/.mochi/svelte-compile/{chunk-9bjk7yx6.js → chunk-6ghzacpg.js} +1 -1
  18. package/.mochi/svelte-compile/{chunk-4kwy539a.js → chunk-bacb4b0r.js} +1 -1
  19. package/.mochi/svelte-compile/{chunk-sxqys3nw.js → chunk-dfe2km6a.js} +5 -2
  20. package/.mochi/svelte-compile/{chunk-v6796ga4.js → chunk-fpe16ywq.js} +28 -6
  21. package/.mochi/svelte-css/Brand-1bh2b800g5vrn.css +1 -0
  22. package/.mochi/svelte-css/SettingsView-3uycxa8z548m4.css +1 -0
  23. package/README.md +4 -0
  24. package/package.json +8 -8
  25. package/src/avatars/index.ts +5 -0
  26. package/src/components/AppBar.svelte +8 -1
  27. package/src/components/AppShell.svelte +17 -3
  28. package/src/components/Brand.svelte +15 -4
  29. package/src/components/DashboardView.svelte +5 -2
  30. package/src/components/IdeBar.svelte +9 -1
  31. package/src/components/InstanceCard.svelte +7 -3
  32. package/src/components/InstanceView.svelte +4 -1
  33. package/src/components/SettingsCog.svelte +9 -1
  34. package/src/components/SettingsView.svelte +476 -18
  35. package/src/components/TopBar.svelte +4 -1
  36. package/src/container-injections/claude-code-models.ts +74 -0
  37. package/src/container-injections/claude-model.ts +66 -0
  38. package/src/container-injections/claude-no-coauthor.ts +11 -1
  39. package/src/container-injections/claude-statusline.ts +24 -9
  40. package/src/container-injections/git-identity.ts +30 -3
  41. package/src/lib/injections.server.ts +5 -0
  42. package/src/lib/instances.server.ts +10 -1
  43. package/src/lib/popup-nav.ts +37 -0
  44. package/src/pages/App.svelte +10 -3
  45. package/src/pages/Settings.svelte +31 -0
  46. package/src/routes.ts +88 -2
  47. package/.mochi/svelte-client/HydratableIsland-wrq79y0w.js +0 -1
  48. package/.mochi/svelte-client/_hydrate-AppShell_2rtnxn6pgp2rh-faqf4hmc.js +0 -2
  49. package/.mochi/svelte-client/_hydrate-InstanceView_2ma45l9bybfhl-5g8meb6a.js +0 -1
  50. package/.mochi/svelte-client/_hydrate-SettingsView_8hmarwmf8onq-jsw4edxb.js +0 -23
  51. package/.mochi/svelte-client/chunk-04qv4w6w.js +0 -2
  52. package/.mochi/svelte-client/chunk-597d17x0.js +0 -1
  53. package/.mochi/svelte-client/chunk-5p31aqh0.js +0 -2
  54. package/.mochi/svelte-client/chunk-gjjhya9m.js +0 -2
  55. package/.mochi/svelte-css/Brand-1la7zw5uhcbl4.css +0 -1
  56. package/.mochi/svelte-css/SettingsView-1nfdwnm16cpp2.css +0 -1
package/src/routes.ts CHANGED
@@ -19,10 +19,13 @@ import {
19
19
  DEFAULT_SONNET_MODEL
20
20
  } from './container-injections/claude-code-custom.ts';
21
21
  import { hostEnvVarPresence, parseHostEnvVarNames } from './container-injections/host-env-vars.ts';
22
+ import { gitIdentityEnabled } from './container-injections/git-identity.ts';
22
23
  import { browse } from './lib/picker.server.ts';
23
24
  import { pickNamePrompt } from './avatars/name-prompts.ts';
25
+ import { avatars, findAvatar } from './avatars/index.ts';
24
26
  import {
25
27
  addForwardedPort,
28
+ broadcastPet,
26
29
  createInstance,
27
30
  deleteAllInstances,
28
31
  deleteDatabaseAndShutdown,
@@ -75,6 +78,11 @@ async function preflight() {
75
78
  return { docker, cli, auth };
76
79
  }
77
80
 
81
+ /** The header pet logo, resolved from the DB option. A name that left the catalog reads as "off". */
82
+ function currentPet() {
83
+ return findAvatar(getOption('pet') ?? undefined);
84
+ }
85
+
78
86
  /** Lets a route handler just `throw` for both validation and business-logic failures. */
79
87
  async function mutate(fn: () => Promise<unknown> | unknown): Promise<Response> {
80
88
  try {
@@ -111,7 +119,8 @@ export const routes: Record<string, MochiRouteValue> = {
111
119
  serverProps: async () => ({
112
120
  preflight: await preflight(),
113
121
  initialPath: '/',
114
- snapshot: await listInstances()
122
+ snapshot: await listInstances(),
123
+ pet: currentPet()
115
124
  })
116
125
  }),
117
126
 
@@ -121,7 +130,8 @@ export const routes: Record<string, MochiRouteValue> = {
121
130
  return {
122
131
  preflight: await preflight(),
123
132
  initialPath: `/ide/${params.id}`,
124
- snapshot: await listInstances()
133
+ snapshot: await listInstances(),
134
+ pet: currentPet()
125
135
  };
126
136
  }
127
137
  }),
@@ -158,12 +168,18 @@ export const routes: Record<string, MochiRouteValue> = {
158
168
  // Only names ever reach the client; presence is sent separately, values never.
159
169
  const hostEnvVarNames = parseHostEnvVarNames(getOption('host_env_var_names'));
160
170
  return {
171
+ pet: currentPet(),
161
172
  defaultImage: getOption('default_image') ?? DEFAULT_IMAGE,
162
173
  builtinImage: DEFAULT_IMAGE,
163
174
  disableBuildCache: getOption('disable_build_cache') === '1',
164
175
  // An explicit empty string (as opposed to unset) means "copy everything".
165
176
  copyIgnorePatterns: getOption('copy_ignore_patterns') ?? DEFAULT_COPY_IGNORE,
166
177
  builtinCopyIgnore: DEFAULT_COPY_IGNORE,
178
+ // Not secrets, so the actual values (not just a "set" flag) go to the client.
179
+ // Blank means "no override" — fall back to the host's git config.
180
+ gitIdentityEnabled: gitIdentityEnabled(),
181
+ gitIdentityName: getOption('git_identity_name') ?? '',
182
+ gitIdentityEmail: getOption('git_identity_email') ?? '',
167
183
  dockerArch: await dockerArch(),
168
184
  // Only whether each token is set — the page renders a placeholder from that.
169
185
  manualTokensEnabled: getOption('manual_tokens_enabled') === '1',
@@ -182,6 +198,14 @@ export const routes: Record<string, MochiRouteValue> = {
182
198
  customEndpointSmallFastModel:
183
199
  getOption('custom_endpoint_small_fast_model') ?? DEFAULT_SMALL_FAST_MODEL,
184
200
  customEndpointModel: getOption('custom_endpoint_model') ?? DEFAULT_MODEL,
201
+ // Manual model override (standard subscription path): toggle + five blank-by-default
202
+ // model IDs — only the ones the user fills get injected, so no Bedrock-default seeding.
203
+ manualModelOverrideEnabled: getOption('manual_model_override_enabled') === '1',
204
+ manualOpusModel: getOption('manual_opus_model') ?? '',
205
+ manualSonnetModel: getOption('manual_sonnet_model') ?? '',
206
+ manualHaikuModel: getOption('manual_haiku_model') ?? '',
207
+ manualSmallFastModel: getOption('manual_small_fast_model') ?? '',
208
+ manualModel: getOption('manual_model') ?? '',
185
209
  hostEnvVarsEnabled: getOption('host_env_vars_enabled') === '1',
186
210
  hostEnvVarNames,
187
211
  hostEnvVarPresence: hostEnvVarPresence(hostEnvVarNames),
@@ -203,6 +227,32 @@ export const routes: Record<string, MochiRouteValue> = {
203
227
  return success({ enabled });
204
228
  },
205
229
 
230
+ // Turning the pet on with none chosen lands on a random sprite, so there's always one to adjust.
231
+ petToggle: ({ formData }) => {
232
+ const enabled = onChecked(formData, 'enabled');
233
+ if (!enabled) {
234
+ setOption('pet', '');
235
+ broadcastPet(null);
236
+ return success({ enabled: false });
237
+ }
238
+ const current = getOption('pet');
239
+ const name =
240
+ current && findAvatar(current)
241
+ ? current
242
+ : avatars[Math.floor(Math.random() * avatars.length)]!.name;
243
+ setOption('pet', name);
244
+ broadcastPet(name);
245
+ return success({ enabled: true, name });
246
+ },
247
+
248
+ petChoose: ({ formData }) => {
249
+ const name = str(formData, 'name');
250
+ if (!findAvatar(name)) return fail(400, { error: 'Unknown pet' });
251
+ setOption('pet', name);
252
+ broadcastPet(name);
253
+ return success({ name });
254
+ },
255
+
206
256
  // Unlike defaultImage, an empty value is valid — it means "copy everything".
207
257
  copyIgnorePatterns: ({ formData }) => {
208
258
  const patterns = str(formData, 'patterns');
@@ -210,6 +260,24 @@ export const routes: Record<string, MochiRouteValue> = {
210
260
  return success({ patterns });
211
261
  },
212
262
 
263
+ gitIdentityToggle: ({ formData }) => {
264
+ const enabled = onChecked(formData, 'enabled');
265
+ setOption('git_identity_enabled', enabled ? '1' : '0');
266
+ return success({ enabled });
267
+ },
268
+ // Both fields are required — the toggle governs whether the override applies, so a
269
+ // half-filled or empty identity is never a valid saved state.
270
+ gitIdentityOverride: ({ formData }) => {
271
+ const name = str(formData, 'name');
272
+ const email = str(formData, 'email');
273
+ if (!name || !email) {
274
+ return fail(400, { error: 'Both name and email are required.' });
275
+ }
276
+ setOption('git_identity_name', name);
277
+ setOption('git_identity_email', email);
278
+ return success({ name, email });
279
+ },
280
+
213
281
  // Tokens are stored plaintext in the options table and never sent back to the client.
214
282
  manualTokensToggle: ({ formData }) => {
215
283
  const enabled = onChecked(formData, 'enabled');
@@ -230,6 +298,8 @@ export const routes: Record<string, MochiRouteValue> = {
230
298
  customEndpointToggle: ({ formData }) => {
231
299
  const enabled = onChecked(formData, 'enabled');
232
300
  setOption('custom_endpoint_enabled', enabled ? '1' : '0');
301
+ // LiteLLM and the manual model override own the same env vars — never both.
302
+ if (enabled) setOption('manual_model_override_enabled', '0');
233
303
  return success({ enabled });
234
304
  },
235
305
  customBaseUrl: ({ formData }) => {
@@ -251,6 +321,22 @@ export const routes: Record<string, MochiRouteValue> = {
251
321
  return success({});
252
322
  },
253
323
 
324
+ manualModelToggle: ({ formData }) => {
325
+ const enabled = onChecked(formData, 'enabled');
326
+ setOption('manual_model_override_enabled', enabled ? '1' : '0');
327
+ // Reciprocal of customEndpointToggle — the two can't both drive model env vars.
328
+ if (enabled) setOption('custom_endpoint_enabled', '0');
329
+ return success({ enabled });
330
+ },
331
+ manualModels: ({ formData }) => {
332
+ setOption('manual_opus_model', str(formData, 'opusModel'));
333
+ setOption('manual_sonnet_model', str(formData, 'sonnetModel'));
334
+ setOption('manual_haiku_model', str(formData, 'haikuModel'));
335
+ setOption('manual_small_fast_model', str(formData, 'smallFastModel'));
336
+ setOption('manual_model', str(formData, 'defaultModel'));
337
+ return success({});
338
+ },
339
+
254
340
  // Only names are stored; a value is never persisted nor accepted from the client.
255
341
  hostEnvVarsToggle: ({ formData }) => {
256
342
  const enabled = onChecked(formData, 'enabled');
@@ -1 +0,0 @@
1
- import{Ua as a}from"/_mochi/client/chunk-qxwt25hn.js";export{a as registerComponent};
@@ -1,2 +0,0 @@
1
- import{a as $e,d as Ut,e as qe}from"/_mochi/client/chunk-0jtmkpx4.js";import{f as Ge,g as je,h as Xt,i as ft,o as Gt}from"/_mochi/client/chunk-gjjhya9m.js";import{p as ti,q as Je,r as Ee,t as ei,u as Ie,v as zt,w as He}from"/_mochi/client/chunk-5p31aqh0.js";import{x as Yt}from"/_mochi/client/chunk-597d17x0.js";import{y as q}from"/_mochi/client/chunk-04qv4w6w.js";import{B as l,Ba as gt,C as X,Ea as Pt,G as dt,H as ot,Ha as rt,Ja as Tt,Ka as Ze,Ma as U,N as se,Na as j,O as Se,Oa as Et,P,R as ee,S as h,Sa as Ye,U as n,Ua as ii,V as lt,W as Lt,X as d,Y as xt,Z as s,_ as $t,ba as A,ca as he,da as ue,ea as Wt,fa as Qe,ga as t,ja as Ue,ka as Dt,la as Q,ma as Bt,na as c,pa as st,qa as oe,ra as o,sa as Z,ta as N,ua as Xe,va as mt,ya as Oe}from"/_mochi/client/chunk-qxwt25hn.js";var Fe=!1;class xe extends Date{#t=h(super.getTime());#e=new Map;#i=he;constructor(...i){super(...i);if(!Fe)this.#a()}#a(){Fe=!0;var i=xe.prototype,e=Date.prototype,a=Object.getOwnPropertyNames(e);for(let r of a){if(r.startsWith("get")||r.startsWith("to")||r==="valueOf")i[r]=function(...v){if(v.length>0)return t(this.#t),e[r].apply(this,v);var p=this.#e.get(r);if(p===void 0){let S=he;ue(this.#i),p=P(()=>{return t(this.#t),e[r].apply(this,v)}),this.#e.set(r,p),ue(S)}return t(p)};if(r.startsWith("set"))i[r]=function(...v){var p=e[r].apply(this,v);return n(this.#t,e.getTime.call(this)),p}}}}var ri=["forEach","isDisjointFrom","isSubsetOf","isSupersetOf"],ni=["difference","intersection","symmetricDifference","union"],ke=!1;class Mt extends Set{#t=new Map;#e=h(0);#i=h(0);#a=Wt||-1;constructor(i){super();if(i){for(var e of i)super.add(e);this.#i.v=super.size}if(!ke)this.#n()}#r(i){return Wt===this.#a?h(i):ee(i)}#n(){ke=!0;var i=Mt.prototype,e=Set.prototype;for(let a of ri)i[a]=function(...r){return t(this.#e),e[a].apply(this,r)};for(let a of ni)i[a]=function(...r){t(this.#e);var v=e[a].apply(this,r);return new Mt(v)}}has(i){var e=super.has(i),a=this.#t,r=a.get(i);if(r===void 0){if(!e)return t(this.#e),!1;r=this.#r(!0),a.set(i,r)}return t(r),e}add(i){if(!super.has(i))super.add(i),n(this.#i,super.size),lt(this.#e);return this}delete(i){var e=super.delete(i),a=this.#t,r=a.get(i);if(r!==void 0)a.delete(i),n(r,!1);if(e)n(this.#i,super.size),lt(this.#e);return e}clear(){if(super.size===0)return;super.clear();var i=this.#t;for(var e of i.values())n(e,!1);i.clear(),n(this.#i,0),lt(this.#e)}keys(){return this.values()}values(){return t(this.#e),super.values()}entries(){return t(this.#e),super.entries()}[Symbol.iterator](){return this.keys()}get size(){return t(this.#i)}}class Re extends Map{#t=new Map;#e=h(0);#i=h(0);#a=Wt||-1;constructor(i){super();if(i){for(var[e,a]of i)super.set(e,a);this.#i.v=super.size}}#r(i){return Wt===this.#a?h(i):ee(i)}has(i){var e=this.#t,a=e.get(i);if(a===void 0)if(super.has(i))a=this.#r(0),e.set(i,a);else return t(this.#e),!1;return t(a),!0}forEach(i,e){this.#n(),super.forEach(i,e)}get(i){var e=this.#t,a=e.get(i);if(a===void 0)if(super.has(i))a=this.#r(0),e.set(i,a);else{t(this.#e);return}return t(a),super.get(i)}set(i,e){var a=this.#t,r=a.get(i),v=super.get(i),p=super.set(i,e),S=this.#e;if(r===void 0)r=this.#r(0),a.set(i,r),n(this.#i,super.size),lt(S);else if(v!==e){lt(r);var C=S.reactions===null?null:new Set(S.reactions),w=C===null||!r.reactions?.every((R)=>C.has(R));if(w)lt(S)}return p}delete(i){var e=this.#t,a=e.get(i),r=super.delete(i);if(a!==void 0)e.delete(i),n(a,-1);if(r)n(this.#i,super.size),lt(this.#e);return r}clear(){if(super.size===0)return;super.clear();var i=this.#t;n(this.#i,0);for(var e of i.values())n(e,-1);lt(this.#e),i.clear()}#n(){t(this.#e);var i=this.#t;if(this.#i.v!==i.size){for(var e of super.keys())if(!i.has(e)){var a=this.#r(0);i.set(e,a)}}for([,a]of this.#t)t(a)}keys(){return t(this.#e),super.keys()}values(){return this.#n(),super.values()}entries(){return this.#n(),super.entries()}[Symbol.iterator](){return this.entries()}get size(){return t(this.#i),super.size}}var ie=Symbol("replace");class ae extends URLSearchParams{#t=h(0);#e=_e();#i=!1;#a(){if(!this.#e||this.#i)return;this.#i=!0;let i=this.toString();this.#e.search=i&&`?${i}`,this.#i=!1}[ie](i){if(this.#i)return;if(i.toString()===super.toString())return;this.#i=!0;for(let e of[...super.keys()])super.delete(e);for(let[e,a]of i)super.append(e,a);lt(this.#t),this.#i=!1}append(i,e){super.append(i,e),this.#a(),lt(this.#t)}delete(i,e){var a=super.has(i,e);if(super.delete(i,e),a)this.#a(),lt(this.#t)}get(i){return t(this.#t),super.get(i)}getAll(i){return t(this.#t),super.getAll(i)}has(i,e){return t(this.#t),super.has(i,e)}keys(){return t(this.#t),super.keys()}forEach(i,e){t(this.#t),super.forEach(i,e)}set(i,e){var a=super.getAll(i);super.set(i,e);var r=super.getAll(i);if(a.length!==r.length||a.some((v,p)=>v!==r[p]))this.#a(),lt(this.#t)}sort(){super.sort(),this.#a(),lt(this.#t)}toString(){return t(this.#t),super.toString()}values(){return t(this.#t),super.values()}entries(){return t(this.#t),super.entries()}[Symbol.iterator](){return this.entries()}get size(){return t(this.#t),super.size}}var be=null;function _e(){return be}class ye extends URL{#t=h(super.protocol);#e=h(super.username);#i=h(super.password);#a=h(super.hostname);#r=h(super.port);#n=h(super.pathname);#l=h(super.hash);#d=h(super.search);#o;constructor(i,e){i=new URL(i,e);super(i);be=this,this.#o=new ae(i.searchParams),be=null}get hash(){return t(this.#l)}set hash(i){super.hash=i,n(this.#l,super.hash)}get host(){return t(this.#a),t(this.#r),super.host}set host(i){super.host=i,n(this.#a,super.hostname),n(this.#r,super.port)}get hostname(){return t(this.#a)}set hostname(i){super.hostname=i,n(this.#a,super.hostname)}get href(){return t(this.#t),t(this.#e),t(this.#i),t(this.#a),t(this.#r),t(this.#n),t(this.#l),t(this.#d),super.href}set href(i){super.href=i,n(this.#t,super.protocol),n(this.#e,super.username),n(this.#i,super.password),n(this.#a,super.hostname),n(this.#r,super.port),n(this.#n,super.pathname),n(this.#l,super.hash),n(this.#d,super.search),this.#o[ie](super.searchParams)}get password(){return t(this.#i)}set password(i){super.password=i,n(this.#i,super.password)}get pathname(){return t(this.#n)}set pathname(i){super.pathname=i,n(this.#n,super.pathname)}get port(){return t(this.#r)}set port(i){super.port=i,n(this.#r,super.port)}get protocol(){return t(this.#t)}set protocol(i){super.protocol=i,n(this.#t,super.protocol)}get search(){return t(this.#d)}set search(i){super.search=i,n(this.#d,super.search),this.#o[ie](super.searchParams)}get username(){return t(this.#e)}set username(i){super.username=i,n(this.#e,super.username)}get origin(){return t(this.#t),t(this.#a),t(this.#r),super.origin}get searchParams(){return this.#o}toString(){return this.href}toJSON(){return this.href}}class We{#t;#e;constructor(i,e){this.#t=i,this.#e=Se(e)}get current(){return this.#e(),this.#t()}}var Ke=/^[A-Za-z0-9._-]+$/;function di(i){let e=i.trim();if(!e)return null;let a,r,v=e.match(/^[A-Za-z0-9._-]+@([A-Za-z0-9.-]+):(.+)$/);if(v)a=v[1],r=v[2];else if(/^[a-z][a-z0-9+.-]*:\/\//i.test(e)){let w;try{w=new URL(e)}catch{return null}if(w.protocol!=="http:"&&w.protocol!=="https:"&&w.protocol!=="ssh:")return null;a=w.hostname,r=w.pathname}else{let w=e.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 p=r.replace(/\.git$/i,"").split("/").filter(Boolean),[S,C]=p;if(!S||!C||!Ke.test(S)||!Ke.test(C))return null;return{host:a,owner:S,repo:C,cloneUrl:`https://${a}/${S}/${C}.git`}}function we(i){return di(i)!==null}var oi=new Set(["$$slots","$$events","$$legacy"]);function re(i,e){let a=U(e,oi),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"}]];q(i,j({name:"folder-clock"},()=>a,{get iconNode(){return r}}))}var si=new Set(["$$slots","$$events","$$legacy"]);function Kt(i,e){let a=U(e,si),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"}]];q(i,j({name:"git-branch"},()=>a,{get iconNode(){return r}}))}var fi=new Set(["$$slots","$$events","$$legacy"]);function ne(i,e){let a=U(e,fi),r=[["path",{d:"m5 12 7-7 7 7"}],["path",{d:"M12 19V5"}]];q(i,j({name:"arrow-up"},()=>a,{get iconNode(){return r}}))}var ci=new Set(["$$slots","$$events","$$legacy"]);function le(i,e){let a=U(e,ci),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"}]];q(i,j({name:"folder"},()=>a,{get iconNode(){return r}}))}var mi=new Set(["$$slots","$$events","$$legacy"]);function Qt(i,e){let a=U(e,mi),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"}]];q(i,j({name:"triangle-alert"},()=>a,{get iconNode(){return r}}))}var $i=c('<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>'),gi=c('<button class="recent-toggle svelte-oq97c4"> </button>'),vi=c('<div class="recent svelte-oq97c4"><div class="recent-label svelte-oq97c4">Recent</div> <!> <!></div>'),pi=c('<div class="muted svelte-oq97c4">Loading…</div>'),hi=c('<div class="muted err svelte-oq97c4"> </div>'),ui=c('<div class="row svelte-oq97c4"><button class="nav svelte-oq97c4"><span class="icon svelte-oq97c4"><!></span> <span class="ename svelte-oq97c4">..</span></button></div>'),xi=c('<div class="muted svelte-oq97c4"> </div>'),bi=c('<span class="badge svelte-oq97c4">devcontainer</span>'),Si=c('<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>'),wi=c("<!> <!> <!>",1),Ii=c(`<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>`),Ni=c('<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 Ne(i,e){dt(e,!0);let a=h(null),r=h(!0),v=h(null),p=h(""),S=h(null),C=h(Lt([])),w=h(!1),R=h(""),z=h(""),V=P(()=>we(t(R)));function F(){if(!t(V))return;e.onpick(t(R).trim(),{branch:t(z).trim()||void 0})}let $=P(()=>t(a)?t(a).entries.filter((g)=>g.name.toLowerCase().includes(t(p).trim().toLowerCase())):[]),E=P(()=>t(w)?t(C):t(C).slice(0,5));async function u(){try{let g=await Ie("/api/history");n(C,g.history??[],!0)}catch{}}async function D(g){let K=t(C);n(C,t(C).filter((ut)=>ut.source_path!==g),!0);try{await He("/api/history",{sourcePath:g})}catch{n(C,K,!0)}}async function M(g=null){n(r,!0),n(v,null),n(p,"");try{let K=g?`/api/browse?path=${encodeURIComponent(g)}`:"/api/browse";n(a,await Ie(K,void 0,"Could not list folder"),!0)}catch(K){n(v,K.message,!0)}finally{n(r,!1)}await Qe(),t(S)?.focus()}$t(()=>{M(),u()});var k=Ni(),T=d(k),W=d(T),Y=s(d(W),2),O=d(Y);Yt(O,{size:16}),l(Y),l(W);var et=s(W,2),St=s(d(et),2),wt=d(St);Pt(wt);var bt=s(wt,2);Pt(bt);var I=s(bt,2);l(St),l(et);var L=s(et,2),H=d(L),f=d(H,!0);l(H),l(L);var x=s(L,2);{var B=(g)=>{var K=vi(),ut=s(d(K),2);mt(ut,17,()=>t(E),(It)=>It.source_path,(It,ct)=>{var tt=$i(),y=d(tt),at=d(y),Nt=d(at);{var Rt=(Ct)=>{Kt(Ct,{size:16})},_t=P(()=>we(t(ct).source_path)),Ot=(Ct)=>{re(Ct,{size:16})};N(Nt,(Ct)=>{if(t(_t))Ct(Rt);else Ct(Ot,-1)})}l(at);var jt=s(at,2),Vt=d(jt),ve=d(Vt,!0);l(Vt);var qt=s(Vt,2),pe=d(qt,!0);l(qt),l(jt),l(y);var yt=s(y,2),Ft=d(yt);Yt(Ft,{size:14}),l(yt),l(tt),A(()=>{Z(ve,t(ct).name),Z(pe,t(ct).source_path),rt(yt,"aria-label",`Remove ${t(ct).name??""} from history`)}),Q("click",y,()=>e.onpick(t(ct).source_path)),Q("click",yt,(Ct)=>{Ct.stopPropagation(),D(t(ct).source_path)}),o(It,tt)});var Jt=s(ut,2);{var kt=(It)=>{var ct=gi(),tt=d(ct,!0);l(ct),A(()=>Z(tt,t(w)?"Show fewer":`Show all (${t(C).length})`)),Q("click",ct,()=>n(w,!t(w))),o(It,ct)};N(Jt,(It)=>{if(t(C).length>5)It(kt)})}l(K),o(g,K)};N(x,(g)=>{if(t(C).length>0)g(B)})}var J=s(x,2),nt=d(J);Pt(nt),Ze(nt,(g)=>n(S,g),()=>t(S)),l(J);var m=s(J,2),b=d(m);{var it=(g)=>{var K=pi();o(g,K)},vt=(g)=>{var K=hi(),ut=d(K,!0);l(K),A(()=>Z(ut,t(v))),o(g,K)},pt=(g)=>{var K=wi(),ut=xt(K);{var Jt=(tt)=>{var y=ui(),at=d(y),Nt=d(at),Rt=d(Nt);ne(Rt,{size:16}),l(Nt),X(2),l(at),l(y),Q("click",at,()=>M(t(a)?.parent??null)),o(tt,y)};N(ut,(tt)=>{if(t(a).parent&&!t(p))tt(Jt)})}var kt=s(ut,2);{var It=(tt)=>{var y=xi(),at=d(y,!0);l(y),A(()=>Z(at,t(p)?"No folders match.":"No subfolders here.")),o(tt,y)};N(kt,(tt)=>{if(t($).length===0)tt(It)})}var ct=s(kt,2);mt(ct,19,()=>t($),(tt)=>tt.path,(tt,y,at)=>{var Nt=Si();let Rt;var _t=d(Nt),Ot=d(_t),jt=d(Ot);le(jt,{size:16}),l(Ot);var Vt=s(Ot,2),ve=d(Vt,!0);l(Vt);var qt=s(Vt,2);{var pe=(Ft)=>{var Ct=bi();o(Ft,Ct)};N(qt,(Ft)=>{if(t(y).hasDevcontainer)Ft(pe)})}l(_t);var yt=s(_t,2);l(Nt),A((Ft)=>{Rt=gt(Nt,1,"row svelte-oq97c4",null,Rt,Ft),Z(ve,t(y).name)},[()=>({"first-match":t(p).trim()&&t(at)===0})]),Q("click",_t,()=>M(t(y).path)),Q("click",yt,()=>e.onpick(t(y).path)),o(tt,Nt)}),o(g,K)};N(b,(g)=>{if(t(r))g(it);else if(t(v))g(vt,1);else if(t(a))g(pt,2)})}l(m);var _=s(m,2);{var ht=(g)=>{var K=Ii(),ut=d(K);Qt(ut,{size:15}),X(2),l(K),o(g,K)};N(_,(g)=>{if(t(a)&&!t(a).hasDevcontainer)g(ht)})}var At=s(_,2),Ht=s(d(At),2);l(At),l(T),l(k),A(()=>{I.disabled=!t(V),Z(f,t(a)?.path??"…"),Ht.disabled=!t(a)}),Q("click",k,function(...g){e.onclose?.apply(this,g)}),Q("keydown",k,(g)=>g.key==="Escape"&&e.onclose()),Q("click",T,(g)=>g.stopPropagation()),Q("keydown",T,()=>{}),Q("click",Y,function(...g){e.onclose?.apply(this,g)}),Q("keydown",wt,(g)=>{if(g.key==="Enter")g.preventDefault(),F()}),Tt(wt,()=>t(R),(g)=>n(R,g)),Q("keydown",bt,(g)=>{if(g.key==="Enter")g.preventDefault(),F()}),Tt(bt,()=>t(z),(g)=>n(z,g)),Q("click",I,F),Q("keydown",nt,(g)=>{let K=t($)[0];if(g.key==="Enter"&&K)g.preventDefault(),M(K.path)}),Tt(nt,()=>t(p),(g)=>n(p,g)),Q("click",Ht,()=>t(a)&&e.onpick(t(a).path)),o(i,k),ot()}Bt(["click","keydown"]);var Ci=c('<div class="branch svelte-jv8lut" title="Branch checked out in the container"><!><span class="svelte-jv8lut"> </span></div>');function Ce(i,e){var a=Ci(),r=d(a);Kt(r,{size:12});var v=s(r),p=d(v,!0);l(v),l(a),A(()=>Z(p,e.branch)),o(i,a)}var Ei=new Set(["$$slots","$$events","$$legacy"]);function de(i,e){let a=U(e,Ei),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"}]];q(i,j({name:"cable"},()=>a,{get iconNode(){return r}}))}var Mi=c('<a target="_blank" rel="noopener"> </a>'),Li=c('<div class="fports svelte-1uaz383" title="Forwarded ports — click to open"><!> <span class="list svelte-1uaz383"></span></div>');function Me(i,e){dt(e,!0);var a=oe(),r=xt(a);{var v=(p)=>{var S=Li(),C=d(S);de(C,{size:12});var w=s(C,2);mt(w,21,()=>e.ports,(R)=>R.container_port,(R,z)=>{var V=Mi();let F;var $=d(V,!0);l(V),A((E,u)=>{F=gt(V,1,"fport svelte-1uaz383",null,F,{open:t(z).open}),rt(V,"href",E),rt(V,"title",u),Z($,t(z).container_port)},[()=>Ee(t(z).host_port),()=>`container :${t(z).container_port} → ${Ee(t(z).host_port)} ${t(z).open?"(open)":"(not published yet)"}`]),o(R,V)}),l(w),l(S),o(p,S)};N(r,(p)=>{if(e.ports.length)p(v)})}o(i,a),ot()}var Pi=c('<input class="name-edit svelte-13338y7"/>'),Ti=c('<button class="name svelte-13338y7" title="Click to rename"> </button>'),Bi=c("<span></span>"),Di=c('<div class="card-error svelte-13338y7"> </div>'),zi=c("<!> <!>",1),Ai=c('<li class="card panel svelte-13338y7"><div class="card-head svelte-13338y7"><!> <!> <!> <!></div> <div class="path svelte-13338y7"> </div> <!> <!> <!> <div class="actions svelte-13338y7"><!> <!> <!> <!></div></li>');function Le(i,e){dt(e,!0);let a=Et(e,"editingName",15),r=P(()=>e.instance.status==="running"||e.instance.status==="stopped"||e.instance.status==="error"&&!!e.instance.container_id);var v=Ai(),p=d(v),S=d(p);Gt(S,{get id(){return e.instance.id},get name(){return e.instance.name},interactive:!0});var C=s(S,2);{var w=(f)=>{var x=Pi();Pt(x),se(x,!0),Dt("focus",x,(B)=>B.currentTarget.select()),Dt("blur",x,function(...B){e.oncommitrename?.apply(this,B)}),Q("keydown",x,(B)=>{if(B.key==="Enter")B.currentTarget.blur();else if(B.key==="Escape")e.oncancelrename()}),Tt(x,a),o(f,x)},R=(f)=>{var x=Ti(),B=d(x,!0);l(x),A(()=>Z(B,e.instance.name)),Q("click",x,function(...J){e.onstartrename?.apply(this,J)}),o(f,x)};N(C,(f)=>{if(e.editing)f(w);else f(R,-1)})}var z=s(C,2);{var V=(f)=>{var x=Bi();let B;A(()=>{B=gt(x,1,"attn svelte-13338y7",null,B,{"attn-done":e.instance.attention==="done","attn-waiting":e.instance.attention==="waiting"}),rt(x,"title",e.instance.attention==="waiting"?"Claude is waiting for input":"Claude finished"),rt(x,"aria-label",e.instance.attention==="waiting"?"Claude is waiting for input":"Claude finished")}),o(f,x)};N(z,(f)=>{if(e.instance.attention)f(V)})}var F=s(z,2);Je(F,{get status(){return e.instance.status}}),l(p);var $=s(p,2),E=d($,!0);l($);var u=s($,2);{var D=(f)=>{Me(f,{get ports(){return e.instance.forwarded_ports}})};N(u,(f)=>{if(e.instance.status==="running")f(D)})}var M=s(u,2);{var k=(f)=>{Ce(f,{get branch(){return e.instance.git_branch}})};N(M,(f)=>{if(e.instance.git_branch)f(k)})}var T=s(M,2);{var W=(f)=>{var x=Di(),B=d(x,!0);l(x),A(()=>Z(B,e.instance.error)),o(f,x)};N(T,(f)=>{if(e.instance.status==="error"&&e.instance.error)f(W)})}var Y=s(T,2),O=d(Y);{var et=(f)=>{var x=zi(),B=xt(x);{let nt=P(()=>`/ide/${e.instance.id}`);ft(B,{variant:"primary",size:"sm",get href(){return t(nt)},children:(m,b)=>{X();var it=st("Open IDE");o(m,it)},$$slots:{default:!0}})}var J=s(B,2);ft(J,{size:"sm",onclick:()=>e.onact("stop"),children:(nt,m)=>{X();var b=st("Stop");o(nt,b)},$$slots:{default:!0}}),o(f,x)},St=(f)=>{ft(f,{size:"sm",onclick:()=>e.onact("start"),children:(x,B)=>{X();var J=st("Start");o(x,J)},$$slots:{default:!0}})},wt=(f)=>{{let x=P(()=>`/instances/${e.instance.id}`);ft(f,{size:"sm",get href(){return t(x)},target:"_blank",rel:"noopener noreferrer",children:(B,J)=>{X();var nt=st("View logs");o(B,nt)},$$slots:{default:!0}})}};N(O,(f)=>{if(e.instance.status==="running")f(et);else if(e.instance.status==="stopped"||e.instance.status==="error"&&e.instance.container_id)f(St,1);else if(e.instance.status==="creating")f(wt,2)})}var bt=s(O,2);{var I=(f)=>{ft(f,{size:"sm",title:"Recreate the container and re-run setup (credentials, hooks, port forwards)",onclick:()=>e.onact("rebuild"),children:(x,B)=>{X();var J=st("Rebuild");o(x,J)},$$slots:{default:!0}})};N(bt,(f)=>{if(t(r))f(I)})}var L=s(bt,2);{let f=P(()=>`/instances/${e.instance.id}`);ft(L,{size:"sm",ghost:!0,get href(){return t(f)},target:"_blank",rel:"noopener noreferrer",children:(x,B)=>{X();var J=st("Details");o(x,J)},$$slots:{default:!0}})}var H=s(L,2);ft(H,{variant:"danger",size:"sm",onclick:()=>e.onact("delete"),children:(f,x)=>{X();var B=st("Delete");o(f,B)},$$slots:{default:!0}}),l(Y),l(v),A(()=>{rt($,"title",e.instance.source_path),Z(E,e.instance.source_path)}),o(i,v),ot()}Bt(["keydown","click"]);var Vi=new Set(["$$slots","$$events","$$legacy"]);function fe(i,e){let a=U(e,Vi),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"}]];q(i,j({name:"component"},()=>a,{get iconNode(){return r}}))}var Fi=new Set(["$$slots","$$events","$$legacy"]);function ce(i,e){let a=U(e,Fi),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"}]];q(i,j({name:"package"},()=>a,{get iconNode(){return r}}))}var ki=c('<a class="brand svelte-94cd8h" href="/"><span class="logo svelte-94cd8h"><!></span><span>Codebay</span><span class="tagline svelte-94cd8h">devcontainer manager</span></a>');function Pe(i){var e=ki(),a=d(e),r=d(a);ce(r,{size:22}),l(a),X(2),l(e),o(i,e)}var Ri=new Set(["$$slots","$$events","$$legacy"]);function Zt(i,e){let a=U(e,Ri),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"}]];q(i,j({name:"settings"},()=>a,{get iconNode(){return r}}))}var _i=c('<a class="cog svelte-1e745g8" href="/settings" aria-label="Settings" title="Settings"><!></a>');function Te(i){var e=_i(),a=d(e);Zt(a,{size:16}),l(e),o(i,e)}var yi=new Set(["$$slots","$$events","$$legacy"]);function me(i,e){let a=U(e,yi),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"}]];q(i,j({name:"link"},()=>a,{get iconNode(){return r}}))}var Wi=c('<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>'),Ki=c('<div class="cred-dropdown panel svelte-vongf9" role="menu"></div>'),Qi=c('<div class="cred-menu svelte-vongf9"><button aria-haspopup="menu" aria-label="Credentials" title="Credentials"><!></button> <!></div>');function Be(i,e){dt(e,!0);let a=h(!1),r=P(()=>e.auth.filter(($)=>$.available).length),v=P(()=>t(r)===e.auth.length?"ok":t(r)===0?"error":"warn"),p={ok:me,warn:Qt,error:Yt},S=P(()=>p[t(v)]);function C($){if($.available)Xt.success(`${$.label} credentials come from ${$.source}.`);else{let E=$.hint?` — ${$.hint}`:"";Xt.error(`No ${$.label} credentials found${E}.`)}}$t(()=>{if(!t(a))return;let $=(u)=>{if(!u.target?.closest(".cred-menu"))n(a,!1)},E=(u)=>{if(u.key==="Escape")n(a,!1)};return window.addEventListener("click",$),window.addEventListener("keydown",E),()=>{window.removeEventListener("click",$),window.removeEventListener("keydown",E)}});var w=Qi(),R=d(w),z=d(R);Oe(z,()=>t(S),($,E)=>{E($,{size:16})}),l(R);var V=s(R,2);{var F=($)=>{var E=Ki();mt(E,21,()=>e.auth,(u)=>u.id,(u,D)=>{var M=Wi(),k=d(M),T=s(k,2),W=d(T,!0);l(T);var Y=s(T,2),O=d(Y,!0);l(Y),l(M),A(()=>{rt(M,"title",t(D).available?`Credentials from ${t(D).source}, copied into each new instance.`:`No credentials found on this computer${t(D).hint?` — ${t(D).hint}`:""}.`),gt(k,1,`dot ${t(D).available?"on":"off"}`,"svelte-vongf9"),Z(W,t(D).label),Z(O,t(D).available?"Authorized":"Not found")}),Q("click",M,()=>C(t(D))),o(u,M)}),l(E),o($,E)};N(V,($)=>{if(t(a))$(F)})}l(w),A(()=>{gt(R,1,`cred ${t(v)??""}`,"svelte-vongf9"),rt(R,"aria-expanded",t(a))}),Q("click",R,()=>n(a,!t(a))),o(i,w),ot()}Bt(["click"]);var Zi=c('<header class="topbar svelte-1h259us"><!> <div class="topbar-actions svelte-1h259us"><!> <!> <!> <!> <!></div></header>');function De(i,e){let a=Et(e,"canDelete",3,!1),r=Et(e,"ready",3,!0),v=Et(e,"creating",3,!1);var p=Zi(),S=d(p);Pe(S,{});var C=s(S,2),w=d(C);{var R=(E)=>{ft(E,{variant:"default",size:"sm",get icon(){return fe},href:"/debug",children:(u,D)=>{X();var M=st("Debug");o(u,M)},$$slots:{default:!0}})};N(w,(E)=>{if(Ye)E(R)})}var z=s(w,2);Te(z,{});var V=s(z,2);Be(V,{get auth(){return e.auth}});var F=s(V,2);{let E=P(()=>!a());ft(F,{variant:"danger",size:"sm",get onclick(){return e.onDeleteAll},get disabled(){return t(E)},children:(u,D)=>{X();var M=st("Delete all");o(u,M)},$$slots:{default:!0}})}var $=s(F,2);{let E=P(()=>v()?void 0:$e),u=P(()=>!r()||v());ft($,{variant:"primary",get icon(){return t(E)},get onclick(){return e.onNew},get disabled(){return t(u)},children:(D,M)=>{X();var k=st();A(()=>Z(k,v()?"Creating…":"New instance")),o(D,k)},$$slots:{default:!0}})}l(C),l(p),o(i,p)}var Hi=c("<span>Docker daemon is not reachable.</span>"),Ji=c("<span>The devcontainer CLI is not available.</span>"),Oi=c('<div class="banner error svelte-146pixd"><strong>Setup needed.</strong> <!> <!></div>'),Yi=c('<div class="banner error svelte-146pixd"><strong>Error.</strong> <span> </span></div>'),Gi=c('<div class="empty svelte-146pixd"><p class="empty-sub svelte-146pixd">Loading…</p></div>'),Xi=c('<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>'),Ui=c('<ul class="grid svelte-146pixd"></ul>'),ji=c('<!> <main class="stage svelte-146pixd"><!> <!> <!></main> <!>',1);function ze(i,e){dt(e,!0);let a=h(!1),r=h(!1),v=h(null),p=h(null),S=h(""),C=P(()=>e.preflight.docker&&e.preflight.cli);async function w(I,L){n(a,!1),n(r,!0),n(v,null);try{await zt("/api/instances",{sourcePath:I,branch:L?.branch},"Failed to create instance")}catch(H){n(v,H.message,!0)}finally{n(r,!1)}}async function R(I,L){if(n(v,null),L==="delete"&&!confirm("Delete this instance and its copied files?"))return;if(L==="rebuild"&&!confirm("Recreate this container and re-run setup? The workspace is kept."))return;try{await zt(`/api/instances/${I}/${L}`,void 0,`Failed to ${L}`)}catch(H){n(v,H.message,!0)}}function z(I){n(p,I.id,!0),n(S,I.name,!0)}function V(){n(p,null),n(S,"")}async function F(I){let L=t(S).trim(),H=e.instances.find((f)=>f.id===I)?.name;if(!L||L===H){V();return}V(),n(v,null);try{await zt(`/api/instances/${I}/rename`,{name:L},"Failed to rename")}catch(f){n(v,f.message,!0)}}async function $(){if(n(v,null),!confirm(`Delete all ${e.instances.length} instances and their copied files?`))return;try{await zt("/api/instances/delete-all",void 0,"Failed to delete all")}catch(I){n(v,I.message,!0)}}var E=ji(),u=xt(E);{let I=P(()=>e.instances.length>0);De(u,{get auth(){return e.preflight.auth},get canDelete(){return t(I)},get ready(){return t(C)},get creating(){return t(r)},onNew:()=>n(a,!0),onDeleteAll:$})}var D=s(u,2),M=d(D);{var k=(I)=>{var L=Oi(),H=s(d(L),2);{var f=(J)=>{var nt=Hi();o(J,nt)};N(H,(J)=>{if(!e.preflight.docker)J(f)})}var x=s(H,2);{var B=(J)=>{var nt=Ji();o(J,nt)};N(x,(J)=>{if(!e.preflight.cli)J(B)})}l(L),o(I,L)};N(M,(I)=>{if(!t(C))I(k)})}var T=s(M,2);{var W=(I)=>{var L=Yi(),H=s(d(L),2),f=d(H,!0);l(H),l(L),A(()=>Z(f,t(v))),o(I,L)};N(T,(I)=>{if(t(v))I(W)})}var Y=s(T,2);{var O=(I)=>{var L=Gi();o(I,L)},et=(I)=>{var L=Xi(),H=s(d(L),4);{let f=P(()=>!t(C));ft(H,{variant:"primary",get icon(){return $e},onclick:()=>n(a,!0),get disabled(){return t(f)},children:(x,B)=>{X();var J=st("New instance");o(x,J)},$$slots:{default:!0}})}l(L),o(I,L)},St=(I)=>{var L=Ui();mt(L,21,()=>e.instances,(H)=>H.id,(H,f)=>{{let x=P(()=>t(p)===t(f).id);Le(H,{get instance(){return t(f)},get editing(){return t(x)},onact:(B)=>R(t(f).id,B),onstartrename:()=>z(t(f)),oncommitrename:()=>F(t(f).id),oncancelrename:V,get editingName(){return t(S)},set editingName(B){n(S,B,!0)}})}}),l(L),o(I,L)};N(Y,(I)=>{if(!e.loaded)I(O);else if(e.instances.length===0)I(et,1);else I(St,-1)})}l(D);var wt=s(D,2);{var bt=(I)=>{Ne(I,{onpick:w,onclose:()=>n(a,!1)})};N(wt,(I)=>{if(t(a))I(bt)})}o(i,E),ot()}var qi=c('<div class="tab-label editing svelte-r39acv"><!> <input class="tab-name-edit svelte-r39acv"/></div>'),ta=c('<button type="button" class="tab-label svelte-r39acv"><!> <span class="tab-name svelte-r39acv"> </span></button>'),ea=c("<div><!></div>"),ia=c('<nav class="tabs svelte-r39acv"></nav>'),aa=c('<!> <a class="cog svelte-r39acv" href="/settings" title="Settings" aria-label="Settings"><!></a>',1);function Ae(i,e){dt(e,!0);let a=Et(e,"editingName",15);Ge(i,{children:(r,v)=>{var p=aa(),S=xt(p);{var C=(z)=>{var V=ia();mt(V,21,()=>e.running,(F)=>F.id,(F,$)=>{var E=ea();let u;var D=d(E);{var M=(T)=>{var W=qi(),Y=d(W);Gt(Y,{get id(){return t($).id},get name(){return t($).name},scale:4});var O=s(Y,2);Pt(O),se(O,!0),l(W),Dt("focus",O,(et)=>et.currentTarget.select()),Dt("blur",O,()=>e.oncommitrename(t($).id)),Q("keydown",O,(et)=>{if(et.key==="Enter")et.currentTarget.blur();else if(et.key==="Escape")e.oncancelrename()}),Tt(O,a),o(T,W)},k=(T)=>{var W=ta(),Y=d(W);Gt(Y,{get id(){return t($).id},get name(){return t($).name},scale:4});var O=s(Y,2),et=d(O,!0);l(O),l(W),A(()=>{rt(W,"title",t($).name),Z(et,t($).name)}),Q("click",W,()=>e.onselect(t($).id)),Q("dblclick",W,()=>e.onstartrename(t($))),o(T,W)};N(D,(T)=>{if(e.editingId===t($).id)T(M);else T(k,-1)})}l(E),A(()=>u=gt(E,1,"tab svelte-r39acv",null,u,{active:t($).id===e.active,"attn-done":t($).id!==e.active&&e.attention[t($).id]==="done","attn-waiting":t($).id!==e.active&&e.attention[t($).id]==="waiting"})),o(F,E)}),l(V),o(z,V)};N(S,(z)=>{if(e.running.length>0)z(C)})}var w=s(S,2),R=d(w);Zt(R,{size:18}),l(w),o(r,p)},$$slots:{default:!0}}),ot()}Bt(["keydown","click","dblclick"]);var ra=c('<div class="row svelte-w5e143"> </div>'),na=c('<div class="stalled svelte-w5e143"><p class="svelte-w5e143">Waiting for code-server to answer inside the container.</p> <!></div>'),la=c('<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 ge(i,e){dt(e,!0);let a=Et(e,"speed",3,1),r=h(!1);$t(()=>{if(e.stalledAfterMs===void 0)return;let u=setTimeout(()=>n(r,!0),e.stalledAfterMs);return()=>clearTimeout(u)});let v=3,p=22,S=140,C=7,w=P(()=>Math.max(20,S/a())),z=h(Lt((()=>Array.from({length:v},()=>Array.from({length:p},()=>Math.random()<0.5?0:1)))()));$t(()=>{if(window.matchMedia?.("(prefers-reduced-motion: reduce)").matches)return;let u=setInterval(()=>{let D=t(z).map((M)=>M.slice());for(let M=0;M<C;M++){let k=D[Math.floor(Math.random()*v)],T=Math.floor(Math.random()*p);k[T]=k[T]?0:1}n(z,D,!0)},t(w));return()=>clearInterval(u)});var V=la(),F=d(V);mt(F,21,()=>t(z),Xe,(u,D)=>{var M=ra(),k=d(M,!0);l(M),A((T)=>Z(k,T),[()=>t(D).join("")]),o(u,M)}),l(F);var $=s(F,4);{var E=(u)=>{var D=na(),M=s(d(D),2);{var k=(T)=>{ft(T,{size:"sm",get onclick(){return e.onoverride},children:(W,Y)=>{X();var O=st("Open anyway");o(W,O)},$$slots:{default:!0}})};N(M,(T)=>{if(e.onoverride)T(k)})}l(D),o(u,D)};N($,(u)=>{if(t(r))u(E)})}l(V),o(i,V),ot()}var da=c('<iframe class="svelte-1duc7gd"></iframe>'),oa=c("<div><!> <!></div>"),sa=c('<div class="empty svelte-1duc7gd">No running instances.</div>'),fa=c("<div><!> <div><!> <!></div></div> <!>",1);function Ve(i,e){dt(e,!0);let a=h(Lt(e.snapshot)),r=h(Lt(e.preflight)),v=h(e.snapshot.length>0),p=P(()=>t(a).filter((m)=>m.status==="running")),S=h(Lt(Object.fromEntries(e.snapshot.map((m)=>[m.id,m.attention])))),C=h(null),w=h("");function R(m){n(C,m.id,!0),n(w,m.name,!0)}function z(){n(C,null),n(w,"")}async function V(m){let b=t(w).trim(),it=t(a).find((vt)=>vt.id===m)?.name;if(!b||b===it){z();return}z();try{await zt(`/api/instances/${m}/rename`,{name:b},"Failed to rename")}catch(vt){Xt.error(vt.message)}}let F=h(Lt(e.initialPath)),$=P(()=>t(F).startsWith("/ide")),E=P(()=>t(F).startsWith("/ide/")?t(F).slice(5):""),u=P(()=>t($)?t(p).some((m)=>m.id===t(E))?t(E):t(p)[0]?.id??"":"");function D(m){if(m===t(F))return;history.pushState({},"",m),n(F,m,!0)}$t(()=>{function m(b){if(b.defaultPrevented||b.button!==0||b.metaKey||b.ctrlKey||b.shiftKey||b.altKey)return;let it=b.target?.closest?.("a");if(!it)return;let vt=it.getAttribute("href");if(!vt||it.target==="_blank"||it.hasAttribute("download"))return;let pt=new URL(vt,location.href);if(pt.origin!==location.origin)return;if(pt.pathname==="/"||pt.pathname.startsWith("/ide/"))b.preventDefault(),D(pt.pathname)}return document.addEventListener("click",m),()=>document.removeEventListener("click",m)}),$t(()=>{function m(){n(F,location.pathname,!0)}return window.addEventListener("popstate",m),()=>window.removeEventListener("popstate",m)});let M=new Mt;$t(()=>{if(t(u))M.add(t(u))});let k=new Mt,T=new Mt,W=new Mt,Y=(m)=>T.has(m)||W.has(m),O=1e4;$t(()=>{let m=t(p).find((b)=>b.id===t(u));document.title=t($)&&m?`${m.name} — Codebay`:"Codebay"}),$t(()=>{return window.addEventListener("pointerdown",Ut),window.addEventListener("keydown",Ut),()=>{window.removeEventListener("pointerdown",Ut),window.removeEventListener("keydown",Ut)}}),$t(()=>{let m=!1;return ei((b)=>{if(b.type==="preflight"){n(r,{...t(r),docker:b.data.docker,cli:b.data.cli},!0);return}if(b.type==="health"){let _=t(a).find((ht)=>ht.id===b.data.id);if(b.data.health.codeServerAccessible&&_?.status==="running")T.add(b.data.id);return}if(b.type!=="instances")return;let it=b.data,vt=new Set(it.filter((_)=>_.status==="running").map((_)=>_.id));for(let _ of[...T])if(!vt.has(_))T.delete(_);for(let _ of[...W])if(!vt.has(_))W.delete(_);for(let _ of[...k])if(!vt.has(_))k.delete(_);let pt={};for(let _ of it)pt[_.id]=_.attention;if(m)for(let _ in pt){let ht=pt[_];if(ht&&ht!==t(S)[_])if(_===t(u))console.log(`[chime] attention id=${_} state=${ht} — skipped (tab is active/focused)`);else console.log(`[chime] attention id=${_} state=${ht} → playChime`),qe(ht)}else console.log("[chime] first frame after (re)connect — baselining, no chimes");m=!0,n(a,it,!0),n(S,pt,!0),n(v,!0)},()=>{m=!1})}),$t(()=>{if(!t(u)||!t(S)[t(u)])return;let m=()=>{if(document.visibilityState==="visible")zt(`/api/instances/${t(u)}/attention/clear`).catch(()=>{})};return m(),document.addEventListener("visibilitychange",m),()=>document.removeEventListener("visibilitychange",m)});var et=fa(),St=xt(et);let wt;var bt=d(St);{var I=(m)=>{Ae(m,{get running(){return t(p)},get active(){return t(u)},get attention(){return t(S)},get editingId(){return t(C)},onselect:(b)=>D(`/ide/${b}`),onstartrename:R,oncommitrename:V,oncancelrename:z,get editingName(){return t(w)},set editingName(b){n(w,b,!0)}})},L=(m)=>{ze(m,{get preflight(){return t(r)},get instances(){return t(a)},get loaded(){return t(v)}})};N(bt,(m)=>{if(t($))m(I);else m(L,-1)})}var H=s(bt,2);let f;var x=d(H);mt(x,17,()=>t(p),(m)=>m.id,(m,b)=>{var it=oe(),vt=xt(it);{var pt=(ht)=>{var At=oa();let Ht;var g=d(At);{var K=(y)=>{var at=da();A((Nt)=>{rt(at,"src",Nt),rt(at,"title",t(b).name)},[()=>ti(t(b))]),Dt("load",at,()=>k.add(t(b).id)),Ue(at),o(y,at)},ut=P(()=>Y(t(b).id));N(g,(y)=>{if(t(ut))y(K)})}var Jt=s(g,2);{var kt=(y)=>{ge(y,{stalledAfterMs:O,onoverride:()=>W.add(t(b).id)})},It=P(()=>!Y(t(b).id)),ct=(y)=>{ge(y,{})},tt=P(()=>!k.has(t(b).id));N(Jt,(y)=>{if(t(It))y(kt);else if(t(tt))y(ct,1)})}l(At),A(()=>Ht=gt(At,1,"pane svelte-1duc7gd",null,Ht,{active:t(b).id===t(u)})),o(ht,At)},_=P(()=>M.has(t(b).id));N(vt,(ht)=>{if(t(_))ht(pt)})}o(m,it)});var B=s(x,2);{var J=(m)=>{var b=sa();o(m,b)};N(B,(m)=>{if(t($)&&t(p).length===0)m(J)})}l(H),l(St);var nt=s(St,2);je(nt,{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;"}}),A(()=>{wt=gt(St,1,"app svelte-1duc7gd",null,wt,{ide:t($)}),f=gt(H,1,"panes svelte-1duc7gd",null,f,{hidden:!t($)})}),o(i,et),ot()}ii("AppShell_2rtnxn6pgp2rh",Ve);
@@ -1 +0,0 @@
1
- import{p as nl,q as lv,r as Gl,s as vv,t as sv,v as Jl,w as iv}from"/_mochi/client/chunk-5p31aqh0.js";import{x as Pl}from"/_mochi/client/chunk-597d17x0.js";import{y as d}from"/_mochi/client/chunk-04qv4w6w.js";import{Aa as Ol,B as i,Ba as fl,C as g,Ca as gl,Ea as rl,G as Il,H as Sl,Ha as Tl,Ja as $l,Ma as u,Na as P,Oa as O,P as V,Ra as _l,S as z,U as m,Ua as fv,W as Rl,X as f,Y as E,Z as h,_ as el,ba as S,ga as v,ka as ql,la as Nl,ma as ol,na as y,qa as q,ra as t,sa as I,ta as M,ua as ul,va as o}from"/_mochi/client/chunk-qxwt25hn.js";var Fv=new Set(["$$slots","$$events","$$legacy"]);function Cl(H,p){let W=u(p,Fv),e=[["path",{d:"m12 19-7-7 7-7"}],["path",{d:"M19 12H5"}]];d(H,P({name:"arrow-left"},()=>W,{get iconNode(){return e}}))}var Ov=new Set(["$$slots","$$events","$$legacy"]);function il(H,p){let W=u(p,Ov),e=[["path",{d:"M7 7h10v10"}],["path",{d:"M7 17 17 7"}]];d(H,P({name:"arrow-up-right"},()=>W,{get iconNode(){return e}}))}var Tv=new Set(["$$slots","$$events","$$legacy"]);function xl(H,p){let W=u(p,Tv),e=[["path",{d:"M20 6 9 17l-5-5"}]];d(H,P({name:"check"},()=>W,{get iconNode(){return e}}))}var Gv=y("<span></span>");function A(H,p){let W=O(p,"variant",3,"text");var e=Gv();let T;S(()=>{fl(e,1,`skel ${W()??""}`,"svelte-tl058d"),T=gl(e,"",T,{width:p.width})}),t(H,e)}var Jv=y('<div class="hrow svelte-1hnopyv"><span><!></span> <span class="hlabel svelte-1hnopyv"> </span> <span class="hvalue svelte-1hnopyv"> </span></div>'),Qv=y('<div class="hrow svelte-1hnopyv"><span class="box idle svelte-1hnopyv"></span> <!> <!></div>'),Yv=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>'),Zv=y('<div><div class="panel-bar">Health</div> <div class="health svelte-1hnopyv"><!></div> <div class="hfoot svelte-1hnopyv"> </div></div>');function Fl(H,p){Il(p,!0);let W=["Container running","Code-server reachable"],e=O(p,"health",3,null),T=O(p,"lastFetchedAt",3,null),R=O(p,"active",3,!0),G=O(p,"injectionChecks",3,0),hl=V(()=>{if(!e())return[];let C=(x)=>({ok:x,value:x?"OK":"—"});return[{label:W[0],...C(e().containerRunning)},{label:W[1],...C(e().codeServerAccessible)},...e().injections.map((x)=>({label:x.label,...C(x.ok)}))]});function Ml(){return e()?v(hl).length:W.length+G()}let b=z(Rl(Date.now()));el(()=>{let C=setInterval(()=>m(b,Date.now(),!0),1000);return()=>clearInterval(C)});let B=V(()=>{if(!R()&&!e())return"Container not running";if(!T())return"Waiting for first check…";return`Updated ${Math.max(0,Math.round((v(b)-T())/1000))}s ago`});var L=Zv();let r;var J=h(f(L),2),$=f(J);{var Wl=(C)=>{var x=q(),Y=E(x);o(Y,17,()=>v(hl),(K)=>K.label,(K,X)=>{var N=Jv(),j=f(N),U=f(j);{var n=(Z)=>{xl(Z,{size:12,strokeWidth:3})},ll=(Z)=>{Pl(Z,{size:12,strokeWidth:3})};M(U,(Z)=>{if(v(X).ok)Z(n);else Z(ll,-1)})}i(j);var vl=h(j,2),zl=f(vl,!0);i(vl);var tl=h(vl,2),Dl=f(tl,!0);i(tl),i(N),S(()=>{fl(j,1,`box ${v(X).ok?"ok":"bad"}`,"svelte-1hnopyv"),I(zl,v(X).label),I(Dl,v(X).value)}),t(K,N)}),t(C,x)},jl=(C)=>{var x=q(),Y=E(x);o(Y,17,()=>Array(Ml()),ul,(K,X)=>{var N=Qv(),j=h(f(N),2);A(j,{width:"120px"});var U=h(j,2);A(U,{variant:"pill"}),i(N),t(K,N)}),t(C,x)},kl=(C)=>{var x=q(),Y=E(x);o(Y,16,()=>W,(K)=>K,(K,X)=>{var N=Yv(),j=h(f(N),2),U=f(j,!0);i(j),g(2),i(N),S(()=>I(U,X)),t(K,N)}),t(C,x)};M($,(C)=>{if(e())C(Wl);else if(R())C(jl,1);else C(kl,-1)})}i(J);var Q=h(J,2),_=f(Q,!0);i(Q),i(L),S(()=>{r=fl(L,1,"healthwrap panel svelte-1hnopyv",null,r,{dim:!R()&&!e()}),I(_,v(B))}),t(H,L),Sl()}var Av=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),Ev=y('<p class="restart-err svelte-15fxkvm"> </p>'),dl=y('<code class="svelte-15fxkvm"> </code>'),Vv=y('<code class="svelte-15fxkvm">local (project devcontainer.json)</code>'),bv=y('<code class="muted svelte-15fxkvm">—</code>'),Bv=y('<button class="rebuild svelte-15fxkvm"> </button>'),Uv=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>'),cv=y('<ul class="port-list svelte-15fxkvm"></ul>'),gv=y('<p class="empty svelte-15fxkvm">No ports forwarded yet.</p>'),Rv=y('<p class="port-err svelte-15fxkvm"> </p>'),uv=y('<p class="hint pending svelte-15fxkvm">Port changes apply when you <strong class="svelte-15fxkvm">Restart</strong> (recreates the container).</p>'),Pv=y('<div class="err svelte-15fxkvm"> </div>'),dv=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> <button class="copy svelte-15fxkvm"> </button></div> <div class="logs svelte-15fxkvm"><pre class="svelte-15fxkvm"> <span class="caret svelte-15fxkvm"></span></pre></div> <!></div></main>',1);function Ql(H,p){Il(p,!0);let W=O(p,"injectionChecks",3,0),e=z(null),T=z(null),R=z(null),G=z("");function hl(l){l.scrollTop=l.scrollHeight}el(()=>vv(`/api/instances/${p.id}/logs`,(l)=>m(G,v(G)+l),()=>m(G,""))),el(()=>sv((l)=>{if(l.type==="instances"){let s=l.data.find((a)=>a.id===p.id);if(s)m(e,s,!0)}else if(l.type==="health"&&l.data.id===p.id)m(T,l.data.health,!0),m(R,Date.now(),!0)}));let Ml=V(()=>v(e)?nl(v(e)):"#"),b=z(""),B=z(null),L=z(!1),r=V(()=>v(e)?.forwarded_ports??[]),J=V(()=>v(e)?.status==="creating");async function $(l){m(B,null);try{return await l(),!0}catch(s){return m(B,s.message,!0),!1}}async function Wl(l){l.preventDefault();let s=Number.parseInt(v(b),10);if(!Number.isInteger(s)||s<1||s>65535){m(B,"Enter a port number between 1 and 65535");return}if(await $(()=>Jl(`/api/instances/${p.id}/ports`,{port:s})))m(b,""),m(L,!0)}async function jl(l){if(await $(()=>iv(`/api/instances/${p.id}/ports/${l}`)))m(L,!0)}async function kl(){if(await $(()=>Jl(`/api/instances/${p.id}/rebuild`)))m(L,!1)}let Q=z(null),_=z(!1),C={onPending:(l)=>m(_,l,!0),submit:()=>{return m(Q,null),({result:l})=>{if(l.type==="failure")m(Q,l.data?.error??"Restart failed",!0);else if(l.type==="error")m(Q,"Network error. Try again.")}}},x=z(!1),Y;async function K(){await navigator.clipboard.writeText(v(G)),m(x,!0),clearTimeout(Y),Y=setTimeout(()=>m(x,!1),2000)}var X=dv(),N=E(X),j=f(N),U=f(j);Cl(U,{size:15}),g(),i(j);var n=h(j,2),ll=f(n),vl=f(ll,!0);i(ll);var zl=h(ll,2);{var tl=(l)=>{lv(l,{get status(){return v(e).status}})},Dl=(l)=>{A(l,{variant:"pill"})};M(zl,(l)=>{if(v(e))l(tl);else l(Dl,-1)})}i(n);var Z=h(n,2);{var ev=(l)=>{var s=Av(),a=E(s),w=f(a),c=f(w,!0);i(w),i(a),Ol(a,()=>_l(C));var F=h(a,2),k=h(f(F));il(k,{size:15}),i(F),S(()=>{w.disabled=v(_)||v(J),I(c,v(_)||v(J)?"Restarting…":"Restart container"),Tl(F,"href",v(Ml))}),t(l,s)};M(Z,(l)=>{if(v(e)?.status==="running")l(ev)})}i(N);var Yl=h(N,2);{var hv=(l)=>{var s=Ev(),a=f(s,!0);i(s),S(()=>I(a,v(Q))),t(l,s)};M(Yl,(l)=>{if(v(Q))l(hv)})}var Zl=h(Yl,2),Hl=f(Zl),Al=h(f(Hl),2);{var tv=(l)=>{var s=dl(),a=f(s,!0);i(s),S(()=>I(a,v(e).source_path)),t(l,s)},pv=(l)=>{A(l,{variant:"wide"})};M(Al,(l)=>{if(v(e))l(tv);else l(pv,-1)})}var av=h(Al,4);{var mv=(l)=>{var s=q(),a=E(s);{var w=(k)=>{var D=Vv();t(k,D)},c=(k)=>{var D=dl(),yl=f(D,!0);i(D),S(()=>I(yl,v(e).image_source)),t(k,D)},F=(k)=>{var D=bv();t(k,D)};M(a,(k)=>{if(v(e).image_source==="local")k(w);else if(v(e).image_source)k(c,1);else k(F,-1)})}t(l,s)},yv=(l)=>{A(l,{variant:"wide"})};M(av,(l)=>{if(v(e))l(mv);else l(yv,-1)})}i(Hl);var Kl=h(Hl,2),Cv=f(Kl);{let l=V(()=>!v(e)||v(e).status==="running");Fl(Cv,{get health(){return v(T)},get lastFetchedAt(){return v(R)},get injectionChecks(){return W()},get active(){return v(l)}})}i(Kl);var Ll=h(Kl,2),Xl=f(Ll),xv=h(f(Xl),2);{var Iv=(l)=>{var s=Bv(),a=f(s,!0);i(s),S(()=>{s.disabled=v(J),I(a,v(J)?"Restarting…":"Restart to apply")}),Nl("click",s,kl),t(l,s)};M(xv,(l)=>{if(v(L))l(Iv)})}i(Xl);var El=h(Xl,2),Vl=f(El);{var Sv=(l)=>{var s=cv();o(s,21,()=>v(r),(a)=>a.container_port,(a,w)=>{var c=Uv(),F=f(c),k=f(F);i(F);var D=h(F,4),yl=f(D),Kv=h(yl);il(Kv,{size:12}),i(D);var Lv=h(D,2);i(c),S((Xv,wv)=>{I(k,`:${v(w).container_port??""}`),Tl(D,"href",Xv),I(yl,`${wv??""} `)},[()=>Gl(v(w).host_port),()=>Gl(v(w).host_port).replace("http://","")]),Nl("click",Lv,()=>jl(v(w).container_port)),t(a,c)}),i(s),t(l,s)},Nv=(l)=>{var s=gv();t(l,s)};M(Vl,(l)=>{if(v(r).length)l(Sv);else l(Nv,-1)})}var pl=h(Vl,2),bl=f(pl);rl(bl),g(2),i(pl);var Bl=h(pl,2);{var Mv=(l)=>{var s=Rv(),a=f(s,!0);i(s),S(()=>I(a,v(B))),t(l,s)};M(Bl,(l)=>{if(v(B))l(Mv)})}var Wv=h(Bl,2);{var jv=(l)=>{var s=uv();t(l,s)};M(Wv,(l)=>{if(v(L))l(jv)})}g(2),i(El),i(Ll);var Ul=h(Ll,2),wl=f(Ul),al=h(f(wl),2),kv=f(al,!0);i(al),i(wl);var ml=h(wl,2),cl=f(ml),zv=f(cl,!0);g(),i(cl),i(ml),Ol(ml,()=>hl);var Dv=h(ml,2);{var Hv=(l)=>{var s=Pv(),a=f(s,!0);i(s),S(()=>I(a,v(e).error)),t(l,s)};M(Dv,(l)=>{if(v(e)?.status==="error"&&v(e).error)l(Hv)})}i(Ul),i(Zl),S(()=>{I(vl,v(e)?.name??"Instance"),al.disabled=!v(G),I(kv,v(x)?"Copied!":"Copy logs"),I(zv,v(G)||"Waiting for output…")}),ql("submit",pl,Wl),$l(bl,()=>v(b),(l)=>m(b,l)),Nl("click",al,K),t(H,X),Sl()}ol(["click"]);fv("InstanceView_2ma45l9bybfhl",Ql);
@@ -1,23 +0,0 @@
1
- import{a as US,b as lS,c as OS,d as kS,e as TS}from"/_mochi/client/chunk-0jtmkpx4.js";import{f as HS,g as BS,i as t,o as PS}from"/_mochi/client/chunk-gjjhya9m.js";import{x as MS}from"/_mochi/client/chunk-597d17x0.js";import{y as P}from"/_mochi/client/chunk-04qv4w6w.js";import{Aa as q,B as I,Ba as Z1,C as F,Ea as O,Fa as Vf,G as C0,Ga as p1,H as x0,Ha as v,Ja as u,Ka as Wf,Ma as K,Na as R,Oa as RS,Q as Qf,Ra as i,S as w,Ta as Zf,U as N,Ua as bS,W as B,X as L,Y as B1,Z as C,ba as p,ga as S,la as I1,ma as w0,na as M,pa as m,ra as j,sa as V,ta as H,va as A1,ya as KS}from"/_mochi/client/chunk-qxwt25hn.js";var I9=new Set(["$$slots","$$events","$$legacy"]);function n1(A,z){let J=K(z,I9),Q=[["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"}]];P(A,R({name:"container"},()=>J,{get iconNode(){return Q}}))}var L9=new Set(["$$slots","$$events","$$legacy"]);function f0(A,z){let J=K(z,L9),Q=[["path",{d:"M12 2v10"}],["path",{d:"M18.4 6.6a9 9 0 1 1-12.77.04"}]];P(A,R({name:"power"},()=>J,{get iconNode(){return Q}}))}var y9=new Set(["$$slots","$$events","$$legacy"]);function D1(A,z){let J=K(z,y9),Q=[["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"}]];P(A,R({name:"rotate-ccw"},()=>J,{get iconNode(){return Q}}))}var N9=new Set(["$$slots","$$events","$$legacy"]);function S0(A,z){let J=K(z,N9),Q=[["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"}]];P(A,R({name:"volume-2"},()=>J,{get iconNode(){return Q}}))}var C9=new Set(["$$slots","$$events","$$legacy"]);function I0(A,z){let J=K(z,C9),Q=[["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"}]];P(A,R({name:"sun-moon"},()=>J,{get iconNode(){return Q}}))}var x9=new Set(["$$slots","$$events","$$legacy"]);function L0(A,z){let J=K(z,x9),Q=[["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"}]];P(A,R({name:"sun"},()=>J,{get iconNode(){return Q}}))}var w9=new Set(["$$slots","$$events","$$legacy"]);function y0(A,z){let J=K(z,w9),Q=[["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"}]];P(A,R({name:"moon"},()=>J,{get iconNode(){return Q}}))}var z9=new Set(["$$slots","$$events","$$legacy"]);function N0(A,z){let J=K(z,z9),Q=[["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"}]];P(A,R({name:"monitor"},()=>J,{get iconNode(){return Q}}))}var WS="theme";function XS(){let A=Zf.get(WS);return A==="dark"||A==="light"?A:"auto"}function GS(A){Zf.set(WS,A,{expires:400,path:"/"})}function YS(A){if(A==="auto")delete document.documentElement.dataset.theme;else document.documentElement.dataset.theme=A}var j9=M('<button type="button" role="radio"><!> </button>'),A9=M('<div class="picker svelte-3gcwuj" role="radiogroup" aria-label="Theme"></div>');function pf(A,z){C0(z,!0);let J=w(B(XS())),Q=[{value:"auto",label:"Auto",icon:N0},{value:"light",label:"Light",icon:L0},{value:"dark",label:"Dark",icon:y0}];function h(E){N(J,E,!0),GS(E),YS(E)}var s=A9();A1(s,21,()=>Q,({value:E,label:e,icon:o})=>E,(E,e)=>{let o=()=>S(e).value,J1=()=>S(e).label,Q1=()=>S(e).icon;var _=j9();let l1;var n=L(_);KS(n,Q1,(W1,X1)=>{X1(W1,{size:13})});var V1=C(n);I(_),p(()=>{l1=Z1(_,1,"segment svelte-3gcwuj",null,l1,{active:S(J)===o()}),v(_,"aria-checked",S(J)===o()),V(V1,` ${J1()??""}`)}),I1("click",_,()=>h(o())),j(E,_)}),I(s),j(A,s),x0()}w0(["click"]);var Z9=new Set(["$$slots","$$events","$$legacy"]);function z0(A,z){let J=K(z,Z9),Q=[["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"}]];P(A,R({name:"layers"},()=>J,{get iconNode(){return Q}}))}var p9=new Set(["$$slots","$$events","$$legacy"]);function j0(A,z){let J=K(z,p9),Q=[["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"}]];P(A,R({name:"folder-minus"},()=>J,{get iconNode(){return Q}}))}var J9=new Set(["$$slots","$$events","$$legacy"]);function H1(A,z){let J=K(z,J9),Q=[["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"}]];P(A,R({name:"trash-2"},()=>J,{get iconNode(){return Q}}))}var Q9=new Set(["$$slots","$$events","$$legacy"]);function U1(A,z){let J=K(z,Q9),Q=[["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"}]];P(A,R({name:"hammer"},()=>J,{get iconNode(){return Q}}))}var V9=new Set(["$$slots","$$events","$$legacy"]);function M1(A,z){let J=K(z,V9),Q=[["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"}]];P(A,R({name:"key-round"},()=>J,{get iconNode(){return Q}}))}var W9=new Set(["$$slots","$$events","$$legacy"]);function A0(A,z){let J=K(z,W9),Q=[["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"}]];P(A,R({name:"variable"},()=>J,{get iconNode(){return Q}}))}var X9=M('<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 Jf(A,z){let J=RS(z,"href",3,"/avatars"),Q={name:"coin",pixels:["..####..",".#....#.","#..##..#","#.####.#","#.####.#","#..##..#",".#....#.","..####.."]};var h=X9(),s=C(L(h),2),E=C(L(s),2),e=L(E);PS(e,{get art(){return Q},name:"coin",scale:3}),I(E),I(s),F(2),I(h),p(()=>v(s,"href",J())),j(A,h)}var G9=M('<span class="title svelte-1n6ht58">Settings</span>'),Y9=M('<span class="arch svelte-1n6ht58" title="Docker daemon architecture"> </span>'),K9=M(`Your Docker daemon runs on <strong> </strong> — pick an image that publishes
2
- an <strong> </strong> manifest, or the pull will fail.`,1),r=M('<div class="msg error svelte-1n6ht58"> </div>'),FS=M('<div class="msg ok svelte-1n6ht58">Saved.</div>'),Z0=M('<div class="sub svelte-1n6ht58"><div class="msg error svelte-1n6ht58"> </div></div>'),L1=M('<div class="msg ok svelte-1n6ht58"> </div>'),R9=M('<span class="arch svelte-1n6ht58" title="Disabled while LiteLLM + Bedrock mode is on">disabled</span>'),P9=M(`<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
3
- 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
4
- 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 —
5
- the first <code class="svelte-1n6ht58">claude</code> to refresh it signs the other one out. Leave blank and Save
6
- 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),F9=M('<span class="arch svelte-1n6ht58" title="Disabled while Set tokens manually is on">disabled</span>'),D9=M(`Route <code class="svelte-1n6ht58">claude</code> through a LiteLLM proxy fronting AWS Bedrock instead of Anthropic's
7
- default API. When enabled, the Bedrock endpoint variables are injected into every new
8
- container, host OAuth credentials are not used, and "Set tokens manually" is disabled.`,1),H9=M('<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),DS=M('<input type="hidden" name="names"/>'),U9=M('<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>'),M9=M('<div class="var-empty svelte-1n6ht58">No variables added yet.</div>'),B9=M('<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>'),l9=M('<span class="shutting svelte-1n6ht58">Server is shutting down — you can close this tab.</span>'),O9=M(`<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
9
- 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
10
- new instance's workspace. Leave blank to copy everything. Only applies to local
11
- 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="?/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
12
- 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
13
- 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">Re-run <code class="svelte-1n6ht58">devcontainer up --build-no-cache</code> for every currently-running instance.
14
- 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 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
15
- interactive shells. Values are read from this process's own environment at container
16
- 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 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
17
- 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 Xf(A,z){C0(z,!0);let J=w(B(lS())),Q=w(!1);function h(f){return{onPending:f.setSaving,submit:({cancel:y})=>{if(f.confirmMessage&&!confirm(f.confirmMessage)){y();return}return f.setError(null),f.setMsg?.(null),({result:x})=>{if(x.type==="success")f.onSuccess(x.data);else if(x.type==="failure")f.setError(x.data?.error??"Request failed");else if(x.type==="error")f.setError("Network error. Try again.")}}}}function s(f){return{onPending:f.setSaving,submit:({formData:y})=>{let x=y.get("enabled")==="on";return f.setError(null),({result:X})=>{if(X.type==="success"){f.onSuccess?.(X.data);return}f.set(!x),f.setError(X.type==="failure"?X.data?.error??"Request failed":"Network error. Try again.")}}}}let E=w(B(z.defaultImage)),e=w(!1),o=w(null),J1=w(!1),Q1,_=h({setSaving:(f)=>N(e,f,!0),setError:(f)=>N(o,f,!0),setMsg:(f)=>N(J1,!!f),onSuccess:(f)=>{N(E,f?.image??S(E),!0),N(J1,!0)}});function l1(){Qf(()=>N(E,z.builtinImage,!0)),Q1?.requestSubmit()}let n=w(B(z.copyIgnorePatterns)),V1=w(!1),W1=w(null),X1=w(!1),p0,qS=h({setSaving:(f)=>N(V1,f,!0),setError:(f)=>N(W1,f,!0),setMsg:(f)=>N(X1,!!f),onSuccess:(f)=>{N(n,f?.patterns??S(n),!0),N(X1,!0)}});function iS(){Qf(()=>N(n,z.builtinCopyIgnore,!0)),p0?.requestSubmit()}let J0=w(B(z.disableBuildCache)),Gf=w(!1),Q0=w(null),hS=s({set:(f)=>N(J0,f,!0),setSaving:(f)=>N(Gf,f,!0),setError:(f)=>N(Q0,f,!0)}),V0=w(!1),O1=w(null),W0=w(null);function ES(f){if(f<=0)return"0 B";let y=["B","KB","MB","GB","TB"],x=Math.min(Math.floor(Math.log(f)/Math.log(1024)),y.length-1);return`${(f/1024**x).toFixed(x===0?0:1)} ${y[x]}`}let cS=h({setSaving:(f)=>N(V0,f,!0),setError:(f)=>N(W0,f,!0),setMsg:(f)=>N(O1,f,!0),onSuccess:(f)=>{N(O1,`Cleared — freed ${ES(f?.spaceReclaimed??0)}.`)}}),X0=w(!1),k1=w(null),G0=w(null),mS=h({setSaving:(f)=>N(X0,f,!0),setError:(f)=>N(G0,f,!0),setMsg:(f)=>N(k1,f,!0),confirmMessage:"Rebuild every running container from scratch (no build cache)? Each will restart and may take a while.",onSuccess:(f)=>{let y=f?.count??0;N(k1,y===0?"No running containers to rebuild.":`Rebuilding ${y} container(s)…`,!0)}}),f1=w(B(z.manualTokensEnabled)),Yf=w(!1),Y0=w(null),tS=s({set:(f)=>N(f1,f,!0),setSaving:(f)=>N(Yf,f,!0),setError:(f)=>N(Y0,f,!0)}),K0=w(B(z.githubTokenSet)),R0=w(""),Kf=w(!1),T1=w(null),P0=w(null),gS=h({setSaving:(f)=>N(Kf,f,!0),setError:(f)=>N(P0,f,!0),setMsg:(f)=>N(T1,f,!0),onSuccess:(f)=>{N(K0,f?.set??!1,!0),N(R0,""),N(T1,S(K0)?"Saved.":"Cleared.",!0)}}),F0=w(B(z.claudeTokenSet)),D0=w(""),Rf=w(!1),b1=w(null),H0=w(null),uS=h({setSaving:(f)=>N(Rf,f,!0),setError:(f)=>N(H0,f,!0),setMsg:(f)=>N(b1,f,!0),onSuccess:(f)=>{N(F0,f?.set??!1,!0),N(D0,""),N(b1,S(F0)?"Saved.":"Cleared.",!0)}}),$=w(B(z.customEndpointEnabled)),Pf=w(!1),U0=w(null),sS=s({set:(f)=>N($,f,!0),setSaving:(f)=>N(Pf,f,!0),setError:(f)=>N(U0,f,!0)}),Ff=w(B(z.customEndpointBaseUrl)),Df=w(!1),q1=w(null),M0=w(null),dS=h({setSaving:(f)=>N(Df,f,!0),setError:(f)=>N(M0,f,!0),setMsg:(f)=>N(q1,f,!0),onSuccess:(f)=>{N(q1,f?.set?"Saved.":"Cleared.",!0)}}),B0=w(""),l0=w(B(z.customEndpointTokenSet)),Hf=w(!1),i1=w(null),O0=w(null),eS=h({setSaving:(f)=>N(Hf,f,!0),setError:(f)=>N(O0,f,!0),setMsg:(f)=>N(i1,f,!0),onSuccess:(f)=>{N(l0,f?.set??!1,!0),N(B0,""),N(i1,S(l0)?"Saved.":"Cleared.",!0)}}),Uf=w(B(z.customEndpointOpusModel)),Mf=w(B(z.customEndpointSonnetModel)),Bf=w(B(z.customEndpointHaikuModel)),lf=w(B(z.customEndpointSmallFastModel)),Of=w(B(z.customEndpointModel)),kf=w(!1),h1=w(null),k0=w(null),aS=h({setSaving:(f)=>N(kf,f,!0),setError:(f)=>N(k0,f,!0),setMsg:(f)=>N(h1,f,!0),onSuccess:()=>{N(h1,"Saved.")}}),E1=w(B(z.hostEnvVarsEnabled)),Tf=w(!1),T0=w(null),vS=s({set:(f)=>N(E1,f,!0),setSaving:(f)=>N(Tf,f,!0),setError:(f)=>N(T0,f,!0),onSuccess:(f)=>{N(w1,f?.presence??{},!0)}}),x1=w(B([...z.hostEnvVarNames])),w1=w(B({...z.hostEnvVarPresence})),b0=w(""),c1=w(!1),G1=w(null),y1=w(null),rS={onPending:(f)=>N(c1,f,!0),submit:({formData:f,cancel:y})=>{N(y1,null),N(G1,null);let x=f.getAll("names").map(String),l=(x.pop()??"").trim().toUpperCase();if(!l){y();return}if(!/^[A-Za-z_][A-Za-z0-9_]*$/.test(l)){N(y1,`Invalid variable name: ${l}`),y();return}if(N(b0,""),x.includes(l)){y();return}let d=[...x,l];f.delete("names");for(let g of d)f.append("names",g);return({result:g})=>{if(g.type==="success")N(x1,d,!0),N(w1,g.data?.presence??{},!0),N(G1,"Saved.");else if(g.type==="failure")N(y1,g.data?.error??"Request failed",!0);else if(g.type==="error")N(y1,"Network error. Try again.")}}};function $S(f){return h({setSaving:(y)=>N(c1,y,!0),setError:(y)=>N(y1,y,!0),setMsg:(y)=>N(G1,y,!0),onSuccess:(y)=>{N(x1,S(x1).filter((x)=>x!==f),!0),N(w1,y?.presence??{},!0)}})}function oS(f){if(N(J,f,!0),OS(f),kS(),f)TS("done")}let _S={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(Q,!0)}};var bf=O9(),q0=B1(bf),qf=L(q0);HS(qf,{children:(f,y)=>{var x=G9();j(f,x)},$$slots:{default:!0}});var hf=C(qf,2),i0=L(hf),m1=L(i0),h0=L(m1),Ef=L(h0);n1(Ef,{size:18});var cf=C(Ef,2),mf=L(cf),nS=C(L(mf));{var fI=(f)=>{var y=Y9(),x=L(y,!0);I(y),p(()=>V(x,z.dockerArch)),j(f,y)};H(nS,(f)=>{if(z.dockerArch)f(fI)})}I(mf),F(2),I(cf),I(h0);var E0=C(h0,2),c0=L(E0);O(c0);var tf=C(c0,2);t(tf,{type:"submit",get disabled(){return S(e)},children:(f,y)=>{F();var x=m("Save");j(f,x)},$$slots:{default:!0}});var SI=C(tf,2);t(SI,{type:"button",get icon(){return D1},get disabled(){return S(e)},onclick:l1,get title(){return`Reset to default (${z.builtinImage??""})`},"aria-label":"Reset to default image"}),I(E0);var m0=C(E0,2),II=L(m0);{var LI=(f)=>{var y=K9(),x=C(B1(y)),X=L(x,!0);I(x);var l=C(x,2),d=L(l,!0);I(l),F(),p(()=>{V(X,z.dockerArch),V(d,z.dockerArch)}),j(f,y)},yI=(f)=>{var y=m(`Pick an image whose manifest covers your Docker daemon's architecture, or the pull will
18
- fail.`);j(f,y)};H(II,(f)=>{if(z.dockerArch)f(LI);else f(yI,-1)})}I(m0);var NI=C(m0,2);{var CI=(f)=>{var y=r(),x=L(y,!0);I(y),p(()=>V(x,S(o))),j(f,y)},xI=(f)=>{var y=FS();j(f,y)};H(NI,(f)=>{if(S(o))f(CI);else if(S(J1))f(xI,1)})}I(m1),Wf(m1,(f)=>Q1=f,()=>Q1),q(m1,()=>i(_)),I(i0);var t0=C(i0,2),t1=L(t0),g0=L(t1),wI=L(g0);j0(wI,{size:18}),F(2),I(g0);var u0=C(g0,2),s0=L(u0);O(s0);var gf=C(s0,2);t(gf,{type:"submit",get disabled(){return S(V1)},children:(f,y)=>{F();var x=m("Save");j(f,x)},$$slots:{default:!0}});var zI=C(gf,2);t(zI,{type:"button",get icon(){return D1},get disabled(){return S(V1)},onclick:iS,get title(){return`Reset to default (${z.builtinCopyIgnore??""})`},"aria-label":"Reset to default copy-ignore patterns"}),I(u0);var jI=C(u0,2);{var AI=(f)=>{var y=r(),x=L(y,!0);I(y),p(()=>V(x,S(W1))),j(f,y)},ZI=(f)=>{var y=FS();j(f,y)};H(jI,(f)=>{if(S(W1))f(AI);else if(S(X1))f(ZI,1)})}I(t1),Wf(t1,(f)=>p0=f,()=>p0),q(t1,()=>i(qS)),I(t0);var d0=C(t0,2),g1=L(d0),e0=L(g1),pI=L(e0);z0(pI,{size:18}),F(2),I(e0);var uf=C(e0,2),u1=L(uf);O(u1),F(2),I(uf),I(g1),q(g1,()=>i(hS));var sf=C(g1,2);{var JI=(f)=>{var y=Z0(),x=L(y),X=L(x,!0);I(x),I(y),p(()=>V(X,S(Q0))),j(f,y)};H(sf,(f)=>{if(S(Q0))f(JI)})}var s1=C(sf,2),a0=L(s1),df=L(a0);H1(df,{size:18});var ef=C(df,2),QI=C(L(ef),4);{var VI=(f)=>{var y=r(),x=L(y,!0);I(y),p(()=>V(x,S(W0))),j(f,y)},WI=(f)=>{var y=L1(),x=L(y,!0);I(y),p(()=>V(x,S(O1))),j(f,y)};H(QI,(f)=>{if(S(W0))f(VI);else if(S(O1))f(WI,1)})}I(ef),I(a0);var XI=C(a0,2);t(XI,{type:"submit",get icon(){return H1},get disabled(){return S(V0)},children:(f,y)=>{F();var x=m();p(()=>V(x,S(V0)?"Clearing…":"Clear cache")),j(f,x)},$$slots:{default:!0}}),I(s1),q(s1,()=>i(cS));var v0=C(s1,2),r0=L(v0),af=L(r0);U1(af,{size:18});var vf=C(af,2),GI=C(L(vf),4);{var YI=(f)=>{var y=r(),x=L(y,!0);I(y),p(()=>V(x,S(G0))),j(f,y)},KI=(f)=>{var y=L1(),x=L(y,!0);I(y),p(()=>V(x,S(k1))),j(f,y)};H(GI,(f)=>{if(S(G0))f(YI);else if(S(k1))f(KI,1)})}I(vf),I(r0);var RI=C(r0,2);t(RI,{type:"submit",get icon(){return U1},get disabled(){return S(X0)},children:(f,y)=>{F();var x=m();p(()=>V(x,S(X0)?"Starting…":"Rebuild all")),j(f,x)},$$slots:{default:!0}}),I(v0),q(v0,()=>i(mS)),I(d0);var d1=C(d0,2);let rf;var e1=L(d1),$0=L(e1),$f=L($0);M1($f,{size:18});var of=C($f,2),o0=L(of),PI=C(L(o0));{var FI=(f)=>{var y=R9();j(f,y)};H(PI,(f)=>{if(S($))f(FI)})}I(o0);var _f=C(o0,2),DI=L(_f);{var HI=(f)=>{var y=m(`Not available while LiteLLM + Bedrock mode is enabled — Claude credentials are
19
- provided by the LiteLLM endpoint instead.`);j(f,y)},UI=(f)=>{var y=m(`Provide GitHub and Claude Code tokens yourself instead of discovering them from this
20
- machine. Useful on a headless server or when signed in as a different identity. A
21
- token set here is injected into every new container and overrides host credential
22
- discovery.`);j(f,y)};H(DI,(f)=>{if(S($))f(HI);else f(UI,-1)})}I(_f),I(of),I($0);var nf=C($0,2),a1=L(nf);O(a1),F(2),I(nf),I(e1),q(e1,()=>i(tS));var fS=C(e1,2);{var MI=(f)=>{var y=Z0(),x=L(y),X=L(x,!0);I(x),I(y),p(()=>V(X,S(Y0))),j(f,y)};H(fS,(f)=>{if(S(Y0))f(MI)})}var BI=C(fS,2);{var lI=(f)=>{var y=P9(),x=B1(y),X=C(L(x),2),l=L(X);O(l);var d=C(l,2);t(d,{type:"submit",get disabled(){return S(Kf)},children:(W,U)=>{F();var T=m("Save");j(W,T)},$$slots:{default:!0}}),I(X);var g=C(X,2);{var Y1=(W)=>{var U=r(),T=L(U,!0);I(U),p(()=>V(T,S(P0))),j(W,U)},K1=(W)=>{var U=L1(),T=L(U,!0);I(U),p(()=>V(T,S(T1))),j(W,U)};H(g,(W)=>{if(S(P0))W(Y1);else if(S(T1))W(K1,1)})}I(x),q(x,()=>i(gS));var a=C(x,2),Y=C(L(a),2),G=L(Y);O(G);var k=C(G,2);t(k,{type:"submit",get disabled(){return S(Rf)},children:(W,U)=>{F();var T=m("Save");j(W,T)},$$slots:{default:!0}}),I(Y);var z1=C(Y,2);{var N1=(W)=>{var U=r(),T=L(U,!0);I(U),p(()=>V(T,S(H0))),j(W,U)},R1=(W)=>{var U=L1(),T=L(U,!0);I(U),p(()=>V(T,S(b1))),j(W,U)};H(z1,(W)=>{if(S(H0))W(N1);else if(S(b1))W(R1,1)})}I(a),q(a,()=>i(uS)),p(()=>{v(l,"placeholder",S(K0)?"•••••••• (saved)":"ghp_… / gho_…"),v(G,"placeholder",S(F0)?"•••••••• (saved)":"sk-ant-oat…")}),u(l,()=>S(R0),(W)=>N(R0,W)),u(G,()=>S(D0),(W)=>N(D0,W)),j(f,y)};H(BI,(f)=>{if(S(f1)&&!S($))f(lI)})}I(d1);var v1=C(d1,2);let SS;var r1=L(v1),_0=L(r1),IS=L(_0);M1(IS,{size:18});var LS=C(IS,2),n0=L(LS),OI=C(L(n0));{var kI=(f)=>{var y=F9();j(f,y)};H(OI,(f)=>{if(S(f1))f(kI)})}I(n0);var yS=C(n0,2),TI=L(yS);{var bI=(f)=>{var y=m(`Not available while "Set tokens manually" is enabled — these modes are mutually
23
- incompatible.`);j(f,y)},qI=(f)=>{var y=D9();F(2),j(f,y)};H(TI,(f)=>{if(S(f1))f(bI);else f(qI,-1)})}I(yS),I(LS),I(_0);var NS=C(_0,2),$1=L(NS);O($1),F(2),I(NS),I(r1),q(r1,()=>i(sS));var CS=C(r1,2);{var iI=(f)=>{var y=Z0(),x=L(y),X=L(x,!0);I(x),I(y),p(()=>V(X,S(U0))),j(f,y)};H(CS,(f)=>{if(S(U0))f(iI)})}var hI=C(CS,2);{var EI=(f)=>{var y=H9(),x=B1(y),X=C(L(x),2),l=L(X);O(l);var d=C(l,2);t(d,{type:"submit",get disabled(){return S(Df)},children:(Z,D)=>{F();var b=m("Save");j(Z,b)},$$slots:{default:!0}}),I(X);var g=C(X,2);{var Y1=(Z)=>{var D=r(),b=L(D,!0);I(D),p(()=>V(b,S(M0))),j(Z,D)},K1=(Z)=>{var D=L1(),b=L(D,!0);I(D),p(()=>V(b,S(q1))),j(Z,D)};H(g,(Z)=>{if(S(M0))Z(Y1);else if(S(q1))Z(K1,1)})}I(x),q(x,()=>i(dS));var a=C(x,2),Y=C(L(a),2),G=L(Y);O(G);var k=C(G,2);t(k,{type:"submit",get disabled(){return S(Hf)},children:(Z,D)=>{F();var b=m("Save");j(Z,b)},$$slots:{default:!0}}),I(Y);var z1=C(Y,2);{var N1=(Z)=>{var D=r(),b=L(D,!0);I(D),p(()=>V(b,S(O0))),j(Z,D)},R1=(Z)=>{var D=L1(),b=L(D,!0);I(D),p(()=>V(b,S(i1))),j(Z,D)};H(z1,(Z)=>{if(S(O0))Z(N1);else if(S(i1))Z(R1,1)})}I(a),q(a,()=>i(eS));var W=C(a,2),U=C(L(W),2),T=L(U),C1=C(L(T),2);O(C1),I(T);var P1=C(T,2),S1=C(L(P1),2);O(S1),I(P1);var F1=C(P1,2),j1=C(L(F1),2);O(j1),I(F1);var jf=C(F1,2),JS=C(L(jf),2);O(JS),I(jf);var Af=C(jf,2),QS=C(L(Af),2);O(QS),I(Af);var VS=C(Af,2),_I=L(VS);t(_I,{type:"submit",get disabled(){return S(kf)},children:(Z,D)=>{F();var b=m("Save models");j(Z,b)},$$slots:{default:!0}}),I(VS),I(U);var nI=C(U,2);{var f9=(Z)=>{var D=r(),b=L(D,!0);I(D),p(()=>V(b,S(k0))),j(Z,D)},S9=(Z)=>{var D=L1(),b=L(D,!0);I(D),p(()=>V(b,S(h1))),j(Z,D)};H(nI,(Z)=>{if(S(k0))Z(f9);else if(S(h1))Z(S9,1)})}I(W),q(W,()=>i(aS)),p(()=>v(G,"placeholder",S(l0)?"•••••••• (saved)":"sk-…")),u(l,()=>S(Ff),(Z)=>N(Ff,Z)),u(G,()=>S(B0),(Z)=>N(B0,Z)),u(C1,()=>S(Uf),(Z)=>N(Uf,Z)),u(S1,()=>S(Mf),(Z)=>N(Mf,Z)),u(j1,()=>S(Bf),(Z)=>N(Bf,Z)),u(JS,()=>S(lf),(Z)=>N(lf,Z)),u(QS,()=>S(Of),(Z)=>N(Of,Z)),j(f,y)};H(hI,(f)=>{if(S($))f(EI)})}I(v1);var ff=C(v1,2),o1=L(ff),Sf=L(o1),cI=L(Sf);A0(cI,{size:18}),F(2),I(Sf);var xS=C(Sf,2),_1=L(xS);O(_1),F(2),I(xS),I(o1),q(o1,()=>i(vS));var wS=C(o1,2);{var mI=(f)=>{var y=Z0(),x=L(y),X=L(x,!0);I(x),I(y),p(()=>V(X,S(T0))),j(f,y)};H(wS,(f)=>{if(S(T0))f(mI)})}var tI=C(wS,2);{var gI=(f)=>{var y=B9(),x=L(y);A1(x,20,()=>S(x1),(Y)=>Y,(Y,G)=>{var k=U9(),z1=L(k);A1(z1,16,()=>S(x1).filter((S1)=>S1!==G),(S1)=>S1,(S1,F1)=>{var j1=DS();O(j1),p(()=>Vf(j1,F1)),j(S1,j1)});var N1=C(z1,2),R1=L(N1,!0);I(N1);var W=C(N1,2);let U;var T=L(W,!0);I(W);var C1=C(W,2),P1=L(C1);MS(P1,{size:13}),I(C1),I(k),q(k,()=>i($S(G))),p(()=>{V(R1,G),U=Z1(W,1,"var-status svelte-1n6ht58",null,U,{present:S(w1)[G]}),v(W,"title",S(w1)[G]?"Set on this host — will be injected":"Not set on this host — will be skipped"),V(T,S(w1)[G]?"set":"missing"),C1.disabled=S(c1),v(C1,"aria-label",`Remove ${G}`)}),j(Y,k)},(Y)=>{var G=M9();j(Y,G)}),I(x);var X=C(x,2),l=L(X);A1(l,16,()=>S(x1),(Y)=>Y,(Y,G)=>{var k=DS();O(k),p(()=>Vf(k,G)),j(Y,k)});var d=C(l,2);O(d);var g=C(d,2);t(g,{type:"submit",get icon(){return US},get disabled(){return S(c1)},children:(Y,G)=>{F();var k=m("Add");j(Y,k)},$$slots:{default:!0}}),I(X),q(X,()=>i(rS));var Y1=C(X,2);{var K1=(Y)=>{var G=r(),k=L(G,!0);I(G),p(()=>V(k,S(y1))),j(Y,G)},a=(Y)=>{var G=L1(),k=L(G,!0);I(G),p(()=>V(k,S(G1))),j(Y,G)};H(Y1,(Y)=>{if(S(y1))Y(K1);else if(S(G1))Y(a,1)})}I(y),u(d,()=>S(b0),(Y)=>N(b0,Y)),j(f,y)};H(tI,(f)=>{if(S(E1))f(gI)})}I(ff);var If=C(ff,2),zS=L(If),Lf=L(zS),uI=L(Lf);I0(uI,{size:18}),F(2),I(Lf);var sI=C(Lf,2);pf(sI,{}),I(zS),I(If);var yf=C(If,2),jS=L(yf),Nf=L(jS),dI=L(Nf);S0(dI,{size:18}),F(2),I(Nf);var AS=C(Nf,2),Cf=L(AS);O(Cf),F(2),I(AS),I(jS),I(yf);var xf=C(yf,2),wf=L(xf),zf=L(wf),eI=L(zf);f0(eI,{size:18}),F(2),I(zf);var aI=C(zf,2);{var vI=(f)=>{var y=l9();j(f,y)},rI=(f)=>{t(f,{type:"submit",variant:"danger",children:(y,x)=>{F();var X=m("Delete & shut down");j(y,X)},$$slots:{default:!0}})};H(aI,(f)=>{if(S(Q))f(vI);else f(rI,-1)})}I(wf),q(wf,()=>i(_S)),I(xf);var ZS=C(xf,2);Jf(ZS,{});var pS=C(ZS,2),$I=L(pS);I(pS),I(hf),I(q0);var oI=C(q0,2);BS(oI,{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;"}}),p(()=>{p1(u1,S(J0)),u1.disabled=S(Gf),rf=Z1(d1,1,"card svelte-1n6ht58",null,rf,{"disabled-card":S($)}),p1(a1,S(f1)),a1.disabled=S(Yf)||S($),SS=Z1(v1,1,"card svelte-1n6ht58",null,SS,{"disabled-card":S(f1)}),p1($1,S($)),$1.disabled=S(Pf)||S(f1),p1(_1,S(E1)),_1.disabled=S(Tf),p1(Cf,S(J)),V($I,`Codebay v${z.version??""}`)}),u(c0,()=>S(E),(f)=>N(E,f)),u(s0,()=>S(n),(f)=>N(n,f)),I1("change",u1,(f)=>{N(J0,f.currentTarget.checked,!0),f.currentTarget.form?.requestSubmit()}),I1("change",a1,(f)=>{N(f1,f.currentTarget.checked,!0),f.currentTarget.form?.requestSubmit()}),I1("change",$1,(f)=>{N($,f.currentTarget.checked,!0),f.currentTarget.form?.requestSubmit()}),I1("change",_1,(f)=>{N(E1,f.currentTarget.checked,!0),f.currentTarget.form?.requestSubmit()}),I1("change",Cf,(f)=>oS(f.currentTarget.checked)),j(A,bf),x0()}w0(["change"]);bS("SettingsView_8hmarwmf8onq",Xf);
@@ -1,2 +0,0 @@
1
- import{A as k,B as x,D as v,F as S,G as y,H as _,Ia as a,Ma as T,Oa as t,P as l,X as W,Y as w,Z as I,ga as r,oa as N,qa as L,ra as d,ua as E,va as z,xa as A,z as C,za as P}from"/_mochi/client/chunk-qxwt25hn.js";v();var O={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"},g=O;var $=(s)=>{for(let e in s)if(e.startsWith("aria-")||e==="role"||e==="title")return!0;return!1};var Q=Symbol("lucide-context");var b=()=>S(Q);var R=new Set(["$$slots","$$events","$$legacy","name","color","size","strokeWidth","absoluteStrokeWidth","iconNode","children"]),U=N("<svg><!><!></svg>");function V(s,e){y(e,!0);let o=b()??{},j=t(e,"color",19,()=>o.color??"currentColor"),n=t(e,"size",19,()=>o.size??24),h=t(e,"strokeWidth",19,()=>o.strokeWidth??2),B=t(e,"absoluteStrokeWidth",19,()=>o.absoluteStrokeWidth??!1),q=t(e,"iconNode",19,()=>[]),u=T(e,R),D=l(()=>B()?Number(h())*24/Number(n()):h());var i=U();a(i,(c)=>({...g,...c,...u,width:n(),height:n(),stroke:j(),"stroke-width":r(D),class:["lucide-icon lucide",o.class,e.name&&`lucide-${e.name}`,e.class]}),[()=>!e.children&&!$(u)&&{"aria-hidden":"true"}]);var f=W(i);z(f,17,q,E,(c,G)=>{var p=l(()=>k(r(G),2));let H=()=>r(p)[0],J=()=>r(p)[1];var m=L(),K=w(m);P(K,H,!0,(M,X)=>{a(M,()=>({...J()}))}),d(c,m)});var F=I(f);A(F,()=>e.children??C),x(i),d(s,i),_()}
2
- export{V as y};
@@ -1 +0,0 @@
1
- import{y as o}from"/_mochi/client/chunk-04qv4w6w.js";import{Ma as e,Na as t}from"/_mochi/client/chunk-qxwt25hn.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 x};
@@ -1,2 +0,0 @@
1
- import{B as p,Ba as P,X as R,ba as q,na as w,ra as B,sa as H}from"/_mochi/client/chunk-qxwt25hn.js";function G($){let h=`/p/${$.id}/`;return $.remote_workspace_folder?`${h}?folder=${encodeURIComponent($.remote_workspace_folder)}`:h}var z=w("<span> </span>");function C($,h){let x={creating:"Booting…",running:"Running",stopped:"Stopped",error:"Error"};var t=z(),_=R(t,!0);p(t),q(()=>{P(t,1,`status ${h.status??""}`,"svelte-1hqr9xd"),H(_,x[h.status])}),B($,t)}function Q($){return`http://${typeof window>"u"?"localhost":window.location.hostname}:${$}`}function D($,h,x){let t=null,_=null,u=!1,S=()=>{let j=location.protocol==="https:"?"wss:":"ws:";t=new WebSocket(`${j}//${location.host}${$}`),t.onopen=()=>x?.(),t.onmessage=(r)=>h(r.data),t.onclose=()=>{if(!u)_=setTimeout(S,1000)},t.onerror=()=>t?.close()};return S(),()=>{if(u=!0,_)clearTimeout(_);t?.close()}}function V($,h){return D("/api/stream",(x)=>{let t;try{t=JSON.parse(x)}catch{return}$(t)},h)}async function F($,h,x="Request failed"){let t=await fetch($,{...h,headers:{...h?.headers,["X-Codebay-Request"]:"1"}});if(!t.ok){let _=await t.json().catch(()=>null);throw Error(_?.error?.message??x)}return await t.json().catch(()=>({}))}function X($,h,x){return U("POST",$,h,x)}function Y($,h,x){return U("DELETE",$,h,x)}function U($,h,x,t){return F(h,x===void 0?{method:$}:{method:$,headers:{"Content-Type":"application/json"},body:JSON.stringify(x)},t)}
2
- export{G as p,C as q,Q as r,D as s,V as t,F as u,X as v,Y as w};
@@ -1,2 +0,0 @@
1
- import{y as Ft}from"/_mochi/client/chunk-04qv4w6w.js";import{$ as G,B as b,Ba as U,C as Ve,Ca as P,Da as St,E as Lt,G as L,H as Q,Ha as Et,I as it,Ia as dt,J as bt,K as j,Ka as Xt,L as Ut,La as N,M as wt,Ma as $t,Na as at,Oa as d,P as V,Pa as Zt,Qa as Jt,S as et,T as R,U as T,X as q,Y as S,Z as W,_ as je,aa as w,ba as C,ga as s,ha as J,ia as M,ka as pt,la as zt,ma as De,na as x,pa as Kt,qa as E,ra as f,sa as gt,ta as H,ua as tr,va as Mt,wa as ht,xa as nt,ya as Z,z as st}from"/_mochi/client/chunk-qxwt25hn.js";var ar=new Set(["$$slots","$$events","$$legacy"]);function ct(e,t){let r=$t(t,ar),a=[["path",{d:"M15 21v-8a1 1 0 0 0-1-1h-4a1 1 0 0 0-1 1v8"}],["path",{d:"M3 10a2 2 0 0 1 .709-1.528l7-6a2 2 0 0 1 2.582 0l7 6A2 2 0 0 1 21 10v9a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z"}]];Ft(e,at({name:"house"},()=>r,{get iconNode(){return a}}))}var or=x('<header class="bar svelte-fcv4i8"><a class="home svelte-fcv4i8" href="/" title="All instances" aria-label="All instances"><!></a> <!></header>');function pr(e,t){var r=or(),a=q(r),n=q(a);ct(n,{size:18}),b(a);var i=W(a,2);nt(i,()=>t.children??st),b(r),f(e,r)}Lt();function Ct(e,t,r,a){var n,i,o=!1,c=r.length>=2,l=(m,p,_)=>{if(n=p,c)i=m;if(!o){let h=t(m,p,_);if(t.length<2)p(h);else return h}o=!1},u=bt(e,l,a),y=!Array.isArray(e);function $(m){var p=r(m,i);if(y)o=!0,e.set(p);else p.forEach((_,h)=>{o=!0,e[h].set(_)});o=!1}var A=!1;function v(m){var p,_,h,g;if(A){g=m(j(u)),n(g);return}var I=u.subscribe((z)=>{if(!A)h=z;else if(!p)p=!0;else _=!0});if(g=m(h),A=!0,n(g),I(),A=!1,_)g=j(u);if(p)$(g)}return{subscribe:u.subscribe,set(m){v(()=>m)},update:v}}var sr=20,D=it([]),qt=it(null),vt=new Map,Qt=(e)=>{if(vt.has(e))return;let t=setTimeout(()=>{vt.delete(e),Ht(e)},1000);vt.set(e,t)},nr=(e)=>{let t=vt.get(e);if(t)clearTimeout(t)};function kt(e){if(e.id)nr(e.id);D.update((t)=>t.map((r)=>r.id===e.id?{...r,...e}:r))}function ir(e){D.update((t)=>[e,...t].slice(0,sr))}function Bt(e){if(j(D).find((t)=>t.id===e.id))kt(e);else ir(e)}function Ot(e){D.update((t)=>{if(e)Qt(e);else t.forEach((r)=>{Qt(r.id)});return t.map((r)=>r.id===e||e===void 0?{...r,visible:!1}:r)})}function Ht(e){D.update((t)=>{if(e===void 0)return[];return t.filter((r)=>r.id!==e)})}function Wt(e){qt.set(e)}function Yt(e){let t;qt.update((r)=>{return t=e-(r||0),null}),D.update((r)=>r.map((a)=>({...a,pauseDuration:a.pauseDuration+t})))}var mr={blank:4000,error:4000,success:2000,loading:1/0,custom:4000};function It(e={}){return{toasts:Ct(D,(r)=>r.map((a)=>({...e,...e[a.type],...a,duration:a.duration||e[a.type]?.duration||e?.duration||mr[a.type],style:[e.style,e[a.type]?.style,a.style].join(";")})),(r)=>r),pausedAt:qt}}var lr=(e)=>typeof e==="function",ut=(e,t)=>lr(e)?e(t):e;var Gt=(()=>{let e=0;return()=>{return e+=1,e.toString()}})(),mt=(()=>{let e;return()=>{if(e===void 0&&typeof window<"u"){let t=matchMedia("(prefers-reduced-motion: reduce)");e=!t||t.matches}return e}})();var fr=(e,t="blank",r)=>({createdAt:Date.now(),visible:!0,type:t,ariaProps:{role:"status","aria-live":"polite"},message:e,pauseDuration:0,...r,id:r?.id||Gt()}),lt=(e)=>(t,r)=>{let a=fr(t,e,r);return Bt(a),a.id},Y=(e,t)=>lt("blank")(e,t);Y.error=lt("error");Y.success=lt("success");Y.loading=lt("loading");Y.custom=lt("custom");Y.dismiss=(e)=>{Ot(e)};Y.remove=(e)=>Ht(e);Y.promise=(e,t,r)=>{let a=Y.loading(t.loading,{...r,...r?.loading});return e.then((n)=>{return Y.success(ut(t.success,n),{id:a,...r,...r?.success}),n}).catch((n)=>{Y.error(ut(t.error,n),{id:a,...r,...r?.error})}),e};var ft=Y;function dr(e,t,r){let{reverseOrder:a,gutter:n=8,defaultPosition:i}=r||{},o=t.filter((y)=>(y.position||i)===(e.position||i)&&y.height),c=o.findIndex((y)=>y.id===e.id),l=o.filter((y,$)=>$<c&&y.visible).length;return o.filter((y)=>y.visible).slice(...a?[l+1]:[0,l]).reduce((y,$)=>y+($.height||0)+n,0)}var $r={startPause(){Wt(Date.now())},endPause(){Yt(Date.now())},updateHeight:(e,t)=>{kt({id:e,height:t})},calculateOffset:dr};function At(e){let{toasts:t,pausedAt:r}=It(e),a=new Map,n,i=[r.subscribe((o)=>{if(o){for(let[,c]of a)clearTimeout(c);a.clear()}n=o}),t.subscribe((o)=>{if(n)return;let c=Date.now();for(let l of o){if(a.has(l.id))continue;if(l.duration===1/0)continue;let u=(l.duration||0)+l.pauseDuration-(c-l.createdAt);if(u<0){if(l.visible)ft.dismiss(l.id);return null}a.set(l.id,setTimeout(()=>ft.dismiss(l.id),u))}})];return Jt(()=>{for(let o of i)o()}),{toasts:t,handlers:$r}}var cr=x('<div class="svelte-1did3zw"></div>');function yt(e,t){let r=d(t,"primary",8,"#61d345"),a=d(t,"secondary",8,"#fff");var n=cr();let i;C(()=>i=P(n,"",i,{"--primary":r(),"--secondary":a()})),f(e,n)}var vr=x('<div class="svelte-1ro2ggf"></div>');function _t(e,t){let r=d(t,"primary",8,"#ff4b4b"),a=d(t,"secondary",8,"#fff");var n=vr();let i;C(()=>i=P(n,"",i,{"--primary":r(),"--secondary":a()})),f(e,n)}var ur=x('<div class="svelte-tyythq"></div>');function xt(e,t){let r=d(t,"primary",8,"#616161"),a=d(t,"secondary",8,"#e0e0e0");var n=ur();let i;C(()=>i=P(n,"",i,{"--primary":r(),"--secondary":a()})),f(e,n)}var Ar=x('<div class="animated svelte-t33qv2"> </div>'),yr=x('<div class="status svelte-t33qv2"><!></div>'),_r=x('<div class="indicator svelte-t33qv2"><!> <!></div>');function ot(e,t){L(t,!1);let r=R(),a=R(),n=R(),i=d(t,"toast",8);G(()=>(s(r),s(a),s(n),M(i())),()=>{(($)=>{T(r,$.type),T(a,$.icon),T(n,$.iconTheme)})(i())}),w();var o=E(),c=S(o);{var l=($)=>{var A=Ar(),v=q(A,!0);b(A),C(()=>gt(v,s(a))),f($,A)},u=($)=>{var A=E(),v=S(A);Z(v,()=>s(a),(m,p)=>{p(m,{})}),f($,A)},y=($)=>{var A=_r(),v=q(A);xt(v,at(()=>s(n)));var m=W(v,2);{var p=(_)=>{var h=yr(),g=q(h);{var I=(F)=>{_t(F,at(()=>s(n)))},z=(F)=>{yt(F,at(()=>s(n)))};H(g,(F)=>{if(s(r)==="error")F(I);else F(z,-1)})}b(h),f(_,h)};H(m,(_)=>{if(s(r)!=="loading")_(p)})}b(A),f($,A)};H(c,($)=>{if(typeof s(a)==="string")$(l);else if(typeof s(a)<"u")$(u,1);else if(s(r)!=="blank")$(y,2)})}f(e,o),Q()}var xr=x("<div><!></div>");function tt(e,t){L(t,!1);let r=d(t,"toast",8);N();var a=xr();dt(a,()=>({class:"message",...r().ariaProps}),void 0,void 0,void 0,"svelte-1gudbf6");var n=q(a);{var i=(c)=>{var l=Kt();C(()=>gt(l,(M(r()),J(()=>r().message)))),f(c,l)},o=(c)=>{var l=E(),u=S(l);Z(u,()=>r().message,(y,$)=>{$(y,{get toast(){return r()}})}),f(c,l)};H(n,(c)=>{if(M(r()),J(()=>typeof r().message==="string"))c(i);else c(o,-1)})}b(a),f(e,a),Q()}var gr=x("<!> <!>",1),hr=x("<div><!></div>");function Tt(e,t){L(t,!1);let r=d(t,"toast",8),a=d(t,"position",24,()=>{return}),n=d(t,"style",8,""),i=d(t,"Component",24,()=>{return}),o=R(),c=R();G(()=>(M(r()),M(a()),mt),()=>{let v=(r().position||a()||"top-center").includes("top");T(o,v?1:-1);let[m,p]=mt()?["fadeIn","fadeOut"]:["enter","exit"];T(c,r().visible?m:p)}),w(),N();var l=hr();let u;var y=q(l);{var $=(v)=>{var m=E(),p=S(m);Z(p,i,(_,h)=>{h(_,{$$slots:{icon:(g,I)=>{ot(g,{get toast(){return r()},slot:"icon"})},message:(g,I)=>{tt(g,{get toast(){return r()},slot:"message"})}}})}),f(v,m)},A=(v)=>{var m=E(),p=S(m);ht(p,t,"default",{get ToastIcon(){return ot},get ToastMessage(){return tt},get toast(){return r()}},(_)=>{var h=gr(),g=S(h);ot(g,{get toast(){return r()}});var I=W(g,2);tt(I,{get toast(){return r()}}),f(_,h)}),f(v,m)};H(y,(v)=>{if(i())v($);else v(A,-1)})}b(l),C(()=>{U(l,1,`base ${(M(r()),s(c),J(()=>r().height?s(c):"transparent"))??""} ${(M(r()),J(()=>r().className||""))??""}`,"svelte-yae3e8"),u=P(l,`${n()??""}; ${(M(r()),J(()=>r().style))??""}`,u,{"--factor":s(o)})}),f(e,l),Q()}var Tr=x("<div><!></div>");function Rt(e,t){L(t,!1);let r=R(),a=R(),n=R(),i=R(),o=d(t,"toast",8),c=d(t,"setHeight",8),l=R();Zt(()=>{c()(s(l).getBoundingClientRect().height)}),G(()=>M(o()),()=>{T(r,o().position?.includes("top")?0:null)}),G(()=>M(o()),()=>{T(a,o().position?.includes("bottom")?0:null)}),G(()=>M(o()),()=>{T(n,o().position?.includes("top")?1:-1)}),G(()=>M(o()),()=>{T(i,o().position?.includes("center")&&"center"||(o().position?.includes("right")||o().position?.includes("end"))&&"flex-end"||null)}),w(),N();var u=Tr();let y,$;var A=q(u);{var v=(p)=>{tt(p,{get toast(){return o()}})},m=(p)=>{var _=E(),h=S(_);ht(h,t,"default",{get toast(){return o()}},(g)=>{Tt(g,{get toast(){return o()},get position(){return M(o()),J(()=>o().position)}})}),f(p,_)};H(A,(p)=>{if(M(o()),J(()=>o().type==="custom"))p(v);else p(m,-1)})}b(u),Xt(u,(p)=>T(l,p),()=>s(l)),C((p)=>{y=U(u,1,"wrapper svelte-1pz3gqy",null,y,p),$=P(u,"",$,{"--factor":s(n),"--offset":(M(o()),J(()=>o().offset)),top:s(r),bottom:s(a),"justify-content":s(i)})},[()=>({active:o().visible,transition:!mt()})]),f(e,u),Q()}var Mr=x('<div role="alert"></div>');function Nt(e,t){L(t,!1);let r=()=>Ut($,"$toasts",a),[a,n]=wt(),i=d(t,"reverseOrder",8,!1),o=d(t,"position",8,"top-center"),c=d(t,"toastOptions",24,()=>{return}),l=d(t,"gutter",8,8),u=d(t,"containerStyle",24,()=>{return}),y=d(t,"containerClassName",24,()=>{return}),{toasts:$,handlers:A}=At(c()),v=R();G(()=>(r(),M(o()),M(i()),M(l())),()=>{T(v,r().map((p)=>({...p,position:p.position||o(),offset:A.calculateOffset(p,r(),{reverseOrder:i(),gutter:l(),defaultPosition:o()})})))}),w(),N();var m=Mr();Mt(m,5,()=>s(v),(p)=>p.id,(p,_)=>{Rt(p,{get toast(){return s(_)},setHeight:(h)=>A.updateHeight(s(_).id,h)})}),b(m),C(()=>{U(m,1,`toaster ${(y()||"")??""}`,"svelte-haq5xk"),P(m,u())}),pt("mouseenter",m,function(...p){A.startPause?.apply(this,p)}),pt("mouseleave",m,function(...p){A.endPause?.apply(this,p)}),f(e,m),Q(),n()}var $p=ft;var zr=new Set(["$$slots","$$events","$$legacy","variant","size","ghost","icon","iconSize","href","disabled","onclick","children"]),br=x("<a><!> <!></a>"),Cr=x("<button><!> <!></button>");function qr(e,t){let r=d(t,"variant",3,"default"),a=d(t,"size",3,"md"),n=d(t,"ghost",3,!1),i=d(t,"disabled",3,!1),o=$t(t,zr),c=V(()=>t.icon),l=V(()=>t.iconSize??(a()==="lg"?18:a()==="sm"?13:15));var u=E(),y=S(u);{var $=(v)=>{var m=br();dt(m,()=>({class:`btn ${r()??""} ${a()??""}`,href:i()?void 0:t.href,"aria-disabled":i()||void 0,tabindex:i()?-1:void 0,...o,[St]:{ghost:n()}}),void 0,void 0,void 0,"svelte-1klcfz0");var p=q(m);{var _=(g)=>{var I=E(),z=S(I);Z(z,()=>s(c),(F,rt)=>{rt(F,{get size(){return s(l)}})}),f(g,I)};H(p,(g)=>{if(s(c))g(_)})}var h=W(p,2);nt(h,()=>t.children??st),b(m),f(v,m)},A=(v)=>{var m=Cr();dt(m,()=>({class:`btn ${r()??""} ${a()??""}`,onclick:t.onclick,disabled:i(),...o,[St]:{ghost:n()}}),void 0,void 0,void 0,"svelte-1klcfz0");var p=q(m);{var _=(g)=>{var I=E(),z=S(I);Z(z,()=>s(c),(F,rt)=>{rt(F,{get size(){return s(l)}})}),f(g,I)};H(p,(g)=>{if(s(c))g(_)})}var h=W(p,2);nt(h,()=>t.children??st),b(m),f(v,m)};H(y,(v)=>{if(t.href)v($);else v(A,-1)})}f(e,u)}var kr={name:"anchor",pixels:["...##...","..#..#..","..#..#..",".######.","...##...","#..##..#","########",".######."]},Vt=kr;var Hr={name:"bear",pixels:["##....##","###..###","########","##.##.##","########","########","###..###",".######."]},jt=Hr;var Ir={name:"bee",pixels:[".#....#.","##.##.##","#.####.#",".######.",".######.","........",".######.","..####.."]},Dt=Ir;var Rr={name:"bob-marley",pixels:["..####..",".######.","##....##","#.#..#.#","#......#","##.##.##","#.####.#","#..##..#"]},te=Rr;var Sr={name:"car",pixels:["........","..####..","..#..#..","..#..#..","########","########","########",".##..##."]},ee=Sr;var Pr={name:"carpathians",pixels:["........",".#......","......##",".....###","#...####","##.#####","###.####","####.###"]},re=Pr;var Er={name:"cat",pixels:["##....##","##....##","########","##.##.##","########","#.####.#","########",".####.##"]},ae=Er;var Fr={name:"cat-body",pixels:["....##..","#.#..###","###....#","###..###","########","########","#.#..#.#","#.#..#.#"]},oe=Fr;var Lr={name:"cat-sits",pixels:["..#..#..","..####..","..####..",".####...","####..##","####.#.#","####...#",".######."]},pe=Lr;var Qr={name:"celtic-cross",pixels:["...##...",".#.##.#.","...##...","########","########","...##...",".#.##.#.","...##..."]},se=Qr;var Br={name:"cherry",pixels:["......##","....###.","...##.#.","..#..#..",".##.##..","#.###.#.","#.###.#.",".###.#.."]},ne=Br;var Or={name:"cotton",pixels:["....##..","....##..",".##.....",".##..##.","...#.##.","....#...","...#....","...#...."]},ie=Or;var Wr={name:"crab",pixels:[".#....#.","##....##","##.##.##",".######.","########","##.##.##","##....##",".#....#."]},me=Wr;var Yr={name:"crown",pixels:["#......#","#..##..#","##.##.##","##.##.##","########","#.#.#.#.","########","########"]},le=Yr;var Gr={name:"diamond",pixels:[".######.","#.#..#.#","########","##.##.##",".#.##.#.",".##..##.","..####..","...##..."]},fe=Gr;var Jr={name:"dog",pixels:["##....##","##.##.##","########","###..###","########","########","##.##.##",".######."]},de=Jr;var Kr={name:"elephant",pixels:["...###..",".#####..","####.#..","######..","######.#","##.##.#.","##.##...","##.##..."]},$e=Kr;var Xr={name:"fish",pixels:["......#.",".###.##.","#####.##","#.#####.","#.#####.","#####.##",".###.##.","......#."]},ce=Xr;var Zr={name:"fleur-de-lis",pixels:["...##...","...#....",".###.##.","#.##...#","...##...",".#.##.#.",".######.","...##..."]},ve=Zr;var Ur={name:"flower",pixels:["..#..#..",".###.##.","########",".######.","..####..","...##...","..##.##.","...##..."]},ue=Ur;var wr={name:"fox",pixels:["##....##","##....##","########","###..###","########","########",".######.","..####.."]},Ae=wr;var Nr={name:"frog",pixels:[".#....#.","###..###","########","########","########","########",".######.","..####.."]},ye=Nr;var Vr={name:"ghost",pixels:["..####..",".######.","##.##.##","##.##.##","########","########","########","#.##.##."]},_e=Vr;var jr={name:"giraffe",pixels:["....#.#.","....####","....#...","....#...","....#...","....#...","#####...","##.##..."]},xe=jr;var Dr={name:"glasses",pixels:["##..##..","#.#.##.#",".#######","........",".##..##.",".##..##.","#..##..#","########"]},ge=Dr;var ta={name:"heart",pixels:[".##..##.","########","########","########",".######.","..####..","...##...","........"]},he=ta;var ea={name:"invader",pixels:["#......#",".#....#.","########","##.##.##","########","..####..",".##..##.","#.#..#.#"]},Te=ea;var ra={name:"kangaroo",pixels:["..#.#...","..###...",".####...","...##...","..#####.","...####.","...##.#.","..###..#"]},Me=ra;var aa={name:"key",pixels:[".####...","##..##..","##..##..","##..##..",".####...","..##....","..####..","..##.##."]},ze=aa;var oa={name:"lightning",pixels:["...#####","..####..",".####...",".#######","..######","...#####","..####..",".###...."]},be=oa;var pa={name:"mushroom",pixels:["..####..",".######.","########","########","########","..####..","..####..",".######."]},Ce=pa;var sa={name:"octopus",pixels:["..####..",".######.","###..###","########","########","########",".######.","#.#.#.#."]},qe=sa;var na={name:"owl",pixels:["#......#","##....##",".######.",".#.##.#.",".#.##.#.",".######.",".######.","..#..#.."]},ke=na;var ia={name:"penguin",pixels:["..####..",".######.",".##..##.",".#.##.#.","##...##.","##...##.","#######.",".#....#."]},He=ia;var ma={name:"planet",pixels:["...###..","..#####.","#.#####.",".#######","..#####.","..####..",".###....","........"]},Ie=ma;var la={name:"rabbit",pixels:[".#....#.",".##..##.",".##..##.","..####..",".######.","###..###","#..##..#",".######."]},Re=la;var fa={name:"rat",pixels:["...#.#..","...#####","...#.#..","..###...",".####.#.","#####..#","####..#.",".#####.."]},Se=fa;var da={name:"robot",pixels:["...##...","...#....",".######.","#.####.#","#..##..#",".######.",".#####..",".######."]},Pe=da;var $a={name:"rocket",pixels:["...##...","..####..","..#..#..","..####..",".######.","##.##.##","..#..#..","...##..."]},Ee=$a;var ca={name:"sea",pixels:["#.#.....",".#..#.#.",".....#..","...#....","........","########",".##..###","##.###.."]},Fe=ca;var va={name:"skull",pixels:[".######.","########","#.####.#","#.#..#.#","########","##.##.##",".#.##.#.",".##.##.."]},Le=va;var ua={name:"snail",pixels:[".####..#","#....#.#","#.##.#.#","#.#..#.#","#....##.","#...#.#.","######.#",".######."]},Qe=ua;var Aa={name:"snake",pixels:["...###..",".###..#.","#.#..#..","##..#..#","...#..#.","..#...##",".#.....#",".######."]},Be=Aa;var ya={name:"snakegame",pixels:["########","#......#","#.##...#","#.#..#.#","#.##...#","#..##..#","#......#","########"]},Oe=ya;var _a={name:"star",pixels:["...##...","...##...","########",".######.",".######.",".##..##.","##....##","#......#"]},We=_a;var xa={name:"svelte",pixels:["..#####.",".###..#.","##...#..","########","########","..#...##",".#..###.",".####..."]},Ye=xa;var ga={name:"target",pixels:["..####..",".#....#.","#......#","#..##..#","#..##..#","#......#",".#....#.","..####.."]},Ge=ga;var ha={name:"tree",pixels:["...##...","..####..",".######.","..####..",".######.","########","...##...","...##..."]},Je=ha;var Ta={name:"ukraine",pixels:["...##...","#..##..#","##.##.##","#..##..#","##.##.##","#..##..#","########","...##..."]},Ke=Ta;var Ma={name:"whale",pixels:["....#...","...###..","..####.#",".#.####.","######.#",".#####..","..####..","...##..."]},Xe=Ma;var za={name:"wheat",pixels:["........","....#.#.","...#.#..","..#.#.#.","..##.#..","..###...",".#......","#......."]},Ze=za;var ba={name:"yinyan",pixels:[".......#",".##...##",".##..###","....####","...#####","..###..#",".####..#","########"]},Ue=ba;var cs=0,vs=1,us=8,As=8;function Pt(e){let t=[];for(let r of e.pixels)for(let a of r)t.push(a==="#"?1:0);return t}var we=[Vt,jt,Dt,te,ee,re,ae,oe,pe,se,ne,ie,me,le,fe,de,$e,ce,ve,ue,Ae,ye,_e,xe,ge,he,Te,Me,ze,be,Ce,qe,ke,He,Ie,Re,Se,Pe,Ee,Fe,Le,Qe,Be,Oe,We,Ye,Ge,Je,Ke,Xe,Ze,Ue];function Ca(e){let t=2166136261;for(let r=0;r<e.length;r++)t^=e.charCodeAt(r),t=Math.imul(t,16777619);return t>>>0}function Ne(e){return we[Ca(e)%we.length]}var qa=x("<span></span>"),ka=x('<span class="invert svelte-1pre9qb" aria-hidden="true"></span> <span class="bloom svelte-1pre9qb" aria-hidden="true"></span>',1),Ha=x('<span role="img"><!> <!></span>');function Ia(e,t){L(t,!0);let r=d(t,"id",3,""),a=d(t,"scale",3,6),n=d(t,"interactive",3,!1),i=et(!1),o=et(!1),c=et("50%"),l=et("50%"),u=et(0),y=et(0),$;function A(k){let B=k.currentTarget.getBoundingClientRect(),K=(k.clientX-B.left)/B.width,X=(k.clientY-B.top)/B.height;T(c,K*100+"%"),T(l,X*100+"%"),T(y,(K*360+X*140)%360),T(u,(X*300-K*120+360)%360)}function v(k){if(!n())return;k.currentTarget.setPointerCapture?.(k.pointerId),A(k),clearTimeout($),T(o,!1),T(i,!0)}function m(k){if(s(i))A(k)}function p(){if(!s(i))return;T(i,!1),T(o,!0),clearTimeout($),$=setTimeout(()=>T(o,!1),250)}je(()=>()=>clearTimeout($));let _=V(()=>Math.max(1,Math.round(a()))),h=V(()=>s(_)>=2?0.5:0),g=V(()=>Pt(t.art??Ne(r()))),I=V(()=>Array.from({length:100},(k,B)=>{let K=Math.floor(B/10),X=B%10;return K>=1&&K<=8&&X>=1&&X<=8?s(g)[(K-1)*8+(X-1)]:0}));var z=Ha();let F;var rt=q(z);Mt(rt,17,()=>s(I),tr,(k,B)=>{var K=qa();let X;C(()=>X=U(K,1,"px svelte-1pre9qb",null,X,{on:s(B)===1})),f(k,K)});var er=W(rt,2);{var rr=(k)=>{var B=ka();Ve(2),f(k,B)};H(er,(k)=>{if(n())k(rr)})}b(z),C(()=>{F=U(z,1,"avatar svelte-1pre9qb",null,F,{interactive:n(),pressed:s(i),ghosting:s(o)}),Et(z,"aria-label",t.name),Et(z,"title",t.name),P(z,`width:${10*s(_)}px;height:${10*s(_)}px;--gap:${s(h)??""}px;--bx:${s(c)??""};--by:${s(l)??""};--spin:${s(u)??""}deg;--hue:${s(y)??""}deg`)}),zt("pointerdown",z,v),zt("pointermove",z,m),zt("pointerup",z,p),pt("pointercancel",z,p),pt("lostpointercapture",z,p),f(e,z),Q()}De(["pointerdown","pointermove","pointerup"]);
2
- export{pr as f,Nt as g,$p as h,qr as i,cs as j,vs as k,us as l,As as m,we as n,Ia as o};
@@ -1 +0,0 @@
1
- .brand.svelte-94cd8h{display:inline-flex;font-family:var(--font-display);text-transform:uppercase;letter-spacing:.04em;color:inherit;text-decoration:none;align-items:baseline;gap:11px;font-size:22px;font-weight:700}.logo.svelte-94cd8h{display:inline-flex;align-self: center;align-items: center}.tagline.svelte-94cd8h{font-family:var(--font-sans);letter-spacing:.08em;color:var(--ink-soft);font-size:12px;font-weight:500}@media (max-width:640px){.tagline.svelte-94cd8h{display:none}}
@@ -1 +0,0 @@
1
- .page.svelte-1n6ht58{display:flex;flex-direction:column;min-height:100vh}.title.svelte-1n6ht58{display:inline-flex;font-family:var(--font-mono);text-transform:uppercase;letter-spacing:.08em;color:var(--ink-soft);align-items: center;padding:0 14px;font-size:12px}.content.svelte-1n6ht58{display:flex;flex-direction:column;flex:1;align-items: center;gap:16px;padding:32px 20px}.card.svelte-1n6ht58{background:var(--bg-card);border:1px solid var(--rule);width:100%;max-width:560px;height:max-content}.danger-card.svelte-1n6ht58{border-color:var(--danger)}.disabled-card.svelte-1n6ht58{opacity:.55;pointer-events:none}.danger-card.svelte-1n6ht58 .btn{white-space:nowrap;flex:none}.version.svelte-1n6ht58{font-family:var(--font-mono);letter-spacing:.08em;color:var(--ink-soft);font-size:11px}.shutting.svelte-1n6ht58{font-family:var(--font-mono);color:var(--danger);text-align:right;flex:none;max-width:200px;font-size:12px;line-height:1.4}.row.svelte-1n6ht58{display:flex;justify-content:space-between;align-items: center;gap:16px;padding:18px}.row.divided.svelte-1n6ht58{border-top:1px solid var(--rule);align-items: flex-start}.row.divided.svelte-1n6ht58 .btn{white-space:nowrap;flex:none}.sub.svelte-1n6ht58{padding:0 18px 14px}code.svelte-1n6ht58{font-family:var(--font-mono);background:var(--bg);border:1px solid var(--rule);border-radius:3px;padding:1px 4px;font-size:.92em}.label.svelte-1n6ht58{display:flex;color:var(--ink);align-items: flex-start;gap:12px;min-width:0}.text.svelte-1n6ht58{min-width:0}.name.svelte-1n6ht58{font-family:var(--font-mono);text-transform:uppercase;letter-spacing:.06em;font-size:13px}.arch.svelte-1n6ht58{letter-spacing:.04em;color:var(--ink-soft);border:1px solid var(--rule);vertical-align:middle;border-radius:3px;margin-left:8px;padding:2px 6px;font-size:11px}.tip.svelte-1n6ht58{color:var(--ink-soft);background:color-mix(in srgb,var(--info)10%,transparent);border:1px solid color-mix(in srgb,var(--info)35%,transparent);border-radius:4px;width:100%;margin-top:4px;padding:8px 10px}.desc.svelte-1n6ht58{font-family:var(--font-mono);color:var(--ink-faint);margin-top:4px;font-size:12px;line-height:1.4}.image-row.svelte-1n6ht58,.token-row.svelte-1n6ht58{flex-wrap:wrap}.image-controls.svelte-1n6ht58{display:flex;flex:1;justify-content:flex-end;align-items: center;gap:8px;min-width:220px}.image-input.svelte-1n6ht58{font-family:var(--font-mono);color:var(--ink);background:var(--bg);border:1px solid var(--rule);flex:1;min-width:0;padding:8px 10px;font-size:12px}.image-input.svelte-1n6ht58:focus-visible{outline:2px solid var(--ink);outline-offset:1px}.image-controls.svelte-1n6ht58 .btn{flex:none}.msg.svelte-1n6ht58{font-family:var(--font-mono);width:100%;margin-top:2px;font-size:12px;line-height:1.4}.msg.error.svelte-1n6ht58{color:var(--danger)}.msg.ok.svelte-1n6ht58{color:var(--ink-soft)}.switch.svelte-1n6ht58{position:relative;cursor:pointer;flex:none}.switch.svelte-1n6ht58 input:where(.svelte-1n6ht58){position:absolute;opacity:0;cursor:pointer;margin:0;inset:0}.track.svelte-1n6ht58{display:block;border:1px solid var(--rule);background:var(--bg);border-radius:999px;width:44px;height:24px;transition:background .15s}.thumb.svelte-1n6ht58{display:block;background:var(--ink-faint);border-radius:999px;width:18px;height:18px;margin:2px;transition:transform .15s,background .15s}.switch.svelte-1n6ht58 input:where(.svelte-1n6ht58):checked+.track:where(.svelte-1n6ht58){background:var(--switch-on-bg)}.switch.svelte-1n6ht58 input:where(.svelte-1n6ht58):checked+.track:where(.svelte-1n6ht58) .thumb:where(.svelte-1n6ht58){background:var(--ink);transform:translate(20px)}.switch.svelte-1n6ht58 input:where(.svelte-1n6ht58):focus-visible+.track:where(.svelte-1n6ht58){outline:2px solid var(--ink);outline-offset:2px}.model-fields.svelte-1n6ht58{display:flex;flex-direction:column;flex:1;gap:6px;min-width:220px}.model-row.svelte-1n6ht58{display:flex;align-items: center;gap:8px}.model-label.svelte-1n6ht58{font-family:var(--font-mono);color:var(--ink-soft);text-align:right;flex:none;width:72px;font-size:11px}.model-row.svelte-1n6ht58 .image-input:where(.svelte-1n6ht58){flex:1}.model-save-row.svelte-1n6ht58{display:flex;justify-content:flex-end;margin-top:4px}.var-row.svelte-1n6ht58{flex-direction:column;align-items:stretch;gap:10px}.var-list.svelte-1n6ht58{display:flex;flex-direction:column;gap:6px}.var-item.svelte-1n6ht58{display:flex;background:var(--bg);border:1px solid var(--rule);align-items: center;gap:8px;padding:6px 8px}.var-name.svelte-1n6ht58{font-family:var(--font-mono);color:var(--ink);word-break:break-all;flex:1;min-width:0;font-size:12px}.var-status.svelte-1n6ht58{font-family:var(--font-mono);letter-spacing:.04em;color:var(--danger);flex:none;font-size:11px}.var-status.present.svelte-1n6ht58{color:var(--ink-soft)}.var-remove.svelte-1n6ht58{display:inline-flex;color:var(--ink-soft);border:1px solid var(--rule);cursor:pointer;background:0 0;flex:none;justify-content:center;align-items: center;width:22px;height:22px;padding:0}.var-remove.svelte-1n6ht58:hover:not(:disabled){color:var(--danger);border-color:var(--danger)}.var-remove.svelte-1n6ht58:disabled{opacity:.4;cursor:not-allowed}.var-empty.svelte-1n6ht58{font-family:var(--font-mono);color:var(--ink-faint);font-size:12px}.var-add.svelte-1n6ht58{display:flex;gap:8px}.var-add.svelte-1n6ht58 .btn{flex:none}