codebay 0.9.1 → 0.10.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.
- package/.mochi/manifest.json +213 -146
- package/.mochi/svelte-client/HydratableIsland-aebn1fa1.js +1 -0
- package/.mochi/svelte-client/_hydrate-AppShell_2rtnxn6pgp2rh-rx6arrv5.js +2 -0
- package/.mochi/svelte-client/{_hydrate-AvatarsView_257s9yq1wwr4f-92hepzby.js → _hydrate-AvatarsView_257s9yq1wwr4f-jpjdmgpe.js} +1 -1
- package/.mochi/svelte-client/_hydrate-InstanceView_2ma45l9bybfhl-c9y47dat.js +1 -0
- package/.mochi/svelte-client/_hydrate-SettingsView_8hmarwmf8onq-d61feq89.js +38 -0
- package/.mochi/svelte-client/{chunk-2j95sv83.js → chunk-0fjx3z3r.js} +1 -1
- package/.mochi/svelte-client/chunk-8xvr02wh.js +2 -0
- package/.mochi/svelte-client/{chunk-m497q88s.js → chunk-9143wy3j.js} +2 -2
- package/.mochi/svelte-client/{chunk-v65n8th6.js → chunk-bn731rda.js} +1 -1
- package/.mochi/svelte-client/{chunk-a2psjmrm.js → chunk-j72r8pkk.js} +2 -2
- package/.mochi/svelte-client/chunk-k37wj1jm.js +2 -0
- package/.mochi/svelte-client/{chunk-mpv3qx28.js → chunk-p20tkpde.js} +1 -1
- package/.mochi/svelte-client/chunk-pc0fm37c.js +2 -0
- package/.mochi/svelte-client/{chunk-6rbs0mhx.js → chunk-t0ap7q89.js} +1 -1
- package/.mochi/svelte-client/{chunk-rs41by6w.js → chunk-wvtkwfsh.js} +1 -1
- package/.mochi/svelte-compile/{App-7vjcp38v.server.js → App-59cdj86f.server.js} +167 -103
- package/.mochi/svelte-compile/{Avatars-e2cfc95t.server.js → Avatars-fmagfyj2.server.js} +1 -1
- package/.mochi/svelte-compile/{Instance-h78n2dsv.server.js → Instance-s1gqwzmx.server.js} +16 -10
- package/.mochi/svelte-compile/{Settings-tav2asn7.server.js → Settings-k447mt0x.server.js} +540 -88
- package/.mochi/svelte-compile/{chunk-brjv9pyd.js → chunk-3t7v4hk0.js} +1 -7
- package/.mochi/svelte-compile/chunk-gkjgybb2.js +15 -0
- package/.mochi/svelte-compile/{chunk-m8ygpyhr.js → chunk-th2dbqvc.js} +20 -32
- package/.mochi/svelte-css/Button-oharop2xz6am.css +1 -0
- package/.mochi/svelte-css/IdeBar-3bgr3m5z0lpeg.css +1 -0
- package/.mochi/svelte-css/{InstanceView-3vzow3ttxzlh3.css → InstanceView-1pd7j16bd2b16.css} +1 -1
- package/.mochi/svelte-css/SettingsView-n3oy75uonzp2.css +1 -0
- package/.mochi/svelte-css/{TopBar-2q87li6yt8ids.css → TopBar-2y76zxwehrfos.css} +1 -1
- package/migrations/0007_instance_avatar.sql +1 -0
- package/package.json +2 -2
- package/src/avatars/diamond.ts +5 -6
- package/src/avatars/index.ts +1 -16
- package/src/avatars/pick.server.ts +25 -0
- package/src/avatars/whale.ts +7 -8
- package/src/components/AppShell.svelte +29 -4
- package/src/components/Avatar.svelte +8 -8
- package/src/components/Button.svelte +22 -1
- package/src/components/DashboardView.svelte +14 -2
- package/src/components/FolderBrowser.svelte +6 -2
- package/src/components/IdeBar.svelte +56 -13
- package/src/components/IdeLoader.svelte +15 -3
- package/src/components/InstanceCard.svelte +6 -1
- package/src/components/InstanceView.svelte +33 -15
- package/src/components/SettingsView.svelte +548 -1
- package/src/components/TopBar.svelte +37 -10
- package/src/components/UiShowcase.svelte +5 -10
- package/src/container-injections/claude-aliases.ts +1 -1
- package/src/container-injections/claude-code-custom.ts +2 -1
- package/src/container-injections/claude-code-ide-extension.ts +5 -0
- package/src/container-injections/claude-code-models.ts +2 -1
- package/src/container-injections/claude-code-update.ts +62 -1
- package/src/container-injections/claude-effort-level.ts +32 -0
- package/src/container-injections/claude-permission-mode.ts +40 -0
- package/src/container-injections/custom-env-vars.ts +82 -0
- package/src/container-injections/host-env-vars.ts +2 -1
- package/src/lib/config.server.ts +3 -0
- package/src/lib/db.server.ts +8 -3
- package/src/lib/devcontainer.server.ts +129 -42
- package/src/lib/health.server.ts +55 -11
- package/src/lib/injections.server.ts +45 -38
- package/src/lib/instances.server.ts +181 -19
- package/src/lib/log-capture.server.ts +262 -0
- package/src/lib/ports.server.ts +31 -0
- package/src/lib/proxy.server.ts +2 -2
- package/src/pages/Settings.svelte +22 -1
- package/src/routes.ts +98 -2
- package/src/types.ts +36 -0
- package/.mochi/svelte-client/HydratableIsland-k6q8esj4.js +0 -1
- package/.mochi/svelte-client/_hydrate-AppShell_2rtnxn6pgp2rh-sg96rp17.js +0 -2
- package/.mochi/svelte-client/_hydrate-InstanceView_2ma45l9bybfhl-p3f649gk.js +0 -1
- package/.mochi/svelte-client/_hydrate-SettingsView_8hmarwmf8onq-dzmgmv78.js +0 -29
- package/.mochi/svelte-client/chunk-7wkvn2vx.js +0 -2
- package/.mochi/svelte-client/chunk-m4fzsd5b.js +0 -2
- package/.mochi/svelte-css/Button-2vtbrzb5kgu25.css +0 -1
- package/.mochi/svelte-css/IdeBar-10xodudcx57qr.css +0 -1
- package/.mochi/svelte-css/SettingsView-2qfauz68axro1.css +0 -1
- package/src/container-injections/claude-skip-permissions.ts +0 -28
|
@@ -3,11 +3,13 @@
|
|
|
3
3
|
import '@fontsource-variable/jetbrains-mono';
|
|
4
4
|
import SettingsView from '../components/SettingsView.svelte';
|
|
5
5
|
import type { AvatarArt } from '../avatars/index.ts';
|
|
6
|
-
import type { InstanceMode } from '../types.ts';
|
|
6
|
+
import type { ClaudeEffortLevel, ClaudePermissionMode, InstanceMode } from '../types.ts';
|
|
7
7
|
|
|
8
8
|
let {
|
|
9
9
|
pet,
|
|
10
10
|
defaultMode,
|
|
11
|
+
claudePermissionMode,
|
|
12
|
+
claudeEffortLevel,
|
|
11
13
|
defaultImage,
|
|
12
14
|
builtinImage,
|
|
13
15
|
disableBuildCache,
|
|
@@ -37,10 +39,17 @@
|
|
|
37
39
|
hostEnvVarsEnabled,
|
|
38
40
|
hostEnvVarNames,
|
|
39
41
|
hostEnvVarPresence,
|
|
42
|
+
customEnvVarsEnabled,
|
|
43
|
+
customEnvVarNames,
|
|
44
|
+
advancedSerialInjections,
|
|
45
|
+
advancedNoBuildkit,
|
|
46
|
+
advancedBlockingExtInstall,
|
|
40
47
|
version
|
|
41
48
|
}: {
|
|
42
49
|
pet?: AvatarArt;
|
|
43
50
|
defaultMode: InstanceMode;
|
|
51
|
+
claudePermissionMode: ClaudePermissionMode;
|
|
52
|
+
claudeEffortLevel: ClaudeEffortLevel;
|
|
44
53
|
defaultImage: string;
|
|
45
54
|
builtinImage: string;
|
|
46
55
|
disableBuildCache: boolean;
|
|
@@ -70,6 +79,11 @@
|
|
|
70
79
|
hostEnvVarsEnabled: boolean;
|
|
71
80
|
hostEnvVarNames: string[];
|
|
72
81
|
hostEnvVarPresence: Record<string, boolean>;
|
|
82
|
+
customEnvVarsEnabled: boolean;
|
|
83
|
+
customEnvVarNames: string[];
|
|
84
|
+
advancedSerialInjections: boolean;
|
|
85
|
+
advancedNoBuildkit: boolean;
|
|
86
|
+
advancedBlockingExtInstall: boolean;
|
|
73
87
|
version: string;
|
|
74
88
|
} = $props();
|
|
75
89
|
</script>
|
|
@@ -77,6 +91,8 @@
|
|
|
77
91
|
<SettingsView
|
|
78
92
|
{pet}
|
|
79
93
|
{defaultMode}
|
|
94
|
+
{claudePermissionMode}
|
|
95
|
+
{claudeEffortLevel}
|
|
80
96
|
{defaultImage}
|
|
81
97
|
{builtinImage}
|
|
82
98
|
{disableBuildCache}
|
|
@@ -106,6 +122,11 @@
|
|
|
106
122
|
{hostEnvVarsEnabled}
|
|
107
123
|
{hostEnvVarNames}
|
|
108
124
|
{hostEnvVarPresence}
|
|
125
|
+
{customEnvVarsEnabled}
|
|
126
|
+
{customEnvVarNames}
|
|
127
|
+
{advancedSerialInjections}
|
|
128
|
+
{advancedNoBuildkit}
|
|
129
|
+
{advancedBlockingExtInstall}
|
|
109
130
|
{version}
|
|
110
131
|
mochi:hydrate
|
|
111
132
|
/>
|
package/src/routes.ts
CHANGED
|
@@ -19,7 +19,14 @@ 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 { parseCustomEnvVars } from './container-injections/custom-env-vars.ts';
|
|
22
23
|
import { gitIdentityEnabled } from './container-injections/git-identity.ts';
|
|
24
|
+
import {
|
|
25
|
+
LATEST_CHECKED_AT_KEY,
|
|
26
|
+
LATEST_VERSION_KEY
|
|
27
|
+
} from './container-injections/claude-code-update.ts';
|
|
28
|
+
import { getClaudePermissionMode } from './container-injections/claude-permission-mode.ts';
|
|
29
|
+
import { getClaudeEffortLevel } from './container-injections/claude-effort-level.ts';
|
|
23
30
|
import { browse } from './lib/picker.server.ts';
|
|
24
31
|
import { pickNamePrompt } from './avatars/name-prompts.ts';
|
|
25
32
|
import { avatars, findAvatar } from './avatars/index.ts';
|
|
@@ -44,7 +51,8 @@ import {
|
|
|
44
51
|
stopInstance,
|
|
45
52
|
streamClose,
|
|
46
53
|
streamOpen,
|
|
47
|
-
subscribeLogs
|
|
54
|
+
subscribeLogs,
|
|
55
|
+
invalidateSecretValues
|
|
48
56
|
} from './lib/instances.server.ts';
|
|
49
57
|
import {
|
|
50
58
|
deleteFolderHistory,
|
|
@@ -58,7 +66,13 @@ import { wsUpgradeAllowed } from './lib/auth.server.ts';
|
|
|
58
66
|
import { clearAttention, setAttention } from './lib/bridge.server.ts';
|
|
59
67
|
import { timingSafeEqualStr } from './lib/crypto.server.ts';
|
|
60
68
|
import { proxyRoutes } from './lib/proxy.server.ts';
|
|
61
|
-
import {
|
|
69
|
+
import {
|
|
70
|
+
isInstanceFilter,
|
|
71
|
+
normalizeMode,
|
|
72
|
+
normalizePermissionMode,
|
|
73
|
+
normalizeEffortLevel,
|
|
74
|
+
type InstanceFilter
|
|
75
|
+
} from './types.ts';
|
|
62
76
|
|
|
63
77
|
async function preflight() {
|
|
64
78
|
const [docker, cli, auth] = await Promise.all([
|
|
@@ -187,6 +201,8 @@ export const routes: Record<string, MochiRouteValue> = {
|
|
|
187
201
|
return {
|
|
188
202
|
pet: currentPet(),
|
|
189
203
|
defaultMode: getDefaultMode(),
|
|
204
|
+
claudePermissionMode: getClaudePermissionMode(),
|
|
205
|
+
claudeEffortLevel: getClaudeEffortLevel(),
|
|
190
206
|
defaultImage: getOption('default_image') ?? DEFAULT_IMAGE,
|
|
191
207
|
builtinImage: DEFAULT_IMAGE,
|
|
192
208
|
disableBuildCache: getOption('disable_build_cache') === '1',
|
|
@@ -227,6 +243,12 @@ export const routes: Record<string, MochiRouteValue> = {
|
|
|
227
243
|
hostEnvVarsEnabled: getOption('host_env_vars_enabled') === '1',
|
|
228
244
|
hostEnvVarNames,
|
|
229
245
|
hostEnvVarPresence: hostEnvVarPresence(hostEnvVarNames),
|
|
246
|
+
// Freeform secrets: only the names round-trip; the values never leave the server.
|
|
247
|
+
customEnvVarsEnabled: getOption('custom_env_vars_enabled') === '1',
|
|
248
|
+
customEnvVarNames: parseCustomEnvVars(getOption('custom_env_vars')).map((v) => v.name),
|
|
249
|
+
advancedSerialInjections: getOption('advanced_serial_injections') === '1',
|
|
250
|
+
advancedNoBuildkit: getOption('advanced_no_buildkit') === '1',
|
|
251
|
+
advancedBlockingExtInstall: getOption('advanced_blocking_ext_install') === '1',
|
|
230
252
|
version: APP_VERSION
|
|
231
253
|
};
|
|
232
254
|
},
|
|
@@ -239,6 +261,20 @@ export const routes: Record<string, MochiRouteValue> = {
|
|
|
239
261
|
return success({ mode });
|
|
240
262
|
},
|
|
241
263
|
|
|
264
|
+
// Baked into the container launcher at provision time, so it lands on create/rebuild.
|
|
265
|
+
claudePermissionMode: ({ formData }) => {
|
|
266
|
+
const mode = normalizePermissionMode(str(formData, 'mode'));
|
|
267
|
+
setOption('claude_permission_mode', mode);
|
|
268
|
+
return success({ mode });
|
|
269
|
+
},
|
|
270
|
+
|
|
271
|
+
// Injected into ~/.claude/settings.json at provision time, so it lands on create/rebuild.
|
|
272
|
+
claudeEffortLevel: ({ formData }) => {
|
|
273
|
+
const level = normalizeEffortLevel(str(formData, 'level'));
|
|
274
|
+
setOption('claude_effort_level', level);
|
|
275
|
+
return success({ level });
|
|
276
|
+
},
|
|
277
|
+
|
|
242
278
|
// Persist the default container image used when a source folder ships no devcontainer.json.
|
|
243
279
|
defaultImage: ({ formData }) => {
|
|
244
280
|
const image = str(formData, 'image');
|
|
@@ -384,11 +420,71 @@ export const routes: Record<string, MochiRouteValue> = {
|
|
|
384
420
|
return success({ presence: hostEnvVarPresence(saved) });
|
|
385
421
|
},
|
|
386
422
|
|
|
423
|
+
// Freeform name=value secrets injected into every container via containerEnv. Values are
|
|
424
|
+
// stored plaintext in the options table (like the tokens above) and never sent to the client.
|
|
425
|
+
customEnvVarsToggle: ({ formData }) => {
|
|
426
|
+
const enabled = onChecked(formData, 'enabled');
|
|
427
|
+
setOption('custom_env_vars_enabled', enabled ? '1' : '0');
|
|
428
|
+
// The redaction set only masks while enabled, so it must be rebuilt on either flip.
|
|
429
|
+
invalidateSecretValues();
|
|
430
|
+
return success({ enabled });
|
|
431
|
+
},
|
|
432
|
+
// Upsert one var: the client only ever sends the single var it's changing, since it never
|
|
433
|
+
// holds the other secrets to resubmit (unlike host-env's whole-list-replace).
|
|
434
|
+
setCustomEnvVar: ({ formData }) => {
|
|
435
|
+
const name = str(formData, 'name');
|
|
436
|
+
const value = str(formData, 'value');
|
|
437
|
+
if (!/^[A-Za-z_][A-Za-z0-9_]*$/.test(name)) {
|
|
438
|
+
return fail(400, { error: `invalid variable name: ${name || '(empty)'}` });
|
|
439
|
+
}
|
|
440
|
+
if (!value) return fail(400, { error: 'value is required' });
|
|
441
|
+
const vars = parseCustomEnvVars(getOption('custom_env_vars')).filter(
|
|
442
|
+
(v) => v.name !== name
|
|
443
|
+
);
|
|
444
|
+
vars.push({ name, value });
|
|
445
|
+
setOption('custom_env_vars', JSON.stringify(vars));
|
|
446
|
+
invalidateSecretValues();
|
|
447
|
+
return success({ names: vars.map((v) => v.name) });
|
|
448
|
+
},
|
|
449
|
+
removeCustomEnvVar: ({ formData }) => {
|
|
450
|
+
const name = str(formData, 'name');
|
|
451
|
+
const vars = parseCustomEnvVars(getOption('custom_env_vars')).filter(
|
|
452
|
+
(v) => v.name !== name
|
|
453
|
+
);
|
|
454
|
+
setOption('custom_env_vars', JSON.stringify(vars));
|
|
455
|
+
invalidateSecretValues();
|
|
456
|
+
return success({ names: vars.map((v) => v.name) });
|
|
457
|
+
},
|
|
458
|
+
|
|
387
459
|
clearBuildCache: async () => {
|
|
388
460
|
const { spaceReclaimed } = await pruneBuildCache();
|
|
389
461
|
return success({ spaceReclaimed: spaceReclaimed ?? 0 });
|
|
390
462
|
},
|
|
391
463
|
|
|
464
|
+
serialInjectionsToggle: ({ formData }) => {
|
|
465
|
+
const enabled = onChecked(formData, 'enabled');
|
|
466
|
+
setOption('advanced_serial_injections', enabled ? '1' : '0');
|
|
467
|
+
return success({ enabled });
|
|
468
|
+
},
|
|
469
|
+
|
|
470
|
+
noBuildkitToggle: ({ formData }) => {
|
|
471
|
+
const enabled = onChecked(formData, 'enabled');
|
|
472
|
+
setOption('advanced_no_buildkit', enabled ? '1' : '0');
|
|
473
|
+
return success({ enabled });
|
|
474
|
+
},
|
|
475
|
+
|
|
476
|
+
blockingExtInstallToggle: ({ formData }) => {
|
|
477
|
+
const enabled = onChecked(formData, 'enabled');
|
|
478
|
+
setOption('advanced_blocking_ext_install', enabled ? '1' : '0');
|
|
479
|
+
return success({ enabled });
|
|
480
|
+
},
|
|
481
|
+
|
|
482
|
+
clearVersionCache: () => {
|
|
483
|
+
setOption(LATEST_VERSION_KEY, '');
|
|
484
|
+
setOption(LATEST_CHECKED_AT_KEY, '');
|
|
485
|
+
return success({});
|
|
486
|
+
},
|
|
487
|
+
|
|
392
488
|
rebuildAllNoCache: () => success({ count: rebuildRunningInstancesNoCache() }),
|
|
393
489
|
|
|
394
490
|
// The process exits mid-flight, so the client may see success or a dropped
|
package/src/types.ts
CHANGED
|
@@ -19,6 +19,8 @@ export interface Instance {
|
|
|
19
19
|
created_at: number;
|
|
20
20
|
/** `'local'` when the folder shipped its own config; null until provisioned. */
|
|
21
21
|
image_source: string | null;
|
|
22
|
+
/** Sprite name chosen collision-free at creation; null pre-dates this and falls back to the id hash. */
|
|
23
|
+
avatar: string | null;
|
|
22
24
|
/** `'ide'` serves full code-server; `'terminal'` serves only ttyd + Claude Code. */
|
|
23
25
|
mode: InstanceMode;
|
|
24
26
|
/** Terminal mode only: 1 when the scratch-shell pane was left open, so a reload restores it. */
|
|
@@ -37,6 +39,40 @@ export function normalizeMode(value: unknown): InstanceMode {
|
|
|
37
39
|
return value === 'terminal' ? 'terminal' : 'ide';
|
|
38
40
|
}
|
|
39
41
|
|
|
42
|
+
/** The permission mode Claude Code starts in. `'default'` keeps the historical bypass behaviour. */
|
|
43
|
+
export type ClaudePermissionMode = 'default' | 'manual' | 'auto' | 'plan';
|
|
44
|
+
|
|
45
|
+
export const CLAUDE_PERMISSION_MODES: ClaudePermissionMode[] = [
|
|
46
|
+
'default',
|
|
47
|
+
'manual',
|
|
48
|
+
'auto',
|
|
49
|
+
'plan'
|
|
50
|
+
];
|
|
51
|
+
|
|
52
|
+
/** Anything unrecognised falls back to the historical behaviour. */
|
|
53
|
+
export function normalizePermissionMode(value: unknown): ClaudePermissionMode {
|
|
54
|
+
return CLAUDE_PERMISSION_MODES.includes(value as ClaudePermissionMode)
|
|
55
|
+
? (value as ClaudePermissionMode)
|
|
56
|
+
: 'default';
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
/** The flags every managed `claude` invocation carries — the launchers and the shell alias share them. */
|
|
60
|
+
export function claudePermissionFlags(mode: ClaudePermissionMode): string {
|
|
61
|
+
return mode === 'default' ? '--dangerously-skip-permissions' : `--permission-mode ${mode}`;
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
/** Claude Code's default reasoning-effort level for new sessions, written to `settings.json`. */
|
|
65
|
+
export type ClaudeEffortLevel = 'low' | 'medium' | 'high' | 'xhigh' | 'max';
|
|
66
|
+
|
|
67
|
+
export const CLAUDE_EFFORT_LEVELS: ClaudeEffortLevel[] = ['low', 'medium', 'high', 'xhigh', 'max'];
|
|
68
|
+
|
|
69
|
+
/** Anything unrecognised falls back to the balanced default. */
|
|
70
|
+
export function normalizeEffortLevel(value: unknown): ClaudeEffortLevel {
|
|
71
|
+
return CLAUDE_EFFORT_LEVELS.includes(value as ClaudeEffortLevel)
|
|
72
|
+
? (value as ClaudeEffortLevel)
|
|
73
|
+
: 'high';
|
|
74
|
+
}
|
|
75
|
+
|
|
40
76
|
/** Dashboard run-state view filter: All | Active (running/creating) | Stopped (stopped/error). */
|
|
41
77
|
export type InstanceFilter = 'all' | 'active' | 'stopped';
|
|
42
78
|
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{cb as a}from"/_mochi/client/chunk-v65n8th6.js";import"/_mochi/client/chunk-rs41by6w.js";export{a as registerComponent};
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{a as Ci,b as Wt,c as Pe,d as mi,e as Kt,f as gi,h as Mi}from"/_mochi/client/chunk-m4fzsd5b.js";import{i as ht,j as di,k as It,n as at,o as Ei}from"/_mochi/client/chunk-a2psjmrm.js";import{A as yi,B as it,C as hi,x as Ni,y as We,z as Ne}from"/_mochi/client/chunk-7wkvn2vx.js";import{D as ie,E as et,F as Re}from"/_mochi/client/chunk-m497q88s.js";import{$ as x,Aa as c,Ba as Q,Ca as E,Ea as pi,Fa as xe,Ha as Si,I as bi,Ia as vi,K as l,L as le,La as oe,Ma as ei,Oa as ze,P as ae,Q as re,Ra as Y,Ta as _e,Ua as Ue,Va as $i,W as xt,Wa as ee,X as Vt,Xa as te,Y as k,Ya as be,Za as wi,_ as dt,ab as ui,ba as n,ca as we,cb as Li,da as Ie,ea as s,fa as ve,ga as f,ha as de,ka as A,la as Ft,ma as zt,na as Qe,oa as fi,pa as e,sa as Ii,ta as Te,ua as V,va as Ee,wa as g,ya as Ce,za as tt}from"/_mochi/client/chunk-v65n8th6.js";import{db as xi}from"/_mochi/client/chunk-rs41by6w.js";var ai=!1;class _t extends Date{#e=x(super.getTime());#t=new Map;#i=Ft;constructor(...i){super(...i);if(!ai)this.#a()}#a(){ai=!0;var i=_t.prototype,t=Date.prototype,a=Object.getOwnPropertyNames(t);for(let r of a){if(r.startsWith("get")||r.startsWith("to")||r==="valueOf")i[r]=function(...o){if(o.length>0)return e(this.#e),t[r].apply(this,o);var v=this.#t.get(r);if(v===void 0){let $=Ft;zt(this.#i),v=k(()=>{return e(this.#e),t[r].apply(this,o)}),this.#t.set(r,v),zt($)}return e(v)};if(r.startsWith("set"))i[r]=function(...o){var v=t[r].apply(this,o);return n(this.#e,t.getTime.call(this)),v}}}}var Pi=["forEach","isDisjointFrom","isSubsetOf","isSupersetOf"],ki=["difference","intersection","symmetricDifference","union"],ri=!1;class Fe extends Set{#e=new Map;#t=x(0);#i=x(0);#a=Qe||-1;constructor(i){super();if(i){for(var t of i)super.add(t);this.#i.v=super.size}if(!ri)this.#n()}#r(i){return Qe===this.#a?x(i):dt(i)}#n(){ri=!0;var i=Fe.prototype,t=Set.prototype;for(let a of Pi)i[a]=function(...r){return e(this.#t),t[a].apply(this,r)};for(let a of ki)i[a]=function(...r){e(this.#t);var o=t[a].apply(this,r);return new Fe(o)}}has(i){var t=super.has(i),a=this.#e,r=a.get(i);if(r===void 0){if(!t)return e(this.#t),!1;r=this.#r(!0),a.set(i,r)}return e(r),t}add(i){if(!super.has(i))super.add(i),n(this.#i,super.size),we(this.#t);return this}delete(i){var t=super.delete(i),a=this.#e,r=a.get(i);if(r!==void 0)a.delete(i),n(r,!1);if(t)n(this.#i,super.size),we(this.#t);return t}clear(){if(super.size===0)return;super.clear();var i=this.#e;for(var t of i.values())n(t,!1);i.clear(),n(this.#i,0),we(this.#t)}keys(){return this.values()}values(){return e(this.#t),super.values()}entries(){return e(this.#t),super.entries()}[Symbol.iterator](){return this.keys()}get size(){return e(this.#i)}}class ni extends Map{#e=new Map;#t=x(0);#i=x(0);#a=Qe||-1;constructor(i){super();if(i){for(var[t,a]of i)super.set(t,a);this.#i.v=super.size}}#r(i){return Qe===this.#a?x(i):dt(i)}has(i){var t=this.#e,a=t.get(i);if(a===void 0)if(super.has(i))a=this.#r(0),t.set(i,a);else return e(this.#t),!1;return e(a),!0}forEach(i,t){this.#n(),super.forEach(i,t)}get(i){var t=this.#e,a=t.get(i);if(a===void 0)if(super.has(i))a=this.#r(0),t.set(i,a);else{e(this.#t);return}return e(a),super.get(i)}set(i,t){var a=this.#e,r=a.get(i),o=super.get(i),v=super.set(i,t),$=this.#t;if(r===void 0)r=this.#r(0),a.set(i,r),n(this.#i,super.size),we($);else if(o!==t){we(r);var u=$.reactions===null?null:new Set($.reactions),b=u===null||!r.reactions?.every((R)=>u.has(R));if(b)we($)}return v}delete(i){var t=this.#e,a=t.get(i),r=super.delete(i);if(a!==void 0)t.delete(i),n(a,-1);if(r)n(this.#i,super.size),we(this.#t);return r}clear(){if(super.size===0)return;super.clear();var i=this.#e;n(this.#i,0);for(var t of i.values())n(t,-1);we(this.#t),i.clear()}#n(){e(this.#t);var i=this.#e;if(this.#i.v!==i.size){for(var t of super.keys())if(!i.has(t)){var a=this.#r(0);i.set(t,a)}}for([,a]of this.#e)e(a)}keys(){return e(this.#t),super.keys()}values(){return this.#n(),super.values()}entries(){return this.#n(),super.entries()}[Symbol.iterator](){return this.entries()}get size(){return e(this.#i),super.size}}var mt=Symbol("replace");class gt extends URLSearchParams{#e=x(0);#t=li();#i=!1;#a(){if(!this.#t||this.#i)return;this.#i=!0;let i=this.toString();this.#t.search=i&&`?${i}`,this.#i=!1}[mt](i){if(this.#i)return;if(i.toString()===super.toString())return;this.#i=!0;for(let t of[...super.keys()])super.delete(t);for(let[t,a]of i)super.append(t,a);we(this.#e),this.#i=!1}append(i,t){super.append(i,t),this.#a(),we(this.#e)}delete(i,t){var a=super.has(i,t);if(super.delete(i,t),a)this.#a(),we(this.#e)}get(i){return e(this.#e),super.get(i)}getAll(i){return e(this.#e),super.getAll(i)}has(i,t){return e(this.#e),super.has(i,t)}keys(){return e(this.#e),super.keys()}forEach(i,t){e(this.#e),super.forEach(i,t)}set(i,t){var a=super.getAll(i);super.set(i,t);var r=super.getAll(i);if(a.length!==r.length||a.some((o,v)=>o!==r[v]))this.#a(),we(this.#e)}sort(){super.sort(),this.#a(),we(this.#e)}toString(){return e(this.#e),super.toString()}values(){return e(this.#e),super.values()}entries(){return e(this.#e),super.entries()}[Symbol.iterator](){return this.entries()}get size(){return e(this.#e),super.size}}var Dt=null;function li(){return Dt}class oi extends URL{#e=x(super.protocol);#t=x(super.username);#i=x(super.password);#a=x(super.hostname);#r=x(super.port);#n=x(super.pathname);#l=x(super.hash);#o=x(super.search);#s;constructor(i,t){i=new URL(i,t);super(i);Dt=this,this.#s=new gt(i.searchParams),Dt=null}get hash(){return e(this.#l)}set hash(i){super.hash=i,n(this.#l,super.hash)}get host(){return e(this.#a),e(this.#r),super.host}set host(i){super.host=i,n(this.#a,super.hostname),n(this.#r,super.port)}get hostname(){return e(this.#a)}set hostname(i){super.hostname=i,n(this.#a,super.hostname)}get href(){return e(this.#e),e(this.#t),e(this.#i),e(this.#a),e(this.#r),e(this.#n),e(this.#l),e(this.#o),super.href}set href(i){super.href=i,n(this.#e,super.protocol),n(this.#t,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.#o,super.search),this.#s[mt](super.searchParams)}get password(){return e(this.#i)}set password(i){super.password=i,n(this.#i,super.password)}get pathname(){return e(this.#n)}set pathname(i){super.pathname=i,n(this.#n,super.pathname)}get port(){return e(this.#r)}set port(i){super.port=i,n(this.#r,super.port)}get protocol(){return e(this.#e)}set protocol(i){super.protocol=i,n(this.#e,super.protocol)}get search(){return e(this.#o)}set search(i){super.search=i,n(this.#o,super.search),this.#s[mt](super.searchParams)}get username(){return e(this.#t)}set username(i){super.username=i,n(this.#t,super.username)}get origin(){return e(this.#e),e(this.#a),e(this.#r),super.origin}get searchParams(){return this.#s}toString(){return this.href}toJSON(){return this.href}}class si{#e;#t;constructor(i,t){this.#e=i,this.#t=Vt(t)}get current(){return this.#t(),this.#e()}}var ci=/^[A-Za-z0-9._-]+$/;function Bi(i){let t=i.trim();if(!t)return null;let a,r,o=t.match(/^[A-Za-z0-9._-]+@([A-Za-z0-9.-]+):(.+)$/);if(o)a=o[1],r=o[2];else if(/^[a-z][a-z0-9+.-]*:\/\//i.test(t)){let b;try{b=new URL(t)}catch{return null}if(b.protocol!=="http:"&&b.protocol!=="https:"&&b.protocol!=="ssh:")return null;a=b.hostname,r=b.pathname}else{let b=t.match(/^([A-Za-z0-9-]+\.[A-Za-z0-9.-]+)\/(.+)$/);if(!b)return null;a=b[1],r=b[2]}if(!a||!r)return null;let v=r.replace(/\.git$/i,"").split("/").filter(Boolean),[$,u]=v;if(!$||!u||!ci.test($)||!ci.test(u))return null;return{host:a,owner:$,repo:u,cloneUrl:`https://${a}/${$}/${u}.git`}}function Rt(i){return Bi(i)!==null}var Fi=new Set(["$$slots","$$events","$$legacy"]);function $t(i,t){let a=ee(t,Fi),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"}]];ie(i,te({name:"folder-clock"},()=>a,{get iconNode(){return r}}))}var zi=new Set(["$$slots","$$events","$$legacy"]);function Ye(i,t){let a=ee(t,zi),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"}]];ie(i,te({name:"git-branch"},()=>a,{get iconNode(){return r}}))}var _i=new Set(["$$slots","$$events","$$legacy"]);function vt(i,t){let a=ee(t,_i),r=[["path",{d:"m5 12 7-7 7 7"}],["path",{d:"M12 19V5"}]];ie(i,te({name:"arrow-up"},()=>a,{get iconNode(){return r}}))}var Di=new Set(["$$slots","$$events","$$legacy"]);function ut(i,t){let a=ee(t,Di),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"}]];ie(i,te({name:"folder"},()=>a,{get iconNode(){return r}}))}var Vi=new Set(["$$slots","$$events","$$legacy"]);function Ge(i,t){let a=ee(t,Vi),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"}]];ie(i,te({name:"triangle-alert"},()=>a,{get iconNode(){return r}}))}var Ri=g('<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>'),Wi=g('<button class="recent-toggle svelte-oq97c4"> </button>'),Oi=g('<div class="recent svelte-oq97c4"><div class="recent-label svelte-oq97c4">Recent</div> <!> <!></div>'),Ji=g('<div class="muted svelte-oq97c4">Loading…</div>'),Ki=g('<div class="muted err svelte-oq97c4"> </div>'),Zi=g('<div class="row svelte-oq97c4"><button class="nav svelte-oq97c4"><span class="icon svelte-oq97c4"><!></span> <span class="ename svelte-oq97c4">..</span></button></div>'),Hi=g('<div class="muted svelte-oq97c4"> </div>'),Qi=g('<span class="badge svelte-oq97c4">devcontainer</span>'),Yi=g('<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>'),Gi=g("<!> <!> <!>",1),Ui=g(`<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>`),Xi=g('<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="mode svelte-oq97c4"><div class="mode-label svelte-oq97c4">Editor</div> <div class="mode-toggle svelte-oq97c4" role="group" aria-label="Editor mode"><button type="button"><!> Full IDE</button> <button type="button"><!> Terminal</button></div></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 Ot(i,t){ae(t,!0);let a=be(t,"defaultMode",3,"ide"),r=x(null),o=k(()=>e(r)??a()),v=x(null),$=x(!0),u=x(null),b=x(""),R=x(null),w=x(Ie([])),Z=x(!1),H=x(""),I=x(""),W=k(()=>Rt(e(H)));function L(){if(!e(W))return;t.onpick(e(H).trim(),{branch:e(I).trim()||void 0,mode:e(o)})}let N=k(()=>e(v)?e(v).entries.filter((p)=>p.name.toLowerCase().includes(e(b).trim().toLowerCase())):[]),F=k(()=>e(Z)?e(w):e(w).slice(0,5));async function z(){try{let p=await Wt("/api/history");n(w,p.history??[],!0)}catch{}}async function B(p){let U=e(w);n(w,e(w).filter((Me)=>Me.source_path!==p),!0);try{await mi("/api/history",{sourcePath:p})}catch{n(w,U,!0)}}async function O(p=null){n($,!0),n(u,null),n(b,"");try{let U=p?`/api/browse?path=${encodeURIComponent(p)}`:"/api/browse";n(v,await Wt(U,void 0,"Could not list folder"),!0)}catch(U){n(u,U.message,!0)}finally{n($,!1)}await fi(),e(R)?.focus()}de(()=>{O(),z()});var y=Xi(),M=s(y),J=s(M),se=f(s(J),2),me=s(se);et(me,{size:16}),l(se),l(J);var G=f(J,2),ne=f(s(G),2),ge=s(ne);let D;var q=s(ge);di(q,{size:15}),le(),l(ge);var m=f(ge,2);let S;var _=s(m);ht(_,{size:15}),le(),l(m),l(ne),l(G);var K=f(G,2),C=f(s(K),2),T=s(C);ze(T);var P=f(T,2);ze(P);var d=f(P,2);l(C),l(K);var h=f(K,2),$e=s(h),ue=s($e,!0);l($e),l(h);var he=f(h,2);{var X=(p)=>{var U=Oi(),Me=f(s(U),2);xe(Me,17,()=>e(F),(Se)=>Se.source_path,(Se,ce)=>{var fe=Ri(),pe=s(fe),Le=s(pe),Be=s(Le);{var Ke=(ke)=>{Ye(ke,{size:16})},Ze=k(()=>Rt(e(ce).source_path)),qe=(ke)=>{$t(ke,{size:16})};E(Be,(ke)=>{if(e(Ze))ke(Ke);else ke(qe,-1)})}l(Le);var st=f(Le,2),De=s(st),At=s(De,!0);l(De);var ct=f(De,2),Bt=s(ct,!0);l(ct),l(st),l(pe);var He=f(pe,2),Ve=s(He);et(Ve,{size:14}),l(He),l(fe),A(()=>{Q(At,e(ce).name),Q(Bt,e(ce).source_path),Y(He,"aria-label",`Remove ${e(ce).name??""} from history`)}),V("click",pe,()=>t.onpick(e(ce).source_path,{mode:e(o)})),V("click",He,(ke)=>{ke.stopPropagation(),B(e(ce).source_path)}),c(Se,fe)});var je=f(Me,2);{var Je=(Se)=>{var ce=Wi(),fe=s(ce,!0);l(ce),A(()=>Q(fe,e(Z)?"Show fewer":`Show all (${e(w).length})`)),V("click",ce,()=>n(Z,!e(Z))),c(Se,ce)};E(je,(Se)=>{if(e(w).length>5)Se(Je)})}l(U),c(p,U)};E(he,(p)=>{if(e(w).length>0)p(X)})}var ye=f(he,2),Ae=s(ye);ze(Ae),Ue(Ae,(p)=>n(R,p),()=>e(R)),l(ye);var Oe=f(ye,2),rt=s(Oe);{var Lt=(p)=>{var U=Ji();c(p,U)},Tt=(p)=>{var U=Ki(),Me=s(U,!0);l(U),A(()=>Q(Me,e(u))),c(p,U)},Pt=(p)=>{var U=Gi(),Me=ve(U);{var je=(fe)=>{var pe=Zi(),Le=s(pe),Be=s(Le),Ke=s(Be);vt(Ke,{size:16}),l(Be),le(2),l(Le),l(pe),V("click",Le,()=>O(e(v)?.parent??null)),c(fe,pe)};E(Me,(fe)=>{if(e(v).parent&&!e(b))fe(je)})}var Je=f(Me,2);{var Se=(fe)=>{var pe=Hi(),Le=s(pe,!0);l(pe),A(()=>Q(Le,e(b)?"No folders match.":"No subfolders here.")),c(fe,pe)};E(Je,(fe)=>{if(e(N).length===0)fe(Se)})}var ce=f(Je,2);xe(ce,19,()=>e(N),(fe)=>fe.path,(fe,pe,Le)=>{var Be=Yi();let Ke;var Ze=s(Be),qe=s(Ze),st=s(qe);ut(st,{size:16}),l(qe);var De=f(qe,2),At=s(De,!0);l(De);var ct=f(De,2);{var Bt=(Ve)=>{var ke=Qi();c(Ve,ke)};E(ct,(Ve)=>{if(e(pe).hasDevcontainer)Ve(Bt)})}l(Ze);var He=f(Ze,2);l(Be),A((Ve)=>{Ke=oe(Be,1,"row svelte-oq97c4",null,Ke,Ve),Q(At,e(pe).name)},[()=>({"first-match":e(b).trim()&&e(Le)===0})]),V("click",Ze,()=>O(e(pe).path)),V("click",He,()=>t.onpick(e(pe).path,{mode:e(o)})),c(fe,Be)}),c(p,U)};E(rt,(p)=>{if(e($))p(Lt);else if(e(u))p(Tt,1);else if(e(v))p(Pt,2)})}l(Oe);var nt=f(Oe,2);{var kt=(p)=>{var U=Ui(),Me=s(U);Ge(Me,{size:15}),le(2),l(U),c(p,U)};E(nt,(p)=>{if(e(v)&&!e(v).hasDevcontainer)p(kt)})}var lt=f(nt,2),ot=f(s(lt),2);l(lt),l(M),l(y),A(()=>{D=oe(ge,1,"mode-btn svelte-oq97c4",null,D,{active:e(o)==="ide"}),Y(ge,"aria-pressed",e(o)==="ide"),S=oe(m,1,"mode-btn svelte-oq97c4",null,S,{active:e(o)==="terminal"}),Y(m,"aria-pressed",e(o)==="terminal"),d.disabled=!e(W),Q(ue,e(v)?.path??"…"),ot.disabled=!e(v)}),V("click",y,function(...p){t.onclose?.apply(this,p)}),V("keydown",y,(p)=>p.key==="Escape"&&t.onclose()),V("click",M,(p)=>p.stopPropagation()),V("keydown",M,()=>{}),V("click",se,function(...p){t.onclose?.apply(this,p)}),V("click",ge,()=>n(r,"ide")),V("click",m,()=>n(r,"terminal")),V("keydown",T,(p)=>{if(p.key==="Enter")p.preventDefault(),L()}),_e(T,()=>e(H),(p)=>n(H,p)),V("keydown",P,(p)=>{if(p.key==="Enter")p.preventDefault(),L()}),_e(P,()=>e(I),(p)=>n(I,p)),V("click",d,L),V("keydown",Ae,(p)=>{let U=e(N)[0];if(p.key==="Enter"&&U)p.preventDefault(),O(U.path)}),_e(Ae,()=>e(b),(p)=>n(b,p)),V("click",ot,()=>e(v)&&t.onpick(e(v).path,{mode:e(o)})),c(i,y),re()}Ee(["click","keydown"]);var ji=g('<div class="branch svelte-jv8lut" title="Branch checked out in the container"><!><span class="svelte-jv8lut"> </span></div>');function Jt(i,t){var a=ji(),r=s(a);Ye(r,{size:12});var o=f(r),v=s(o,!0);l(o),l(a),A(()=>Q(v,t.branch)),c(i,a)}var qi=new Set(["$$slots","$$events","$$legacy"]);function pt(i,t){let a=ee(t,qi),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"}]];ie(i,te({name:"cable"},()=>a,{get iconNode(){return r}}))}var ea=g('<a target="_blank" rel="noopener"> </a>'),ta=g('<div class="fports svelte-1uaz383" title="Forwarded ports — click to open"><!> <span class="list svelte-1uaz383"></span></div>');function Zt(i,t){ae(t,!0);var a=tt(),r=ve(a);{var o=(v)=>{var $=ta(),u=s($);pt(u,{size:12});var b=f(u,2);xe(b,21,()=>t.ports,(R)=>R.container_port,(R,w)=>{var Z=ea();let H;var I=s(Z,!0);l(Z),A((W,L)=>{H=oe(Z,1,"fport svelte-1uaz383",null,H,{open:e(w).open}),Y(Z,"href",W),Y(Z,"title",L),Q(I,e(w).container_port)},[()=>Kt(e(w).host_port),()=>`container :${e(w).container_port} → ${Kt(e(w).host_port)} ${e(w).open?"(open)":"(not published yet)"}`]),c(R,Z)}),l(b),l($),c(v,$)};E(r,(v)=>{if(t.ports.length)v(o)})}c(i,a),re()}var ia=g('<div class="busy-overlay svelte-13338y7" aria-live="polite"><span class="busy-label svelte-13338y7"> </span></div>'),aa=g('<input class="name-edit svelte-13338y7"/>'),ra=g('<button class="name svelte-13338y7" title="Click to rename"> </button>'),na=g("<span></span>"),la=g('<div class="card-error svelte-13338y7"> </div>'),oa=g("<!> <!>",1),sa=g('<li><!> <div class="card-head svelte-13338y7"><!> <!> <!> <!></div> <div class="path svelte-13338y7"> </div> <!> <!> <!> <div class="actions svelte-13338y7"><!> <!> <!> <!></div></li>');function Ht(i,t){ae(t,!0);let a=be(t,"editingName",15),r=be(t,"pending",3,null),o=k(()=>t.instance.status==="running"||t.instance.status==="stopped"||t.instance.status==="error"&&!!t.instance.container_id),v={start:"Starting…",stop:"Stopping…",delete:"Deleting…",rebuild:"Rebuilding…"};var $=sa();let u;var b=s($);{var R=(C)=>{var T=ia(),P=s(T),d=s(P,!0);l(P),l(T),A(()=>Q(d,v[r()])),c(C,T)};E(b,(C)=>{if(r())C(R)})}var w=f(b,2),Z=s(w);We(Z,{get id(){return t.instance.id},get name(){return t.instance.name},interactive:!0});var H=f(Z,2);{var I=(C)=>{var T=aa();ze(T),xt(T,!0),Te("focus",T,(P)=>P.currentTarget.select()),Te("blur",T,function(...P){t.oncommitrename?.apply(this,P)}),V("keydown",T,(P)=>{if(P.key==="Enter")P.currentTarget.blur();else if(P.key==="Escape")t.oncancelrename()}),_e(T,a),c(C,T)},W=(C)=>{var T=ra(),P=s(T,!0);l(T),A(()=>Q(P,t.instance.name)),V("click",T,function(...d){t.onstartrename?.apply(this,d)}),c(C,T)};E(H,(C)=>{if(t.editing)C(I);else C(W,-1)})}var L=f(H,2);{var N=(C)=>{var T=na();let P;A(()=>{P=oe(T,1,"attn svelte-13338y7",null,P,{"attn-done":t.instance.attention==="done","attn-waiting":t.instance.attention==="waiting"}),Y(T,"title",t.instance.attention==="waiting"?"Claude is waiting for input":"Claude finished"),Y(T,"aria-label",t.instance.attention==="waiting"?"Claude is waiting for input":"Claude finished")}),c(C,T)};E(L,(C)=>{if(t.instance.attention)C(N)})}var F=f(L,2);gi(F,{get status(){return t.instance.status}}),l(w);var z=f(w,2),B=s(z,!0);l(z);var O=f(z,2);{var y=(C)=>{Zt(C,{get ports(){return t.instance.forwarded_ports}})};E(O,(C)=>{if(t.instance.status==="running")C(y)})}var M=f(O,2);{var J=(C)=>{Jt(C,{get branch(){return t.instance.git_branch}})};E(M,(C)=>{if(t.instance.git_branch)C(J)})}var se=f(M,2);{var me=(C)=>{var T=la(),P=s(T,!0);l(T),A(()=>Q(P,t.instance.error)),c(C,T)};E(se,(C)=>{if(t.instance.status==="error"&&t.instance.error)C(me)})}var G=f(se,2),ne=s(G);{var ge=(C)=>{var T=oa(),P=ve(T);{let h=k(()=>`/ide/${t.instance.id}`);Ne(P,{variant:"primary",size:"sm",get href(){return e(h)},children:($e,ue)=>{le();var he=Ce();A(()=>Q(he,t.instance.mode==="terminal"?"Open terminal":"Open IDE")),c($e,he)},$$slots:{default:!0}})}var d=f(P,2);Ne(d,{size:"sm",onclick:()=>t.onact("stop"),children:(h,$e)=>{le();var ue=Ce("Stop");c(h,ue)},$$slots:{default:!0}}),c(C,T)},D=(C)=>{Ne(C,{size:"sm",onclick:()=>t.onact("start"),children:(T,P)=>{le();var d=Ce("Start");c(T,d)},$$slots:{default:!0}})},q=(C)=>{{let T=k(()=>Re(`/instances/${t.instance.id}`));Ne(C,{size:"sm",get href(){return e(T)},target:"_blank",rel:"noopener noreferrer",children:(P,d)=>{le();var h=Ce("View logs");c(P,h)},$$slots:{default:!0}})}};E(ne,(C)=>{if(t.instance.status==="running")C(ge);else if(t.instance.status==="stopped"||t.instance.status==="error"&&t.instance.container_id)C(D,1);else if(t.instance.status==="creating")C(q,2)})}var m=f(ne,2);{var S=(C)=>{Ne(C,{size:"sm",title:"Recreate the container and re-run setup (credentials, hooks, port forwards)",onclick:()=>t.onact("rebuild"),children:(T,P)=>{le();var d=Ce("Rebuild");c(T,d)},$$slots:{default:!0}})};E(m,(C)=>{if(e(o))C(S)})}var _=f(m,2);{let C=k(()=>Re(`/instances/${t.instance.id}`));Ne(_,{size:"sm",ghost:!0,get href(){return e(C)},target:"_blank",rel:"noopener noreferrer",children:(T,P)=>{le();var d=Ce("Details");c(T,d)},$$slots:{default:!0}})}var K=f(_,2);Ne(K,{variant:"danger",size:"sm",onclick:()=>t.onact("delete"),children:(C,T)=>{le();var P=Ce("Delete");c(C,P)},$$slots:{default:!0}}),l(G),l($),A(()=>{u=oe($,1,"card panel svelte-13338y7",null,u,{busy:!!r()}),Y($,"aria-busy",!!r()||void 0),Y(z,"title",t.instance.source_path),Q(B,t.instance.source_path)}),c(i,$),re()}Ee(["keydown","click"]);var ca=new Set(["$$slots","$$events","$$legacy"]);function bt(i,t){let a=ee(t,ca),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"}]];ie(i,te({name:"component"},()=>a,{get iconNode(){return r}}))}var fa=new Set(["$$slots","$$events","$$legacy"]);function St(i,t){let a=ee(t,fa),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"}]];ie(i,te({name:"package"},()=>a,{get iconNode(){return r}}))}var da=g('<a class="brand svelte-94cd8h" href="/"><span class="logo svelte-94cd8h"><!></span><span class="words svelte-94cd8h"><span>Codebay</span><span class="tagline svelte-94cd8h">devcontainer manager</span></span></a>');function Qt(i,t){ae(t,!0);var a=da(),r=s(a),o=s(r);{var v=(u)=>{We(u,{get art(){return t.pet},get name(){return t.pet.name},scale:4})},$=(u)=>{St(u,{size:22})};E(o,(u)=>{if(t.pet)u(v);else u($,-1)})}l(r),le(),l(a),c(i,a),re()}var ma=g('<button type="button" role="radio"> </button>'),ga=g('<div class="picker svelte-12yor8r" role="radiogroup" aria-label="Filter instances"></div>');function Yt(i,t){ae(t,!0);let a=[{value:"all",label:"All"},{value:"active",label:"Active"},{value:"stopped",label:"Stopped"}];var r=ga();xe(r,21,()=>a,(o)=>o.value,(o,v)=>{var $=ma();let u;var b=s($,!0);l($),A(()=>{u=oe($,1,"segment svelte-12yor8r",null,u,{active:t.value===e(v).value}),Y($,"aria-checked",t.value===e(v).value),Q(b,e(v).label)}),V("click",$,()=>t.onchange(e(v).value)),c(o,$)}),l(r),c(i,r),re()}Ee(["click"]);var $a=new Set(["$$slots","$$events","$$legacy"]);function Xe(i,t){let a=ee(t,$a),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"}]];ie(i,te({name:"settings"},()=>a,{get iconNode(){return r}}))}var va=g('<a class="cog svelte-1e745g8" target="_blank" rel="noopener noreferrer" aria-label="Settings" title="Settings"><!></a>');function Gt(i,t){ae(t,!1),$i();var a=va(),r=s(a);Xe(r,{size:16}),l(a),A((o)=>Y(a,"href",o),[()=>Re("/settings")]),c(i,a),re()}var ua=new Set(["$$slots","$$events","$$legacy"]);function wt(i,t){let a=ee(t,ua),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"}]];ie(i,te({name:"link"},()=>a,{get iconNode(){return r}}))}var ha=g('<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>'),pa=g('<div class="cred-dropdown panel svelte-vongf9" role="menu"></div>'),xa=g('<div class="cred-menu svelte-vongf9"><button aria-haspopup="menu" aria-label="Credentials" title="Credentials"><!></button> <!></div>');function Ut(i,t){ae(t,!0);let a=x(!1),r=k(()=>t.auth.filter((I)=>I.available).length),o=k(()=>e(r)===t.auth.length?"ok":e(r)===0?"error":"warn"),v={ok:wt,warn:Ge,error:et},$=k(()=>v[e(o)]);function u(I){if(I.available)it.success(`${I.label} credentials come from ${I.source}.`);else{let W=I.hint?` — ${I.hint}`:"";it.error(`No ${I.label} credentials found${W}.`)}}de(()=>{if(!e(a))return;let I=(L)=>{if(!L.target?.closest(".cred-menu"))n(a,!1)},W=(L)=>{if(L.key==="Escape")n(a,!1)};return window.addEventListener("click",I),window.addEventListener("keydown",W),()=>{window.removeEventListener("click",I),window.removeEventListener("keydown",W)}});var b=xa(),R=s(b),w=s(R);vi(w,()=>e($),(I,W)=>{W(I,{size:16})}),l(R);var Z=f(R,2);{var H=(I)=>{var W=pa();xe(W,21,()=>t.auth,(L)=>L.id,(L,N)=>{var F=ha(),z=s(F),B=f(z,2),O=s(B,!0);l(B);var y=f(B,2),M=s(y,!0);l(y),l(F),A(()=>{Y(F,"title",e(N).available?`Credentials from ${e(N).source}, copied into each new instance.`:`No credentials found on this computer${e(N).hint?` — ${e(N).hint}`:""}.`),oe(z,1,`dot ${e(N).available?"on":"off"}`,"svelte-vongf9"),Q(O,e(N).label),Q(M,e(N).available?"Authorized":"Not found")}),V("click",F,()=>u(e(N))),c(L,F)}),l(W),c(I,W)};E(Z,(I)=>{if(e(a))I(H)})}l(b),A(()=>{oe(R,1,`cred ${e(o)??""}`,"svelte-vongf9"),Y(R,"aria-expanded",e(a))}),V("click",R,()=>n(a,!e(a))),c(i,b),re()}Ee(["click"]);var ba=g('<header class="topbar svelte-1h259us"><!> <div class="topbar-actions svelte-1h259us"><!> <!> <!> <!> <!> <!></div></header>');function Xt(i,t){let a=be(t,"canDelete",3,!1),r=be(t,"ready",3,!0),o=be(t,"creating",3,!1);var v=ba(),$=s(v);Qt($,{get pet(){return t.pet}});var u=f($,2),b=s(u);{var R=(N)=>{Ne(N,{variant:"default",size:"sm",get icon(){return bt},href:"/debug",children:(F,z)=>{le();var B=Ce("Debug");c(F,B)},$$slots:{default:!0}})};E(b,(N)=>{if(ui)N(R)})}var w=f(b,2);{var Z=(N)=>{Yt(N,{get value(){return t.filter},get onchange(){return t.onFilter}})};E(w,(N)=>{if(t.filter&&t.onFilter)N(Z)})}var H=f(w,2);Gt(H,{});var I=f(H,2);Ut(I,{get auth(){return t.auth}});var W=f(I,2);{let N=k(()=>!a());Ne(W,{variant:"danger",size:"sm",get onclick(){return t.onDeleteAll},get disabled(){return e(N)},children:(F,z)=>{le();var B=Ce("Delete all");c(F,B)},$$slots:{default:!0}})}var L=f(W,2);{let N=k(()=>o()?void 0:It),F=k(()=>!r()||o());Ne(L,{variant:"primary",get icon(){return e(N)},get onclick(){return t.onNew},get disabled(){return e(F)},children:(z,B)=>{le();var O=Ce();A(()=>Q(O,o()?"Creating…":"New instance")),c(z,O)},$$slots:{default:!0}})}l(u),l(v),c(i,v)}var Sa=g("<span>Docker daemon is not reachable.</span>"),wa=g("<span>The devcontainer CLI is not available.</span>"),Ia=g('<div class="banner error svelte-146pixd"><strong>Setup needed.</strong> <!> <!></div>'),Ca=g('<div class="banner error svelte-146pixd"><strong>Error.</strong> <span> </span></div>'),Na=g('<div class="empty svelte-146pixd"><p class="empty-sub svelte-146pixd">Loading…</p></div>'),ya=g('<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>'),Ea=g('<div class="empty svelte-146pixd"><p class="empty-sub svelte-146pixd"> </p></div>'),Ma=g('<ul class="grid svelte-146pixd"></ul>'),La=g('<!> <main class="stage svelte-146pixd"><!> <!> <!></main> <!>',1);function jt(i,t){ae(t,!0);let a=x(!1),r=x(!1),o=x(null),v=x(null),$=x(""),u=x(Ie({})),b=k(()=>t.preflight.docker&&t.preflight.cli),R=k(()=>t.instances.filter((m)=>{if(t.filter==="active")return m.status==="running"||m.status==="creating";if(t.filter==="stopped")return m.status==="stopped"||m.status==="error";return!0}));de(()=>{for(let[m,{since:S}]of Object.entries(e(u))){let _=t.instances.find((K)=>K.id===m);if(!_||_.status!==S)w(m)}});function w(m){let{[m]:S,..._}=e(u);n(u,_,!0)}async function Z(m,S){n(a,!1),n(r,!0),n(o,null);try{await Pe("/api/instances",{sourcePath:m,branch:S?.branch,mode:S?.mode},"Failed to create instance")}catch(_){n(o,_.message,!0)}finally{n(r,!1)}}async function H(m,S){if(n(o,null),S==="delete"&&!confirm("Delete this instance and its copied files?"))return;if(S==="rebuild"&&!confirm("Recreate this container and re-run setup? The workspace is kept."))return;let _=t.instances.find((K)=>K.id===m)?.status;if(_)n(u,{...e(u),[m]:{action:S,since:_}},!0);try{await Pe(`/api/instances/${m}/${S}`,void 0,`Failed to ${S}`)}catch(K){n(o,K.message,!0),w(m)}}function I(m){n(v,m.id,!0),n($,m.name,!0)}function W(){n(v,null),n($,"")}async function L(m){let S=e($).trim(),_=t.instances.find((K)=>K.id===m)?.name;if(!S||S===_){W();return}W(),n(o,null);try{await Pe(`/api/instances/${m}/rename`,{name:S},"Failed to rename")}catch(K){n(o,K.message,!0)}}async function N(){if(n(o,null),!confirm(`Delete all ${t.instances.length} instances and their copied files?`))return;try{await Pe("/api/instances/delete-all",void 0,"Failed to delete all")}catch(m){n(o,m.message,!0)}}var F=La(),z=ve(F);{let m=k(()=>t.instances.length>0);Xt(z,{get auth(){return t.preflight.auth},get pet(){return t.pet},get canDelete(){return e(m)},get ready(){return e(b)},get creating(){return e(r)},get filter(){return t.filter},get onFilter(){return t.onFilter},onNew:()=>n(a,!0),onDeleteAll:N})}var B=f(z,2),O=s(B);{var y=(m)=>{var S=Ia(),_=f(s(S),2);{var K=(P)=>{var d=Sa();c(P,d)};E(_,(P)=>{if(!t.preflight.docker)P(K)})}var C=f(_,2);{var T=(P)=>{var d=wa();c(P,d)};E(C,(P)=>{if(!t.preflight.cli)P(T)})}l(S),c(m,S)};E(O,(m)=>{if(!e(b))m(y)})}var M=f(O,2);{var J=(m)=>{var S=Ca(),_=f(s(S),2),K=s(_,!0);l(_),l(S),A(()=>Q(K,e(o))),c(m,S)};E(M,(m)=>{if(e(o))m(J)})}var se=f(M,2);{var me=(m)=>{var S=Na();c(m,S)},G=(m)=>{var S=ya(),_=f(s(S),4);{let K=k(()=>!e(b));Ne(_,{variant:"primary",get icon(){return It},onclick:()=>n(a,!0),get disabled(){return e(K)},children:(C,T)=>{le();var P=Ce("New instance");c(C,P)},$$slots:{default:!0}})}l(S),c(m,S)},ne=(m)=>{var S=Ea(),_=s(S),K=s(_);l(_),l(S),A(()=>Q(K,`No ${t.filter??""} instances.`)),c(m,S)},ge=(m)=>{var S=Ma();xe(S,21,()=>e(R),(_)=>_.id,(_,K)=>{{let C=k(()=>e(v)===e(K).id),T=k(()=>e(u)[e(K).id]?.action??null);Ht(_,{get instance(){return e(K)},get editing(){return e(C)},get pending(){return e(T)},onact:(P)=>H(e(K).id,P),onstartrename:()=>I(e(K)),oncommitrename:()=>L(e(K).id),oncancelrename:W,get editingName(){return e($)},set editingName(P){n($,P,!0)}})}}),l(S),c(m,S)};E(se,(m)=>{if(!t.loaded)m(me);else if(t.instances.length===0)m(G,1);else if(e(R).length===0)m(ne,2);else m(ge,-1)})}l(B);var D=f(B,2);{var q=(m)=>{Ot(m,{onpick:Z,get defaultMode(){return t.preflight.defaultMode},onclose:()=>n(a,!1)})};E(D,(m)=>{if(e(a))m(q)})}c(i,F),re()}var Ta=g('<div class="tab-label editing svelte-r39acv"><!> <input class="tab-name-edit svelte-r39acv"/></div>'),Pa=g('<span class="tab-mode svelte-r39acv" title="Terminal-only instance"><!></span>'),ka=g('<button type="button" class="tab-label svelte-r39acv"><!> <span class="tab-name svelte-r39acv"> </span> <!></button>'),Aa=g("<div><!></div>"),Ba=g('<nav class="tabs svelte-r39acv"></nav>'),Fa=g('<!> <a class="cog svelte-r39acv" target="_blank" rel="noopener noreferrer" title="Settings" aria-label="Settings"><!></a>',1);function qt(i,t){ae(t,!0);let a=be(t,"editingName",15);hi(i,{children:(r,o)=>{var v=Fa(),$=ve(v);{var u=(w)=>{var Z=Ba();xe(Z,21,()=>t.running,(H)=>H.id,(H,I)=>{var W=Aa();let L;var N=s(W);{var F=(B)=>{var O=Ta(),y=s(O);We(y,{get id(){return e(I).id},get name(){return e(I).name},scale:4});var M=f(y,2);ze(M),xt(M,!0),l(O),Te("focus",M,(J)=>J.currentTarget.select()),Te("blur",M,()=>t.oncommitrename(e(I).id)),V("keydown",M,(J)=>{if(J.key==="Enter")J.currentTarget.blur();else if(J.key==="Escape")t.oncancelrename()}),_e(M,a),c(B,O)},z=(B)=>{var O=ka(),y=s(O);We(y,{get id(){return e(I).id},get name(){return e(I).name},scale:4});var M=f(y,2),J=s(M,!0);l(M);var se=f(M,2);{var me=(G)=>{var ne=Pa(),ge=s(ne);ht(ge,{size:13}),l(ne),c(G,ne)};E(se,(G)=>{if(e(I).mode==="terminal")G(me)})}l(O),A(()=>{Y(O,"title",e(I).name),Q(J,e(I).name)}),V("click",O,()=>t.onselect(e(I).id)),V("dblclick",O,()=>t.onstartrename(e(I))),c(B,O)};E(N,(B)=>{if(t.editingId===e(I).id)B(F);else B(z,-1)})}l(W),A(()=>L=oe(W,1,"tab svelte-r39acv",null,L,{active:e(I).id===t.active,"attn-done":e(I).id!==t.active&&t.attention[e(I).id]==="done","attn-waiting":e(I).id!==t.active&&t.attention[e(I).id]==="waiting"})),c(H,W)}),l(Z),c(w,Z)};E($,(w)=>{if(t.running.length>0)w(u)})}var b=f($,2),R=s(b);Xe(R,{size:18}),l(b),A((w)=>Y(b,"href",w),[()=>Re("/settings")]),c(r,v)},$$slots:{default:!0}}),re()}Ee(["keydown","click","dblclick"]);var za=g('<div class="row svelte-w5e143"> </div>'),_a=g('<div class="stalled svelte-w5e143"><p class="svelte-w5e143">Waiting for code-server to answer inside the container.</p> <!></div>'),Da=g('<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 Ct(i,t){ae(t,!0);let a=be(t,"speed",3,1),r=x(!1);de(()=>{if(t.stalledAfterMs===void 0)return;let L=setTimeout(()=>n(r,!0),t.stalledAfterMs);return()=>clearTimeout(L)});let o=3,v=22,$=140,u=7,b=k(()=>Math.max(20,$/a())),w=x(Ie((()=>Array.from({length:o},()=>Array.from({length:v},()=>Math.random()<0.5?0:1)))()));de(()=>{if(window.matchMedia?.("(prefers-reduced-motion: reduce)").matches)return;let L=setInterval(()=>{let N=e(w).map((F)=>F.slice());for(let F=0;F<u;F++){let z=N[Math.floor(Math.random()*o)],B=Math.floor(Math.random()*v);z[B]=z[B]?0:1}n(w,N,!0)},e(b));return()=>clearInterval(L)});var Z=Da(),H=s(Z);xe(H,21,()=>e(w),pi,(L,N)=>{var F=za(),z=s(F,!0);l(F),A((B)=>Q(z,B),[()=>e(N).join("")]),c(L,F)}),l(H);var I=f(H,4);{var W=(L)=>{var N=_a(),F=f(s(N),2);{var z=(B)=>{Ne(B,{size:"sm",get onclick(){return t.onoverride},children:(O,y)=>{le();var M=Ce("Open anyway");c(O,M)},$$slots:{default:!0}})};E(F,(B)=>{if(t.onoverride)B(z)})}l(N),c(L,N)};E(I,(L)=>{if(e(r))L(W)})}l(Z),c(i,Z),re()}var Va=new Set(["$$slots","$$events","$$legacy"]);function Nt(i,t){let a=ee(t,Va),r=[["rect",{width:"18",height:"18",x:"3",y:"3",rx:"2"}],["path",{d:"M15 3v18"}],["path",{d:"m10 15-3-3 3-3"}]];ie(i,te({name:"panel-right-open"},()=>a,{get iconNode(){return r}}))}var Ra=new Set(["$$slots","$$events","$$legacy"]);function yt(i,t){let a=ee(t,Ra),r=[["rect",{width:"18",height:"18",x:"3",y:"3",rx:"2"}],["path",{d:"M15 3v18"}],["path",{d:"m8 9 3 3-3 3"}]];ie(i,te({name:"panel-right-close"},()=>a,{get iconNode(){return r}}))}var Wa=new Set(["$$slots","$$events","$$legacy"]);function Et(i,t){let a=ee(t,Wa),r=[["path",{d:"M21 12a9 9 0 1 1-9-9c2.52 0 4.93 1 6.74 2.74L21 8"}],["path",{d:"M21 3v5h-5"}]];ie(i,te({name:"rotate-cw"},()=>a,{get iconNode(){return r}}))}var Oa=g('<span class="status svelte-ui3nvu">connecting…</span>'),Ja=g('<div class="term svelte-ui3nvu"></div> <div class="overlay svelte-ui3nvu"><!> <!> <button type="button" title="Reload terminal (reconnects, keeps the session)" aria-label="Reload terminal"><!></button></div>',1);function Mt(i,t){ae(t,!0);let a=be(t,"focus",3,!0),r,o,v,$,u,b=!1,R=x(!1),w=0,Z="0",H="1",I=48,W=new TextEncoder;function L(D){if($?.readyState===WebSocket.OPEN)$.send(W.encode(D))}function N(D){let q=new Uint8Array(D);if(q.length===0)return;if(q[0]===I)o?.write(q.subarray(1))}function F(){let D=++w,q=location.protocol==="https:"?"wss:":"ws:",m=t.arg?`?arg=${encodeURIComponent(t.arg)}`:"",S=new WebSocket(`${q}//${location.host}/p/${t.id}/ws${m}`,["tty"]);$=S,S.binaryType="arraybuffer",S.onopen=()=>{if(w!==D)return;n(R,!0),L(JSON.stringify({AuthToken:"",columns:o?.cols??80,rows:o?.rows??24}))},S.onmessage=(_)=>{if(w===D)N(_.data)},S.onclose=()=>{if(w!==D||b)return;n(R,!1),u=setTimeout(F,1000)},S.onerror=()=>{try{S.close()}catch{}}}function z(){if(u)clearTimeout(u);w++,n(R,!1),o?.reset();let D=$;$=void 0;let q=!1,m=()=>{if(q||b)return;if(q=!0,B(),F(),t.active&&a())o?.focus()};if(D&&D.readyState!==WebSocket.CLOSED){D.addEventListener("close",m,{once:!0}),setTimeout(m,1500);try{D.close()}catch{}}else m()}function B(){if(r?.clientWidth>0&&r?.clientHeight>0)try{v?.fit()}catch{}}function O(){if(!o)return;let D=getComputedStyle(document.documentElement),q=D.getPropertyValue("--bg").trim()||"#1a1a1a",m=D.getPropertyValue("--ink").trim()||"#e6e6e6";o.options.theme={background:q,foreground:m,cursor:m,cursorAccent:q}}wi(()=>{let D;(async()=>{let[{Terminal:m},{FitAddon:S}]=await Promise.all([import("/_mochi/client/chunk-mpv3qx28.js"),import("/_mochi/client/chunk-2j95sv83.js")]);if(b)return;if(o=new m({fontFamily:"'JetBrains Mono Variable', ui-monospace, monospace",fontSize:13,cursorBlink:!0,scrollback:1e4,allowProposedApi:!0}),v=new S,o.loadAddon(v),o.open(r),O(),B(),o.onData((_)=>L(Z+_)),o.onResize(({cols:_,rows:K})=>L(H+JSON.stringify({columns:_,rows:K}))),D=new MutationObserver(O),D.observe(document.documentElement,{attributes:!0,attributeFilter:["data-theme"]}),F(),t.active&&a())o.focus()})();let q=new ResizeObserver(()=>B());return q.observe(r),()=>{if(b=!0,q.disconnect(),D?.disconnect(),u)clearTimeout(u);try{$?.close()}catch{}o?.dispose()}}),de(()=>{if(t.active&&o){if(B(),a())o.focus()}});var y=Ja(),M=ve(y);Ue(M,(D)=>r=D,()=>r);var J=f(M,2),se=s(J);{var me=(D)=>{var q=Oa();c(D,q)};E(se,(D)=>{if(!e(R))D(me)})}var G=f(se,2);Si(G,()=>t.actions??bi);var ne=f(G,2),ge=s(ne);Et(ge,{size:14}),l(ne),l(J),V("click",ne,z),c(i,y),re()}Ee(["click"]);var Ka=g('<button type="button"><!></button>'),Za=g('<div role="separator" aria-orientation="vertical" aria-label="Resize terminal panes" tabindex="0"></div> <div><!></div>',1),Ha=g('<div class="split svelte-1ysvu88"><div class="side svelte-1ysvu88"><!></div> <!></div>');function ti(i,t){ae(t,!0);let a=(y)=>{var M=Ka(),J=s(M);{var se=(G)=>{yt(G,{size:14})},me=(G)=>{Nt(G,{size:14})};E(J,(G)=>{if(e(o))G(se);else G(me,-1)})}l(M),A(()=>{Y(M,"aria-pressed",e(o)),Y(M,"title",e(o)?"Hide the shell pane":"Open a shell alongside Claude"),Y(M,"aria-label",e(o)?"Hide the shell pane":"Open a shell alongside Claude")}),V("click",M,R),c(y,M)},r=be(t,"initialOpen",3,!1),o=x(Ie(r())),v=x(Ie(r())),$=x(50),u=x("left"),b;function R(){if(n(o,!e(o)),e(o))n(v,!0);n(u,e(o)?"right":"left",!0),Pe(`/api/instances/${t.id}/split`,{open:e(o)}).catch(()=>{})}function w(y){return Math.min(80,Math.max(20,y))}function Z(y){let M=b.getBoundingClientRect();if(M.width>0)n($,w((y-M.left)/M.width*100),!0)}function H(y){y.preventDefault(),y.currentTarget.setPointerCapture(y.pointerId)}function I(y){if(y.currentTarget.hasPointerCapture(y.pointerId))Z(y.clientX)}function W(y){if(y.key==="ArrowLeft")n($,w(e($)-5),!0);else if(y.key==="ArrowRight")n($,w(e($)+5),!0);else return;y.preventDefault()}var L=Ha(),N=s(L);let F;var z=s(N);{let y=k(()=>t.active&&e(u)==="left"),M=k(()=>e(o)?void 0:a);Mt(z,{get id(){return t.id},get active(){return t.active},get focus(){return e(y)},get actions(){return e(M)}})}l(N);var B=f(N,2);{var O=(y)=>{var M=Za(),J=ve(M);let se;Y(J,"aria-valuemin",20),Y(J,"aria-valuemax",80);var me=f(J,2);let G,ne;var ge=s(me);{let D=k(()=>t.active&&e(o)),q=k(()=>t.active&&e(o)&&e(u)==="right"),m=k(()=>e(o)?a:void 0);Mt(ge,{get id(){return t.id},arg:"shell",get active(){return e(D)},get focus(){return e(q)},get actions(){return e(m)}})}l(me),A((D)=>{se=oe(J,1,"divider svelte-1ysvu88",null,se,{hidden:!e(o)}),Y(J,"aria-valuenow",D),G=oe(me,1,"side svelte-1ysvu88",null,G,{hidden:!e(o)}),ne=ei(me,"",ne,{"flex-basis":`${100-e($)}%`})},[()=>Math.round(e($))]),V("pointerdown",J,H),V("pointermove",J,I),V("dblclick",J,()=>n($,50)),V("keydown",J,W),Te("pointerdown",me,()=>n(u,"right"),!0),c(y,M)};E(B,(y)=>{if(e(v))y(O)})}l(L),Ue(L,(y)=>b=y,()=>b),A(()=>F=ei(N,"",F,{"flex-basis":e(o)?`${e($)}%`:"100%"})),Te("pointerdown",N,()=>n(u,"left"),!0),c(i,L),re()}Ee(["click","pointerdown","pointermove","dblclick","keydown"]);var Qa=g('<iframe class="svelte-1duc7gd"></iframe>'),Ya=g("<div><!> <!></div>"),Ga=g('<div class="empty svelte-1duc7gd">No running instances.</div>'),Ua=g("<div><!> <div><!> <!></div></div> <!>",1);function ii(i,t){ae(t,!0);let a=x(Ie(t.snapshot)),r=x(Ie(t.preflight)),o=x(Ie(t.pet)),v=x(Ie(t.filter)),$=x(t.snapshot.length>0),u=k(()=>e(a).filter((d)=>d.status==="running")),b=x(Ie(Object.fromEntries(t.snapshot.map((d)=>[d.id,d.attention])))),R=x(null),w=x("");function Z(d){n(R,d.id,!0),n(w,d.name,!0)}function H(){n(R,null),n(w,"")}async function I(d){let h=e(w).trim(),$e=e(a).find((ue)=>ue.id===d)?.name;if(!h||h===$e){H();return}H();try{await Pe(`/api/instances/${d}/rename`,{name:h},"Failed to rename")}catch(ue){it.error(ue.message)}}function W(d){n(v,d,!0),Pe("/api/settings/filter",{value:d}).catch(()=>{})}let L=x(Ie(t.initialPath)),N=k(()=>e(L).startsWith("/ide")),F=k(()=>e(L).startsWith("/ide/")?e(L).slice(5):""),z=k(()=>e(N)?e(u).some((d)=>d.id===e(F))?e(F):e(u)[0]?.id??"":"");function B(d){if(d===e(L))return;history.pushState({},"",d),n(L,d,!0)}de(()=>{function d(h){if(h.defaultPrevented||h.button!==0||h.metaKey||h.ctrlKey||h.shiftKey||h.altKey)return;let $e=h.target?.closest?.("a");if(!$e)return;let ue=$e.getAttribute("href");if(!ue||$e.target==="_blank"||$e.hasAttribute("download"))return;let he=new URL(ue,location.href);if(he.origin!==location.origin)return;if(he.pathname==="/"||he.pathname.startsWith("/ide/"))h.preventDefault(),B(he.pathname)}return document.addEventListener("click",d),()=>document.removeEventListener("click",d)}),de(()=>{function d(){n(L,location.pathname,!0)}return window.addEventListener("popstate",d),()=>window.removeEventListener("popstate",d)}),de(()=>{if(e(u).length===0)return;function d(h){h.preventDefault(),h.returnValue=""}return window.addEventListener("beforeunload",d),()=>window.removeEventListener("beforeunload",d)});let O=new Fe;de(()=>{if(e(z))O.add(e(z))});let y=new Fe,M=new Fe,J=new Fe,se=(d)=>M.has(d)||J.has(d),me=1e4;de(()=>{let d=e(u).find((h)=>h.id===e(z));document.title=e(N)&&d?`${d.name} — Codebay`:"Codebay"}),de(()=>{return window.addEventListener("pointerdown",at),window.addEventListener("keydown",at),()=>{window.removeEventListener("pointerdown",at),window.removeEventListener("keydown",at)}}),de(()=>{let d=!1;return Mi((h)=>{if(h.type==="preflight"){n(r,{...e(r),docker:h.data.docker,cli:h.data.cli},!0);return}if(h.type==="pet"){n(o,Ni(h.data.name??void 0),!0);return}if(h.type==="filter"){n(v,h.data.value,!0);return}if(h.type==="default-mode"){n(r,{...e(r),defaultMode:h.data.mode},!0);return}if(h.type==="health"){let X=e(a).find((ye)=>ye.id===h.data.id);if(h.data.health.codeServerAccessible&&X?.status==="running")M.add(h.data.id);return}if(h.type!=="instances")return;let $e=h.data,ue=new Set($e.filter((X)=>X.status==="running").map((X)=>X.id));for(let X of[...M])if(!ue.has(X))M.delete(X);for(let X of[...J])if(!ue.has(X))J.delete(X);for(let X of[...y])if(!ue.has(X))y.delete(X);let he={};for(let X of $e)he[X.id]=X.attention;if(d)for(let X in he){let ye=he[X];if(ye&&ye!==e(b)[X])if(X===e(z))console.log(`[chime] attention id=${X} state=${ye} — skipped (tab is active/focused)`);else console.log(`[chime] attention id=${X} state=${ye} → playChime`),Ei(ye)}else console.log("[chime] first frame after (re)connect — baselining, no chimes");d=!0,n(a,$e,!0),n(b,he,!0),n($,!0)},()=>{d=!1})}),de(()=>{if(!e(z)||!e(b)[e(z)])return;let d=()=>{if(document.visibilityState==="visible")Pe(`/api/instances/${e(z)}/attention/clear`).catch(()=>{})};return d(),document.addEventListener("visibilitychange",d),()=>document.removeEventListener("visibilitychange",d)});var G=Ua(),ne=ve(G);let ge;var D=s(ne);{var q=(d)=>{qt(d,{get running(){return e(u)},get active(){return e(z)},get attention(){return e(b)},get editingId(){return e(R)},onselect:(h)=>B(`/ide/${h}`),onstartrename:Z,oncommitrename:I,oncancelrename:H,get editingName(){return e(w)},set editingName(h){n(w,h,!0)}})},m=(d)=>{jt(d,{get preflight(){return e(r)},get instances(){return e(a)},get loaded(){return e($)},get pet(){return e(o)},get filter(){return e(v)},onFilter:W})};E(D,(d)=>{if(e(N))d(q);else d(m,-1)})}var S=f(D,2);let _;var K=s(S);xe(K,17,()=>e(u),(d)=>d.id,(d,h)=>{var $e=tt(),ue=ve($e);{var he=(ye)=>{var Ae=Ya();let Oe;var rt=s(Ae);{var Lt=(p)=>{var U=tt(),Me=ve(U);{var je=(Se)=>{{let ce=k(()=>e(h).id===e(z)),fe=k(()=>e(h).terminal_split===1);ti(Se,{get id(){return e(h).id},get active(){return e(ce)},get initialOpen(){return e(fe)}})}},Je=(Se)=>{var ce=Qa();A((fe)=>{Y(ce,"src",fe),Y(ce,"title",e(h).name)},[()=>Ci(e(h))]),Te("load",ce,()=>y.add(e(h).id)),Ii(ce),c(Se,ce)};E(Me,(Se)=>{if(e(h).mode==="terminal")Se(je);else Se(Je,-1)})}c(p,U)},Tt=k(()=>se(e(h).id));E(rt,(p)=>{if(e(Tt))p(Lt)})}var Pt=f(rt,2);{var nt=(p)=>{Ct(p,{stalledAfterMs:me,onoverride:()=>J.add(e(h).id)})},kt=k(()=>!se(e(h).id)),lt=(p)=>{Ct(p,{})},ot=k(()=>e(h).mode!=="terminal"&&!y.has(e(h).id));E(Pt,(p)=>{if(e(kt))p(nt);else if(e(ot))p(lt,1)})}l(Ae),A(()=>Oe=oe(Ae,1,"pane svelte-1duc7gd",null,Oe,{active:e(h).id===e(z)})),c(ye,Ae)},X=k(()=>O.has(e(h).id));E(ue,(ye)=>{if(e(X))ye(he)})}c(d,$e)});var C=f(K,2);{var T=(d)=>{var h=Ga();c(d,h)};E(C,(d)=>{if(e(N)&&e(u).length===0)d(T)})}l(S),l(ne);var P=f(ne,2);yi(P,{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(()=>{ge=oe(ne,1,"app svelte-1duc7gd",null,ge,{ide:e(N)}),_=oe(S,1,"panes svelte-1duc7gd",null,_,{hidden:!e(N)})}),c(i,G),re()}Li("AppShell_2rtnxn6pgp2rh",ii);
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{a as is,c as Zv,d as fs,e as Av,f as ms,g as ts,h as ys}from"/_mochi/client/chunk-m4fzsd5b.js";import{D as _,E as $v,G as ps,H as as}from"/_mochi/client/chunk-m497q88s.js";import{$ as j,$a as hs,Aa as m,Ba as x,Ca as W,Ea as rv,Fa as n,K as e,Ka as vs,L as d,La as E,Ma as qv,Oa as ss,P as Mv,Q as Wv,Ra as Yv,Ta as ls,Ua as es,Wa as r,Xa as $,Y as L,Ya as J,ba as p,cb as Cs,da as gv,ea as h,fa as b,ga as f,ha as u,ka as S,oa as ov,pa as s,ta as Qv,ua as vv,va as nv,wa as C,za as o}from"/_mochi/client/chunk-v65n8th6.js";import"/_mochi/client/chunk-rs41by6w.js";var Rs=new Set(["$$slots","$$events","$$legacy"]);function Nv(O,a){let I=r(a,Rs),i=[["path",{d:"m12 19-7-7 7-7"}],["path",{d:"M19 12H5"}]];_(O,$({name:"arrow-left"},()=>I,{get iconNode(){return i}}))}var bs=new Set(["$$slots","$$events","$$legacy"]);function fv(O,a){let I=r(a,bs),i=[["path",{d:"M7 7h10v10"}],["path",{d:"M7 17 17 7"}]];_(O,$({name:"arrow-up-right"},()=>I,{get iconNode(){return i}}))}var ws=new Set(["$$slots","$$events","$$legacy"]);function Sv(O,a){let I=r(a,ws),i=[["path",{d:"M20 6 9 17l-5-5"}]];_(O,$({name:"check"},()=>I,{get iconNode(){return i}}))}var Ps=C("<span></span>");function R(O,a){let I=J(a,"variant",3,"text");var i=Ps();let Q;S(()=>{E(i,1,`skel ${I()??""}`,"svelte-tl058d"),Q=qv(i,"",Q,{width:a.width})}),m(O,i)}var cs=C('<div class="hrow svelte-1hnopyv"><span><!></span> <span class="hlabel svelte-1hnopyv"> </span> <span class="hvalue svelte-1hnopyv"> </span></div>'),Es=C('<div class="hrow svelte-1hnopyv"><span class="box idle svelte-1hnopyv"></span> <!> <!></div>'),ds=C('<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>'),us=C('<div><div class="panel-bar">Health</div> <div class="health svelte-1hnopyv"><!></div> <div class="hfoot svelte-1hnopyv"> </div></div>');function Lv(O,a){Mv(a,!0);let I=J(a,"health",3,null),i=J(a,"lastFetchedAt",3,null),Q=J(a,"active",3,!0),mv=J(a,"injectionChecks",3,0),Y=J(a,"mode",3,"ide"),M=L(()=>["Container running",Y()==="terminal"?"Terminal reachable":"Code-server reachable"]),T=L(()=>{if(!I())return[];let y=(N)=>({ok:N,value:N?"OK":"—"});return[{label:s(M)[0],...y(I().containerRunning)},{label:s(M)[1],...y(I().codeServerAccessible)},...I().injections.map((N)=>({label:N.label,...y(N.ok)}))]});function jv(){return I()?s(T).length:s(M).length+mv()}let pv=j(gv(Date.now()));u(()=>{let y=setInterval(()=>p(pv,Date.now(),!0),1000);return()=>clearInterval(y)});let zv=L(()=>{if(!Q()&&!I())return"Container not running";if(!i())return"Waiting for first check…";return`Updated ${Math.max(0,Math.round((s(pv)-i())/1000))}s ago`});var Z=us();let U;var A=f(h(Z),2),av=h(A);{var q=(y)=>{var N=o(),w=b(N);n(w,17,()=>s(T),(z)=>z.label,(z,F)=>{var D=cs(),H=h(D),V=h(H);{var g=(B)=>{Sv(B,{size:12,strokeWidth:3})},Kv=(B)=>{$v(B,{size:12,strokeWidth:3})};W(V,(B)=>{if(s(F).ok)B(g);else B(Kv,-1)})}e(H);var P=f(H,2),lv=h(P,!0);e(P);var yv=f(P,2),Xv=h(yv,!0);e(yv),e(D),S(()=>{E(H,1,`box ${s(F).ok?"ok":"bad"}`,"svelte-1hnopyv"),x(lv,s(F).label),x(Xv,s(F).value)}),m(z,D)}),m(y,N)},sv=(y)=>{var N=o(),w=b(N);n(w,17,()=>Array(jv()),rv,(z,F)=>{var D=Es(),H=f(h(D),2);R(H,{width:"120px"});var V=f(H,2);R(V,{variant:"pill"}),e(D),m(z,D)}),m(y,N)},Dv=(y)=>{var N=o(),w=b(N);n(w,16,()=>s(M),(z)=>z,(z,F)=>{var D=ds(),H=f(h(D),2),V=h(H,!0);e(H),d(2),e(D),S(()=>x(V,F)),m(z,D)}),m(y,N)};W(av,(y)=>{if(I())y(q);else if(Q())y(sv,1);else y(Dv,-1)})}e(A);var tv=f(A,2),Hv=h(tv,!0);e(tv),e(Z),S(()=>{U=E(Z,1,"healthwrap panel svelte-1hnopyv",null,U,{dim:!Q()&&!I()}),x(Hv,s(zv))}),m(O,Z),Wv()}var qs=C('<form method="POST" action="?/restart" class="svelte-15fxkvm"><button class="restart svelte-15fxkvm" type="submit"> </button></form> <a class="open svelte-15fxkvm" target="_blank" rel="noopener">Open in new tab <!></a>',1),gs=C('<p class="restart-err svelte-15fxkvm"> </p>'),_v=C('<code class="svelte-15fxkvm"> </code>'),rs=C('<code class="svelte-15fxkvm">local (project devcontainer.json)</code>'),$s=C('<code class="muted svelte-15fxkvm">—</code>'),_s=C('<button class="rebuild svelte-15fxkvm"> </button>'),os=C('<li class="svelte-15fxkvm"><span class="cp svelte-15fxkvm"> </span> <span class="arr svelte-15fxkvm">→</span> <a target="_blank" rel="noopener" class="svelte-15fxkvm"> <!></a> <button class="rm svelte-15fxkvm" title="Remove">×</button></li>'),ns=C('<ul class="port-list svelte-15fxkvm"></ul>'),vl=C('<p class="empty svelte-15fxkvm">No ports forwarded yet.</p>'),sl=C('<p class="port-err svelte-15fxkvm"> </p>'),ll=C('<p class="hint pending svelte-15fxkvm">Port changes apply when you <strong class="svelte-15fxkvm">Restart</strong> (recreates the container).</p>'),el=C('<div class="err svelte-15fxkvm"> </div>'),hl=C('<header class="topbar svelte-15fxkvm"><a class="back svelte-15fxkvm" href="/"><!> All instances</a> <div class="title svelte-15fxkvm"><span class="name svelte-15fxkvm"> </span> <!></div> <!></header> <!> <main class="stage svelte-15fxkvm"><div class="meta svelte-15fxkvm"><span class="k svelte-15fxkvm">Source</span> <!> <span class="k svelte-15fxkvm">Image</span> <!></div> <div class="healthslot svelte-15fxkvm"><!></div> <section class="ports panel svelte-15fxkvm"><div class="ports-bar panel-bar svelte-15fxkvm"><span class="svelte-15fxkvm">Forwarded ports</span> <!></div> <div class="ports-body svelte-15fxkvm"><!> <form class="add svelte-15fxkvm"><input type="number" min="1" max="65535" placeholder="container port (e.g. 3000)" spellcheck="false" class="svelte-15fxkvm"/> <button type="submit" class="svelte-15fxkvm">Add</button></form> <!> <!> <p class="hint svelte-15fxkvm">Your app must bind to <code class="svelte-15fxkvm">0.0.0.0</code> inside the container to be reachable.</p></div></section> <div class="logwrap panel svelte-15fxkvm"><div class="log-bar panel-bar svelte-15fxkvm"><span class="svelte-15fxkvm">Boot log</span> <div class="log-actions svelte-15fxkvm"><button> </button> <button class="copy svelte-15fxkvm"> </button></div></div> <div class="logs svelte-15fxkvm"><pre class="svelte-15fxkvm"> <span class="caret svelte-15fxkvm"></span></pre></div> <!></div></main>',1);function Vv(O,a){Mv(a,!0);let I=J(a,"injectionChecks",3,0),i=j(null),Q=j(null),mv=j(null),Y=j(""),M=j(null),T=j(!0);u(()=>{if(!s(T)||s(Y).length===0)return;ov().then(()=>{if(s(T))s(M)?.scrollTo(0,s(M).scrollHeight)})});function jv(){if(!s(M))return;if(s(M).scrollHeight-s(M).clientHeight-s(M).scrollTop>40)p(T,!1)}function pv(){if(p(T,!s(T)),s(T))s(M)?.scrollTo(0,s(M).scrollHeight)}u(()=>as()),u(()=>ts(`/api/instances/${a.id}/logs`,(v)=>p(Y,s(Y)+v),()=>p(Y,""))),u(()=>ys((v)=>{if(v.type==="instances"){let l=v.data.find((t)=>t.id===a.id);if(l)p(i,l,!0)}else if(v.type==="health"&&v.data.id===a.id)p(Q,v.data.health,!0),p(mv,Date.now(),!0)}));let zv=L(()=>s(i)?is(s(i)):"#"),Z=j(""),U=j(null),A=j(!1),av=L(()=>s(i)?.forwarded_ports??[]),q=L(()=>s(i)?.status==="creating");async function sv(v){p(U,null);try{return await v(),!0}catch(l){return p(U,l.message,!0),!1}}async function Dv(v){v.preventDefault();let l=Number.parseInt(s(Z),10);if(!Number.isInteger(l)||l<1||l>65535){p(U,"Enter a port number between 1 and 65535");return}if(await sv(()=>Zv(`/api/instances/${a.id}/ports`,{port:l})))p(Z,""),p(A,!0)}async function tv(v){if(await sv(()=>fs(`/api/instances/${a.id}/ports/${v}`)))p(A,!0)}async function Hv(){if(await sv(()=>Zv(`/api/instances/${a.id}/rebuild`)))p(A,!1)}let y=j(null),N=j(!1),w={onPending:(v)=>p(N,v,!0),submit:()=>{return p(y,null),({result:v})=>{if(v.type==="failure")p(y,v.data?.error??"Restart failed",!0);else if(v.type==="error")p(y,"Network error. Try again.")}}},z=j(!1),F;async function D(){await navigator.clipboard.writeText(s(Y)),p(z,!0),clearTimeout(F),F=setTimeout(()=>p(z,!1),2000)}var H=hl(),V=b(H),g=h(V),Kv=h(g);Nv(Kv,{size:15}),d(),e(g);var P=f(g,2),lv=h(P),yv=h(lv,!0);e(lv);var Xv=f(lv,2);{var B=(v)=>{ms(v,{get status(){return s(i).status}})},xs=(v)=>{R(v,{variant:"pill"})};W(Xv,(v)=>{if(s(i))v(B);else v(xs,-1)})}e(P);var Is=f(P,2);{var Ns=(v)=>{var l=qs(),t=b(l),G=h(t),c=h(G,!0);e(G),e(t),vs(t,()=>hs(w));var k=f(t,2),K=f(h(k));fv(K,{size:15}),e(k),S(()=>{G.disabled=s(N)||s(q),x(c,s(N)||s(q)?"Restarting…":"Restart container"),Yv(k,"href",s(zv))}),m(v,l)};W(Is,(v)=>{if(s(i)?.status==="running")v(Ns)})}e(V);var kv=f(V,2);{var Ss=(v)=>{var l=gs(),t=h(l,!0);e(l),S(()=>x(t,s(y))),m(v,l)};W(kv,(v)=>{if(s(y))v(Ss)})}var Uv=f(kv,2),Ov=h(Uv),Bv=f(h(Ov),2);{var Ms=(v)=>{var l=_v(),t=h(l,!0);e(l),S(()=>x(t,s(i).source_path)),m(v,l)},Ws=(v)=>{R(v,{variant:"wide"})};W(Bv,(v)=>{if(s(i))v(Ms);else v(Ws,-1)})}var js=f(Bv,4);{var zs=(v)=>{var l=o(),t=b(l);{var G=(K)=>{var X=rs();m(K,X)},c=(K)=>{var X=_v(),Iv=h(X,!0);e(X),S(()=>x(Iv,s(i).image_source)),m(K,X)},k=(K)=>{var X=$s();m(K,X)};W(t,(K)=>{if(s(i).image_source==="local")K(G);else if(s(i).image_source)K(c,1);else K(k,-1)})}m(v,l)},Ds=(v)=>{R(v,{variant:"wide"})};W(js,(v)=>{if(s(i))v(zs);else v(Ds,-1)})}e(Ov);var Tv=f(Ov,2),Hs=h(Tv);{let v=L(()=>!s(i)||s(i).status==="running"),l=L(()=>s(i)?.mode??"ide");Lv(Hs,{get health(){return s(Q)},get lastFetchedAt(){return s(mv)},get injectionChecks(){return I()},get active(){return s(v)},get mode(){return s(l)}})}e(Tv);var Fv=f(Tv,2),Gv=h(Fv),Ks=f(h(Gv),2);{var Xs=(v)=>{var l=_s(),t=h(l,!0);e(l),S(()=>{l.disabled=s(q),x(t,s(q)?"Restarting…":"Restart to apply")}),vv("click",l,Hv),m(v,l)};W(Ks,(v)=>{if(s(A))v(Xs)})}e(Gv);var Rv=f(Gv,2),bv=h(Rv);{var Os=(v)=>{var l=ns();n(l,21,()=>s(av),(t)=>t.container_port,(t,G)=>{var c=os(),k=h(c),K=h(k);e(k);var X=f(k,4),Iv=h(X),Vs=f(Iv);fv(Vs,{size:12}),e(X);var ks=f(X,2);e(c),S((Us,Bs)=>{x(K,`:${s(G).container_port??""}`),Yv(X,"href",Us),x(Iv,`${Bs??""} `)},[()=>Av(s(G).host_port),()=>Av(s(G).host_port).replace("http://","")]),vv("click",ks,()=>tv(s(G).container_port)),m(t,c)}),e(l),m(v,l)},Ts=(v)=>{var l=vl();m(v,l)};W(bv,(v)=>{if(s(av).length)v(Os);else v(Ts,-1)})}var Cv=f(bv,2),wv=h(Cv);ss(wv),d(2),e(Cv);var Pv=f(Cv,2);{var Fs=(v)=>{var l=sl(),t=h(l,!0);e(l),S(()=>x(t,s(U))),m(v,l)};W(Pv,(v)=>{if(s(U))v(Fs)})}var Gs=f(Pv,2);{var Js=(v)=>{var l=ll();m(v,l)};W(Gs,(v)=>{if(s(A))v(Js)})}d(2),e(Rv),e(Fv);var cv=f(Fv,2),Jv=h(cv),Ev=f(h(Jv),2),ev=h(Ev);let dv;var Ls=h(ev,!0);e(ev);var xv=f(ev,2),Qs=h(xv,!0);e(xv),e(Ev),e(Jv);var hv=f(Jv,2),uv=h(hv),Ys=h(uv,!0);d(),e(uv),e(hv),es(hv,(v)=>p(M,v),()=>s(M));var Zs=f(hv,2);{var As=(v)=>{var l=el(),t=h(l,!0);e(l),S(()=>x(t,s(i).error)),m(v,l)};W(Zs,(v)=>{if(s(i)?.status==="error"&&s(i).error)v(As)})}e(cv),e(Uv),S(()=>{x(yv,s(i)?.name??"Instance"),dv=E(ev,1,"copy svelte-15fxkvm",null,dv,{active:s(T)}),x(Ls,s(T)?"Following":"Follow log"),xv.disabled=!s(Y),x(Qs,s(z)?"Copied!":"Copy logs"),x(Ys,s(Y)||"Waiting for output…")}),vv("click",g,function(...v){ps?.apply(this,v)}),Qv("submit",Cv,Dv),ls(wv,()=>s(Z),(v)=>p(Z,v)),vv("click",ev,pv),vv("click",xv,D),Qv("scroll",hv,jv),m(O,H),Wv()}nv(["click"]);Cs("InstanceView_2ma45l9bybfhl",Vv);
|
|
@@ -1,29 +0,0 @@
|
|
|
1
|
-
import{i as xf,j as lI,k as sI,l as dI,m as vI,n as aI,o as rI}from"/_mochi/client/chunk-a2psjmrm.js";import{p as Cf}from"/_mochi/client/chunk-6rbs0mhx.js";import{A as uI,C as tI,w as mI,x as wf,y as b0,z as a}from"/_mochi/client/chunk-7wkvn2vx.js";import{D as B,E as gI,H as iI}from"/_mochi/client/chunk-m497q88s.js";import{$ as y,$a as c,Aa as z,Ba as V,Ca as G,Fa as W1,Ia as bI,K as I,Ka as E,L as Y,La as C1,Oa as M,P as H0,Pa as q1,Q as P0,Qa as z1,Ra as v,Ta as l,Ua as q0,Wa as H,Xa as P,Y as EI,Ya as hI,Z as h0,ba as w,bb as ff,cb as eI,da as k,ea as L,fa as h1,ga as x,ha as cI,ka as Q,pa as f,ua as _,va as B0,wa as O,ya as g}from"/_mochi/client/chunk-v65n8th6.js";import"/_mochi/client/chunk-rs41by6w.js";var vN=new Set(["$$slots","$$events","$$legacy"]);function X0(A,j){let W=H(j,vN),J=[["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"}]];B(A,P({name:"container"},()=>W,{get iconNode(){return J}}))}var aN=new Set(["$$slots","$$events","$$legacy"]);function Y0(A,j){let W=H(j,aN),J=[["path",{d:"M12 2v10"}],["path",{d:"M18.4 6.6a9 9 0 1 1-12.77.04"}]];B(A,P({name:"power"},()=>W,{get iconNode(){return J}}))}var rN=new Set(["$$slots","$$events","$$legacy"]);function K0(A,j){let W=H(j,rN),J=[["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"}]];B(A,P({name:"volume-2"},()=>W,{get iconNode(){return J}}))}var eN=new Set(["$$slots","$$events","$$legacy"]);function R0(A,j){let W=H(j,eN),J=[["circle",{cx:"11",cy:"4",r:"2"}],["circle",{cx:"18",cy:"8",r:"2"}],["circle",{cx:"20",cy:"16",r:"2"}],["path",{d:"M9 10a5 5 0 0 1 5 5v3.5a3.5 3.5 0 0 1-6.84 1.045Q6.52 17.48 4.46 16.84A3.5 3.5 0 0 1 5.5 10Z"}]];B(A,P({name:"paw-print"},()=>W,{get iconNode(){return J}}))}var $N=new Set(["$$slots","$$events","$$legacy"]);function G0(A,j){let W=H(j,$N),J=[["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"}]];B(A,P({name:"sun-moon"},()=>W,{get iconNode(){return J}}))}var oN=new Set(["$$slots","$$events","$$legacy"]);function D0(A,j){let W=H(j,oN),J=[["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"}]];B(A,P({name:"sun"},()=>W,{get iconNode(){return J}}))}var nN=new Set(["$$slots","$$events","$$legacy"]);function U0(A,j){let W=H(j,nN),J=[["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"}]];B(A,P({name:"moon"},()=>W,{get iconNode(){return J}}))}var _N=new Set(["$$slots","$$events","$$legacy"]);function F0(A,j){let W=H(j,_N),J=[["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"}]];B(A,P({name:"monitor"},()=>W,{get iconNode(){return J}}))}var MI="theme";function TI(){let A=ff.get(MI);return A==="dark"||A==="light"?A:"auto"}function OI(A){ff.set(MI,A,{expires:400,path:"/"})}function pI(A){if(A==="auto")delete document.documentElement.dataset.theme;else document.documentElement.dataset.theme=A}var Sw=O('<button type="button" role="radio"><!> </button>'),fw=O('<div class="picker svelte-3gcwuj" role="radiogroup" aria-label="Theme"></div>');function If(A,j){H0(j,!0);let W=y(k(TI())),J=[{value:"auto",label:"Auto",icon:F0},{value:"light",label:"Light",icon:D0},{value:"dark",label:"Dark",icon:U0}];function N1(o){w(W,o,!0),OI(o),pI(o)}var $=fw();W1($,21,()=>J,({value:o,label:m,icon:I1})=>o,(o,m)=>{let I1=()=>f(m).value,w1=()=>f(m).label,F1=()=>f(m).icon;var x1=Sw();let X1;var E1=L(x1);bI(E1,F1,(Q1,H1)=>{H1(Q1,{size:13})});var c1=x(E1);I(x1),Q(()=>{X1=C1(x1,1,"segment svelte-3gcwuj",null,X1,{active:f(W)===I1()}),v(x1,"aria-checked",f(W)===I1()),V(c1,` ${w1()??""}`)}),_("click",x1,()=>N1(I1())),z(o,x1)}),I($),z(A,$),P0()}B0(["click"]);var Iw=new Set(["$$slots","$$events","$$legacy"]);function k0(A,j){let W=H(j,Iw),J=[["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"}]];B(A,P({name:"layers"},()=>W,{get iconNode(){return J}}))}var Lw=new Set(["$$slots","$$events","$$legacy"]);function M0(A,j){let W=H(j,Lw),J=[["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"}]];B(A,P({name:"folder-minus"},()=>W,{get iconNode(){return J}}))}var Nw=new Set(["$$slots","$$events","$$legacy"]);function O1(A,j){let W=H(j,Nw),J=[["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"}]];B(A,P({name:"trash-2"},()=>W,{get iconNode(){return J}}))}var ww=new Set(["$$slots","$$events","$$legacy"]);function p1(A,j){let W=H(j,ww),J=[["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"}]];B(A,P({name:"hammer"},()=>W,{get iconNode(){return J}}))}var xw=new Set(["$$slots","$$events","$$legacy"]);function b1(A,j){let W=H(j,xw),J=[["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"}]];B(A,P({name:"key-round"},()=>W,{get iconNode(){return J}}))}var Cw=new Set(["$$slots","$$events","$$legacy"]);function T0(A,j){let W=H(j,Cw),J=[["path",{d:"M10 15H6a4 4 0 0 0-4 4v2"}],["path",{d:"m14.305 16.53.923-.382"}],["path",{d:"m15.228 13.852-.923-.383"}],["path",{d:"m16.852 12.228-.383-.923"}],["path",{d:"m16.852 17.772-.383.924"}],["path",{d:"m19.148 12.228.383-.923"}],["path",{d:"m19.53 18.696-.382-.924"}],["path",{d:"m20.772 13.852.924-.383"}],["path",{d:"m20.772 16.148.924.383"}],["circle",{cx:"18",cy:"15",r:"3"}],["circle",{cx:"9",cy:"7",r:"4"}]];B(A,P({name:"user-cog"},()=>W,{get iconNode(){return J}}))}var yw=new Set(["$$slots","$$events","$$legacy"]);function O0(A,j){let W=H(j,yw),J=[["path",{d:"M12 20v2"}],["path",{d:"M12 2v2"}],["path",{d:"M17 20v2"}],["path",{d:"M17 2v2"}],["path",{d:"M2 12h2"}],["path",{d:"M2 17h2"}],["path",{d:"M2 7h2"}],["path",{d:"M20 12h2"}],["path",{d:"M20 17h2"}],["path",{d:"M20 7h2"}],["path",{d:"M7 20v2"}],["path",{d:"M7 2v2"}],["rect",{x:"4",y:"4",width:"16",height:"16",rx:"2"}],["rect",{x:"8",y:"8",width:"8",height:"8",rx:"1"}]];B(A,P({name:"cpu"},()=>W,{get iconNode(){return J}}))}var zw=new Set(["$$slots","$$events","$$legacy"]);function p0(A,j){let W=H(j,zw),J=[["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"}]];B(A,P({name:"variable"},()=>W,{get iconNode(){return J}}))}var jw=O('<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 Lf(A,j){let W=hI(j,"href",3,"/avatars"),J={name:"coin",pixels:["..####..",".#....#.","#..##..#","#.####.#","#.####.#","#..##..#",".#....#.","..####.."]};var N1=jw(),$=x(L(N1),2),o=x(L($),2),m=L(o);b0(m,{get art(){return J},name:"coin",scale:3}),I(o),I($),Y(2),I(N1),Q(()=>v($,"href",W())),z(A,N1)}var Zw=O('<span class="title svelte-1n6ht58">Settings</span>'),Z1=O('<div class="sub svelte-1n6ht58"><div class="msg error svelte-1n6ht58"> </div></div>'),Qw=O('<span class="arch svelte-1n6ht58" title="Docker daemon architecture"> </span>'),Aw=O(`Your Docker daemon runs on <strong> </strong> — pick an image that publishes
|
|
2
|
-
an <strong> </strong> manifest, or the pull will fail.`,1),f1=O('<div class="msg error svelte-1n6ht58"> </div>'),Nf=O('<div class="msg ok svelte-1n6ht58">Saved.</div>'),Jw=O(`<form class="row divided token-row svelte-1n6ht58" method="POST" action="?/gitIdentityOverride"><div class="label svelte-1n6ht58"><div class="text svelte-1n6ht58"><div class="name svelte-1n6ht58">Identity</div> <div class="desc svelte-1n6ht58">Both fields are required — leave either blank and the container falls back to the
|
|
3
|
-
host's identity.</div></div></div> <div class="model-fields svelte-1n6ht58"><label class="model-row svelte-1n6ht58"><span class="model-label svelte-1n6ht58">Name</span> <input type="text" name="name" class="image-input svelte-1n6ht58" spellcheck="false" autocapitalize="off" autocorrect="off" placeholder="Jane Doe"/></label> <label class="model-row svelte-1n6ht58"><span class="model-label svelte-1n6ht58">Email</span> <input type="text" name="email" class="image-input svelte-1n6ht58" spellcheck="false" autocapitalize="off" autocorrect="off" placeholder="jane@example.com"/></label> <div class="model-save-row svelte-1n6ht58"><!></div></div> <!></form>`),y1=O('<div class="msg ok svelte-1n6ht58"> </div>'),Vw=O('<span class="arch svelte-1n6ht58" title="Disabled while LiteLLM + Bedrock mode is on">disabled</span>'),Ww=O(`<form class="row divided token-row svelte-1n6ht58" method="POST" action="?/githubToken"><div class="label svelte-1n6ht58"><div class="text svelte-1n6ht58"><div class="name svelte-1n6ht58">GitHub token</div> <div class="desc svelte-1n6ht58">macOS / Linux: run <code class="svelte-1n6ht58">gh auth token</code> to print your GitHub CLI token, or
|
|
4
|
-
create a Personal Access Token at <code class="svelte-1n6ht58">github.com/settings/tokens</code> (scopes: <code class="svelte-1n6ht58">repo</code>, <code class="svelte-1n6ht58">read:org</code>). Leave blank and Save to clear.</div></div></div> <div class="image-controls svelte-1n6ht58"><input type="password" name="githubToken" class="image-input svelte-1n6ht58" spellcheck="false" autocapitalize="off" autocorrect="off" autocomplete="off"/> <!></div> <!></form> <form class="row divided token-row svelte-1n6ht58" method="POST" action="?/claudeToken"><div class="label svelte-1n6ht58"><div class="text svelte-1n6ht58"><div class="name svelte-1n6ht58">Claude Code token</div> <div class="desc svelte-1n6ht58">macOS / Linux: run <code class="svelte-1n6ht58">claude setup-token</code> to mint a long-lived token and
|
|
5
|
-
paste it here. Copying a live login out of the keychain or <code class="svelte-1n6ht58">~/.claude/.credentials.json</code> works too, but that credential rotates —
|
|
6
|
-
the first <code class="svelte-1n6ht58">claude</code> to refresh it signs the other one out. Leave blank and Save
|
|
7
|
-
to clear.</div></div></div> <div class="image-controls svelte-1n6ht58"><input type="password" name="claudeToken" class="image-input svelte-1n6ht58" spellcheck="false" autocapitalize="off" autocorrect="off" autocomplete="off"/> <!></div> <!></form>`,1),Xw=O('<span class="arch svelte-1n6ht58">disabled</span>'),Yw=O(`Route <code class="svelte-1n6ht58">claude</code> through a LiteLLM proxy fronting AWS Bedrock instead of Anthropic's
|
|
8
|
-
default API. When enabled, the Bedrock endpoint variables are injected into every new
|
|
9
|
-
container, host OAuth credentials are not used, and "Set tokens manually" is disabled.`,1),Kw=O('<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),Rw=O('<span class="arch svelte-1n6ht58" title="Disabled while LiteLLM + Bedrock is on">disabled</span>'),Gw=O(`Pin which model <code class="svelte-1n6ht58">claude</code> uses on the standard (subscription) path. Only
|
|
10
|
-
the fields you fill are injected into new containers as <code class="svelte-1n6ht58">ANTHROPIC_*_MODEL</code> variables; blanks fall through to Claude Code's own defaults.`,1),Dw=O('<form class="row divided token-row svelte-1n6ht58" method="POST" action="?/manualModels"><div class="label svelte-1n6ht58"><div class="text svelte-1n6ht58"><div class="name svelte-1n6ht58">Model IDs</div> <div class="desc svelte-1n6ht58">A model name or alias per tier, e.g. <code class="svelte-1n6ht58">opusplan</code>, <code class="svelte-1n6ht58">opus</code>, <code class="svelte-1n6ht58">sonnet</code>, or a full <code class="svelte-1n6ht58">claude-…</code> id. Leave a field blank to skip it.</div></div></div> <div class="model-fields svelte-1n6ht58"><label class="model-row svelte-1n6ht58"><span class="model-label svelte-1n6ht58">Opus</span> <input type="text" name="opusModel" class="image-input svelte-1n6ht58" spellcheck="false" autocapitalize="off" autocorrect="off" autocomplete="off"/></label> <label class="model-row svelte-1n6ht58"><span class="model-label svelte-1n6ht58">Sonnet</span> <input type="text" name="sonnetModel" class="image-input svelte-1n6ht58" spellcheck="false" autocapitalize="off" autocorrect="off" autocomplete="off"/></label> <label class="model-row svelte-1n6ht58"><span class="model-label svelte-1n6ht58">Haiku</span> <input type="text" name="haikuModel" class="image-input svelte-1n6ht58" spellcheck="false" autocapitalize="off" autocorrect="off" autocomplete="off"/></label> <label class="model-row svelte-1n6ht58"><span class="model-label svelte-1n6ht58">Small/fast</span> <input type="text" name="smallFastModel" class="image-input svelte-1n6ht58" spellcheck="false" autocapitalize="off" autocorrect="off" autocomplete="off"/></label> <label class="model-row svelte-1n6ht58"><span class="model-label svelte-1n6ht58">Default</span> <input type="text" name="defaultModel" class="image-input svelte-1n6ht58" spellcheck="false" autocapitalize="off" autocorrect="off" autocomplete="off"/></label> <div class="model-save-row svelte-1n6ht58"><!></div></div> <!></form>'),qI=O('<input type="hidden" name="names"/>'),Uw=O('<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>'),Fw=O('<div class="var-empty svelte-1n6ht58">No variables added yet.</div>'),Hw=O('<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>'),Pw=O('<form method="POST" action="?/petChoose" class="svelte-1n6ht58"><input type="hidden" name="name"/> <button type="submit"><!></button></form>'),Bw=O('<div class="sub pets svelte-1n6ht58"></div>'),kw=O('<span class="shutting svelte-1n6ht58">Server is shutting down — you can close this tab.</span>'),Mw=O(`<div class="page svelte-1n6ht58"><!> <main class="content svelte-1n6ht58"><section class="card svelte-1n6ht58"><form class="row svelte-1n6ht58" method="POST" action="?/defaultMode"><div class="label svelte-1n6ht58"><!> <div class="text svelte-1n6ht58"><div class="name svelte-1n6ht58">Default editor</div> <div class="desc svelte-1n6ht58">What new instances start in. <strong>Full IDE</strong> serves browser VS Code; <strong>Terminal</strong> is lighter — just Claude Code in a terminal, no code-server. You
|
|
11
|
-
can override this per instance when creating one.</div></div></div> <input type="hidden" name="mode"/> <div class="mode-toggle svelte-1n6ht58" role="group" aria-label="Default editor mode"><button type="button"><!> Full IDE</button> <button type="button"><!> Terminal</button></div></form> <!></section> <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
|
|
12
|
-
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
|
|
13
|
-
new instance's workspace. Leave blank to copy everything. Only applies to local
|
|
14
|
-
folders — cloning a Git repo URL is unaffected.</div></div></div> <div class="image-controls svelte-1n6ht58"><input type="text" name="patterns" class="image-input svelte-1n6ht58" spellcheck="false" autocapitalize="off" autocorrect="off" placeholder="node_modules, .venv, dist"/> <!> <!></div> <!></form></section> <section class="card svelte-1n6ht58"><form class="row svelte-1n6ht58" method="POST" action="?/gitIdentityToggle"><div class="label svelte-1n6ht58"><!> <div class="text svelte-1n6ht58"><div class="name svelte-1n6ht58">Override git identity</div> <div class="desc svelte-1n6ht58">Inject a name and email as <code class="svelte-1n6ht58">git config --global user.name/user.email</code> in every
|
|
15
|
-
new container, taking precedence over the host's own git config. When off, each container
|
|
16
|
-
falls back to the host's identity.</div></div></div> <label class="switch svelte-1n6ht58"><input type="checkbox" name="enabled" class="svelte-1n6ht58"/> <span class="track svelte-1n6ht58"><span class="thumb svelte-1n6ht58"></span></span></label></form> <!> <!></section> <section class="card svelte-1n6ht58"><form class="row svelte-1n6ht58" method="POST" action="?/disableBuildCache"><div class="label svelte-1n6ht58"><!> <div class="text svelte-1n6ht58"><div class="name svelte-1n6ht58">Disable build cache</div> <div class="desc svelte-1n6ht58">Build every new container with <code class="svelte-1n6ht58">--build-no-cache</code>. Applies to first boot
|
|
17
|
-
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
|
|
18
|
-
remove pulled images.</div> <!></div></div> <!></form> <form class="row divided svelte-1n6ht58" method="POST" action="?/rebuildAllNoCache"><div class="label svelte-1n6ht58"><!> <div class="text svelte-1n6ht58"><div class="name svelte-1n6ht58">Rebuild running containers (no cache)</div> <div class="desc svelte-1n6ht58">Rebuild every currently-running instance from scratch, without using any cached image
|
|
19
|
-
layers. In-container edits are kept; stopped instances are left alone.</div> <!></div></div> <!></form></section> <section><form class="row svelte-1n6ht58" method="POST" action="?/manualTokensToggle"><div class="label svelte-1n6ht58"><!> <div class="text svelte-1n6ht58"><div class="name svelte-1n6ht58">Set tokens manually <!></div> <div class="desc svelte-1n6ht58"><!></div></div></div> <label class="switch svelte-1n6ht58"><input type="checkbox" name="enabled" class="svelte-1n6ht58"/> <span class="track svelte-1n6ht58"><span class="thumb svelte-1n6ht58"></span></span></label></form> <!> <!></section> <section><form class="row svelte-1n6ht58" method="POST" action="?/customEndpointToggle"><div class="label svelte-1n6ht58"><!> <div class="text svelte-1n6ht58"><div class="name svelte-1n6ht58">LiteLLM + Bedrock <!></div> <div class="desc svelte-1n6ht58"><!></div></div></div> <label class="switch svelte-1n6ht58"><input type="checkbox" name="enabled" class="svelte-1n6ht58"/> <span class="track svelte-1n6ht58"><span class="thumb svelte-1n6ht58"></span></span></label></form> <!> <!></section> <section><form class="row svelte-1n6ht58" method="POST" action="?/manualModelToggle"><div class="label svelte-1n6ht58"><!> <div class="text svelte-1n6ht58"><div class="name svelte-1n6ht58">Override models manually <!></div> <div class="desc svelte-1n6ht58"><!></div></div></div> <label class="switch svelte-1n6ht58"><input type="checkbox" name="enabled" class="svelte-1n6ht58"/> <span class="track svelte-1n6ht58"><span class="thumb svelte-1n6ht58"></span></span></label></form> <!> <!></section> <section class="card svelte-1n6ht58"><form class="row svelte-1n6ht58" method="POST" action="?/hostEnvVarsToggle"><div class="label svelte-1n6ht58"><!> <div class="text svelte-1n6ht58"><div class="name svelte-1n6ht58">Host environment variables</div> <div class="desc svelte-1n6ht58">Forward selected environment variables from this machine into every new container's
|
|
20
|
-
interactive shells. Values are read from this process's own environment at container
|
|
21
|
-
start and are never shown here or stored — only the variable names are saved.</div></div></div> <label class="switch svelte-1n6ht58"><input type="checkbox" name="enabled" class="svelte-1n6ht58"/> <span class="track svelte-1n6ht58"><span class="thumb svelte-1n6ht58"></span></span></label></form> <!> <!></section> <section class="card svelte-1n6ht58"><div class="row svelte-1n6ht58"><div class="label svelte-1n6ht58"><!> <div class="text svelte-1n6ht58"><div class="name svelte-1n6ht58">Theme</div> <div class="desc svelte-1n6ht58">Light, dark, or follow the browser preference automatically (auto).</div></div></div> <!></div></section> <section class="card svelte-1n6ht58"><div class="row svelte-1n6ht58"><div class="label svelte-1n6ht58"><!> <div class="text svelte-1n6ht58"><div class="name svelte-1n6ht58">Attention sound</div> <div class="desc svelte-1n6ht58">Play a chime when an instance finishes a task or needs your input.</div></div></div> <label class="switch svelte-1n6ht58"><input type="checkbox" class="svelte-1n6ht58"/> <span class="track svelte-1n6ht58"><span class="thumb svelte-1n6ht58"></span></span></label></div></section> <section class="card svelte-1n6ht58"><form class="row svelte-1n6ht58" method="POST" action="?/petToggle"><div class="label svelte-1n6ht58"><!> <div class="text svelte-1n6ht58"><div class="name svelte-1n6ht58">Pet logo</div> <div class="desc svelte-1n6ht58">Swap the box in the header for a pixel pet.</div></div></div> <label class="switch svelte-1n6ht58"><input type="checkbox" name="enabled" class="svelte-1n6ht58"/> <span class="track svelte-1n6ht58"><span class="thumb svelte-1n6ht58"></span></span></label></form> <!> <!></section> <section class="card danger-card svelte-1n6ht58"><form class="row svelte-1n6ht58" method="POST" action="?/shutdown"><div class="label svelte-1n6ht58"><!> <div class="text svelte-1n6ht58"><div class="name svelte-1n6ht58">Delete database, containers, and shut down</div> <div class="desc svelte-1n6ht58">Stop and remove every instance and its container, delete all copied workspaces and the
|
|
22
|
-
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 yf(A,j){H0(j,!0);let W=y(k(dI())),J=y(k(j.pet)),N1=y(!1),$=y(null),o=y(!1);cI(()=>iI());function m(S){return{onPending:S.setSaving,submit:({cancel:N})=>{if(S.confirmMessage&&!confirm(S.confirmMessage)){N();return}return S.setError(null),S.setMsg?.(null),({result:C})=>{if(C.type==="success")S.onSuccess(C.data);else if(C.type==="failure")S.setError(C.data?.error??"Request failed");else if(C.type==="error")S.setError("Network error. Try again.")}}}}function I1(S){return{onPending:S.setSaving,submit:({formData:N})=>{let C=N.get("enabled")==="on";return S.setError(null),({result:Z})=>{if(Z.type==="success"){S.onSuccess?.(Z.data);return}S.set(!C),S.setError(Z.type==="failure"?Z.data?.error??"Request failed":"Network error. Try again.")}}}}let w1=y(k(j.defaultMode)),F1=y(!1),x1=y(null),X1,E1=m({setSaving:(S)=>w(F1,S,!0),setError:(S)=>w(x1,S,!0),setMsg:()=>{},onSuccess:(S)=>{if(S?.mode)w(w1,S.mode,!0)}});function c1(S){if(S===f(w1))return;h0(()=>w(w1,S,!0)),X1?.requestSubmit()}let Q1=y(k(j.defaultImage)),H1=y(!1),E0=y(null),c0=y(!1),m0,$I=m({setSaving:(S)=>w(H1,S,!0),setError:(S)=>w(E0,S,!0),setMsg:(S)=>w(c0,!!S),onSuccess:(S)=>{w(Q1,S?.image??f(Q1),!0),w(c0,!0)}});function oI(){h0(()=>w(Q1,j.builtinImage,!0)),m0?.requestSubmit()}let P1=y(k(j.copyIgnorePatterns)),l0=y(!1),g0=y(null),i0=y(!1),s0,nI=m({setSaving:(S)=>w(l0,S,!0),setError:(S)=>w(g0,S,!0),setMsg:(S)=>w(i0,!!S),onSuccess:(S)=>{w(P1,S?.patterns??f(P1),!0),w(i0,!0)}});function _I(){h0(()=>w(P1,j.builtinCopyIgnore,!0)),s0?.requestSubmit()}let m1=y(k(j.gitIdentityEnabled)),zf=y(!1),u0=y(null),SL=I1({set:(S)=>w(m1,S,!0),setSaving:(S)=>w(zf,S,!0),setError:(S)=>w(u0,S,!0)}),l1=y(k(j.gitIdentityName)),g1=y(k(j.gitIdentityEmail)),jf=y(!1),t0=y(null),d0=y(!1),fL=m({setSaving:(S)=>w(jf,S,!0),setError:(S)=>w(t0,S,!0),setMsg:(S)=>w(d0,!!S),onSuccess:(S)=>{w(l1,S?.name??f(l1),!0),w(g1,S?.email??f(g1),!0),w(d0,!0)}}),v0=y(k(j.disableBuildCache)),Zf=y(!1),a0=y(null),IL=I1({set:(S)=>w(v0,S,!0),setSaving:(S)=>w(Zf,S,!0),setError:(S)=>w(a0,S,!0)}),r0=y(!1),i1=y(null),e0=y(null);function LL(S){if(S<=0)return"0 B";let N=["B","KB","MB","GB","TB"],C=Math.min(Math.floor(Math.log(S)/Math.log(1024)),N.length-1);return`${(S/1024**C).toFixed(C===0?0:1)} ${N[C]}`}let NL=m({setSaving:(S)=>w(r0,S,!0),setError:(S)=>w(e0,S,!0),setMsg:(S)=>w(i1,S,!0),onSuccess:(S)=>{w(i1,`Cleared — freed ${LL(S?.spaceReclaimed??0)}.`)}}),$0=y(!1),s1=y(null),o0=y(null),wL=m({setSaving:(S)=>w($0,S,!0),setError:(S)=>w(o0,S,!0),setMsg:(S)=>w(s1,S,!0),confirmMessage:"Rebuild every running container from scratch (no build cache)? Each will restart and may take a while.",onSuccess:(S)=>{let N=S?.count??0;w(s1,N===0?"No running containers to rebuild.":`Rebuilding ${N} container(s)…`,!0)}}),B1=y(k(j.manualTokensEnabled)),Qf=y(!1),n0=y(null),xL=I1({set:(S)=>w(B1,S,!0),setSaving:(S)=>w(Qf,S,!0),setError:(S)=>w(n0,S,!0)}),_0=y(k(j.githubTokenSet)),SS=y(""),Af=y(!1),u1=y(null),fS=y(null),CL=m({setSaving:(S)=>w(Af,S,!0),setError:(S)=>w(fS,S,!0),setMsg:(S)=>w(u1,S,!0),onSuccess:(S)=>{w(_0,S?.set??!1,!0),w(SS,""),w(u1,f(_0)?"Saved.":"Cleared.",!0)}}),IS=y(k(j.claudeTokenSet)),LS=y(""),Jf=y(!1),t1=y(null),NS=y(null),yL=m({setSaving:(S)=>w(Jf,S,!0),setError:(S)=>w(NS,S,!0),setMsg:(S)=>w(t1,S,!0),onSuccess:(S)=>{w(IS,S?.set??!1,!0),w(LS,""),w(t1,f(IS)?"Saved.":"Cleared.",!0)}}),e=y(k(j.customEndpointEnabled)),Vf=y(!1),wS=y(null),zL=I1({set:(S)=>w(e,S,!0),setSaving:(S)=>w(Vf,S,!0),setError:(S)=>w(wS,S,!0),onSuccess:(S)=>{if(S?.enabled)w(Y1,!1)}}),Wf=y(k(j.customEndpointBaseUrl)),Xf=y(!1),d1=y(null),xS=y(null),jL=m({setSaving:(S)=>w(Xf,S,!0),setError:(S)=>w(xS,S,!0),setMsg:(S)=>w(d1,S,!0),onSuccess:(S)=>{w(d1,S?.set?"Saved.":"Cleared.",!0)}}),CS=y(""),yS=y(k(j.customEndpointTokenSet)),Yf=y(!1),v1=y(null),zS=y(null),ZL=m({setSaving:(S)=>w(Yf,S,!0),setError:(S)=>w(zS,S,!0),setMsg:(S)=>w(v1,S,!0),onSuccess:(S)=>{w(yS,S?.set??!1,!0),w(CS,""),w(v1,f(yS)?"Saved.":"Cleared.",!0)}}),Kf=y(k(j.customEndpointOpusModel)),Rf=y(k(j.customEndpointSonnetModel)),Gf=y(k(j.customEndpointHaikuModel)),Df=y(k(j.customEndpointSmallFastModel)),Uf=y(k(j.customEndpointModel)),Ff=y(!1),a1=y(null),jS=y(null),QL=m({setSaving:(S)=>w(Ff,S,!0),setError:(S)=>w(jS,S,!0),setMsg:(S)=>w(a1,S,!0),onSuccess:()=>{w(a1,"Saved.")}}),Y1=y(k(j.manualModelOverrideEnabled)),Hf=y(!1),ZS=y(null),AL=I1({set:(S)=>w(Y1,S,!0),setSaving:(S)=>w(Hf,S,!0),setError:(S)=>w(ZS,S,!0),onSuccess:(S)=>{if(S?.enabled)w(e,!1)}}),Pf=y(k(j.manualOpusModel)),Bf=y(k(j.manualSonnetModel)),kf=y(k(j.manualHaikuModel)),Mf=y(k(j.manualSmallFastModel)),Tf=y(k(j.manualModel)),Of=y(!1),r1=y(null),QS=y(null),JL=m({setSaving:(S)=>w(Of,S,!0),setError:(S)=>w(QS,S,!0),setMsg:(S)=>w(r1,S,!0),onSuccess:()=>{w(r1,"Saved.")}}),K1=EI(()=>f(B1)?"Set tokens manually":f(Y1)?"Override models manually":null),e1=y(k(j.hostEnvVarsEnabled)),pf=y(!1),AS=y(null),VL=I1({set:(S)=>w(e1,S,!0),setSaving:(S)=>w(pf,S,!0),setError:(S)=>w(AS,S,!0),onSuccess:(S)=>{w(G1,S?.presence??{},!0)}}),R1=y(k([...j.hostEnvVarNames])),G1=y(k({...j.hostEnvVarPresence})),JS=y(""),$1=y(!1),k1=y(null),A1=y(null),WL={onPending:(S)=>w($1,S,!0),submit:({formData:S,cancel:N})=>{w(A1,null),w(k1,null);let C=S.getAll("names").map(String),T=(C.pop()??"").trim().toUpperCase();if(!T){N();return}if(!/^[A-Za-z_][A-Za-z0-9_]*$/.test(T)){w(A1,`Invalid variable name: ${T}`),N();return}if(w(JS,""),C.includes(T)){N();return}let q=[...C,T];S.delete("names");for(let p of q)S.append("names",p);return({result:p})=>{if(p.type==="success")w(R1,q,!0),w(G1,p.data?.presence??{},!0),w(k1,"Saved.");else if(p.type==="failure")w(A1,p.data?.error??"Request failed",!0);else if(p.type==="error")w(A1,"Network error. Try again.")}}};function XL(S){return m({setSaving:(N)=>w($1,N,!0),setError:(N)=>w(A1,N,!0),setMsg:(N)=>w(k1,N,!0),onSuccess:(N)=>{w(R1,f(R1).filter((C)=>C!==S),!0),w(G1,N?.presence??{},!0)}})}function YL(S){if(w(W,S,!0),vI(S),aI(),S)rI("done")}let KL={onPending:(S)=>w(N1,S,!0),submit:()=>{return w($,null),({result:S})=>{if(S.type==="success"){w(J,S.data?.name?wf(S.data.name):void 0,!0);return}w($,S.type==="failure"?S.data?.error??"Request failed":"Network error. Try again.",!0)}}};function RL(S){return m({setSaving:(N)=>w(N1,N,!0),setError:(N)=>w($,N,!0),onSuccess:(N)=>{w(J,(N?.name?wf(N.name):void 0)??S,!0)}})}let GL={submit:({cancel:S})=>{if(!confirm("Delete the database, remove all instances and their containers, and shut down the server? This cannot be undone.")){S();return}w(o,!0)}};var bf=Mw(),VS=h1(bf),hf=L(VS);tI(hf,{children:(S,N)=>{var C=Zw();z(S,C)},$$slots:{default:!0}});var qf=x(hf,2),WS=L(qf),M1=L(WS),XS=L(M1),DL=L(XS);xf(DL,{size:20}),Y(2),I(XS);var YS=x(XS,2);M(YS);var Ef=x(YS,2),J1=L(Ef);let cf;var UL=L(J1);lI(UL,{size:15}),Y(),I(J1);var D1=x(J1,2);let mf;var FL=L(D1);xf(FL,{size:15}),Y(),I(D1),I(Ef),I(M1),q0(M1,(S)=>X1=S,()=>X1),E(M1,()=>c(E1));var HL=x(M1,2);{var PL=(S)=>{var N=Z1(),C=L(N),Z=L(C,!0);I(C),I(N),Q(()=>V(Z,f(x1))),z(S,N)};G(HL,(S)=>{if(f(x1))S(PL)})}I(WS);var KS=x(WS,2),o1=L(KS),RS=L(o1),lf=L(RS);X0(lf,{size:20});var gf=x(lf,2),sf=L(gf),BL=x(L(sf));{var kL=(S)=>{var N=Qw(),C=L(N,!0);I(N),Q(()=>V(C,j.dockerArch)),z(S,N)};G(BL,(S)=>{if(j.dockerArch)S(kL)})}I(sf),Y(2),I(gf),I(RS);var GS=x(RS,2),DS=L(GS);M(DS);var uf=x(DS,2);a(uf,{type:"submit",get disabled(){return f(H1)},children:(S,N)=>{Y();var C=g("Save");z(S,C)},$$slots:{default:!0}});var ML=x(uf,2);a(ML,{type:"button",get icon(){return Cf},get disabled(){return f(H1)},onclick:oI,get title(){return`Reset to default (${j.builtinImage??""})`},"aria-label":"Reset to default image"}),I(GS);var US=x(GS,2),TL=L(US);{var OL=(S)=>{var N=Aw(),C=x(h1(N)),Z=L(C,!0);I(C);var T=x(C,2),q=L(T,!0);I(T),Y(),Q(()=>{V(Z,j.dockerArch),V(q,j.dockerArch)}),z(S,N)},pL=(S)=>{var N=g(`Pick an image whose manifest covers your Docker daemon's architecture, or the pull will
|
|
23
|
-
fail.`);z(S,N)};G(TL,(S)=>{if(j.dockerArch)S(OL);else S(pL,-1)})}I(US);var bL=x(US,2);{var hL=(S)=>{var N=f1(),C=L(N,!0);I(N),Q(()=>V(C,f(E0))),z(S,N)},qL=(S)=>{var N=Nf();z(S,N)};G(bL,(S)=>{if(f(E0))S(hL);else if(f(c0))S(qL,1)})}I(o1),q0(o1,(S)=>m0=S,()=>m0),E(o1,()=>c($I)),I(KS);var FS=x(KS,2),n1=L(FS),HS=L(n1),EL=L(HS);M0(EL,{size:20}),Y(2),I(HS);var PS=x(HS,2),BS=L(PS);M(BS);var tf=x(BS,2);a(tf,{type:"submit",get disabled(){return f(l0)},children:(S,N)=>{Y();var C=g("Save");z(S,C)},$$slots:{default:!0}});var cL=x(tf,2);a(cL,{type:"button",get icon(){return Cf},get disabled(){return f(l0)},onclick:_I,get title(){return`Reset to default (${j.builtinCopyIgnore??""})`},"aria-label":"Reset to default copy-ignore patterns"}),I(PS);var mL=x(PS,2);{var lL=(S)=>{var N=f1(),C=L(N,!0);I(N),Q(()=>V(C,f(g0))),z(S,N)},gL=(S)=>{var N=Nf();z(S,N)};G(mL,(S)=>{if(f(g0))S(lL);else if(f(i0))S(gL,1)})}I(n1),q0(n1,(S)=>s0=S,()=>s0),E(n1,()=>c(nI)),I(FS);var kS=x(FS,2),_1=L(kS),MS=L(_1),iL=L(MS);T0(iL,{size:20}),Y(2),I(MS);var df=x(MS,2),S0=L(df);M(S0),Y(2),I(df),I(_1),E(_1,()=>c(SL));var vf=x(_1,2);{var sL=(S)=>{var N=Z1(),C=L(N),Z=L(C,!0);I(C),I(N),Q(()=>V(Z,f(u0))),z(S,N)};G(vf,(S)=>{if(f(u0))S(sL)})}var uL=x(vf,2);{var tL=(S)=>{var N=Jw(),C=x(L(N),2),Z=L(C),T=x(L(Z),2);M(T),I(Z);var q=x(Z,2),p=x(L(q),2);M(p),I(q);var r=x(q,2),S1=L(r);a(S1,{type:"submit",get disabled(){return f(jf)},children:(D,t)=>{Y();var n=g("Save");z(D,n)},$$slots:{default:!0}}),I(r),I(C);var u=x(C,2);{var U=(D)=>{var t=f1(),n=L(t,!0);I(t),Q(()=>V(n,f(t0))),z(D,t)},K=(D)=>{var t=Nf();z(D,t)};G(u,(D)=>{if(f(t0))D(U);else if(f(d0))D(K,1)})}I(N),E(N,()=>c(fL)),l(T,()=>f(l1),(D)=>w(l1,D)),l(p,()=>f(g1),(D)=>w(g1,D)),z(S,N)};G(uL,(S)=>{if(f(m1))S(tL)})}I(kS);var TS=x(kS,2),f0=L(TS),OS=L(f0),dL=L(OS);k0(dL,{size:20}),Y(2),I(OS);var af=x(OS,2),I0=L(af);M(I0),Y(2),I(af),I(f0),E(f0,()=>c(IL));var rf=x(f0,2);{var vL=(S)=>{var N=Z1(),C=L(N),Z=L(C,!0);I(C),I(N),Q(()=>V(Z,f(a0))),z(S,N)};G(rf,(S)=>{if(f(a0))S(vL)})}var L0=x(rf,2),pS=L(L0),ef=L(pS);O1(ef,{size:20});var $f=x(ef,2),aL=x(L($f),4);{var rL=(S)=>{var N=f1(),C=L(N,!0);I(N),Q(()=>V(C,f(e0))),z(S,N)},eL=(S)=>{var N=y1(),C=L(N,!0);I(N),Q(()=>V(C,f(i1))),z(S,N)};G(aL,(S)=>{if(f(e0))S(rL);else if(f(i1))S(eL,1)})}I($f),I(pS);var $L=x(pS,2);a($L,{type:"submit",get icon(){return O1},get disabled(){return f(r0)},children:(S,N)=>{Y();var C=g();Q(()=>V(C,f(r0)?"Clearing…":"Clear cache")),z(S,C)},$$slots:{default:!0}}),I(L0),E(L0,()=>c(NL));var bS=x(L0,2),hS=L(bS),of=L(hS);p1(of,{size:20});var nf=x(of,2),oL=x(L(nf),4);{var nL=(S)=>{var N=f1(),C=L(N,!0);I(N),Q(()=>V(C,f(o0))),z(S,N)},_L=(S)=>{var N=y1(),C=L(N,!0);I(N),Q(()=>V(C,f(s1))),z(S,N)};G(oL,(S)=>{if(f(o0))S(nL);else if(f(s1))S(_L,1)})}I(nf),I(hS);var SN=x(hS,2);a(SN,{type:"submit",get icon(){return p1},get disabled(){return f($0)},children:(S,N)=>{Y();var C=g();Q(()=>V(C,f($0)?"Starting…":"Rebuild all")),z(S,C)},$$slots:{default:!0}}),I(bS),E(bS,()=>c(wL)),I(TS);var N0=x(TS,2);let _f;var w0=L(N0),qS=L(w0),SI=L(qS);b1(SI,{size:20});var fI=x(SI,2),ES=L(fI),fN=x(L(ES));{var IN=(S)=>{var N=Vw();z(S,N)};G(fN,(S)=>{if(f(e))S(IN)})}I(ES);var II=x(ES,2),LN=L(II);{var NN=(S)=>{var N=g(`Not available while LiteLLM + Bedrock mode is enabled — Claude credentials are
|
|
24
|
-
provided by the LiteLLM endpoint instead.`);z(S,N)},wN=(S)=>{var N=g(`Provide GitHub and Claude Code tokens yourself instead of discovering them from this
|
|
25
|
-
machine. Useful on a headless server or when signed in as a different identity. A
|
|
26
|
-
token set here is injected into every new container and overrides host credential
|
|
27
|
-
discovery.`);z(S,N)};G(LN,(S)=>{if(f(e))S(NN);else S(wN,-1)})}I(II),I(fI),I(qS);var LI=x(qS,2),x0=L(LI);M(x0),Y(2),I(LI),I(w0),E(w0,()=>c(xL));var NI=x(w0,2);{var xN=(S)=>{var N=Z1(),C=L(N),Z=L(C,!0);I(C),I(N),Q(()=>V(Z,f(n0))),z(S,N)};G(NI,(S)=>{if(f(n0))S(xN)})}var CN=x(NI,2);{var yN=(S)=>{var N=Ww(),C=h1(N),Z=x(L(C),2),T=L(Z);M(T);var q=x(T,2);a(q,{type:"submit",get disabled(){return f(Af)},children:(F,b)=>{Y();var R=g("Save");z(F,R)},$$slots:{default:!0}}),I(Z);var p=x(Z,2);{var r=(F)=>{var b=f1(),R=L(b,!0);I(b),Q(()=>V(R,f(fS))),z(F,b)},S1=(F)=>{var b=y1(),R=L(b,!0);I(b),Q(()=>V(R,f(u1))),z(F,b)};G(p,(F)=>{if(f(fS))F(r);else if(f(u1))F(S1,1)})}I(C),E(C,()=>c(CL));var u=x(C,2),U=x(L(u),2),K=L(U);M(K);var D=x(K,2);a(D,{type:"submit",get disabled(){return f(Jf)},children:(F,b)=>{Y();var R=g("Save");z(F,R)},$$slots:{default:!0}}),I(U);var t=x(U,2);{var n=(F)=>{var b=f1(),R=L(b,!0);I(b),Q(()=>V(R,f(NS))),z(F,b)},V1=(F)=>{var b=y1(),R=L(b,!0);I(b),Q(()=>V(R,f(t1))),z(F,b)};G(t,(F)=>{if(f(NS))F(n);else if(f(t1))F(V1,1)})}I(u),E(u,()=>c(yL)),Q(()=>{v(T,"placeholder",f(_0)?"•••••••• (saved)":"ghp_… / gho_…"),v(K,"placeholder",f(IS)?"•••••••• (saved)":"sk-ant-oat…")}),l(T,()=>f(SS),(F)=>w(SS,F)),l(K,()=>f(LS),(F)=>w(LS,F)),z(S,N)};G(CN,(S)=>{if(f(B1)&&!f(e))S(yN)})}I(N0);var C0=x(N0,2);let wI;var y0=L(C0),cS=L(y0),xI=L(cS);b1(xI,{size:20});var CI=x(xI,2),mS=L(CI),zN=x(L(mS));{var jN=(S)=>{var N=Xw();Q(()=>v(N,"title",`Disabled while ${f(K1)??""} is on`)),z(S,N)};G(zN,(S)=>{if(f(K1))S(jN)})}I(mS);var yI=x(mS,2),ZN=L(yI);{var QN=(S)=>{var N=g();Q(()=>V(N,`Not available while "${f(K1)??""}" is enabled — these modes are mutually
|
|
28
|
-
incompatible.`)),z(S,N)},AN=(S)=>{var N=Yw();Y(2),z(S,N)};G(ZN,(S)=>{if(f(K1))S(QN);else S(AN,-1)})}I(yI),I(CI),I(cS);var zI=x(cS,2),z0=L(zI);M(z0),Y(2),I(zI),I(y0),E(y0,()=>c(zL));var jI=x(y0,2);{var JN=(S)=>{var N=Z1(),C=L(N),Z=L(C,!0);I(C),I(N),Q(()=>V(Z,f(wS))),z(S,N)};G(jI,(S)=>{if(f(wS))S(JN)})}var VN=x(jI,2);{var WN=(S)=>{var N=Kw(),C=h1(N),Z=x(L(C),2),T=L(Z);M(T);var q=x(T,2);a(q,{type:"submit",get disabled(){return f(Xf)},children:(X,h)=>{Y();var s=g("Save");z(X,s)},$$slots:{default:!0}}),I(Z);var p=x(Z,2);{var r=(X)=>{var h=f1(),s=L(h,!0);I(h),Q(()=>V(s,f(xS))),z(X,h)},S1=(X)=>{var h=y1(),s=L(h,!0);I(h),Q(()=>V(s,f(d1))),z(X,h)};G(p,(X)=>{if(f(xS))X(r);else if(f(d1))X(S1,1)})}I(C),E(C,()=>c(jL));var u=x(C,2),U=x(L(u),2),K=L(U);M(K);var D=x(K,2);a(D,{type:"submit",get disabled(){return f(Yf)},children:(X,h)=>{Y();var s=g("Save");z(X,s)},$$slots:{default:!0}}),I(U);var t=x(U,2);{var n=(X)=>{var h=f1(),s=L(h,!0);I(h),Q(()=>V(s,f(zS))),z(X,h)},V1=(X)=>{var h=y1(),s=L(h,!0);I(h),Q(()=>V(s,f(v1))),z(X,h)};G(t,(X)=>{if(f(zS))X(n);else if(f(v1))X(V1,1)})}I(u),E(u,()=>c(ZL));var F=x(u,2),b=x(L(F),2),R=L(b),d=x(L(R),2);M(d),I(R);var L1=x(R,2),j1=x(L(L1),2);M(j1),I(L1);var T1=x(L1,2),U1=x(L(T1),2);M(U1),I(T1);var _S=x(T1,2),PI=x(L(_S),2);M(PI),I(_S);var Sf=x(_S,2),BI=x(L(Sf),2);M(BI),I(Sf);var kI=x(Sf,2),sN=L(kI);a(sN,{type:"submit",get disabled(){return f(Ff)},children:(X,h)=>{Y();var s=g("Save models");z(X,s)},$$slots:{default:!0}}),I(kI),I(b);var uN=x(b,2);{var tN=(X)=>{var h=f1(),s=L(h,!0);I(h),Q(()=>V(s,f(jS))),z(X,h)},dN=(X)=>{var h=y1(),s=L(h,!0);I(h),Q(()=>V(s,f(a1))),z(X,h)};G(uN,(X)=>{if(f(jS))X(tN);else if(f(a1))X(dN,1)})}I(F),E(F,()=>c(QL)),Q(()=>v(K,"placeholder",f(yS)?"•••••••• (saved)":"sk-…")),l(T,()=>f(Wf),(X)=>w(Wf,X)),l(K,()=>f(CS),(X)=>w(CS,X)),l(d,()=>f(Kf),(X)=>w(Kf,X)),l(j1,()=>f(Rf),(X)=>w(Rf,X)),l(U1,()=>f(Gf),(X)=>w(Gf,X)),l(PI,()=>f(Df),(X)=>w(Df,X)),l(BI,()=>f(Uf),(X)=>w(Uf,X)),z(S,N)};G(VN,(S)=>{if(f(e))S(WN)})}I(C0);var j0=x(C0,2);let ZI;var Z0=L(j0),lS=L(Z0),QI=L(lS);O0(QI,{size:18});var AI=x(QI,2),gS=L(AI),XN=x(L(gS));{var YN=(S)=>{var N=Rw();z(S,N)};G(XN,(S)=>{if(f(e))S(YN)})}I(gS);var JI=x(gS,2),KN=L(JI);{var RN=(S)=>{var N=g(`Not available while "LiteLLM + Bedrock" is enabled — these modes are mutually
|
|
29
|
-
incompatible.`);z(S,N)},GN=(S)=>{var N=Gw();Y(4),z(S,N)};G(KN,(S)=>{if(f(e))S(RN);else S(GN,-1)})}I(JI),I(AI),I(lS);var VI=x(lS,2),Q0=L(VI);M(Q0),Y(2),I(VI),I(Z0),E(Z0,()=>c(AL));var WI=x(Z0,2);{var DN=(S)=>{var N=Z1(),C=L(N),Z=L(C,!0);I(C),I(N),Q(()=>V(Z,f(ZS))),z(S,N)};G(WI,(S)=>{if(f(ZS))S(DN)})}var UN=x(WI,2);{var FN=(S)=>{var N=Dw(),C=x(L(N),2),Z=L(C),T=x(L(Z),2);M(T),I(Z);var q=x(Z,2),p=x(L(q),2);M(p),I(q);var r=x(q,2),S1=x(L(r),2);M(S1),I(r);var u=x(r,2),U=x(L(u),2);M(U),I(u);var K=x(u,2),D=x(L(K),2);M(D),I(K);var t=x(K,2),n=L(t);a(n,{type:"submit",get disabled(){return f(Of)},children:(R,d)=>{Y();var L1=g("Save models");z(R,L1)},$$slots:{default:!0}}),I(t),I(C);var V1=x(C,2);{var F=(R)=>{var d=f1(),L1=L(d,!0);I(d),Q(()=>V(L1,f(QS))),z(R,d)},b=(R)=>{var d=y1(),L1=L(d,!0);I(d),Q(()=>V(L1,f(r1))),z(R,d)};G(V1,(R)=>{if(f(QS))R(F);else if(f(r1))R(b,1)})}I(N),E(N,()=>c(JL)),l(T,()=>f(Pf),(R)=>w(Pf,R)),l(p,()=>f(Bf),(R)=>w(Bf,R)),l(S1,()=>f(kf),(R)=>w(kf,R)),l(U,()=>f(Mf),(R)=>w(Mf,R)),l(D,()=>f(Tf),(R)=>w(Tf,R)),z(S,N)};G(UN,(S)=>{if(f(Y1))S(FN)})}I(j0);var iS=x(j0,2),A0=L(iS),sS=L(A0),HN=L(sS);p0(HN,{size:20}),Y(2),I(sS);var XI=x(sS,2),J0=L(XI);M(J0),Y(2),I(XI),I(A0),E(A0,()=>c(VL));var YI=x(A0,2);{var PN=(S)=>{var N=Z1(),C=L(N),Z=L(C,!0);I(C),I(N),Q(()=>V(Z,f(AS))),z(S,N)};G(YI,(S)=>{if(f(AS))S(PN)})}var BN=x(YI,2);{var kN=(S)=>{var N=Hw(),C=L(N);W1(C,20,()=>f(R1),(U)=>U,(U,K)=>{var D=Uw(),t=L(D);W1(t,16,()=>f(R1).filter((j1)=>j1!==K),(j1)=>j1,(j1,T1)=>{var U1=qI();M(U1),Q(()=>q1(U1,T1)),z(j1,U1)});var n=x(t,2),V1=L(n,!0);I(n);var F=x(n,2);let b;var R=L(F,!0);I(F);var d=x(F,2),L1=L(d);gI(L1,{size:13}),I(d),I(D),E(D,()=>c(XL(K))),Q(()=>{V(V1,K),b=C1(F,1,"var-status svelte-1n6ht58",null,b,{present:f(G1)[K]}),v(F,"title",f(G1)[K]?"Set on this host — will be injected":"Not set on this host — will be skipped"),V(R,f(G1)[K]?"set":"missing"),d.disabled=f($1),v(d,"aria-label",`Remove ${K}`)}),z(U,D)},(U)=>{var K=Fw();z(U,K)}),I(C);var Z=x(C,2),T=L(Z);W1(T,16,()=>f(R1),(U)=>U,(U,K)=>{var D=qI();M(D),Q(()=>q1(D,K)),z(U,D)});var q=x(T,2);M(q);var p=x(q,2);a(p,{type:"submit",get icon(){return sI},get disabled(){return f($1)},children:(U,K)=>{Y();var D=g("Add");z(U,D)},$$slots:{default:!0}}),I(Z),E(Z,()=>c(WL));var r=x(Z,2);{var S1=(U)=>{var K=f1(),D=L(K,!0);I(K),Q(()=>V(D,f(A1))),z(U,K)},u=(U)=>{var K=y1(),D=L(K,!0);I(K),Q(()=>V(D,f(k1))),z(U,K)};G(r,(U)=>{if(f(A1))U(S1);else if(f(k1))U(u,1)})}I(N),l(q,()=>f(JS),(U)=>w(JS,U)),z(S,N)};G(BN,(S)=>{if(f(e1))S(kN)})}I(iS);var uS=x(iS,2),KI=L(uS),tS=L(KI),MN=L(tS);G0(MN,{size:20}),Y(2),I(tS);var TN=x(tS,2);If(TN,{}),I(KI),I(uS);var dS=x(uS,2),RI=L(dS),vS=L(RI),ON=L(vS);K0(ON,{size:20}),Y(2),I(vS);var GI=x(vS,2),aS=L(GI);M(aS),Y(2),I(GI),I(RI),I(dS);var rS=x(dS,2),V0=L(rS),eS=L(V0),pN=L(eS);R0(pN,{size:18}),Y(2),I(eS);var DI=x(eS,2),W0=L(DI);M(W0),Y(2),I(DI),I(V0),E(V0,()=>c(KL));var UI=x(V0,2);{var bN=(S)=>{var N=Z1(),C=L(N),Z=L(C,!0);I(C),I(N),Q(()=>V(Z,f($))),z(S,N)};G(UI,(S)=>{if(f($))S(bN)})}var hN=x(UI,2);{var qN=(S)=>{var N=Bw();W1(N,21,()=>mI,(C)=>C.name,(C,Z)=>{var T=Pw(),q=L(T);M(q);var p=x(q,2);let r;var S1=L(p);b0(S1,{get art(){return f(Z)},get name(){return f(Z).name},scale:4}),I(p),I(T),E(T,()=>c(RL(f(Z)))),Q(()=>{q1(q,f(Z).name),r=C1(p,1,"pet svelte-1n6ht58",null,r,{selected:f(Z).name===f(J).name}),p.disabled=f(N1),v(p,"title",f(Z).name),v(p,"aria-label",f(Z).name),v(p,"aria-pressed",f(Z).name===f(J).name)}),z(C,T)}),I(N),z(S,N)};G(hN,(S)=>{if(f(J))S(qN)})}I(rS);var $S=x(rS,2),oS=L($S),nS=L(oS),EN=L(nS);Y0(EN,{size:20}),Y(2),I(nS);var cN=x(nS,2);{var mN=(S)=>{var N=kw();z(S,N)},lN=(S)=>{a(S,{type:"submit",variant:"danger",children:(N,C)=>{Y();var Z=g("Delete & shut down");z(N,Z)},$$slots:{default:!0}})};G(cN,(S)=>{if(f(o))S(mN);else S(lN,-1)})}I(oS),E(oS,()=>c(GL)),I($S);var FI=x($S,2);Lf(FI,{});var HI=x(FI,2),gN=L(HI);I(HI),I(qf),I(VS);var iN=x(VS,2);uI(iN,{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;"}}),Q(()=>{q1(YS,f(w1)),cf=C1(J1,1,"mode-btn svelte-1n6ht58",null,cf,{active:f(w1)==="ide"}),v(J1,"aria-pressed",f(w1)==="ide"),J1.disabled=f(F1),mf=C1(D1,1,"mode-btn svelte-1n6ht58",null,mf,{active:f(w1)==="terminal"}),v(D1,"aria-pressed",f(w1)==="terminal"),D1.disabled=f(F1),z1(S0,f(m1)),S0.disabled=f(zf),z1(I0,f(v0)),I0.disabled=f(Zf),_f=C1(N0,1,"card svelte-1n6ht58",null,_f,{"disabled-card":f(e)}),z1(x0,f(B1)),x0.disabled=f(Qf)||f(e),wI=C1(C0,1,"card svelte-1n6ht58",null,wI,{"disabled-card":f(K1)}),z1(z0,f(e)),z0.disabled=f(Vf)||!!f(K1),ZI=C1(j0,1,"card svelte-1n6ht58",null,ZI,{"disabled-card":f(e)}),z1(Q0,f(Y1)),Q0.disabled=f(Hf)||f(e),z1(J0,f(e1)),J0.disabled=f(pf),z1(aS,f(W)),z1(W0,!!f(J)),W0.disabled=f(N1),V(gN,`Codebay v${j.version??""}`)}),_("click",J1,()=>c1("ide")),_("click",D1,()=>c1("terminal")),l(DS,()=>f(Q1),(S)=>w(Q1,S)),l(BS,()=>f(P1),(S)=>w(P1,S)),_("change",S0,(S)=>{w(m1,S.currentTarget.checked,!0),S.currentTarget.form?.requestSubmit()}),_("change",I0,(S)=>{w(v0,S.currentTarget.checked,!0),S.currentTarget.form?.requestSubmit()}),_("change",x0,(S)=>{w(B1,S.currentTarget.checked,!0),S.currentTarget.form?.requestSubmit()}),_("change",z0,(S)=>{w(e,S.currentTarget.checked,!0),S.currentTarget.form?.requestSubmit()}),_("change",Q0,(S)=>{w(Y1,S.currentTarget.checked,!0),S.currentTarget.form?.requestSubmit()}),_("change",J0,(S)=>{w(e1,S.currentTarget.checked,!0),S.currentTarget.form?.requestSubmit()}),_("change",aS,(S)=>YL(S.currentTarget.checked)),_("change",W0,(S)=>S.currentTarget.form?.requestSubmit()),z(A,bf),P0()}B0(["click","change"]);eI("SettingsView_8hmarwmf8onq",yf);
|