codebay 0.14.0 → 0.15.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 +526 -455
- package/.mochi/svelte-client/HydratableIsland-smgsf0ma.js +1 -0
- package/.mochi/svelte-client/_hydrate-AppShell_2rtnxn6pgp2rh-9vc087ep.js +2 -0
- package/.mochi/svelte-client/_hydrate-AvatarsView_257s9yq1wwr4f-a48xq47a.js +14 -0
- package/.mochi/svelte-client/_hydrate-InstanceView_2ma45l9bybfhl-d4zehrqz.js +3 -0
- package/.mochi/svelte-client/_hydrate-SettingsView_8hmarwmf8onq-t5175pf5.js +44 -0
- package/.mochi/svelte-client/chunk-0mstgbtr.js +2 -0
- package/.mochi/svelte-client/chunk-0q9g0kpg.js +1 -0
- package/.mochi/svelte-client/chunk-3fwjzw1r.js +1 -0
- package/.mochi/svelte-client/{chunk-spk1b2r4.js → chunk-5pg0be5f.js} +1 -1
- package/.mochi/svelte-client/{chunk-ccfh8hxz.js → chunk-a2hty99b.js} +1 -1
- package/.mochi/svelte-client/{chunk-0mc09cyb.js → chunk-ds9yn9cq.js} +1 -1
- package/.mochi/svelte-client/{chunk-phf7v5jj.js → chunk-fn03gxer.js} +1 -1
- package/.mochi/svelte-client/chunk-jhgq7f65.js +2 -0
- package/.mochi/svelte-client/chunk-p5a07kx1.js +1 -0
- package/.mochi/svelte-client/chunk-p5wpyhsf.js +2 -0
- package/.mochi/svelte-client/chunk-t2kfvtb6.js +2 -0
- package/.mochi/svelte-client/{chunk-x0m3k0rn.js → chunk-v3wg9mdy.js} +1 -1
- package/.mochi/svelte-compile/{App-94xsdn0w.server.js → App-68f9a9fq.server.js} +64 -59
- package/.mochi/svelte-compile/{Avatars-fnccw47h.server.js → Avatars-vyh3rwxx.server.js} +14 -29
- package/.mochi/svelte-compile/Instance-yfw7s5mp.server.js +627 -0
- package/.mochi/svelte-compile/{Settings-a7b11v90.server.js → Settings-0b5t9kw9.server.js} +145 -25
- package/.mochi/svelte-compile/{chunk-w0hca7va.js → chunk-0y3wrae9.js} +13 -1
- package/.mochi/svelte-compile/{chunk-ed46m58e.js → chunk-2qzc07gt.js} +13 -1
- package/.mochi/svelte-compile/chunk-ef3hvegw.js +21 -0
- package/.mochi/svelte-compile/chunk-f9td8ej2.js +24 -0
- package/.mochi/svelte-compile/{chunk-pqb403fh.js → chunk-g0eravvj.js} +5 -16
- package/.mochi/svelte-css/AgentLogBox-38adby5iygny7.css +1 -0
- package/.mochi/svelte-css/{InstanceCard-25z7nas7y98zk.css → InstanceCard-3vxozrp9uoads.css} +1 -1
- package/.mochi/svelte-css/{SettingsView-bccw34agd2bj.css → SettingsView-2400myxb9ot56.css} +1 -1
- package/README.md +32 -1
- package/migrations/0009_agent_runs.sql +24 -0
- package/migrations/0010_agent_run_model.sql +2 -0
- package/package.json +6 -2
- package/src/components/AgentLogBox.svelte +458 -0
- package/src/components/AppShell.svelte +11 -0
- package/src/components/FolderBrowser.svelte +13 -5
- package/src/components/InstanceCard.svelte +38 -0
- package/src/components/InstanceView.svelte +8 -0
- package/src/components/SettingsView.svelte +186 -0
- package/src/components/UiShowcase.svelte +4 -2
- package/src/container-injections/claude-statusline.ts +4 -1
- package/src/container-injections/github-credentials.ts +12 -1
- package/src/index.ts +32 -7
- package/src/lib/agent-run-stream.ts +246 -0
- package/src/lib/agent-runs.server.ts +724 -0
- package/src/lib/auth.server.ts +11 -2
- package/src/lib/build-freshness.server.ts +71 -0
- package/src/lib/config.server.ts +29 -6
- package/src/lib/container-files.server.ts +1 -1
- package/src/lib/data-dir-lock.server.ts +78 -0
- package/src/lib/db.server.ts +120 -1
- package/src/lib/devcontainer.server.ts +60 -14
- package/src/lib/docker-client.server.ts +11 -5
- package/src/lib/drives.ts +11 -0
- package/src/lib/exec.server.ts +66 -5
- package/src/lib/instances.server.ts +45 -3
- package/src/lib/log-capture.server.ts +17 -5
- package/src/lib/mcp-auth.server.ts +52 -0
- package/src/lib/picker.server.ts +23 -2
- package/src/lib/sandbox-ops.server.ts +263 -0
- package/src/mcp/routes.server.ts +25 -0
- package/src/mcp/server.server.ts +52 -0
- package/src/mcp/tools.server.ts +494 -0
- package/src/pages/Settings.svelte +12 -0
- package/src/routes.ts +63 -1
- package/src/types.ts +15 -0
- package/.mochi/svelte-client/HydratableIsland-zrdsrsmg.js +0 -1
- package/.mochi/svelte-client/_hydrate-AppShell_2rtnxn6pgp2rh-v7y7dh53.js +0 -2
- package/.mochi/svelte-client/_hydrate-AvatarsView_257s9yq1wwr4f-tmwd6fpb.js +0 -14
- package/.mochi/svelte-client/_hydrate-InstanceView_2ma45l9bybfhl-m7t64dbh.js +0 -1
- package/.mochi/svelte-client/_hydrate-SettingsView_8hmarwmf8onq-4a7ann1f.js +0 -40
- package/.mochi/svelte-client/chunk-5jwfs4p9.js +0 -2
- package/.mochi/svelte-client/chunk-6qg4q98a.js +0 -2
- package/.mochi/svelte-client/chunk-tmeh70wg.js +0 -2
- package/.mochi/svelte-client/chunk-vs1yjbqt.js +0 -2
- package/.mochi/svelte-client/chunk-y7f4jbdm.js +0 -2
- package/.mochi/svelte-compile/Instance-knnkcn2p.server.js +0 -377
|
@@ -1,20 +1,21 @@
|
|
|
1
1
|
// @bun
|
|
2
2
|
import {
|
|
3
|
+
Chevron_right,
|
|
3
4
|
StatusBadge,
|
|
4
5
|
forwardedPortUrl
|
|
5
|
-
} from "./chunk-
|
|
6
|
+
} from "./chunk-2qzc07gt.js";
|
|
6
7
|
import {
|
|
7
8
|
Layout_template,
|
|
8
9
|
Plus,
|
|
9
|
-
Terminal,
|
|
10
10
|
tabShortcutsEnabled
|
|
11
|
-
} from "./chunk-
|
|
11
|
+
} from "./chunk-g0eravvj.js";
|
|
12
12
|
import {
|
|
13
|
+
Terminal,
|
|
13
14
|
apiDelete,
|
|
14
15
|
apiFetch,
|
|
15
16
|
apiPost,
|
|
16
17
|
ideUrl
|
|
17
|
-
} from "./chunk-
|
|
18
|
+
} from "./chunk-0y3wrae9.js";
|
|
18
19
|
import {
|
|
19
20
|
AppBar,
|
|
20
21
|
Avatar,
|
|
@@ -38,11 +39,11 @@ import {
|
|
|
38
39
|
|
|
39
40
|
// src/pages/App.svelte
|
|
40
41
|
import"svelte/internal/flags/async";
|
|
41
|
-
import * as $
|
|
42
|
+
import * as $30 from "svelte/internal/server";
|
|
42
43
|
|
|
43
44
|
// src/components/AppShell.svelte
|
|
44
45
|
import"svelte/internal/flags/async";
|
|
45
|
-
import * as $
|
|
46
|
+
import * as $29 from "svelte/internal/server";
|
|
46
47
|
import { tick as tick2 } from "svelte";
|
|
47
48
|
import { SvelteSet } from "svelte/reactivity";
|
|
48
49
|
|
|
@@ -124,6 +125,10 @@ function isRepoUrl(input) {
|
|
|
124
125
|
return parseRepoUrl(input) !== null;
|
|
125
126
|
}
|
|
126
127
|
|
|
128
|
+
// src/lib/drives.ts
|
|
129
|
+
var DRIVES_ROOT = "::drives";
|
|
130
|
+
var DRIVES_ROOT_LABEL = "This PC";
|
|
131
|
+
|
|
127
132
|
// node_modules/@lucide/svelte/dist/icons/folder-clock.svelte
|
|
128
133
|
import"svelte/internal/flags/async";
|
|
129
134
|
import * as $ from "svelte/internal/server";
|
|
@@ -218,6 +223,7 @@ function FolderBrowser($$renderer, $$props) {
|
|
|
218
223
|
onpick(repoUrl.trim(), { branch: repoBranch.trim() || undefined, mode: mode() });
|
|
219
224
|
}
|
|
220
225
|
const filtered = $6.derived(() => result ? result.entries.filter((e) => e.name.toLowerCase().includes(query.trim().toLowerCase())) : []);
|
|
226
|
+
const atDrivesRoot = $6.derived(() => result?.path === DRIVES_ROOT);
|
|
221
227
|
const shownHistory = $6.derived(() => showAll ? history2 : history2.slice(0, 5));
|
|
222
228
|
async function loadHistory() {
|
|
223
229
|
try {
|
|
@@ -255,7 +261,7 @@ function FolderBrowser($$renderer, $$props) {
|
|
|
255
261
|
Layout_template($$renderer2, { size: 15 });
|
|
256
262
|
$$renderer2.push(`<!----> Full IDE</button> <button type="button"${$6.attr_class("mode-btn svelte-oq97c4", undefined, { active: mode() === "terminal" })}${$6.attr("aria-pressed", mode() === "terminal")}>`);
|
|
257
263
|
Terminal($$renderer2, { size: 15 });
|
|
258
|
-
$$renderer2.push(`<!----> 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"${$6.attr("value", repoUrl)} spellcheck="false" autocomplete="off"/> <input class="clone-branch svelte-oq97c4" type="text" placeholder="branch (optional)"${$6.attr("value", repoBranch)} spellcheck="false" autocomplete="off"/> <button class="clone-btn svelte-oq97c4"${$6.attr("disabled", !repoValid(), true)}>Clone</button></div></div> <div class="crumbs svelte-oq97c4"><code class="svelte-oq97c4">${$6.escape(result?.path ?? "\u2026")}</code></div> `);
|
|
264
|
+
$$renderer2.push(`<!----> 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"${$6.attr("value", repoUrl)} spellcheck="false" autocomplete="off"/> <input class="clone-branch svelte-oq97c4" type="text" placeholder="branch (optional)"${$6.attr("value", repoBranch)} spellcheck="false" autocomplete="off"/> <button class="clone-btn svelte-oq97c4"${$6.attr("disabled", !repoValid(), true)}>Clone</button></div></div> <div class="crumbs svelte-oq97c4"><code class="svelte-oq97c4">${$6.escape(atDrivesRoot() ? DRIVES_ROOT_LABEL : result?.path ?? "\u2026")}</code></div> `);
|
|
259
265
|
if (history2.length > 0) {
|
|
260
266
|
$$renderer2.push("<!--[0-->");
|
|
261
267
|
$$renderer2.push(`<div class="recent svelte-oq97c4"><div class="recent-label svelte-oq97c4">Recent</div> <!--[-->`);
|
|
@@ -329,7 +335,7 @@ function FolderBrowser($$renderer, $$props) {
|
|
|
329
335
|
$$renderer2.push("<!--[-1-->");
|
|
330
336
|
}
|
|
331
337
|
$$renderer2.push(`<!--]--></div> `);
|
|
332
|
-
if (result && !result.hasDevcontainer) {
|
|
338
|
+
if (result && !result.hasDevcontainer && !atDrivesRoot()) {
|
|
333
339
|
$$renderer2.push("<!--[0-->");
|
|
334
340
|
$$renderer2.push(`<div class="warn svelte-oq97c4">`);
|
|
335
341
|
Triangle_alert($$renderer2, { size: 15 });
|
|
@@ -338,7 +344,7 @@ function FolderBrowser($$renderer, $$props) {
|
|
|
338
344
|
} else {
|
|
339
345
|
$$renderer2.push("<!--[-1-->");
|
|
340
346
|
}
|
|
341
|
-
$$renderer2.push(`<!--]--> <div class="foot svelte-oq97c4"><span class="hint svelte-oq97c4"
|
|
347
|
+
$$renderer2.push(`<!--]--> <div class="foot svelte-oq97c4"><span class="hint svelte-oq97c4">${$6.escape(atDrivesRoot() ? "Pick a drive to browse." : "Browse to a folder, then select this folder or any subfolder.")}</span> <button class="primary svelte-oq97c4"${$6.attr("disabled", !result || atDrivesRoot(), true)}>Select this folder</button></div></div></div>`);
|
|
342
348
|
});
|
|
343
349
|
}
|
|
344
350
|
|
|
@@ -479,6 +485,13 @@ function InstanceCard($$renderer, $$props) {
|
|
|
479
485
|
$$renderer2.push("<!--[-1-->");
|
|
480
486
|
}
|
|
481
487
|
$$renderer2.push(`<!--]--> `);
|
|
488
|
+
if (instance.active_run) {
|
|
489
|
+
$$renderer2.push("<!--[0-->");
|
|
490
|
+
$$renderer2.push(`<div class="agent-run svelte-13338y7" title="An MCP client is driving Claude in this sandbox"><span class="agent-dot svelte-13338y7"></span> <span class="agent-text svelte-13338y7">${$10.escape(instance.active_run.status === "queued" ? "Agent run queued" : instance.active_run.last_activity ?? "Agent running")}</span></div>`);
|
|
491
|
+
} else {
|
|
492
|
+
$$renderer2.push("<!--[-1-->");
|
|
493
|
+
}
|
|
494
|
+
$$renderer2.push(`<!--]--> `);
|
|
482
495
|
if (instance.status === "error" && instance.error) {
|
|
483
496
|
$$renderer2.push("<!--[0-->");
|
|
484
497
|
$$renderer2.push(`<div class="card-error svelte-13338y7">${$10.escape(instance.error)}</div>`);
|
|
@@ -1052,7 +1065,7 @@ function DashboardView($$renderer, $$props) {
|
|
|
1052
1065
|
|
|
1053
1066
|
// src/components/IdeBar.svelte
|
|
1054
1067
|
import"svelte/internal/flags/async";
|
|
1055
|
-
import * as $
|
|
1068
|
+
import * as $23 from "svelte/internal/server";
|
|
1056
1069
|
|
|
1057
1070
|
// node_modules/@lucide/svelte/dist/icons/rotate-cw.svelte
|
|
1058
1071
|
import"svelte/internal/flags/async";
|
|
@@ -1076,14 +1089,6 @@ function Chevron_left($$renderer, $$props) {
|
|
|
1076
1089
|
const iconNode = [["path", { d: "m15 18-6-6 6-6" }]];
|
|
1077
1090
|
Icon($$renderer, $22.spread_props([{ name: "chevron-left" }, props, { iconNode }]));
|
|
1078
1091
|
}
|
|
1079
|
-
// node_modules/@lucide/svelte/dist/icons/chevron-right.svelte
|
|
1080
|
-
import"svelte/internal/flags/async";
|
|
1081
|
-
import * as $23 from "svelte/internal/server";
|
|
1082
|
-
function Chevron_right($$renderer, $$props) {
|
|
1083
|
-
let { $$slots, $$events, ...props } = $$props;
|
|
1084
|
-
const iconNode = [["path", { d: "m9 18 6-6-6-6" }]];
|
|
1085
|
-
Icon($$renderer, $23.spread_props([{ name: "chevron-right" }, props, { iconNode }]));
|
|
1086
|
-
}
|
|
1087
1092
|
// src/components/IdeBar.svelte
|
|
1088
1093
|
function IdeBar($$renderer, $$props) {
|
|
1089
1094
|
$$renderer.component(($$renderer2) => {
|
|
@@ -1099,14 +1104,14 @@ function IdeBar($$renderer, $$props) {
|
|
|
1099
1104
|
oncommitrename,
|
|
1100
1105
|
oncancelrename
|
|
1101
1106
|
} = $$props;
|
|
1102
|
-
const activeIndex = $
|
|
1103
|
-
const focusIndex = $
|
|
1107
|
+
const activeIndex = $23.derived(() => running.findIndex((i) => i.id === active));
|
|
1108
|
+
const focusIndex = $23.derived(() => activeIndex() >= 0 ? activeIndex() : 0);
|
|
1104
1109
|
let viewport = null;
|
|
1105
1110
|
let content = null;
|
|
1106
1111
|
let atStart = true;
|
|
1107
1112
|
let atEnd = true;
|
|
1108
1113
|
const tabEls = {};
|
|
1109
|
-
const overflowing = $
|
|
1114
|
+
const overflowing = $23.derived(() => !atStart || !atEnd);
|
|
1110
1115
|
function measure() {
|
|
1111
1116
|
if (!viewport)
|
|
1112
1117
|
return;
|
|
@@ -1139,14 +1144,14 @@ function IdeBar($$renderer, $$props) {
|
|
|
1139
1144
|
$$renderer3.push(`<div class="strip svelte-r39acv">`);
|
|
1140
1145
|
if (overflowing()) {
|
|
1141
1146
|
$$renderer3.push("<!--[0-->");
|
|
1142
|
-
$$renderer3.push(`<button type="button" class="page svelte-r39acv"${$
|
|
1147
|
+
$$renderer3.push(`<button type="button" class="page svelte-r39acv"${$23.attr("disabled", atStart, true)} aria-label="Scroll tabs left">`);
|
|
1143
1148
|
Chevron_left($$renderer3, { size: 16 });
|
|
1144
1149
|
$$renderer3.push(`<!----></button>`);
|
|
1145
1150
|
} else {
|
|
1146
1151
|
$$renderer3.push("<!--[-1-->");
|
|
1147
1152
|
}
|
|
1148
1153
|
$$renderer3.push(`<!--]--> <div class="viewport svelte-r39acv"><div class="tabs svelte-r39acv" role="tablist" aria-label="Instances"><!--[-->`);
|
|
1149
|
-
const each_array = $
|
|
1154
|
+
const each_array = $23.ensure_array_like(running);
|
|
1150
1155
|
for (let i = 0, $$length = each_array.length;i < $$length; i++) {
|
|
1151
1156
|
let inst = each_array[i];
|
|
1152
1157
|
if (editingId === inst.id) {
|
|
@@ -1157,16 +1162,16 @@ function IdeBar($$renderer, $$props) {
|
|
|
1157
1162
|
art: findAvatar(inst.avatar ?? undefined) ?? null,
|
|
1158
1163
|
scale: 3
|
|
1159
1164
|
});
|
|
1160
|
-
$$renderer3.push(`<!----> <input class="tab-name-edit svelte-r39acv"${$
|
|
1165
|
+
$$renderer3.push(`<!----> <input class="tab-name-edit svelte-r39acv"${$23.attr("value", editingName)} autofocus=""/></div>`);
|
|
1161
1166
|
} else {
|
|
1162
1167
|
$$renderer3.push("<!--[-1-->");
|
|
1163
|
-
$$renderer3.push(`<button type="button"${$
|
|
1168
|
+
$$renderer3.push(`<button type="button"${$23.attr_class("tab svelte-r39acv", undefined, { active: inst.id === active })}${$23.attr("id", `tab-${$23.stringify(inst.id)}`)} role="tab"${$23.attr("aria-selected", inst.id === active)}${$23.attr("tabindex", i === focusIndex() ? 0 : -1)}${$23.attr("title", inst.name)}>`);
|
|
1164
1169
|
Avatar($$renderer3, {
|
|
1165
1170
|
name: inst.name,
|
|
1166
1171
|
art: findAvatar(inst.avatar ?? undefined) ?? null,
|
|
1167
1172
|
scale: 3
|
|
1168
1173
|
});
|
|
1169
|
-
$$renderer3.push(`<!----> <span class="tab-name svelte-r39acv">${$
|
|
1174
|
+
$$renderer3.push(`<!----> <span class="tab-name svelte-r39acv">${$23.escape(inst.name)}</span> <span class="tab-mode svelte-r39acv"${$23.attr("aria-label", inst.mode === "terminal" ? "Terminal-only instance" : "Full IDE instance")}>`);
|
|
1170
1175
|
if (inst.mode === "terminal") {
|
|
1171
1176
|
$$renderer3.push("<!--[0-->");
|
|
1172
1177
|
Terminal($$renderer3, { size: 11 });
|
|
@@ -1177,7 +1182,7 @@ function IdeBar($$renderer, $$props) {
|
|
|
1177
1182
|
$$renderer3.push(`<!--]--></span> `);
|
|
1178
1183
|
if (inst.id !== active && attention[inst.id]) {
|
|
1179
1184
|
$$renderer3.push("<!--[0-->");
|
|
1180
|
-
$$renderer3.push(`<span${$
|
|
1185
|
+
$$renderer3.push(`<span${$23.attr_class(`attn ${$23.stringify(attention[inst.id])}`, "svelte-r39acv")}${$23.attr("aria-label", attention[inst.id] === "waiting" ? "Claude is waiting for input" : "Claude finished")}></span>`);
|
|
1181
1186
|
} else {
|
|
1182
1187
|
$$renderer3.push("<!--[-1-->");
|
|
1183
1188
|
}
|
|
@@ -1188,7 +1193,7 @@ function IdeBar($$renderer, $$props) {
|
|
|
1188
1193
|
$$renderer3.push(`<!--]--></div></div> `);
|
|
1189
1194
|
if (overflowing()) {
|
|
1190
1195
|
$$renderer3.push("<!--[0-->");
|
|
1191
|
-
$$renderer3.push(`<button type="button" class="page trailing svelte-r39acv"${$
|
|
1196
|
+
$$renderer3.push(`<button type="button" class="page trailing svelte-r39acv"${$23.attr("disabled", atEnd, true)} aria-label="Scroll tabs right">`);
|
|
1192
1197
|
Chevron_right($$renderer3, { size: 16 });
|
|
1193
1198
|
$$renderer3.push(`<!----></button>`);
|
|
1194
1199
|
} else {
|
|
@@ -1207,41 +1212,41 @@ function IdeBar($$renderer, $$props) {
|
|
|
1207
1212
|
} else {
|
|
1208
1213
|
$$renderer3.push("<!--[-1-->");
|
|
1209
1214
|
}
|
|
1210
|
-
$$renderer3.push(`<!--]--> <a class="cog svelte-r39acv"${$
|
|
1215
|
+
$$renderer3.push(`<!--]--> <a class="cog svelte-r39acv"${$23.attr("href", withPopupMarker("/settings"))} target="_blank" rel="noopener noreferrer" title="Settings" aria-label="Settings">`);
|
|
1211
1216
|
Settings($$renderer3, { size: 18 });
|
|
1212
1217
|
$$renderer3.push(`<!----></a></div>`);
|
|
1213
1218
|
},
|
|
1214
1219
|
$$slots: { default: true }
|
|
1215
1220
|
});
|
|
1216
|
-
$
|
|
1221
|
+
$23.bind_props($$props, { editingName });
|
|
1217
1222
|
});
|
|
1218
1223
|
}
|
|
1219
1224
|
|
|
1220
1225
|
// src/components/IdeLoader.svelte
|
|
1221
1226
|
import"svelte/internal/flags/async";
|
|
1222
|
-
import * as $
|
|
1227
|
+
import * as $24 from "svelte/internal/server";
|
|
1223
1228
|
function IdeLoader($$renderer, $$props) {
|
|
1224
1229
|
$$renderer.component(($$renderer2) => {
|
|
1225
1230
|
let { speed = 1, mode = "ide", stalledAfterMs, onoverride } = $$props;
|
|
1226
|
-
const isTerminal = $
|
|
1231
|
+
const isTerminal = $24.derived(() => mode === "terminal");
|
|
1227
1232
|
let stalled = false;
|
|
1228
1233
|
const ROWS = 3;
|
|
1229
1234
|
const COLS = 22;
|
|
1230
1235
|
const BASE_TICK_MS = 140;
|
|
1231
1236
|
const FLIPS_PER_TICK = 7;
|
|
1232
|
-
const tickMs = $
|
|
1237
|
+
const tickMs = $24.derived(() => Math.max(20, BASE_TICK_MS / speed));
|
|
1233
1238
|
const seed = () => Array.from({ length: ROWS }, () => Array.from({ length: COLS }, () => Math.random() < 0.5 ? 0 : 1));
|
|
1234
1239
|
let grid = seed();
|
|
1235
1240
|
$$renderer2.push(`<div class="loader svelte-w5e143"><div class="grid svelte-w5e143" aria-hidden="true"><!--[-->`);
|
|
1236
|
-
const each_array = $
|
|
1241
|
+
const each_array = $24.ensure_array_like(grid);
|
|
1237
1242
|
for (let i = 0, $$length = each_array.length;i < $$length; i++) {
|
|
1238
1243
|
let row = each_array[i];
|
|
1239
|
-
$$renderer2.push(`<div class="row svelte-w5e143">${$
|
|
1244
|
+
$$renderer2.push(`<div class="row svelte-w5e143">${$24.escape(row.join(""))}</div>`);
|
|
1240
1245
|
}
|
|
1241
|
-
$$renderer2.push(`<!--]--></div> <div class="label svelte-w5e143">Loading ${$
|
|
1246
|
+
$$renderer2.push(`<!--]--></div> <div class="label svelte-w5e143">Loading ${$24.escape(isTerminal() ? "terminal" : "editor")}<span class="dot svelte-w5e143">.</span><span class="dot svelte-w5e143">.</span><span class="dot svelte-w5e143">.</span></div> `);
|
|
1242
1247
|
if (stalled) {
|
|
1243
1248
|
$$renderer2.push("<!--[0-->");
|
|
1244
|
-
$$renderer2.push(`<div class="stalled svelte-w5e143"><p class="svelte-w5e143">Waiting for ${$
|
|
1249
|
+
$$renderer2.push(`<div class="stalled svelte-w5e143"><p class="svelte-w5e143">Waiting for ${$24.escape(isTerminal() ? "the terminal" : "code-server")} to answer inside the container.</p> `);
|
|
1245
1250
|
if (onoverride) {
|
|
1246
1251
|
$$renderer2.push("<!--[0-->");
|
|
1247
1252
|
Button($$renderer2, {
|
|
@@ -1265,11 +1270,11 @@ function IdeLoader($$renderer, $$props) {
|
|
|
1265
1270
|
|
|
1266
1271
|
// src/components/TerminalSplit.svelte
|
|
1267
1272
|
import"svelte/internal/flags/async";
|
|
1268
|
-
import * as $
|
|
1273
|
+
import * as $28 from "svelte/internal/server";
|
|
1269
1274
|
|
|
1270
1275
|
// node_modules/@lucide/svelte/dist/icons/panel-right-open.svelte
|
|
1271
1276
|
import"svelte/internal/flags/async";
|
|
1272
|
-
import * as $
|
|
1277
|
+
import * as $25 from "svelte/internal/server";
|
|
1273
1278
|
function Panel_right_open($$renderer, $$props) {
|
|
1274
1279
|
let { $$slots, $$events, ...props } = $$props;
|
|
1275
1280
|
const iconNode = [
|
|
@@ -1280,11 +1285,11 @@ function Panel_right_open($$renderer, $$props) {
|
|
|
1280
1285
|
["path", { d: "M15 3v18" }],
|
|
1281
1286
|
["path", { d: "m10 15-3-3 3-3" }]
|
|
1282
1287
|
];
|
|
1283
|
-
Icon($$renderer, $
|
|
1288
|
+
Icon($$renderer, $25.spread_props([{ name: "panel-right-open" }, props, { iconNode }]));
|
|
1284
1289
|
}
|
|
1285
1290
|
// node_modules/@lucide/svelte/dist/icons/panel-right-close.svelte
|
|
1286
1291
|
import"svelte/internal/flags/async";
|
|
1287
|
-
import * as $
|
|
1292
|
+
import * as $26 from "svelte/internal/server";
|
|
1288
1293
|
function Panel_right_close($$renderer, $$props) {
|
|
1289
1294
|
let { $$slots, $$events, ...props } = $$props;
|
|
1290
1295
|
const iconNode = [
|
|
@@ -1295,11 +1300,11 @@ function Panel_right_close($$renderer, $$props) {
|
|
|
1295
1300
|
["path", { d: "M15 3v18" }],
|
|
1296
1301
|
["path", { d: "m8 9 3 3-3 3" }]
|
|
1297
1302
|
];
|
|
1298
|
-
Icon($$renderer, $
|
|
1303
|
+
Icon($$renderer, $26.spread_props([{ name: "panel-right-close" }, props, { iconNode }]));
|
|
1299
1304
|
}
|
|
1300
1305
|
// src/components/TerminalPane.svelte
|
|
1301
1306
|
import"svelte/internal/flags/async";
|
|
1302
|
-
import * as $
|
|
1307
|
+
import * as $27 from "svelte/internal/server";
|
|
1303
1308
|
import { onMount } from "svelte";
|
|
1304
1309
|
function TerminalPane($$renderer, $$props) {
|
|
1305
1310
|
$$renderer.component(($$renderer2) => {
|
|
@@ -1504,7 +1509,7 @@ function TerminalSplit($$renderer, $$props) {
|
|
|
1504
1509
|
e.preventDefault();
|
|
1505
1510
|
}
|
|
1506
1511
|
function splitToggle($$renderer3) {
|
|
1507
|
-
$$renderer3.push(`<button type="button"${$
|
|
1512
|
+
$$renderer3.push(`<button type="button"${$28.attr("aria-pressed", open)}${$28.attr("title", open ? "Hide the shell pane" : "Open a shell alongside Claude")}${$28.attr("aria-label", open ? "Hide the shell pane" : "Open a shell alongside Claude")}>`);
|
|
1508
1513
|
if (open) {
|
|
1509
1514
|
$$renderer3.push("<!--[0-->");
|
|
1510
1515
|
Panel_right_close($$renderer3, { size: 14 });
|
|
@@ -1514,7 +1519,7 @@ function TerminalSplit($$renderer, $$props) {
|
|
|
1514
1519
|
}
|
|
1515
1520
|
$$renderer3.push(`<!--]--></button>`);
|
|
1516
1521
|
}
|
|
1517
|
-
$$renderer2.push(`<div class="split svelte-1ysvu88"><div class="side svelte-1ysvu88"${$
|
|
1522
|
+
$$renderer2.push(`<div class="split svelte-1ysvu88"><div class="side svelte-1ysvu88"${$28.attr_style("", { "flex-basis": open ? `${ratio}%` : "100%" })}>`);
|
|
1518
1523
|
TerminalPane($$renderer2, {
|
|
1519
1524
|
id,
|
|
1520
1525
|
active,
|
|
@@ -1524,7 +1529,7 @@ function TerminalSplit($$renderer, $$props) {
|
|
|
1524
1529
|
$$renderer2.push(`<!----></div> `);
|
|
1525
1530
|
if (mounted) {
|
|
1526
1531
|
$$renderer2.push("<!--[0-->");
|
|
1527
|
-
$$renderer2.push(`<div${$
|
|
1532
|
+
$$renderer2.push(`<div${$28.attr_class("divider svelte-1ysvu88", undefined, { hidden: !open })} role="separator" aria-orientation="vertical" aria-label="Resize terminal panes"${$28.attr("aria-valuenow", Math.round(ratio))}${$28.attr("aria-valuemin", 20)}${$28.attr("aria-valuemax", 80)} tabindex="0"></div> <div${$28.attr_class("side svelte-1ysvu88", undefined, { hidden: !open })}${$28.attr_style("", { "flex-basis": `${$28.stringify(100 - ratio)}%` })}>`);
|
|
1528
1533
|
TerminalPane($$renderer2, {
|
|
1529
1534
|
id,
|
|
1530
1535
|
arg: "shell",
|
|
@@ -1549,7 +1554,7 @@ function AppShell($$renderer, $$props) {
|
|
|
1549
1554
|
let livePet = pet;
|
|
1550
1555
|
let liveFilter = filter;
|
|
1551
1556
|
let loaded = snapshot.length > 0;
|
|
1552
|
-
const running = $
|
|
1557
|
+
const running = $29.derived(() => instances.filter((i) => i.status === "running"));
|
|
1553
1558
|
let attention = Object.fromEntries(snapshot.map((i) => [i.id, i.attention]));
|
|
1554
1559
|
let editingId = null;
|
|
1555
1560
|
let editingName = "";
|
|
@@ -1580,9 +1585,9 @@ function AppShell($$renderer, $$props) {
|
|
|
1580
1585
|
apiPost("/api/settings/filter", { value: v }).catch(() => {});
|
|
1581
1586
|
}
|
|
1582
1587
|
let path = initialPath;
|
|
1583
|
-
const onIde = $
|
|
1584
|
-
const requestedId = $
|
|
1585
|
-
const active = $
|
|
1588
|
+
const onIde = $29.derived(() => path.startsWith("/ide"));
|
|
1589
|
+
const requestedId = $29.derived(() => path.startsWith("/ide/") ? path.slice("/ide/".length) : "");
|
|
1590
|
+
const active = $29.derived(() => onIde() ? running().some((i) => i.id === requestedId()) ? requestedId() : running()[0]?.id ?? "" : "");
|
|
1586
1591
|
function navigate(to) {
|
|
1587
1592
|
if (to === path)
|
|
1588
1593
|
return;
|
|
@@ -1595,7 +1600,7 @@ function AppShell($$renderer, $$props) {
|
|
|
1595
1600
|
const forced = new SvelteSet;
|
|
1596
1601
|
const mountable = (id) => everReady.has(id) || forced.has(id);
|
|
1597
1602
|
const STALLED_AFTER_MS = 1e4;
|
|
1598
|
-
const activeInstance = $
|
|
1603
|
+
const activeInstance = $29.derived(() => running().find((i) => i.id === active()));
|
|
1599
1604
|
const frames = {};
|
|
1600
1605
|
function reloadActive() {
|
|
1601
1606
|
const inst = activeInstance();
|
|
@@ -1620,11 +1625,11 @@ function AppShell($$renderer, $$props) {
|
|
|
1620
1625
|
if (fromFrame)
|
|
1621
1626
|
tick2().then(() => frames[target.id]?.contentWindow?.focus());
|
|
1622
1627
|
}
|
|
1623
|
-
const framedTabIds = $
|
|
1628
|
+
const framedTabIds = $29.derived(() => running().filter((i) => i.mode !== "terminal" && loadedFrames.has(i.id)).map((i) => i.id).join(" "));
|
|
1624
1629
|
let $$settled = true;
|
|
1625
1630
|
let $$inner_renderer;
|
|
1626
1631
|
function $$render_inner($$renderer3) {
|
|
1627
|
-
$$renderer3.push(`<div${$
|
|
1632
|
+
$$renderer3.push(`<div${$29.attr_class("app svelte-1duc7gd", undefined, { ide: onIde() })}>`);
|
|
1628
1633
|
if (onIde()) {
|
|
1629
1634
|
$$renderer3.push("<!--[0-->");
|
|
1630
1635
|
IdeBar($$renderer3, {
|
|
@@ -1656,13 +1661,13 @@ function AppShell($$renderer, $$props) {
|
|
|
1656
1661
|
onFilter: setFilter
|
|
1657
1662
|
});
|
|
1658
1663
|
}
|
|
1659
|
-
$$renderer3.push(`<!--]--> <div${$
|
|
1660
|
-
const each_array = $
|
|
1664
|
+
$$renderer3.push(`<!--]--> <div${$29.attr_class("panes svelte-1duc7gd", undefined, { hidden: !onIde() })}><!--[-->`);
|
|
1665
|
+
const each_array = $29.ensure_array_like(running());
|
|
1661
1666
|
for (let $$index = 0, $$length = each_array.length;$$index < $$length; $$index++) {
|
|
1662
1667
|
let inst = each_array[$$index];
|
|
1663
1668
|
if (visited.has(inst.id)) {
|
|
1664
1669
|
$$renderer3.push("<!--[0-->");
|
|
1665
|
-
$$renderer3.push(`<div${$
|
|
1670
|
+
$$renderer3.push(`<div${$29.attr_class("pane svelte-1duc7gd", undefined, { active: inst.id === active() })} role="tabpanel"${$29.attr("aria-labelledby", `tab-${$29.stringify(inst.id)}`)}>`);
|
|
1666
1671
|
if (mountable(inst.id)) {
|
|
1667
1672
|
$$renderer3.push("<!--[0-->");
|
|
1668
1673
|
if (inst.mode === "terminal") {
|
|
@@ -1674,7 +1679,7 @@ function AppShell($$renderer, $$props) {
|
|
|
1674
1679
|
});
|
|
1675
1680
|
} else {
|
|
1676
1681
|
$$renderer3.push("<!--[-1-->");
|
|
1677
|
-
$$renderer3.push(`<iframe${$
|
|
1682
|
+
$$renderer3.push(`<iframe${$29.attr("src", ideUrl(inst))}${$29.attr("title", inst.name)} class="svelte-1duc7gd" onload="this.__e=event"></iframe>`);
|
|
1678
1683
|
}
|
|
1679
1684
|
$$renderer3.push(`<!--]-->`);
|
|
1680
1685
|
} else {
|
|
@@ -1726,7 +1731,7 @@ function App($$renderer, $$props) {
|
|
|
1726
1731
|
let { preflight, initialPath, snapshot, pet, filter } = $$props;
|
|
1727
1732
|
if (true) {
|
|
1728
1733
|
let failed = function($$renderer3, error) {
|
|
1729
|
-
$$renderer3.push(`<mochi-island-failure data-component="AppShell"${$
|
|
1734
|
+
$$renderer3.push(`<mochi-island-failure data-component="AppShell"${$30.attr("data-message", error.message)}></mochi-island-failure>`);
|
|
1730
1735
|
};
|
|
1731
1736
|
$$renderer2.push("<!--[0-->");
|
|
1732
1737
|
$$renderer2.boundary({ failed }, ($$renderer3) => {
|
|
@@ -1734,7 +1739,7 @@ function App($$renderer, $$props) {
|
|
|
1734
1739
|
{
|
|
1735
1740
|
HydratableBoundary($$renderer3, {
|
|
1736
1741
|
children: ($$renderer4) => {
|
|
1737
|
-
$$renderer4.push(`<mochi-hydratable-island component-name="AppShell_2rtnxn6pgp2rh" component-url="__MOCHI_COMPONENT_URL__AppShell_2rtnxn6pgp2rh__"${$
|
|
1742
|
+
$$renderer4.push(`<mochi-hydratable-island component-name="AppShell_2rtnxn6pgp2rh" component-url="__MOCHI_COMPONENT_URL__AppShell_2rtnxn6pgp2rh__"${$30.attr("props-ref", emitIslandProps({ preflight, initialPath, snapshot, pet, filter }))}>`);
|
|
1738
1743
|
$$renderer4.push(`<!--[-->`);
|
|
1739
1744
|
{
|
|
1740
1745
|
AppShell($$renderer4, { preflight, initialPath, snapshot, pet, filter });
|
|
@@ -1,4 +1,7 @@
|
|
|
1
1
|
// @bun
|
|
2
|
+
import {
|
|
3
|
+
Bot
|
|
4
|
+
} from "./chunk-f9td8ej2.js";
|
|
2
5
|
import {
|
|
3
6
|
Rotate_ccw
|
|
4
7
|
} from "./chunk-jx6h1xzp.js";
|
|
@@ -27,11 +30,11 @@ import"./chunk-xpt1a7jm.js";
|
|
|
27
30
|
|
|
28
31
|
// src/pages/Avatars.svelte
|
|
29
32
|
import"svelte/internal/flags/async";
|
|
30
|
-
import * as $
|
|
33
|
+
import * as $8 from "svelte/internal/server";
|
|
31
34
|
|
|
32
35
|
// src/components/AvatarsView.svelte
|
|
33
36
|
import"svelte/internal/flags/async";
|
|
34
|
-
import * as $
|
|
37
|
+
import * as $7 from "svelte/internal/server";
|
|
35
38
|
|
|
36
39
|
// src/components/AvatarEditor.svelte
|
|
37
40
|
import"svelte/internal/flags/async";
|
|
@@ -371,27 +374,9 @@ function AvatarEditor($$renderer, $$props) {
|
|
|
371
374
|
});
|
|
372
375
|
}
|
|
373
376
|
|
|
374
|
-
// node_modules/@lucide/svelte/dist/icons/bot.svelte
|
|
375
|
-
import"svelte/internal/flags/async";
|
|
376
|
-
import * as $6 from "svelte/internal/server";
|
|
377
|
-
function Bot($$renderer, $$props) {
|
|
378
|
-
let { $$slots, $$events, ...props } = $$props;
|
|
379
|
-
const iconNode = [
|
|
380
|
-
["path", { d: "M12 8V4H8" }],
|
|
381
|
-
[
|
|
382
|
-
"rect",
|
|
383
|
-
{ width: "16", height: "12", x: "4", y: "8", rx: "2" }
|
|
384
|
-
],
|
|
385
|
-
["path", { d: "M2 14h2" }],
|
|
386
|
-
["path", { d: "M20 14h2" }],
|
|
387
|
-
["path", { d: "M15 13v2" }],
|
|
388
|
-
["path", { d: "M9 13v2" }]
|
|
389
|
-
];
|
|
390
|
-
Icon($$renderer, $6.spread_props([{ name: "bot" }, props, { iconNode }]));
|
|
391
|
-
}
|
|
392
377
|
// node_modules/@lucide/svelte/dist/icons/pencil.svelte
|
|
393
378
|
import"svelte/internal/flags/async";
|
|
394
|
-
import * as $
|
|
379
|
+
import * as $6 from "svelte/internal/server";
|
|
395
380
|
function Pencil($$renderer, $$props) {
|
|
396
381
|
let { $$slots, $$events, ...props } = $$props;
|
|
397
382
|
const iconNode = [
|
|
@@ -403,7 +388,7 @@ function Pencil($$renderer, $$props) {
|
|
|
403
388
|
],
|
|
404
389
|
["path", { d: "m15 5 4 4" }]
|
|
405
390
|
];
|
|
406
|
-
Icon($$renderer, $
|
|
391
|
+
Icon($$renderer, $6.spread_props([{ name: "pencil" }, props, { iconNode }]));
|
|
407
392
|
}
|
|
408
393
|
// src/components/AvatarsView.svelte
|
|
409
394
|
function AvatarsView($$renderer, $$props) {
|
|
@@ -426,8 +411,8 @@ function AvatarsView($$renderer, $$props) {
|
|
|
426
411
|
{
|
|
427
412
|
AvatarEditor($$renderer2, { namePlaceholder, editing, oncancelEdit: () => editing = null });
|
|
428
413
|
}
|
|
429
|
-
$$renderer2.push(`<!----></div> <section class="catalog svelte-fkq7sr"><header class="svelte-fkq7sr"><h2 class="svelte-fkq7sr">The set</h2> <p class="svelte-fkq7sr">${$
|
|
430
|
-
const each_array = $
|
|
414
|
+
$$renderer2.push(`<!----></div> <section class="catalog svelte-fkq7sr"><header class="svelte-fkq7sr"><h2 class="svelte-fkq7sr">The set</h2> <p class="svelte-fkq7sr">${$7.escape(avatars.length)} hand-crafted 8\xD78 sprites</p></header> <ul class="svelte-fkq7sr"><!--[-->`);
|
|
415
|
+
const each_array = $7.ensure_array_like(avatars);
|
|
431
416
|
for (let $$index = 0, $$length = each_array.length;$$index < $$length; $$index++) {
|
|
432
417
|
let art = each_array[$$index];
|
|
433
418
|
$$renderer2.push(`<li class="svelte-fkq7sr">`);
|
|
@@ -441,12 +426,12 @@ function AvatarsView($$renderer, $$props) {
|
|
|
441
426
|
} else {
|
|
442
427
|
$$renderer2.push("<!--[-1-->");
|
|
443
428
|
}
|
|
444
|
-
$$renderer2.push(`<!--]--> ${$
|
|
429
|
+
$$renderer2.push(`<!--]--> ${$7.escape(art.name)}</span> `);
|
|
445
430
|
if (art.robot) {
|
|
446
431
|
$$renderer2.push("<!--[0-->");
|
|
447
|
-
$$renderer2.push(`<button type="button"${$
|
|
432
|
+
$$renderer2.push(`<button type="button"${$7.attr_class("edit-btn svelte-fkq7sr", undefined, { active: editing?.name === art.name })}${$7.attr("disabled", editing?.name === art.name, true)}>`);
|
|
448
433
|
Pencil($$renderer2, { size: 11 });
|
|
449
|
-
$$renderer2.push(`<!----> <span>${$
|
|
434
|
+
$$renderer2.push(`<!----> <span>${$7.escape(editing?.name === art.name ? "Editing" : "Redraw")}</span></button>`);
|
|
450
435
|
} else {
|
|
451
436
|
$$renderer2.push("<!--[-1-->");
|
|
452
437
|
}
|
|
@@ -464,7 +449,7 @@ function Avatars($$renderer, $$props) {
|
|
|
464
449
|
let { namePlaceholder } = $$props;
|
|
465
450
|
if (true) {
|
|
466
451
|
let failed = function($$renderer3, error) {
|
|
467
|
-
$$renderer3.push(`<mochi-island-failure data-component="AvatarsView"${$
|
|
452
|
+
$$renderer3.push(`<mochi-island-failure data-component="AvatarsView"${$8.attr("data-message", error.message)}></mochi-island-failure>`);
|
|
468
453
|
};
|
|
469
454
|
$$renderer2.push("<!--[0-->");
|
|
470
455
|
$$renderer2.boundary({ failed }, ($$renderer3) => {
|
|
@@ -472,7 +457,7 @@ function Avatars($$renderer, $$props) {
|
|
|
472
457
|
{
|
|
473
458
|
HydratableBoundary($$renderer3, {
|
|
474
459
|
children: ($$renderer4) => {
|
|
475
|
-
$$renderer4.push(`<mochi-hydratable-island component-name="AvatarsView_257s9yq1wwr4f" component-url="__MOCHI_COMPONENT_URL__AvatarsView_257s9yq1wwr4f__"${$
|
|
460
|
+
$$renderer4.push(`<mochi-hydratable-island component-name="AvatarsView_257s9yq1wwr4f" component-url="__MOCHI_COMPONENT_URL__AvatarsView_257s9yq1wwr4f__"${$8.attr("props-ref", emitIslandProps({ namePlaceholder }))}>`);
|
|
476
461
|
$$renderer4.push(`<!--[-->`);
|
|
477
462
|
{
|
|
478
463
|
AvatarsView($$renderer4, { namePlaceholder });
|