diff --git a/AGENTS.md b/AGENTS.md index 7ec8a92359..36ac19296e 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -23,6 +23,7 @@ simplification. | Cluster one | Core Content/Storage/History/Telemetry algorithms; Engine Persistence and Project Init | [Cluster-one handbook](docs/general/cluster_one_handbook.md), [CAS/CDC/delta handbook](docs/general/cas_cdc_deltaencoding_handbook.md) | | Cluster two | Engine Workspace/FUSE/daemon/Sandbox; API execution and Commit/runtime integration | [Current design index](core/docs/issues/303/README.md) and its seven primary contracts | | Legacy reference | v0.1.6, retired from `main` by R9c; read at the recovery tag only | [R9c record](core/docs/issues/307/R9C-COMPLETION-20261010.md) | +| Windows-native Store | Store engine and the SDK's in-process Store face on native Windows (owner, 2026-10-25); FUSE, daemon and Workspace stay Linux-only | [Direct Store contract](core/docs/issues/352/DIRECT_STORE.md) | **The LayerFS UI is the dsh LayerFS plugin** (owner, 2026-10-19): the LayerFS tab in DeepSeek Harness. It lives in its own repository, @@ -154,6 +155,20 @@ remains a separate MEMORY/OFF/EXCLUSIVE database file. native handles and project discovery. This is independent of the macOS adapter and changes neither the product SDK nor the daemon. A lost reply is never replayed, and an uncertain Init retains its Linux home and volume. +- **Windows-native Store route (owner direction 2026-10-25).** The Store + engine (SQLite, the cross-process writer lane, the kernel guard) and the + SDK's in-process Store face (fs, branch, project, operator) also run + natively on Windows: local NTFS volumes only, a named kernel mutex as the + cross-process writer lane, real volume-serial + file-index identity for + acquisition rows, and bundled SQLite, each in audited FFI modules + (core/AGENTS.md). No WSL2 and no daemon are involved. This supersedes the + Linux-only Store sentence above for this route only; Workspace, FUSE, Exec + and daemon calls still refuse `Unsupported` on Windows, and the dsh macOS + and WSL2 exceptions are unchanged. Recorded limitations: Windows Init has + no hard-link membership and no backing-inside-source alias check, carries + non-UTF-8 names lossily and synthesizes the mode from the read-only + attribute; overlay allocation is the logical length. See + [the Windows-native route](core/docs/issues/352/DIRECT_STORE.md). - **Plugin-neutral LayerFS (owner, 2026-10-24).** LayerFS is agnostic to dsh and every other plugin. The macOS and Windows worker routes above are open to any integration: `@layerfs/runtime` starts the worker on those platforms diff --git a/Cargo.lock b/Cargo.lock index ca39be0e98..51b6be7d0c 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -636,6 +636,8 @@ dependencies = [ "napi", "napi-build", "napi-derive", + "sha2 0.11.0", + "windows-sys", ] [[package]] @@ -645,6 +647,7 @@ dependencies = [ "blake3", "nix", "rusqlite", + "windows-sys", ] [[package]] @@ -658,6 +661,8 @@ dependencies = [ "layerfs-telemetry", "nix", "rusqlite", + "sha2 0.11.0", + "windows-sys", ] [[package]] @@ -671,6 +676,7 @@ dependencies = [ "layerfs-storage", "layerfs-telemetry", "sha2 0.11.0", + "windows-sys", ] [[package]] diff --git a/api/README.md b/api/README.md index 9b7cd26445..c103252710 100644 --- a/api/README.md +++ b/api/README.md @@ -36,6 +36,12 @@ Store calls run in the calling process on Linux only. On macOS and Windows they go through the LayerFS home's worker, which `@layerfs/runtime` starts; see [where calls run](docs/agent.md#where-calls-run) and [platforms and the worker](docs/runtime.md#platforms-and-the-worker). +On Windows there is also the native direct route (owner direction +2026-10-25): the binding built from this tree opens a local NTFS Store +itself — fs, branch, project and operator calls in this process, no +worker and no daemon; workspace, exec and daemon calls refuse +`Unsupported`. See +[the Windows-native route](../engine/docs/issues/352/DIRECT_STORE.md). ## The folder @@ -75,7 +81,11 @@ addon. It uses Cargo +1.85.1, `--offline --locked --release`, and the repository ARM64 inputs. `-- --debug` selects dev. The artifact is atomically renamed into place, avoiding stale macOS executable-page signature state. `CARGO_TARGET_DIR` must stay inside this worktree; `LAYERFS_NATIVE_OUTPUT` can select a separate -platform artifact. Keep Linux addons separate from the host addon. +platform artifact. Keep Linux addons separate from the host addon. On +Windows the script refuses to run; build the addon directly with +`cargo build --manifest-path engine/Cargo.toml -p layerfs-node` (locked, +`CARGO_TARGET_DIR` inside this worktree) and rename +`target//layerfs_node.dll` to the addon path. At runtime, the Docker Engine server selected by `LAYERFS_DOCKER` must speak Engine API v1.48 (Docker 28.0) or newer. Before its first request the SDK reads diff --git a/api/agent/test/init_refusals.mjs b/api/agent/test/init_refusals.mjs index 57ed60d3ee..7c51946303 100644 --- a/api/agent/test/init_refusals.mjs +++ b/api/agent/test/init_refusals.mjs @@ -20,6 +20,14 @@ import { import { tmpdir } from "node:os"; import { dirname, join } from "node:path"; +if (process.platform === "win32") { + // Every refusal this test drives is a unix mode-bit or filesystem-type + // contract (setgid, setuid, sticky, overlayfs, FIFO); Windows carries + // none of them. The Windows Store-face lifecycle is store_lifecycle.mjs. + console.log("init_refusals: unix-only contracts, not run on Windows"); + process.exit(0); +} + const OVERLAYFS = 0x794c7630; const work = mkdtempSync(join(tmpdir(), "layerfs-init-refusals-")); const home = join(work, "home"); diff --git a/api/agent/test/reinit.mjs b/api/agent/test/reinit.mjs index e4b92b22ce..a8cdb3fa81 100644 --- a/api/agent/test/reinit.mjs +++ b/api/agent/test/reinit.mjs @@ -39,14 +39,18 @@ try { }; const layerfs = client(); - // A set-group-ID source directory has a mode LayerFS cannot store. - chmodSync(source, 0o2755); - await assert.rejects(layerfs.project.init(source), { - code: "InvalidInput", - detail: { reason: "Mode", path: source, mode: "2755" }, - }); - assert.ok(!existsSync(join(work, "home", "website")), "a refused Init leaves no entry"); - chmodSync(source, 0o755); + // A set-group-ID source directory has a mode LayerFS cannot store. The + // bit does not exist on Windows, whose chmod maps only the read-only + // attribute; the refusal contract is checked on unix platforms. + if (process.platform !== "win32") { + chmodSync(source, 0o2755); + await assert.rejects(layerfs.project.init(source), { + code: "InvalidInput", + detail: { reason: "Mode", path: source, mode: "2755" }, + }); + assert.ok(!existsSync(join(work, "home", "website")), "a refused Init leaves no entry"); + chmodSync(source, 0o755); + } const first = await layerfs.project.init(source); assert.equal(first.kind, "Initialized"); diff --git a/api/agent/test/store_concurrent.mjs b/api/agent/test/store_concurrent.mjs new file mode 100644 index 0000000000..e2d34d2e7e --- /dev/null +++ b/api/agent/test/store_concurrent.mjs @@ -0,0 +1,92 @@ +// Cross-process Store writers on the real native binding (owner direction +// 2026-10-25, route 2): the parent initializes a project and forks one +// branch, then four re-exec'd child processes write distinct files to that +// branch concurrently, each through its own client of the same Store - the +// direct route's cross-process writer lane and the discovery record guard +// serialize them; every write must land. The parent reads all four files +// back and counts the Commits. No Docker, no daemon, no WSL2; on Linux the +// Store sits on the E2E launcher's volume (LAYERFS_STORE_PATH): +// node sdk/js/test/store_concurrent.mjs # parent run +// node sdk/js/test/store_concurrent.mjs --child +import assert from "node:assert/strict"; +import { spawn } from "node:child_process"; +import { mkdirSync, mkdtempSync, rmSync, writeFileSync } from "node:fs"; +import { tmpdir } from "node:os"; +import { dirname, join } from "node:path"; + +// One child writer: open the project's Store and write its own file once. +if (process.argv[2] === "--child") { + const [, , , home, store, name] = process.argv; + process.env.LAYERFS_HOME = home; + const { LayerFS } = await import("@layerfs/agent"); + process.env.LAYERFS_STORE_PATH = store; + const writer = await LayerFS.open("concurrent"); + const body = `written by ${name} in pid ${process.pid}\n`; + const done = await writer.fs.write("load", `/${name}.md`, body, `write ${name}`); + await writer.close(); + assert.equal(done.kind, "Committed"); + process.exit(0); +} + +const WRITERS = 4; +const work = mkdtempSync(join(tmpdir(), "layerfs-concurrent-")); +const volume = process.env.LAYERFS_STORE_PATH + ? join(dirname(dirname(process.env.LAYERFS_STORE_PATH)), `concurrent-${process.pid}`) + : join(work, "volume"); +const store = join(volume, "global", "store.sqlite"); +const home = join(work, "home"); +const retryRemove = (path) => { + for (let attempt = 0; attempt < 5; attempt++) { + try { rmSync(path, { recursive: true, force: true }); return; } catch { } + Atomics.wait(new Int32Array(new SharedArrayBuffer(4)), 0, 0, 200); + } +}; +try { + const source = join(work, "source"); + mkdirSync(source); + writeFileSync(join(source, "README.md"), "concurrent writers\n"); + process.env.LAYERFS_HOME = home; + mkdirSync(join(volume, "global"), { recursive: true }); + const { LayerFS } = await import("@layerfs/agent"); + process.env.LAYERFS_STORE_PATH = store; + const parent = await LayerFS.init("concurrent", source); + await parent.branch.fork("load"); + const base = (await parent.branch.list_commits("load")).items.length; + + const children = []; + for (let n = 1; n <= WRITERS; n++) { + children.push(spawn(process.execPath, [import.meta.url.pathname ?? process.argv[1], "--child", home, store, `w${n}`], { + stdio: ["ignore", "pipe", "pipe"], + env: { ...process.env, LAYERFS_STORE_PATH: store }, + })); + } + const reports = await Promise.all(children.map(async (child, index) => { + const [code, output] = await new Promise((resolve) => { + let captured = ""; + child.stdout.on("data", (chunk) => { captured += chunk; }); + child.stderr.on("data", (chunk) => { captured += chunk; }); + const timer = setTimeout(() => { + child.kill(); + resolve([-1, `${captured} (killed: 30s ceiling)`]); + }, 30_000); + child.on("exit", (exitCode) => { clearTimeout(timer); resolve([exitCode, captured]); }); + }); + return { index, code, output }; + })); + for (const { index, code, output } of reports) { + assert.equal(code, 0, `writer w${index + 1} failed (${code}): ${output.slice(0, 400)}`); + } + + // Every writer's file is committed and readable; the branch carries them all. + for (let n = 1; n <= WRITERS; n++) { + const read = await parent.fs.read("load", `/w${n}.md`); + assert.ok(read.text.startsWith(`written by w${n} in pid `), read.text); + } + const commits = await parent.branch.list_commits("load", 50); + assert.equal(commits.items.length, base + WRITERS, `${commits.items.length} commits, expected ${base + WRITERS}`); + await parent.close(); + console.log(`store_concurrent: ok (${WRITERS} writers, ${commits.items.length} commits)`); +} finally { + retryRemove(work); + retryRemove(volume); +} diff --git a/api/agent/test/store_lifecycle.mjs b/api/agent/test/store_lifecycle.mjs new file mode 100644 index 0000000000..48b3753e5f --- /dev/null +++ b/api/agent/test/store_lifecycle.mjs @@ -0,0 +1,48 @@ +// The Store-face lifecycle on the real native binding (owner direction +// 2026-10-25, route 2): project init, fork, a one-Commit fs.write, reading +// back on the new branch and on main, stat, the Commit listing and close — +// all in this process through the SDK's direct Store route. No Docker, no +// daemon, no WSL2. The Store's volume is LAYERFS_STORE_PATH's parent when +// the E2E launcher provides one (Linux); otherwise this machine's temporary +// volume, which the Windows route guards as NTFS: +// node sdk/js/test/store_lifecycle.mjs +import assert from "node:assert/strict"; +import { mkdirSync, mkdtempSync, rmSync, writeFileSync } from "node:fs"; +import { tmpdir } from "node:os"; +import { dirname, join } from "node:path"; + +const work = mkdtempSync(join(tmpdir(), "layerfs-lifecycle-")); +const volume = process.env.LAYERFS_STORE_PATH + ? join(dirname(dirname(process.env.LAYERFS_STORE_PATH)), `lifecycle-${process.pid}`) + : join(work, "volume"); +const store = join(volume, "global", "store.sqlite"); +try { + const source = join(work, "source"); + mkdirSync(source); + writeFileSync(join(source, "a.txt"), "hello windows-native store\n"); + process.env.LAYERFS_HOME = join(work, "home"); + mkdirSync(join(volume, "global"), { recursive: true }); + const { LayerFS } = await import("@layerfs/agent"); + process.env.LAYERFS_STORE_PATH = store; + const layerfs = await LayerFS.init("lifecycle", source); + + assert.equal(layerfs.created.kind, "Initialized"); + await layerfs.branch.fork("dev"); + + const body = "written by the native Store face\n"; + assert.equal((await layerfs.fs.write("dev", "/windows.md", body, "lifecycle write")).kind, "Committed"); + + assert.equal((await layerfs.fs.read("dev", "/windows.md")).text, body); + assert.equal((await layerfs.fs.read("main", "/a.txt")).text, "hello windows-native store\n"); + assert.equal((await layerfs.fs.stat("dev", "/windows.md")).size, Buffer.byteLength(body)); + + const commits = await layerfs.branch.list_commits("dev"); + const records = commits.records ?? commits.items ?? commits; + assert.ok(Array.isArray(records) && records.length >= 1, JSON.stringify(commits).slice(0, 200)); + + await layerfs.close(); + console.log(`store_lifecycle: ok (${records.length} commit listed)`); +} finally { + rmSync(work, { recursive: true, force: true }); + rmSync(volume, { recursive: true, force: true }); +} diff --git a/api/agent/test/store_matrix.mjs b/api/agent/test/store_matrix.mjs new file mode 100644 index 0000000000..ce7bda4a16 --- /dev/null +++ b/api/agent/test/store_matrix.mjs @@ -0,0 +1,130 @@ +// The full Store method matrix on the real native binding (owner direction +// 2026-10-25, route 2): every fs, branch and project operation the direct +// route serves — writes (write, edit, mkdir, cp, mv, rm, apply), reads +// (read with a line range, list, stat, grep, glob, blame), comparisons +// (diff_files, diff_commits, diff_branches) and branch combination +// (merge, publish) — plus the Windows refusal of the daemon-only workspace +// surface. No Docker, no daemon, no WSL2; on Linux the Store sits on the +// E2E launcher's volume (LAYERFS_STORE_PATH): +// node sdk/js/test/store_matrix.mjs +import assert from "node:assert/strict"; +import { mkdirSync, mkdtempSync, rmSync, writeFileSync } from "node:fs"; +import { tmpdir } from "node:os"; +import { dirname, join } from "node:path"; + +const work = mkdtempSync(join(tmpdir(), "layerfs-matrix-")); +const volume = process.env.LAYERFS_STORE_PATH + ? join(dirname(dirname(process.env.LAYERFS_STORE_PATH)), `matrix-${process.pid}`) + : join(work, "volume"); +const store = join(volume, "global", "store.sqlite"); +const retryRemove = (path) => { + for (let attempt = 0; attempt < 5; attempt++) { + try { rmSync(path, { recursive: true, force: true }); return; } catch { } + Atomics.wait(new Int32Array(new SharedArrayBuffer(4)), 0, 0, 200); + } +}; +try { + const source = join(work, "source"); + mkdirSync(join(source, "lib"), { recursive: true }); + writeFileSync(join(source, "README.md"), "one\ntwo\nthree\n"); + writeFileSync(join(source, "lib/app.js"), "const a = 1;\nconst b = 2;\n"); + process.env.LAYERFS_HOME = join(work, "home"); + mkdirSync(join(volume, "global"), { recursive: true }); + const { LayerFS } = await import("@layerfs/agent"); + process.env.LAYERFS_STORE_PATH = store; + const layerfs = await LayerFS.init("matrix", source); + + assert.equal(layerfs.created.kind, "Initialized"); + const branches = await layerfs.project.list_branches(); + assert.deepEqual(branches.items.map((item) => item.name), ["main"]); + await layerfs.branch.fork("work"); + + // Writes: each call is one Commit; the surface changes shape together. + await layerfs.fs.mkdir("work", "/docs", "make docs"); + await layerfs.fs.write("work", "/docs/note.md", "alpha\n", "first note"); + const second = await layerfs.fs.write("work", "/docs/note.md", "alpha\nbeta\n", "second note"); + assert.equal(second.kind, "Committed"); + const edited = await layerfs.fs.edit("work", "/docs/note.md", "alpha", "gamma", "reword"); + assert.equal(edited.kind, "Committed"); + assert.notEqual(edited.head, second.head, "each write call is one new Commit"); + await layerfs.fs.cp("work", "/docs/note.md", "/docs/copy.md", "copy"); + await layerfs.fs.mv("work", "/docs/copy.md", "/docs/moved.md", "move"); + await layerfs.fs.rm("work", "/docs/moved.md", "remove"); + const listing = await layerfs.fs.list("work", "/docs"); + assert.deepEqual(listing.items.map((item) => item.name).sort(), ["note.md"]); + + // Reads: content, shape and search over the written tree. + assert.equal((await layerfs.fs.read("work", "/docs/note.md")).text, "gamma\nbeta\n"); + const ranged = await layerfs.fs.read("work", "/README.md", 1, 2); + assert.equal(ranged.text, "one\ntwo\n"); + assert.equal((await layerfs.fs.stat("work", "/docs/note.md")).size, Buffer.byteLength("gamma\nbeta\n")); + const grep = await layerfs.fs.grep("work", "gamma"); + assert.deepEqual(grep.items.map((hit) => hit.path), ["/docs/note.md"]); + assert.deepEqual((await layerfs.fs.glob("work", "**/*.js")).items, ["/lib/app.js"]); + const blame = await layerfs.fs.blame("work", "/docs/note.md"); + assert.equal(blame.lines.length, 2); + assert.ok(blame.lines.every((line) => typeof line.commit === "string")); + + // Comparisons: file, commit and branch. + assert.equal((await layerfs.fs.diff_files("main", "/README.md", "work", "/README.md")).kind, "Equal"); + const changed = await layerfs.fs.diff_files("main", "/README.md", "work", "/docs/note.md"); + assert.notEqual(changed.kind, "Equal"); + const commits = await layerfs.branch.list_commits("work"); + assert.ok(commits.items.length >= 6, `${commits.items.length} commits listed`); + // main is the project's main line, not a Branch: it moves only through + // branch.publish and is refused by the Branch name index. + await assert.rejects(layerfs.branch.list_commits("main"), { code: "NoSuchBranch" }); + const oldest = commits.items[commits.items.length - 1]; + const commitDiff = await layerfs.branch.diff_commits(oldest.id, commits.items[0].id); + assert.ok(JSON.stringify(commitDiff).includes("/docs/note.md"), JSON.stringify(commitDiff).slice(0, 200)); + const branchDiff = await layerfs.branch.diff_branches("main", "work"); + assert.equal(branchDiff.kind, "ok"); + + // Combination: merge reads both lines; publish moves main's head. + const merged = await layerfs.branch.merge("main", "work", "merged", "combine"); + assert.equal(merged.kind, "Merged"); + assert.equal((await layerfs.fs.read("merged", "/docs/note.md")).text, "gamma\nbeta\n"); + const published = await layerfs.branch.publish("work"); + assert.ok(published.kind, JSON.stringify(published).slice(0, 200)); + assert.equal((await layerfs.fs.read("main", "/docs/note.md")).text, "gamma\nbeta\n"); + // A divergent merge: both sides advanced past their common base, so this + // is a real merge Commit (two parents), and both sides' files must be + // readable on the merged Branch and on main after its publish. + await layerfs.fs.write("work", "/later.md", "later\n", "work advanced"); + await layerfs.branch.fork("feat2"); + await layerfs.fs.write("feat2", "/feat2.md", "feat2 line\n", "feat2 advanced"); + const combined = await layerfs.branch.merge("work", "feat2", "combined", "combine diverged"); + assert.equal(combined.kind, "Merged"); + assert.equal(combined.fastForward, false, "diverged sources cannot fast-forward"); + assert.equal((await layerfs.fs.read("combined", "/later.md")).text, "later\n"); + assert.equal((await layerfs.fs.read("combined", "/feat2.md")).text, "feat2 line\n"); + const combinedHead = (await layerfs.branch.list_commits("combined", 1)).items[0]; + assert.ok(combinedHead.secondParent, "a divergent merge Commit carries two parents"); + await layerfs.branch.publish("combined"); + assert.equal((await layerfs.fs.read("main", "/later.md")).text, "later\n"); + assert.equal((await layerfs.fs.read("main", "/feat2.md")).text, "feat2 line\n"); + + const after = await layerfs.project.list_branches(); + assert.deepEqual(after.items.map((item) => item.name).sort(), ["combined", "feat2", "main", "merged", "work"]); + + // The daemon-only surface refuses Unsupported on the Windows route; on + // Linux the workspace route is the daemon's and is not exercised here. + if (process.platform === "win32") { + // The daemon-only surface refuses Unsupported at the native layer; a + // sandbox.create reaches it with valid arguments on every API shape. + process.env.LAYERFS_IMAGE = "fake-image"; + process.env.LAYERFS_VOLUME = "fake-volume"; + process.env.LAYERFS_DAEMON = "/fake/daemon"; + await assert.rejects( + layerfs.sandbox.create({ image: "fake-image" }), + { code: "Unsupported" }, + "the Windows route refuses the daemon surface", + ); + } + + await layerfs.close(); + console.log(`store_matrix: ok (${commits.items.length} commits, ${after.items.length} branches)`); +} finally { + retryRemove(work); + retryRemove(volume); +} diff --git a/api/agent/test/trace.mjs b/api/agent/test/trace.mjs index bd43e47f9e..23a307ea24 100644 --- a/api/agent/test/trace.mjs +++ b/api/agent/test/trace.mjs @@ -5,9 +5,11 @@ import assert from "node:assert/strict"; import { existsSync, mkdtempSync, readdirSync, readFileSync, rmSync } from "node:fs"; import { tmpdir } from "node:os"; import { join } from "node:path"; -import { fileURLToPath } from "node:url"; +import { fileURLToPath, pathToFileURL } from "node:url"; const FAKE = fileURLToPath(new URL("./fixture/fake-native.cjs", import.meta.url)); +// import() needs a file:// URL; a bare Windows path is not one. +const FAKE_URL = pathToFileURL(FAKE).href; Object.assign(process.env, { LAYERFS_NATIVE: FAKE, LAYERFS_HOME: "/private/trace-home", LAYERFS_DOCKER: "/fake.sock", LAYERFS_IMAGE: "fake-image", LAYERFS_VOLUME: "fake-volume", LAYERFS_DAEMON: "/fake/daemon", @@ -85,7 +87,7 @@ const selected = process.argv[2]; try { if (selected === "on") { const reference = await script(await LayerFS.open("website")); - const native = (await import(FAKE)).default; + const native = (await import(FAKE_URL)).default; const before = native.calls.length; assert.ok(native.observed.every((scope) => scope === null), "untraced calls carry no scope"); process.env.LAYERFS_TRACE = file; @@ -249,7 +251,7 @@ try { } else if (selected === "store") { // Store calls open the client's Store in this process once, and close() // releases it; no Sandbox is started for them (#352 F-020). - const native = (await import(FAKE)).default; + const native = (await import(FAKE_URL)).default; const client = await LayerFS.open("website"); await client.project.list_branches(); await client.fs.read("main", "/README.md"); @@ -292,7 +294,7 @@ try { // A client in a container dials its daemonHost on every call that // reaches a Sandbox, backend calls included: the binding reopens or // starts the Sandbox with the call's deploy. - const native = (await import(FAKE)).default; + const native = (await import(FAKE_URL)).default; process.env.LAYERFS_DAEMON_HOST = "host.docker.internal"; await script(await LayerFS.open("website")); const named = native.calls.filter((_, index) => "sandbox" in native.args[index]); diff --git a/core/AGENTS.md b/core/AGENTS.md index 450771bd8a..ac6289c3c2 100644 --- a/core/AGENTS.md +++ b/core/AGENTS.md @@ -55,3 +55,151 @@ root guide's required behavior coverage and deletion record. For docs-only changes verify local links/anchors, status, claims and whitespace; Rust/runtime checks do not apply. CI reports after a push and never gates it. +```sh +cargo +1.85.1 test --manifest-path core/Cargo.toml --locked --all-targets +cargo +1.85.1 clippy --manifest-path core/Cargo.toml --locked --all-targets -- -D warnings +cargo +1.85.1 fmt --manifest-path core/Cargo.toml --all -- --check +python3 -B core/tools/check_product_boundary.py +python3 -B -m unittest discover -s core/tools -p 'test_*.py' +``` + +Every test invocation obeys the repository's +[2-minute test ceiling](../AGENTS.md#4-code-build-and-docs): run it under an +explicit timeout of at most 120 s, per package when the whole suite cannot fit, +and treat reaching the ceiling as a hang to diagnose, not a run to wait for. + +Migrations and refactors follow the root +[delete-rather-than-nurse rule](../AGENTS.md#4-code-build-and-docs): delete a +test that is tricky to adapt, keep or move only cheap tests of surviving +behaviour, and re-cover any still-valid fix or contract on the new code. +`benchmark/fs-bench-pro` is frozen and left broken (owner, 2026-10-18): +do not build, run, check or repair it. + +For docs-only changes, check links/anchors, status/claim accuracy and whitespace; +report why Rust/runtime checks are inapplicable. For tooling/harness changes run +the owning scoped tests. At final implementation identity run required covering +checks once; diagnose a failure from its output/source before a justified repair +and rerun. Do not repeat unchanged passing checks or run an unrelated legacy sweep. + +The guard checks source text, line caps and common prohibited constructs, +including markers embedded in source comments/strings. It is not a Rust semantic +or runtime proof. Review ordinary macros, helpers, dependency/target declarations +and generated inputs; extend scanners for new shipped formats. An excluded +FUSE/daemon package is not exercised by passing active-workspace tests. + +There is no CI or aggregate pre-push gate; `tools/preflight.sh` is retired. +Do not disable discovery or recreate an equivalent wrapper. Report exact checks, +failures and gaps. A scan or proposal alone does not establish implementation. + +### Build flags are part of the check + +aarch64 binaries retain the repository ARMv8 AEAD build inputs: +`--cfg aes_armv8 --cfg polyval_armv8 --cfg chacha20_force_neon +-C target-feature=+aes,+sha2`. +The [root Cargo config](../.cargo/config.toml) is discovered from the working +directory, not by a manifest path into core. Builds outside the repository or +with explicit RUSTFLAGS must repeat that profile. Record flags/config in build +identities; preserve the transport's required-profile refusal when integrating +it. Documentation builds do not prove the binary profile. + +Measurement work additionally follows the +[agent measurement workflow](../docs/general/agent-measurement-policy.md) and +[owning core harness guide](../benchmark/fs-bench-pro/AGENTS.md). Frozen identities, +cache states and budgets are evidence contracts, not product runtime limits. + +### Fuser provenance and authorized-patch checks + +Additional owner authorization 2026-10-14: "you are allowed to modify fuser with +patch". The [receive-buffer decision](docs/issues/321/FUSER-RECEIVE-BUFFER-DECISION-20261014.md) +records the scope. Receive loops read into the `max_write + 4096` bytes +negotiated at INIT instead of fuser's 16 MiB + 4 KiB maximum. The delta is in +`read_buf.rs`, `session.rs` and `session/lifecycle.rs`, applied after the +lifecycle patch. `receive-buffer.patch` and `receive-buffer-provenance.json` +pin it, and the focused check verifies it. The earlier records stay unchanged. + +Additional owner authorization2026-10-08: the [scoped receive-loop lifecycle +extension](docs/issues/307/FUSER-LIFECYCLE-DECISION-20261008.md) may extend the +pinned fuser0.18.0 package beyond time.rs to establish loop entry/exit, retained +startup/join ownership and the proposed explicit lifecycle API. This narrowly +supersedes the timestamp-only file restriction below. Preserve the original +timestamp provenance unchanged; record and verify the lifecycle delta separately. +No other dependency change or general unsafe exception is authorized. Permission +does not establish implementation or native Ready/drain qualification. + +Latest owner direction2026-10-06: "use fuser 0.18.0 from crates io and apply patch". +This supersedes the earlier registry-only/no-patch ruling for this one correction. +Keep the dependency version exactly0.18.0; use the checked-in copy of its official +crates.io archive with only `src/time.rs` changed by the recorded upstream timestamp +fix and regression tests. Both owning workspace roots use the exact path/version +`[patch.crates-io]` entry. Do not edit shared Cargo registry packages, adopt a Git +dependency, or extend this exception to unrelated source/dependency changes. + +The original archive checksum, all85 published file hashes, exact diff and patched +time.rs hash are pinned in `patches/fuser-0.18.0/provenance.json` and checked by the +focused guard. A patched Cargo.lock entry has no registry checksum; the explicit +provenance record authenticates its modified bytes. See +[the authorized patch record](docs/issues/307/FUSER-REGISTRY-PATCH-20261006.md). +Native qualification and the complete S8 contract remain separate requirements. + +Subsequent owner direction2026-10-06: "docker verification is enough". Existing +native Docker proofs are accepted for verifying this fuser correction. Retain +Linux's fractional signed-minimum endpoint outcome as a platform limitation; +do not require QEMU or a custom-kernel campaign to verify the dependency fix. +This acceptance does not complete S8's product implementation or turn that +individual native FAIL into PASS. Continue the remaining S7–S9 work using Docker. + +Before a native fuser build, run the focused provenance check: + +```sh +python3 -B core/tools/check_fuser_integrity.py +``` + +For an installed registry source, also supply its archive, package directory and +checksum taken from its original registry lock or the pinned base-archive record +with `--archive`, `--package-directory` and `--locked-checksum`. This reads and +verifies package files without modifying +them. Run scoped self-tests when changing the check. It is not an aggregate +pre-push/CI wrapper or a timestamp-capability proof. Current evidence and the +historically rejected unmodified Git candidate are in +[the fuser verification record](docs/issues/307/FUSER-OFFICIAL-CANDIDATE-20261006.md). + +### Authorized Persistence seal file control + +Owner authorization 2026-10-07: "Approve the narrowly audited seal wrapper". +The system macOS SQLite enables persistent WAL and otherwise leaves empty +sidecars after checked close. Persistence uses `deny(unsafe_code)` with one +allowed module, `src/backend/sqlite/file_control.rs`, compiled on macOS only. +It sets and reads back `SQLITE_FCNTL_PERSIST_WAL` under sole seal ownership. +No other Persistence module may contain unsafe Rust; the guard and its tests +enforce the exact path. This does not authorize third-party patches, dependency +changes, manual sidecar deletion or other FFI. See the +[decision and diagnostic](docs/issues/307/SEAL-PERSIST-WAL-DECISION-20261007.md). + +### Audited Windows FFI modules + +Owner direction 2026-10-25 (route 2, Windows-native Store; root AGENTS.md) +adds audited Windows FFI beside the macOS seal wrapper. The guard +(`tools/check_product_boundary.py`) and its tests enforce the exact paths: + +- Persistence keeps `deny(unsafe_code)` with two allowed modules: + `src/backend/sqlite/file_control.rs` (the macOS seal wrapper, unchanged) + and `src/backend/sqlite/windows_lane.rs` (the named kernel mutex writer + lane and `GetVolumeInformationW` volume filesystem). +- layerfs-project moves forbid→deny with one allowed module, + `src/import/windows_identity.rs` (`GetFileInformationByHandle`: volume + serial, file index, creation time). +- layerfs-overlay moves forbid→deny with one allowed module, + `src/database/windows_identity.rs` (handle/path identity, + `GetFileInformationByHandleEx` allocation, `GetDiskFreeSpaceExW`). +- Storage's `src/encoding/codec.rs` authorization is unchanged. + +Acquisition rows are keyed by dev+inode. On Windows the identity MUST be +the real volume serial and file index; a zeroed placeholder collides every +entry onto one key and Init refuses with "the entry changed while Init +read it". + +`#[cfg(unix)]` code is invisible to a Windows compile: a unix-only edit +that does not parse can pass on Windows and still break Linux. Code touched +for this route is cross-checked with `cargo check --locked` in the pinned +Linux container (`rust:1.85.1-bookworm`) before any "it builds" claim. + diff --git a/core/docs/architecture/83-store-concurrency-model.md b/core/docs/architecture/83-store-concurrency-model.md index b2e6e8cdd0..6693ae7a46 100644 --- a/core/docs/architecture/83-store-concurrency-model.md +++ b/core/docs/architecture/83-store-concurrency-model.md @@ -31,11 +31,19 @@ | Layer | Scope | Why it exists | | --- | --- | --- | | SQLite file lock (WAL) | the Store file | SQLite allows one write transaction per database; readers proceed alongside | -| Directory lock (Linux) | all writer processes of one Store | Writers in different processes (each Sandbox's daemon, the SDK process) take turns instead of meeting `SQLITE_BUSY` | +| Directory lock (Linux) / named kernel mutex (Windows) | all writer processes of one Store | Writers in different processes (each Sandbox's daemon, the SDK process) take turns instead of meeting `SQLITE_BUSY`; on Windows the mutex is named per Store directory and an abandoned mutex is taken by the next waiter | | Writer admission queue | threads of one process | Threads take turns on the process's one writer connection, first come first served, before touching SQLite | | Publication lane | one Commit's publish | Head check, merge and publish are one atomic step, so two Commits never both publish on the same old head | +| Open/teardown holds | one Store's connect, writable setup and close | The connect-time statement block (profile pragmas, format reads — where a cleaned WAL `-shm` is rebuilt under an exclusive recovery hold), the writable setup block (held publication lane, nested turns take no second lock) and a coordinated close (`StoreLane`/`Handles::shutdown`; the service's `close` stops overlays first, then drops the sessions under the lane) run under the same cross-process lane: SQLite's close-time checkpoint is writer work like any other and must never run beside another opener's first attach (no-retry rule) | | Workspace lock | one Workspace's overlay database | Separate concern: guards that Workspace's own overlay connection (root AGENTS.md) | +The lane's Windows name is SHA-256 of the resolved directory's encoded +bytes truncated to 64 bits — a version-stable digest, never +`DefaultHasher`, whose algorithm may change between Rust releases and +silently split one directory onto two lanes across builds (K3 review F1). +The mutexes live in the `Local\` namespace: one login session's lanes are +invisible to another (DIRECT_STORE.md §6). + The queue and the directory lock replace failure, not add serialization: the repository forbids automatic retries and busy handlers (one attempt per operation, exact failure), so a writer waits its turn before its single SQL diff --git a/core/docs/issues/352/DIRECT_STORE.md b/core/docs/issues/352/DIRECT_STORE.md index 765b326d0b..51dcfe7203 100644 --- a/core/docs/issues/352/DIRECT_STORE.md +++ b/core/docs/issues/352/DIRECT_STORE.md @@ -11,6 +11,8 @@ > **One route, Linux only (owner, 2026-10-18):** Store calls run in-process > only; the daemon stops serving them, and an unsupported setup fails > `Unsupported`. There is no daemon route to choose or fall back to. +> **Windows-native route (owner, 2026-10-25):** the Store engine and this +> in-process Store face also run natively on Windows; see §6. ## 1. Architecture @@ -88,3 +90,61 @@ Disposable/WAL/OFF only; page size 4 KiB; one attempt per operation; FUSE and Workspaces stay in the daemon; the daemon keeps opening the Store directly; no `layerfs-server`, no host/server adapter in the data path (the SDK is a direct opener, not a proxy). + +## 6. Windows-native route (owner direction 2026-10-25) + +The one-kernel safety condition is met natively on Windows: every opener of a +Windows Store shares one Windows kernel and one local NTFS volume. No WSL2 and +no daemon are involved. Implemented on branch `windows-native-store`: + +- The cross-process writer lane is a named kernel mutex + (`Local\layerfs-writer-lane-`); an abandoned mutex is taken by the + next waiter, so a dead writer does not hold the lane. +- The kernel guard allows local NTFS volumes only, read with + `GetVolumeInformationW`; other filesystems and non-disk prefixes fail + `Unsupported` before the Store opens. +- SQLite is bundled (rusqlite) on Windows targets; Disposable/WAL/OFF is the + only profile, unchanged. +- Acquisition identity is the real volume serial and file index + (`GetFileInformationByHandle`), in audited FFI modules listed in + core/AGENTS.md. +- The SDK addon serves fs, branch, project and operator calls in-process + exactly as on Linux. Workspace, exec and daemon calls refuse `Unsupported` + on Windows: FUSE, the daemon and Workspaces remain Linux-only, and the dsh + macOS and WSL2 exceptions are unchanged. + +Recorded limitations of this route: the Windows lane and discovery +mutexes live in the `Local\` namespace, so a session-0 service and a user +session would each hold its own lane (Linux's directory flock crosses +sessions); the product opens its Store within one login session today, and +cross-session coordination would need the `Global\` namespace with a +privilege evaluation (K3 review F2); Windows Init carries names as +lossless WTF-8 (an unpaired surrogate included, byte-exact round trip), +synthesizes the mode from the read-only attribute, has no hard-link +membership, and its backing-inside-source check resolves the placement's +spelling (a subst drive or unresolvable alias is not recognised); overlay +allocation is the logical length. Last-owner overlay-file deletion applies +the same audited identity on Windows as on Linux (volume serial + file +index, sole link, checked on both the path's entry and the retained +handle). + +When the owner merges this branch, the observation period runs by a +fixed checklist (each step reads a mechanism that already exists, none +needs a new decision): + +1. **Merge lands** — the observation job records `merged` with the merge + commit; the tech-tree gate `pr_merged_and_stable` flips on that fact. +2. **Stability window** — the owner bounds it (the ruling names no + length); its evidence is the absence of new findings on this PR plus + the standing suites staying green on `main`. +3. **WinFsp independent period starts contract-first** (SSO pattern): + the mount face's contracts are written and reviewed before any + implementation, under the `winfsp-independent-period` tree node whose + precondition is exactly step 1 plus step 2. + +Proof receipts: the cross-process lane verifier +(`layerfs-persistence` `tests/windows_store_native.rs`, two re-exec'd child +processes, bounded waits); `cargo check --locked` of the five touched crates +on Windows and in the `rust:1.85.1-bookworm` container; the lifecycle smoke +(init → fork → one-Commit write → read back → list_commits → close) with no +WSL2 and no daemon. diff --git a/docs/general/cluster_one_handbook.md b/docs/general/cluster_one_handbook.md index c9849ba7d5..0713933c6e 100644 --- a/docs/general/cluster_one_handbook.md +++ b/docs/general/cluster_one_handbook.md @@ -57,7 +57,7 @@ The active Core workspace contains six crates: | `layerfs-content` | Canonical identity, file construction/editing, filesystem trees, logical reads | Turn bytes/edits/namespace rows into canonical objects; read logical data | | `layerfs-storage` | Reuse, physical encoding, delta selection, packing, bounded Save and Reader | Store canonical objects and acquire authenticated canonical bytes | | `layerfs-history` | Typed history records and `HistoryCatalog` semantic operations | Inode reservation, genesis, branches, Commits, Layers | -| `layerfs-persistence` | Shared SQLite provider for storage and history on macOS/Linux | Create/open the Store and execute provider-owned transactions | +| `layerfs-persistence` | Shared SQLite provider for storage and history on macOS/Linux/Windows (Windows: local NTFS volumes; owner direction 2026-10-25) | Create/open the Store and execute provider-owned transactions | | `layerfs-project` | Native namespace Init orchestration | Import a regular directory and publish its genesis LayerStack | | `layerfs-telemetry` | Explicit timing scopes and reports | Observe the same production operations with timing enabled/disabled | diff --git a/dsh/node_modules/.modules.yaml b/dsh/node_modules/.modules.yaml new file mode 100644 index 0000000000..2121d7411e --- /dev/null +++ b/dsh/node_modules/.modules.yaml @@ -0,0 +1,44 @@ +{ + "hoistedDependencies": { + "packages/client": { + "@dsh-layerfs/client": "private" + }, + "packages/dsh-layerfs": { + "dsh-layerfs": "private" + }, + "packages/dsh-layerfs-demo": { + "dsh-layerfs-demo": "private" + }, + "packages/host": { + "@dsh-layerfs/host": "private" + }, + "packages/mock": { + "@dsh-layerfs/mock": "private" + }, + "packages/model": { + "@dsh-layerfs/model": "private" + }, + "packages/view": { + "@dsh-layerfs/view": "private" + } + }, + "hoistPattern": [ + "*" + ], + "included": { + "dependencies": true, + "devDependencies": true, + "optionalDependencies": true + }, + "injectedDeps": {}, + "layoutVersion": 5, + "nodeLinker": "isolated", + "packageManager": "pnpm@11.28.5", + "pendingBuilds": [], + "publicHoistPattern": [], + "prunedAt": "Sat, 24 Oct 2026 08:26:15 GMT", + "skipped": [], + "storeDir": "C:\\Users\\Administrator\\.pnpm\\store\\v11", + "virtualStoreDir": "D:\\workspace\\layerfs\\dsh\\node_modules\\.pnpm", + "virtualStoreDirMaxLength": 60 +} \ No newline at end of file diff --git a/dsh/node_modules/.pnpm-workspace-state-v1.json b/dsh/node_modules/.pnpm-workspace-state-v1.json new file mode 100644 index 0000000000..a47ba58800 --- /dev/null +++ b/dsh/node_modules/.pnpm-workspace-state-v1.json @@ -0,0 +1,65 @@ +{ + "lastValidatedTimestamp": 1792830375427, + "projects": { + "D:\\workspace\\layerfs\\dsh": { + "name": "dsh-layerfs-workspace" + }, + "D:\\workspace\\layerfs\\dsh\\packages\\client": { + "name": "@dsh-layerfs/client", + "version": "0.1.0" + }, + "D:\\workspace\\layerfs\\dsh\\packages\\dsh-layerfs": { + "name": "dsh-layerfs", + "version": "0.1.0" + }, + "D:\\workspace\\layerfs\\dsh\\packages\\dsh-layerfs-demo": { + "name": "dsh-layerfs-demo", + "version": "0.1.0" + }, + "D:\\workspace\\layerfs\\dsh\\packages\\host": { + "name": "@dsh-layerfs/host", + "version": "0.1.0" + }, + "D:\\workspace\\layerfs\\dsh\\packages\\mock": { + "name": "@dsh-layerfs/mock", + "version": "0.1.0" + }, + "D:\\workspace\\layerfs\\dsh\\packages\\model": { + "name": "@dsh-layerfs/model", + "version": "0.1.0" + }, + "D:\\workspace\\layerfs\\dsh\\packages\\view": { + "name": "@dsh-layerfs/view", + "version": "0.1.0" + } + }, + "pnpmfiles": [], + "settings": { + "autoInstallPeers": false, + "catalogs": {}, + "dedupeDirectDeps": false, + "dedupeInjectedDeps": true, + "dedupePeerDependents": true, + "dedupePeers": false, + "dev": true, + "excludeLinksFromLockfile": false, + "hoistPattern": [ + "*" + ], + "hoistWorkspacePackages": true, + "injectWorkspacePackages": false, + "linkWorkspacePackages": false, + "minimumReleaseAge": 1440, + "minimumReleaseAgeIgnoreMissingTime": true, + "nodeLinker": "isolated", + "optional": true, + "peersSuffixMaxLength": 1000, + "preferWorkspacePackages": false, + "production": true, + "publicHoistPattern": [], + "workspacePackagePatterns": [ + "packages/*" + ] + }, + "filteredInstall": false +} diff --git a/dsh/node_modules/.pnpm/lock.yaml b/dsh/node_modules/.pnpm/lock.yaml new file mode 100644 index 0000000000..847edb0cc0 --- /dev/null +++ b/dsh/node_modules/.pnpm/lock.yaml @@ -0,0 +1,52 @@ +lockfileVersion: '9.0' + +settings: + autoInstallPeers: false + excludeLinksFromLockfile: false + +importers: + + .: {} + + packages/client: + dependencies: + '@dsh-layerfs/model': + specifier: workspace:* + version: link:../model + '@dsh-layerfs/view': + specifier: workspace:* + version: link:../view + + packages/dsh-layerfs: + dependencies: + '@dsh-layerfs/client': + specifier: workspace:* + version: link:../client + '@dsh-layerfs/host': + specifier: workspace:* + version: link:../host + + packages/dsh-layerfs-demo: + dependencies: + '@dsh-layerfs/mock': + specifier: workspace:* + version: link:../mock + + packages/host: + dependencies: + '@dsh-layerfs/model': + specifier: workspace:* + version: link:../model + '@layerfs/sdk': + specifier: link:../../../sdk/js + version: link:../../../sdk/js + + packages/mock: {} + + packages/model: {} + + packages/view: + dependencies: + '@dsh-layerfs/model': + specifier: workspace:* + version: link:../model diff --git a/dsh/node_modules/.pnpm/node_modules/@dsh-layerfs/client b/dsh/node_modules/.pnpm/node_modules/@dsh-layerfs/client new file mode 120000 index 0000000000..c65e2a8df2 --- /dev/null +++ b/dsh/node_modules/.pnpm/node_modules/@dsh-layerfs/client @@ -0,0 +1 @@ +../../../../packages/client \ No newline at end of file diff --git a/dsh/node_modules/.pnpm/node_modules/@dsh-layerfs/host b/dsh/node_modules/.pnpm/node_modules/@dsh-layerfs/host new file mode 120000 index 0000000000..1cf539600c --- /dev/null +++ b/dsh/node_modules/.pnpm/node_modules/@dsh-layerfs/host @@ -0,0 +1 @@ +../../../../packages/host \ No newline at end of file diff --git a/dsh/node_modules/.pnpm/node_modules/@dsh-layerfs/mock b/dsh/node_modules/.pnpm/node_modules/@dsh-layerfs/mock new file mode 120000 index 0000000000..a496d13bc7 --- /dev/null +++ b/dsh/node_modules/.pnpm/node_modules/@dsh-layerfs/mock @@ -0,0 +1 @@ +../../../../packages/mock \ No newline at end of file diff --git a/dsh/node_modules/.pnpm/node_modules/@dsh-layerfs/model b/dsh/node_modules/.pnpm/node_modules/@dsh-layerfs/model new file mode 120000 index 0000000000..b7ca4ac474 --- /dev/null +++ b/dsh/node_modules/.pnpm/node_modules/@dsh-layerfs/model @@ -0,0 +1 @@ +../../../../packages/model \ No newline at end of file diff --git a/dsh/node_modules/.pnpm/node_modules/@dsh-layerfs/view b/dsh/node_modules/.pnpm/node_modules/@dsh-layerfs/view new file mode 120000 index 0000000000..a4cdb766b4 --- /dev/null +++ b/dsh/node_modules/.pnpm/node_modules/@dsh-layerfs/view @@ -0,0 +1 @@ +../../../../packages/view \ No newline at end of file diff --git a/dsh/node_modules/.pnpm/node_modules/dsh-layerfs b/dsh/node_modules/.pnpm/node_modules/dsh-layerfs new file mode 120000 index 0000000000..b35e00a3ba --- /dev/null +++ b/dsh/node_modules/.pnpm/node_modules/dsh-layerfs @@ -0,0 +1 @@ +../../../packages/dsh-layerfs \ No newline at end of file diff --git a/dsh/node_modules/.pnpm/node_modules/dsh-layerfs-demo b/dsh/node_modules/.pnpm/node_modules/dsh-layerfs-demo new file mode 120000 index 0000000000..fbf66a2704 --- /dev/null +++ b/dsh/node_modules/.pnpm/node_modules/dsh-layerfs-demo @@ -0,0 +1 @@ +../../../packages/dsh-layerfs-demo \ No newline at end of file diff --git a/dsh/packages/client/lib/client.js b/dsh/packages/client/lib/client.js new file mode 100644 index 0000000000..7c0fbd3dcc --- /dev/null +++ b/dsh/packages/client/lib/client.js @@ -0,0 +1,12007 @@ +window.__ModuleLoader__.load({ + id: "@dsh-layerfs/client", + factory: (require) => { + var module = { exports: {} }; + var exports = module.exports; + Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" }); + //#region \0rolldown/runtime.js + var __create = Object.create; + var __defProp = Object.defineProperty; + var __getOwnPropDesc = Object.getOwnPropertyDescriptor; + var __getOwnPropNames = Object.getOwnPropertyNames; + var __getProtoOf = Object.getPrototypeOf; + var __hasOwnProp = Object.prototype.hasOwnProperty; + var __commonJSMin = (cb, mod) => () => (mod || (cb((mod = { exports: {} }).exports, mod), cb = null), mod.exports); + var __exportAll = (all, no_symbols) => { + let target = {}; + for (var name in all) __defProp(target, name, { + get: all[name], + enumerable: true + }); + if (!no_symbols) __defProp(target, Symbol.toStringTag, { value: "Module" }); + return target; + }; + var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") for (var keys = __getOwnPropNames(from), i = 0, n = keys.length, key; i < n; i++) { + key = keys[i]; + if (!__hasOwnProp.call(to, key) && key !== except) __defProp(to, key, { + get: ((k) => from[k]).bind(null, key), + enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable + }); + } + return to; + }; + var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { + value: mod, + enumerable: true + }) : target, mod)); + //#endregion + let react = require("react"); + let _deepseek_ai_dsh_client_ui_primitives = require("@deepseek-ai/dsh-client-ui-primitives"); + let react_jsx_runtime = require("react/jsx-runtime"); + let react_dom = require("react-dom"); + //#region src/client/api.ts + /** A Sandbox's image as shown: its tag, else the digest's first 12 hex digits. */ + const imageLabel = (s) => s.imageName ?? (s.image ? s.image.replace(/^sha256:/, "").slice(0, 12) : null); + const POLL_MS$3 = 300; + const pause = (ms) => new Promise((resolve) => setTimeout(resolve, ms)); + /** Starts an Init and reads its job until it ends; `onProgress` sees each read. `empty`: a new empty project with a random name. */ + async function init(folder, name, source, onProgress = () => {}, empty = false) { + let { job } = await call$1("POST", "/init", { + folder, + name, + source, + ...empty ? { empty } : {} + }); + for (;;) { + onProgress(job); + if (job.step === "done") return { project: job.project }; + if (job.step === "failed") throw Object.assign(new Error(job.error.message), { code: job.error.code }); + await pause(POLL_MS$3); + job = (await call$1("GET", `/init/${encodeURIComponent(job.id)}`)).job; + } + } + async function call$1(method, path, body) { + const res = await fetch(`/layerfs${path}`, { + method, + credentials: "same-origin", + headers: body === void 0 ? void 0 : { "content-type": "application/json" }, + body: body === void 0 ? void 0 : JSON.stringify(body) + }); + const text = await res.text(); + let data = null; + try { + data = text ? JSON.parse(text) : null; + } catch {} + if (!res.ok) throw Object.assign(new Error(data?.message ?? `LayerFS answered ${res.status}`), { + code: data?.code, + status: res.status + }); + return data; + } + const sid = (id) => encodeURIComponent(id); + /** + * Reads a project progressively: its History from the Store first (quick; no + * Sandbox asked), then the whole state with its Workspaces, which replaces it. + * `fail` runs only when neither read answers. Returns a stop function. + */ + function readProject(name, show, fail) { + let stopped = false, full = false; + const history = api.projectHistory(name).then((s) => { + if (!stopped && !full) show({ + ...s, + historyOnly: true + }); + }); + api.projectState(name).then((s) => { + full = true; + if (!stopped) show(s); + }, (e) => { + history.catch(() => { + if (!stopped) fail(e.message); + }); + }); + history.catch(() => {}); + return () => { + stopped = true; + }; + } + const filesQuery = (query) => new URLSearchParams(Object.entries(query).map(([k, v]) => [k, String(v)])).toString(); + const api = { + status: () => call$1("GET", "/status"), + workspace: (folder) => call$1("GET", `/workspace?folder=${encodeURIComponent(folder)}`), + session: (id) => call$1("GET", `/session/${sid(id)}`), + choose: (id, project) => call$1("POST", `/session/${sid(id)}/project`, { project }), + init, + projects: () => call$1("GET", "/projects"), + setDefault: (folder, project) => call$1("POST", "/workspace", { + folder, + project + }), + projectState: (name) => call$1("GET", `/project/${encodeURIComponent(name)}/state`), + /** The project's History alone, from its Store, without waiting on its Sandboxes. */ + projectHistory: (name) => call$1("GET", `/project/${encodeURIComponent(name)}/history`), + projectStorage: (name) => call$1("GET", `/project/${encodeURIComponent(name)}/storage`), + /** One Files read of saved ids (the Host's reads.js): list, read, changes or diff. */ + projectFiles: (name, kind, query) => call$1("GET", `/project/${encodeURIComponent(name)}/${kind}?${filesQuery(query)}`), + /** stopSandboxes: stop the project's running Sandboxes instead of refusing (a demo's own project) */ + remove: (name, stopSandboxes = false) => call$1("POST", `/project/${encodeURIComponent(name)}/remove`, { + confirm: name, + stopSandboxes + }), + files: (id, kind, query) => call$1("GET", `/session/${sid(id)}/${kind}?${filesQuery(query)}`), + overview: () => call$1("GET", "/runtime"), + startStore: () => call$1("POST", "/runtime/store"), + restartStore: () => call$1("POST", "/runtime/store/restart", { confirm: "restart" }), + cleanLeftovers: (names) => call$1("POST", "/runtime/leftovers", { names }), + projectRuntime: (name) => call$1("GET", `/project/${encodeURIComponent(name)}/runtime`), + /** unmount (nothing uncommitted), discard (confirm: the path) or stop a process */ + runtimeAction: (name, body) => call$1("POST", `/project/${encodeURIComponent(name)}/runtime`, body) + }; + //#endregion + //#region src/client/demo.ts + /** The archived Sessions, once dsh's Workspace list has arrived (none after 5 s without it). */ + function archived(services) { + const list = services.workspaces?.list; + if (!list) return Promise.resolve(/* @__PURE__ */ new Set()); + return new Promise((resolve) => { + let stop = () => {}; + const done = () => { + stop(); + clearTimeout(timer); + resolve(new Set(list.getSnapshot().archivedSessionIds ?? [])); + }; + const timer = setTimeout(done, 5e3); + if (list.getSnapshot().phase !== "pending") return done(); + stop = list.subscribe(() => { + if (list.getSnapshot().phase !== "pending") done(); + }); + }); + } + async function call(method, path, body) { + const res = await fetch(`/layerfs-demo${path}`, { + method, + credentials: "same-origin", + headers: body === void 0 ? void 0 : { "content-type": "application/json" }, + body: body === void 0 ? void 0 : JSON.stringify(body) + }); + const text = await res.text(); + let data = null; + try { + data = text ? JSON.parse(text) : null; + } catch {} + if (!res.ok) throw Object.assign(new Error(data?.message ?? `the demo route answered ${res.status}`), { + code: data?.code, + status: res.status + }); + return data; + } + const demoApi = { + /** null when the dsh-layerfs-demo bundle is not installed */ + info: () => call("GET", "").catch((error) => { + if (error.status === 404) return null; + throw error; + }), + demo: (id) => call("GET", `/${encodeURIComponent(id)}`), + setSession: (id, sessionId) => call("POST", `/${encodeURIComponent(id)}/session`, { sessionId }), + /** how fast the mock plays the demo from now on (mock/src/pace.js) */ + setSpeed: (id, speed) => call("POST", `/${encodeURIComponent(id)}/speed`, { speed }) + }; + /** A demo's run speeds: a multiple of the scenario's pauses and typing, or 0 for none (Max). */ + const SPEEDS = [ + 1, + 2, + 4, + 0 + ]; + const speedLabel = (speed) => speed ? `${speed}×` : "Max"; + /** Inits `name` from `source` for `folder` (Live, with `image` when given) or into the simulator (Sim) and reads its job until it ends, as api.init. */ + async function initProject(folder, source, name, mode, image, onJob) { + const request = async (method, path, body) => { + const res = await fetch(`/layerfs${path}`, { + method, + credentials: "same-origin", + headers: body ? { "content-type": "application/json" } : void 0, + body: body ? JSON.stringify(body) : void 0 + }); + const data = await res.json().catch(() => null); + if (!res.ok) throw Object.assign(new Error(data?.message ?? `the LayerFS route answered ${res.status}`), { + code: data?.code, + status: res.status + }); + return data; + }; + let { job } = await request("POST", "/init", { + folder, + name, + source, + ...mode === "sim" ? { backend: "sim" } : image ? { image } : {} + }); + for (;;) { + onJob(job); + if (job.step === "done") return; + if (job.step === "failed") throw Object.assign(new Error(job.error.message), { code: job.error.code }); + await new Promise((resolve) => setTimeout(resolve, 300)); + job = (await request("GET", `/init/${encodeURIComponent(job.id)}`)).job; + } + } + /** The demo's project for a mode: one per demo and mode, Inited again on each Play. */ + const projectOf = (id, mode) => mode === "sim" ? `demo-${id}-sim` : `demo-${id}`; + const value = (what, result) => { + if (result.ok) return result.value; + throw Object.assign(/* @__PURE__ */ new Error(`${what}: ${result.error.message ?? result.error.code ?? "refused"}`), { code: result.error.code }); + }; + /** The demo workspace's dsh Workspace with its current Sessions; registering answers the existing one. */ + async function workspaceOf(services, info) { + return value("register the demo workspace", await services.remote.workspace.create({ path: info.workspace })).workspace; + } + /** A new Session in the demo workspace for `demo`, named after it, at `before`'s place. */ + async function newSession(services, info, workspace, demo, before) { + const { session, workspace: workspaces } = services.remote; + const { sessionId } = value("create the Session", await session.create({ + workspaceId: workspace.workspaceId, + agentPreset: info.preset + })); + value("name the Session", await session.rename({ + sessionId, + title: demo.title + })); + value("choose the mock model", await session.selectModel({ + sessionId, + provider: info.provider, + model: demo.id + })); + if (before) value("place the Session", await workspaces.insertSessionBefore({ + workspaceId: workspace.workspaceId, + sessionId, + beforeSessionId: before + })); + return sessionId; + } + const send = async (services, sessionId, text) => value("send the first message", await services.remote.session.prompt({ + requestId: crypto.randomUUID(), + sessionId, + mode: "queue", + content: [{ + type: "text", + text + }] + })); + /** + * Gives every demo a Session in the demo workspace: one is made for each demo + * whose recorded Session is not in the workspace (never made, archived or + * removed). Made in reverse so the list reads in scenario order. Each opens + * with the intro question, which the mock model answers with what the demo + * shows: the sidebar lists no Session before its first turn. + * @returns the demo workspace's dsh Workspace id, or null without the Remote services + */ + async function ensureDemoSessions(services, info) { + if (!services.remote) return null; + const workspace = await workspaceOf(services, info), gone = await archived(services); + const present = new Set((workspace.sessionIds ?? []).filter((id) => !gone.has(id))); + for (const demo of [...info.demos].reverse()) { + if (demo.sessionId && present.has(demo.sessionId)) continue; + const sessionId = await newSession(services, info, workspace, demo); + await demoApi.setSession(demo.id, sessionId); + await send(services, sessionId, info.intro); + } + return workspace.workspaceId; + } + /** + * Plays `demo` from scratch in a new Session (dsh cannot empty one), which + * becomes the demo's only once the run starts. In order: the new Session is + * made at the current one's place (the sidebar lists it only from its first + * message); the current one is archived with its work stopped; the demo's + * projects are removed (their leftover Sandboxes stopped) and its project for + * the mode Inited again; then the new Session is recorded, sent the first + * message and opened. Each step is attempted once. On a failure before the + * run starts, the current Session is unarchived and stays the demo's, the new + * one is archived, and Play ends with the failure's message. With + * `startAfter`, a checkpoint's label (#352), the run starts after it. + * @returns the new Session's id + */ + async function playDemo(services, info, demo, mode, onStep, startAfter = null) { + if (!services.remote) throw new Error("this client has no Remote session services"); + if (demo.live) mode = "live"; + if (demo.seedError) throw new Error(`the demo's seed: ${demo.seedError}`); + const { workspace: workspaces } = services.remote; + const workspace = await workspaceOf(services, info); + onStep({ step: "session" }); + const previous = demo.sessionId ?? void 0; + const sessionId = await newSession(services, info, workspace, demo, previous); + let archived = false; + try { + onStep({ step: "stop" }); + if (previous) { + value("stop the previous run", await workspaces.archiveSession({ + sessionId: previous, + stopActivity: true + })); + archived = true; + } + for (const name of [projectOf(demo.id, "live"), projectOf(demo.id, "sim")]) await api.remove(name, true).catch((error) => { + if (error.status !== 404) throw error; + }); + onStep({ + step: "init", + job: null + }); + const project = projectOf(demo.id, mode); + await initProject(info.workspace, demo.seed ?? info.workspace, project, mode, demo.image, (job) => onStep({ + step: "init", + job + })); + await api.choose(sessionId, project); + await demoApi.setSession(demo.id, sessionId); + } catch (error) { + if (archived) await workspaces.unarchiveSession({ sessionId: previous }).catch(() => {}); + await workspaces.archiveSession({ sessionId }).catch(() => {}); + throw error; + } + onStep({ step: "start" }); + await send(services, sessionId, startAfter ? `${info.prompt.replace(/\.$/, "")} from after ${startAfter}.` : info.prompt); + services.uiWorkspace?.openSession(sessionId); + return sessionId; + } + //#endregion + //#region src/client/lockdown.ts + const quote$1 = (text) => JSON.stringify(text); + const part = (name) => `[class*=${quote$1(`_${name}`)}]`; + const BRANCH = ["Branch into a new conversation", "在新对话中分支"]; + function addStyle(text) { + const style = document.createElement("style"); + style.textContent = text; + document.head.append(style); + return () => style.remove(); + } + /** + * Hides the demo workspace's sidebar row actions (New session, the + * workspace's menu, each Session's menu, Archive and Pin), its Sessions' + * rename by double-click and their drag, and marks its folder row. + * @param workspaceId the demo workspace's dsh Workspace id + * @returns removes the stylesheet + */ + function lockDemoWorkspace(workspaceId) { + const row = `[data-row-key=${quote$1(`workspace:${workspaceId}`)}]`; + const sessions = `div:has(> span > ${row}) [data-row-key^="session:"]`; + const accent = "#7c5cff", accent2 = "#00a3a3"; + return addStyle(` +${row} ${part("rowActions")}, ${sessions} ${part("rowActions")} { display: none !important; } +${sessions} ${part("title")} { pointer-events: none; } +${sessions} { -webkit-user-drag: none; } +${row} { + border-radius: 8px; + background: linear-gradient(90deg, color-mix(in srgb, ${accent} 20%, transparent), color-mix(in srgb, ${accent2} 8%, transparent)); + box-shadow: inset 0 0 0 1px color-mix(in srgb, ${accent} 40%, transparent); +} +${row} ${part("folder")} { color: ${accent}; } +${row} ${part("projectText")} { flex-direction: row; align-items: center; gap: 6px; } +${row} ${part("title")} { font-weight: 600; } +${row} ${part("projectText")}::after { + content: "DEMO"; flex: none; padding: 1px 5px; border-radius: 4px; + font-size: 9px; font-weight: 700; letter-spacing: 0.08em; line-height: 14px; color: #fff; + background: linear-gradient(90deg, ${accent}, ${accent2}); +} +`); + } + const SHORTCUT = /^Key[FAG]$/; + const blocked = (e) => (e.metaKey || e.ctrlKey) && SHORTCUT.test(e.code) && (e.altKey || e.shiftKey && e.code !== "KeyG"); + /** + * While a demo Session is open: hides the chat's Branch buttons in it and + * stops the fork, archive and rename shortcuts. + * @param sessionId the demo Session, or null for none + */ + function useDemoSessionLock(sessionId) { + (0, react.useEffect)(() => { + if (!sessionId) return; + const chat = `[data-conversation-session=${quote$1(sessionId)}]`; + const removeStyle = addStyle(`${BRANCH.map((label) => `${chat} button[aria-label=${quote$1(label)}]`).join(", ")} { display: none !important; }`); + const stop = (e) => { + if (blocked(e)) { + e.preventDefault(); + e.stopImmediatePropagation(); + } + }; + window.addEventListener("keydown", stop, true); + return () => { + removeStyle(); + window.removeEventListener("keydown", stop, true); + }; + }, [sessionId]); + } + //#endregion + //#region src/client/Progress.tsx + const RULE$3 = `@keyframes lfs-progress { from { left: -40%; } to { left: 100%; } }`; + if (typeof document !== "undefined" && !document.getElementById("lfs-progress-rule")) { + const style = document.createElement("style"); + style.id = "lfs-progress-rule"; + style.textContent = RULE$3; + document.head.append(style); + } + const number = new Intl.NumberFormat(); + function size(bytes) { + const units = [ + "B", + "KB", + "MB", + "GB", + "TB" + ]; + let n = bytes, unit = 0; + while (n >= 1024 && unit < units.length - 1) { + n /= 1024; + unit++; + } + return `${unit ? n.toFixed(n < 10 ? 1 : 0) : n} ${units[unit]}`; + } + const clock$1 = (ms) => { + const s = Math.floor(ms / 1e3); + return `${Math.floor(s / 60)}:${String(s % 60).padStart(2, "0")}`; + }; + /** + * Where each of LayerFS's Init steps sits on the bar. Constructing the files + * is most of the work; within it, each file weighs its bytes plus FILE_COST, + * so a tree of many small files still moves. + */ + const SPANS = { + scan: [0, .15], + files: [.15, .95], + tree: [.95, .98], + publish: [.98, .99], + seal: [.99, 1] + }; + const FILE_COST = 4096; + const ratio$1 = (done, total) => total > 0 ? Math.min(1, done / total) : 1; + /** How much of the Init is done (0–1), or null while there is nothing to measure against. */ + function jobFraction(job) { + if (job.step === "done") return 1; + if (job.step !== "import" || !job.imported || !job.totals) return null; + const { step, entries, files, bytes } = job.imported, totals = job.totals; + const within = step === "scan" ? ratio$1(entries, totals.entries) : step === "files" ? ratio$1(bytes + files * FILE_COST, totals.bytes + totals.files * FILE_COST) : 0; + const [from, to] = SPANS[step]; + return from + (to - from) * within; + } + /** One line for a job: its step, what was counted or done, how long it has run. */ + function jobText(job, now = Date.now()) { + const elapsed = clock$1(Math.max(0, now - job.started)); + const fraction = jobFraction(job); + const t = job.totals, i = job.imported; + if (job.step === "import" && i && t) { + const of = (done, total) => `${number.format(Math.min(done, total))} of ${number.format(total)}`; + const what = { + scan: `Scanning ${of(i.entries, t.entries)} entries`, + files: `Importing ${of(i.files, t.files)} files · ${size(Math.min(i.bytes, t.bytes))} of ${size(t.bytes)}`, + tree: "Building the file tree", + publish: "Publishing the first Layer", + seal: "Sealing the Store" + }[i.step]; + return [ + `${Math.floor(fraction * 100)}%`, + what, + elapsed + ].join(" · "); + } + const counts = t ?? job.scanned; + const what = counts ? `${number.format(counts.files)} files · ${size(counts.bytes)}` : ""; + return [ + { + scan: "Counting files", + volume: "Creating the volume", + import: "Importing", + done: "Imported", + failed: "Failed" + }[job.step], + what, + elapsed + ].filter(Boolean).join(" · "); + } + /** A thin bar: `fraction` fills it (0–1); null moves a segment across it. */ + function ProgressBar({ fraction, height = 4 }) { + return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", { + role: "progressbar", + "aria-valuemin": 0, + "aria-valuemax": 100, + "aria-valuenow": fraction === null ? void 0 : Math.round(fraction * 100), + style: { + position: "relative", + overflow: "hidden", + height, + borderRadius: height, + background: "color-mix(in srgb, currentColor 12%, transparent)" + }, + children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", { style: fraction === null ? { + position: "absolute", + top: 0, + bottom: 0, + width: "40%", + borderRadius: height, + background: "var(--dsw-alias-brand-primary, #4c7dff)", + animation: "lfs-progress 1.2s ease-in-out infinite" + } : { + width: `${Math.min(1, Math.max(0, fraction)) * 100}%`, + height: "100%", + borderRadius: height, + background: "var(--dsw-alias-brand-primary, #4c7dff)", + transition: "width .3s ease" + } }) + }); + } + /** Re-renders every second so the elapsed time moves between reads. */ + function useClock(running) { + const [now, setNow] = (0, react.useState)(Date.now()); + (0, react.useEffect)(() => { + if (!running) return; + const timer = setInterval(() => setNow(Date.now()), 1e3); + return () => clearInterval(timer); + }, [running]); + return now; + } + /** The job's line over its bar. */ + function InitProgress({ job }) { + return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", { + style: { + display: "grid", + gap: 6 + }, + children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", { + style: { + fontSize: 12, + opacity: .75 + }, + children: jobText(job, useClock(true)) + }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)(ProgressBar, { fraction: jobFraction(job) })] + }); + } + //#endregion + //#region src/client/Checkpoints.tsx + /** A checkpoint whose gates passed (a watch passes, with a note); optimize and stop halt the run there. */ + const passed = (c) => c.verdict === "pass" || c.verdict === "watch"; + const color = (c) => passed(c) ? "#2e9e5b" : "#d14343"; + const time = (ms) => new Date(ms).toLocaleTimeString([], { + hour: "2-digit", + minute: "2-digit", + second: "2-digit" + }); + const stripes = (color) => `repeating-linear-gradient(135deg, ${color} 0 4px, color-mix(in srgb, ${color} 35%, transparent) 4px 7px)`; + /** The line the strip shows for the checkpoints: how many were reached, and the last one. */ + function checkpointText(checkpoints) { + const reached = checkpoints.filter((c) => c.reachedAt !== null); + const restored = reached.filter((c) => c.restored).length; + const last = reached.at(-1); + return last ? `Checkpoint ${reached.length} of ${checkpoints.length}${restored ? ` (${restored} restored)` : ""} · ${last.label}${passed(last) ? "" : ` · ${last.verdict}`}` : `0 of ${checkpoints.length} checkpoints`; + } + /** The checkpoints a new run can start after: reached by the latest run with its gates passed, and restorable. */ + const startable = (checkpoints) => checkpoints.flatMap((c, i) => c.reachedAt !== null && c.resumable && passed(c) ? [i] : []); + const LABELED = 12; + function Checkpoints({ checkpoints, running, onPick }) { + const labeled = checkpoints.length <= LABELED; + const next = checkpoints.findIndex((c) => c.reachedAt === null); + const can = new Set(startable(checkpoints)); + return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", { + role: "list", + "aria-label": "Checkpoints", + style: { + display: "flex", + gap: labeled ? 3 : 1, + minWidth: 0, + fontSize: 11 + }, + children: [checkpoints.map((c, i) => { + const reached = c.reachedAt !== null, current = running && i === next; + return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", { + role: "listitem", + title: [ + reached ? `${c.label} · ${c.restored ? "restored" : "reached"} ${time(c.reachedAt)}${passed(c) ? "" : ` · ${c.verdict}`}` : `${c.label} · ${current ? "in progress" : "not reached yet"}`, + reached && c.note && !c.restored ? c.note : null, + can.has(i) && !running ? "Click to start a new run after it." : null + ].filter(Boolean).join("\n"), + onClick: can.has(i) && !running ? () => onPick(i) : void 0, + style: { + flex: 1, + minWidth: 0, + display: "grid", + gap: 2, + cursor: can.has(i) && !running ? "pointer" : "default" + }, + children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", { style: { + height: labeled ? 6 : 8, + borderRadius: labeled ? 3 : 1, + background: !reached ? "color-mix(in srgb, currentColor 12%, transparent)" : c.restored ? stripes(color(c)) : color(c), + outline: current ? "1px dashed color-mix(in srgb, currentColor 55%, transparent)" : "none", + outlineOffset: 1, + animation: current ? "lfs-checkpoint-pulse 1.2s ease-in-out infinite" : "none" + } }), labeled ? /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", { + style: { + overflow: "hidden", + textOverflow: "ellipsis", + whiteSpace: "nowrap", + color: reached ? "inherit" : "var(--dsh-color-fg-muted, inherit)", + opacity: reached ? 1 : .7 + }, + children: [reached ? c.restored ? "↺ " : "✓ " : "", c.label] + }) : null] + }, i); + }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("style", { children: "@keyframes lfs-checkpoint-pulse { 0%, 100% { opacity: 0.35 } 50% { opacity: 0.9 } }" })] + }); + } + const line$3 = "1px solid color-mix(in srgb, currentColor 18%, transparent)"; + const button$3 = { + border: line$3, + borderRadius: 8, + padding: "3px 10px", + font: "inherit", + color: "inherit", + background: "transparent", + cursor: "pointer" + }; + /** Where the next run starts: one sideways-scrolling row of numbers, 0 (the beginning) and each checkpoint it can start after. */ + function StartPicker({ checkpoints, chosen, onChoose, onStart, onCancel }) { + const list = (0, react.useRef)(null), chosenRow = (0, react.useRef)(null); + (0, react.useEffect)(() => { + const box = list.current, at = chosenRow.current; + if (box && at) box.scrollLeft = at.offsetLeft - (box.clientWidth - at.offsetWidth) / 2; + }, []); + const row = (i) => /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", { + type: "button", + ref: chosen === i ? chosenRow : void 0, + "aria-pressed": chosen === i, + onClick: () => onChoose(i), + style: { + flex: "none", + minWidth: 28, + border: 0, + borderRadius: 6, + padding: "2px 6px", + font: "inherit", + color: "inherit", + cursor: "pointer", + background: chosen === i ? "color-mix(in srgb, currentColor 14%, transparent)" : "transparent" + }, + children: i === null ? 0 : i + 1 + }, i ?? -1); + return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", { + role: "dialog", + "aria-label": "Start after checkpoint", + style: { + display: "flex", + alignItems: "center", + gap: 8, + minWidth: 0, + fontSize: 12 + }, + children: [ + /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", { + ref: list, + style: { + position: "relative", + flex: 1, + minWidth: 0, + display: "flex", + gap: 2, + overflowX: "auto", + border: line$3, + borderRadius: 8, + padding: "2px 2px 8px", + scrollbarWidth: "thin" + }, + children: [row(null), startable(checkpoints).map(row)] + }), + /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", { + type: "button", + onClick: onCancel, + style: { + ...button$3, + flex: "none" + }, + children: "Cancel" + }), + /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("button", { + type: "button", + onClick: onStart, + style: { + ...button$3, + flex: "none", + whiteSpace: "nowrap", + border: 0, + fontWeight: 600, + color: "var(--dsh-color-fg-on-accent, #fff)", + background: "var(--dsh-color-bg-accent, #2563eb)" + }, + children: ["Start after ", chosen === null ? 0 : chosen + 1] + }) + ] + }); + } + //#endregion + //#region src/client/DemoStrip.tsx + const POLL_MS$2 = 700, IDLE_POLL_MS = 2500; + const HALT_MS = 4e3; + const unsubscribed = () => () => {}; + const MODE_KEY = "layerfs-demo-mode"; + const savedMode = () => { + try { + return localStorage.getItem(MODE_KEY) === "sim" ? "sim" : "live"; + } catch { + return "live"; + } + }; + const saveMode = (mode) => { + try { + localStorage.setItem(MODE_KEY, mode); + } catch {} + }; + const clock = (ms) => { + const s = Math.max(0, Math.floor(ms / 1e3)); + return `${Math.floor(s / 60)}:${String(s % 60).padStart(2, "0")}`; + }; + const playText = (step, now) => ({ + session: "Starting a new session…", + stop: "Stopping the previous run…", + init: step.step === "init" && step.job ? `Preparing the project · ${jobText(step.job, now)}` : "Preparing the project…", + start: "Starting the agents…" + })[step.step]; + function DemoStrip({ sessionId, services }) { + const [info, setInfo] = (0, react.useState)(null); + const [demo, setDemo] = (0, react.useState)(null); + const [chosen, setMode] = (0, react.useState)(savedMode); + const [playing, setPlaying] = (0, react.useState)(null); + const [error, setError] = (0, react.useState)(null); + const [picking, setPicking] = (0, react.useState)(null); + const [liveMissing, setLiveMissing] = (0, react.useState)(null); + (0, react.useEffect)(() => { + let on = true; + api.status().then((s) => { + if (on) setLiveMissing(s.configured ? [] : s.missing); + }, () => {}); + return () => { + on = false; + }; + }, []); + (0, react.useEffect)(() => { + let live = true; + demoApi.info().then((found) => { + if (!live || !found) return; + setInfo(found); + setDemo(found.demos.find((d) => d.sessionId === sessionId) ?? null); + }, () => {}); + return () => { + live = false; + }; + }, [sessionId]); + const run = demo?.run && demo.run.root === sessionId ? demo.run : null; + const running = run?.state === "running"; + (0, react.useEffect)(() => { + if (!demo) return; + const timer = setInterval(() => { + demoApi.demo(demo.id).then(setDemo, () => {}); + }, running ? POLL_MS$2 : IDLE_POLL_MS); + return () => clearInterval(timer); + }, [demo?.id, running]); + const now = useClock(running || playing !== null); + useDemoSessionLock(demo ? sessionId : null); + const status = services().uiSession?.sessionStatus; + const rootRunning = (0, react.useSyncExternalStore)(status?.subscribe ?? unsubscribed, () => status?.getSnapshot().get(sessionId)?.running); + const [movedAt, setMovedAt] = (0, react.useState)(Date.now); + (0, react.useEffect)(() => { + setMovedAt(Date.now()); + }, [run?.done, rootRunning]); + const halted = running && rootRunning === false && now - movedAt > HALT_MS; + if (!info || !demo) return null; + const checkpoints = demo.checkpoints?.length ? demo.checkpoints.map((c) => run ? c : { + ...c, + reachedAt: null + }) : null; + const liveOff = !!liveMissing?.length; + const mode = demo.live ? "live" : liveOff ? "sim" : chosen; + const play = (startAfter = null) => { + setError(null); + setPicking(null); + setPlaying({ step: "session" }); + const refresh = () => demoApi.demo(demo.id).then(setDemo, () => {}); + playDemo(services(), info, demo, mode, setPlaying, startAfter).then(() => { + setPlaying(null); + refresh(); + }, (failure) => { + setPlaying(null); + setError(failure instanceof Error ? failure.message : String(failure)); + refresh(); + }); + }; + let fraction = 0, line; + if (playing) { + fraction = playing.step === "init" && playing.job ? jobFraction(playing.job) : null; + line = playText(playing, now); + } else if (run) { + fraction = run.of ? run.done / run.of : 0; + const steps = `${run.done} of ${run.of} steps${checkpoints ? ` · ${checkpointText(checkpoints)}` : ""}`; + line = halted ? `Stopped · ${steps} · the session is not running` : run.state === "running" ? `${run.phase ?? "Running"} · ${steps} · ${clock(now - run.started)}` : run.state === "done" ? `Finished · ${steps} · ${clock((run.ended ?? now) - run.started)}` : `Stopped · ${run.error ?? ""}`; + } else line = `${demo.agents.length} agent${demo.agents.length === 1 ? "" : "s"} · ready to play`; + const choice = (value, label) => { + const off = value === "live" && liveOff && !demo.live; + return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", { + type: "button", + "aria-pressed": mode === value, + disabled: off, + onClick: () => { + setMode(value); + saveMode(value); + }, + title: off ? `Live LayerFS is not set up on this host: set ${liveMissing.join(" and ")} for layerfs-host in the profile patch` : void 0, + style: { + border: 0, + padding: "2px 10px", + font: "inherit", + fontSize: 12, + cursor: off ? "not-allowed" : "pointer", + opacity: off ? .45 : 1, + color: "inherit", + background: mode === value ? "color-mix(in srgb, currentColor 14%, transparent)" : "transparent" + }, + children: label + }); + }; + const pace = (value) => /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", { + type: "button", + "aria-pressed": demo.speed === value, + onClick: () => { + demoApi.setSpeed(demo.id, value).then(setDemo, (e) => setError(e.message)); + }, + title: value ? (value > 1 ? `The demo's pauses and typing ÷ ${value}` : "The demo's own pauses and typing") + "; commands take their own time" : "No pauses or typing; commands take their own time", + style: { + border: 0, + padding: "2px 8px", + font: "inherit", + fontSize: 12, + cursor: "pointer", + color: "inherit", + background: demo.speed === value ? "color-mix(in srgb, currentColor 14%, transparent)" : "transparent" + }, + children: speedLabel(value) + }, value); + return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", { + style: { + display: "grid", + gridTemplateColumns: "minmax(0, 1fr)", + gap: 6, + margin: "0 0 6px", + padding: "8px 12px", + borderRadius: 10, + border: "1px solid color-mix(in srgb, currentColor 12%, transparent)" + }, + children: [ + /* @__PURE__ */ (0, react_jsx_runtime.jsx)(ProgressBar, { fraction }), + checkpoints ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)(Checkpoints, { + checkpoints, + running: running && !halted, + onPick: (i) => setPicking(i) + }) : null, + checkpoints && picking !== null ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)(StartPicker, { + checkpoints, + chosen: picking < 0 ? null : picking, + onChoose: (i) => setPicking(i ?? -1), + onCancel: () => setPicking(null), + onStart: () => play(picking < 0 ? null : checkpoints[picking].label) + }) : null, + /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", { + style: { + display: "flex", + alignItems: "center", + gap: 8, + fontSize: 12 + }, + children: [ + /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", { + style: { + flex: 1, + minWidth: 0, + overflow: "hidden", + textOverflow: "ellipsis", + whiteSpace: "nowrap", + color: error || halted || run?.state === "stopped" ? "var(--dsh-color-fg-danger, #d14343)" : "var(--dsh-color-fg-muted, inherit)" + }, + title: error ?? line, + children: error ?? line + }), + /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", { + role: "group", + "aria-label": "Run speed", + style: { + display: "inline-flex", + borderRadius: 8, + overflow: "hidden", + border: "1px solid color-mix(in srgb, currentColor 18%, transparent)" + }, + children: SPEEDS.map(pace) + }), + /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", { + role: "group", + "aria-label": "LayerFS", + style: { + display: "inline-flex", + borderRadius: 8, + overflow: "hidden", + border: "1px solid color-mix(in srgb, currentColor 18%, transparent)" + }, + children: [demo.live ? null : choice("sim", "Sim"), choice("live", "Live")] + }), + /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.Button, { + variant: "secondary", + size: "sm", + disabled: playing !== null, + onClick: () => checkpoints && startable(checkpoints).length ? setPicking(picking === null ? startable(checkpoints).at(-1) : null) : play(), + title: running ? "Stop this run and play the demo again" : void 0, + icon: run ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.IconRefreshOutlineRegular, { size: 14 }) : /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.IconPlayOutlineRegular, { size: 14 }), + children: run ? "Replay" : "Play" + }) + ] + }) + ] + }); + } + //#endregion + //#region ../../sim/avatars/ellen_joe.gif + var ellen_joe_default$1 = "data:image/gif;base64,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"; + //#endregion + //#region src/client/tokens.ts + const T = { + text: "var(--dsw-alias-label-primary)", + text2: "var(--dsw-alias-label-secondary)", + caption: "var(--dsw-alias-label-caption)", + border: "var(--dsw-alias-border-l2)", + card: "var(--dsw-alias-bg-layer-1)", + well: "var(--dsw-alias-bg-skeleton)", + hover: "var(--dsw-alias-interactive-bg-hover)", + active: "var(--dsw-alias-interactive-bg-active)", + danger: "var(--dsw-alias-state-error-primary)", + warn: "var(--dsw-alias-state-warn-primary)", + ok: "var(--dsw-alias-state-success-primary)", + sm: "var(--dsw-radius-sm)", + md: "var(--dsw-radius-md)" + }; + const card = { + background: T.card, + border: `1px solid ${T.border}`, + borderRadius: T.md + }; + //#endregion + //#region src/client/runtimeParts.tsx + const LEVEL_COLOR = { + ok: T.ok, + degraded: T.warn, + down: T.danger + }; + const LEVEL_WORD = { + ok: "ok", + degraded: "needs a look", + down: "down" + }; + function Dot({ level, title }) { + return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", { + role: "img", + "aria-label": title ?? LEVEL_WORD[level], + title: title ?? LEVEL_WORD[level], + style: { + display: "inline-block", + flex: "none", + width: 8, + height: 8, + borderRadius: "50%", + background: LEVEL_COLOR[level] + } + }); + } + /** Used out of capacity, as a thin bar. */ + function Meter({ used, capacity }) { + const share = Math.min(1, used / capacity); + return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", { + title: `${used} of ${capacity} Workspaces`, + style: { + display: "inline-block", + flex: "none", + width: 64, + height: 6, + borderRadius: 3, + background: T.well, + overflow: "hidden" + }, + children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", { style: { + display: "block", + height: "100%", + width: `${share * 100}%`, + background: used >= capacity ? T.warn : "var(--dsw-alias-state-business-primary)" + } }) + }); + } + /** 40 s, 12 min, 3 h, 2 d. */ + function span(ms) { + const s = Math.round(ms / 1e3); + if (s < 60) return `${s} s`; + if (s < 3600) return `${Math.round(s / 60)} min`; + if (s < 86400) return `${Math.round(s / 3600)} h`; + return `${Math.round(s / 86400)} d`; + } + /** `/workspaces/3` → "WS 3", as the views name a Workspace. */ + const wsName = (path) => `WS ${path.slice(path.lastIndexOf("/") + 1)}`; + /** Runs `read` now and every `ms` while the page is visible; again when it comes back. */ + function usePoll(read, ms, deps) { + const latest = (0, react.useRef)(read); + latest.current = read; + (0, react.useEffect)(() => { + latest.current(); + const timer = setInterval(() => { + if (document.visibilityState === "visible") latest.current(); + }, ms); + const back = () => { + if (document.visibilityState === "visible") latest.current(); + }; + document.addEventListener("visibilitychange", back); + return () => { + clearInterval(timer); + document.removeEventListener("visibilitychange", back); + }; + }, deps); + } + const POLL_MS$1 = 1e4; + //#endregion + //#region src/client/storage.ts + const UNITS$1 = [ + "B", + "KB", + "MB", + "GB", + "TB" + ]; + /** Bytes in the largest unit under 1000, to three significant digits: as the view's storage panel counts them. */ + function bytes(n) { + let value = n, unit = 0; + while (value >= 1e3 && unit < UNITS$1.length - 1) { + value /= 1e3; + unit++; + } + return unit === 0 ? `${n} B` : `${value.toFixed(value >= 100 ? 0 : value >= 10 ? 1 : 2)} ${UNITS$1[unit]}`; + } + /** ×n, to one decimal below 10. */ + const times = (n) => `×${n.toFixed(n >= 10 ? 0 : 1)}`; + /** How many times over the Store's file the history's plain files would fill; null when it saves nothing. */ + function saved(z) { + const n = z.store.file > 0 ? z.store.logical / z.store.file : 0; + return n > 1 ? n : null; + } + /** + * store.stats for the board: the Store totals, one plain copy of main's head + * (its source Commit's logical size; null when main is the Init Layer or that + * Commit is not among the recent ones), the empty Store's baseline, the + * project's counts, and what each recent Commit added, oldest first. + */ + function storeOf(storage, state, lines = []) { + const z = storage.store, s = state.s; + const realOf = (label) => label ? Object.keys(state.labels).find((real) => state.labels[real] === label) ?? null : null; + const layer = s.layers?.[s.main?.head], source = realOf(layer?.sourceCommit); + const made = /* @__PURE__ */ new Map(); + for (const line of lines) { + if (!line.ok || line.phase === "start") continue; + if (line.commit && line.sizes) made.set(line.commit, line.sizes.logical ?? null); + else if (line.method === "branch.merge" && line.head && !made.has(line.head)) made.set(line.head, null); + } + const commits = new Set([...Object.keys(state.labels).filter((real) => /^C\d+$/.test(state.labels[real])), ...made.keys()]); + const head = layer?.logical ?? (source ? storage.commits.find((c) => c.id === source)?.logical ?? made.get(source) ?? null : s.main?.head === "L0" && layer ? storage.init?.bytes ?? null : null); + return { + logical: z.logical, + payload: z.canonical, + stored: z.stored, + metadata: z.metadata, + store: z.file, + estimate: false, + head, + baseline: storage.init ? storage.init.metadata + storage.init.stored : null, + imported: storage.init?.files ?? 0, + counts: { + commits: commits.size, + branches: Object.keys(s.branches ?? {}).length, + layers: Object.keys(s.layers ?? {}).length + }, + perCommit: storage.commits.slice().reverse().map((c) => ({ + via: c.via, + bytes: c.newStored + c.newMetadata, + label: state.labels[c.id] ?? null, + message: c.message + })) + }; + } + //#endregion + //#region src/client/AllSandboxes.tsx + const MONO = "var(--mono, ui-monospace, monospace)"; + function AllSandboxes({ onOpen }) { + const [view, setView] = (0, react.useState)(null); + const [error, setError] = (0, react.useState)(null); + const [busy, setBusy] = (0, react.useState)(null); + const [asking, setAsking] = (0, react.useState)(false); + const [restarting, setRestarting] = (0, react.useState)(false); + const read = () => api.overview().then((v) => { + setView(v); + setError(null); + }, (e) => setError(e.message)); + usePoll(read, POLL_MS$1, []); + const act = async (label, run) => { + setBusy(label); + setError(null); + try { + await run(); + setAsking(false); + setRestarting(false); + await read(); + } catch (e) { + setError(e.message); + } finally { + setBusy(null); + } + }; + const tile = (title, level, body, extra, actions) => /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", { + style: { + ...card, + padding: "8px 10px", + display: "grid", + gap: 2, + minWidth: 0 + }, + children: [ + /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", { + style: { + display: "flex", + alignItems: "center", + gap: 6, + fontSize: 11.5, + color: T.text2, + whiteSpace: "nowrap" + }, + children: [ + level && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(Dot, { level }), + title, + actions && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, { children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", { style: { flex: 1 } }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", { + style: { + display: "flex", + gap: 4 + }, + children: actions + })] }) + ] + }), + /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", { + style: { + fontFamily: MONO, + fontSize: 12.5, + wordBreak: "break-word" + }, + children: body + }), + extra + ] + }); + const store = view?.store; + const stopped = view?.leftovers.filter((l) => !l.running) ?? []; + return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", { + style: { + ...card, + flex: 1, + minHeight: 440, + display: "flex", + flexDirection: "column", + overflow: "hidden" + }, + children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", { + style: { + display: "flex", + alignItems: "center", + gap: 8, + padding: "8px 14px", + borderBottom: `1px solid ${T.border}`, + background: T.well, + fontFamily: MONO, + fontSize: 12 + }, + children: [ + view && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(Dot, { level: view.level }), + /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", { children: view ? `${view.totals.projects} project${view.totals.projects === 1 ? "" : "s"} · ${view.totals.sandboxes} Sandbox${view.totals.sandboxes === 1 ? "" : "es"} · ${view.totals.workspaces} Workspace${view.totals.workspaces === 1 ? "" : "s"}` : "Reading LayerFS…" }), + /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", { style: { flex: 1 } }), + /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.Button, { + variant: "ghost", + size: "sm", + disabled: !!busy, + onClick: () => void read(), + children: "Refresh" + }) + ] + }), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", { + style: { + flex: 1, + overflow: "auto", + display: "grid", + gap: 14, + padding: "12px 14px 16px", + alignContent: "start", + fontSize: 12.5 + }, + children: [ + (error || busy) && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", { + role: "status", + style: { + color: error ? T.danger : T.text2, + wordBreak: "break-word" + }, + children: error ?? busy + }), + view && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", { + style: { + display: "grid", + gridTemplateColumns: "repeat(auto-fit, minmax(170px, 1fr))", + gap: 8 + }, + children: [ + tile("Docker", view.engine.level, view.engine.level === "ok" ? `running · ${view.engine.version}` : "not answering"), + store && tile("layerfs-store", store.level, store.state === "running" ? `${store.answering ? "ready" : "not answering"}${store.build && store.build !== store.expected ? " · older build" : ""}` : store.state, restarting ? /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", { + role: "alertdialog", + style: { + display: "grid", + gap: 6, + marginTop: 4, + padding: "6px 8px", + borderRadius: T.sm, + background: "var(--dsw-alias-state-error-bg, rgba(210,69,94,.1))", + fontSize: 12 + }, + children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", { children: [ + "Restart layerfs-store? Every project's Store calls stop for a few seconds", + view.calls ? `; ${view.calls} agent call${view.calls === 1 ? " is" : "s are"} running and may fail` : "", + "." + ] }), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", { + style: { + display: "flex", + gap: 6 + }, + children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.Button, { + variant: "primary", + size: "sm", + disabled: !!busy, + onClick: () => void act("Restarting layerfs-store…", api.restartStore), + children: "Restart" + }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.Button, { + variant: "ghost", + size: "sm", + onClick: () => setRestarting(false), + children: "Cancel" + })] + })] + }) : null, view.engine.level === "ok" && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, { children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.Button, { + variant: store.state === "running" ? "ghost" : "primary", + size: "sm", + disabled: !!busy || store.state === "running", + title: store.state === "running" ? "It is running" : "Start the Store container", + onClick: () => void act("Starting layerfs-store…", api.startStore), + children: "Start" + }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.Button, { + variant: store.level === "ok" ? "ghost" : "outline", + size: "sm", + disabled: !!busy || store.state !== "running", + title: store.state === "running" ? "Stop and start it again: every Store call waits a few seconds" : "It is not running; start it", + onClick: () => setRestarting(true), + children: "Restart…" + })] })), + tile("Disk free", null, [view.disk.vm !== null ? `Docker ${bytes(view.disk.vm)}` : null, view.disk.host !== null ? `local ${bytes(view.disk.host)}` : null].filter(Boolean).join(" · ") || "not read") + ] + }), + view && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("section", { children: [ + /* @__PURE__ */ (0, react_jsx_runtime.jsx)("h4", { + style: { + margin: "0 0 6px", + fontSize: 11, + fontWeight: 600, + letterSpacing: ".04em", + textTransform: "uppercase", + color: T.caption + }, + children: "Projects · problems first" + }), + !view.projects.length && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", { + style: { color: T.text2 }, + children: "No projects yet." + }), + /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", { + style: { + display: "grid", + gridTemplateColumns: "repeat(auto-fill, minmax(240px, 1fr))", + gap: 8 + }, + children: view.projects.map((p) => /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("button", { + type: "button", + className: "lfs-card", + onClick: () => onOpen(p.name), + title: `Open ${p.name}'s Sandboxes`, + style: { + ...card, + textAlign: "left", + cursor: "pointer", + padding: "8px 10px", + display: "grid", + gap: 4, + color: "inherit", + font: "inherit", + borderLeft: p.level === "ok" ? card.border : `3px solid ${p.level === "down" ? T.danger : T.warn}` + }, + children: [ + /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", { + style: { + display: "flex", + alignItems: "center", + gap: 6, + fontWeight: 600, + minWidth: 0 + }, + children: [ + /* @__PURE__ */ (0, react_jsx_runtime.jsx)(Dot, { level: p.level }), + /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", { + style: { + overflow: "hidden", + textOverflow: "ellipsis", + whiteSpace: "nowrap" + }, + children: p.name + }), + /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", { style: { flex: 1 } }), + /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", { + style: { + fontFamily: MONO, + fontSize: 11, + fontWeight: 400, + color: T.caption, + whiteSpace: "nowrap" + }, + children: [p.sandboxes.length ? `${p.sandboxes.length} Sandbox${p.sandboxes.length === 1 ? "" : "es"} · ${p.workspaces} WS` : "no Sandbox", p.simulated ? " · sim" : ""] + }) + ] + }), + p.sandboxes.map((s) => /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", { + style: { + display: "flex", + alignItems: "center", + gap: 6, + fontFamily: MONO, + fontSize: 11, + color: T.text2 + }, + children: [ + /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", { + style: { minWidth: 26 }, + children: ["-", s.id] + }), + /* @__PURE__ */ (0, react_jsx_runtime.jsx)(Meter, { + used: s.used, + capacity: s.capacity + }), + /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", { children: [ + s.used, + "/", + s.capacity + ] }), + s.image && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", { + title: s.image, + style: { + overflow: "hidden", + textOverflow: "ellipsis", + whiteSpace: "nowrap" + }, + children: imageLabel(s) + }) + ] + }, s.id)), + !p.sandboxes.length && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", { + style: { + fontSize: 11.5, + color: T.caption + }, + children: "Idle · starts one on the next mount" + }), + p.note && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", { + style: { + fontSize: 11.5, + color: p.level === "down" ? T.danger : T.warn, + wordBreak: "break-word" + }, + children: p.note + }) + ] + }, p.name)) + }) + ] }), + view && view.leftovers.length > 0 && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("section", { children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("h4", { + style: { + margin: "0 0 6px", + fontSize: 11, + fontWeight: 600, + letterSpacing: ".04em", + textTransform: "uppercase", + color: T.caption + }, + children: "Leftovers" + }), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", { + style: { + ...card, + display: "grid" + }, + children: [view.leftovers.map((l, i) => /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", { + style: { + display: "flex", + alignItems: "baseline", + gap: 8, + padding: "6px 10px", + borderTop: i ? `1px solid ${T.border}` : 0 + }, + children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", { + style: { + alignSelf: "center", + display: "flex" + }, + children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(Dot, { level: "degraded" }) + }), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", { + style: { + minWidth: 0, + wordBreak: "break-word" + }, + children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", { + style: { fontFamily: MONO }, + children: l.name + }), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", { + style: { color: T.text2 }, + children: [ + " · ", + l.status, + l.project ? ` · project ${l.project}` : "" + ] + })] + })] + }, l.name)), stopped.length > 0 && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", { + style: { + display: "flex", + alignItems: "center", + gap: 8, + flexWrap: "wrap", + padding: "6px 10px", + borderTop: `1px solid ${T.border}` + }, + children: asking ? /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, { children: [ + /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", { + style: { flex: 1 }, + children: [ + "Remove ", + stopped.length, + " stopped container", + stopped.length === 1 ? "" : "s", + "? They run nothing; their Store volumes stay." + ] + }), + /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.Button, { + variant: "primary", + size: "sm", + disabled: !!busy, + onClick: () => void act("Removing leftovers…", () => api.cleanLeftovers(stopped.map((l) => l.name))), + children: "Remove" + }), + /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.Button, { + variant: "ghost", + size: "sm", + onClick: () => setAsking(false), + children: "Cancel" + }) + ] }) : /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, { children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", { + style: { + flex: 1, + color: T.text2 + }, + children: "Running leftovers are left for you to stop." + }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.Button, { + variant: "outline", + size: "sm", + disabled: !!busy, + onClick: () => setAsking(true), + children: "Clean up…" + })] }) + })] + })] }) + ] + })] + }); + } + //#endregion + //#region src/client/InitDialog.tsx + const line$2 = "var(--dsh-color-border, #8884)"; + const muted$1 = "var(--dsh-color-fg-muted, #8a8a8a)"; + const button$2 = { + font: "inherit", + fontSize: 12, + padding: "4px 12px", + borderRadius: 6, + border: `1px solid ${line$2}`, + background: "transparent", + color: "inherit", + cursor: "pointer" + }; + const primary = { + ...button$2, + background: "var(--dsh-color-fg, #111)", + color: "var(--dsh-color-bg, #fff)", + border: "1px solid transparent" + }; + const base = (path) => path.split("/").filter(Boolean).pop() ?? path; + function InitDialog({ folder, directories, onDone, onClose }) { + const [source, setSource] = (0, react.useState)(folder); + const [browsing, setBrowsing] = (0, react.useState)(null); + const [name, setName] = (0, react.useState)(""); + const [busy, setBusy] = (0, react.useState)(false); + const [error, setError] = (0, react.useState)(null); + const [job, setJob] = (0, react.useState)(null); + const open = async (path) => { + setError(null); + try { + setBrowsing(await directories.listDirectory(path)); + } catch (e) { + const code = e.rpcError?.code ?? e.message; + if (browsing || !/unavailable/.test(code) || !directories.pickDirectory) { + setError(e.message); + return; + } + try { + const picked = await directories.pickDirectory(); + if (picked) setSource(picked); + } catch (err) { + setError(err.message); + } + } + }; + (0, react.useEffect)(() => { + const key = (e) => { + if (e.key === "Escape" && !busy) onClose(); + }; + addEventListener("keydown", key); + return () => removeEventListener("keydown", key); + }, [busy, onClose]); + const init = async () => { + setBusy(true); + setError(null); + try { + onDone((await api.init(folder, name.trim() || void 0, source, setJob)).project); + } catch (e) { + setError(e.message); + setBusy(false); + setJob(null); + } + }; + return (0, react_dom.createPortal)(/* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", { + role: "presentation", + onMouseDown: (e) => { + if (e.target === e.currentTarget && !busy) onClose(); + }, + style: { + position: "fixed", + inset: 0, + zIndex: 1e3, + background: "rgba(0,0,0,.35)", + display: "flex", + alignItems: "center", + justifyContent: "center" + }, + children: /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", { + role: "dialog", + "aria-label": "Init LayerFS", + style: { + width: 520, + maxWidth: "calc(100vw - 32px)", + maxHeight: "calc(100vh - 64px)", + display: "flex", + flexDirection: "column", + gap: 12, + padding: 20, + borderRadius: 14, + background: "var(--dsh-color-bg, #fff)", + color: "var(--dsh-color-fg, #111)", + border: `1px solid ${line$2}`, + fontSize: 13, + lineHeight: 1.5, + boxShadow: "0 12px 40px rgba(0,0,0,.25)" + }, + children: [ + /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", { + style: { + fontSize: 15, + fontWeight: 600 + }, + children: "Init LayerFS" + }), + /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", { + style: { + display: "grid", + gap: 4 + }, + children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", { + style: { color: muted$1 }, + children: "Import files from" + }), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", { + style: { + display: "flex", + alignItems: "center", + gap: 8 + }, + children: [ + /* @__PURE__ */ (0, react_jsx_runtime.jsx)("code", { + style: { + flex: 1, + minWidth: 0, + overflowWrap: "anywhere", + padding: "6px 8px", + borderRadius: 6, + border: `1px solid ${line$2}` + }, + children: source + }), + source !== folder && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", { + style: button$2, + disabled: busy, + onClick: () => { + setSource(folder); + setBrowsing(null); + }, + children: "Use the workspace" + }), + directories && !browsing && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", { + style: button$2, + disabled: busy, + onClick: () => { + open(source); + }, + children: "Choose folder…" + }) + ] + })] + }), + browsing && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", { + style: { + display: "grid", + gap: 6, + border: `1px solid ${line$2}`, + borderRadius: 8, + padding: 8, + minHeight: 0 + }, + children: [ + /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", { + style: { + display: "flex", + flexWrap: "wrap", + gap: 2, + fontSize: 12 + }, + children: browsing.crumbs.map((c, i) => /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", { children: [i > 0 && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", { + style: { color: muted$1 }, + children: " / " + }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", { + style: { + ...button$2, + border: "none", + padding: "1px 3px" + }, + onClick: () => { + open(c.path); + }, + children: i === 0 ? c.name : base(c.path) + })] }, c.path)) + }), + /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", { + style: { + maxHeight: 220, + overflow: "auto", + display: "grid" + }, + children: [ + browsing.entries.filter((e) => !e.hidden).map((e) => /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("button", { + onClick: () => { + open(e.path); + }, + style: { + ...button$2, + border: "none", + textAlign: "left", + borderRadius: 4, + padding: "3px 6px" + }, + children: ["▸ ", e.name] + }, e.path)), + browsing.entries.every((e) => e.hidden) && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", { + style: { + color: muted$1, + padding: "3px 6px" + }, + children: "No folders here." + }), + browsing.truncated && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", { + style: { + color: muted$1, + padding: "3px 6px" + }, + children: "More folders than shown." + }) + ] + }), + /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", { + style: { + display: "flex", + gap: 8, + justifyContent: "flex-end" + }, + children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", { + style: button$2, + onClick: () => setBrowsing(null), + children: "Cancel" + }), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("button", { + style: primary, + onClick: () => { + setSource(browsing.path); + setBrowsing(null); + }, + children: ["Import from ", base(browsing.path)] + })] + }) + ] + }), + /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("label", { + style: { + display: "grid", + gap: 4 + }, + children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", { + style: { color: muted$1 }, + children: "Project name" + }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("input", { + value: name, + onChange: (e) => setName(e.target.value), + placeholder: `${base(source)} (default)`, + disabled: busy, + style: { + ...button$2, + cursor: "text", + padding: "6px 8px" + } + })] + }), + /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", { + style: { color: muted$1 }, + children: [ + "New sessions in ", + /* @__PURE__ */ (0, react_jsx_runtime.jsx)("code", { + style: { overflowWrap: "anywhere" }, + children: folder + }), + " use the project until they choose another", + source !== folder ? "; its first version holds the files of the folder above" : "", + "." + ] + }), + job && busy && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(InitProgress, { job }), + error && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", { + style: { color: "var(--dsh-color-fg-danger, #d33)" }, + children: error + }), + /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", { + style: { + display: "flex", + gap: 8, + justifyContent: "flex-end" + }, + children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", { + style: button$2, + disabled: busy, + onClick: onClose, + children: "Cancel" + }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", { + style: primary, + disabled: busy || !!browsing, + onClick: () => { + init(); + }, + children: busy ? "Initializing…" : "Init" + })] + }) + ] + }) + }), document.body); + } + //#endregion + //#region ../../sim/simulation_engine/model.js + var require_model = /* @__PURE__ */ __commonJSMin(((exports, module) => { + (function(global) { + "use strict"; + const clone = (v) => JSON.parse(JSON.stringify(v)); + const J = (v) => JSON.stringify(v); + class Refusal extends Error { + constructor(code, message, detail) { + super(message); + this.code = code; + this.detail = detail || {}; + } + } + const refuse = (code, message, detail) => { + throw new Refusal(code, message, detail); + }; + const parentOf = (p) => p.lastIndexOf("/") <= 0 ? "/" : p.slice(0, p.lastIndexOf("/")); + const baseName = (p) => p.slice(p.lastIndexOf("/") + 1); + const isUnder = (p, dir) => p === dir || p.startsWith(dir === "/" ? "/" : dir + "/"); + const childrenOf = (tree, dir) => Object.keys(tree).filter((p) => p !== dir && parentOf(p) === dir).sort(); + function treeKey(tree) { + return Object.keys(tree).sort().map((p) => { + const e = tree[p]; + return `${p}\u0000${e.type}\u0000${e.inode}\u0000${e.content ?? ""}`; + }).join(""); + } + function countOccurrences(text, needle) { + if (!needle) return 0; + let n = 0, i = 0; + while ((i = text.indexOf(needle, i)) !== -1) { + n++; + i += needle.length; + } + return n; + } + function applyChanges(tree, changes, newInode) { + const t = clone(tree); + const need = (p) => { + if (!t[p]) refuse("NoSuchPath", `${p} does not exist`, { path: p }); + return t[p]; + }; + const needParent = (p) => { + const d = parentOf(p); + if (d !== "/" && (!t[d] || t[d].type !== "dir")) refuse("NoSuchPath", `parent ${d} does not exist`, { path: d }); + }; + for (const c of changes) switch (c.kind) { + case "write": { + needParent(c.path); + const e = t[c.path]; + if (e && e.type === "dir") refuse("IsDirectory", `${c.path} is a directory`, { path: c.path }); + t[c.path] = { + type: "file", + inode: e ? e.inode : newInode(), + content: c.content + }; + break; + } + case "edit": { + const e = need(c.path); + if (e.type !== "file") refuse("IsDirectory", `${c.path} is a directory`, { path: c.path }); + const n = countOccurrences(e.content, c.oldText); + if (n === 0) refuse("NoMatch", `oldText not found in ${c.path}`, { path: c.path }); + if (n > 1 && !c.all) refuse("AmbiguousMatch", `oldText matches ${n} times in ${c.path}`, { + path: c.path, + matches: n + }); + e.content = c.all ? e.content.split(c.oldText).join(c.newText) : e.content.replace(c.oldText, c.newText); + break; + } + case "mkdir": + if (t[c.path]) { + if (c.recursive && t[c.path].type === "dir") break; + refuse("Exists", `${c.path} exists`, { path: c.path }); + } + if (c.recursive) { + const parts = c.path.split("/").filter(Boolean); + let p = ""; + for (const part of parts) { + p += "/" + part; + if (!t[p]) t[p] = { + type: "dir", + inode: newInode() + }; + else if (t[p].type !== "dir") refuse("NotDirectory", `${p} is a file`, { path: p }); + } + } else { + needParent(c.path); + t[c.path] = { + type: "dir", + inode: newInode() + }; + } + break; + case "remove": + if (need(c.path).type === "dir" && childrenOf(t, c.path).length && !c.recursive) refuse("NotEmpty", `${c.path} is not empty`, { path: c.path }); + for (const p of Object.keys(t)) if (isUnder(p, c.path)) delete t[p]; + break; + case "cp": { + const e = need(c.from); + if (t[c.to]) refuse("Exists", `${c.to} exists`, { path: c.to }); + needParent(c.to); + if (e.type === "dir" && !c.recursive) refuse("IsDirectory", `${c.from} needs recursive: true`, { path: c.from }); + for (const p of Object.keys(t).filter((q) => isUnder(q, c.from)).sort()) { + const src = t[p]; + t[c.to + p.slice(c.from.length)] = { + ...clone(src), + inode: newInode() + }; + } + break; + } + case "mv": + need(c.from); + if (t[c.to]) refuse("Exists", `${c.to} exists`, { path: c.to }); + needParent(c.to); + if (isUnder(c.to, c.from)) refuse("InvalidMove", `cannot move ${c.from} into itself`, { path: c.to }); + for (const p of Object.keys(t).filter((q) => isUnder(q, c.from)).sort()) { + t[c.to + p.slice(c.from.length)] = t[p]; + delete t[p]; + } + break; + default: refuse("InvalidInput", `unknown change kind ${c.kind}`); + } + return t; + } + function lineDiff(a, b) { + const x = (a ?? "").split("\n"), y = (b ?? "").split("\n"); + const m = x.length, n = y.length; + const L = Array.from({ length: m + 1 }, () => new Array(n + 1).fill(0)); + for (let i = m - 1; i >= 0; i--) for (let j = n - 1; j >= 0; j--) L[i][j] = x[i] === y[j] ? L[i + 1][j + 1] + 1 : Math.max(L[i + 1][j], L[i][j + 1]); + const out = []; + let i = 0, j = 0; + while (i < m && j < n) if (x[i] === y[j]) { + out.push({ + op: " ", + text: x[i] + }); + i++; + j++; + } else if (L[i + 1][j] >= L[i][j + 1]) out.push({ + op: "-", + text: x[i++] + }); + else out.push({ + op: "+", + text: y[j++] + }); + while (i < m) out.push({ + op: "-", + text: x[i++] + }); + while (j < n) out.push({ + op: "+", + text: y[j++] + }); + return out; + } + function diffTrees(a, b) { + const paths = [...new Set([...Object.keys(a), ...Object.keys(b)])].sort(); + const entries = []; + for (const p of paths) { + const l = a[p], r = b[p]; + if (!l) entries.push({ + path: p, + kind: "Added", + type: r.type, + after: r + }); + else if (!r) entries.push({ + path: p, + kind: "Removed", + type: l.type, + before: l + }); + else { + const content = (l.content ?? null) !== (r.content ?? null); + const identity = l.inode !== r.inode; + const type = l.type !== r.type; + if (content || identity || type) entries.push({ + path: p, + kind: "Modified", + type: r.type, + before: l, + after: r, + content, + identity, + hunks: content && l.type === "file" && r.type === "file" ? lineDiff(l.content, r.content) : null + }); + } + } + return entries; + } + const MARKERS = /^<<<<<<< .*$[\s\S]*?^=======$[\s\S]*?^>>>>>>> .*$/m; + const hasMarkers = (text) => typeof text === "string" && MARKERS.test(text); + const sameEntry = (x, y) => !x && !y || !!x && !!y && x.type === y.type && (x.content ?? null) === (y.content ?? null); + function matchLines(a, b) { + const m = new Array(a.length).fill(-1); + let i = 0, j = 0; + for (const op of lineDiff(a.join("\n"), b.join("\n"))) if (op.op === " ") { + m[i] = j; + i++; + j++; + } else if (op.op === "-") i++; + else j++; + return m; + } + function merge3Lines(base, ours, theirs, labels) { + const b = (base ?? "").split("\n"), o = ours.split("\n"), t = theirs.split("\n"); + const mo = matchLines(b, o), mt = matchLines(b, t); + const out = []; + const hunks = []; + let bi = 0, oi = 0, ti = 0; + const eq = (x, y) => x.length === y.length && x.every((v, k) => v === y[k]); + const chunk = (be, oe, te) => { + const cb = b.slice(bi, be), co = o.slice(oi, oe), ct = t.slice(ti, te); + if (eq(co, cb)) out.push(...ct); + else if (eq(ct, cb) || eq(co, ct)) out.push(...co); + else { + hunks.push({ + line: out.length + 1, + ours: co, + theirs: ct + }); + out.push(`<<<<<<< ${labels[0]}`, ...co, "=======", ...ct, `>>>>>>> ${labels[1]}`); + } + }; + for (let k = 0; k < b.length; k++) { + if (mo[k] < 0 || mt[k] < 0 || mo[k] < oi || mt[k] < ti) continue; + chunk(k, mo[k], mt[k]); + out.push(b[k]); + bi = k + 1; + oi = mo[k] + 1; + ti = mt[k] + 1; + } + chunk(b.length, o.length, t.length); + return { + text: out.join("\n"), + conflicts: hunks.length, + hunks + }; + } + function lwwRules(tree, file = "/.lww", seen = /* @__PURE__ */ new Set()) { + const e = tree[file]; + if (!e || e.type !== "file" || seen.has(file)) return []; + seen.add(file); + const rules = []; + for (let line of e.content.split("\n")) { + line = line.trim(); + if (!line || line.startsWith("#")) continue; + const inc = line.match(/^%include\s+(\S+)$/); + if (inc) { + rules.push(...lwwRules(tree, "/" + inc[1].replace(/^\/+/, ""), seen)); + continue; + } + const neg = line.startsWith("!"); + let pat = (neg ? line.slice(1) : line).replace(/\/$/, ""); + const anchored = pat.includes("/"); + pat = pat.replace(/^\//, ""); + const rx = pat.split("**").map((s) => s.replace(/[.+^${}()|[\]\\]/g, "\\$&").replace(/\*/g, "[^/]*").replace(/\?/g, "[^/]")).join(".*"); + rules.push({ + pattern: line, + neg, + re: new RegExp((anchored ? "^" : "(^|/)") + rx + "($|/)") + }); + } + return rules; + } + const lwwMatch = (rules, path) => { + let hit = null; + for (const r of rules) if (r.re.test(path.replace(/^\//, ""))) hit = r.neg ? null : r; + return hit; + }; + function merge3Trees(base, ours, theirs, opts, newInode) { + const tree = {}, conflicts = [], lww = []; + const [lo, lt] = opts.labels; + for (const p of [...new Set([ + ...Object.keys(base), + ...Object.keys(ours), + ...Object.keys(theirs) + ])].sort()) { + const b = base[p], o = ours[p], t = theirs[p]; + let r; + if (sameEntry(o, t)) r = o; + else if (sameEntry(b, o)) r = t; + else if (sameEntry(b, t)) r = o; + else { + const rule = lwwMatch(opts.rules || [], p); + if (rule) { + const keepOurs = opts.timeOurs(p) >= opts.timeTheirs(p); + r = keepOurs ? o : t; + lww.push({ + path: p, + kept: keepOurs ? lo : lt, + deleted: !r, + rule: rule.pattern + }); + } else if (o && t && o.type === "file" && t.type === "file") { + const m = merge3Lines(b && b.type === "file" ? b.content : "", o.content, t.content, opts.labels); + r = { + ...o, + content: m.text + }; + if (m.conflicts) conflicts.push({ + path: p, + kind: b ? "content" : "add/add", + blocks: m.conflicts, + hunks: m.hunks + }); + } else if (o && o.type === "file" || t && t.type === "file") { + r = { + ...o || t, + content: o ? `<<<<<<< ${lo}\n${o.content}\n=======\n>>>>>>> ${lt} (deleted)` : `<<<<<<< ${lo} (deleted)\n=======\n${t.content}\n>>>>>>> ${lt}` + }; + conflicts.push({ + path: p, + kind: o ? "modify/delete" : "delete/modify", + blocks: 1 + }); + } else { + r = o || t; + conflicts.push({ + path: p, + kind: "type", + blocks: 0 + }); + } + } + if (r) tree[p] = clone(r); + } + for (const p of Object.keys(tree)) for (let d = parentOf(p); d !== "/" && !tree[d]; d = parentOf(d)) tree[d] = clone(ours[d] && ours[d].type === "dir" ? ours[d] : theirs[d] && theirs[d].type === "dir" ? theirs[d] : { + type: "dir", + inode: newInode() + }); + return { + tree, + conflicts, + lww, + clean: conflicts.length === 0 + }; + } + class Sim { + constructor() { + this.s = { + project: null, + main: null, + roots: {}, + rootKeys: {}, + commits: {}, + layers: {}, + branches: {}, + branchOrder: [], + sandboxes: {}, + sandboxOrder: [], + seq: { + root: 0, + commit: 0, + layer: 0, + inode: 0, + sandbox: 0, + proc: 0, + slot: 0, + clock: 0 + } + }; + } + snapshot() { + return clone(this.s); + } + newInode() { + return "i" + ++this.s.seq.inode; + } + slot() { + return this.s.seq.slot++; + } + tick() { + return ++this.s.seq.clock; + } + intern(tree) { + const key = treeKey(tree); + if (this.s.rootKeys[key]) return this.s.rootKeys[key]; + const id = "R" + this.s.seq.root++; + this.s.rootKeys[key] = id; + this.s.roots[id] = clone(tree); + return id; + } + branch(name) { + const b = this.s.branches[name]; + if (!b) refuse("NoSuchBranch", `no Branch named ${name}`, { branch: name }); + return b; + } + branchRoot(b) { + return b.head ? this.s.commits[b.head].root : this.s.layers[b.base].root; + } + sandbox(id) { + const sb = this.s.sandboxes[id]; + if (!sb) refuse("NoSuchSandbox", `no Sandbox ${id} owned by this controller`, { sandbox: id }); + if (sb.closed) refuse("SandboxClosed", `${id} is closed`, { sandbox: id }); + return sb; + } + workspace(sbId, path) { + const ws = this.sandbox(sbId).workspaces[path]; + if (!ws || !ws.mounted) refuse("NotMounted", `${sbId}:${path} is not mounted`, { workspace: `${sbId}:${path}` }); + return ws; + } + liveMountsOf(branchName) { + const out = []; + for (const id of this.s.sandboxOrder) { + const sb = this.s.sandboxes[id]; + if (sb.closed) continue; + for (const p of sb.wsOrder) if (sb.workspaces[p].mounted && sb.workspaces[p].branch === branchName) out.push(`${id}:${p}`); + } + return out; + } + resolve(ref) { + const s = this.s; + if (ref === "main") { + if (!s.main) refuse("NoProject", "project not initialized"); + const l = s.layers[s.main.head]; + return { + label: `main @ ${l.id}`, + kind: "main", + root: l.root, + tree: s.roots[l.root], + layer: l.id + }; + } + if (/^C\d+$/.test(ref)) { + const c = s.commits[ref]; + if (!c) refuse("NoSuchCommit", `no Commit ${ref}`); + return { + label: ref, + kind: "commit", + root: c.root, + tree: s.roots[c.root], + commit: ref + }; + } + if (/^L\d+$/.test(ref)) { + const l = s.layers[ref]; + if (!l) refuse("NoSuchLayer", `no Layer ${ref}`); + return { + label: ref, + kind: "layer", + root: l.root, + tree: s.roots[l.root], + layer: ref + }; + } + if (ref.includes(":/")) { + const [sb, path] = [ref.slice(0, ref.indexOf(":")), ref.slice(ref.indexOf(":") + 1)]; + const w = s.sandboxes[sb] && s.sandboxes[sb].workspaces[path]; + if (!w) refuse("NotMounted", `${ref} does not exist`); + return { + label: `${ref} (live)`, + kind: "live", + root: null, + tree: w.live, + workspace: ref + }; + } + const b = this.branch(ref); + const root = this.branchRoot(b); + return { + label: `${b.name} @ ${b.head || b.base}`, + kind: "branch", + root, + tree: s.roots[root], + head: b.head + }; + } + run(call, args = {}) { + const fn = OPS[call]; + if (!fn) return { + ok: false, + code: "Unsupported", + refusal: { + code: "Unsupported", + message: `unknown call ${call}` + } + }; + try { + const result = fn.call(this, args); + return { + ok: true, + code: result && result.kind ? result.kind : "ok", + result + }; + } catch (e) { + if (!(e instanceof Refusal)) throw e; + return { + ok: false, + code: e.code, + refusal: { + code: e.code, + message: e.message, + ...e.detail + } + }; + } + } + mutate(branchName, changes, via, message) { + const b = this.branch(branchName); + const capturedHead = b.head; + const currentRoot = this.branchRoot(b); + const tree = applyChanges(this.s.roots[currentRoot], changes, () => this.newInode()); + const root = this.intern(tree); + if (root === currentRoot) return { + kind: "UpToDate", + branch: b.name, + head: b.head, + root, + capturedHead, + displacedHead: null + }; + const id = "C" + ++this.s.seq.commit; + this.s.commits[id] = { + id, + parent: capturedHead, + root, + base: b.base, + branch: b.name, + slot: this.slot(), + by: "fs", + via, + time: this.tick(), + ...message ? { message } : {} + }; + b.head = id; + return { + kind: "Committed", + branch: b.name, + head: id, + root, + capturedHead, + displacedHead: null + }; + } + node(id) { + return this.s.commits[id] || this.s.layers[id]; + } + nodeTree(id) { + return this.s.roots[this.node(id).root]; + } + firstParent(id) { + const c = this.s.commits[id]; + return c ? c.parent || c.base : this.s.layers[id].parent; + } + sourceNode(ref) { + if (ref === "main") return this.s.main.head; + if (/^[CL]\d+$/.test(ref)) { + if (!this.node(ref)) refuse("NoSuchCommit", `no Commit or Layer ${ref}`); + return ref; + } + const b = this.branch(ref); + return b.head || b.from; + } + ancestors(id) { + const out = /* @__PURE__ */ new Set(), todo = [id]; + while (todo.length) { + const n = todo.pop(); + if (!n || out.has(n)) continue; + out.add(n); + const c = this.s.commits[n]; + if (c) todo.push(c.parent || c.base, c.mergedFrom); + else todo.push(this.s.layers[n].parent, this.s.layers[n].sourceCommit); + } + return out; + } + mergeBase(a, b) { + const A = this.ancestors(a); + let best = null; + for (const n of this.ancestors(b)) if (A.has(n) && (!best || this.node(n).time > this.node(best).time)) best = n; + return best; + } + changeTime(id, path, stop) { + for (let n = id; n && n !== stop; n = this.firstParent(n)) { + const prev = this.firstParent(n); + if (!sameEntry(this.nodeTree(n)[path], prev ? this.nodeTree(prev)[path] : void 0)) return this.node(n).time; + } + return 0; + } + merge(base, ours, theirs, opts) { + return merge3Trees(base, ours, theirs, opts, () => this.newInode()); + } + markersIn(ws) { + return diffTrees(this.s.roots[ws.baseRoot], ws.live).filter((d) => d.kind !== "Removed" && d.type === "file" && hasMarkers(ws.live[d.path].content)).map((d) => d.path); + } + } + const OPS = { + "project.init"(a) { + if (this.s.project) refuse("Exists", "project already initialized"); + const tree = {}; + for (const [p, v] of Object.entries(a.files)) { + let d = parentOf(p); + const dirs = []; + while (d !== "/" && !tree[d]) { + dirs.unshift(d); + d = parentOf(d); + } + for (const dir of dirs) tree[dir] = { + type: "dir", + inode: this.newInode() + }; + tree[p] = v === null ? { + type: "dir", + inode: this.newInode() + } : { + type: "file", + inode: this.newInode(), + content: v + }; + } + const root = this.intern(tree); + const id = "L" + this.s.seq.layer++; + this.s.layers[id] = { + id, + parent: null, + root, + sourceBranch: null, + sourceCommit: null, + slot: this.slot(), + time: this.tick() + }; + this.s.project = { name: a.name }; + this.s.main = { head: id }; + return { + kind: "Initialized", + project: a.name, + main: { + headLayer: id, + root + } + }; + }, + "project.list_branches"() { + return { + kind: "ok", + items: this.s.branchOrder.map((n) => { + const b = this.s.branches[n]; + return { + name: n, + base: b.base, + head: b.head, + root: this.branchRoot(b), + mountedBy: this.liveMountsOf(n) + }; + }), + nextCursor: null + }; + }, + "main.fork"(a) { + return forkFrom.call(this, a.name, this.s.main.head, null); + }, + "main.list_layers"() { + const out = []; + for (let id = this.s.main.head; id; id = this.s.layers[id].parent) out.push(clone(this.s.layers[id])); + return { + kind: "ok", + items: out, + nextCursor: null + }; + }, + "branch.fork"(a) { + const b = this.branch(a.branch); + return forkFrom.call(this, a.name, b.base, a.fromCommit || b.head); + }, + "branch.list_commits"(a) { + const b = this.branch(a.branch); + const out = []; + for (let id = b.head; id; id = this.s.commits[id].parent) out.push(clone(this.s.commits[id])); + return { + kind: "ok", + items: out, + nextCursor: null + }; + }, + "branch.diff_commits"(a) { + const l = this.resolve(a.from), r = this.resolve(a.to); + if (l.kind !== "commit" || r.kind !== "commit") refuse("InvalidInput", "diff_commits takes two saved Commits"); + return { + kind: "ok", + from: { + commit: a.from, + root: l.root + }, + to: { + commit: a.to, + root: r.root + }, + items: diffTrees(l.tree, r.tree) + }; + }, + "branch.diff_branches"(a) { + const l = this.resolve(a.from), r = this.resolve(a.to); + if (!["branch", "main"].includes(l.kind) || !["branch", "main"].includes(r.kind)) refuse("InvalidInput", "diff_branches takes Branches or main"); + return { + kind: "ok", + from: { + ref: a.from, + label: l.label, + root: l.root + }, + to: { + ref: a.to, + label: r.label, + root: r.root + }, + items: diffTrees(l.tree, r.tree) + }; + }, + "branch.publish"(a) { + const b = this.branch(a.branch); + const cid = a.commit || b.head; + if (!cid) refuse("NoCommit", `${b.name} has no saved Commit to publish`); + const c = this.s.commits[cid]; + const already = Object.values(this.s.layers).find((l) => l.sourceBranch === b.name && l.sourceCommit === cid); + if (already) return { + kind: "UpToDate", + layer: already.id, + main: { + headLayer: this.s.main.head, + root: this.s.layers[this.s.main.head].root + } + }; + if (b.head !== cid) refuse("HeadMoved", `${b.name} head is ${b.head}, not ${cid}`); + const parent = this.s.main.head; + if (c.root === this.s.layers[parent].root) return { + kind: "NoChanges", + main: { headLayer: parent } + }; + const id = "L" + this.s.seq.layer++; + this.s.layers[id] = { + id, + parent, + root: c.root, + sourceBranch: b.name, + sourceCommit: cid, + slot: this.slot(), + time: this.tick() + }; + this.s.main.head = id; + const anc = this.ancestors(cid), pl = this.s.layers[parent]; + const overwrote = anc.has(parent) || pl.sourceCommit && anc.has(pl.sourceCommit) ? null : parent; + return { + kind: "Added", + source: { + branch: b.name, + commit: cid + }, + publishedLayer: { + id, + parent, + root: c.root + }, + main: { + headLayer: id, + root: c.root + }, + basedOn: b.base, + overwrote + }; + }, + "branch.merge"(a) { + const left = a.branch, right = a.with; + if (left === right) refuse("InvalidInput", "merge takes two different sources"); + if (!a.name) refuse("InvalidInput", "merge needs a name for the new Branch"); + if (a.name === "main") refuse("ReservedName", `"main" names the project's main line`); + if (this.s.branches[a.name]) refuse("NameTaken", `Branch ${a.name} already exists`); + const ln = this.sourceNode(left), rn = this.sourceNode(right); + const newer = this.ancestors(ln).has(rn) ? ln : this.ancestors(rn).has(ln) ? rn : null; + if (newer) { + const c = this.s.commits[newer]; + const b = { + name: a.name, + base: c ? c.base : newer, + head: c ? newer : null, + from: newer, + slot: this.slot() + }; + this.s.branches[a.name] = b; + this.s.branchOrder.push(a.name); + return { + kind: "Merged", + fastForward: true, + branch: a.name, + head: newer, + root: this.node(newer).root, + sources: [{ + ref: left, + node: ln + }, { + ref: right, + node: rn + }], + mergeBase: newer === ln ? rn : ln, + conflicts: [], + lww: [] + }; + } + const mb = this.mergeBase(ln, rn); + const ours = this.nodeTree(ln); + const m = this.merge(this.nodeTree(mb), ours, this.nodeTree(rn), { + labels: [`${left}@${ln}`, `${right}@${rn}`], + rules: lwwRules(ours), + timeOurs: (p) => this.changeTime(ln, p, mb), + timeTheirs: (p) => this.changeTime(rn, p, mb) + }); + const sources = [{ + ref: left, + node: ln + }, { + ref: right, + node: rn + }]; + if (!m.clean) refuse("Conflict", `${left} + ${right} conflict in ${m.conflicts.length} file${m.conflicts.length === 1 ? "" : "s"}; nothing was created`, { + sources, + mergeBase: mb, + conflicts: m.conflicts, + lww: m.lww + }); + const base = left === "main" ? ln : right === "main" ? rn : this.s.commits[ln] ? this.s.commits[ln].base : ln; + const b = { + name: a.name, + base, + head: null, + from: ln, + slot: this.slot() + }; + this.s.branches[a.name] = b; + this.s.branchOrder.push(a.name); + const root = this.intern(m.tree); + const id = "C" + ++this.s.seq.commit; + this.s.commits[id] = { + id, + parent: this.s.commits[ln] ? ln : null, + root, + base, + branch: a.name, + slot: this.slot(), + by: "merge", + via: `merge ${left} + ${right}`, + mergedFrom: rn, + mergeBase: mb, + lww: m.lww, + time: this.tick(), + ...a.message ? { message: a.message } : {} + }; + b.head = id; + return { + kind: "Merged", + branch: a.name, + head: id, + root, + sources, + mergeBase: mb, + conflicts: [], + lww: m.lww + }; + }, + "fs.read"(a) { + const v = this.resolve(a.commit || a.ref); + const e = v.tree[a.path]; + if (!e) refuse("NoSuchPath", `${a.path} does not exist at ${v.label}`, { path: a.path }); + if (e.type !== "file") refuse("IsDirectory", `${a.path} is a directory`, { path: a.path }); + return { + kind: "ok", + snapshot: v.label, + root: v.root, + path: a.path, + inode: e.inode, + text: e.content + }; + }, + "fs.list"(a) { + const v = this.resolve(a.ref); + const dir = a.path || "/"; + if (dir !== "/" && (!v.tree[dir] || v.tree[dir].type !== "dir")) refuse("NoSuchPath", `${dir} is not a directory`); + return { + kind: "ok", + snapshot: v.label, + root: v.root, + items: childrenOf(v.tree, dir).map((p) => ({ + name: baseName(p), + path: p, + type: v.tree[p].type, + inode: v.tree[p].inode + })), + nextCursor: null + }; + }, + "fs.stat"(a) { + const v = this.resolve(a.ref); + const e = v.tree[a.path]; + if (!e) refuse("NoSuchPath", `${a.path} does not exist`); + return { + kind: "ok", + snapshot: v.label, + path: a.path, + type: e.type, + inode: e.inode, + size: (e.content || "").length + }; + }, + "fs.grep"(a) { + const v = this.resolve(a.ref); + const items = []; + for (const p of Object.keys(v.tree).sort()) { + const e = v.tree[p]; + if (e.type !== "file" || !isUnder(p, a.path || "/")) continue; + e.content.split("\n").forEach((line, i) => { + if (line.includes(a.pattern)) items.push({ + path: p, + line: i + 1, + text: line.trim() + }); + }); + } + return { + kind: "ok", + snapshot: v.label, + root: v.root, + items, + nextCursor: null + }; + }, + "fs.diff_files"(a) { + const base = this.resolve(a.ref); + const side = (sel) => { + const v = sel.commit ? this.resolve(sel.commit) : base; + const e = v.tree[sel.path]; + if (!e) refuse("NoSuchPath", `${sel.path} does not exist at ${v.label}`); + if (e.type !== "file") refuse("IsDirectory", `${sel.path} is a directory`); + return { + path: sel.path, + snapshot: v.label, + inode: e.inode, + content: e.content + }; + }; + const l = side(a.left), r = side(a.right); + const equal = l.content === r.content; + return { + kind: equal ? "Equal" : "Text", + left: { + path: l.path, + snapshot: l.snapshot, + inode: l.inode + }, + right: { + path: r.path, + snapshot: r.snapshot, + inode: r.inode + }, + contentEqual: equal, + sameInode: l.inode === r.inode, + hunks: equal ? [] : lineDiff(l.content, r.content) + }; + }, + "fs.write"(a) { + return this.mutate(a.branch, [{ + kind: "write", + path: a.path, + content: a.content + }], "fs.write", a.message); + }, + "fs.edit"(a) { + return this.mutate(a.branch, [{ + kind: "edit", + path: a.path, + oldText: a.oldText, + newText: a.newText, + all: a.all + }], "fs.edit", a.message); + }, + "fs.mkdir"(a) { + return this.mutate(a.branch, [{ + kind: "mkdir", + path: a.path, + recursive: a.recursive + }], "fs.mkdir", a.message); + }, + "fs.rm"(a) { + return this.mutate(a.branch, [{ + kind: "remove", + path: a.path, + recursive: a.recursive + }], "fs.rm", a.message); + }, + "fs.cp"(a) { + return this.mutate(a.branch, [{ + kind: "cp", + from: a.from, + to: a.to, + recursive: a.recursive + }], "fs.cp", a.message); + }, + "fs.mv"(a) { + return this.mutate(a.branch, [{ + kind: "mv", + from: a.from, + to: a.to + }], "fs.mv", a.message); + }, + "fs.apply"(a) { + return this.mutate(a.branch, a.changes, "fs.apply", a.message); + }, + "sandbox.create"() { + const id = "sb_" + String(++this.s.seq.sandbox).padStart(2, "0"); + this.s.sandboxes[id] = { + id, + closed: false, + nextWs: 1, + workspaces: {}, + wsOrder: [], + processes: {}, + procOrder: [] + }; + this.s.sandboxOrder.push(id); + return { + kind: "Ready", + id, + mounted: false + }; + }, + "sandbox.list"() { + return { + kind: "ok", + items: this.s.sandboxOrder.map((id) => { + const sb = this.s.sandboxes[id]; + return { + id, + status: sb.closed ? "closed" : "ready", + mounts: sb.wsOrder.filter((p) => sb.workspaces[p].mounted) + }; + }) + }; + }, + "sandbox.mount"(a) { + const sb = this.sandbox(a.sandbox); + const b = this.branch(a.branch); + const path = "/workspaces/" + sb.nextWs++; + const root = this.branchRoot(b); + sb.workspaces[path] = { + sandbox: sb.id, + path, + branch: b.name, + baseCommit: b.head, + baseLayer: b.base, + baseRoot: root, + live: clone(this.s.roots[root]), + mounted: true, + slot: this.slot(), + times: {} + }; + sb.wsOrder.push(path); + return { + kind: "Mounted", + sandbox: sb.id, + path, + branch: b.name, + base: b.head || b.base, + root + }; + }, + "sandbox.list_mounts"(a) { + const sb = this.sandbox(a.sandbox); + return { + kind: "ok", + items: sb.wsOrder.filter((p) => sb.workspaces[p].mounted).map((p) => { + const w = sb.workspaces[p]; + return { + path: p, + branch: w.branch, + base: w.baseCommit || w.baseLayer, + overlay: diffTrees(this.s.roots[w.baseRoot], w.live).length + }; + }) + }; + }, + "sandbox.exec"(a) { + const ws = this.workspace(a.sandbox, a.path); + const sb = this.s.sandboxes[a.sandbox]; + let changed = []; + let exitCode = a.exitCode ?? 0; + let stdout = a.output ?? ""; + if (a.writes && a.writes.length) try { + const before = ws.live; + ws.live = applyChanges(ws.live, a.writes, () => this.newInode()); + changed = diffTrees(before, ws.live).map((d) => d.path); + const t = this.tick(); + for (const p of changed) ws.times[p] = t; + } catch (e) { + if (!(e instanceof Refusal)) throw e; + exitCode = 1; + stdout = e.message; + } + if (a.background) { + const id = "proc_" + String(++this.s.seq.proc).padStart(2, "0"); + sb.processes[id] = { + id, + path: a.path, + command: a.command, + status: "running" + }; + sb.procOrder.push(id); + return { + kind: "running", + process: id, + command: a.command, + changed + }; + } + return { + kind: "exit:" + exitCode, + exitCode, + stdout, + changed + }; + }, + "sandbox.list_processes"(a) { + const sb = this.sandbox(a.sandbox); + return { + kind: "ok", + items: sb.procOrder.map((id) => clone(sb.processes[id])) + }; + }, + "process.cancel"(a) { + const p = this.sandbox(a.sandbox).processes[a.process]; + if (!p) refuse("NoSuchProcess", `${a.process} is not owned by ${a.sandbox}`); + if (p.status !== "running") return { + kind: "Stopped", + process: p.id, + status: p.status + }; + p.status = "stopped"; + return { + kind: "Stopped", + process: p.id, + status: "stopped" + }; + }, + "sandbox.status"(a) { + const ws = this.workspace(a.sandbox, a.path); + const b = this.s.branches[ws.branch]; + return { + kind: "ok", + workspace: `${a.sandbox}:${a.path}`, + branch: ws.branch, + base: ws.baseCommit || ws.baseLayer, + branchHead: b.head, + headMovedSinceMount: b.head !== ws.baseCommit, + overlay: diffTrees(this.s.roots[ws.baseRoot], ws.live).map((d) => `${d.kind[0]} ${d.path}`) + }; + }, + "sandbox.commit"(a) { + const ws = this.workspace(a.sandbox, a.path); + const b = this.s.branches[ws.branch]; + const capturedHead = ws.baseCommit; + const stale = b.head !== capturedHead; + const markers = this.markersIn(ws); + if (markers.length) refuse("Conflict", `${markers.length} ${markers.length === 1 ? "file still contains" : "files still contain"} conflict markers`, { + head: b.head, + base: capturedHead || ws.baseLayer, + conflicts: markers.map((p) => ({ + path: p, + kind: "markers" + })), + lww: [], + markers: true + }); + let merged = null; + if (stale && !a.force) { + const theirs = this.s.roots[this.branchRoot(b)]; + const m = this.merge(this.s.roots[ws.baseRoot], ws.live, theirs, { + labels: ["workspace", `${b.name}@${b.head}`], + rules: lwwRules(theirs), + timeOurs: (p) => ws.times[p] || 0, + timeTheirs: (p) => this.changeTime(b.head, p, capturedHead || ws.baseLayer) + }); + merged = { + from: capturedHead || ws.baseLayer, + head: b.head, + lww: m.lww + }; + if (!m.clean) { + const changed = diffTrees(ws.live, m.tree).map((d) => d.path); + ws.live = m.tree; + ws.baseCommit = b.head; + ws.baseLayer = b.base; + ws.baseRoot = this.branchRoot(b); + refuse("Conflict", `${b.name} head moved to ${b.head} and ${m.conflicts.length} ${m.conflicts.length === 1 ? "file conflicts" : "files conflict"} with this Workspace; nothing committed`, { + head: b.head, + base: merged.from, + conflicts: m.conflicts, + lww: m.lww, + written: changed + }); + } + ws.live = m.tree; + } + const currentRoot = this.branchRoot(b); + const root = this.intern(ws.live); + if (root === currentRoot) { + ws.baseCommit = b.head; + ws.baseLayer = b.base; + ws.baseRoot = root; + return { + kind: "UpToDate", + branch: b.name, + head: b.head, + root, + capturedHead, + displacedHead: null, + merged + }; + } + const id = "C" + ++this.s.seq.commit; + const displacedHead = stale && a.force ? b.head : null; + this.s.commits[id] = { + id, + parent: a.force ? capturedHead : b.head, + root, + base: b.base, + branch: b.name, + slot: this.slot(), + by: "workspace", + via: `${a.sandbox}:${a.path}`, + time: this.tick(), + ...merged ? { merged } : {}, + ...a.message ? { message: a.message } : {} + }; + if (displacedHead) this.s.commits[displacedHead].displacedBy = id; + b.head = id; + ws.baseCommit = id; + ws.baseLayer = b.base; + ws.baseRoot = root; + return { + kind: "Committed", + branch: b.name, + head: id, + root, + capturedHead, + displacedHead, + merged + }; + }, + "sandbox.unmount"(a) { + const ws = this.workspace(a.sandbox, a.path); + const sb = this.s.sandboxes[a.sandbox]; + const busy = sb.procOrder.filter((id) => sb.processes[id].status === "running" && sb.processes[id].path === a.path); + if (busy.length) refuse("Busy", `${a.sandbox}:${a.path} is busy: ${busy.join(", ")} still running`, { processes: busy }); + const changed = diffTrees(this.s.roots[ws.baseRoot], ws.live).map((d) => d.path); + if (changed.length && !a.discard) refuse("Dirty", `${a.sandbox}:${a.path} has ${changed.length} uncommitted change${changed.length === 1 ? "" : "s"}`, { changed }); + ws.mounted = false; + return { + kind: "Unmounted", + workspace: `${a.sandbox}:${a.path}`, + discardedUncommitted: changed + }; + }, + "sandbox.close"(a) { + const sb = this.sandbox(a.sandbox); + const live = sb.wsOrder.filter((p) => sb.workspaces[p].mounted); + if (live.length) refuse("MountsActive", `${sb.id} still has mounted Workspaces: ${live.join(", ")}`, { mounts: live }); + sb.closed = true; + return { + kind: "Closed", + id: sb.id + }; + } + }; + function forkFrom(name, baseLayer, fromCommit) { + if (name === "main") refuse("ReservedName", `"main" names the project's main line`); + if (this.s.branches[name]) refuse("NameTaken", `Branch ${name} already exists`); + const base = fromCommit ? this.s.commits[fromCommit].base : baseLayer; + const b = { + name, + base, + head: fromCommit || null, + from: fromCommit || baseLayer, + slot: this.slot() + }; + this.s.branches[name] = b; + this.s.branchOrder.push(name); + return { + kind: "Forked", + branch: name, + base, + head: b.head, + root: this.branchRoot(b) + }; + } + function scriptFor(step, project) { + const a = step.args || {}; + let target = "layerfs", method = step.call, args = []; + switch (method) { + case "project.init": + args = [`./${a.name || project}`]; + break; + case "project.list_branches": + args = [a.pageSize, a.pagePos]; + break; + case "main.fork": + method = "branch.fork"; + args = [a.name, "main"]; + break; + case "main.list_layers": + target = "operator"; + method = "inspect.snapshot"; + break; + case "branch.fork": + args = [a.name, a.fromCommit || a.branch || "main"]; + break; + case "branch.list_commits": + args = [ + a.branch, + a.pageSize, + a.pagePos + ]; + break; + case "branch.diff_commits": + case "branch.diff_branches": + args = [ + a.from, + a.to, + a.pageSize, + a.pagePos + ]; + break; + case "branch.publish": + args = [a.branch, a.commit]; + break; + case "branch.merge": + args = [ + a.branch, + a.with, + a.name, + a.message + ]; + break; + case "fs.read": + args = [ + a.commit || a.ref, + a.path, + a.startLine, + a.endLine + ]; + break; + case "fs.list": + args = [ + a.ref, + a.path || "/", + a.pageSize, + a.pagePos + ]; + break; + case "fs.stat": + args = [a.ref, a.path]; + break; + case "fs.grep": + case "fs.glob": + args = [ + a.ref, + a.pattern, + a.path || "/", + a.pageSize, + a.pagePos + ]; + break; + case "fs.blame": + args = [ + a.commit || a.ref, + a.path, + a.fromLine + ]; + break; + case "fs.diff_files": + args = [ + a.left.commit || a.ref, + a.left.path, + a.right.commit || a.ref, + a.right.path + ]; + break; + case "fs.write": + args = [ + a.branch, + a.path, + a.content, + a.message + ]; + break; + case "fs.edit": + args = [ + a.branch, + a.path, + a.oldText, + a.newText, + a.message + ]; + break; + case "fs.mkdir": + case "fs.rm": + args = [ + a.branch, + a.path, + a.message + ]; + break; + case "fs.cp": + case "fs.mv": + args = [ + a.branch, + a.from, + a.to, + a.message + ]; + break; + case "fs.apply": + args = [ + a.branch, + a.changes.map(({ kind, ...rest }) => ({ + op: kind === "remove" ? "rm" : kind, + ...rest + })), + a.message + ]; + break; + case "sandbox.create": + args = [ + a.name || "box-1", + project, + { raw: "process.env.LAYERFS_IMAGE" } + ]; + break; + case "sandbox.mount": + args = [a.sandbox, a.branch]; + break; + case "sandbox.status": + args = [a.sandbox, a.path]; + break; + case "sandbox.close": + args = [a.sandbox]; + break; + case "sandbox.exec": + args = [ + a.sandbox, + a.path, + a.command, + a.message + ]; + if (a.background) { + target = "operator"; + method = "process.start"; + args = args.slice(0, 3); + } + break; + case "sandbox.list_processes": + target = "operator"; + method = "process.list"; + args = [a.sandbox]; + break; + case "process.cancel": + target = "operator"; + args = [a.sandbox, a.process]; + break; + case "sandbox.commit": + args = [ + a.sandbox, + a.path, + a.message, + !!a.force + ]; + break; + case "sandbox.unmount": + args = [ + a.sandbox, + a.path, + !!a.discard + ]; + break; + default: return `// ${method} is a UI action`; + } + while (args.length && args[args.length - 1] === void 0) args.pop(); + return `node --input-type=module <<'JS'\nimport { LayerFS } from "@layerfs/sdk";${target === "operator" ? "\nimport { LayerFSOperator } from \"@layerfs/sdk/operator\";" : ""}\nconst layerfs = new LayerFS(${J(project)});\n${target === "operator" ? "const operator = new LayerFSOperator(layerfs);\n" : ""}const result = await ${target}.${method}(${args.map((v) => v === void 0 ? "undefined" : v && v.raw ? v.raw : J(v)).join(", ")});\nconsole.log(JSON.stringify(result));\nJS`; + } + function runScenario(scn) { + const sim = new Sim(); + const steps = []; + const initial = sim.snapshot(); + for (const [i, st] of scn.steps.entries()) { + const before = sim.snapshot(); + const outcome = sim.run(st.call, st.args); + const after = sim.snapshot(); + let pass = outcome.code === st.expect; + let why = pass ? "" : `expected ${st.expect}, got ${outcome.code}`; + if (pass && st.check) try { + const r = st.check(outcome.result || outcome.refusal, after); + if (r !== true) { + pass = false; + why = typeof r === "string" ? r : "check failed"; + } + } catch (e) { + pass = false; + why = "check threw: " + e.message; + } + steps.push({ + index: i, + ...st, + outcome, + before, + after, + pass, + why, + script: scriptFor(st, scn.project) + }); + } + return { + scenario: scn, + initial, + steps, + sim + }; + } + const api = { + Sim, + Refusal, + applyChanges, + diffTrees, + lineDiff, + merge3Lines, + merge3Trees, + lwwRules, + hasMarkers, + treeKey, + scriptFor, + runScenario, + childrenOf, + parentOf, + baseName + }; + if (typeof module !== "undefined" && module.exports) module.exports = api; + else global.LayerSim = api; + })(typeof globalThis !== "undefined" ? globalThis : exports); + })); + //#endregion + //#region ../../sim/simulation_engine/files.js + var require_files = /* @__PURE__ */ __commonJSMin(((exports, module) => { + (function(global) { + "use strict"; + const M = typeof module !== "undefined" && module.exports ? require_model() : global.LayerSim; + function resolveRef(sim, ref) { + const s = sim.s; + if (ref && ref.startsWith("fork:")) { + const b = s.branches[ref.slice(5)]; + if (!b) return null; + const node = b.from; + const root = /^C\d+$/.test(node) ? s.commits[node].root : s.layers[node].root; + return { + ref, + label: `${b.name} fork point (${node})`, + tree: s.roots[root], + node + }; + } + try { + const v = sim.resolve(ref); + if (v.kind === "live") return null; + const node = v.kind === "main" ? s.main.head : v.kind === "branch" ? v.head || s.branches[ref].from : ref; + return { + ref, + label: v.label, + tree: v.tree, + node + }; + } catch (e) { + return null; + } + } + function parentRef(sim, ref) { + const s = sim.s, r = resolveRef(sim, ref); + if (!r) return null; + const id = r.node; + if (s.commits[id]) { + const c = s.commits[id]; + if (c.parent && s.commits[c.parent].branch === c.branch) return c.parent; + return "fork:" + c.branch; + } + if (s.layers[id]) return s.layers[id].parent || null; + return null; + } + function chainOf(sim, ref) { + const s = sim.s, r = resolveRef(sim, ref); + if (!r) return []; + const out = [], seen = /* @__PURE__ */ new Set(); + let id = r.node; + while (id && !seen.has(id)) { + seen.add(id); + if (s.commits[id]) { + const c = s.commits[id]; + out.push({ + id, + kind: "commit", + branch: c.branch, + by: c.by, + via: c.via, + root: c.root + }); + id = c.parent || c.base; + } else if (s.layers[id]) { + const l = s.layers[id]; + if (l.sourceCommit && !seen.has(l.sourceCommit)) { + id = l.sourceCommit; + continue; + } + out.push({ + id, + kind: "layer", + branch: "main", + via: l.sourceCommit ? `published from ${l.sourceCommit}` : "project.init", + root: l.root + }); + id = l.parent; + } else break; + } + return out; + } + function blame(sim, ref, path) { + const s = sim.s, chain = chainOf(sim, ref); + const text = (n) => { + const e = s.roots[n.root][path]; + return e && e.type === "file" ? e.content : null; + }; + if (!chain.length || text(chain[0]) == null) return null; + const lines = text(chain[0]).split("\n"); + const track = lines.map((_, i) => i), owner = new Array(lines.length).fill(null); + let open = lines.length; + for (let k = 0; k < chain.length && open; k++) { + const cur = chain[k], older = chain[k + 1], curText = text(cur), oldText = older ? text(older) : null; + if (oldText == null) { + for (let i = 0; i < lines.length; i++) if (!owner[i]) owner[i] = cur; + break; + } + if (oldText === curText) continue; + const map = {}; + let ci = 0, oi = 0; + for (const op of M.lineDiff(oldText, curText)) if (op.op === " ") { + map[ci] = oi; + ci++; + oi++; + } else if (op.op === "+") ci++; + else oi++; + for (let i = 0; i < lines.length; i++) { + if (owner[i]) continue; + const j = map[track[i]]; + if (j === void 0) { + owner[i] = cur; + open--; + } else track[i] = j; + } + } + return { + versions: chain.length, + lines: lines.map((t, i) => ({ + n: i + 1, + text: t, + origin: owner[i] + })) + }; + } + function history(sim, ref, path) { + const s = sim.s, chain = chainOf(sim, ref), out = []; + const text = (n) => { + const e = n && s.roots[n.root] && s.roots[n.root][path]; + return e && e.type === "file" ? e.content : null; + }; + for (let k = 0; k < chain.length; k++) { + const cur = text(chain[k]), old = text(chain[k + 1]); + if (cur === old) continue; + out.push({ + node: chain[k], + change: cur == null ? "D" : old == null ? "A" : "M", + content: cur + }); + } + return out; + } + function changeMap(subjectTree, baseTree) { + const files = {}, dirs = {}; + for (const d of M.diffTrees(baseTree, subjectTree)) { + if (d.type === "dir" && d.kind === "Modified") continue; + files[d.path] = d.kind === "Added" ? "A" : d.kind === "Removed" ? "D" : "M"; + for (let p = M.parentOf(d.path); p && p !== "/"; p = M.parentOf(p)) dirs[p] = (dirs[p] || 0) + 1; + } + return { + files, + dirs, + count: Object.keys(files).length + }; + } + function listBoth(subjectTree, baseTree, dir) { + const set = new Set(M.childrenOf(subjectTree, dir)); + if (baseTree) for (const p of M.childrenOf(baseTree, dir)) set.add(p); + const typeOf = (p) => (subjectTree[p] || baseTree[p]).type; + return [...set].sort((a, b) => typeOf(a) === typeOf(b) ? a.localeCompare(b) : typeOf(a) === "dir" ? -1 : 1).map((p) => ({ + path: p, + name: M.baseName(p), + type: typeOf(p), + gone: !subjectTree[p] + })); + } + const api = { + resolveRef, + parentRef, + chainOf, + blame, + history, + changeMap, + listBoth + }; + if (typeof module !== "undefined" && module.exports) module.exports = api; + else global.LayerFiles = api; + })(exports); + })); + //#endregion + //#region ../model/src/terminals.js + var import_model = /* @__PURE__ */ __toESM(require_model(), 1); + var import_files = /* @__PURE__ */ __toESM(require_files(), 1); + /** Terminal engine line classes, as the views name them. */ + const LINE_CLASS = { + err: "bad", + warn: "mark", + ok: "good", + info: "good" + }; + const outLines = (rec) => rec.lines.map((x) => ({ + t: x.t, + c: LINE_CLASS[x.c] || "" + })); + const callsOf = (rec, skip) => rec.calls.filter((c) => !skip || !skip.has(c.call)).map((c) => ({ + call: c.call, + code: c.outcome.code, + timing: c.outcome.timing, + script: c.script + })); + /** The node a call created, for attribution and the flying block. */ + function nodeOf(o) { + if (!o.ok) return null; + const r = o.result; + return o.code === "Committed" || o.code === "Merged" ? r.head : o.code === "Added" ? r.publishedLayer.id : o.code === "Initialized" ? r.main.headLayer : null; + } + /** Outcome lines under a command. Live and replayed results carry fewer + * fields than the simulator's, so anything else is optional here. */ + function outcome(call, o, shOut, args = {}) { + const L = (t, c = "") => ({ + t, + c + }); + if (shOut) { + const out = shOut.map((x) => L(x.t, /^(<{7}|={7}|>{7})/.test(x.t) ? "mark" : x.c === "err" ? "bad" : "")); + if (o.ok && o.result.truncated) out.push(L("… output truncated at 1 MiB per stream", "dim")); + out.push(!o.ok ? L(`✕ ${o.code} ${o.refusal.message}`, "bad") : o.result.process ? L(`● running in background as ${o.result.process}`, "good") : L(`[exit ${o.result.exitCode}]`, o.result.exitCode ? "bad" : "good")); + return out; + } + if (!o.ok) return [L(`✕ ${o.code} ${o.refusal.message}`, "bad"), ...(o.refusal.conflicts || []).map((c) => L(` conflict ${c.path}`, "mark"))]; + const r = o.result; + switch (o.code) { + case "Initialized": return [L(`Initialized ${r.project} → main @ ${r.main.headLayer}`, "good")]; + case "Forked": return [L(`${r.branch} ← ${r.head || r.base}`, "good")]; + case "Committed": return [L(`Committed ${r.head}${r.merged ? ` · merged with ${r.merged.head || r.merged.from || "the head"}` : ""}`, "good")]; + case "UpToDate": return [L("UpToDate · nothing new to commit")]; + case "Merged": return [L(`Merged → ${r.branch} @ ${r.head}${r.fastForward ? " · fast-forward" : ""} · inputs untouched`, "good")]; + case "Added": return [L(`Published ${r.source ? `${r.source.branch}@${r.source.commit}` : args.branch} → main @ ${r.publishedLayer.id}`, "good")]; + case "Mounted": return [L(`mounted ${r.branch}@${r.base} → ${r.sandbox}:${r.path}`)]; + case "Unmounted": return [L("unmounted")]; + case "Stopped": return [L(`${r.process} ${r.status || "stopped"}`)]; + case "Ready": return [L(`Ready ${r.id} · a new machine with its own localhost`, "good")]; + case "Closed": return [L(`Closed ${r.id}`)]; + } + if (o.replay) { + if (r.process) return [L(`● running in background as ${r.process}`, "good")]; + if (call === "sandbox.exec") return [L(`[exit ${r.exitCode}]`, r.exitCode ? "bad" : "good")]; + return [L(o.code)]; + } + if (call === "fs.read") return [L(`${(r.text || "").split("\n").length} lines${r.snapshot ? " · " + r.snapshot : ""}`)]; + if (call === "process.cancel") return [L(`${args.process} stopped`)]; + return [L(o.code)]; + } + /** The bubble over an agent after its call: [text, class], or null. */ + function bubbleOf$1(last) { + const o = last.o, r = o.result; + if (!o.ok) return [o.code === "Conflict" ? "Conflict!" : o.code, "bad"]; + if (o.code === "Committed") return [r.head, "good"]; + if (o.code === "Merged") return [`merge → ${r.head}`, "good"]; + if (o.code === "Added") return [`→ ${r.publishedLayer.id}`, "good"]; + if (o.code === "Forked") return ["fork", ""]; + if (o.code === "Mounted") return ["mount", ""]; + if (o.code === "Ready") return [`+ ${r.id}`, "good"]; + if (o.code === "Closed") return [`× ${r.id}`, ""]; + if (o.code === "running") return ["● dev server", "good"]; + if (o.code === "Stopped" || last.call === "process.cancel") return ["■ stopped", ""]; + if (last.call === "sandbox.exec" && r && r.process) return ["● dev server", "good"]; + if (last.call === "sandbox.exec" && r && r.exitCode != null) return r.exitCode ? [`exit ${r.exitCode}`, "bad"] : /npm (test|run test)/.test(last.step && last.step.sh || "") ? ["✓ tests", "good"] : null; + return null; + } + //#endregion + //#region ../model/src/cli.js + const kebab = (name) => name.replace(/[A-Z]/g, (c) => "-" + c.toLowerCase()); + const quote = (v) => /^[^\s"'\\]+$/.test(String(v)) ? String(v) : JSON.stringify(String(v)); + const shortImage = (image) => String(image).replace(/^(sha256:[0-9a-f]{12})[0-9a-f]+$/, "$1"); + /** + * One command line: `head`, then the positional values, then each optional + * `[name, value, sdkDefault]` that is set and not its default, then `-m`. + */ + function line$1(head, positional = [], optional = [], message) { + const parts = [head, ...positional.filter((v) => v !== void 0 && v !== null && v !== "").map(quote)]; + for (const [name, value, fallback] of optional) { + if (value === void 0 || value === null || value === fallback || value === false) continue; + parts.push(value === true ? `--${kebab(name)}` : `--${kebab(name)} ${quote(value)}`); + } + if (message !== void 0 && message !== null) parts.push(`-m ${JSON.stringify(String(message))}`); + return parts.join(" "); + } + const page = (a) => [[ + "pageSize", + a.pageSize, + 50 + ], [ + "pagePos", + a.pagePos, + 0 + ]]; + const count = (changes) => Array.isArray(changes) ? changes.length : changes; + /** call name -> { at: terminal, dim?: true, cli: (args, sh?) => command line } */ + const CLI = { + "project.init": { + at: "project", + cli: (a) => line$1("project init", [a.path ?? `./${a.name}`]) + }, + "project.list_branches": { + at: "project", + dim: true, + cli: (a) => line$1("project list_branches", [], page(a)) + }, + "branch.fork": { + at: "project", + cli: (a) => line$1("branch fork", [a.name], [[ + "fromRef", + a.fromRef ?? a.from ?? a.branch, + "main" + ]]) + }, + "main.fork": { + at: "project", + cli: (a) => line$1("branch fork", [a.name]) + }, + "branch.list_commits": { + at: "project", + dim: true, + cli: (a) => line$1("branch list_commits", [a.branch], page(a)) + }, + "branch.diff_commits": { + at: "project", + dim: true, + cli: (a) => line$1("branch diff_commits", [a.from, a.to], page(a)) + }, + "branch.diff_branches": { + at: "project", + dim: true, + cli: (a) => line$1("branch diff_branches", [a.from, a.to], page(a)) + }, + "branch.merge": { + at: "project", + cli: (a) => line$1("branch merge", [ + a.branch, + a.with, + a.name + ], [], a.message) + }, + "branch.publish": { + at: "project", + cli: (a) => line$1("branch publish", [a.branch], [["commit", a.commit]]) + }, + "fs.read": { + at: "fs", + dim: true, + cli: (a) => line$1("fs read", [a.path], [[ + "startLine", + a.startLine, + 1 + ], ["endLine", a.endLine]]) + }, + "fs.list": { + at: "fs", + dim: true, + cli: (a) => line$1("fs list", [a.path && a.path !== "/" ? a.path : void 0], page(a)) + }, + "fs.stat": { + at: "fs", + dim: true, + cli: (a) => line$1("fs stat", [a.path]) + }, + "fs.grep": { + at: "fs", + dim: true, + cli: (a) => line$1("fs grep", [a.pattern, a.path && a.path !== "/" ? a.path : void 0], page(a)) + }, + "fs.glob": { + at: "fs", + dim: true, + cli: (a) => line$1("fs glob", [a.pattern, a.path && a.path !== "/" ? a.path : void 0], page(a)) + }, + "fs.blame": { + at: "fs", + dim: true, + cli: (a) => line$1("fs blame", [a.path], [[ + "fromLine", + a.fromLine, + 1 + ]]) + }, + "fs.diff_files": { + at: "fs", + dim: true, + cli: (a) => line$1("fs diff_files", [ + a.leftRef ?? a.left?.commit ?? a.ref, + a.leftPath ?? a.left?.path ?? a.path, + a.rightRef ?? a.right?.commit ?? a.ref, + a.rightPath ?? a.right?.path + ]) + }, + "fs.write": { + at: "fs", + cli: (a) => line$1("fs write", [a.path], [], a.message) + }, + "fs.edit": { + at: "fs", + cli: (a) => line$1("fs edit", [a.path], [], a.message) + }, + "fs.apply": { + at: "fs", + cli: (a) => line$1(count(a.changes) !== void 0 ? `fs apply ${count(a.changes)} changes` : "fs apply", [], [], a.message) + }, + "fs.mkdir": { + at: "fs", + cli: (a) => line$1("fs mkdir", [a.path], [], a.message) + }, + "fs.rm": { + at: "fs", + cli: (a) => line$1("fs rm", [a.path], [], a.message) + }, + "fs.cp": { + at: "fs", + cli: (a) => line$1("fs cp", [a.from, a.to], [], a.message) + }, + "fs.mv": { + at: "fs", + cli: (a) => line$1("fs mv", [a.from, a.to], [], a.message) + }, + "workspace.mount": { + at: "workspace", + dim: true, + cli: (a) => line$1("workspace mount", [a.branch]) + }, + "workspace.exec": { + at: "workspace", + cli: (a, sh) => (sh ?? a.command) + (a.background && !/&\s*$/.test(sh ?? a.command) ? " &" : "") + }, + "workspace.status": { + at: "workspace", + dim: true, + cli: () => "workspace status" + }, + "workspace.commit": { + at: "workspace", + cli: (a) => line$1("workspace commit", [], [["force", a.force]], a.message) + }, + "workspace.unmount": { + at: "workspace", + cli: (a) => line$1("workspace unmount", [], [["discard", a.discard]]) + }, + "sandbox.create": { + at: "project", + cli: (a) => line$1("sandbox create", [ + a.name, + a.project, + a.image && shortImage(a.image) + ]) + }, + "sandbox.close": { + at: "project", + cli: (a) => line$1("sandbox close", [a.sandbox]) + }, + "process.start": { + at: "workspace", + cli: (a, sh) => CLI["workspace.exec"].cli({ + ...a, + background: true + }, sh) + }, + "process.cancel": { + at: "workspace", + cli: (a) => line$1("process cancel", [a.process]) + }, + "sandbox.list_processes": { + at: "project", + dim: true, + cli: (a) => line$1("process list", [a.sandbox]) + }, + "main.list_layers": { + at: "project", + dim: true, + cli: () => "inspect snapshot" + }, + "sandbox.service": { at: null }, + "sandbox.list": { at: null }, + "project.progress": { at: null }, + "store.stats": { at: null }, + "store.commits": { at: null }, + "store.overwritten": { at: null }, + "files.stats": { at: null }, + "files.history": { at: null }, + "workspace.overlay": { at: null }, + "workspace.changes": { at: null }, + "inspect.snapshot": { at: null }, + "process.list": { at: null } + }; + for (const name of [ + "mount", + "exec", + "status", + "commit", + "unmount" + ]) CLI[`sandbox.${name}`] = CLI[`workspace.${name}`]; + /** The route of `call`; a call missing from the table prints its own name, dimmed, in the project terminal. */ + const routeOf = (call) => CLI[call] ?? { + at: "project", + dim: true, + cli: () => call + }; + /** The group each terminal implies, hidden from its lines. */ + const IMPLIED = { + fs: "fs ", + workspace: "workspace " + }; + /** The full command line of `call` with `args` (and, for a Workspace command, its shell text `sh`). */ + const commandOf = (call, args = {}, sh) => routeOf(call).cli?.(args, sh) ?? call; + /** The line `call` prints in its terminal: the command line without the group the terminal implies. */ + function cliOf(call, args = {}, sh) { + const text = commandOf(call, args, sh), implied = IMPLIED[routeOf(call).at]; + return implied && text.startsWith(implied) ? text.slice(implied.length) : text; + } + //#endregion + //#region ../model/src/derive.js + /** Branch lane colours, by Branch order. */ + const BCOL = [ + "--b0", + "--b1", + "--b2", + "--b3", + "--b4", + "--b5" + ]; + const branchRoot = (s, b) => b.head ? s.commits[b.head].root : s.layers[b.base].root; + /** The engine's Workspace for a pane key "sb_01:/workspaces/2". */ + const engWs = (s, k) => { + const i = k.indexOf(":"), sb = s.sandboxes[k.slice(0, i)]; + return sb && sb.workspaces[k.slice(i + 1)]; + }; + function derive(W) { + const s = W.engine.s, nodes = {}; + W.mainHead = s.main ? s.main.head : null; + W.order = s.branchOrder.slice(); + W.initLayer = (Object.values(s.layers).find((l) => !l.parent) || {}).id; + for (const l of Object.values(s.layers)) nodes[l.id] = { + id: l.id, + kind: "layer", + branch: null, + parents: [l.parent, l.sourceCommit || null], + t: l.slot, + by: W.attrib[l.id], + msg: l.sourceBranch ? `publish ${l.sourceBranch}@${l.sourceCommit}` : `init ${s.project ? s.project.name : ""}` + }; + for (const name of s.branchOrder) { + const b = s.branches[name]; + nodes["fork:" + name] = { + id: "fork:" + name, + kind: "fork", + branch: name, + parents: [b.from], + t: b.slot, + by: W.attrib["fork:" + name], + msg: `fork ← ${b.from}` + }; + } + for (const c of Object.values(s.commits)) { + const own = c.parent && s.commits[c.parent] && s.commits[c.parent].branch === c.branch; + const by = W.attrib[c.id], raw = c.message || c.via || "", msg = by && raw.startsWith(`${by}: `) ? raw.slice(by.length + 2) : raw; + nodes[c.id] = { + id: c.id, + kind: "commit", + branch: c.branch, + parents: [own ? c.parent : "fork:" + c.branch, c.mergedFrom || null], + t: c.slot, + by, + msg + }; + } + W.nodes = nodes; + W.branches = {}; + s.branchOrder.forEach((name, i) => { + const b = s.branches[name]; + W.branches[name] = { + name, + color: BCOL[i % BCOL.length], + head: b.head || "fork:" + name, + base: b.from, + last: W.touched[name] ?? 0, + published: !!b.head && Object.values(s.layers).some((l) => l.sourceBranch === name && l.sourceCommit === b.head) + }; + }); + W.ws = {}; + for (const id of s.sandboxOrder) for (const p of s.sandboxes[id].wsOrder) { + const w = s.sandboxes[id].workspaces[p], k = `${id}:${p}`, pane = W.panes[k]; + if (!w.mounted || !pane) continue; + W.ws[k] = { + id: k, + agent: pane.agent, + branch: w.branch, + lines: pane.lines, + born: pane.born, + bad: W.engine.markersIn(w).length > 0, + baseNode: w.baseCommit || "fork:" + w.branch, + eng: w + }; + } + return W; + } + /** Root of every ref (main and each Branch), to find what a step changed. */ + function rootsOf(W) { + const s = W.engine.s, out = {}; + if (s.main) out.main = s.layers[s.main.head].root; + for (const b of s.branchOrder) out[b] = branchRoot(s, s.branches[b]); + return out; + } + /** Paths each ref changed between two `rootsOf` snapshots. Trees load + * lazily on live engines: a ref only flashes when both of its trees are + * already here (`loaded(root, W)`). `diffTrees` is model.js's. */ + function changedPaths(W, before, after, { diffTrees, loaded = () => true }) { + const out = {}, roots = W.engine.s.roots; + for (const [ref, root] of Object.entries(after)) if (before[ref] && root && before[ref] !== root && loaded(before[ref], W) && loaded(root, W)) out[ref] = new Set(diffTrees(roots[before[ref]], roots[root]).map((d) => d.path)); + return out; + } + //#endregion + //#region ../model/src/attribution.js + const newAgent = () => ({ + lastLoc: { kind: "bench" }, + lastT: -99 + }); + /** A fresh view over `engine` (anything with `s`, `markersIn` and `dirtyOf`). */ + function createView$1(engine, { lead = "main" } = {}) { + return { + engine, + lead, + clock: 0, + seq: 0, + tick: 0, + agents: { [lead]: newAgent() }, + panes: {}, + fsLog: {}, + hist: [], + attrib: {}, + touched: {}, + names: {}, + sbBy: {}, + sbAt: {}, + flash: {}, + newNodes: /* @__PURE__ */ new Set(), + lastTab: "main", + last: null, + check: null + }; + } + /** Calls that run in a mounted Workspace and print in its pane (cli.js: at "workspace"); mount opens the pane. */ + const inPane = (call) => routeOf(call).at === "workspace" && call !== "sandbox.mount"; + /** One agent call before it runs: the Workspace it runs in (the one the step + * binds or names, else the agent's latest), and its arguments with Sandbox + * names resolved. `st` is `{ a, call, args, sh?, ws?, bind?, group?, as? }`. */ + function prepare(W, st) { + const n = st.a, A = W.agents[n] ||= newAgent(), s = W.engine.s; + let call = st.call, args = { ...st.args }; + const bind = st.bind || (st.ws ? W.names[st.ws] : A.ws); + const sb = bind && s.sandboxes[bind.sandbox], mine = sb && sb.workspaces[bind.path]; + const pane = bind && `${bind.sandbox}:${bind.path}`; + const paneCall = !!st.sh || inPane(call); + let branch; + if (paneCall) { + Object.assign(args, bind); + branch = mine ? mine.branch : st.branch; + } + if (call === "process.cancel" && !args.process) { + const run = sb ? sb.procOrder.map((id) => sb.processes[id]).filter((x) => x.path === bind.path && x.status === "running") : []; + args = { + sandbox: bind.sandbox, + process: run.length ? run[run.length - 1].id : "none" + }; + } + if (args.sandbox && typeof W.names[args.sandbox] === "string") args.sandbox = W.names[args.sandbox]; + if (call === "sandbox.mount") branch = args.branch; + if (st.sh) call = "sandbox.exec"; + return { + n, + A, + call, + args, + bind, + mine, + pane, + paneCall, + branch, + group: st.group || null, + seq: ++W.seq + }; + } + /** One agent call after it ran with outcome `o`: its terminal line, the + * agent's place, and the nodes, Branches and Sandboxes it made. `shOut` is a + * command's output lines; `calls` the SDK calls behind the line, with timing. */ + function record(W, st, p, o, shOut, calls) { + const { n, A, call, args, pane, paneCall, group, seq } = p, s = W.engine.s; + let branch = p.branch; + const out = outcome(call, o, shOut, args); + W.last = { + agent: n, + call, + step: st, + o, + node: nodeOf(o) + }; + A.out = outOf(call, o, W.tick); + if (W.last.node) W.attrib[W.last.node] ??= n; + if (o.ok && call === "sandbox.create") { + W.sbBy[o.result.id] = { made: n }; + if (st.as) W.names[st.as] = o.result.id; + } + if (o.ok && call === "sandbox.close") (W.sbBy[args.sandbox] ||= {}).closed = n; + const sbId = call === "sandbox.create" ? o.ok && o.result.id : args.sandbox; + if (sbId) { + const at = W.sbAt[sbId] ||= { + calls: 0, + execs: 0 + }; + at.last = W.clock; + at.calls = (at.calls || 0) + 1; + if (call === "sandbox.exec") at.execs = (at.execs || 0) + 1; + if (call === "sandbox.create") Object.assign(at, { + made: W.clock, + image: args.image || null + }); + if (o.ok && call === "sandbox.close") at.closed = W.clock; + } + if (o.ok && (o.code === "Forked" || o.code === "Merged")) W.attrib["fork:" + o.result.branch] = n; + const named = call === "sandbox.create" && !args.name && o.ok ? { + ...args, + name: o.result.id + } : args; + const route = routeOf(call), text = cliOf(call, named, st.sh), dim = !!route.dim; + if (route.at === "fs") { + branch = args.branch || args.ref; + (W.fsLog[branch] ||= []).push({ + agent: n, + text, + out, + t: seq, + dim, + calls, + group + }); + A.lastLoc = { + kind: "fs", + branch + }; + } else if (call === "sandbox.mount") if (o.ok) { + A.ws = { + sandbox: o.result.sandbox, + path: o.result.path + }; + if (st.as) W.names[st.as] = A.ws; + const k = `${A.ws.sandbox}:${A.ws.path}`; + W.panes[k] = { + agent: n, + born: seq, + branch, + lines: [{ + dim, + text, + out, + t: seq, + calls, + group + }] + }; + A.lastLoc = { + kind: "ws", + branch, + ws: k + }; + } else { + W.hist.push({ + agent: n, + text, + out, + t: seq, + calls, + group + }); + A.lastLoc = { kind: "hist" }; + } + else if (paneCall) { + (W.panes[pane] ||= { + agent: n, + born: seq, + lines: [] + }).lines.push({ + text, + out, + t: seq, + calls, + group, + dim + }); + if (call === "sandbox.unmount" && o.ok) { + Object.assign(W.panes[pane], { + left: seq, + branch: W.panes[pane].branch ?? branch + }); + const left = Object.keys(W.panes).filter((k) => k !== pane && W.panes[k].agent === n && (engWs(s, k) || {}).mounted).pop(); + if (left) { + const i = left.indexOf(":"); + A.ws = { + sandbox: left.slice(0, i), + path: left.slice(i + 1) + }; + A.lastLoc = { + kind: "ws", + branch: engWs(s, left).branch, + ws: left + }; + } else { + A.ws = null; + A.lastLoc = { kind: "bench" }; + } + A.lastBranch = branch; + } else A.lastLoc = { + kind: "ws", + branch, + ws: pane + }; + } else { + W.hist.push({ + agent: n, + text, + out, + t: seq, + calls, + group, + ...dim ? { dim } : {} + }); + A.lastLoc = { kind: "hist" }; + branch = call === "branch.publish" ? args.branch : args.name; + } + A.lastT = W.clock; + if (A.lastLoc.branch) A.lastBranch = A.lastLoc.branch; + if (branch && s.branches[branch]) W.touched[branch] = W.clock; + W.lastTab = route.at === "fs" || route.at === "workspace" || paneCall ? branch : "main"; + } + /** The outcome of an agent's last call in a step, for its pose. */ + const outOf = (call, o, tick) => ({ + call, + code: o.code, + ok: o.ok, + exit: o.ok && o.result ? o.result.exitCode || 0 : 0, + proc: call === "sandbox.exec" && !!(o.ok && o.result && o.result.process), + tick + }); + /** Demo steps: a background start reads as "running", so use the step's code when it says so. */ + const outCode = (call, o, code, tick) => ({ + ...outOf(call, o, tick), + proc: code === "running" || call === "sandbox.exec" && !!(o.ok && o.result && o.result.process) + }); + /** How many agents each kind of host draws before "+N". */ + const CAP$1 = { + row: 3, + term: 3, + bench: 6, + chip: 1 + }; + function where(W, n) { + const A = W.agents[n]; + if (!A) return null; + if (W.clock - A.lastT <= 12) return A.lastLoc; + const w = Object.values(W.ws).find((x) => x.agent === n); + return w ? { + kind: "ws", + branch: w.branch, + ws: w.id + } : { kind: "bench" }; + } + const idle = (W, n) => where(W, n).kind === "bench"; + const recentlyOn = (W, b) => Object.keys(W.agents).filter((n) => idle(W, n) && W.agents[n].lastBranch === b && W.clock - W.agents[n].lastT <= 90); + const agentsOn = (W, b) => Object.keys(W.agents).filter((n) => where(W, n).branch === b); + const conflicted = (W, b) => Object.values(W.ws).some((w) => w.branch === b && w.bad); + const mounted = (W, b) => Object.values(W.ws).some((w) => w.branch === b); + const retired = (W, b) => !agentsOn(W, b).length && !mounted(W, b) && !conflicted(W, b) && W.clock - W.branches[b].last > 120; + /** The Branch tabs to show: pinned, active, mounted, conflicted or recently + * touched, newest first, at most MAX_TABS (the active one always kept); the + * rest are hidden, or retired after RETIRE_S (newest first). */ + function visibleTabs(W, { pinned = {}, active = "main" } = {}) { + const show = W.order.filter((b) => pinned[b] || b === active || mounted(W, b) || conflicted(W, b) || W.clock - W.branches[b].last <= 30); + show.sort((x, y) => W.branches[y].last - W.branches[x].last); + const keep = show.slice(0, 6); + if (show.includes(active) && !keep.includes(active)) keep[keep.length - 1] = active; + const rest = W.order.filter((b) => !keep.includes(b)); + const old = rest.filter((b) => !pinned[b] && retired(W, b)).sort((x, y) => W.branches[y].last - W.branches[x].last); + return { + tabs: W.order.filter((b) => keep.includes(b)), + hidden: rest.filter((b) => !old.includes(b)), + retired: old + }; + } + /** The terminal an agent's location names, for the "last hit" highlight. */ + function locKey(l) { + return !l ? null : l.kind === "ws" ? "ws:" + l.ws : l.kind === "fs" ? "fs:" + l.branch : l.kind === "hist" ? "hist" : null; + } + //#endregion + //#region ../model/src/pose.js + const POSES$1 = [ + "idle", + "sleep", + "laptop", + "read", + "cheer", + "arms_open", + "heart", + "serve_tea", + "wave", + "conflict", + "refused", + "failed", + "run" + ]; + const LEAD_POSES = { + idle: "shy", + sleep: "sleepy", + laptop: "thinking", + read: "thinking", + cheer: "thumbs_up", + arms_open: "happy", + heart: "smug", + serve_tea: "happy", + wave: "happy", + conflict: "crying", + refused: "surprised", + failed: "angry" + }; + /** True while a running process belongs to Workspace `wsId` ("sb_01:/workspaces/2"). */ + function serving(W, wsId) { + const i = wsId.indexOf(":"), id = wsId.slice(0, i), sb = W.engine.s.sandboxes[id]; + return !!sb && (sb.procOrder || []).some((p) => sb.processes[p].status === "running" && `${id}:${sb.processes[p].path}` === wsId); + } + /** `mode` is the host the agent stands on ("bench", "row", "term", "pane", + * "chip"); `acting` is true for the agent(s) of the current step. */ + function poseOf(W, n, mode, acting) { + const A = W.agents[n], o = A.out && A.out.tick === W.tick ? A.out : null, l = where(W, n); + const mine = Object.values(W.ws).filter((w) => w.agent === n); + if (A.spawned === W.tick) return "wave"; + if (o && !o.ok) return o.code === "Conflict" ? "conflict" : "refused"; + if (o && o.code === "Committed") return "cheer"; + if (o && o.code === "Merged") return "arms_open"; + if (o && o.code === "Added") return "heart"; + if (o && o.proc) return "serve_tea"; + if (o && o.exit) return "failed"; + if (mine.some((w) => w.bad)) return "conflict"; + if (mode === "bench") return W.clock - A.lastT > 40 ? "sleep" : "idle"; + if (acting && l.kind === "ws") return "laptop"; + if (acting && (l.kind === "fs" || l.kind === "hist")) return "read"; + if (mine.some((w) => serving(W, w.id))) return "serve_tea"; + return "idle"; + } + /** A fan-out copy's pose: what its Workspace is doing. */ + const ghostPose = (W, w) => w.bad ? "conflict" : serving(W, w.id) ? "serve_tea" : "laptop"; + //#endregion + //#region ../model/src/fanout.js + function fanOf(W, n) { + const l = where(W, n), others = Object.values(W.ws).filter((w) => w.agent === n && !(l.kind === "ws" && l.ws === w.id)); + return { + n: others.length + (l.kind === "bench" ? 0 : 1), + others + }; + } + /** Where a copy stands for view tab `active`: the Branch row on main, the + * Branch's tab chip elsewhere, its pane on its own Branch tab. */ + function ghostSpot(active, w) { + if (active === "main") return { + loc: "row:" + w.branch, + mode: "row" + }; + if (w.branch !== active) return { + tab: w.branch, + mode: "chip" + }; + return { + loc: "ws:" + w.id, + mode: "pane" + }; + } + /** Where an agent stands for view tab `active`: a `data-loc` key, a tab chip, + * or nothing when this tab has nothing to say about it. */ + function spotOf(W, n, active, recently) { + const l = where(W, n); + if (l.kind === "bench") return active !== "main" && recently.includes(n) ? { + loc: "bench", + mode: "bench" + } : null; + if (active === "main") return l.kind === "hist" ? { + loc: "hist", + mode: "term" + } : { + loc: "row:" + l.branch, + mode: "row" + }; + if (l.kind === "hist") return { + tab: "main", + mode: "chip" + }; + if (l.branch !== active) return { + tab: l.branch, + mode: "chip" + }; + return l.kind === "ws" ? { + loc: "ws:" + l.ws, + mode: "pane" + } : { + loc: "fs:" + l.branch, + mode: "term" + }; + } + //#endregion + //#region ../model/src/mirror.js + var Mirror = class { + constructor() { + this.toLabel = /* @__PURE__ */ new Map(); + this.toReal = /* @__PURE__ */ new Map(); + this.next = { + C: 1, + L: 0, + R: 0, + sb: 1 + }; + this.slot = 0; + this.version = 0; + /** The project, for its numbered Sandboxes' labels. */ + this.project = null; + this.s = { + project: null, + main: null, + roots: {}, + commits: {}, + layers: {}, + branches: {}, + branchOrder: [], + sandboxes: {}, + sandboxOrder: [] + }; + } + label(kind, real) { + if (real === null || real === void 0) return null; + const known = this.toLabel.get(real); + if (known) return known; + const n = this.next[kind]++; + const label = kind !== "sb" ? `${kind}${n}` : /^\d+$/.test(real) && this.project ? `layerfs-${this.project}-${real}` : /^sb_[0-9a-f]{16,}$/.test(real) ? `sb_${String(n).padStart(2, "0")}` : real; + this.toLabel.set(real, label); + this.toReal.set(label, real); + return label; + } + /** A node id (Commit or Layer) the UI knows, or null. */ + node(real) { + return real ? this.toLabel.get(real) ?? null : null; + } + root(real) { + return this.label("R", real); + } + real(label) { + return this.toReal.get(label) ?? label; + } + /** A Commit id first seen in an answer: labelled now, recorded on refresh. */ + commitLabel(real) { + return this.label("C", real); + } + bump() { + this.version++; + } + /** Folds one `inspect.snapshot` answer (kind "ok") into the mirror. */ + absorb(snap, sandboxes) { + const s = this.s, before = JSON.stringify(s); + s.project = { name: snap.project }; + s.store = snap.store; + for (const c of [...snap.commits].sort((a, b) => a.time - b.time)) this.commitLabel(c.id); + for (const l of [...snap.layers].reverse()) this.absorbLayer(l); + const main = snap.branches.find((b) => b.name === "main"); + if (main) s.main = { head: this.label("L", main.base) }; + for (const c of [...snap.commits].sort((a, b) => a.time - b.time)) this.absorbCommit(c); + for (const b of snap.branches) { + if (b.name === "main") continue; + const known = s.branches[b.name]; + const base = this.label("L", b.base), head = this.node(b.head) ?? (b.head ? this.commitLabel(b.head) : null); + const from = this.node(b.forkedFrom) ?? base; + if (!known) { + s.branches[b.name] = { + name: b.name, + base, + head, + from, + slot: this.slot++ + }; + s.branchOrder.push(b.name); + } else Object.assign(known, { + base, + head, + from + }); + } + this.absorbWorkspaces(snap, sandboxes); + if (JSON.stringify(s) !== before) this.bump(); + } + absorbLayer(l) { + const id = this.label("L", l.id); + if (this.s.layers[id]) return; + this.s.layers[id] = { + id, + parent: this.node(l.parent), + root: this.root(l.root), + sourceBranch: l.sourceBranch ?? null, + sourceCommit: l.sourceCommit ? this.commitLabel(l.sourceCommit) : null, + logical: l.logical ?? null, + slot: this.slot++, + time: this.slot + }; + } + absorbCommit(c) { + const id = this.commitLabel(c.id); + if (this.s.commits[id]) return; + const record = { + id, + parent: this.node(c.parent), + root: this.root(c.root), + base: this.label("L", c.base), + branch: c.branch, + slot: this.slot++, + time: c.time, + by: c.via === "fs" ? "fs" : c.via === "merge" ? "merge" : "workspace", + via: c.via === "exec" ? "commit" : c.via, + message: c.message, + logical: c.logical, + newCanonical: c.newCanonical, + newStored: c.newStored, + newMetadata: c.newMetadata + }; + if (c.secondParent) { + record.mergedFrom = this.node(c.secondParent); + record.lww = this.ids(c.lww || []); + } + if (c.mergedFrom) record.merged = { + from: this.node(c.mergedFrom), + head: record.parent, + lww: this.ids(c.lww || []) + }; + if (c.displaced) { + const displaced = this.commitLabel(c.displaced); + if (this.s.commits[displaced]) this.s.commits[displaced].displacedBy = id; + } + this.s.commits[id] = record; + } + absorbWorkspaces(snap, sandboxes) { + const s = this.s; + for (const sb of sandboxes) { + const id = sb.label; + s.sandboxes[id] ||= { + id, + closed: false, + workspaces: {}, + wsOrder: [], + processes: {}, + procOrder: [] + }; + if (!s.sandboxOrder.includes(id)) s.sandboxOrder.push(id); + const box = s.sandboxes[id]; + box.closed = sb.closed; + for (const path of box.wsOrder) box.workspaces[path].mounted = false; + const views = (snap.sandboxes.find((x) => x.id === sb.real) || { workspaces: [] }).workspaces; + for (const w of views) { + if (!w.mounted || !w.directory) continue; + const path = w.directory; + const tracked = sb.workspaces[path] || {}; + const ws = box.workspaces[path] ||= { + sandbox: id, + path, + slot: this.slot++, + times: {} + }; + if (!box.wsOrder.includes(path)) box.wsOrder.push(path); + const dirty = w.dirty ? Math.max(w.dirty.inodes, w.dirty.entries) : 0; + Object.assign(ws, { + branch: w.branch, + baseCommit: this.node(w.base), + baseLayer: this.label("L", w.baseLayer), + baseRoot: this.root(w.root), + mounted: true, + live: null, + dirty, + overlay: tracked.overlay ?? null, + pendingMerge: w.pendingMerge, + stale: w.headMovedSinceMount === true, + markers: (tracked.changes?.items || []).filter((c) => c.markers).map((c) => c.path), + changes: tracked.changes + }); + } + box.processes = {}; + box.procOrder = []; + for (const p of sb.processes) { + box.processes[p.id] = { + id: p.id, + path: p.path, + command: p.command, + status: p.status + }; + box.procOrder.push(p.id); + } + } + } + /** Branches mounted by Workspaces: `sb:/workspaces/N` keys, like Sim.liveMountsOf. */ + liveMountsOf(branch) { + const out = []; + for (const id of this.s.sandboxOrder) { + const sb = this.s.sandboxes[id]; + if (sb.closed) continue; + for (const p of sb.wsOrder) if (sb.workspaces[p].mounted && sb.workspaces[p].branch === branch) out.push(`${id}:${p}`); + } + return out; + } + /** Text with every known Commit, Layer or Sandbox id shown as its display + * id (conflict markers name a Commit; refusals name a Sandbox). */ + text(value) { + return typeof value === "string" ? value.replace(/\b(?:[0-9a-f]{66}|sb_[0-9a-f]+)\b/g, (id) => this.toLabel.get(id) ?? id) : value; + } + /** Maps every real id inside an SDK answer to its display id. */ + ids(value) { + if (Array.isArray(value)) return value.map((v) => this.ids(v)); + if (value && typeof value === "object") return Object.fromEntries(Object.entries(value).map(([k, v]) => [k, this.ids(v)])); + if (typeof value === "string" && /^[0-9a-f]{64,68}$/.test(value)) { + if (this.toLabel.has(value)) return this.toLabel.get(value); + if (value.length === 64) return this.root(value); + return value.startsWith("12") ? this.commitLabel(value) : this.label("L", value); + } + return value; + } + }; + //#endregion + //#region ../model/src/sources/trace.js + const EMPTY$1 = Object.freeze({}); + /** A traced call's time: the SDK call as the calling process measured it. */ + const timingOf = (line) => ({ + totalMs: line.ms || 0, + sdkMs: line.ms || 0, + traced: true + }); + /** The `layerfs_trace` lines of a JSONL text; other lines are skipped. */ + function parseTrace(text) { + const out = []; + for (const raw of String(text).split("\n")) { + if (!raw.trim()) continue; + try { + const line = JSON.parse(raw); + if (line && line.layerfs_trace === 1) out.push(line); + } catch {} + } + return out; + } + /** End lines in call order (start time, then id), without start lines. */ + function endLines(lines) { + return lines.filter((l) => l.phase !== "start").sort((x, y) => Date.parse(x.start) - Date.parse(y.start) || seqOf(x) - seqOf(y)); + } + const seqOf = (line) => Number(String(line.id).split("-").pop()) || 0; + /** A read-only engine over trace lines, with the surface the views read. */ + var ReplayEngine = class { + /** + * @param {object} [o] + * @param {string} [o.project] project name for the views + * @param {object} [o.files] the Files pane's reads by real id (view/src/filesource.js) + */ + constructor({ project = "project", files = null } = {}) { + this.m = new Mirror(); + this.m.project = project; + this.project = project; + this.live = true; + this.replay = true; + this.published = false; + this.initAlias = null; + /** Set when the engine starts from the project's history (the chat's History): + * a call naming a node it already holds never moves a pointer back. */ + this.seeded = false; + this.onchange = null; + this.files = files; + } + get s() { + return this.m.s; + } + rootOf(id) { + return this.files ? id : null; + } + layer(real) { + if (!real) return null; + const m = this.m, s = this.s; + if (m.toLabel.has(real)) return m.toLabel.get(real); + if (this.initAlias && !this.published) { + const label = this.initAlias; + this.initAlias = null; + m.toLabel.set(real, label); + m.toReal.set(label, real); + return label; + } + const id = m.label("L", real); + if (!s.layers[id]) s.layers[id] = { + id, + parent: null, + root: this.rootOf(id), + sourceBranch: null, + sourceCommit: null, + slot: m.slot++ + }; + if (!s.main) s.main = { head: id }; + this.ensureProject(); + return id; + } + commit(real) { + return real ? this.m.commitLabel(real) : null; + } + sandbox(real) { + if (!real) return null; + const id = this.m.label("sb", real), s = this.s; + if (!s.sandboxes[id]) { + s.sandboxes[id] = { + id, + closed: false, + workspaces: {}, + wsOrder: [], + processes: {}, + procOrder: [] + }; + s.sandboxOrder.push(id); + } + return id; + } + ref(real) { + if (typeof real !== "string") return real; + return /^[0-9a-f]{64,68}$/.test(real) ? this.m.toLabel.get(real) ?? (real.startsWith("12") ? this.commit(real) : this.layer(real)) : real; + } + ensureProject() { + this.s.project ||= { name: this.project }; + } + initialize() { + this.ensureProject(); + if (this.s.main) return this.s.main.head; + const id = this.m.label("L", `init:${this.project}`); + this.s.layers[id] = { + id, + parent: null, + root: this.rootOf(id), + sourceBranch: null, + sourceCommit: null, + slot: this.m.slot++ + }; + this.s.main = { head: id }; + this.initAlias = id; + return id; + } + branch(name, fields) { + const s = this.s; + if (!s.branches[name]) { + s.branches[name] = { + name, + base: null, + head: null, + from: null, + slot: this.m.slot++ + }; + s.branchOrder.push(name); + } + return Object.assign(s.branches[name], fields); + } + /** A new Commit on `branch` (or the known one, for an UpToDate or fast-forward head). */ + addCommit(real, branch, fields) { + const id = this.commit(real), s = this.s; + if (!s.commits[id]) { + const b = s.branches[branch]; + s.commits[id] = { + id, + parent: b ? b.head : null, + root: this.rootOf(id), + branch, + slot: this.m.slot++, + ...fields + }; + } + if (s.branches[branch]) this.advance(s.branches[branch], "head", id); + return id; + } + /** Moves `holder[key]` to node `id`, unless a seeded engine already holds a later node there. */ + advance(holder, key, id) { + if (this.forward(holder[key], id)) holder[key] = id; + } + forward(now, next) { + const s = this.s, slotOf = (x) => (s.commits[x] ?? s.layers[x])?.slot; + const a = slotOf(now), b = slotOf(next); + return !this.seeded || a === void 0 || b === void 0 || b >= a; + } + workspace(sb, path) { + const box = this.s.sandboxes[sb]; + return box && box.workspaces[path]; + } + /** Applies one end line and returns the call's outcome envelope, with display ids. */ + apply(raw) { + const line = older(raw), a = line.args || {}, s = this.s; + if (!line.ok) { + if (line.method === "sandbox.commit" && line.code === "Conflict") { + const w = this.workspace(this.sandbox(a.sandbox), a.path); + if (w) w.markers = ["(conflict)"]; + } + return { + ok: false, + code: line.code || "Refused", + refusal: { + message: this.m.text(line.message || ""), + conflicts: [] + }, + replay: true, + timing: timingOf(line) + }; + } + const ok = (code, result) => ({ + ok: true, + code, + result, + replay: true, + timing: timingOf(line) + }); + switch (line.method) { + case "project.init": { + const head = this.initialize(); + return ok("Initialized", { + kind: "Initialized", + project: s.project.name, + main: { headLayer: head } + }); + } + case "branch.fork": { + const base = this.layer(line.base), head = this.commit(line.head); + if (this.seeded && s.branches[line.branch]) return ok("Forked", { + kind: "Forked", + branch: line.branch, + base, + head + }); + const from = a.from && a.from !== "main" && s.branches[a.from] ? s.branches[a.from].head || "fork:" + a.from : head || base; + this.branch(line.branch, { + base, + head, + from + }); + return ok("Forked", { + kind: "Forked", + branch: line.branch, + base, + head + }); + } + case "branch.merge": { + const left = s.branches[a.branch], right = s.branches[a.with]; + const label = this.m.node(line.head), known = label ? s.commits[label] : null; + if (!line.head) { + const onto = a.with === "main" || a.branch === "main" ? s.main && s.main.head : right ? right.base : null; + this.branch(line.branch, { + base: onto || (left ? left.base : null), + head: null, + from: "fork:" + a.branch + }); + return ok("Merged", { + kind: "Merged", + branch: line.branch, + head: null, + fastForward: false + }); + } + if (!(this.seeded && s.branches[line.branch])) this.branch(line.branch, { + base: left ? left.base : null, + from: left ? left.head || "fork:" + a.branch : null + }); + const head = known ? known.id : this.addCommit(line.head, line.branch, { + parent: left ? left.head : null, + mergedFrom: right ? right.head : null, + message: a.message || `merge ${a.branch} ${a.with}`, + via: "merge" + }); + this.advance(s.branches[line.branch], "head", head); + return ok("Merged", { + kind: "Merged", + branch: line.branch, + head, + fastForward: !!known + }); + } + case "branch.publish": { + const commit = this.commit(line.commit), id = this.m.label("L", line.layer); + s.layers[id] ||= { + id, + parent: s.main ? s.main.head : null, + root: this.rootOf(id), + sourceBranch: a.branch, + sourceCommit: commit, + slot: this.m.slot++ + }; + if (!s.main || this.forward(s.main.head, id)) s.main = { head: id }; + this.published = true; + return ok("Added", { + kind: "Added", + source: { + branch: a.branch, + commit + }, + publishedLayer: { id } + }); + } + case "sandbox.create": { + const id = this.sandbox(line.sandbox); + if (s.sandboxes[id].closed) s.sandboxes[id] = { + id, + closed: false, + workspaces: {}, + wsOrder: [], + processes: {}, + procOrder: [] + }; + return ok("Ready", { + kind: "Ready", + id + }); + } + case "sandbox.close": { + const id = this.sandbox(a.sandbox); + s.sandboxes[id].closed = true; + return ok("Closed", { + kind: "Closed", + id + }); + } + case "sandbox.mount": { + const id = this.sandbox(line.sandbox || a.sandbox), box = s.sandboxes[id], path = line.path; + const baseCommit = this.commit(line.base), baseLayer = this.layer(line.baseLayer); + if (!box.workspaces[path]) box.wsOrder.push(path); + box.workspaces[path] = { + sandbox: id, + path, + branch: line.branch || a.branch, + baseCommit, + baseLayer, + mounted: true, + markers: [], + dirty: 0, + slot: this.m.slot++ + }; + return ok("Mounted", { + kind: "Mounted", + sandbox: id, + path, + branch: line.branch || a.branch, + base: baseCommit || baseLayer + }); + } + case "sandbox.unmount": { + const w = this.workspace(this.sandbox(a.sandbox), a.path); + if (w) w.mounted = false; + return ok("Unmounted", { kind: "Unmounted" }); + } + case "sandbox.commit": { + const w = this.workspace(this.sandbox(a.sandbox), a.path); + if (line.kind !== "Committed" || !w) return ok(line.kind || "UpToDate", { + kind: line.kind, + head: this.commit(line.commit) + }); + const head = this.addCommit(line.commit, w.branch, { + message: a.message || "", + via: "commit" + }); + Object.assign(w, { + baseCommit: head, + markers: [] + }); + return ok("Committed", { + kind: "Committed", + head + }); + } + case "sandbox.exec": return ok(line.kind || "ok", { exitCode: line.exitCode ?? 0 }); + case "operator.process.start": { + const box = s.sandboxes[this.sandbox(a.sandbox)]; + box.processes[line.process] = { + id: line.process, + path: a.path, + command: a.command, + status: "running" + }; + box.procOrder.push(line.process); + return ok("running", { process: line.process }); + } + case "operator.process.cancel": { + const p = s.sandboxes[this.sandbox(processSandbox(a))].processes[a.process]; + if (p) p.status = "stopped"; + return ok("Stopped", { + kind: "Stopped", + process: a.process, + status: "stopped" + }); + } + } + if (/^fs\.(write|edit|apply|mkdir|rm|cp|mv)$/.test(line.method) && line.commit) { + if (line.kind === "UpToDate") return ok("UpToDate", { + kind: "UpToDate", + head: this.commit(line.commit) + }); + return ok("Committed", { + kind: "Committed", + head: this.addCommit(line.commit, a.branch, { + message: a.message || line.method.slice(3), + via: "fs" + }) + }); + } + return ok(line.kind || "ok", {}); + } + markersIn(ws) { + return ws.markers || []; + } + dirtyOf(ws) { + return ws.dirty || 0; + } + storage() { + return null; + } + overlayOf() { + return null; + } + storedSize() { + return null; + } + fileReport() { + return { + rows: [], + revisions: null, + logical: null, + unique: null, + stored: null, + metadata: null, + pending: false, + replay: true + }; + } + async poll() { + return false; + } + liveMountsOf(branch) { + const s = this.s, out = []; + for (const id of s.sandboxOrder) { + const sb = s.sandboxes[id]; + if (sb.closed) continue; + for (const p of sb.wsOrder) if (sb.workspaces[p].mounted && sb.workspaces[p].branch === branch) out.push(`${id}:${p}`); + } + return out; + } + resolve(ref) { + const s = this.s, refuse = (code, message) => { + throw Object.assign(new Error(message), { code }); + }; + if (ref === "main") { + const l = s.layers[s.main.head]; + return { + label: `main @ ${l.id}`, + kind: "main", + root: l.root, + tree: EMPTY$1, + layer: l.id + }; + } + if (s.commits[ref]) return { + label: ref, + kind: "commit", + root: s.commits[ref].root, + tree: EMPTY$1, + commit: ref + }; + if (s.layers[ref]) return { + label: ref, + kind: "layer", + root: s.layers[ref].root, + tree: EMPTY$1, + layer: ref + }; + if (ref.includes(":/")) return { + label: `${ref} (live)`, + kind: "live", + root: null, + tree: EMPTY$1, + workspace: ref + }; + const b = s.branches[ref] || refuse("NoSuchBranch", `no Branch named ${ref}`); + const node = b.head || b.base; + return { + label: `${b.name} @ ${node}`, + kind: "branch", + root: this.rootOf(node), + tree: EMPTY$1, + head: b.head + }; + } + }; + /** + * A line of the Workspace API (#373) under the older SDK's call names, which + * the model draws: `workspace.mount` is `sandbox.mount` and so on. Lines name + * the Workspace's Sandbox as before (the mount's result, the others' args). + */ + const WORKSPACE = new Set([ + "workspace.mount", + "workspace.exec", + "workspace.status", + "workspace.commit", + "workspace.unmount" + ]); + const older = (line) => WORKSPACE.has(line.method) ? { + ...line, + method: `sandbox.${line.method.slice(10)}` + } : line; + /** The Sandbox of a process call: its args', or the one its id names (`proc__`). */ + const processSandbox = (a) => a.sandbox ?? /^proc_(\d+)_/.exec(String(a.process))?.[1]; + /** Calls that only the client makes for itself, or reads with no line of their own. */ + const SKIP = (method) => method === "sandbox.service" || method.startsWith("operator.") && method !== "operator.process.start" && method !== "operator.process.cancel"; + /** The agent step a trace line stands for, in the story's call names, with + * its Workspace bound by the ids on the line; null for a line not drawn. */ + function stepOf(E, raw, agent) { + const line = older(raw); + if (SKIP(line.method)) return null; + const a = line.args || {}, base = { + a: line.agent || agent, + group: line.step || null + }; + const bind = (path) => ({ + sandbox: E.m.toLabel.get(a.sandbox) ?? E.sandbox(a.sandbox), + path + }); + switch (line.method) { + case "project.init": return { + ...base, + call: "project.init", + args: { + name: E.project, + path: a.path + } + }; + case "branch.fork": return a.from && a.from !== "main" ? { + ...base, + call: "branch.fork", + args: { + name: a.name, + branch: E.ref(a.from) + } + } : { + ...base, + call: "main.fork", + args: { name: a.name } + }; + case "sandbox.create": return { + ...base, + call: "sandbox.create", + args: { + name: a.name, + project: E.project, + image: a.image + } + }; + case "sandbox.mount": return { + ...base, + call: "sandbox.mount", + args: { + branch: a.branch, + sandbox: E.sandbox(a.sandbox ?? line.sandbox) + } + }; + case "sandbox.close": return { + ...base, + call: "sandbox.close", + args: { sandbox: E.sandbox(a.sandbox) } + }; + case "sandbox.exec": return { + ...base, + sh: a.command, + args: {}, + bind: bind(a.path) + }; + case "operator.process.start": return { + ...base, + sh: a.command, + args: { background: true }, + bind: bind(a.path) + }; + case "operator.process.cancel": { + const id = E.sandbox(processSandbox(a)), p = E.s.sandboxes[id].processes[a.process]; + return { + ...base, + call: "process.cancel", + args: { process: a.process }, + bind: { + sandbox: id, + path: p ? p.path : a.path + } + }; + } + case "sandbox.commit": + case "sandbox.unmount": + case "sandbox.status": return { + ...base, + call: line.method, + args: { + message: a.message, + force: a.force, + discard: a.discard + }, + bind: bind(a.path) + }; + } + const args = Object.fromEntries(Object.entries(a).map(([k, v]) => [k, k === "ref" || k === "from" || k === "to" || k === "commit" ? E.ref(v) : v])); + return { + ...base, + call: line.method, + args + }; + } + /** Replays one end line into view `W` (whose engine is a ReplayEngine): + * the engine state first, then the agent's terminal line and place. */ + function replayLine(W, line, { agent = W.lead, t0 = null } = {}) { + const E = W.engine; + if (t0 !== null) W.clock = Math.max(W.clock, Math.round((Date.parse(line.start) - t0 + (line.ms || 0)) / 1e3)); + const st = stepOf(E, line, agent); + const p = st && prepare(W, st); + const o = E.apply(line); + const services = W.services ||= {}, real = line.args && line.args.sandbox; + if (line.method === "sandbox.service" && line.ok && line.sandbox) services[line.sandbox] = line.agent || agent; + if (real && services[real] && E.m.toLabel.has(real)) W.sbBy[E.m.toLabel.get(real)] ||= { + made: services[real], + service: true + }; + if (!st) return null; + record(W, st, p, o, null, [{ + call: p.call, + code: o.code, + timing: timingOf(line) + }]); + return o; + } + /** Story steps for trace lines: one step per drawn end line. */ + function traceSteps(lines, { agent = "main", label = (line) => `${line.method}${line.step ? " · " + line.step : ""}` } = {}) { + const ends = endLines(lines), t0 = ends.length ? Date.parse(ends[0].start) : 0, steps = []; + let pending = []; + for (const line of ends) { + pending.push(line); + if (SKIP(line.method)) continue; + const batch = pending; + pending = []; + steps.push({ + a: line.agent || agent, + label: label(line), + line, + replay: (W) => { + for (const l of batch) replayLine(W, l, { + agent, + t0 + }); + } + }); + } + return steps; + } + //#endregion + //#region ../model/src/events.js + /** The events of trace lines, in call order, for tests and inspection. */ + function traceEvents(lines, agent = "main") { + return endLines(lines).map((l) => ({ + agent: l.agent || agent, + call: l.method, + args: l.args, + group: l.step || null, + outcome: l.ok ? { + ok: true, + code: l.kind || "ok" + } : { + ok: false, + code: l.code + }, + timing: { totalMs: l.ms } + })); + } + //#endregion + //#region ../model/src/sources/story.js + /** A view for a story, with a terminal engine (`Engine`) for demo stories. */ + function storyView(engine, { lead = "main", demo = null, Engine = null } = {}) { + const W = createView$1(engine, { lead }); + if (demo) { + W.demo = { + e: new Engine(engine, "website"), + fs: {}, + sb: {}, + st: {}, + active: "main", + code: {} + }; + if (demo.roster) W.demo.e.actor = "lead"; + } + return derive(W); + } + /** Runs one story step and rederives the view. */ + async function runStep(W, st, env) { + const before = rootsOf(W), known = new Set(Object.keys(W.nodes)); + W.last = null; + W.check = null; + W.tick = (W.tick || 0) + 1; + if (st.demo) { + W.clock += 2; + await runDemo(W, st, env); + } else if (st.burst) { + W.clock += 4; + for (const e of st.burst) await runCall(W, e, env); + W.lastTab = st.tab; + } else if (st.script) { + W.clock += 4; + for (const c of st.calls) await runCall(W, { + a: st.a, + group: st.script, + ...c + }, env); + if (st.tab) W.lastTab = st.tab; + } else if (st.call === "dsh.view") W.lastTab = st.tab; + else if (st.call === "dsh.spawn") { + W.clock += 4; + for (const n of st.args.agents) (W.agents[n] ||= newAgent()).spawned = W.tick; + } else if (st.call === "dsh.idle") W.clock += st.args.seconds; + else if (st.replay) await st.replay(W, st); + else { + W.clock += 4; + await runCall(W, st, env); + } + derive(W); + W.newNodes = new Set(Object.keys(W.nodes).filter((id) => !known.has(id))); + W.flash = env.diffTrees ? changedPaths(W, before, rootsOf(W), env) : {}; + return W; + } + /** One SDK call on the engine, with its timing envelope and the inline Node + * script an agent would send. Live Init is the server's reset: a fresh + * volume and an Init of the same fixture. */ + async function sdkCall(W, env, calls, call, args) { + let o; + if (env.live && call === "project.init") { + const t0 = performance.now(); + o = await W.engine.reset(); + const s = W.engine.s; + o.result = { + kind: "Initialized", + project: s.project.name, + main: { headLayer: s.main.head } + }; + o.timing = { + totalMs: performance.now() - t0, + reset: true + }; + } else o = await W.engine.run(call, args); + calls.push({ + call, + code: o.code, + timing: o.timing, + script: env.scriptFor ? env.scriptFor({ + call, + args + }, (W.engine.s.project || {}).name || "website") : void 0 + }); + return o; + } + async function runCall(W, st, env) { + const p = prepare(W, st), calls = []; + let s = W.engine.s, shOut = null, o; + const { call, args, mine, bind } = p; + if (st.sh) { + const r = env.live ? env.liveCommand(st.sh) : env.simulateShell(st.sh, mine, s.sandboxes[bind.sandbox]); + shOut = r.out || null; + if (r.refuse) o = { + ok: false, + code: "ShellRefused", + refusal: { message: r.out.map((x) => x.t).join(" ") } + }; + else if (env.live) { + o = await sdkCall(W, env, calls, call, { + ...args, + command: r.command, + background: r.background || void 0 + }); + shOut = o.ok ? env.execLines(o.result) : []; + } else o = await sdkCall(W, env, calls, call, { + ...args, + command: st.sh, + writes: r.writes, + output: r.out.map((x) => x.t).join("\n"), + exitCode: r.code, + background: r.background || void 0 + }); + } else o = await sdkCall(W, env, calls, call, args); + s = W.engine.s; + if (env.live && call === "fs.read" && o.ok && s.branches[args.ref]) o.result.snapshot = `${args.ref} @ ${s.branches[args.ref].head || s.branches[args.ref].base}`; + record(W, st, p, o, shOut, calls); + } + /** Frames for a demo story; `fixture` is the Init files, `schedule` demo.js's. */ + function demoFrames(story, { lead, fixture, schedule }) { + const escT = (t) => String(t).replace(/[&<>]/g, (c) => ({ + "&": "&", + "<": "<", + ">": ">" + })[c]); + const out = [{ + a: lead, + call: "project.init", + args: { + name: "website", + files: fixture + }, + cap: `${escT(story.title)} · a LayerFS demo story, played by dsh. Every call is made by an agent, and the UI shows who.`, + w: 1 + }]; + story.steps.forEach((st, i) => { + const cap = st.note ? (st.act ? `${escT(st.act)} · ` : "") + escT(st.note) : null; + const w = st.beat || !story.roster ? 1 : .55; + const base = { + demo: st, + index: i + }; + if (st.agent || st.burst) { + const evs = schedule(st).filter((e) => e.phase !== "think"); + evs.forEach((ev, k) => out.push({ + ...base, + ev, + a: ev.who, + cap: k ? null : cap, + last: k === evs.length - 1, + w: ev.phase === "mount" ? .35 : w, + label: `${ev.who} · ${ev.phase === "done" ? "commit + unmount" : ev.phase === "stop" ? "stop" : ev.phase === "mount" ? "mount" : ev.line}` + })); + return; + } + const who = st.ui === "agents" || st.milestone ? "dsh" : lead; + const label = st.ui === "agents" ? `spawn ${st.agents.join(", ")} on ${st.branch}` : st.milestone ? `${st.milestone} ${st.pct}% · ${st.caption}` : st.ui ? `${st.ui} ${st.as || st.term}` : `${st.term === "history" ? "project" : st.term === "fs" ? "fs" : st.term}> ${st.lines[0]}${st.lines.length > 1 ? " …" : ""}`; + out.push({ + ...base, + a: who, + cap: st.milestone ? `${escT(st.milestone)} ${st.pct}% · ${escT(st.caption)}` : cap, + last: true, + label, + w + }); + }); + return out; + } + const LIFTED = new Set(["sandbox.create"]); + /** One frame of a demo story, run on the terminal engine; its records become + * terminal lines, Workspace panes, agent locations and attribution. */ + async function runDemo(W, fr, env) { + const D = W.demo, e = D.e, st = fr.demo, n = fr.a, seq = ++W.seq, recs = []; + const liftCreates = (rec) => { + for (const c of rec.calls.filter((x) => x.call === "sandbox.create")) { + W.hist.push({ + agent: n, + text: cliOf("sandbox.create", { + ...c.args, + name: c.args?.name ?? (c.outcome.ok ? c.outcome.result.id : void 0) + }), + out: outcome(c.call, c.outcome), + t: seq, + calls: callsOf({ calls: [c] }) + }); + if (c.outcome.ok) { + W.sbBy[c.outcome.result.id] = { made: n }; + W.sbAt[c.outcome.result.id] = { + made: W.clock, + last: W.clock, + image: c.args?.image || null, + calls: 1, + execs: 0 + }; + } + } + return rec; + }; + const A = n === "dsh" ? null : W.agents[n] ||= newAgent(); + const wsBranch = (b) => { + const w = b && W.engine.s.sandboxes[b.sandbox] && W.engine.s.sandboxes[b.sandbox].workspaces[b.path]; + return w ? w.branch : D.active; + }; + const paneLine = (b, line) => { + const k = `${b.sandbox}:${b.path}`; + (W.panes[k] ||= { + agent: n, + born: seq, + lines: [] + }).lines.push({ + ...line, + t: seq + }); + return k; + }; + const inPane = (b, rec, text, dim) => { + const k = paneLine(b, { + text, + dim, + out: outLines(rec).filter((x) => !/^✓ created sb_/.test(x.t)), + calls: callsOf(rec, LIFTED) + }), branch = wsBranch(b); + W.panes[k].branch ??= branch; + if (rec.unmounted) W.panes[k].left = seq; + const at = W.sbAt[b.sandbox] ||= { + calls: 0, + execs: 0 + }; + at.last = W.clock; + at.calls++; + if (rec.calls?.some((c) => c.call === "sandbox.exec")) at.execs++; + A.lastLoc = rec.unmounted ? { kind: "bench" } : { + kind: "ws", + branch, + ws: k + }; + A.lastBranch = branch; + W.lastTab = branch; + W.touched[branch] = W.clock; + }; + let code = null; + if (st.branch) D.active = st.branch; + if (st.ui === "agents") { + for (const a of st.agents) { + D.st[a] = { + name: a, + branch: st.branch, + open: null, + sticky: null, + server: null + }; + Object.assign(W.agents[a] ||= newAgent(), { + lastLoc: { kind: "bench" }, + lastT: W.clock, + lastBranch: st.branch, + spawned: W.tick + }); + } + code = "ok"; + W.lastTab = st.branch; + } else if (st.milestone) code = "ok"; + else if (fr.ev) { + const ev = fr.ev, a = D.st[ev.who], b = ev.phase === "stop" ? a.server : a.open; + let rec = null; + if (ev.phase === "stop") rec = await e.agentStop(a); + else if (ev.phase === "mount") { + rec = liftCreates(await e.agentMount(a, st.on)); + if (rec.binding && !rec.reused) W.panes[`${rec.binding.sandbox}:${rec.binding.path}`] = { + agent: n, + born: seq, + lines: [] + }; + if (rec.binding) inPane(rec.binding, rec, rec.reused ? "reuse the kept Workspace" : `mount ${wsBranch(rec.binding)}`, true); + } else if (ev.phase === "exec" && b) rec = await e.agentExec(a, ev.line); + else if (ev.phase === "done" && b) rec = await e.agentFinish(a); + if (rec && ev.phase !== "mount") inPane(b || rec.binding, rec, ev.phase === "done" ? `commit -m "${n}: ${ev.line}"` : ev.phase === "stop" ? "stop the server" : ev.line); + if (rec) { + recs.push(rec); + if (!(ev.phase === "mount" && a.open)) code = rec.code; + } + } else if (st.ui === "open" || st.ui === "split") { + const o = await e.openSandbox(D.active, st.ui === "split" ? D.sb[st.from].sandbox : null); + liftCreates(o.rec); + recs.push(o.rec); + code = o.rec.calls.length ? o.rec.calls[o.rec.calls.length - 1].outcome.code : null; + if (o.binding) { + D.sb[st.as] = o.binding; + W.panes[`${o.binding.sandbox}:${o.binding.path}`] = { + agent: n, + born: seq, + lines: [] + }; + inPane(o.binding, o.rec, `${st.ui === "split" ? "split" : "open"} ${D.active}`, true); + } + } else if (st.ui === "stop") { + const b = D.sb[st.term], sb = W.engine.s.sandboxes[b.sandbox], rec = e.newRec(); + const proc = sb.procOrder.find((p) => sb.processes[p].path === b.path && sb.processes[p].status === "running"); + const o = await e.call(rec, "process.cancel", { + sandbox: b.sandbox, + process: proc + }); + rec.lines.push({ + t: o.ok ? `■ ${proc} stopped` : `✕ ${o.code}`, + c: o.ok ? "info" : "err" + }); + recs.push(rec); + code = o.code; + inPane(b, rec, `kill ${proc}`); + } else for (const line of st.lines) { + const at = D.active; + const rec = st.term === "history" ? await e.history(line) : st.term === "fs" ? await e.fs(at, line, D.fs[at] ||= {}) : await e.sandbox(D.sb[st.term], line); + recs.push(rec); + if (rec.calls.length) code = rec.calls[rec.calls.length - 1].outcome.code; + const entry = { + agent: n, + text: line, + out: outLines(rec), + t: seq, + calls: callsOf(rec), + dim: /^(cat|read|ls|blame|log|branches|diff)\b/.test(line) + }; + if (st.term === "history" || st.term === "fs" && at === "main") { + W.hist.push(st.term === "fs" ? { + ...entry, + text: "fs " + line + } : entry); + A.lastLoc = { kind: "hist" }; + W.lastTab = "main"; + } else if (st.term === "fs") { + (W.fsLog[at] ||= []).push(entry); + A.lastLoc = { + kind: "fs", + branch: at + }; + A.lastBranch = at; + W.lastTab = at; + W.touched[at] = W.clock; + } else { + const b = D.sb[st.term]; + inPane(b, rec, line); + if (rec.calls.some((c) => c.call === "sandbox.unmount" && c.outcome.ok)) A.lastLoc = { kind: "bench" }; + } + if (rec.forked) D.active = rec.forked; + if (rec.files && env.onFiles) env.onFiles(W.engine.s.branches[rec.files.subject] ? rec.files.subject : "main", rec.files); + } + if (A) A.lastT = W.clock; + const all = recs.flatMap((r) => r.calls), lastCall = all.filter((c) => !c.outcome.ok || [ + "Committed", + "Merged", + "Added" + ].includes(c.outcome.code) || c.call === "sandbox.exec").pop() || all[all.length - 1]; + if (A && lastCall) A.out = outCode(lastCall.call, lastCall.outcome, D.code[fr.index], W.tick); + for (const rec of recs) for (const c of rec.calls) { + const o = c.outcome, node = nodeOf(o); + if (node) { + W.attrib[node] = n; + W.last = { + agent: n, + call: c.call, + step: { sh: fr.ev && fr.ev.line }, + o, + node + }; + } + if (o.ok && (o.code === "Forked" || o.code === "Merged")) { + W.attrib["fork:" + o.result.branch] = n; + W.touched[o.result.branch] = W.clock; + } + if (o.ok && c.call === "branch.publish") W.touched[c.args.branch] = W.clock; + } + if (!W.last && n !== "dsh") { + const c = recs.flatMap((r) => r.calls).pop(); + if (c) W.last = { + agent: n, + call: c.call, + step: { sh: fr.ev && fr.ev.line }, + o: c.outcome, + node: null + }; + } + if (code !== null) D.code[fr.index] = code; + if (fr.last) { + const expect = env.live && st.live ? st.live : st.expect, got = D.code[fr.index] ?? "(none)"; + W.check = { + expect, + code: got, + ok: got === expect + }; + (W.checks ||= []).push({ + index: fr.index, + ...W.check + }); + } + } + //#endregion + //#region ../model/src/sources/records.js + const CALL = "plugin:layerfs/call"; + const PROJECT = "plugin:layerfs/project"; + /** Trace lines from records, each with `agent` set to the agent's name. */ + function recordLines(records) { + const out = []; + for (const r of records) { + if (!r || r.type !== "plugin:layerfs/call" || !r.data || !r.data.line) continue; + const agent = r.data.agent || {}; + out.push({ + ...r.data.line, + agent: agent.name || agent.id || "main", + agentId: agent.id || null + }); + } + return out; + } + /** The project a session's records bind it to: the latest project record. */ + function recordProject(records) { + let project = null; + for (const r of records) if (r && r.type === "plugin:layerfs/project" && r.data) project = r.data.project; + return project; + } + //#endregion + //#region ../model/src/index.js + var src_exports = /* @__PURE__ */ __exportAll({ + BCOL: () => BCOL, + CALL_S: () => 12, + CAP: () => CAP$1, + CLI: () => CLI, + FADE_S: () => 30, + LEAD_POSES: () => LEAD_POSES, + LINE_CLASS: () => LINE_CLASS, + MAX_TABS: () => 6, + Mirror: () => Mirror, + POSES: () => POSES$1, + RECENT_S: () => 90, + RECORD_CALL: () => CALL, + RECORD_PROJECT: () => PROJECT, + RETIRE_S: () => 120, + ReplayEngine: () => ReplayEngine, + agentsOn: () => agentsOn, + branchRoot: () => branchRoot, + bubbleOf: () => bubbleOf$1, + callsOf: () => callsOf, + changedPaths: () => changedPaths, + cliOf: () => cliOf, + commandOf: () => commandOf, + conflicted: () => conflicted, + createView: () => createView$1, + demoFrames: () => demoFrames, + derive: () => derive, + endLines: () => endLines, + engWs: () => engWs, + fanOf: () => fanOf, + ghostPose: () => ghostPose, + ghostSpot: () => ghostSpot, + idle: () => idle, + locKey: () => locKey, + mounted: () => mounted, + newAgent: () => newAgent, + nodeOf: () => nodeOf, + outCode: () => outCode, + outLines: () => outLines, + outOf: () => outOf, + outcome: () => outcome, + parseTrace: () => parseTrace, + poseOf: () => poseOf, + prepare: () => prepare, + recentlyOn: () => recentlyOn, + record: () => record, + recordLines: () => recordLines, + recordProject: () => recordProject, + replayLine: () => replayLine, + retired: () => retired, + rootsOf: () => rootsOf, + routeOf: () => routeOf, + runCall: () => runCall, + runStep: () => runStep, + sdkCall: () => sdkCall, + serving: () => serving, + spotOf: () => spotOf, + stepOf: () => stepOf, + storyView: () => storyView, + traceEvents: () => traceEvents, + traceSteps: () => traceSteps, + visibleTabs: () => visibleTabs, + where: () => where + }); + //#endregion + //#region ../view/src/fileicons.js + const FOLDER_TINT = { + ".git": "#E07A5A", + node_modules: "#9A958B", + ".next": "#5B6372", + dist: "#9A958B", + build: "#9A958B", + app: "#2F5BB5", + src: "#2F5BB5", + components: "#8A6BC8", + lib: "#3E9B74", + public: "#D29A2E", + tests: "#C8557A", + test: "#C8557A", + docs: "#2B8A9A", + scripts: "#3E9B74", + ".github": "#5B6372" + }; + const BY_NAME = { + "package.json": ["npm", "#C8452F"], + "package-lock.json": ["lock", "#9A958B"], + "yarn.lock": ["lock", "#9A958B"], + "pnpm-lock.yaml": ["lock", "#9A958B"], + "cargo.lock": ["lock", "#9A958B"], + dockerfile: ["dkr", "#2B8A9A"], + makefile: ["mk", "#5B6372"], + license: ["lic", "#8A8780"], + ".gitignore": ["git", "#E07A5A"], + ".env": ["env", "#D29A2E"], + "readme.md": ["i", "#2F5BB5"], + "cargo.toml": ["rs", "#B8502C"], + "tsconfig.json": ["ts", "#2F5BB5"] + }; + const BY_EXT = { + js: ["JS", "#C9A20B"], + mjs: ["JS", "#C9A20B"], + cjs: ["JS", "#C9A20B"], + jsx: ["JSX", "#1F8FAE"], + ts: ["TS", "#2F5BB5"], + tsx: ["TSX", "#1F8FAE"], + mts: ["TS", "#2F5BB5"], + json: ["{}", "#93650F"], + md: ["M↓", "#2F5BB5"], + mdx: ["M↓", "#2F5BB5"], + css: ["#", "#8A6BC8"], + scss: ["#", "#C8557A"], + html: ["<>", "#E07A5A"], + svg: ["svg", "#D29A2E"], + py: ["py", "#2F5BB5"], + rs: ["rs", "#B8502C"], + go: ["go", "#2B8A9A"], + sh: ["$", "#3E9B74"], + bash: ["$", "#3E9B74"], + zsh: ["$", "#3E9B74"], + yml: ["yml", "#C8452F"], + yaml: ["yml", "#C8452F"], + toml: ["tml", "#8A6B3A"], + sql: ["sql", "#2B8A9A"], + sqlite: ["db", "#2B8A9A"], + txt: ["txt", "#8A8780"], + log: ["log", "#8A8780"], + lock: ["lock", "#9A958B"], + env: ["env", "#D29A2E"], + png: ["img", "#3E9B74"], + jpg: ["img", "#3E9B74"], + jpeg: ["img", "#3E9B74"], + gif: ["img", "#3E9B74"], + webp: ["img", "#3E9B74"], + ico: ["ico", "#3E9B74"], + woff: ["font", "#8A8780"], + woff2: ["font", "#8A8780"], + ttf: ["font", "#8A8780"], + map: ["map", "#9A958B"], + pack: ["pk", "#9A958B"], + idx: ["idx", "#9A958B"] + }; + const FOLDER = (c, open) => ``; + /** The icon of a tree entry: `type` "dir" or "file". */ + function iconOf(name, type, open = false) { + const n = name.toLowerCase(); + if (type === "dir") return FOLDER(FOLDER_TINT[n] || "#C9A86A", open); + const ext = n.includes(".") ? n.slice(n.lastIndexOf(".") + 1) : ""; + const [t, c] = BY_NAME[n] || (n.startsWith(".env") ? BY_NAME[".env"] : null) || BY_EXT[ext] || ["", "#9A958B"]; + if (!t) return ``; + return ``; + } + //#endregion + //#region ../view/src/util.js + const esc = (s) => String(s).replace(/[&<>"]/g, (c) => ({ + "&": "&", + "<": "<", + ">": ">", + "\"": """ + })[c]); + const UNITS = [ + "B", + "KB", + "MB", + "GB", + "TB", + "PB" + ]; + /** Bytes in decimal units, to three significant figures: past 1000 a unit gives way to the next. */ + const fmtBytes = (n) => { + if (n == null) return "not reported"; + let i = 0; + while (Math.abs(n) >= 1e3 && i < UNITS.length - 1) { + n /= 1e3; + i++; + } + if (i === 0) return `${Math.round(n)} B`; + const fig = (x) => Math.abs(x) >= 100 ? x.toFixed(0) : Math.abs(x) >= 10 ? x.toFixed(1) : x.toFixed(2); + if (Math.abs(Number(fig(n))) >= 1e3 && i < UNITS.length - 1) { + n /= 1e3; + i++; + } + return `${fig(n)} ${UNITS[i]}`; + }; + const ratio = (a, b) => b > 0 ? `×${(a / b).toFixed(a / b >= 10 ? 0 : 1)}` : "–"; + const fmtMs = (ms) => (ms < 1 ? ms.toFixed(2) : ms < 1e3 ? ms.toFixed(0) : (ms / 1e3).toFixed(2) + " s").replace(/(\d)$/, "$1 ms").replace(/ s ms$/, " s"); + function timingText(t) { + if (!t) return ""; + if (t.simulated) return `${fmtMs(t.totalMs)} in the page (sim)`; + if (t.reset) return `${fmtMs(t.totalMs)} · server reset: new volume + Init`; + if (t.traced) return `${fmtMs(t.sdkMs)} SDK call, from its trace line`; + const http = Math.max(0, t.totalMs - (t.sdkMs || 0) - (t.refreshMs || 0)); + return `sdk ${fmtMs(t.sdkMs || 0)} · refresh ${fmtMs(t.refreshMs || 0)} · http ${fmtMs(http)}`; + } + function cmdTime(calls) { + const ts = (calls || []).map((c) => c.timing).filter(Boolean); + if (!ts.length) return ""; + const sum = ts.reduce((a, t) => a + (t.simulated || t.reset ? t.totalMs : t.sdkMs || 0), 0); + return `${fmtMs(sum)}${ts[0].simulated ? " sim" : ""}`; + } + //#endregion + //#region ../view/src/highlight.js + const MAX_BYTES = 4e5; + const words = (s) => new Set(s.split(" ")); + const JS_KW = words("as async await break case catch class const continue debugger default delete do else enum export extends finally for from function get if implements import in instanceof interface let new of package private protected public readonly return satisfies set static super switch this throw try type typeof var void while with yield keyof declare namespace module abstract override"); + const LIT = words("true false null undefined NaN Infinity None True False nil"); + const PY_KW = words("and as assert async await break class continue def del elif else except finally for from global if import in is lambda nonlocal not or pass raise return try while with yield match case self"); + const RS_KW = words("as async await break const continue crate dyn else enum extern fn for if impl in let loop match mod move mut pub ref return self Self static struct super trait type unsafe use where while"); + const GO_KW = words("break case chan const continue default defer else fallthrough for func go goto if import interface map package range return select struct switch type var"); + const SH_KW = words("if then else elif fi for while until do done case esac in function return local export readonly set unset shift exit source alias cd echo exec eval trap"); + const SQL_KW = words("select from where and or not insert into values update set delete create table index view drop alter add primary key foreign references join left right inner outer on group by order having limit offset as distinct union all exists in is null case when then else end begin commit rollback transaction pragma with recursive integer text blob real default unique check"); + const CSS_KW = words("important inherit initial unset none auto"); + function langOf(path) { + const name = path.slice(path.lastIndexOf("/") + 1).toLowerCase(), ext = name.includes(".") ? name.slice(name.lastIndexOf(".") + 1) : ""; + if (name === "dockerfile" || name === "makefile" || [ + "sh", + "bash", + "zsh", + "env" + ].includes(ext) || name.startsWith(".env")) return { + family: "hash", + kw: SH_KW, + label: name === "dockerfile" ? "Dockerfile" : name === "makefile" ? "Makefile" : "Shell" + }; + if ([ + "js", + "jsx", + "mjs", + "cjs" + ].includes(ext)) return { + family: "c", + kw: JS_KW, + label: "JavaScript", + jsx: true + }; + if ([ + "ts", + "tsx", + "mts", + "cts" + ].includes(ext)) return { + family: "c", + kw: JS_KW, + label: "TypeScript", + jsx: ext === "tsx" + }; + if ([ + "json", + "jsonc", + "json5" + ].includes(ext) || name === ".prettierrc" || name === ".eslintrc") return { + family: "c", + kw: /* @__PURE__ */ new Set(), + label: "JSON" + }; + if (["rs"].includes(ext)) return { + family: "c", + kw: RS_KW, + label: "Rust" + }; + if (["go"].includes(ext)) return { + family: "c", + kw: GO_KW, + label: "Go" + }; + if ([ + "c", + "h", + "cc", + "cpp", + "hpp", + "java", + "kt", + "swift", + "cs", + "scala", + "dart" + ].includes(ext)) return { + family: "c", + kw: words("auto break case char class const continue default do double else enum extern float for goto if int long new private protected public return short signed sizeof static struct switch this throw try typedef union unsigned void volatile while import package fun val var let func override final"), + label: ext.toUpperCase() + }; + if (["py", "pyi"].includes(ext)) return { + family: "hash", + kw: PY_KW, + label: "Python", + py: true + }; + if (["rb"].includes(ext)) return { + family: "hash", + kw: words("def end if elsif else unless while until for in do begin rescue ensure class module return yield self nil require"), + label: "Ruby" + }; + if ([ + "yml", + "yaml", + "toml", + "ini", + "cfg", + "conf", + "properties" + ].includes(ext) || name === ".gitignore" || name === ".npmrc" || name === ".dockerignore") return { + family: "hash", + kw: /* @__PURE__ */ new Set(), + label: ext === "toml" ? "TOML" : ext ? ext.toUpperCase() : "Config", + keys: true + }; + if ([ + "css", + "scss", + "less", + "sass" + ].includes(ext)) return { + family: "css", + kw: CSS_KW, + label: "CSS" + }; + if ([ + "html", + "htm", + "xml", + "svg", + "vue", + "svelte", + "plist" + ].includes(ext)) return { + family: "tag", + kw: /* @__PURE__ */ new Set(), + label: ext === "svg" ? "SVG" : ext === "xml" ? "XML" : "HTML" + }; + if ([ + "md", + "mdx", + "markdown" + ].includes(ext)) return { + family: "md", + kw: /* @__PURE__ */ new Set(), + label: "Markdown" + }; + if (["sql"].includes(ext)) return { + family: "c", + kw: SQL_KW, + label: "SQL", + ci: true, + dash: true + }; + return null; + } + const STR = [["str", /"(?:\\.|[^"\\\n])*"?/y], ["str", /'(?:\\.|[^'\\\n])*'?/y]]; + const NUM = ["num", /(?:0x[\da-fA-F_]+|\d[\d_]*(?:\.\d+)?(?:[eE][+-]?\d+)?)n?\b/y]; + const WORD = ["word", /[A-Za-z_$][\w$]*/y]; + const FAMILIES = { + c: (L) => [ + ["com", /\/\/[^\n]*/y], + ["com", /\/\*[\s\S]*?(?:\*\/|$)/y], + ...L.dash ? [["com", /--[^\n]*/y]] : [], + ...STR, + ["str", /`(?:\\[\s\S]|[^`\\])*`?/y], + ...L.jsx ? [["tag", /<\/?[A-Za-z][\w.]*(?=[\s>\/])/y], ["tag", /\/>/y]] : [], + NUM, + WORD + ], + hash: (L) => [ + ["com", /#[^\n]*/y], + ...L.py ? [["str", /"""[\s\S]*?(?:"""|$)/y], ["str", /'''[\s\S]*?(?:'''|$)/y]] : [], + ...STR, + ["var", /\$\{?[\w@#?*!-]+\}?/y], + NUM, + ["word", /[A-Za-z_][\w-]*/y] + ], + css: () => [ + ["com", /\/\*[\s\S]*?(?:\*\/|$)/y], + ...STR, + ["kw", /@[\w-]+/y], + ["num", /#[\da-fA-F]{3,8}\b/y], + ["num", /-?\d*\.?\d+(?:px|em|rem|%|s|ms|vh|vw|fr|ch|deg|dpi)?\b/y], + ["word", /-?[A-Za-z_][\w-]*/y] + ], + tag: () => [ + ["com", /|$)/y], + ["tag", /<\/?[\w:.-]+/y], + ["tag", /\/?>/y], + ["attr", /[\w:@.-]+(?=\s*=)/y], + ...STR + ], + md: () => [ + ["com", /|$)/y], + ["str", /```[\s\S]*?(?:```|$)/y], + ["str", /`[^`\n]*`?/y], + ["kw", /\*\*[^*\n]+\*\*/y], + ["fn", /\[[^\]\n]*\]\([^)\n]*\)/y] + ] + }; + const LINE_START = { + md: [ + ["kw", /#{1,6} [^\n]*/y], + ["op", /[ \t]*(?:[-*+]|\d+\.) /y], + ["com", /> [^\n]*/y] + ], + hash: [] + }; + /** Coloured lines of `text` (HTML), or null when the language is unknown or the file is large. */ + function highlightLines(text, path) { + const L = langOf(path); + if (!L || text.length > MAX_BYTES) return null; + const rules = FAMILIES[L.family](L), starts = LINE_START[L.family] || []; + const parts = []; + let i = 0, plain = ""; + const push = (cls, t) => { + if (plain) { + parts.push(["", plain]); + plain = ""; + } + parts.push([cls, t]); + }; + outer: while (i < text.length) { + if (i === 0 || text[i - 1] === "\n") { + for (const [cls, re] of starts) { + re.lastIndex = i; + const m = re.exec(text); + if (m) { + push(cls, m[0]); + i += m[0].length; + continue outer; + } + } + if (L.keys) { + const m = /[ \t]*-?[ \t]*([\w"'.@\/-]+)(?=[ \t]*[:=](?:\s|$))/y; + m.lastIndex = i; + const k = m.exec(text); + if (k) { + plain += k[0].slice(0, k[0].length - k[1].length); + push("prop", k[1]); + i += k[0].length; + continue; + } + } + } + for (const [cls, re] of rules) { + re.lastIndex = i; + const m = re.exec(text); + if (!m || !m[0]) continue; + const t = m[0]; + i += t.length; + if (cls === "word") { + const w = L.ci ? t.toLowerCase() : t, next = text.slice(i, i + 40).match(/^\s*(.)/)?.[1]; + if (L.kw.has(w)) push("kw", t); + else if (LIT.has(t)) push("lit", t); + else if (L.family === "css" && next === ":" && !/[.#&:]/.test(text[i - t.length - 1] || "")) push("prop", t); + else if (next === "(" || next === "!" && L.kw === RS_KW) push("fn", t); + else if (/^[A-Z][a-z]/.test(t) && L.family !== "hash") push("typ", t); + else plain += t; + } else if (cls === "str" && L.family === "c" && /^\s*:/.test(text.slice(i, i + 20)) && !text.slice(i).startsWith("::")) push("prop", t); + else push(cls, t); + continue outer; + } + plain += text[i++]; + } + if (plain) parts.push(["", plain]); + const lines = []; + let cur = ""; + for (const [cls, t] of parts) t.split("\n").forEach((s, k) => { + if (k > 0) { + lines.push(cur); + cur = ""; + } + if (s) cur += cls ? `${esc(s)}` : esc(s); + }); + lines.push(cur); + return lines; + } + //#endregion + //#region ../view/src/files.js + const COLLAPSE = [ + "/node_modules", + "/.git", + "/.next" + ]; + const INODE_BYTES = 73; + const bytesOf = (t) => new TextEncoder().encode(t || "").length; + const codeLines = (text, path, first = 1) => { + const lit = path ? highlightLines(text, path) : null; + return text.split("\n").map((t, i) => `
${i + first}${(lit ? lit[i] : esc(t)) || " "}
`).join(""); + }; + const CHEV = (open) => ``; + const indent = (depth) => depth ? `` : ""; + /** + * @param {object} v the view: W, FM (files helpers), lineDiff, live, + * rightMode, active, colorOf(agent), render() + */ + function createFiles(v) { + const FILES = {}; + const W = () => v.W, FM = v.FM; + const laneColor = (b) => !b || b === "main" ? "var(--purple)" : W().branches[b] ? `var(${W().branches[b].color})` : "var(--text-3)"; + const defaultBase = (tab) => tab === "main" ? "" : "fork:" + tab; + const filesOf = (tab) => FILES[tab] ||= { + at: "latest", + base: defaultBase(tab), + path: null, + toggled: [], + mode: "view", + list: "changes", + sdk: false, + wide: false + }; + const subjectOf = (tab, p) => p.at === "latest" ? tab : p.at; + const SRC = () => W().engine.files || null; + const savedOf = (ref) => { + const r = ref ? FM.resolveRef(W().engine, ref) : null, real = r && r.node ? W().engine.m?.toReal.get(r.node) : null; + return real ? { + node: r.node, + real + } : null; + }; + function lazyChanges(sub, base) { + const c = SRC().changes(base.real, sub.real), files = {}, types = {}, dirs = {}; + for (const it of c.items) { + if (it.type === "dir" && it.kind === "Modified") continue; + files[it.path] = it.kind === "Added" ? "A" : it.kind === "Removed" ? "D" : "M"; + types[it.path] = it.type; + for (let d = it.path.slice(0, it.path.lastIndexOf("/")); d; d = d.slice(0, d.lastIndexOf("/"))) dirs[d] = (dirs[d] || 0) + 1; + } + return { + files, + types, + dirs, + more: c.more, + loading: c.loading, + error: c.error + }; + } + function pointLabel(ref) { + if (!ref) return "nothing"; + if (ref === "main" || W().branches[ref]) return `${ref} · latest`; + if (ref.startsWith("fork:")) return `${ref.slice(5)} · fork point`; + const n = W().nodes[ref]; + return n ? `${n.branch || "main"} · ${ref}` : ref; + } + const dirOpen = (p, path) => COLLAPSE.includes(path) ? p.toggled.includes(path) : !p.toggled.includes(path); + function treeHtml(p, subj, base, ch, dir, depth, flash) { + return FM.listBoth(subj, base, dir).map((e) => { + const open = e.type === "dir" && dirOpen(p, e.path), k = ch && ch.files[e.path], roll = ch && !k && ch.dirs[e.path]; + return `
+ ${indent(depth)}${e.type === "dir" ? CHEV(open) : ""}${iconOf(e.name, e.type, open)}${esc(e.name)}${k ? `${k}` : roll ? `${roll}` : ""}
` + (open ? treeHtml(p, subj, base, ch, e.path, depth + 1, flash) : ""); + }).join(""); + } + function lazyTreeHtml(p, sub, ch, dir, depth, flash) { + const l = SRC().list(sub.real, dir), isDir = (e) => e.type === "dir"; + const items = [...l.items].sort((a, b) => isDir(a) === isDir(b) ? 0 : isDir(a) ? -1 : 1); + const note = (text, attrs = "") => `
${indent(depth)}${text}
`; + return items.map((e) => { + const open = isDir(e) && p.toggled.includes(e.path), k = ch && ch.files[e.path], roll = ch && !k && ch.dirs[e.path]; + return `
+ ${indent(depth)}${isDir(e) ? CHEV(open) : ""}${iconOf(e.name, e.type, open)}${esc(e.name)}${k ? `${k}` : roll ? `${roll}${ch.more ? "+" : ""}` : ""}
` + (open ? lazyTreeHtml(p, sub, ch, e.path, depth + 1, flash) : ""); + }).join("") + (l.error ? note(esc(l.error.message)) : l.loading ? note("Listing…") : l.more ? note(`Show the next 1,000 of ${esc(dir === "/" ? "/" : dir.slice(dir.lastIndexOf("/") + 1))}`, ` data-fmore="${esc(dir)}"`) : !items.length && depth === 0 ? note("No files: this version is empty.") : ""); + } + function lazyViewHtml(ref, p, tab) { + const r = SRC().read(ref.real, p.path, p.line || 1), w = r.value; + if (r.error) return `
${esc(r.error.message)}
`; + if (!w) return `
Reading ${esc(p.path)}…
`; + if (w.binary) return `
A binary file${w.size != null ? ` of ${fmtBytes(w.size)}` : ""}: it has no text to show.
`; + const text = w.text.endsWith("\n") ? w.text.slice(0, -1) : w.text, last = w.startLine + text.split("\n").length - 1; + const nav = (dir, label, on) => ``; + return (w.startLine > 1 || w.nextLine != null ? `
${nav("prev", "‹ Earlier", w.startLine > 1)}lines ${w.startLine.toLocaleString()}–${last.toLocaleString()}${w.size != null ? ` of ${fmtBytes(w.size)}` : ""}${w.lineTruncated ? " · a long line is cut short" : ""}${nav("next", "Later ›", w.nextLine != null)}
` : "") + `
${codeLines(text, p.path, w.startLine)}
`; + } + function lazyBlameHtml(subject, sub, p, tab) { + const r = SRC().blame(sub.real, p.path, p.line || 1), b = r.value; + if (r.error) return `
${esc(r.error.message)}
`; + if (!b) return `
Reading which Commit wrote each line…
`; + if (!b.lines.length) return `
${esc(p.path)} has no lines here.
`; + const labelOf = (real) => real ? W().engine.m?.toLabel.get(real) ?? real.slice(0, 12) : "?"; + const text = b.lines.map((ln) => String(ln.text ?? "").replace(/\r?\n$/, "")), lit = highlightLines(text.join("\n"), p.path); + let last = null; + const rows = b.lines.map((ln, i) => { + const id = labelOf(ln.commit), first = id !== last, c = W().engine.s.commits[id]; + last = id; + const color = id.startsWith("L") ? "var(--purple)" : laneColor(c && c.branch), attr = W().nodes[id] ? ` data-fblame="${esc(id)}"` : ""; + return `
${first ? esc(id) : ""}${ln.n}${(lit ? lit[i] : esc(text[i])) || " "}
`; + }).join(""); + const nav = (dir, label, on) => ``; + const first = b.lines[0].n, end = b.lines[b.lines.length - 1].n; + const bar = first > 1 || b.nextLine != null ? `
${nav("prev", "‹ Earlier", first > 1)}lines ${first.toLocaleString()}–${end.toLocaleString()}${nav("next", "Later ›", b.nextLine != null)}
` : ""; + return `
Blame at ${esc(pointLabel(subject))} · product attribution (fs.blame)${b.versions ? ` · ${b.versions} versions compared` : ""}
${bar}
${rows}
`; + } + const reportRef = (subject) => subject.startsWith("fork:") ? (FM.resolveRef(W().engine, subject) || {}).node || subject : subject; + function fileStats(subject, path) { + if (v.live) { + const f = W().engine.fileReport(reportRef(subject), path), k = { + added: "A", + modified: "M", + deleted: "D", + removed: "D" + }; + return { + ...f, + rows: f.rows.map((r) => ({ + ...r, + change: k[r.change] || r.change + })) + }; + } + const revs = FM.history(W().engine, subject, path), seen = /* @__PURE__ */ new Set(); + let logical = 0, unique = 0, stored = 0, pending = false; + return { + rows: [...revs].reverse().map((r) => { + if (r.content == null) return { + ...r, + size: 0, + added: 0, + stored: 0 + }; + const size = bytesOf(r.content), fresh = !seen.has(r.content); + logical += size; + let z = 0; + if (fresh) { + seen.add(r.content); + unique += size; + z = W().engine.storedSize(r.content); + if (z == null) { + pending = true; + z = size; + } + stored += z; + } + return { + ...r, + size, + added: fresh ? size : 0, + stored: fresh ? z : 0 + }; + }).reverse(), + revisions: revs.length, + logical, + unique, + stored, + pending, + metadata: revs.length * INODE_BYTES + }; + } + function fileStatsHtml(subject, p, sv) { + const e = sv.tree[p.path]; + if (!e || e.type !== "file") return ""; + const f = fileStats(subject, p.path), cur = v.live ? f.size : e ? bytesOf(e.content) : null, size = cur == null ? e ? "…" : "deleted here" : fmtBytes(cur); + return `${f.revisions ?? "…"} rev · ${size}${v.live ? "" : ` · ${ratio(f.unique, f.stored)}`}${f.pending ? " · …" : ""}`; + } + function fileHistoryHtml(subject, path) { + const f = fileStats(subject, path); + if (v.live && f.pending) return `
Loading the file's history…
`; + if (!f.rows.length) return `
${esc(f.error || (f.replay ? "File history is not in the trace." : `${path} has no saved versions behind ${pointLabel(subject)}.`))}
`; + const rows = f.rows.map((r) => `${r.node.id}${r.change} + ${r.content == null ? "–" : fmtBytes(r.size)}${r.content == null ? "–" : r.added == null ? "not reported" : r.added ? "+" + fmtBytes(r.added) : "reused"}${v.live ? "" : `${r.stored ? fmtBytes(r.stored) : "–"}`}`).join(""); + return `
${f.revisions} revision${f.revisions === 1 ? "" : "s"} behind ${esc(pointLabel(subject))}, newest first · new = bytes this version added (an identical earlier version is reused)${f.hasMore ? " · first 50 shown" : ""}
+ ${v.live ? "" : ""}${rows}
versionsizenewstored ≈
`; + } + function viewHtml(subject, p, sv) { + const se = sv.tree[p.path]; + if (p.mode === "view") { + if (!se) return `
${esc(p.path)} does not exist at ${esc(pointLabel(subject))}${be ? " (deleted; switch to Diff to see what was removed)" : ""}.
`; + return se.type === "file" ? se.content == null ? `
${esc(se.note || "Content not loaded.")}
` : `
${codeLines(se.content, p.path)}
` : `
${esc(p.path)} is a folder.
`; + } + if (p.mode === "blame") { + let b; + if (v.live) { + const report = fileStats(subject, p.path); + if (!report.blame) return `
${esc(report.error || (report.replay ? "Blame is not in the trace." : "Loading attributed lines…"))}
`; + b = { + ...report.blame, + versions: report.revisions, + lines: report.blame.lines.map((l) => ({ + ...l, + origin: { + id: l.commit, + kind: l.commit.startsWith("L") ? "layer" : "commit", + branch: (W().engine.s.commits[l.commit] || {}).branch + } + })) + }; + } else b = FM.blame(W().engine, subject, p.path); + if (!b) return `
${esc(p.path)} does not exist at ${esc(pointLabel(subject))}.
`; + let last = null; + const lit = highlightLines(b.lines.map((ln) => ln.text).join("\n"), p.path); + const rows = b.lines.map((ln, i) => { + const o = ln.origin, first = o.id !== last; + last = o.id; + return `
${first ? o.id : ""}${ln.n}${(lit ? lit[i] : esc(ln.text)) || " "}
`; + }).join(""); + return `
Blame at ${esc(pointLabel(subject))} · ${v.live ? "product attribution (fs.blame)" : `composed from ${b.versions} saved versions`}
${rows}
`; + } + return fileHistoryHtml(subject, p.path); + } + function lazyFilePage(tab, p, subject, sub) { + const seg = (m, label) => ``; + if (p.mode === "history") p.mode = "view"; + const body = p.mode === "blame" ? lazyBlameHtml(subject, sub, p, tab) : lazyViewHtml(sub, p, tab); + return `
${seg("view", "File")}${seg("blame", "Blame")}
+
${body}
`; + } + function filePage(tab, p, subject, sv) { + const seg = (m, label) => ``; + return `
${seg("view", "File")}${seg("blame", "Blame")}${seg("history", "History")}${fileStatsHtml(subject, p, sv)}
+
${viewHtml(subject, p, sv)}
`; + } + /** The subject and its compare, saved or in memory: { subject, sub, base, ch, nFiles } or null. */ + function pointOf(tab, p) { + if (p.at !== "latest" && !W().nodes[p.at] && !p.at.startsWith("fork:")) p.at = "latest"; + const subject = subjectOf(tab, p); + if (SRC()) { + const sub = savedOf(subject); + if (!sub) return null; + const base = p.base ? savedOf(p.base) : null, ch = base ? lazyChanges(sub, base) : null; + return { + subject, + sub, + base, + ch, + nFiles: ch ? `${Object.keys(ch.files).filter((path) => ch.types[path] === "file").length}${ch.more ? "+" : ""}` : null + }; + } + const sv = FM.resolveRef(W().engine, subject); + if (!sv) return null; + const bv = p.base ? FM.resolveRef(W().engine, p.base) : null, ch = bv ? FM.changeMap(sv.tree, bv.tree) : null; + return { + subject, + sv, + bv, + ch, + nFiles: ch ? String(Object.keys(ch.files).filter((path) => (sv.tree[path] || bv.tree[path] || {}).type === "file").length) : null + }; + } + function sideHtml(tab) { + const p = filesOf(tab), pt = pointOf(tab, p), flash = p.at === "latest" ? W().flash[tab] || /* @__PURE__ */ new Set() : /* @__PURE__ */ new Set(); + if (!pt) return `
Nothing to show yet.
`; + const tree = SRC() ? lazyTreeHtml(p, pt.sub, pt.ch, "/", 0, flash) : treeHtml(p, pt.sv.tree, pt.bv ? pt.bv.tree : null, pt.ch, "/", 0, flash); + const n = p.at === "latest" ? null : W().nodes[p.at] || null, lane = n ? n.branch || "main" : tab; + const point = !n ? `${tab === "main" ? W().mainHead : W().branches[tab].head.replace("fork:", "fork ")} · latest` : n.kind === "fork" ? "fork point" : n.id; + const back = n ? `` : ""; + return `
${esc(lane)}${esc(point)}${back}
${tree}
`; + } + function pageHtml(tab) { + const p = filesOf(tab), pt = pointOf(tab, p); + if (!pt) return `
Nothing to show yet.
`; + if (!p.path) return `
Pick a file in the tree: it opens here at ${esc(pointLabel(pt.subject))}.
`; + if (p.mode !== "blame" && p.mode !== "history") p.mode = "view"; + return SRC() ? lazyFilePage(tab, p, pt.subject, pt.sub) : filePage(tab, p, pt.subject, pt.sv); + } + const safe = (draw) => (tab) => { + try { + return draw(tab); + } catch (error) { + console.error("Files could not draw", error); + return `
Files could not draw this view: ${esc(error.message)}. Pick another file or point.
`; + } + }; + function openFile(p, path) { + p.line = 1; + p.starts = []; + if (SRC()) { + savedOf(subjectOf(v.active, p)); + p.base && savedOf(p.base); + p.path = path; + p.mode = "view"; + return; + } + const sv = FM.resolveRef(W().engine, subjectOf(v.active, p)), bv = p.base ? FM.resolveRef(W().engine, p.base) : null; + sv && bv && FM.changeMap(sv.tree, bv.tree).files[path]; + p.path = path; + p.mode = "view"; + } + /** Files at any node, compared with its parent (a project page): an open file stays open there. */ + function showAt(tab, id) { + const p = filesOf(tab), n = W().nodes[id]; + if (!n) return; + p.at = n.kind === "fork" ? "fork:" + n.branch : id; + p.base = FM.parentRef(W().engine, p.at) || ""; + p.line = 1; + p.starts = []; + v.rightMode[tab] = "files"; + } + function click(e) { + const at = (sel) => e.target.closest(sel), tab = v.active; + let el; + if (el = at("[data-fmode]")) { + const [t, m] = el.dataset.fmode.split("|"), p = filesOf(t); + p.mode = m; + p.line = 1; + p.starts = []; + v.render(); + return true; + } + if (el = at("[data-fmore]")) { + const sub = savedOf(subjectOf(tab, filesOf(tab))); + if (sub) SRC().moreList(sub.real, el.dataset.fmore); + v.render(); + return true; + } + if (el = at("[data-fwin]")) { + const [t, dir] = el.dataset.fwin.split("|"), p = filesOf(t), sub = savedOf(subjectOf(t, p)); + const w = sub && (p.mode === "blame" ? SRC().blame(sub.real, p.path, p.line || 1) : SRC().read(sub.real, p.path, p.line || 1)).value; + p.starts ||= []; + if (dir === "next" && w?.nextLine) { + p.starts.push(p.line || 1); + p.line = w.nextLine; + } + if (dir === "prev") p.line = p.starts.pop() ?? Math.max(1, (p.line || 1) - 2e3); + v.render(); + return true; + } + if (el = at("[data-ftree]")) { + const p = filesOf(tab), path = el.dataset.ftree; + if (el.dataset.ftype === "dir") p.toggled = p.toggled.includes(path) ? p.toggled.filter((x) => x !== path) : [...p.toggled, path]; + else openFile(p, path); + v.render(); + return true; + } + if (el = at("[data-fblame]")) { + showAt(tab, el.dataset.fblame); + v.render(); + return true; + } + if (el = at(".gview [data-node], svg.tree [data-node]")) { + showAt(tab, el.dataset.node); + v.render(); + return true; + } + if (el = at("[data-idelatest]")) { + const p = filesOf(tab); + p.at = "latest"; + p.base = defaultBase(tab); + p.line = 1; + p.starts = []; + v.render(); + return true; + } + return false; + } + function change(e) { + const t = e.target; + if (t.dataset.fline !== void 0) { + const p = filesOf(t.dataset.fline), n = Math.floor(Number(t.value)); + if (n >= 1) { + p.starts = []; + p.line = n; + v.render(); + } + } + } + return { + filesOf, + sideHtml: safe(sideHtml), + pageHtml: safe(pageHtml), + showAt, + click, + change + }; + } + //#endregion + //#region ../view/src/cast.js + /** What a call shows on its agent: a mood, which each sheet draws with its own pose. */ + function moodOf(last) { + const o = last.o, r = o.result, call = last.call || ""; + if (!o.ok) return o.code === "Conflict" ? "oops" : "fail"; + if (o.code === "Committed") return "win"; + if (o.code === "Merged") return "merge"; + if (o.code === "Added") return "serve"; + if (o.code === "Forked" || o.code === "Mounted") return "move"; + if (o.code === "Ready" || o.code === "Closed") return "hello"; + if (call === "sandbox.exec" && r && r.exitCode) return "fail"; + if (/^fs\.(read|list|grep|stat|blame|diff|find)/.test(call) || /^branch\.(diff|log)/.test(call)) return "read"; + return "work"; + } + /** The mood of a History node an agent made, where no call says more: a Commit, a merge, a published Layer, a fork. */ + function nodeMood(node) { + if (node.kind === "layer") return "serve"; + if (node.kind === "fork") return "move"; + return node.parents && node.parents.filter(Boolean).length > 1 ? "merge" : "win"; + } + const POSES = { + work: ["laptop", "thinking"], + read: ["read", "thinking"], + win: ["cheer", "thumbs_up"], + merge: ["heart", "love"], + serve: ["serve_tea", "smug"], + move: ["run", "happy"], + hello: ["wave", "happy"], + oops: ["arms_open", "surprised"], + fail: ["arms_open", "crying"], + idle: ["idle", "happy"], + sleep: ["sleep", "sleepy"] + }; + const frameOf = (hero, mood) => Math.max(0, hero.poses.indexOf((POSES[mood] || POSES.idle).find((p) => hero.poses.includes(p)))); + /** The hero's figure inside an `.av` box: its image, or its pose's frame of the sheet. */ + function figureStyle(hero, mood) { + if (!hero.poses) return `background-image:url(${hero.src})`; + const n = hero.poses.length, k = frameOf(hero, mood); + return `background:url(${hero.src}) ${n > 1 ? (k / (n - 1) * 100).toFixed(3) : 0}% 0 / ${n * 100}% 100% no-repeat;aspect-ratio:3/4;width:auto`; + } + /** The hero's head for a History name tag, 16 px, as SVG. */ + function headSvg(hero, title) { + const t = `${title}`; + if (!hero.head) return `${t}`; + const { src, index, count } = hero.head; + return `${t}`; + } + //#endregion + //#region ../view/src/skins/maids/voice.js + const FACE = { + win: "(๑•̀ㅂ•́)و✧", + merge: "♡", + serve: "☕", + move: "♪", + hello: "(・ω・)ノ", + oops: "Σ(°△°|||)", + fail: "(╥﹏╥)", + read: "📖", + work: "…" + }; + /** The bubble's [text, class] with the mood's face. */ + function maidBubble(bubble, mood) { + const face = FACE[mood]; + return face && bubble ? [`${bubble[0]} ${face}`, bubble[1]] : bubble; + } + /** A few sparkles (a Commit or publish), hearts (a merge) or a sweat drop (a conflict) at a point of the overlay, once. */ + function maidBurst(overlay, x, y, mood) { + const glyphs = mood === "merge" ? [ + "♡", + "♡", + "♥" + ] : mood === "oops" || mood === "fail" ? ["💦"] : mood === "win" || mood === "serve" ? [ + "✦", + "✧", + "✦" + ] : null; + if (!glyphs) return; + glyphs.forEach((g, i) => { + const el = document.createElement("span"); + el.className = "maidfx"; + el.textContent = g; + el.style.left = x + "px"; + el.style.top = y + "px"; + el.style.setProperty("--dx", `${(i - (glyphs.length - 1) / 2) * 12}px`); + el.style.color = mood === "merge" ? "#F08BB0" : "#4D6BFE"; + el.style.animationDelay = `${i * 90}ms`; + overlay.appendChild(el); + setTimeout(() => el.remove(), 1400 + i * 90); + }); + } + //#endregion + //#region ../view/src/tree.js + /** A Commit is a leaf: anchored on its bough at 0,0, pointing along +x. */ + const LEAF = "M0 0Q7 -7.5 15 0Q7 7.5 0 0Z"; + const bendOf = (dr, span) => Math.min(span, Math.max(18, Math.min(220, Math.abs(dr) * 1.1))); + const SPROUT = 40, MAIN_TH = 6.5, TAG_H = 14, CH_W = 6.2, AV = 16; + const GROW_MIN = 24, PX_FLOOR = 10, PX_MAX = 64; + const LANE_MIN = 24, LANE_MAX = 44, COL_MIN = 34, COL_MAX = 64; + /** + * A tree renderer. It remembers each Branch's lane, so a Branch keeps its + * place as the history grows; a stopped Branch's lane is reused. + * @returns {(W: object, o: object) => {svg: string, overview: string}} + */ + function createTree() { + const laneOf = {}; + /** + * @param {object} W the model's view + * @param {object} o + * @param {boolean} o.upright time runs up (else right) + * @param {number} o.width the panel's width in px + * @param {number} o.height the panel's height in px + * @param {string} o.active the open tab: its lane is banded + * @param {string|null} o.selected the node Files shows, ringed + * @param {(b: string) => string[]} o.agentsOn agents on a Branch now + * @param {(n: string) => string} o.head an agent's head as SVG at 0,0 (16 px) + * @param {(b: string) => boolean} o.idle nobody is on the Branch: a bare twig + * @param {(b: string) => boolean} [o.stopped] the Branch has stopped: its lane frees past its tag (default: idle) + */ + return function tree(W, o) { + const B = W.branches, N = W.nodes; + const parentOf = (b) => N[B[b].base] && N[B[b].base].branch || "main"; + const slots = [...new Set(Object.values(N).map((n) => n.t))].sort((a, b) => a - b), rank = new Map(slots.map((t, i) => [t, i])); + const room = o.upright ? o.height - 90 : o.width - 150, steps = Math.max(1, slots.length); + const px = o.upright ? Math.max(14, Math.min(PX_MAX, room / steps)) : Math.max(PX_FLOOR, Math.min(PX_MAX, room / Math.max(GROW_MIN, steps / .92))); + const T0 = 10, T = (n) => T0 + rank.get(n.t) * px, lastT = T0 + (steps - 1) * px; + const pos = {}, forkT = {}, baseT = {}, headT = {}; + for (const n of Object.values(N)) if (n.kind === "layer") pos[n.id] = T(n); + const mainHead = W.mainHead && pos[W.mainHead] !== void 0 ? pos[W.mainHead] : T0; + const string = (sproutOf) => { + for (const b of W.order) { + const base = N[B[b].base], fork = N["fork:" + b]; + baseT[b] = base && pos[base.id] !== void 0 ? pos[base.id] : base ? T(base) : T(fork); + const cs = Object.values(N).filter((n) => n.kind === "commit" && n.branch === b).sort((x, y) => x.t - y.t); + const room = (cs.length ? T(cs[0]) - 8 : Math.min(lastT, T(fork) + 2 * px)) - baseT[b]; + forkT[b] = Math.max(T(fork), baseT[b] + Math.min(sproutOf(b), Math.max(14, room))); + pos[fork.id] = forkT[b]; + let prev = forkT[b] + 8 - px; + for (const c of cs) prev = pos[c.id] = Math.max(T(c), prev + px); + let next = Math.max(lastT, forkT[b] + 8); + for (let i = cs.length - 1; i >= 0; i--) { + next = pos[cs[i].id] = Math.min(pos[cs[i].id], next); + next -= px; + } + headT[b] = Math.max(forkT[b], pos[B[b].head] ?? forkT[b]); + } + }; + string(() => SPROUT); + const kids = {}, depthOf = {}; + for (const b of W.order) (kids[parentOf(b)] ||= []).push(b); + const build = (b, depth) => { + depthOf[b] = depth; + for (const k of kids[b] || []) build(k, depth + 1); + }; + for (const b of kids.main || []) build(b, 0); + const tagW = (name) => name.length * CH_W + 8; + const stopped = o.stopped || o.idle; + const until = {}; + for (const b of W.order) until[b] = stopped(b) ? headT[b] + tagW(b) + 18 : Infinity; + for (const n of Object.values(N)) { + const src = n.parents[1] && N[n.parents[1]]; + if (src && src.branch && until[src.branch] !== void 0 && pos[n.id] !== void 0) until[src.branch] = Math.max(until[src.branch], pos[n.id] + 8); + } + for (const b of W.order) { + const p = parentOf(b); + if (p !== "main") until[p] = Math.max(until[p], baseT[b] + 8); + } + const live = { + 1: 0, + [-1]: 0 + }, seen = []; + for (const b of [...W.order].sort((x, y) => baseT[x] - baseT[y] || W.order.indexOf(x) - W.order.indexOf(y))) { + let l = laneOf[b]; + if (l === void 0) { + const busy = new Set(seen.filter((x) => until[x] > baseT[b]).map((x) => laneOf[x])); + const pl = laneOf[parentOf(b)] ?? 0, side = Math.sign(pl) || (live[1] <= live[-1] ? 1 : -1); + if (pl) for (let k = 1; l === void 0; k++) l = [pl + side * k, pl - side * k].find((c) => Math.sign(c) === side && !busy.has(c)); + else for (let d = 1; l === void 0; d++) l = !busy.has(side * d) ? side * d : !busy.has(-side * d) ? -side * d : void 0; + laneOf[b] = l; + } + seen.push(b); + if (!stopped(b)) live[Math.sign(l)] += 1; + } + const lanes = W.order.map((b) => laneOf[b]), nUp = Math.max(0, ...lanes), nDown = Math.max(0, ...lanes.map((l) => -l)); + const rowOf = { main: nUp }; + for (const b of W.order) rowOf[b] = nUp - laneOf[b]; + const nRows = nUp + 1 + nDown; + const COL = o.upright ? Math.max(COL_MIN, Math.min(COL_MAX, (o.width - 40) / Math.max(1, nRows))) : Math.max(LANE_MIN, Math.min(LANE_MAX, (o.height - 40) / Math.max(1, nRows))); + string((b) => Math.max(SPROUT, bendOf(Math.abs(rowOf[b] - rowOf[parentOf(b)]) * COL, Infinity))); + const nowT = Math.max(mainHead, lastT, ...W.order.map((b) => forkT[b])) + px * .6 + 8; + const mainEnd = Math.max(mainHead + 12, Math.min(nowT - 4, Math.max(lastT, ...W.order.map((b) => forkT[b])) + 8)); + const R = (i) => i * COL + COL / 2; + const tags = ["main", ...W.order].map((id) => { + const isMain = id === "main", end = isMain ? mainEnd : headT[id], idle = !isMain && o.idle(id); + return { + id, + i: rowOf[id], + end, + idle, + t: end + (idle ? 18 : 10) + (isMain ? 6 : 0), + w: tagW(id), + avs: isMain ? [] : o.agentsOn(id) + }; + }), tagOf = Object.fromEntries(tags.map((tg) => [tg.id, tg])); + if (o.upright) { + const placed = []; + for (const g of [...tags].sort((a, b) => a.t - b.t)) { + const hit = () => placed.find((p) => Math.abs(R(p.i) - R(g.i)) < (p.w + g.w) / 2 + 4 && Math.abs(p.t - g.t) < 16 + (p.avs.length ? AV : 0)); + for (let p; p = hit();) g.t = p.t + TAG_H + 3 + (p.avs.length ? AV : 0); + placed.push(g); + } + } + const topT = o.upright ? Math.max(nowT + 14, ...tags.map((g) => g.t + TAG_H + (g.avs.length ? 18 : 0) + 4)) : Math.max(nowT + 30, ...tags.map((g) => g.t + g.w + Math.min(3, g.avs.length) * AV + 12)); + const rowsW = nRows * COL; + const mainC = R(rowOf.main); + const UW = Math.max(o.width, 2 * Math.max(mainC, rowsW - mainC) + 24); + const off = o.upright ? Math.round(UW / 2 - mainC) : 0; + const GROUND = 14, H = o.upright ? Math.max(o.height, topT + GROUND + 8) : Math.max(o.height - 2, rowsW + 8); + const Wd = o.upright ? UW : Math.max(o.width, topT + 12); + const baseY = H - GROUND; + const down = o.upright ? 0 : Math.max(0, Math.min(Math.round((H - 8) / 2 - mainC), H - 8 - rowsW)); + const P = (t, r) => o.upright ? [r + off, baseY - t] : [t + 6, r + 4 + down]; + const pt = (t, r) => P(t, r).map((v) => +v.toFixed(1)).join(" "); + const path = (pts) => "M" + pts.map(([t, r], k) => (k === 1 && pts.length === 4 ? "C" : "") + pt(t, r)).join(" "); + const line = (t0, t1, r) => `M${pt(t0, r)} L${pt(t1, r)}`; + const sprout = (t0, r0, t1, r1) => { + if (r0 === r1) return line(t0, t1, r1); + const d = bendOf(r1 - r0, t1 - t0), dr = r1 - r0; + return path([ + [t0, r0], + [t0 + d * .45, r0 + dr * .3], + [t0 + d * .55, r1], + [t0 + d, r1] + ]) + ` L${pt(t1, r1)}`; + }; + const rise = (t0, r0, t1, r1) => { + if (r0 === r1) return line(t0, t1, r0); + const d = bendOf(r1 - r0, t1 - t0), dr = r1 - r0; + return `M${pt(t0, r0)} L${pt(t1 - d, r0)} C${pt(t1 - d * .35, r0)} ${pt(t1, r0 + dr * .45)} ${pt(t1, r1)}`; + }; + const color = (b) => b && B[b] ? `var(${B[b].color})` : "var(--trunk)"; + const spin = (deg) => o.upright ? deg - 90 : deg; + const lineOf = (n) => n.branch ? rowOf[n.branch] : rowOf.main; + const at = (id) => { + const n = N[id]; + return n && pos[id] !== void 0 ? P(pos[id], R(lineOf(n))) : null; + }; + const pop = (id) => W.newNodes && W.newNodes.has(id) ? " popin" : ""; + let g = ""; + const ai = rowOf[o.active]; + if (ai !== void 0 && (o.upright || o.active !== "main")) { + const t0 = o.upright ? 0 : baseT[o.active]; + const [x0, y0] = P(o.upright ? topT : tagOf[o.active].t + tagOf[o.active].w + 6, R(ai) - COL / 2), [x1, y1] = P(t0, R(ai) + COL / 2); + g += ``; + } + const across = (t, cls) => { + const [x0, y0] = P(t, 0), [x1, y1] = P(t, rowsW); + return o.upright ? `` : ``; + }; + for (const n of Object.values(N)) if (n.kind === "layer") g += across(pos[n.id], "grid"); + g += across(nowT, "now"); + { + const [x, y] = P(nowT, 0); + g += o.upright ? `now` : `now`; + } + for (const b of W.order) { + const r0 = R(rowOf[parentOf(b)]), r1 = R(rowOf[b]); + g += ``; + } + for (const n of Object.values(N)) { + const src = n.parents[1] && N[n.parents[1]]; + if (!src || pos[src.id] === void 0) continue; + const r0 = R(lineOf(src)), r1 = R(lineOf(n)), near = o.active !== "main" && (src.branch === o.active || n.branch === o.active); + const data = `data-from="${esc(src.branch || "main")}" data-to="${esc(n.branch || "main")}" data-at="${esc(n.id)}"`; + g += ``; + } + for (const b of W.order) { + const r = R(rowOf[b]), d = depthOf[b]; + g += ``; + if (o.idle(b)) g += ``; + } + const solid = Math.min(mainEnd, mainHead + 6); + g += ``; + if (mainEnd > solid + 2) g += ``; + for (const n of Object.values(N)) if (n.kind === "layer") { + const [x, y] = P(pos[n.id], mainC), src = n.parents[1] && N[n.parents[1]], c = src ? color(src.branch) : "var(--green-dark)"; + const [w, h] = o.upright ? [14.5, 5] : [5, 14.5], sel = o.selected === n.id ? " sel" : ""; + g += ``; + g += o.upright ? `${esc(n.id)}` : `${esc(n.id)}`; + } + for (const b of W.order) { + const id = "fork:" + b, [x, y] = P(forkT[b], R(rowOf[b])); + g += ``; + } + const shades = [ + "", + "color-mix(in srgb, %c 70%, white)", + "color-mix(in srgb, %c 82%, black)" + ]; + const commits = Object.values(N).filter((n) => n.kind === "commit").sort((x, y) => pos[x.id] - pos[y.id]); + const flip = {}; + for (const n of commits) { + const [x, y] = P(pos[n.id], R(rowOf[n.branch])), c = color(n.branch), sel = o.selected === n.id ? " sel" : ""; + const k = flip[n.branch] = (flip[n.branch] || 0) + 1; + if (n.parents[1]) { + g += ``; + continue; + } + const fill = (shades[Number(n.id.replace(/\D/g, "")) % 3] || "%c").replaceAll("%c", c); + g += ``; + } + const mounted = {}; + for (const w of Object.values(W.ws)) (mounted[w.baseNode] ||= []).push(w); + for (const [id, ws] of Object.entries(mounted)) { + const p = at(id), n = N[id]; + if (!p) continue; + const stale = n.branch && B[n.branch] && id !== B[n.branch].head; + g += `${ws.length}`; + } + for (const tg of tags) { + const isMain = tg.id === "main", r = R(tg.i), c = isMain ? "var(--green-dark)" : color(tg.id), [hx, hy] = P(tg.end, r); + let x, y; + if (o.upright) { + [x, y] = P(tg.t, r); + x -= tg.w / 2; + y -= TAG_H; + } else { + [x, y] = P(tg.t, r); + y -= TAG_H / 2; + } + if (o.upright && tg.t - tg.end > (tg.idle ? 22 : 14)) g += ``; + g += `${isMain ? "main · read-only · open the main tab" : `Open ${esc(tg.id)} · forked from ${esc(B[tg.id].base)}`}${esc(tg.id)}`; + tg.avs.slice(0, 3).forEach((n, k) => { + const ax = o.upright ? x + tg.w / 2 - Math.min(3, tg.avs.length) * AV / 2 + k * AV : x + tg.w + 4 + k * AV, ay = o.upright ? y - AV - 1 : y - 1; + g += `${o.head(n)}`; + }); + } + if (o.upright) g += ``; + const svg = `${g}`; + const OW = 300, nb = 60, bins = new Array(nb).fill(0); + for (const n of commits) bins[Math.min(nb - 1, Math.floor(pos[n.id] / topT * nb))]++; + const peak = Math.max(3, ...bins), bw = OW / nb; + let ov = bins.map((v, i) => v ? `` : "").join(""); + for (const n of Object.values(N)) if (n.kind === "layer") ov += ``; + ov += ``; + return { + svg, + overview: `${ov}` + }; + }; + } + //#endregion + //#region ../view/src/treezoom.js + const MIN = .25, MAX = 4, STEP = 1.25, DRAG_PX = 4; + const clamp = (z) => Math.min(MAX, Math.max(MIN, z)); + /** + * @param {object} o root (the view's element), onZoom() after the viewer + * zoomed or panned (the view leaves "now" and moves the overview's box) + */ + function createTreeZoom({ root, onZoom }) { + let z = 1, pan = null, swallow = false; + const box = () => root.querySelector("[data-tree]"); + const svgOf = (el) => el && el.querySelector("svg.tree"); + const label = () => `${Math.round(z * 100)}%`; + /** The controls drawn in the tree's corner. */ + const controlsHtml = () => `
+ + + +
`; + /** Scales the drawn tree to the zoom; the view calls it after each draw. */ + function apply(el = box()) { + const svg = svgOf(el); + if (!svg) return; + svg.dataset.w ??= svg.getAttribute("width"); + svg.dataset.h ??= svg.getAttribute("height"); + svg.setAttribute("width", (+svg.dataset.w * z).toFixed(1)); + svg.setAttribute("height", (+svg.dataset.h * z).toFixed(1)); + svg.dataset.zoom = String(z); + for (const v of root.querySelectorAll(".tzoom .tzv")) v.textContent = label(); + } + /** Zooms to `next`, keeping the tree's point under (px, py) of its box where it is. */ + function zoomTo(next, px, py) { + const el = box(); + if (!el) return; + next = clamp(next); + if (px == null) { + px = el.clientWidth / 2; + py = el.clientHeight / 2; + } + const cx = (el.scrollLeft + px) / z, cy = (el.scrollTop + py) / z; + z = next; + apply(el); + el.scrollLeft = cx * z - px; + el.scrollTop = cy * z - py; + onZoom(); + } + const at = (el, e) => { + const r = el.getBoundingClientRect(); + return [e.clientX - r.left, e.clientY - r.top]; + }; + function fit() { + const el = box(), svg = svgOf(el); + if (!svg) return; + zoomTo(Math.min(el.clientWidth / +svg.dataset.w, el.clientHeight / +svg.dataset.h, 1)); + } + function onWheel(e) { + const el = e.target.closest && e.target.closest("[data-tree]"); + if (!el || !(e.ctrlKey || e.metaKey)) return; + e.preventDefault(); + zoomTo(z * Math.exp(-e.deltaY * .01), ...at(el, e)); + } + const onTree = (e) => e.target.closest && e.target.closest("[data-tree]"); + const onNode = (e) => e.target.closest("[data-node], .tag, a, button"); + function onDown(e) { + const el = onTree(e); + if (!el || e.button !== 0 || onNode(e) || e.metaKey || e.ctrlKey) return; + pan = { + el, + x: e.clientX, + y: e.clientY, + left: el.scrollLeft, + top: el.scrollTop, + moved: false + }; + addEventListener("pointermove", onMove); + addEventListener("pointerup", onUp, { once: true }); + } + function onMove(e) { + if (!pan) return; + const dx = e.clientX - pan.x, dy = e.clientY - pan.y; + if (!pan.moved && Math.hypot(dx, dy) < DRAG_PX) return; + if (!pan.moved) { + pan.moved = true; + pan.el.classList.add("panning"); + } + pan.el.scrollLeft = pan.left - dx; + pan.el.scrollTop = pan.top - dy; + onZoom(); + } + function onUp() { + removeEventListener("pointermove", onMove); + if (pan && pan.moved) { + swallow = true; + setTimeout(() => { + swallow = false; + }, 0); + } + if (pan) pan.el.classList.remove("panning"); + pan = null; + } + /** Clicks the view hands over first: the controls, a drag's end, ⌘-click. True when handled. */ + function click(e) { + if (swallow) { + swallow = false; + e.preventDefault(); + return true; + } + const b = e.target.closest && e.target.closest("[data-tz]"); + if (b) { + const k = b.dataset.tz; + if (k === "in") zoomTo(z * STEP); + else if (k === "out") zoomTo(z / STEP); + else if (k === "reset") zoomTo(1); + else fit(); + return true; + } + const el = onTree(e); + if (el && (e.metaKey || e.ctrlKey)) { + zoomTo(e.shiftKey ? z / STEP : z * STEP, ...at(el, e)); + return true; + } + return false; + } + function onDbl(e) { + const el = onTree(e); + if (!el || onNode(e)) return; + e.preventDefault(); + zoomTo(e.shiftKey ? z / STEP : z * STEP, ...at(el, e)); + } + function onKey(e) { + const mod = e.metaKey || e.ctrlKey; + root.classList.toggle("tz-key", mod); + root.classList.toggle("tz-out", mod && e.shiftKey); + if (e.type !== "keydown" || mod || !onTree(e)) return; + if (e.key === "+" || e.key === "=") zoomTo(z * STEP); + else if (e.key === "-") zoomTo(z / STEP); + else if (e.key === "0") zoomTo(1); + else return; + e.preventDefault(); + } + const onBlur = () => { + root.classList.remove("tz-key", "tz-out"); + }; + root.addEventListener("wheel", onWheel, { passive: false }); + root.addEventListener("pointerdown", onDown); + root.addEventListener("dblclick", onDbl); + addEventListener("keydown", onKey); + addEventListener("keyup", onKey); + addEventListener("blur", onBlur); + return { + get zoom() { + return z; + }, + controlsHtml, + apply, + click, + dispose() { + root.removeEventListener("wheel", onWheel); + root.removeEventListener("pointerdown", onDown); + root.removeEventListener("dblclick", onDbl); + removeEventListener("keydown", onKey); + removeEventListener("keyup", onKey); + removeEventListener("blur", onBlur); + removeEventListener("pointermove", onMove); + } + }; + } + //#endregion + //#region ../view/src/history.js + const LEGEND = `
+ Layer · a band on main + Commit · a leaf + Branch · a bough + merge · grafts back + publish · adds a band + idle · bare twig + click a node: Files there · a name tag: its tab
`; + /** + * @param {object} o + * @param {HTMLElement} o.root the view's root (the card and zoom live in it) + * @param {object} o.v the view's state: W, active tab, rightMode, orient, project + * @param {object} o.files the Files component (files.js) for the same state + * @param {(n: string) => object} o.avatar an agent's hero + * @param {(n: string) => string} o.mascot an agent's small hero + * @param {(n: string) => string} o.head an agent's head for the tree's name tags (SVG) + * @param {(lane: string, id: string, mode: string) => void} o.openAt a card's Browse/Diff: Files at a node + * @param {(by: string, id: string, node: object) => void} [o.visit] a node the replay grew: its maker shows up on it + */ + function createHistory(o) { + const { root, v, files, avatar, mascot } = o; + const q = (sel) => root.querySelector(sel); + const card = document.createElement("div"); + card.className = "hcard"; + card.setAttribute("role", "tooltip"); + root.append(card); + const tree = createTree(); + let auto = true, set = null, drawnFor = null, cardTimer = null; + let legend = false; + const tz = createTreeZoom({ + root, + onZoom: () => { + auto = false; + placeOverview(); + } + }); + /** A Branch nobody is on, whose tab has faded: a bare twig in the tree. */ + const FADE_STEPS = 6; + function eventsOf(W) { + const slots = [...new Set(Object.values(W.nodes).map((n) => n.t))].sort((a, b) => a - b), last = {}; + for (const n of Object.values(W.nodes)) { + if (n.branch) last[n.branch] = Math.max(last[n.branch] ?? -Infinity, n.t); + const src = n.parents[1] && W.nodes[n.parents[1]]; + if (src && src.branch) last[src.branch] = Math.max(last[src.branch] ?? -Infinity, n.t); + } + return { + slots, + last, + rank: new Map(slots.map((t, k) => [t, k])) + }; + } + /** Is Branch b done at slot index i: its last event more than FADE_STEPS events back. */ + const doneAt = (ev, i) => (b) => ev.last[b] !== void 0 && i - ev.rank.get(ev.last[b]) > FADE_STEPS; + function branchIdle(b) { + const W = v.W; + return !agentsOn(W, b).length && !mounted(W, b) && !conflicted(W, b) && W.clock - W.branches[b].last > 30; + } + /** The node a tab's Files is fixed at, or null while it follows the head. */ + function pinnedAt(tab) { + const at = files.filesOf(tab).at; + return at === "latest" ? null : at; + } + let grown = false; + const treeOf = (tab, size) => { + const W = v.W, ev = eventsOf(W), done = doneAt(ev, ev.slots.length - 1); + const base = { + upright: v.orient === "upright", + width: size.w, + height: size.h, + active: tab, + selected: null, + agentsOn: () => [], + head: o.head + }; + if (!grown && W.order.length > 1) for (const t of [...new Set(W.order.map((b) => W.nodes["fork:" + b] && W.nodes["fork:" + b].t))].filter((t) => t !== void 0).sort((x, y) => x - y)) { + const d = doneAt(ev, ev.rank.get(t)); + tree(cutAt(W, t), { + ...base, + idle: d, + stopped: d + }); + } + if (W.order.length) grown = true; + const faded = (b) => done(b) && (v.project || !agentsOn(W, b).length && !mounted(W, b) && !conflicted(W, b)); + return tree(W, { + ...base, + selected: pinnedAt(tab), + agentsOn: (b) => v.project ? [] : agentsOn(W, b), + idle: faded, + stopped: faded + }); + }; + /** The tree's box: the drawn one, else the panel's less its header, Overview and legend. */ + function size(host) { + const el = q("[data-tree]"); + if (el) return { + w: el.clientWidth - 2, + h: el.clientHeight - 2 + }; + return { + w: Math.max(240, (host ? host.clientWidth : 440) - 2), + h: Math.max(240, (host ? host.clientHeight : 640) - 170) + }; + } + const PLAY_MS = 14e3, PLAY_MIN = 3e3, STEP_MS = 300, TICK_MIN = 30; + let play = null; + /** The model as it stood at slot `t`: its nodes up to then, each Branch's head then. */ + function cutAt(W, t) { + const nodes = {}; + for (const [id, n] of Object.entries(W.nodes)) if (n.t <= t) nodes[id] = n; + const order = W.order.filter((b) => nodes["fork:" + b]), branches = {}; + for (const b of order) { + let head = nodes[W.branches[b].head] ? W.branches[b].head : "fork:" + b, ht = -Infinity; + if (head === "fork:" + b) { + for (const n of Object.values(nodes)) if (n.kind === "commit" && n.branch === b && n.t > ht) { + ht = n.t; + head = n.id; + } + } + branches[b] = { + ...W.branches[b], + head + }; + } + let mainHead = null, mt = -Infinity; + for (const n of Object.values(nodes)) if (n.kind === "layer" && n.t > mt) { + mt = n.t; + mainHead = n.id; + } + return { + ...W, + nodes, + order, + branches, + mainHead, + ws: {}, + newNodes: /* @__PURE__ */ new Set() + }; + } + function startPlay() { + const ev = eventsOf(v.W), slots = ev.slots; + if (slots.length < 2) return; + const total = Math.min(PLAY_MS, Math.max(PLAY_MIN, slots.length * STEP_MS)); + const tick = Math.max(TICK_MIN, total / slots.length); + play = { + slots, + ev, + i: 0, + tick, + per: Math.max(1, Math.round(slots.length * tick / total)), + tree: createTree(), + timer: null, + paused: false, + shown: /* @__PURE__ */ new Set(), + greeted: 0 + }; + frame(); + } + function stopPlay() { + if (play) clearTimeout(play.timer); + play = null; + } + function frame() { + const panel = q("[data-tree]") && q("[data-tree]").closest(".hist"); + if (!play || !panel) { + stopPlay(); + auto = true; + v.render(); + return; + } + const sz = size(); + const next = document.createElement("div"); + next.innerHTML = html(sz); + patch(panel, next, 4); + place(null, sz); + if (o.visit) greet(); + if (play.paused) return; + if (play.i >= play.slots.length - 1) { + play.timer = setTimeout(() => { + stopPlay(); + auto = true; + v.render(); + }, 900); + return; + } + play.timer = setTimeout(() => { + if (!play) return; + play.i = Math.min(play.slots.length - 1, play.i + play.per); + frame(); + }, play.tick); + } + function patch(el, next, depth) { + const a = [...el.childNodes], b = [...next.childNodes]; + if (a.length !== b.length) { + el.replaceChildren(...b); + return; + } + a.forEach((old, i) => { + const nu = b[i]; + if (old.isEqualNode(nu)) return; + if (depth > 0 && old.nodeType === 1 && nu.nodeType === 1 && old.tagName === nu.tagName && old.attributes.length === nu.attributes.length && [...nu.attributes].every((x) => old.getAttribute(x.name) === x.value)) patch(old, nu, depth - 1); + else old.replaceWith(nu); + }); + } + function greet() { + const now = Object.values(play.cut.nodes), fresh = now.filter((n) => !play.shown.has(n.id)).sort((a, b) => b.t - a.t); + for (const n of now) play.shown.add(n.id); + if (Date.now() - play.greeted < 200) return; + play.greeted = Date.now(); + for (const n of fresh.filter((n) => n.by).slice(0, play.tick >= 200 ? 3 : 1)) o.visit(n.by, n.id, n); + } + /** The tree as the replay has it now, or null when History is live. */ + function playTree(tab, sz) { + const t = play.slots[play.i], W = play.cut = cutAt(v.W, t); + const done = doneAt(play.ev, play.i); + return { + W, + t: play.tree(W, { + upright: v.orient === "upright", + width: sz.w, + height: sz.h, + active: tab, + selected: null, + agentsOn: () => [], + head: o.head, + idle: done, + stopped: done + }) + }; + } + function html(sz) { + const tab = v.active, mode = v.rightMode[tab] || "history"; + if (play && mode !== "history") stopPlay(); + const cut = play && playTree(tab, sz), W = cut ? cut.W : v.W, B = W.branches[tab], color = (v.W.branches[tab] || {}).color; + const headId = tab === "main" ? W.mainHead : !B ? null : B.head.startsWith("fork:") ? B.base : B.head; + const nC = Object.values(W.nodes).filter((n) => n.kind === "commit").length; + const seg = ""; + const orient = mode !== "history" ? "" : `${[[ + "upright", + "Upright", + "M6 11V1M6 6L2.5 3M6 8L9.5 5" + ], [ + "sideways", + "Sideways", + "M1 6H11M6 6L3 2.5M8 6L5 9.5" + ]].map(([k, l, d]) => ``).join("")}`; + const playing = play && !play.paused; + const playBtn = mode !== "history" ? "" : ``; + const head = `
${seg}${esc(tab)} @ ${esc(headId || "–")}${nC} commit${nC === 1 ? "" : "s"}${play ? " · replay" : ""}${playBtn}${orient}
`; + if (!W.mainHead && !play) return head + `
No project yet
`; + const t = cut ? cut.t : treeOf(tab, sz); + const key = `${legend ? LEGEND : ""}`; + return head + `
${tz.controlsHtml()}${key}
${t.svg}
Overview
${t.overview}
`; + } + /** Where the viewer has the tree now, to keep across a redraw. */ + function keep() { + const el = q("[data-tree]"); + return el && { + left: el.scrollLeft, + top: el.scrollTop + }; + } + /** After a redraw: the zoom, the tree's place, and whether its box came out another size than `sz` (draw again). */ + function place(at, sz) { + tz.apply(); + const el = q("[data-tree]"); + if (el) { + if (auto || !at) if (v.orient === "upright") { + el.scrollTop = 0; + el.scrollLeft = Math.max(0, Math.round((el.scrollWidth - el.clientWidth) / 2)); + } else el.scrollLeft = el.scrollWidth; + else { + el.scrollLeft = at.left; + el.scrollTop = at.top; + } + set = { + left: el.scrollLeft, + top: el.scrollTop + }; + placeOverview(); + } + drawnFor = el && { + w: el.clientWidth, + h: el.clientHeight + }; + light(litAt); + if (card.classList.contains("open") && !card.matches(":hover") && !root.querySelector("svg.graph [data-node]:hover")) hideCard(true); + return !!(el && sz && (Math.abs(el.clientWidth - 2 - sz.w) > 8 || Math.abs(el.clientHeight - 2 - sz.h) > 8)); + } + /** The tree's box changed size since it was drawn: it needs drawing again. */ + function resized() { + const el = q("[data-tree]"); + return !!(el && drawnFor && (Math.abs(el.clientWidth - drawnFor.w) > 8 || Math.abs(el.clientHeight - drawnFor.h) > 8)); + } + function placeOverview() { + const el = q("[data-tree]"), box = q(".ovbox"), svg = el && el.querySelector("svg"); + if (!box || !svg) return; + const z = tz.zoom, span = +svg.dataset.span * z, base = +svg.dataset.base * z; + const [a, b] = svg.dataset.dir === "up" ? [base - el.scrollTop - el.clientHeight, base - el.scrollTop] : [el.scrollLeft - 6 * z, el.scrollLeft + el.clientWidth - 6 * z]; + const lo = Math.max(0, a / span), hi = Math.min(1, b / span); + box.style.left = (lo * 100).toFixed(2) + "%"; + box.style.width = Math.max(2, (hi - lo) * 100).toFixed(2) + "%"; + } + function overviewTo(e, strip) { + const el = q("[data-tree]"), svg = el && el.querySelector("svg"); + if (!svg) return; + const z = tz.zoom, r = strip.getBoundingClientRect(), t = (e.clientX - r.left) / r.width * +svg.dataset.span * z; + if (svg.dataset.dir === "up") el.scrollTop = +svg.dataset.base * z - t - el.clientHeight / 2; + else el.scrollLeft = t + 6 * z - el.clientWidth / 2; + auto = false; + } + function wsRows(name, nodeId) { + const W = v.W, s = W.engine.s, head = s.branches[name].head || "fork:" + name, rows = []; + for (const id of s.sandboxOrder) for (const p of s.sandboxes[id].wsOrder) { + const w = s.sandboxes[id].workspaces[p]; + if (!w.mounted || w.branch !== name || (w.baseCommit || "fork:" + name) !== nodeId) continue; + const k = `${id}:${p}`, dirty = W.engine.dirtyOf(w), stale = nodeId !== head, agent = (W.panes[k] || {}).agent; + rows.push(``); + } + return rows.length ? `
Workspaces mounted here
${rows.join("")}` : ""; + } + function cardHtml(id) { + const W = v.W, s = W.engine.s, who = W.attrib[id], by = who ? `by ${esc(who)}` : "", head = "head"; + const btns = `
Click the node: the sidebar's files show this point
`; + if (s.layers[id]) { + const l = s.layers[id]; + return `
${l.id}main${id === s.main.head ? head : ""}
Layer${l.root ? ` · root ${l.root}` : ""}
${l.sourceCommit ? `published from ${esc(l.sourceBranch)} ${l.sourceCommit}` : "project.init"}${by ? "
" + by : ""}
${btns}`; + } + if (s.commits[id]) { + const c = s.commits[id]; + const lww = (list) => list && list.length ? "
" + list.map((d) => `last-writer-wins ${esc(d.path)} ← ${esc(d.kept)}`).join("
") : ""; + const owner = (n) => s.commits[n] ? `${esc(s.commits[n].branch)} ${n}` : `main ${n}`; + const mrg = c.mergedFrom ? `
Merge
merged from ${owner(c.mergedFrom)} into ${c.parent ? owner(c.parent) : "main " + c.base}${c.mergeBase ? `
merge base ${esc(c.mergeBase)}` : ""}${lww(c.lww)}
` : c.merged ? `
Merged on commit
the Workspace was on ${c.merged.from}; merged with head ${c.merged.head}${lww(c.merged.lww)}
` : ""; + const after = c.displacedBy ? `
Off the line
${c.displacedBy} was committed with --force, so ${c.id} is no longer an ancestor of the head.
` : ""; + const b = s.branches[c.branch]; + return `
${c.id}${esc(c.branch)}${b && b.head === id ? head : ""}
+
parent ${c.parent || "Branch base"}${c.root ? ` · root ${c.root}` : ""}
${by}${by ? " · " : ""}${esc(c.message || c.via)}
via ${esc(c.by === "fs" ? c.via : c.by === "merge" ? "branch.merge" : "sandbox.commit " + c.via)}
${mrg}${after}${wsRows(c.branch, id)}${btns}`; + } + const name = id.slice(5), b = s.branches[name]; + return `
${esc(name)}fork point${b.head ? "" : head}
forked from ${b.from}${b.head ? "" : " · no Commits yet"}${by ? "
" + by : ""}
${wsRows(name, id)}${btns}`; + } + function showCard(node) { + clearTimeout(cardTimer); + const r = node.getBoundingClientRect(), base = root.getBoundingClientRect(); + card.innerHTML = cardHtml(node.dataset.node); + card.classList.add("open"); + const h = card.offsetHeight, w = root.clientWidth, top = r.bottom - base.top + 8; + card.style.left = Math.max(8, Math.min(w - 298, r.left - base.left + r.width / 2 - 145)) + "px"; + card.style.top = (top + h > root.clientHeight ? r.top - base.top - h - 8 : top) + "px"; + } + const hideCard = (now) => { + clearTimeout(cardTimer); + cardTimer = setTimeout(() => card.classList.remove("open"), now ? 0 : 180); + }; + const onCardEnter = () => clearTimeout(cardTimer), onCardLeave = () => hideCard(); + card.addEventListener("mouseenter", onCardEnter); + card.addEventListener("mouseleave", onCardLeave); + /** A click inside the panel or its card; true when it was the panel's. */ + function click(e) { + if (tz.click(e)) return true; + const at = (sel) => e.target.closest(sel); + let el; + if (el = at("[data-card-at], [data-card-cmp]")) { + const id = el.dataset.cardAt || el.dataset.cardCmp, n = v.W.nodes[id]; + if (n) { + hideCard(true); + o.openAt(n.branch || "main", id, el.dataset.cardCmp ? "diff" : "view"); + } + return true; + } + if (el = at("[data-orient]")) { + v.orient = el.dataset.orient; + auto = true; + v.render(); + return true; + } + if (at("[data-play]")) { + if (!play) startPlay(); + else if (play.paused = !play.paused) { + clearTimeout(play.timer); + v.render(); + } else frame(); + return true; + } + if (at("[data-legend]")) { + legend = !legend; + v.render(); + return true; + } + if (at("[data-now]")) { + stopPlay(); + auto = true; + v.render(); + return true; + } + if (el = at("[data-ov]")) { + overviewTo(e, el); + return true; + } + return false; + } + const hovered = (el) => { + const n = el && el.closest && el.closest("svg.tree [data-node], svg.tree [data-open]"); + if (!n) return null; + const node = n.dataset.node && v.W.nodes[n.dataset.node]; + return { + b: n.dataset.open || node && node.branch || null, + id: n.dataset.node || null + }; + }; + let litAt = null; + function light(at) { + litAt = at; + const svg = q("svg.tree"); + if (!svg) return; + for (const p of svg.querySelectorAll(".link.on")) p.classList.remove("on"); + if (!at) return; + const sel = [at.b && `.link[data-from="${CSS.escape(at.b)}"], .link[data-to="${CSS.escape(at.b)}"]`, at.id && `.link[data-at="${CSS.escape(at.id)}"]`].filter(Boolean).join(", "); + for (const p of svg.querySelectorAll(sel)) p.classList.add("on"); + } + const over = (e) => { + const n = e.target.closest && e.target.closest("svg.graph [data-node]"); + if (n) showCard(n); + light(hovered(e.target)); + }; + const out = (e) => { + const n = e.target.closest && e.target.closest("svg.graph [data-node]"); + if (n && !n.contains(e.relatedTarget)) hideCard(); + light(hovered(e.relatedTarget)); + }; + const scroll = (e) => { + const el = e.target; + if (!el.matches || !el.matches("[data-tree]")) return; + if (set && (Math.abs(el.scrollLeft - set.left) > 2 || Math.abs(el.scrollTop - set.top) > 2)) auto = false; + placeOverview(); + }; + return { + html, + size, + keep, + place, + resized, + click, + over, + out, + scroll, + pinnedAt, + branchIdle, + /** Back to "now" on the next draw (the panel moved or changed size). */ + toNow() { + auto = true; + }, + /** Ends a replay, playing or paused, and goes back to "now" (History was left). */ + stop() { + if (play) { + stopPlay(); + auto = true; + } + }, + dispose() { + stopPlay(); + tz.dispose(); + clearTimeout(cardTimer); + card.removeEventListener("mouseenter", onCardEnter); + card.removeEventListener("mouseleave", onCardLeave); + card.remove(); + } + }; + } + //#endregion + //#region ../view/src/view.js + const { CAP, RECENT_S, bubbleOf } = src_exports; + const html = (s) => { + const t = document.createElement("template"); + t.innerHTML = s.trim(); + return t.content.firstElementChild; + }; + /** + * @param {HTMLElement} root the view's root; it gets class `lfs` + * @param {object} o + * @param {object} o.avatars the cast: heroAvatars(urlOf) from skins/heroes/cast.js + * @param {{ id: string, label: string, avatars: object }[]} [o.casts] the cast to draw + * with, first; its id is the root's data-skin (skins/) + * @param {object} o.files the files helpers (simulation_engine/files.js) + * @param {Function} o.lineDiff line diff (simulation_engine/model.js) + * @param {boolean} [o.live] the engine reports file history itself (engine.fileReport) + * @param {string} [o.lead] the lead agent (ellen_joe) + * @param {object} [o.layout] existing { tabs, work, follow } elements + * @param {"work"|"history"} [o.pane] draw only this pane: the host shows Work and History as its own tabs + * (the preview's); missing ones are created as the standalone layout. Without + * a `hist` element, History is drawn as the work area's first column + * @param {(follow: boolean) => void} [o.onFollow] the follow toggle changed + * @param {boolean} [o.project] draw a project: Files' tree, then File, History and Storage tabs + */ + const LOGO$1 = ``; + const TABICON = (d) => ``; + const FILEICON = TABICON("M3.5 1.5h4.5l2.5 2.5v8.5h-7z M8 1.5V4h2.5"); + const HISTICON = TABICON("M4 2v10 M4 7c0-2 6-1 6-4 M10 3a1 1 0 1 0 0-.01 M4 12.5a1 1 0 1 0 0-.01"); + const SIDEICON = TABICON("M1.5 2.5h11v9h-11z M5 2.5v9"); + const DBICON = TABICON("M2.5 3.5c0-1.1 2-2 4.5-2s4.5.9 4.5 2-2 2-4.5 2-4.5-.9-4.5-2z M2.5 3.5v7c0 1.1 2 2 4.5 2s4.5-.9 4.5-2v-7 M2.5 7c0 1.1 2 2 4.5 2s4.5-.9 4.5-2"); + TABICON("M2 4.5l5-2.5 5 2.5v5l-5 2.5-5-2.5z M2 4.5l5 2.5 5-2.5 M7 7v5"); + function createView(root, o) { + const FM = o.files, LEAD = o.lead || "main"; + let AV = o.casts ? o.casts[0].avatars : o.avatars; + root.classList.add("lfs"); + const PROJECT = !!o.project; + let layout = o.layout; + if (PROJECT) { + root.classList.add("lfs-project"); + root.innerHTML = ""; + layout = {}; + } else if (!layout) { + root.classList.add("lfs-app"); + root.innerHTML = `
`; + layout = { + hist: root.querySelector(".hist"), + cols: root.querySelector(".lfs-cols"), + strip: root.querySelector(".lfs-strip"), + swap: root.querySelector(".lfs-swap"), + tabs: root.querySelector(".tabs"), + work: root.querySelector(".work"), + follow: root.querySelector("[data-follow]") + }; + } + const overlay = html(``); + root.append(overlay); + const AGENTS = {}, AV_TAKEN = /* @__PURE__ */ new Map(), MOOD = {}; + let VARIANTS = Object.keys(AV.heroes).filter((c) => c !== AV.main); + /** Draws every agent with another cast: each is picked again from it. */ + function useCast(avatars) { + AV = avatars; + VARIANTS = Object.keys(AV.heroes).filter((c) => c !== AV.main); + for (const n of Object.keys(AGENTS)) delete AGENTS[n]; + AV_TAKEN.clear(); + } + const nameHash = (s) => { + let h = 2166136261; + for (const c of s) h = Math.imul(h ^ c.charCodeAt(0), 16777619); + return h >>> 0; + }; + function avatar(n) { + const a = AGENTS[n] ||= {}; + if (a.av) return a; + if (n === LEAD) a.av = AV.main; + else { + const k = nameHash(n) % VARIANTS.length; + a.av = VARIANTS.map((_, i) => VARIANTS[(k + i) % VARIANTS.length]).find((x) => !AV_TAKEN.has(x)) || VARIANTS[k]; + } + a.dup = (AV_TAKEN.get(a.av) || 0) + 1; + AV_TAKEN.set(a.av, a.dup); + a.color = AV.heroes[a.av].color; + return a; + } + const colorOf = (n) => n && AGENTS[n] ? avatar(n).color : void 0; + function mascot(n) { + const a = avatar(n), working = v.acting.has(n), dup = a.dup > 1 ? `${a.dup}` : ""; + const mood = working ? MOOD[n] || "work" : v.W && idle$1(n) ? "sleep" : MOOD[n] || "idle"; + return ``; + } + const v = { + W: null, + FM, + lineDiff: o.lineDiff, + live: !!o.live, + project: PROJECT, + rightMode: {}, + active: "main", + follow: true, + left: "history", + orient: "sideways", + note: "", + acting: /* @__PURE__ */ new Set(), + lastLoc: null, + colorOf, + render: () => render(), + ide: "history" + }; + const files = createFiles(v); + const PREF = "lfs-layout"; + const prefs = (() => { + try { + return JSON.parse(localStorage.getItem(PREF)) || {}; + } catch { + return {}; + } + })(); + const savePrefs = () => { + try { + localStorage.setItem(PREF, JSON.stringify(prefs)); + } catch {} + }; + if (o.casts) { + useCast(o.casts[0].avatars); + root.dataset.skin = o.casts[0].id; + } + delete prefs.cast; + delete prefs.dock; + delete prefs.histh; + delete prefs.panes; + delete prefs.histw; + delete prefs.swap; + if (o.pane) root.dataset.pane = o.pane; + if (o.pane && layout.swap) { + layout.strip.querySelector(".lfs-logo")?.remove(); + layout.swap.remove(); + layout.swap = null; + } + const shownPanes = () => o.pane || (!layout.cols ? "both" : prefs.pane === "history" ? "history" : "work"); + const pinned = {}, seenTabs = new Set(["main"]), OPEN_SDK = /* @__PURE__ */ new Set(); + let sbLit = null, sbPulse = null, focusPane = null, sizeTries = 0; + const LEAVE_MS = 3600, leaving = /* @__PURE__ */ new Map(); + let shownWs = {}, leaveTimer = null, leftSeen = null; + let drawnSeq = null, fresh = -1; + function trackLeaving(W) { + const now = Date.now(); + for (const [k, w] of Object.entries(shownWs)) if (!W.ws[k] && !leaving.has(k)) leaving.set(k, { + w, + at: now + }); + if (leftSeen !== null && leftSeen <= W.seq) { + for (const [k, p] of Object.entries(W.panes)) if (p.left > leftSeen && !W.ws[k] && !leaving.has(k) && p.branch) leaving.set(k, { + w: { + id: k, + agent: p.agent, + branch: p.branch, + lines: p.lines, + born: p.born + }, + at: now + }); + } + leftSeen = W.seq; + for (const [k, l] of leaving) if (W.ws[k] || now - l.at >= LEAVE_MS) leaving.delete(k); + shownWs = W.ws; + clearTimeout(leaveTimer); + if (leaving.size) leaveTimer = setTimeout(render, Math.max(16, Math.min(...[...leaving.values()].map((l) => l.at + LEAVE_MS - now)))); + } + const where$1 = (n) => where(v.W, n), idle$1 = (n) => idle(v.W, n); + const lastHit = (loc) => v.lastLoc === loc ? " hot" : ""; + const q = (sel) => root.querySelector(sel); + function renderTabs() { + const W = v.W, { tabs, hidden, retired } = visibleTabs(W, { + pinned, + active: v.active + }); + const chip = (b) => { + const B = W.branches[b], isNew = !seenTabs.has(b); + seenTabs.add(b); + const bad = conflicted(W, b), nWs = Object.values(W.ws).filter((w) => w.branch === b).length, dim = branchIdle(b); + const meta = bad ? `conflict` : nWs ? `${nWs} ws` : dim ? `idle` : ""; + return ``; + }; + layout.tabs.innerHTML = `` + tabs.map(chip).join("") + (hidden.length || retired.length ? `` : ""); + const strip = layout.tabs, on = strip.querySelector("[aria-selected=\"true\"]"), more = strip.querySelector(".more"); + if (on && strip.scrollWidth > strip.clientWidth) { + const end = strip.clientWidth - (more ? more.offsetWidth + 4 : 0); + if (on.offsetLeft < strip.scrollLeft) strip.scrollLeft = on.offsetLeft; + else if (on.offsetLeft + on.offsetWidth > strip.scrollLeft + end) strip.scrollLeft = on.offsetLeft + on.offsetWidth - end; + } + } + const OPS = { + "project.init": ["init", "Initialized"], + "branch.fork": ["fork", "Forked"], + "main.fork": ["fork", "Forked"], + "branch.merge": ["merge", "Merged"], + "branch.publish": ["publish", "Added"], + "sandbox.mount": ["mount", "Mounted"], + "sandbox.commit": ["commit", "Committed"], + "sandbox.unmount": ["unmount", "Unmounted"] + }; + function opOf(l) { + const c = l.calls || []; + for (const x of c) { + const op = OPS[x.call]; + if (op && x.code === op[1]) return op[0]; + } + return c.some((x) => x.call.startsWith("fs.")) ? l.dim ? "read" : "write" : ""; + } + const outMatch = (l, re) => { + for (const x of l.out || []) { + const m = re.exec(x.t); + if (m) return m[1]; + } + return null; + }; + function lineHtml(l, isNew, prefix, marks = []) { + const c = l.calls || [], key = String(l.t) + (l.text || ""), op = opOf(l); + const sdk = c.length ? `
${c.map((x) => `${esc(x.call)} → ${esc(x.code)}${esc(timingText(x.timing))}${x.script ? `
${esc(x.script)}
` : ""}`).join("")}
` : ""; + const grp = l.group ? `⧉ ${esc(l.group)}` : ""; + const who = l.agent && !l.dim ? mascot(l.agent) : ""; + const n = l.text ? [...l.text].length : 0, type = isNew && n && !l.dim ? ` style="--n:${n};--d:${Math.min(700, Math.max(140, n * 14))}ms"` : ""; + const sdkBtn = sdk.slice(0, sdk.indexOf("${esc(tag)}` : ""; + const last = (l.out || []).length, part = (k) => marks.map((m) => ` ${m.cls}${m.first && k === 0 ? ` ${m.cls}0` : ""}${m.last && k === last ? ` ${m.cls}1` : ""}${m.fresh ? ` ${m.cls}new` : ""}`).join(""); + return `
${prefix}${grp}${l.text ? `${esc(l.text)}${type ? "" : ""}` : ""}${pin}${who}${cmdTime(c)}${sdkBtn}
${c.length ? sdkBox : ""}
` + (l.out || []).map((x, k) => `${esc(x.t)}`).join(""); + } + function spansOf(shown, kind) { + const marks = shown.map(() => []); + if (kind === "ws") { + let start = 0; + shown.forEach((l, i) => { + if (opOf(l) !== "commit") return; + let s = start; + while (s < i && shown[s].dim) s++; + for (let k = s; k <= i; k++) marks[k].push({ + cls: "cm", + first: k === s, + last: k === i, + fresh: l.t === fresh + }); + start = i + 1; + }); + } else if (kind === "fs") for (let i = 0; i < shown.length;) { + const g = shown[i].group; + let j = i; + while (g && j + 1 < shown.length && shown[j + 1].group === g) j++; + const cls = shown.slice(i, j + 1).every((l) => l.dim) ? "gr" : "gw"; + if (j > i) for (let k = i; k <= j; k++) marks[k].push({ + cls, + first: k === i, + last: k === j + }); + i = j + 1; + } + return marks; + } + const hist = createHistory({ + root, + v, + files, + avatar, + mascot, + head: (n) => headSvg(AV.heroes[avatar(n).av], esc(n)), + visit: (by, id, node) => visitNode(by, id, nodeMood(node)), + openAt: (lane, id, mode) => { + const tab = PROJECT ? "main" : lane; + if (!PROJECT) { + v.active = lane; + setFollow(false); + } + files.showAt(tab, id); + files.filesOf(tab).mode = mode === "blame" ? "blame" : "view"; + v.ide = "file"; + render(); + } + }); + const branchIdle = hist.branchIdle; + function rosterMenu(anchor) { + const W = v.W, label = (n) => { + const l = where$1(n), A = W.agents[n]; + return l.kind === "ws" ? `${l.branch} · ${l.ws}` : l.kind === "fs" ? `${l.branch} · fs` : l.kind === "hist" ? "project terminal" : A.lastBranch ? `idle · last on ${A.lastBranch}` : "idle"; + }; + openMenu(anchor, "roster-menu", Object.keys(W.agents).sort((x, y) => idle$1(x) - idle$1(y)).map((n) => { + const l = where$1(n); + return ``; + }).join(""), 300); + } + function openMenu(anchor, cls, inner, width) { + closeMenu(); + const r = anchor.getBoundingClientRect(), base = root.getBoundingClientRect(), m = document.createElement("div"); + m.className = "menu " + cls; + m.innerHTML = inner; + m.style.top = r.bottom - base.top + 4 + "px"; + m.style.left = Math.max(8, (width ? r.right - width : r.left) - base.left) + "px"; + root.appendChild(m); + } + function moreMenu(anchor) { + const { hidden, retired } = visibleTabs(v.W, { + pinned, + active: v.active + }); + openMenu(anchor, "", branchItems(hidden) + (retired.length ? `
retired · nobody on them for over 120 s
${branchItems(retired)}` : "")); + } + const branchItems = (list) => list.map((b) => { + const age = v.W.clock - v.W.branches[b].last; + return ``; + }).join(""); + const closeMenu = () => { + const m = root.querySelector(".menu"); + if (m) m.remove(); + }; + const STAMP = (lines) => ``; + const FSICON = (c) => ``; + const TAG = (tone, text) => `${esc(text)}`; + const HINT = (text) => `i`; + const BOXICON = ``; + const shortImage = (img) => /^sha256:[0-9a-f]{12,}$/.test(img) ? img.slice(0, 15) : img.length > 28 ? img.slice(0, 27) + "…" : img; + const term = (cls, attrs, head, stamp, body) => `
${head}
${STAMP(stamp)}
${body}
`; + function stateOf(n) { + const l = where$1(n); + return l.kind === "ws" ? `${l.ws.split(":")[1].replace("/workspaces/", "ws/")}${idle$1(n) ? "" : " exec"}` : l.kind === "fs" ? "fs" : l.kind === "hist" ? "project" : "idle"; + } + const busyOn = (n, b) => { + const l = where$1(n); + return l.branch === b && l.kind !== "bench"; + }; + const castOf = (b) => [...new Set([ + ...agentsOn(v.W, b), + ...Object.values(v.W.ws).filter((w) => w.branch === b).map((w) => w.agent), + ...recentlyOn(v.W, b) + ])]; + const sinceClock = (t) => t == null ? "–" : v.W.clock - t < 1 ? "now" : `${v.W.clock - t}s ago`; + /** A Sandbox's whole record, for its chip's hover. */ + function sbHint(id) { + const W = v.W, sb = W.engine.s.sandboxes[id], a = (W.sbAt || {})[id] || {}, who = (W.sbBy || {})[id] || {}, real = W.engine.m?.toReal?.get(id); + const wss = sb.wsOrder.filter((p) => sb.workspaces[p].mounted).map((p) => ({ + p, + w: sb.workspaces[p], + view: W.ws[`${id}:${p}`] + })); + const procs = sb.closed ? [] : sb.procOrder.map((p) => sb.processes[p]).filter((p) => p.status === "running"); + return [ + `Sandbox ${id}${real && real !== id ? ` (${real})` : ""}`, + sb.closed ? `closed ${sinceClock(a.closed)}${who.closed ? ` by ${who.closed}` : ""}` : `open · used ${sinceClock(a.last)}`, + who.made ? `made by ${who.made}${who.service ? " (a service)" : ""}${a.made != null ? ` ${sinceClock(a.made)}` : ""}` : null, + a.image ? `image ${a.image}` : null, + a.calls ? `${a.calls} call${a.calls === 1 ? "" : "s"} · ${a.execs || 0} command${a.execs === 1 ? "" : "s"}` : null, + ...wss.map(({ p, w, view }) => `${p} → ${w.branch}${w.baseCommit ? ` @ ${w.baseCommit}` : ""}${view ? ` · ${view.agent}` : ""}${w.dirty ? ` · ${w.dirty} dirty` : ""}${w.stale ? " · head moved since mount" : ""}${w.pendingMerge ? " · merge pending" : ""}`), + ...procs.map((p) => `● ${p.command} (${p.path})`) + ].filter(Boolean).join("\n"); + } + /** A Sandbox as a chip; the project's prefix gives way first ("layerfs-shop-1", "demo-ag…checkout"). */ + function sbChip(id, extra, bare) { + const s = v.W.engine.s, sb = s.sandboxes[id], project = s.project ? s.project.name : ""; + const pre = (project ? [`layerfs-${project}-`, `${project}-`] : []).find((p) => id.startsWith(p) && id.length > p.length) ?? ""; + return `${BOXICON}${pre ? `${esc(pre)}` : ""}${esc(id.slice(pre.length))}${extra || ""}`; + } + /** The header count's card: every Sandbox, open first, with its record. */ + function sbList() { + const W = v.W, s = W.engine.s, at = W.sbAt || {}, by = W.sbBy || {}; + const ids = s.sandboxOrder.filter((id) => !s.sandboxes[id].closed || at[id]?.closed != null && W.clock - at[id].closed <= 120).sort((x, y) => s.sandboxes[x].closed - s.sandboxes[y].closed || (at[y]?.last ?? 0) - (at[x]?.last ?? 0)); + if (!ids.length) return `
no Sandbox open · LayerFS starts one when a Workspace is mounted
`; + const pl = (k, one) => `${k} ${one}${k === 1 ? "" : "s"}`; + return ids.map((id) => { + const sb = s.sandboxes[id], a = at[id] || {}, who = by[id] || {}; + const meta = [ + who.made ? `made by ${who.made}${who.service ? " (a service)" : ""}` : null, + a.image ? shortImage(a.image) : null, + a.calls ? pl(a.calls, "call") : null, + a.execs ? pl(a.execs, "cmd") : null + ].filter(Boolean).join(" · "); + const wss = sb.wsOrder.filter((p) => sb.workspaces[p].mounted).map((p) => { + const w = sb.workspaces[p], view = W.ws[`${id}:${p}`]; + return `${p.replace("/workspaces/", "ws/")} → ${w.branch}${view ? ` · ${view.agent}` : ""}${w.dirty ? ` · ${w.dirty} dirty` : ""}${w.stale ? " · stale" : ""}`; + }); + const procs = sb.closed ? [] : sb.procOrder.map((p) => sb.processes[p]).filter((p) => p.status === "running").map((p) => `● ${p.command}`); + const lines = [...wss, ...procs].map((l) => `
${esc(l)}
`).join("") || (sb.closed ? "" : `
no Workspace mounted
`); + return `
${sbChip(id, "", true)}${esc(sb.closed ? `closed ${sinceClock(a.closed)}` : `used ${sinceClock(a.last)}`)}${meta ? `
${esc(meta)}
` : ""}${lines}
`; + }).join(""); + } + function boardHtml() { + const W = v.W, s = W.engine.s, placed = /* @__PURE__ */ new Set(); + const wsOn = {}; + for (const id of s.sandboxOrder) { + const sb = s.sandboxes[id]; + if (sb.closed) continue; + for (const p of sb.wsOrder) { + const w = sb.workspaces[p]; + if (!w.mounted) continue; + (wsOn[w.branch] ||= []).push({ + id, + p, + w, + key: `${id}:${p}`, + view: W.ws[`${id}:${p}`], + procs: sb.procOrder.map((k) => sb.processes[k]).filter((x) => x.status === "running" && x.path === p) + }); + } + } + const live = W.order.filter((b) => pinned[b] || wsOn[b] || !retired(W, b)), nRetired = W.order.length - live.length; + const cards = live.sort((x, y) => W.branches[y].last - W.branches[x].last).map((b) => { + const B = W.branches[b], bad = conflicted(W, b), dim = branchIdle(b), cast = castOf(b), age = W.clock - B.last; + const head = B.head.startsWith("fork:") ? `from ${B.base}` : B.head; + const note = bad ? "conflict" : B.published ? `${head} · ↑ ${W.mainHead}` : `${head} · ${age < 1 ? "now" : age + "s"}`; + cast.forEach((n) => placed.add(n)); + const wss = wsOn[b] || [], withWs = new Set(wss.map((x) => x.view && x.view.agent).filter(Boolean)); + const wsRows = wss.map(({ id, p, w, key, view, procs }) => { + const n = view && view.agent, on = n && busyOn(n, b), name = p.replace("/workspaces/", "ws/"); + const st = !n ? "mounted" : !on ? "idle" : stateOf(n).startsWith(name) ? stateOf(n).slice(name.length).trim() || "mounted" : stateOf(n); + const tip = `${p} in ${id}: ${b} from ${w.baseCommit || w.baseLayer || "main"}${w.dirty ? ` · ${w.dirty} changed entries not yet committed` : ""}${view ? " · click: its pane" : ""}`; + return `
${n ? mascot(n) : ""}${esc(n || name)}${sbChip(id, `${esc(name)}`)}${w.dirty ? `${w.dirty} dirty` : ""}${w.stale ? `stale` : ""}${esc(st)}
` + procs.map((x) => `
${esc(x.command)}
`).join(""); + }).join(""); + const agentRows = cast.filter((n) => !withWs.has(n)).map((n) => { + const on = busyOn(n, b); + return `
${mascot(n)}${esc(n)}${esc(on ? stateOf(n) : "idle")}
`; + }).join(""); + return `
${esc(b)}${esc(note)}
${wsRows}${agentRows}
`; + }).join(""); + const pool = Object.keys(W.agents).filter((n) => !placed.has(n) && where$1(n).kind === "bench"); + const nIdle = Object.keys(W.agents).filter((n) => idle$1(n)).length; + const nOpen = s.sandboxOrder.filter((id) => !s.sandboxes[id].closed).length, nWs = Object.keys(W.ws).length; + const none = nRetired ? `every Branch has retired · nobody on one for over 120 s` : "no Branch yet · an agent forks one from main"; + return `
branches${live.length}${HINT(`Branches and their Sandboxes. A Branch is a line of Commits forked from main; a Sandbox is a Linux container where an agent mounts Workspaces (each a full view of one Branch) and runs commands. A card shows the Branch's head (or the main Layer it was published to), each Workspace mounted on it with its Sandbox (hover the Sandbox for its record and every Workspace in it; click a row for its pane; hover the count for every Sandbox), and the agents on it now or in the last ${RECENT_S} s. A Branch nobody has been on for 120 s retires from this board and the tabs (pin a tab to keep it); a closed Sandbox stays 120 s.`)}${TAG("blue", `${nWs} workspace${nWs === 1 ? "" : "s"} · ${nOpen} sandbox${nOpen === 1 ? "" : "es"}`)}${nRetired ? `` : ""}
+
${cards ? `
${cards}
` : `
${none}
`}
+ ${pool.length ? `
unassigned${pool.map((n) => mascot(n)).join("")}
` : ""}
`; + } + function storePanel() { + const W = v.W, z = W.engine.storage(), s = W.engine.s; + const x = (a, b) => b > 0 ? `${(a / b).toFixed(a / b >= 10 ? 0 : 1)}×` : "–"; + const tile = (val, label, tone) => `
${label}${esc(val)}
`; + const nC = Object.keys(s.commits).length, nL = Object.keys(s.layers).length; + const pct = (a) => z && z.store > 0 ? Math.max(0, Math.min(100, a / z.store * 100)).toFixed(1) : 0; + const free = z ? Math.max(0, z.store - z.stored - z.metadata) : 0; + if (z && z.counts) return `
${storeHead()}${storeBody(z, x)}
`; + return `
${FSICON("var(--accent)")}storage${TAG("coral", "main · read-only")}
+
${tile(z ? x(z.logical, z.payload) : "–", "dedupe", "blue")}${tile(z ? x(z.payload, z.stored) : "–", "compression", "coral")}${tile(z ? fmtBytes(z.stored) : "–", "stored", "")}${tile(z ? fmtBytes(z.store) : "–", "file", "")}
+
+
${z ? `logical ${fmtBytes(z.logical)} · canonical ${fmtBytes(z.payload)} · metadata ${fmtBytes(z.metadata)} · ` : `${v.live ? "not reported yet" : nC ? "sizes not reported" : "empty"} · `}${nC} commit${nC === 1 ? "" : "s"} · ${nL} layer${nL === 1 ? "" : "s"}${z && z.estimate ? " · sim est." : ""}
`; + } + const storeHead = () => `
${FSICON("var(--accent)")}storage${TAG("coral", "main · read-only")}
`; + function storeBody(z, x) { + const n = z.counts, top = Math.max(1, ...[ + z.head, + z.logical, + z.payload, + z.stored, + z.metadata + ].filter((v) => v != null)); + const row = (label, bytes, cls) => `${label}${bytes == null ? "–" : fmtBytes(bytes)}`; + const costs = z.perCommit || [], sum = costs.reduce((a, c) => a + c.bytes, 0), max = Math.max(1, ...costs.map((c) => c.bytes)); + const bars = costs.map((c) => ``).join(""); + return `
+
${fmtBytes(z.store)}on disk for ${fmtBytes(z.logical)} of history
+
${n.commits} Commit${n.commits === 1 ? "" : "s"} · ${n.branches} Branch${n.branches === 1 ? "" : "es"} · ${n.layers} Layer${n.layers === 1 ? "" : "s"}, each a full snapshot
+
${row("main, latest, raw", z.head, "hd")}${row("every snapshot, raw", z.logical, "fc")}${row("unique", z.payload, "dd")}${row("unique, compressed", z.stored, "cp")}${row("+ metadata", z.metadata, "md")}
+
${x(z.logical, z.payload)} dedupe · ${x(z.payload, z.stored)} compression${z.baseline ? ` · ${fmtBytes(z.baseline)} from Init${z.imported ? ` (${z.imported} file${z.imported === 1 ? "" : "s"} imported)` : ", the empty Store's baseline"}` : ""}
+ ${costs.length ? `
per Commit${fmtBytes(sum / costs.length)} average${fmtBytes(max)} largest
+
${bars}
+
fs write Workspace commit · newest ${costs.length}, oldest left
` : ""}
`; + } + function storePage() { + const z = v.W.engine.storage(), n = z.counts || {}; + const x = (a, b) => b > 0 ? `${(a / b).toFixed(a / b >= 10 ? 0 : 1)}×` : "–"; + const fact = (val, label, tip) => `
${esc(val)}${esc(label)}
`; + const plural = (k, one, many) => `${k ?? 0} ${k === 1 ? one : many}`; + const top = Math.max(1, ...[ + z.head, + z.logical, + z.payload, + z.stored, + z.metadata + ].filter((b) => b != null)); + const row = (label, bytes, cls, tip) => bytes == null ? "" : `${label}${fmtBytes(bytes)}`; + const costs = z.perCommit || [], sum = costs.reduce((a, c) => a + c.bytes, 0), max = Math.max(1, ...costs.map((c) => c.bytes)); + const kind = (c) => c.via === "fs" ? "fs" : c.via === "exec" ? "ws" : "ot"; + const bars = costs.map((c) => ``).join(""); + return `
+
+
${fmtBytes(z.store)}on disk

${plural(n.commits, "Commit", "Commits")} · ${plural(n.branches, "Branch", "Branches")} · ${plural(n.layers, "Layer", "Layers")}, each a full snapshot

+
${fact(fmtBytes(z.logical), "history, raw", "every Commit's and Layer's files at full size")}${fact(x(z.logical, z.payload), "dedupe", "every snapshot, raw, over the unique content")}${fact(x(z.payload, z.stored), "compression", "unique content over its packed size")}
+
+
+

Where the bytes go

+
${row("main, latest", z.head, "hd", "one plain copy of main's head")}${row("every snapshot", z.logical, "fc", "the whole history as plain files")}${row("unique", z.payload, "dd", "each distinct file and chunk once")}${row("compressed", z.stored, "cp", "that content packed")}${row("metadata", z.metadata, "md", "trees, Commits and the database around the packs")}
+ ${z.baseline ? `

${fmtBytes(z.baseline)} of it came from Init${z.imported ? `, which imported ${z.imported} file${z.imported === 1 ? "" : "s"}` : ""}.

` : ""} +
+

What each Commit added

+ ${costs.length ? `
${fmtBytes(sum / costs.length)} average${fmtBytes(max)} largest${costs.length} newest
+
${bars}
+
fs writeWorkspace commitoldest on the left
` : `

No Commit yet.

`} +
+
+
`; + } + function mainView() { + const W = v.W, project = W.engine.s.project ? W.engine.s.project.name : "no project yet"; + const lines = W.hist.map((l) => lineHtml(l, l.t === fresh, "$ ")).join("") || `no calls yet`; + return storePanel() + boardHtml() + term(lastHit("hist"), "data-loc=\"hist\"", `${mascot(LEAD)}project${esc(project)}${TAG("blue", "project · branch")}`, ["project · branch"], lines); + } + const KEEP = 12; + function tailHtml(all, prompt, kind) { + let cut = Math.max(0, all.length - KEEP); + while (cut > 0 && cut < all.length && all[cut].dim) cut++; + const calls = all.slice(0, cut).filter((l) => !l.dim).length; + return (calls ? `
… ${calls} earlier call${calls === 1 ? "" : "s"}
` : "") + ((shown) => { + const marks = spansOf(shown, kind); + return shown.map((l, i) => lineHtml(l, l.t === fresh, l.dim ? "" : prompt, marks[i])).join(""); + })(all.slice(cut)); + } + function branchView(b) { + const W = v.W, B = W.branches[b]; + const fsLines = tailHtml(W.fsLog[b] || [], "$ ", "fs") || `no fs calls on ${esc(b)} yet`; + const headId = B.head.startsWith("fork:") ? B.base : B.head; + const gone = [...leaving.values()].filter((l) => l.w.branch === b).map((l) => ({ + ...l.w, + leftAt: l.at + })); + const wss = [...Object.values(W.ws).filter((w) => w.branch === b), ...gone].sort((x, y) => x.born - y.born); + const nC = Object.values(W.nodes).filter((n) => n.branch === b && n.kind === "commit").length; + const chips = castOf(b).map((n) => { + const on = busyOn(n, b); + return `
${mascot(n)}${esc(n)}${esc(on ? stateOf(n) : "idle")}
`; + }).join(""); + const fs = term(" cap" + lastHit("fs:" + b), `data-loc="fs:${esc(b)}"`, `${FSICON(`var(${B.color})`)}fs · ${esc(b)}persistent${TAG("grey", "direct to Store")}`, ["fs · " + b, "direct to Store"], fsLines); + const panes = wss.map((w) => { + const [sb, path] = w.id.split(":"), ws = path.replace("/workspaces/", "ws/"); + const cls = " cap" + (w.leftAt ? " leaving" : w.bad ? " bad" : lastHit("ws:" + w.id)) + (!w.leftAt && w.born === fresh ? " enter" : "") + (focusPane === w.id ? " focus" : ""); + const pill = w.leftAt ? TAG("grey", ws + " · unmounted") : w.bad ? TAG("coral", ws + " · conflict") : TAG("blue", ws + " · mounted"); + return term(cls, `data-loc="ws:${esc(w.id)}" data-sb="${esc(sb)}" data-sbhl="${esc(sb)}"${w.leftAt ? ` style="animation-delay:${w.leftAt - Date.now()}ms;--ld:${w.leftAt - Date.now()}ms"` : ""}`, `${mascot(w.agent)}${esc(w.agent)}${pill}`, ["sandbox " + sb, "workspace " + ws], tailHtml(w.lines, "$ ", "ws")); + }); + const cells = [fs, ...panes]; + const hint = panes.length ? "" : `
no Workspace on ${esc(b)} · the page splits here on the next tool call
`; + const signs = `${esc(`${B.base} → ${headId} · ${nC} commit${nC === 1 ? "" : "s"}`)}`; + return `
${chips || `nobody on ${esc(b)} in the last ${RECENT_S} s`}${signs}
+
${cells.join("")}${hint}
`; + } + const swapSeen = {}; + function renderSwap() { + const shown = shownPanes(), mark = { + history: Object.keys(v.W.nodes).length, + work: v.W.seq + }; + if (layout.strip) layout.strip.dataset.panes = shown; + for (const k of ["history", "work"]) if (swapSeen[k] === void 0 || k === shown) swapSeen[k] = mark[k]; + if (!layout.swap) return; + layout.swap.innerHTML = [["work", "Work"], ["history", "History"]].map(([k, l]) => { + const sel = k === shown, dot = !sel && mark[k] > swapSeen[k]; + return ``; + }).join(""); + } + function lightSandbox(id) { + if (id === sbLit) return; + sbLit = id; + for (const el of root.querySelectorAll(".sblit")) el.classList.remove("sblit"); + if (id) for (const el of root.querySelectorAll(`.crow[data-sbhl="${CSS.escape(id)}"], .term[data-sb="${CSS.escape(id)}"], .sbc[data-sbid="${CSS.escape(id)}"]`)) el.classList.add("sblit"); + } + function redrawOnce(again) { + if (again && sizeTries++ < 1) requestAnimationFrame(render); + else sizeTries = 0; + } + function drawIde(host, W) { + let ide = host.querySelector(":scope > .lfs-ide"); + if (!ide) { + ide = html(`
`); + host.prepend(ide); + } + const side = ide.querySelector(".ide-side"), tabsEl = ide.querySelector(".ide-tabs"), pane = ide.querySelector(".ide-pane"); + const show = v.ide, tab = v.active, p = files.filesOf(tab); + const keep = (el, sel) => { + const x = el.querySelector(sel); + return x ? x.scrollTop : 0; + }; + const restore = (el, sel, top) => { + const x = el.querySelector(sel); + if (x) x.scrollTop = top; + }; + const sideTop = keep(side, ".ftree"); + side.innerHTML = files.sideHtml(tab); + restore(side, ".ftree", sideTop); + const name = p.path ? p.path.slice(p.path.lastIndexOf("/") + 1) : "File"; + const sbx = W.engine.sandboxes?.(); + const tabs = [ + [ + "file", + name, + FILEICON + ], + [ + "history", + "History", + HISTICON + ], + [ + "storage", + "Storage", + DBICON + ], + ...sbx ? [[ + "sandboxes", + "Sandboxes", + BOXICON + ]] : [] + ]; + const hide = !!prefs.sideHidden; + ide.classList.toggle("side-hidden", hide); + tabsEl.innerHTML = `` + tabs.map(([k, l, i]) => ``).join(""); + v.rightMode[tab] = show === "history" ? "history" : "files"; + if (show !== "history") hist.stop(); + if (show === "history") { + const at = hist.keep(), size = hist.size(pane); + pane.innerHTML = hist.html(size); + redrawOnce(hist.place(at, size)); + } else if (show === "file") { + const top = keep(pane, ".fview"); + pane.innerHTML = files.pageHtml(tab); + restore(pane, ".fview", top); + } else if (show === "sandboxes" && sbx) { + if (pane.firstElementChild !== sbx.el) pane.replaceChildren(sbx.el); + } else pane.innerHTML = `
${W.engine.storage() ? storePage() : `
${v.live || W.engine.replay ? "Reading the Store…" : "Nothing stored yet."}
`}
`; + } + function render() { + const W = v.W; + if (!W) return; + if (PROJECT) { + drawIde(root, W); + noticeNodes(W); + return; + } + trackLeaving(W); + fresh = W.seq === drawnSeq ? -1 : W.seq; + drawnSeq = W.seq; + const work = layout.work; + const keepScroll = [ + ".ftree", + ".fview", + ".floor" + ].map((sel) => { + const el = work.querySelector(sel); + return [sel, el ? el.scrollTop : 0]; + }); + if (v.active !== "main" && !W.branches[v.active]) v.active = "main"; + renderTabs(); + if (layout.cols) { + layout.cols.dataset.panes = shownPanes(); + renderSwap(); + } + const showHist = shownPanes() !== "work", showWork = shownPanes() !== "history"; + if (layout.hist) if (showHist) drawIde(layout.hist, W); + else layout.hist.innerHTML = ""; + const inWork = !layout.hist && showHist ? `
` : ""; + work.className = "work " + (v.active === "main" ? "mainview" : "branchview") + (layout.hist ? "" : showHist && showWork ? " withhist" : ""); + work.innerHTML = inWork + (showWork || layout.hist ? v.active === "main" ? mainView() : branchView(v.active) : ""); + if (inWork) drawIde(work.querySelector(":scope > .panel.hist"), W); + noticeNodes(W); + for (const el of work.querySelectorAll(".tbody")) el.scrollTop = el.scrollHeight; + for (const [sel, top] of keepScroll) { + const el = work.querySelector(sel); + if (el) el.scrollTop = top; + } + if (sbLit) { + const id = sbLit; + sbLit = null; + lightSandbox(id); + } + if (sbPulse) { + const chips = [...work.querySelectorAll(`.sbc[data-sbid="${CSS.escape(sbPulse)}"]`)]; + sbPulse = null; + for (const el of new Set(chips.map((c) => c.closest(".bcard") || c))) { + el.classList.add("pulse"); + el.scrollIntoView({ block: "nearest" }); + } + } + } + function hostOf(n) { + const l = where$1(n), key = locKey(l); + return key && q(`[data-loc="${CSS.escape(key)}"]`) || (l && l.branch && layout.tabs ? layout.tabs.querySelector(`[data-tab="${CSS.escape(l.branch)}"]`) : null); + } + function bubbleOn(host, text, cls) { + const r = host.getBoundingClientRect(), base = overlay.getBoundingClientRect(), b = document.createElement("div"); + b.className = "bubble " + (cls || ""); + b.textContent = text; + b.style.left = Math.min(r.right - base.left - 70, r.left - base.left + r.width / 2) + "px"; + b.style.top = r.top - base.top + Math.min(40, r.height / 2) + "px"; + overlay.appendChild(b); + setTimeout(() => b.remove(), 2e3); + } + function flyBlock(host, nodeId, color) { + const target = q(`[data-node="${CSS.escape(nodeId)}"]`); + if (!target) return; + const a = host.getBoundingClientRect(), z = target.getBoundingClientRect(), base = overlay.getBoundingClientRect(), b = document.createElement("div"); + const x0 = a.left - base.left + 16, y0 = a.top - base.top + 16; + b.className = "block"; + b.style.background = color; + b.style.left = x0 + "px"; + b.style.top = y0 + "px"; + overlay.appendChild(b); + requestAnimationFrame(() => requestAnimationFrame(() => { + b.style.transform = `translate(${z.left - base.left + z.width / 2 - x0 - 6}px,${z.top - base.top + z.height / 2 - y0 - 6}px) scale(.7)`; + b.style.opacity = "0"; + })); + setTimeout(() => b.remove(), 900); + } + let shownNodes = null, freshNodes = []; + function noticeNodes(W) { + const ids = Object.keys(W.nodes), before = shownNodes; + shownNodes = new Set(ids); + if (!before) return; + const added = ids.filter((id) => !before.has(id) && W.nodes[id].by); + if (!added.length || added.length > 3) return; + freshNodes = added; + requestAnimationFrame(() => { + for (const id of freshNodes) visitNode(W.nodes[id].by, id, nodeMood(W.nodes[id])); + freshNodes = []; + }); + } + function visitNode(agent, id, mood) { + const hero = agent && AV.heroes[avatar(agent).av], sel = `svg.tree [data-node="${CSS.escape(id)}"]`; + if (!hero || !q(sel)) return; + const el = document.createElement("span"); + el.className = "visit"; + el.innerHTML = ``; + el.title = agent; + const end = performance.now() + 2e3; + const follow = () => { + const target = q(sel); + if (!target || performance.now() > end || el.dataset.on && !el.isConnected) { + el.remove(); + return; + } + const r = target.getBoundingClientRect(), box = (target.closest(".panel") || root).getBoundingClientRect(), base = overlay.getBoundingClientRect(); + const x = r.left + r.width / 2, y = r.top + r.height / 2; + el.style.visibility = !r.width || x < box.left || x > box.right || y < box.top + 24 || y > box.bottom ? "hidden" : ""; + el.style.left = x - base.left + "px"; + el.style.top = r.top - base.top + "px"; + if (!el.dataset.on) { + el.dataset.on = "1"; + overlay.appendChild(el); + } + requestAnimationFrame(follow); + }; + follow(); + } + /** The call that just happened, by `agent`: its bubble and, when it made a node, a block flying there. */ + function animate(agent) { + const W = v.W; + if (!W || !W.last || agent === "dsh" || PROJECT) return; + const mood = MOOD[agent] = moodOf(W.last), maid = root.dataset.skin === "maids"; + const host = hostOf(agent), id = W.last.node; + if (id && W.nodes[id]) { + freshNodes = freshNodes.filter((f) => f !== id); + const by = W.attrib[id] || agent; + setTimeout(() => visitNode(by, id, by === agent ? mood : nodeMood(W.nodes[id])), host ? 500 : 0); + } + if (!host) return; + const b = maid ? maidBubble(bubbleOf(W.last), mood) : bubbleOf(W.last); + if (b) bubbleOn(host, b[0], b[1]); + if (id && W.nodes[id]) flyBlock(host, id, getComputedStyle(root).getPropertyValue(W.nodes[id].branch ? W.branches[W.nodes[id].branch].color : "--trunk").trim()); + if (maid) { + const at = mood === "oops" || mood === "fail" ? host : id && q(`[data-node="${CSS.escape(id)}"]`); + if (at) setTimeout(() => { + const r = at.getBoundingClientRect(), base = overlay.getBoundingClientRect(); + maidBurst(overlay, r.left - base.left + r.width / 2, r.top - base.top + (at === host ? 16 : r.height / 2), mood); + }, at === host ? 0 : 600); + } + } + const setFollow = (on) => { + v.follow = on; + if (layout.follow) { + layout.follow.classList.toggle("on", on); + layout.follow.setAttribute("aria-pressed", String(on)); + } + if (o.onFollow) o.onFollow(on); + }; + const openTab = (tab) => { + if (prefs.pane === "history") { + prefs.pane = "work"; + savePrefs(); + } + v.active = tab; + setFollow(false); + closeMenu(); + render(); + }; + const onTabs = (e) => { + closeMenu(); + const pin = e.target.closest("[data-pin]"); + if (pin) { + const b = pin.dataset.pin; + pinned[b] = !pinned[b]; + e.stopPropagation(); + render(); + return; + } + const more = e.target.closest("[data-more]"); + if (more) { + moreMenu(more); + e.stopPropagation(); + return; + } + const t = e.target.closest("[data-tab]"); + if (t) openTab(t.dataset.tab); + }; + const onSandbox = (e) => { + const t = e.target.closest && e.target.closest("[data-dws], [data-sbchip]"); + if (!t) return false; + if (t.dataset.sbchip) { + v.active = "main"; + setFollow(false); + sbPulse = t.dataset.sbchip; + render(); + return true; + } + const k = t.dataset.dws, w = v.W.ws[k] || null; + if (!w) return true; + v.active = w.branch; + setFollow(false); + focusPane = k; + render(); + focusPane = null; + q(`[data-loc="ws:${CSS.escape(k)}"]`)?.scrollIntoView({ block: "nearest" }); + return true; + }; + const onClick = (e) => { + if (!v.W) return; + { + const t = e.target.closest(".ide-tabs [data-ide]"); + if (e.target.closest(".ide-tabs [data-ideside]")) { + prefs.sideHidden = !prefs.sideHidden; + savePrefs(); + hist.toNow(); + render(); + return; + } + if (t) { + if (t.dataset.ide === "history" && v.ide !== "history") hist.toNow(); + v.ide = t.dataset.ide; + closeMenu(); + render(); + return; + } + if (e.target.closest("[data-ftree][data-ftype='file'], [data-fopen]")) v.ide = "file"; + if (!PROJECT && e.target.closest("svg.tree [data-node], [data-fblame]")) setFollow(false); + } + if (hist.click(e)) return; + if (layout.tabs && layout.tabs.contains(e.target)) return onTabs(e); + if (layout.follow && layout.follow.contains(e.target)) { + setFollow(!v.follow); + if (v.follow && o.onFollowOn) o.onFollowOn(); + return; + } + if (onSandbox(e)) return; + const sd = e.target.closest("[data-sdk]"); + if (sd) { + const k = sd.dataset.sdk; + OPEN_SDK.has(k) ? OPEN_SDK.delete(k) : OPEN_SDK.add(k); + render(); + return; + } + if (files.click(e)) return; + const ro = e.target.closest("[data-roster]"); + if (ro) { + rosterMenu(ro); + return; + } + const mo = e.target.closest("[data-more]"); + if (mo) { + moreMenu(mo); + return; + } + const sw = e.target.closest("button[data-swap]"); + if (sw) { + prefs.pane = sw.dataset.swap; + savePrefs(); + hist.toNow(); + render(); + return; + } + const op = e.target.closest("[data-open]"); + if (op) openTab(op.dataset.open); + else if (!e.target.closest("[data-more]") && !e.target.closest(".menu")) closeMenu(); + }; + const aimPop = (e) => { + const sum = e.target.closest && e.target.closest(".sbsum"); + if (sum) sum.classList.toggle("lefty", sum.getBoundingClientRect().right < 340); + }; + const onOver = (e) => { + aimPop(e); + const t = e.target.closest && e.target.closest("[data-sbhl]"); + lightSandbox(t ? t.dataset.sbhl : null); + hist.over(e); + }; + const onChange = (e) => { + if (v.follow && e.target.closest && e.target.closest("[data-fat], [data-fbasesel]")) setFollow(false); + files.change(e); + }; + const place = () => { + if (hist.resized()) render(); + }; + root.addEventListener("click", onClick); + root.addEventListener("mouseover", onOver); + root.addEventListener("focusin", aimPop); + root.addEventListener("mouseout", hist.out); + root.addEventListener("change", onChange); + addEventListener("resize", place); + root.addEventListener("scroll", place, { + capture: true, + passive: true + }); + root.addEventListener("scroll", hist.scroll, { + capture: true, + passive: true + }); + const resize = typeof ResizeObserver === "function" ? new ResizeObserver(place) : null; + if (resize) resize.observe(root); + return { + get W() { + return v.W; + }, + set W(W) { + v.W = W; + }, + get active() { + return v.active; + }, + set active(tab) { + v.active = tab; + }, + get follow() { + return v.follow; + }, + set follow(on) { + setFollow(on); + }, + /** Locations to highlight and agents acting in the current step. */ + set lastLoc(loc) { + v.lastLoc = loc; + }, + set acting(names) { + v.acting = new Set(names); + }, + /** Where the view's data comes from: shown in the preview's own note element, when it has one. */ + set note(text) { + v.note = text || ""; + if (layout.note) layout.note.textContent = v.note; + }, + /** Shows History or Files in the left panel for a tab. */ + setRight(tab, mode) { + v.rightMode[tab] = mode; + v.ide = mode === "files" ? "file" : mode === "history" ? "history" : v.ide; + }, + /** A project's tab: "file", "history", "storage" or "sandboxes" (when the page gives engine.sandboxes). */ + get ide() { + return v.ide; + }, + set ide(tab) { + v.ide = tab; + render(); + }, + avatar, + render, + animate, + files, + dispose() { + clearTimeout(leaveTimer); + hist.dispose(); + root.removeEventListener("click", onClick); + root.removeEventListener("mouseover", onOver); + root.removeEventListener("mouseout", hist.out); + root.removeEventListener("change", onChange); + removeEventListener("resize", place); + root.removeEventListener("scroll", place, { capture: true }); + root.removeEventListener("scroll", hist.scroll, { capture: true }); + if (resize) resize.disconnect(); + overlay.remove(); + } + }; + } + //#endregion + //#region ../view/src/filesource.js + const KEEP = 1e3; + /** + * @param {(kind: string, query: object) => Promise} fetch one Host read + * @param {() => void} onchange + */ + function createFilesSource(fetch, onchange) { + const kept = /* @__PURE__ */ new Map(), wanted = /* @__PURE__ */ new Map(); + const keyOf = (kind, q) => `${kind}\n${JSON.stringify(q)}`; + /** { value, error } of one read, started on first use */ + function one(kind, q) { + const key = keyOf(kind, q); + let e = kept.get(key); + if (e) { + kept.delete(key); + kept.set(key, e); + return e; + } + e = { + value: void 0, + error: null + }; + kept.set(key, e); + fetch(kind, q).then((value) => { + e.value = value; + }, (error) => { + e.error = error; + }).then(() => onchange()); + while (kept.size > KEEP) kept.delete(kept.keys().next().value); + return e; + } + /** The pages asked for so far, joined: { items, more, loading, error } */ + function paged(kind, q) { + const pages = wanted.get(keyOf(kind, q)) ?? 1, items = []; + let position = 0; + for (let n = 0; n < pages; n++) { + const e = one(kind, { + ...q, + position + }); + if (e.error) return { + items, + more: false, + loading: false, + error: e.error + }; + if (!e.value) return { + items, + more: false, + loading: true, + error: null + }; + items.push(...e.value.items); + if (e.value.next == null) return { + items, + more: false, + loading: false, + error: null + }; + position = e.value.next; + } + return { + items, + more: true, + loading: false, + error: null + }; + } + const ask = (kind, q) => { + const key = keyOf(kind, q); + wanted.set(key, (wanted.get(key) ?? 1) + 1); + }; + return { + /** A folder's entries: [{ name, path, type }] in the SDK's order. */ + list: (ref, dir) => paged("list", { + ref, + dir + }), + moreList: (ref, dir) => ask("list", { + ref, + dir + }), + /** One window from `line`: { text, startLine, nextLine, size, lineTruncated } or { binary, size }. */ + read: (ref, path, line) => one("read", { + ref, + path, + line + }), + /** Which Commit wrote each line from `line`: { lines: [{ n, text, commit, message }], versions, nextLine }. */ + blame: (ref, path, line) => one("blame", { + ref, + path, + line + }), + /** The paths that differ: [{ path, kind, type }]. */ + changes: (from, to) => paged("changes", { + from, + to + }), + moreChanges: (from, to) => ask("changes", { + from, + to + }), + /** One file's line diff: { kind, hunks, hunksOmitted }. */ + diff: (from, to, path) => one("diff", { + from, + to, + path + }) + }; + } + //#endregion + //#region ../view/src/skins/heroes/style.js + const HEROES_CSS = ` +.lfs { + /* the LayerFS website's tokens (layerfs-website global.css), light only */ + --font: "Instrument Sans", -apple-system, BlinkMacSystemFont, "Helvetica Neue", Arial, sans-serif; + --mono: "IBM Plex Mono", ui-monospace, "SF Mono", Menlo, Monaco, monospace; + --paper: #FBF9F5; --dot: #EEE9DF; --line: #E2DED6; --line2: #ECE9E2; --tab: #F4F2EC; --lane: #F3F6FC; + --trunk: #5C9A3C; --green-dark: #3F7524; --twig: #B9B2A6; --coral: #E07A5A; --coral-text: #B8502C; --coral-pale: #FBE9E2; + --window: #FBF9F5; --chrome: #F4F2EC; --card: #FFFFFF; --well: #F0EEE8; --grid-bg: #FBF9F5; + --text: #1E2533; --text-2: #5B6372; --text-3: #8A8780; --sep: #ECE9E2; --sep-strong: #E2DED6; + --accent: #2F5BB5; --accent-bg: #E6EEFA; --green: #3E9B74; --orange: #D29A2E; --red: #C8452F; --purple: #8A6BC8; + --orange-bg: rgba(210,154,46,.14); --purple-bg: rgba(138,107,200,.13); --red-bg: #FBE9E2; --green-bg: rgba(62,155,116,.13); + --term: #FDFCFA; --term-head: #F6F4EF; --term-border: #E2DED6; --term-text: #1E2533; --term-dim: #8A8780; + --t-blue: #2F5BB5; --t-green: #2E7D5B; --t-orange: #93650F; --t-red: #B8502C; --t-purple: #6A4DA8; --t-cyan: #1F6B78; + --t-add-bg: rgba(46,125,91,.09); --t-del-bg: rgba(184,80,44,.09); + /* Branch colours: the website demo's */ + --b0: #E07A5A; --b1: #3E9B74; --b2: #8A6BC8; --b3: #D29A2E; --b4: #2B8A9A; --b5: #C8557A; + color-scheme: light; +} +`; + //#endregion + //#region ../view/src/skins/maids/style.js + const M$2 = ".lfs[data-skin=\"maids\"]"; + const svg = (body) => `url("data:image/svg+xml,${encodeURIComponent(`${body}`)}")`; + const PENCIL = svg(""); + const ERASER = svg(""); + const CLIP = svg(""); + //#endregion + //#region ../view/src/style.js + const CSS$1 = ` +${HEROES_CSS} +.lfs, .lfs * { box-sizing: border-box; } +.lfs button:not(.lfs-own *) { font: inherit; color: inherit; } /* .lfs-own: a page the host draws with its own controls (Sandboxes) */ +/* title bar + tabs: the website's Branch tabs */ +.lfs .tabs { display: flex; flex-wrap: wrap; gap: 4px; align-items: flex-end; align-self: stretch; min-width: 0; flex: 1; padding: 8px 0 0; } +.lfs .tab { min-height: 40px; display: flex; align-items: center; gap: 8px; padding: 8px 12px; cursor: pointer; color: var(--text); white-space: nowrap; border: 1px solid transparent; border-bottom: 0; background: transparent; position: relative; font: 13px var(--mono); transition: opacity .4s, background .2s; margin-bottom: -1px; } +.lfs .tab:hover { background: rgba(255,255,255,.6); } +.lfs .tab[aria-selected="true"] { background: #fff; border-color: var(--line); } +.lfs .tab.dim { opacity: .55; } +.lfs .tab .sq { width: 8px; height: 8px; background: var(--bc); flex: none; } +.lfs .tab.main .sq { background: var(--accent); } +.lfs .tab .tchip { font: 11.5px var(--mono); padding: 1px 6px; background: #F0EEE8; color: #6B6964; } +.lfs .tab .tchip.ro { background: var(--coral-pale); color: var(--coral-text); } +.lfs .tab .tchip.bad { background: var(--coral-pale); color: var(--coral-text); } +.lfs .tab.conflict { color: var(--t-red); } +.lfs .tab .avs { display: inline-flex; gap: 1px; } +.lfs .tab .pin { opacity: 0; font-size: 10px; padding: 0 2px; } +.lfs .tab:hover .pin, .lfs .tab .pin.on { opacity: .8; } +.lfs .tab.enter { animation: lfs-grow .35s ease-out; } +.lfs .tab.more { font: 600 11px var(--mono); } +.lfs .menu { position: absolute; z-index: 60; background: var(--card); border-radius: 0; box-shadow: 0 10px 30px rgba(0,0,0,.25), 0 0 0 .5px var(--sep-strong); padding: 4px; min-width: 160px; } +.lfs .menu button { display: flex; width: 100%; gap: 8px; align-items: center; border: 0; background: transparent; padding: 6px 8px; border-radius: 5px; cursor: pointer; text-align: left; } +.lfs .menu button:hover { background: var(--accent-bg); } +.lfs .ib { height: 26px; min-width: 26px; padding: 0 8px; border: 1px solid transparent; border-radius: 0; font: 11.5px var(--mono); background: transparent; cursor: pointer; color: var(--text-2); display: inline-flex; align-items: center; gap: 6px; white-space: nowrap; } +.lfs .ib:hover { background: var(--sep); color: var(--text); } +.lfs .ib.on { color: var(--accent); border-color: var(--accent); background: var(--card); } +.lfs .ib svg { width: 15px; height: 15px; } +/* work area */ +.lfs .work { flex: 1; min-height: 0; display: grid; gap: 12px; padding: 12px; background: var(--card); } +/* History like an editor (view.js drawIde), on a project page and in a conversation: Files' tree in a sidebar, then File, History and Storage as tabs */ +.lfs.lfs-project { display: flex; flex-direction: column; min-height: 0; background: var(--window); } +.lfs .lfs-ide { flex: 1; min-width: 0; min-height: 0; display: flex; flex-wrap: wrap; container: ide / inline-size; background: var(--window); } +.lfs-ide .ide-side { flex: none; width: 248px; height: 100%; display: flex; flex-direction: column; min-height: 0; border-right: 1px solid var(--line); background: var(--card); } +.lfs-ide .ide-title { flex: none; display: flex; align-items: center; gap: 8px; min-width: 0; height: 38px; padding: 0 12px; border-bottom: 1px solid var(--line); background: var(--tab); font-size: 12.5px; } +.lfs-ide .ide-title .dot { flex: none; width: 8px; height: 8px; border-radius: 50%; } +.lfs-ide .ide-title b { font-weight: 600; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } +.lfs-ide .ide-title .pt { margin-left: auto; flex: none; font: 11.5px var(--mono); color: var(--text-3); } +.lfs-ide .ide-latest { flex: none; border: 0; border-radius: 4px; padding: 1px 6px; background: var(--accent-bg); color: var(--accent); font: 11px var(--mono); cursor: pointer; } +.lfs-ide .ide-side .ftree { padding-top: 6px; } +/* a wrapping row's line is as tall as its content: the full heights keep History's tree scrolling inside */ +.lfs-ide .ide-main { flex: 1 1 360px; height: 100%; min-width: 0; min-height: 0; display: flex; flex-direction: column; } +.lfs-ide .ide-tabs { flex: none; height: 38px; display: flex; align-items: stretch; min-width: 0; overflow-x: auto; border-bottom: 1px solid var(--line); background: var(--tab); scrollbar-width: none; } +.lfs-ide .ide-tabs button { flex: none; display: flex; align-items: center; gap: 6px; max-width: 220px; padding: 0 14px; border: 0; border-right: 1px solid var(--line); background: transparent; color: var(--text-3); font-size: 12.5px; cursor: pointer; } +.lfs-ide .ide-tabs button span { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } +.lfs-ide .ide-tabs button svg { flex: none; } +.lfs-ide .ide-tabs button:hover { color: var(--text); } +.lfs-ide .ide-tabs button[aria-selected="true"] { background: var(--card); color: var(--text); box-shadow: inset 0 -2px 0 var(--accent); } +.lfs-ide .ide-tabs .ide-dot { width: 7px; height: 7px; border-radius: 50%; background: var(--orange); } +.lfs-ide .ide-tabs .ide-dot.down { background: var(--red); } +.lfs-ide .ide-tabs button[data-ide="file"] span { font-family: var(--mono); font-size: 12px; } +.lfs-ide .ide-tabs .ide-toggle { padding: 0 11px; color: var(--text-3); } +.lfs-ide .ide-tabs .ide-toggle[aria-pressed="true"] { color: var(--accent); } +.lfs .lfs-ide.side-hidden > .ide-side { display: none; } +.lfs .lfs-ide .ide-main > .hist { flex: 1; min-height: 0; border: 0; box-shadow: none; } +.lfs-ide .ide-store { flex: 1; min-height: 0; overflow: auto; background: var(--card); } +.lfs .lfs-ide .spage { display: grid; gap: 28px; min-width: 0; padding: 22px 24px 28px; font: 12px/1.5 var(--mono); } +.lfs .lfs-ide .spage .sp-top { display: flex; flex-wrap: wrap; align-items: flex-end; gap: 16px 40px; } +.lfs .lfs-ide .spage .sp-disk { display: grid; gap: 6px; } +.lfs .lfs-ide .spage .sp-disk > div { display: flex; align-items: baseline; gap: 8px; } +.lfs .lfs-ide .spage .sp-disk p { margin: 0; font-size: 11px; color: var(--text-3); } +.lfs .lfs-ide .spage .sp-disk b { font: 500 34px/1 var(--mono); color: var(--text); letter-spacing: -.02em; } +.lfs .lfs-ide .spage .sp-disk span { color: var(--text-3); } +.lfs .lfs-ide .spage .sp-facts { flex: 1 1 300px; max-width: 520px; min-width: 0; display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 12px 0; } +.lfs .lfs-ide .spage .sp-fact { display: grid; gap: 2px; min-width: 0; padding: 0 16px; border-left: 1px solid var(--line); } +.lfs .lfs-ide .spage .sp-fact b { font: 500 16px var(--mono); color: var(--text); } +.lfs .lfs-ide .spage .sp-fact span { font-size: 11px; color: var(--text-3); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } +.lfs .lfs-ide .spage .sp-cols { display: grid; grid-template-columns: repeat(auto-fit, minmax(min(300px, 100%), 1fr)); gap: 28px 48px; align-items: start; } +.lfs .lfs-ide .spage section { display: grid; gap: 10px; min-width: 0; } +.lfs .lfs-ide .spage h4 { margin: 0; padding-bottom: 6px; border-bottom: 1px solid var(--line2); font: 600 11px var(--font); letter-spacing: .06em; text-transform: uppercase; color: var(--text-3); } +.lfs .lfs-ide .spage .srows { gap: 9px 12px; } +.lfs .lfs-ide .spage .bw { height: 10px; border-radius: 2px; background: var(--well); } +.lfs .lfs-ide .spage .bw > span { border-radius: 2px; } +.lfs .lfs-ide .spage .snote { margin: 0; font-size: 11px; } +.lfs .lfs-ide .spage .sp-cost { display: flex; flex-wrap: wrap; gap: 4px 18px; color: var(--text-3); } +.lfs .lfs-ide .spage .sp-cost b { font-weight: 500; color: var(--text); } +.lfs .lfs-ide .spage .sbars { height: 96px; gap: 2px; padding-bottom: 1px; border-bottom: 1px solid var(--line); } +.lfs .lfs-ide .spage .sbars > span { border-radius: 2px 2px 0 0; } +.lfs .lfs-ide .spage .sp-old { margin-left: auto; float: right; } +/* narrow: the main area wraps under the sidebar, which takes the whole width (.lfs-ide is the container, so its children change) */ +@container ide (max-width: 620px) { + .lfs .lfs-ide .spage { padding: 16px 14px 20px; gap: 22px; } + .lfs .lfs-ide .spage .sp-disk b { font-size: 26px; } + .lfs-ide .ide-side { width: 100%; height: 200px; border-right: 0; border-bottom: 1px solid var(--line); } + .lfs-ide .ide-main { height: calc(100% - 200px); min-height: 360px; } +} +.lfs .split { cursor: col-resize; position: relative; touch-action: none; } +.lfs .split::after { content: ""; position: absolute; top: 0; bottom: 0; left: 5.5px; width: 1px; background: var(--term-border); transition: background .15s, width .15s, left .15s; } +.lfs .split:hover::after { left: 5px; width: 2px; background: var(--accent); } +/* main: storage over Branches (with their Sandboxes) on the left, the project + log on the right the full height; under 760 one under another (the container + queries below). Storage keeps its own height, Branches take the rest; each + box scrolls inside itself. */ +.lfs .work.mainview { grid-template-columns: repeat(2, minmax(0, 1fr)); grid-template-rows: max-content minmax(auto, 1fr); overflow-y: auto; } /* the storage row is as tall as its card */ +.lfs .work.mainview > .storep { grid-column: 1; grid-row: 1; } +.lfs .work.mainview > .board { grid-column: 1; grid-row: 2; } +.lfs .work.mainview > .term:not(.storep) { grid-column: 2; grid-row: 1 / span 2; } +.lfs .work.mainview > * { min-width: 0; } +/* No box is squeezed: each keeps room for its header and one row of normal + cards (two across), empty or not; a short view scrolls instead. */ +.lfs .work.mainview { --cards-min: 92px; } +.lfs .work.mainview .floor { min-height: var(--cards-min); } +/* Branches never shrink below a few cards; the project log spans storage and + Branches, so it grows with them; a short window scrolls the whole tab */ +.lfs .work.mainview > .board { min-height: 340px; } +.lfs .work.mainview > .term { min-height: 160px; } +.lfs .work.mainview.withhist { grid-template-columns: minmax(300px, 360px) repeat(2, minmax(0, 1fr)); } +.lfs .work.mainview.withhist > .storep, .lfs .work.mainview.withhist > .board { grid-column: 2; } +.lfs .work.mainview.withhist > .term:not(.storep) { grid-column: 3; } +/* a Branch: its info, its agents, then its terminals two by two; more than four + terminals keep their height and the whole view scrolls */ +.lfs .work.branchview { display: flex; flex-direction: column; gap: 10px; overflow-y: auto; } +.lfs .work.branchview:not(.withhist) .wgrid { flex: 1 0 auto; overflow: visible; grid-auto-rows: minmax(240px, 1fr); } +/* the preview's layout: History is the work area's first column */ +.lfs .work.withhist { grid-template-columns: minmax(360px, 440px) minmax(0, 7fr) minmax(0, 5fr); background: var(--paper); } +.lfs .work.branchview.withhist { display: grid; grid-template-columns: minmax(360px, 440px) minmax(0, 1fr); grid-template-rows: auto auto minmax(0, 1fr); } +.lfs .work.branchview.withhist .hist { grid-row: 1 / -1; } +.lfs .work.withhist .hist { grid-row: 1 / -1; } +.lfs .ctl { display: flex; flex: none; align-self: flex-end; margin: 0 0 8px; border: 1px solid var(--line); background: #fff; } +.lfs .ctl button { min-height: 28px; border: 0; padding: 0 8px; font: 11.5px var(--mono); background: transparent; color: var(--text-2); cursor: pointer; } +.lfs .ctl button:hover { color: var(--accent); } +.lfs .ctl button.on { background: var(--text); color: #fff; } +/* terminals (Term in OrchestrationDemo.jsx) */ +.lfs .wterm { border: 1px solid var(--line); box-shadow: none; } +.lfs .wterm .thead { height: auto; padding: 6px 10px; font: 12px var(--mono); border-bottom: 1px solid var(--line); gap: 8px; } +.lfs .wterm .thead .t { font-weight: 500; color: var(--text); } +.lfs .wterm .thead .ghost { color: var(--text-3); min-width: 0; overflow: hidden; text-overflow: ellipsis; border: 0; background: none; padding: 0; font: inherit; } +.lfs .wterm .thead .sp { flex: 1; margin-right: -8px; } +.lfs .wterm .thead .ghost.sbchip { flex: 0 1 auto; cursor: pointer; } +.lfs .wterm .thead .ghost.sbchip:hover { color: var(--t-orange); background: none; } +.lfs .wterm .thead .av { width: 22px; height: 18px; } +.lfs .tbox { position: relative; flex: 1; min-height: 0; display: flex; flex-direction: column; } +.lfs .tbox .wm { position: absolute; left: 50%; top: 50%; transform: translate(-50%, -50%); height: 76%; max-height: 240px; min-height: 48px; width: auto; pointer-events: none; font-family: var(--mono); } +.lfs .wterm .tbody { position: relative; padding: 6px 10px; font: 12.5px/1.6 var(--mono); white-space: normal; } +.lfs .wterm.cap { flex: none; height: 300px; } +/* a terminal fills from the top, like a real one; once full it scrolls to its newest line (view.js) */ +.lfs .wterm.cap .tbody { flex: 1; min-height: 0; overflow-y: auto; display: flex; flex-direction: column; justify-content: flex-start; } +.lfs .wterm.cap .fsmore { color: var(--text-3); } +.lfs .wterm .ln { white-space: normal; } +/* a line's row: prompt, command (shortened with "…"), agent, time, sdk; the time never leaves the view */ +.lfs .wterm .lrow { display: flex; align-items: center; min-width: 0; white-space: nowrap; } +.lfs .wterm .lrow > * { flex: none; } +.lfs .wterm .lrow .prompt { white-space: pre; } +.lfs .wterm .lrow .cmd { flex: 0 1 auto; min-width: 0; overflow: hidden; text-overflow: ellipsis; } +.lfs .wterm .ln .grp { display: none; } +.lfs .wterm .ln .av { width: 20px; height: 15px; margin-left: 6px; } +.lfs .wterm .lrow .tm { margin-left: 8px; } +/* a new command types itself out, then its time, sdk and output appear */ +.lfs .wterm .ln.typing .cmd { max-width: calc(var(--n) * 1ch + 0.55ch); border-right: 0.55ch solid transparent; animation: lfs-type var(--d) steps(var(--n), end) both, lfs-caret var(--d) step-end both; } +.lfs .wterm .ln.typing .lrow > :not(.cmd):not(.prompt):not(.pen) { animation: lfs-fadein .25s var(--d) both; } +.lfs .wterm .out.new[style] { animation: lfs-fadein .25s var(--d) both; } +@keyframes lfs-type { from { max-width: 0; } } +@keyframes lfs-caret { 0% { border-right-color: var(--accent); } 100% { border-right-color: transparent; } } +.lfs .wterm .pen, .lfs .wterm .stk, .lfs .wterm .seal { display: none; } /* the maids' notebook hand: skins/maids/style.js */ +.lfs .wterm .out { padding-left: 0; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; } +.lfs .wterm.hot { border-color: var(--accent); box-shadow: 0 0 0 2px var(--accent); } +.lfs .wterm.bad { border-color: var(--coral); box-shadow: 0 0 0 2px var(--coral); } +.lfs .wtag { min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; padding: 2px 6px; flex: 0 1 auto; } +.lfs .wterm .thead .t, .lfs .storep .thead .t { flex: none; } +.lfs .wtag.grey { background: #F0EEE8; color: var(--text-2); } +.lfs .wtag.blue { background: var(--accent-bg); color: var(--accent); } +.lfs .wtag.coral { background: var(--coral-pale); color: var(--coral-text); } +.lfs .fsi { flex: none; } +/* main: the Branch cards on a sand floor (AgentBoard), the Store (StorePanel), the project terminal */ +.lfs .board { display: flex; flex-direction: column; min-height: 0; border: 1px solid var(--line); background: #fff; } +.lfs .bhead { display: flex; flex-wrap: nowrap; white-space: nowrap; align-items: center; gap: 4px 12px; padding: 6px 10px; border-bottom: 1px solid var(--line); background: var(--term-head); font: 12px var(--mono); color: #6B6964; } +.lfs .bhead .t { font-weight: 500; color: var(--text); } +.lfs .bhead .sp { flex: 1; margin-right: -8px; } +.lfs .bhead .roster { flex: none; border: 0; background: none; padding: 0; font: inherit; color: inherit; cursor: pointer; } +.lfs .bhead .roster:hover { color: var(--accent); } +.lfs .floor { flex: 1; min-height: 0; overflow-y: auto; padding: 8px; background: #F6EEDD radial-gradient(#E9DCC0 1px, transparent 1px) 0 0 / 12px 12px; } +/* cards stack in columns at least 300px wide (one full-width list in a normal board), each right under the one above, so a short card leaves no hole beside a tall one; + the stack keeps its natural height and the floor scrolls it (a fixed height would spill extra columns sideways) */ +.lfs .floor .stack { columns: 300px; column-gap: 8px; } +.lfs .floor .stack > .bcard { break-inside: avoid; margin-bottom: 8px; } +.lfs .floor .none { padding: 24px 0; text-align: center; font: 12px var(--mono); color: #8C6A3A; } +.lfs .bcard { display: flex; flex-direction: column; min-width: 0; border: 1px solid var(--bc); background: #fff; transition: opacity .3s; } +.lfs .bcard.dim { opacity: .55; } +.lfs .bcard.flash { animation: lfs-flash 1s ease-out; } +.lfs .bcard .bhd { display: flex; align-items: center; gap: 8px; padding: 4px 8px; font: 12.5px var(--mono); background: color-mix(in srgb, var(--bc) 10%, white); cursor: pointer; min-width: 0; } +.lfs .bcard .bhd .sq { width: 10px; height: 10px; background: var(--bc); flex: none; } +.lfs .bcard .bhd .nm { font-weight: 500; color: color-mix(in srgb, var(--bc) 75%, black); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; min-width: 0; } +.lfs .bcard .bhd .note { margin-left: auto; flex: none; font-size: 11px; color: #6B6964; } +.lfs .crow { display: flex; align-items: center; gap: 6px; padding: 3px 6px; border-top: 1px solid var(--line2); font: 12px var(--mono); cursor: default; } +.lfs .crow[data-dws] { cursor: pointer; } +.lfs .crow.off { opacity: .6; } +.lfs .crow .av { width: 24px; height: 20px; } +.lfs .crow .nm { color: var(--text); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; min-width: 0; } +.lfs .crow .st { margin-left: auto; flex: none; padding: 1px 4px; font-size: 10.5px; background: color-mix(in srgb, var(--ac) 12%, white); color: color-mix(in srgb, var(--ac) 80%, black); } +.lfs .crow.off .st { background: #F0EEE8; color: var(--text-3); } +.lfs .crow.sblit { box-shadow: inset 0 0 0 2px var(--orange); } +.lfs .bcard.pulse { animation: lfs-focuspane 1.6s ease-out; } +.lfs .pool { display: flex; flex-wrap: wrap; align-items: center; gap: 4px 8px; padding: 6px 10px; border-top: 1px solid #E4D6B8; background: #EFE3C8; font: 11px var(--mono); color: #8C6A3A; } +.lfs .pool .av { width: 22px; height: 18px; opacity: .7; } +.lfs .board > .bhead, .lfs .board > .pool { flex: none; } +/* a Sandbox as a chip: on a Workspace's row and in the box's foot; hover lights every chip and row in it */ +.lfs .sbc { display: inline-flex; align-items: center; gap: 4px; flex: 0 1 auto; min-width: 0; padding: 1px 5px; border: 1px solid #C9D3E6; background: var(--accent-bg); color: var(--accent); font: 11px var(--mono); white-space: nowrap; cursor: default; transition: box-shadow .15s; } +.lfs .sbc .boxi { flex: none; width: 12px; height: 12px; } +.lfs .sbc .pre { flex: 0 1 auto; min-width: 2ch; overflow: hidden; text-overflow: ellipsis; opacity: .65; } +.lfs .sbc b { flex: 0 1 auto; min-width: 0; font-weight: 600; overflow: hidden; text-overflow: ellipsis; } +.lfs .sbc .wsn { flex: none; margin-left: 2px; color: var(--text-2); } +.lfs .sbc.closed { opacity: .55; border-style: dashed; } +.lfs .sbc.sblit { box-shadow: 0 0 0 2px var(--orange); } +.lfs .sbc.pulse { animation: lfs-focuspane 1.6s ease-out; } +/* on a Workspace's row the Sandbox chip gives way before the agent's name */ +.lfs .crow .sbc { flex-shrink: 6; } +.lfs .crow.ws .nm { flex: 0 1 auto; min-width: 3ch; } +.lfs .crow .dt { flex: none; padding: 0 4px; font-size: 10.5px; background: #F0EEE8; color: var(--text-2); } +.lfs .crow .dt.warn { background: var(--coral-pale); color: var(--coral-text); } +.lfs .crow[data-dws]:hover { background: color-mix(in srgb, var(--bc) 8%, white); } +/* the header's count of Workspaces and Sandboxes: hover or focus opens every Sandbox's record */ +.lfs .sbsum { position: relative; display: inline-flex; flex: 0 1 auto; min-width: 0; cursor: default; outline: none; } +.lfs .sbsum:focus-visible .wtag { box-shadow: 0 0 0 2px var(--accent); } +.lfs .sbpop { display: none; position: absolute; right: 0; top: calc(100% + 6px); z-index: 30; width: min(320px, calc(100vw - 32px)); max-height: 360px; overflow-y: auto; padding: 4px; border: 1px solid var(--line); background: var(--card); box-shadow: 0 10px 28px rgba(30,37,51,.18); font: 11px var(--mono); color: var(--text-2); white-space: normal; } +.lfs .sbsum:hover .sbpop, .lfs .sbsum:focus-within .sbpop { display: block; } +.lfs .sbsum.lefty .sbpop { right: auto; left: 0; } +.lfs .sbli { display: flex; flex-wrap: wrap; align-items: center; gap: 3px 8px; padding: 6px; border-bottom: 1px solid var(--line2); } +.lfs .sbli:last-child { border-bottom: 0; } +.lfs .sbli.closed { opacity: .6; } +.lfs .sbli .sbst { margin-left: auto; flex: none; display: inline-flex; align-items: center; gap: 4px; font-size: 10.5px; color: var(--text-3); } +.lfs .sbli .sbst::before { content: ""; width: 6px; height: 6px; border-radius: 50%; background: var(--text-3); } +.lfs .sbli .sbst.on { color: var(--green-dark); } +.lfs .sbli .sbst.on::before { background: var(--green); } +.lfs .sbli .sbm { flex-basis: 100%; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; color: var(--text-3); } +.lfs .sbli .sbm.l { color: var(--text-2); } +.lfs .sbproc { display: flex; align-items: center; gap: 6px; padding: 3px 8px; border-top: 1px solid var(--line2); font: 11.5px var(--mono); color: var(--green-dark); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } +.lfs .sbproc .d { width: 7px; height: 7px; border-radius: 50%; background: var(--green); flex: none; } +.lfs .hint-i { display: inline-grid; place-items: center; width: 14px; height: 14px; border-radius: 50%; border: 1px solid currentColor; font: italic 600 9.5px/1 var(--font); color: var(--text-3); cursor: help; flex: none; } +.lfs .hint-i:hover, .lfs .hint-i:focus { color: var(--accent); outline: none; } +.lfs .menu .mhead { padding: 6px 8px 2px; border-top: 1px solid var(--line2); margin-top: 4px; font: 10.5px var(--mono); color: var(--text-3); } +.lfs .menu .mt { margin-left: auto; font: 10.5px var(--mono); color: var(--text-3); } +.lfs .tab.more.retired { color: var(--text-3); font-weight: 400; } +.lfs .storep { flex: none; border: 1px solid var(--line); box-shadow: none; } +.lfs .storep .thead { height: auto; padding: 6px 10px; font: 12px var(--mono); border-bottom: 1px solid var(--line); } +.lfs .storep .thead .t { font-weight: 500; } +.lfs .storep .thead .sp { flex: 1; margin-right: -8px; } +.lfs .sbody { display: flex; flex-direction: column; gap: 6px; padding: 8px 10px; } +.lfs .tiles { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 6px; } +@media (min-width: 1536px) { .lfs .tiles { grid-template-columns: repeat(4, minmax(0, 1fr)); } } +.lfs .tile { display: flex; flex-direction: column; min-width: 0; border: 1px solid var(--line2); background: #fff; padding: 4px 8px; font-family: var(--mono); } +.lfs .tile span { font-size: 10.5px; line-height: 1.25; color: #6B6964; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } +.lfs .tile b { font-size: 15px; font-weight: 500; line-height: 1.4; color: var(--text); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } +.lfs .tile b.blue { color: var(--accent); } +.lfs .tile b.coral { color: var(--coral-text); } +.lfs .sbar2 { display: flex; height: 6px; background: #E6EBF5; } +.lfs .sbar2 .p { background: var(--accent); } +.lfs .sbar2 .m { background: var(--coral); } +.lfs .sbar2 .f { background: #C9D0DB; } +.lfs .sline { font: 11px var(--mono); color: var(--text-2); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } +.lfs .sline b { font-weight: 500; color: var(--text); } +.lfs .sline .mc { color: var(--coral-text); } +.lfs .term.storep:has(.sv2) { flex: none; overflow: visible; } +/* the storage card is as tall as its content (a fixed set of rows): it never scrolls or clips */ +.lfs .work.mainview > .term.storep:has(.sv2) { flex: none; height: auto; min-height: min-content; overflow: visible; } +.lfs .sv2 { gap: 6px; padding: 8px 10px; font: 11.5px/1.45 var(--mono); color: var(--text-2); } +.lfs .sv2 .shead { display: flex; align-items: baseline; gap: 8px; flex-wrap: wrap; } +.lfs .sv2 .shead b { font: 500 18px var(--mono); color: var(--text); } +.lfs .sv2 .ssub, .lfs .sv2 .snote { color: var(--text-3); font-size: 10.5px; } +.lfs .sv2 .srows, .lfs .sv2 .scost { display: grid; grid-template-columns: max-content minmax(0, 1fr) auto; gap: 4px 8px; align-items: center; } +.lfs .sv2 .lb { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } +.lfs .sv2 .bw { height: 8px; } +.lfs .sv2 .bw > span { display: block; height: 100%; min-width: 2px; } +.lfs .sv2 .vl { text-align: right; color: var(--text); white-space: nowrap; } +.lfs .sv2 .hd { background: #5F5E5A; } .lfs .sv2 .fc { background: #D3D1C7; } .lfs .sv2 .dd { background: var(--accent); } .lfs .sv2 .cp { background: #1D9E75; } .lfs .sv2 .md { background: #B4B2A9; } +.lfs .sv2 .scost { grid-template-columns: max-content auto auto; justify-content: start; gap: 4px 12px; border-top: 1px solid var(--line2); padding-top: 6px; } +.lfs .sv2 .scost b { font-weight: 500; color: var(--text); } +.lfs .sv2 .sbars { display: flex; align-items: flex-end; gap: 1px; height: 24px; } +.lfs .sv2 .sbars > span { flex: 1; min-width: 1px; } +.lfs .sv2 .fs { background: #7F77DD; } .lfs .sv2 .ws { background: #D85A30; } .lfs .sv2 .ot { background: #B4B2A9; } +.lfs .sv2 .k { display: inline-block; width: 8px; height: 8px; margin: 0 4px 0 0; vertical-align: -1px; } +.lfs .sv2 .k.ws { margin-left: 8px; } +/* a Branch (BranchPanel): its line, its agents, then fs and Workspace terminals two by two */ +.lfs .wchips { flex: none; display: flex; flex-wrap: nowrap; align-items: center; gap: 6px; min-height: 26px; overflow-x: auto; scrollbar-width: none; } +.lfs .wchips > .wchip, .lfs .wchips > .none { flex: none; } +/* the Branch's facts, one sign at the end of its agents' row */ +.lfs .wsigns { margin-left: auto; display: flex; gap: 6px; flex: none; } +.lfs .sign { display: inline-flex; align-items: center; gap: 5px; height: 24px; padding: 0 9px; font: 11.5px var(--mono); color: var(--text-2); background: var(--well); border: 1px solid var(--line2); white-space: nowrap; } +.lfs .wchips .none { font: 11.5px var(--mono); color: var(--text-3); align-self: center; } +.lfs .wchip { display: flex; align-items: center; gap: 6px; border: 1px solid var(--line); padding: 2px 8px 2px 4px; font: 11.5px var(--mono); opacity: .7; } +.lfs .wchip.on { border-color: var(--ac); background: #fff; opacity: 1; } +.lfs .wchip .av { width: 20px; height: 16px; } +.lfs .wchip .nm { color: var(--text); } +.lfs .wchip .st { color: var(--text-3); } +.lfs .wchip.on .st { color: color-mix(in srgb, var(--ac) 80%, black); } +.lfs .wgrid { flex: 1; min-height: 0; display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); grid-auto-rows: minmax(176px, 1fr); gap: 12px; overflow-y: auto; } +/* a Branch's notebook: one page, split into borderless blocks along dashed perforations. + One block fills it; two sit across; three are fs beside two stacked; more go in rows of + two, an odd last block across. Blocks stretch to their row (not the terminal height). */ +.lfs .nb { position: relative; gap: 0; background: var(--term); box-shadow: 0 0 0 1px var(--line); } +.lfs .nb > .wterm.cap { height: auto; min-height: 0; } +.lfs .nb > .wterm { border: 0; border-radius: 0; box-shadow: none; background: transparent; } +.lfs .nb > .wterm > .thead { border-bottom: 0; background: color-mix(in srgb, var(--term-head) 70%, transparent); } +.lfs .nb > .wterm:nth-child(even) { border-left: 1.5px dashed var(--line); } +.lfs .nb > .wterm:nth-child(n+3) { border-top: 1.5px dashed var(--line); } +.lfs .nb:not(.n3) > .wterm:last-child:nth-child(odd):not(:first-child) { grid-column: 1 / -1; } +.lfs .nb.n1 { grid-template-columns: minmax(0, 1fr); grid-template-rows: minmax(240px, 1fr) auto; } +.lfs .nb.n3 > .wterm:first-child { grid-row: span 2; } +.lfs .nb.n3 > .wterm:nth-child(3) { grid-column: 2; border-left: 1.5px dashed var(--line); } +/* states draw inside a block (its edges are the page's) */ +.lfs .nb > .wterm.wterm.hot { box-shadow: inset 0 0 0 1.5px var(--accent); } +.lfs .nb > .wterm.wterm.bad { box-shadow: inset 0 0 0 1.5px var(--coral); border-color: var(--coral); border-style: dashed; } +.lfs .nb > .wterm.wterm.sblit { box-shadow: inset 0 0 0 2px var(--orange); } +/* a new block opens from its perforation: across from the left edge, below from the top */ +.lfs .nb > .wterm.enter { animation: lfs-nbopen-x .3s ease-out; } +.lfs .nb > .wterm.enter:nth-child(odd) { animation-name: lfs-nbopen-y; } +@keyframes lfs-nbopen-x { from { clip-path: inset(0 100% 0 0); } to { clip-path: inset(0); } } +@keyframes lfs-nbopen-y { from { clip-path: inset(0 0 100% 0); } to { clip-path: inset(0); } } +@media (prefers-reduced-motion: reduce) { .lfs .nb > .wterm.enter { animation: none; } } +.lfs .nb > .wnone { grid-column: 1 / -1; padding: 8px 10px; font: italic 11.5px var(--mono); color: var(--text-3); text-align: center; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; } +.lfs .seg { display: inline-flex; border: 1px solid var(--line); background: var(--card); flex: none; } +.lfs .seg button { border: 0; background: transparent; font: 11px var(--mono); padding: 3px 8px; cursor: pointer; color: var(--text-2); display: inline-flex; align-items: center; gap: 4px; } +.lfs .seg button:hover { color: var(--text); } +.lfs .seg button.on { background: var(--text); color: #fff; } +.lfs .seg svg { width: 12px; height: 12px; fill: none; stroke: currentColor; stroke-width: 1.6; stroke-linecap: round; } +.lfs .seg svg .fill { fill: currentColor; stroke: none; } +.lfs .col { display: flex; flex-direction: column; gap: 12px; min-height: 0; min-width: 0; } +.lfs .term { display: flex; flex-direction: column; background: var(--term); border-radius: 0; overflow: hidden; min-width: 0; min-height: 0; box-shadow: 0 0 0 1px var(--line); position: relative; flex: 1; transition: box-shadow .25s; } +.lfs .term.hot { box-shadow: 0 0 0 1.5px var(--accent), 0 6px 18px rgba(0,0,0,.12); } +.lfs .term.bad { box-shadow: 0 0 0 1.5px var(--red), 0 6px 18px rgba(255,59,48,.18); } +.lfs .term.enter { animation: lfs-grow .35s ease-out; } +.lfs .term.leaving { animation: lfs-leave 3.6s ease-in forwards; pointer-events: none; } +.lfs .thead { height: 34px; flex: none; display: flex; align-items: center; gap: 8px; padding: 0 10px; background: var(--term-head); color: var(--term-text); font: 12.5px var(--mono); border-bottom: 1px solid var(--line2); white-space: nowrap; overflow: hidden; } +.lfs .thead .ttl { font: 12px var(--mono); color: var(--term-dim); overflow: hidden; text-overflow: ellipsis; } +.lfs .thead .sp { flex: 1; } +.lfs .kind { font: 600 11px var(--mono); padding: 0; letter-spacing: .06em; flex: none; background: none !important; color: var(--text) !important; } +.lfs .kind.fs { background: var(--accent-bg); color: var(--t-blue); } +.lfs .kind.sandbox { background: var(--orange-bg); color: var(--t-orange); } +.lfs .kind.history { background: var(--purple-bg); color: var(--t-purple); } +.lfs .kind.files { background: var(--green-bg); color: var(--t-green); } +.lfs .kind.plain { background: var(--well); color: var(--text-2); } +.lfs .pill { font: 11px var(--mono); padding: 1px 6px; border-radius: 0; background: var(--well); color: var(--term-dim); white-space: nowrap; display: inline-flex; gap: 4px; align-items: center; } +.lfs .pill.warn { background: var(--red-bg); color: var(--t-red); } +.lfs .pill.run { background: var(--green-bg); color: var(--t-green); } +.lfs .pill.ro { background: var(--coral-pale); color: var(--coral-text); } +.lfs .agent-tag { display: inline-flex; align-items: center; gap: 4px; font: 600 11px var(--font); color: var(--ac); background: color-mix(in srgb, var(--ac) 14%, transparent); padding: 0 6px 0 3px; border-radius: 4px; height: 17px; } +.lfs .tbody { flex: 1; min-height: 0; overflow: auto; padding: 10px 12px 8px; font: 12.5px/1.7 var(--mono); color: var(--term-text); white-space: pre-wrap; word-break: break-word; } +.lfs .ln { display: block; white-space: pre-wrap; } +.lfs .ln.new { animation: lfs-fadein .35s ease-out; } +.lfs .ln .cmd { color: var(--term-text); } +.lfs .ln .grp { font: 10px var(--mono); color: var(--term-dim); border: 1px dashed var(--term-border); border-radius: 3px; padding: 0 4px; margin-right: 6px; vertical-align: 1px; } +.lfs .ln.dim, .lfs .ln.dim .cmd { color: var(--term-dim); } +.lfs .out { display: block; color: var(--term-dim); padding-left: 2ch; } +.lfs .out.good { color: var(--t-green); } +.lfs .out.bad { color: var(--t-red); } +.lfs .out.mark { color: var(--t-orange); } +.lfs .prompt { color: var(--text-3); } +.lfs .inrow { flex: none; display: flex; align-items: center; gap: 6px; padding: 5px 10px 7px; font: 12px var(--mono); color: var(--term-dim); border-top: 1px solid var(--term-border); } +.lfs .inrow .prompt { flex: none; white-space: nowrap; } +.lfs .inrow > span:last-child { min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } +.lfs .inrow .caret { width: 7px; height: 14px; background: var(--term-dim); opacity: .5; animation: lfs-blink 1.1s steps(2) infinite; } +/* History: the website's tree (tree.js) */ +.lfs .graphwrap { flex: 1; min-height: 0; overflow: auto; padding: 6px 4px; } +.lfs .panel { background: var(--card); border: 1px solid var(--line); box-shadow: 0 1px 0 var(--line), 0 12px 32px rgba(30,37,51,.06); display: flex; flex-direction: column; min-height: 0; min-width: 0; } +.lfs .hist .phead { flex: none; display: flex; align-items: center; gap: 10px; padding: 9px 12px; border-bottom: 1px solid var(--line); background: var(--tab); font: 12px var(--mono); color: var(--text-3); white-space: nowrap; overflow: hidden; } +.lfs .hist .phead .ref { overflow: hidden; text-overflow: ellipsis; min-width: 0; } +.lfs .hist .phead > * { flex: none; } +.lfs .hist .phead > .ref, .lfs .hist .phead > .m { flex: 0 1 auto; min-width: 0; overflow: hidden; text-overflow: ellipsis; } +/* a narrow History keeps its controls: the count goes first, then Play's word */ +.lfs .hist { container: hist / inline-size; } +@container hist (max-width: 460px) { .lfs .hist .phead > .m { display: none; } .lfs .hist .phead { gap: 8px; } } +@container hist (max-width: 390px) { .lfs .hist .phead [data-play] .lbl { display: none; } } +.lfs .hist .phead .sp { flex: 1; } +.lfs .hist .fbody, .lfs .hist .ftree, .lfs .hist .fview { min-height: 0; } +.lfs .treebox { flex: 1; min-height: 0; display: flex; flex-direction: column; position: relative; } +.lfs .treewrap { flex: 1; min-height: 0; overflow: auto; outline: none; position: relative; cursor: grab; } +.lfs .treewrap.panning { cursor: grabbing; user-select: none; } +.lfs .treewrap [data-node], .lfs .treewrap .tag { cursor: pointer; } +.lfs.tz-key .treewrap, .lfs.tz-key .treewrap [data-node] { cursor: zoom-in; } +.lfs.tz-key.tz-out .treewrap, .lfs.tz-key.tz-out .treewrap [data-node] { cursor: zoom-out; } +.lfs .tzoom { position: absolute; z-index: 5; right: 12px; bottom: 12px; display: flex; border: 1px solid var(--line); background: rgba(255,255,255,.92); box-shadow: 0 2px 8px rgba(0,0,0,.08); backdrop-filter: blur(4px); } +.lfs .tzoom button { min-width: 28px; height: 26px; border: 0; padding: 0 6px; background: none; font: 13px var(--mono); color: var(--text-2); cursor: pointer; } +.lfs .tzoom button + button { border-left: 1px solid var(--line2); } +.lfs .tzoom button:hover { background: var(--accent-bg); color: var(--accent); } +.lfs .tzoom .tzv { min-width: 48px; font-size: 11px; } +.lfs .treewrap:focus-visible { box-shadow: inset 0 0 0 2px var(--accent); } +.lfs svg.tree { display: block; font-family: var(--mono); font-size: 10px; } +.lfs svg.tree .lane { fill: var(--lane); } +.lfs svg.tree .grid { stroke: #F1EEE8; } +.lfs svg.tree .now { stroke: var(--text); stroke-opacity: .35; stroke-dasharray: 2 3; } +.lfs svg.tree .nowt { font-weight: 600; fill: var(--text); } +.lfs svg.tree .fork { fill: none; stroke-width: 2.5; opacity: .6; stroke-linecap: round; } +.lfs svg.tree .publish { fill: none; stroke-width: 1.6; stroke-dasharray: 4 3; opacity: .75; } +.lfs svg.tree .graft { fill: none; stroke-width: 1.8; opacity: .6; } +.lfs svg.tree .link.far { opacity: .14; stroke-width: 1.2; } +.lfs svg.tree .link.on { opacity: .95; stroke-width: 2.2; } +.lfs svg.tree .bough { fill: none; stroke-linecap: round; opacity: .9; } +.lfs svg.tree .twig { fill: none; stroke: var(--twig); stroke-width: 2.4; stroke-linecap: round; } +.lfs svg.tree .trunk { fill: none; stroke: var(--trunk); stroke-linecap: round; } +.lfs svg.tree .trunk-on { fill: none; stroke: var(--trunk); stroke-width: 2.6; stroke-linecap: round; stroke-dasharray: 0 7; opacity: .85; } /* main past its newest Layer: dots */ +.lfs svg.tree .band { stroke: #fff; stroke-width: 1; } +.lfs svg.tree .lid { font-weight: 600; pointer-events: none; } +.lfs svg.tree .hit { fill: transparent; } +.lfs svg.tree .knot circle:not(.hit) { fill: var(--card); stroke-width: 1.8; } +.lfs svg.tree .ring { fill: #fff; stroke-width: 2.4; } +.lfs svg.tree .vein { stroke: #fff; stroke-opacity: .55; stroke-width: .9; stroke-linecap: round; fill: none; } +.lfs svg.tree .node { cursor: pointer; } +.lfs svg.tree .node:hover path:not(.vein), .lfs svg.tree .node.sel path:not(.vein) { stroke: var(--text); stroke-width: 1.4; } +.lfs svg.tree .node.sel .ring, .lfs svg.tree .node.sel .band, .lfs svg.tree .knot.sel circle:not(.hit) { stroke: var(--text); } +.lfs svg.tree .leader { stroke: var(--twig); stroke-width: 1; stroke-dasharray: 2 2; } +.lfs svg.tree .tag { cursor: pointer; } +.lfs svg.tree .tag rect { fill: var(--tc); stroke: var(--tc); } +.lfs svg.tree .tag text { font-weight: 600; fill: #fff; } +.lfs svg.tree .tag.idle rect { fill: #fff; } +.lfs svg.tree .tag.idle text { fill: var(--tc); } +.lfs svg.tree .tag.on rect { stroke: var(--text); stroke-width: 1.5; } +.lfs svg.tree .tavbg { fill: var(--card); stroke-width: 1.2; } +.lfs svg.tree .ground { fill: #F6EEDD; } +.lfs svg.tree .groundline { stroke: #E4D6B8; } +.lfs svg.tree .mbadge circle { fill: var(--orange); stroke: #fff; stroke-width: 1.5; } +.lfs svg.tree .mbadge.stale circle { fill: var(--red); } +.lfs svg.tree .mbadge text { fill: #fff; font: 700 8.5px var(--font); } +.lfs svg.tree .popin { animation: lfs-popin .5s .3s both cubic-bezier(.2,.9,.3,1.35); transform-box: fill-box; transform-origin: center; } +.lfs .ov { flex: none; display: flex; height: 40px; border-top: 1px solid var(--line2); } +.lfs .ovl { width: 110px; flex: none; display: flex; flex-direction: column; justify-content: center; padding: 0 10px; border-right: 1px solid var(--line2); font: 10px/1.4 var(--mono); color: var(--text-3); } +.lfs .ovl button { align-self: flex-start; border: 0; background: none; padding: 0; font: inherit; color: var(--accent); cursor: pointer; } +.lfs .ovstrip { flex: 1; position: relative; cursor: pointer; background: #FAF9F6; } +.lfs .ovs { display: block; width: 100%; height: 100%; } +.lfs .ovs .bar { fill: #D6D1C7; } +.lfs .ovs .tick { fill: var(--trunk); } +.lfs .ovs .nowl { stroke: var(--text); stroke-opacity: .5; stroke-dasharray: 2 2; vector-effect: non-scaling-stroke; } +.lfs .ovbox { position: absolute; top: 1px; bottom: 1px; border: 1.5px solid var(--accent); background: rgba(47,91,181,.08); pointer-events: none; } +/* the legend: a "?" over the tree's bottom left opens it above the button */ +.lfs .tkey { position: absolute; left: 12px; bottom: 12px; z-index: 3; width: 28px; height: 28px; border-radius: 50%; border: 1px solid var(--line); background: var(--card); font: 600 12px var(--mono); color: var(--text-2); cursor: pointer; box-shadow: 0 1px 3px rgba(30,37,51,.08); } +.lfs .tkey:hover { color: var(--text); border-color: var(--text-3); } +.lfs .tkey.on { background: var(--text); border-color: var(--text); color: #fff; } +.lfs .tlegend { position: absolute; left: 12px; bottom: 48px; z-index: 3; max-width: calc(100% - 24px); display: flex; flex-direction: column; gap: 5px; padding: 10px 12px; border: 1px solid var(--line); border-radius: 8px; background: var(--card); box-shadow: 0 6px 18px rgba(30,37,51,.14); font: 11px var(--mono); color: var(--text-2); } +.lfs .tlegend span { display: inline-flex; align-items: center; gap: 6px; } +.lfs .tlegend .dash { width: 16px; border-top: 2px dashed var(--b1); } +.lfs .tlegend .hint { color: var(--text-3); } +.lfs .grow { display: flex; align-items: center; gap: 8px; width: 100%; height: 28px; padding: 0 8px; border: 0; background: transparent; cursor: pointer; font: 12px var(--mono); color: var(--term-text); white-space: nowrap; text-align: left; } +.lfs .grow:hover { background: var(--sep); } +.lfs .grow.sel { background: var(--accent-bg); } +.lfs .grow > * { flex: none; } +.lfs .grow .gid { font: 600 12px var(--mono); min-width: 2.6em; } +.lfs .grow .gid.dim { font-weight: 400; color: var(--term-dim); } +.lfs .grow .gbr { font-weight: 500; } +.lfs .grow .gmsg { flex: 1 1 auto; min-width: 0; overflow: hidden; text-overflow: ellipsis; color: var(--text-2); } +.lfs .grow .gby { font-weight: 500; color: var(--text-2); } +.lfs .grow .ghead { font-size: 11px; line-height: 16px; padding: 0 6px; border-radius: 999px; background: var(--accent-bg); color: var(--t-blue); } +.lfs .grow.popin { animation: lfs-fadein .4s .3s both; } +@keyframes lfs-popin { from { transform: scale(0); } to { transform: scale(1); } } +.lfs .rows { flex: 1; min-height: 0; overflow: auto; padding: 4px; } +.lfs .brow { display: flex; align-items: center; gap: 8px; padding: 4px 10px; border-radius: 0; border-bottom: 1px solid var(--line2); cursor: pointer; min-height: 32px; transition: background .25s; } +.lfs .brow .slot { width: 66px; height: 20px; flex: none; } +.lfs .brow .hd { font: 11px var(--mono); color: var(--text-2); width: 34px; text-align: right; flex: none; } +.lfs .brow:hover { background: var(--well); } +.lfs .brow.flash { animation: lfs-flash 1s ease-out; } +.lfs .brow .sq { width: 9px; height: 9px; background: var(--bc); flex: none; } +.lfs .brow .st { width: 16px; text-align: center; font-size: 12px; flex: none; } +.lfs .brow .nm { font: 600 12px var(--mono); color: var(--bc); flex: 1; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } +.lfs .brow .meta { font: 11px var(--mono); color: var(--text-3); white-space: nowrap; } +.lfs .brow .meta.busy { color: var(--t-green); } +.lfs .brow .meta.pub { color: var(--t-blue); } +.lfs .brow .meta.bad { color: var(--t-red); } +.lfs .brow.idle .nm { opacity: .6; } +.lfs .bench { flex: none; min-height: 48px; background: var(--term); box-shadow: 0 0 0 1px var(--line); display: flex; align-items: center; gap: 8px; padding: 8px 10px; font-size: 11px; color: var(--text-3); position: relative; } +.lfs .bench b { font-weight: 600; letter-spacing: .04em; text-transform: uppercase; font-size: 10px; } +/* branch view */ +/* SDK call details on a terminal line */ +.lfs .sdkbtn { margin-left: 8px; font: 9.5px var(--mono); padding: 0 4px; border-radius: 3px; border: 1px solid var(--term-border); background: transparent; color: var(--term-dim); cursor: pointer; opacity: 0; vertical-align: 1px; } +.lfs .ln:hover .sdkbtn, .lfs .ln.open .sdkbtn, .lfs .sdkbtn:focus-visible { opacity: 1; } +.lfs .sdk { display: none; margin: 3px 0 5px; padding: 6px 9px; border-left: 2px solid var(--t-cyan); background: var(--well); border-radius: 0 6px 6px 0; color: var(--term-text); font-size: 11.5px; white-space: normal; } +.lfs .ln.open .sdk { display: block; } +.lfs .sdk .code { color: var(--term-dim); display: block; margin-bottom: 4px; padding: 0; } +.lfs .sdk .code b { color: var(--t-cyan); font-weight: 600; } +.lfs .sdk pre { margin: 0 0 6px; font: inherit; white-space: pre-wrap; } +.lfs .tm { margin-left: 8px; font: 9.5px var(--mono); color: var(--term-dim); vertical-align: 1px; } +.lfs .sdk .tm { margin-left: 6px; font-size: 10.5px; } +/* Store and overlay footers */ +.lfs .store { flex: none; border-top: 1px solid var(--term-border); padding: 3px 10px 4px; font: 10.5px/1.6 var(--mono); color: var(--term-dim); background: var(--well); } +.lfs .store .srow { display: flex; align-items: center; gap: 7px; white-space: nowrap; overflow: hidden; } +.lfs .store .srow > span:not(.sbar):not(.est) { overflow: hidden; text-overflow: ellipsis; min-width: 0; } +.lfs .store .kind { flex: none; font-weight: 600; font-size: 9px; letter-spacing: .06em; padding: 0; background: none; } +.lfs .store b { color: var(--term-text); font-weight: 600; } +.lfs .store .est { margin-left: auto; flex: none; font-size: 9.5px; opacity: .8; } +.lfs .store .sbar { flex: none; display: flex; width: 44px; height: 5px; border-radius: 3px; overflow: hidden; background: var(--term-border); } +.lfs .store .sbar i { display: block; } +.lfs .store .p { background: var(--t-cyan); } +.lfs .store .m { background: var(--orange); } +.lfs .store .pc { color: var(--t-cyan); } +.lfs .store .mc { color: var(--orange); } +/* Files, stacked for the right column */ +.lfs .fsel { font: 12px var(--font); height: 24px; max-width: 200px; min-width: 70px; border: 1px solid var(--term-border); border-radius: 5px; background: var(--term); color: var(--term-text); padding: 0 4px; } +.lfs .sync { font-size: 11px; line-height: 1; flex: none; } +.lfs .sync.live { color: var(--t-green); } +.lfs .sync.pinned { color: var(--term-dim); } +.lfs .fbar { flex: none; display: flex; align-items: center; gap: 6px; padding: 4px 8px; background: var(--term-head); border-bottom: 1px solid var(--term-border); font-size: 11.5px; color: var(--term-dim); flex-wrap: wrap; } +.lfs .fbar .segs { display: inline-flex; background: var(--well); border-radius: 6px; padding: 2px; } +.lfs .fbar .fseg { border: 0; background: transparent; padding: 2px 9px; border-radius: 4px; cursor: pointer; font-size: 11.5px; color: var(--term-dim); } +.lfs .fbar .fseg.on { background: var(--card); color: var(--term-text); box-shadow: 0 1px 2px rgba(0,0,0,.12); } +.lfs .fbar .chipb { border: 1px solid var(--term-border); background: transparent; border-radius: 10px; padding: 0 8px; height: 20px; cursor: pointer; font-size: 11px; color: var(--term-dim); } +.lfs .fbar .chipb.on { border-color: var(--accent); color: var(--accent); background: var(--accent-bg); } +.lfs .fbar .chk { display: inline-flex; gap: 4px; align-items: center; } +.lfs .fbar .chk.off { opacity: .45; } +.lfs .fbar .sp { flex: 1; } +.lfs .fbar .fcount { font: 11px var(--mono); } +.lfs .fbar .sdkbtn { opacity: 1; margin-left: 0; } +.lfs .fsdk { margin: 0; padding: 6px 10px; background: var(--well); border-bottom: 1px solid var(--term-border); font: 11px/1.5 var(--mono); color: var(--term-text); white-space: pre-wrap; } +.lfs .fbody { flex: 1; min-height: 0; display: flex; flex-direction: column; } +.lfs .ftree, .lfs .flist { flex: 1; min-height: 0; overflow: auto; padding: 4px 0 10px; font: 12px/1.6 var(--mono); color: var(--term-text); } +.lfs .fhead { flex: none; display: flex; align-items: center; gap: 6px; padding: 5px 8px; background: var(--term-head); border-bottom: 1px solid var(--term-border); font-size: 11.5px; color: var(--term-dim); min-width: 0; } +.lfs .fhead .fsel { min-width: 0; flex: 0 1 auto; } +.lfs .fhead .sp { flex: 1; min-width: 4px; } +.lfs .fhead .fcount { font: 11px var(--mono); white-space: nowrap; } +.lfs .fhead .sdkbtn { opacity: 1; margin-left: 0; flex: none; } +.lfs .fwide { flex: none; border: 0; background: none; color: var(--term-dim); font-size: 13px; width: 22px; height: 22px; border-radius: 5px; cursor: pointer; } +.lfs .fwide:hover, .lfs .fwide.on { background: var(--well); color: var(--term-text); } +.lfs .fsw, .lfs .fmodes { flex: none; display: flex; align-items: center; gap: 8px; padding: 5px 8px; border-bottom: 1px solid var(--term-border); min-width: 0; } +.lfs .fsw .segs, .lfs .fmodes .segs { display: inline-flex; background: var(--well); border-radius: 6px; padding: 2px; flex: none; } +.lfs .fsw .fseg, .lfs .fmodes .fseg { border: 0; background: transparent; padding: 2px 10px; border-radius: 4px; cursor: pointer; font-size: 11.5px; color: var(--term-dim); } +.lfs .fsw .fseg.on, .lfs .fmodes .fseg.on { background: var(--card); color: var(--term-text); box-shadow: 0 1px 2px rgba(0,0,0,.12); } +.lfs .fsw .fseg b { font-weight: 600; margin-left: 2px; } +.lfs .fmodes .sp { flex: 1; } +.lfs .fstat { font-size: 11px; color: var(--term-dim); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; cursor: help; } +.lfs .fstat b { color: var(--term-text); } +.lfs .fdir { display: flex; align-items: center; gap: 6px; padding: 8px 10px 3px; color: var(--text-2); font: 500 11.5px var(--font); } +.lfs .fdir .fr { margin-left: auto; } +.lfs .fgroup { display: flex; align-items: center; gap: 6px; margin-top: 6px; padding: 4px 10px; border-top: 1px dashed var(--term-border); color: var(--term-dim); font-size: 11.5px; cursor: pointer; white-space: nowrap; } +.lfs .fgroup:hover { background: var(--well); } +.lfs .fgroup b { color: var(--term-text); font-weight: 600; } +.lfs .fgroup .car { width: 10px; } +.lfs .fgroup .nm { overflow: hidden; text-overflow: ellipsis; min-width: 0; } +.lfs .fb.lead { margin: 0 6px 0 0; } +.lfs .fpage { flex: none; display: flex; align-items: center; gap: 8px; padding: 6px 8px; border-bottom: 1px solid var(--term-border); min-width: 0; } +.lfs .fback { flex: none; border: 0; background: var(--well); color: var(--accent); font-size: 11.5px; padding: 2px 8px; border-radius: 5px; cursor: pointer; } +.lfs .fback:hover { background: var(--accent-bg); } +.lfs .fpathx { min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; font: 12px var(--mono); } +.lfs .fpathx .dir { color: var(--term-dim); } +.lfs .fpathx .sl { color: var(--line); margin: 0 2px; } +.lfs .fpage .sp { flex: 1; } +.lfs .flang { flex: none; font: 11px var(--mono); color: var(--text-3); white-space: nowrap; } +.lfs .fpathx b { color: var(--term-text); } +.lfs .frow { display: flex; align-items: center; gap: 6px; min-height: 24px; padding: 0 10px 0 8px; cursor: pointer; white-space: nowrap; font-family: var(--font); font-size: 12.5px; color: var(--text); border-left: 2px solid transparent; } +.lfs .frow:hover { background: #F4F2EC; } +.lfs .frow.sel { background: var(--accent-bg); border-left-color: var(--accent); } +.lfs .frow.flash { animation: lfs-flash 1.2s ease-out; } +.lfs .frow.dir .nm { font-weight: 500; } +.lfs .frow .car { width: 10px; color: var(--text-3); flex: none; display: inline-grid; place-items: center; } +.lfs .frow .nm { overflow: hidden; text-overflow: ellipsis; min-width: 0; } +.lfs .frow .ind { flex: none; align-self: stretch; margin-right: -6px; background: repeating-linear-gradient(90deg, transparent 0 6px, #E8E4DC 6px 7px, transparent 7px 14px); } +.lfs .chev { transition: transform .12s; } +.lfs .chev.open { transform: rotate(90deg); } +.lfs .fico { flex: none; display: inline-block; vertical-align: middle; } +.lfs .fico.badge { display: inline-grid; place-items: center; width: 16px; height: 16px; border-radius: 3px; background: color-mix(in srgb, var(--fc) 14%, white); color: var(--fc); font: 700 7.5px/1 var(--mono); letter-spacing: -.02em; } +.lfs .fico.badge.w { font-size: 6.5px; } +.lfs .frow.note { cursor: default; color: var(--term-dim); font-size: 12px; } +.lfs .frow.note[data-fmore] { cursor: pointer; color: var(--accent); } +.lfs .frow.more { color: var(--accent); } +.lfs .fline { width: 96px; font: 11.5px var(--mono); padding: 2px 6px; border: 1px solid var(--term-border); border-radius: 4px; background: var(--card); color: var(--term-text); } +.lfs .fseg:disabled { opacity: .4; cursor: default; } +.lfs .frow.gone .nm { text-decoration: line-through; color: var(--term-dim); } +.lfs .frow.flat { padding: 2px 10px; font: 12px var(--mono); } +.lfs .fb { font: 700 9.5px var(--mono); padding: 0 4px; border-radius: 3px; margin-left: auto; flex: none; } +.lfs .frow.flat .fb { margin: 0 6px 0 0; } +.lfs .fb.A { color: var(--t-green); background: var(--t-add-bg); } +.lfs .fb.M { color: var(--t-blue); background: var(--accent-bg); } +.lfs .fb.D { color: var(--t-red); background: var(--t-del-bg); } +.lfs .fr { margin-left: auto; font: 10px var(--mono); color: var(--term-dim); flex: none; } +.lfs .fview { flex: 1; min-height: 0; overflow: auto; font: 12px/1.55 var(--mono); color: var(--term-text); } +.lfs .fpath { position: sticky; top: 0; z-index: 1; background: var(--term); padding: 5px 10px; border-bottom: 1px solid var(--term-border); font-weight: 600; } +.lfs .fpath span { font-weight: 400; color: var(--term-dim); } +.lfs .fsum { padding: 6px 10px; color: var(--term-dim); font-size: 11.5px; } +.lfs .fsum b { color: var(--term-text); font-weight: 600; } +.lfs .fstats { display: flex; flex-wrap: wrap; gap: 3px 14px; padding: 6px 10px; border-bottom: 1px solid var(--term-border); background: var(--well); font-size: 11px; color: var(--term-dim); } +.lfs .fstats b { color: var(--term-text); font-weight: 600; } +.lfs .fstats .est { margin-left: auto; } +.lfs .frev { width: 100%; border-collapse: collapse; font-size: 11.5px; } +.lfs .frev th { text-align: left; font-weight: 600; color: var(--term-dim); padding: 4px 6px; border-bottom: 1px solid var(--term-border); } +.lfs .frev td { padding: 3px 6px; border-bottom: 1px solid var(--term-border); white-space: nowrap; } +.lfs .frev td.n, .lfs .frev th.n { text-align: right; } +.lfs .frev .zero { color: var(--term-dim); } +.lfs .fempty { padding: 18px 12px; color: var(--term-dim); line-height: 1.6; } +.lfs .code { padding: 4px 0 12px; font: 12px/1.65 var(--mono); tab-size: 2; min-width: max-content; } +.lfs .cl { display: flex; white-space: pre; min-height: 19px; } +.lfs .cl:hover { background: #F6F4EF; } +.lfs .cl .no { flex: none; width: 44px; padding-right: 10px; margin-right: 10px; text-align: right; color: #B4AFA5; user-select: none; border-right: 1px solid var(--line2); } +.lfs .cl:hover .no { color: var(--text-2); } +/* syntax colours (highlight.js), the website's palette */ +.lfs .hl-com { color: #9A958B; font-style: italic; } +.lfs .hl-str { color: #2E7D5B; } +.lfs .hl-num, .lfs .hl-lit { color: #B8502C; } +.lfs .hl-kw { color: #6A4DA8; font-weight: 500; } +.lfs .hl-fn { color: #2F5BB5; } +.lfs .hl-typ { color: #1F6B78; } +.lfs .hl-prop { color: #93650F; } +.lfs .hl-tag { color: #C8452F; } +.lfs .hl-attr { color: #93650F; } +.lfs .hl-var { color: #1F6B78; } +.lfs .hl-op { color: #D29A2E; font-weight: 600; } + +.lfs .cl .op { flex: none; width: 14px; color: var(--term-dim); } +.lfs .cl .tx { flex: 1; padding-right: 10px; } +.lfs .cl.add { background: var(--t-add-bg); } +.lfs .cl.add .op, .lfs .cl.add .tx { color: var(--t-green); } +.lfs .cl.del { background: var(--t-del-bg); } +.lfs .cl.del .op, .lfs .cl.del .tx { color: var(--t-red); } +/* a diff keeps the syntax colours: the line is tinted, its gutter more */ +.lfs .cl.add .tx, .lfs .cl.del .tx { color: var(--term-text); } +.lfs .cl.add .no { background: rgba(46,125,91,.13); color: var(--t-green); } +.lfs .cl.del .no { background: rgba(184,80,44,.13); color: var(--t-red); } +.lfs .cl.del .tx { text-decoration: none; opacity: .85; } +.lfs .bch { flex: none; width: 40px; margin: 0 4px 0 6px; font: 600 10.5px/18px var(--mono); color: var(--bc); border-left: 3px solid var(--bc); padding-left: 5px; cursor: pointer; } +.lfs .bch.cont { opacity: .55; } +.lfs .bch:hover { background: var(--well); } +.lfs .sblist { flex: 1 1 0; min-height: 120px; } +.lfs .storecard { flex: none; } +.lfs .storecard .store { border-top: 0; background: var(--term); padding: 6px 10px; } +.lfs .blist { flex: 0 1 auto; max-height: 48%; min-height: 96px; } +.lfs .blist .rows { overflow-y: auto; padding: 4px; } +.lfs .sbg { display: flex; flex-direction: column; gap: 1px; padding: 4px 2px 6px; border-radius: 6px; transition: box-shadow .15s; } +.lfs .sbg + .sbg { border-top: 1px solid var(--term-border); } +.lfs .sbg.closed { opacity: .5; } +.lfs .sbg.sblit, .lfs .term.sblit { box-shadow: 0 0 0 2px var(--orange), 0 6px 18px rgba(0,0,0,.12); } +.lfs .sbg.pulse { animation: lfs-focuspane 1.6s ease-out; } +.lfs .sbh { display: flex; align-items: center; gap: 6px; padding: 2px 4px; font: 11.5px var(--mono); } +.lfs .sbh .d { width: 7px; height: 7px; border-radius: 50%; background: var(--green); flex: none; } +.lfs .sbh .d.idle { background: var(--text-3); } +.lfs .sbh .d.off { background: transparent; box-shadow: 0 0 0 1px var(--text-3); } +.lfs .sbh .mk { display: inline-flex; gap: 4px; align-items: center; color: var(--term-dim); font: 11px var(--font); min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } +.lfs .sbh b, .lfs .sbh .ct { flex: none; white-space: nowrap; } +.lfs .sbh .sp { flex: 1; } +.lfs .sbh .ct { color: var(--term-dim); font-size: 10.5px; white-space: nowrap; } +.lfs .dnote { font-size: 10.5px; color: var(--t-orange); padding: 0 4px 0 17px; } +.lfs .dws { display: flex; align-items: center; gap: 6px; width: 100%; border: 0; background: none; color: var(--term-text); font: 11px var(--mono); padding: 3px 4px 3px 15px; border-radius: 5px; cursor: pointer; text-align: left; white-space: nowrap; overflow: hidden; } +.lfs .dws:hover { background: var(--well); } +.lfs .dws .at { color: var(--term-dim); } +.lfs .dws .noag { width: 14px; text-align: center; color: var(--term-dim); } +.lfs .bchip { font: 10.5px var(--mono); padding: 0 5px; border-radius: 4px; color: var(--bc); box-shadow: inset 0 0 0 1px var(--bc); white-space: nowrap; } +.lfs .st { font-size: 10px; color: var(--term-dim); } +.lfs .st.warn { color: var(--t-orange); } +.lfs .st.bad { color: var(--t-red); } +.lfs .st.run { color: var(--t-green); overflow: hidden; text-overflow: ellipsis; } +.lfs .sbchip { border: 0; font: 10.5px var(--mono); padding: 1px 6px; border-radius: 4px; background: var(--well); color: var(--term-text); cursor: pointer; flex: none; } +.lfs .sbchip:hover { background: var(--orange-bg); color: var(--t-orange); } +.lfs .term.focus { animation: lfs-focuspane 1.2s ease-out; } +@keyframes lfs-focuspane { 0%, 40% { box-shadow: 0 0 0 2.5px var(--accent), 0 6px 18px rgba(0,0,0,.18); } } +/* Hover card on History nodes */ +.lfs .hcard { position: absolute; z-index: 65; width: 290px; background: var(--card); border-radius: 0; border: 1px solid var(--line); box-shadow: 0 14px 44px rgba(0,0,0,.24), 0 0 0 .5px var(--sep-strong); padding: 8px; display: none; font-size: 12px; } +.lfs .hcard.open { display: block; animation: lfs-grow .12s ease-out; } +.lfs .hcard .h { display: flex; align-items: baseline; gap: 6px; margin: 0 4px 2px; } +.lfs .hcard .h b { font: 600 13px var(--mono); } +.lfs .hcard .tag { font: 600 10px var(--font); padding: 1px 6px; border-radius: 4px; background: var(--accent-bg); color: var(--accent); } +.lfs .hcard .meta { margin: 0 4px 6px; color: var(--text-2); font: 11px var(--mono); line-height: 1.5; } +.lfs .hcard .meta b { color: var(--text); } +.lfs .hcard .sec { margin: 6px 4px 3px; font-size: 10.5px; color: var(--text-3); text-transform: uppercase; letter-spacing: .04em; } +.lfs .hcard .ws { width: 100%; display: flex; align-items: center; gap: 6px; padding: 5px 6px; border: 0; background: transparent; border-radius: 6px; cursor: pointer; text-align: left; font: 11.5px var(--mono); color: var(--text); } +.lfs .hcard .ws:hover, .lfs .hcard .ws:focus-visible { background: var(--accent-bg); outline: 0; } +.lfs .hcard .ws .d { width: 7px; height: 7px; border-radius: 50%; background: var(--orange); flex: none; } +.lfs .hcard .ws.stale .d { background: var(--red); } +.lfs .hcard .ws small { margin-left: auto; font: 10.5px var(--font); color: var(--text-2); white-space: nowrap; } +.lfs .hcard .ws.stale small { color: var(--red); } +.lfs .hcard .cbtns { display: flex; gap: 6px; margin: 8px 4px 0; } +.lfs .hcard .cbtn { flex: 1; border: 0; border-radius: 6px; padding: 5px 6px; background: var(--well); cursor: pointer; font-size: 11.5px; color: var(--text); } +.lfs .hcard .cbtn:hover { background: var(--accent); color: #fff; } +.lfs .hcard .hint { margin: 6px 4px 0; font-size: 10.5px; color: var(--text-3); } +.lfs .empty { flex: 1; display: grid; place-items: center; text-align: center; color: var(--text-2); background: var(--term); border-radius: 0; box-shadow: 0 0 0 1px var(--line); padding: 16px; } +.lfs .empty h3 { margin: 0 0 6px; font-size: 14px; color: var(--text); } +.lfs .empty .recent { white-space: pre; margin-top: 10px; font: 11.5px/1.7 var(--mono); text-align: left; color: var(--term-dim); } +/* heroes stand still and bob while they work (the website's animate-bob); bubbles and blocks fly over the view */ +.lfs .lfs-fx { position: absolute; inset: 0; pointer-events: none; z-index: 40; overflow: hidden; } +.lfs .av.bob { animation: lfs-avbob .3s ease-in-out infinite; } +.lfs .av .dup { position: absolute; right: -3px; bottom: -2px; font: 700 8px/10px var(--font); font-style: normal; min-width: 10px; text-align: center; border-radius: 5px; background: var(--card); color: var(--text-2); box-shadow: 0 0 0 .5px var(--sep-strong); } +.lfs .av { position: relative; display: inline-block; width: 20px; height: 16px; flex: none; background-repeat: no-repeat; background-size: contain; background-position: 50% 100%; vertical-align: middle; } +@keyframes lfs-avbob { 50% { translate: 0 -1.5px; } } +.lfs .bubble { position: absolute; z-index: 45; pointer-events: none; transform: translate(-50%, -100%); font: 600 11px var(--mono); padding: 3px 7px; border-radius: 8px; background: var(--card); color: var(--text); box-shadow: 0 4px 14px rgba(0,0,0,.2), 0 0 0 .5px var(--sep-strong); white-space: nowrap; animation: lfs-bubble 1.9s ease-out forwards; } +.lfs .bubble.good { color: var(--t-green); } +.lfs .bubble.bad { color: var(--t-red); } +.lfs .visit { position: absolute; z-index: 43; pointer-events: none; transform: translate(-50%, -100%); transform-origin: 50% 100%; animation: lfs-visit 1.9s ease-out forwards; filter: drop-shadow(0 2px 2px rgba(0,0,0,.18)); } +.lfs .visit .av { display: block; width: 34px; height: 38px; } +.lfs .block { position: absolute; z-index: 44; width: 12px; height: 12px; border-radius: 3px; pointer-events: none; transition: transform .6s cubic-bezier(.4,0,.2,1), opacity .2s .55s; box-shadow: 0 2px 8px rgba(0,0,0,.25); } +@keyframes lfs-bob { 50% { transform: translateY(-1.5px); } } +@keyframes lfs-claw { 50% { transform: translateY(-2px); } } +@keyframes lfs-blink { 50% { opacity: .1; } } +@keyframes lfs-grow { from { transform: scale(.96); opacity: 0; } to { transform: none; opacity: 1; } } +@keyframes lfs-leave { 0%, 45% { opacity: 1; filter: none; } 55% { opacity: .85; filter: grayscale(.6); } 100% { opacity: 0; transform: scale(.98); filter: grayscale(1); } } +@keyframes lfs-fadein { from { opacity: 0; transform: translateY(3px); } to { opacity: 1; transform: none; } } +@keyframes lfs-pop { from { transform: scale(0); } to { transform: scale(1); } } +@keyframes lfs-flash { 0% { background: var(--accent-bg); } 100% { background: transparent; } } +@keyframes lfs-visit { 0% { opacity: 0; transform: translate(-50%, -60%) scale(.3); } 14% { opacity: 1; transform: translate(-50%, -112%) scale(1.08); } 24% { transform: translate(-50%, -100%) scale(1); } 80% { opacity: 1; transform: translate(-50%, -100%); } 100% { opacity: 0; transform: translate(-50%, -118%); } } +@keyframes lfs-bubble { 0% { opacity: 0; margin-top: 6px; } 12% { opacity: 1; margin-top: 0; } 80% { opacity: 1; } 100% { opacity: 0; margin-top: -8px; } } +@media (prefers-reduced-motion: reduce) { + .lfs .block { transition: none; } + .lfs .av.bob { animation: none; } + .lfs .visit { animation: none; } +} +/* the view's own root: position for the overlay, the card and menus */ +.lfs { container: lfs / inline-size; position: relative; font: 13px/1.4 var(--font); color: var(--text); -webkit-font-smoothing: antialiased; } +/* standalone layout (the dsh tab): the History | Work switch, then History or the work window (Branch tabs over the work area) */ +.lfs.lfs-app { height: 100%; min-height: 0; display: flex; flex-direction: column; background: var(--paper); overflow: hidden; } +.lfs .lfs-cols { flex: 1; min-height: 0; display: grid; grid-template-columns: minmax(0, 1fr); grid-template-rows: minmax(0, 1fr); gap: 0; padding: 14px; background: var(--paper) radial-gradient(var(--dot) 1px, transparent 1px) 0 0 / 24px 24px; } +/* the Work | History switch, after the LayerFS mark at the left of the tab row: one window at a + time, the whole view to itself; a small quiet pill, no outline */ +.lfs .lfs-logo { flex: none; align-self: center; display: inline-flex; margin-right: 2px; } +.lfs .lfs-swap { flex: none; align-self: center; display: flex; gap: 2px; margin: 0 6px 0 0; padding: 2px; border: 0; border-radius: 999px; background: var(--well); } +.lfs .lfs-swap button { flex: none; position: relative; border: 0; border-radius: 999px; background: transparent; padding: 3px 16px; font: 11px var(--mono); letter-spacing: .06em; text-transform: uppercase; color: var(--text-3); cursor: pointer; } +.lfs .lfs-swap button:hover { color: var(--text); } +.lfs .lfs-swap button.on { background: var(--card); color: var(--text); box-shadow: 0 1px 2px rgba(30,37,51,.1); cursor: default; } +/* changed since you looked: a dot in a soft shade that breathes */ +.lfs .lfs-swap .dot { position: absolute; top: 50%; right: 4px; width: 6px; height: 6px; margin: -3px 0 0; border-radius: 50%; background: var(--accent); box-shadow: 0 0 0 3px color-mix(in srgb, var(--accent) 22%, transparent); animation: lfs-dotshade 2.4s ease-in-out infinite; } +@keyframes lfs-dotshade { 50% { box-shadow: 0 0 0 5px color-mix(in srgb, var(--accent) 10%, transparent); } } +@media (prefers-reduced-motion: reduce) { .lfs .lfs-swap .dot { animation: none; } } +/* in History the open tab only marks where Work will return to */ +.lfs .lfs-strip[data-panes="history"] .tab[aria-selected="true"] { opacity: .6; filter: saturate(.4); } +.lfs .lfs-cols[data-panes="history"] > .panel.right, .lfs .lfs-cols[data-panes="work"] > .hist { display: none; } +.lfs .panel.right { overflow: hidden; } +.lfs .panel.right .work { padding: 12px; } +.lfs[data-pane="history"] > .lfs-strip { display: none; } +.lfs .lfs-strip { flex: none; display: flex; align-items: flex-end; gap: 8px; padding: 0 10px; background: var(--tab); border-bottom: 1px solid var(--line); } +/* one line: the tabs scroll sideways when they do not fit; the open one is kept in view, "+N" stays at the end */ +.lfs .lfs-strip .tabs { flex: 1; position: relative; flex-wrap: nowrap; overflow-x: auto; overflow-y: hidden; scrollbar-width: none; } +.lfs .lfs-strip .tabs::-webkit-scrollbar { display: none; } +.lfs .lfs-strip .tab { flex: none; } +.lfs .lfs-strip .tab.more { position: sticky; right: 0; z-index: 1; background: var(--tab); box-shadow: -10px 0 8px -4px var(--tab); } +.lfs .lfs-strip .ib { margin-bottom: 7px; } +/* Narrow widths. History and the work window never share the view (the + Work | History switch picks one). Inside the work window, by the view's width: */ +/* under 1280: tighter tabs; the preview's History narrows */ +@container lfs (max-width: 1279px) { + .lfs .work.branchview.withhist { grid-template-columns: minmax(300px, 360px) minmax(0, 1fr); } + .lfs .tab { min-height: 36px; padding: 6px 10px; font-size: 12.5px; } +} +/* the preview keeps History inside the work area: it stacks under 1000 */ +@container lfs (max-width: 999px) { + .lfs .work.withhist { overflow-y: auto; } + .lfs .work.mainview.withhist { grid-template-columns: repeat(2, minmax(0, 1fr)); grid-template-rows: 560px max-content minmax(360px, auto); } + .lfs .work.mainview.withhist > .storep { grid-column: 1; grid-row: 2; } + .lfs .work.mainview.withhist > .board { grid-column: 1; grid-row: 3; } + .lfs .work.mainview.withhist > .term:not(.storep) { grid-column: 2; grid-row: 2 / span 2; } + .lfs .work.branchview.withhist { grid-template-columns: minmax(0, 1fr); grid-template-rows: 560px auto auto minmax(480px, auto); } + .lfs .work.withhist .hist { grid-column: 1 / -1; grid-row: auto; } +} +/* under 760: one column everywhere; a Branch's terminals one under another */ +@container lfs (max-width: 759px) { + .lfs .lfs-cols { padding: 8px; } + .lfs .lfs-swap button { padding: 3px 10px; } + /* alone, the work window scrolls inside */ + .lfs .lfs-cols .panel.right .work { overflow-y: auto; } + .lfs .work .col { min-height: auto; } + .lfs .work.mainview .wterm { flex: none; height: 300px; } + .lfs .work.branchview .wgrid { grid-auto-rows: 240px; } + .lfs .work { padding: 8px; gap: 8px; } + /* one column: the Store's line, Branches, Sandboxes, then the project log */ + /* vertical: storage, Branches with their Sandboxes (tall), the log, one under another */ + .lfs .work.mainview, .lfs .work.mainview.withhist { grid-template-columns: minmax(0, 1fr); grid-template-rows: max-content; } + .lfs .work.mainview.withhist { grid-template-rows: 480px max-content; } + .lfs .work.mainview > * { min-height: 300px; } + /* undo the two-column placement (as specific as the rules that set it) */ + .lfs .work.mainview > :is(.storep, .board, .term:not(.storep)), .lfs .work.mainview.withhist > :is(.storep, .board, .term:not(.storep)) { grid-column: auto; grid-row: auto; } + .lfs .work.mainview > .board { height: 420px; } + .lfs .wgrid { grid-template-columns: minmax(0, 1fr); flex: none; overflow: visible; } + /* one column: the page splits downward only */ + .lfs .nb > .wterm:nth-child(n) { grid-column: auto; grid-row: auto; border-left: 0; } + .lfs .nb > .wterm:nth-child(n+2) { border-top: 1.5px dashed var(--line); } + .lfs .tab { min-height: 32px; padding: 5px 8px; gap: 6px; } + .lfs .tab .pin { display: none; } + .lfs .tlegend .hint { display: none; } +} +${` +${M$2} { + --paper: #F6F9FF; --dot: #DCE6F7; --line: #D3DEF1; --line2: #E3EAF7; --tab: #EDF2FC; --lane: #EAF0FC; + --trunk: #3456C9; --green-dark: #2A47A8; --twig: #A9B6CF; --coral: #E8739A; --coral-text: #B8406A; --coral-pale: #FDEEF3; + --window: #F6F9FF; --chrome: #EDF2FC; --card: #FFFFFF; --well: #EEF3FC; --grid-bg: #F6F9FF; + --text: #1A2340; --text-2: #4E5A78; --text-3: #8B95AE; --sep: #E3EAF7; --sep-strong: #D3DEF1; + --accent: #4D6BFE; --accent-bg: #EBEFFF; --green: #36AE8C; --orange: #E0A63A; --red: #D2455E; --purple: #7B5FE0; + --orange-bg: rgba(224,166,58,.14); --purple-bg: rgba(123,95,224,.12); --red-bg: #FDEEF3; --green-bg: rgba(54,174,140,.13); + --term: #FFFFFF; --term-head: #F3F7FE; --term-border: #D3DEF1; --term-text: #1A2340; --term-dim: #8B95AE; + --t-blue: #3A55D6; --t-green: #23856A; --t-orange: #93650F; --t-red: #B8406A; --t-purple: #5D45B8; --t-cyan: #1D7896; + --b0: #4D6BFE; --b1: #2AA4C8; --b2: #7B5FE0; --b3: #E0A63A; --b4: #36AE8C; --b5: #E8739A; + --lace: #C9D6EE; --ribbon: #F08BB0; + --font: ui-rounded, "Hiragino Maru Gothic ProN", "M PLUS Rounded 1c", "Nunito", "Arial Rounded MT Bold", -apple-system, sans-serif; + font-family: var(--font); +} +/* the website's beige, where it is not a variable */ +${M$2} .tab .tchip, ${M$2} .wtag.grey, ${M$2} .crow.off .st, ${M$2} .sbws .dt { background: var(--well); color: var(--text-2); } +${M$2} .bhead, ${M$2} .bcard .bhd .note, ${M$2} .tile span { color: var(--text-2); } +${M$2} .floor .none { color: var(--text-3); } +${M$2} .pool { border-top-color: var(--line); background: var(--well); color: var(--text-2); } +${M$2} .sbcards { background: transparent; } +${M$2} .floor { background: transparent; } +${M$2} .frow:hover, ${M$2} .cl:hover { background: var(--well); } +${M$2} .frow .ind { background: repeating-linear-gradient(90deg, transparent 0 6px, var(--dot) 6px 7px, transparent 7px 14px); } +${M$2} svg.tree .grid { stroke: var(--line2); } +${M$2} svg.tree .ground { fill: var(--lane); } +${M$2} svg.tree .groundline { stroke: var(--line); } +${M$2} .ovstrip { background: var(--well); border-radius: 8px; } +${M$2} .sv2 .hd { background: var(--text-2); } ${M$2} .sv2 .fc { background: #C9D5EC; } ${M$2} .sv2 .cp { background: var(--b1); } ${M$2} .sv2 .md { background: var(--twig); } +${M$2} .sv2 .fs { background: var(--b2); } ${M$2} .sv2 .ws { background: var(--b5); } ${M$2} .sv2 .ot { background: var(--twig); } + +/* the floor */ +${M$2} .lfs-cols { background: var(--paper) ${`url("data:image/svg+xml,${encodeURIComponent("")}")`} 0 0 / 64px 64px; } + +/* pills: tabs, chips, tags, the switches */ +${M$2} .tab { border: 1.5px solid var(--line); border-radius: 999px; margin: 0 0 6px; min-height: 32px; padding: 4px 12px; background: var(--card); font-family: var(--font); } +${M$2} .tab[aria-selected="true"] { background: var(--accent); border-color: var(--accent); color: #fff; } +${M$2} .tab[aria-selected="true"] .tchip { background: rgba(255,255,255,.22); color: #fff; } +${M$2} .tab .sq { border-radius: 50%; } +${M$2} .tab .tchip, ${M$2} .wtag, ${M$2} .sign, ${M$2} .sbws .dt, ${M$2} .crow .st { border-radius: 999px; } +${M$2} .ctl { border-radius: 999px; overflow: hidden; border-width: 1.5px; } +${M$2} .ctl button { font-family: var(--font); } +${M$2} .ctl button.on { background: var(--accent); } + +/* cards: round, a soft step under them, lace along the top, a bow on the bigger ones */ +${M$2} .panel, ${M$2} .board, ${M$2} .term { border-radius: 16px; box-shadow: 0 0 0 1.5px var(--line), 0 4px 0 #E3ECFA; border: 0; } +${M$2} .board { position: relative; overflow: visible; } +${M$2} .board > .bhead { border-radius: 16px 16px 0 0; } +${M$2} .bcard, ${M$2} .sbrow, ${M$2} .tile, ${M$2} .wchip { border-radius: 12px; overflow: hidden; } +${M$2} .bcard .bhd .sq, ${M$2} .tab .sq { border-radius: 50%; } +${M$2} .panel.hist { position: relative; } +${M$2} .board::before, ${M$2} .term::before, ${M$2} .panel.hist::before { + content: ""; position: absolute; left: 14px; right: 14px; top: 0; height: 6px; z-index: 2; pointer-events: none; + background: radial-gradient(circle at 6px 0, transparent 3.4px, var(--lace) 3.9px, var(--lace) 4.6px, transparent 5.1px) 0 0 / 12px 6px repeat-x; +} +${M$2} .board::after, ${M$2} .panel.hist::after { content: "🎀"; position: absolute; top: -11px; left: 50%; transform: translateX(-50%); font-size: 17px; line-height: 1; z-index: 3; pointer-events: none; } +${M$2} .bhead .t, ${M$2} .thead .t { font-family: var(--font); font-weight: 600; } +/* History as an editor: its History tab sits under the tab row, flat, without lace or a bow */ +${M$2} .lfs-ide .ide-main > .panel.hist { border-radius: 0; box-shadow: none; } +${M$2} .lfs-ide .panel.hist::before, ${M$2} .lfs-ide .panel.hist::after { content: none; } +${M$2} .panel.hist:has(> .lfs-ide)::after { content: none; } /* the bow would sit on the tab row */ +${M$2} .lfs-ide .ide-tabs button[aria-selected="true"] { box-shadow: inset 0 -2px 0 #F2B8CC; } + +/* notebook terminals: ruled lines and a pink margin; the LayerFS stamp gives way */ +${M$2} .tbody { + background: linear-gradient(90deg, transparent 22px, #F7C5D6 22px, #F7C5D6 23.5px, transparent 23.5px), + repeating-linear-gradient(transparent 0 calc(1.7em - 1px), #E6EEFA calc(1.7em - 1px) 1.7em); + background-attachment: local; padding-left: 32px; +} +${M$2} .wm { display: none; } +/* a Branch's notebook is one round card; its blocks are plain paper inside it */ +${M$2} .nb { border-radius: 16px; box-shadow: 0 0 0 1.5px var(--line), 0 4px 0 #E3ECFA; } +${M$2} .work.branchview:not(.withhist) .nb { overflow: hidden; } +${M$2} .nb > .term { border-radius: 0; box-shadow: none; } +${M$2} .nb > .term::before { display: none; } +${M$2} .nb::before { + content: ""; position: absolute; left: 14px; right: 14px; top: 0; height: 6px; z-index: 2; pointer-events: none; + background: radial-gradient(circle at 6px 0, transparent 3.4px, var(--lace) 3.9px, var(--lace) 4.6px, transparent 5.1px) 0 0 / 12px 6px repeat-x; +} +${M$2} .nb > .wterm:nth-child(even), ${M$2} .nb > .wterm:nth-child(n+3), ${M$2} .nb.n3 > .wterm:nth-child(3) { border-color: #F2B8CC; } + +/* the notebook's hand, on a step's first draw. A pencil writes each new command (no caret); + a highlighter runs over what a read looked at; a failed line keeps a red wavy underline. + A Workspace's page is held by a paperclip from mount until unmount, when an eraser rubs + it out and the clip falls off; each Commit closes a margin bracket around the calls it + captured, with its id as a sticker. The project opens with a ruler line under Init; a + fork and a merge draw a vine in the margin in the Branch's colour; a publish is stamped + with its Layer and ruled off. An fs script's calls share a margin line: solid when it + wrote, dotted when it only read. */ +${M$2} .wterm .ln.typing .cmd { border-right: 0; animation: lfs-type var(--d) linear both, lfs-unclipped var(--d) linear; } +@keyframes lfs-unclipped { from, to { text-overflow: clip; } } +${M$2} .wterm .ln.typing .pen { display: inline-block; position: relative; width: 0; height: 1em; } +${M$2} .wterm .ln.typing .pen::before { content: ""; position: absolute; left: -3px; bottom: 2px; width: 19px; height: 19px; background: ${PENCIL} center / contain no-repeat; transform-origin: 0 100%; pointer-events: none; + animation: lfs-pen-wiggle .16s ease-in-out infinite alternate, lfs-pen-lift .3s var(--d) ease-in forwards; } +@keyframes lfs-pen-wiggle { from { transform: rotate(-7deg); } to { transform: rotate(4deg) translateY(-1px); } } +@keyframes lfs-pen-lift { to { opacity: 0; transform: translate(9px, -10px) rotate(14deg); } } +${M$2} .wterm .ln.new.op-read .cmd { background: linear-gradient(rgba(246,196,83,.55), rgba(246,196,83,.55)) left 60% / 0% 72% no-repeat; border-radius: 2px; animation: lfs-hl var(--d, .4s) ease-out forwards; } +@keyframes lfs-hl { to { background-size: 100% 72%; } } +${M$2} .wterm .out.bad { text-decoration: underline wavy #E8739A; text-decoration-thickness: 1px; text-underline-offset: 3px; } +${M$2} .wterm[data-sb] > .thead { position: relative; } +${M$2} .wterm[data-sb] > .thead::after { content: ""; position: absolute; left: 50%; top: -5px; width: 16px; height: 28px; background: ${CLIP} center / contain no-repeat; transform: rotate(10deg); pointer-events: none; z-index: 3; } +${M$2} .wterm.enter[data-sb] > .thead::after { animation: lfs-clip-on .5s .2s cubic-bezier(.2,1.6,.4,1) both; } +${M$2} .wterm.leaving[data-sb] > .thead::after { animation: lfs-clip-off .6s calc(var(--ld, 0ms) + 1300ms) ease-in forwards; } +@keyframes lfs-clip-on { from { opacity: 0; transform: translateY(-16px) rotate(-30deg); } } +@keyframes lfs-clip-off { to { opacity: 0; transform: translate(22px, 40px) rotate(70deg); } } +${M$2} .wterm.leaving[data-sb] .tbody::after { content: ""; position: absolute; left: 34px; top: 12px; width: 24px; height: 24px; background: ${ERASER} center / contain no-repeat; pointer-events: none; opacity: 0; animation: lfs-erase 1.2s var(--ld, 0ms) ease-in-out both; } +@keyframes lfs-erase { 0% { opacity: 0; transform: none; } 10% { opacity: 1; } 25% { transform: translate(150px, 4px); } 40% { transform: translate(10px, 34px); } 55% { transform: translate(170px, 52px); } 70% { transform: translate(20px, 84px); } 90% { opacity: 1; transform: translate(190px, 104px); } 100% { opacity: 0; transform: translate(210px, 110px); } } +${M$2} .wterm.leaving[data-sb] .tbody > * { animation: lfs-rubbed .9s calc(var(--ld, 0ms) + 200ms) ease-in forwards; } +@keyframes lfs-rubbed { to { opacity: .14; filter: blur(1px); } } +${M$2} .wterm .ru, ${M$2} .wterm .ln.op-commit, ${M$2} .wterm .ln.op-fork, ${M$2} .wterm .ln.op-merge { position: relative; } +/* a margin span is painted inside each of its lines (an output line clips what lies outside + it): the line reaches into the margin, a stroke runs down its left edge, and the span's + first and last lines hook in at the top and bottom */ +${M$2} .wterm .cm, ${M$2} .wterm .gw, ${M$2} .wterm .gr { --c: #8C7BE0; --t: 0px; --b: 0px; --ht: 0px; --hb: 0px; --v: linear-gradient(var(--c), var(--c)); + margin-left: -27px; padding-left: 27px; background: var(--v) 0 var(--t) / 1.6px calc(100% - var(--t) - var(--b)) no-repeat, + linear-gradient(var(--c), var(--c)) 0 var(--t) / var(--ht) 1.6px no-repeat, linear-gradient(var(--c), var(--c)) 0 calc(100% - var(--b)) / var(--hb) 1.6px no-repeat; } +${M$2} .wterm .gw { --c: #8B95AE; } +${M$2} .wterm .gr { --c: #E0A63A; --v: repeating-linear-gradient(var(--c) 0 2px, transparent 2px 4px); } +${M$2} .wterm .cm0, ${M$2} .wterm .gw0, ${M$2} .wterm .gr0 { --t: 6px; --ht: 7px; } +${M$2} .wterm .cm1, ${M$2} .wterm .gw1, ${M$2} .wterm .gr1 { --b: 6px; --hb: 7px; } +${M$2} .wterm .cmnew { animation: lfs-bracket .45s ease-out both; } +@keyframes lfs-bracket { from { background-size: 1.6px 0, 0 1.6px, 0 1.6px; } } +${M$2} .wterm .stk { display: inline-block; position: absolute; left: -4px; top: 3px; padding: 0 2px; border: 1px solid #AFA9EC; border-radius: 4px; background: #EEEDFE; color: #3C3489; font: 700 9px/13px var(--mono); transform: rotate(-9deg); z-index: 1; } +${M$2} .wterm .ln.new .stk { animation: lfs-pop .35s .35s cubic-bezier(.2,1.8,.4,1) both; } +@keyframes lfs-pop { from { transform: scale(0) rotate(-40deg); } } +${M$2} .wterm .seal { display: inline-block; margin-left: 8px; padding: 0 5px; border: 1.5px solid #D2455E; border-radius: 4px; color: #D2455E; font: 700 10.5px/15px var(--mono); transform: rotate(-7deg); } +${M$2} .wterm .ln.new .seal { animation: lfs-seal .45s var(--d, 0ms) cubic-bezier(.2,1.8,.4,1) both; } +@keyframes lfs-seal { from { opacity: 0; transform: scale(2.4) rotate(-22deg); } } +${M$2} .wterm .ru1::after { content: ""; position: absolute; left: -10px; right: 12px; bottom: 0; height: 1.5px; border-radius: 1px; background: #8B95AE; transform-origin: left; pointer-events: none; } +${M$2} .wterm .runew.ru1::after { animation: lfs-ruler .5s calc(var(--d, 0ms) + 250ms) ease-out both; } +@keyframes lfs-ruler { from { transform: scaleX(0); } } +${M$2} .wterm .ln.op-init .cmd { font-weight: 700; } +${M$2} .wterm .ln.op-fork::before, ${M$2} .wterm .ln.op-merge::before { content: ""; position: absolute; left: -26px; top: -9px; width: 10px; height: 19px; border: 0 solid var(--bc, #7B5FE0); border-bottom-width: 1.8px; pointer-events: none; } +${M$2} .wterm .ln.op-fork::before { border-left-width: 1.8px; border-bottom-left-radius: 9px; } +${M$2} .wterm .ln.op-merge::before { border-right-width: 1.8px; border-bottom-right-radius: 9px; } +${M$2} .wterm .ln.new.op-fork::before, ${M$2} .wterm .ln.new.op-merge::before { animation: lfs-vine .45s ease-out both; } +@keyframes lfs-vine { from { clip-path: inset(0 0 100% 0); } } +@media (prefers-reduced-motion: reduce) { ${M$2} .wterm *, ${M$2} .wterm *::before, ${M$2} .wterm *::after, ${M$2} .wterm > .thead::after { animation: none !important; } ${M$2} .wterm .pen, ${M$2} .wterm.leaving .tbody::after { display: none !important; } } + +/* bubbles: round, ribbon-edged; sparkles and hearts float up once */ +${M$2} .bubble { border-radius: 14px; font: 600 12px var(--font); border: 1.5px solid var(--ribbon); box-shadow: 0 4px 12px rgba(77,107,254,.18); } +${M$2} .bubble.good { color: var(--t-blue); border-color: #A9BCF8; } +${M$2} .bubble.bad { color: var(--coral-text); } +${M$2} .block { border-radius: 50%; } +.lfs .maidfx { position: absolute; z-index: 46; pointer-events: none; font-size: 14px; line-height: 1; transform: translate(-50%, -50%); animation: lfs-maidfx 1.1s ease-out forwards; } +@keyframes lfs-maidfx { 0% { opacity: 0; transform: translate(-50%, -50%) scale(.4); } 25% { opacity: 1; transform: translate(calc(-50% + var(--dx)), calc(-50% - 10px)) scale(1.1); } 100% { opacity: 0; transform: translate(calc(-50% + var(--dx) * 1.6), calc(-50% - 34px)) scale(.9); } } +@media (prefers-reduced-motion: reduce) { .lfs .maidfx { animation: none; opacity: 0; } } +`} +`; + /** Adds the stylesheet once per document; returns its element. */ + function injectStyle(doc = document) { + let el = doc.querySelector("style[data-lfs]"); + if (!el) { + el = doc.createElement("style"); + el.dataset.lfs = "1"; + el.textContent = CSS$1; + doc.head.appendChild(el); + } + return el; + } + //#endregion + //#region ../view/src/skins/maids/cast.js + const ELLEN_POSES = [ + "happy", + "thinking", + "thumbs_up", + "surprised", + "crying", + "angry", + "smug", + "sleepy", + "shy", + "love" + ]; + const MAID_POSES = [ + "idle", + "run", + "laptop", + "read", + "cheer", + "heart", + "sleep", + "wave", + "serve_tea", + "arms_open" + ]; + const MAIDS = [ + ["ellen_joe", "#41307e"], + ["2", "#467ab9"], + ["3", "#c53a42"], + ["4", "#6946b9"], + ["5", "#46b982"], + ["6", "#b96b46"], + ["7", "#7b7a85"], + ["8", "#e6a319"], + ["9", "#46a2b9"], + ["11", "#797887"], + ["12", "#467db9"], + ["13", "#3d74a2"] + ]; + /** The view's `avatars` option from each sheet's URL; `urlOf("heads")` is the head strip. */ + const maidAvatars = (urlOf) => ({ + main: "ellen_joe", + lead: "Ellen", + heroes: Object.fromEntries(MAIDS.map(([name, color], index) => [name, { + src: urlOf(name), + color, + poses: name === "ellen_joe" ? ELLEN_POSES : MAID_POSES, + head: { + src: urlOf("heads"), + index, + count: MAIDS.length + } + }])) + }); + //#endregion + //#region src/client/avatars.ts + const SHEET = { + ellen_joe: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAtAAAABgCAMAAAAD3LXyAAADAFBMVEUcHiNkXmZmWmddFh9jYmbdV2bf4+lhWV+cIjD50VcVFxqbXmjamJZlGhpZNEYXFBmiqOrd6O2XnuJQLDPvZmgiHCDwVWAoV1ZkZKg6OkKgm6E1OFxUOEbpTVhLPESYk5p8gaz615ubYWKszO0tUSrmnKdPMTaaUmGbdIxMUDDmaoSjgXxVO1Vqa4iPU2GMiY+SMUnistnaOFCw6u2hap98i+d6jOBz+PprrfiEluzTJjQA///0bJd8nXPcttft7O5mnZf38rL//wD/AP/wj246RUs9QUqCm++rsHz/AF93sfev0rOCfYgA/xV//3+FwfpvfI55eIGPesWPgX72xTv//3+SNkaZM2b0uDP/f//3a4EAv39zb8Dp6ec1LUCqAADpTzq7w76DfY7yP1oqauk/v78xLkG/fz8wRD6APUMAAABORVMuKDJEO0o7N0T6+fjv6Oj+/v7Kx9A3MjtsZnJZVWqLhpGrp7BUS2TV1NplWmy5uMdJNzl5dorz19FtaIzZ2eRsVlf549yZl6eKhrCGeo22tblWUltlSk1VVVSUldAlHCeWk5k7PDuKisd4d6t+fn12c3rzysUcGSPOt7P7/Pz9/v1MKTOvmJajm6kXFBv8/f0tKC+IaWz7/PwqKCz9/v4pKCqPdnfyw7srKC00NjX9/f3LqaeDeq0sKC41NTesqcw1NDhvOEhkXIfCvcoSBwuqiYruuLIDAwIrFxkpKSm3uLfX19ePOEyrqauQRlU1Mzjq5uvNmJQ1LUFsKDSpqefi3edIRkpwa6TLVmoVGBLKyMtHRkrRwr1IRFJIRU1bWYQ3Mzr1OlVKRk06N0URFw7yREVJRU+qR1k3Mzn0l5e0t+6km8/2ZXcAAP/ziZCXmJbp6Ok6N0b/AABpaGlWV1dOGiYoKSesN072d4oAAH8XFxaMV1qwVmhISUhnZW7KyeosBwsAAFV3iOo6OESuSWSKh4psMzt/AH9TQD6sZnBJOUZWVVjwqqf6mKOzoZ3RZnNVAFV/f/8dISsZGBkLgyqlAAABAHRSTlMVot30HfYPZP38WfX9COOeFPP7oRjSYhgFY94UmZ9kE/j9EPUTE16g+Rn5+RzrYa7vCvAKCJ7rBhdf/QEYCfxVEgUBAf1f/JoIAlULmQICoWy8/bP3AqkF9wJHBP2jngMw/Xq1DATKBFpbAPz8/Pz7/AT9/Pz8/Pz8/fz8/Pz9/Pz8/fz9/P38/AT8/PwH/P0E/P38/NCu/Pz8+1DP/C9wkFH8/ZEvb/39rk78b/r8/Pz9/Sv8MAsP+wb8jhH8/Pv8/TD8/C0OTf3OdPzQ+47NEvau+639/f37AfwKLbABCS38Df38Ak78+hjP/PwD9o/8z/0C/P2wrv38/fsDAvxusBvLHwAAd79JREFUeNrtvQV4HFe2LiqwbI/tGJI4zBMeZjhzGC/zY+bXxdxd3dWgJkndgpZaaMliiy3LzOwYj+3YDjNMeCYwoUlmkvevXS1b0CLnft+9736pxKwuVe299lr/+hcVeL6+vr7+C7oKvl6Cr6+vBfrr6+vra4H++vr6+lqgv76+vr4W6K+vrwX66+vr62uB/vr6+vr/l0DX4Kqs+c/mYRXFs75Bkuo79o7/8WqvRxR8WFEqv8rTPPUUFqi8/KsvTzl7mf8ChUuZ4fdXs/M1ypXtVq5OoMtryv9zWpxd9ELrJMs0zdH6desaOtZf9Sptx62OLduy5QVFudpXLN915fe7rlqmyyt3/Wbyn//jLNYOLMwz5dv/k6sfZUNDR81fK+s2rNuBP26vufo7sWtdQ319Q8e6XbOpstk19JYlS5Yc38Jk4OoVUTm+u1L+H+Osr++Q4glJkpvjPl9zQu7YsWCJhlL1VCrKsgumlUik39pzmCnqZ65Kp9J1+Pi3aQXLy69aM3s8L7xblE6bn7z2H01Hb8edth2jN3vkP6k4e9bJquWrX+NTE2r9s1dvU/Gh9ev2Kus6pAQu1cfuNdOtCmaAGrjL4JJhS4b4qLeYhV/NnOYUWeVXWZz169dvkC3dknDJUVP3qWYCb7bgJYLl2nGB3YVuVPTtzvbXtsCgLXSFl3zvllF1iceSfeot31t0tS/22tlP9nhWqexZMuc9g5+0f1U5qiF5PlaYttLLjhceU3YsVr6Kni4vL796BbS+Q7ZUyck4lipblgTVqlyVSBPO9KkSzkXaT/KI07Fh/YwiPbOGLvRJppzbd/WWwhc9CwfT7moMf++WW25ZMlW8F7Y66+p9qizH1bAqS7IUDvtJCJqt+vULW6JnFOWR9rOrRiXpEC2NJJ+8pPoS5oUt2PZ53qaGVmHJLT5aFjM6ytbHXLZkkadywS/3ZQbvZNTpYWyXJKdXvaZLvre2fHXluMXCq/kzqpQ45bnz6rQisND461yNcaUdgxBGSXRyS8RlmlW5Yd3CYaICnAm9bCVUOayqJJGZNLT0BiX/rQryHvIlhz0DCUmmhQ7jDiQ+77v/spA1oZ/Pvv8dpoCcLcc+OXW1p728Q06nLTPpk1Q1LIVl/OoneWxOS+QfKvOHltvaB9Swhb2W2auFTT3sSuR8JRrQ+dvf/p5PkvE51VLp3XC8HE7sxT/+egFvVfnyBXoEP21RWJV8PourI8Ohbym/ani2i46adcGQZdyPds73SaG1ZNHeq1NEf8DRWLbFczUiSAoIkA6v4zsksbVK8DzP6c2+hvULPGGKB4YZ6sNHG6WG8Yvsd8RoOiF1LM53q3waesst0vtvDfnDPn/UJ6tYGcsnS4llvcc8T5UvyOgs2/KJfIgeRJaiPCfL0bNX5+A2qCZeSY1CjnC2VD+QEIRBlcI8h/eaN5LeqywzLT8OhIr3sfy4FZ6NPZ+U+HJ+plnxbDvsWYKjHsbCqpYVJnsBvWFx/KXBhVigctKjEjtXkD6VVAeE0KeG5aKvopvfx/FQVTqvPondEsq60LO3fOFYqPBmz7CZUBPpwtc8NZULE8HKDp+VgP07xE4sHgavaJu6oNt2VN6woBOiKJBnpuNH8V5+/C+r4bAVluOOKuW7VT6BvgXP4Qv7E/6w3/L78F8UilHljcTwQpTQa+1FCaNZIish+8NqlOGfoi0LUmPu+nT4TNp7P/ZdDptRSYbtsWQsE86qYyekdXOs0PPjVF2PX6INxwL5/f5RK0owhomULJnzBNKFqtVZCHEOQ1nQkcBT4RV9UjMvCs9t8/z1vF+qvf0MDqkMTaqG/UN+Wh06rsAJqxZ5fnN18lyYIXUoY8n9ZD1gyfxhrP6pBbm9v67xtBdh09KrOBdwqp8scMO2N/jI+QKSCtPpwjFVIYWSj+M0ztB9DQvQ0fjKhkSYHXzVdwg3w34xuZalDJeRGx6ZtvUF0wFHIb0FNJlM/+NBoIL8WB6/XzJXHZ8f7sDXFCbAR8BWhLGk7DkY7JWKPJWVC1TQ62WTqTF/AtLsNy0Lcq2SPJGSlnyiI3XMtkT3/ehHi5mNV75MMNml5/BHDc6JWn7VxzRIWDJOnhucU6IVz/cgH1GZ5BmicogOFSSbYIOV0niRe3feSnpPwtHoBfyWj/QzbTtwL91Jb+HbF3zq2fW+RLo5jE3DzSBOuC95HLLQ2jtv15CW4BO2U2rUyrlQ1qqbH5p/DA4YwZdgVhmLJJNgM2YBK3UozWual1uARBMZUG+aZA3J6fERVCCsNwoV4uNFkdECswt0TfkS9jAQ6KihJ/1hi4tDe6hsrRO8eKFgHltW49nyHXoR2c8E2UcrzKQP8HfZAnfpEc86NcEOFawEN2Raof1RCxAKms1HryUlUjZJ9Awf/9WPfnTD7T8A2vIoxzLuuWBHy+DJWQF4hVDTeTO8It+pLJpjef85g8xhnG0ZDyBFM2GGg7Hgo9FwlOe9hefnI9HlnnYrTNqd9llO4NgDJmKlonRjneP291yNpwF5hiwTnsKPME4LE2l4mxyvtc+fwTv/peXKIPOaCZBFvV6+vWD+ULOD1obwLj5P6HCUbkU6SNUEjfeKvo55gg7Fs7dBMnWZgShY5ajl6GbUsA4RkInygpgyp5nnqc/5jGfY556nsF5XZxKYb4mGw6NQJbCPhiYUbZvPlr1PbwQzMQRpNk2SHB8zQFJahGFekIJ+psEHpIytSiRMLprWNgl6wuEcJwNszzAot98Amsq/RPct/tXt//iP/93PSKDb2Yup/pgZcxw4YDgn+LifyadkxpM8Pzhr6LDmpiUAO5BfwvFcirdNfpMe1WVCDiTUtFbeot55HfgMFhPvBFpLAqxzoJfTCdmHP0MWVeiNnoWijkoge3KcmhkPoJqyZaoggWUfQKPk8EKP8sh8pGjLJ1Ebu05mldky+g020rJF8dzNb86Pk6j3GYzeACST8W6C5lhmM04qLKsokkQL8rp5SbSi7K3Ht4ZStvzN5kevjnDN+iaevEsLG2nhXkJKnyrRBVP95CVFJilkqNcML2Z0kfdylpQwVLKKYTXJc8acW5ZDLYQxgX98Igedgd2D6IQlU/AKPecXonjgEVqwnz7TJ/O8HjodEkWxro4393M48jgkfoEX7Rlw9POLb/hHXDf87J+AnV0GuQk3q0OWyfH7+ZCe4jmfL4GDKpFSA4zmU4tmD4bfIjH0jMWsE0Mbvd7T3lSGd+hVR+Gp+GXoaMH70JwSXcOINUQb4HTjKKm+aNvnRx/8pkU2lUE7gyR6oa7z+8zHhCmUs01lWji6qTne6Du0hogYWSCJ3jUPeSbdA/cEgoyTgANBAk2YMcHtF0W+5815sPySBYYNRwEAPqonE1GOc5r9HIQIBkMTcBfeq0t75yPR5D3R06vh0eaYILSFvCHdywHZiXwGEh2FNAotySlbXzBVnn2SNQRJ0XWTE0SvCFNscKa+KQM8BpF0eOD6uXS04kljRSQfHN1Ry+HMUctqBkKwSBPKuqV7zyyEhASCJuBi8fhgdXVFRYgTRa9X1AWBtwiHZOqAXh3p2Xy47PmfMYG+ffH1P9jbbkIJqqN+v8lt7Lf7Q6J343490ZIE5y+RpgyHbb61ZmaJVm5dcoH2SZYcPEnMy3tDoSNejeP1OBf1A9lDmESS6N45EfC7AzwAs6omYER1LqMmxZGlWy2dN33QRT46WqLYuVCmrQcMic+KRpvGRh0xpIa8GU5sbgZFAK4hwwtCu3LnfORZZiwQ3iUaJehCriVwmgyLRFf73DLI8EYYMAM8gCGazbou8P6kIOry29EWTYCK5r3++tVzw2gYVRlgE1YGZ0QwqmNV1bFQzBA1jRN4jviOBDB5KiOt9+yaQaDLPYO0s7eoqsOLoZDXMLhQtcgZ9CrN4EqjtNQwqwVPzfEsJ+Xw237yn2yOF3TDMIlRiB7yETkgyba3df6Kpz5N2t3y6d4QXqmiosLAKec4kdMEjo8CNiQ0LNH+REPeM3/fnwBx/GPJ4l1KZzO2ym+CYQtVVIWq+o2qiupQNcfzlunAHIZBC0EaWxcpM3K8/9wXj5J3K2t2tGqjuDFUfSQUEvEU+JzF3Do/nkSk5fn17ABahWPJPFsrKXi93xFF47TBG0aqTkyTHxXWIdD8sQUFCGsK0z7yBkO84ESNigrLoWVyEvFGa43PxwkCJw4qL8whQG+RkoduZrCFnO8YeWIqOfUc714DBXME9RjJBmpMgk8R4ngzqUU5zQgJhgiLakKn4tDzXl+DR5mPd8nAOBCUKVRVVVRVV1QbAgdFSz9hpSRO47Vkun5C3tJkgVYYYwd9FfMaMafaiFWHKhAzgErUeJh9/IPOk6NaOIeKXgaIiCOaxkc5jm/hxRRnNas6xUPeJrpf4C5LdGX5PZW/m/WQpsntsnSnKuZUQEE7XkizIJDtgukhveinAyfOAKMX30cq+r7FyifEF0cdw8HChNj/EOiKCk6MmgLnJwMbNkmin1FmEMNtUM/g10zO5ENY2P4jR/r7Q/1eekXwUYBjo2q6RSSJnmV5nn/+ecVTRA6XT46qJm9U3FVd7Y1VVEHx4HWg7sG3WbiJJrYuzCUkEAOlb4QqQrH+ilCItl3k4iJbo+R+r8Bpi5TZU24YMw5vh5gtGVxtzIwTtA/DE5JJDPfTOv9f52eXQTjqh1TLtEyfETKOVIdIBjZ6N3qFI9Cqh+Q0+YW8aMgb5pRooM0T5Av6fP22HnpiqKoiRsKIswnwzIlJeJ1Y+JSQVieejoLJ2I6YJEC7u0Lwm2Kh6oNQiAYWRsNa+zNm2OGiBoGgU7NINA46opQ411FvdX81BDpk4BW4aDQOb36URfhMQDqX83Q/cs1M99qOQ5rGK/mTp/EksQrsFkcnlGRI5KEcNRDKYVgevg64bLoV+9Xi6z0EOm5QCqB9kKhXdYQddBgvJtAbDU6DqyCIFhAZXp3XhIH8DBcYO3ID/DpPpxwqvrq/P1YVMnL7JRJT7osyWyaevs2TF7g8f737a5pkT+bSaW8IC4ybxaqAmkUCmIaYBCaC0tBEcQF5Hb/2vJaAKDbbsVhFrOJgVRXbdmgiLxQ1N2qZhgEdMJAHRj/1x9V/HHcrO3lii+E/ST6Ts+KjfmM0Ht0vmtAn5BgmeZJq4dzsMkiHAnxE1IlWV1dXVVVVV3Pe/2EjdCIcDu6QjzwzvB4fAlCYU0fXk/MHF6M61F9dAYGG+hDoxTgvD5BnQiHYAl+HBIIJMHqShn7qfKGfBBqrUu1U3xWzYwYujhZbxHO0mEM47WR8xMMzSnSlZ5iYGjMUhTqt4HhvdRXTpQYHVK7KFO8JW9BArkUtaL/ttlkYISxQmvS6aUAGjYrYd6qZPhS4jdghuIi63gxg7sNvUy2j063YfYsXL75v8Q8Bon/04yJ42eZQ7NqKiv6qiiP4UREDeBEYpsPJaCY+WqZXbc+XvMAUNEy6X4xdW42jAHmOxarhYMBvJ/VjiFHymQEWaM9PD86wPM9ff/v1/4QUYThsfiftxCquraKDFTMgv3QrET6PATweJRXNL4AO2pYmxr85Vl0Vw6pXVAu08cAcYghbro/6pCigpzao3Dj5Y3+8aeI9eJ2dWStkWWAQ67gwb+i6IdZxtGeQCzp10GbnZmZgFGUdEXUA4NA+1T+tYlc1d5ojkMCJqcyhURlkNI9Ft+pvmgNGK0oDgsM4SRWhqgqsVUWM89J7CaLdLwCE8I6VgYrmU8CdV0DHFGE61mP61Rj0RuxgtVFleOk/gU4UTJbumMwe0jk99x/+MKMLf5bS4bDlBysOeoXToWtDPFOqoEvqOOsQjgQxtkIrg+wjR58sObq758bnZ4ZReiJs6UBQRmjIAUXCcSEvOaqEXWUVpCQEDbgsVcdPYzru+5MbfgiZvoFAtHJzUjX9Q49De1VVeEM4shsJuXC07S548ZMXjvAI36vke6tPGLVqhg5CZKqqQkDhG0lfEJ6vPq3h9fg6ZwiuK11eb8Gv88QrlRs8Nzx6u8fzFqCBVV2h41CRtai6yxBdeSYRFFIO0A+dLLFVmXc0pJAsc/MQmZ8nKoaqQwI79ni/jf266cA0+iDPfOv2HZ6pK736F6upUuHXnt4zXnpFWXWiflEfwjOZOpbGC4kGagE3PZSAVsN7entmjLFQIpFJTE3UOIhTzyT6OyESZ8FLuLUFjgzMIAxhav+coAM3O8SByoR2BRWAHcN9II62sbH/SCiVjEdNSwaPzLcYCfXKvaY8muUDsht6fGjom48bBrw58gvxIKL3iCCCUU76rWQd9OElftjzh5k0NAJyVvXBIfzneCtC1RVeWlyvl5w4XkTaFJ1RTRQ6Pc8XjDzJrqO3zYA64GRIsChmdUUsJtxVAcBqbDxSzWwG1qcFD8eZKoMcvJi0pR2Tzvz1RHHcvvg+z+0lJYu3I2gde9sffvyJftj3/v5qL0Nj7q6Tiub8iHWk6E6tO/ZOV9B7BL/sOyQbB68lxzTEHan2stOF5+BOA4ZBu+IWfj+ZL+z52ekq+h7P7Y/ecP2jj17vuWdZQr3rIFwCqFISaOJtmEBDogHvcEbJMC8AdDA8JPmdx2MHQ7GDT8AD8uK1bGjnUNVG1a/bOEAMu7ZPeqynPKt/8tPf/va3q8lX8byFBBUKYETjpsN/5wg0awhmEKaVQGaUHAgZ9gd/2O/tnNFxXi+ZSHMAanIex+GiK0QevCAaG0XNSZs2eSoQaGgQGxixZlYFvaMeuWP+5idi5GPEYMaEjRs3Gv39G8kzM31m0oBFFLRUXTotKeMSPRlDLyEv1zo0VPH2EBiAkEGySHDu9JEQ9svQM/6kBtvFDwzz5TNzP2DTYUgrDgLyVldjSTeSImSONlxK5MmZKZwR4cw1nmVHIcwX8dMb7flRJ1ggQAG6HeiaatAuG6vpoYgdgwC0QEVbjuUXSQzrLM4/OQL1o+tdDvqR+274lbK3psh8e+jtg48PVRu8XWVz/QY9EdhkPJpG1KaJB9vExLFnKh0AU9JaCLdRMmOP05tVE24W3XMqhqq89GaQRN4B3uNSeDCRu3FaisD1EOgS/Hi05NH7/NGKawk9V5wOEW3jJT3P0WKLuh9H3g+GFcss8pXzFWgQ/2p6aGjoca7i4OMHbUizDXn28pzNxTk7bh0yUjDOPF8z4ayu9vzi2mt/+9Pf/mTXTVj9ZSyXyZ+INtuiQeAXji/JIhw4Wm8LPKwEJcKdxhIJ55+ajbQLD4VjMeYd3FUBkoysmIH10lRkFMYPcbRbnGbyidkDhiyEHvZFh6DMqvrF/pC98ciDRzZ6DZvhDrI4PNg4rFIdp6vr8gk0tBgodPPtcHVsyOD6hVAM+815IUIbyV5wYSY+Bj1QzUDPTAr6LMJoMDdVFQfhxIXgyoE9ZHoQksMLKXvU54NcQ8du80BDv9ez7DZI9ErP8zOwds04YTA3IWP/kdCR0GkvKTI6D/REKdPQ6qJ+lyLVfZy0fqKKXnzf/04S/avFlMqhvGhEH6+Ceu03xH1jpyHK/f14pv5/e8TrJeWKR4IHkqzTCFB1Tl3oyjPYb7/qeB9nAs1UM62qF158RYjAAnY5qTujCCSSt8Ejq6N8Gn7+AdQzVPSjt9/3PWB5UvVVfHXFaQjJ6dBdIRHMicFbPjDTwNAabZg4MF8S+jiyXGKPxx5/nI9F+6NPVNhkvMAGQBUaPgtYMZ3E/TRtouKo8az++1/84rc/pbyASjcWhvhiAjRStSvQZH/A9nOUFsDjOGfqoGpDZICeyw+jFc8aSpexvhm+9lr2esDPhKIE44hLtgpCMt5CksjxGUu4olZnOB3EIVsHK/phVDnHePDfhqCb4TtzDEgTGx03SAOlUprVkF9DF4bDjhOuMBywPnbEW1XV7zVCRwCnyMbDrxM0i7hWnh/ubc1vLpSaQh8ogGrydaocPlZheKuGoKvJzWa2JxUdAvLF/QQY1Js/vgMk33szCbTL2qnNT1SA8k1VH8HpIjgmuM8DSJaC8tAdFg7lRdm0Jp356xl8/scSZfE/wc0LuLeraI0NfkzS2QFjgugF+YbF8SWiDpj2MPwFMcW3PrJ3ip/bvoTC5nrF29+EBoTLJdLx5E5XXWtwBr0WNgi+AaguHD88yyVRfHM6hmZ4474bbrhhceG1UNBAhqcD8J1gxUJwMHlDYJwJXs1UIXwi4ajB+SU7KZ5PkM94sPpgbGsI3DhH1BRzn7vwpI7IJ/2SxRNUbJ2S06H89LerV6+mGxSRp4pYiO49faSqmoEFF9MTjCanHlG1OmBPSDgkuj2fRLuREFkd+ma44tprQxDnqmqSH2yal7aeAyOox03mhmucpKkb5hJo+JfNjw/FjlRz+zYKIYO5ujjnpKCxTgRiCS/wdcjpGI/sF0w66L2m6vgPxjjdiHRx3+KJ4hBzN4EQpeCDm2mmD895BvL74Ld6LsHTNkieq2O8EItt5L0gADfCt2SIU0hxoO5UgA6BqZ9bPx6BPB/NAzkUVrBTnzD9zQcPPlHljYS8dMpFRkLTfuOBeITmOa6FND5CP5I+5cz/4Ee/AsVxw+LFqLB9reJgNVFkYheS6BkzL7CVgd+E+wK7ROEOq3oKt0W6m3LrJA044ClERMWqfvztb1a9/biXuBtEZYjuAPim5wFWUE0H9CpwKMHwQWF4yhs9f/0Nj5JHiJ9L/pe7oOhhuQwuW00QmvCT+0oij7CxGkXMGFvF1/HnHponjLYkC85gzBsZI+jC9BchzaYuTaATZ6lJuE/8noHBievzR89Pfvvbn7gg+juUQOQfMr2xUNVlBU3gHstEG1fnHJIRbvMyQRCFfNFQLD7y7MK+occfx4E1qu86bdxV7T19mqFWupNl6potESuJxUc9XcPsAk2cdviJx/8sFvLGS21XMQuCu2lYLFPPiJsgSBrUGievnyrQ9+xCkfdh3owevDYGIzPWx+1LMiNBbo/makQcWV10/fhF7TN4Bu0gALwI6YDF5pffEmIADHfwum438T5R8Jz0d63Ierh1pARO4Rsf35hXnJnXzDl4J+z6PmI2IL8CiXSEhBoH1DSRIlTHHmm/LWV8U4iOXy1Wbi+53gOJfij0eFV/VRWEVz1huSwSYAZzwzh23nGXZj/YBbirGtfyF5NuU7nH02mAyoJJP1h1sFoQX7ehYEMx2C5aFBa6ggByRiaq+kmDiYv28LumIo5H4RPecN/tj95+w50HH6+IYa/FplKn2svWVhTZroPOwsFIJuhBSPfM7HxPoe1MGag1FNL6sm6kh+eSAY3TmmQ95dga32ymSDFeGu6ZcM7+6FkNl/C3P/3J6qeg4hNgeaL+ELRqxREKy7EAFhNEAAQjaXLgcDQINGx8Xcr7bp7nIg2NRBB56NprH7/2p15ioKFW6SYaiZHA9I7o0xknoKkSJ8+GOVjUERzH0BNHvEJWimuC4LrxFD6nPRPMZltH6BqxFYufLtBMu97mJIZw0GFGNwe5FRGOM5hx1bUInSm4GGLSFWiucLA372N0GvzpkFDVH3IMo680Dr1suDFTjjxMGEMxZSPsQl4duTzXlTx5dPdt7X+SLxGWFetsUEUDW7XRawdtOps8236tixQsbAjPpfVMk5DDHM3NUzOj/8mPFv8AN1v8DydjB4/AvAv7+0pPBHWe0VrETbBcF4HPJMx4xpTUOrwegKy2arJ+HX6xhxPVoarHD4IX2yhGNhuIqQgGg3J0K3iVmkH5kdEo2zXhrEfr9fxuCuJgOvoGwI6ixysq7rrLuz9ZWup4me7ieZcMoIUCqe5HejWulGjyb84r1e646Y9CKXq5YJCFZ5l+5nSuSSqNIEdNN5MQaI0/Uz4wIRK6C17hT36xOvcXXBipMWasAo5cCOYDep3l8TAVHbXUt3UdER9XoHH4vcfyEFOUSYbytgoAjmuPdN3yHaYqKM6ssSfSSIfwgGQaUe4JSVcnZWHki9KIo3AIQSqUUjDOfS3XGxO6eBFJZnpQIBANbnfDVIEu/He9nr96TjUJ3AlevbSU07s4I0kpE5FvCV10lzItqosGk+j9RfmP1jbx3UtwbEEae7msVEpglUgJjSgprBAPmfE7Q0Td4G9xJO44erSnIH+hr0RZzjX1Zp0eqoh5vXHJZLyWy9ihnocLcN0RDsm+wqd97plpVs2GaaWT97Hs/ts4eKgIoO3XKS0yzbM9F11elX5FQqGF0FOSoFAoZamb7px0lxfu5RAUqgZxUwX3VNhcauOkagz8MK1BTHYSgXXO8ZNAa2KRZ5IudCUaDAe09KO3FxCTXV2N7yrLJr0OHSmea8Px0lKA0kLKMnimoVvkzKp5JZK+eSEZO1jlFdskqSnARSIR+hGJlPWVmt8SOMovrCOB1hb13DqZhc5ZQ1SpZJBk7I+R80Phc9qu6o1GNdwWQ7Blf5yisg6XFNn217UIz+UBHYrnESmphxEDqbr2dFMfA86kTzVab9gLLqoLGZv5B4KQqE8nZksjxVN1WC1mfz/ceD1onYiMS7QeEdq6uCYOWU+a0EQAJpUY7WqYJNBwB4NSl8dTZNoUFha5saDV1BXkCEQHhK6mwIoiLtA11iKaGZ0MPPz78nyNaGr4Hs9pQ/MCtPAn5EQThd69LPGCwR/EMhCdsS1CHDjqg3AIW1Hk8fwf8vDzd3/jGxQdlby2XlQVE7xNUlaje/CEogJZ2rY2uS9Oobl9wQgTaMMyGzzPKlMa9jyyA5mjhvNElYGMIj7rK5WlLC0w3QcSHSGeHbYHq+4kN5HC9YIi1ZdN1oCnvJzEAk5VRwxvVylQONk+5l+Ukb7g3QdDpm6KQruit/zNPVN2/J7rgX6uf7Tkhhv+NZFAIcSbSktli16K9knkvkWWlE8hUYBz6FTAMLeoEv/yvFR0u96PyDBvnmgyuUhZxI609ZWNoVaA37TpHfyiN3GMNlk0ODi1TcnqX1z79xCeDKXM+CsoNIOMtGpEQUNVIe+R08hsJEUNzhanFYEjAvuIy6ZWbsvvFXKWH29XXWF0B72im6TAcW0cThhF13Sk6JdShpsg+DsSswk0/UNDmt945MiDXtE+USpZUPBlZXSzMWHM5LcWw+Zwdl8WOiiVDmbqJ7Icu+DzlNYGizznvEhyMKpFoUktlZrUJs7GWQ98NlYWbGprCtZCmaUdFtBPcm9en6cMvH2tp90Gi45QwWdQhaURAiwi8wZJI3q9sIIoGFBVez+0Wqfn5otHPz5fnmddpLv//Te+UdrhWefjLG9RVRWe6ESCzqjApJorzUYi0GmvQw4yelOwrdGFNfKG1ZKkTAmpPvKI0qrGEToHO8G3pfiuYJCoH45xbeJYhFxMQkApR+YpNRFiKcmte7dP3PeTouhTHQg0NtreLEtNDHoTLOUiJI9tZUygKVUbuwU4ffg/DE/fJCzZ7bf/yd+GQkygW5qkoBwkQ+zmNzVFiJbgHZNzUnUMcAp1CRSkz4u3u2BV9zte/rNgsNSCQx/Ry5r62kADlRW3cWbUtLuzhGGERb2TKck/roZP+NtfsHoXRPYfrzpYcZfhPQ26tYIFRYgmRY4JZwFOOdyQygQamCiVFJ/z5Nk47Jek4jhAoINSnM/JM9dn28m2SGMqmRbE+OZgksxiokH1zZTPQVuINklSWseZOoLgvVRaKnVFdM6228r0br2xeOvW4pc4I81nWVBDR8VPTpGxvj+egqzUXSupX55Dju9BxJnqxnAH+USpjTvYZXrXvmDWTEdKu/i4SRiPH9FPvuwpWNI7FUf19Hqe80I/GXygLYtn0EkVsigaE2hOzCCv1EEFgbMfwjDsWfnkw7sLph0LyhL/Bl3S4nWqnhCWIyGNz4JmcDeeDmmwKdAC3bPbNHWDbwtGDhCG5vi03FA6PddfWZb2b4S62QhjvgnPz+FFIsxHRQy21mZEFPmuSQrQUY6IuKbB2aJMoDN7uZNiM8K5yAJBJAVLEyRwyNj9QBmBuq5vCXzS0jWHYwItcoc9w3n26nrwh8MIJkNYjO/wEOdsqclAOCcEhGxX19Z33tkEPJ/UbdLz+JFo8M0nAF4On64aaiRQywp++5oibV2fLY+YB5Yu/eVy6CRe2FxLLytUHh6cbL9W//YnxNwhNEPVkYioYZ1AtXlPV1chI0jUXIdVRDYNNtKSTVeg+U2Wvf/NfMREgpPCoSPVR+7SCfbSXtl4ObuPS23ayqfSFN3pgw8DDpGaHCh50znYX66TPn118/9qnRaPhKArgqQeu5pwUu2mbN/WSF93bZZ8BL6LXivASQlf7l4FLCgLUmrFPinLxdPGaeAnb6BNLpWxb2pbG8zXWHd32SaIz4HdAYAxEuid3B5PoRXs65wijId/XHmG3CzvVnw93r+NgScwE4GAm/0F39AWkJxjkEPfzjR0wfP5+jowiZbWrfelrZHlyELk+yTYjAgpsUBkebab36o3Ne3rQ+qNxrfV6rtJoSVkpOjcfXfD/z1FopV31VB1fwg+99ZNug+R9+VBKFYmiKmuWohlhLgTPqX7NNGwab/WbLCWKRMM+m0n2/GNY9eCJuE0XSb7J+T8k7Ix+o0J30szHCtdB04LkIMbfuH49HJivOn/3ItVQOCp2jAiCFcHLVMgvAsPl9MDmzZp+tZAlDOauinAg823JSk5Dw39QvknlkFMEja+NFialYNBKdgnScsfLSnZhyfThO4skWV8zfEXJ69NzY/AdFz792igQrlVINyqTwP6QgSI8t8ouC64wAhFLWVSWjSxpfwm08ffPI1qhRsHl8dE4cORI45kJUwINDQiZ7cF3tlU/E5CJ2yW6QtyPHJmOMltD5bvWr9unfT0k7Wv1sZEEYFmvqwv2DQ2lrWyTU0AH9/qKw3WBpuI6MAqNQpCY2NaapiQywEEXbp5sxxsctSo6I0hutOWxcoEg1Da1mf4bXfxB+ZnTa8XF+MWjsl/0biztWAYq1baNK3Pz8s810LRgUCC27RpDJudJMpQaLMZ5SayA+7HQacNg1Fe1nljPo+wY0MDSfTd9X+JXJmi92ACuc9Ks02ftY1Fyri2vmBp2etBXKVjGoFXpNyNkaOqNnRI+JhcPylgiABojw4djyiT8E4ZqvfeESLBSAAwM4D1LeNx9spSGeSXtJiZTdxGxpioHelVygT9t/LUzaCfKigCL3DNQfmzpjGoBXaVdbWVAXKcgAcGtOAYm4jrF4TWP7013079wTOwpxA52V7HECJFga5ssLZNHwuUlZW1Fb8TaCuOSGVdSa0uIkeItMP/FhoszKfQ/m9tlrDV1BZJcm2wZlRTJge7u4PBLBfQApxKPCDHDSJDYtLnbvJAQ/9kdc1TlSej4bfD4aEQBWVyCRgio1wp8Mm8Z8PJpBiCRp1pUtJX5YXQKTEFgQ6F9BPIC9HtNvhu9tjuQPHSi0uhfgTdgSXCCjdqLbrU0LBjuopWahY3yDiPT/5efnrFXaZA2XFtZZta3ilu/FaQSh2x792bN29ejh0ggYY849Q0rWlwC8AZhv4rT1GtVGqNmgk0pQk54MeCQUtPRvYFZVb7u28f1HVpaTc0WTOYv7rA8oFCvVT+NIgmJpMW+2XkICKbH4rrdckufrDx9S642sTyjo1xUKbgjR3RSVI9DJE/p/ImcKA0Urq7VCLRhIqut/ii98Bm6p/BvUlF2oJ93dirYB9tVu1moo1FrXHEXN5IVSsdf84U+5r6iSp6764e78bQRuKcky+1SWpxcRuc5jIYrzIu8EHARnnPphbejKe4OJ+iGBJE28J2TVzpc4dPwbuFr9PvFdpKrewJKQgBpitS1paN8Mwg8fGoxkcyLSyZeaYE222tcFQqDNQD8alNAX4TH2kys3BQsvsixcAHr0vLydk0pS5aIDHVqvnSczcHK180eE53kNvNb90qbH3pwG7YV1ylpdBJwbYA4nKG2cJrAcHmOn/8yCSJfkr5yU9Wu7nwMVT6Hqyg9MpvGSz1NKedWciSNw0xXreJpVpCoOu4Bj+/aDqEVilDGcHK00dgLHCiXJQgNK1Z+sOSJ2ErzAyOVSrQyF/kk8mkitrCmjwRQrnkyVcffvX3j736e7mZfDChcZOefmnp0qW19GKlpbXd3d19bWNE3QZGyKXSYQ6khisCjWtJ0RjaVEhmHYhjw8v3ffDOO3zZByVMkAkz4h7BPnotZJXwjSdQFKMGV2xGg7ApJ+wS/pXg6Qrp9aUXD3SBMNIJRm3uIywFLJdAvWS0DhBKrEsNewry9I8FEFvz779xNyT6bvyU8KWFh4n62/ROl/DSR8VZSc49EK6u192Azyu80MiPrNSlDfWl0OvSuonnfvWP7ljyMeznSkqrWy6ZS5cWF/tKx9qEsrJARM+sFA4dimwKgH7Bk9blWCm4h4MT2ZJLi+5A8hAySqoBl6kRULB23+v7SKDHxr7VCHC4Vc8ENpUBVJlBov7wVO/mT7dqH/D0hJB5hlrfxjJJ3fpSpHgsyOQvvPTRzx/dJ7VhmcyIFOHFxkZkMC87ebJ8ThD94xeHe1QgFY5/p1nq+mVJCZNnJtBBwDQQZo2UrAKOoIgb3r5j2ud//hRO37Lo0NDbiKfAc6/VGXJmEWbsmSiARco4iF86zPdOpfgU9z926Mcmn1mIZr1hQjxCpw2uGow4tFmZ6dvX1XciKO17urt2LGIgqIJAbOBi3UdvBBJy/Z9Pdwqf9/ys/ulXf//0q08/9vuHa9fEWah7a7HP98Evf/lon8QkGpsf7Av2ESm0c+QjQbCafFJHx7MTBVrxDIRiyPLqbhpZiZwN7oPiD7L4aLCUtVSAlseZ2FzG08F1kGNpqWnVAhTpLpzMjHeewQElroZvklaULF0KRV9mR8oCqQjUBIgbPomqUFtMUcpeKz+cX0M/33A36Vmc8AbJGkuY7z1MPO3WskMmdNiK3BEjxFEbHIPygQge3ck38juPNqbrn62/+xuTayEUdLRbxomN3x+hKOM+aeyXP1y6VJVKT/T17RvrKu4aeQflGPw7WsYUo8kWkWWqpDjuy0nNhi79w3EkbSCHGmFqxCoA5VZs7sv2te3bVyu/Hgg0Hii25UTxViFpRj616whYnRPzQg7P4EBl4UbsqgGrvrxW2g21MyYF2SvtW7F5H1wdL2xg8gTYv8BFqsNaMneaP8vST/iZA75cVktqmTjLQVqqYF9pF+Ry6wEgjpGLXAEgx66pNSt/dIm/oVDF46DqQZJJphuKJ5a0i3iqrqYULyAO0MUY/xS54GvWpZdN2j/Fs6vDSkqOBpaEg01Nbt266Z3G3UF2rrprazf3NekcS2Llyz7nyx5bMSb9eV6So6b+6ad//9jvcT2Mql8KFGjCSyskX8nfdBNikGuDtPsS8UNa4+6LHwUawb7/+ZSKld9dcyHaLGW7JSlobwXX1ng0WIpjgBXZvAILzRRiX5sgusFrrln2mWY2mJ3aZrfy+N9et5On/IquYPffPFZCR6GrLdLEvSMQIRrg45xoInhAarWnNW/mDXF2jOKApl0vN0ldI+/tLCJKrCsofVSyuRba2VXSeKdaSrHU+Mb3Hha+aCwTlpvS+vXS3VOzEvfeeceenSU7ywhvdUlqyZMlJQxi4mpbWry0GO52WbGpp3ToDs1VQUjWvnMihzB8uIAjgUa4iG/6Vsumlq184z6sKz1IF1T+L3+5U5I/EOyo0bZPpwCGcPL4c70v5MG+i/cQGsUXGIKGN2oqefqx7nFligWH0oibrKIDUHznblFrr5lPZ8WbL335vVuED6BJ2jZ3k3MBs9xXy+4rqQGA6NTSAwD2F9/7+MZHHpmByS6M8deCIEeAwJROsHowaGmBb8qSP5/tRul/XR34IYQh6r5/4Is6c0PzJIGm9GUfltLhQo2UiCZsgiOwtOSHm5ktre3e3N2d7RICbIGXb257J1jfsGGvkj8p6VAJJPqxx55+Fb2NKHVI0AJtpcHN3RBIuW/fvm72WpFGHI/db3y+M6nGs9Ij44RJweUExOYhidQfOFbKYuqip4DM7MOKP/0YtHywtI8S4UU+gJSgbK2cMENcnnSOwZ3fbyGJaMKy0oGC3OC7ly19cDm0NJgbnPkIzwS6s/Xb+SnIxfWlTEX/jbRuTZPUpKdtyjEe4azS4Ke0V7X79q1gKk3FiccCNe68+PmTI+AvJHRr3VsPwLF9at75HUdX7l5OS1mWDa5Y8VhWck2y/MYvl/7jUksKHigDNcpnBYp8NzbyiINNTol+88WzIBGqYujFwfNb+WSqURg5wESwtrTvH0v+5rHRPinbqPvTTlcT6IRGxI163zy1KM95rbl5eLiVIuZogBAAtb+ZtIbMdGktnIK2ri6T3ikVGIFeKFoJbnMOif6xx3MKkLfgnuTui3AkGruwa0HaL1dP47E0SBH+JcCJSy7uvrBo8QxxjO8YPIKEFdhi1Nsmec2NMfMRqQ+Kug0NjMSUEe/OQqC/SL3SWMfLidcmFqvBEkpoRd6APhy7Wa54CixOSUk3EyOypsFSlWukRznwxXJJ6rLqZ4wQ3lcffJgQx6ufSjJRc5DospExOILdEOixp1dAA0hNu98oC4w8eHSFXKbDlK+bWoIFgdbjViNMMQk/NzLSuIKepBTY51NcTHyaAkRTHDgQyUpSd1aynFDvtC4Wf3FNbwEsO52HYFDOXZJ88dHipS+pwcatFCwCyqSM5t7W7TMlpXTU18uld5c2oEoyWJuQsDortZGdbUH2SKWvH33saaYb1TF24EcuvnfgjZGMKTewD6+bfuyV23auLNnJr+TbVnw66cE+L3ny0Yuy1FcG5FLHd39GVdsrV/It58SHJt7ld57jrParChwHv6nsbcI+S3+YJRzWTQ5Kt2/NGqm5zUxy4uu1sM4jMGIz15IevnRWYOk5WiTLthtntJZhqGBtabeAei5e2PnFxYswF4O9h1+YqxVdJ2qchIG/HAyMLAcv99IYsQBy7sDK8thLjTAYB0b4wG5O6z2/SNmRZ9Vvqqy86fxbjlBdIVYjjHBCbWpiPDtxpAFVqs3W9gW2wu5G+W6VAsV1K1/h65Lfm9a3C926O4B83hAYt15WG3TFGWcVr4cwwkuNUIevH20EdyPJDXtnqClE6k2HXPv0q68CO6FrLitMENoi3WzzZam2VpJOdJW98dHI0Yf7Pg/60jI1NJ1e9X1r55L/Z/kbkGiwrMGyna/sKyXDJXc/9umKFZ+Sjg+2gQNoTL2eJZ0rd0ujzWcL8mmPdhtcbpvE7N645JT8TckP26Q+GImkE0H4AnTLQOdszYHWb6iXpA0dcldTsCmtq3rJbv69j7JN3XgoOfv0isdwc6l0bCcp3ZE3ju6OoMi8oePZGVbov1Y+vuO2oz9MrSxT1T6mE9kpw7V582Ml1LwIdkPjMkFSP/zOlXyqc+X/5LlSP3pTzXFqbiNyyPfkGt9BEP6VkpJPN3czeSZ3GcrDtwZkBxJUVgSx/rtHBkaK3n0zr1f4cmXn8I1AtTvLyhq7NrvyrJ7IMtCBd9u50QuwG4A03777EnXonbWqAxrybAy9QcTOmjvu/3g3bPPISFaSLiuS4OYPVgYatUacjpGLu7kz1yiPzJQNVKk37wwBQSNVnfpydHFlOYnOyrVN3KZ3wJ6DxKm1WkigR0pgRNYOTxuYpOxAtDqxfITqjjm8HilVYFcARYDPtlc+IL7u6b6juzNqvTLzm1FmWke9TJKLQhxdK9sJkmFF24lgkNxxXzDbVvags/yNB8eyTejHVL9+Up/oSZlBRUffOMF0dDDwUqBbqiXF/CnATC2AQ3b3SzzXeABRPvYFETTpyddBqfwPJ5E6L6w8ITGZY8qQrOljJRI58PGoblB9kRBob++dMYz/lx0SoQ5U0wdLNwfTVsJ+eHfj7pG/4/TPCBRtBqiXg5/tfiVA8jfy8JNtcn3Hs1MGzEy64XW9t+FIvPSgnO1jCFPqW56loxsEMCsNdgUQ5nPEMtmsQx7ZK3xjqvfF1gm9SGtOnTzVyQlFwkYqvWn8CIxEeHN3bU77kERj49Y0vU4h/iZQto2731i26IGzN87wer3DSkAUUBtc0uY6t9BeQQY81OUlb0CgAsuHR5bsWXbPfZ6/HNzTume2FI4tRU+ECMZhG1+8phjhq8ArI22oUqV1r+1bsa+v7MDOxgMlb+weeeCBJbedOp6nik/xvFt49uZtW3T1FdsxQLGmLFoaJFZDmgVu30eNWzdtbeuGzwx/ReVYrq7w+XWt/J7hU5O1fQ0CK9Rb8fWLJLjCB2VBV6mSuxLsbntpdyP/wdLdWZ/6aVB6dtZUaDbRogGd0WxLKtN2H0VOE1xwE6ZDz6rZCPL1RQ51+tRos+HZjklN1AsmzNOouU54eMRizAj3Bc93sQa4cvdmrE62bef3KSTTJDGYrRZ6CnUz7zO9fOacVy/74cgJauAVzAk0XaDVNR1spt5ERNDInsOzJMK6bqFsYsM3Z7N6ork5DgutI1kqfYj0a2k2u+/AKyN8Y8vO3W1tF3ej8GfDjD1an0Jn6IL3SgSt8Q2wWC5H9tHTK2rZQaut3dc0Bn48gaRRlfaq+COuce2dyqI7JthmqNpB+LkjAnUFCSyX16whHydIuPfTz0u6mdsTDiKKJMDB0AI7d74621CayiX3i4GjR5+87WjJR9mgayuwzqV9bctLLhaNaNqBB7YNHvdgyEUP9QmpnK1peuhgnLiIHtakuHU3Przz4kgX6oZBLSUp8SC1fPfy5RcLC+9ZdPhF+E2P5LvLHmpbgdZhr7yHhFE4YDo90Akzi3xLuEKvv768D3KJoggQJcm6LxqBn1MffbfgOn74L6YzrvVSXGr6yEjtTL20/GgXBCCYzSIDXQ+UaaiBij74oOpLq6R+fjBHW+h19aoJH1xOcI0XRy0BDQOy8Mr6zCy0PWXYcY5MDZUT9fV/tllaP0MrsG8PP/BGz7fAl6URGaoTpdGmPkL0tZsj77zyygeoDOhjiERqoq4+x/N3m/n24AVOLxr5vpCWT2SzTHoYb9i9r43SBjXOZDzMxWWz1MK7PAcawYKiCfatsE3EFpPiS8Wi7Yi6rw3eSldbG+6xU4jH14B1y6rS3bM0Ltmu9O58byXHN34fPGaW+m8E921e0cdOWm1fFvktWjIJ9pcqBVY2+rhUu/KyoqyeKIOVxznu1d27KVlUCFhrCGYEwbOVfF7y9NNPMxppTRhheSB9XgiMFd3+eWHNjDNXlMO8tvyNo8s93/280bGarKZstq/JRCLHpg/eeP0oZNJMm8c9GCFEdlsD4pm5Hjl0MMaKODqRY1pzvOf1MqSWQD/H45JqI6+RuP/0WDrqX4JBdoqy64UZutQ8Rz3W0NeBFfEgD4wAkFxL8XOcMwqmwwZRBFUjCrrx4gfwm2Fev92Z78HQcD84JmXKGl/5/POPioSM2mRZGooR8Sw2daKUw82+uSatKJ5bO+Sogz5yacnilvdJ0GTA3Zv3ff7qY6+uWBGUTMRkOWq6h5KvP/v9038m1W/IV1MIUslzx5ItgSaTyic01O1H28D2IP7AH3ilLKHxXYSepWDRlsHDs6iNs6JtX3fbylQge4LllLicFPLKeOrgBBaByuVKimetJlvz39wtddSn6bMr9nGIYFqltSZgnMOlMmg2YETBk5S9YTvodyh1YN7X3d+YRaK37x2+o6CoSBMefgUAs49A5r7HVjxWysxyUA2OlbH6xDJiiF7h08KqabGHSs8dgOrvvdcoiIEVy7vDzDsNljz59GMrQJpsZnz9LXCGv3gFsL5xbInnzXtmceT2DBc+UPhAwdmzZ0RqvW4e2M21aDqyG9Ki/pEmorez9SV2BvfDRhbeSKUl+ZcpdGhIZ2QxSzF78YXCU0jURBcTpBGhW6tu63rSNNFOWUp4lB/PIkAFgmGj8UU/Ky/iKA8MUjy2L8cFEaaq7Qp8oLHl4VNHX91ZPHLbmwUzJTGDWUHXncajn3+Ect8geD4LjZiMDMqk0qgkxjwIWVHmkOcf1ONQkh/OhsUkkMjvmEAtnz79+6d/v6IbtjVj8AJ14UrEJfzlq08/nbdixb3uEA6wuokMNdX9pm7od2lfIOPELzliXKKNK17GEn5m6Kr7a8+tlzS9tWAgYgYRFgZRQglgpcHsRy+x1MwvdjeCEa1rvHhd70z1cjU/U+ASrvOgTyOwZXZFRKdCO6wT1emKPCYqmXThZ3Q8JPrn2dkFmgb3HX4Pq7JiZRzkdcQ6IZdu/hRJoKU4cnDEdgtUQHrgaOMXfOMrt/Gt0+f7oftymafw1ZKdI4jfR7JrGO7tLlkB/wInYzPcZHNsORiQxpIRBOLfOz5nPv6NS26+QDFUE2O9zJZkVI/ajpP2b8okUJpkammzUKnsYcUDhl046MkXgfqjp/Dgn8VYTf/A5Y5qq9SEX7fgvGpoQ+iW3GqoIbFW7ZhlEk2Bp53Fj2NR4tkRO8NumXxjX863JM6tT18xQoDslZ2NjY1PP3j/dx849X+W540iPNvgi27c71MPfN6kQ6sG+2BOs8hAp94eVLVgjqbnaA8NArA+EY9TCmK8/tl1Hb64bVo6y8LYjHgLKUkAIqq4QLYTv6b21cee/v2TtetmEOh7Bls/LmmkKg50sT2UQKs1tINyUAePkT884vNBfdWNyO3/g+eM9w7PrTOt0J6VL7ZHsBJtLwWWR/ZtRhB/5EAxcnigvlb+kBdwzgvuv25wts7tIN+UhkRWIoFG9hEEGnoeqX6AuxKoThsxVvQ0RVcxtWEvJefdPfukFWXJezDgfem0qmbRSDBNgCxYa1EKVnb5gUaypztL4Lqv3PndntbOO6dGH2o8h4u+W3L7A0ffgwZuiUhrmOqCKAeZ23uia+cr74HCOfD5G40Xjz7wwPIlNdfMLtF/3SvuLkOiDrrTI3GPp1oOHUxei785ivQpNC4qBMvS49aF2k7hFs9N0y3hYOyJqjirhG7PbSMSCQqjlqFGQ3A30nZ/zAlRWqOQUPUBz2wt/MtZxQNnR+MGlfgHit/Z2uY6G7LLkfeBoiJP75XPd9+28+IDh2eEvkAcIcAD+YMHm9BIGQnfn3FZ8sJN5FSjPIfjkqo/MXtxrHJTTp65/SisQtmKhr4bZhAI1sqCMAFIy5aqzTqPfkbwWMwgJX28OqOGVu44/92j11HCmUy9HFABj5ivI4oy9YoVI01nPC/mSiQ4+5Tn2zNXbW5Bxrj8maCXtQSQ04+8CUjNS/zO7+88wLdebOV75hyhRb6hCZquL0DTUMjzBiOG3orgM3nq1QnCHRo6jVZqmIPVIDXMWm+pLBmBU5NOC1Q3h/ZQeMFAGVzc4OYxtIpqJGtasvz7B4Tlty3Z/mLP8PZp0YfKs4sWVZY8fBTavPG9NWvifYyWpJTE4BiXEh68hRJrH37gwvIbHnjE86cvzDnQ8jBV8qPzNhJR0aKKLo6y4aivPLhNy1iFLtMvt7p1zlws9OW0t0PjgSeeiMfjVNzfOW4sFRpqtNFiTSM5J9aP/xwbqYr+KH/zrOOEe1hONno9xpGtzaeghEprg5dZVwLSrwNBv7Sz5GjRf3/Pd+//i2vumQFvlDromZ2U1OAazmyG/qvltC4K8QTNjCUnxWTSjkblOdsXxGNuD0PfeuqWp/FATukmhGC5uKULohNHiX4CZMwooq629OqrSGKaAUO7bt3uN3tHhMQh0wiFnBDlSqCleCIMBERI5J7xjgciF8qfLofdv/WhaBHRHH0mKnfA9Di2jmcxdX/zgUa+9d7rruscuOaaWyvpmrETPHszM2tRbzaruYlykZCYiqRnPYW+IaSDkP9OnUyTcgeGfz07Ky5T7rxtz6UBTR+JJ3Q+ekjXqZSdxMdKWz6A55HGnSUPHOPfOjy4mNynHdPv9eIiz3cf+O4DDzdqIyWvPrwzOtqsR6gg6PUyCI+Jiuhk2lpCq/obz6/mUTK1Be0y6FBG9VAMF9r8Io0Yb4eW+ciYNIQR6nje6ZbsC+gG0TNdBkJDMcgzkvOudHWEQIfR9xM1l1yLbtnUahNb6CARj7N7diye+XG2UZsJyml1HCqh4MeCLM4cpHxLmWgtkLYa//0DR48W1czacT90BHbYatiwwcebSFvWBUMXTaQFBZtNFNuj96PD+eboXrBOdp6w3UJfhrYbVOSXq1GkPXFxx4nHdd2KQ8NFLOp3bsMK1Mr162bqbefx3HiN57r7XxxZa0bR/SQWuwvrQTKpYzAB8iJDxrFcLfND1KqlMz+ORk8xfwynuqs5ivkaaNyDtQ37ko76tn/4bzsRVb538nLOOL4Rw1otiFwU01WoZS5AeIup1ukx03T6nVDcwICTpMab9XPnCyuLFh33vKW2WVFuUzRaZyQdQmE+dKC10oa5+wBMx/cL0O587978jwPO4+c/83geLmkVlh8tKRlDj0h/rGjEQAKAodehHZ2a1v3/3HOj53nPfJorLjNhf8nOZ2JR/Bdz8D9eisegBLSECYmBsrp2z70vn+NyrShisYEpruF/6ykaitlxpPr2DFZOoCgLHZQ7ac5YU19wTBOTlJvPqoZs8bgySzYI1ad5Ke9Xtznq5EGpC9DQbvaCPNZYDCt24PNCz/2dBTNRFCSKlI4o8CitggNkRrPAGLA9MERBtICMi/gdB2A9awswpISkmxmABtiSGPyUuBYraGW5FhidWNyEUbJ8eLxmB4rWsNWGdes9M7TTndBx5vxbOq0y2kTjZ1IDKk0lEMUzl8MhK2GiQjPk6i5a5ljdwSbOH+M1PQNzqo9KmGlihc3zbijZo7zcOXz23bOnBukOv5lhwrOMKmFb1kfVDDo4W0kCBpkEz2HqTywUN0NQammZOjxTC3dlzuEfe5VVXWw+CjICeSON1Gw9YY28BI7eeqB9Z++ilS8u+stnau5U8g0s/Jnn5//qpz+/57u337On7I03vvvAUJxDyZLeHHPgYZi8g1a2KOJuXqLcdJnom0WelWM0ZqML5WCaEY1jkUNwCeniOMzZIcWt6UniNZ9jAs2BriAdXTAVchiiDZZjii/ipZ4cbYh9ZYNNXc1W3MyAimtBzOfFmZdokafIbdfG2vV5KSfalMczuIIoTqw7QLBM12+5JRE13zo/U/jAQXEIMn5kRLXrLbgFrJYUhdY69KsT1QnB4vTXz4oO1/niT9hem97ckNgsZdnMUOyBKkdsbHo8Fk8i1V8ORogz24rzMWOkcOKgyi8BnR1sFwE8L4q4o34uVbeRGy+1+4PnY/JCC/NVU6ACRo2ib0kUfjzKKFD0LvrSUIiio15wHUmMZeARZUVDwVCoaE+eI6+wCc/Ah3AIeD0N+FuPwBEQVDjTYoCPCjlxnDXTCfkAhKyG+Yyg+Y3SbgTB06Gpbxw1DCikqeOiCbstXaclFy0COfYvOvdcOHny5HPDh5WpOSp/9PzTb37zm57n7/Ec/njRPd/97hI/soV94QS1IKDsPCcso3jcePt/yzlvc82gKWRpiEmOys0N1oaOQ747fhWiKpAI5iz0yahU8exxhYxDkaFT/eUUEro/RLIOl/Deia5MDbQ6H3E9OgjjKDogZ5FSbxs9+Wes4FHfhVd50ivkuoeBWPHSM2Wyqi+oZpHzKWh1YJ4bOZrsh8pwvzljJ13W35FP1t9Eo3HgrviTtEKoWjMzUb9KkxzBoGGq28xTE5Vd9eknoK68rMANgGK9Z/sG6QSFzvdp7jrB5+BY1WxwX4RPJeVJ2e8zRTdeLu/9O/Z6SdbynENeP1iOkHGzm+FVWeMKtLc/H+gA4pDB5ltDmK0TI/0u8mq0TkR3atUaL0Qrv+M5d/3s/qjdnpfOjIdCuQp/lPUiVlpPI4yNllyVtEHYUA/FqW+opMxjkqPyDJ+lusRN6MwaawaqF6kfna+ZBnuh/Xr5y+fQssymi9vTO7nX/c89/3QNBBrtcK5fRGUa52/RbYxy8pkMzIM7QqZfXDPEt34wnp/88vCe587MFNu/x3OWBC6YVjNwk9gqc+Ol36aMroqbQAWXSstRUMtS3nDBZYwZE+p2oRfO9rtFjUJr66RGapV3PCeioNxNG5c2N+tRtWksWBvpyTuFEegHqdnb/upkWXEja41GC04CbXgbdyL5wubEInT35Osay2gwXzgaG/IX5pkEsB3y7FQDt4DjsAEB99bLEQoPB0SNldKrvr7gCezaVkFt2K7M0rxgPRQ0WiK5mAPcMZXTdahU0tFmcpf7InAsBF37ekt66iiSgrxj58H/9F6uQaflRosYP2cUdr74Yq+LMr796+cYUViURzn+2vPiW+icFQadbthM/fBp3EPX+dFowZUvHzzjNggLDfUP5JHnkE1Ly/psCQKRcmCE/CplE17uDMSxJmWp4nnNvVMWFRGDOSbGmBeGoQliAmHCYKQOdSatu556+TYvPQ4MLjzYzkmBwp97/h4C/a/wKxtN+m1kptG0sihsGDFj+JQPfpeRbH05Nw/8Aj3hnvKZt80kDZPV01aGlRFrudJvFOpaSS6Z4SgFIngWVFKO5yDRjU3s7bLLU3S525vXnvL6CASQS44IQC1aG5sIlASlti+VvMa0x3FQRvCnWnHBf7Uz1wbRpkUI2cbITq8OT86K+pMtfCObEhrmYqr5Wh6LSnhjIxqf0DMZMoWi65sQpA7yTtQkyGlZqAcMZrtaoJ89M0+SVZSORCweZX1uykZEq349y+pQwd/CHGPNk6xlGhWQkNKGols/x+DNyzmOO5eSb0wFzMwk8icLCwqgMQBinLcKT2GgxBnaAQMqOi9avA4B3Uhq/EiwuVVFaZE7flmh49eCAY5lzsaGYgPTyspsQxv/LM9AhYKhdehuhLFw1FN1/LQhxBfQpR0MJM/REH7RW7TJkf3AK1HwWbGYjTpNeDwI8ptr6bPHiCajzUQH4faJWujnDHH8/E/glrFh3pWtVNWvCdkmOlPZPqpn5/6OS+a61Z6yqd/4mdmcwmM0Z0VNxHUkRHHwMgzSGkkDHnxUSieQ7gZ5rz3LNLQr0Sh2DIWu1DxVegpsr6vF4Mo8UTglNeL9cNI6kf2sy0aFUJQFsqVb8p15DIOL9QvgULe3v+y57pVGagBlIW8DbmGoH9oEnoqJGiNYSM4IO5rlS2IsiT9aOLVrEhIF6qPolI3EP5AuqWjD+DwsvcUUbXBulkEgQZabeJ/csGG9Z2bHst5E0NLd291taJ61Y309Br4mzQDqGP22aEYd9OFPUn17KU3e/vO5RiOz5Jnjg1tWLm3UqTuWzlqTIS2bIgW3FoCvtONPPFHlFA67LdT6C6dz/iirRx15UP60bNxEIEtCE9vKvjCWTEAoBZ6CM2j7yHH9OCWrJue4YPTbeAMWpDQJLPukg0bXQ8wxgsTM2GSleYKberBPra/f4Jkj0xJTntpPIPDdQirRtnW4Fg6fJBHPYkxXgSskjPglkY4byyYrtJ//4v/wXO7y3SuOHMAxQzMTK0Gqh+JgyCniW69hATzobJiVPb+brS3dlqIsOhE6ka60mDSdhJ/m7CA/gdcTadMMym4CmKdn42WJhkjHLjedrvEMOrowvkD20Gghcdvu4h1bUvh+htMck/gFUdP5Jlbo/O9uXZyPf6b5Qnwnc8uv2/kSQtOUK9WF8ZQGxhRQlxkdOlE0TC4hx+vIK9cxTtXckoc7TgmsXb/IY2w1m+bd4bPMjIkxSy0tKTACWTJKkZRAmTnM18uzWz+Aokcnn3ju1XZ/5JPq0aWUWpJDyfv9PqMFRdzgcTgnnUVaDobX75pjeH15wS5PGuGrOHp0ZMQkhTTQy4Ubuc3DENi/GCDkTHQ+z3rOC6FQfpRYSClAy9HWOurqWEFsLE7p4ULP6kmZlAP03CBRQt7XJpmvECZYoPUgKSE+jmRwz7p1GCGDlm8gAfEzBhBR7FtX5XQTaueQ/yKt375OmV2i967+JGG2r0rRGXMdIJEnKBbcmupkvTQLULPOTLjBxZuFKR1ZJh2XQX4EoWKkOaCxPTRaaXM8kjzADywi/FzYb7PhNns8szQOhSJPNoPXkla0QD5YxxIkxwl6chNG4VCWo3oLyItjXlsQLku05hiXNfythnEZEUIjHHyisHd8uBGmocTQYTgdpSANZkU5um02ZZuWTEccv/F8GTtocPv5OyjGuGj4ukscBatl1aYecLEK4GfSGMS8caasZqjtNAQ6HJ5GBZBAp09XobkeXsTXsW4HS5dLiCjVwyi3UcwXRW0g3uoEK6jy2lFf/bq8VAA4O4iVPf5igpBxkm5DhwzGitIkc+RrwkdGBz3rM1XKE8/PBznel32JIh3Nn9JcCmV2IBPMk/e/4AZzC8Tcd2IOnRfM3Wt53MJryI9HEXsQLJmqJ5Ma8vTLRCv8b16uqZn0zS/RrUhsjdZ7J7QrSXipJQ0wLewq79uwbkcHUquIudVa4hiTzNrRG5QqgMw/mOdglw4l7ZPmGEOj3NnZq9z/SiPrEUtCzdcBiqFeZXdvTY5dHyBESkd19MHWH+2d1DNrUodUrXHF6CjesDm8Bhq6dDSGdgGsit1zWz8SIgiNCx/3embuqFGpDGJZS9Ns0iKGXVIimooZ5t+C/fFns9+DONecP0d9ywXXiyB8N77WTz0k5I5k7qJo4J7BN18AD77NSiBNjfMbjjsS1m+XoZ/GHk++zNEt+kGau8czIPjCovufI2dLQnqvQZ5EjFl+nehEnfL2DJq6wxujYX3V4NTeVMr2Br+XEAce1S0g2SBjMjuEgFxJy349GUWriBPuPFo0IvKivuiRPNHPDh838cokqdMjthq+M7IEMIEaKRg+xLQgHqZUn298+WRus/zNm3vPGnrU0UCz0gDsUVP/O13Tjb+dGCQVxv3FOHSR3e4pyD8dmWQNk9mzbsqdNHbuXxduYztcc2XU5hmOFTcQGO7MKTRCX+gtItKicnFgVTiEq+szom7TtMQoBttgeA+NFQZtq+uqlMY7JpxM82emOddgJajwvYuK71/G2dRbgirYNQSauvzjtevI0tkPP70Z7xX7M8wSnpFLfqH9TFD1o6YdGjph1dZaMVVqWvYCulce27jRe3k/bntoRiVdWTnsOBGd2rFilJoPM5H13WjdzqGXEvovIT0X3/xd1jeWGiu4vS45Z7xOvny43V02YVyT0Ve2lt/keaFHR+Rb91lGWkK7cPWQyhVzul8tnJ5uV+M5WYVhMyDlO90trBRtNNFhvcmIirbRQwv8CgVG2H4DutK388frqKP7ZG6SeiYJ1WzYDA/1izwcJpno539IRuyTe10MJ1mXTwbO6DbexDR/jvKG9QnnFJkuPpr0Gkdrc8ymgDyOYkStxaEGh/zojJwvB75gcvt9NAhCBx7YdEwHpBmcJDjpqG2IhUseqmTdRs8juWsZU6qcN0rKbGAGt+f95bqUtaJqLaXbwSEQzp3aMqFKzyX0+YEepoSgLwcmII6oT2cKmhxuIU6JdxnWgUOXw1Q3gJGpOn+A2i3QkulWMO1k4kF533wIaSDJs7rjR80AMAs1Bs/4Rx889cebChi5TpiDjyNsYg/ZrbtmiRUvgjRHm2mYWtivR2OjpfC6CHBc2Jjr1Mtk4FyvZ+YAy5fwEgw2PJzmAJraAS7DJbvAfWBY5p5Kak1MzR56OpfxYm5iV+hs7na/w5DMXM/2ceQhnGvHvx07EzKRyAEfAytD83tUtehAmcFZS5TpgKPTCcXYBCYWs0G2E1/ULDel6HQwrlaPUVcOFEoyNUnkKXZFa0YzdgQvnyuYLNH1unCETRRDSbPaUG+Bq9PssCxj0rhslu1G7iiVRifZQAn3gc2p+WQ0JuiyY0DvayMRIIk4mmH7aIa9TAMwD/kM4QBj3sCmdMwFOXovuRMSkzgNYZqKhFywYg1ddzCyzMl9zQBfMMzISiH0BFnWGZsJbtGXd/ngFJgq9UEyN4lxs+fmwrfeAklSkDvf5b2eVteeYl3LL/eC2tAgk4oAhAYeNYQMGshYLdQwm7QxBQzY/jdS6NCRpWgo7phGrbx5PgK9XTnealga1gjkBlQXt4nXrbDuycUrSaBFewgEUTy0H4Z1pqHmbw58BsnDFGAseTjZhjp6+buV0IEFwN9Cq9trl46j1jlTusupVoSWkDEWltkRDSe4DwKgpXl9n00jpYU9nb2dndvY9vTwOebOHh+6/GNlYH+O6BvYcwaCcmYPhaSPFRpmHF1BYiHINO5KBUeHMsUB1FQMK1Pt81OIDhKVQRbATQa5teD9aDYisAavnODEBRq1w7N+7JBOZAjZNBLLHHfZJoQgEJ+WbcFgc6EwFMfnsxJQy4aPwuZ4iLsOHEjKNCmRWCl+HCx5M1Mkmsas8jl5Zl2TEcpBTWFIZyFzw0eUFBSIo42AGIc0IDQ+3SRPFOhlA4Db6LWHYfNY4TCbZK4mi4U0ziZY98HDh3fBEL68zdO5ZwDf2H4CJxjr8cIMILFGE5HJEUVAD12lqY8zDj5i8QgOhuwLW3KpCdtoNAD+gaN20eVXpmvgb5BVALGisSwZyTJY93ctIbElwmge7cBL7ghFJGqDyTF9KEufY1CY59Yde5VhWD2/LwEOIAN/1wHDinNinLzQfowWo5MWMj4ExWWHhJ4ZMUfvSbEOfa4lt36qrZgsVbvnj5Wem70rOyvvbafGplghDArUOvPn+NMwA4RRJJ/7Qj7Zl9mtW6gtqmOTKOhfV7oNec972kVXngXjZO79dvyzczmx4GHYzt/rxqJPxUPOEDYa7feTjJDEacNE+7a4P5nShqc0d8Ak5I2YQ8CWlV+7zZ0DgFgYgziCntYTki3Y+wU2o4OPUOPg3cU867eZk0dv+6TxEWysPKWBQN9E4YAZIZ1mV7Hx85j0TiobDV5BteckOhTf6EhTUsrq481qTqDf+Ei3BZLDhA4IL8biyIAwMdbJFw7T5DvKmDNgvNcrM9F2yvmihAVGRYXuYiNZmIqW1aLil9KIFvsjQJ25ecakpvE+CKzhZ5GfqXplGe/4h0b9o2+jne8X7IzzBFUYgKoOtV/2wvDX1FCavwzGQTlb2NAQpajYWhyPbyBJi4wrtp5MGB7Mnywri2ao/xqsSTpuNiU+M7tmnx/9I7gud7ajSb4VJnc5rN71wYEiyx0CgTx676VtL3t6yF7EmqPwiWyude/q/GFUTw+O+Kg/VzouW8VlZl2dSNWsw5dygwyEMzmQi9EUeTzDAbQqBTCUcQ/acXZhvR0oHp4iG7RUQs+9lUzwxMsTQk/mTIaySHA1NJr/PsRg+suIp8c2IncaGcIx4rRN0F0YaMyEGj04DcxFnsRw/c7zXChEWW3u9IOeGgqoFVpeQTdSOrk94SaceMuh5eHU7n2gXlOsSwxjt8i/8RqdEwN8Xha3tEnKZPTV4qhzJb7SYtsFDUTcWyrpzllhj97cHJpsUuETSvWq+65oOArGTk0jCcxK6giGRa04fCbYZnKgMRMZ4AbpFFb9TDw0QG+UTXpGwQtAdKjaAfyhR0mMNfs5DSUrxEE6RUvIhP6mEr6hlwZzUuOVO/KnLrwmwpbjVGCsNX+ARrVSc6mcB8gZ/Yh74Va9OLZreSJqxCsp0mR68BA2SyIUdCmRhtuEejAkpmQQdGK0qhzOYHQvGHZkvCRUs9nnk+vrZw0Ylis3v4ueG2D86JzS1NRocifnN6ESHfJVbO6Yp9I17vFmiq5w/CJlhtrUc1BEaRaLCxMAKjPD0AHOhTc9/9JT8zKbAycebs1BRe3ePBr+DHIYDaKK2fF0+63BbdnE+lTzyOETkPO9hYnva64+Y7jy3LhAv8i5K4l1W4YDRj5JUT9EimePhbIuYyPiTxmUL/lJQTILPSXbDuiov4re0h1+u7aScnCimMwb1RC0wDDlpc14qCYO4yeoDmJz5AtEE1p41z1lHruBQSu/udymUXQTqeJwrUqtMJonhqXRNLL9uQwzQocSrKMWjbBJ0bND8K1mY+qUp70bSKCpZXdSenYxQoTgMMOqbflNE3lgtpHRLIINVJdq81paJ8Zg1wyQ43w6TLloPvRuBgcZM0wjwZKt8HkowhY2fVh0CvEAcB9W3nsOuUUcW4878sLEY2DjVZltusovZaODNOrDakbdfQ7FTno89w4IrZ0ozLBJoAcmucwQmViU8dCJBPGpgE+JkB5C6SRAORYoDPvcgq+iURL4I3II79wxK+B4Rmml+elAl+MSJOs7i02kj4MCppFqK68b7GHbxaNeggl03oTLRZ7XkHQlxt1cNPoZCh8vBTHkW4e3kcAjW3HYw48TnNNncHrW6sB1IaRdOYkEpI7ugcJ1CaSY7Q4jwZwELuZFOtKWHqYPQw4z6JfGV+jWnEAjPwBm81bgt6I4fQGGQJLGh1ZmyNHSWzg1CWWkIXh08+ScoHZjI8VOXA090N5Jj73EBHttROh0yWNLcZc+9Ag3a1mYeV9LnWEOCbkJUCx8vPFcLmRI41B4NgFQjGMgO0L6GAyF3p/QpuBa06qR9sk6ChoM4A4k69Ozg2hsjoXMhikoGgItsImEYGs9njulrjh0LLmDyLzkyFCLPp8OMaUmXknBxLlRJlvAgivJAYVEhYK5RJqUFaO4t0E8B/2gEhE9wTh26yEi4dvtUCtTYlSDlrfnYmWrQVlDrKBQtppw7FlbRVRMhh0CHjjfoZPn3xwYpGJQ6Hrc59IVDO0KNDLYmUxgnLffD6ddlaJ2FJNrRISzQEFbbGJ8kqsbRUNoz5yRwkplgA2bUmXXwuPBovYYhglQpUCdrnr3ryxh85D4/XGWzSDwg0r+QV9Qfg7ag4OQIosuhUHN8qwPLzyo53rdJ1mEJfeGWCrK4clLrjxURCPiKcMBqSCGF1l2PhXEUrOJsJyeRucSJKzhZk5FqHWVaBvkHvez7M4rTFCvK9ACvDqOTTspJInnaK2jUQgP+h3JlhFynRctSY1JxZPHd0zkoi95EWLOaejLaHhZI/REGfqwZFWzzSePqrJ79pHaxolYe5MJNDWopcwKbhx0YMfirIk0VHQzG/TsQJgQKAxgm5JQGKjCQc6dhb4fmqhmCXraMeTS6bY8ubOmsk4l5zcGW2NL63/QkDi6O+r3Sf7mDLynaNJA8gvuhTA8nXuHbwEbrcyUnIQE2zWoMvdT3xyZYKuupzGBwNIhyhRlxtBEyJZv8NdI9b3E9XMujoJHl0egK8vr4K+ZruCwn/xs4pRWZ7wdjo4zTTb32r1wwwiAED/08RWB7mhmxGDclWgecVcfkhFRbZWgrKAk8BlSUTNpnWKQesj0dbBUDmWOpobL6jDDyyQ+8sol+6hEHk+ki/v57+9MptNc1HATOigknCfJZQn5Oo7Pz8I6wC6UlBHWmWJlTauEPQxj9ELibCbQ3G2TF6jG84lKxcxhShLWKUWXSCidJh3gzj4ziui+D7mWXuS4ILsrhNNuxCg/WNR6LndC8LoGwPsEmu17bzt2Ct/JK2C4sw8pmzwaeGG2O+I0WtRyB0f5USFhOBPnq9zLe/vdRv1glRVXDsDDowWe17tPjZioAsRhrR1vwlSLyCjnjadY22raeQeOM2esvJyCQXvhzr9BvQ3emihfY2ugC6bV0eMsj8xBHgbycnzEAnB6M4Ta4NR1k1H0ep/Nas5oNq9Unz16FKQT0ui3Em0joXNtxmQpRKRuGfyfNo12QqMZzyl4S4eAo6PgoySoEKTA21Q2bNgOG2YMF9evniLtg/IrL9PQ5L3kGzy/TEQlh091WRvm8ejolY6vRuawc5k7NUR3xLBN9P6VfWfTCdkXxJ6I2ciUQVEPDjzIZzMRBnsMvwX/c1E/fB2/mTQS6fp55EMr334rSiNkNR7nwtYTOTVNUxZQf5dEEEsQi0nYVZ4luWNT7siTVfa+5NOtbzp60gBNYkZlUtSSP5dHxYbs3vyn8NF+d5xoO4NF2VdOQ9Enob4AdWXJ71ANMjgcJM0k2UQS6DWMisGAZYyqwTxyp7qfbFXMYPPax5daOcwJOczxBAW33AALb7NmQk5jJIKpAnyUtKMbFEGCPQLrJyf6BJ0QaJq5h3PLX2ZeFyFVwjZibUJKwDQdR7ZyfcUkFXmuOrl5FJHyUoigP8ZyE8erv+p1NwZIQQWdxBrhLzhPAT4AqtUiLhv+Thw6EQJOowI5p5lQuDC5fKUG2fzIvxZQBA+JTuojlA0E8GVpAboTjLTOknhAjqctVi8wrQXTBNpO2RYFXobC8cM4gEK0OJMy26B6DJQpsLGJcMjeOubZsorTXXnGaqTyaehBPWZoSVPMpOkFUEefRl62CVUYpWfiJ4Rt+2NGjqexJwj0enk8FhnXo3Eq5GCmPbk1oIK3QboVTRnT0RATNHTC8s1F1zHWVXkNfgq+t+a1bApVJIHrkgnJYZZD0DF0HsSC7vNh5qrN5FkQptd4AGbCd0NVtQFtg7MRZxYobApc2oHvYUGkATmo598wnUfbnTJbObVi5QIOI+LCDuxoGmcJdWZxlgybpNxRB0W8FmvPDO6FnQmbbkQc5XjriB3/sDIn0NCUl1Ma9+NgRqGPAhBoqP0IAWIzyejfDObQWf7jE9qF9mgYvyHmMMebnsoC+qe1RmwjqFWyTihbaNFR1GNREKEvFB3yJ5qwg0N6igC01xvrZ+Ut745raJtX2WjeXG4gHi4D5wvjYzDRB/1gKC+E8DOFDWmYAkffBQW500B0vUkrj4jPeAUNWHCu2Ub3CC5A4IG6s9gwacjloZSlxMyQA8fjeJT0IOZCr92aAYkUNVAlD4cQ3gV0G1JaTYvoxZAR6mdbzljoPdp0gT6fId2TIWbSAMmL0WsiM6gIx4OJYaNTHSO3DaGQG/kW7MHL91G21+s5iRZAZdMSpXHLMA2hIXjoS+twqXSUb6Oyz/Kl55cP/UIRvEuLE2Is21Y3GbBEYbuRBgIelTIIkeH8wK7G6e2oF3aNkq/axCfDVMDXsPDkog57RnlCOspzjGYLy69RSdS2S+OvRgI9fTzFMPLFQbkiYQdV+UksLTwejLXkaJIfFL7FprIL46FtlnKNEMdlTfpjDBvjxwnhEEskxTfaT3FnJBtAinTM4wtsRS4qoUcoAMNBhP39iQd0gE3wJrpCGMfQX4r9VQZqMlAARQ2qyyIBypgRIqYeUv2jJl/MwfOLsqQOzq5gFJT35OWhrwmaesVfTqaiaQY4pjQDNJnJ+A5RtgoZbB8x/bReBJKQeTbdK3R7N4Q473jMVdgPaoTuBC1tHULXGgqqcATUompanskppFQ6GCIH/hf0WCCQtiIBS3d76eAdktQBFc9kU/roEIpkSKBpLQoGprEcUGPNqp94CFRdRekb03wv+Dug8GTLnQVrWl7dmBC2xzc5PykGyrubacdz/8434zTgxGOuQhcgETU2Q/LNEKVIyx3zKcEC19UDRkG13Z4PQCwO8Z00CzSDCAdKuagYtTkW08nXpTX9WMmTGbsLOlpWE+EoYD2dOpNURpLVq1H+L+1oz54iNwculEuzyFPWs+UT5wJgQCDDrTXDCUSRBFZpxVrnWDTfkjrujocwxvHMFUyvtHvHVTTHUqEIYu+nRl6i7U8GMHqTKwsEonwmHQFao6Ch+p3CgolTCShCC1kh7xxnY9Vr7c95nQrHa8T6DZY/Emhra9Mxc8HyGZh5hXZHvuROQTUwfAEGDLl4ITeVxJtblGfrO9ZBVl0Y7WppipVTL0Bu69YAH0H00Cdn7AwTdYqwGVRCyU/T0IqUyZUt5NQBKxLGgFXciAvwLYBqaL4E/WyNgoBLyBtmS/CHYN5F4+rSEGiCRNCoZhqRPsbCSKqJVBFiH+Cn2DmKA0mSNS/k6/9nHUJiFBiTeBT6iyKPMnV1gqtisOkdoj7aHG++ItAI+V64Mhub5gbpV2rccuU4SVs2A+ycovTbCnAmpUYTcTNzn8YpvJ3nrINsEIvtBeUQMh5XADZCklGyTkRiEnR0LiqHvWpX8mc4vU9cpkGplvj2RI3TC6Dwm1AayzejJG8udLCf/QPuNH1UAVMBpzCdKhBgJtnXbEV9KhAI92FAR58rmgzqdlm+cuS11n955SEqhctpXZezH9je8zp1CKFmuIGAgyFCW9FkHn2vbjleqUzsT+7h3cH05C5QZWcIE1ehmjGnEt0aafeZPMPMw+No1h2E6FRjaSOmfaOyFEcg5CpQfPzKG5XXZ/ZT8Mzg3DvDsMskhdgw/AhgRi6bvUjr643jQNjNeKl0x7R8jnDuQIwX5GAh7Dh7KTwO2sSnIVcsDGUlpsvzlFwONPwtvGVN+Juk4PEu6DaDoKxEWS5wymyQScDrObBBChoRkfMzpLV97wTUJ+cDBRhNI2ITaUYbyYDptOm50eW21WwxhD6uoO3OKSn+cN/E8fIjmmIsxIEy+ACbFY8Dh9O91fTBtatfPy/9zKDnM52db2WQ2RZHGwPKwqJKE4fCo6NpiDOT6JB9WcUcVvK2OusFEATdAj6gy9eELmWwgTrdRKbh7kwBUR1O6Any5mhGmuA9nLfwstKzKkDDfgOB9xNo7C034dgnA1wjzdx0E7YmCqyLzieUTtGE0EkSzYR6P7w5PcDGcwW4ODsx0L+9xz1TO49Sj27aCBJMolLsEJ4Xu6oJEQhyIODOCsfndSkMzxW+VXg0QW2eEDIkb9frAkXvFdWKwliNsDeyQKhxTjyeqG+w6D6YzcN9yK21zVxaIGcA1UGZgOPhE1MkUlGeqbeuiLJ7SPH1UDQBdvzxTAF0GEpHEwkUv6yfNZcj59BZ0W/qH9KIS2wZ+jRmTBM56Kgej1OYx6Cz6TqEaL0aGp6xwHlLEbpO8o2BZkRC1TSZC2A6M24m3U034lyz1QwH3euWWekrryjoXE60YOeUCCk9TcQK6fEk61kVcOEjXIKEnp4rC3pShzFFWbRlj4UMl/AoChcy1B0PMByZyGzY0YRFRBD3wqS5QRNdDROgwG8ESBi3qr6IRcEjIvFJoAknUNMW5IrrpoAaOIjMDCkhi1oDgQ/x31oiHc5yWwPMqgb4KaLM/gRJOTbpXbYJXp7nJ2VFs6CQjY3SmIYGO8AxGUCWjDLtXVgmJ0sMDxk5oM6CSZBAEmhAlg/p/YBcEJYAwrcYSznkwj8325Kj5k8TwAL2jALbmUxGR+kWdmaxInHsWOAHToYZH+drCX9TFUWS903PIX1WMvdPlGiRI3lGZlSAGvsAc/KURONDjcB6zzwS/Fd7jm0pfIv/EGdK+5BOKL9Jx4wTiJMZRyQLutVm2hl5h0Lo4xnlGd9oyyBxzIGAbm8NsOEGa09CoOOiq8UgMXG3upeQkp08Nq12oZnSt9hsXnLU8QBgbONYYneFyIQAfPApe/4SnWvQsWUAxJgvTQ53JBPg05DnZhpGPEkt2EbvzHctRBa+xZXRNn3IkQgg+ONHgDlXN51LWAG+diDhRuEMq/RaIMI0qKt5B1sDH374IdQQC5wKU+V57bYpo1Xac1FrYaI8o2wZayzQGpXxekxjG8DfSFlWU94GMQFXoEWbAUgSZ0OAAqSzgHeCfaePAozHsT7AMaIlh9Pob8ghwSiX6ieCwZtI3jxSn8bcTTjtKhWSUdpvQzqQ2y4UEmfMkIv33Qtfwev1zyh56m2ZROdeSbSZPENDl9EJI+SgQzWvX5+/2LYg39gOSrynR3DFBvFqVLEvJ2HkmElhIRVotNDJuSRpLUFETJcMsGvgPHIPcdIuFxV59Zw8c9M6GeCg1iMUaLM0TPAjcSbPSMDTIroOBQI3ni28xhePNcxfoOkLb0JDAz7wIewPzvyH4GujAmait3HMGFx+tFD+sv9cfe/hbf/mbZ3eicAZOF+QHQIrGshlOrgVXqCbSAMen0Ggz7DZnR+yaEn5C57KtdDWwCBlAhrLjEu018UeIjI8J+v5RxYPGGzCPYnlZV1mY4WBN8tsGqYXL3qNPV1g4M690745PzCcE2jRa3vdS+Bc3IxNizB1yPP4YwLuEMKpXEYmvAj9muT376csdnxf++Tk4Sho+7QJfX/WdTTUr6nv2IHAHz8u0CldzqBH7mWRNpHEkPJtyFdBvg5z77lxX0anN0IDUh2HrYxghxZoQS8Et12cZx4CDYl+BtPa6RkiRfgZPoKGc7d0N4TRIdzFRjIikIXQ9ezSg7mybPQM3872qSzQucxmEi1eKfxk7jmn9+SZG40xYUnBBqGPklZ2gWFpltkxYyQOE2eMtfVteH4BGhr0nTIISYZZXRXAC34I8mCLQC4QSQQTalZ59JzyyKyzet5ccopUBm1+oKx4yfc+SbFpba5TnvNljGZdE0KFMxRiHeOYQPOXt6CAJx1EGpK9rHvp5B1jzTunFL/cq9zbyvQLpGt/DpmhhAi2HrDOxb8Xyj2X3OnoA9M7aQxs6wUddtkxZJwVvlmRTuvKtZHzDV1G+rUJDpjJwjMiG5GMkGgdb4ZYpE1/dzIDtKPBl9FYFwOPMp7igVckxY/sODmD2AFL1qOwt4Cud1DQ+ajRP6eW+5iMunw5Xigef1BH5LuLARfe5SuWSutqlBkaT+b/2x4m0PRapIaQSl98AHnNJuWlURE4kp3sd+chPT0kyYFt7BfAscFO1LSbtjjZunPJnjw6DM+7Af3bkW1HBiyTQYc8VW6QdGgPciIDbtojPBRp3UIgB+ugT153gN/WSlY1EOhB9htUNNOKrjfGGc8tmvWeVBp5FngDWx4gLwUV4yzJQRiXaPaKcQMNc+1tT9XkLXppN0iguZ5JGIT0ItfKsfNrG2inpMd1iLPG7ZlGjirljHpzxdmV5/iDLty0SaBb/xl4jTPsVAR68xQQnyeihD7pSjQ82SLmCcJHiRQVUStKbStpeCoT8pNG1qh9hEYV/C2OOiTsh0HwbpvWj7BeltezbpekQesBfwATMo1sBBGICfKESEXTgUVYKv+oFTLPKubC9bUxRYYkaQyKtZiGTqOfAeYIFC+fqZ/YTH05zheT7YlEPgy4+eYa6lTo+Js2M81e48Jrc4sOEuYDhMl6kD/NVA//J68lcZMHuQkizXEnl+XVYTQMqcGnp6z6DQ31uBo60NChodl1CH0oi0BKD7YkZdbvVRYg0Xci6462jV+ldPLk2HGBQeWZ9pWc3Wazkl2UaYjte/fOcZu/vjFS9iGGVgeYlr7uJqV9Ighnc7IRoUfK42B+wEEZXuyQT8yX7mEAlrt07BKnX744lFNoxnPTOgCWK4Mu35tznBnWhDhji0jBll1S7qlRFjGJxpnN0wdsgJr8ieNKms8RG+RN5n6HEASiKwjTIhEQ/oyewDBZCljCNVdVmjKhn8uDVydmitVnCLhkJK6RfvWhe3kaoX5qCImIdqL+2Rnbc9R0gAP9JlWoIC+4YQMFj+GIlSGqhqbQqVRjc8PCBBppKjCIAX5gYLi396TGEmbht5wtYsbw5IVT2+Zq4ObJFaTQcrZSTxk6owEUYexhZtEep3A4bnjGWzElrRJeGof/1C2Y7RBq5detQ807WQt5/YK8wsMCcw0GlO1KOxNoARZZ2X58+LqPr7uU4qI2P3B4NryRw9GHyxjcbCXQQWL5woDoquaciMCAowefMYM8uwLNTVLQWPZWtiKokT22ZyXrd8d9PAxg19nKieV5yslQYyy6sA3JiyZJc8zUL2w5pZM8DqCZ3T0KUSnML9yeZxLFZYmm4SoMFlLwQsvJc6CFRTPKbGTxRfFtEui/CNVGjX54f0KjpmmdM7T2npA2yXrU+zTiWdP1f76uwQd7G89kzITcsX32yW6SvEGB87d+b4724olyaaDkmzpdWrxADc1EMRBgvto1F4g8rnP7GBwr6GXjNeYnQu4OnSnwKD0EzVhF7bE7TupMl9DZuDBYMPs0pL0baP6g4vIT1C3YIoY9kCYpbzC9BmqWpIUI9AvKMCPZB9AueZfSQ74PyiJ3eFhfaM8xIWbzPcqM/uDEBq2MbineFmBk8v3UCIr5ZUnqB2i7uN++UDDTYSWBJq01+fUL2HHlXSO5raCgN/fPf9o5rOQpWUCTbr6VqrGIJ4OaiOtFZ+9VFOYBQaCfoaRZkmjI7c15OoH1oOkZJVQhy0eM5pINtK3oVOpK9laUpwHg4begNuHi+qNDxNrQPHQRnA7ecWDGoWyX23WQIFsbOnzEt6RQMoURlOQwMq07WxdS+tf1V5gpFmsDqk/XIxoL1CMrCxXoG9nJHih4+RrUlVDuZ91hz+XBTjWVv56n/LSzDTqPTh3tJDuam15zbHD4LK5TbL/K56IlJqwScTo6kYAMOTdQSnSL2rAgBX2cJ/andbvC5tqzTjd8JwtyX7Nrx3MhYe1x5QeeebR4PswEepiykJhAX+P5hz1EQ1/BCvaF47O93SqyNFNVHJNoftWfXm7H+7tZ+/J2ClDxL9685+OTJ4uKLpw9dfhPUWe2SxkgGzTARLhGeZNIJl77izwUV6uts7xU3ogRvkAYLlVXF3LdCA0pm1tJoANJVH68baEqb8ii9BzqV8Ujz9i2+YK5OKX1EkJF1BG6vgvaXqu7pUO5sptzjA5yYfiuHJnB4jbQiQim4hlSvvULFOhywF9crSxT7TyHYG5rroK+xrOQi6loDeU913iGKWxQN3D9pNbJvyufmzdWpsYQAxwlWy/GcqHXoVq/YwEQGgiacmJb78wdkDtRKQU34TA78MqL5/YM5msPnffEF5NAF1DPWyCHPffRi7y454zGubrZ+OTUvbM0miENTzzvm1O3YxlLWWCWsebXV9rylP9mhoF1K8VepsD+2b3MxrCTqRQQI9DqooxHFrcyXuIOZercl99hqKRNiraRahORDkVzR3nMEeBo/iaNjN1KIVnEClWqF0ALYkK+6Nni1SnPKKkVzB3Jqie1ik78DVERy5zS66+5bG7nXOZJ27pLWS+DaUULJ3JOOWnBGhoGCQKNouVr4I3cDCsz6LmK6xqcCyCfVZU5bV2GaeysCQQbR1FZvuAbkues8+QMqg3lICwxsX7HghT0Il6zuZZV43kNyipq0Y3yL3pChWRi9TzvVH6GFL3nmoduvA7BFZ4KrYhYOzw4fOrUqeOHK1mj0ll6gbUb4sRakcv14F5yCwbm+RDPKNtvHlQqb63ZvkNZvL3mcosopBLYaF1QztoInyNuovG6fP2hK3sQxh5pLNJZgwFUDKI2CZ+FKFO1boBG3sMvdAvtUaqY8CUcPy8i1x4jqNb2zs36r/chuKy1qOsg0HivrUtdf2chTvyEPDwaQSHKTl0LP3M+2iwC/bMBaBBUotGq9Lb3eq7uqtQoVI0NuhFFHKQMG2/0fIWL0rHQgRjLLWDKs2cxBYz+uJDP348phwJS2t1Q8N7tNLwnlWrNVSetrpyvOHsGwWLw/IsQTZZW0fqXlOgx4eO/q5xNBf3Gc84g/qhnatr2OYOxkfM96uWLJyVp5OzOcfB8tsg/o/yG2pyIGsWfivMTkZ2tOw84sWoquNkE9GxjNA8dNORCU+ELTw5CIO5npRpuESVK9PBbv3VhPpu1nrCz1pLYgI4bNEWrWN3gUa5y43ELpLNycQllFQ0vKAsWaBhFpALxYu9Xkb9yKsKnV6nExg9SxVRq6XWea76KQC+ub+PFEGW1JqS9ngWe9muU617Comi5gu5nlC8JcXyRKr5RmQLa5xz7cz8rML2V2j9BNBsP5M5pjWt85rSnX6Lcgf8idd3UHRBZuX9x5ULWeNoitROW51CxpTxS4+nkyCmcQaARcSgWjJiBJgUpfCQUc6i1jGG0cEOUCOImXRNL51bToSImit4Ib/udPfParPXBlzjqxivJSFIFTrQWxkhN7ntnbYUxDaHTR8e62ajimd2eXoOycpn8lVdepX72LGN+NDboZYx3pKNffP9XEWg6qWPF1LQaiuTQOmWBxgsCvZXXjRaeUQAepZMjhfjF1qU3KgvFUveXIfmdIMMx9PHRUksXeebvXdyIStu7kFz0RfEUgS7o+Q490NalnV9hka5R7jhAFY2cdgnzvR96P06BsOG/yNN3n8K5IGeo6hfw2RAMzMGi3BkxsHTkLrwVReUY64dSJZDRshWDrg4DUutb5iOXJNDFKLTTUioK+PFLuv7Zq5RnBjmKqdLIy/lmy3+fDde/8BxRNI1fRQAxRxqFvlDL8ObPn2S6+kZPueerCbRVjEADGWx13YKXR1lUh8Iu7B5VbzyjrLUxbUHk1xYvWrBAP/AB5wS01srKMwQ9XlqQQHswDkikN5h8un/j6Qk5BGZT130Vu3iN546lKdT6oIPAx4pyyiS2Gd2BZ5rWvI0ne0fLgIJjhjfqWop/eF3ntvLOnp6eVa34i9ZVhUUX3rfSe55DEeVbuvPJsXltIk2w6hIroKKR4o2K0hbf1QIOxnIcKt76d1TSrEuzjsWd7Wol9+v+Wfocz404DKZxinvJJ6SER/4rQRg3dQVliTz6aPPywgV68fa1mNwIgSYJXr23xbDr4Nnf+DOlZqFv9v++5I1B+dz6WsjBkb20rWBBn0erdyTGTOG9nvqrM2IqiRYGrV9piaChi1tFg8T0HARaRCudVM+O7TNOnNu2FjJMy4CpfW46QfHSV648WcHhSpeWp16bw4WdC9wsOribTHMTT4TUI8pVC7Syt17V61BhtGlmimMOgaYGQBDoRVe/tOhjxYR4bQG59WyxVu3yfFWJXt8hm4ifmr6GHQtenxrlzp5WdGtq37uLNPSyc2LL2p7DyuKrOKs3C1SCcXM7mTHt+ALtTju1EGqdCiz+6hw1cQH3cc1XWqIdO/7ixoGTRWdaB4bRP3jPnp72w8qsXFDnqpa6lpaWOt0V6LXFS4unPJnC3m/81N+0AHuqUgsndDxOICHjzqtW0CxbbYOURk/fZKJeuTrI8Vee8ta61s6vtLaVF0SqmKDfPtQD1dPu+coXBcQxEau+YV3N1awPYPeimhw1sF3Zteim7Ur+TP45rt9dc7YImrm89wyKozo9BQv8+L3bXts27Wwrg60IYa39yot032LFs/2hF6APF1MAieITc3yit7O9d9mqVSTVazuVgmUFUxOKc79W7ipf2GLv6KiXpfoN6zdsWLfX8xXk2c18apBo42cD4v8foYiHEPly3gMAAAAASUVORK5CYII=", + 2: "data:image/png;base64,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", + 3: "data:image/png;base64,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", + 4: "data:image/png;base64,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", + 5: "data:image/png;base64,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", + 6: "data:image/png;base64,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", + 7: "data:image/png;base64,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", + 8: "data:image/png;base64,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", + 9: "data:image/png;base64,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", + 11: "data:image/png;base64,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", + 12: "data:image/png;base64,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", + 13: "data:image/png;base64,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", + heads: "data:image/png;base64,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" + }; + const MAID_AVATARS = maidAvatars((name) => SHEET[name]); + /** The view's casts: the maids alone, so their skin is on and the Cast switch is hidden. */ + const CASTS = [{ + id: "maids", + label: "Sharky maids", + avatars: MAID_AVATARS + }]; + //#endregion + //#region src/client/replay.ts + /** + * A project's view model from its LayerFS state (no session): the Host's + * labelled mirror, with Files read on demand and each node's author. + */ + function projectModel(state, files, onchange) { + const engine = new ReplayEngine({ + project: state.s.project?.name ?? "project", + files + }); + seedEngine(engine, state); + engine.onchange = onchange; + return derive(attribute(storyView(engine, { lead: "main" }), state)); + } + /** + * Starts a replay engine from the project's state: every Branch, Commit and + * Layer under the Host's labels, in the order they happened. A session's + * calls then replay on top (LayerFsView): a node the state already has keeps + * its label, and a new one is labelled after the state's. `workspaces: false` + * leaves Sandboxes to the calls. + */ + function seedEngine(engine, state, { workspaces = true } = {}) { + const m = engine.m; + m.s = { + ...structuredClone(state.s), + roots: {}, + ...workspaces ? {} : { + sandboxes: {}, + sandboxOrder: [] + } + }; + for (const [real, label] of Object.entries(state.labels)) { + m.toLabel.set(real, label); + m.toReal.set(label, real); + const n = /^([CLR])(\d+)$/.exec(label); + if (n) m.next[n[1]] = Math.max(m.next[n[1]], Number(n[2]) + 1); + } + for (const node of [...Object.values(m.s.commits), ...Object.values(m.s.layers)]) node.root = node.id; + chronological(m.s, state); + const slots = [ + ...Object.values(m.s.commits), + ...Object.values(m.s.layers), + ...Object.values(m.s.branches) + ].map((x) => x.slot ?? 0); + m.slot = Math.max(m.slot, ...slots, -1) + 1; + engine.seeded = true; + } + /** Who made each node of the state, on the view (History's avatars). */ + function attribute(W, state) { + for (const [real, agent] of Object.entries(state.authors ?? {})) { + const label = state.labels[real]; + if (label) W.attrib[label] = agent; + } + return W; + } + /** + * Orders a snapshot's nodes by when they happened, as History draws them + * (by slot). Commits carry their time; Layers and fork points do not, so + * the journals' times are used, else a Layer follows its source Commit and + * parent Layer, and a fork point follows the node it forked from and comes + * before its Branch's first Commit. + */ + function chronological(s, state) { + const at = /* @__PURE__ */ new Map(); + for (const c of Object.values(s.commits)) at.set(c.id, c.time); + const realOf = new Map(Object.entries(state.labels).map(([r, label]) => [label, r])); + const layers = Object.values(s.layers).sort((a, b) => a.slot - b.slot); + for (const l of layers) { + const after = Math.max(at.get(l.parent) ?? -Infinity, at.get(l.sourceCommit) ?? -Infinity); + const known = state.times[realOf.get(l.id) ?? ""]; + at.set(l.id, known ?? (after === -Infinity ? 0 : after + 1)); + } + const branches = s.branchOrder.map((name) => s.branches[name]); + for (const b of branches) { + const first = Math.min(...Object.values(s.commits).filter((c) => c.branch === b.name).map((c) => c.time)); + const after = (at.get(b.from) ?? 0) + .5; + at.set(`fork:${b.name}`, Math.min(state.forks[b.name] ?? after, first - .5)); + } + const rank = (id) => id.startsWith("fork:") ? 0 : s.commits[id] ? 1 : 2; + [...at.keys()].sort((x, y) => at.get(x) - at.get(y) || rank(x) - rank(y)).forEach((id, slot) => { + if (id.startsWith("fork:")) s.branches[id.slice(5)].slot = slot; + else (s.commits[id] ?? s.layers[id]).slot = slot; + }); + } + //#endregion + //#region src/client/SandboxesTab.tsx + function SandboxesTab({ name, runtime, error, reload }) { + const [ask, setAsk] = (0, react.useState)(null); + const [busy, setBusy] = (0, react.useState)(null); + const [failed, setFailed] = (0, react.useState)(null); + const act = async (label, body) => { + setBusy(label); + setFailed(null); + try { + await api.runtimeAction(name, body); + setAsk(null); + reload(); + } catch (e) { + setFailed(e.message); + } finally { + setBusy(null); + } + }; + const sandboxes = runtime?.sandboxes ?? []; + const workspaces = sandboxes.reduce((n, s) => n + s.workspaces.length, 0); + return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", { + style: { + height: "100%", + overflow: "auto", + background: T.card, + color: T.text, + fontSize: 12.5, + lineHeight: "18px" + }, + children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", { + style: { + display: "flex", + alignItems: "center", + gap: 8, + padding: "8px 14px", + borderBottom: `1px solid ${T.border}`, + fontFamily: "var(--mono, ui-monospace, monospace)", + fontSize: 12 + }, + children: [ + runtime && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(Dot, { level: runtime.level }), + /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", { children: runtime ? `${sandboxes.length} Sandbox${sandboxes.length === 1 ? "" : "es"} · ${workspaces} Workspace${workspaces === 1 ? "" : "s"} · up to ${sandboxes[0]?.capacity ?? 16} each` : error ? "Sandboxes not read" : "Reading Sandboxes…" }), + runtime?.simulated && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", { + style: { color: T.caption }, + children: "· simulated" + }), + /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", { style: { flex: 1 } }), + /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.Button, { + variant: "ghost", + size: "sm", + onClick: reload, + disabled: !!busy, + children: "Refresh" + }) + ] + }), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", { + style: { + display: "grid", + gap: 10, + padding: "12px 14px 16px", + alignContent: "start" + }, + children: [ + (error || failed) && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", { + role: "status", + style: { + color: T.danger, + wordBreak: "break-word" + }, + children: failed ?? error + }), + busy && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", { + role: "status", + style: { color: T.text2 }, + children: busy + }), + runtime?.pending && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", { + role: "status", + style: { color: T.text2 }, + children: "Still reading the Sandboxes' Workspaces; shown meanwhile from Docker and the agents' calls, without changes, Branches or processes." + }), + runtime && !sandboxes.length && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", { + style: { color: T.text2 }, + children: "No Sandbox runs. LayerFS starts one when an agent mounts a Workspace and closes it once it sits idle; reading this page starts none." + }), + sandboxes.map((sb) => /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("section", { + style: { + ...card, + overflow: "hidden" + }, + "aria-label": sb.name ?? `Sandbox ${sb.id}`, + children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("header", { + style: { + display: "flex", + alignItems: "center", + gap: 8, + padding: "6px 10px", + background: T.well + }, + children: [ + /* @__PURE__ */ (0, react_jsx_runtime.jsx)(Dot, { level: sb.level }), + /* @__PURE__ */ (0, react_jsx_runtime.jsx)("b", { + style: { + fontWeight: 600, + fontFamily: "var(--mono, ui-monospace, monospace)" + }, + children: sb.name ?? `Sandbox ${sb.id}` + }), + /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", { + style: { color: T.text2 }, + children: sb.workspaces.length ? "running" : "idle · closes by itself" + }), + sb.image && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", { + title: sb.image, + style: { + color: T.text2, + fontFamily: "var(--mono, ui-monospace, monospace)", + fontSize: 11 + }, + children: ["image ", imageLabel(sb)] + }), + /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", { style: { flex: 1 } }), + /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", { + style: { color: T.text2 }, + children: [ + sb.workspaces.length, + "/", + sb.capacity + ] + }), + /* @__PURE__ */ (0, react_jsx_runtime.jsx)(Meter, { + used: sb.workspaces.length, + capacity: sb.capacity + }) + ] + }), sb.workspaces.map((w) => /* @__PURE__ */ (0, react_jsx_runtime.jsx)(WorkspaceRow, { + w, + disabled: !!busy || !!runtime?.pending, + onUnmount: () => act(`Unmounting ${wsName(w.path)}…`, { + action: "unmount", + sandbox: sb.id, + path: w.path + }), + onDiscard: () => setAsk({ + kind: "discard", + sandbox: sb.id, + path: w.path + }), + onStop: (p) => setAsk({ + kind: "stop", + sandbox: sb.id, + path: w.path, + process: p.id, + command: p.command + }), + ask: ask && ask.sandbox === sb.id && ask.path === w.path ? ask : null, + onConfirm: () => ask && (ask.kind === "discard" ? act(`Discarding ${wsName(w.path)}…`, { + action: "discard", + sandbox: sb.id, + path: w.path, + confirm: w.path + }) : act("Stopping the process…", { + action: "stop", + process: ask.process + })), + onCancel: () => setAsk(null) + }, w.path))] + }, sb.id)), + runtime?.gone.map((g) => /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", { + style: { + ...card, + display: "flex", + gap: 8, + alignItems: "center", + padding: "6px 10px", + color: T.text2 + }, + children: [ + /* @__PURE__ */ (0, react_jsx_runtime.jsx)(Dot, { level: "degraded" }), + " ", + g.name ?? `Sandbox ${g.id}`, + ": its container is gone; LayerFS closes it on the next read." + ] + }, g.id)) + ] + })] + }); + } + function WorkspaceRow({ w, disabled, ask, onUnmount, onDiscard, onStop, onConfirm, onCancel }) { + const why = w.busy ? `An agent's call is running in ${wsName(w.path)}; wait for it to end` : void 0; + const chip = (text, color) => /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", { + style: { + padding: "0 6px", + borderRadius: 4, + border: `1px solid ${T.border}`, + color, + whiteSpace: "nowrap" + }, + children: text + }); + return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", { + style: { + borderTop: `1px solid ${T.border}`, + padding: "6px 10px", + display: "grid", + gap: 6 + }, + children: [ + /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", { + style: { + display: "flex", + alignItems: "center", + gap: 8, + flexWrap: "wrap" + }, + children: [ + /* @__PURE__ */ (0, react_jsx_runtime.jsx)(Dot, { + level: w.busy ? "ok" : w.level, + title: w.busy ? "in use" : void 0 + }), + /* @__PURE__ */ (0, react_jsx_runtime.jsx)("b", { + style: { + fontWeight: 500, + minWidth: 44 + }, + children: wsName(w.path) + }), + /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", { + style: { fontFamily: "var(--mono, ui-monospace, monospace)" }, + children: w.branch ?? "—" + }), + w.agent && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", { + style: { color: T.text2 }, + children: ["· ", w.agent] + }), + /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", { + style: { color: T.text2 }, + children: ["· ", w.busy ? "in use now" : w.idleMs !== null ? `idle ${span(w.idleMs)}` : (w.activity ?? "").toLowerCase() || "mounted"] + }), + w.uncommitted ? chip(`${w.uncommitted} uncommitted`, w.level === "ok" ? T.text2 : T.warn) : chip("clean", T.ok), + w.stale && chip("Branch moved since mount", T.text2), + /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", { style: { flex: 1 } }), + w.uncommitted ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.Button, { + variant: "outline", + size: "sm", + disabled: disabled || w.busy, + title: why ?? "Drop its uncommitted changes and unmount it", + onClick: onDiscard, + children: "Discard…" + }) : /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.Button, { + variant: "outline", + size: "sm", + disabled: disabled || w.busy, + title: why ?? "Unmount it: nothing is uncommitted", + onClick: onUnmount, + children: "Unmount" + }) + ] + }), + w.processes.map((p) => /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", { + style: { + display: "flex", + alignItems: "center", + gap: 8, + paddingLeft: 16, + color: T.text2 + }, + children: [ + /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", { + style: { + fontFamily: "var(--mono, ui-monospace, monospace)", + overflow: "hidden", + textOverflow: "ellipsis", + whiteSpace: "nowrap" + }, + children: p.command + }), + /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", { children: ["· ", p.status] }), + /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", { style: { flex: 1 } }), + /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.Button, { + variant: "ghost", + size: "sm", + disabled, + onClick: () => onStop(p), + children: "Stop…" + }) + ] + }, p.id)), + ask && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", { + role: "alertdialog", + style: { + display: "flex", + alignItems: "center", + gap: 8, + flexWrap: "wrap", + padding: "6px 8px", + borderRadius: T.sm, + background: "var(--dsw-alias-state-error-bg, rgba(210,69,94,.1))" + }, + children: [ + /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", { + style: { + flex: 1, + minWidth: 200 + }, + children: ask.kind === "discard" ? /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, { children: [ + "Drop ", + w.uncommitted, + " uncommitted change", + w.uncommitted === 1 ? "" : "s", + " in ", + wsName(w.path), + " (", + w.branch, + w.agent ? `, ${w.agent}` : "", + ") and unmount it? This can't be undone." + ] }) : /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, { children: [ + "Stop ", + /* @__PURE__ */ (0, react_jsx_runtime.jsx)("code", { children: ask.command }), + " in ", + wsName(w.path), + w.agent ? `, started by ${w.agent}` : "", + "?" + ] }) + }), + /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.Button, { + variant: "primary", + size: "sm", + disabled, + onClick: onConfirm, + children: ask.kind === "discard" ? "Discard" : "Stop" + }), + /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.Button, { + variant: "ghost", + size: "sm", + onClick: onCancel, + children: "Cancel" + }) + ] + }) + ] + }); + } + //#endregion + //#region src/client/theme.ts + function followTheme(root) { + const apply = () => { + const scheme = document.documentElement.style.colorScheme; + if (scheme === "dark" || scheme === "light") root.dataset.theme = scheme; + else delete root.dataset.theme; + }; + apply(); + const observer = new MutationObserver(apply); + observer.observe(document.documentElement, { + attributes: true, + attributeFilter: ["style"] + }); + return () => observer.disconnect(); + } + //#endregion + //#region src/client/ProjectBoard.tsx + /** + * `tab`: the tab to open with (the All projects page opens Sandboxes). + * `storage`: the Store's figures, which the page reads alongside History (null while it reads). + */ + function ProjectBoard({ name, state, storage, storageError, status, tab }) { + const host = (0, react.useRef)(null); + const board = (0, react.useRef)(null); + const files = (0, react.useRef)(null); + const store = (0, react.useRef)(null); + const sbxEl = (0, react.useRef)(null); + if (!sbxEl.current) { + sbxEl.current = document.createElement("div"); + sbxEl.current.className = "lfs-own"; + sbxEl.current.style.height = "100%"; + } + const runtimeRef = (0, react.useRef)(null); + const [runtime, setRuntime] = (0, react.useState)(null); + const [runtimeError, setRuntimeError] = (0, react.useState)(null); + const readRuntime = () => api.projectRuntime(name).then((r) => { + setRuntime(r); + setRuntimeError(null); + }, (e) => setRuntimeError(e.message)); + usePoll(readRuntime, POLL_MS$1, [name]); + (0, react.useEffect)(() => { + setRuntime(null); + setRuntimeError(null); + }, [name]); + (0, react.useEffect)(() => { + injectStyle(document); + const root = host.current; + let soon; + board.current = createView(root, { + avatars: MAID_AVATARS, + casts: CASTS, + files: import_files.default, + lineDiff: import_model.default.lineDiff, + live: false, + lead: "main", + project: true + }); + board.current.rerender = () => { + clearTimeout(soon); + soon = setTimeout(() => board.current?.W && board.current.render(), 40); + }; + if (tab) board.current.ide = tab; + const unfollow = followTheme(root); + files.current = createFilesSource((kind, query) => api.projectFiles(name, kind, query), () => board.current?.rerender?.()); + return () => { + clearTimeout(soon); + unfollow(); + board.current.dispose(); + board.current = null; + }; + }, [name]); + (0, react.useEffect)(() => { + const b = board.current; + if (!b) return; + const W = projectModel(state, files.current, () => b.rerender()); + W.engine.storage = () => store.current; + W.engine.sandboxes = () => ({ + el: sbxEl.current, + level: runtimeRef.current?.level ?? "ok" + }); + for (const agent of ["main", ...new Set(Object.values(state.authors))]) b.avatar(agent); + b.W = W; + b.render(); + }, [name, state]); + (0, react.useEffect)(() => { + store.current = storage ? storeOf(storage, state) : null; + board.current?.rerender?.(); + }, [storage, state]); + (0, react.useEffect)(() => { + runtimeRef.current = runtime; + board.current?.rerender?.(); + }, [runtime]); + const gain = storage ? saved(storage) : null; + const sbx = runtime?.sandboxes ?? [], wsCount = sbx.reduce((n, x) => n + x.workspaces.length, 0); + return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", { + style: { + flex: 1, + minHeight: 560, + display: "flex", + flexDirection: "column", + borderRadius: "var(--dsw-radius-md)", + overflow: "hidden", + border: `1px solid ${T.border}` + }, + children: [ + /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", { + ref: host, + style: { + position: "relative", + flex: 1, + minHeight: 0 + } + }), + /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("footer", { + style: { + flex: "none", + display: "flex", + alignItems: "center", + flexWrap: "wrap", + gap: "2px 16px", + minWidth: 0, + padding: "4px 12px", + borderTop: `1px solid ${T.border}`, + background: T.well, + fontSize: 12 + }, + children: [ + status, + /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", { style: { flex: 1 } }), + /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", { + type: "button", + className: "lfs-chip", + onClick: () => { + if (board.current) board.current.ide = "sandboxes"; + }, + title: runtime ? "Sandboxes running for this project and their Workspaces. Click for Sandboxes." : runtimeError ?? "Reading Sandboxes…", + style: { + display: "inline-flex", + alignItems: "center", + gap: 6, + margin: "0 -6px", + padding: "0 6px", + border: 0, + borderRadius: T.sm, + color: "inherit", + font: "inherit", + whiteSpace: "nowrap" + }, + children: runtime ? /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, { children: [ + /* @__PURE__ */ (0, react_jsx_runtime.jsx)(Dot, { level: runtime.level }), + /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", { + style: { fontWeight: 500 }, + children: sbx.length + }), + /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", { + style: { color: T.text2 }, + children: [ + "Sandbox", + sbx.length === 1 ? "" : "es", + " · ", + wsCount, + " WS" + ] + }) + ] }) : /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", { + style: { color: T.caption }, + children: runtimeError ? "Sandboxes not read" : "reading Sandboxes…" + }) + }), + /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", { + type: "button", + className: "lfs-chip", + disabled: !storage, + onClick: () => { + if (board.current) board.current.ide = "storage"; + }, + title: storage ? `The Store's database is ${bytes(storage.store.file)}; every saved version as plain files would be ${bytes(storage.store.logical)}. Click for Storage.` : storageError ?? "Reading the Store…", + style: { + display: "inline-flex", + gap: 4, + margin: "0 -6px", + padding: "0 6px", + border: 0, + borderRadius: T.sm, + color: "inherit", + font: "inherit", + whiteSpace: "nowrap" + }, + children: storage ? /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, { children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", { + style: { fontWeight: 500 }, + children: bytes(storage.store.file) + }), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", { + style: { color: T.text2 }, + children: ["on disk", gain ? ` · ${times(gain)} smaller than raw` : ""] + })] }) : /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", { + style: { color: T.caption }, + children: storageError ? "storage not read" : "reading storage…" + }) + }) + ] + }), + (0, react_dom.createPortal)(/* @__PURE__ */ (0, react_jsx_runtime.jsx)(SandboxesTab, { + name, + runtime, + error: runtimeError, + reload: readRuntime + }), sbxEl.current) + ] + }); + } + //#endregion + //#region src/client/RemoveDialog.tsx + const line = "var(--dsh-color-border, #8884)"; + const muted = "var(--dsh-color-fg-muted, #8a8a8a)"; + const danger = "var(--dsh-color-fg-danger, #d33)"; + const button$1 = { + font: "inherit", + fontSize: 12, + padding: "4px 12px", + borderRadius: 6, + border: `1px solid ${line}`, + background: "transparent", + color: "inherit", + cursor: "pointer" + }; + function RemoveDialog({ project, onDone, onClose }) { + const [typed, setTyped] = (0, react.useState)(""); + const [busy, setBusy] = (0, react.useState)(false); + const [error, setError] = (0, react.useState)(null); + const remove = async () => { + setBusy(true); + setError(null); + try { + await api.remove(project.name); + onDone(); + } catch (e) { + setError(e.message); + setBusy(false); + } + }; + return (0, react_dom.createPortal)(/* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", { + role: "presentation", + onMouseDown: (e) => { + if (e.target === e.currentTarget && !busy) onClose(); + }, + style: { + position: "fixed", + inset: 0, + zIndex: 1e3, + background: "rgba(0,0,0,.35)", + display: "flex", + alignItems: "center", + justifyContent: "center" + }, + children: /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", { + role: "dialog", + "aria-label": `Remove ${project.name}`, + style: { + width: 460, + maxWidth: "calc(100vw - 32px)", + display: "grid", + gap: 12, + padding: 20, + borderRadius: 14, + background: "var(--dsh-color-bg, #fff)", + color: "var(--dsh-color-fg, #111)", + border: `1px solid ${line}`, + fontSize: 13, + lineHeight: 1.5, + boxShadow: "0 12px 40px rgba(0,0,0,.25)" + }, + children: [ + /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", { + style: { + fontSize: 15, + fontWeight: 600 + }, + children: [ + "Remove ", + project.name, + "?" + ] + }), + /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", { children: [ + "This deletes the project's volume ", + /* @__PURE__ */ (0, react_jsx_runtime.jsx)("code", { children: project.volume }), + ": every Branch, Commit and Layer in it. It can't be undone." + ] }), + /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", { + style: { color: muted }, + children: "The workspace folder, its files and the sessions' transcripts stay. Sessions that used this project have no LayerFS project afterwards. Close the project's Sandboxes first; removal is refused while one runs." + }), + /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("label", { + style: { + display: "grid", + gap: 4 + }, + children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", { + style: { color: muted }, + children: [ + "Type ", + /* @__PURE__ */ (0, react_jsx_runtime.jsx)("b", { children: project.name }), + " to confirm" + ] + }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("input", { + value: typed, + onChange: (e) => setTyped(e.target.value), + disabled: busy, + autoFocus: true, + style: { + ...button$1, + cursor: "text", + padding: "6px 8px" + } + })] + }), + error && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", { + style: { color: danger }, + children: error + }), + /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", { + style: { + display: "flex", + gap: 8, + justifyContent: "flex-end" + }, + children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", { + style: button$1, + disabled: busy, + onClick: onClose, + children: "Cancel" + }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", { + style: { + ...button$1, + background: danger, + color: "#fff", + border: "1px solid transparent" + }, + disabled: busy || typed !== project.name, + onClick: () => { + remove(); + }, + children: busy ? "Removing…" : "Remove project" + })] + }) + ] + }) + }), document.body); + } + //#endregion + //#region src/client/LayerFsPanel.tsx + const PRESET = "layerfs-dsh-minimalist"; + const NO_ITEMS = { items: [] }; + const NOT_LISTED = { + getSnapshot: () => NO_ITEMS, + subscribe: () => () => {} + }; + const ROWS = `.lfs-switch, .lfs-chip { background: transparent; cursor: pointer; } .lfs-switch:hover, .lfs-switch[aria-expanded='true'], .lfs-chip:hover, .lfs-chip[aria-expanded='true'] { background: ${T.hover}; } +.lfs-tab { border-radius: ${T.sm} ${T.sm} 0 0 !important; } .lfs-tab[aria-selected='true'] { box-shadow: inset 0 -2px 0 ${T.text}; } .lfs-tab[aria-selected='false'] { color: ${T.text2} !important; } +.lfs-card:hover { box-shadow: inset 0 0 0 999px ${T.hover}; } +.lfs-bone { border-radius: 4px; background: ${T.well}; animation: lfs-bone 1.2s ease-in-out infinite alternate; } @keyframes lfs-bone { to { opacity: .45; } }`; + /** The LayerFS mark (docs/assets/readme/layerfs-mark.svg) in the text colour: the A at 45%, its three nodes solid. */ + function LayerFsIcon({ size }) { + const s = size ?? 16; + return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("svg", { + width: s, + height: s, + viewBox: "6 6 188 188", + fill: "none", + "aria-hidden": "true", + children: [ + /* @__PURE__ */ (0, react_jsx_runtime.jsx)("path", { + d: "M88.5 22 L111.5 22 L170 135 L148.5 135 L100 49.5 L51.5 135 L30 135 Z", + fill: "currentColor", + stroke: "currentColor", + strokeWidth: "2", + strokeLinejoin: "round", + opacity: "0.45" + }), + /* @__PURE__ */ (0, react_jsx_runtime.jsx)("path", { + d: "M27 161 L57 161 L100 117 L143 161 L173 161", + stroke: "currentColor", + strokeWidth: "12", + strokeLinecap: "round", + strokeLinejoin: "round" + }), + /* @__PURE__ */ (0, react_jsx_runtime.jsx)("circle", { + cx: "100", + cy: "117", + r: "17", + fill: "currentColor" + }), + /* @__PURE__ */ (0, react_jsx_runtime.jsx)("circle", { + cx: "27", + cy: "161", + r: "17", + fill: "currentColor" + }), + /* @__PURE__ */ (0, react_jsx_runtime.jsx)("circle", { + cx: "173", + cy: "161", + r: "17", + fill: "currentColor" + }) + ] + }); + } + const short = (path) => path.split("/").filter(Boolean).slice(-2).join("/"); + const day = (ms) => new Date(ms).toLocaleDateString(void 0, { + month: "short", + day: "numeric" + }); + /** The project's status bar. */ + function stats(state) { + const s = state.s, real = Object.fromEntries(Object.entries(state.labels).map(([r, l]) => [l, r])); + const last = Object.values(s.layers).filter((l) => l.sourceBranch).sort((a, b) => b.slot - a.slot)[0]; + const by = last && state.authors[real[last.id]]; + const nB = s.branchOrder.length, nC = Object.keys(s.commits).length; + return [ + { + label: "main", + value: s.main?.head ?? "–" + }, + { + label: nB === 1 ? "Branch" : "Branches", + value: String(nB), + count: true + }, + { + label: nC === 1 ? "Commit" : "Commits", + value: String(nC), + count: true + }, + { + label: "last publish", + value: last ? `${last.sourceBranch}${by ? ` · ${by}` : ""}` : "nothing yet", + title: last ? `${last.sourceBranch} published as ${last.id}${by ? ` by ${by}` : ""}` : void 0 + } + ]; + } + function FactView({ f }) { + const v = /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", { + style: { + fontWeight: 500, + color: f.value ? T.text : T.caption + }, + children: f.value ?? "…" + }), l = /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", { + style: { color: T.text2 }, + children: f.label + }); + return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", { + title: f.title, + style: { + display: "inline-flex", + gap: 4, + whiteSpace: "nowrap", + minWidth: 0, + overflow: "hidden", + textOverflow: "ellipsis" + }, + children: f.count ? /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, { children: [v, l] }) : /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, { children: [l, v] }) + }); + } + /** + * Why the project could not be read, in words: a title, what happened and + * what to do, and whether removing and importing it again is the way out. + */ + function problem(error) { + if (/^Busy\b/.test(error)) return { + title: "LayerFS is busy with this project", + text: "Another client is starting its Sandbox. Refresh in a moment." + }; + if (/unresolved discovery intent/.test(error)) return { + title: "An earlier start of this project failed", + reimport: true, + text: "LayerFS kept a record of that failed start and won't start the project again until it's cleared. This usually means the project was imported by an older LayerFS, which this one can't open. Remove the project and import its folder again: its saved history goes, the folder's files stay." + }; + if (/stopped at Listener/.test(error)) return { + title: "LayerFS couldn't open this project", + reimport: true, + text: "Its daemon stopped before it was ready. This usually means the project was imported by an older LayerFS, which this one can't open. Remove the project and import its folder again: its saved history goes, the folder's files stay." + }; + return { + title: "Couldn't read this project", + text: error + }; + } + /** ellen_joe at full size, for a page with nothing else to show. */ + function Notice({ title, children }) { + return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", { + style: { + ...card, + display: "flex", + alignItems: "center", + gap: 16, + padding: 16 + }, + children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("img", { + src: ellen_joe_default$1, + alt: "", + width: 72, + height: 72, + style: { flex: "none" } + }), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", { + style: { + display: "grid", + gap: 4 + }, + children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", { + style: { fontWeight: 500 }, + children: title + }), children && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", { + style: { color: T.text2 }, + children + })] + })] + }); + } + /** The board's shape while the project is read: a file tree on the left, the tabs and History on the right. */ + function Skeleton() { + const bars = (widths) => widths.map((w, i) => /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", { + className: "lfs-bone", + style: { + height: 12, + width: `${w}%` + } + }, i)); + return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", { + "aria-label": "Reading the project", + style: { + ...card, + flex: 1, + minHeight: 440, + display: "grid", + gridTemplateColumns: "248px minmax(0, 1fr)", + overflow: "hidden" + }, + children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", { + style: { + display: "grid", + alignContent: "start", + gap: 14, + padding: 16, + borderRight: `1px solid ${T.border}` + }, + children: bars([ + 90, + 50, + 65, + 45, + 70, + 40, + 55 + ]) + }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", { + style: { + display: "grid", + alignContent: "start", + gap: 16, + padding: 16 + }, + children: bars([ + 30, + 70, + 45, + 80, + 55, + 65 + ]) + })] + }); + } + function LayerFsPanel({ services }) { + const { workspaces, uiWorkspace } = services(); + const list = workspaces?.list ?? NOT_LISTED; + const { items } = (0, react.useSyncExternalStore)((0, react.useCallback)((listener) => list.subscribe(listener), [list]), () => list.getSnapshot()); + const [status, setStatus] = (0, react.useState)(null); + const [projects, setProjects] = (0, react.useState)(null); + const [defaults, setDefaults] = (0, react.useState)({}); + const [selected, setSelected] = (0, react.useState)(null); + const [state, setState] = (0, react.useState)(null); + const [stateError, setStateError] = (0, react.useState)(null); + const [storage, setStorage] = (0, react.useState)(null); + const [storageError, setStorageError] = (0, react.useState)(null); + const [busy, setBusy] = (0, react.useState)(null); + const [error, setError] = (0, react.useState)(null); + const [reads, setReads] = (0, react.useState)(0); + const [initFor, setInitFor] = (0, react.useState)(null); + const [removing, setRemoving] = (0, react.useState)(false); + const [menu, setMenu] = (0, react.useState)(null); + const [menuSwitch, setMenuSwitch] = (0, react.useState)(false); + const [all, setAll] = (0, react.useState)(false); + const [openTab, setOpenTab] = (0, react.useState)(void 0); + const loadProjects = (0, react.useCallback)(() => api.projects().then(({ projects, defaults }) => { + setProjects(projects); + setDefaults(defaults ?? {}); + return projects; + }), []); + (0, react.useEffect)(() => { + api.status().then(setStatus, (e) => setError(e.message)); + loadProjects().then((list) => setSelected((current) => current ?? list[0]?.name ?? null), (e) => setError(e.message)); + }, [loadProjects]); + (0, react.useEffect)(() => { + if (!selected) return; + setState(null); + setStateError(null); + setStorage(null); + setStorageError(null); + let stopped = false; + api.projectStorage(selected).then((z) => { + if (!stopped) setStorage(z); + }, (e) => { + if (!stopped) setStorageError(e.message); + }); + const stop = readProject(selected, setState, setStateError); + return () => { + stopped = true; + stop(); + }; + }, [selected, reads]); + const act = (label, run) => async () => { + setBusy(label); + setError(null); + try { + await run(); + } catch (e) { + setError(e.message); + } finally { + setBusy(null); + } + }; + const project = projects?.find((p) => p.name === selected) ?? null; + const newSession = (w) => act("Opening a session…", async () => { + await api.setDefault(w.path, project.name); + await loadProjects(); + uiWorkspace.startSession(w.workspaceId, { agentPreset: PRESET }); + })(); + const sessionMenu = [{ + type: "label", + id: "l", + text: "New session in" + }, ...[...items].sort((a, b) => Number(defaults[b.path] === project?.name) - Number(defaults[a.path] === project?.name)).map((w) => ({ + id: w.workspaceId, + label: `${w.title} · ${short(w.path)}${defaults[w.path] === project?.name ? " · default" : ""}` + }))]; + const projectMenu = project ? [ + { + id: "refresh", + label: "Refresh", + icon: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.IconRefreshOutlineRegular, { size: 16 }) + }, + { + type: "separator", + id: "sep" + }, + { + id: "remove", + label: "Remove project…", + icon: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.IconTrashOutlineRegular, { size: 16 }), + danger: true + } + ] : []; + const onProjectMenu = (id) => { + setMenu(null); + if (id === "refresh") setReads((n) => n + 1); + else if (id === "remove") setRemoving(true); + }; + const importMenu = items.length ? [{ + type: "label", + id: "il", + text: "Import into a workspace" + }, ...items.map((w) => ({ + id: "import:" + w.workspaceId, + label: `${w.title} · ${short(w.path)}`, + icon: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.IconPlusOutlineRegular, { size: 16 }), + disabled: !status?.configured + }))] : [{ + type: "label", + id: "il", + text: "Add a workspace in dsh first" + }]; + const onImport = (id) => { + setMenuSwitch(false); + const w = items.find((x) => "import:" + x.workspaceId === id); + if (w) setInitFor(w); + }; + const importer = (anchor) => /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.Menu, { + open: menuSwitch, + onClose: () => setMenuSwitch(false), + items: importMenu, + onSelect: onImport, + align: "end", + portal: true, + anchor + }); + const importButton = () => importer(/* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.Button, { + variant: "outline", + size: "sm", + icon: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.IconPlusOutlineRegular, { size: 16 }), + onClick: () => setMenuSwitch(!menuSwitch), + children: "Import project" + })); + return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", { + style: { + display: "flex", + flexDirection: "column", + height: "100%", + minHeight: 0, + fontSize: 13, + lineHeight: "20px", + color: T.text + }, + children: [ + /* @__PURE__ */ (0, react_jsx_runtime.jsx)("style", { children: ROWS }), + /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("main", { + style: { + display: "flex", + flexDirection: "column", + gap: 10, + flex: 1, + minWidth: 0, + minHeight: 0, + overflowY: "auto", + padding: "12px 16px 16px" + }, + children: [ + status && !status.configured && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", { + style: { + ...card, + padding: "8px 12px", + color: T.warn + }, + children: [ + "LayerFS isn't set up: layerfs-host is missing ", + status.missing.join(", "), + "." + ] + }), + !all && projects && projects.length === 0 && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(Notice, { + title: "Start your first project", + children: /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", { + style: { + display: "grid", + gap: 8, + justifyItems: "start" + }, + children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", { children: "Import a folder from a workspace: LayerFS keeps a versioned copy that agents fork, test and merge." }), importButton()] + }) + }), + (all || project) && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, { children: [ + /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("header", { + style: { + display: "flex", + alignItems: "center", + gap: 8, + minWidth: 0 + }, + children: [ + /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", { + style: { + display: "flex", + flex: "none", + color: T.text2 + }, + children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(LayerFsIcon, { size: 20 }) + }), + /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", { + role: "tablist", + "aria-label": "LayerFS", + style: { + display: "flex", + alignItems: "center", + gap: 2, + minWidth: 0 + }, + children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", { + type: "button", + role: "tab", + "aria-selected": all || !project, + className: "lfs-switch lfs-tab", + onClick: () => setAll(true), + title: "Every project and its Sandboxes; a card opens a project", + style: { + flex: "none", + padding: "0 8px", + border: 0, + borderRadius: T.sm, + color: "inherit", + font: "inherit", + fontSize: 15, + fontWeight: 500, + lineHeight: "30px", + whiteSpace: "nowrap" + }, + children: "All projects · Sandboxes" + }), project && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", { + type: "button", + role: "tab", + "aria-selected": !all, + className: "lfs-switch lfs-tab", + onClick: () => setAll(false), + title: project.name, + style: { + minWidth: 0, + maxWidth: 320, + padding: "0 8px", + border: 0, + borderRadius: T.sm, + color: "inherit", + font: "inherit", + fontSize: 15, + fontWeight: 500, + lineHeight: "30px", + overflow: "hidden", + textOverflow: "ellipsis", + whiteSpace: "nowrap" + }, + children: project.name + })] + }), + (all || !project) && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, { children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", { style: { flex: 1 } }), importButton()] }), + !all && project && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, { children: [ + /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", { + style: { + flex: 1, + minWidth: 0, + fontSize: 12, + color: T.text2, + overflow: "hidden", + textOverflow: "ellipsis", + whiteSpace: "nowrap" + }, + title: `${project.empty ? "started empty" : project.source} · volume ${project.volume}`, + children: [ + project.empty ? "started empty" : `from ${short(project.source)}`, + " · ", + day(project.created) + ] + }), + /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.Menu, { + open: menu === "session", + onClose: () => setMenu(null), + items: sessionMenu, + align: "end", + portal: true, + onSelect: (id) => { + setMenu(null); + const w = items.find((x) => x.workspaceId === id); + if (w) newSession(w); + }, + anchor: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.Button, { + variant: "primary", + size: "sm", + disabled: !!busy || !items.length || !uiWorkspace, + onClick: () => setMenu(menu === "session" ? null : "session"), + title: items.length ? "New session on the LayerFS × DSH minimalist preset, in a workspace you pick" : "Add a workspace in dsh first", + children: "New session" + }) + }), + /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.Menu, { + open: menu === "project", + onClose: () => setMenu(null), + items: projectMenu, + onSelect: onProjectMenu, + align: "end", + portal: true, + anchor: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.Button, { + variant: "ghost", + size: "sm", + "aria-label": "Project actions", + icon: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.IconEllipsisOutlineRegular, { size: 16 }), + disabled: !!busy, + onClick: () => setMenu(menu === "project" ? null : "project") + }) + }) + ] }) + ] + }), + (busy || error) && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", { + role: "status", + style: { color: error ? T.danger : T.text2 }, + children: error ?? busy + }), + all || !project ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)(AllSandboxes, { onOpen: (name) => { + setOpenTab("sandboxes"); + setSelected(name); + setAll(false); + } }) : stateError ? (() => { + const why = problem(stateError); + return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(Notice, { + title: why.title, + children: /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", { + style: { + display: "grid", + gap: 8, + justifyItems: "start" + }, + children: [ + /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", { children: why.text }), + why.reimport && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.Button, { + variant: "outline", + size: "sm", + icon: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.IconTrashOutlineRegular, { size: 16 }), + disabled: !!busy, + onClick: () => setRemoving(true), + children: "Remove project…" + }), + why.text !== stateError && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("details", { + style: { + fontSize: 12, + color: T.caption + }, + children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("summary", { + style: { cursor: "pointer" }, + children: "What LayerFS said" + }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", { + style: { + marginTop: 4, + wordBreak: "break-word" + }, + children: stateError + })] + }) + ] + }) + }); + })() : state ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)(ProjectBoard, { + name: project.name, + state, + storage, + storageError, + tab: openTab, + status: stats(state).map((f) => /* @__PURE__ */ (0, react_jsx_runtime.jsx)(FactView, { f }, f.label)) + }) : /* @__PURE__ */ (0, react_jsx_runtime.jsx)(Skeleton, {}) + ] }) + ] + }), + removing && project && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(RemoveDialog, { + project, + onClose: () => setRemoving(false), + onDone: () => { + setRemoving(false); + loadProjects().then((list) => setSelected(list[0]?.name ?? null)); + } + }), + initFor && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(InitDialog, { + folder: initFor.path, + directories: uiWorkspace, + onClose: () => setInitFor(null), + onDone: (made) => { + setInitFor(null); + loadProjects().then(() => { + setOpenTab(void 0); + setSelected(made.name); + setAll(false); + }); + } + }) + ] + }); + } + //#endregion + //#region src/client/ui.ts + const MESSAGE = { + padding: "24px 20px", + paddingBottom: "calc(var(--dsh-composer-height, 0px) + 24px)", + fontSize: 13, + lineHeight: 1.6, + overflowWrap: "anywhere", + color: "var(--dsh-color-fg-muted, inherit)" + }; + //#endregion + //#region src/client/Setup.tsx + const button = { + font: "inherit", + fontSize: 13, + padding: "5px 12px", + borderRadius: 6, + border: "1px solid var(--dsh-color-border, #8884)", + background: "transparent", + color: "inherit", + cursor: "pointer" + }; + function Setup({ sessionId, view, onChange, directories }) { + const [status, setStatus] = (0, react.useState)(null); + const [busy, setBusy] = (0, react.useState)(null); + const [error, setError] = (0, react.useState)(null); + const [initing, setIniting] = (0, react.useState)(false); + (0, react.useEffect)(() => { + api.status().then(setStatus, (e) => setError(e.message)); + }, []); + const act = (label, run) => async () => { + setBusy(label); + setError(null); + try { + onChange(await run() || void 0); + } catch (e) { + setError(e.message); + } finally { + setBusy(null); + } + }; + const choose = (project) => act(project ? `Choosing ${project}…` : "Saving…", () => api.choose(sessionId, project)); + if (!view.folder) return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", { + style: MESSAGE, + children: "This session has no workspace folder, so it has no LayerFS project." + }); + if (status && !status.configured) return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", { + style: MESSAGE, + children: [ + "LayerFS is not set up on this dsh Host. Missing settings of ", + /* @__PURE__ */ (0, react_jsx_runtime.jsx)("code", { children: "layerfs-host" }), + ": ", + status.missing.join(", "), + "." + ] + }); + const locked = !!view.choice?.locked, none = view.choice && view.choice.project === null; + return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", { + style: { + ...MESSAGE, + display: "grid", + gap: 14, + maxWidth: 560 + }, + children: [ + /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", { children: [ + /* @__PURE__ */ (0, react_jsx_runtime.jsx)("b", { children: "LayerFS" }), + " keeps a versioned copy of ", + /* @__PURE__ */ (0, react_jsx_runtime.jsx)("code", { children: view.folder }), + ": agents fork Branches, test them in Sandboxes and merge them, and this tab draws what they did.", + none ? " This session is set to work without LayerFS." : "" + ] }), + view.choices.projects.length > 0 && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", { + style: { + display: "grid", + gap: 6 + }, + children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", { children: "LayerFS projects" }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", { + style: { + display: "flex", + flexWrap: "wrap", + gap: 8 + }, + children: view.choices.projects.map((p) => /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("button", { + style: button, + disabled: !!busy || locked, + onClick: choose(p.name), + title: `${p.empty ? "started empty" : `imported from ${p.source}`} · volume ${p.volume}`, + children: ["Use ", p.name] + }, p.name)) + })] + }), + /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", { children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", { + style: button, + disabled: !!busy || locked, + onClick: () => setIniting(true), + children: "Init LayerFS…" + }) }), + initing && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(InitDialog, { + folder: view.folder, + directories: directories(), + onClose: () => setIniting(false), + onDone: (project) => { + setIniting(false); + act(`Choosing ${project.name}…`, () => api.choose(sessionId, project.name))(); + } + }), + busy && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", { children: busy }), + error && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", { + style: { color: "var(--dsh-color-fg-danger, #d33)" }, + children: error + }) + ] + }); + } + //#endregion + //#region src/client/playback.ts + const LAG_MS = 2e3; + /** The same rule as the trace source's (model/src/sources/trace.js): lines that are not steps of their own. */ + const rides = (method) => method === "sandbox.service" || method.startsWith("operator.") && method !== "operator.process.start" && method !== "operator.process.cancel"; + /** When a line shows: LAG_MS after it ended, by the Host's clock. */ + const dueOf = (line) => Date.parse(line.start) + (line.ms || 0) + LAG_MS; + var Playback = class { + W; + seen = /* @__PURE__ */ new Set(); + pending = []; + queue = []; + t0 = null; + running = false; + stopped = false; + wake = null; + feeding = Promise.resolve(); + played = 0; + /** + * @param fresh a new view model (an empty trace replay) + * @param show draws the model after `step`, or after catching up (null) + * @param now the clock lines are timed by (the Host's, as this browser sees it) + */ + constructor(fresh, show, now = Date.now) { + this.show = show; + this.now = now; + this.W = fresh(); + } + show; + now; + /** Steps still to play. */ + get waiting() { + return this.queue.length; + } + /** Takes a session's lines so far (agents named): the new ones queue, each for its time. */ + feed(lines, agent) { + const next = this.feeding.then(() => this.take(lines, agent)); + this.feeding = next.catch(() => {}); + return next; + } + async take(lines, agent) { + const ends = endLines(lines); + if (!ends.length) return; + this.t0 ??= Date.parse(ends[0].start); + const t0 = this.t0; + for (const line of ends) { + if (this.seen.has(line.id)) continue; + this.seen.add(line.id); + this.pending.push(line); + if (rides(line.method)) continue; + const batch = this.pending; + this.pending = []; + const due = Math.max(Math.min(dueOf(line), this.now() + LAG_MS), this.queue.length ? this.queue[this.queue.length - 1].due : 0); + this.queue.push({ + a: line.agent || agent, + line, + due, + replay: (W) => { + for (const l of batch) replayLine(W, l, { + agent, + t0 + }); + } + }); + } + this.wake?.(); + await this.play(); + } + stop() { + this.stopped = true; + this.queue = []; + this.wake?.(); + } + async play() { + if (this.running) return; + this.running = true; + try { + while (this.queue.length && !this.stopped) { + await this.until(this.queue[0].due); + if (this.stopped) return; + const now = this.now(); + let last = null; + while (this.queue.length && this.queue[0].due <= now) { + last = this.queue.shift(); + await runStep(this.W, last, {}); + this.played++; + } + if (last) this.show(this.W, now - last.due < LAG_MS ? last : null); + } + } finally { + this.running = false; + } + } + /** Waits until `due`; a stop or a new line wakes it to look again. */ + async until(due) { + const left = due - this.now(); + if (left <= 0) return; + await new Promise((resolve) => { + const timer = setTimeout(resolve, left); + this.wake = () => { + clearTimeout(timer); + resolve(); + }; + }); + this.wake = null; + } + }; + //#endregion + //#region src/client/composer.ts + const MARK$2 = "data-lfs-composer-hidden"; + const RULE$2 = `[${MARK$2}] > :has([data-composer-card]) { display: none !important; }`; + function injectRule(doc) { + if (doc.getElementById("lfs-composer-rule")) return; + const style = doc.createElement("style"); + style.id = "lfs-composer-rule"; + style.textContent = RULE$2; + doc.head.append(style); + } + /** The nearest ancestor with a child that holds the composer card, other than the tab's own branch. */ + function seatParent(anchor) { + for (let el = anchor; el?.parentElement; el = el.parentElement) { + const parent = el.parentElement; + for (const child of parent.children) if (child !== el && child.querySelector("[data-composer-card]")) return parent; + } + return null; + } + /** Hides the conversation's composer while the element is mounted. */ + function useHiddenComposer(anchor) { + (0, react.useEffect)(() => { + const el = anchor.current; + const parent = el && seatParent(el); + if (!parent) return; + injectRule(el.ownerDocument); + parent.setAttribute(MARK$2, ""); + return () => { + parent.removeAttribute(MARK$2); + }; + }, [anchor]); + } + //#endregion + //#region src/client/LayerFsView.tsx + const POLL_MS = 1500; + const STORE_MS = 1e4; + /** The session's view from the Host, read every POLL_MS while the page is visible. */ + function useSessionView(sessionId) { + const [view, setView] = (0, react.useState)(null); + const [error, setError] = (0, react.useState)(null); + const [tick, setTick] = (0, react.useState)(0); + (0, react.useEffect)(() => { + let stopped = false, timer; + const read = async () => { + if (document.visibilityState === "visible") try { + const next = await api.session(sessionId); + if (!stopped) { + setView(next); + setError(null); + } + } catch (e) { + if (!stopped) setError(e.message); + } + if (!stopped) timer = setTimeout(read, POLL_MS); + }; + read(); + return () => { + stopped = true; + clearTimeout(timer); + }; + }, [sessionId, tick]); + return { + view, + error, + refresh: (next) => { + if (next) setView(next); + setTick((n) => n + 1); + } + }; + } + /** One of the session's LayerFS tabs in dsh: Work or History (`pane`). */ + function LayerFsView({ sessionId, directories, pane }) { + const anchor = (0, react.useRef)(null); + useHiddenComposer(anchor); + return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", { + ref: anchor, + style: { display: "contents" }, + children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(TabBody, { + sessionId, + directories, + pane + }) + }); + } + function TabBody({ sessionId, directories, pane }) { + const { view, error, refresh } = useSessionView(sessionId); + if (!view) return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", { + style: MESSAGE, + children: error ? `LayerFS is not available: ${error}` : "Loading LayerFS…" + }); + if (!view.project) return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(Setup, { + sessionId, + view, + onChange: refresh, + directories + }); + if (!view.lines.length) return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(Before, { view }); + return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(Board, { + sessionId, + view, + error, + pane + }); + } + /** Before the session's first call: the project as it is now, until the calls take over. */ + function Before({ view }) { + const name = view.project.name; + const [state, setState] = (0, react.useState)(null); + const [error, setError] = (0, react.useState)(null); + const [storage, setStorage] = (0, react.useState)(null); + const [storageError, setStorageError] = (0, react.useState)(null); + (0, react.useEffect)(() => { + let stopped = false; + setStorage(null); + setStorageError(null); + api.projectStorage(name).then((z) => { + if (!stopped) setStorage(z); + }, (e) => { + if (!stopped) setStorageError(e.message); + }); + const stop = readProject(name, setState, setError); + return () => { + stopped = true; + stop(); + }; + }, [name]); + const note = view.running.length ? "a call is running…" : "no calls in this session yet; they show here as the agents make them"; + return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", { + style: { + ...BAND, + display: "flex", + flexDirection: "column", + gap: 8, + padding: "8px 0" + }, + children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", { + style: { + ...MESSAGE, + padding: "0 12px", + paddingBottom: 0 + }, + children: [ + /* @__PURE__ */ (0, react_jsx_runtime.jsx)("b", { children: name }), + " · ", + note, + error ? ` · the project could not be read: ${error}` : "" + ] + }), state ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)(ProjectBoard, { + name, + state, + storage, + storageError + }) : !error && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", { + style: { + ...MESSAGE, + padding: 0, + paddingBottom: 0 + }, + children: "Loading the project…" + })] + }); + } + const BAND = { + height: "calc(var(--dsh-conversation-viewport-height, 100vh) - var(--dsh-composer-height, 0px))", + minHeight: 320, + position: "relative" + }; + function Board({ sessionId, view, error, pane }) { + const host = (0, react.useRef)(null); + const board = (0, react.useRef)(null); + const files = (0, react.useRef)(null); + if (files.current?.session !== sessionId) files.current = { + session: sessionId, + source: createFilesSource((kind, query) => api.files(sessionId, kind, query), () => board.current?.rerender?.()) + }; + const play = (0, react.useRef)(null); + const latest = (0, react.useRef)(view); + latest.current = view; + const store = (0, react.useRef)(null); + const storeRead = (0, react.useRef)(0); + const lastState = (0, react.useRef)(null); + (0, react.useEffect)(() => { + if (Date.now() - storeRead.current < STORE_MS) return; + storeRead.current = Date.now(); + const name = view.project.name; + Promise.allSettled([api.projectStorage(name), api.projectState(name)]).then(([storage, state]) => { + if (state.status === "fulfilled") lastState.current = state.value; + if (storage.status !== "fulfilled" || !storage.value.store || !lastState.current) return; + store.current = storeOf(storage.value, lastState.current, latest.current.lines); + board.current?.rerender?.(); + }); + }, [view.lines.length, sessionId]); + const name = view.project.name; + const sbxEl = (0, react.useRef)(null); + if (!sbxEl.current) { + sbxEl.current = document.createElement("div"); + sbxEl.current.className = "lfs-own"; + sbxEl.current.style.height = "100%"; + } + const runtimeRef = (0, react.useRef)(null); + const [runtime, setRuntime] = (0, react.useState)(null); + const [runtimeError, setRuntimeError] = (0, react.useState)(null); + const readRuntime = () => api.projectRuntime(name).then((r) => { + setRuntime(r); + setRuntimeError(null); + }, (e) => setRuntimeError(e.message)); + usePoll(() => { + if (pane === "history") readRuntime(); + }, POLL_MS$1, [name, pane]); + (0, react.useEffect)(() => { + setRuntime(null); + setRuntimeError(null); + }, [name]); + (0, react.useEffect)(() => { + runtimeRef.current = runtime; + board.current?.rerender?.(); + }, [runtime]); + const [seed, setSeed] = (0, react.useState)(void 0); + (0, react.useEffect)(() => { + let stopped = false; + const name = view.project.name; + api.projectHistory(name).catch(() => api.projectState(name)).then((state) => { + if (!stopped) setSeed(state); + }, () => { + if (!stopped) setSeed(null); + }); + return () => { + stopped = true; + }; + }, [sessionId]); + (0, react.useEffect)(() => { + injectStyle(document); + const root = host.current; + let soon; + board.current = createView(root, { + avatars: MAID_AVATARS, + casts: CASTS, + files: import_files.default, + lineDiff: import_model.default.lineDiff, + live: false, + lead: "main", + pane + }); + const unfollow = followTheme(root); + board.current.rerender = () => { + clearTimeout(soon); + soon = setTimeout(() => board.current?.W && board.current.render(), 40); + }; + return () => { + clearTimeout(soon); + play.current?.playback.stop(); + play.current = null; + unfollow(); + board.current.dispose(); + board.current = null; + }; + }, [sessionId]); + (0, react.useEffect)(() => { + const b = board.current; + if (!b || seed === void 0) return; + const agents = `${Object.values(view.agents).join(",")}|${seed ? "seeded" : ""}`; + if (!play.current || play.current.agents !== agents) { + play.current?.playback.stop(); + const fresh = () => { + const engine = new ReplayEngine({ + project: view.project?.name ?? "project", + files: files.current.source + }); + engine.onchange = () => b.rerender(); + engine.storage = () => store.current; + if (pane === "history") engine.sandboxes = () => ({ + el: sbxEl.current, + level: runtimeRef.current?.level ?? "ok" + }); + if (seed) seedEngine(engine, seed, { workspaces: false }); + const W = storyView(engine, { lead: "main" }); + return seed ? attribute(W, seed) : W; + }; + const playback = new Playback(fresh, (W, step) => show(b, W, step, playback)); + play.current = { + playback, + agents + }; + } + const lines = view.lines.map((line) => ({ + ...line, + agent: view.agents[line.agentId] ?? line.agent + })); + const playback = play.current.playback; + playback.feed(lines, "main").catch((e) => { + b.note = `The calls could not be replayed: ${e.message}`; + }); + if (!playback.waiting && b.W) { + b.acting = runningAgents(view); + b.note = noteOf(view, playback); + b.render(); + } + }, [ + view, + sessionId, + seed + ]); + /** Draws the model after a step (its agent acting, the view following it) or once caught up. */ + function show(b, W, step, playback) { + if (board.current !== b) return; + const v = latest.current; + b.avatar("main"); + if (step) b.avatar(step.a); + else for (const line of v.lines) b.avatar(v.agents[line.agentId] ?? line.agent); + b.W = W; + if (step) { + b.acting = [step.a]; + b.lastLoc = locKey(where(W, step.a)); + } else b.acting = runningAgents(v); + if (b.follow && W.lastTab) b.active = W.lastTab; + b.note = noteOf(v, playback); + b.render(); + if (step) b.animate(step.a); + } + (0, react.useEffect)(() => { + if (board.current && error) board.current.note = `LayerFS is not answering: ${error}`; + }, [error]); + return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, { children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", { + style: BAND, + children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", { + ref: host, + style: { + height: "100%", + position: "relative" + } + }), seed === void 0 && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", { + style: { + ...MESSAGE, + position: "absolute", + inset: 0, + zIndex: 1 + }, + children: [ + "Loading ", + name, + "'s History…" + ] + })] + }), pane === "history" && (0, react_dom.createPortal)(/* @__PURE__ */ (0, react_jsx_runtime.jsx)(SandboxesTab, { + name, + runtime, + error: runtimeError, + reload: readRuntime + }), sbxEl.current)] }); + } + const runningAgents = (view) => view.running.map((line) => view.agents[line.agentId] ?? line.agent); + const noteOf = (view, playback) => `${view.project.name} · ${view.lines.length} calls` + (playback.waiting ? ` · ${playback.waiting} to play` : "") + (view.running.length ? ` · ${view.running.length} running` : ""); + //#endregion + //#region src/client/ProjectPicker.tsx + /** The preset a session on a LayerFS project runs (dsh-layerfs/presets). */ + const LAYERFS_PRESET = "layerfs-dsh-minimalist"; + const NONE = "\0none"; + const IMPORT = "\0import"; + const EMPTY = "\0empty"; + const MARK$1 = "data-lfs-hero-options"; + const RULE$1 = `[${MARK$1}] { margin-left: 0 !important; } +.lfs-seat:not(:disabled):hover, .lfs-seat[aria-expanded='true'] { background: var(--dsw-alias-interactive-bg-hover); } +.lfs-seat > svg { flex: none; } +.lfs-seat > .lfs-chevron { color: var(--dsw-alias-label-caption); }`; + const seat = { + display: "inline-flex", + alignItems: "center", + gap: 4, + minWidth: 0, + maxWidth: 240, + minHeight: 28, + padding: "0 8px", + border: "none", + borderRadius: "var(--dsw-radius-sm)", + background: "transparent", + color: "var(--dsw-alias-label-primary)", + font: "inherit", + fontSize: 13, + lineHeight: "20px", + fontWeight: 500, + whiteSpace: "nowrap", + cursor: "pointer" + }; + /** Marks the nearest laid-out ancestor (dsh's hero options box) so the rule above applies while mounted. */ + function useBesidePreset(anchor) { + (0, react.useEffect)(() => { + const doc = anchor.current?.ownerDocument; + let box = anchor.current?.parentElement ?? null; + while (box && getComputedStyle(box).display === "contents") box = box.parentElement; + if (!doc || !box) return; + if (!doc.getElementById("lfs-hero-rule")) { + const style = doc.createElement("style"); + style.id = "lfs-hero-rule"; + style.textContent = RULE$1; + doc.head.append(style); + } + box.setAttribute(MARK$1, ""); + return () => { + box.removeAttribute(MARK$1); + }; + }); + } + function ProjectPicker({ sessionId, directories, usePreset }) { + const layerFsPreset = async () => { + await usePreset()?.(sessionId, LAYERFS_PRESET); + }; + const [initing, setIniting] = (0, react.useState)(false); + const [open, setOpen] = (0, react.useState)(false); + const [view, setView] = (0, react.useState)(null); + const [busy, setBusy] = (0, react.useState)(false); + const [job, setJob] = (0, react.useState)(null); + const [error, setError] = (0, react.useState)(null); + const [verb, setVerb] = (0, react.useState)("Importing"); + const [canEmpty, setCanEmpty] = (0, react.useState)(false); + const anchor = (0, react.useRef)(null); + useBesidePreset(anchor); + const now = useClock(job !== null); + (0, react.useEffect)(() => { + let stopped = false; + api.session(sessionId).then((v) => { + if (stopped) return; + setView(v); + if (v.project && !v.choice?.locked) layerFsPreset().catch(() => {}); + }, (e) => { + if (!stopped) setError(e.message); + }); + api.status().then((s) => { + if (!stopped) setCanEmpty(!!s.empty); + }, () => {}); + return () => { + stopped = true; + }; + }, [sessionId]); + if (!view?.folder) return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", { + ref: anchor, + title: error ?? void 0, + style: { + fontSize: 12, + opacity: .6 + }, + children: error ? "LayerFS unavailable" : null + }); + const folder = view.folder; + const run = async (step) => { + setBusy(true); + setError(null); + try { + const next = await step(); + setView(next); + if (next.project && !next.choice?.locked) await layerFsPreset(); + } catch (e) { + setError(e.message); + } finally { + setBusy(false); + } + }; + const importProject = async () => { + const desktop = globalThis.__DSH_DIRECTORY_PICKER__; + const dirs = directories(); + if (!desktop && !dirs?.pickDirectory) { + setIniting(true); + return; + } + await run(async () => { + const source = desktop ? await desktop.pick() : await dirs.pickDirectory(); + if (!source) return view; + try { + const { project } = await api.init(folder, void 0, source, setJob); + return await api.choose(sessionId, project.name); + } finally { + setJob(null); + } + }); + }; + const startEmpty = () => run(async () => { + setVerb("Creating"); + try { + const { project } = await api.init(folder, void 0, void 0, setJob, true); + return await api.choose(sessionId, project.name); + } finally { + setJob(null); + setVerb("Importing"); + } + }); + const select = (id) => { + setOpen(false); + if (id === IMPORT) importProject(); + else if (id === EMPTY) startEmpty(); + else run(() => api.choose(sessionId, id === NONE ? null : id)); + }; + const locked = !!view.choice?.locked; + const icon = /* @__PURE__ */ (0, react_jsx_runtime.jsx)(LayerFsIcon, { size: 16 }); + return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", { + ref: anchor, + style: { + position: "relative", + display: "inline-flex", + alignItems: "center", + minWidth: 0 + }, + children: [ + /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.Menu, { + open, + onClose: () => setOpen(false), + items: [...view.choices.projects.map((p) => ({ + id: p.name, + label: p.name, + icon + })), { + id: NONE, + label: "No LayerFS", + icon: /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", { style: { width: 16 } }) + }], + footer: [...canEmpty ? [{ + id: EMPTY, + label: "New empty project", + icon: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.IconPlusOutlineRegular, { size: 16 }), + disabled: busy + }] : [], { + id: IMPORT, + label: "Import project…", + icon: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.IconFolderOpenOutlineRegular, { size: 16 }), + disabled: busy + }], + selectedId: view.project?.name ?? NONE, + onSelect: select, + align: "start", + portal: true, + anchor: /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("button", { + type: "button", + className: "lfs-seat", + style: { + ...seat, + ...busy || locked ? { cursor: "default" } : {}, + ...error ? { color: "var(--dsh-color-fg-danger, #d33)" } : {} + }, + "aria-haspopup": "menu", + "aria-expanded": open, + "aria-label": "LayerFS project", + title: job ? jobText(job, now) : error ?? (locked ? "Fixed: an agent has used this project" : "LayerFS project for this session"), + disabled: busy || locked, + onClick: () => setOpen((value) => !value), + children: [ + /* @__PURE__ */ (0, react_jsx_runtime.jsx)(LayerFsIcon, { size: 16 }), + /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", { + style: { + minWidth: 0, + overflow: "hidden", + textOverflow: "ellipsis" + }, + children: job ? `${verb} ${job.name}…` : view.project?.name ?? "No LayerFS" + }), + !locked && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.IconChevronDownOutlineRegular, { + size: 14, + className: "lfs-chevron" + }) + ] + }) + }), + job && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", { + role: "status", + style: { + position: "absolute", + left: 0, + top: "100%", + marginTop: 6, + zIndex: 20, + width: 300, + maxWidth: "calc(100vw - 32px)", + boxSizing: "border-box", + display: "grid", + gridTemplateColumns: "minmax(0, 1fr)", + gap: 8, + padding: "10px 12px", + borderRadius: 12, + background: "var(--dsw-alias-bg-base, #fff)", + border: "1px solid var(--dsw-alias-border-subtle, #8883)", + boxShadow: "0 8px 24px rgba(0,0,0,.12)", + pointerEvents: "none" + }, + children: [ + /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", { + style: { + fontSize: 13, + fontWeight: 500, + overflow: "hidden", + textOverflow: "ellipsis", + whiteSpace: "nowrap" + }, + children: [ + verb, + " ", + job.name + ] + }), + /* @__PURE__ */ (0, react_jsx_runtime.jsx)(ProgressBar, { fraction: jobFraction(job) }), + /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", { + style: { + fontSize: 12, + lineHeight: "17px", + overflowWrap: "anywhere", + color: "var(--dsw-alias-label-caption)" + }, + children: jobText(job, now) + }) + ] + }), + initing && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(InitDialog, { + folder, + directories: directories(), + onClose: () => setIniting(false), + onDone: (project) => { + setIniting(false); + run(() => api.choose(sessionId, project.name)); + } + }) + ] + }); + } + //#endregion + //#region src/client/tablogo.ts + const MARK = "data-lfs-tab"; + const LOGO = ``; + const TABS = `[data-conversation-tabs] [${MARK}]`; + const TRACK = "#d6dae1"; + const RULE = [ + `${TABS} { position: relative; background: linear-gradient(${TRACK}, ${TRACK}) left bottom / 100% 1px no-repeat; }`, + `${TABS}[${MARK}="work"] { margin-right: -12px; }`, + `${TABS}[${MARK}="work"]::before { content: ""; display: inline-block; width: 15px; height: 15px; margin: 0 6px 0 0; vertical-align: -2px; background: url("data:image/svg+xml,${encodeURIComponent(LOGO)}") center / contain no-repeat; }`, + `${TABS}[${MARK}="work"]::after { left: 21px; }`, + `${TABS}[${MARK}="history"]::before { content: ""; position: absolute; left: -24px; width: 24px; top: 0; bottom: 0; background: linear-gradient(#c9ced6, #c9ced6) center 2px / 1px 12px no-repeat, linear-gradient(${TRACK}, ${TRACK}) left bottom / 100% 1px no-repeat; }` + ].join("\n"); + /** Marks the Work and History tabs (by label) whenever dsh draws its tab row; returns the stop. */ + function markLayerFsTabs(doc, labels) { + if (!doc.getElementById("lfs-tab-logo")) { + const style = doc.createElement("style"); + style.id = "lfs-tab-logo"; + style.textContent = RULE; + doc.head.appendChild(style); + } + let frame = 0; + const mark = () => { + frame = 0; + for (const tab of doc.querySelectorAll(`[data-conversation-tabs] [role="tab"]:not([${MARK}])`)) { + const label = tab.textContent?.trim(); + if (label === labels.work) tab.setAttribute(MARK, "work"); + else if (label === labels.history) tab.setAttribute(MARK, "history"); + } + }; + const seen = new MutationObserver(() => { + if (!frame) frame = requestAnimationFrame(mark); + }); + seen.observe(doc.body, { + childList: true, + subtree: true + }); + mark(); + return () => { + seen.disconnect(); + if (frame) cancelAnimationFrame(frame); + }; + } + //#endregion + //#region src/client/index.ts + const inject = ["slots"]; + const PANEL = "layerfs"; + function apply(ctx) { + const directories = () => ctx.get("uiWorkspace"); + ctx.slots.inject("conversation.view", () => ctx.slots.register({ + name: "conversation.view", + id: "layerfs", + order: 20, + label: () => "Work", + inject: (sessionId) => ({ + sessionId, + directories, + pane: "work" + }) + }, LayerFsView)); + ctx.slots.inject("conversation.view", () => ctx.slots.register({ + name: "conversation.view", + id: "layerfs-history", + order: 21, + label: () => "History", + inject: (sessionId) => ({ + sessionId, + directories, + pane: "history" + }) + }, LayerFsView)); + if (typeof document !== "undefined") ctx.effect?.(() => markLayerFsTabs(document, { + work: "Work", + history: "History" + }), "layerfs-client: the Work and History tab group"); + const services = () => ({ + workspaces: ctx.get("workspaces"), + uiWorkspace: ctx.get("uiWorkspace") + }); + let remote; + const demoServices = () => ({ + remote, + uiWorkspace: ctx.get("uiWorkspace"), + workspaces: ctx.get("workspaces"), + uiSession: ctx.get("uiSession") + }); + ctx.slots.inject("conversation.input.dock", () => ctx.slots.register({ + name: "conversation.input.dock", + id: "layerfs-demo", + order: 5, + inject: (sessionId) => ({ + sessionId, + services: demoServices + }) + }, DemoStrip)); + ctx.inject([ + "remote", + "remote.session", + "remote.workspace" + ], (scope) => { + remote = scope.remote; + let unlock = null, up = true; + scope.effect(() => () => { + remote = void 0; + up = false; + unlock?.(); + }, "layerfs-client: demo Remote services"); + demoApi.info().then((info) => info && ensureDemoSessions(demoServices(), info)).then((workspaceId) => { + if (workspaceId && up) unlock = lockDemoWorkspace(workspaceId); + }).catch((error) => { + console.warn("layerfs-client: demo Sessions were not made:", error); + }); + }); + let usePreset; + ctx.inject(["remote", "remote.agentPresets"], (scope) => { + usePreset = (sessionId, preset) => scope.remote.agentPresets.select(sessionId, preset); + scope.effect(() => () => { + usePreset = void 0; + }, "layerfs-client: the agent preset service"); + }); + ctx.slots.inject("conversation.hero.options", () => ctx.slots.register({ + name: "conversation.hero.options", + id: "layerfs-project", + order: 50, + label: () => "LayerFS project", + inject: (sessionId) => ({ + sessionId, + directories, + usePreset: () => usePreset + }) + }, ProjectPicker)); + ctx.slots.inject("main", () => ctx.slots.register({ + name: "main", + key: PANEL, + inject: () => ({ services }) + }, LayerFsPanel)); + ctx.slots.inject("sidebar.panellist", () => ctx.slots.register({ + name: "sidebar.panellist", + id: PANEL, + order: 40, + label: () => "LayerFS" + }, LayerFsIcon)); + } + //#endregion + exports.apply = apply; + exports.inject = inject; + return module.exports; + } +}); + +//# sourceMappingURL=client.js.map \ No newline at end of file diff --git a/dsh/packages/client/lib/client.js.map b/dsh/packages/client/lib/client.js.map new file mode 100644 index 0000000000..5a56e6094a --- /dev/null +++ b/dsh/packages/client/lib/client.js.map @@ -0,0 +1 @@ +{"version":3,"file":"client.js","names":["POLL_MS","call","quote","RULE","clock","ratio","line","button","POLL_MS","Button","IconRefreshOutlineRegular","IconPlayOutlineRegular","POLL_MS","UNITS","POLL_MS","Button","line","muted","button","bubbleOf","line","createView","RECENT_S","CAP","POSES","EMPTY","createView","X.agentsOn","X.mounted","X.conflicted","X","LOGO","idle","where","X.where","X.idle","X.visibleTabs","X.conflicted","X.agentsOn","X.recentlyOn","X.retired","X.locKey","M","CSS","ellen","m2","m3","m4","m5","m6","m7","m8","m9","m11","m12","m13","X.ReplayEngine","X.derive","X.storyView","Button","POLL_MS","FM","M","button","ellen","IconRefreshOutlineRegular","IconTrashOutlineRegular","IconPlusOutlineRegular","Menu","Button","IconEllipsisOutlineRegular","X.endLines","X.runStep","MARK","RULE","RUNTIME_MS","FM","M","X.ReplayEngine","X.storyView","X.locKey","X.where","MARK","RULE","Menu","IconPlusOutlineRegular","IconFolderOpenOutlineRegular","IconChevronDownOutlineRegular"],"sources":["../src/client/api.ts","../src/client/demo.ts","../src/client/lockdown.ts","../src/client/Progress.tsx","../src/client/Checkpoints.tsx","../src/client/DemoStrip.tsx","../../../sim/avatars/ellen_joe.gif","../src/client/tokens.ts","../src/client/runtimeParts.tsx","../src/client/storage.ts","../src/client/AllSandboxes.tsx","../src/client/InitDialog.tsx","../../../sim/simulation_engine/model.js","../../../sim/simulation_engine/files.js","../../model/src/terminals.js","../../model/src/cli.js","../../model/src/derive.js","../../model/src/attribution.js","../../model/src/where.js","../../model/src/pose.js","../../model/src/fanout.js","../../model/src/mirror.js","../../model/src/sources/trace.js","../../model/src/events.js","../../model/src/sources/story.js","../../model/src/sources/records.js","../../model/src/index.js","../../view/src/fileicons.js","../../view/src/util.js","../../view/src/highlight.js","../../view/src/files.js","../../view/src/cast.js","../../view/src/skins/maids/voice.js","../../view/src/tree.js","../../view/src/treezoom.js","../../view/src/history.js","../../view/src/view.js","../../view/src/filesource.js","../../view/src/skins/heroes/style.js","../../view/src/skins/maids/style.js","../../view/src/style.js","../../view/src/skins/maids/cast.js","../../../sim/avatars/11.png","../../../sim/avatars/12.png","../../../sim/avatars/13.png","../../../sim/avatars/2.png","../../../sim/avatars/3.png","../../../sim/avatars/4.png","../../../sim/avatars/5.png","../../../sim/avatars/6.png","../../../sim/avatars/7.png","../../../sim/avatars/8.png","../../../sim/avatars/9.png","../../../sim/avatars/ellen_joe.png","../../../sim/avatars/heads.png","../src/client/avatars.ts","../src/client/replay.ts","../src/client/SandboxesTab.tsx","../src/client/theme.ts","../src/client/ProjectBoard.tsx","../src/client/RemoveDialog.tsx","../src/client/LayerFsPanel.tsx","../src/client/ui.ts","../src/client/Setup.tsx","../src/client/playback.ts","../src/client/composer.ts","../src/client/LayerFsView.tsx","../src/client/ProjectPicker.tsx","../src/client/tablogo.ts","../src/client/index.ts"],"sourcesContent":["// The Host's /layerfs route, from the page that dsh web or Desktop serves\n// (same origin, its session cookie).\n/** `empty`: started with nothing in it; `source` was a temporary empty folder. */\nexport interface Project { name: string, source: string, volume: string, created: number, empty?: boolean }\n/**\n * inspect.snapshot through the Host's mirror (labelled state, labels by real\n * id), with what the session journals add: who made each node, when each\n * Layer was published (by real id) and when each Branch was forked (by name).\n */\nexport interface ProjectState { s: any, labels: Record, authors: Record, times: Record, forks: Record, /** History alone (readProject): the full state with its Workspaces follows */ historyOnly?: boolean }\nexport interface SessionView {\n session: string\n root: string\n folder: string | null\n choice: { project: string | null, locked: boolean } | null\n project: Project | null\n choices: { projects: Project[], lastUsed: string | null }\n lines: any[]\n running: any[]\n agents: Record\n}\n/** `empty`: this Host makes new empty projects (an older one would import the folder instead). */\nexport interface Status { configured: boolean, missing: string[], empty?: boolean }\n/** A project's Store as LayerFS reports it, with what Init recorded and each recent Commit's cost (Host storage.js). */\nexport interface Storage {\n store: { logical: number, canonical: number, stored: number, metadata: number, file: number, free: number, dedupe: number | null, compression: number | null }\n init: { entries: number, files: number, bytes: number, canonical: number, stored: number, metadata: number, millis: number } | null\n commits: { id: string, time: number, message: string | null, via: string, logical: number, newCanonical: number, newStored: number, newMetadata: number }[]\n branches: number\n partial: boolean\n}\n/** ok, degraded (worth a look) or down; a part's level is its worst part's (Host runtime.js). */\nexport type Level = 'ok' | 'degraded' | 'down'\n/** One mounted Workspace of a project Sandbox: who mounted it and what it holds now. */\nexport interface RuntimeWorkspace {\n path: string, branch: string | null, activity: string | null, uncommitted: number, stale: boolean, pendingMerge: boolean\n agent: string | null, mountedAt: number | null, idleMs: number | null, busy: boolean\n processes: { id: string, command: string, status: string }[], level: Level\n}\n/** A project's Sandboxes for its Sandboxes tab (GET /project//runtime). */\nexport interface ProjectRuntime {\n project: string, simulated: boolean, level: Level\n sandboxes: ({ id: string, name: string | null, capacity: number, workspaces: RuntimeWorkspace[], level: Level } & SandboxImage)[]\n gone: ({ id: string, name: string | null } & SandboxImage)[]\n /** the daemons have not answered yet: Sandboxes from Docker and a ping, Workspaces from the agents' traces */\n pending?: boolean\n}\n/** The image a Sandbox runs: its exact digest and first tag (Host runtime.js); one project's Sandboxes may differ. */\nexport interface SandboxImage { image: string | null, imageName?: string | null }\n/** A Sandbox's image as shown: its tag, else the digest's first 12 hex digits. */\nexport const imageLabel = (s: SandboxImage) => s.imageName ?? (s.image ? s.image.replace(/^sha256:/, '').slice(0, 12) : null)\n/** Every project's Sandboxes and the shared parts (GET /runtime). */\nexport interface Overview {\n level: Level\n engine: { level: Level, version?: string, error?: string }\n store: { level: Level, state: 'running' | 'stopped' | 'missing' | 'unknown', name: string, build?: string, expected?: string, startedAt?: string, answering?: boolean } | null\n /** agents' LayerFS calls running now, in any project: a Store restart cuts them off */\n calls: number\n disk: { host: number | null, vm: number | null }\n projects: { name: string, simulated: boolean, containers: number, sandboxes: ({ id: string, name: string | null, used: number, capacity: number, level: Level } & SandboxImage)[], workspaces: number, level: Level, note: string | null }[]\n leftovers: { name: string, project: string, running: boolean, status: string }[]\n totals: { projects: number, sandboxes: number, workspaces: number }\n}\nexport interface Counts { entries: number, files: number, bytes: number }\n/** A running or ended Init on the Host (jobs.js). */\nexport interface InitJob {\n id: string\n name: string\n source: string\n started: number\n step: 'scan' | 'volume' | 'import' | 'done' | 'failed'\n scanned: Counts | null\n totals: Counts | null\n /** LayerFS's own counts while it imports (SDK operator project.progress). */\n imported: { step: 'scan' | 'files' | 'tree' | 'publish' | 'seal', entries: number, files: number, bytes: number } | null\n project: Project | null\n error: { code: string, message: string } | null\n}\nconst POLL_MS = 300\nconst pause = (ms: number) => new Promise((resolve) => setTimeout(resolve, ms))\n\n/** Starts an Init and reads its job until it ends; `onProgress` sees each read. `empty`: a new empty project with a random name. */\nasync function init(folder: string, name?: string, source?: string, onProgress: (job: InitJob) => void = () => {}, empty = false): Promise<{ project: Project }> {\n let { job } = await call<{ job: InitJob }>('POST', '/init', { folder, name, source, ...(empty ? { empty } : {}) })\n for (;;) {\n onProgress(job)\n if (job.step === 'done') return { project: job.project! }\n if (job.step === 'failed') throw Object.assign(new Error(job.error!.message), { code: job.error!.code })\n await pause(POLL_MS)\n job = (await call<{ job: InitJob }>('GET', `/init/${encodeURIComponent(job.id)}`)).job\n }\n}\n\nasync function call(method: string, path: string, body?: unknown): Promise {\n const res = await fetch(`/layerfs${path}`, {\n method,\n credentials: 'same-origin',\n headers: body === undefined ? undefined : { 'content-type': 'application/json' },\n body: body === undefined ? undefined : JSON.stringify(body),\n })\n const text = await res.text()\n let data: any = null\n try { data = text ? JSON.parse(text) : null } catch { /* not JSON */ }\n if (!res.ok) throw Object.assign(new Error(data?.message ?? `LayerFS answered ${res.status}`), { code: data?.code, status: res.status })\n return data as T\n}\n\nconst sid = (id: string) => encodeURIComponent(id)\n\n/**\n * Reads a project progressively: its History from the Store first (quick; no\n * Sandbox asked), then the whole state with its Workspaces, which replaces it.\n * `fail` runs only when neither read answers. Returns a stop function.\n */\nexport function readProject(name: string, show: (state: ProjectState) => void, fail: (message: string) => void): () => void {\n let stopped = false, full = false\n const history = api.projectHistory(name).then((s) => { if (!stopped && !full) show({ ...s, historyOnly: true }) })\n api.projectState(name).then(\n (s) => { full = true; if (!stopped) show(s) },\n (e: Error) => { history.catch(() => { if (!stopped) fail(e.message) }) },\n )\n history.catch(() => {})\n return () => { stopped = true }\n}\nconst filesQuery = (query: Record) => new URLSearchParams(Object.entries(query).map(([k, v]) => [k, String(v)])).toString()\n\nexport const api = {\n status: () => call('GET', '/status'),\n workspace: (folder: string) => call<{ projects: Project[], lastUsed: string | null }>('GET', `/workspace?folder=${encodeURIComponent(folder)}`),\n session: (id: string) => call('GET', `/session/${sid(id)}`),\n choose: (id: string, project: string | null) => call('POST', `/session/${sid(id)}/project`, { project }),\n init,\n projects: () => call<{ projects: Project[], defaults: Record }>('GET', '/projects'),\n setDefault: (folder: string, project: string) => call<{ projects: Project[], lastUsed: string | null }>('POST', '/workspace', { folder, project }),\n projectState: (name: string) => call('GET', `/project/${encodeURIComponent(name)}/state`),\n /** The project's History alone, from its Store, without waiting on its Sandboxes. */\n projectHistory: (name: string) => call('GET', `/project/${encodeURIComponent(name)}/history`),\n projectStorage: (name: string) => call('GET', `/project/${encodeURIComponent(name)}/storage`),\n /** One Files read of saved ids (the Host's reads.js): list, read, changes or diff. */\n projectFiles: (name: string, kind: string, query: Record) => call('GET', `/project/${encodeURIComponent(name)}/${kind}?${filesQuery(query)}`),\n /** stopSandboxes: stop the project's running Sandboxes instead of refusing (a demo's own project) */\n remove: (name: string, stopSandboxes = false) => call<{ removed: string, volume: string }>('POST', `/project/${encodeURIComponent(name)}/remove`, { confirm: name, stopSandboxes }),\n files: (id: string, kind: string, query: Record) => call('GET', `/session/${sid(id)}/${kind}?${filesQuery(query)}`),\n overview: () => call('GET', '/runtime'),\n startStore: () => call('POST', '/runtime/store'),\n restartStore: () => call('POST', '/runtime/store/restart', { confirm: 'restart' }),\n cleanLeftovers: (names: string[]) => call<{ results: { name: string, ok: boolean, message?: string }[] }>('POST', '/runtime/leftovers', { names }),\n projectRuntime: (name: string) => call('GET', `/project/${encodeURIComponent(name)}/runtime`),\n /** unmount (nothing uncommitted), discard (confirm: the path) or stop a process */\n runtimeAction: (name: string, body: { action: 'unmount' | 'discard' | 'stop', sandbox?: string, path?: string, process?: string, confirm?: string }) =>\n call('POST', `/project/${encodeURIComponent(name)}/runtime`, body),\n}\n","// The demo workspace: one Session per scenario of the dsh-layerfs-demo\n// bundle, read from the Host's /layerfs-demo route (absent without the\n// bundle). Play gives a demo a fresh run in a new Session that takes the old\n// one's place: the old Session is archived (its work stopped), the demo's\n// project is Inited again from the workspace folder (on LayerFS, or on the\n// simulator for Sim), and the new Session gets the preset, the scenario's\n// mock model, the project and the first message. A replayed run's demo\n// (`live`) plays on LayerFS only, Inits from its own seed folder and gives its\n// Sandboxes its own image.\nimport { api, type InitJob } from './api.ts'\n\nexport type DemoMode = 'live' | 'sim'\n/** A run's progress, from the mock model's replies (mock/src/progress.js). */\nexport interface DemoRun { root: string, state: 'running' | 'done' | 'stopped', done: number, of: number, phase: string | null, error: string | null, started: number, ended: number | null, journal?: boolean }\n/**\n * A checkpoint of the demo's scenario (#352): reachedAt is when the latest run\n * reached it, restored whether that run started after it; resumable whether a\n * run can start after it.\n */\nexport interface DemoCheckpoint { label: string, verdict: 'pass' | 'watch' | 'optimize' | 'stop', note: string | null, resumable: boolean, reachedAt: number | null, restored: boolean }\nexport interface Demo { id: string, title: string, blurb: string | null, agents: string[], speed: number, live: boolean, image: string | null, seed: string | null, seedError?: string, sessionId: string | null, run: DemoRun | null, checkpoints?: DemoCheckpoint[] }\nexport interface DemoInfo { workspace: string, preset: string, provider: string, prompt: string, intro: string, demos: Demo[] }\n\n/** What Play and the Session check use of dsh's Client services (read with ctx.get). */\nexport interface DemoServices {\n remote?: {\n session: {\n create(request: { workspaceId?: string, agentPreset?: string }): Promise>\n rename(request: { sessionId: string, title: string }): Promise>\n selectModel(request: { sessionId: string, provider: string, model: string }): Promise>\n prompt(request: { requestId: string, sessionId: string, mode: 'queue', content: { type: 'text', text: string }[] }): Promise>\n }\n workspace: {\n create(request: { path: string }): Promise>\n archiveSession(request: { sessionId: string, stopActivity?: boolean }): Promise>\n unarchiveSession(request: { sessionId: string }): Promise>\n insertSessionBefore(request: { workspaceId: string, sessionId: string, beforeSessionId?: string }): Promise>\n }\n }\n uiWorkspace?: { openSession(sessionId: string): void }\n /** dsh's Workspace list, for its archived Sessions */\n workspaces?: { list: { getSnapshot(): WorkspaceList, subscribe(listener: () => void): () => void } }\n /** dsh's Session status, for whether a run's root Session still runs */\n uiSession?: { sessionStatus: { getSnapshot(): ReadonlyMap, subscribe(listener: () => void): () => void } }\n}\ninterface WorkspaceList { phase?: 'pending' | 'ready', archivedSessionIds?: readonly string[] }\n\n/** The archived Sessions, once dsh's Workspace list has arrived (none after 5 s without it). */\nfunction archived(services: DemoServices): Promise> {\n const list = services.workspaces?.list\n if (!list) return Promise.resolve(new Set())\n return new Promise((resolve) => {\n let stop = () => {}\n const done = () => { stop(); clearTimeout(timer); resolve(new Set(list.getSnapshot().archivedSessionIds ?? [])) }\n const timer = setTimeout(done, 5000)\n if (list.getSnapshot().phase !== 'pending') return done()\n stop = list.subscribe(() => { if (list.getSnapshot().phase !== 'pending') done() })\n })\n}\ninterface Workspace { workspaceId: string, path: string, sessionIds?: readonly string[] }\ntype Result = { ok: true, value: T } | { ok: false, error: { code?: string, message?: string } }\n\nasync function call(method: string, path: string, body?: unknown): Promise {\n const res = await fetch(`/layerfs-demo${path}`, {\n method,\n credentials: 'same-origin',\n headers: body === undefined ? undefined : { 'content-type': 'application/json' },\n body: body === undefined ? undefined : JSON.stringify(body),\n })\n const text = await res.text()\n let data: any = null\n try { data = text ? JSON.parse(text) : null } catch { /* not JSON */ }\n if (!res.ok) throw Object.assign(new Error(data?.message ?? `the demo route answered ${res.status}`), { code: data?.code, status: res.status })\n return data as T\n}\n\nexport const demoApi = {\n /** null when the dsh-layerfs-demo bundle is not installed */\n info: () => call('GET', '').catch((error) => { if (error.status === 404) return null; throw error }),\n demo: (id: string) => call('GET', `/${encodeURIComponent(id)}`),\n setSession: (id: string, sessionId: string) => call('POST', `/${encodeURIComponent(id)}/session`, { sessionId }),\n /** how fast the mock plays the demo from now on (mock/src/pace.js) */\n setSpeed: (id: string, speed: Speed) => call('POST', `/${encodeURIComponent(id)}/speed`, { speed }),\n}\n\n/** A demo's run speeds: a multiple of the scenario's pauses and typing, or 0 for none (Max). */\nexport const SPEEDS = [1, 2, 4, 0] as const\nexport type Speed = typeof SPEEDS[number]\nexport const speedLabel = (speed: number) => (speed ? `${speed}×` : 'Max')\n\n/** Inits `name` from `source` for `folder` (Live, with `image` when given) or into the simulator (Sim) and reads its job until it ends, as api.init. */\nasync function initProject(folder: string, source: string, name: string, mode: DemoMode, image: string | null, onJob: (job: InitJob) => void): Promise {\n const request = async (method: string, path: string, body?: unknown): Promise<{ job: InitJob }> => {\n const res = await fetch(`/layerfs${path}`, { method, credentials: 'same-origin', headers: body ? { 'content-type': 'application/json' } : undefined, body: body ? JSON.stringify(body) : undefined })\n const data = await res.json().catch(() => null)\n if (!res.ok) throw Object.assign(new Error(data?.message ?? `the LayerFS route answered ${res.status}`), { code: data?.code, status: res.status })\n return data\n }\n let { job } = await request('POST', '/init', { folder, name, source, ...(mode === 'sim' ? { backend: 'sim' } : image ? { image } : {}) })\n for (;;) {\n onJob(job)\n if (job.step === 'done') return\n if (job.step === 'failed') throw Object.assign(new Error(job.error!.message), { code: job.error!.code })\n await new Promise((resolve) => setTimeout(resolve, 300))\n job = (await request('GET', `/init/${encodeURIComponent(job.id)}`)).job\n }\n}\n\n/** The demo's project for a mode: one per demo and mode, Inited again on each Play. */\nexport const projectOf = (id: string, mode: DemoMode) => (mode === 'sim' ? `demo-${id}-sim` : `demo-${id}`)\n\nconst value = (what: string, result: Result): T => {\n if (result.ok) return result.value\n throw Object.assign(new Error(`${what}: ${result.error.message ?? result.error.code ?? 'refused'}`), { code: result.error.code })\n}\n\n/** The demo workspace's dsh Workspace with its current Sessions; registering answers the existing one. */\nasync function workspaceOf(services: DemoServices, info: DemoInfo): Promise {\n return value('register the demo workspace', await services.remote!.workspace.create({ path: info.workspace })).workspace\n}\n\n/** A new Session in the demo workspace for `demo`, named after it, at `before`'s place. */\nasync function newSession(services: DemoServices, info: DemoInfo, workspace: Workspace, demo: Demo, before?: string): Promise {\n const { session, workspace: workspaces } = services.remote!\n const { sessionId } = value('create the Session', await session.create({ workspaceId: workspace.workspaceId, agentPreset: info.preset }))\n value('name the Session', await session.rename({ sessionId, title: demo.title }))\n value('choose the mock model', await session.selectModel({ sessionId, provider: info.provider, model: demo.id }))\n if (before) value('place the Session', await workspaces.insertSessionBefore({ workspaceId: workspace.workspaceId, sessionId, beforeSessionId: before }))\n return sessionId\n}\n\nconst send = async (services: DemoServices, sessionId: string, text: string) =>\n value('send the first message', await services.remote!.session.prompt({ requestId: crypto.randomUUID(), sessionId, mode: 'queue', content: [{ type: 'text', text }] }))\n\n/**\n * Gives every demo a Session in the demo workspace: one is made for each demo\n * whose recorded Session is not in the workspace (never made, archived or\n * removed). Made in reverse so the list reads in scenario order. Each opens\n * with the intro question, which the mock model answers with what the demo\n * shows: the sidebar lists no Session before its first turn.\n * @returns the demo workspace's dsh Workspace id, or null without the Remote services\n */\nexport async function ensureDemoSessions(services: DemoServices, info: DemoInfo): Promise {\n if (!services.remote) return null\n const workspace = await workspaceOf(services, info), gone = await archived(services)\n const present = new Set((workspace.sessionIds ?? []).filter((id) => !gone.has(id)))\n for (const demo of [...info.demos].reverse()) {\n if (demo.sessionId && present.has(demo.sessionId)) continue\n const sessionId = await newSession(services, info, workspace, demo)\n await demoApi.setSession(demo.id, sessionId)\n await send(services, sessionId, info.intro)\n }\n return workspace.workspaceId\n}\n\n/** The step Play is on, for the strip. */\nexport type PlayStep = { step: 'session' } | { step: 'stop' } | { step: 'init', job: InitJob | null } | { step: 'start' }\n\n/**\n * Plays `demo` from scratch in a new Session (dsh cannot empty one), which\n * becomes the demo's only once the run starts. In order: the new Session is\n * made at the current one's place (the sidebar lists it only from its first\n * message); the current one is archived with its work stopped; the demo's\n * projects are removed (their leftover Sandboxes stopped) and its project for\n * the mode Inited again; then the new Session is recorded, sent the first\n * message and opened. Each step is attempted once. On a failure before the\n * run starts, the current Session is unarchived and stays the demo's, the new\n * one is archived, and Play ends with the failure's message. With\n * `startAfter`, a checkpoint's label (#352), the run starts after it.\n * @returns the new Session's id\n */\nexport async function playDemo(services: DemoServices, info: DemoInfo, demo: Demo, mode: DemoMode, onStep: (step: PlayStep) => void, startAfter: string | null = null): Promise {\n if (!services.remote) throw new Error('this client has no Remote session services')\n if (demo.live) mode = 'live'\n if (demo.seedError) throw new Error(`the demo's seed: ${demo.seedError}`)\n const { workspace: workspaces } = services.remote\n const workspace = await workspaceOf(services, info)\n onStep({ step: 'session' })\n const previous = demo.sessionId ?? undefined\n const sessionId = await newSession(services, info, workspace, demo, previous)\n let archived = false\n try {\n onStep({ step: 'stop' })\n if (previous) { value('stop the previous run', await workspaces.archiveSession({ sessionId: previous, stopActivity: true })); archived = true }\n // a stopped run leaves the Sandboxes it kept open: the demo's own projects go with theirs\n for (const name of [projectOf(demo.id, 'live'), projectOf(demo.id, 'sim')]) {\n await api.remove(name, true).catch((error) => { if (error.status !== 404) throw error })\n }\n onStep({ step: 'init', job: null })\n const project = projectOf(demo.id, mode)\n await initProject(info.workspace, demo.seed ?? info.workspace, project, mode, demo.image, (job) => onStep({ step: 'init', job }))\n await api.choose(sessionId, project)\n await demoApi.setSession(demo.id, sessionId)\n } catch (error) {\n // the demo stays on its current Session; the unused new one goes\n if (archived) await workspaces.unarchiveSession({ sessionId: previous! }).catch(() => {})\n await workspaces.archiveSession({ sessionId }).catch(() => {})\n throw error\n }\n onStep({ step: 'start' })\n // a run that starts after a checkpoint says so in its first message (mock/src/plan.js)\n await send(services, sessionId, startAfter ? `${info.prompt.replace(/\\.$/, '')} from after ${startAfter}.` : info.prompt)\n services.uiWorkspace?.openSession(sessionId)\n return sessionId\n}\n","// The demo workspace's Sessions belong to their demos (Play replaces them),\r\n// so dsh's controls that add, fork, archive, pin, rename or move one are\r\n// hidden for them, and the workspace's folder row is drawn apart from other\r\n// workspaces. dsh has no per-workspace setting for these: a stylesheet keyed\r\n// to the sidebar's row keys (data-row-key) and the chat's Session\r\n// (data-conversation-session) hides them, and the Session shortcuts are\r\n// stopped before dsh reads them while a demo Session is open.\r\nimport { useEffect } from 'react'\r\n\r\nconst quote = (text: string) => JSON.stringify(text)\r\n// dsh's CSS module classes keep their local name after a hash prefix (UCFH7G_rowActions)\r\nconst part = (name: string) => `[class*=${quote(`_${name}`)}]`\r\n// the chat's Branch button, by its label in dsh's English and Chinese dictionaries\r\nconst BRANCH = ['Branch into a new conversation', '在新对话中分支']\r\n\r\nfunction addStyle(text: string): () => void {\r\n const style = document.createElement('style')\r\n style.textContent = text\r\n document.head.append(style)\r\n return () => style.remove()\r\n}\r\n\r\n/**\r\n * Hides the demo workspace's sidebar row actions (New session, the\r\n * workspace's menu, each Session's menu, Archive and Pin), its Sessions'\r\n * rename by double-click and their drag, and marks its folder row.\r\n * @param workspaceId the demo workspace's dsh Workspace id\r\n * @returns removes the stylesheet\r\n */\r\nexport function lockDemoWorkspace(workspaceId: string): () => void {\r\n const row = `[data-row-key=${quote(`workspace:${workspaceId}`)}]`\r\n // the workspace's section: its row and its Session rows, each in a span of their own\r\n const sessions = `div:has(> span > ${row}) [data-row-key^=\"session:\"]`\r\n const accent = '#7c5cff', accent2 = '#00a3a3'\r\n return addStyle(`\r\n${row} ${part('rowActions')}, ${sessions} ${part('rowActions')} { display: none !important; }\r\n${sessions} ${part('title')} { pointer-events: none; }\r\n${sessions} { -webkit-user-drag: none; }\r\n${row} {\r\n border-radius: 8px;\r\n background: linear-gradient(90deg, color-mix(in srgb, ${accent} 20%, transparent), color-mix(in srgb, ${accent2} 8%, transparent));\r\n box-shadow: inset 0 0 0 1px color-mix(in srgb, ${accent} 40%, transparent);\r\n}\r\n${row} ${part('folder')} { color: ${accent}; }\r\n${row} ${part('projectText')} { flex-direction: row; align-items: center; gap: 6px; }\r\n${row} ${part('title')} { font-weight: 600; }\r\n${row} ${part('projectText')}::after {\r\n content: \"DEMO\"; flex: none; padding: 1px 5px; border-radius: 4px;\r\n font-size: 9px; font-weight: 700; letter-spacing: 0.08em; line-height: 14px; color: #fff;\r\n background: linear-gradient(90deg, ${accent}, ${accent2});\r\n}\r\n`)\r\n}\r\n\r\n// dsh's Session shortcuts (ui-workspace shortcuts.ts), desktop and web\r\n// bindings both: fork F, archive A and rename G, with the primary key and Alt or Shift\r\nconst SHORTCUT = /^Key[FAG]$/\r\nconst blocked = (e: KeyboardEvent) => (e.metaKey || e.ctrlKey) && SHORTCUT.test(e.code)\r\n && (e.altKey || (e.shiftKey && e.code !== 'KeyG'))\r\n\r\n/**\r\n * While a demo Session is open: hides the chat's Branch buttons in it and\r\n * stops the fork, archive and rename shortcuts.\r\n * @param sessionId the demo Session, or null for none\r\n */\r\nexport function useDemoSessionLock(sessionId: string | null): void {\r\n useEffect(() => {\r\n if (!sessionId) return\r\n const chat = `[data-conversation-session=${quote(sessionId)}]`\r\n const removeStyle = addStyle(`${BRANCH.map((label) => `${chat} button[aria-label=${quote(label)}]`).join(', ')} { display: none !important; }`)\r\n const stop = (e: KeyboardEvent) => { if (blocked(e)) { e.preventDefault(); e.stopImmediatePropagation() } }\r\n window.addEventListener('keydown', stop, true)\r\n return () => { removeStyle(); window.removeEventListener('keydown', stop, true) }\r\n }, [sessionId])\r\n}\r\n","// An Init's progress: one line of text and a bar. While the Host counts the\r\n// source and makes the volume the bar moves without a fraction; while LayerFS\r\n// imports, its counts over the Host's totals fill it (jobFraction).\r\nimport { useEffect, useState } from 'react'\r\nimport type { InitJob } from './api.ts'\r\n\r\nconst RULE = `@keyframes lfs-progress { from { left: -40%; } to { left: 100%; } }`\r\n\r\n// in place before any bar paints: a bar that paints before its keyframes exist does not move\r\nif (typeof document !== 'undefined' && !document.getElementById('lfs-progress-rule')) {\r\n const style = document.createElement('style')\r\n style.id = 'lfs-progress-rule'\r\n style.textContent = RULE\r\n document.head.append(style)\r\n}\r\n\r\nconst number = new Intl.NumberFormat()\r\nexport function size(bytes: number) {\r\n const units = ['B', 'KB', 'MB', 'GB', 'TB']\r\n let n = bytes, unit = 0\r\n while (n >= 1024 && unit < units.length - 1) { n /= 1024; unit++ }\r\n return `${unit ? n.toFixed(n < 10 ? 1 : 0) : n} ${units[unit]}`\r\n}\r\nconst clock = (ms: number) => { const s = Math.floor(ms / 1000); return `${Math.floor(s / 60)}:${String(s % 60).padStart(2, '0')}` }\r\n\r\n/**\r\n * Where each of LayerFS's Init steps sits on the bar. Constructing the files\r\n * is most of the work; within it, each file weighs its bytes plus FILE_COST,\r\n * so a tree of many small files still moves.\r\n */\r\nconst SPANS = { scan: [0, 0.15], files: [0.15, 0.95], tree: [0.95, 0.98], publish: [0.98, 0.99], seal: [0.99, 1] } as const\r\nconst FILE_COST = 4096\r\nconst ratio = (done: number, total: number) => (total > 0 ? Math.min(1, done / total) : 1)\r\n\r\n/** How much of the Init is done (0–1), or null while there is nothing to measure against. */\r\nexport function jobFraction(job: InitJob): number | null {\r\n if (job.step === 'done') return 1\r\n if (job.step !== 'import' || !job.imported || !job.totals) return null\r\n const { step, entries, files, bytes } = job.imported, totals = job.totals\r\n const within = step === 'scan' ? ratio(entries, totals.entries)\r\n : step === 'files' ? ratio(bytes + files * FILE_COST, totals.bytes + totals.files * FILE_COST)\r\n : 0\r\n const [from, to] = SPANS[step]\r\n return from + (to - from) * within\r\n}\r\n\r\n/** One line for a job: its step, what was counted or done, how long it has run. */\r\nexport function jobText(job: InitJob, now = Date.now()) {\r\n const elapsed = clock(Math.max(0, now - job.started))\r\n const fraction = jobFraction(job)\r\n const t = job.totals, i = job.imported\r\n if (job.step === 'import' && i && t) {\r\n const of = (done: number, total: number) => `${number.format(Math.min(done, total))} of ${number.format(total)}`\r\n const what = {\r\n scan: `Scanning ${of(i.entries, t.entries)} entries`,\r\n files: `Importing ${of(i.files, t.files)} files · ${size(Math.min(i.bytes, t.bytes))} of ${size(t.bytes)}`,\r\n tree: 'Building the file tree',\r\n publish: 'Publishing the first Layer',\r\n seal: 'Sealing the Store',\r\n }[i.step]\r\n return [`${Math.floor(fraction! * 100)}%`, what, elapsed].join(' · ')\r\n }\r\n const counts = t ?? job.scanned\r\n const what = counts ? `${number.format(counts.files)} files · ${size(counts.bytes)}` : ''\r\n const step = { scan: 'Counting files', volume: 'Creating the volume', import: 'Importing', done: 'Imported', failed: 'Failed' }[job.step]\r\n return [step, what, elapsed].filter(Boolean).join(' · ')\r\n}\r\n\r\n/** A thin bar: `fraction` fills it (0–1); null moves a segment across it. */\r\nexport function ProgressBar({ fraction, height = 4 }: { fraction: number | null, height?: number }) {\r\n return (\r\n
\r\n
\r\n
\r\n )\r\n}\r\n\r\n/** Re-renders every second so the elapsed time moves between reads. */\r\nexport function useClock(running: boolean) {\r\n const [now, setNow] = useState(Date.now())\r\n useEffect(() => {\r\n if (!running) return\r\n const timer = setInterval(() => setNow(Date.now()), 1000)\r\n return () => clearInterval(timer)\r\n }, [running])\r\n return now\r\n}\r\n\r\n/** The job's line over its bar. */\r\nexport function InitProgress({ job }: { job: InitJob }) {\r\n const now = useClock(true)\r\n return (\r\n
\r\n {jobText(job, now)}\r\n \r\n
\r\n )\r\n}\r\n","// The demo strip's checkpoints (#352).\n//\n// Checkpoints: one segment per checkpoint of the demo's scenario, in order,\n// green once the run reached it with its gates passed (a watch is a pass with\n// a note), red where the run stopped at it (optimize or stop), striped and marked ↺ when the run started after\n// it (restored, not replayed), the next one pulsing while the run goes.\n// Clicking a checkpoint a run can start after opens the start picker with it\n// chosen.\n//\n// With more than a dozen checkpoints (#352 has one per range, 202) the\n// segments carry no labels; each names itself on hover.\n//\n// StartPicker: where Play or Replay starts. From the beginning, or after a\n// checkpoint the latest run reached that can be restored: the ranges up to it\n// are restored at once (the mock's `restore` stands in for #352's Store\n// snapshot), and the run plays the next range onwards. It is one row of\n// numbers that scrolls sideways: 0 is the beginning, k is after the k-th\n// checkpoint.\nimport { useEffect, useRef } from 'react'\nimport type { DemoCheckpoint } from './demo.ts'\n\n/** A checkpoint whose gates passed (a watch passes, with a note); optimize and stop halt the run there. */\nexport const passed = (c: DemoCheckpoint) => c.verdict === 'pass' || c.verdict === 'watch'\nconst color = (c: DemoCheckpoint) => (passed(c) ? '#2e9e5b' : '#d14343')\nconst time = (ms: number) => new Date(ms).toLocaleTimeString([], { hour: '2-digit', minute: '2-digit', second: '2-digit' })\nconst stripes = (color: string) => `repeating-linear-gradient(135deg, ${color} 0 4px, color-mix(in srgb, ${color} 35%, transparent) 4px 7px)`\n\n/** The line the strip shows for the checkpoints: how many were reached, and the last one. */\nexport function checkpointText(checkpoints: DemoCheckpoint[]): string {\n const reached = checkpoints.filter((c) => c.reachedAt !== null)\n const restored = reached.filter((c) => c.restored).length\n const last = reached.at(-1)\n return last ? `Checkpoint ${reached.length} of ${checkpoints.length}${restored ? ` (${restored} restored)` : ''} · ${last.label}${passed(last) ? '' : ` · ${last.verdict}`}` : `0 of ${checkpoints.length} checkpoints`\n}\n\n/** The checkpoints a new run can start after: reached by the latest run with its gates passed, and restorable. */\nexport const startable = (checkpoints: DemoCheckpoint[]) => checkpoints.flatMap((c, i) => (c.reachedAt !== null && c.resumable && passed(c) ? [i] : []))\n\n// past this many checkpoints the timeline is segments only; each names itself on hover\nconst LABELED = 12\n\nexport function Checkpoints({ checkpoints, running, onPick }: { checkpoints: DemoCheckpoint[], running: boolean, onPick: (i: number) => void }) {\n const labeled = checkpoints.length <= LABELED\n const next = checkpoints.findIndex((c) => c.reachedAt === null)\n const can = new Set(startable(checkpoints))\n return (\n
\n {checkpoints.map((c, i) => {\n const reached = c.reachedAt !== null, current = running && i === next\n const title = [\n reached ? `${c.label} · ${c.restored ? 'restored' : 'reached'} ${time(c.reachedAt as number)}${passed(c) ? '' : ` · ${c.verdict}`}` : `${c.label} · ${current ? 'in progress' : 'not reached yet'}`,\n reached && c.note && !c.restored ? c.note : null,\n can.has(i) && !running ? 'Click to start a new run after it.' : null,\n ].filter(Boolean).join('\\n')\n return (\n
onPick(i) : undefined}\n style={{ flex: 1, minWidth: 0, display: 'grid', gap: 2, cursor: can.has(i) && !running ? 'pointer' : 'default' }}>\n
\n {labeled ? \n {reached ? (c.restored ? '↺ ' : '✓ ') : ''}{c.label}\n : null}\n
\n )\n })}\n \n
\n )\n}\n\nexport interface StartPickerProps { checkpoints: DemoCheckpoint[], chosen: number | null, onChoose: (i: number | null) => void, onStart: () => void, onCancel: () => void }\n\nconst line = '1px solid color-mix(in srgb, currentColor 18%, transparent)'\nconst button = { border: line, borderRadius: 8, padding: '3px 10px', font: 'inherit', color: 'inherit', background: 'transparent', cursor: 'pointer' } as const\n\n/** Where the next run starts: one sideways-scrolling row of numbers, 0 (the beginning) and each checkpoint it can start after. */\nexport function StartPicker({ checkpoints, chosen, onChoose, onStart, onCancel }: StartPickerProps) {\n const list = useRef(null), chosenRow = useRef(null)\n // only the list scrolls to the chosen number: scrollIntoView would move the composer too\n useEffect(() => {\n const box = list.current, at = chosenRow.current\n if (box && at) box.scrollLeft = at.offsetLeft - (box.clientWidth - at.offsetWidth) / 2\n }, [])\n const row = (i: number | null) => (\n \n )\n return (\n
\n
\n {row(null)}\n {startable(checkpoints).map(row)}\n
\n \n \n
\n )\n}\n","// The demo strip above the composer, in the demo workspace's Sessions only:\n// how far the run got (the mock model's steps of every agent, and the root\n// agent's phase), the run speed (how fast the mock plays it, mock/src/pace.js;\n// it applies to a run under way too), Sim or Live, and Play, which replays the\n// demo in a new Session (demo.ts). A demo with checkpoints (#352) also shows\n// their timeline, and Play or Replay first asks where the run starts: from\n// the beginning or after a checkpoint the latest run reached\n// (Checkpoints.tsx). Other Sessions render nothing.\nimport { useEffect, useState, useSyncExternalStore } from 'react'\nimport { Button, IconPlayOutlineRegular, IconRefreshOutlineRegular } from '@deepseek-ai/dsh-client-ui-primitives'\nimport { api } from './api.ts'\nimport { demoApi, playDemo, SPEEDS, speedLabel, type Demo, type DemoInfo, type DemoMode, type DemoServices, type PlayStep } from './demo.ts'\nimport { useDemoSessionLock } from './lockdown.ts'\nimport { ProgressBar, jobFraction, jobText, useClock } from './Progress.tsx'\nimport { Checkpoints, StartPicker, checkpointText, startable } from './Checkpoints.tsx'\n\n// while a run goes, and slower while waiting for one to start\nconst POLL_MS = 700, IDLE_POLL_MS = 2500\n// a run whose root Session stopped between model requests is never told by\n// the mock model; it reads as stopped once dsh says the Session is not\n// running and no step has played for this long\nconst HALT_MS = 4000\nconst unsubscribed = () => () => {}\n// the last Sim or Live choice, kept in this browser\nconst MODE_KEY = 'layerfs-demo-mode'\nconst savedMode = (): DemoMode => { try { return localStorage.getItem(MODE_KEY) === 'sim' ? 'sim' : 'live' } catch { return 'live' } }\nconst saveMode = (mode: DemoMode) => { try { localStorage.setItem(MODE_KEY, mode) } catch { /* the choice lasts this view only */ } }\nconst clock = (ms: number) => { const s = Math.max(0, Math.floor(ms / 1000)); return `${Math.floor(s / 60)}:${String(s % 60).padStart(2, '0')}` }\n\nconst playText = (step: PlayStep, now: number) => ({\n session: 'Starting a new session…',\n stop: 'Stopping the previous run…',\n init: step.step === 'init' && step.job ? `Preparing the project · ${jobText(step.job, now)}` : 'Preparing the project…',\n start: 'Starting the agents…',\n})[step.step]\n\nexport interface DemoStripProps { sessionId: string, services: () => DemoServices }\n\nexport function DemoStrip({ sessionId, services }: DemoStripProps) {\n const [info, setInfo] = useState(null)\n const [demo, setDemo] = useState(null)\n const [chosen, setMode] = useState(savedMode)\n const [playing, setPlaying] = useState(null)\n const [error, setError] = useState(null)\n // the start picker: closed (null), or open with the chosen checkpoint (-1 = the beginning);\n // Replay opens it on the latest checkpoint a run can start after\n const [picking, setPicking] = useState(null)\n // what Live LayerFS lacks on this host (its image or daemon); null until read\n const [liveMissing, setLiveMissing] = useState(null)\n useEffect(() => {\n let on = true\n api.status().then((s) => { if (on) setLiveMissing(s.configured ? [] : s.missing) }, () => { /* unread: Live stays offered */ })\n return () => { on = false }\n }, [])\n\n useEffect(() => {\n let live = true\n demoApi.info().then((found) => {\n if (!live || !found) return\n setInfo(found)\n setDemo(found.demos.find((d) => d.sessionId === sessionId) ?? null)\n }, () => { /* without the route this Session has no strip */ })\n return () => { live = false }\n }, [sessionId])\n\n const run = demo?.run && demo.run.root === sessionId ? demo.run : null\n const running = run?.state === 'running'\n useEffect(() => {\n if (!demo) return\n const timer = setInterval(() => { demoApi.demo(demo.id).then(setDemo, () => { /* the next read tries again */ }) }, running ? POLL_MS : IDLE_POLL_MS)\n return () => clearInterval(timer)\n }, [demo?.id, running])\n const now = useClock(running || playing !== null)\n useDemoSessionLock(demo ? sessionId : null)\n const status = services().uiSession?.sessionStatus\n const rootRunning = useSyncExternalStore(status?.subscribe ?? unsubscribed, () => status?.getSnapshot().get(sessionId)?.running)\n const [movedAt, setMovedAt] = useState(Date.now)\n useEffect(() => { setMovedAt(Date.now()) }, [run?.done, rootRunning])\n const halted = running && rootRunning === false && now - movedAt > HALT_MS\n\n if (!info || !demo) return null\n // the checkpoints this Session's run reached; none before it runs\n const checkpoints = demo.checkpoints?.length\n ? demo.checkpoints.map((c) => (run ? c : { ...c, reachedAt: null }))\n : null\n // a replayed run's demo plays on Live LayerFS only; a host without Live plays Sim\n const liveOff = !!liveMissing?.length\n const mode: DemoMode = demo.live ? 'live' : liveOff ? 'sim' : chosen\n\n const play = (startAfter: string | null = null) => {\n setError(null)\n setPicking(null)\n setPlaying({ step: 'session' })\n // either way the demo's record is read again at once: its Session and run\n const refresh = () => demoApi.demo(demo.id).then(setDemo, () => { /* the next poll reads it */ })\n playDemo(services(), info, demo, mode, setPlaying, startAfter).then(\n () => { setPlaying(null); void refresh() },\n (failure) => { setPlaying(null); setError(failure instanceof Error ? failure.message : String(failure)); void refresh() },\n )\n }\n\n let fraction: number | null = 0, line: string\n if (playing) {\n fraction = playing.step === 'init' && playing.job ? jobFraction(playing.job) : null\n line = playText(playing, now)\n } else if (run) {\n fraction = run.of ? run.done / run.of : 0\n const steps = `${run.done} of ${run.of} steps${checkpoints ? ` · ${checkpointText(checkpoints)}` : ''}`\n line = halted ? `Stopped · ${steps} · the session is not running`\n : run.state === 'running' ? `${run.phase ?? 'Running'} · ${steps} · ${clock(now - run.started)}`\n : run.state === 'done' ? `Finished · ${steps} · ${clock((run.ended ?? now) - run.started)}`\n : `Stopped · ${run.error ?? ''}`\n } else {\n line = `${demo.agents.length} agent${demo.agents.length === 1 ? '' : 's'} · ready to play`\n }\n\n const choice = (value: DemoMode, label: string) => {\n const off = value === 'live' && liveOff && !demo.live\n return (\n \n )\n }\n const pace = (value: number) => (\n \n )\n return (\n
\n \n {checkpoints ? setPicking(i)} /> : null}\n {checkpoints && picking !== null ? (\n setPicking(i ?? -1)}\n onCancel={() => setPicking(null)} onStart={() => play(picking < 0 ? null : checkpoints[picking].label)} />\n ) : null}\n
\n {error ?? line}\n \n {SPEEDS.map(pace)}\n \n \n {demo.live ? null : choice('sim', 'Sim')}{choice('live', 'Live')}\n \n {/* Replay works mid-run too: the old Session is archived with its work stopped */}\n \n
\n
\n )\n}\n","export default \"data:image/gif;base64,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\"","// dsh's own tokens (--dsw-*) for the LayerFS page, and the 4/8/12/16/24 spacing scale.\nexport const T = {\n text: 'var(--dsw-alias-label-primary)', text2: 'var(--dsw-alias-label-secondary)', caption: 'var(--dsw-alias-label-caption)',\n border: 'var(--dsw-alias-border-l2)', card: 'var(--dsw-alias-bg-layer-1)', well: 'var(--dsw-alias-bg-skeleton)',\n hover: 'var(--dsw-alias-interactive-bg-hover)', active: 'var(--dsw-alias-interactive-bg-active)',\n danger: 'var(--dsw-alias-state-error-primary)', warn: 'var(--dsw-alias-state-warn-primary)', ok: 'var(--dsw-alias-state-success-primary)',\n sm: 'var(--dsw-radius-sm)', md: 'var(--dsw-radius-md)',\n} as const\n// a card: dsh's layer fill (white in light mode) inside a hairline, as dsh's settings cards\nexport const card = { background: T.card, border: `1px solid ${T.border}`, borderRadius: T.md } as const\n","// Small parts the two Sandbox pages share: a level's dot and colour, a\n// capacity meter, durations, and polling while the page is shown.\nimport { useEffect, useRef } from 'react'\nimport type { Level } from './api.ts'\nimport { T } from './tokens.ts'\n\nexport const LEVEL_COLOR: Record = { ok: T.ok, degraded: T.warn, down: T.danger }\nexport const LEVEL_WORD: Record = { ok: 'ok', degraded: 'needs a look', down: 'down' }\n\nexport function Dot({ level, title }: { level: Level, title?: string }) {\n return \n}\n\n/** Used out of capacity, as a thin bar. */\nexport function Meter({ used, capacity }: { used: number, capacity: number }) {\n const share = Math.min(1, used / capacity)\n return (\n \n = capacity ? T.warn : 'var(--dsw-alias-state-business-primary)' }} />\n \n )\n}\n\n/** 40 s, 12 min, 3 h, 2 d. */\nexport function span(ms: number) {\n const s = Math.round(ms / 1000)\n if (s < 60) return `${s} s`\n if (s < 3600) return `${Math.round(s / 60)} min`\n if (s < 86400) return `${Math.round(s / 3600)} h`\n return `${Math.round(s / 86400)} d`\n}\n\n/** `/workspaces/3` → \"WS 3\", as the views name a Workspace. */\nexport const wsName = (path: string) => `WS ${path.slice(path.lastIndexOf('/') + 1)}`\n\n/** Runs `read` now and every `ms` while the page is visible; again when it comes back. */\nexport function usePoll(read: () => void, ms: number, deps: unknown[]) {\n const latest = useRef(read)\n latest.current = read\n useEffect(() => {\n latest.current()\n const timer = setInterval(() => { if (document.visibilityState === 'visible') latest.current() }, ms)\n const back = () => { if (document.visibilityState === 'visible') latest.current() }\n document.addEventListener('visibilitychange', back)\n return () => { clearInterval(timer); document.removeEventListener('visibilitychange', back) }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, deps)\n}\n\nexport const POLL_MS = 10_000\n","// What the LayerFS pages say about a project's Store (api.projectStorage):\n// its size on the status bar, and the figures the view's storage panel draws.\nimport type { ProjectState, Storage } from './api.ts'\n\nconst UNITS = ['B', 'KB', 'MB', 'GB', 'TB']\n\n/** Bytes in the largest unit under 1000, to three significant digits: as the view's storage panel counts them. */\nexport function bytes(n: number) {\n let value = n, unit = 0\n while (value >= 1000 && unit < UNITS.length - 1) { value /= 1000; unit++ }\n return unit === 0 ? `${n} B` : `${value.toFixed(value >= 100 ? 0 : value >= 10 ? 1 : 2)} ${UNITS[unit]}`\n}\n\n/** ×n, to one decimal below 10. */\nexport const times = (n: number) => `×${n.toFixed(n >= 10 ? 0 : 1)}`\n\n/** How many times over the Store's file the history's plain files would fill; null when it saves nothing. */\nexport function saved(z: Storage) {\n const n = z.store.file > 0 ? z.store.logical / z.store.file : 0\n return n > 1 ? n : null\n}\n\n/**\n * store.stats for the board: the Store totals, one plain copy of main's head\n * (its source Commit's logical size; null when main is the Init Layer or that\n * Commit is not among the recent ones), the empty Store's baseline, the\n * project's counts, and what each recent Commit added, oldest first.\n */\nexport function storeOf(storage: Storage, state: ProjectState, lines: any[] = []) {\n const z = storage.store, s = state.s\n const realOf = (label: string | null | undefined) => (label ? Object.keys(state.labels).find((real) => state.labels[real] === label) ?? null : null)\n const layer = s.layers?.[s.main?.head], source = realOf(layer?.sourceCommit)\n // Commits this session's calls made (their trace lines), with the ones the snapshot lists:\n // a retired Branch's Commits are no longer listed\n const made = new Map()\n for (const line of lines) {\n if (!line.ok || line.phase === 'start') continue\n if (line.commit && line.sizes) made.set(line.commit, line.sizes.logical ?? null)\n else if (line.method === 'branch.merge' && line.head && !made.has(line.head)) made.set(line.head, null)\n }\n const commits = new Set([...Object.keys(state.labels).filter((real) => /^C\\d+$/.test(state.labels[real])), ...made.keys()])\n // main's size: the snapshot's own figure for the Layer, else the Commit it was published from, else what Init imported\n const head = layer?.logical ?? (source ? storage.commits.find((c) => c.id === source)?.logical ?? made.get(source) ?? null : s.main?.head === \"L0\" && layer ? storage.init?.bytes ?? null : null)\n return {\n logical: z.logical, payload: z.canonical, stored: z.stored, metadata: z.metadata, store: z.file, estimate: false,\n head, baseline: storage.init ? storage.init.metadata + storage.init.stored : null, imported: storage.init?.files ?? 0,\n counts: { commits: commits.size, branches: Object.keys(s.branches ?? {}).length, layers: Object.keys(s.layers ?? {}).length },\n perCommit: storage.commits.slice().reverse().map((c) => ({ via: c.via, bytes: c.newStored + c.newMetadata, label: state.labels[c.id] ?? null, message: c.message })),\n }\n}\n","// The All projects page: what every project's Sandboxes run on and how full\n// they are. Docker, the Store container (macOS) and free disk on top, then a\n// card per project (problems first) that opens its Sandboxes tab, then\n// leftover containers no project owns. Its actions are the ones no single\n// project owns: start a stopped Store container, remove stopped leftovers.\nimport { useState } from 'react'\nimport { Button } from '@deepseek-ai/dsh-client-ui-primitives'\nimport { api, imageLabel, type Overview } from './api.ts'\nimport { Dot, Meter, POLL_MS, usePoll } from './runtimeParts.tsx'\nimport { bytes } from './storage.ts'\nimport { card, T } from './tokens.ts'\n\nconst MONO = 'var(--mono, ui-monospace, monospace)'\n\nexport function AllSandboxes({ onOpen }: { onOpen: (project: string) => void }) {\n const [view, setView] = useState(null)\n const [error, setError] = useState(null)\n const [busy, setBusy] = useState(null)\n const [asking, setAsking] = useState(false)\n const [restarting, setRestarting] = useState(false)\n const read = () => api.overview().then((v) => { setView(v); setError(null) }, (e: Error) => setError(e.message))\n usePoll(read, POLL_MS, [])\n const act = async (label: string, run: () => Promise) => {\n setBusy(label); setError(null)\n try { await run(); setAsking(false); setRestarting(false); await read() } catch (e) { setError((e as Error).message) } finally { setBusy(null) }\n }\n\n const tile = (title: string, level: Overview['level'] | null, body: React.ReactNode, extra?: React.ReactNode, actions?: React.ReactNode) => (\n
\n {level && }{title}{actions && <>{actions}}\n {body}\n {extra}\n
\n )\n const store = view?.store\n const stopped = view?.leftovers.filter((l) => !l.running) ?? []\n\n return (\n
\n
\n {view && }\n {view ? `${view.totals.projects} project${view.totals.projects === 1 ? '' : 's'} · ${view.totals.sandboxes} Sandbox${view.totals.sandboxes === 1 ? '' : 'es'} · ${view.totals.workspaces} Workspace${view.totals.workspaces === 1 ? '' : 's'}` : 'Reading LayerFS…'}\n \n \n
\n
\n {(error || busy) &&
{error ?? busy}
}\n {view && (\n
\n {tile('Docker', view.engine.level, view.engine.level === 'ok' ? `running · ${view.engine.version}` : 'not answering')}\n {store && tile('layerfs-store', store.level,\n store.state === 'running' ? `${store.answering ? 'ready' : 'not answering'}${store.build && store.build !== store.expected ? ' · older build' : ''}` : store.state,\n restarting\n ? \n Restart layerfs-store? Every project's Store calls stop for a few seconds{view.calls ? `; ${view.calls} agent call${view.calls === 1 ? ' is' : 's are'} running and may fail` : ''}.\n \n \n \n \n \n : null,\n view.engine.level === 'ok' && <>\n \n \n )}\n {tile('Disk free', null, [view.disk.vm !== null ? `Docker ${bytes(view.disk.vm)}` : null, view.disk.host !== null ? `local ${bytes(view.disk.host)}` : null].filter(Boolean).join(' · ') || 'not read')}\n
\n )}\n {view && (\n
\n

Projects · problems first

\n {!view.projects.length &&
No projects yet.
}\n
\n {view.projects.map((p) => (\n \n ))}\n
\n
\n )}\n {view && view.leftovers.length > 0 && (\n
\n

Leftovers

\n
\n {view.leftovers.map((l, i) => (\n
\n \n \n {l.name}\n · {l.status}{l.project ? ` · project ${l.project}` : ''}\n \n
\n ))}\n {stopped.length > 0 && (\n
\n {asking\n ? <>\n Remove {stopped.length} stopped container{stopped.length === 1 ? '' : 's'}? They run nothing; their Store volumes stay.\n \n \n \n : <>Running leftovers are left for you to stop.}\n
\n )}\n
\n
\n )}\n
\n
\n )\n}\n","// Init LayerFS for a workspace folder. The source is the workspace folder by\n// default; another folder can be browsed to and picked: in the page when dsh\n// composes the browse picker, else in the Host's native folder dialog. Either way the new project becomes the workspace folder's\n// default, the project new sessions there use until they choose another.\nimport { useEffect, useState } from 'react'\nimport { createPortal } from 'react-dom'\nimport { api, type InitJob, type Project } from './api.ts'\nimport { InitProgress } from './Progress.tsx'\n\ninterface Entry { name: string, path: string, hidden: boolean }\ninterface Listing { path: string, home: string, crumbs: Entry[], entries: Entry[], truncated: boolean }\n/** What the dialog uses of dsh's workspace navigation (read with ctx.get). */\nexport interface Directories { listDirectory(path?: string): Promise, pickDirectory?(): Promise }\n\nconst line = 'var(--dsh-color-border, #8884)'\nconst muted = 'var(--dsh-color-fg-muted, #8a8a8a)'\nconst button = { font: 'inherit', fontSize: 12, padding: '4px 12px', borderRadius: 6, border: `1px solid ${line}`, background: 'transparent', color: 'inherit', cursor: 'pointer' } as const\nconst primary = { ...button, background: 'var(--dsh-color-fg, #111)', color: 'var(--dsh-color-bg, #fff)', border: '1px solid transparent' } as const\nconst base = (path: string) => path.split('/').filter(Boolean).pop() ?? path\n\nexport function InitDialog({ folder, directories, onDone, onClose }: {\n folder: string\n directories?: Directories\n onDone: (project: Project) => void\n onClose: () => void\n}) {\n const [source, setSource] = useState(folder)\n const [browsing, setBrowsing] = useState(null)\n const [name, setName] = useState('')\n const [busy, setBusy] = useState(false)\n const [error, setError] = useState(null)\n const [job, setJob] = useState(null)\n\n const open = async (path?: string) => {\n setError(null)\n try {\n setBrowsing(await directories!.listDirectory(path))\n } catch (e) {\n // dsh composes one picker: without the browse one, its native dialog picks\n const code = (e as { rpcError?: { code?: string } }).rpcError?.code ?? (e as Error).message\n if (browsing || !/unavailable/.test(code) || !directories!.pickDirectory) { setError((e as Error).message); return }\n try { const picked = await directories!.pickDirectory(); if (picked) setSource(picked) } catch (err) { setError((err as Error).message) }\n }\n }\n useEffect(() => {\n const key = (e: KeyboardEvent) => { if (e.key === 'Escape' && !busy) onClose() }\n addEventListener('keydown', key)\n return () => removeEventListener('keydown', key)\n }, [busy, onClose])\n\n const init = async () => {\n setBusy(true); setError(null)\n try { onDone((await api.init(folder, name.trim() || undefined, source, setJob)).project) } catch (e) { setError((e as Error).message); setBusy(false); setJob(null) }\n }\n\n return createPortal(\n
{ if (e.target === e.currentTarget && !busy) onClose() }} style={{ position: 'fixed', inset: 0, zIndex: 1000, background: 'rgba(0,0,0,.35)', display: 'flex', alignItems: 'center', justifyContent: 'center' }}>\n
\n
Init LayerFS
\n\n
\n Import files from\n
\n {source}\n {source !== folder && }\n {directories && !browsing && }\n
\n
\n\n {browsing && (\n
\n
\n {browsing.crumbs.map((c, i) => (\n \n {i > 0 && / }\n \n \n ))}\n
\n
\n {browsing.entries.filter((e) => !e.hidden).map((e) => (\n \n ))}\n {browsing.entries.every((e) => e.hidden) && No folders here.}\n {browsing.truncated && More folders than shown.}\n
\n
\n \n \n
\n
\n )}\n\n \n\n
\n New sessions in {folder} use the project until they choose another{source !== folder ? '; its first version holds the files of the folder above' : ''}.\n
\n {job && busy && }\n {error &&
{error}
}\n\n
\n \n \n
\n
\n
,\n document.body,\n )\n}\n","// LayerFS SDK simulator: an in-memory model of the *proposed* agent-facing SDK\n// (sdk_js.md, issue #322). It reproduces the decision rules only; it is not the\n// product. Proposals simulated here: Commit kinds normal/overwrite with\n// three-way merge of a stale Workspace, Branch merge, .lww rules and\n// overwrite-only publish to main.\n(function (global) {\n \"use strict\";\n\n const clone = (v) => JSON.parse(JSON.stringify(v));\n const J = (v) => JSON.stringify(v);\n\n class Refusal extends Error {\n constructor(code, message, detail) {\n super(message);\n this.code = code;\n this.detail = detail || {};\n }\n }\n const refuse = (code, message, detail) => { throw new Refusal(code, message, detail); };\n\n // ---------------------------------------------------------------- file trees\n // A tree is { \"/path\": { type: \"file\"|\"dir\", inode, content? } }; \"/\" is implicit.\n const parentOf = (p) => (p.lastIndexOf(\"/\") <= 0 ? \"/\" : p.slice(0, p.lastIndexOf(\"/\")));\n const baseName = (p) => p.slice(p.lastIndexOf(\"/\") + 1);\n const isUnder = (p, dir) => p === dir || p.startsWith(dir === \"/\" ? \"/\" : dir + \"/\");\n const childrenOf = (tree, dir) =>\n Object.keys(tree).filter((p) => p !== dir && parentOf(p) === dir).sort();\n\n function treeKey(tree) {\n return Object.keys(tree).sort()\n .map((p) => { const e = tree[p]; return `${p}\\u0000${e.type}\\u0000${e.inode}\\u0000${e.content ?? \"\"}`; })\n .join(\"\\u0001\");\n }\n\n function countOccurrences(text, needle) {\n if (!needle) return 0;\n let n = 0, i = 0;\n while ((i = text.indexOf(needle, i)) !== -1) { n++; i += needle.length; }\n return n;\n }\n\n // Applies one ordered change list to a copy of `tree`. Throws a Refusal on the\n // first invalid change, so callers never observe a partially changed tree.\n function applyChanges(tree, changes, newInode) {\n const t = clone(tree);\n const need = (p) => { if (!t[p]) refuse(\"NoSuchPath\", `${p} does not exist`, { path: p }); return t[p]; };\n const needParent = (p) => {\n const d = parentOf(p);\n if (d !== \"/\" && (!t[d] || t[d].type !== \"dir\")) refuse(\"NoSuchPath\", `parent ${d} does not exist`, { path: d });\n };\n for (const c of changes) {\n switch (c.kind) {\n case \"write\": {\n needParent(c.path);\n const e = t[c.path];\n if (e && e.type === \"dir\") refuse(\"IsDirectory\", `${c.path} is a directory`, { path: c.path });\n t[c.path] = { type: \"file\", inode: e ? e.inode : newInode(), content: c.content };\n break;\n }\n case \"edit\": {\n const e = need(c.path);\n if (e.type !== \"file\") refuse(\"IsDirectory\", `${c.path} is a directory`, { path: c.path });\n const n = countOccurrences(e.content, c.oldText);\n if (n === 0) refuse(\"NoMatch\", `oldText not found in ${c.path}`, { path: c.path });\n if (n > 1 && !c.all) refuse(\"AmbiguousMatch\", `oldText matches ${n} times in ${c.path}`, { path: c.path, matches: n });\n e.content = c.all ? e.content.split(c.oldText).join(c.newText) : e.content.replace(c.oldText, c.newText);\n break;\n }\n case \"mkdir\": {\n if (t[c.path]) { if (c.recursive && t[c.path].type === \"dir\") break; refuse(\"Exists\", `${c.path} exists`, { path: c.path }); }\n if (c.recursive) {\n const parts = c.path.split(\"/\").filter(Boolean);\n let p = \"\";\n for (const part of parts) {\n p += \"/\" + part;\n if (!t[p]) t[p] = { type: \"dir\", inode: newInode() };\n else if (t[p].type !== \"dir\") refuse(\"NotDirectory\", `${p} is a file`, { path: p });\n }\n } else {\n needParent(c.path);\n t[c.path] = { type: \"dir\", inode: newInode() };\n }\n break;\n }\n case \"remove\": {\n const e = need(c.path);\n if (e.type === \"dir\" && childrenOf(t, c.path).length && !c.recursive)\n refuse(\"NotEmpty\", `${c.path} is not empty`, { path: c.path });\n for (const p of Object.keys(t)) if (isUnder(p, c.path)) delete t[p];\n break;\n }\n case \"cp\": {\n const e = need(c.from);\n if (t[c.to]) refuse(\"Exists\", `${c.to} exists`, { path: c.to });\n needParent(c.to);\n if (e.type === \"dir\" && !c.recursive) refuse(\"IsDirectory\", `${c.from} needs recursive: true`, { path: c.from });\n for (const p of Object.keys(t).filter((q) => isUnder(q, c.from)).sort()) {\n const src = t[p];\n t[c.to + p.slice(c.from.length)] = { ...clone(src), inode: newInode() };\n }\n break;\n }\n case \"mv\": {\n need(c.from);\n if (t[c.to]) refuse(\"Exists\", `${c.to} exists`, { path: c.to });\n needParent(c.to);\n if (isUnder(c.to, c.from)) refuse(\"InvalidMove\", `cannot move ${c.from} into itself`, { path: c.to });\n for (const p of Object.keys(t).filter((q) => isUnder(q, c.from)).sort()) {\n t[c.to + p.slice(c.from.length)] = t[p];\n delete t[p];\n }\n break;\n }\n default:\n refuse(\"InvalidInput\", `unknown change kind ${c.kind}`);\n }\n }\n return t;\n }\n\n // ---------------------------------------------------------------- diffs\n function lineDiff(a, b) {\n const x = (a ?? \"\").split(\"\\n\"), y = (b ?? \"\").split(\"\\n\");\n const m = x.length, n = y.length;\n const L = Array.from({ length: m + 1 }, () => new Array(n + 1).fill(0));\n for (let i = m - 1; i >= 0; i--)\n for (let j = n - 1; j >= 0; j--)\n L[i][j] = x[i] === y[j] ? L[i + 1][j + 1] + 1 : Math.max(L[i + 1][j], L[i][j + 1]);\n const out = [];\n let i = 0, j = 0;\n while (i < m && j < n) {\n if (x[i] === y[j]) { out.push({ op: \" \", text: x[i] }); i++; j++; }\n else if (L[i + 1][j] >= L[i][j + 1]) out.push({ op: \"-\", text: x[i++] });\n else out.push({ op: \"+\", text: y[j++] });\n }\n while (i < m) out.push({ op: \"-\", text: x[i++] });\n while (j < n) out.push({ op: \"+\", text: y[j++] });\n return out;\n }\n\n // Filesystem comparison from `a` to `b`: Added means present only in b.\n function diffTrees(a, b) {\n const paths = [...new Set([...Object.keys(a), ...Object.keys(b)])].sort();\n const entries = [];\n for (const p of paths) {\n const l = a[p], r = b[p];\n if (!l) entries.push({ path: p, kind: \"Added\", type: r.type, after: r });\n else if (!r) entries.push({ path: p, kind: \"Removed\", type: l.type, before: l });\n else {\n const content = (l.content ?? null) !== (r.content ?? null);\n const identity = l.inode !== r.inode;\n const type = l.type !== r.type;\n if (content || identity || type)\n entries.push({ path: p, kind: \"Modified\", type: r.type, before: l, after: r, content, identity,\n hunks: content && l.type === \"file\" && r.type === \"file\" ? lineDiff(l.content, r.content) : null });\n }\n }\n return entries;\n }\n\n // ---------------------------------------------------------------- merge\n // Proposal only: three-way merge with conflict markers and .lww rules.\n const MARKERS = /^<<<<<<< .*$[\\s\\S]*?^=======$[\\s\\S]*?^>>>>>>> .*$/m;\n const hasMarkers = (text) => typeof text === \"string\" && MARKERS.test(text);\n const sameEntry = (x, y) => (!x && !y) || (!!x && !!y && x.type === y.type && (x.content ?? null) === (y.content ?? null));\n\n // For each line of `a`, the index of the matching line of `b` (or -1).\n function matchLines(a, b) {\n const m = new Array(a.length).fill(-1);\n let i = 0, j = 0;\n for (const op of lineDiff(a.join(\"\\n\"), b.join(\"\\n\"))) {\n if (op.op === \" \") { m[i] = j; i++; j++; } else if (op.op === \"-\") i++; else j++;\n }\n return m;\n }\n\n // Line merge: chunks between lines unchanged on both sides take the side\n // that changed; both changing them differently is a conflict block.\n function merge3Lines(base, ours, theirs, labels) {\n const b = (base ?? \"\").split(\"\\n\"), o = ours.split(\"\\n\"), t = theirs.split(\"\\n\");\n const mo = matchLines(b, o), mt = matchLines(b, t);\n const out = [];\n const hunks = [];\n let bi = 0, oi = 0, ti = 0;\n const eq = (x, y) => x.length === y.length && x.every((v, k) => v === y[k]);\n const chunk = (be, oe, te) => {\n const cb = b.slice(bi, be), co = o.slice(oi, oe), ct = t.slice(ti, te);\n if (eq(co, cb)) out.push(...ct);\n else if (eq(ct, cb) || eq(co, ct)) out.push(...co);\n else { hunks.push({ line: out.length + 1, ours: co, theirs: ct }); out.push(`<<<<<<< ${labels[0]}`, ...co, \"=======\", ...ct, `>>>>>>> ${labels[1]}`); }\n };\n for (let k = 0; k < b.length; k++) {\n if (mo[k] < 0 || mt[k] < 0 || mo[k] < oi || mt[k] < ti) continue;\n chunk(k, mo[k], mt[k]);\n out.push(b[k]);\n bi = k + 1; oi = mo[k] + 1; ti = mt[k] + 1;\n }\n chunk(b.length, o.length, t.length);\n return { text: out.join(\"\\n\"), conflicts: hunks.length, hunks };\n }\n\n // gitignore-style rules from /.lww; \"%include \" reads another file\n // of the same tree (for example .gitignore). Last matching rule wins.\n function lwwRules(tree, file = \"/.lww\", seen = new Set()) {\n const e = tree[file];\n if (!e || e.type !== \"file\" || seen.has(file)) return [];\n seen.add(file);\n const rules = [];\n for (let line of e.content.split(\"\\n\")) {\n line = line.trim();\n if (!line || line.startsWith(\"#\")) continue;\n const inc = line.match(/^%include\\s+(\\S+)$/);\n if (inc) { rules.push(...lwwRules(tree, \"/\" + inc[1].replace(/^\\/+/, \"\"), seen)); continue; }\n const neg = line.startsWith(\"!\");\n let pat = (neg ? line.slice(1) : line).replace(/\\/$/, \"\");\n const anchored = pat.includes(\"/\");\n pat = pat.replace(/^\\//, \"\");\n const rx = pat.split(\"**\").map((s) => s.replace(/[.+^${}()|[\\]\\\\]/g, \"\\\\$&\").replace(/\\*/g, \"[^/]*\").replace(/\\?/g, \"[^/]\")).join(\".*\");\n rules.push({ pattern: line, neg, re: new RegExp((anchored ? \"^\" : \"(^|/)\") + rx + \"($|/)\") });\n }\n return rules;\n }\n const lwwMatch = (rules, path) => {\n let hit = null;\n for (const r of rules) if (r.re.test(path.replace(/^\\//, \"\"))) hit = r.neg ? null : r;\n return hit;\n };\n\n // Three-way tree merge. opts: { labels: [ours, theirs], rules, timeOurs(p),\n // timeTheirs(p) }. Returns { tree, conflicts, lww, clean }.\n function merge3Trees(base, ours, theirs, opts, newInode) {\n const tree = {}, conflicts = [], lww = [];\n const [lo, lt] = opts.labels;\n for (const p of [...new Set([...Object.keys(base), ...Object.keys(ours), ...Object.keys(theirs)])].sort()) {\n const b = base[p], o = ours[p], t = theirs[p];\n let r;\n if (sameEntry(o, t)) r = o;\n else if (sameEntry(b, o)) r = t;\n else if (sameEntry(b, t)) r = o;\n else {\n const rule = lwwMatch(opts.rules || [], p);\n if (rule) {\n const to = opts.timeOurs(p), tt = opts.timeTheirs(p), keepOurs = to >= tt;\n r = keepOurs ? o : t;\n lww.push({ path: p, kept: keepOurs ? lo : lt, deleted: !r, rule: rule.pattern });\n } else if (o && t && o.type === \"file\" && t.type === \"file\") {\n const m = merge3Lines(b && b.type === \"file\" ? b.content : \"\", o.content, t.content, opts.labels);\n r = { ...o, content: m.text };\n if (m.conflicts) conflicts.push({ path: p, kind: b ? \"content\" : \"add/add\", blocks: m.conflicts, hunks: m.hunks });\n } else if ((o && o.type === \"file\") || (t && t.type === \"file\")) {\n const kept = o || t;\n r = { ...kept, content: o ? `<<<<<<< ${lo}\\n${o.content}\\n=======\\n>>>>>>> ${lt} (deleted)` : `<<<<<<< ${lo} (deleted)\\n=======\\n${t.content}\\n>>>>>>> ${lt}` };\n conflicts.push({ path: p, kind: o ? \"modify/delete\" : \"delete/modify\", blocks: 1 });\n } else {\n r = o || t;\n conflicts.push({ path: p, kind: \"type\", blocks: 0 });\n }\n }\n if (r) tree[p] = clone(r);\n }\n for (const p of Object.keys(tree)) // a kept path needs its folders\n for (let d = parentOf(p); d !== \"/\" && !tree[d]; d = parentOf(d))\n tree[d] = clone(ours[d] && ours[d].type === \"dir\" ? ours[d] : theirs[d] && theirs[d].type === \"dir\" ? theirs[d] : { type: \"dir\", inode: newInode() });\n return { tree, conflicts, lww, clean: conflicts.length === 0 };\n }\n\n // ---------------------------------------------------------------- the model\n class Sim {\n constructor() {\n this.s = {\n project: null, main: null,\n roots: {}, rootKeys: {}, commits: {}, layers: {},\n branches: {}, branchOrder: [], sandboxes: {}, sandboxOrder: [],\n seq: { root: 0, commit: 0, layer: 0, inode: 0, sandbox: 0, proc: 0, slot: 0, clock: 0 },\n };\n }\n\n snapshot() { return clone(this.s); }\n\n // -- identities\n newInode() { return \"i\" + ++this.s.seq.inode; }\n slot() { return this.s.seq.slot++; }\n tick() { return ++this.s.seq.clock; }\n intern(tree) {\n const key = treeKey(tree);\n if (this.s.rootKeys[key]) return this.s.rootKeys[key];\n const id = \"R\" + this.s.seq.root++;\n this.s.rootKeys[key] = id;\n this.s.roots[id] = clone(tree);\n return id;\n }\n\n // -- lookups\n branch(name) {\n const b = this.s.branches[name];\n if (!b) refuse(\"NoSuchBranch\", `no Branch named ${name}`, { branch: name });\n return b;\n }\n branchRoot(b) { return b.head ? this.s.commits[b.head].root : this.s.layers[b.base].root; }\n sandbox(id) {\n const sb = this.s.sandboxes[id];\n if (!sb) refuse(\"NoSuchSandbox\", `no Sandbox ${id} owned by this controller`, { sandbox: id });\n if (sb.closed) refuse(\"SandboxClosed\", `${id} is closed`, { sandbox: id });\n return sb;\n }\n workspace(sbId, path) {\n const sb = this.sandbox(sbId);\n const ws = sb.workspaces[path];\n if (!ws || !ws.mounted) refuse(\"NotMounted\", `${sbId}:${path} is not mounted`, { workspace: `${sbId}:${path}` });\n return ws;\n }\n liveMountsOf(branchName) {\n const out = [];\n for (const id of this.s.sandboxOrder) {\n const sb = this.s.sandboxes[id];\n if (sb.closed) continue;\n for (const p of sb.wsOrder) if (sb.workspaces[p].mounted && sb.workspaces[p].branch === branchName) out.push(`${id}:${p}`);\n }\n return out;\n }\n\n // Resolves any readable selector to { label, kind, tree }.\n // \"main\", a Branch name, \"C3\", \"L1\", or a live view \"sb_01:/workspaces/1\".\n resolve(ref) {\n const s = this.s;\n if (ref === \"main\") {\n if (!s.main) refuse(\"NoProject\", \"project not initialized\");\n const l = s.layers[s.main.head];\n return { label: `main @ ${l.id}`, kind: \"main\", root: l.root, tree: s.roots[l.root], layer: l.id };\n }\n if (/^C\\d+$/.test(ref)) {\n const c = s.commits[ref];\n if (!c) refuse(\"NoSuchCommit\", `no Commit ${ref}`);\n return { label: ref, kind: \"commit\", root: c.root, tree: s.roots[c.root], commit: ref };\n }\n if (/^L\\d+$/.test(ref)) {\n const l = s.layers[ref];\n if (!l) refuse(\"NoSuchLayer\", `no Layer ${ref}`);\n return { label: ref, kind: \"layer\", root: l.root, tree: s.roots[l.root], layer: ref };\n }\n if (ref.includes(\":/\")) {\n const [sb, path] = [ref.slice(0, ref.indexOf(\":\")), ref.slice(ref.indexOf(\":\") + 1)];\n const w = s.sandboxes[sb] && s.sandboxes[sb].workspaces[path];\n if (!w) refuse(\"NotMounted\", `${ref} does not exist`);\n return { label: `${ref} (live)`, kind: \"live\", root: null, tree: w.live, workspace: ref };\n }\n const b = this.branch(ref);\n const root = this.branchRoot(b);\n return { label: `${b.name} @ ${b.head || b.base}`, kind: \"branch\", root, tree: s.roots[root], head: b.head };\n }\n\n // -- operation entry point: one attempt, typed result or typed refusal\n run(call, args = {}) {\n const fn = OPS[call];\n if (!fn) return { ok: false, code: \"Unsupported\", refusal: { code: \"Unsupported\", message: `unknown call ${call}` } };\n try {\n const result = fn.call(this, args);\n const code = result && result.kind ? result.kind : \"ok\";\n return { ok: true, code, result };\n } catch (e) {\n if (!(e instanceof Refusal)) throw e;\n return { ok: false, code: e.code, refusal: { code: e.code, message: e.message, ...e.detail } };\n }\n }\n\n // -- fs mutation shared by write/edit/mkdir/remove/cp/mv/apply. Allowed\n // while mounted: it advances the head, so live mounts become stale.\n mutate(branchName, changes, via, message) {\n const b = this.branch(branchName);\n const capturedHead = b.head;\n const currentRoot = this.branchRoot(b);\n const tree = applyChanges(this.s.roots[currentRoot], changes, () => this.newInode());\n const root = this.intern(tree);\n if (root === currentRoot)\n return { kind: \"UpToDate\", branch: b.name, head: b.head, root, capturedHead, displacedHead: null };\n const id = \"C\" + ++this.s.seq.commit;\n this.s.commits[id] = { id, parent: capturedHead, root, base: b.base, branch: b.name, slot: this.slot(), by: \"fs\", via, time: this.tick(), ...(message ? { message } : {}) };\n b.head = id;\n return { kind: \"Committed\", branch: b.name, head: id, root, capturedHead, displacedHead: null };\n }\n\n // -- history graph: nodes are Commits (\"C#\") and Layers (\"L#\")\n node(id) { return this.s.commits[id] || this.s.layers[id]; }\n nodeTree(id) { return this.s.roots[this.node(id).root]; }\n firstParent(id) { const c = this.s.commits[id]; return c ? c.parent || c.base : this.s.layers[id].parent; }\n // The node a merge source names: main's head, or a Branch head (its fork point before any Commit).\n sourceNode(ref) {\n if (ref === \"main\") return this.s.main.head;\n if (/^[CL]\\d+$/.test(ref)) { if (!this.node(ref)) refuse(\"NoSuchCommit\", `no Commit or Layer ${ref}`); return ref; }\n const b = this.branch(ref);\n return b.head || b.from;\n }\n // Every node reachable through parents, merge sources and published sources.\n ancestors(id) {\n const out = new Set(), todo = [id];\n while (todo.length) {\n const n = todo.pop();\n if (!n || out.has(n)) continue;\n out.add(n);\n const c = this.s.commits[n];\n if (c) todo.push(c.parent || c.base, c.mergedFrom);\n else todo.push(this.s.layers[n].parent, this.s.layers[n].sourceCommit);\n }\n return out;\n }\n // Latest common ancestor of two nodes.\n mergeBase(a, b) {\n const A = this.ancestors(a);\n let best = null;\n for (const n of this.ancestors(b)) if (A.has(n) && (!best || this.node(n).time > this.node(best).time)) best = n;\n return best;\n }\n // Time of the newest first-parent node after `stop` that changed `path`.\n changeTime(id, path, stop) {\n for (let n = id; n && n !== stop; n = this.firstParent(n)) {\n const prev = this.firstParent(n);\n if (!sameEntry(this.nodeTree(n)[path], prev ? this.nodeTree(prev)[path] : undefined)) return this.node(n).time;\n }\n return 0;\n }\n merge(base, ours, theirs, opts) { return merge3Trees(base, ours, theirs, opts, () => this.newInode()); }\n // Changed files of a Workspace that still hold a conflict block.\n markersIn(ws) {\n return diffTrees(this.s.roots[ws.baseRoot], ws.live)\n .filter((d) => d.kind !== \"Removed\" && d.type === \"file\" && hasMarkers(ws.live[d.path].content)).map((d) => d.path);\n }\n }\n\n const OPS = {\n // ---------------------------------------------------------- project\n \"project.init\"(a) {\n if (this.s.project) refuse(\"Exists\", \"project already initialized\");\n const tree = {};\n for (const [p, v] of Object.entries(a.files)) {\n // create parent directories implicitly for the imported source tree\n let d = parentOf(p);\n const dirs = [];\n while (d !== \"/\" && !tree[d]) { dirs.unshift(d); d = parentOf(d); }\n for (const dir of dirs) tree[dir] = { type: \"dir\", inode: this.newInode() };\n tree[p] = v === null ? { type: \"dir\", inode: this.newInode() } : { type: \"file\", inode: this.newInode(), content: v };\n }\n const root = this.intern(tree);\n const id = \"L\" + this.s.seq.layer++;\n this.s.layers[id] = { id, parent: null, root, sourceBranch: null, sourceCommit: null, slot: this.slot(), time: this.tick() };\n this.s.project = { name: a.name };\n this.s.main = { head: id };\n return { kind: \"Initialized\", project: a.name, main: { headLayer: id, root } };\n },\n \"project.list_branches\"() {\n return { kind: \"ok\", items: this.s.branchOrder.map((n) => {\n const b = this.s.branches[n];\n return { name: n, base: b.base, head: b.head, root: this.branchRoot(b), mountedBy: this.liveMountsOf(n) };\n }), nextCursor: null };\n },\n \"main.fork\"(a) { return forkFrom.call(this, a.name, this.s.main.head, null); },\n \"main.list_layers\"() {\n const out = [];\n for (let id = this.s.main.head; id; id = this.s.layers[id].parent) out.push(clone(this.s.layers[id]));\n return { kind: \"ok\", items: out, nextCursor: null };\n },\n\n // ---------------------------------------------------------- branch\n \"branch.fork\"(a) {\n const b = this.branch(a.branch);\n return forkFrom.call(this, a.name, b.base, a.fromCommit || b.head);\n },\n \"branch.list_commits\"(a) {\n const b = this.branch(a.branch);\n const out = [];\n for (let id = b.head; id; id = this.s.commits[id].parent) out.push(clone(this.s.commits[id]));\n return { kind: \"ok\", items: out, nextCursor: null };\n },\n \"branch.diff_commits\"(a) {\n const l = this.resolve(a.from), r = this.resolve(a.to);\n if (l.kind !== \"commit\" || r.kind !== \"commit\") refuse(\"InvalidInput\", \"diff_commits takes two saved Commits\");\n return { kind: \"ok\", from: { commit: a.from, root: l.root }, to: { commit: a.to, root: r.root }, items: diffTrees(l.tree, r.tree) };\n },\n \"branch.diff_branches\"(a) {\n const l = this.resolve(a.from), r = this.resolve(a.to);\n if (![\"branch\", \"main\"].includes(l.kind) || ![\"branch\", \"main\"].includes(r.kind))\n refuse(\"InvalidInput\", \"diff_branches takes Branches or main\");\n return { kind: \"ok\", from: { ref: a.from, label: l.label, root: l.root }, to: { ref: a.to, label: r.label, root: r.root }, items: diffTrees(l.tree, r.tree) };\n },\n // Proposal: publish is overwrite-only. The new Layer sits on main's current\n // head and holds exactly the Branch head's files, whatever main gained since\n // the Branch's base (reported as `overwrote`; those Layers stay in history).\n \"branch.publish\"(a) {\n const b = this.branch(a.branch);\n const cid = a.commit || b.head;\n if (!cid) refuse(\"NoCommit\", `${b.name} has no saved Commit to publish`);\n const c = this.s.commits[cid];\n const already = Object.values(this.s.layers).find((l) => l.sourceBranch === b.name && l.sourceCommit === cid);\n if (already) return { kind: \"UpToDate\", layer: already.id, main: { headLayer: this.s.main.head, root: this.s.layers[this.s.main.head].root } };\n if (b.head !== cid) refuse(\"HeadMoved\", `${b.name} head is ${b.head}, not ${cid}`);\n const parent = this.s.main.head;\n if (c.root === this.s.layers[parent].root) return { kind: \"NoChanges\", main: { headLayer: parent } };\n const id = \"L\" + this.s.seq.layer++;\n this.s.layers[id] = { id, parent, root: c.root, sourceBranch: b.name, sourceCommit: cid, slot: this.slot(), time: this.tick() };\n this.s.main.head = id;\n // main's previous head is covered when it is in the Commit's history or was published from it.\n const anc = this.ancestors(cid), pl = this.s.layers[parent];\n const overwrote = anc.has(parent) || (pl.sourceCommit && anc.has(pl.sourceCommit)) ? null : parent;\n return { kind: \"Added\", source: { branch: b.name, commit: cid }, publishedLayer: { id, parent, root: c.root }, main: { headLayer: id, root: c.root }, basedOn: b.base, overwrote };\n },\n // Proposal: a + b = c. Merging never changes either input: it forks a new\n // Branch `name` from a's head whose first Commit is the three-way merge of\n // a and b (either may be main). A conflict rejects with the conflicting\n // files and both sides' lines; nothing is created.\n \"branch.merge\"(a) {\n const left = a.branch, right = a.with;\n if (left === right) refuse(\"InvalidInput\", \"merge takes two different sources\");\n if (!a.name) refuse(\"InvalidInput\", \"merge needs a name for the new Branch\");\n if (a.name === \"main\") refuse(\"ReservedName\", `\"main\" names the project's main line`);\n if (this.s.branches[a.name]) refuse(\"NameTaken\", `Branch ${a.name} already exists`);\n const ln = this.sourceNode(left), rn = this.sourceNode(right);\n // One side already contains the other: c just points at the newer node (metadata only).\n const newer = this.ancestors(ln).has(rn) ? ln : this.ancestors(rn).has(ln) ? rn : null;\n if (newer) {\n const c = this.s.commits[newer];\n const b = { name: a.name, base: c ? c.base : newer, head: c ? newer : null, from: newer, slot: this.slot() };\n this.s.branches[a.name] = b;\n this.s.branchOrder.push(a.name);\n return { kind: \"Merged\", fastForward: true, branch: a.name, head: newer, root: this.node(newer).root,\n sources: [{ ref: left, node: ln }, { ref: right, node: rn }], mergeBase: newer === ln ? rn : ln, conflicts: [], lww: [] };\n }\n const mb = this.mergeBase(ln, rn);\n const ours = this.nodeTree(ln);\n const m = this.merge(this.nodeTree(mb), ours, this.nodeTree(rn), {\n labels: [`${left}@${ln}`, `${right}@${rn}`], rules: lwwRules(ours),\n timeOurs: (p) => this.changeTime(ln, p, mb), timeTheirs: (p) => this.changeTime(rn, p, mb) });\n const sources = [{ ref: left, node: ln }, { ref: right, node: rn }];\n if (!m.clean)\n refuse(\"Conflict\", `${left} + ${right} conflict in ${m.conflicts.length} file${m.conflicts.length === 1 ? \"\" : \"s\"}; nothing was created`,\n { sources, mergeBase: mb, conflicts: m.conflicts, lww: m.lww });\n // c's base Layer: main's head when main is one side, else a's base.\n const base = left === \"main\" ? ln : right === \"main\" ? rn : this.s.commits[ln] ? this.s.commits[ln].base : ln;\n const b = { name: a.name, base, head: null, from: ln, slot: this.slot() };\n this.s.branches[a.name] = b;\n this.s.branchOrder.push(a.name);\n const root = this.intern(m.tree);\n const id = \"C\" + ++this.s.seq.commit;\n this.s.commits[id] = { id, parent: this.s.commits[ln] ? ln : null, root, base, branch: a.name, slot: this.slot(), by: \"merge\", via: `merge ${left} + ${right}`,\n mergedFrom: rn, mergeBase: mb, lww: m.lww, time: this.tick(), ...(a.message ? { message: a.message } : {}) };\n b.head = id;\n return { kind: \"Merged\", branch: a.name, head: id, root, sources, mergeBase: mb, conflicts: [], lww: m.lww };\n },\n\n // ---------------------------------------------------------- fs reads\n \"fs.read\"(a) {\n const v = this.resolve(a.commit || a.ref);\n const e = v.tree[a.path];\n if (!e) refuse(\"NoSuchPath\", `${a.path} does not exist at ${v.label}`, { path: a.path });\n if (e.type !== \"file\") refuse(\"IsDirectory\", `${a.path} is a directory`, { path: a.path });\n return { kind: \"ok\", snapshot: v.label, root: v.root, path: a.path, inode: e.inode, text: e.content };\n },\n \"fs.list\"(a) {\n const v = this.resolve(a.ref);\n const dir = a.path || \"/\";\n if (dir !== \"/\" && (!v.tree[dir] || v.tree[dir].type !== \"dir\")) refuse(\"NoSuchPath\", `${dir} is not a directory`);\n return { kind: \"ok\", snapshot: v.label, root: v.root, items: childrenOf(v.tree, dir).map((p) => ({ name: baseName(p), path: p, type: v.tree[p].type, inode: v.tree[p].inode })), nextCursor: null };\n },\n \"fs.stat\"(a) {\n const v = this.resolve(a.ref);\n const e = v.tree[a.path];\n if (!e) refuse(\"NoSuchPath\", `${a.path} does not exist`);\n return { kind: \"ok\", snapshot: v.label, path: a.path, type: e.type, inode: e.inode, size: (e.content || \"\").length };\n },\n \"fs.grep\"(a) {\n const v = this.resolve(a.ref);\n const items = [];\n for (const p of Object.keys(v.tree).sort()) {\n const e = v.tree[p];\n if (e.type !== \"file\" || !isUnder(p, a.path || \"/\")) continue;\n e.content.split(\"\\n\").forEach((line, i) => { if (line.includes(a.pattern)) items.push({ path: p, line: i + 1, text: line.trim() }); });\n }\n return { kind: \"ok\", snapshot: v.label, root: v.root, items, nextCursor: null };\n },\n \"fs.diff_files\"(a) {\n // Current selectors share one captured Branch root.\n const base = this.resolve(a.ref);\n const side = (sel) => {\n const v = sel.commit ? this.resolve(sel.commit) : base;\n const e = v.tree[sel.path];\n if (!e) refuse(\"NoSuchPath\", `${sel.path} does not exist at ${v.label}`);\n if (e.type !== \"file\") refuse(\"IsDirectory\", `${sel.path} is a directory`);\n return { path: sel.path, snapshot: v.label, inode: e.inode, content: e.content };\n };\n const l = side(a.left), r = side(a.right);\n const equal = l.content === r.content;\n return { kind: equal ? \"Equal\" : \"Text\", left: { path: l.path, snapshot: l.snapshot, inode: l.inode }, right: { path: r.path, snapshot: r.snapshot, inode: r.inode },\n contentEqual: equal, sameInode: l.inode === r.inode, hunks: equal ? [] : lineDiff(l.content, r.content) };\n },\n\n // ---------------------------------------------------------- fs writes\n \"fs.write\"(a) { return this.mutate(a.branch, [{ kind: \"write\", path: a.path, content: a.content }], \"fs.write\", a.message); },\n \"fs.edit\"(a) { return this.mutate(a.branch, [{ kind: \"edit\", path: a.path, oldText: a.oldText, newText: a.newText, all: a.all }], \"fs.edit\", a.message); },\n \"fs.mkdir\"(a) { return this.mutate(a.branch, [{ kind: \"mkdir\", path: a.path, recursive: a.recursive }], \"fs.mkdir\", a.message); },\n \"fs.rm\"(a) { return this.mutate(a.branch, [{ kind: \"remove\", path: a.path, recursive: a.recursive }], \"fs.rm\", a.message); },\n \"fs.cp\"(a) { return this.mutate(a.branch, [{ kind: \"cp\", from: a.from, to: a.to, recursive: a.recursive }], \"fs.cp\", a.message); },\n \"fs.mv\"(a) { return this.mutate(a.branch, [{ kind: \"mv\", from: a.from, to: a.to }], \"fs.mv\", a.message); },\n \"fs.apply\"(a) { return this.mutate(a.branch, a.changes, \"fs.apply\", a.message); },\n\n // ---------------------------------------------------------- sandbox\n \"sandbox.create\"() {\n const id = \"sb_\" + String(++this.s.seq.sandbox).padStart(2, \"0\");\n this.s.sandboxes[id] = { id, closed: false, nextWs: 1, workspaces: {}, wsOrder: [], processes: {}, procOrder: [] };\n this.s.sandboxOrder.push(id);\n return { kind: \"Ready\", id, mounted: false };\n },\n \"sandbox.list\"() {\n return { kind: \"ok\", items: this.s.sandboxOrder.map((id) => {\n const sb = this.s.sandboxes[id];\n return { id, status: sb.closed ? \"closed\" : \"ready\", mounts: sb.wsOrder.filter((p) => sb.workspaces[p].mounted) };\n }) };\n },\n \"sandbox.mount\"(a) {\n const sb = this.sandbox(a.sandbox);\n const b = this.branch(a.branch);\n const path = \"/workspaces/\" + sb.nextWs++;\n const root = this.branchRoot(b);\n sb.workspaces[path] = { sandbox: sb.id, path, branch: b.name, baseCommit: b.head, baseLayer: b.base, baseRoot: root, live: clone(this.s.roots[root]), mounted: true, slot: this.slot(), times: {} };\n sb.wsOrder.push(path);\n return { kind: \"Mounted\", sandbox: sb.id, path, branch: b.name, base: b.head || b.base, root };\n },\n \"sandbox.list_mounts\"(a) {\n const sb = this.sandbox(a.sandbox);\n return { kind: \"ok\", items: sb.wsOrder.filter((p) => sb.workspaces[p].mounted).map((p) => {\n const w = sb.workspaces[p];\n return { path: p, branch: w.branch, base: w.baseCommit || w.baseLayer, overlay: diffTrees(this.s.roots[w.baseRoot], w.live).length };\n }) };\n },\n \"sandbox.exec\"(a) {\n const ws = this.workspace(a.sandbox, a.path);\n const sb = this.s.sandboxes[a.sandbox];\n let changed = [];\n let exitCode = a.exitCode ?? 0;\n let stdout = a.output ?? \"\";\n if (a.writes && a.writes.length) {\n try {\n const before = ws.live;\n ws.live = applyChanges(ws.live, a.writes, () => this.newInode());\n changed = diffTrees(before, ws.live).map((d) => d.path);\n const t = this.tick();\n for (const p of changed) ws.times[p] = t;\n } catch (e) {\n if (!(e instanceof Refusal)) throw e;\n exitCode = 1; stdout = e.message;\n }\n }\n if (a.background) {\n const id = \"proc_\" + String(++this.s.seq.proc).padStart(2, \"0\");\n sb.processes[id] = { id, path: a.path, command: a.command, status: \"running\" };\n sb.procOrder.push(id);\n return { kind: \"running\", process: id, command: a.command, changed };\n }\n return { kind: \"exit:\" + exitCode, exitCode, stdout, changed };\n },\n \"sandbox.list_processes\"(a) {\n const sb = this.sandbox(a.sandbox);\n return { kind: \"ok\", items: sb.procOrder.map((id) => clone(sb.processes[id])) };\n },\n \"process.cancel\"(a) {\n const sb = this.sandbox(a.sandbox);\n const p = sb.processes[a.process];\n if (!p) refuse(\"NoSuchProcess\", `${a.process} is not owned by ${a.sandbox}`);\n if (p.status !== \"running\") return { kind: \"Stopped\", process: p.id, status: p.status };\n p.status = \"stopped\";\n return { kind: \"Stopped\", process: p.id, status: \"stopped\" };\n },\n \"sandbox.status\"(a) {\n const ws = this.workspace(a.sandbox, a.path);\n const b = this.s.branches[ws.branch];\n return { kind: \"ok\", workspace: `${a.sandbox}:${a.path}`, branch: ws.branch, base: ws.baseCommit || ws.baseLayer, branchHead: b.head,\n headMovedSinceMount: b.head !== ws.baseCommit, overlay: diffTrees(this.s.roots[ws.baseRoot], ws.live).map((d) => `${d.kind[0]} ${d.path}`) };\n },\n // Proposal: two Commit kinds, and commit is the only Workspace verb.\n // Normal: parent = the Branch head. A stale Workspace (head moved since\n // mount or its last Commit) is merged three-way with the head first:\n // clean -> a normal Commit on the head (result.merged);\n // conflict -> refused, nothing committed; the merge is written into the\n // Workspace (clean files applied, markers in conflicting\n // files) and its base moves to the head. Fix the markers and\n // commit again. Commit is refused while a marker block remains.\n // Overwrite (force): commits the Workspace as it is, displacing the head.\n \"sandbox.commit\"(a) {\n const ws = this.workspace(a.sandbox, a.path);\n const b = this.s.branches[ws.branch];\n const capturedHead = ws.baseCommit;\n const stale = b.head !== capturedHead;\n const markers = this.markersIn(ws);\n if (markers.length)\n refuse(\"Conflict\", `${markers.length} ${markers.length === 1 ? \"file still contains\" : \"files still contain\"} conflict markers`,\n { head: b.head, base: capturedHead || ws.baseLayer, conflicts: markers.map((p) => ({ path: p, kind: \"markers\" })), lww: [], markers: true });\n let merged = null;\n if (stale && !a.force) {\n const theirs = this.s.roots[this.branchRoot(b)];\n const m = this.merge(this.s.roots[ws.baseRoot], ws.live, theirs, {\n labels: [\"workspace\", `${b.name}@${b.head}`], rules: lwwRules(theirs),\n timeOurs: (p) => ws.times[p] || 0, timeTheirs: (p) => this.changeTime(b.head, p, capturedHead || ws.baseLayer) });\n merged = { from: capturedHead || ws.baseLayer, head: b.head, lww: m.lww };\n if (!m.clean) {\n const changed = diffTrees(ws.live, m.tree).map((d) => d.path);\n ws.live = m.tree; ws.baseCommit = b.head; ws.baseLayer = b.base; ws.baseRoot = this.branchRoot(b);\n refuse(\"Conflict\", `${b.name} head moved to ${b.head} and ${m.conflicts.length} ${m.conflicts.length === 1 ? \"file conflicts\" : \"files conflict\"} with this Workspace; nothing committed`,\n { head: b.head, base: merged.from, conflicts: m.conflicts, lww: m.lww, written: changed });\n }\n ws.live = m.tree;\n }\n const currentRoot = this.branchRoot(b);\n const root = this.intern(ws.live);\n if (root === currentRoot) {\n ws.baseCommit = b.head; ws.baseLayer = b.base; ws.baseRoot = root;\n return { kind: \"UpToDate\", branch: b.name, head: b.head, root, capturedHead, displacedHead: null, merged };\n }\n const id = \"C\" + ++this.s.seq.commit;\n const displacedHead = stale && a.force ? b.head : null;\n this.s.commits[id] = { id, parent: a.force ? capturedHead : b.head, root, base: b.base, branch: b.name, slot: this.slot(), by: \"workspace\", via: `${a.sandbox}:${a.path}`,\n time: this.tick(), ...(merged ? { merged } : {}), ...(a.message ? { message: a.message } : {}), };\n if (displacedHead) this.s.commits[displacedHead].displacedBy = id;\n b.head = id;\n ws.baseCommit = id; ws.baseLayer = b.base; ws.baseRoot = root;\n return { kind: \"Committed\", branch: b.name, head: id, root, capturedHead, displacedHead, merged };\n },\n // Proposal: refused while uncommitted changes exist, unless discard.\n \"sandbox.unmount\"(a) {\n const ws = this.workspace(a.sandbox, a.path);\n const sb = this.s.sandboxes[a.sandbox];\n const busy = sb.procOrder.filter((id) => sb.processes[id].status === \"running\" && sb.processes[id].path === a.path);\n if (busy.length) refuse(\"Busy\", `${a.sandbox}:${a.path} is busy: ${busy.join(\", \")} still running`, { processes: busy });\n const changed = diffTrees(this.s.roots[ws.baseRoot], ws.live).map((d) => d.path);\n if (changed.length && !a.discard)\n refuse(\"Dirty\", `${a.sandbox}:${a.path} has ${changed.length} uncommitted change${changed.length === 1 ? \"\" : \"s\"}`, { changed });\n ws.mounted = false;\n return { kind: \"Unmounted\", workspace: `${a.sandbox}:${a.path}`, discardedUncommitted: changed };\n },\n \"sandbox.close\"(a) {\n const sb = this.sandbox(a.sandbox);\n const live = sb.wsOrder.filter((p) => sb.workspaces[p].mounted);\n if (live.length) refuse(\"MountsActive\", `${sb.id} still has mounted Workspaces: ${live.join(\", \")}`, { mounts: live });\n sb.closed = true;\n return { kind: \"Closed\", id: sb.id };\n },\n };\n\n function forkFrom(name, baseLayer, fromCommit) {\n if (name === \"main\") refuse(\"ReservedName\", `\"main\" names the project's main line`);\n if (this.s.branches[name]) refuse(\"NameTaken\", `Branch ${name} already exists`);\n // A fork from a saved Commit keeps that Commit's base Layer.\n const base = fromCommit ? this.s.commits[fromCommit].base : baseLayer;\n const b = { name, base, head: fromCommit || null, from: fromCommit || baseLayer, slot: this.slot() };\n this.s.branches[name] = b;\n this.s.branchOrder.push(name);\n return { kind: \"Forked\", branch: name, base, head: b.head, root: this.branchRoot(b) };\n }\n\n // ---------------------------------------------------------------- scripts\n // Generates the inline Node tool call an agent would send for one step.\n function scriptFor(step, project) {\n const a=step.args||{};let target=\"layerfs\",method=step.call,args=[];\n switch(method){\n case \"project.init\": args=[`./${a.name||project}`];break;\n case \"project.list_branches\": args=[a.pageSize,a.pagePos];break;\n case \"main.fork\":method=\"branch.fork\";args=[a.name,\"main\"];break;\n case \"main.list_layers\":target=\"operator\";method=\"inspect.snapshot\";break;\n case \"branch.fork\":args=[a.name,a.fromCommit||a.branch||\"main\"];break;\n case \"branch.list_commits\":args=[a.branch,a.pageSize,a.pagePos];break;\n case \"branch.diff_commits\":case \"branch.diff_branches\":args=[a.from,a.to,a.pageSize,a.pagePos];break;\n case \"branch.publish\":args=[a.branch,a.commit];break;\n case \"branch.merge\":args=[a.branch,a.with,a.name,a.message];break;\n case \"fs.read\":args=[a.commit||a.ref,a.path,a.startLine,a.endLine];break;\n case \"fs.list\":args=[a.ref,a.path||\"/\",a.pageSize,a.pagePos];break;\n case \"fs.stat\":args=[a.ref,a.path];break;\n case \"fs.grep\":case \"fs.glob\":args=[a.ref,a.pattern,a.path||\"/\",a.pageSize,a.pagePos];break;\n case \"fs.blame\":args=[a.commit||a.ref,a.path,a.fromLine];break;\n case \"fs.diff_files\":args=[a.left.commit||a.ref,a.left.path,a.right.commit||a.ref,a.right.path];break;\n case \"fs.write\":args=[a.branch,a.path,a.content,a.message];break;\n case \"fs.edit\":args=[a.branch,a.path,a.oldText,a.newText,a.message];break;\n case \"fs.mkdir\":case \"fs.rm\":args=[a.branch,a.path,a.message];break;\n case \"fs.cp\":case \"fs.mv\":args=[a.branch,a.from,a.to,a.message];break;\n case \"fs.apply\":args=[a.branch,a.changes.map(({kind,...rest})=>({op:kind===\"remove\"?\"rm\":kind,...rest})),a.message];break;\n case \"sandbox.create\":args=[a.name||\"box-1\",project,{raw:\"process.env.LAYERFS_IMAGE\"}];break;\n case \"sandbox.mount\":args=[a.sandbox,a.branch];break;\n case \"sandbox.status\":args=[a.sandbox,a.path];break;\n case \"sandbox.close\":args=[a.sandbox];break;\n case \"sandbox.exec\":args=[a.sandbox,a.path,a.command,a.message];if(a.background){target=\"operator\";method=\"process.start\";args=args.slice(0,3);}break;\n case \"sandbox.list_processes\":target=\"operator\";method=\"process.list\";args=[a.sandbox];break;\n case \"process.cancel\":target=\"operator\";args=[a.sandbox,a.process];break;\n case \"sandbox.commit\":args=[a.sandbox,a.path,a.message,!!a.force];break;\n case \"sandbox.unmount\":args=[a.sandbox,a.path,!!a.discard];break;\n default:return `// ${method} is a UI action`;\n }\n while(args.length&&args[args.length-1]===undefined)args.pop();\n const imports=target===\"operator\"?'\\nimport { LayerFSOperator } from \"@layerfs/sdk/operator\";':\"\";\n return `node --input-type=module <<'JS'\\nimport { LayerFS } from \"@layerfs/sdk\";${imports}\\nconst layerfs = new LayerFS(${J(project)});\\n${target===\"operator\"?\"const operator = new LayerFSOperator(layerfs);\\n\":\"\"}const result = await ${target}.${method}(${args.map(v=>v===undefined?\"undefined\":v&&v.raw?v.raw:J(v)).join(\", \")});\\nconsole.log(JSON.stringify(result));\\nJS`;\n }\n\n // ---------------------------------------------------------------- scenarios\n // Runs every step on a fresh model; records outcome, snapshot and the check.\n function runScenario(scn) {\n const sim = new Sim();\n const steps = [];\n const initial = sim.snapshot();\n for (const [i, st] of scn.steps.entries()) {\n const before = sim.snapshot();\n const outcome = sim.run(st.call, st.args);\n const after = sim.snapshot();\n let pass = outcome.code === st.expect;\n let why = pass ? \"\" : `expected ${st.expect}, got ${outcome.code}`;\n if (pass && st.check) {\n try {\n const r = st.check(outcome.result || outcome.refusal, after);\n if (r !== true) { pass = false; why = typeof r === \"string\" ? r : \"check failed\"; }\n } catch (e) { pass = false; why = \"check threw: \" + e.message; }\n }\n steps.push({ index: i, ...st, outcome, before, after, pass, why, script: scriptFor(st, scn.project) });\n }\n return { scenario: scn, initial, steps, sim };\n }\n\n const api = { Sim, Refusal, applyChanges, diffTrees, lineDiff, merge3Lines, merge3Trees, lwwRules, hasMarkers, treeKey, scriptFor, runScenario, childrenOf, parentOf, baseName };\n if (typeof module !== \"undefined\" && module.exports) module.exports = api;\n else global.LayerSim = api;\n})(typeof globalThis !== \"undefined\" ? globalThis : this);\n","// Read-side helpers for the Files pane and the fs `blame` command.\n// Refs: \"main\", a Branch name, \"C3\", \"L1\", or \"fork:\" (a fork point).\n// Blame is composed client-side from saved versions (branch.list_commits +\n// fs.read per version); the SDK has no blame call yet (proposed: fs.blame).\n(function (global) {\n \"use strict\";\n const M = typeof module !== \"undefined\" && module.exports ? require(\"./model.js\") : global.LayerSim;\n\n // { ref, label, tree, node } where node is the graph node the ref points at.\n function resolveRef(sim, ref) {\n const s = sim.s;\n if (ref && ref.startsWith(\"fork:\")) {\n const b = s.branches[ref.slice(5)];\n if (!b) return null;\n const node = b.from;\n const root = /^C\\d+$/.test(node) ? s.commits[node].root : s.layers[node].root;\n return { ref, label: `${b.name} fork point (${node})`, tree: s.roots[root], node };\n }\n try {\n const v = sim.resolve(ref);\n if (v.kind === \"live\") return null;\n const node = v.kind === \"main\" ? s.main.head : v.kind === \"branch\" ? (v.head || s.branches[ref].from) : ref;\n return { ref, label: v.label, tree: v.tree, node };\n } catch (e) { return null; }\n }\n\n // The ref one step back: a Commit's parent (or its Branch's fork point),\n // a Layer's parent, a Branch head's parent.\n function parentRef(sim, ref) {\n const s = sim.s, r = resolveRef(sim, ref);\n if (!r) return null;\n const id = r.node;\n if (s.commits[id]) {\n const c = s.commits[id];\n if (c.parent && s.commits[c.parent].branch === c.branch) return c.parent;\n return \"fork:\" + c.branch;\n }\n if (s.layers[id]) return s.layers[id].parent || null;\n return null;\n }\n\n // Saved versions behind a ref, newest first. A Commit walks its parents\n // (across a fork into the source Branch), then its base Layer and main's\n // Layers. A published Layer continues through its source Commit, so main's\n // lines are credited to the Commit that wrote them.\n function chainOf(sim, ref) {\n const s = sim.s, r = resolveRef(sim, ref);\n if (!r) return [];\n const out = [], seen = new Set();\n let id = r.node;\n while (id && !seen.has(id)) {\n seen.add(id);\n if (s.commits[id]) {\n const c = s.commits[id];\n out.push({ id, kind: \"commit\", branch: c.branch, by: c.by, via: c.via, root: c.root });\n id = c.parent || c.base;\n } else if (s.layers[id]) {\n const l = s.layers[id];\n if (l.sourceCommit && !seen.has(l.sourceCommit)) { id = l.sourceCommit; continue; }\n out.push({ id, kind: \"layer\", branch: \"main\", via: l.sourceCommit ? `published from ${l.sourceCommit}` : \"project.init\", root: l.root });\n id = l.parent;\n } else break;\n }\n return out;\n }\n\n // Each line of `path` at `ref`, with the oldest saved version in the chain\n // from which the line is unchanged.\n function blame(sim, ref, path) {\n const s = sim.s, chain = chainOf(sim, ref);\n const text = (n) => { const e = s.roots[n.root][path]; return e && e.type === \"file\" ? e.content : null; };\n if (!chain.length || text(chain[0]) == null) return null;\n const lines = text(chain[0]).split(\"\\n\");\n const track = lines.map((_, i) => i), owner = new Array(lines.length).fill(null);\n let open = lines.length;\n for (let k = 0; k < chain.length && open; k++) {\n const cur = chain[k], older = chain[k + 1], curText = text(cur), oldText = older ? text(older) : null;\n if (oldText == null) { for (let i = 0; i < lines.length; i++) if (!owner[i]) owner[i] = cur; break; }\n if (oldText === curText) continue;\n const map = {};\n let ci = 0, oi = 0;\n for (const op of M.lineDiff(oldText, curText)) {\n if (op.op === \" \") { map[ci] = oi; ci++; oi++; } else if (op.op === \"+\") ci++; else oi++;\n }\n for (let i = 0; i < lines.length; i++) {\n if (owner[i]) continue;\n const j = map[track[i]];\n if (j === undefined) { owner[i] = cur; open--; } else track[i] = j;\n }\n }\n return { versions: chain.length, lines: lines.map((t, i) => ({ n: i + 1, text: t, origin: owner[i] })) };\n }\n\n // The saved versions of `path` behind a ref where it changed, newest first:\n // { node, change: \"A\" | \"M\" | \"D\", content }. A preview of a file-history\n // read (issue #329); live trees load lazily, so early answers can be short.\n function history(sim, ref, path) {\n const s = sim.s, chain = chainOf(sim, ref), out = [];\n const text = (n) => { const e = n && s.roots[n.root] && s.roots[n.root][path]; return e && e.type === \"file\" ? e.content : null; };\n for (let k = 0; k < chain.length; k++) {\n const cur = text(chain[k]), old = text(chain[k + 1]);\n if (cur === old) continue;\n out.push({ node: chain[k], change: cur == null ? \"D\" : old == null ? \"A\" : \"M\", content: cur });\n }\n return out;\n }\n\n // path -> \"A\" | \"M\" | \"D\" from base to subject, plus folder roll-ups.\n function changeMap(subjectTree, baseTree) {\n const files = {}, dirs = {};\n for (const d of M.diffTrees(baseTree, subjectTree)) {\n if (d.type === \"dir\" && d.kind === \"Modified\") continue;\n files[d.path] = d.kind === \"Added\" ? \"A\" : d.kind === \"Removed\" ? \"D\" : \"M\";\n for (let p = M.parentOf(d.path); p && p !== \"/\"; p = M.parentOf(p)) dirs[p] = (dirs[p] || 0) + 1;\n }\n return { files, dirs, count: Object.keys(files).length };\n }\n\n // Children of `dir` present in either tree, folders first.\n function listBoth(subjectTree, baseTree, dir) {\n const set = new Set(M.childrenOf(subjectTree, dir));\n if (baseTree) for (const p of M.childrenOf(baseTree, dir)) set.add(p);\n const typeOf = (p) => (subjectTree[p] || baseTree[p]).type;\n return [...set].sort((a, b) => (typeOf(a) === typeOf(b) ? a.localeCompare(b) : typeOf(a) === \"dir\" ? -1 : 1))\n .map((p) => ({ path: p, name: M.baseName(p), type: typeOf(p), gone: !subjectTree[p] }));\n }\n\n const api = { resolveRef, parentRef, chainOf, blame, history, changeMap, listBoth };\n if (typeof module !== \"undefined\" && module.exports) module.exports = api;\n else global.LayerFiles = api;\n})(this);\n","// What the terminals print under each command line (cli.js has the command\r\n// lines and which terminal prints each call), and the bubble over the agent\r\n// that made it. Plain data; the views escape and colour it (classes \"good\",\r\n// \"bad\", \"mark\", \"dim\").\r\n\r\n/** Terminal engine line classes, as the views name them. */\r\nexport const LINE_CLASS = { err: \"bad\", warn: \"mark\", ok: \"good\", info: \"good\" };\r\nexport const outLines = (rec) => rec.lines.map((x) => ({ t: x.t, c: LINE_CLASS[x.c] || \"\" }));\r\nexport const callsOf = (rec, skip) => rec.calls.filter((c) => !skip || !skip.has(c.call)).map((c) => ({ call: c.call, code: c.outcome.code, timing: c.outcome.timing, script: c.script }));\r\n\r\n/** The node a call created, for attribution and the flying block. */\r\nexport function nodeOf(o) {\r\n if (!o.ok) return null;\r\n const r = o.result;\r\n return o.code === \"Committed\" || o.code === \"Merged\" ? r.head : o.code === \"Added\" ? r.publishedLayer.id : o.code === \"Initialized\" ? r.main.headLayer : null;\r\n}\r\n\r\n/** Outcome lines under a command. Live and replayed results carry fewer\r\n * fields than the simulator's, so anything else is optional here. */\r\nexport function outcome(call, o, shOut, args = {}) {\r\n const L = (t, c = \"\") => ({ t, c });\r\n if (shOut) {\r\n const out = shOut.map((x) => L(x.t, /^(<{7}|={7}|>{7})/.test(x.t) ? \"mark\" : x.c === \"err\" ? \"bad\" : \"\"));\r\n if (o.ok && o.result.truncated) out.push(L(\"… output truncated at 1 MiB per stream\", \"dim\"));\r\n out.push(!o.ok ? L(`✕ ${o.code} ${o.refusal.message}`, \"bad\") : o.result.process ? L(`● running in background as ${o.result.process}`, \"good\") : L(`[exit ${o.result.exitCode}]`, o.result.exitCode ? \"bad\" : \"good\"));\r\n return out;\r\n }\r\n if (!o.ok) return [L(`✕ ${o.code} ${o.refusal.message}`, \"bad\"), ...(o.refusal.conflicts || []).map((c) => L(` conflict ${c.path}`, \"mark\"))];\r\n const r = o.result;\r\n switch (o.code) {\r\n case \"Initialized\": return [L(`Initialized ${r.project} → main @ ${r.main.headLayer}`, \"good\")];\r\n case \"Forked\": return [L(`${r.branch} ← ${r.head || r.base}`, \"good\")];\r\n case \"Committed\": return [L(`Committed ${r.head}${r.merged ? ` · merged with ${r.merged.head || r.merged.from || \"the head\"}` : \"\"}`, \"good\")];\r\n case \"UpToDate\": return [L(\"UpToDate · nothing new to commit\")];\r\n case \"Merged\": return [L(`Merged → ${r.branch} @ ${r.head}${r.fastForward ? \" · fast-forward\" : \"\"} · inputs untouched`, \"good\")];\r\n case \"Added\": return [L(`Published ${r.source ? `${r.source.branch}@${r.source.commit}` : args.branch} → main @ ${r.publishedLayer.id}`, \"good\")];\r\n case \"Mounted\": return [L(`mounted ${r.branch}@${r.base} → ${r.sandbox}:${r.path}`)];\r\n case \"Unmounted\": return [L(\"unmounted\")];\r\n case \"Stopped\": return [L(`${r.process} ${r.status || \"stopped\"}`)];\r\n case \"Ready\": return [L(`Ready ${r.id} · a new machine with its own localhost`, \"good\")];\r\n case \"Closed\": return [L(`Closed ${r.id}`)];\r\n }\r\n // a replayed call has ids, never content\r\n if (o.replay) {\r\n if (r.process) return [L(`● running in background as ${r.process}`, \"good\")];\r\n if (call === \"sandbox.exec\") return [L(`[exit ${r.exitCode}]`, r.exitCode ? \"bad\" : \"good\")];\r\n return [L(o.code)];\r\n }\r\n if (call === \"fs.read\") return [L(`${(r.text || \"\").split(\"\\n\").length} lines${r.snapshot ? \" · \" + r.snapshot : \"\"}`)];\r\n if (call === \"process.cancel\") return [L(`${args.process} stopped`)];\r\n return [L(o.code)];\r\n}\r\n\r\n/** The bubble over an agent after its call: [text, class], or null. */\r\nexport function bubbleOf(last) {\r\n const o = last.o, r = o.result;\r\n if (!o.ok) return [o.code === \"Conflict\" ? \"Conflict!\" : o.code, \"bad\"];\r\n if (o.code === \"Committed\") return [r.head, \"good\"];\r\n if (o.code === \"Merged\") return [`merge → ${r.head}`, \"good\"];\r\n if (o.code === \"Added\") return [`→ ${r.publishedLayer.id}`, \"good\"];\r\n if (o.code === \"Forked\") return [\"fork\", \"\"];\r\n if (o.code === \"Mounted\") return [\"mount\", \"\"];\r\n if (o.code === \"Ready\") return [`+ ${r.id}`, \"good\"];\r\n if (o.code === \"Closed\") return [`× ${r.id}`, \"\"];\r\n if (o.code === \"running\") return [\"● dev server\", \"good\"];\r\n if (o.code === \"Stopped\" || last.call === \"process.cancel\") return [\"■ stopped\", \"\"];\r\n if (last.call === \"sandbox.exec\" && r && r.process) return [\"● dev server\", \"good\"];\r\n if (last.call === \"sandbox.exec\" && r && r.exitCode != null) return r.exitCode ? [`exit ${r.exitCode}`, \"bad\"] : /npm (test|run test)/.test((last.step && last.step.sh) || \"\") ? [\"✓ tests\", \"good\"] : null;\r\n return null;\r\n}\r\n","// SDK to CLI: the one table that says, for every call an agent can make,\n// which terminal prints it and the command line it prints there.\n//\n// Terminals\n// project one per project: the project and its Branches (init, fork,\n// merge, publish, history reads; an older trace's Sandbox\n// create and close)\n// fs one per Branch: every fs.* call on that Branch\n// workspace one pane per mounted Workspace (sandbox:path): mount, the\n// commands run in it, status, commit, unmount, process control\n// null not drawn: operator reads (and an older client's service lookup)\n//\n// CLI form: ` [--optional value…]`\n// - group and method are the SDK's own names (`branch list_commits`).\n// - A terminal hides the group it implies: the fs terminal prints\n// `read /a.txt`, a Workspace pane `commit -m \"…\"`. The project terminal\n// prints every group (`branch merge …`).\n// - Required arguments are positional, in SDK order. Optional ones are\n// `--kebab-name value` and print only when they differ from the SDK\n// default; a true boolean is a bare `--force` / `--discard`.\n// - A message is `-m \"\"`. File content is never printed.\n// - What the terminal already names is not repeated: an fs line drops its\n// Branch or ref, a workspace line drops its Sandbox and path.\n// - A command run in a Workspace prints as the shell command itself (the\n// pane is that Workspace's shell); a background start ends with ` &`.\n// A failed mount has no pane, so it prints in the project terminal.\n//\n// `dim` lines are reads or bookkeeping, drawn quieter than changes.\n\nconst kebab = (name) => name.replace(/[A-Z]/g, (c) => \"-\" + c.toLowerCase());\nconst quote = (v) => (/^[^\\s\"'\\\\]+$/.test(String(v)) ? String(v) : JSON.stringify(String(v)));\nconst shortImage = (image) => String(image).replace(/^(sha256:[0-9a-f]{12})[0-9a-f]+$/, \"$1\");\n\n/**\n * One command line: `head`, then the positional values, then each optional\n * `[name, value, sdkDefault]` that is set and not its default, then `-m`.\n */\nfunction line(head, positional = [], optional = [], message) {\n const parts = [head, ...positional.filter((v) => v !== undefined && v !== null && v !== \"\").map(quote)];\n for (const [name, value, fallback] of optional) {\n if (value === undefined || value === null || value === fallback || value === false) continue;\n parts.push(value === true ? `--${kebab(name)}` : `--${kebab(name)} ${quote(value)}`);\n }\n if (message !== undefined && message !== null) parts.push(`-m ${JSON.stringify(String(message))}`);\n return parts.join(\" \");\n}\nconst page = (a) => [[\"pageSize\", a.pageSize, 50], [\"pagePos\", a.pagePos, 0]];\nconst count = (changes) => (Array.isArray(changes) ? changes.length : changes);\n\n/** call name -> { at: terminal, dim?: true, cli: (args, sh?) => command line } */\nexport const CLI = {\n // ------------------------------------------------------------- project\n \"project.init\": { at: \"project\", cli: (a) => line(\"project init\", [a.path ?? `./${a.name}`]) },\n \"project.list_branches\": { at: \"project\", dim: true, cli: (a) => line(\"project list_branches\", [], page(a)) },\n\n // ------------------------------------------------------------- branch\n \"branch.fork\": { at: \"project\", cli: (a) => line(\"branch fork\", [a.name], [[\"fromRef\", a.fromRef ?? a.from ?? a.branch, \"main\"]]) },\n // the simulator's name for a fork of main\n \"main.fork\": { at: \"project\", cli: (a) => line(\"branch fork\", [a.name]) },\n \"branch.list_commits\": { at: \"project\", dim: true, cli: (a) => line(\"branch list_commits\", [a.branch], page(a)) },\n \"branch.diff_commits\": { at: \"project\", dim: true, cli: (a) => line(\"branch diff_commits\", [a.from, a.to], page(a)) },\n \"branch.diff_branches\": { at: \"project\", dim: true, cli: (a) => line(\"branch diff_branches\", [a.from, a.to], page(a)) },\n \"branch.merge\": { at: \"project\", cli: (a) => line(\"branch merge\", [a.branch, a.with, a.name], [], a.message) },\n \"branch.publish\": { at: \"project\", cli: (a) => line(\"branch publish\", [a.branch], [[\"commit\", a.commit]]) },\n\n // ------------------------------------------------------------- fs (the Branch is the terminal's)\n \"fs.read\": { at: \"fs\", dim: true, cli: (a) => line(\"fs read\", [a.path], [[\"startLine\", a.startLine, 1], [\"endLine\", a.endLine]]) },\n \"fs.list\": { at: \"fs\", dim: true, cli: (a) => line(\"fs list\", [a.path && a.path !== \"/\" ? a.path : undefined], page(a)) },\n \"fs.stat\": { at: \"fs\", dim: true, cli: (a) => line(\"fs stat\", [a.path]) },\n \"fs.grep\": { at: \"fs\", dim: true, cli: (a) => line(\"fs grep\", [a.pattern, a.path && a.path !== \"/\" ? a.path : undefined], page(a)) },\n \"fs.glob\": { at: \"fs\", dim: true, cli: (a) => line(\"fs glob\", [a.pattern, a.path && a.path !== \"/\" ? a.path : undefined], page(a)) },\n \"fs.blame\": { at: \"fs\", dim: true, cli: (a) => line(\"fs blame\", [a.path], [[\"fromLine\", a.fromLine, 1]]) },\n // two refs, so both are printed\n \"fs.diff_files\": { at: \"fs\", dim: true, cli: (a) => line(\"fs diff_files\", [a.leftRef ?? a.left?.commit ?? a.ref, a.leftPath ?? a.left?.path ?? a.path, a.rightRef ?? a.right?.commit ?? a.ref, a.rightPath ?? a.right?.path]) },\n \"fs.write\": { at: \"fs\", cli: (a) => line(\"fs write\", [a.path], [], a.message) },\n \"fs.edit\": { at: \"fs\", cli: (a) => line(\"fs edit\", [a.path], [], a.message) },\n // the changes are summarized by their count\n \"fs.apply\": { at: \"fs\", cli: (a) => line(count(a.changes) !== undefined ? `fs apply ${count(a.changes)} changes` : \"fs apply\", [], [], a.message) },\n \"fs.mkdir\": { at: \"fs\", cli: (a) => line(\"fs mkdir\", [a.path], [], a.message) },\n \"fs.rm\": { at: \"fs\", cli: (a) => line(\"fs rm\", [a.path], [], a.message) },\n \"fs.cp\": { at: \"fs\", cli: (a) => line(\"fs cp\", [a.from, a.to], [], a.message) },\n \"fs.mv\": { at: \"fs\", cli: (a) => line(\"fs mv\", [a.from, a.to], [], a.message) },\n\n // ------------------------------------------------------------- workspace\n // LayerFS places a Workspace in one of the project's Sandboxes (#373)\n \"workspace.mount\": { at: \"workspace\", dim: true, cli: (a) => line(\"workspace mount\", [a.branch]) },\n \"workspace.exec\": { at: \"workspace\", cli: (a, sh) => (sh ?? a.command) + (a.background && !/&\\s*$/.test(sh ?? a.command) ? \" &\" : \"\") },\n \"workspace.status\": { at: \"workspace\", dim: true, cli: () => \"workspace status\" },\n \"workspace.commit\": { at: \"workspace\", cli: (a) => line(\"workspace commit\", [], [[\"force\", a.force]], a.message) },\n \"workspace.unmount\": { at: \"workspace\", cli: (a) => line(\"workspace unmount\", [], [[\"discard\", a.discard]]) },\n // The simulator, the scenarios and older traces name these calls by the\n // older SDK's names; they print as the Workspace calls. Sandbox create and\n // close have no successor: LayerFS starts and closes Sandboxes itself.\n \"sandbox.create\": { at: \"project\", cli: (a) => line(\"sandbox create\", [a.name, a.project, a.image && shortImage(a.image)]) },\n \"sandbox.close\": { at: \"project\", cli: (a) => line(\"sandbox close\", [a.sandbox]) },\n\n // ------------------------------------------------------------- operator\n // process start and cancel are the only operator calls drawn; the rest are reads\n \"process.start\": { at: \"workspace\", cli: (a, sh) => CLI[\"workspace.exec\"].cli({ ...a, background: true }, sh) },\n \"process.cancel\": { at: \"workspace\", cli: (a) => line(\"process cancel\", [a.process]) },\n // the simulator's names for a Sandbox's process list and the Layer snapshot\n \"sandbox.list_processes\": { at: \"project\", dim: true, cli: (a) => line(\"process list\", [a.sandbox]) },\n \"main.list_layers\": { at: \"project\", dim: true, cli: () => \"inspect snapshot\" },\n \"sandbox.service\": { at: null },\n \"sandbox.list\": { at: null },\n \"project.progress\": { at: null },\n \"store.stats\": { at: null },\n \"store.commits\": { at: null },\n \"store.overwritten\": { at: null },\n \"files.stats\": { at: null },\n \"files.history\": { at: null },\n \"workspace.overlay\": { at: null },\n \"workspace.changes\": { at: null },\n \"inspect.snapshot\": { at: null },\n \"process.list\": { at: null },\n};\n\nfor (const name of [\"mount\", \"exec\", \"status\", \"commit\", \"unmount\"]) CLI[`sandbox.${name}`] = CLI[`workspace.${name}`];\n\n/** The route of `call`; a call missing from the table prints its own name, dimmed, in the project terminal. */\nexport const routeOf = (call) => CLI[call] ?? { at: \"project\", dim: true, cli: () => call };\n\n/** The group each terminal implies, hidden from its lines. */\nconst IMPLIED = { fs: \"fs \", workspace: \"workspace \" };\n\n/** The full command line of `call` with `args` (and, for a Workspace command, its shell text `sh`). */\nexport const commandOf = (call, args = {}, sh) => routeOf(call).cli?.(args, sh) ?? call;\n\n/** The line `call` prints in its terminal: the command line without the group the terminal implies. */\nexport function cliOf(call, args = {}, sh) {\n const text = commandOf(call, args, sh), implied = IMPLIED[routeOf(call).at];\n return implied && text.startsWith(implied) ? text.slice(implied.length) : text;\n}\n","// The engine state reshaped for the views: graph nodes with their author,\r\n// Branch rows, and the mounted Workspaces an agent owns. Rebuilt after\r\n// every event from `W.engine.s`, which every engine keeps in the\r\n// simulator's shape (model.js `Sim.s`).\r\n\r\n/** Branch lane colours, by Branch order. */\r\nexport const BCOL = [\"--b0\", \"--b1\", \"--b2\", \"--b3\", \"--b4\", \"--b5\"];\r\n\r\nexport const branchRoot = (s, b) => (b.head ? s.commits[b.head].root : s.layers[b.base].root);\r\n/** The engine's Workspace for a pane key \"sb_01:/workspaces/2\". */\r\nexport const engWs = (s, k) => { const i = k.indexOf(\":\"), sb = s.sandboxes[k.slice(0, i)]; return sb && sb.workspaces[k.slice(i + 1)]; };\r\n\r\nexport function derive(W) {\r\n const s = W.engine.s, nodes = {};\r\n W.mainHead = s.main ? s.main.head : null;\r\n W.order = s.branchOrder.slice();\r\n W.initLayer = (Object.values(s.layers).find((l) => !l.parent) || {}).id;\r\n for (const l of Object.values(s.layers))\r\n nodes[l.id] = { id: l.id, kind: \"layer\", branch: null, parents: [l.parent, l.sourceCommit || null], t: l.slot, by: W.attrib[l.id], msg: l.sourceBranch ? `publish ${l.sourceBranch}@${l.sourceCommit}` : `init ${s.project ? s.project.name : \"\"}` };\r\n for (const name of s.branchOrder) {\r\n const b = s.branches[name];\r\n nodes[\"fork:\" + name] = { id: \"fork:\" + name, kind: \"fork\", branch: name, parents: [b.from], t: b.slot, by: W.attrib[\"fork:\" + name], msg: `fork ← ${b.from}` };\r\n }\r\n for (const c of Object.values(s.commits)) {\r\n const own = c.parent && s.commits[c.parent] && s.commits[c.parent].branch === c.branch;\r\n // demo commit messages already start with \": \"; the label adds the agent itself\r\n const by = W.attrib[c.id], raw = c.message || c.via || \"\", msg = by && raw.startsWith(`${by}: `) ? raw.slice(by.length + 2) : raw;\r\n nodes[c.id] = { id: c.id, kind: \"commit\", branch: c.branch, parents: [own ? c.parent : \"fork:\" + c.branch, c.mergedFrom || null], t: c.slot, by, msg };\r\n }\r\n W.nodes = nodes;\r\n W.branches = {};\r\n s.branchOrder.forEach((name, i) => {\r\n const b = s.branches[name];\r\n W.branches[name] = { name, color: BCOL[i % BCOL.length], head: b.head || \"fork:\" + name, base: b.from, last: W.touched[name] ?? 0,\r\n published: !!b.head && Object.values(s.layers).some((l) => l.sourceBranch === name && l.sourceCommit === b.head) };\r\n });\r\n W.ws = {};\r\n for (const id of s.sandboxOrder) for (const p of s.sandboxes[id].wsOrder) {\r\n const w = s.sandboxes[id].workspaces[p], k = `${id}:${p}`, pane = W.panes[k];\r\n // A Workspace no agent event mounted (another client of the same\r\n // project) has no agent to attribute it to, so it is not drawn.\r\n if (!w.mounted || !pane) continue;\r\n W.ws[k] = { id: k, agent: pane.agent, branch: w.branch, lines: pane.lines, born: pane.born, bad: W.engine.markersIn(w).length > 0, baseNode: w.baseCommit || \"fork:\" + w.branch, eng: w };\r\n }\r\n return W;\r\n}\r\n\r\n/** Root of every ref (main and each Branch), to find what a step changed. */\r\nexport function rootsOf(W) {\r\n const s = W.engine.s, out = {};\r\n if (s.main) out.main = s.layers[s.main.head].root;\r\n for (const b of s.branchOrder) out[b] = branchRoot(s, s.branches[b]);\r\n return out;\r\n}\r\n\r\n/** Paths each ref changed between two `rootsOf` snapshots. Trees load\r\n * lazily on live engines: a ref only flashes when both of its trees are\r\n * already here (`loaded(root, W)`). `diffTrees` is model.js's. */\r\nexport function changedPaths(W, before, after, { diffTrees, loaded = () => true }) {\r\n const out = {}, roots = W.engine.s.roots;\r\n for (const [ref, root] of Object.entries(after))\r\n if (before[ref] && root && before[ref] !== root && loaded(before[ref], W) && loaded(root, W)) out[ref] = new Set(diffTrees(roots[before[ref]], roots[root]).map((d) => d.path));\r\n return out;\r\n}\r\n","// What dsh knows and LayerFS does not: which agent made each call, where\n// each agent is, and the lines each terminal printed. A view `W` holds that\n// beside its engine (the simulator, the live server, or a replayed trace);\n// derive() then reshapes the engine state for the views.\nimport { nodeOf, outcome } from \"./terminals.js\";\nimport { cliOf, routeOf } from \"./cli.js\";\nimport { engWs } from \"./derive.js\";\n\nexport const newAgent = () => ({ lastLoc: { kind: \"bench\" }, lastT: -99 });\n\n/** A fresh view over `engine` (anything with `s`, `markersIn` and `dirtyOf`). */\nexport function createView(engine, { lead = \"main\" } = {}) {\n return {\n engine, lead, clock: 0, seq: 0, tick: 0,\n agents: { [lead]: newAgent() },\n panes: {}, fsLog: {}, hist: [], attrib: {}, touched: {}, names: {}, sbBy: {}, sbAt: {},\n flash: {}, newNodes: new Set(), lastTab: \"main\", last: null, check: null,\n };\n}\n\n/** Calls that run in a mounted Workspace and print in its pane (cli.js: at \"workspace\"); mount opens the pane. */\nconst inPane = (call) => routeOf(call).at === \"workspace\" && call !== \"sandbox.mount\";\n\n/** One agent call before it runs: the Workspace it runs in (the one the step\n * binds or names, else the agent's latest), and its arguments with Sandbox\n * names resolved. `st` is `{ a, call, args, sh?, ws?, bind?, group?, as? }`. */\nexport function prepare(W, st) {\n const n = st.a, A = (W.agents[n] ||= newAgent()), s = W.engine.s;\n let call = st.call, args = { ...st.args };\n const bind = st.bind || (st.ws ? W.names[st.ws] : A.ws);\n const sb = bind && s.sandboxes[bind.sandbox], mine = sb && sb.workspaces[bind.path];\n const pane = bind && `${bind.sandbox}:${bind.path}`;\n const paneCall = !!st.sh || inPane(call);\n let branch;\n if (paneCall) { Object.assign(args, bind); branch = mine ? mine.branch : st.branch; }\n if (call === \"process.cancel\" && !args.process) {\n const run = sb ? sb.procOrder.map((id) => sb.processes[id]).filter((x) => x.path === bind.path && x.status === \"running\") : [];\n args = { sandbox: bind.sandbox, process: run.length ? run[run.length - 1].id : \"none\" };\n }\n // a Sandbox by the name a create step gave it, or by its id\n if (args.sandbox && typeof W.names[args.sandbox] === \"string\") args.sandbox = W.names[args.sandbox];\n if (call === \"sandbox.mount\") branch = args.branch;\n if (st.sh) call = \"sandbox.exec\";\n return { n, A, call, args, bind, mine, pane, paneCall, branch, group: st.group || null, seq: ++W.seq };\n}\n\n/** One agent call after it ran with outcome `o`: its terminal line, the\n * agent's place, and the nodes, Branches and Sandboxes it made. `shOut` is a\n * command's output lines; `calls` the SDK calls behind the line, with timing. */\nexport function record(W, st, p, o, shOut, calls) {\n const { n, A, call, args, pane, paneCall, group, seq } = p, s = W.engine.s;\n let branch = p.branch;\n const out = outcome(call, o, shOut, args);\n W.last = { agent: n, call, step: st, o, node: nodeOf(o) };\n A.out = outOf(call, o, W.tick);\n // a node belongs to the agent that made it; a fast-forward merge only names it again\n if (W.last.node) W.attrib[W.last.node] ??= n;\n if (o.ok && call === \"sandbox.create\") { W.sbBy[o.result.id] = { made: n }; if (st.as) W.names[st.as] = o.result.id; }\n if (o.ok && call === \"sandbox.close\") (W.sbBy[args.sandbox] ||= {}).closed = n;\n // each Sandbox's use by the view clock, for the Sandboxes list: made, last used, closed, calls and commands\n const sbId = call === \"sandbox.create\" ? o.ok && o.result.id : args.sandbox;\n if (sbId) {\n const at = (W.sbAt[sbId] ||= { calls: 0, execs: 0 });\n at.last = W.clock; at.calls = (at.calls || 0) + 1;\n if (call === \"sandbox.exec\") at.execs = (at.execs || 0) + 1;\n if (call === \"sandbox.create\") Object.assign(at, { made: W.clock, image: args.image || null });\n if (o.ok && call === \"sandbox.close\") at.closed = W.clock;\n }\n if (o.ok && (o.code === \"Forked\" || o.code === \"Merged\")) W.attrib[\"fork:\" + o.result.branch] = n;\n\n // which terminal and which line: cli.js\n // a create that named no Sandbox (the simulator's) prints the one it made\n const named = call === \"sandbox.create\" && !args.name && o.ok ? { ...args, name: o.result.id } : args;\n const route = routeOf(call), text = cliOf(call, named, st.sh), dim = !!route.dim;\n if (route.at === \"fs\") {\n branch = args.branch || args.ref;\n (W.fsLog[branch] ||= []).push({ agent: n, text, out, t: seq, dim, calls, group });\n A.lastLoc = { kind: \"fs\", branch };\n } else if (call === \"sandbox.mount\") {\n if (o.ok) {\n A.ws = { sandbox: o.result.sandbox, path: o.result.path };\n if (st.as) W.names[st.as] = A.ws;\n const k = `${A.ws.sandbox}:${A.ws.path}`;\n W.panes[k] = { agent: n, born: seq, branch, lines: [{ dim, text, out, t: seq, calls, group }] };\n A.lastLoc = { kind: \"ws\", branch, ws: k };\n } else { W.hist.push({ agent: n, text, out, t: seq, calls, group }); A.lastLoc = { kind: \"hist\" }; }\n } else if (paneCall) {\n (W.panes[pane] ||= { agent: n, born: seq, lines: [] }).lines.push({ text, out, t: seq, calls, group, dim });\n if (call === \"sandbox.unmount\" && o.ok) {\n // when it left, so a view can fade it out even if it never drew it mounted\n Object.assign(W.panes[pane], { left: seq, branch: W.panes[pane].branch ?? branch });\n // the agent may still hold other Workspaces (a script's fan-out): it stays on the latest one\n const left = Object.keys(W.panes).filter((k) => k !== pane && W.panes[k].agent === n && (engWs(s, k) || {}).mounted).pop();\n if (left) { const i = left.indexOf(\":\"); A.ws = { sandbox: left.slice(0, i), path: left.slice(i + 1) }; A.lastLoc = { kind: \"ws\", branch: engWs(s, left).branch, ws: left }; }\n else { A.ws = null; A.lastLoc = { kind: \"bench\" }; }\n A.lastBranch = branch;\n } else A.lastLoc = { kind: \"ws\", branch, ws: pane };\n } else {\n W.hist.push({ agent: n, text, out, t: seq, calls, group, ...(dim ? { dim } : {}) });\n A.lastLoc = { kind: \"hist\" };\n branch = call === \"branch.publish\" ? args.branch : args.name;\n }\n A.lastT = W.clock;\n if (A.lastLoc.branch) A.lastBranch = A.lastLoc.branch;\n if (branch && s.branches[branch]) W.touched[branch] = W.clock;\n W.lastTab = route.at === \"fs\" || route.at === \"workspace\" || paneCall ? branch : \"main\";\n}\n\n/** The outcome of an agent's last call in a step, for its pose. */\nexport const outOf = (call, o, tick) => ({ call, code: o.code, ok: o.ok, exit: o.ok && o.result ? o.result.exitCode || 0 : 0, proc: call === \"sandbox.exec\" && !!(o.ok && o.result && o.result.process), tick });\n/** Demo steps: a background start reads as \"running\", so use the step's code when it says so. */\nexport const outCode = (call, o, code, tick) => ({ ...outOf(call, o, tick), proc: code === \"running\" || (call === \"sandbox.exec\" && !!(o.ok && o.result && o.result.process)) });\n","// Where each agent stands, from its own calls only: nothing is assigned.\n// An agent stands where its last call ran while that call is recent, then\n// on its mounted Workspace, else on the bench.\n\n/** Seconds an idle agent stays on a Branch tab's \"recently here\" bench. */\nexport const RECENT_S = 90;\n/** Seconds a call keeps its agent where it ran. */\nexport const CALL_S = 12;\n/** How many agents each kind of host draws before \"+N\". */\nexport const CAP = { row: 3, term: 3, bench: 6, chip: 1 };\n/** Idle Branch tabs fade after this many seconds unless pinned; at most MAX_TABS show. */\nexport const FADE_S = 30, MAX_TABS = 6;\n/** Seconds after which a Branch nobody is on, with no Workspace or conflict, retires\n * from the tabs and the board (still in History, and in the tabs' \"+N\" menu), and a\n * closed Sandbox leaves the Sandboxes list. */\nexport const RETIRE_S = 120;\n\nexport function where(W, n) {\n const A = W.agents[n]; if (!A) return null;\n if (W.clock - A.lastT <= CALL_S) return A.lastLoc;\n const w = Object.values(W.ws).find((x) => x.agent === n);\n return w ? { kind: \"ws\", branch: w.branch, ws: w.id } : { kind: \"bench\" };\n}\nexport const idle = (W, n) => where(W, n).kind === \"bench\";\nexport const recentlyOn = (W, b) => Object.keys(W.agents).filter((n) => idle(W, n) && W.agents[n].lastBranch === b && W.clock - W.agents[n].lastT <= RECENT_S);\nexport const agentsOn = (W, b) => Object.keys(W.agents).filter((n) => where(W, n).branch === b);\nexport const conflicted = (W, b) => Object.values(W.ws).some((w) => w.branch === b && w.bad);\nexport const mounted = (W, b) => Object.values(W.ws).some((w) => w.branch === b);\nexport const retired = (W, b) => !agentsOn(W, b).length && !mounted(W, b) && !conflicted(W, b) && W.clock - W.branches[b].last > RETIRE_S;\n\n/** The Branch tabs to show: pinned, active, mounted, conflicted or recently\n * touched, newest first, at most MAX_TABS (the active one always kept); the\n * rest are hidden, or retired after RETIRE_S (newest first). */\nexport function visibleTabs(W, { pinned = {}, active = \"main\" } = {}) {\n const show = W.order.filter((b) => pinned[b] || b === active || mounted(W, b) || conflicted(W, b) || W.clock - W.branches[b].last <= FADE_S);\n show.sort((x, y) => W.branches[y].last - W.branches[x].last);\n const keep = show.slice(0, MAX_TABS);\n if (show.includes(active) && !keep.includes(active)) keep[keep.length - 1] = active;\n const rest = W.order.filter((b) => !keep.includes(b));\n const old = rest.filter((b) => !pinned[b] && retired(W, b)).sort((x, y) => W.branches[y].last - W.branches[x].last);\n return { tabs: W.order.filter((b) => keep.includes(b)), hidden: rest.filter((b) => !old.includes(b)), retired: old };\n}\n\n/** The terminal an agent's location names, for the \"last hit\" highlight. */\nexport function locKey(l) {\n return !l ? null : l.kind === \"ws\" ? \"ws:\" + l.ws : l.kind === \"fs\" ? \"fs:\" + l.branch : l.kind === \"hist\" ? \"hist\" : null;\n}\n","// What an agent is doing, as a pose name: the outcome of its call in this\r\n// step first, then where it is. Sprite sheets map pose names to frames; the\r\n// lead's sheet has expressions instead, mapped by LEAD_POSES.\r\nimport { where } from \"./where.js\";\r\n\r\nexport const POSES = [\"idle\", \"sleep\", \"laptop\", \"read\", \"cheer\", \"arms_open\", \"heart\", \"serve_tea\", \"wave\", \"conflict\", \"refused\", \"failed\", \"run\"];\r\nexport const LEAD_POSES = { idle: \"shy\", sleep: \"sleepy\", laptop: \"thinking\", read: \"thinking\", cheer: \"thumbs_up\", arms_open: \"happy\", heart: \"smug\", serve_tea: \"happy\", wave: \"happy\", conflict: \"crying\", refused: \"surprised\", failed: \"angry\" };\r\n\r\n/** True while a running process belongs to Workspace `wsId` (\"sb_01:/workspaces/2\"). */\r\nexport function serving(W, wsId) {\r\n const i = wsId.indexOf(\":\"), id = wsId.slice(0, i), sb = W.engine.s.sandboxes[id];\r\n return !!sb && (sb.procOrder || []).some((p) => sb.processes[p].status === \"running\" && `${id}:${sb.processes[p].path}` === wsId);\r\n}\r\n\r\n/** `mode` is the host the agent stands on (\"bench\", \"row\", \"term\", \"pane\",\r\n * \"chip\"); `acting` is true for the agent(s) of the current step. */\r\nexport function poseOf(W, n, mode, acting) {\r\n const A = W.agents[n], o = A.out && A.out.tick === W.tick ? A.out : null, l = where(W, n);\r\n const mine = Object.values(W.ws).filter((w) => w.agent === n);\r\n if (A.spawned === W.tick) return \"wave\";\r\n if (o && !o.ok) return o.code === \"Conflict\" ? \"conflict\" : \"refused\";\r\n if (o && o.code === \"Committed\") return \"cheer\";\r\n if (o && o.code === \"Merged\") return \"arms_open\";\r\n if (o && o.code === \"Added\") return \"heart\";\r\n if (o && o.proc) return \"serve_tea\";\r\n if (o && o.exit) return \"failed\";\r\n if (mine.some((w) => w.bad)) return \"conflict\";\r\n if (mode === \"bench\") return W.clock - A.lastT > 40 ? \"sleep\" : \"idle\";\r\n if (acting && l.kind === \"ws\") return \"laptop\";\r\n if (acting && (l.kind === \"fs\" || l.kind === \"hist\")) return \"read\";\r\n if (mine.some((w) => serving(W, w.id))) return \"serve_tea\";\r\n return \"idle\";\r\n}\r\n\r\n/** A fan-out copy's pose: what its Workspace is doing. */\r\nexport const ghostPose = (W, w) => (w.bad ? \"conflict\" : serving(W, w.id) ? \"serve_tea\" : \"laptop\");\r\n","// Fan-out: an agent (say, running a script) may hold several Workspaces at\r\n// once. It stands where its last call ran; each other Workspace it holds\r\n// gets a faint copy, and the agent shows ×N for the places it works in.\r\nimport { where } from \"./where.js\";\r\n\r\nexport function fanOf(W, n) {\r\n const l = where(W, n), others = Object.values(W.ws).filter((w) => w.agent === n && !(l.kind === \"ws\" && l.ws === w.id));\r\n return { n: others.length + (l.kind === \"bench\" ? 0 : 1), others };\r\n}\r\n\r\n/** Where a copy stands for view tab `active`: the Branch row on main, the\r\n * Branch's tab chip elsewhere, its pane on its own Branch tab. */\r\nexport function ghostSpot(active, w) {\r\n if (active === \"main\") return { loc: \"row:\" + w.branch, mode: \"row\" };\r\n if (w.branch !== active) return { tab: w.branch, mode: \"chip\" };\r\n return { loc: \"ws:\" + w.id, mode: \"pane\" };\r\n}\r\n\r\n/** Where an agent stands for view tab `active`: a `data-loc` key, a tab chip,\r\n * or nothing when this tab has nothing to say about it. */\r\nexport function spotOf(W, n, active, recently) {\r\n const l = where(W, n);\r\n if (l.kind === \"bench\") return active !== \"main\" && recently.includes(n) ? { loc: \"bench\", mode: \"bench\" } : null;\r\n if (active === \"main\") return l.kind === \"hist\" ? { loc: \"hist\", mode: \"term\" } : { loc: \"row:\" + l.branch, mode: \"row\" };\r\n if (l.kind === \"hist\") return { tab: \"main\", mode: \"chip\" };\r\n if (l.branch !== active) return { tab: l.branch, mode: \"chip\" };\r\n return l.kind === \"ws\" ? { loc: \"ws:\" + l.ws, mode: \"pane\" } : { loc: \"fs:\" + l.branch, mode: \"term\" };\r\n}\r\n","// The live read model in the simulator's shape (model.js `Sim.s`), built from\n// `inspect.snapshot` and the answers of the calls the server made.\n//\n// Display ids: Commits are C1, C2, … and Layers L0, L1, … in the order they\n// were made; roots are R0, R1, …; a project's numbered Sandbox n is\n// layerfs--n, as its container is named (#373), and an older\n// trace's opaque Sandbox id sb_01, sb_02, …. Real ids never\n// reach the UI, and ids the UI sends are mapped back before an SDK call.\n// Commits and Layers are immutable, so the mirror keeps every one it has seen\n// even after a snapshot pages it out.\n\nexport class Mirror {\n constructor() {\n this.toLabel = new Map();\n this.toReal = new Map();\n this.next = { C: 1, L: 0, R: 0, sb: 1 };\n this.slot = 0;\n this.version = 0;\n /** The project, for its numbered Sandboxes' labels. */\n this.project = null;\n this.s = {\n project: null, main: null, roots: {}, commits: {}, layers: {},\n branches: {}, branchOrder: [], sandboxes: {}, sandboxOrder: [],\n };\n\n }\n\n // ------------------------------------------------------------ ids\n label(kind, real) {\n if (real === null || real === undefined) return null;\n const known = this.toLabel.get(real);\n if (known) return known;\n const n = this.next[kind]++;\n // a numbered Sandbox is named as its container; a named one keeps its\n // name; an older opaque sb_ id gets sb_01, sb_02, …\n const label = kind !== \"sb\" ? `${kind}${n}`\n : /^\\d+$/.test(real) && this.project ? `layerfs-${this.project}-${real}`\n : /^sb_[0-9a-f]{16,}$/.test(real) ? `sb_${String(n).padStart(2, \"0\")}` : real;\n this.toLabel.set(real, label);\n this.toReal.set(label, real);\n return label;\n }\n /** A node id (Commit or Layer) the UI knows, or null. */\n node(real) {\n return real ? this.toLabel.get(real) ?? null : null;\n }\n root(real) {\n return this.label(\"R\", real);\n }\n real(label) {\n return this.toReal.get(label) ?? label;\n }\n /** A Commit id first seen in an answer: labelled now, recorded on refresh. */\n commitLabel(real) {\n return this.label(\"C\", real);\n }\n bump() {\n this.version++;\n }\n\n // ------------------------------------------------------------ snapshot\n /** Folds one `inspect.snapshot` answer (kind \"ok\") into the mirror. */\n absorb(snap, sandboxes) {\n const s = this.s, before = JSON.stringify(s);\n s.project = { name: snap.project };\n s.store = snap.store;\n // Commit labels follow the order Commits were made, before a Layer names one.\n for (const c of [...snap.commits].sort((a, b) => a.time - b.time)) this.commitLabel(c.id);\n // Layers: the snapshot lists main's chain newest first.\n for (const l of [...snap.layers].reverse()) this.absorbLayer(l);\n const main = snap.branches.find((b) => b.name === \"main\");\n if (main) s.main = { head: this.label(\"L\", main.base) };\n // Commits: in the order they were made.\n for (const c of [...snap.commits].sort((a, b) => a.time - b.time)) this.absorbCommit(c);\n for (const b of snap.branches) {\n if (b.name === \"main\") continue;\n const known = s.branches[b.name];\n const base = this.label(\"L\", b.base), head = this.node(b.head) ?? (b.head ? this.commitLabel(b.head) : null);\n const from = this.node(b.forkedFrom) ?? base;\n if (!known) {\n s.branches[b.name] = { name: b.name, base, head, from, slot: this.slot++ };\n s.branchOrder.push(b.name);\n } else Object.assign(known, { base, head, from });\n }\n this.absorbWorkspaces(snap, sandboxes);\n // A poll that finds nothing new keeps the version, so the page does not redraw.\n if (JSON.stringify(s) !== before) this.bump();\n }\n absorbLayer(l) {\n const id = this.label(\"L\", l.id);\n if (this.s.layers[id]) return;\n this.s.layers[id] = {\n id, parent: this.node(l.parent), root: this.root(l.root), sourceBranch: l.sourceBranch ?? null,\n sourceCommit: l.sourceCommit ? this.commitLabel(l.sourceCommit) : null, logical: l.logical ?? null, slot: this.slot++, time: this.slot,\n };\n }\n absorbCommit(c) {\n const id = this.commitLabel(c.id);\n if (this.s.commits[id]) {\n\n return;\n }\n\n const record = {\n id, parent: this.node(c.parent), root: this.root(c.root), base: this.label(\"L\", c.base), branch: c.branch,\n slot: this.slot++, time: c.time, by: c.via === \"fs\" ? \"fs\" : c.via === \"merge\" ? \"merge\" : \"workspace\",\n via: c.via === \"exec\" ? \"commit\" : c.via,\n message: c.message, logical: c.logical, newCanonical: c.newCanonical, newStored: c.newStored, newMetadata: c.newMetadata,\n };\n if (c.secondParent) { record.mergedFrom = this.node(c.secondParent); record.lww = this.ids(c.lww || []); }\n if (c.mergedFrom) record.merged = { from: this.node(c.mergedFrom), head: record.parent, lww: this.ids(c.lww || []) };\n if (c.displaced) { const displaced = this.commitLabel(c.displaced); if (this.s.commits[displaced]) this.s.commits[displaced].displacedBy = id; }\n this.s.commits[id] = record;\n }\n absorbWorkspaces(snap, sandboxes) {\n const s = this.s;\n for (const sb of sandboxes) {\n const id = sb.label;\n s.sandboxes[id] ||= { id, closed: false, workspaces: {}, wsOrder: [], processes: {}, procOrder: [] };\n if (!s.sandboxOrder.includes(id)) s.sandboxOrder.push(id);\n const box = s.sandboxes[id];\n box.closed = sb.closed;\n for (const path of box.wsOrder) box.workspaces[path].mounted = false;\n const views = (snap.sandboxes.find((x) => x.id === sb.real) || { workspaces: [] }).workspaces;\n for (const w of views) {\n if (!w.mounted || !w.directory) continue;\n const path = w.directory;\n const tracked = sb.workspaces[path] || {};\n const ws = (box.workspaces[path] ||= { sandbox: id, path, slot: this.slot++, times: {} });\n if (!box.wsOrder.includes(path)) box.wsOrder.push(path);\n const dirty = w.dirty ? Math.max(w.dirty.inodes, w.dirty.entries) : 0;\n Object.assign(ws, {\n branch: w.branch, baseCommit: this.node(w.base), baseLayer: this.label(\"L\", w.baseLayer), baseRoot: this.root(w.root),\n mounted: true, live: null, dirty, overlay: tracked.overlay ?? null, pendingMerge: w.pendingMerge, stale: w.headMovedSinceMount === true,\n markers: (tracked.changes?.items || []).filter((c) => c.markers).map((c) => c.path),\n changes: tracked.changes,\n });\n }\n box.processes = {};\n box.procOrder = [];\n for (const p of sb.processes) {\n box.processes[p.id] = { id: p.id, path: p.path, command: p.command, status: p.status };\n box.procOrder.push(p.id);\n }\n }\n }\n\n /** Branches mounted by Workspaces: `sb:/workspaces/N` keys, like Sim.liveMountsOf. */\n liveMountsOf(branch) {\n const out = [];\n for (const id of this.s.sandboxOrder) {\n const sb = this.s.sandboxes[id];\n if (sb.closed) continue;\n for (const p of sb.wsOrder) if (sb.workspaces[p].mounted && sb.workspaces[p].branch === branch) out.push(`${id}:${p}`);\n }\n return out;\n }\n\n // ------------------------------------------------------------ answers\n /** Text with every known Commit, Layer or Sandbox id shown as its display\n * id (conflict markers name a Commit; refusals name a Sandbox). */\n text(value) {\n return typeof value === \"string\" ? value.replace(/\\b(?:[0-9a-f]{66}|sb_[0-9a-f]+)\\b/g, (id) => this.toLabel.get(id) ?? id) : value;\n }\n /** Maps every real id inside an SDK answer to its display id. */\n ids(value) {\n if (Array.isArray(value)) return value.map((v) => this.ids(v));\n if (value && typeof value === \"object\") return Object.fromEntries(Object.entries(value).map(([k, v]) => [k, this.ids(v)]));\n if (typeof value === \"string\" && /^[0-9a-f]{64,68}$/.test(value)) {\n if (this.toLabel.has(value)) return this.toLabel.get(value);\n if (value.length === 64) return this.root(value);\n return value.startsWith(\"12\") ? this.commitLabel(value) : this.label(\"L\", value);\n }\n return value;\n }\n}\n","// Trace source: replays SDK trace lines (sdk/js/README.md, \"Call trace\") as\n// agent events. A trace holds ids, never content, so ReplayEngine rebuilds\n// the project from the lines alone: Branches, Commits, Layers, Sandboxes,\n// Workspaces and processes, under the mirror's display ids (C1, L0, sb_01).\n// Files and sizes are not in a trace; the Files pane stays empty unless the\n// engine is given `files`, which reads saved ids on demand (the dsh Host's\n// Files reads, view/src/filesource.js).\nimport { Mirror } from \"../mirror.js\";\nimport { prepare, record } from \"../attribution.js\";\n\n// No tree is held: the Files pane reads through `files` instead.\nconst EMPTY = Object.freeze({});\n/** A traced call's time: the SDK call as the calling process measured it. */\nconst timingOf = (line) => ({ totalMs: line.ms || 0, sdkMs: line.ms || 0, traced: true });\n\n/** The `layerfs_trace` lines of a JSONL text; other lines are skipped. */\nexport function parseTrace(text) {\n const out = [];\n for (const raw of String(text).split(\"\\n\")) {\n if (!raw.trim()) continue;\n try { const line = JSON.parse(raw); if (line && line.layerfs_trace === 1) out.push(line); } catch { /* not a trace line */ }\n }\n return out;\n}\n\n/** End lines in call order (start time, then id), without start lines. */\nexport function endLines(lines) {\n return lines.filter((l) => l.phase !== \"start\").sort((x, y) => Date.parse(x.start) - Date.parse(y.start) || seqOf(x) - seqOf(y));\n}\nconst seqOf = (line) => Number(String(line.id).split(\"-\").pop()) || 0;\n\n/** A read-only engine over trace lines, with the surface the views read. */\nexport class ReplayEngine {\n /**\n * @param {object} [o]\n * @param {string} [o.project] project name for the views\n * @param {object} [o.files] the Files pane's reads by real id (view/src/filesource.js)\n */\n constructor({ project = \"project\", files = null } = {}) {\n this.m = new Mirror();\n this.m.project = project;\n this.project = project;\n this.live = true;\n this.replay = true;\n this.published = false;\n this.initAlias = null;\n /** Set when the engine starts from the project's history (the chat's History):\n * a call naming a node it already holds never moves a pointer back. */\n this.seeded = false;\n this.onchange = null;\n this.files = files;\n }\n get s() { return this.m.s; }\n // a node's root is its own display id when files can be read: it changes when the head moves\n rootOf(id) { return this.files ? id : null; }\n\n // ------------------------------------------------------------ ids\n layer(real) {\n if (!real) return null;\n const m = this.m, s = this.s;\n if (m.toLabel.has(real)) return m.toLabel.get(real);\n // Before any publish, the first Layer a line names is main's Init Layer.\n if (this.initAlias && !this.published) {\n const label = this.initAlias; this.initAlias = null;\n m.toLabel.set(real, label); m.toReal.set(label, real);\n return label;\n }\n const id = m.label(\"L\", real);\n if (!s.layers[id]) s.layers[id] = { id, parent: null, root: this.rootOf(id), sourceBranch: null, sourceCommit: null, slot: m.slot++ };\n if (!s.main) s.main = { head: id };\n this.ensureProject();\n return id;\n }\n commit(real) { return real ? this.m.commitLabel(real) : null; }\n sandbox(real) {\n if (!real) return null;\n const id = this.m.label(\"sb\", real), s = this.s;\n if (!s.sandboxes[id]) { s.sandboxes[id] = { id, closed: false, workspaces: {}, wsOrder: [], processes: {}, procOrder: [] }; s.sandboxOrder.push(id); }\n return id;\n }\n ref(real) {\n if (typeof real !== \"string\") return real;\n return /^[0-9a-f]{64,68}$/.test(real) ? this.m.toLabel.get(real) ?? (real.startsWith(\"12\") ? this.commit(real) : this.layer(real)) : real;\n }\n ensureProject() { this.s.project ||= { name: this.project }; }\n\n // ------------------------------------------------------------ state\n initialize() {\n this.ensureProject();\n if (this.s.main) return this.s.main.head;\n const id = this.m.label(\"L\", `init:${this.project}`);\n this.s.layers[id] = { id, parent: null, root: this.rootOf(id), sourceBranch: null, sourceCommit: null, slot: this.m.slot++ };\n this.s.main = { head: id };\n this.initAlias = id;\n return id;\n }\n branch(name, fields) {\n const s = this.s;\n if (!s.branches[name]) { s.branches[name] = { name, base: null, head: null, from: null, slot: this.m.slot++ }; s.branchOrder.push(name); }\n return Object.assign(s.branches[name], fields);\n }\n /** A new Commit on `branch` (or the known one, for an UpToDate or fast-forward head). */\n addCommit(real, branch, fields) {\n const id = this.commit(real), s = this.s;\n if (!s.commits[id]) {\n const b = s.branches[branch];\n s.commits[id] = { id, parent: b ? b.head : null, root: this.rootOf(id), branch, slot: this.m.slot++, ...fields };\n }\n if (s.branches[branch]) this.advance(s.branches[branch], \"head\", id);\n return id;\n }\n /** Moves `holder[key]` to node `id`, unless a seeded engine already holds a later node there. */\n advance(holder, key, id) { if (this.forward(holder[key], id)) holder[key] = id; }\n forward(now, next) {\n const s = this.s, slotOf = (x) => (s.commits[x] ?? s.layers[x])?.slot;\n const a = slotOf(now), b = slotOf(next);\n return !this.seeded || a === undefined || b === undefined || b >= a;\n }\n workspace(sb, path) { const box = this.s.sandboxes[sb]; return box && box.workspaces[path]; }\n\n /** Applies one end line and returns the call's outcome envelope, with display ids. */\n apply(raw) {\n const line = older(raw), a = line.args || {}, s = this.s;\n if (!line.ok) {\n if (line.method === \"sandbox.commit\" && line.code === \"Conflict\") {\n const w = this.workspace(this.sandbox(a.sandbox), a.path);\n if (w) w.markers = [\"(conflict)\"];\n }\n return { ok: false, code: line.code || \"Refused\", refusal: { message: this.m.text(line.message || \"\"), conflicts: [] }, replay: true, timing: timingOf(line) };\n }\n const ok = (code, result) => ({ ok: true, code, result, replay: true, timing: timingOf(line) });\n switch (line.method) {\n case \"project.init\": {\n const head = this.initialize();\n return ok(\"Initialized\", { kind: \"Initialized\", project: s.project.name, main: { headLayer: head } });\n }\n case \"branch.fork\": {\n const base = this.layer(line.base), head = this.commit(line.head);\n if (this.seeded && s.branches[line.branch]) return ok(\"Forked\", { kind: \"Forked\", branch: line.branch, base, head });\n const from = a.from && a.from !== \"main\" && s.branches[a.from] ? s.branches[a.from].head || \"fork:\" + a.from : head || base;\n this.branch(line.branch, { base, head, from });\n return ok(\"Forked\", { kind: \"Forked\", branch: line.branch, base, head });\n }\n case \"branch.merge\": {\n const left = s.branches[a.branch], right = s.branches[a.with];\n const label = this.m.node(line.head), known = label ? s.commits[label] : null;\n // A merge that needs no Commit (head null) leaves a fresh Branch on the merged Layer.\n if (!line.head) {\n const onto = a.with === \"main\" || a.branch === \"main\" ? (s.main && s.main.head) : (right ? right.base : null);\n this.branch(line.branch, { base: onto || (left ? left.base : null), head: null, from: \"fork:\" + a.branch });\n return ok(\"Merged\", { kind: \"Merged\", branch: line.branch, head: null, fastForward: false });\n }\n if (!(this.seeded && s.branches[line.branch])) this.branch(line.branch, { base: left ? left.base : null, from: left ? left.head || \"fork:\" + a.branch : null });\n const head = known ? known.id : this.addCommit(line.head, line.branch, { parent: left ? left.head : null, mergedFrom: right ? right.head : null, message: a.message || `merge ${a.branch} ${a.with}`, via: \"merge\" });\n this.advance(s.branches[line.branch], \"head\", head);\n return ok(\"Merged\", { kind: \"Merged\", branch: line.branch, head, fastForward: !!known });\n }\n case \"branch.publish\": {\n const commit = this.commit(line.commit), id = this.m.label(\"L\", line.layer);\n s.layers[id] ||= { id, parent: s.main ? s.main.head : null, root: this.rootOf(id), sourceBranch: a.branch, sourceCommit: commit, slot: this.m.slot++ };\n if (!s.main || this.forward(s.main.head, id)) s.main = { head: id };\n this.published = true;\n return ok(\"Added\", { kind: \"Added\", source: { branch: a.branch, commit }, publishedLayer: { id } });\n }\n case \"sandbox.create\": {\n const id = this.sandbox(line.sandbox);\n // a name is free again once its Sandbox closes: a new create starts a fresh entry\n if (s.sandboxes[id].closed) s.sandboxes[id] = { id, closed: false, workspaces: {}, wsOrder: [], processes: {}, procOrder: [] };\n return ok(\"Ready\", { kind: \"Ready\", id });\n }\n case \"sandbox.close\": {\n const id = this.sandbox(a.sandbox);\n s.sandboxes[id].closed = true;\n return ok(\"Closed\", { kind: \"Closed\", id });\n }\n case \"sandbox.mount\": {\n const id = this.sandbox(line.sandbox || a.sandbox), box = s.sandboxes[id], path = line.path;\n const baseCommit = this.commit(line.base), baseLayer = this.layer(line.baseLayer);\n if (!box.workspaces[path]) box.wsOrder.push(path);\n box.workspaces[path] = { sandbox: id, path, branch: line.branch || a.branch, baseCommit, baseLayer, mounted: true, markers: [], dirty: 0, slot: this.m.slot++ };\n return ok(\"Mounted\", { kind: \"Mounted\", sandbox: id, path, branch: line.branch || a.branch, base: baseCommit || baseLayer });\n }\n case \"sandbox.unmount\": {\n const w = this.workspace(this.sandbox(a.sandbox), a.path);\n if (w) w.mounted = false;\n return ok(\"Unmounted\", { kind: \"Unmounted\" });\n }\n case \"sandbox.commit\": {\n const w = this.workspace(this.sandbox(a.sandbox), a.path);\n if (line.kind !== \"Committed\" || !w) return ok(line.kind || \"UpToDate\", { kind: line.kind, head: this.commit(line.commit) });\n const head = this.addCommit(line.commit, w.branch, { message: a.message || \"\", via: \"commit\" });\n Object.assign(w, { baseCommit: head, markers: [] });\n return ok(\"Committed\", { kind: \"Committed\", head });\n }\n case \"sandbox.exec\":\n return ok(line.kind || \"ok\", { exitCode: line.exitCode ?? 0 });\n case \"operator.process.start\": {\n const box = s.sandboxes[this.sandbox(a.sandbox)];\n box.processes[line.process] = { id: line.process, path: a.path, command: a.command, status: \"running\" };\n box.procOrder.push(line.process);\n return ok(\"running\", { process: line.process });\n }\n case \"operator.process.cancel\": {\n const box = s.sandboxes[this.sandbox(processSandbox(a))], p = box.processes[a.process];\n if (p) p.status = \"stopped\";\n return ok(\"Stopped\", { kind: \"Stopped\", process: a.process, status: \"stopped\" });\n }\n }\n if (/^fs\\.(write|edit|apply|mkdir|rm|cp|mv)$/.test(line.method) && line.commit) {\n if (line.kind === \"UpToDate\") return ok(\"UpToDate\", { kind: \"UpToDate\", head: this.commit(line.commit) });\n const head = this.addCommit(line.commit, a.branch, { message: a.message || line.method.slice(3), via: \"fs\" });\n return ok(\"Committed\", { kind: \"Committed\", head });\n }\n return ok(line.kind || \"ok\", {});\n }\n\n // ------------------------------------------------------------ the views' engine surface\n markersIn(ws) { return ws.markers || []; }\n dirtyOf(ws) { return ws.dirty || 0; }\n storage() { return null; }\n overlayOf() { return null; }\n storedSize() { return null; }\n fileReport() { return { rows: [], revisions: null, logical: null, unique: null, stored: null, metadata: null, pending: false, replay: true }; }\n async poll() { return false; }\n liveMountsOf(branch) {\n const s = this.s, out = [];\n for (const id of s.sandboxOrder) {\n const sb = s.sandboxes[id];\n if (sb.closed) continue;\n for (const p of sb.wsOrder) if (sb.workspaces[p].mounted && sb.workspaces[p].branch === branch) out.push(`${id}:${p}`);\n }\n return out;\n }\n resolve(ref) {\n const s = this.s, refuse = (code, message) => { throw Object.assign(new Error(message), { code }); };\n if (ref === \"main\") { const l = s.layers[s.main.head]; return { label: `main @ ${l.id}`, kind: \"main\", root: l.root, tree: EMPTY, layer: l.id }; }\n if (s.commits[ref]) return { label: ref, kind: \"commit\", root: s.commits[ref].root, tree: EMPTY, commit: ref };\n if (s.layers[ref]) return { label: ref, kind: \"layer\", root: s.layers[ref].root, tree: EMPTY, layer: ref };\n if (ref.includes(\":/\")) return { label: `${ref} (live)`, kind: \"live\", root: null, tree: EMPTY, workspace: ref };\n const b = s.branches[ref] || refuse(\"NoSuchBranch\", `no Branch named ${ref}`);\n const node = b.head || b.base;\n return { label: `${b.name} @ ${node}`, kind: \"branch\", root: this.rootOf(node), tree: EMPTY, head: b.head };\n }\n}\n\n/**\n * A line of the Workspace API (#373) under the older SDK's call names, which\n * the model draws: `workspace.mount` is `sandbox.mount` and so on. Lines name\n * the Workspace's Sandbox as before (the mount's result, the others' args).\n */\nconst WORKSPACE = new Set([\"workspace.mount\", \"workspace.exec\", \"workspace.status\", \"workspace.commit\", \"workspace.unmount\"]);\nconst older = (line) => (WORKSPACE.has(line.method) ? { ...line, method: `sandbox.${line.method.slice(\"workspace.\".length)}` } : line);\n/** The Sandbox of a process call: its args', or the one its id names (`proc__`). */\nconst processSandbox = (a) => a.sandbox ?? /^proc_(\\d+)_/.exec(String(a.process))?.[1];\n\n/** Calls that only the client makes for itself, or reads with no line of their own. */\nconst SKIP = (method) => method === \"sandbox.service\" || (method.startsWith(\"operator.\") && method !== \"operator.process.start\" && method !== \"operator.process.cancel\");\n\n/** The agent step a trace line stands for, in the story's call names, with\n * its Workspace bound by the ids on the line; null for a line not drawn. */\nexport function stepOf(E, raw, agent) {\n const line = older(raw);\n if (SKIP(line.method)) return null;\n const a = line.args || {}, base = { a: line.agent || agent, group: line.step || null };\n const bind = (path) => ({ sandbox: E.m.toLabel.get(a.sandbox) ?? E.sandbox(a.sandbox), path });\n switch (line.method) {\n case \"project.init\": return { ...base, call: \"project.init\", args: { name: E.project, path: a.path } };\n case \"branch.fork\": return a.from && a.from !== \"main\" ? { ...base, call: \"branch.fork\", args: { name: a.name, branch: E.ref(a.from) } } : { ...base, call: \"main.fork\", args: { name: a.name } };\n case \"sandbox.create\": return { ...base, call: \"sandbox.create\", args: { name: a.name, project: E.project, image: a.image } };\n case \"sandbox.mount\": return { ...base, call: \"sandbox.mount\", args: { branch: a.branch, sandbox: E.sandbox(a.sandbox ?? line.sandbox) } };\n case \"sandbox.close\": return { ...base, call: \"sandbox.close\", args: { sandbox: E.sandbox(a.sandbox) } };\n case \"sandbox.exec\": return { ...base, sh: a.command, args: {}, bind: bind(a.path) };\n case \"operator.process.start\": return { ...base, sh: a.command, args: { background: true }, bind: bind(a.path) };\n case \"operator.process.cancel\": {\n const id = E.sandbox(processSandbox(a)), p = E.s.sandboxes[id].processes[a.process];\n return { ...base, call: \"process.cancel\", args: { process: a.process }, bind: { sandbox: id, path: p ? p.path : a.path } };\n }\n case \"sandbox.commit\": case \"sandbox.unmount\": case \"sandbox.status\":\n return { ...base, call: line.method, args: { message: a.message, force: a.force, discard: a.discard }, bind: bind(a.path) };\n }\n const args = Object.fromEntries(Object.entries(a).map(([k, v]) => [k, k === \"ref\" || k === \"from\" || k === \"to\" || k === \"commit\" ? E.ref(v) : v]));\n return { ...base, call: line.method, args };\n}\n\n/** Replays one end line into view `W` (whose engine is a ReplayEngine):\n * the engine state first, then the agent's terminal line and place. */\nexport function replayLine(W, line, { agent = W.lead, t0 = null } = {}) {\n const E = W.engine;\n // whole seconds since the first call, like the story clock\n if (t0 !== null) W.clock = Math.max(W.clock, Math.round((Date.parse(line.start) - t0 + (line.ms || 0)) / 1000));\n const st = stepOf(E, line, agent);\n const p = st && prepare(W, st);\n const o = E.apply(line);\n // the SDK's own Sandbox for an agent's fs and branch calls is not a step;\n // it is drawn, as that agent's, once a call names it (closing it, say)\n const services = (W.services ||= {}), real = line.args && line.args.sandbox;\n if (line.method === \"sandbox.service\" && line.ok && line.sandbox) services[line.sandbox] = line.agent || agent;\n if (real && services[real] && E.m.toLabel.has(real)) W.sbBy[E.m.toLabel.get(real)] ||= { made: services[real], service: true };\n if (!st) return null;\n record(W, st, p, o, null, [{ call: p.call, code: o.code, timing: timingOf(line) }]);\n return o;\n}\n\n/** Story steps for trace lines: one step per drawn end line. */\nexport function traceSteps(lines, { agent = \"main\", label = (line) => `${line.method}${line.step ? \" · \" + line.step : \"\"}` } = {}) {\n const ends = endLines(lines), t0 = ends.length ? Date.parse(ends[0].start) : 0, steps = [];\n let pending = [];\n for (const line of ends) {\n pending.push(line);\n if (SKIP(line.method)) continue;\n const batch = pending; pending = [];\n steps.push({ a: line.agent || agent, label: label(line), line, replay: (W) => { for (const l of batch) replayLine(W, l, { agent, t0 }); } });\n }\n return steps;\n}\n","// The event contract (#345): one agent call is\n// { agent, call, args, outcome, timing, group }\n// where `call` is an SDK method in the story's names (main.fork for a fork\n// from main, process.cancel, sandbox.exec with args.background for a\n// process start), `outcome` is { ok, code, result | refusal } with display\n// ids, and `group` names the script or bash call that made it.\n//\n// Sources produce story steps that runStep plays into a view:\n// sources/story.js scripted stories and demo stories (demoFrames)\n// sources/trace.js SDK trace lines (LAYERFS_TRACE / DSH_LAYERFS_TRACE)\n// sources/records.js dsh session records, which carry trace lines\nimport { endLines } from \"./sources/trace.js\";\n\n/** The events of trace lines, in call order, for tests and inspection. */\nexport function traceEvents(lines, agent = \"main\") {\n return endLines(lines).map((l) => ({\n agent: l.agent || agent, call: l.method, args: l.args, group: l.step || null,\n outcome: l.ok ? { ok: true, code: l.kind || \"ok\" } : { ok: false, code: l.code },\n timing: { totalMs: l.ms },\n }));\n}\n","// Story source: plays scripted agent steps on an engine (the simulator or\n// the live server) and records each call in the view. Every outcome (ids,\n// Conflict, merges) comes from the engine, never from the story.\n//\n// Story steps:\n// { a, call, args } an SDK call; `as` names what it made (a Sandbox or a\n// Workspace) for later steps, and args.sandbox may use that name\n// { a, sh } a shell command in the agent's Workspace (`ws` picks one by name)\n// { a, script, calls } one agent's script: several calls in one step, each an\n// event whose `group` is the script's name\n// { a: \"dsh\", ... } dsh itself: spawn agents, a burst of calls, a pause, a view\n// { demo, ev?, ... } one frame of a demo story (demoFrames)\n//\n// `env` gives the engine helpers the page or test has loaded:\n// live true on the live server (no rewind; commands really run)\n// simulateShell, liveCommand, execLines, scriptFor, diffTrees (simulation_engine)\n// loaded(root) whether a live tree is here yet (changedPaths)\n// onFiles(subject, files) a demo read that names a file opens it\nimport { createView, newAgent, outCode, prepare, record } from \"../attribution.js\";\nimport { changedPaths, derive, rootsOf } from \"../derive.js\";\nimport { callsOf, nodeOf, outLines, outcome } from \"../terminals.js\";\nimport { cliOf } from \"../cli.js\";\n\n/** A view for a story, with a terminal engine (`Engine`) for demo stories. */\nexport function storyView(engine, { lead = \"main\", demo = null, Engine = null } = {}) {\n const W = createView(engine, { lead });\n if (demo) {\n W.demo = { e: new Engine(engine, \"website\"), fs: {}, sb: {}, st: {}, active: \"main\", code: {} };\n if (demo.roster) W.demo.e.actor = \"lead\";\n }\n return derive(W);\n}\n\n/** Runs one story step and rederives the view. */\nexport async function runStep(W, st, env) {\n const before = rootsOf(W), known = new Set(Object.keys(W.nodes));\n W.last = null; W.check = null; W.tick = (W.tick || 0) + 1; // one tick per step: poses show this step's outcomes\n if (st.demo) { W.clock += 2; await runDemo(W, st, env); }\n else if (st.burst) { W.clock += 4; for (const e of st.burst) await runCall(W, e, env); W.lastTab = st.tab; }\n else if (st.script) { W.clock += 4; for (const c of st.calls) await runCall(W, { a: st.a, group: st.script, ...c }, env); if (st.tab) W.lastTab = st.tab; }\n else if (st.call === \"dsh.view\") W.lastTab = st.tab;\n else if (st.call === \"dsh.spawn\") { W.clock += 4; for (const n of st.args.agents) (W.agents[n] ||= newAgent()).spawned = W.tick; }\n else if (st.call === \"dsh.idle\") W.clock += st.args.seconds;\n else if (st.replay) await st.replay(W, st);\n else { W.clock += 4; await runCall(W, st, env); }\n derive(W);\n W.newNodes = new Set(Object.keys(W.nodes).filter((id) => !known.has(id)));\n W.flash = env.diffTrees ? changedPaths(W, before, rootsOf(W), env) : {};\n return W;\n}\n\n/** One SDK call on the engine, with its timing envelope and the inline Node\n * script an agent would send. Live Init is the server's reset: a fresh\n * volume and an Init of the same fixture. */\nexport async function sdkCall(W, env, calls, call, args) {\n let o;\n if (env.live && call === \"project.init\") {\n const t0 = performance.now();\n o = await W.engine.reset();\n const s = W.engine.s;\n o.result = { kind: \"Initialized\", project: s.project.name, main: { headLayer: s.main.head } };\n o.timing = { totalMs: performance.now() - t0, reset: true };\n } else o = await W.engine.run(call, args);\n calls.push({ call, code: o.code, timing: o.timing, script: env.scriptFor ? env.scriptFor({ call, args }, (W.engine.s.project || {}).name || \"website\") : undefined });\n return o;\n}\n\nexport async function runCall(W, st, env) {\n const p = prepare(W, st), calls = [];\n let s = W.engine.s, shOut = null, o;\n const { call, args, mine, bind } = p;\n if (st.sh) {\n // sim: the shell is simulated and its writes go to the call; live: the\n // command really runs in the Workspace (a trailing & starts a process).\n const r = env.live ? env.liveCommand(st.sh) : env.simulateShell(st.sh, mine, s.sandboxes[bind.sandbox]);\n shOut = r.out || null;\n if (r.refuse) o = { ok: false, code: \"ShellRefused\", refusal: { message: r.out.map((x) => x.t).join(\" \") } };\n else if (env.live) { o = await sdkCall(W, env, calls, call, { ...args, command: r.command, background: r.background || undefined }); shOut = o.ok ? env.execLines(o.result) : []; }\n else o = await sdkCall(W, env, calls, call, { ...args, command: st.sh, writes: r.writes, output: r.out.map((x) => x.t).join(\"\\n\"), exitCode: r.code, background: r.background || undefined });\n } else o = await sdkCall(W, env, calls, call, args);\n s = W.engine.s; // live: the server answers with a new state object\n // live reads name a raw snapshot id: show the ref at its head instead, like the simulator\n if (env.live && call === \"fs.read\" && o.ok && s.branches[args.ref]) o.result.snapshot = `${args.ref} @ ${s.branches[args.ref].head || s.branches[args.ref].base}`;\n record(W, st, p, o, shOut, calls);\n}\n\n// ------------------------------------------------------------------ demo stories\n// A demo story (dsh/sim/demo.js) plays through the simulation engine's\n// terminal (terminal.js Engine), so its outcomes are the engine's.\n// dsh adds which agent made each call. An agent step is one Bash tool call:\n// mount a Workspace in the Branch's shared Sandbox, run, commit, unmount.\n// Each phase is one frame, in demo.js's own schedule.\n\n/** Frames for a demo story; `fixture` is the Init files, `schedule` demo.js's. */\nexport function demoFrames(story, { lead, fixture, schedule }) {\n const escT = (t) => String(t).replace(/[&<>]/g, (c) => ({ \"&\": \"&\", \"<\": \"<\", \">\": \">\" }[c]));\n const out = [{ a: lead, call: \"project.init\", args: { name: \"website\", files: fixture },\n cap: `${escT(story.title)} · a LayerFS demo story, played by dsh. Every call is made by an agent, and the UI shows who.`, w: 1 }];\n story.steps.forEach((st, i) => {\n const cap = st.note ? (st.act ? `${escT(st.act)} · ` : \"\") + escT(st.note) : null;\n const w = st.beat || !story.roster ? 1 : 0.55;\n const base = { demo: st, index: i };\n if (st.agent || st.burst) {\n const evs = schedule(st).filter((e) => e.phase !== \"think\");\n evs.forEach((ev, k) => out.push({ ...base, ev, a: ev.who, cap: k ? null : cap, last: k === evs.length - 1,\n w: ev.phase === \"mount\" ? 0.35 : w, label: `${ev.who} · ${ev.phase === \"done\" ? \"commit + unmount\" : ev.phase === \"stop\" ? \"stop\" : ev.phase === \"mount\" ? \"mount\" : ev.line}` }));\n return;\n }\n const who = st.ui === \"agents\" || st.milestone ? \"dsh\" : lead;\n const label = st.ui === \"agents\" ? `spawn ${st.agents.join(\", \")} on ${st.branch}` : st.milestone ? `${st.milestone} ${st.pct}% · ${st.caption}`\n : st.ui ? `${st.ui} ${st.as || st.term}` : `${st.term === \"history\" ? \"project\" : st.term === \"fs\" ? \"fs\" : st.term}> ${st.lines[0]}${st.lines.length > 1 ? \" …\" : \"\"}`;\n out.push({ ...base, a: who, cap: st.milestone ? `${escT(st.milestone)} ${st.pct}% · ${escT(st.caption)}` : cap, last: true, label, w });\n });\n return out;\n}\n\nconst LIFTED = new Set([\"sandbox.create\"]);\n/** One frame of a demo story, run on the terminal engine; its records become\n * terminal lines, Workspace panes, agent locations and attribution. */\nasync function runDemo(W, fr, env) {\n const D = W.demo, e = D.e, st = fr.demo, n = fr.a, seq = ++W.seq, recs = [];\n // The engine creates a Sandbox inside a mount; dsh reports that create as\n // its own event, so it prints in the project terminal under the agent.\n const liftCreates = (rec) => {\n for (const c of rec.calls.filter((x) => x.call === \"sandbox.create\")) {\n W.hist.push({ agent: n, text: cliOf(\"sandbox.create\", { ...c.args, name: c.args?.name ?? (c.outcome.ok ? c.outcome.result.id : undefined) }), out: outcome(c.call, c.outcome), t: seq, calls: callsOf({ calls: [c] }) });\n if (c.outcome.ok) { W.sbBy[c.outcome.result.id] = { made: n }; W.sbAt[c.outcome.result.id] = { made: W.clock, last: W.clock, image: c.args?.image || null, calls: 1, execs: 0 }; }\n }\n return rec;\n };\n const A = n === \"dsh\" ? null : (W.agents[n] ||= newAgent());\n const wsBranch = (b) => { const w = b && W.engine.s.sandboxes[b.sandbox] && W.engine.s.sandboxes[b.sandbox].workspaces[b.path]; return w ? w.branch : D.active; };\n const paneLine = (b, line) => { const k = `${b.sandbox}:${b.path}`; (W.panes[k] ||= { agent: n, born: seq, lines: [] }).lines.push({ ...line, t: seq }); return k; };\n const inPane = (b, rec, text, dim) => {\n const out = outLines(rec).filter((x) => !/^✓ created sb_/.test(x.t)); // the create printed in the project terminal\n const k = paneLine(b, { text, dim, out, calls: callsOf(rec, LIFTED) }), branch = wsBranch(b);\n W.panes[k].branch ??= branch;\n if (rec.unmounted) W.panes[k].left = seq;\n const at = (W.sbAt[b.sandbox] ||= { calls: 0, execs: 0 }); at.last = W.clock; at.calls++; if (rec.calls?.some((c) => c.call === \"sandbox.exec\")) at.execs++;\n A.lastLoc = rec.unmounted ? { kind: \"bench\" } : { kind: \"ws\", branch, ws: k }; A.lastBranch = branch; W.lastTab = branch; W.touched[branch] = W.clock;\n };\n let code = null;\n if (st.branch) D.active = st.branch;\n if (st.ui === \"agents\") {\n // dsh spawns the agents; they wait on this Branch's bench until they act\n for (const a of st.agents) {\n D.st[a] = { name: a, branch: st.branch, open: null, sticky: null, server: null };\n Object.assign((W.agents[a] ||= newAgent()), { lastLoc: { kind: \"bench\" }, lastT: W.clock, lastBranch: st.branch, spawned: W.tick });\n }\n code = \"ok\"; W.lastTab = st.branch;\n } else if (st.milestone) code = \"ok\";\n else if (fr.ev) {\n const ev = fr.ev, a = D.st[ev.who], b = ev.phase === \"stop\" ? a.server : a.open;\n let rec = null;\n if (ev.phase === \"stop\") rec = await e.agentStop(a);\n else if (ev.phase === \"mount\") {\n rec = liftCreates(await e.agentMount(a, st.on));\n if (rec.binding && !rec.reused) W.panes[`${rec.binding.sandbox}:${rec.binding.path}`] = { agent: n, born: seq, lines: [] };\n if (rec.binding) inPane(rec.binding, rec, rec.reused ? \"reuse the kept Workspace\" : `mount ${wsBranch(rec.binding)}`, true);\n } else if (ev.phase === \"exec\" && b) rec = await e.agentExec(a, ev.line);\n else if (ev.phase === \"done\" && b) rec = await e.agentFinish(a);\n if (rec && ev.phase !== \"mount\") inPane(b || rec.binding, rec, ev.phase === \"done\" ? `commit -m \"${n}: ${ev.line}\"` : ev.phase === \"stop\" ? \"stop the server\" : ev.line);\n if (rec) { recs.push(rec); if (!(ev.phase === \"mount\" && a.open)) code = rec.code; }\n } else if (st.ui === \"open\" || st.ui === \"split\") {\n const o = await e.openSandbox(D.active, st.ui === \"split\" ? D.sb[st.from].sandbox : null);\n liftCreates(o.rec);\n recs.push(o.rec);\n code = o.rec.calls.length ? o.rec.calls[o.rec.calls.length - 1].outcome.code : null;\n if (o.binding) {\n D.sb[st.as] = o.binding;\n W.panes[`${o.binding.sandbox}:${o.binding.path}`] = { agent: n, born: seq, lines: [] };\n inPane(o.binding, o.rec, `${st.ui === \"split\" ? \"split\" : \"open\"} ${D.active}`, true);\n }\n } else if (st.ui === \"stop\") {\n const b = D.sb[st.term], sb = W.engine.s.sandboxes[b.sandbox], rec = e.newRec();\n const proc = sb.procOrder.find((p) => sb.processes[p].path === b.path && sb.processes[p].status === \"running\");\n const o = await e.call(rec, \"process.cancel\", { sandbox: b.sandbox, process: proc });\n rec.lines.push({ t: o.ok ? `■ ${proc} stopped` : `✕ ${o.code}`, c: o.ok ? \"info\" : \"err\" });\n recs.push(rec); code = o.code; inPane(b, rec, `kill ${proc}`);\n } else {\n // typed lines: the project terminal (history), the fs terminal, or a Sandbox terminal\n for (const line of st.lines) {\n const at = D.active;\n const rec = st.term === \"history\" ? await e.history(line) : st.term === \"fs\" ? await e.fs(at, line, (D.fs[at] ||= {})) : await e.sandbox(D.sb[st.term], line);\n recs.push(rec);\n if (rec.calls.length) code = rec.calls[rec.calls.length - 1].outcome.code;\n const entry = { agent: n, text: line, out: outLines(rec), t: seq, calls: callsOf(rec), dim: /^(cat|read|ls|blame|log|branches|diff)\\b/.test(line) };\n if (st.term === \"history\" || (st.term === \"fs\" && at === \"main\")) {\n W.hist.push(st.term === \"fs\" ? { ...entry, text: \"fs \" + line } : entry); A.lastLoc = { kind: \"hist\" }; W.lastTab = \"main\";\n } else if (st.term === \"fs\") {\n (W.fsLog[at] ||= []).push(entry); A.lastLoc = { kind: \"fs\", branch: at }; A.lastBranch = at; W.lastTab = at; W.touched[at] = W.clock;\n } else {\n const b = D.sb[st.term];\n inPane(b, rec, line);\n if (rec.calls.some((c) => c.call === \"sandbox.unmount\" && c.outcome.ok)) A.lastLoc = { kind: \"bench\" };\n }\n if (rec.forked) D.active = rec.forked;\n // a read that names a file opens it in that tab's Files view (blame on main)\n if (rec.files && env.onFiles) env.onFiles(W.engine.s.branches[rec.files.subject] ? rec.files.subject : \"main\", rec.files);\n }\n }\n if (A) A.lastT = W.clock;\n // the call that matters for the pose: a refusal, Commit, merge, publish or command, not the unmount after it\n const all = recs.flatMap((r) => r.calls), lastCall = all.filter((c) => !c.outcome.ok || [\"Committed\", \"Merged\", \"Added\"].includes(c.outcome.code) || c.call === \"sandbox.exec\").pop() || all[all.length - 1];\n if (A && lastCall) A.out = outCode(lastCall.call, lastCall.outcome, D.code[fr.index], W.tick);\n // attribution: each node a call created belongs to the agent that made it\n for (const rec of recs) for (const c of rec.calls) {\n const o = c.outcome, node = nodeOf(o);\n if (node) { W.attrib[node] = n; W.last = { agent: n, call: c.call, step: { sh: fr.ev && fr.ev.line }, o, node }; }\n if (o.ok && (o.code === \"Forked\" || o.code === \"Merged\")) { W.attrib[\"fork:\" + o.result.branch] = n; W.touched[o.result.branch] = W.clock; }\n if (o.ok && c.call === \"branch.publish\") W.touched[c.args.branch] = W.clock;\n }\n if (!W.last && n !== \"dsh\") {\n const c = recs.flatMap((r) => r.calls).pop();\n if (c) W.last = { agent: n, call: c.call, step: { sh: fr.ev && fr.ev.line }, o: c.outcome, node: null };\n }\n // the step's outcome, checked against demo.js's expectation on its last frame\n if (code !== null) D.code[fr.index] = code;\n if (fr.last) {\n const expect = env.live && st.live ? st.live : st.expect, got = D.code[fr.index] ?? \"(none)\";\n W.check = { expect, code: got, ok: got === expect };\n (W.checks ||= []).push({ index: fr.index, ...W.check });\n }\n}\n","// dsh records source: the Host plugin appends each SDK trace line an agent's\r\n// bash call wrote to that agent's own session, as an ignorable plugin record:\r\n//\r\n// { type: \"plugin:layerfs/call\", data: { agent: { id, name }, line } }\r\n// { type: \"plugin:layerfs/project\", data: { project, binding } }\r\n//\r\n// `agent.id` is the session id (a subagent's own); `name` is what the views\r\n// show (the subagent's label, or \"main\" for the root session). The line is\r\n// the SDK trace line unchanged; its `step` is the bash call id (the group).\r\nexport const CALL = \"plugin:layerfs/call\";\r\nexport const PROJECT = \"plugin:layerfs/project\";\r\n\r\n/** Trace lines from records, each with `agent` set to the agent's name. */\r\nexport function recordLines(records) {\r\n const out = [];\r\n for (const r of records) {\r\n if (!r || r.type !== CALL || !r.data || !r.data.line) continue;\r\n const agent = r.data.agent || {};\r\n out.push({ ...r.data.line, agent: agent.name || agent.id || \"main\", agentId: agent.id || null });\r\n }\r\n return out;\r\n}\r\n\r\n/** The project a session's records bind it to: the latest project record. */\r\nexport function recordProject(records) {\r\n let project = null;\r\n for (const r of records) if (r && r.type === PROJECT && r.data) project = r.data.project;\r\n return project;\r\n}\r\n","// @dsh-layerfs/model: the LayerFS × DSH view model. Events in (stories,\n// SDK trace lines, dsh records), what the views draw out: terminals, panes,\n// Branches, Sandboxes, agent places, poses, fan-out and attribution.\n// Framework-free ESM; the dsh client and Host import it.\nexport * from \"./terminals.js\";\nexport * from \"./cli.js\";\nexport * from \"./attribution.js\";\nexport * from \"./derive.js\";\nexport * from \"./where.js\";\nexport * from \"./pose.js\";\nexport * from \"./fanout.js\";\nexport * from \"./events.js\";\nexport { Mirror } from \"./mirror.js\";\nexport { storyView, runStep, runCall, sdkCall, demoFrames } from \"./sources/story.js\";\nexport { ReplayEngine, parseTrace, endLines, stepOf, replayLine, traceSteps } from \"./sources/trace.js\";\nexport { CALL as RECORD_CALL, PROJECT as RECORD_PROJECT, recordLines, recordProject } from \"./sources/records.js\";\n","// Icons for the Files pane: a folder (open or closed, tinted for special\n// folders) or a small badge for a file's kind, by its name.\n\nconst FOLDER_TINT = { \".git\": \"#E07A5A\", node_modules: \"#9A958B\", \".next\": \"#5B6372\", dist: \"#9A958B\", build: \"#9A958B\", app: \"#2F5BB5\", src: \"#2F5BB5\", components: \"#8A6BC8\", lib: \"#3E9B74\", public: \"#D29A2E\", tests: \"#C8557A\", test: \"#C8557A\", docs: \"#2B8A9A\", scripts: \"#3E9B74\", \".github\": \"#5B6372\" };\n// [badge text, colour] by full name, then by extension\nconst BY_NAME = {\n \"package.json\": [\"npm\", \"#C8452F\"], \"package-lock.json\": [\"lock\", \"#9A958B\"], \"yarn.lock\": [\"lock\", \"#9A958B\"], \"pnpm-lock.yaml\": [\"lock\", \"#9A958B\"], \"cargo.lock\": [\"lock\", \"#9A958B\"],\n dockerfile: [\"dkr\", \"#2B8A9A\"], makefile: [\"mk\", \"#5B6372\"], license: [\"lic\", \"#8A8780\"], \".gitignore\": [\"git\", \"#E07A5A\"], \".env\": [\"env\", \"#D29A2E\"], \"readme.md\": [\"i\", \"#2F5BB5\"], \"cargo.toml\": [\"rs\", \"#B8502C\"], \"tsconfig.json\": [\"ts\", \"#2F5BB5\"],\n};\nconst BY_EXT = {\n js: [\"JS\", \"#C9A20B\"], mjs: [\"JS\", \"#C9A20B\"], cjs: [\"JS\", \"#C9A20B\"], jsx: [\"JSX\", \"#1F8FAE\"], ts: [\"TS\", \"#2F5BB5\"], tsx: [\"TSX\", \"#1F8FAE\"], mts: [\"TS\", \"#2F5BB5\"],\n json: [\"{}\", \"#93650F\"], md: [\"M↓\", \"#2F5BB5\"], mdx: [\"M↓\", \"#2F5BB5\"], css: [\"#\", \"#8A6BC8\"], scss: [\"#\", \"#C8557A\"], html: [\"<>\", \"#E07A5A\"], svg: [\"svg\", \"#D29A2E\"],\n py: [\"py\", \"#2F5BB5\"], rs: [\"rs\", \"#B8502C\"], go: [\"go\", \"#2B8A9A\"], sh: [\"$\", \"#3E9B74\"], bash: [\"$\", \"#3E9B74\"], zsh: [\"$\", \"#3E9B74\"], yml: [\"yml\", \"#C8452F\"], yaml: [\"yml\", \"#C8452F\"], toml: [\"tml\", \"#8A6B3A\"],\n sql: [\"sql\", \"#2B8A9A\"], sqlite: [\"db\", \"#2B8A9A\"], txt: [\"txt\", \"#8A8780\"], log: [\"log\", \"#8A8780\"], lock: [\"lock\", \"#9A958B\"], env: [\"env\", \"#D29A2E\"],\n png: [\"img\", \"#3E9B74\"], jpg: [\"img\", \"#3E9B74\"], jpeg: [\"img\", \"#3E9B74\"], gif: [\"img\", \"#3E9B74\"], webp: [\"img\", \"#3E9B74\"], ico: [\"ico\", \"#3E9B74\"],\n woff: [\"font\", \"#8A8780\"], woff2: [\"font\", \"#8A8780\"], ttf: [\"font\", \"#8A8780\"], map: [\"map\", \"#9A958B\"], pack: [\"pk\", \"#9A958B\"], idx: [\"idx\", \"#9A958B\"],\n};\n\nconst FOLDER = (c, open) => `${open\n ? ``\n : ``}`;\n\n/** The icon of a tree entry: `type` \"dir\" or \"file\". */\nexport function iconOf(name, type, open = false) {\n const n = name.toLowerCase();\n if (type === \"dir\") return FOLDER(FOLDER_TINT[n] || \"#C9A86A\", open);\n const ext = n.includes(\".\") ? n.slice(n.lastIndexOf(\".\") + 1) : \"\";\n const [t, c] = BY_NAME[n] || (n.startsWith(\".env\") ? BY_NAME[\".env\"] : null) || BY_EXT[ext] || [\"\", \"#9A958B\"];\n if (!t) return ``;\n return ` 2 ? \" w\" : \"\"}\" style=\"--fc:${c}\" aria-hidden=\"true\">${t}`;\n}\n","// Small text helpers shared by the view's modules.\n\nexport const esc = (s) => String(s).replace(/[&<>\"]/g, (c) => ({ \"&\": \"&\", \"<\": \"<\", \">\": \">\", '\"': \""\" }[c]));\n\nconst UNITS = [\"B\", \"KB\", \"MB\", \"GB\", \"TB\", \"PB\"];\n/** Bytes in decimal units, to three significant figures: past 1000 a unit gives way to the next. */\nexport const fmtBytes = (n) => {\n if (n == null) return \"not reported\";\n let i = 0;\n while (Math.abs(n) >= 1000 && i < UNITS.length - 1) { n /= 1000; i++; }\n if (i === 0) return `${Math.round(n)} B`;\n const fig = (x) => (Math.abs(x) >= 100 ? x.toFixed(0) : Math.abs(x) >= 10 ? x.toFixed(1) : x.toFixed(2));\n // 999.6 rounds to 1000: that is the next unit's 1.00\n if (Math.abs(Number(fig(n))) >= 1000 && i < UNITS.length - 1) { n /= 1000; i++; }\n return `${fig(n)} ${UNITS[i]}`;\n};\n\nexport const ratio = (a, b) => (b > 0 ? `×${(a / b).toFixed(a / b >= 10 ? 0 : 1)}` : \"–\");\n\nexport const bar = (p, m) => ``;\n\n// Diagnostic timing per call (issue #329 C), as the tab shows it: live is the\n// SDK call, the server's refresh and the HTTP round trip; sim is the in-page\n// model and says nothing about the product. Neither is a measurement.\nexport const fmtMs = (ms) => (ms < 1 ? ms.toFixed(2) : ms < 1000 ? ms.toFixed(0) : (ms / 1000).toFixed(2) + \" s\").replace(/(\\d)$/, \"$1 ms\").replace(/ s ms$/, \" s\");\n\nexport function timingText(t) {\n if (!t) return \"\";\n if (t.simulated) return `${fmtMs(t.totalMs)} in the page (sim)`;\n if (t.reset) return `${fmtMs(t.totalMs)} · server reset: new volume + Init`;\n if (t.traced) return `${fmtMs(t.sdkMs)} SDK call, from its trace line`;\n const http = Math.max(0, t.totalMs - (t.sdkMs || 0) - (t.refreshMs || 0));\n return `sdk ${fmtMs(t.sdkMs || 0)} · refresh ${fmtMs(t.refreshMs || 0)} · http ${fmtMs(http)}`;\n}\n\nexport function cmdTime(calls) {\n const ts = (calls || []).map((c) => c.timing).filter(Boolean);\n if (!ts.length) return \"\";\n const sum = ts.reduce((a, t) => a + (t.simulated || t.reset ? t.totalMs : t.sdkMs || 0), 0);\n return `${fmtMs(sum)}${ts[0].simulated ? \" sim\" : \"\"}`;\n}\n","// Syntax colours for the Files pane: a small lexer per language family,\n// picked by the file's name. It colours comments, strings, numbers, keywords,\n// literals, types, calls, keys, tags and attributes; it parses nothing, so an\n// odd construct is only coloured plainly. Large files are left plain.\nimport { esc } from \"./util.js\";\n\nconst MAX_BYTES = 400_000;\nconst words = (s) => new Set(s.split(\" \"));\nconst JS_KW = words(\"as async await break case catch class const continue debugger default delete do else enum export extends finally for from function get if implements import in instanceof interface let new of package private protected public readonly return satisfies set static super switch this throw try type typeof var void while with yield keyof declare namespace module abstract override\");\nconst LIT = words(\"true false null undefined NaN Infinity None True False nil\");\nconst PY_KW = words(\"and as assert async await break class continue def del elif else except finally for from global if import in is lambda nonlocal not or pass raise return try while with yield match case self\");\nconst RS_KW = words(\"as async await break const continue crate dyn else enum extern fn for if impl in let loop match mod move mut pub ref return self Self static struct super trait type unsafe use where while\");\nconst GO_KW = words(\"break case chan const continue default defer else fallthrough for func go goto if import interface map package range return select struct switch type var\");\nconst SH_KW = words(\"if then else elif fi for while until do done case esac in function return local export readonly set unset shift exit source alias cd echo exec eval trap\");\nconst SQL_KW = words(\"select from where and or not insert into values update set delete create table index view drop alter add primary key foreign references join left right inner outer on group by order having limit offset as distinct union all exists in is null case when then else end begin commit rollback transaction pragma with recursive integer text blob real default unique check\");\nconst CSS_KW = words(\"important inherit initial unset none auto\");\n\n// the language of a path: a lexer family and its keywords\nexport function langOf(path) {\n const name = path.slice(path.lastIndexOf(\"/\") + 1).toLowerCase(), ext = name.includes(\".\") ? name.slice(name.lastIndexOf(\".\") + 1) : \"\";\n if (name === \"dockerfile\" || name === \"makefile\" || [\"sh\", \"bash\", \"zsh\", \"env\"].includes(ext) || name.startsWith(\".env\")) return { family: \"hash\", kw: SH_KW, label: name === \"dockerfile\" ? \"Dockerfile\" : name === \"makefile\" ? \"Makefile\" : \"Shell\" };\n if ([\"js\", \"jsx\", \"mjs\", \"cjs\"].includes(ext)) return { family: \"c\", kw: JS_KW, label: \"JavaScript\", jsx: true };\n if ([\"ts\", \"tsx\", \"mts\", \"cts\"].includes(ext)) return { family: \"c\", kw: JS_KW, label: \"TypeScript\", jsx: ext === \"tsx\" };\n if ([\"json\", \"jsonc\", \"json5\"].includes(ext) || name === \".prettierrc\" || name === \".eslintrc\") return { family: \"c\", kw: new Set(), label: \"JSON\" };\n if ([\"rs\"].includes(ext)) return { family: \"c\", kw: RS_KW, label: \"Rust\" };\n if ([\"go\"].includes(ext)) return { family: \"c\", kw: GO_KW, label: \"Go\" };\n if ([\"c\", \"h\", \"cc\", \"cpp\", \"hpp\", \"java\", \"kt\", \"swift\", \"cs\", \"scala\", \"dart\"].includes(ext)) return { family: \"c\", kw: words(\"auto break case char class const continue default do double else enum extern float for goto if int long new private protected public return short signed sizeof static struct switch this throw try typedef union unsigned void volatile while import package fun val var let func override final\"), label: ext.toUpperCase() };\n if ([\"py\", \"pyi\"].includes(ext)) return { family: \"hash\", kw: PY_KW, label: \"Python\", py: true };\n if ([\"rb\"].includes(ext)) return { family: \"hash\", kw: words(\"def end if elsif else unless while until for in do begin rescue ensure class module return yield self nil require\"), label: \"Ruby\" };\n if ([\"yml\", \"yaml\", \"toml\", \"ini\", \"cfg\", \"conf\", \"properties\"].includes(ext) || name === \".gitignore\" || name === \".npmrc\" || name === \".dockerignore\") return { family: \"hash\", kw: new Set(), label: ext === \"toml\" ? \"TOML\" : ext ? ext.toUpperCase() : \"Config\", keys: true };\n if ([\"css\", \"scss\", \"less\", \"sass\"].includes(ext)) return { family: \"css\", kw: CSS_KW, label: \"CSS\" };\n if ([\"html\", \"htm\", \"xml\", \"svg\", \"vue\", \"svelte\", \"plist\"].includes(ext)) return { family: \"tag\", kw: new Set(), label: ext === \"svg\" ? \"SVG\" : ext === \"xml\" ? \"XML\" : \"HTML\" };\n if ([\"md\", \"mdx\", \"markdown\"].includes(ext)) return { family: \"md\", kw: new Set(), label: \"Markdown\" };\n if ([\"sql\"].includes(ext)) return { family: \"c\", kw: SQL_KW, label: \"SQL\", ci: true, dash: true };\n return null;\n}\n\n// Rules are tried in order at each position: [class, sticky regex]. A word\n// is classed by what it is and what follows it.\nconst STR = [[\"str\", /\"(?:\\\\.|[^\"\\\\\\n])*\"?/y], [\"str\", /'(?:\\\\.|[^'\\\\\\n])*'?/y]];\nconst NUM = [\"num\", /(?:0x[\\da-fA-F_]+|\\d[\\d_]*(?:\\.\\d+)?(?:[eE][+-]?\\d+)?)n?\\b/y];\nconst WORD = [\"word\", /[A-Za-z_$][\\w$]*/y];\nconst FAMILIES = {\n c: (L) => [[\"com\", /\\/\\/[^\\n]*/y], [\"com\", /\\/\\*[\\s\\S]*?(?:\\*\\/|$)/y], ...(L.dash ? [[\"com\", /--[^\\n]*/y]] : []), ...STR, [\"str\", /`(?:\\\\[\\s\\S]|[^`\\\\])*`?/y], ...(L.jsx ? [[\"tag\", /<\\/?[A-Za-z][\\w.]*(?=[\\s>\\/])/y], [\"tag\", /\\/>/y]] : []), NUM, WORD],\n hash: (L) => [[\"com\", /#[^\\n]*/y], ...(L.py ? [[\"str\", /\"\"\"[\\s\\S]*?(?:\"\"\"|$)/y], [\"str\", /'''[\\s\\S]*?(?:'''|$)/y]] : []), ...STR, [\"var\", /\\$\\{?[\\w@#?*!-]+\\}?/y], NUM, [\"word\", /[A-Za-z_][\\w-]*/y]],\n css: () => [[\"com\", /\\/\\*[\\s\\S]*?(?:\\*\\/|$)/y], ...STR, [\"kw\", /@[\\w-]+/y], [\"num\", /#[\\da-fA-F]{3,8}\\b/y], [\"num\", /-?\\d*\\.?\\d+(?:px|em|rem|%|s|ms|vh|vw|fr|ch|deg|dpi)?\\b/y], [\"word\", /-?[A-Za-z_][\\w-]*/y]],\n tag: () => [[\"com\", /|$)/y], [\"tag\", /<\\/?[\\w:.-]+/y], [\"tag\", /\\/?>/y], [\"attr\", /[\\w:@.-]+(?=\\s*=)/y], ...STR],\n md: () => [[\"com\", /|$)/y], [\"str\", /```[\\s\\S]*?(?:```|$)/y], [\"str\", /`[^`\\n]*`?/y], [\"kw\", /\\*\\*[^*\\n]+\\*\\*/y], [\"fn\", /\\[[^\\]\\n]*\\]\\([^)\\n]*\\)/y]],\n};\nconst LINE_START = { md: [[\"kw\", /#{1,6} [^\\n]*/y], [\"op\", /[ \\t]*(?:[-*+]|\\d+\\.) /y], [\"com\", /> [^\\n]*/y]], hash: [] };\n\n/** Coloured lines of `text` (HTML), or null when the language is unknown or the file is large. */\nexport function highlightLines(text, path) {\n const L = langOf(path);\n if (!L || text.length > MAX_BYTES) return null;\n const rules = FAMILIES[L.family](L), starts = LINE_START[L.family] || [];\n const parts = []; // [class, text]\n let i = 0, plain = \"\";\n const push = (cls, t) => { if (plain) { parts.push([\"\", plain]); plain = \"\"; } parts.push([cls, t]); };\n outer: while (i < text.length) {\n const lineStart = i === 0 || text[i - 1] === \"\\n\";\n if (lineStart) {\n for (const [cls, re] of starts) { re.lastIndex = i; const m = re.exec(text); if (m) { push(cls, m[0]); i += m[0].length; continue outer; } }\n if (L.keys) { const m = /[ \\t]*-?[ \\t]*([\\w\"'.@\\/-]+)(?=[ \\t]*[:=](?:\\s|$))/y; m.lastIndex = i; const k = m.exec(text); if (k) { plain += k[0].slice(0, k[0].length - k[1].length); push(\"prop\", k[1]); i += k[0].length; continue; } }\n }\n for (const [cls, re] of rules) {\n re.lastIndex = i;\n const m = re.exec(text);\n if (!m || !m[0]) continue;\n const t = m[0];\n i += t.length;\n if (cls === \"word\") {\n const w = L.ci ? t.toLowerCase() : t, next = text.slice(i, i + 40).match(/^\\s*(.)/)?.[1];\n if (L.kw.has(w)) push(\"kw\", t);\n else if (LIT.has(t)) push(\"lit\", t);\n else if (L.family === \"css\" && next === \":\" && !/[.#&:]/.test(text[i - t.length - 1] || \"\")) push(\"prop\", t);\n else if (next === \"(\" || (next === \"!\" && L.kw === RS_KW)) push(\"fn\", t);\n else if (/^[A-Z][a-z]/.test(t) && L.family !== \"hash\") push(\"typ\", t);\n else plain += t;\n } else if (cls === \"str\" && L.family === \"c\" && /^\\s*:/.test(text.slice(i, i + 20)) && !text.slice(i).startsWith(\"::\")) push(\"prop\", t);\n else push(cls, t);\n continue outer;\n }\n plain += text[i++];\n }\n if (plain) parts.push([\"\", plain]);\n // split into lines; a token across lines is coloured on each\n const lines = [];\n let cur = \"\";\n for (const [cls, t] of parts) {\n const seg = t.split(\"\\n\");\n seg.forEach((s, k) => {\n if (k > 0) { lines.push(cur); cur = \"\"; }\n if (s) cur += cls ? `${esc(s)}` : esc(s);\n });\n }\n lines.push(cur);\n return lines;\n}\n","// Files, as History draws them (view.js drawIde): the tree at one point in\n// the sidebar, and the open file in the File tab (File | Blame, and History\n// where the trees are in memory). The point is a tab's Branch (or main) at its\n// latest head, or a node picked in History; the parent is kept as the base,\n// which marks what changed in the tree. Reads go through the files helpers\n// (simulation_engine/files.js) on the engine state, so they work on any engine\n// that has trees. An engine with `files` (filesource.js, a dsh project) holds\n// no trees: a folder is listed when it is opened and a file is read a window\n// at a time when it is shown, so Files cost what is on screen whatever the\n// project's size.\nimport { iconOf } from \"./fileicons.js\";\nimport { highlightLines } from \"./highlight.js\";\nimport { esc, fmtBytes, ratio } from \"./util.js\";\n\nconst COLLAPSE = [\"/node_modules\", \"/.git\", \"/.next\"];\nconst INODE_BYTES = 73; // one inode value row; directory entries and pooling ignored\nconst bytesOf = (t) => new TextEncoder().encode(t || \"\").length;\n// a file's lines, coloured by its language (highlight.js) when it has one\nconst codeLines = (text, path, first = 1) => {\n const lit = path ? highlightLines(text, path) : null;\n return text.split(\"\\n\").map((t, i) => `
${i + first}${(lit ? lit[i] : esc(t)) || \" \"}
`).join(\"\");\n};\nconst CHEV = (open) => ``;\n// indent guides: one faint rule per folder level\nconst indent = (depth) => (depth ? `` : \"\");\n\n/**\n * @param {object} v the view: W, FM (files helpers), lineDiff, live,\n * rightMode, active, colorOf(agent), render()\n */\nexport function createFiles(v) {\n const FILES = {};\n const W = () => v.W, FM = v.FM;\n const laneColor = (b) => (!b || b === \"main\" ? \"var(--purple)\" : W().branches[b] ? `var(${W().branches[b].color})` : \"var(--text-3)\");\n const defaultBase = (tab) => (tab === \"main\" ? \"\" : \"fork:\" + tab);\n // list: \"changes\" (grouped, against the base) or \"all\" (the tree); path: the\n // open file (the file page) or null (the list); wide: the column takes half the window.\n const filesOf = (tab) => (FILES[tab] ||= { at: \"latest\", base: defaultBase(tab), path: null, toggled: [], mode: \"view\", list: \"changes\", sdk: false, wide: false });\n const subjectOf = (tab, p) => (p.at === \"latest\" ? tab : p.at);\n const SRC = () => W().engine.files || null;\n // a ref's saved node and its real id, what the Host reads by\n const savedOf = (ref) => {\n const r = ref ? FM.resolveRef(W().engine, ref) : null, real = r && r.node ? W().engine.m?.toReal.get(r.node) : null;\n return real ? { node: r.node, real } : null;\n };\n // path -> \"A\" | \"M\" | \"D\", each path's type and folder roll-ups, from the changed paths read so far\n function lazyChanges(sub, base) {\n const c = SRC().changes(base.real, sub.real), files = {}, types = {}, dirs = {};\n for (const it of c.items) {\n if (it.type === \"dir\" && it.kind === \"Modified\") continue;\n files[it.path] = it.kind === \"Added\" ? \"A\" : it.kind === \"Removed\" ? \"D\" : \"M\";\n types[it.path] = it.type;\n for (let d = it.path.slice(0, it.path.lastIndexOf(\"/\")); d; d = d.slice(0, d.lastIndexOf(\"/\"))) dirs[d] = (dirs[d] || 0) + 1;\n }\n return { files, types, dirs, more: c.more, loading: c.loading, error: c.error };\n }\n function pointLabel(ref) {\n if (!ref) return \"nothing\";\n if (ref === \"main\" || W().branches[ref]) return `${ref} · latest`;\n if (ref.startsWith(\"fork:\")) return `${ref.slice(5)} · fork point`;\n const n = W().nodes[ref];\n return n ? `${n.branch || \"main\"} · ${ref}` : ref;\n }\n const dirOpen = (p, path) => (COLLAPSE.includes(path) ? p.toggled.includes(path) : !p.toggled.includes(path));\n function treeHtml(p, subj, base, ch, dir, depth, flash) {\n return FM.listBoth(subj, base, dir).map((e) => {\n const open = e.type === \"dir\" && dirOpen(p, e.path), k = ch && ch.files[e.path], roll = ch && !k && ch.dirs[e.path];\n const row = `
\n ${indent(depth)}${e.type === \"dir\" ? CHEV(open) : \"\"}${iconOf(e.name, e.type, open)}${esc(e.name)}${k ? `${k}` : roll ? `${roll}` : \"\"}
`;\n return row + (open ? treeHtml(p, subj, base, ch, e.path, depth + 1, flash) : \"\");\n }).join(\"\");\n }\n // one folder's loaded pages, folders first; an open folder is listed below its row\n function lazyTreeHtml(p, sub, ch, dir, depth, flash) {\n const l = SRC().list(sub.real, dir), isDir = (e) => e.type === \"dir\";\n const items = [...l.items].sort((a, b) => (isDir(a) === isDir(b) ? 0 : isDir(a) ? -1 : 1));\n const note = (text, attrs = \"\") => `
${indent(depth)}${text}
`;\n return items.map((e) => {\n const open = isDir(e) && p.toggled.includes(e.path), k = ch && ch.files[e.path], roll = ch && !k && ch.dirs[e.path];\n return `
\n ${indent(depth)}${isDir(e) ? CHEV(open) : \"\"}${iconOf(e.name, e.type, open)}${esc(e.name)}${k ? `${k}` : roll ? `${roll}${ch.more ? \"+\" : \"\"}` : \"\"}
`\n + (open ? lazyTreeHtml(p, sub, ch, e.path, depth + 1, flash) : \"\");\n }).join(\"\")\n + (l.error ? note(esc(l.error.message)) : l.loading ? note(\"Listing…\") : l.more ? note(`Show the next 1,000 of ${esc(dir === \"/\" ? \"/\" : dir.slice(dir.lastIndexOf(\"/\") + 1))}`, ` data-fmore=\"${esc(dir)}\"`)\n : !items.length && depth === 0 ? note(\"No files: this version is empty.\") : \"\");\n }\n // A file, one window of fs.read at a time (at most 2000 lines or 48 KiB): p.line is where it starts.\n function lazyViewHtml(ref, p, tab) {\n const r = SRC().read(ref.real, p.path, p.line || 1), w = r.value;\n if (r.error) return `
${esc(r.error.message)}
`;\n if (!w) return `
Reading ${esc(p.path)}…
`;\n if (w.binary) return `
A binary file${w.size != null ? ` of ${fmtBytes(w.size)}` : \"\"}: it has no text to show.
`;\n const text = w.text.endsWith(\"\\n\") ? w.text.slice(0, -1) : w.text, last = w.startLine + text.split(\"\\n\").length - 1;\n const nav = (dir, label, on) => ``;\n const bar = w.startLine > 1 || w.nextLine != null\n ? `
${nav(\"prev\", \"‹ Earlier\", w.startLine > 1)}lines ${w.startLine.toLocaleString()}–${last.toLocaleString()}${w.size != null ? ` of ${fmtBytes(w.size)}` : \"\"}${w.lineTruncated ? \" · a long line is cut short\" : \"\"}${nav(\"next\", \"Later ›\", w.nextLine != null)}
` : \"\";\n return bar + `
${codeLines(text, p.path, w.startLine)}
`;\n }\n // Which Commit wrote each line (fs.blame), a window at a time like the file\n function lazyBlameHtml(subject, sub, p, tab) {\n const r = SRC().blame(sub.real, p.path, p.line || 1), b = r.value;\n if (r.error) return `
${esc(r.error.message)}
`;\n if (!b) return `
Reading which Commit wrote each line…
`;\n if (!b.lines.length) return `
${esc(p.path)} has no lines here.
`;\n const labelOf = (real) => (real ? W().engine.m?.toLabel.get(real) ?? real.slice(0, 12) : \"?\");\n const text = b.lines.map((ln) => String(ln.text ?? \"\").replace(/\\r?\\n$/, \"\")), lit = highlightLines(text.join(\"\\n\"), p.path);\n let last = null;\n const rows = b.lines.map((ln, i) => {\n const id = labelOf(ln.commit), first = id !== last, c = W().engine.s.commits[id];\n last = id;\n const color = id.startsWith(\"L\") ? \"var(--purple)\" : laneColor(c && c.branch), attr = W().nodes[id] ? ` data-fblame=\"${esc(id)}\"` : \"\";\n return `
${first ? esc(id) : \"\"}${ln.n}${(lit ? lit[i] : esc(text[i])) || \" \"}
`;\n }).join(\"\");\n const nav = (dir, label, on) => ``;\n const first = b.lines[0].n, end = b.lines[b.lines.length - 1].n;\n const bar = first > 1 || b.nextLine != null ? `
${nav(\"prev\", \"‹ Earlier\", first > 1)}lines ${first.toLocaleString()}–${end.toLocaleString()}${nav(\"next\", \"Later ›\", b.nextLine != null)}
` : \"\";\n return `
Blame at ${esc(pointLabel(subject))} · product attribution (fs.blame)${b.versions ? ` · ${b.versions} versions compared` : \"\"}
${bar}
${rows}
`;\n }\n // Per-file revisions, dedupe and compression: sim estimates, or the\n // product's operator.files.stats/history and fs.blame (engine.fileReport).\n // A fork point is sent as the node it was forked from.\n const reportRef = (subject) => (subject.startsWith(\"fork:\") ? (FM.resolveRef(W().engine, subject) || {}).node || subject : subject);\n function fileStats(subject, path) {\n if (v.live) {\n const f = W().engine.fileReport(reportRef(subject), path), k = { added: \"A\", modified: \"M\", deleted: \"D\", removed: \"D\" };\n return { ...f, rows: f.rows.map((r) => ({ ...r, change: k[r.change] || r.change })) };\n }\n const revs = FM.history(W().engine, subject, path), seen = new Set();\n let logical = 0, unique = 0, stored = 0, pending = false;\n const rows = [...revs].reverse().map((r) => {\n if (r.content == null) return { ...r, size: 0, added: 0, stored: 0 };\n const size = bytesOf(r.content), fresh = !seen.has(r.content);\n logical += size;\n let z = 0;\n if (fresh) { seen.add(r.content); unique += size; z = W().engine.storedSize(r.content); if (z == null) { pending = true; z = size; } stored += z; }\n return { ...r, size, added: fresh ? size : 0, stored: fresh ? z : 0 };\n }).reverse();\n return { rows, revisions: revs.length, logical, unique, stored, pending, metadata: revs.length * INODE_BYTES };\n }\n function fileStatsHtml(subject, p, sv) {\n const e = sv.tree[p.path];\n if (!e || e.type !== \"file\") return \"\";\n const f = fileStats(subject, p.path), cur = v.live ? f.size : e ? bytesOf(e.content) : null, size = cur == null ? (e ? \"…\" : \"deleted here\") : fmtBytes(cur);\n // one line; the full numbers are in the tooltip\n const tip = `${f.revisions ?? \"?\"} revisions (saved versions where this file changed) · current ${size} · history ${fmtBytes(f.logical)} logical · unique ${fmtBytes(f.unique)} (dedupe ${ratio(f.logical, f.unique)})`\n + (v.live ? ` · ${f.error || \"product: operator.files.stats and files.history; physical per-file attribution not reported\"}` : ` · stored ≈ ${fmtBytes(f.stored)} (compression ${ratio(f.unique, f.stored)}, sim: deflate as a stand-in for zstd) · metadata ≈ ${fmtBytes(f.metadata)}`);\n return `${f.revisions ?? \"…\"} rev · ${size}${v.live ? \"\" : ` · ${ratio(f.unique, f.stored)}`}${f.pending ? \" · …\" : \"\"}`;\n }\n function fileHistoryHtml(subject, path) {\n const f = fileStats(subject, path);\n if (v.live && f.pending) return `
Loading the file's history…
`;\n if (!f.rows.length) return `
${esc(f.error || (f.replay ? \"File history is not in the trace.\" : `${path} has no saved versions behind ${pointLabel(subject)}.`))}
`;\n const rows = f.rows.map((r) => `${r.node.id}${r.change}\n ${r.content == null ? \"–\" : fmtBytes(r.size)}${r.content == null ? \"–\" : r.added == null ? \"not reported\" : r.added ? \"+\" + fmtBytes(r.added) : \"reused\"}${v.live ? \"\" : `${r.stored ? fmtBytes(r.stored) : \"–\"}`}`).join(\"\");\n return `
${f.revisions} revision${f.revisions === 1 ? \"\" : \"s\"} behind ${esc(pointLabel(subject))}, newest first · new = bytes this version added (an identical earlier version is reused)${f.hasMore ? \" · first 50 shown\" : \"\"}
\n ${v.live ? \"\" : ''}${rows}
versionsizenewstored ≈
`;\n }\n function viewHtml(subject, p, sv) {\n const se = sv.tree[p.path];\n if (p.mode === \"view\") {\n if (!se) return `
${esc(p.path)} does not exist at ${esc(pointLabel(subject))}${be ? \" (deleted; switch to Diff to see what was removed)\" : \"\"}.
`;\n return se.type === \"file\" ? (se.content == null ? `
${esc(se.note || \"Content not loaded.\")}
` : `
${codeLines(se.content, p.path)}
`) : `
${esc(p.path)} is a folder.
`;\n }\n if (p.mode === \"blame\") {\n let b;\n if (v.live) {\n // The product's fs.blame: each line names the Commit or Layer it came from.\n const report = fileStats(subject, p.path);\n if (!report.blame) return `
${esc(report.error || (report.replay ? \"Blame is not in the trace.\" : \"Loading attributed lines…\"))}
`;\n b = { ...report.blame, versions: report.revisions, lines: report.blame.lines.map((l) => ({ ...l, origin: { id: l.commit, kind: l.commit.startsWith(\"L\") ? \"layer\" : \"commit\", branch: (W().engine.s.commits[l.commit] || {}).branch } })) };\n } else b = FM.blame(W().engine, subject, p.path);\n if (!b) return `
${esc(p.path)} does not exist at ${esc(pointLabel(subject))}.
`;\n let last = null;\n const lit = highlightLines(b.lines.map((ln) => ln.text).join(\"\\n\"), p.path);\n const rows = b.lines.map((ln, i) => {\n const o = ln.origin, first = o.id !== last; last = o.id;\n return `
${first ? o.id : \"\"}${ln.n}${(lit ? lit[i] : esc(ln.text)) || \" \"}
`;\n }).join(\"\");\n return `
Blame at ${esc(pointLabel(subject))} · ${v.live ? \"product attribution (fs.blame)\" : `composed from ${b.versions} saved versions`}
${rows}
`;\n }\n return fileHistoryHtml(subject, p.path);\n }\n // One file, as the File tab shows it: File | Blame, then the file or its blame.\n function lazyFilePage(tab, p, subject, sub) {\n const seg = (m, label) => ``;\n // a saved id's file history has no read yet: History shows only where the full trees are\n if (p.mode === \"history\") p.mode = \"view\";\n const body = p.mode === \"blame\" ? lazyBlameHtml(subject, sub, p, tab) : lazyViewHtml(sub, p, tab);\n return `
${seg(\"view\", \"File\")}${seg(\"blame\", \"Blame\")}
\n
${body}
`;\n }\n // One file in memory (the sim's full trees): File | Blame | History and its\n // one-line summary, then the file itself.\n function filePage(tab, p, subject, sv) {\n const seg = (m, label) => ``;\n return `
${seg(\"view\", \"File\")}${seg(\"blame\", \"Blame\")}${seg(\"history\", \"History\")}${fileStatsHtml(subject, p, sv)}
\n
${viewHtml(subject, p, sv)}
`;\n }\n // A project page splits Files like an editor: the tree at the picked point\n // (and its compare) in the sidebar, the open file in its own tab.\n /** The subject and its compare, saved or in memory: { subject, sub, base, ch, nFiles } or null. */\n function pointOf(tab, p) {\n if (p.at !== \"latest\" && !W().nodes[p.at] && !p.at.startsWith(\"fork:\")) p.at = \"latest\";\n const subject = subjectOf(tab, p);\n if (SRC()) {\n const sub = savedOf(subject); if (!sub) return null;\n const base = p.base ? savedOf(p.base) : null, ch = base ? lazyChanges(sub, base) : null;\n return { subject, sub, base, ch, nFiles: ch ? `${Object.keys(ch.files).filter((path) => ch.types[path] === \"file\").length}${ch.more ? \"+\" : \"\"}` : null };\n }\n const sv = FM.resolveRef(W().engine, subject); if (!sv) return null;\n const bv = p.base ? FM.resolveRef(W().engine, p.base) : null, ch = bv ? FM.changeMap(sv.tree, bv.tree) : null;\n return { subject, sv, bv, ch, nFiles: ch ? String(Object.keys(ch.files).filter((path) => ((sv.tree[path] || bv.tree[path]) || {}).type === \"file\").length) : null };\n }\n function sideHtml(tab) {\n const p = filesOf(tab), pt = pointOf(tab, p), flash = p.at === \"latest\" ? W().flash[tab] || new Set() : new Set();\n // the point is picked in History (a node): the sidebar names its Branch over the tree\n if (!pt) return `
Nothing to show yet.
`;\n const tree = SRC() ? lazyTreeHtml(p, pt.sub, pt.ch, \"/\", 0, flash) : treeHtml(p, pt.sv.tree, pt.bv ? pt.bv.tree : null, pt.ch, \"/\", 0, flash);\n const n = p.at === \"latest\" ? null : W().nodes[p.at] || null, lane = n ? n.branch || \"main\" : tab;\n const point = !n ? `${tab === \"main\" ? W().mainHead : W().branches[tab].head.replace(\"fork:\", \"fork \")} · latest` : n.kind === \"fork\" ? \"fork point\" : n.id;\n const back = n ? `` : \"\";\n return `
${esc(lane)}${esc(point)}${back}
${tree}
`;\n }\n // the open file, read or blamed (the tree's badges say what changed since the parent)\n function pageHtml(tab) {\n const p = filesOf(tab), pt = pointOf(tab, p);\n if (!pt) return `
Nothing to show yet.
`;\n if (!p.path) return `
Pick a file in the tree: it opens here at ${esc(pointLabel(pt.subject))}.
`;\n if (p.mode !== \"blame\" && p.mode !== \"history\") p.mode = \"view\";\n return SRC() ? lazyFilePage(tab, p, pt.subject, pt.sub) : filePage(tab, p, pt.subject, pt.sv);\n }\n const safe = (draw) => (tab) => {\n try { return draw(tab); } catch (error) {\n console.error(\"Files could not draw\", error);\n return `
Files could not draw this view: ${esc(error.message)}. Pick another file or point.
`;\n }\n };\n // Opening a file shows what changed when it changed, else the file.\n function openFile(p, path) {\n p.line = 1; p.starts = [];\n if (SRC()) {\n const sub = savedOf(subjectOf(v.active, p)), base = p.base ? savedOf(p.base) : null;\n p.path = path; p.mode = \"view\";\n return;\n }\n const sv = FM.resolveRef(W().engine, subjectOf(v.active, p)), bv = p.base ? FM.resolveRef(W().engine, p.base) : null;\n const changed = sv && bv && FM.changeMap(sv.tree, bv.tree).files[path];\n p.path = path; p.mode = \"view\";\n }\n /** Files at any node, compared with its parent (a project page): an open file stays open there. */\n function showAt(tab, id) {\n const p = filesOf(tab), n = W().nodes[id]; if (!n) return;\n p.at = n.kind === \"fork\" ? \"fork:\" + n.branch : id;\n p.base = FM.parentRef(W().engine, p.at) || \"\";\n p.line = 1; p.starts = [];\n v.rightMode[tab] = \"files\";\n }\n // Files controls, and History nodes that open Files at that point.\n function click(e) {\n const at = (sel) => e.target.closest(sel), tab = v.active;\n let el;\n if ((el = at(\"[data-fmode]\"))) { const [t, m] = el.dataset.fmode.split(\"|\"), p = filesOf(t); p.mode = m; p.line = 1; p.starts = []; v.render(); return true; }\n if ((el = at(\"[data-fmore]\"))) { const p = filesOf(tab), sub = savedOf(subjectOf(tab, p)); if (sub) SRC().moreList(sub.real, el.dataset.fmore); v.render(); return true; }\n if ((el = at(\"[data-fwin]\"))) {\n // Later starts where the window ended; Earlier goes back the way it came, else 2000 lines up\n const [t, dir] = el.dataset.fwin.split(\"|\"), p = filesOf(t), sub = savedOf(subjectOf(t, p));\n const w = sub && (p.mode === \"blame\" ? SRC().blame(sub.real, p.path, p.line || 1) : SRC().read(sub.real, p.path, p.line || 1)).value;\n p.starts ||= [];\n if (dir === \"next\" && w?.nextLine) { p.starts.push(p.line || 1); p.line = w.nextLine; }\n if (dir === \"prev\") p.line = p.starts.pop() ?? Math.max(1, (p.line || 1) - 2000);\n v.render(); return true;\n }\n if ((el = at(\"[data-ftree]\"))) {\n const p = filesOf(tab), path = el.dataset.ftree;\n if (el.dataset.ftype === \"dir\") { p.toggled = p.toggled.includes(path) ? p.toggled.filter((x) => x !== path) : [...p.toggled, path]; }\n else openFile(p, path);\n v.render(); return true;\n }\n if ((el = at(\"[data-fblame]\"))) { showAt(tab, el.dataset.fblame); v.render(); return true; }\n if ((el = at(\".gview [data-node], svg.tree [data-node]\"))) { showAt(tab, el.dataset.node); v.render(); return true; }\n if ((el = at(\"[data-idelatest]\"))) { const p = filesOf(tab); p.at = \"latest\"; p.base = defaultBase(tab); p.line = 1; p.starts = []; v.render(); return true; }\n return false;\n }\n function change(e) {\n const t = e.target;\n if (t.dataset.fline !== undefined) { const p = filesOf(t.dataset.fline), n = Math.floor(Number(t.value)); if (n >= 1) { p.starts = []; p.line = n; v.render(); } }\n }\n return { filesOf, sideHtml: safe(sideHtml), pageHtml: safe(pageHtml), showAt, click, change };\n}\n","// How an agent looks, for every skin (skins/*/cast.js gives each skin's cast).\n// A cast is { main, heroes: { name: { src, color } } }: the website's pixel\n// heroes (skins/heroes) are one image each. A cast with sprite sheets (the\n// sharky maids, skins/maids) gives a hero `poses` (frame names, side by\n// side in `src`, each 3:4) and `head` ({ src, index, count }: square head\n// crops side by side): an agent then shows the pose of its last call, and\n// its History name tag is its head.\n\n/** What a call shows on its agent: a mood, which each sheet draws with its own pose. */\nexport function moodOf(last) {\n const o = last.o, r = o.result, call = last.call || \"\";\n if (!o.ok) return o.code === \"Conflict\" ? \"oops\" : \"fail\";\n if (o.code === \"Committed\") return \"win\";\n if (o.code === \"Merged\") return \"merge\";\n if (o.code === \"Added\") return \"serve\";\n if (o.code === \"Forked\" || o.code === \"Mounted\") return \"move\";\n if (o.code === \"Ready\" || o.code === \"Closed\") return \"hello\";\n if (call === \"sandbox.exec\" && r && r.exitCode) return \"fail\";\n if (/^fs\\.(read|list|grep|stat|blame|diff|find)/.test(call) || /^branch\\.(diff|log)/.test(call)) return \"read\";\n return \"work\";\n}\n\n/** The mood of a History node an agent made, where no call says more: a Commit, a merge, a published Layer, a fork. */\nexport function nodeMood(node) {\n if (node.kind === \"layer\") return \"serve\";\n if (node.kind === \"fork\") return \"move\";\n return node.parents && node.parents.filter(Boolean).length > 1 ? \"merge\" : \"win\";\n}\n\n// a mood's pose: the first of these a sheet has (the numbered maids' poses, then Ellen's expressions)\nconst POSES = {\n work: [\"laptop\", \"thinking\"], read: [\"read\", \"thinking\"], win: [\"cheer\", \"thumbs_up\"], merge: [\"heart\", \"love\"],\n serve: [\"serve_tea\", \"smug\"], move: [\"run\", \"happy\"], hello: [\"wave\", \"happy\"], oops: [\"arms_open\", \"surprised\"],\n fail: [\"arms_open\", \"crying\"], idle: [\"idle\", \"happy\"], sleep: [\"sleep\", \"sleepy\"],\n};\nconst frameOf = (hero, mood) => Math.max(0, hero.poses.indexOf((POSES[mood] || POSES.idle).find((p) => hero.poses.includes(p))));\n\n/** The hero's figure inside an `.av` box: its image, or its pose's frame of the sheet. */\nexport function figureStyle(hero, mood) {\n if (!hero.poses) return `background-image:url(${hero.src})`;\n const n = hero.poses.length, k = frameOf(hero, mood);\n return `background:url(${hero.src}) ${n > 1 ? ((k / (n - 1)) * 100).toFixed(3) : 0}% 0 / ${n * 100}% 100% no-repeat;aspect-ratio:3/4;width:auto`;\n}\n\n/** The hero's head for a History name tag, 16 px, as SVG. */\nexport function headSvg(hero, title) {\n const t = `${title}`;\n if (!hero.head) return `${t}`;\n const { src, index, count } = hero.head;\n return `${t}`;\n}\n","// The sharky maid skin's voice: a kaomoji on the call's bubble, a sparkle or\n// heart where a Commit or merge lands. The view calls these only while\n// data-skin is \"maids\".\n\n// a call's bubble, said the maid way: the same words, with a face after them\nconst FACE = {\n win: \"(๑•̀ㅂ•́)و✧\", merge: \"♡\", serve: \"☕\", move: \"♪\", hello: \"(・ω・)ノ\",\n oops: \"Σ(°△°|||)\", fail: \"(╥﹏╥)\", read: \"📖\", work: \"…\",\n};\n/** The bubble's [text, class] with the mood's face. */\nexport function maidBubble(bubble, mood) {\n const face = FACE[mood];\n return face && bubble ? [`${bubble[0]} ${face}`, bubble[1]] : bubble;\n}\n\n/** A few sparkles (a Commit or publish), hearts (a merge) or a sweat drop (a conflict) at a point of the overlay, once. */\nexport function maidBurst(overlay, x, y, mood) {\n const glyphs = mood === \"merge\" ? [\"♡\", \"♡\", \"♥\"] : mood === \"oops\" || mood === \"fail\" ? [\"💦\"] : mood === \"win\" || mood === \"serve\" ? [\"✦\", \"✧\", \"✦\"] : null;\n if (!glyphs) return;\n glyphs.forEach((g, i) => {\n const el = document.createElement(\"span\");\n el.className = \"maidfx\"; el.textContent = g;\n el.style.left = x + \"px\"; el.style.top = y + \"px\";\n el.style.setProperty(\"--dx\", `${(i - (glyphs.length - 1) / 2) * 12}px`);\n el.style.color = mood === \"merge\" ? \"#F08BB0\" : \"#4D6BFE\";\n el.style.animationDelay = `${i * 90}ms`;\n overlay.appendChild(el);\n setTimeout(() => el.remove(), 1400 + i * 90);\n });\n}\n","// History as a tree, in the design of the LayerFS website's demo (Trace.jsx in\n// layerfs-website). It stands upright (time runs up, Branches grow out to both\n// sides) or lies on its side (time runs right). main is the green middle\n// bough, a little thicker than the rest, with a band for each Layer in the\n// colour of the Branch that published it. Each Branch is a bough in its own\n// colour that sprouts from the node it was forked from and ends at its head,\n// tagged with its name; every Commit is a leaf on it. A merge grafts back with\n// a ring, a publish is a dashed stem into a band, and a Branch nobody is on is\n// a bare twig past its head with an outlined tag.\n// Time is the order of events (node slots), not the wall clock: one step per\n// event, so a quiet minute takes no room. Lying on its side (the default) it\n// grows like the release video: the view holds the whole run (at least\n// GROW_MIN steps) and zooms out as it grows, until a step would be under\n// PX_FLOOR px (about a leaf); from then on it scrolls, \"now\" at the right,\n// and the zoom's fit shows it all. Branches are packed\n// into lanes: a Branch forked from main takes the free lane nearest main, one\n// forked from a Branch the free lane nearest its parent, and keeps it; a lane\n// is free again once its Branch has stopped and its tag is behind the new\n// fork. Forks, merges and publishes bend where they happen, about 45°;\n// merges and publishes are faint but for the open tab's Branch and the one\n// under the pointer. Every node keeps its data-node, so the hover card and Files work.\nimport { esc } from \"./util.js\";\n\n/** A Commit is a leaf: anchored on its bough at 0,0, pointing along +x. */\nexport const LEAF = \"M0 0Q7 -7.5 15 0Q7 7.5 0 0Z\";\n// a bend runs about as far along time as the rows it crosses (near 45°), so it\n// stays where its event is: never a long diagonal, never a sheer drop\nconst bendOf = (dr, span) => Math.min(span, Math.max(18, Math.min(220, Math.abs(dr) * 1.1)));\nconst SPROUT = 40, MAIN_TH = 6.5, TAG_H = 14, CH_W = 6.2, AV = 16;\nconst GROW_MIN = 24, PX_FLOOR = 10, PX_MAX = 64; // a step never shrinks below about a leaf's width\nconst LANE_MIN = 24, LANE_MAX = 44, COL_MIN = 34, COL_MAX = 64; // a lane lying down; a column upright\n\n/**\n * A tree renderer. It remembers each Branch's lane, so a Branch keeps its\n * place as the history grows; a stopped Branch's lane is reused.\n * @returns {(W: object, o: object) => {svg: string, overview: string}}\n */\nexport function createTree() {\n const laneOf = {};\n /**\n * @param {object} W the model's view\n * @param {object} o\n * @param {boolean} o.upright time runs up (else right)\n * @param {number} o.width the panel's width in px\n * @param {number} o.height the panel's height in px\n * @param {string} o.active the open tab: its lane is banded\n * @param {string|null} o.selected the node Files shows, ringed\n * @param {(b: string) => string[]} o.agentsOn agents on a Branch now\n * @param {(n: string) => string} o.head an agent's head as SVG at 0,0 (16 px)\n * @param {(b: string) => boolean} o.idle nobody is on the Branch: a bare twig\n * @param {(b: string) => boolean} [o.stopped] the Branch has stopped: its lane frees past its tag (default: idle)\n */\n return function tree(W, o) {\n const B = W.branches, N = W.nodes;\n const parentOf = (b) => (N[B[b].base] && N[B[b].base].branch) || \"main\";\n // ---------------------------------------------------------- time\n // one step per distinct slot: every node stands at its own time, so a Branch\n // never runs ahead of the one it was forked from\n const slots = [...new Set(Object.values(N).map((n) => n.t))].sort((a, b) => a - b), rank = new Map(slots.map((t, i) => [t, i]));\n const room = (o.upright ? o.height - 90 : o.width - 150), steps = Math.max(1, slots.length);\n // lying down, the run fills the room with \"now\" at 92% of it, and zooms out as it grows\n const px = o.upright ? Math.max(14, Math.min(PX_MAX, room / steps)) : Math.max(PX_FLOOR, Math.min(PX_MAX, room / Math.max(GROW_MIN, steps / 0.92)));\n const T0 = 10, T = (n) => T0 + rank.get(n.t) * px, lastT = T0 + (steps - 1) * px;\n const pos = {}, forkT = {}, baseT = {}, headT = {};\n for (const n of Object.values(N)) if (n.kind === \"layer\") pos[n.id] = T(n);\n const mainHead = W.mainHead && pos[W.mainHead] !== undefined ? pos[W.mainHead] : T0;\n // A Branch's fork point stands at its fork, or later for the room its sprout\n // wants (sproutOf: first the least, then, once the rows are known, what its\n // bend across them needs), but never past its first Commit (with none, two\n // steps past its fork) or the newest step: the sprout takes only the time\n // before the Branch's own work.\n const string = (sproutOf) => { for (const b of W.order) {\n const base = N[B[b].base], fork = N[\"fork:\" + b];\n baseT[b] = base && pos[base.id] !== undefined ? pos[base.id] : base ? T(base) : T(fork);\n const cs = Object.values(N).filter((n) => n.kind === \"commit\" && n.branch === b).sort((x, y) => x.t - y.t);\n const room = (cs.length ? T(cs[0]) - 8 : Math.min(lastT, T(fork) + 2 * px)) - baseT[b];\n forkT[b] = Math.max(T(fork), baseT[b] + Math.min(sproutOf(b), Math.max(14, room)));\n pos[fork.id] = forkT[b];\n // each Commit at its time, past the fork point; none past the newest step\n let prev = forkT[b] + 8 - px;\n for (const c of cs) prev = pos[c.id] = Math.max(T(c), prev + px);\n let next = Math.max(lastT, forkT[b] + 8);\n for (let i = cs.length - 1; i >= 0; i--) { next = pos[cs[i].id] = Math.min(pos[cs[i].id], next); next -= px; }\n headT[b] = Math.max(forkT[b], pos[B[b].head] ?? forkT[b]);\n } };\n string(() => SPROUT);\n\n // ---------------------------------------------------------- rows\n // A row (a column, upright) is a lane: a Branch forked from another takes\n // the free lane nearest its parent, on its parent's side, so its fork\n // crosses no other bough; one forked from main the free lane nearest main,\n // on the side with fewer Branches still going. It keeps the lane (laneOf). A\n // lane is held from a Branch's fork past its tag, its last merge or publish\n // out and its last child's fork; while the Branch goes on, for good.\n const kids = {}, depthOf = {};\n for (const b of W.order) (kids[parentOf(b)] ||= []).push(b);\n const build = (b, depth) => { depthOf[b] = depth; for (const k of kids[b] || []) build(k, depth + 1); };\n for (const b of kids.main || []) build(b, 0);\n const tagW = (name) => name.length * CH_W + 8;\n const stopped = o.stopped || o.idle;\n const until = {};\n for (const b of W.order) until[b] = stopped(b) ? headT[b] + tagW(b) + 18 : Infinity;\n for (const n of Object.values(N)) { const src = n.parents[1] && N[n.parents[1]]; if (src && src.branch && until[src.branch] !== undefined && pos[n.id] !== undefined) until[src.branch] = Math.max(until[src.branch], pos[n.id] + 8); }\n for (const b of W.order) { const p = parentOf(b); if (p !== \"main\") until[p] = Math.max(until[p], baseT[b] + 8); }\n const live = { 1: 0, [-1]: 0 }, seen = [];\n for (const b of [...W.order].sort((x, y) => baseT[x] - baseT[y] || W.order.indexOf(x) - W.order.indexOf(y))) {\n let l = laneOf[b];\n if (l === undefined) {\n const busy = new Set(seen.filter((x) => until[x] > baseT[b]).map((x) => laneOf[x]));\n const pl = laneOf[parentOf(b)] ?? 0, side = Math.sign(pl) || (live[1] <= live[-1] ? 1 : -1);\n if (pl) for (let k = 1; l === undefined; k++) l = [pl + side * k, pl - side * k].find((c) => Math.sign(c) === side && !busy.has(c));\n else for (let d = 1; l === undefined; d++) l = !busy.has(side * d) ? side * d : !busy.has(-side * d) ? -side * d : undefined;\n laneOf[b] = l;\n }\n seen.push(b);\n if (!stopped(b)) live[Math.sign(l)] += 1;\n }\n const lanes = W.order.map((b) => laneOf[b]), nUp = Math.max(0, ...lanes), nDown = Math.max(0, ...lanes.map((l) => -l));\n const rowOf = { main: nUp };\n for (const b of W.order) rowOf[b] = nUp - laneOf[b];\n const nRows = nUp + 1 + nDown;\n\n // ---------------------------------------------------------- name tags\n // a tag stands past its lane's head; upright, tags that would cover one\n // another climb, each with a leader down to its head\n const COL = o.upright ? Math.max(COL_MIN, Math.min(COL_MAX, (o.width - 40) / Math.max(1, nRows))) : Math.max(LANE_MIN, Math.min(LANE_MAX, (o.height - 40) / Math.max(1, nRows)));\n string((b) => Math.max(SPROUT, bendOf(Math.abs(rowOf[b] - rowOf[parentOf(b)]) * COL, Infinity)));\n const nowT = Math.max(mainHead, lastT, ...W.order.map((b) => forkT[b])) + px * 0.6 + 8;\n // main reaches the newest step, so no Branch is ever ahead of it, but it only grows\n // solid with a publish: past its newest Layer it runs on as a thin dotted line\n const mainEnd = Math.max(mainHead + 12, Math.min(nowT - 4, Math.max(lastT, ...W.order.map((b) => forkT[b])) + 8));\n const R = (i) => i * COL + COL / 2;\n const tags = [\"main\", ...W.order].map((id) => {\n const isMain = id === \"main\", end = isMain ? mainEnd : headT[id], idle = !isMain && o.idle(id);\n return { id, i: rowOf[id], end, idle, t: end + (idle ? 18 : 10) + (isMain ? 6 : 0), w: tagW(id), avs: isMain ? [] : o.agentsOn(id) };\n }), tagOf = Object.fromEntries(tags.map((tg) => [tg.id, tg]));\n if (o.upright) {\n const placed = [];\n for (const g of [...tags].sort((a, b) => a.t - b.t)) {\n const hit = () => placed.find((p) => Math.abs(R(p.i) - R(g.i)) < (p.w + g.w) / 2 + 4 && Math.abs(p.t - g.t) < TAG_H + 2 + (p.avs.length ? AV : 0));\n for (let p; (p = hit()); ) g.t = p.t + TAG_H + 3 + (p.avs.length ? AV : 0);\n placed.push(g);\n }\n }\n // how far the plot reaches along time: upright, the highest tag; lying down, the longest one\n const topT = o.upright ? Math.max(nowT + 14, ...tags.map((g) => g.t + TAG_H + (g.avs.length ? AV + 2 : 0) + 4))\n : Math.max(nowT + 30, ...tags.map((g) => g.t + g.w + Math.min(3, g.avs.length) * AV + 12));\n\n // ---------------------------------------------------------- geometry\n // the plot is drawn in time × row; upright turns it a quarter turn\n const rowsW = nRows * COL;\n const mainC = R(rowOf.main);\n const UW = Math.max(o.width, 2 * Math.max(mainC, rowsW - mainC) + 24);\n const off = o.upright ? Math.round(UW / 2 - mainC) : 0;\n const GROUND = 14, H = o.upright ? Math.max(o.height, topT + GROUND + 8) : Math.max(o.height - 2, rowsW + 8);\n const Wd = o.upright ? UW : Math.max(o.width, topT + 12);\n const baseY = H - GROUND;\n // lying down, main sits in the middle of the panel while both sides fit around it\n const down = o.upright ? 0 : Math.max(0, Math.min(Math.round((H - 8) / 2 - mainC), H - 8 - rowsW));\n const P = (t, r) => (o.upright ? [r + off, baseY - t] : [t + 6, r + 4 + down]);\n const pt = (t, r) => P(t, r).map((v) => +v.toFixed(1)).join(\" \");\n const path = (pts) => \"M\" + pts.map(([t, r], k) => (k === 1 && pts.length === 4 ? \"C\" : \"\") + pt(t, r)).join(\" \");\n const line = (t0, t1, r) => `M${pt(t0, r)} L${pt(t1, r)}`;\n // a fork leaves its parent slanting and curves into its own row (the website's sprout), then runs along it\n const sprout = (t0, r0, t1, r1) => {\n if (r0 === r1) return line(t0, t1, r1);\n const d = bendOf(r1 - r0, t1 - t0), dr = r1 - r0;\n return path([[t0, r0], [t0 + d * 0.45, r0 + dr * 0.3], [t0 + d * 0.55, r1], [t0 + d, r1]]) + ` L${pt(t1, r1)}`;\n };\n // a merge or publish runs along its source's row, then curves into the target where it lands\n const rise = (t0, r0, t1, r1) => {\n if (r0 === r1) return line(t0, t1, r0);\n const d = bendOf(r1 - r0, t1 - t0), dr = r1 - r0;\n return `M${pt(t0, r0)} L${pt(t1 - d, r0)} C${pt(t1 - d * 0.35, r0)} ${pt(t1, r0 + dr * 0.45)} ${pt(t1, r1)}`;\n };\n const color = (b) => (b && B[b] ? `var(${B[b].color})` : \"var(--trunk)\");\n const spin = (deg) => (o.upright ? deg - 90 : deg);\n const lineOf = (n) => (n.branch ? rowOf[n.branch] : rowOf.main);\n const at = (id) => { const n = N[id]; return n && pos[id] !== undefined ? P(pos[id], R(lineOf(n))) : null; };\n const pop = (id) => (W.newNodes && W.newNodes.has(id) ? \" popin\" : \"\");\n\n let g = \"\";\n // the open tab's lane, banded; lying down a lane is shared, so the band runs\n // only along its Branch's bough, from its fork past its tag (main has none)\n const ai = rowOf[o.active];\n if (ai !== undefined && (o.upright || o.active !== \"main\")) {\n const t0 = o.upright ? 0 : baseT[o.active], t1 = o.upright ? topT : tagOf[o.active].t + tagOf[o.active].w + 6;\n const [x0, y0] = P(t1, R(ai) - COL / 2), [x1, y1] = P(t0, R(ai) + COL / 2);\n g += ``;\n }\n // a faint line across the plot at each Layer, and \"now\" above everything\n const across = (t, cls) => { const [x0, y0] = P(t, 0), [x1, y1] = P(t, rowsW); return o.upright ? `` : ``; };\n for (const n of Object.values(N)) if (n.kind === \"layer\") g += across(pos[n.id], \"grid\");\n g += across(nowT, \"now\");\n { const [x, y] = P(nowT, 0); g += o.upright ? `now` : `now`; }\n\n // forks, merges and publishes under every bough\n for (const b of W.order) {\n const r0 = R(rowOf[parentOf(b)]), r1 = R(rowOf[b]);\n g += ``;\n }\n for (const n of Object.values(N)) {\n const src = n.parents[1] && N[n.parents[1]];\n if (!src || pos[src.id] === undefined) continue;\n const r0 = R(lineOf(src)), r1 = R(lineOf(n)), near = o.active !== \"main\" && (src.branch === o.active || n.branch === o.active);\n const data = `data-from=\"${esc(src.branch || \"main\")}\" data-to=\"${esc(n.branch || \"main\")}\" data-at=\"${esc(n.id)}\"`;\n g += ``;\n }\n // boughs end at their head; a Branch nobody is on goes on as a bare twig to its tag\n for (const b of W.order) {\n const r = R(rowOf[b]), d = depthOf[b];\n g += ``;\n if (o.idle(b)) g += ``;\n }\n // main: the green middle bough, with a band per Layer\n const solid = Math.min(mainEnd, mainHead + 6);\n g += ``;\n if (mainEnd > solid + 2) g += ``;\n for (const n of Object.values(N)) if (n.kind === \"layer\") {\n const [x, y] = P(pos[n.id], mainC), src = n.parents[1] && N[n.parents[1]], c = src ? color(src.branch) : \"var(--green-dark)\";\n const [w, h] = o.upright ? [MAIN_TH + 8, 5] : [5, MAIN_TH + 8], sel = o.selected === n.id ? \" sel\" : \"\";\n g += ``;\n g += o.upright ? `${esc(n.id)}`\n : `${esc(n.id)}`;\n }\n // fork points: a small knot where the Branch begins\n for (const b of W.order) {\n const id = \"fork:\" + b, [x, y] = P(forkT[b], R(rowOf[b]));\n g += ``;\n }\n // Commits are leaves, turning up and down along the bough in shades of its\n // colour; a merge is a ring in the Branch's colour with the source's at its heart\n const shades = [\"\", \"color-mix(in srgb, %c 70%, white)\", \"color-mix(in srgb, %c 82%, black)\"];\n const commits = Object.values(N).filter((n) => n.kind === \"commit\").sort((x, y) => pos[x.id] - pos[y.id]);\n const flip = {};\n for (const n of commits) {\n const [x, y] = P(pos[n.id], R(rowOf[n.branch])), c = color(n.branch), sel = o.selected === n.id ? \" sel\" : \"\";\n const k = (flip[n.branch] = (flip[n.branch] || 0) + 1);\n if (n.parents[1]) {\n g += ``;\n continue;\n }\n const fill = (shades[Number(n.id.replace(/\\D/g, \"\")) % 3] || \"%c\").replaceAll(\"%c\", c);\n g += ``;\n }\n // mounted Workspaces: a badge on the node they are based on (red when stale)\n const mounted = {};\n for (const w of Object.values(W.ws)) (mounted[w.baseNode] ||= []).push(w);\n for (const [id, ws] of Object.entries(mounted)) {\n const p = at(id), n = N[id];\n if (!p) continue;\n const stale = n.branch && B[n.branch] && id !== B[n.branch].head;\n g += `${ws.length}`;\n }\n // name tags, and the agents on each Branch standing on its tag\n for (const tg of tags) {\n const isMain = tg.id === \"main\", r = R(tg.i), c = isMain ? \"var(--green-dark)\" : color(tg.id), [hx, hy] = P(tg.end, r);\n let x, y;\n if (o.upright) { [x, y] = P(tg.t, r); x -= tg.w / 2; y -= TAG_H; } else { [x, y] = P(tg.t, r); y -= TAG_H / 2; }\n if (o.upright && tg.t - tg.end > (tg.idle ? 22 : 14)) g += ``;\n g += `${isMain ? \"main · read-only · open the main tab\" : `Open ${esc(tg.id)} · forked from ${esc(B[tg.id].base)}`}`\n + `${esc(tg.id)}`;\n tg.avs.slice(0, 3).forEach((n, k) => {\n const ax = o.upright ? x + tg.w / 2 - (Math.min(3, tg.avs.length) * AV) / 2 + k * AV : x + tg.w + 4 + k * AV, ay = o.upright ? y - AV - 1 : y - 1;\n g += `${o.head(n)}`;\n });\n }\n if (o.upright) g += ``;\n const svg = `${g}`;\n\n // ---------------------------------------------------------- overview\n // the whole run in one strip: Commits counted over time, Layers as green\n // ticks; the view moves its box as the tree scrolls\n const OW = 300, nb = 60, bins = new Array(nb).fill(0);\n for (const n of commits) bins[Math.min(nb - 1, Math.floor((pos[n.id] / topT) * nb))]++;\n const peak = Math.max(3, ...bins), bw = OW / nb;\n let ov = bins.map((v, i) => (v ? `` : \"\")).join(\"\");\n for (const n of Object.values(N)) if (n.kind === \"layer\") ov += ``;\n ov += ``;\n const overview = `${ov}`;\n return { svg, overview };\n };\n}\n","// Zoom and pan for the History tree, like a map. The tree is drawn for its\n// box (tree.js); a zoom scales the drawn SVG, which keeps its viewBox, and the\n// box scrolls over it. ⌘/Ctrl + wheel or a pinch zooms at the pointer, a drag\n// pans, ⌘-click zooms in and ⌘⇧-click out (the cursor shows which), a\n// double-click zooms in (⇧ out), + − 0 work while the tree has focus, and the\n// controls in its corner zoom, show the zoom (click: 100%) and fit it all.\n\nconst MIN = 0.25, MAX = 4, STEP = 1.25, DRAG_PX = 4;\nconst clamp = (z) => Math.min(MAX, Math.max(MIN, z));\n\n/**\n * @param {object} o root (the view's element), onZoom() after the viewer\n * zoomed or panned (the view leaves \"now\" and moves the overview's box)\n */\nexport function createTreeZoom({ root, onZoom }) {\n let z = 1, pan = null, swallow = false;\n const box = () => root.querySelector(\"[data-tree]\");\n const svgOf = (el) => el && el.querySelector(\"svg.tree\");\n const label = () => `${Math.round(z * 100)}%`;\n /** The controls drawn in the tree's corner. */\n const controlsHtml = () => `
\n \n \n \n
`;\n /** Scales the drawn tree to the zoom; the view calls it after each draw. */\n function apply(el = box()) {\n const svg = svgOf(el);\n if (!svg) return;\n svg.dataset.w ??= svg.getAttribute(\"width\");\n svg.dataset.h ??= svg.getAttribute(\"height\");\n svg.setAttribute(\"width\", (+svg.dataset.w * z).toFixed(1));\n svg.setAttribute(\"height\", (+svg.dataset.h * z).toFixed(1));\n svg.dataset.zoom = String(z);\n for (const v of root.querySelectorAll(\".tzoom .tzv\")) v.textContent = label();\n }\n /** Zooms to `next`, keeping the tree's point under (px, py) of its box where it is. */\n function zoomTo(next, px, py) {\n const el = box();\n if (!el) return;\n next = clamp(next);\n if (px == null) { px = el.clientWidth / 2; py = el.clientHeight / 2; }\n const cx = (el.scrollLeft + px) / z, cy = (el.scrollTop + py) / z;\n z = next;\n apply(el);\n el.scrollLeft = cx * z - px;\n el.scrollTop = cy * z - py;\n onZoom();\n }\n const at = (el, e) => { const r = el.getBoundingClientRect(); return [e.clientX - r.left, e.clientY - r.top]; };\n function fit() {\n const el = box(), svg = svgOf(el);\n if (!svg) return;\n zoomTo(Math.min(el.clientWidth / +svg.dataset.w, el.clientHeight / +svg.dataset.h, 1));\n }\n function onWheel(e) {\n const el = e.target.closest && e.target.closest(\"[data-tree]\");\n if (!el || !(e.ctrlKey || e.metaKey)) return; // a plain wheel scrolls\n e.preventDefault();\n zoomTo(z * Math.exp(-e.deltaY * 0.01), ...at(el, e));\n }\n const onTree = (e) => e.target.closest && e.target.closest(\"[data-tree]\");\n const onNode = (e) => e.target.closest(\"[data-node], .tag, a, button\");\n function onDown(e) {\n const el = onTree(e);\n if (!el || e.button !== 0 || onNode(e) || e.metaKey || e.ctrlKey) return;\n pan = { el, x: e.clientX, y: e.clientY, left: el.scrollLeft, top: el.scrollTop, moved: false };\n addEventListener(\"pointermove\", onMove);\n addEventListener(\"pointerup\", onUp, { once: true });\n }\n function onMove(e) {\n if (!pan) return;\n const dx = e.clientX - pan.x, dy = e.clientY - pan.y;\n if (!pan.moved && Math.hypot(dx, dy) < DRAG_PX) return;\n if (!pan.moved) { pan.moved = true; pan.el.classList.add(\"panning\"); }\n pan.el.scrollLeft = pan.left - dx;\n pan.el.scrollTop = pan.top - dy;\n onZoom();\n }\n function onUp() {\n removeEventListener(\"pointermove\", onMove);\n if (pan && pan.moved) { swallow = true; setTimeout(() => { swallow = false; }, 0); } // the drag's click is not a click\n if (pan) pan.el.classList.remove(\"panning\");\n pan = null;\n }\n /** Clicks the view hands over first: the controls, a drag's end, ⌘-click. True when handled. */\n function click(e) {\n if (swallow) { swallow = false; e.preventDefault(); return true; }\n const b = e.target.closest && e.target.closest(\"[data-tz]\");\n if (b) {\n const k = b.dataset.tz;\n if (k === \"in\") zoomTo(z * STEP); else if (k === \"out\") zoomTo(z / STEP); else if (k === \"reset\") zoomTo(1); else fit();\n return true;\n }\n const el = onTree(e);\n if (el && (e.metaKey || e.ctrlKey)) { zoomTo(e.shiftKey ? z / STEP : z * STEP, ...at(el, e)); return true; }\n return false;\n }\n function onDbl(e) {\n const el = onTree(e);\n if (!el || onNode(e)) return;\n e.preventDefault();\n zoomTo(e.shiftKey ? z / STEP : z * STEP, ...at(el, e));\n }\n function onKey(e) {\n const mod = e.metaKey || e.ctrlKey;\n root.classList.toggle(\"tz-key\", mod);\n root.classList.toggle(\"tz-out\", mod && e.shiftKey);\n if (e.type !== \"keydown\" || mod || !onTree(e)) return;\n if (e.key === \"+\" || e.key === \"=\") zoomTo(z * STEP); else if (e.key === \"-\") zoomTo(z / STEP); else if (e.key === \"0\") zoomTo(1); else return;\n e.preventDefault();\n }\n const onBlur = () => { root.classList.remove(\"tz-key\", \"tz-out\"); };\n root.addEventListener(\"wheel\", onWheel, { passive: false });\n root.addEventListener(\"pointerdown\", onDown);\n root.addEventListener(\"dblclick\", onDbl);\n addEventListener(\"keydown\", onKey);\n addEventListener(\"keyup\", onKey);\n addEventListener(\"blur\", onBlur);\n return {\n get zoom() { return z; },\n controlsHtml, apply, click,\n dispose() {\n root.removeEventListener(\"wheel\", onWheel);\n root.removeEventListener(\"pointerdown\", onDown);\n root.removeEventListener(\"dblclick\", onDbl);\n removeEventListener(\"keydown\", onKey);\n removeEventListener(\"keyup\", onKey);\n removeEventListener(\"blur\", onBlur);\n removeEventListener(\"pointermove\", onMove);\n },\n };\n}\n","// The History panel, as the dsh chat draws it, shared by the chat's LayerFS\n// tab and the project board: a header (History or Files of the open tab, the\n// tab's ref, its Commit count, Play, the tree's orientation), then the project's\n// tree (tree.js) with its zoom, Overview strip and a \"?\" legend, or Files\n// (files.js). Hovering a node opens its card. The panel draws as a string\n// (html), then is placed in its box (place); its host routes clicks, hovers\n// and scrolls to it.\nimport * as X from \"../../model/src/index.js\";\nimport { createTree, LEAF } from \"./tree.js\";\nimport { createTreeZoom } from \"./treezoom.js\";\nimport { esc } from \"./util.js\";\n\nconst LEGEND = `
\n Layer · a band on main\n Commit · a leaf\n Branch · a bough\n merge · grafts back\n publish · adds a band\n idle · bare twig\n click a node: Files there · a name tag: its tab
`;\n\n/**\n * @param {object} o\n * @param {HTMLElement} o.root the view's root (the card and zoom live in it)\n * @param {object} o.v the view's state: W, active tab, rightMode, orient, project\n * @param {object} o.files the Files component (files.js) for the same state\n * @param {(n: string) => object} o.avatar an agent's hero\n * @param {(n: string) => string} o.mascot an agent's small hero\n * @param {(n: string) => string} o.head an agent's head for the tree's name tags (SVG)\n * @param {(lane: string, id: string, mode: string) => void} o.openAt a card's Browse/Diff: Files at a node\n * @param {(by: string, id: string, node: object) => void} [o.visit] a node the replay grew: its maker shows up on it\n */\nexport function createHistory(o) {\n const { root, v, files, avatar, mascot } = o;\n const q = (sel) => root.querySelector(sel);\n const card = document.createElement(\"div\");\n card.className = \"hcard\"; card.setAttribute(\"role\", \"tooltip\");\n root.append(card);\n const tree = createTree();\n // the tree shows \"now\" (upright: the top, centred on main; lying down: the\n // right end) until the viewer scrolls, zooms or pans it; then it keeps their place\n let auto = true, set = null, drawnFor = null, cardTimer = null;\n let legend = false; // the legend opens over the tree from its \"?\" button\n const tz = createTreeZoom({ root, onZoom: () => { auto = false; placeOverview(); } });\n\n /** A Branch nobody is on, whose tab has faded: a bare twig in the tree. */\n // When a Branch fades to a bare twig and frees its lane, the same in Play and\n // live: FADE_STEPS events after its last one (its own nodes, and merges or\n // publishes out of it). Live, a Branch someone is on, with a Workspace\n // mounted or in conflict, stays in leaf.\n const FADE_STEPS = 6;\n function eventsOf(W) {\n const slots = [...new Set(Object.values(W.nodes).map((n) => n.t))].sort((a, b) => a - b), last = {};\n for (const n of Object.values(W.nodes)) {\n if (n.branch) last[n.branch] = Math.max(last[n.branch] ?? -Infinity, n.t);\n const src = n.parents[1] && W.nodes[n.parents[1]];\n if (src && src.branch) last[src.branch] = Math.max(last[src.branch] ?? -Infinity, n.t);\n }\n return { slots, last, rank: new Map(slots.map((t, k) => [t, k])) };\n }\n /** Is Branch b done at slot index i: its last event more than FADE_STEPS events back. */\n const doneAt = (ev, i) => (b) => ev.last[b] !== undefined && i - ev.rank.get(ev.last[b]) > FADE_STEPS;\n function branchIdle(b) {\n const W = v.W;\n return !X.agentsOn(W, b).length && !X.mounted(W, b) && !X.conflicted(W, b) && W.clock - W.branches[b].last > X.FADE_S;\n }\n /** The node a tab's Files is fixed at, or null while it follows the head. */\n function pinnedAt(tab) { const at = files.filesOf(tab).at; return at === \"latest\" ? null : at; }\n // The tree keeps each Branch's lane from when it first drew it. Opened on a\n // run already under way, it first grows through the run's forks the way Play\n // does, so its lanes are the ones Play shows (and those growing live had).\n let grown = false;\n const treeOf = (tab, size) => {\n const W = v.W, ev = eventsOf(W), done = doneAt(ev, ev.slots.length - 1);\n const base = { upright: v.orient === \"upright\", width: size.w, height: size.h, active: tab, selected: null, agentsOn: () => [], head: o.head };\n if (!grown && W.order.length > 1) {\n for (const t of [...new Set(W.order.map((b) => W.nodes[\"fork:\" + b] && W.nodes[\"fork:\" + b].t))].filter((t) => t !== undefined).sort((x, y) => x - y)) {\n const d = doneAt(ev, ev.rank.get(t));\n tree(cutAt(W, t), { ...base, idle: d, stopped: d });\n }\n }\n if (W.order.length) grown = true;\n const faded = (b) => done(b) && (v.project || (!X.agentsOn(W, b).length && !X.mounted(W, b) && !X.conflicted(W, b)));\n return tree(W, { ...base, selected: pinnedAt(tab), agentsOn: (b) => (v.project ? [] : X.agentsOn(W, b)), idle: faded, stopped: faded });\n };\n /** The tree's box: the drawn one, else the panel's less its header, Overview and legend. */\n function size(host) {\n const el = q(\"[data-tree]\");\n if (el) return { w: el.clientWidth - 2, h: el.clientHeight - 2 };\n return { w: Math.max(240, (host ? host.clientWidth : 440) - 2), h: Math.max(240, (host ? host.clientHeight : 640) - 170) };\n }\n\n // ---------------------------------------------------------------- replay\n // Play replays History like a film: the tree is drawn from the model cut at\n // each step, from the first event to now, and grows and zooms out as it did\n // live. A Branch whose last event has passed turns to a bare twig. Pause\n // holds the frame; the end, \"now\" or another tab's view goes back to live.\n // about STEP_MS an event, so a short History plays briskly and a long one\n // fits in PLAY_MS (never under PLAY_MIN)\n const PLAY_MS = 14000, PLAY_MIN = 3000, STEP_MS = 300, TICK_MIN = 30;\n let play = null;\n /** The model as it stood at slot `t`: its nodes up to then, each Branch's head then. */\n function cutAt(W, t) {\n const nodes = {};\n for (const [id, n] of Object.entries(W.nodes)) if (n.t <= t) nodes[id] = n;\n const order = W.order.filter((b) => nodes[\"fork:\" + b]), branches = {};\n for (const b of order) {\n let head = nodes[W.branches[b].head] ? W.branches[b].head : \"fork:\" + b, ht = -Infinity;\n if (head === \"fork:\" + b) for (const n of Object.values(nodes)) if (n.kind === \"commit\" && n.branch === b && n.t > ht) { ht = n.t; head = n.id; }\n branches[b] = { ...W.branches[b], head };\n }\n let mainHead = null, mt = -Infinity;\n for (const n of Object.values(nodes)) if (n.kind === \"layer\" && n.t > mt) { mt = n.t; mainHead = n.id; }\n return { ...W, nodes, order, branches, mainHead, ws: {}, newNodes: new Set() };\n }\n function startPlay() {\n const ev = eventsOf(v.W), slots = ev.slots;\n if (slots.length < 2) return;\n const total = Math.min(PLAY_MS, Math.max(PLAY_MIN, slots.length * STEP_MS));\n const tick = Math.max(TICK_MIN, total / slots.length);\n play = { slots, ev, i: 0, tick, per: Math.max(1, Math.round((slots.length * tick) / total)), tree: createTree(), timer: null, paused: false, shown: new Set(), greeted: 0 };\n frame();\n }\n function stopPlay() { if (play) clearTimeout(play.timer); play = null; }\n function frame() {\n const panel = q(\"[data-tree]\") && q(\"[data-tree]\").closest(\".hist\");\n if (!play || !panel) { stopPlay(); auto = true; v.render(); return; }\n const sz = size();\n const next = document.createElement(\"div\");\n next.innerHTML = html(sz);\n patch(panel, next, 4);\n place(null, sz);\n if (o.visit) greet();\n if (play.paused) return;\n if (play.i >= play.slots.length - 1) { play.timer = setTimeout(() => { stopPlay(); auto = true; v.render(); }, 900); return; }\n play.timer = setTimeout(() => { if (!play) return; play.i = Math.min(play.slots.length - 1, play.i + play.per); frame(); }, play.tick);\n }\n // A frame keeps every element that did not change, so a button pressed\n // between frames is still the one released (else the click is lost): only\n // what differs is replaced, down to a few levels, then whole.\n function patch(el, next, depth) {\n const a = [...el.childNodes], b = [...next.childNodes];\n if (a.length !== b.length) { el.replaceChildren(...b); return; }\n a.forEach((old, i) => {\n const nu = b[i];\n if (old.isEqualNode(nu)) return;\n const same = depth > 0 && old.nodeType === 1 && nu.nodeType === 1 && old.tagName === nu.tagName\n && old.attributes.length === nu.attributes.length && [...nu.attributes].every((x) => old.getAttribute(x.name) === x.value);\n if (same) patch(old, nu, depth - 1);\n else old.replaceWith(nu);\n });\n }\n // the nodes this frame grew get their makers' visits (o.visit): the newest\n // few, and no more often than a visit can be seen on a fast replay\n function greet() {\n const now = Object.values(play.cut.nodes), fresh = now.filter((n) => !play.shown.has(n.id)).sort((a, b) => b.t - a.t);\n for (const n of now) play.shown.add(n.id);\n if (Date.now() - play.greeted < 200) return;\n play.greeted = Date.now();\n for (const n of fresh.filter((n) => n.by).slice(0, play.tick >= 200 ? 3 : 1)) o.visit(n.by, n.id, n);\n }\n /** The tree as the replay has it now, or null when History is live. */\n function playTree(tab, sz) {\n const t = play.slots[play.i], W = play.cut = cutAt(v.W, t);\n // a Branch fades a few steps after its last event, as the live tree does\n const done = doneAt(play.ev, play.i);\n return { W, t: play.tree(W, { upright: v.orient === \"upright\", width: sz.w, height: sz.h, active: tab, selected: null, agentsOn: () => [], head: o.head, idle: done, stopped: done }) };\n }\n\n function html(sz) {\n const tab = v.active, mode = v.rightMode[tab] || \"history\";\n if (play && mode !== \"history\") stopPlay();\n const cut = play && playTree(tab, sz), W = cut ? cut.W : v.W, B = W.branches[tab], color = (v.W.branches[tab] || {}).color;\n const headId = tab === \"main\" ? W.mainHead : !B ? null : B.head.startsWith(\"fork:\") ? B.base : B.head;\n const nC = Object.values(W.nodes).filter((n) => n.kind === \"commit\").length;\n // the File, History and Storage tabs around it switch views (view.js drawIde)\n const seg = \"\";\n const orient = mode !== \"history\" ? \"\" : `${[[\"upright\", \"Upright\", \"M6 11V1M6 6L2.5 3M6 8L9.5 5\"], [\"sideways\", \"Sideways\", \"M1 6H11M6 6L3 2.5M8 6L5 9.5\"]]\n .map(([k, l, d]) => ``).join(\"\")}`;\n const playing = play && !play.paused;\n const playBtn = mode !== \"history\" ? \"\" : ``;\n const head = `
${seg}${esc(tab)} @ ${esc(headId || \"–\")}${nC} commit${nC === 1 ? \"\" : \"s\"}${play ? \" · replay\" : \"\"}${playBtn}${orient}
`;\n if (!W.mainHead && !play) return head + `
No project yet
`;\n const t = cut ? cut.t : treeOf(tab, sz);\n const key = `${legend ? LEGEND : \"\"}`;\n return head + `
${tz.controlsHtml()}${key}
${t.svg}
`\n + `
Overview
${t.overview}
`;\n }\n\n /** Where the viewer has the tree now, to keep across a redraw. */\n function keep() { const el = q(\"[data-tree]\"); return el && { left: el.scrollLeft, top: el.scrollTop }; }\n /** After a redraw: the zoom, the tree's place, and whether its box came out another size than `sz` (draw again). */\n function place(at, sz) {\n tz.apply();\n const el = q(\"[data-tree]\");\n if (el) {\n if (auto || !at) {\n if (v.orient === \"upright\") { el.scrollTop = 0; el.scrollLeft = Math.max(0, Math.round((el.scrollWidth - el.clientWidth) / 2)); }\n else el.scrollLeft = el.scrollWidth;\n } else { el.scrollLeft = at.left; el.scrollTop = at.top; }\n set = { left: el.scrollLeft, top: el.scrollTop };\n placeOverview();\n }\n drawnFor = el && { w: el.clientWidth, h: el.clientHeight };\n light(litAt); // the redraw dropped the hovered Branch's lines\n // a node card whose node went away with the redraw (History became Files) never saw its mouseout\n if (card.classList.contains(\"open\") && !card.matches(\":hover\") && !root.querySelector(\"svg.graph [data-node]:hover\")) hideCard(true);\n return !!(el && sz && (Math.abs(el.clientWidth - 2 - sz.w) > 8 || Math.abs(el.clientHeight - 2 - sz.h) > 8));\n }\n /** The tree's box changed size since it was drawn: it needs drawing again. */\n function resized() {\n const el = q(\"[data-tree]\");\n return !!(el && drawnFor && (Math.abs(el.clientWidth - drawnFor.w) > 8 || Math.abs(el.clientHeight - drawnFor.h) > 8));\n }\n // the Overview's box: the part of the run the tree shows\n function placeOverview() {\n const el = q(\"[data-tree]\"), box = q(\".ovbox\"), svg = el && el.querySelector(\"svg\");\n if (!box || !svg) return;\n const z = tz.zoom, span = +svg.dataset.span * z, base = +svg.dataset.base * z;\n const [a, b] = svg.dataset.dir === \"up\" ? [base - el.scrollTop - el.clientHeight, base - el.scrollTop] : [el.scrollLeft - 6 * z, el.scrollLeft + el.clientWidth - 6 * z];\n const lo = Math.max(0, a / span), hi = Math.min(1, b / span);\n box.style.left = (lo * 100).toFixed(2) + \"%\"; box.style.width = Math.max(2, (hi - lo) * 100).toFixed(2) + \"%\";\n }\n function overviewTo(e, strip) {\n const el = q(\"[data-tree]\"), svg = el && el.querySelector(\"svg\");\n if (!svg) return;\n const z = tz.zoom, r = strip.getBoundingClientRect(), t = ((e.clientX - r.left) / r.width) * +svg.dataset.span * z;\n if (svg.dataset.dir === \"up\") el.scrollTop = +svg.dataset.base * z - t - el.clientHeight / 2;\n else el.scrollLeft = t + 6 * z - el.clientWidth / 2;\n auto = false;\n }\n\n // ---------------------------------------------------------------- node card\n // What a History node is, who made it, and which Workspaces are mounted on it.\n function wsRows(name, nodeId) {\n const W = v.W, s = W.engine.s, head = s.branches[name].head || \"fork:\" + name, rows = [];\n for (const id of s.sandboxOrder) for (const p of s.sandboxes[id].wsOrder) {\n const w = s.sandboxes[id].workspaces[p];\n if (!w.mounted || w.branch !== name || (w.baseCommit || \"fork:\" + name) !== nodeId) continue;\n const k = `${id}:${p}`, dirty = W.engine.dirtyOf(w), stale = nodeId !== head, agent = (W.panes[k] || {}).agent;\n rows.push(``);\n }\n return rows.length ? `
Workspaces mounted here
${rows.join(\"\")}` : \"\";\n }\n function cardHtml(id) {\n const W = v.W, s = W.engine.s, who = W.attrib[id], by = who ? `by ${esc(who)}` : \"\", head = 'head';\n const btns = `
Click the node: the sidebar's files show this point
`;\n if (s.layers[id]) {\n const l = s.layers[id];\n return `
${l.id}main${id === s.main.head ? head : \"\"}
Layer${l.root ? ` · root ${l.root}` : \"\"}
${l.sourceCommit ? `published from ${esc(l.sourceBranch)} ${l.sourceCommit}` : \"project.init\"}${by ? \"
\" + by : \"\"}
${btns}`;\n }\n if (s.commits[id]) {\n const c = s.commits[id];\n const lww = (list) => (list && list.length ? \"
\" + list.map((d) => `last-writer-wins ${esc(d.path)} ← ${esc(d.kept)}`).join(\"
\") : \"\");\n const owner = (n) => (s.commits[n] ? `${esc(s.commits[n].branch)} ${n}` : `main ${n}`);\n const mrg = c.mergedFrom ? `
Merge
merged from ${owner(c.mergedFrom)} into ${c.parent ? owner(c.parent) : \"main \" + c.base}${c.mergeBase ? `
merge base ${esc(c.mergeBase)}` : \"\"}${lww(c.lww)}
`\n : c.merged ? `
Merged on commit
the Workspace was on ${c.merged.from}; merged with head ${c.merged.head}${lww(c.merged.lww)}
` : \"\";\n const after = c.displacedBy ? `
Off the line
${c.displacedBy} was committed with --force, so ${c.id} is no longer an ancestor of the head.
` : \"\";\n const b = s.branches[c.branch];\n return `
${c.id}${esc(c.branch)}${b && b.head === id ? head : \"\"}
\n
parent ${c.parent || \"Branch base\"}${c.root ? ` · root ${c.root}` : \"\"}
${by}${by ? \" · \" : \"\"}${esc(c.message || c.via)}
via ${esc(c.by === \"fs\" ? c.via : c.by === \"merge\" ? \"branch.merge\" : \"sandbox.commit \" + c.via)}
${mrg}${after}${wsRows(c.branch, id)}${btns}`;\n }\n const name = id.slice(5), b = s.branches[name];\n return `
${esc(name)}fork point${b.head ? \"\" : head}
forked from ${b.from}${b.head ? \"\" : \" · no Commits yet\"}${by ? \"
\" + by : \"\"}
${wsRows(name, id)}${btns}`;\n }\n function showCard(node) {\n clearTimeout(cardTimer);\n const r = node.getBoundingClientRect(), base = root.getBoundingClientRect();\n card.innerHTML = cardHtml(node.dataset.node);\n card.classList.add(\"open\");\n const h = card.offsetHeight, w = root.clientWidth, top = r.bottom - base.top + 8;\n card.style.left = Math.max(8, Math.min(w - 298, r.left - base.left + r.width / 2 - 145)) + \"px\";\n card.style.top = (top + h > root.clientHeight ? r.top - base.top - h - 8 : top) + \"px\";\n }\n const hideCard = (now) => { clearTimeout(cardTimer); cardTimer = setTimeout(() => card.classList.remove(\"open\"), now ? 0 : 180); };\n const onCardEnter = () => clearTimeout(cardTimer), onCardLeave = () => hideCard();\n card.addEventListener(\"mouseenter\", onCardEnter);\n card.addEventListener(\"mouseleave\", onCardLeave);\n\n // ---------------------------------------------------------------- events\n /** A click inside the panel or its card; true when it was the panel's. */\n function click(e) {\n if (tz.click(e)) return true;\n const at = (sel) => e.target.closest(sel);\n let el;\n if ((el = at(\"[data-card-at], [data-card-cmp]\"))) {\n const id = el.dataset.cardAt || el.dataset.cardCmp, n = v.W.nodes[id];\n if (n) { hideCard(true); o.openAt(n.branch || \"main\", id, el.dataset.cardCmp ? \"diff\" : \"view\"); }\n return true;\n }\n if ((el = at(\"[data-orient]\"))) { v.orient = el.dataset.orient; auto = true; v.render(); return true; }\n if (at(\"[data-play]\")) {\n if (!play) startPlay();\n else if ((play.paused = !play.paused)) { clearTimeout(play.timer); v.render(); }\n else frame();\n return true;\n }\n if (at(\"[data-legend]\")) { legend = !legend; v.render(); return true; }\n if (at(\"[data-now]\")) { stopPlay(); auto = true; v.render(); return true; }\n if ((el = at(\"[data-ov]\"))) { overviewTo(e, el); return true; }\n return false;\n }\n // under the pointer, a Branch's tag or node lights its merges and publishes (and a node the ones into it)\n const hovered = (el) => {\n const n = el && el.closest && el.closest(\"svg.tree [data-node], svg.tree [data-open]\");\n if (!n) return null;\n const node = n.dataset.node && v.W.nodes[n.dataset.node];\n return { b: n.dataset.open || (node && node.branch) || null, id: n.dataset.node || null };\n };\n let litAt = null;\n function light(at) {\n litAt = at;\n const svg = q(\"svg.tree\");\n if (!svg) return;\n for (const p of svg.querySelectorAll(\".link.on\")) p.classList.remove(\"on\");\n if (!at) return;\n const sel = [at.b && `.link[data-from=\"${CSS.escape(at.b)}\"], .link[data-to=\"${CSS.escape(at.b)}\"]`, at.id && `.link[data-at=\"${CSS.escape(at.id)}\"]`].filter(Boolean).join(\", \");\n for (const p of svg.querySelectorAll(sel)) p.classList.add(\"on\");\n }\n const over = (e) => { const n = e.target.closest && e.target.closest(\"svg.graph [data-node]\"); if (n) showCard(n); light(hovered(e.target)); };\n const out = (e) => { const n = e.target.closest && e.target.closest(\"svg.graph [data-node]\"); if (n && !n.contains(e.relatedTarget)) hideCard(); light(hovered(e.relatedTarget)); };\n // the viewer scrolling the tree takes it off \"now\"; the Overview's box follows\n const scroll = (e) => {\n const el = e.target;\n if (!el.matches || !el.matches(\"[data-tree]\")) return;\n if (set && (Math.abs(el.scrollLeft - set.left) > 2 || Math.abs(el.scrollTop - set.top) > 2)) auto = false;\n placeOverview();\n };\n\n return {\n html, size, keep, place, resized, click, over, out, scroll, pinnedAt, branchIdle,\n /** Back to \"now\" on the next draw (the panel moved or changed size). */\n toNow() { auto = true; },\n /** Ends a replay, playing or paused, and goes back to \"now\" (History was left). */\n stop() { if (play) { stopPlay(); auto = true; } },\n dispose() {\n stopPlay();\n tz.dispose();\n clearTimeout(cardTimer);\n card.removeEventListener(\"mouseenter\", onCardEnter);\n card.removeEventListener(\"mouseleave\", onCardLeave);\n card.remove();\n },\n };\n}\n","// The LayerFS view, framework-free: it draws a model view (W, built by\n// @dsh-layerfs/model) into one root element: the dsh client plugin's LayerFS\n// tab and its LayerFS page.\n// hist History (the project's tree) or Files of the open tab, on the left (history.js)\n// tabs main, then one chip per active Branch, over the right panel\n// work the main view (Branches, Sandboxes, Store, PROJECT terminal) or a\n// Branch view (FS terminal, Workspace panes)\n// overlay avatars, bubbles and flying blocks, placed relative to the root\n// With `project`, it draws one project instead, like an editor: Files' tree\n// at the picked point in a sidebar, and File, History and Storage as tabs\n// over the rest, on main, without terminals or avatars. A node picked in\n// History sets the point; Storage is the main tab's storage panel, from the\n// figures the host gives (engine.storage).\n// The host owns the clock: it sets W, then calls render(), and animate() for\n// the call that just happened.\nimport * as X from \"../../model/src/index.js\";\nimport { createFiles } from \"./files.js\";\nimport { figureStyle, headSvg, moodOf, nodeMood } from \"./cast.js\";\nimport { maidBubble, maidBurst } from \"./skins/maids/voice.js\";\nimport { createHistory } from \"./history.js\";\nimport { cmdTime, esc, fmtBytes, timingText } from \"./util.js\";\n\nconst { CAP, RECENT_S, bubbleOf } = X;\nconst html = (s) => { const t = document.createElement(\"template\"); t.innerHTML = s.trim(); return t.content.firstElementChild; };\n\n/**\n * @param {HTMLElement} root the view's root; it gets class `lfs`\n * @param {object} o\n * @param {object} o.avatars the cast: heroAvatars(urlOf) from skins/heroes/cast.js\n * @param {{ id: string, label: string, avatars: object }[]} [o.casts] the cast to draw\n * with, first; its id is the root's data-skin (skins/)\n * @param {object} o.files the files helpers (simulation_engine/files.js)\n * @param {Function} o.lineDiff line diff (simulation_engine/model.js)\n * @param {boolean} [o.live] the engine reports file history itself (engine.fileReport)\n * @param {string} [o.lead] the lead agent (ellen_joe)\n * @param {object} [o.layout] existing { tabs, work, follow } elements\n * @param {\"work\"|\"history\"} [o.pane] draw only this pane: the host shows Work and History as its own tabs\n * (the preview's); missing ones are created as the standalone layout. Without\n * a `hist` element, History is drawn as the work area's first column\n * @param {(follow: boolean) => void} [o.onFollow] the follow toggle changed\n * @param {boolean} [o.project] draw a project: Files' tree, then File, History and Storage tabs\n */\n// the LayerFS mark (the website's logo): the layer roof over three linked nodes\nconst LOGO = ``;\n\n// a project's tab icons: a file, History's branching line, the Store\nconst TABICON = (d) => ``;\nconst FILEICON = TABICON(\"M3.5 1.5h4.5l2.5 2.5v8.5h-7z M8 1.5V4h2.5\");\nconst HISTICON = TABICON(\"M4 2v10 M4 7c0-2 6-1 6-4 M10 3a1 1 0 1 0 0-.01 M4 12.5a1 1 0 1 0 0-.01\");\nconst SIDEICON = TABICON(\"M1.5 2.5h11v9h-11z M5 2.5v9\");\nconst DBICON = TABICON(\"M2.5 3.5c0-1.1 2-2 4.5-2s4.5.9 4.5 2-2 2-4.5 2-4.5-.9-4.5-2z M2.5 3.5v7c0 1.1 2 2 4.5 2s4.5-.9 4.5-2v-7 M2.5 7c0 1.1 2 2 4.5 2s4.5-.9 4.5-2\");\nconst BOXICON = TABICON(\"M2 4.5l5-2.5 5 2.5v5l-5 2.5-5-2.5z M2 4.5l5 2.5 5-2.5 M7 7v5\");\n\nexport function createView(root, o) {\n const FM = o.files, LEAD = o.lead || \"main\";\n let AV = o.casts ? o.casts[0].avatars : o.avatars;\n root.classList.add(\"lfs\");\n const PROJECT = !!o.project;\n let layout = o.layout;\n if (PROJECT) {\n root.classList.add(\"lfs-project\");\n root.innerHTML = \"\";\n layout = {};\n } else if (!layout) {\n root.classList.add(\"lfs-app\");\n // one row over both views: the LayerFS mark, the Work | History switch, the tabs, Follow\n root.innerHTML = `
${LOGO}
`;\n layout = { hist: root.querySelector(\".hist\"), cols: root.querySelector(\".lfs-cols\"), strip: root.querySelector(\".lfs-strip\"), swap: root.querySelector(\".lfs-swap\"), tabs: root.querySelector(\".tabs\"), work: root.querySelector(\".work\"), follow: root.querySelector(\"[data-follow]\") };\n }\n const overlay = html(`
`);\n root.append(overlay);\n\n // ---------------------------------------------------------------- cast\n // The website's heroes (skins/heroes), or another cast the viewer picked\n // (cast.js). The lead is the cast's main (the cloud). Every other agent\n // gets a hero picked from a hash of its name, so it is the same on every\n // rewind, reload and backend; no hero repeats until all are in use (then a\n // number tells them apart). An agent's colour (tags, History, cards) is its hero's.\n const AGENTS = {}, AV_TAKEN = new Map(), MOOD = {};\n let VARIANTS = Object.keys(AV.heroes).filter((c) => c !== AV.main);\n /** Draws every agent with another cast: each is picked again from it. */\n function useCast(avatars) {\n AV = avatars; VARIANTS = Object.keys(AV.heroes).filter((c) => c !== AV.main);\n for (const n of Object.keys(AGENTS)) delete AGENTS[n];\n AV_TAKEN.clear();\n }\n const nameHash = (s) => { let h = 2166136261; for (const c of s) h = Math.imul(h ^ c.charCodeAt(0), 16777619); return h >>> 0; };\n function avatar(n) {\n const a = (AGENTS[n] ||= {});\n if (a.av) return a;\n if (n === LEAD) a.av = AV.main;\n else {\n const k = nameHash(n) % VARIANTS.length;\n a.av = VARIANTS.map((_, i) => VARIANTS[(k + i) % VARIANTS.length]).find((x) => !AV_TAKEN.has(x)) || VARIANTS[k];\n }\n a.dup = (AV_TAKEN.get(a.av) || 0) + 1; AV_TAKEN.set(a.av, a.dup);\n a.color = AV.heroes[a.av].color;\n return a;\n }\n const colorOf = (n) => (n && AGENTS[n] ? avatar(n).color : undefined);\n // an agent's hero, small, where its name is shown; it bobs while the agent\n // works. A sheet cast shows the pose of its last call, asleep when it is idle.\n function mascot(n) {\n const a = avatar(n), working = v.acting.has(n), dup = a.dup > 1 ? `${a.dup}` : \"\";\n const mood = working ? MOOD[n] || \"work\" : v.W && idle(n) ? \"sleep\" : MOOD[n] || \"idle\";\n return `${dup}`;\n }\n const tag = (n) => `${mascot(n)}${esc(n)}`;\n const capAvatars = (names, k = 3) => names.slice(0, k).map((n) => mascot(n)).join(\"\") + (names.length > k ? `+${names.length - k}` : \"\");\n\n // ---------------------------------------------------------------- state\n const v = {\n W: null, FM, lineDiff: o.lineDiff, live: !!o.live, project: PROJECT, rightMode: {}, active: \"main\", follow: true, left: \"history\", orient: \"sideways\", note: \"\",\n acting: new Set(), lastLoc: null, colorOf, render: () => render(), ide: \"history\",\n };\n const files = createFiles(v);\n // History's dragged width and, when narrow, which window the switch shows:\n // per-viewer conveniences, kept in this browser when it allows.\n const PREF = \"lfs-layout\";\n const prefs = (() => { try { return JSON.parse(localStorage.getItem(PREF)) || {}; } catch { return {}; } })();\n const savePrefs = () => { try { localStorage.setItem(PREF, JSON.stringify(prefs)); } catch { /* not kept */ } };\n // a cast brings its skin: the root's data-skin picks its colours (style.js)\n if (o.casts) { useCast(o.casts[0].avatars); root.dataset.skin = o.casts[0].id; }\n delete prefs.cast; // retired: the Cast switch\n // History and the work window take turns: the Work | History switch at the\n // left of the tab row (prefs.pane) shows one of them, with the whole view to\n // itself; picking a tab from History goes back to Work. (The\n // preview's own layout keeps History inside the work area, both at once.)\n delete prefs.dock; delete prefs.histh; delete prefs.panes; delete prefs.histw; // retired: side by side, arrangements, History's width\n delete prefs.swap; // retired: History was the default; everyone starts on Work again\n // With `o.pane` the host shows Work and History as two tabs of its own (dsh):\n // this view draws that one pane, without the switch or the logo.\n if (o.pane) root.dataset.pane = o.pane; // History drops the Branch strip: a name tag in the tree opens its tab\n if (o.pane && layout.swap) { layout.strip.querySelector(\".lfs-logo\")?.remove(); layout.swap.remove(); layout.swap = null; }\n const shownPanes = () => o.pane || (!layout.cols ? \"both\" : prefs.pane === \"history\" ? \"history\" : \"work\"); // Work until the viewer picks History\n const pinned = {}, seenTabs = new Set([\"main\"]), OPEN_SDK = new Set();\n let sbLit = null, sbPulse = null, focusPane = null, sizeTries = 0;\n // Workspaces unmounted since an earlier render stay LEAVE_MS as a fading\n // trail, by the wall clock: the model drops them at once, and a Workspace a\n // script mounts and unmounts within a second still reads as one that was\n // there. One that mounted and left between two draws (a fast script, Max\n // speed) is found by its pane's `left` step, newer than the last draw's.\n const LEAVE_MS = 3600, leaving = new Map();\n let shownWs = {}, leaveTimer = null, leftSeen = null;\n // a step's entrance animations (a new line, a new pane, a Branch row's\n // flash) play on its first draw only: later redraws (a poll, a tree that\n // loaded, the trail ending) would restart them, a flicker\n let drawnSeq = null, fresh = -1;\n function trackLeaving(W) {\n const now = Date.now();\n for (const [k, w] of Object.entries(shownWs)) if (!W.ws[k] && !leaving.has(k)) leaving.set(k, { w, at: now });\n if (leftSeen !== null && leftSeen <= W.seq) for (const [k, p] of Object.entries(W.panes)) {\n if (p.left > leftSeen && !W.ws[k] && !leaving.has(k) && p.branch) leaving.set(k, { w: { id: k, agent: p.agent, branch: p.branch, lines: p.lines, born: p.born }, at: now });\n }\n leftSeen = W.seq;\n for (const [k, l] of leaving) if (W.ws[k] || now - l.at >= LEAVE_MS) leaving.delete(k);\n shownWs = W.ws;\n clearTimeout(leaveTimer);\n if (leaving.size) leaveTimer = setTimeout(render, Math.max(16, Math.min(...[...leaving.values()].map((l) => l.at + LEAVE_MS - now))));\n }\n const where = (n) => X.where(v.W, n), idle = (n) => X.idle(v.W, n);\n const lastHit = (loc) => (v.lastLoc === loc ? \" hot\" : \"\");\n const q = (sel) => root.querySelector(sel);\n\n // ---------------------------------------------------------------- tabs\n // The website's Branch tabs: a square in the Branch's colour, its name and a\n // chip (main: read-only; a Branch: its mounted Workspaces, a conflict or idle).\n function renderTabs() {\n const W = v.W, { tabs, hidden, retired } = X.visibleTabs(W, { pinned, active: v.active });\n const chip = (b) => {\n const B = W.branches[b], isNew = !seenTabs.has(b); seenTabs.add(b);\n const bad = X.conflicted(W, b), nWs = Object.values(W.ws).filter((w) => w.branch === b).length, dim = branchIdle(b);\n const meta = bad ? `conflict` : nWs ? `${nWs} ws` : dim ? `idle` : \"\";\n return ``;\n };\n layout.tabs.innerHTML = ``\n + tabs.map(chip).join(\"\") + (hidden.length || retired.length ? `` : \"\");\n // the strip is one line that scrolls sideways: keep the open tab in view\n const strip = layout.tabs, on = strip.querySelector('[aria-selected=\"true\"]'), more = strip.querySelector(\".more\");\n if (on && strip.scrollWidth > strip.clientWidth) {\n const end = strip.clientWidth - (more ? more.offsetWidth + 4 : 0);\n if (on.offsetLeft < strip.scrollLeft) strip.scrollLeft = on.offsetLeft;\n else if (on.offsetLeft + on.offsetWidth > strip.scrollLeft + end) strip.scrollLeft = on.offsetLeft + on.offsetWidth - end;\n }\n }\n\n // ---------------------------------------------------------------- terminals\n // A line's operation, for the maids' notebook hand (skins/maids/style.js): what\n // its pencil, highlighter, stamp, ruler, margin vine or bracket draws. A call\n // counts only when it did what it names; a failure is just written.\n const OPS = { \"project.init\": [\"init\", \"Initialized\"], \"branch.fork\": [\"fork\", \"Forked\"], \"main.fork\": [\"fork\", \"Forked\"], \"branch.merge\": [\"merge\", \"Merged\"],\n \"branch.publish\": [\"publish\", \"Added\"], \"sandbox.mount\": [\"mount\", \"Mounted\"], \"sandbox.commit\": [\"commit\", \"Committed\"], \"sandbox.unmount\": [\"unmount\", \"Unmounted\"] };\n function opOf(l) {\n const c = l.calls || [];\n for (const x of c) { const op = OPS[x.call]; if (op && x.code === op[1]) return op[0]; }\n return c.some((x) => x.call.startsWith(\"fs.\")) ? (l.dim ? \"read\" : \"write\") : \"\";\n }\n const outMatch = (l, re) => { for (const x of l.out || []) { const m = re.exec(x.t); if (m) return m[1]; } return null; };\n // `marks`: the spans this line belongs to ({ cls, first, last, fresh }), drawn in the margin:\n // a Commit's bracket, an fs script's group. Every part of the line carries `cls`; the\n // command line of the first adds cls0, the last part of the last cls1.\n function lineHtml(l, isNew, prefix, marks = []) {\n const c = l.calls || [], key = String(l.t) + (l.text || \"\"), op = opOf(l);\n const sdk = c.length ? `
${c.map((x) => `${esc(x.call)} → ${esc(x.code)}${esc(timingText(x.timing))}${x.script ? `
${esc(x.script)}
` : \"\"}`).join(\"\")}
` : \"\";\n const grp = l.group ? `⧉ ${esc(l.group)}` : \"\";\n const who = l.agent && !l.dim ? mascot(l.agent) : \"\";\n // one row: the command shortens with \"…\" (the whole of it is its hint) and its time stays in view;\n // a new command types itself out (--n characters over --d), then its output and time appear\n const n = l.text ? [...l.text].length : 0, type = isNew && n && !l.dim ? ` style=\"--n:${n};--d:${Math.min(700, Math.max(140, n * 14))}ms\"` : \"\";\n const sdkBtn = sdk.slice(0, sdk.indexOf(\"${esc(tag)}` : \"\";\n const last = (l.out || []).length, part = (k) => marks.map((m) => ` ${m.cls}${m.first && k === 0 ? ` ${m.cls}0` : \"\"}${m.last && k === last ? ` ${m.cls}1` : \"\"}${m.fresh ? ` ${m.cls}new` : \"\"}`).join(\"\");\n return `
${prefix}${grp}${l.text ? `${esc(l.text)}${type ? '' : \"\"}` : \"\"}${pin}${who}${cmdTime(c)}${sdkBtn}
${c.length ? sdkBox : \"\"}
`\n + (l.out || []).map((x, k) => `${esc(x.t)}`).join(\"\");\n }\n // The margin spans of a terminal's shown lines: in a Workspace, each Commit's\n // bracket around the calls it captured (from the first command after the last\n // Commit; lines not yet committed have none); in an fs terminal, each script's\n // group of calls, solid when it wrote, dotted when it only read.\n function spansOf(shown, kind) {\n const marks = shown.map(() => []);\n if (kind === \"ws\") {\n let start = 0;\n shown.forEach((l, i) => {\n if (opOf(l) !== \"commit\") return;\n let s = start; while (s < i && shown[s].dim) s++;\n for (let k = s; k <= i; k++) marks[k].push({ cls: \"cm\", first: k === s, last: k === i, fresh: l.t === fresh });\n start = i + 1;\n });\n } else if (kind === \"fs\") {\n for (let i = 0; i < shown.length;) {\n const g = shown[i].group; let j = i;\n while (g && j + 1 < shown.length && shown[j + 1].group === g) j++;\n const cls = shown.slice(i, j + 1).every((l) => l.dim) ? \"gr\" : \"gw\";\n if (j > i) for (let k = i; k <= j; k++) marks[k].push({ cls, first: k === i, last: k === j });\n i = j + 1;\n }\n }\n return marks;\n }\n\n // ---------------------------------------------------------------- History\n // The left panel, on every tab: the project's tree, or Files of the open\n // tab's head (history.js, which the project board draws alone).\n const hist = createHistory({\n root, v, files, avatar, mascot,\n head: (n) => headSvg(AV.heroes[avatar(n).av], esc(n)),\n visit: (by, id, node) => visitNode(by, id, nodeMood(node)),\n openAt: (lane, id, mode) => {\n // a project page has one tab and looks at any node there; a conversation opens the node's Branch\n const tab = PROJECT ? \"main\" : lane;\n if (!PROJECT) { v.active = lane; setFollow(false); }\n files.showAt(tab, id);\n files.filesOf(tab).mode = mode === \"blame\" ? \"blame\" : \"view\";\n v.ide = \"file\";\n render();\n },\n });\n const branchIdle = hist.branchIdle;\n function rosterMenu(anchor) {\n const W = v.W, label = (n) => { const l = where(n), A = W.agents[n];\n return l.kind === \"ws\" ? `${l.branch} · ${l.ws}` : l.kind === \"fs\" ? `${l.branch} · fs` : l.kind === \"hist\" ? \"project terminal\"\n : A.lastBranch ? `idle · last on ${A.lastBranch}` : \"idle\"; };\n const all = Object.keys(W.agents).sort((x, y) => idle(x) - idle(y));\n openMenu(anchor, \"roster-menu\", all.map((n) => { const l = where(n);\n return ``; }).join(\"\"), 300);\n }\n function openMenu(anchor, cls, inner, width) {\n closeMenu();\n const r = anchor.getBoundingClientRect(), base = root.getBoundingClientRect(), m = document.createElement(\"div\");\n m.className = \"menu \" + cls; m.innerHTML = inner;\n m.style.top = r.bottom - base.top + 4 + \"px\";\n m.style.left = Math.max(8, (width ? r.right - width : r.left) - base.left) + \"px\";\n root.appendChild(m);\n }\n // the tabs' \"+N\" (and the board's \"retired\"): hidden Branches, then retired ones\n function moreMenu(anchor) {\n const { hidden, retired } = X.visibleTabs(v.W, { pinned, active: v.active });\n openMenu(anchor, \"\", branchItems(hidden) + (retired.length ? `
retired · nobody on them for over ${X.RETIRE_S} s
${branchItems(retired)}` : \"\"));\n }\n const branchItems = (list) => list.map((b) => { const age = v.W.clock - v.W.branches[b].last;\n return ``; }).join(\"\");\n const closeMenu = () => { const m = root.querySelector(\".menu\"); if (m) m.remove(); };\n\n // The website's terminal window parts: a faint LayerFS stamp behind the\n // output, the fs icon, a tag, and a terminal (head, stamp, lines).\n const STAMP = (lines) => `LayerFS`\n + lines.map((l, k) => `${esc(l)}`).join(\"\") + ``;\n const FSICON = (c) => ``;\n const TAG = (tone, text) => `${esc(text)}`;\n const HINT = (text) => `i`;\n const BOXICON = ``;\n // \"sha256:091f…ee9d2\" → \"sha256:091f785b\", a tag stays as given\n const shortImage = (img) => (/^sha256:[0-9a-f]{12,}$/.test(img) ? img.slice(0, 15) : img.length > 28 ? img.slice(0, 27) + \"…\" : img);\n const term = (cls, attrs, head, stamp, body) => `
${head}
${STAMP(stamp)}
${body}
`;\n // What an agent is doing on a Branch, for its chip or card row: \"ws/2 exec\", \"fs\", \"idle\".\n function stateOf(n) {\n const l = where(n);\n return l.kind === \"ws\" ? `${l.ws.split(\":\")[1].replace(\"/workspaces/\", \"ws/\")}${idle(n) ? \"\" : \" exec\"}` : l.kind === \"fs\" ? \"fs\" : l.kind === \"hist\" ? \"project\" : \"idle\";\n }\n const busyOn = (n, b) => { const l = where(n); return l.branch === b && l.kind !== \"bench\"; };\n // agents a Branch shows: on it now, holding a Workspace there, or recently here\n const castOf = (b) => [...new Set([...X.agentsOn(v.W, b), ...Object.values(v.W.ws).filter((w) => w.branch === b).map((w) => w.agent), ...X.recentlyOn(v.W, b)])];\n\n // main is read-only: the Sandboxes and the Branches (each a card on the\n // sand floor, with its agents) on the left; the Store and the project\n // terminal on the right. A Branch nobody has been on for RETIRE_S retires\n // from the board (pinned ones stay); the tabs' \"+N\" menu still lists it.\n // Branches and their Sandboxes in one box. A Branch card lists the\n // Workspaces mounted on it, one row each, with the Sandbox it is mounted in\n // as a chip (hover: the Sandbox's record and every row in it), the agents\n // on it without a Workspace, and the processes running in its Workspaces.\n // Every Sandbox (open, or closed in the last RETIRE_S), mounted or not, is\n // listed in a card that opens over the header's count.\n const sinceClock = (t) => (t == null ? \"–\" : v.W.clock - t < 1 ? \"now\" : `${v.W.clock - t}s ago`);\n /** A Sandbox's whole record, for its chip's hover. */\n function sbHint(id) {\n const W = v.W, s = W.engine.s, sb = s.sandboxes[id], a = (W.sbAt || {})[id] || {}, who = (W.sbBy || {})[id] || {}, real = W.engine.m?.toReal?.get(id);\n const wss = sb.wsOrder.filter((p) => sb.workspaces[p].mounted).map((p) => ({ p, w: sb.workspaces[p], view: W.ws[`${id}:${p}`] }));\n const procs = sb.closed ? [] : sb.procOrder.map((p) => sb.processes[p]).filter((p) => p.status === \"running\");\n return [`Sandbox ${id}${real && real !== id ? ` (${real})` : \"\"}`, sb.closed ? `closed ${sinceClock(a.closed)}${who.closed ? ` by ${who.closed}` : \"\"}` : `open · used ${sinceClock(a.last)}`,\n who.made ? `made by ${who.made}${who.service ? \" (a service)\" : \"\"}${a.made != null ? ` ${sinceClock(a.made)}` : \"\"}` : null,\n a.image ? `image ${a.image}` : null,\n a.calls ? `${a.calls} call${a.calls === 1 ? \"\" : \"s\"} · ${a.execs || 0} command${a.execs === 1 ? \"\" : \"s\"}` : null,\n ...wss.map(({ p, w, view }) => `${p} → ${w.branch}${w.baseCommit ? ` @ ${w.baseCommit}` : \"\"}${view ? ` · ${view.agent}` : \"\"}${w.dirty ? ` · ${w.dirty} dirty` : \"\"}${w.stale ? \" · head moved since mount\" : \"\"}${w.pendingMerge ? \" · merge pending\" : \"\"}`),\n ...procs.map((p) => `● ${p.command} (${p.path})`)].filter(Boolean).join(\"\\n\");\n }\n /** A Sandbox as a chip; the project's prefix gives way first (\"layerfs-shop-1\", \"demo-ag…checkout\"). */\n function sbChip(id, extra, bare) {\n const s = v.W.engine.s, sb = s.sandboxes[id], project = s.project ? s.project.name : \"\";\n const pre = (project ? [`layerfs-${project}-`, `${project}-`] : []).find((p) => id.startsWith(p) && id.length > p.length) ?? \"\";\n return `${BOXICON}${pre ? `${esc(pre)}` : \"\"}${esc(id.slice(pre.length))}${extra || \"\"}`;\n }\n /** The header count's card: every Sandbox, open first, with its record. */\n function sbList() {\n const W = v.W, s = W.engine.s, at = W.sbAt || {}, by = W.sbBy || {};\n const ids = s.sandboxOrder.filter((id) => !s.sandboxes[id].closed || (at[id]?.closed != null && W.clock - at[id].closed <= X.RETIRE_S))\n .sort((x, y) => (s.sandboxes[x].closed - s.sandboxes[y].closed) || ((at[y]?.last ?? 0) - (at[x]?.last ?? 0)));\n if (!ids.length) return `
no Sandbox open · LayerFS starts one when a Workspace is mounted
`;\n const pl = (k, one) => `${k} ${one}${k === 1 ? \"\" : \"s\"}`;\n return ids.map((id) => {\n const sb = s.sandboxes[id], a = at[id] || {}, who = by[id] || {};\n const meta = [who.made ? `made by ${who.made}${who.service ? \" (a service)\" : \"\"}` : null, a.image ? shortImage(a.image) : null, a.calls ? pl(a.calls, \"call\") : null, a.execs ? pl(a.execs, \"cmd\") : null].filter(Boolean).join(\" · \");\n const wss = sb.wsOrder.filter((p) => sb.workspaces[p].mounted).map((p) => {\n const w = sb.workspaces[p], view = W.ws[`${id}:${p}`];\n return `${p.replace(\"/workspaces/\", \"ws/\")} → ${w.branch}${view ? ` · ${view.agent}` : \"\"}${w.dirty ? ` · ${w.dirty} dirty` : \"\"}${w.stale ? \" · stale\" : \"\"}`;\n });\n const procs = sb.closed ? [] : sb.procOrder.map((p) => sb.processes[p]).filter((p) => p.status === \"running\").map((p) => `● ${p.command}`);\n const lines = [...wss, ...procs].map((l) => `
${esc(l)}
`).join(\"\") || (sb.closed ? \"\" : `
no Workspace mounted
`);\n return `
${sbChip(id, \"\", true)}${esc(sb.closed ? `closed ${sinceClock(a.closed)}` : `used ${sinceClock(a.last)}`)}${meta ? `
${esc(meta)}
` : \"\"}${lines}
`;\n }).join(\"\");\n }\n function boardHtml() {\n const W = v.W, s = W.engine.s, placed = new Set();\n // every mounted Workspace in a Sandbox still open, by Branch\n const wsOn = {};\n for (const id of s.sandboxOrder) {\n const sb = s.sandboxes[id];\n if (sb.closed) continue;\n for (const p of sb.wsOrder) {\n const w = sb.workspaces[p];\n if (!w.mounted) continue;\n (wsOn[w.branch] ||= []).push({ id, p, w, key: `${id}:${p}`, view: W.ws[`${id}:${p}`], procs: sb.procOrder.map((k) => sb.processes[k]).filter((x) => x.status === \"running\" && x.path === p) });\n }\n }\n const live = W.order.filter((b) => pinned[b] || wsOn[b] || !X.retired(W, b)), nRetired = W.order.length - live.length;\n const cards = live.sort((x, y) => W.branches[y].last - W.branches[x].last).map((b) => {\n const B = W.branches[b], bad = X.conflicted(W, b), dim = branchIdle(b), cast = castOf(b), age = W.clock - B.last;\n const head = B.head.startsWith(\"fork:\") ? `from ${B.base}` : B.head;\n const note = bad ? \"conflict\" : B.published ? `${head} · ↑ ${W.mainHead}` : `${head} · ${age < 1 ? \"now\" : age + \"s\"}`;\n cast.forEach((n) => placed.add(n));\n const wss = wsOn[b] || [], withWs = new Set(wss.map((x) => x.view && x.view.agent).filter(Boolean));\n const wsRows = wss.map(({ id, p, w, key, view, procs }) => {\n const n = view && view.agent, on = n && busyOn(n, b), name = p.replace(\"/workspaces/\", \"ws/\");\n // the row already names the Workspace: its state alone (\"exec\"), or \"mounted\"\n const st = !n ? \"mounted\" : !on ? \"idle\" : stateOf(n).startsWith(name) ? stateOf(n).slice(name.length).trim() || \"mounted\" : stateOf(n);\n const tip = `${p} in ${id}: ${b} from ${w.baseCommit || w.baseLayer || \"main\"}${w.dirty ? ` · ${w.dirty} changed entries not yet committed` : \"\"}${view ? \" · click: its pane\" : \"\"}`;\n return `
${n ? mascot(n) : \"\"}${esc(n || name)}${sbChip(id, `${esc(name)}`)}`\n + `${w.dirty ? `${w.dirty} dirty` : \"\"}${w.stale ? `stale` : \"\"}${esc(st)}
`\n + procs.map((x) => `
${esc(x.command)}
`).join(\"\");\n }).join(\"\");\n const agentRows = cast.filter((n) => !withWs.has(n)).map((n) => {\n const on = busyOn(n, b);\n return `
${mascot(n)}${esc(n)}${esc(on ? stateOf(n) : \"idle\")}
`;\n }).join(\"\");\n return `
${esc(b)}${esc(note)}
${wsRows}${agentRows}
`;\n }).join(\"\");\n const pool = Object.keys(W.agents).filter((n) => !placed.has(n) && where(n).kind === \"bench\");\n const all = Object.keys(W.agents), nIdle = all.filter((n) => idle(n)).length;\n const nOpen = s.sandboxOrder.filter((id) => !s.sandboxes[id].closed).length, nWs = Object.keys(W.ws).length;\n const none = nRetired ? `every Branch has retired · nobody on one for over ${X.RETIRE_S} s` : \"no Branch yet · an agent forks one from main\";\n return `
branches${live.length}${HINT(`Branches and their Sandboxes. A Branch is a line of Commits forked from main; a Sandbox is a Linux container where an agent mounts Workspaces (each a full view of one Branch) and runs commands. A card shows the Branch's head (or the main Layer it was published to), each Workspace mounted on it with its Sandbox (hover the Sandbox for its record and every Workspace in it; click a row for its pane; hover the count for every Sandbox), and the agents on it now or in the last ${RECENT_S} s. A Branch nobody has been on for ${X.RETIRE_S} s retires from this board and the tabs (pin a tab to keep it); a closed Sandbox stays ${X.RETIRE_S} s.`)}${TAG(\"blue\", `${nWs} workspace${nWs === 1 ? \"\" : \"s\"} · ${nOpen} sandbox${nOpen === 1 ? \"\" : \"es\"}`)}
${sbList()}
${nRetired ? `` : \"\"}
\n
${cards ? `
${cards}
` : `
${none}
`}
\n ${pool.length ? `
unassigned${pool.map((n) => mascot(n)).join(\"\")}
` : \"\"}
`;\n }\n // Store totals as the operator's store.stats reports them, for the whole project.\n function storePanel() {\n const W = v.W, z = W.engine.storage(), s = W.engine.s;\n const x = (a, b) => (b > 0 ? `${(a / b).toFixed(a / b >= 10 ? 0 : 1)}×` : \"–\");\n const tile = (val, label, tone) => `
${label}${esc(val)}
`;\n const nC = Object.keys(s.commits).length, nL = Object.keys(s.layers).length;\n const pct = (a) => (z && z.store > 0 ? Math.max(0, Math.min(100, (a / z.store) * 100)).toFixed(1) : 0);\n const free = z ? Math.max(0, z.store - z.stored - z.metadata) : 0;\n if (z && z.counts) return `
${storeHead()}${storeBody(z, x)}
`;\n return `
${FSICON(\"var(--accent)\")}storage${TAG(\"coral\", \"main · read-only\")}
\n
${tile(z ? x(z.logical, z.payload) : \"–\", \"dedupe\", \"blue\")}${tile(z ? x(z.payload, z.stored) : \"–\", \"compression\", \"coral\")}${tile(z ? fmtBytes(z.stored) : \"–\", \"stored\", \"\")}${tile(z ? fmtBytes(z.store) : \"–\", \"file\", \"\")}
\n
\n
${z ? `logical ${fmtBytes(z.logical)} · canonical ${fmtBytes(z.payload)} · metadata ${fmtBytes(z.metadata)} · ` : `${v.live ? \"not reported yet\" : nC ? \"sizes not reported\" : \"empty\"} · `}${nC} commit${nC === 1 ? \"\" : \"s\"} · ${nL} layer${nL === 1 ? \"\" : \"s\"}${z && z.estimate ? \" · sim est.\" : \"\"}
`;\n }\n const storeHead = () => `
${FSICON(\"var(--accent)\")}storage${TAG(\"coral\", \"main · read-only\")}
`;\n // The live Store against one plain copy of main's head: the full-copy history,\n // what dedupe and compression leave, the metadata, then what each Commit added.\n function storeBody(z, x) {\n const n = z.counts, top = Math.max(1, ...[z.head, z.logical, z.payload, z.stored, z.metadata].filter((v) => v != null));\n const row = (label, bytes, cls) => `${label}${bytes == null ? \"–\" : fmtBytes(bytes)}`;\n const costs = z.perCommit || [], sum = costs.reduce((a, c) => a + c.bytes, 0), max = Math.max(1, ...costs.map((c) => c.bytes));\n const bars = costs.map((c) => ``).join(\"\");\n return `
\n
${fmtBytes(z.store)}on disk for ${fmtBytes(z.logical)} of history
\n
${n.commits} Commit${n.commits === 1 ? \"\" : \"s\"} · ${n.branches} Branch${n.branches === 1 ? \"\" : \"es\"} · ${n.layers} Layer${n.layers === 1 ? \"\" : \"s\"}, each a full snapshot
\n
${row(\"main, latest, raw\", z.head, \"hd\")}${row(\"every snapshot, raw\", z.logical, \"fc\")}${row(\"unique\", z.payload, \"dd\")}${row(\"unique, compressed\", z.stored, \"cp\")}${row(\"+ metadata\", z.metadata, \"md\")}
\n
${x(z.logical, z.payload)} dedupe · ${x(z.payload, z.stored)} compression${z.baseline ? ` · ${fmtBytes(z.baseline)} from Init${z.imported ? ` (${z.imported} file${z.imported === 1 ? \"\" : \"s\"} imported)` : \", the empty Store's baseline\"}` : \"\"}
\n ${costs.length ? `
per Commit${fmtBytes(sum / costs.length)} average${fmtBytes(max)} largest
\n
${bars}
\n
fs write Workspace commit · newest ${costs.length}, oldest left
` : \"\"}
`;\n }\n // A project page's Storage tab: the same figures as the storage panel, laid\n // out for a whole pane and without its terminal box: the size on disk and\n // its ratios across the top, then where the bytes go beside what each\n // Commit added (wrapping under it when narrow).\n function storePage() {\n const z = v.W.engine.storage(), n = z.counts || {};\n const x = (a, b) => (b > 0 ? `${(a / b).toFixed(a / b >= 10 ? 0 : 1)}×` : \"–\");\n const fact = (val, label, tip) => `
${esc(val)}${esc(label)}
`;\n const plural = (k, one, many) => `${k ?? 0} ${k === 1 ? one : many}`;\n const top = Math.max(1, ...[z.head, z.logical, z.payload, z.stored, z.metadata].filter((b) => b != null));\n const row = (label, bytes, cls, tip) => bytes == null ? \"\" : `${label}${fmtBytes(bytes)}`;\n const costs = z.perCommit || [], sum = costs.reduce((a, c) => a + c.bytes, 0), max = Math.max(1, ...costs.map((c) => c.bytes));\n const kind = (c) => (c.via === \"fs\" ? \"fs\" : c.via === \"exec\" ? \"ws\" : \"ot\");\n const bars = costs.map((c) => ``).join(\"\");\n return `
\n
\n
${fmtBytes(z.store)}on disk

${plural(n.commits, \"Commit\", \"Commits\")} · ${plural(n.branches, \"Branch\", \"Branches\")} · ${plural(n.layers, \"Layer\", \"Layers\")}, each a full snapshot

\n
${fact(fmtBytes(z.logical), \"history, raw\", \"every Commit's and Layer's files at full size\")}${fact(x(z.logical, z.payload), \"dedupe\", \"every snapshot, raw, over the unique content\")}${fact(x(z.payload, z.stored), \"compression\", \"unique content over its packed size\")}
\n
\n
\n

Where the bytes go

\n
${row(\"main, latest\", z.head, \"hd\", \"one plain copy of main's head\")}${row(\"every snapshot\", z.logical, \"fc\", \"the whole history as plain files\")}${row(\"unique\", z.payload, \"dd\", \"each distinct file and chunk once\")}${row(\"compressed\", z.stored, \"cp\", \"that content packed\")}${row(\"metadata\", z.metadata, \"md\", \"trees, Commits and the database around the packs\")}
\n ${z.baseline ? `

${fmtBytes(z.baseline)} of it came from Init${z.imported ? `, which imported ${z.imported} file${z.imported === 1 ? \"\" : \"s\"}` : \"\"}.

` : \"\"}\n
\n

What each Commit added

\n ${costs.length ? `
${fmtBytes(sum / costs.length)} average${fmtBytes(max)} largest${costs.length} newest
\n
${bars}
\n
fs writeWorkspace commitoldest on the left
` : `

No Commit yet.

`}\n
\n
\n
`;\n }\n // The main tab: three boxes, always in this order: storage, Branches with\n // their Sandboxes, the project log; storage over Branches on the left\n // and the log on the right, or one under another when narrow.\n function mainView() {\n const W = v.W, project = W.engine.s.project ? W.engine.s.project.name : \"no project yet\";\n const lines = W.hist.map((l) => lineHtml(l, l.t === fresh, '$ ')).join(\"\") || `no calls yet`;\n return storePanel() + boardHtml() + term(lastHit(\"hist\"), 'data-loc=\"hist\"', `${mascot(LEAD)}project${esc(project)}${TAG(\"blue\", \"project · branch\")}`, [\"project · branch\"], lines);\n }\n\n const KEEP = 12; // lines a Branch's fs and Workspace terminals show\n // A terminal keeps a fixed size: only its newest lines, starting at a command,\n // with a count of the calls before them.\n function tailHtml(all, prompt, kind) {\n let cut = Math.max(0, all.length - KEEP);\n while (cut > 0 && cut < all.length && all[cut].dim) cut++;\n const calls = all.slice(0, cut).filter((l) => !l.dim).length;\n return (calls ? `
… ${calls} earlier call${calls === 1 ? \"\" : \"s\"}
` : \"\")\n + ((shown) => { const marks = spansOf(shown, kind); return shown.map((l, i) => lineHtml(l, l.t === fresh, l.dim ? \"\" : prompt, marks[i])).join(\"\"); })(all.slice(cut));\n }\n function branchView(b) {\n const W = v.W, B = W.branches[b];\n const fsLines = tailHtml(W.fsLog[b] || [], '$ ', \"fs\") || `no fs calls on ${esc(b)} yet`;\n const headId = B.head.startsWith(\"fork:\") ? B.base : B.head;\n const gone = [...leaving.values()].filter((l) => l.w.branch === b).map((l) => ({ ...l.w, leftAt: l.at }));\n const wss = [...Object.values(W.ws).filter((w) => w.branch === b), ...gone].sort((x, y) => x.born - y.born);\n const nC = Object.values(W.nodes).filter((n) => n.branch === b && n.kind === \"commit\").length;\n const chips = castOf(b).map((n) => { const on = busyOn(n, b);\n return `
${mascot(n)}${esc(n)}${esc(on ? stateOf(n) : \"idle\")}
`; }).join(\"\");\n const fs = term(\" cap\" + lastHit(\"fs:\" + b), `data-loc=\"fs:${esc(b)}\"`, `${FSICON(`var(${B.color})`)}fs · ${esc(b)}persistent${TAG(\"grey\", \"direct to Store\")}`, [\"fs · \" + b, \"direct to Store\"], fsLines);\n const panes = wss.map((w) => { const [sb, path] = w.id.split(\":\"), ws = path.replace(\"/workspaces/\", \"ws/\");\n const cls = \" cap\" + (w.leftAt ? \" leaving\" : w.bad ? \" bad\" : lastHit(\"ws:\" + w.id)) + (!w.leftAt && w.born === fresh ? \" enter\" : \"\") + (focusPane === w.id ? \" focus\" : \"\");\n const pill = w.leftAt ? TAG(\"grey\", ws + \" · unmounted\") : w.bad ? TAG(\"coral\", ws + \" · conflict\") : TAG(\"blue\", ws + \" · mounted\");\n return term(cls, `data-loc=\"ws:${esc(w.id)}\" data-sb=\"${esc(sb)}\" data-sbhl=\"${esc(sb)}\"${w.leftAt ? ` style=\"animation-delay:${w.leftAt - Date.now()}ms;--ld:${w.leftAt - Date.now()}ms\"` : \"\"}`,\n `${mascot(w.agent)}${esc(w.agent)}${pill}`,\n [\"sandbox \" + sb, \"workspace \" + ws], tailHtml(w.lines, '$ ', \"ws\")); });\n // one notebook page: the fs log fills it; each Workspace splits it, two blocks across, three\n // as fs beside two stacked, then rows of two (CSS by count). With no Workspace, a faint line\n // at the foot of the page says where one will appear.\n const cells = [fs, ...panes];\n const hint = panes.length ? \"\" : `
no Workspace on ${esc(b)} · the page splits here on the next tool call
`;\n // one row: its agents' cards, then one sign with the Branch's base, head and Commits (the tab\n // names the Branch; the panes below show its Workspaces)\n const signs = `${esc(`${B.base} → ${headId} · ${nC} commit${nC === 1 ? \"\" : \"s\"}`)}`;\n return `
${chips || `nobody on ${esc(b)} in the last ${RECENT_S} s`}${signs}
\n
${cells.join(\"\")}${hint}
`;\n }\n\n // ---------------------------------------------------------------- History | Work switch\n // The hidden window gets a dot when it changes: a new History node, or a new\n // step for the work window; showing it clears it.\n const swapSeen = {};\n function renderSwap() {\n const shown = shownPanes(), mark = { history: Object.keys(v.W.nodes).length, work: v.W.seq };\n if (layout.strip) layout.strip.dataset.panes = shown;\n for (const k of [\"history\", \"work\"]) if (swapSeen[k] === undefined || k === shown) swapSeen[k] = mark[k];\n if (!layout.swap) return;\n layout.swap.innerHTML = [[\"work\", \"Work\"], [\"history\", \"History\"]].map(([k, l]) => {\n const sel = k === shown, dot = !sel && mark[k] > swapSeen[k];\n return ``;\n }).join(\"\");\n }\n\n // ---------------------------------------------------------------- Sandboxes\n // Hovering anything tagged with a Sandbox lights it up: its group on main,\n // and in a Branch tab every pane on that machine.\n function lightSandbox(id) {\n if (id === sbLit) return;\n sbLit = id;\n for (const el of root.querySelectorAll(\".sblit\")) el.classList.remove(\"sblit\");\n if (id) for (const el of root.querySelectorAll(`.crow[data-sbhl=\"${CSS.escape(id)}\"], .term[data-sb=\"${CSS.escape(id)}\"], .sbc[data-sbid=\"${CSS.escape(id)}\"]`)) el.classList.add(\"sblit\");\n }\n\n // ---------------------------------------------------------------- render\n // the tree is drawn for its box: when the box turned out another size, draw it again (once)\n function redrawOnce(again) {\n if (again && sizeTries++ < 1) requestAnimationFrame(render);\n else sizeTries = 0;\n }\n // History, like an editor, on a project page and in a conversation alike:\n // Files' tree at a point in a sidebar (the open tab's Branch at its latest\n // head, or a node picked in History), then File, History and Storage tabs.\n // It lives in `host` (a project page's root, else History's panel) and keeps\n // its parts across draws, so the tree and the file keep their scroll.\n function drawIde(host, W) {\n let ide = host.querySelector(\":scope > .lfs-ide\");\n if (!ide) {\n // added before what the host already holds: on a project page the host is the root,\n // whose overlay (the maids' visits) and History's hover card must stay\n ide = html(`
`);\n host.prepend(ide);\n }\n const side = ide.querySelector(\".ide-side\"), tabsEl = ide.querySelector(\".ide-tabs\"), pane = ide.querySelector(\".ide-pane\");\n const show = v.ide, tab = v.active, p = files.filesOf(tab);\n const keep = (el, sel) => { const x = el.querySelector(sel); return x ? x.scrollTop : 0; };\n const restore = (el, sel, top) => { const x = el.querySelector(sel); if (x) x.scrollTop = top; };\n const sideTop = keep(side, \".ftree\");\n side.innerHTML = files.sideHtml(tab);\n restore(side, \".ftree\", sideTop);\n const name = p.path ? p.path.slice(p.path.lastIndexOf(\"/\") + 1) : \"File\";\n // Sandboxes: the page's own panel (W.engine.sandboxes), when it gives one, with its level as a dot\n const sbx = W.engine.sandboxes?.();\n const tabs = [[\"file\", name, FILEICON], [\"history\", \"History\", HISTICON], [\"storage\", \"Storage\", DBICON], ...(sbx ? [[\"sandboxes\", \"Sandboxes\", BOXICON]] : [])];\n // the sidebar folds away (a per-viewer preference) from a toggle before the tabs\n const hide = !!prefs.sideHidden;\n ide.classList.toggle(\"side-hidden\", hide);\n const toggle = ``;\n tabsEl.innerHTML = toggle + tabs.map(([k, l, i]) => ``).join(\"\");\n // History plays only while it is shown: another tab ends the replay, and History comes back at now\n v.rightMode[tab] = show === \"history\" ? \"history\" : \"files\";\n if (show !== \"history\") hist.stop();\n if (show === \"history\") {\n const at = hist.keep(), size = hist.size(pane);\n pane.innerHTML = hist.html(size);\n redrawOnce(hist.place(at, size));\n } else if (show === \"file\") {\n const top = keep(pane, \".fview\");\n pane.innerHTML = files.pageHtml(tab);\n restore(pane, \".fview\", top);\n } else if (show === \"sandboxes\" && sbx) {\n // the page's own element, kept across draws so what it draws in it stays\n if (pane.firstElementChild !== sbx.el) pane.replaceChildren(sbx.el);\n } else {\n // the storage panel's figures (engine.storage), as a page\n const z = W.engine.storage();\n pane.innerHTML = `
${z ? storePage() : `
${v.live || W.engine.replay ? \"Reading the Store…\" : \"Nothing stored yet.\"}
`}
`;\n }\n }\n function render() {\n const W = v.W;\n if (!W) return;\n if (PROJECT) { drawIde(root, W); noticeNodes(W); return; }\n trackLeaving(W);\n fresh = W.seq === drawnSeq ? -1 : W.seq;\n drawnSeq = W.seq;\n const work = layout.work;\n const keepScroll = [\".ftree\", \".fview\", \".floor\"].map((sel) => { const el = work.querySelector(sel); return [sel, el ? el.scrollTop : 0]; });\n if (v.active !== \"main\" && !W.branches[v.active]) v.active = \"main\";\n renderTabs();\n if (layout.cols) { layout.cols.dataset.panes = shownPanes(); renderSwap(); } // before measuring: they decide History's box\n const showHist = shownPanes() !== \"work\", showWork = shownPanes() !== \"history\";\n if (layout.hist) { if (showHist) drawIde(layout.hist, W); else layout.hist.innerHTML = \"\"; }\n // the preview's layout keeps History inside the work area\n const inWork = !layout.hist && showHist ? `
` : \"\";\n work.className = \"work \" + (v.active === \"main\" ? \"mainview\" : \"branchview\") + (layout.hist ? \"\" : showHist && showWork ? \" withhist\" : \"\");\n work.innerHTML = inWork + (showWork || layout.hist ? (v.active === \"main\" ? mainView() : branchView(v.active)) : \"\");\n if (inWork) drawIde(work.querySelector(\":scope > .panel.hist\"), W);\n noticeNodes(W);\n // terminals follow their newest line; the Branch cards keep their place\n for (const el of work.querySelectorAll(\".tbody\")) el.scrollTop = el.scrollHeight;\n for (const [sel, top] of keepScroll) { const el = work.querySelector(sel); if (el) el.scrollTop = top; }\n if (sbLit) { const id = sbLit; sbLit = null; lightSandbox(id); } // the redraw dropped the highlight\n if (sbPulse) {\n // its Branch cards, or its chip in the foot when nothing is mounted\n const chips = [...work.querySelectorAll(`.sbc[data-sbid=\"${CSS.escape(sbPulse)}\"]`)];\n sbPulse = null;\n for (const el of new Set(chips.map((c) => c.closest(\".bcard\") || c))) { el.classList.add(\"pulse\"); el.scrollIntoView({ block: \"nearest\" }); }\n }\n }\n\n // ---------------------------------------------------------------- the call that just happened\n // Heroes do not walk from window to window: each stands still in its card\n // rows, chips, lines and terminal heads, and bobs while it works, as on the\n // website. A call shows as a bubble on the window it ran in and, when it\n // made a node, a block flying from there into the tree.\n function hostOf(n) {\n const l = where(n), key = X.locKey(l);\n return (key && q(`[data-loc=\"${CSS.escape(key)}\"]`)) || (l && l.branch && layout.tabs ? layout.tabs.querySelector(`[data-tab=\"${CSS.escape(l.branch)}\"]`) : null);\n }\n function bubbleOn(host, text, cls) {\n const r = host.getBoundingClientRect(), base = overlay.getBoundingClientRect(), b = document.createElement(\"div\");\n b.className = \"bubble \" + (cls || \"\"); b.textContent = text;\n b.style.left = Math.min(r.right - base.left - 70, r.left - base.left + r.width / 2) + \"px\"; b.style.top = r.top - base.top + Math.min(40, r.height / 2) + \"px\";\n overlay.appendChild(b); setTimeout(() => b.remove(), 2000);\n }\n function flyBlock(host, nodeId, color) {\n const target = q(`[data-node=\"${CSS.escape(nodeId)}\"]`);\n if (!target) return;\n const a = host.getBoundingClientRect(), z = target.getBoundingClientRect(), base = overlay.getBoundingClientRect(), b = document.createElement(\"div\");\n const x0 = a.left - base.left + 16, y0 = a.top - base.top + 16;\n b.className = \"block\"; b.style.background = color; b.style.left = x0 + \"px\"; b.style.top = y0 + \"px\";\n overlay.appendChild(b);\n requestAnimationFrame(() => requestAnimationFrame(() => { b.style.transform = `translate(${z.left - base.left + z.width / 2 - x0 - 6}px,${z.top - base.top + z.height / 2 - y0 - 6}px) scale(.7)`; b.style.opacity = \"0\"; }));\n setTimeout(() => b.remove(), 900);\n }\n // A node that appears or is updated in History gets a visit: the figure of\n // the agent that made it pops up on it, in the pose of its mood, then goes.\n // A redraw that brings more than a few new nodes at once (a seek, another\n // project) is a jump, not an update, and brings no one.\n let shownNodes = null, freshNodes = [];\n function noticeNodes(W) {\n const ids = Object.keys(W.nodes), before = shownNodes;\n shownNodes = new Set(ids);\n if (!before) return;\n const added = ids.filter((id) => !before.has(id) && W.nodes[id].by);\n if (!added.length || added.length > 3) return;\n freshNodes = added;\n requestAnimationFrame(() => { for (const id of freshNodes) visitNode(W.nodes[id].by, id, nodeMood(W.nodes[id])); freshNodes = []; });\n }\n function visitNode(agent, id, mood) {\n const hero = agent && AV.heroes[avatar(agent).av], sel = `svg.tree [data-node=\"${CSS.escape(id)}\"]`;\n if (!hero || !q(sel)) return;\n const el = document.createElement(\"span\");\n el.className = \"visit\";\n el.innerHTML = ``;\n el.title = agent;\n // it stands on its node while the tree grows, scrolls or zooms under it: each frame finds the node again\n // (a redraw replaces it) and hides the figure while the node is out of its panel\n const end = performance.now() + 2000;\n const follow = () => {\n const target = q(sel);\n if (!target || performance.now() > end || (el.dataset.on && !el.isConnected)) { el.remove(); return; }\n const r = target.getBoundingClientRect(), box = (target.closest(\".panel\") || root).getBoundingClientRect(), base = overlay.getBoundingClientRect();\n const x = r.left + r.width / 2, y = r.top + r.height / 2;\n el.style.visibility = !r.width || x < box.left || x > box.right || y < box.top + 24 || y > box.bottom ? \"hidden\" : \"\";\n el.style.left = x - base.left + \"px\"; el.style.top = r.top - base.top + \"px\";\n if (!el.dataset.on) { el.dataset.on = \"1\"; overlay.appendChild(el); }\n requestAnimationFrame(follow);\n };\n follow();\n }\n\n /** The call that just happened, by `agent`: its bubble and, when it made a node, a block flying there. */\n function animate(agent) {\n const W = v.W;\n if (!W || !W.last || agent === \"dsh\" || PROJECT) return;\n const mood = MOOD[agent] = moodOf(W.last), maid = root.dataset.skin === \"maids\";\n const host = hostOf(agent), id = W.last.node;\n // the call's node, new or updated, gets its maker's visit in the call's mood, when the block lands\n if (id && W.nodes[id]) {\n freshNodes = freshNodes.filter((f) => f !== id);\n const by = W.attrib[id] || agent;\n setTimeout(() => visitNode(by, id, by === agent ? mood : nodeMood(W.nodes[id])), host ? 500 : 0);\n }\n if (!host) return;\n const b = maid ? maidBubble(bubbleOf(W.last), mood) : bubbleOf(W.last);\n if (b) bubbleOn(host, b[0], b[1]);\n if (id && W.nodes[id]) flyBlock(host, id, getComputedStyle(root).getPropertyValue(W.nodes[id].branch ? W.branches[W.nodes[id].branch].color : \"--trunk\").trim());\n // the maids: sparkles or hearts where the node landed (after the block's flight), a sweat drop on the window that failed\n if (maid) {\n const at = (mood === \"oops\" || mood === \"fail\") ? host : id && q(`[data-node=\"${CSS.escape(id)}\"]`);\n if (at) setTimeout(() => { const r = at.getBoundingClientRect(), base = overlay.getBoundingClientRect(); maidBurst(overlay, r.left - base.left + r.width / 2, r.top - base.top + (at === host ? 16 : r.height / 2), mood); }, at === host ? 0 : 600);\n }\n }\n\n // ---------------------------------------------------------------- events\n const setFollow = (on) => {\n v.follow = on;\n if (layout.follow) { layout.follow.classList.toggle(\"on\", on); layout.follow.setAttribute(\"aria-pressed\", String(on)); }\n if (o.onFollow) o.onFollow(on);\n };\n const openTab = (tab) => {\n if (prefs.pane === \"history\") { prefs.pane = \"work\"; savePrefs(); } // a tab is a place in Work\n v.active = tab; setFollow(false); closeMenu(); render();\n };\n const onTabs = (e) => {\n closeMenu();\n const pin = e.target.closest(\"[data-pin]\");\n if (pin) { const b = pin.dataset.pin; pinned[b] = !pinned[b]; e.stopPropagation(); render(); return; }\n const more = e.target.closest(\"[data-more]\");\n if (more) { moreMenu(more); e.stopPropagation(); return; }\n const t = e.target.closest(\"[data-tab]\");\n if (t) openTab(t.dataset.tab);\n };\n // Sandboxes: open a Workspace's Branch at its pane, or show a pane's Sandbox on main.\n const onSandbox = (e) => {\n const t = e.target.closest && e.target.closest(\"[data-dws], [data-sbchip]\");\n if (!t) return false;\n if (t.dataset.sbchip) { v.active = \"main\"; setFollow(false); sbPulse = t.dataset.sbchip; render(); return true; }\n const k = t.dataset.dws, w = v.W.ws[k] || null;\n if (!w) return true;\n v.active = w.branch; setFollow(false); focusPane = k; render(); focusPane = null;\n q(`[data-loc=\"ws:${CSS.escape(k)}\"]`)?.scrollIntoView({ block: \"nearest\" });\n return true;\n };\n const onClick = (e) => {\n if (!v.W) return;\n {\n const t = e.target.closest(\".ide-tabs [data-ide]\");\n if (e.target.closest(\".ide-tabs [data-ideside]\")) { prefs.sideHidden = !prefs.sideHidden; savePrefs(); hist.toNow(); render(); return; }\n if (t) { if (t.dataset.ide === \"history\" && v.ide !== \"history\") hist.toNow(); v.ide = t.dataset.ide; closeMenu(); render(); return; }\n if (e.target.closest(\"[data-ftree][data-ftype='file'], [data-fopen]\")) v.ide = \"file\";\n // a node picked in History holds the files there: following the acting agent would move them\n if (!PROJECT && e.target.closest(\"svg.tree [data-node], [data-fblame]\")) setFollow(false);\n }\n if (hist.click(e)) return;\n if (layout.tabs && layout.tabs.contains(e.target)) return onTabs(e);\n if (layout.follow && layout.follow.contains(e.target)) { setFollow(!v.follow); if (v.follow && o.onFollowOn) o.onFollowOn(); return; }\n if (onSandbox(e)) return;\n const sd = e.target.closest(\"[data-sdk]\");\n if (sd) { const k = sd.dataset.sdk; OPEN_SDK.has(k) ? OPEN_SDK.delete(k) : OPEN_SDK.add(k); render(); return; }\n if (files.click(e)) return;\n const ro = e.target.closest(\"[data-roster]\");\n if (ro) { rosterMenu(ro); return; }\n const mo = e.target.closest(\"[data-more]\");\n if (mo) { moreMenu(mo); return; }\n const sw = e.target.closest(\"button[data-swap]\");\n if (sw) {\n prefs.pane = sw.dataset.swap;\n savePrefs(); hist.toNow(); render(); return;\n }\n const op = e.target.closest(\"[data-open]\");\n if (op) openTab(op.dataset.open);\n else if (!e.target.closest(\"[data-more]\") && !e.target.closest(\".menu\")) closeMenu();\n };\n // the Sandbox card opens toward the side with room: rightward when the count sits near the box's left edge\n const aimPop = (e) => {\n const sum = e.target.closest && e.target.closest(\".sbsum\");\n if (sum) sum.classList.toggle(\"lefty\", sum.getBoundingClientRect().right < 340);\n };\n const onOver = (e) => {\n aimPop(e);\n const t = e.target.closest && e.target.closest(\"[data-sbhl]\");\n lightSandbox(t ? t.dataset.sbhl : null);\n hist.over(e);\n };\n // picking a point or a compare in Files pins the view: following the acting agent would switch the tab away\n const onChange = (e) => { if (v.follow && e.target.closest && e.target.closest(\"[data-fat], [data-fbasesel]\")) setFollow(false); files.change(e); };\n // the tree is drawn for its box: a resized box redraws it\n const place = () => {\n if (hist.resized()) render();\n };\n root.addEventListener(\"click\", onClick);\n root.addEventListener(\"mouseover\", onOver);\n root.addEventListener(\"focusin\", aimPop);\n root.addEventListener(\"mouseout\", hist.out);\n root.addEventListener(\"change\", onChange);\n addEventListener(\"resize\", place);\n // narrow layouts scroll a column: avatars stay with their hosts\n root.addEventListener(\"scroll\", place, { capture: true, passive: true });\n root.addEventListener(\"scroll\", hist.scroll, { capture: true, passive: true });\n const resize = typeof ResizeObserver === \"function\" ? new ResizeObserver(place) : null;\n if (resize) resize.observe(root);\n\n return {\n get W() { return v.W; },\n set W(W) { v.W = W; },\n get active() { return v.active; },\n set active(tab) { v.active = tab; },\n get follow() { return v.follow; },\n set follow(on) { setFollow(on); },\n /** Locations to highlight and agents acting in the current step. */\n set lastLoc(loc) { v.lastLoc = loc; },\n set acting(names) { v.acting = new Set(names); },\n /** Where the view's data comes from: shown in the preview's own note element, when it has one. */\n set note(text) {\n v.note = text || \"\";\n if (layout.note) layout.note.textContent = v.note;\n },\n /** Shows History or Files in the left panel for a tab. */\n setRight(tab, mode) { v.rightMode[tab] = mode; v.ide = mode === \"files\" ? \"file\" : mode === \"history\" ? \"history\" : v.ide; },\n /** A project's tab: \"file\", \"history\", \"storage\" or \"sandboxes\" (when the page gives engine.sandboxes). */\n get ide() { return v.ide; },\n set ide(tab) { v.ide = tab; render(); },\n avatar, render, animate, files,\n dispose() {\n clearTimeout(leaveTimer);\n hist.dispose();\n root.removeEventListener(\"click\", onClick);\n root.removeEventListener(\"mouseover\", onOver);\n root.removeEventListener(\"mouseout\", hist.out);\n root.removeEventListener(\"change\", onChange);\n removeEventListener(\"resize\", place);\n root.removeEventListener(\"scroll\", place, { capture: true });\n root.removeEventListener(\"scroll\", hist.scroll, { capture: true });\n if (resize) resize.disconnect();\n overlay.remove();\n },\n };\n}\n","// The Files pane's reads on demand, for an engine whose trees are not in\n// memory (a dsh project): a folder's pages, a file's windows, the paths two\n// saved ids differ in and one file's diff, each one request (the Host's Files\n// reads). Answers come back synchronously when kept: `undefined` value means\n// loading, and `onchange` runs when it arrives. Saved ids never change, so an\n// answer is kept until KEEP newer ones push it out. A refusal is kept too and\n// shown: it is not asked again by itself.\n\nconst KEEP = 1000;\n\n/**\n * @param {(kind: string, query: object) => Promise} fetch one Host read\n * @param {() => void} onchange\n */\nexport function createFilesSource(fetch, onchange) {\n const kept = new Map(), wanted = new Map();\n const keyOf = (kind, q) => `${kind}\\n${JSON.stringify(q)}`;\n /** { value, error } of one read, started on first use */\n function one(kind, q) {\n const key = keyOf(kind, q);\n let e = kept.get(key);\n if (e) { kept.delete(key); kept.set(key, e); return e; }\n e = { value: undefined, error: null };\n kept.set(key, e);\n fetch(kind, q).then((value) => { e.value = value; }, (error) => { e.error = error; }).then(() => onchange());\n while (kept.size > KEEP) kept.delete(kept.keys().next().value);\n return e;\n }\n /** The pages asked for so far, joined: { items, more, loading, error } */\n function paged(kind, q) {\n const pages = wanted.get(keyOf(kind, q)) ?? 1, items = [];\n let position = 0;\n for (let n = 0; n < pages; n++) {\n const e = one(kind, { ...q, position });\n if (e.error) return { items, more: false, loading: false, error: e.error };\n if (!e.value) return { items, more: false, loading: true, error: null };\n items.push(...e.value.items);\n if (e.value.next == null) return { items, more: false, loading: false, error: null };\n position = e.value.next;\n }\n return { items, more: true, loading: false, error: null };\n }\n const ask = (kind, q) => { const key = keyOf(kind, q); wanted.set(key, (wanted.get(key) ?? 1) + 1); };\n return {\n /** A folder's entries: [{ name, path, type }] in the SDK's order. */\n list: (ref, dir) => paged(\"list\", { ref, dir }),\n moreList: (ref, dir) => ask(\"list\", { ref, dir }),\n /** One window from `line`: { text, startLine, nextLine, size, lineTruncated } or { binary, size }. */\n read: (ref, path, line) => one(\"read\", { ref, path, line }),\n /** Which Commit wrote each line from `line`: { lines: [{ n, text, commit, message }], versions, nextLine }. */\n blame: (ref, path, line) => one(\"blame\", { ref, path, line }),\n /** The paths that differ: [{ path, kind, type }]. */\n changes: (from, to) => paged(\"changes\", { from, to }),\n moreChanges: (from, to) => ask(\"changes\", { from, to }),\n /** One file's line diff: { kind, hunks, hunksOmitted }. */\n diff: (from, to, path) => one(\"diff\", { from, to, path }),\n };\n}\n","// The heroes skin's look: the LayerFS website's tokens (layerfs-website\n// global.css), light only. It is the default: the view's shared rules\n// (../../style.js) draw with these variables, and another skin redefines\n// them under its data-skin (../maids/style.js).\n\nexport const HEROES_CSS = `\n.lfs {\n /* the LayerFS website's tokens (layerfs-website global.css), light only */\n --font: \"Instrument Sans\", -apple-system, BlinkMacSystemFont, \"Helvetica Neue\", Arial, sans-serif;\n --mono: \"IBM Plex Mono\", ui-monospace, \"SF Mono\", Menlo, Monaco, monospace;\n --paper: #FBF9F5; --dot: #EEE9DF; --line: #E2DED6; --line2: #ECE9E2; --tab: #F4F2EC; --lane: #F3F6FC;\n --trunk: #5C9A3C; --green-dark: #3F7524; --twig: #B9B2A6; --coral: #E07A5A; --coral-text: #B8502C; --coral-pale: #FBE9E2;\n --window: #FBF9F5; --chrome: #F4F2EC; --card: #FFFFFF; --well: #F0EEE8; --grid-bg: #FBF9F5;\n --text: #1E2533; --text-2: #5B6372; --text-3: #8A8780; --sep: #ECE9E2; --sep-strong: #E2DED6;\n --accent: #2F5BB5; --accent-bg: #E6EEFA; --green: #3E9B74; --orange: #D29A2E; --red: #C8452F; --purple: #8A6BC8;\n --orange-bg: rgba(210,154,46,.14); --purple-bg: rgba(138,107,200,.13); --red-bg: #FBE9E2; --green-bg: rgba(62,155,116,.13);\n --term: #FDFCFA; --term-head: #F6F4EF; --term-border: #E2DED6; --term-text: #1E2533; --term-dim: #8A8780;\n --t-blue: #2F5BB5; --t-green: #2E7D5B; --t-orange: #93650F; --t-red: #B8502C; --t-purple: #6A4DA8; --t-cyan: #1F6B78;\n --t-add-bg: rgba(46,125,91,.09); --t-del-bg: rgba(184,80,44,.09);\n /* Branch colours: the website demo's */\n --b0: #E07A5A; --b1: #3E9B74; --b2: #8A6BC8; --b3: #D29A2E; --b4: #2B8A9A; --b5: #C8557A;\n color-scheme: light;\n}\n`;\n","// The sharky maid skin's look (the Cast button; its cast is ./cast.js, its\n// voice ./voice.js). Colours: dsh's white and blue for the paper and accent,\n// the dress's navy for text, a blue main bough, aqua, lavender, gold, mint and\n// one ribbon pink for the Branches. Shapes: a rounded face, pill tabs and\n// chips, round cards with lace and a bow, notebook terminals, a pastel bubble\n// pattern. Everything is under data-skin=\"maids\" and overrides the heroes'\n// look (../heroes/style.js); LayerFS words and numbers never change.\n\nconst M = '.lfs[data-skin=\"maids\"]';\nconst svg = (body) => `url(\"data:image/svg+xml,${encodeURIComponent(`${body}`)}\")`;\n// the notebook's tools: a pencil (tip at the bottom left), an eraser and a paperclip\nconst PENCIL = svg('');\nconst ERASER = svg('');\nconst CLIP = svg('');\n// the floor: bubbles and small hearts, pale, on cool white\nconst PATTERN = `url(\"data:image/svg+xml,${encodeURIComponent('')}\")`;\n\nexport const MAID_CSS = `\n${M} {\n --paper: #F6F9FF; --dot: #DCE6F7; --line: #D3DEF1; --line2: #E3EAF7; --tab: #EDF2FC; --lane: #EAF0FC;\n --trunk: #3456C9; --green-dark: #2A47A8; --twig: #A9B6CF; --coral: #E8739A; --coral-text: #B8406A; --coral-pale: #FDEEF3;\n --window: #F6F9FF; --chrome: #EDF2FC; --card: #FFFFFF; --well: #EEF3FC; --grid-bg: #F6F9FF;\n --text: #1A2340; --text-2: #4E5A78; --text-3: #8B95AE; --sep: #E3EAF7; --sep-strong: #D3DEF1;\n --accent: #4D6BFE; --accent-bg: #EBEFFF; --green: #36AE8C; --orange: #E0A63A; --red: #D2455E; --purple: #7B5FE0;\n --orange-bg: rgba(224,166,58,.14); --purple-bg: rgba(123,95,224,.12); --red-bg: #FDEEF3; --green-bg: rgba(54,174,140,.13);\n --term: #FFFFFF; --term-head: #F3F7FE; --term-border: #D3DEF1; --term-text: #1A2340; --term-dim: #8B95AE;\n --t-blue: #3A55D6; --t-green: #23856A; --t-orange: #93650F; --t-red: #B8406A; --t-purple: #5D45B8; --t-cyan: #1D7896;\n --b0: #4D6BFE; --b1: #2AA4C8; --b2: #7B5FE0; --b3: #E0A63A; --b4: #36AE8C; --b5: #E8739A;\n --lace: #C9D6EE; --ribbon: #F08BB0;\n --font: ui-rounded, \"Hiragino Maru Gothic ProN\", \"M PLUS Rounded 1c\", \"Nunito\", \"Arial Rounded MT Bold\", -apple-system, sans-serif;\n font-family: var(--font);\n}\n/* the website's beige, where it is not a variable */\n${M} .tab .tchip, ${M} .wtag.grey, ${M} .crow.off .st, ${M} .sbws .dt { background: var(--well); color: var(--text-2); }\n${M} .bhead, ${M} .bcard .bhd .note, ${M} .tile span { color: var(--text-2); }\n${M} .floor .none { color: var(--text-3); }\n${M} .pool { border-top-color: var(--line); background: var(--well); color: var(--text-2); }\n${M} .sbcards { background: transparent; }\n${M} .floor { background: transparent; }\n${M} .frow:hover, ${M} .cl:hover { background: var(--well); }\n${M} .frow .ind { background: repeating-linear-gradient(90deg, transparent 0 6px, var(--dot) 6px 7px, transparent 7px 14px); }\n${M} svg.tree .grid { stroke: var(--line2); }\n${M} svg.tree .ground { fill: var(--lane); }\n${M} svg.tree .groundline { stroke: var(--line); }\n${M} .ovstrip { background: var(--well); border-radius: 8px; }\n${M} .sv2 .hd { background: var(--text-2); } ${M} .sv2 .fc { background: #C9D5EC; } ${M} .sv2 .cp { background: var(--b1); } ${M} .sv2 .md { background: var(--twig); }\n${M} .sv2 .fs { background: var(--b2); } ${M} .sv2 .ws { background: var(--b5); } ${M} .sv2 .ot { background: var(--twig); }\n\n/* the floor */\n${M} .lfs-cols { background: var(--paper) ${PATTERN} 0 0 / 64px 64px; }\n\n/* pills: tabs, chips, tags, the switches */\n${M} .tab { border: 1.5px solid var(--line); border-radius: 999px; margin: 0 0 6px; min-height: 32px; padding: 4px 12px; background: var(--card); font-family: var(--font); }\n${M} .tab[aria-selected=\"true\"] { background: var(--accent); border-color: var(--accent); color: #fff; }\n${M} .tab[aria-selected=\"true\"] .tchip { background: rgba(255,255,255,.22); color: #fff; }\n${M} .tab .sq { border-radius: 50%; }\n${M} .tab .tchip, ${M} .wtag, ${M} .sign, ${M} .sbws .dt, ${M} .crow .st { border-radius: 999px; }\n${M} .ctl { border-radius: 999px; overflow: hidden; border-width: 1.5px; }\n${M} .ctl button { font-family: var(--font); }\n${M} .ctl button.on { background: var(--accent); }\n\n/* cards: round, a soft step under them, lace along the top, a bow on the bigger ones */\n${M} .panel, ${M} .board, ${M} .term { border-radius: 16px; box-shadow: 0 0 0 1.5px var(--line), 0 4px 0 #E3ECFA; border: 0; }\n${M} .board { position: relative; overflow: visible; }\n${M} .board > .bhead { border-radius: 16px 16px 0 0; }\n${M} .bcard, ${M} .sbrow, ${M} .tile, ${M} .wchip { border-radius: 12px; overflow: hidden; }\n${M} .bcard .bhd .sq, ${M} .tab .sq { border-radius: 50%; }\n${M} .panel.hist { position: relative; }\n${M} .board::before, ${M} .term::before, ${M} .panel.hist::before {\n content: \"\"; position: absolute; left: 14px; right: 14px; top: 0; height: 6px; z-index: 2; pointer-events: none;\n background: radial-gradient(circle at 6px 0, transparent 3.4px, var(--lace) 3.9px, var(--lace) 4.6px, transparent 5.1px) 0 0 / 12px 6px repeat-x;\n}\n${M} .board::after, ${M} .panel.hist::after { content: \"🎀\"; position: absolute; top: -11px; left: 50%; transform: translateX(-50%); font-size: 17px; line-height: 1; z-index: 3; pointer-events: none; }\n${M} .bhead .t, ${M} .thead .t { font-family: var(--font); font-weight: 600; }\n/* History as an editor: its History tab sits under the tab row, flat, without lace or a bow */\n${M} .lfs-ide .ide-main > .panel.hist { border-radius: 0; box-shadow: none; }\n${M} .lfs-ide .panel.hist::before, ${M} .lfs-ide .panel.hist::after { content: none; }\n${M} .panel.hist:has(> .lfs-ide)::after { content: none; } /* the bow would sit on the tab row */\n${M} .lfs-ide .ide-tabs button[aria-selected=\"true\"] { box-shadow: inset 0 -2px 0 #F2B8CC; }\n\n/* notebook terminals: ruled lines and a pink margin; the LayerFS stamp gives way */\n${M} .tbody {\n background: linear-gradient(90deg, transparent 22px, #F7C5D6 22px, #F7C5D6 23.5px, transparent 23.5px),\n repeating-linear-gradient(transparent 0 calc(1.7em - 1px), #E6EEFA calc(1.7em - 1px) 1.7em);\n background-attachment: local; padding-left: 32px;\n}\n${M} .wm { display: none; }\n/* a Branch's notebook is one round card; its blocks are plain paper inside it */\n${M} .nb { border-radius: 16px; box-shadow: 0 0 0 1.5px var(--line), 0 4px 0 #E3ECFA; }\n${M} .work.branchview:not(.withhist) .nb { overflow: hidden; }\n${M} .nb > .term { border-radius: 0; box-shadow: none; }\n${M} .nb > .term::before { display: none; }\n${M} .nb::before {\n content: \"\"; position: absolute; left: 14px; right: 14px; top: 0; height: 6px; z-index: 2; pointer-events: none;\n background: radial-gradient(circle at 6px 0, transparent 3.4px, var(--lace) 3.9px, var(--lace) 4.6px, transparent 5.1px) 0 0 / 12px 6px repeat-x;\n}\n${M} .nb > .wterm:nth-child(even), ${M} .nb > .wterm:nth-child(n+3), ${M} .nb.n3 > .wterm:nth-child(3) { border-color: #F2B8CC; }\n\n/* the notebook's hand, on a step's first draw. A pencil writes each new command (no caret);\n a highlighter runs over what a read looked at; a failed line keeps a red wavy underline.\n A Workspace's page is held by a paperclip from mount until unmount, when an eraser rubs\n it out and the clip falls off; each Commit closes a margin bracket around the calls it\n captured, with its id as a sticker. The project opens with a ruler line under Init; a\n fork and a merge draw a vine in the margin in the Branch's colour; a publish is stamped\n with its Layer and ruled off. An fs script's calls share a margin line: solid when it\n wrote, dotted when it only read. */\n${M} .wterm .ln.typing .cmd { border-right: 0; animation: lfs-type var(--d) linear both, lfs-unclipped var(--d) linear; }\n@keyframes lfs-unclipped { from, to { text-overflow: clip; } }\n${M} .wterm .ln.typing .pen { display: inline-block; position: relative; width: 0; height: 1em; }\n${M} .wterm .ln.typing .pen::before { content: \"\"; position: absolute; left: -3px; bottom: 2px; width: 19px; height: 19px; background: ${PENCIL} center / contain no-repeat; transform-origin: 0 100%; pointer-events: none;\n animation: lfs-pen-wiggle .16s ease-in-out infinite alternate, lfs-pen-lift .3s var(--d) ease-in forwards; }\n@keyframes lfs-pen-wiggle { from { transform: rotate(-7deg); } to { transform: rotate(4deg) translateY(-1px); } }\n@keyframes lfs-pen-lift { to { opacity: 0; transform: translate(9px, -10px) rotate(14deg); } }\n${M} .wterm .ln.new.op-read .cmd { background: linear-gradient(rgba(246,196,83,.55), rgba(246,196,83,.55)) left 60% / 0% 72% no-repeat; border-radius: 2px; animation: lfs-hl var(--d, .4s) ease-out forwards; }\n@keyframes lfs-hl { to { background-size: 100% 72%; } }\n${M} .wterm .out.bad { text-decoration: underline wavy #E8739A; text-decoration-thickness: 1px; text-underline-offset: 3px; }\n${M} .wterm[data-sb] > .thead { position: relative; }\n${M} .wterm[data-sb] > .thead::after { content: \"\"; position: absolute; left: 50%; top: -5px; width: 16px; height: 28px; background: ${CLIP} center / contain no-repeat; transform: rotate(10deg); pointer-events: none; z-index: 3; }\n${M} .wterm.enter[data-sb] > .thead::after { animation: lfs-clip-on .5s .2s cubic-bezier(.2,1.6,.4,1) both; }\n${M} .wterm.leaving[data-sb] > .thead::after { animation: lfs-clip-off .6s calc(var(--ld, 0ms) + 1300ms) ease-in forwards; }\n@keyframes lfs-clip-on { from { opacity: 0; transform: translateY(-16px) rotate(-30deg); } }\n@keyframes lfs-clip-off { to { opacity: 0; transform: translate(22px, 40px) rotate(70deg); } }\n${M} .wterm.leaving[data-sb] .tbody::after { content: \"\"; position: absolute; left: 34px; top: 12px; width: 24px; height: 24px; background: ${ERASER} center / contain no-repeat; pointer-events: none; opacity: 0; animation: lfs-erase 1.2s var(--ld, 0ms) ease-in-out both; }\n@keyframes lfs-erase { 0% { opacity: 0; transform: none; } 10% { opacity: 1; } 25% { transform: translate(150px, 4px); } 40% { transform: translate(10px, 34px); } 55% { transform: translate(170px, 52px); } 70% { transform: translate(20px, 84px); } 90% { opacity: 1; transform: translate(190px, 104px); } 100% { opacity: 0; transform: translate(210px, 110px); } }\n${M} .wterm.leaving[data-sb] .tbody > * { animation: lfs-rubbed .9s calc(var(--ld, 0ms) + 200ms) ease-in forwards; }\n@keyframes lfs-rubbed { to { opacity: .14; filter: blur(1px); } }\n${M} .wterm .ru, ${M} .wterm .ln.op-commit, ${M} .wterm .ln.op-fork, ${M} .wterm .ln.op-merge { position: relative; }\n/* a margin span is painted inside each of its lines (an output line clips what lies outside\n it): the line reaches into the margin, a stroke runs down its left edge, and the span's\n first and last lines hook in at the top and bottom */\n${M} .wterm .cm, ${M} .wterm .gw, ${M} .wterm .gr { --c: #8C7BE0; --t: 0px; --b: 0px; --ht: 0px; --hb: 0px; --v: linear-gradient(var(--c), var(--c));\n margin-left: -27px; padding-left: 27px; background: var(--v) 0 var(--t) / 1.6px calc(100% - var(--t) - var(--b)) no-repeat,\n linear-gradient(var(--c), var(--c)) 0 var(--t) / var(--ht) 1.6px no-repeat, linear-gradient(var(--c), var(--c)) 0 calc(100% - var(--b)) / var(--hb) 1.6px no-repeat; }\n${M} .wterm .gw { --c: #8B95AE; }\n${M} .wterm .gr { --c: #E0A63A; --v: repeating-linear-gradient(var(--c) 0 2px, transparent 2px 4px); }\n${M} .wterm .cm0, ${M} .wterm .gw0, ${M} .wterm .gr0 { --t: 6px; --ht: 7px; }\n${M} .wterm .cm1, ${M} .wterm .gw1, ${M} .wterm .gr1 { --b: 6px; --hb: 7px; }\n${M} .wterm .cmnew { animation: lfs-bracket .45s ease-out both; }\n@keyframes lfs-bracket { from { background-size: 1.6px 0, 0 1.6px, 0 1.6px; } }\n${M} .wterm .stk { display: inline-block; position: absolute; left: -4px; top: 3px; padding: 0 2px; border: 1px solid #AFA9EC; border-radius: 4px; background: #EEEDFE; color: #3C3489; font: 700 9px/13px var(--mono); transform: rotate(-9deg); z-index: 1; }\n${M} .wterm .ln.new .stk { animation: lfs-pop .35s .35s cubic-bezier(.2,1.8,.4,1) both; }\n@keyframes lfs-pop { from { transform: scale(0) rotate(-40deg); } }\n${M} .wterm .seal { display: inline-block; margin-left: 8px; padding: 0 5px; border: 1.5px solid #D2455E; border-radius: 4px; color: #D2455E; font: 700 10.5px/15px var(--mono); transform: rotate(-7deg); }\n${M} .wterm .ln.new .seal { animation: lfs-seal .45s var(--d, 0ms) cubic-bezier(.2,1.8,.4,1) both; }\n@keyframes lfs-seal { from { opacity: 0; transform: scale(2.4) rotate(-22deg); } }\n${M} .wterm .ru1::after { content: \"\"; position: absolute; left: -10px; right: 12px; bottom: 0; height: 1.5px; border-radius: 1px; background: #8B95AE; transform-origin: left; pointer-events: none; }\n${M} .wterm .runew.ru1::after { animation: lfs-ruler .5s calc(var(--d, 0ms) + 250ms) ease-out both; }\n@keyframes lfs-ruler { from { transform: scaleX(0); } }\n${M} .wterm .ln.op-init .cmd { font-weight: 700; }\n${M} .wterm .ln.op-fork::before, ${M} .wterm .ln.op-merge::before { content: \"\"; position: absolute; left: -26px; top: -9px; width: 10px; height: 19px; border: 0 solid var(--bc, #7B5FE0); border-bottom-width: 1.8px; pointer-events: none; }\n${M} .wterm .ln.op-fork::before { border-left-width: 1.8px; border-bottom-left-radius: 9px; }\n${M} .wterm .ln.op-merge::before { border-right-width: 1.8px; border-bottom-right-radius: 9px; }\n${M} .wterm .ln.new.op-fork::before, ${M} .wterm .ln.new.op-merge::before { animation: lfs-vine .45s ease-out both; }\n@keyframes lfs-vine { from { clip-path: inset(0 0 100% 0); } }\n@media (prefers-reduced-motion: reduce) { ${M} .wterm *, ${M} .wterm *::before, ${M} .wterm *::after, ${M} .wterm > .thead::after { animation: none !important; } ${M} .wterm .pen, ${M} .wterm.leaving .tbody::after { display: none !important; } }\n\n/* bubbles: round, ribbon-edged; sparkles and hearts float up once */\n${M} .bubble { border-radius: 14px; font: 600 12px var(--font); border: 1.5px solid var(--ribbon); box-shadow: 0 4px 12px rgba(77,107,254,.18); }\n${M} .bubble.good { color: var(--t-blue); border-color: #A9BCF8; }\n${M} .bubble.bad { color: var(--coral-text); }\n${M} .block { border-radius: 50%; }\n.lfs .maidfx { position: absolute; z-index: 46; pointer-events: none; font-size: 14px; line-height: 1; transform: translate(-50%, -50%); animation: lfs-maidfx 1.1s ease-out forwards; }\n@keyframes lfs-maidfx { 0% { opacity: 0; transform: translate(-50%, -50%) scale(.4); } 25% { opacity: 1; transform: translate(calc(-50% + var(--dx)), calc(-50% - 10px)) scale(1.1); } 100% { opacity: 0; transform: translate(calc(-50% + var(--dx) * 1.6), calc(-50% - 34px)) scale(.9); } }\n@media (prefers-reduced-motion: reduce) { .lfs .maidfx { animation: none; opacity: 0; } }\n`;\n","// The view's stylesheet, scoped under .lfs so it neither leaks into nor takes\n// from the dsh page around it. Keyframes are named lfs-*.\nimport { HEROES_CSS } from \"./skins/heroes/style.js\";\nimport { MAID_CSS } from \"./skins/maids/style.js\";\n\nexport const CSS = `\n${HEROES_CSS}\n.lfs, .lfs * { box-sizing: border-box; }\n.lfs button:not(.lfs-own *) { font: inherit; color: inherit; } /* .lfs-own: a page the host draws with its own controls (Sandboxes) */\n/* title bar + tabs: the website's Branch tabs */\n.lfs .tabs { display: flex; flex-wrap: wrap; gap: 4px; align-items: flex-end; align-self: stretch; min-width: 0; flex: 1; padding: 8px 0 0; }\n.lfs .tab { min-height: 40px; display: flex; align-items: center; gap: 8px; padding: 8px 12px; cursor: pointer; color: var(--text); white-space: nowrap; border: 1px solid transparent; border-bottom: 0; background: transparent; position: relative; font: 13px var(--mono); transition: opacity .4s, background .2s; margin-bottom: -1px; }\n.lfs .tab:hover { background: rgba(255,255,255,.6); }\n.lfs .tab[aria-selected=\"true\"] { background: #fff; border-color: var(--line); }\n.lfs .tab.dim { opacity: .55; }\n.lfs .tab .sq { width: 8px; height: 8px; background: var(--bc); flex: none; }\n.lfs .tab.main .sq { background: var(--accent); }\n.lfs .tab .tchip { font: 11.5px var(--mono); padding: 1px 6px; background: #F0EEE8; color: #6B6964; }\n.lfs .tab .tchip.ro { background: var(--coral-pale); color: var(--coral-text); }\n.lfs .tab .tchip.bad { background: var(--coral-pale); color: var(--coral-text); }\n.lfs .tab.conflict { color: var(--t-red); }\n.lfs .tab .avs { display: inline-flex; gap: 1px; }\n.lfs .tab .pin { opacity: 0; font-size: 10px; padding: 0 2px; }\n.lfs .tab:hover .pin, .lfs .tab .pin.on { opacity: .8; }\n.lfs .tab.enter { animation: lfs-grow .35s ease-out; }\n.lfs .tab.more { font: 600 11px var(--mono); }\n.lfs .menu { position: absolute; z-index: 60; background: var(--card); border-radius: 0; box-shadow: 0 10px 30px rgba(0,0,0,.25), 0 0 0 .5px var(--sep-strong); padding: 4px; min-width: 160px; }\n.lfs .menu button { display: flex; width: 100%; gap: 8px; align-items: center; border: 0; background: transparent; padding: 6px 8px; border-radius: 5px; cursor: pointer; text-align: left; }\n.lfs .menu button:hover { background: var(--accent-bg); }\n.lfs .ib { height: 26px; min-width: 26px; padding: 0 8px; border: 1px solid transparent; border-radius: 0; font: 11.5px var(--mono); background: transparent; cursor: pointer; color: var(--text-2); display: inline-flex; align-items: center; gap: 6px; white-space: nowrap; }\n.lfs .ib:hover { background: var(--sep); color: var(--text); }\n.lfs .ib.on { color: var(--accent); border-color: var(--accent); background: var(--card); }\n.lfs .ib svg { width: 15px; height: 15px; }\n/* work area */\n.lfs .work { flex: 1; min-height: 0; display: grid; gap: 12px; padding: 12px; background: var(--card); }\n/* History like an editor (view.js drawIde), on a project page and in a conversation: Files' tree in a sidebar, then File, History and Storage as tabs */\n.lfs.lfs-project { display: flex; flex-direction: column; min-height: 0; background: var(--window); }\n.lfs .lfs-ide { flex: 1; min-width: 0; min-height: 0; display: flex; flex-wrap: wrap; container: ide / inline-size; background: var(--window); }\n.lfs-ide .ide-side { flex: none; width: 248px; height: 100%; display: flex; flex-direction: column; min-height: 0; border-right: 1px solid var(--line); background: var(--card); }\n.lfs-ide .ide-title { flex: none; display: flex; align-items: center; gap: 8px; min-width: 0; height: 38px; padding: 0 12px; border-bottom: 1px solid var(--line); background: var(--tab); font-size: 12.5px; }\n.lfs-ide .ide-title .dot { flex: none; width: 8px; height: 8px; border-radius: 50%; }\n.lfs-ide .ide-title b { font-weight: 600; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }\n.lfs-ide .ide-title .pt { margin-left: auto; flex: none; font: 11.5px var(--mono); color: var(--text-3); }\n.lfs-ide .ide-latest { flex: none; border: 0; border-radius: 4px; padding: 1px 6px; background: var(--accent-bg); color: var(--accent); font: 11px var(--mono); cursor: pointer; }\n.lfs-ide .ide-side .ftree { padding-top: 6px; }\n/* a wrapping row's line is as tall as its content: the full heights keep History's tree scrolling inside */\n.lfs-ide .ide-main { flex: 1 1 360px; height: 100%; min-width: 0; min-height: 0; display: flex; flex-direction: column; }\n.lfs-ide .ide-tabs { flex: none; height: 38px; display: flex; align-items: stretch; min-width: 0; overflow-x: auto; border-bottom: 1px solid var(--line); background: var(--tab); scrollbar-width: none; }\n.lfs-ide .ide-tabs button { flex: none; display: flex; align-items: center; gap: 6px; max-width: 220px; padding: 0 14px; border: 0; border-right: 1px solid var(--line); background: transparent; color: var(--text-3); font-size: 12.5px; cursor: pointer; }\n.lfs-ide .ide-tabs button span { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }\n.lfs-ide .ide-tabs button svg { flex: none; }\n.lfs-ide .ide-tabs button:hover { color: var(--text); }\n.lfs-ide .ide-tabs button[aria-selected=\"true\"] { background: var(--card); color: var(--text); box-shadow: inset 0 -2px 0 var(--accent); }\n.lfs-ide .ide-tabs .ide-dot { width: 7px; height: 7px; border-radius: 50%; background: var(--orange); }\n.lfs-ide .ide-tabs .ide-dot.down { background: var(--red); }\n.lfs-ide .ide-tabs button[data-ide=\"file\"] span { font-family: var(--mono); font-size: 12px; }\n.lfs-ide .ide-tabs .ide-toggle { padding: 0 11px; color: var(--text-3); }\n.lfs-ide .ide-tabs .ide-toggle[aria-pressed=\"true\"] { color: var(--accent); }\n.lfs .lfs-ide.side-hidden > .ide-side { display: none; }\n.lfs .lfs-ide .ide-main > .hist { flex: 1; min-height: 0; border: 0; box-shadow: none; }\n.lfs-ide .ide-store { flex: 1; min-height: 0; overflow: auto; background: var(--card); }\n.lfs .lfs-ide .spage { display: grid; gap: 28px; min-width: 0; padding: 22px 24px 28px; font: 12px/1.5 var(--mono); }\n.lfs .lfs-ide .spage .sp-top { display: flex; flex-wrap: wrap; align-items: flex-end; gap: 16px 40px; }\n.lfs .lfs-ide .spage .sp-disk { display: grid; gap: 6px; }\n.lfs .lfs-ide .spage .sp-disk > div { display: flex; align-items: baseline; gap: 8px; }\n.lfs .lfs-ide .spage .sp-disk p { margin: 0; font-size: 11px; color: var(--text-3); }\n.lfs .lfs-ide .spage .sp-disk b { font: 500 34px/1 var(--mono); color: var(--text); letter-spacing: -.02em; }\n.lfs .lfs-ide .spage .sp-disk span { color: var(--text-3); }\n.lfs .lfs-ide .spage .sp-facts { flex: 1 1 300px; max-width: 520px; min-width: 0; display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 12px 0; }\n.lfs .lfs-ide .spage .sp-fact { display: grid; gap: 2px; min-width: 0; padding: 0 16px; border-left: 1px solid var(--line); }\n.lfs .lfs-ide .spage .sp-fact b { font: 500 16px var(--mono); color: var(--text); }\n.lfs .lfs-ide .spage .sp-fact span { font-size: 11px; color: var(--text-3); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }\n.lfs .lfs-ide .spage .sp-cols { display: grid; grid-template-columns: repeat(auto-fit, minmax(min(300px, 100%), 1fr)); gap: 28px 48px; align-items: start; }\n.lfs .lfs-ide .spage section { display: grid; gap: 10px; min-width: 0; }\n.lfs .lfs-ide .spage h4 { margin: 0; padding-bottom: 6px; border-bottom: 1px solid var(--line2); font: 600 11px var(--font); letter-spacing: .06em; text-transform: uppercase; color: var(--text-3); }\n.lfs .lfs-ide .spage .srows { gap: 9px 12px; }\n.lfs .lfs-ide .spage .bw { height: 10px; border-radius: 2px; background: var(--well); }\n.lfs .lfs-ide .spage .bw > span { border-radius: 2px; }\n.lfs .lfs-ide .spage .snote { margin: 0; font-size: 11px; }\n.lfs .lfs-ide .spage .sp-cost { display: flex; flex-wrap: wrap; gap: 4px 18px; color: var(--text-3); }\n.lfs .lfs-ide .spage .sp-cost b { font-weight: 500; color: var(--text); }\n.lfs .lfs-ide .spage .sbars { height: 96px; gap: 2px; padding-bottom: 1px; border-bottom: 1px solid var(--line); }\n.lfs .lfs-ide .spage .sbars > span { border-radius: 2px 2px 0 0; }\n.lfs .lfs-ide .spage .sp-old { margin-left: auto; float: right; }\n/* narrow: the main area wraps under the sidebar, which takes the whole width (.lfs-ide is the container, so its children change) */\n@container ide (max-width: 620px) {\n .lfs .lfs-ide .spage { padding: 16px 14px 20px; gap: 22px; }\n .lfs .lfs-ide .spage .sp-disk b { font-size: 26px; }\n .lfs-ide .ide-side { width: 100%; height: 200px; border-right: 0; border-bottom: 1px solid var(--line); }\n .lfs-ide .ide-main { height: calc(100% - 200px); min-height: 360px; }\n}\n.lfs .split { cursor: col-resize; position: relative; touch-action: none; }\n.lfs .split::after { content: \"\"; position: absolute; top: 0; bottom: 0; left: 5.5px; width: 1px; background: var(--term-border); transition: background .15s, width .15s, left .15s; }\n.lfs .split:hover::after { left: 5px; width: 2px; background: var(--accent); }\n/* main: storage over Branches (with their Sandboxes) on the left, the project\n log on the right the full height; under 760 one under another (the container\n queries below). Storage keeps its own height, Branches take the rest; each\n box scrolls inside itself. */\n.lfs .work.mainview { grid-template-columns: repeat(2, minmax(0, 1fr)); grid-template-rows: max-content minmax(auto, 1fr); overflow-y: auto; } /* the storage row is as tall as its card */\n.lfs .work.mainview > .storep { grid-column: 1; grid-row: 1; }\n.lfs .work.mainview > .board { grid-column: 1; grid-row: 2; }\n.lfs .work.mainview > .term:not(.storep) { grid-column: 2; grid-row: 1 / span 2; }\n.lfs .work.mainview > * { min-width: 0; }\n/* No box is squeezed: each keeps room for its header and one row of normal\n cards (two across), empty or not; a short view scrolls instead. */\n.lfs .work.mainview { --cards-min: 92px; }\n.lfs .work.mainview .floor { min-height: var(--cards-min); }\n/* Branches never shrink below a few cards; the project log spans storage and\n Branches, so it grows with them; a short window scrolls the whole tab */\n.lfs .work.mainview > .board { min-height: 340px; }\n.lfs .work.mainview > .term { min-height: 160px; }\n.lfs .work.mainview.withhist { grid-template-columns: minmax(300px, 360px) repeat(2, minmax(0, 1fr)); }\n.lfs .work.mainview.withhist > .storep, .lfs .work.mainview.withhist > .board { grid-column: 2; }\n.lfs .work.mainview.withhist > .term:not(.storep) { grid-column: 3; }\n/* a Branch: its info, its agents, then its terminals two by two; more than four\n terminals keep their height and the whole view scrolls */\n.lfs .work.branchview { display: flex; flex-direction: column; gap: 10px; overflow-y: auto; }\n.lfs .work.branchview:not(.withhist) .wgrid { flex: 1 0 auto; overflow: visible; grid-auto-rows: minmax(240px, 1fr); }\n/* the preview's layout: History is the work area's first column */\n.lfs .work.withhist { grid-template-columns: minmax(360px, 440px) minmax(0, 7fr) minmax(0, 5fr); background: var(--paper); }\n.lfs .work.branchview.withhist { display: grid; grid-template-columns: minmax(360px, 440px) minmax(0, 1fr); grid-template-rows: auto auto minmax(0, 1fr); }\n.lfs .work.branchview.withhist .hist { grid-row: 1 / -1; }\n.lfs .work.withhist .hist { grid-row: 1 / -1; }\n.lfs .ctl { display: flex; flex: none; align-self: flex-end; margin: 0 0 8px; border: 1px solid var(--line); background: #fff; }\n.lfs .ctl button { min-height: 28px; border: 0; padding: 0 8px; font: 11.5px var(--mono); background: transparent; color: var(--text-2); cursor: pointer; }\n.lfs .ctl button:hover { color: var(--accent); }\n.lfs .ctl button.on { background: var(--text); color: #fff; }\n/* terminals (Term in OrchestrationDemo.jsx) */\n.lfs .wterm { border: 1px solid var(--line); box-shadow: none; }\n.lfs .wterm .thead { height: auto; padding: 6px 10px; font: 12px var(--mono); border-bottom: 1px solid var(--line); gap: 8px; }\n.lfs .wterm .thead .t { font-weight: 500; color: var(--text); }\n.lfs .wterm .thead .ghost { color: var(--text-3); min-width: 0; overflow: hidden; text-overflow: ellipsis; border: 0; background: none; padding: 0; font: inherit; }\n.lfs .wterm .thead .sp { flex: 1; margin-right: -8px; }\n.lfs .wterm .thead .ghost.sbchip { flex: 0 1 auto; cursor: pointer; }\n.lfs .wterm .thead .ghost.sbchip:hover { color: var(--t-orange); background: none; }\n.lfs .wterm .thead .av { width: 22px; height: 18px; }\n.lfs .tbox { position: relative; flex: 1; min-height: 0; display: flex; flex-direction: column; }\n.lfs .tbox .wm { position: absolute; left: 50%; top: 50%; transform: translate(-50%, -50%); height: 76%; max-height: 240px; min-height: 48px; width: auto; pointer-events: none; font-family: var(--mono); }\n.lfs .wterm .tbody { position: relative; padding: 6px 10px; font: 12.5px/1.6 var(--mono); white-space: normal; }\n.lfs .wterm.cap { flex: none; height: 300px; }\n/* a terminal fills from the top, like a real one; once full it scrolls to its newest line (view.js) */\n.lfs .wterm.cap .tbody { flex: 1; min-height: 0; overflow-y: auto; display: flex; flex-direction: column; justify-content: flex-start; }\n.lfs .wterm.cap .fsmore { color: var(--text-3); }\n.lfs .wterm .ln { white-space: normal; }\n/* a line's row: prompt, command (shortened with \"…\"), agent, time, sdk; the time never leaves the view */\n.lfs .wterm .lrow { display: flex; align-items: center; min-width: 0; white-space: nowrap; }\n.lfs .wterm .lrow > * { flex: none; }\n.lfs .wterm .lrow .prompt { white-space: pre; }\n.lfs .wterm .lrow .cmd { flex: 0 1 auto; min-width: 0; overflow: hidden; text-overflow: ellipsis; }\n.lfs .wterm .ln .grp { display: none; }\n.lfs .wterm .ln .av { width: 20px; height: 15px; margin-left: 6px; }\n.lfs .wterm .lrow .tm { margin-left: 8px; }\n/* a new command types itself out, then its time, sdk and output appear */\n.lfs .wterm .ln.typing .cmd { max-width: calc(var(--n) * 1ch + 0.55ch); border-right: 0.55ch solid transparent; animation: lfs-type var(--d) steps(var(--n), end) both, lfs-caret var(--d) step-end both; }\n.lfs .wterm .ln.typing .lrow > :not(.cmd):not(.prompt):not(.pen) { animation: lfs-fadein .25s var(--d) both; }\n.lfs .wterm .out.new[style] { animation: lfs-fadein .25s var(--d) both; }\n@keyframes lfs-type { from { max-width: 0; } }\n@keyframes lfs-caret { 0% { border-right-color: var(--accent); } 100% { border-right-color: transparent; } }\n.lfs .wterm .pen, .lfs .wterm .stk, .lfs .wterm .seal { display: none; } /* the maids' notebook hand: skins/maids/style.js */\n.lfs .wterm .out { padding-left: 0; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }\n.lfs .wterm.hot { border-color: var(--accent); box-shadow: 0 0 0 2px var(--accent); }\n.lfs .wterm.bad { border-color: var(--coral); box-shadow: 0 0 0 2px var(--coral); }\n.lfs .wtag { min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; padding: 2px 6px; flex: 0 1 auto; }\n.lfs .wterm .thead .t, .lfs .storep .thead .t { flex: none; }\n.lfs .wtag.grey { background: #F0EEE8; color: var(--text-2); }\n.lfs .wtag.blue { background: var(--accent-bg); color: var(--accent); }\n.lfs .wtag.coral { background: var(--coral-pale); color: var(--coral-text); }\n.lfs .fsi { flex: none; }\n/* main: the Branch cards on a sand floor (AgentBoard), the Store (StorePanel), the project terminal */\n.lfs .board { display: flex; flex-direction: column; min-height: 0; border: 1px solid var(--line); background: #fff; }\n.lfs .bhead { display: flex; flex-wrap: nowrap; white-space: nowrap; align-items: center; gap: 4px 12px; padding: 6px 10px; border-bottom: 1px solid var(--line); background: var(--term-head); font: 12px var(--mono); color: #6B6964; }\n.lfs .bhead .t { font-weight: 500; color: var(--text); }\n.lfs .bhead .sp { flex: 1; margin-right: -8px; }\n.lfs .bhead .roster { flex: none; border: 0; background: none; padding: 0; font: inherit; color: inherit; cursor: pointer; }\n.lfs .bhead .roster:hover { color: var(--accent); }\n.lfs .floor { flex: 1; min-height: 0; overflow-y: auto; padding: 8px; background: #F6EEDD radial-gradient(#E9DCC0 1px, transparent 1px) 0 0 / 12px 12px; }\n/* cards stack in columns at least 300px wide (one full-width list in a normal board), each right under the one above, so a short card leaves no hole beside a tall one;\n the stack keeps its natural height and the floor scrolls it (a fixed height would spill extra columns sideways) */\n.lfs .floor .stack { columns: 300px; column-gap: 8px; }\n.lfs .floor .stack > .bcard { break-inside: avoid; margin-bottom: 8px; }\n.lfs .floor .none { padding: 24px 0; text-align: center; font: 12px var(--mono); color: #8C6A3A; }\n.lfs .bcard { display: flex; flex-direction: column; min-width: 0; border: 1px solid var(--bc); background: #fff; transition: opacity .3s; }\n.lfs .bcard.dim { opacity: .55; }\n.lfs .bcard.flash { animation: lfs-flash 1s ease-out; }\n.lfs .bcard .bhd { display: flex; align-items: center; gap: 8px; padding: 4px 8px; font: 12.5px var(--mono); background: color-mix(in srgb, var(--bc) 10%, white); cursor: pointer; min-width: 0; }\n.lfs .bcard .bhd .sq { width: 10px; height: 10px; background: var(--bc); flex: none; }\n.lfs .bcard .bhd .nm { font-weight: 500; color: color-mix(in srgb, var(--bc) 75%, black); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; min-width: 0; }\n.lfs .bcard .bhd .note { margin-left: auto; flex: none; font-size: 11px; color: #6B6964; }\n.lfs .crow { display: flex; align-items: center; gap: 6px; padding: 3px 6px; border-top: 1px solid var(--line2); font: 12px var(--mono); cursor: default; }\n.lfs .crow[data-dws] { cursor: pointer; }\n.lfs .crow.off { opacity: .6; }\n.lfs .crow .av { width: 24px; height: 20px; }\n.lfs .crow .nm { color: var(--text); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; min-width: 0; }\n.lfs .crow .st { margin-left: auto; flex: none; padding: 1px 4px; font-size: 10.5px; background: color-mix(in srgb, var(--ac) 12%, white); color: color-mix(in srgb, var(--ac) 80%, black); }\n.lfs .crow.off .st { background: #F0EEE8; color: var(--text-3); }\n.lfs .crow.sblit { box-shadow: inset 0 0 0 2px var(--orange); }\n.lfs .bcard.pulse { animation: lfs-focuspane 1.6s ease-out; }\n.lfs .pool { display: flex; flex-wrap: wrap; align-items: center; gap: 4px 8px; padding: 6px 10px; border-top: 1px solid #E4D6B8; background: #EFE3C8; font: 11px var(--mono); color: #8C6A3A; }\n.lfs .pool .av { width: 22px; height: 18px; opacity: .7; }\n.lfs .board > .bhead, .lfs .board > .pool { flex: none; }\n/* a Sandbox as a chip: on a Workspace's row and in the box's foot; hover lights every chip and row in it */\n.lfs .sbc { display: inline-flex; align-items: center; gap: 4px; flex: 0 1 auto; min-width: 0; padding: 1px 5px; border: 1px solid #C9D3E6; background: var(--accent-bg); color: var(--accent); font: 11px var(--mono); white-space: nowrap; cursor: default; transition: box-shadow .15s; }\n.lfs .sbc .boxi { flex: none; width: 12px; height: 12px; }\n.lfs .sbc .pre { flex: 0 1 auto; min-width: 2ch; overflow: hidden; text-overflow: ellipsis; opacity: .65; }\n.lfs .sbc b { flex: 0 1 auto; min-width: 0; font-weight: 600; overflow: hidden; text-overflow: ellipsis; }\n.lfs .sbc .wsn { flex: none; margin-left: 2px; color: var(--text-2); }\n.lfs .sbc.closed { opacity: .55; border-style: dashed; }\n.lfs .sbc.sblit { box-shadow: 0 0 0 2px var(--orange); }\n.lfs .sbc.pulse { animation: lfs-focuspane 1.6s ease-out; }\n/* on a Workspace's row the Sandbox chip gives way before the agent's name */\n.lfs .crow .sbc { flex-shrink: 6; }\n.lfs .crow.ws .nm { flex: 0 1 auto; min-width: 3ch; }\n.lfs .crow .dt { flex: none; padding: 0 4px; font-size: 10.5px; background: #F0EEE8; color: var(--text-2); }\n.lfs .crow .dt.warn { background: var(--coral-pale); color: var(--coral-text); }\n.lfs .crow[data-dws]:hover { background: color-mix(in srgb, var(--bc) 8%, white); }\n/* the header's count of Workspaces and Sandboxes: hover or focus opens every Sandbox's record */\n.lfs .sbsum { position: relative; display: inline-flex; flex: 0 1 auto; min-width: 0; cursor: default; outline: none; }\n.lfs .sbsum:focus-visible .wtag { box-shadow: 0 0 0 2px var(--accent); }\n.lfs .sbpop { display: none; position: absolute; right: 0; top: calc(100% + 6px); z-index: 30; width: min(320px, calc(100vw - 32px)); max-height: 360px; overflow-y: auto; padding: 4px; border: 1px solid var(--line); background: var(--card); box-shadow: 0 10px 28px rgba(30,37,51,.18); font: 11px var(--mono); color: var(--text-2); white-space: normal; }\n.lfs .sbsum:hover .sbpop, .lfs .sbsum:focus-within .sbpop { display: block; }\n.lfs .sbsum.lefty .sbpop { right: auto; left: 0; }\n.lfs .sbli { display: flex; flex-wrap: wrap; align-items: center; gap: 3px 8px; padding: 6px; border-bottom: 1px solid var(--line2); }\n.lfs .sbli:last-child { border-bottom: 0; }\n.lfs .sbli.closed { opacity: .6; }\n.lfs .sbli .sbst { margin-left: auto; flex: none; display: inline-flex; align-items: center; gap: 4px; font-size: 10.5px; color: var(--text-3); }\n.lfs .sbli .sbst::before { content: \"\"; width: 6px; height: 6px; border-radius: 50%; background: var(--text-3); }\n.lfs .sbli .sbst.on { color: var(--green-dark); }\n.lfs .sbli .sbst.on::before { background: var(--green); }\n.lfs .sbli .sbm { flex-basis: 100%; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; color: var(--text-3); }\n.lfs .sbli .sbm.l { color: var(--text-2); }\n.lfs .sbproc { display: flex; align-items: center; gap: 6px; padding: 3px 8px; border-top: 1px solid var(--line2); font: 11.5px var(--mono); color: var(--green-dark); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }\n.lfs .sbproc .d { width: 7px; height: 7px; border-radius: 50%; background: var(--green); flex: none; }\n.lfs .hint-i { display: inline-grid; place-items: center; width: 14px; height: 14px; border-radius: 50%; border: 1px solid currentColor; font: italic 600 9.5px/1 var(--font); color: var(--text-3); cursor: help; flex: none; }\n.lfs .hint-i:hover, .lfs .hint-i:focus { color: var(--accent); outline: none; }\n.lfs .menu .mhead { padding: 6px 8px 2px; border-top: 1px solid var(--line2); margin-top: 4px; font: 10.5px var(--mono); color: var(--text-3); }\n.lfs .menu .mt { margin-left: auto; font: 10.5px var(--mono); color: var(--text-3); }\n.lfs .tab.more.retired { color: var(--text-3); font-weight: 400; }\n.lfs .storep { flex: none; border: 1px solid var(--line); box-shadow: none; }\n.lfs .storep .thead { height: auto; padding: 6px 10px; font: 12px var(--mono); border-bottom: 1px solid var(--line); }\n.lfs .storep .thead .t { font-weight: 500; }\n.lfs .storep .thead .sp { flex: 1; margin-right: -8px; }\n.lfs .sbody { display: flex; flex-direction: column; gap: 6px; padding: 8px 10px; }\n.lfs .tiles { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 6px; }\n@media (min-width: 1536px) { .lfs .tiles { grid-template-columns: repeat(4, minmax(0, 1fr)); } }\n.lfs .tile { display: flex; flex-direction: column; min-width: 0; border: 1px solid var(--line2); background: #fff; padding: 4px 8px; font-family: var(--mono); }\n.lfs .tile span { font-size: 10.5px; line-height: 1.25; color: #6B6964; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }\n.lfs .tile b { font-size: 15px; font-weight: 500; line-height: 1.4; color: var(--text); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }\n.lfs .tile b.blue { color: var(--accent); }\n.lfs .tile b.coral { color: var(--coral-text); }\n.lfs .sbar2 { display: flex; height: 6px; background: #E6EBF5; }\n.lfs .sbar2 .p { background: var(--accent); }\n.lfs .sbar2 .m { background: var(--coral); }\n.lfs .sbar2 .f { background: #C9D0DB; }\n.lfs .sline { font: 11px var(--mono); color: var(--text-2); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }\n.lfs .sline b { font-weight: 500; color: var(--text); }\n.lfs .sline .mc { color: var(--coral-text); }\n.lfs .term.storep:has(.sv2) { flex: none; overflow: visible; }\n/* the storage card is as tall as its content (a fixed set of rows): it never scrolls or clips */\n.lfs .work.mainview > .term.storep:has(.sv2) { flex: none; height: auto; min-height: min-content; overflow: visible; }\n.lfs .sv2 { gap: 6px; padding: 8px 10px; font: 11.5px/1.45 var(--mono); color: var(--text-2); }\n.lfs .sv2 .shead { display: flex; align-items: baseline; gap: 8px; flex-wrap: wrap; }\n.lfs .sv2 .shead b { font: 500 18px var(--mono); color: var(--text); }\n.lfs .sv2 .ssub, .lfs .sv2 .snote { color: var(--text-3); font-size: 10.5px; }\n.lfs .sv2 .srows, .lfs .sv2 .scost { display: grid; grid-template-columns: max-content minmax(0, 1fr) auto; gap: 4px 8px; align-items: center; }\n.lfs .sv2 .lb { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }\n.lfs .sv2 .bw { height: 8px; }\n.lfs .sv2 .bw > span { display: block; height: 100%; min-width: 2px; }\n.lfs .sv2 .vl { text-align: right; color: var(--text); white-space: nowrap; }\n.lfs .sv2 .hd { background: #5F5E5A; } .lfs .sv2 .fc { background: #D3D1C7; } .lfs .sv2 .dd { background: var(--accent); } .lfs .sv2 .cp { background: #1D9E75; } .lfs .sv2 .md { background: #B4B2A9; }\n.lfs .sv2 .scost { grid-template-columns: max-content auto auto; justify-content: start; gap: 4px 12px; border-top: 1px solid var(--line2); padding-top: 6px; }\n.lfs .sv2 .scost b { font-weight: 500; color: var(--text); }\n.lfs .sv2 .sbars { display: flex; align-items: flex-end; gap: 1px; height: 24px; }\n.lfs .sv2 .sbars > span { flex: 1; min-width: 1px; }\n.lfs .sv2 .fs { background: #7F77DD; } .lfs .sv2 .ws { background: #D85A30; } .lfs .sv2 .ot { background: #B4B2A9; }\n.lfs .sv2 .k { display: inline-block; width: 8px; height: 8px; margin: 0 4px 0 0; vertical-align: -1px; }\n.lfs .sv2 .k.ws { margin-left: 8px; }\n/* a Branch (BranchPanel): its line, its agents, then fs and Workspace terminals two by two */\n.lfs .wchips { flex: none; display: flex; flex-wrap: nowrap; align-items: center; gap: 6px; min-height: 26px; overflow-x: auto; scrollbar-width: none; }\n.lfs .wchips > .wchip, .lfs .wchips > .none { flex: none; }\n/* the Branch's facts, one sign at the end of its agents' row */\n.lfs .wsigns { margin-left: auto; display: flex; gap: 6px; flex: none; }\n.lfs .sign { display: inline-flex; align-items: center; gap: 5px; height: 24px; padding: 0 9px; font: 11.5px var(--mono); color: var(--text-2); background: var(--well); border: 1px solid var(--line2); white-space: nowrap; }\n.lfs .wchips .none { font: 11.5px var(--mono); color: var(--text-3); align-self: center; }\n.lfs .wchip { display: flex; align-items: center; gap: 6px; border: 1px solid var(--line); padding: 2px 8px 2px 4px; font: 11.5px var(--mono); opacity: .7; }\n.lfs .wchip.on { border-color: var(--ac); background: #fff; opacity: 1; }\n.lfs .wchip .av { width: 20px; height: 16px; }\n.lfs .wchip .nm { color: var(--text); }\n.lfs .wchip .st { color: var(--text-3); }\n.lfs .wchip.on .st { color: color-mix(in srgb, var(--ac) 80%, black); }\n.lfs .wgrid { flex: 1; min-height: 0; display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); grid-auto-rows: minmax(176px, 1fr); gap: 12px; overflow-y: auto; }\n/* a Branch's notebook: one page, split into borderless blocks along dashed perforations.\n One block fills it; two sit across; three are fs beside two stacked; more go in rows of\n two, an odd last block across. Blocks stretch to their row (not the terminal height). */\n.lfs .nb { position: relative; gap: 0; background: var(--term); box-shadow: 0 0 0 1px var(--line); }\n.lfs .nb > .wterm.cap { height: auto; min-height: 0; }\n.lfs .nb > .wterm { border: 0; border-radius: 0; box-shadow: none; background: transparent; }\n.lfs .nb > .wterm > .thead { border-bottom: 0; background: color-mix(in srgb, var(--term-head) 70%, transparent); }\n.lfs .nb > .wterm:nth-child(even) { border-left: 1.5px dashed var(--line); }\n.lfs .nb > .wterm:nth-child(n+3) { border-top: 1.5px dashed var(--line); }\n.lfs .nb:not(.n3) > .wterm:last-child:nth-child(odd):not(:first-child) { grid-column: 1 / -1; }\n.lfs .nb.n1 { grid-template-columns: minmax(0, 1fr); grid-template-rows: minmax(240px, 1fr) auto; }\n.lfs .nb.n3 > .wterm:first-child { grid-row: span 2; }\n.lfs .nb.n3 > .wterm:nth-child(3) { grid-column: 2; border-left: 1.5px dashed var(--line); }\n/* states draw inside a block (its edges are the page's) */\n.lfs .nb > .wterm.wterm.hot { box-shadow: inset 0 0 0 1.5px var(--accent); }\n.lfs .nb > .wterm.wterm.bad { box-shadow: inset 0 0 0 1.5px var(--coral); border-color: var(--coral); border-style: dashed; }\n.lfs .nb > .wterm.wterm.sblit { box-shadow: inset 0 0 0 2px var(--orange); }\n/* a new block opens from its perforation: across from the left edge, below from the top */\n.lfs .nb > .wterm.enter { animation: lfs-nbopen-x .3s ease-out; }\n.lfs .nb > .wterm.enter:nth-child(odd) { animation-name: lfs-nbopen-y; }\n@keyframes lfs-nbopen-x { from { clip-path: inset(0 100% 0 0); } to { clip-path: inset(0); } }\n@keyframes lfs-nbopen-y { from { clip-path: inset(0 0 100% 0); } to { clip-path: inset(0); } }\n@media (prefers-reduced-motion: reduce) { .lfs .nb > .wterm.enter { animation: none; } }\n.lfs .nb > .wnone { grid-column: 1 / -1; padding: 8px 10px; font: italic 11.5px var(--mono); color: var(--text-3); text-align: center; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }\n.lfs .seg { display: inline-flex; border: 1px solid var(--line); background: var(--card); flex: none; }\n.lfs .seg button { border: 0; background: transparent; font: 11px var(--mono); padding: 3px 8px; cursor: pointer; color: var(--text-2); display: inline-flex; align-items: center; gap: 4px; }\n.lfs .seg button:hover { color: var(--text); }\n.lfs .seg button.on { background: var(--text); color: #fff; }\n.lfs .seg svg { width: 12px; height: 12px; fill: none; stroke: currentColor; stroke-width: 1.6; stroke-linecap: round; }\n.lfs .seg svg .fill { fill: currentColor; stroke: none; }\n.lfs .col { display: flex; flex-direction: column; gap: 12px; min-height: 0; min-width: 0; }\n.lfs .term { display: flex; flex-direction: column; background: var(--term); border-radius: 0; overflow: hidden; min-width: 0; min-height: 0; box-shadow: 0 0 0 1px var(--line); position: relative; flex: 1; transition: box-shadow .25s; }\n.lfs .term.hot { box-shadow: 0 0 0 1.5px var(--accent), 0 6px 18px rgba(0,0,0,.12); }\n.lfs .term.bad { box-shadow: 0 0 0 1.5px var(--red), 0 6px 18px rgba(255,59,48,.18); }\n.lfs .term.enter { animation: lfs-grow .35s ease-out; }\n.lfs .term.leaving { animation: lfs-leave 3.6s ease-in forwards; pointer-events: none; }\n.lfs .thead { height: 34px; flex: none; display: flex; align-items: center; gap: 8px; padding: 0 10px; background: var(--term-head); color: var(--term-text); font: 12.5px var(--mono); border-bottom: 1px solid var(--line2); white-space: nowrap; overflow: hidden; }\n.lfs .thead .ttl { font: 12px var(--mono); color: var(--term-dim); overflow: hidden; text-overflow: ellipsis; }\n.lfs .thead .sp { flex: 1; }\n.lfs .kind { font: 600 11px var(--mono); padding: 0; letter-spacing: .06em; flex: none; background: none !important; color: var(--text) !important; }\n.lfs .kind.fs { background: var(--accent-bg); color: var(--t-blue); }\n.lfs .kind.sandbox { background: var(--orange-bg); color: var(--t-orange); }\n.lfs .kind.history { background: var(--purple-bg); color: var(--t-purple); }\n.lfs .kind.files { background: var(--green-bg); color: var(--t-green); }\n.lfs .kind.plain { background: var(--well); color: var(--text-2); }\n.lfs .pill { font: 11px var(--mono); padding: 1px 6px; border-radius: 0; background: var(--well); color: var(--term-dim); white-space: nowrap; display: inline-flex; gap: 4px; align-items: center; }\n.lfs .pill.warn { background: var(--red-bg); color: var(--t-red); }\n.lfs .pill.run { background: var(--green-bg); color: var(--t-green); }\n.lfs .pill.ro { background: var(--coral-pale); color: var(--coral-text); }\n.lfs .agent-tag { display: inline-flex; align-items: center; gap: 4px; font: 600 11px var(--font); color: var(--ac); background: color-mix(in srgb, var(--ac) 14%, transparent); padding: 0 6px 0 3px; border-radius: 4px; height: 17px; }\n.lfs .tbody { flex: 1; min-height: 0; overflow: auto; padding: 10px 12px 8px; font: 12.5px/1.7 var(--mono); color: var(--term-text); white-space: pre-wrap; word-break: break-word; }\n.lfs .ln { display: block; white-space: pre-wrap; }\n.lfs .ln.new { animation: lfs-fadein .35s ease-out; }\n.lfs .ln .cmd { color: var(--term-text); }\n.lfs .ln .grp { font: 10px var(--mono); color: var(--term-dim); border: 1px dashed var(--term-border); border-radius: 3px; padding: 0 4px; margin-right: 6px; vertical-align: 1px; }\n.lfs .ln.dim, .lfs .ln.dim .cmd { color: var(--term-dim); }\n.lfs .out { display: block; color: var(--term-dim); padding-left: 2ch; }\n.lfs .out.good { color: var(--t-green); }\n.lfs .out.bad { color: var(--t-red); }\n.lfs .out.mark { color: var(--t-orange); }\n.lfs .prompt { color: var(--text-3); }\n.lfs .inrow { flex: none; display: flex; align-items: center; gap: 6px; padding: 5px 10px 7px; font: 12px var(--mono); color: var(--term-dim); border-top: 1px solid var(--term-border); }\n.lfs .inrow .prompt { flex: none; white-space: nowrap; }\n.lfs .inrow > span:last-child { min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }\n.lfs .inrow .caret { width: 7px; height: 14px; background: var(--term-dim); opacity: .5; animation: lfs-blink 1.1s steps(2) infinite; }\n/* History: the website's tree (tree.js) */\n.lfs .graphwrap { flex: 1; min-height: 0; overflow: auto; padding: 6px 4px; }\n.lfs .panel { background: var(--card); border: 1px solid var(--line); box-shadow: 0 1px 0 var(--line), 0 12px 32px rgba(30,37,51,.06); display: flex; flex-direction: column; min-height: 0; min-width: 0; }\n.lfs .hist .phead { flex: none; display: flex; align-items: center; gap: 10px; padding: 9px 12px; border-bottom: 1px solid var(--line); background: var(--tab); font: 12px var(--mono); color: var(--text-3); white-space: nowrap; overflow: hidden; }\n.lfs .hist .phead .ref { overflow: hidden; text-overflow: ellipsis; min-width: 0; }\n.lfs .hist .phead > * { flex: none; }\n.lfs .hist .phead > .ref, .lfs .hist .phead > .m { flex: 0 1 auto; min-width: 0; overflow: hidden; text-overflow: ellipsis; }\n/* a narrow History keeps its controls: the count goes first, then Play's word */\n.lfs .hist { container: hist / inline-size; }\n@container hist (max-width: 460px) { .lfs .hist .phead > .m { display: none; } .lfs .hist .phead { gap: 8px; } }\n@container hist (max-width: 390px) { .lfs .hist .phead [data-play] .lbl { display: none; } }\n.lfs .hist .phead .sp { flex: 1; }\n.lfs .hist .fbody, .lfs .hist .ftree, .lfs .hist .fview { min-height: 0; }\n.lfs .treebox { flex: 1; min-height: 0; display: flex; flex-direction: column; position: relative; }\n.lfs .treewrap { flex: 1; min-height: 0; overflow: auto; outline: none; position: relative; cursor: grab; }\n.lfs .treewrap.panning { cursor: grabbing; user-select: none; }\n.lfs .treewrap [data-node], .lfs .treewrap .tag { cursor: pointer; }\n.lfs.tz-key .treewrap, .lfs.tz-key .treewrap [data-node] { cursor: zoom-in; }\n.lfs.tz-key.tz-out .treewrap, .lfs.tz-key.tz-out .treewrap [data-node] { cursor: zoom-out; }\n.lfs .tzoom { position: absolute; z-index: 5; right: 12px; bottom: 12px; display: flex; border: 1px solid var(--line); background: rgba(255,255,255,.92); box-shadow: 0 2px 8px rgba(0,0,0,.08); backdrop-filter: blur(4px); }\n.lfs .tzoom button { min-width: 28px; height: 26px; border: 0; padding: 0 6px; background: none; font: 13px var(--mono); color: var(--text-2); cursor: pointer; }\n.lfs .tzoom button + button { border-left: 1px solid var(--line2); }\n.lfs .tzoom button:hover { background: var(--accent-bg); color: var(--accent); }\n.lfs .tzoom .tzv { min-width: 48px; font-size: 11px; }\n.lfs .treewrap:focus-visible { box-shadow: inset 0 0 0 2px var(--accent); }\n.lfs svg.tree { display: block; font-family: var(--mono); font-size: 10px; }\n.lfs svg.tree .lane { fill: var(--lane); }\n.lfs svg.tree .grid { stroke: #F1EEE8; }\n.lfs svg.tree .now { stroke: var(--text); stroke-opacity: .35; stroke-dasharray: 2 3; }\n.lfs svg.tree .nowt { font-weight: 600; fill: var(--text); }\n.lfs svg.tree .fork { fill: none; stroke-width: 2.5; opacity: .6; stroke-linecap: round; }\n.lfs svg.tree .publish { fill: none; stroke-width: 1.6; stroke-dasharray: 4 3; opacity: .75; }\n.lfs svg.tree .graft { fill: none; stroke-width: 1.8; opacity: .6; }\n.lfs svg.tree .link.far { opacity: .14; stroke-width: 1.2; }\n.lfs svg.tree .link.on { opacity: .95; stroke-width: 2.2; }\n.lfs svg.tree .bough { fill: none; stroke-linecap: round; opacity: .9; }\n.lfs svg.tree .twig { fill: none; stroke: var(--twig); stroke-width: 2.4; stroke-linecap: round; }\n.lfs svg.tree .trunk { fill: none; stroke: var(--trunk); stroke-linecap: round; }\n.lfs svg.tree .trunk-on { fill: none; stroke: var(--trunk); stroke-width: 2.6; stroke-linecap: round; stroke-dasharray: 0 7; opacity: .85; } /* main past its newest Layer: dots */\n.lfs svg.tree .band { stroke: #fff; stroke-width: 1; }\n.lfs svg.tree .lid { font-weight: 600; pointer-events: none; }\n.lfs svg.tree .hit { fill: transparent; }\n.lfs svg.tree .knot circle:not(.hit) { fill: var(--card); stroke-width: 1.8; }\n.lfs svg.tree .ring { fill: #fff; stroke-width: 2.4; }\n.lfs svg.tree .vein { stroke: #fff; stroke-opacity: .55; stroke-width: .9; stroke-linecap: round; fill: none; }\n.lfs svg.tree .node { cursor: pointer; }\n.lfs svg.tree .node:hover path:not(.vein), .lfs svg.tree .node.sel path:not(.vein) { stroke: var(--text); stroke-width: 1.4; }\n.lfs svg.tree .node.sel .ring, .lfs svg.tree .node.sel .band, .lfs svg.tree .knot.sel circle:not(.hit) { stroke: var(--text); }\n.lfs svg.tree .leader { stroke: var(--twig); stroke-width: 1; stroke-dasharray: 2 2; }\n.lfs svg.tree .tag { cursor: pointer; }\n.lfs svg.tree .tag rect { fill: var(--tc); stroke: var(--tc); }\n.lfs svg.tree .tag text { font-weight: 600; fill: #fff; }\n.lfs svg.tree .tag.idle rect { fill: #fff; }\n.lfs svg.tree .tag.idle text { fill: var(--tc); }\n.lfs svg.tree .tag.on rect { stroke: var(--text); stroke-width: 1.5; }\n.lfs svg.tree .tavbg { fill: var(--card); stroke-width: 1.2; }\n.lfs svg.tree .ground { fill: #F6EEDD; }\n.lfs svg.tree .groundline { stroke: #E4D6B8; }\n.lfs svg.tree .mbadge circle { fill: var(--orange); stroke: #fff; stroke-width: 1.5; }\n.lfs svg.tree .mbadge.stale circle { fill: var(--red); }\n.lfs svg.tree .mbadge text { fill: #fff; font: 700 8.5px var(--font); }\n.lfs svg.tree .popin { animation: lfs-popin .5s .3s both cubic-bezier(.2,.9,.3,1.35); transform-box: fill-box; transform-origin: center; }\n.lfs .ov { flex: none; display: flex; height: 40px; border-top: 1px solid var(--line2); }\n.lfs .ovl { width: 110px; flex: none; display: flex; flex-direction: column; justify-content: center; padding: 0 10px; border-right: 1px solid var(--line2); font: 10px/1.4 var(--mono); color: var(--text-3); }\n.lfs .ovl button { align-self: flex-start; border: 0; background: none; padding: 0; font: inherit; color: var(--accent); cursor: pointer; }\n.lfs .ovstrip { flex: 1; position: relative; cursor: pointer; background: #FAF9F6; }\n.lfs .ovs { display: block; width: 100%; height: 100%; }\n.lfs .ovs .bar { fill: #D6D1C7; }\n.lfs .ovs .tick { fill: var(--trunk); }\n.lfs .ovs .nowl { stroke: var(--text); stroke-opacity: .5; stroke-dasharray: 2 2; vector-effect: non-scaling-stroke; }\n.lfs .ovbox { position: absolute; top: 1px; bottom: 1px; border: 1.5px solid var(--accent); background: rgba(47,91,181,.08); pointer-events: none; }\n/* the legend: a \"?\" over the tree's bottom left opens it above the button */\n.lfs .tkey { position: absolute; left: 12px; bottom: 12px; z-index: 3; width: 28px; height: 28px; border-radius: 50%; border: 1px solid var(--line); background: var(--card); font: 600 12px var(--mono); color: var(--text-2); cursor: pointer; box-shadow: 0 1px 3px rgba(30,37,51,.08); }\n.lfs .tkey:hover { color: var(--text); border-color: var(--text-3); }\n.lfs .tkey.on { background: var(--text); border-color: var(--text); color: #fff; }\n.lfs .tlegend { position: absolute; left: 12px; bottom: 48px; z-index: 3; max-width: calc(100% - 24px); display: flex; flex-direction: column; gap: 5px; padding: 10px 12px; border: 1px solid var(--line); border-radius: 8px; background: var(--card); box-shadow: 0 6px 18px rgba(30,37,51,.14); font: 11px var(--mono); color: var(--text-2); }\n.lfs .tlegend span { display: inline-flex; align-items: center; gap: 6px; }\n.lfs .tlegend .dash { width: 16px; border-top: 2px dashed var(--b1); }\n.lfs .tlegend .hint { color: var(--text-3); }\n.lfs .grow { display: flex; align-items: center; gap: 8px; width: 100%; height: 28px; padding: 0 8px; border: 0; background: transparent; cursor: pointer; font: 12px var(--mono); color: var(--term-text); white-space: nowrap; text-align: left; }\n.lfs .grow:hover { background: var(--sep); }\n.lfs .grow.sel { background: var(--accent-bg); }\n.lfs .grow > * { flex: none; }\n.lfs .grow .gid { font: 600 12px var(--mono); min-width: 2.6em; }\n.lfs .grow .gid.dim { font-weight: 400; color: var(--term-dim); }\n.lfs .grow .gbr { font-weight: 500; }\n.lfs .grow .gmsg { flex: 1 1 auto; min-width: 0; overflow: hidden; text-overflow: ellipsis; color: var(--text-2); }\n.lfs .grow .gby { font-weight: 500; color: var(--text-2); }\n.lfs .grow .ghead { font-size: 11px; line-height: 16px; padding: 0 6px; border-radius: 999px; background: var(--accent-bg); color: var(--t-blue); }\n.lfs .grow.popin { animation: lfs-fadein .4s .3s both; }\n@keyframes lfs-popin { from { transform: scale(0); } to { transform: scale(1); } }\n.lfs .rows { flex: 1; min-height: 0; overflow: auto; padding: 4px; }\n.lfs .brow { display: flex; align-items: center; gap: 8px; padding: 4px 10px; border-radius: 0; border-bottom: 1px solid var(--line2); cursor: pointer; min-height: 32px; transition: background .25s; }\n.lfs .brow .slot { width: 66px; height: 20px; flex: none; }\n.lfs .brow .hd { font: 11px var(--mono); color: var(--text-2); width: 34px; text-align: right; flex: none; }\n.lfs .brow:hover { background: var(--well); }\n.lfs .brow.flash { animation: lfs-flash 1s ease-out; }\n.lfs .brow .sq { width: 9px; height: 9px; background: var(--bc); flex: none; }\n.lfs .brow .st { width: 16px; text-align: center; font-size: 12px; flex: none; }\n.lfs .brow .nm { font: 600 12px var(--mono); color: var(--bc); flex: 1; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }\n.lfs .brow .meta { font: 11px var(--mono); color: var(--text-3); white-space: nowrap; }\n.lfs .brow .meta.busy { color: var(--t-green); }\n.lfs .brow .meta.pub { color: var(--t-blue); }\n.lfs .brow .meta.bad { color: var(--t-red); }\n.lfs .brow.idle .nm { opacity: .6; }\n.lfs .bench { flex: none; min-height: 48px; background: var(--term); box-shadow: 0 0 0 1px var(--line); display: flex; align-items: center; gap: 8px; padding: 8px 10px; font-size: 11px; color: var(--text-3); position: relative; }\n.lfs .bench b { font-weight: 600; letter-spacing: .04em; text-transform: uppercase; font-size: 10px; }\n/* branch view */\n/* SDK call details on a terminal line */\n.lfs .sdkbtn { margin-left: 8px; font: 9.5px var(--mono); padding: 0 4px; border-radius: 3px; border: 1px solid var(--term-border); background: transparent; color: var(--term-dim); cursor: pointer; opacity: 0; vertical-align: 1px; }\n.lfs .ln:hover .sdkbtn, .lfs .ln.open .sdkbtn, .lfs .sdkbtn:focus-visible { opacity: 1; }\n.lfs .sdk { display: none; margin: 3px 0 5px; padding: 6px 9px; border-left: 2px solid var(--t-cyan); background: var(--well); border-radius: 0 6px 6px 0; color: var(--term-text); font-size: 11.5px; white-space: normal; }\n.lfs .ln.open .sdk { display: block; }\n.lfs .sdk .code { color: var(--term-dim); display: block; margin-bottom: 4px; padding: 0; }\n.lfs .sdk .code b { color: var(--t-cyan); font-weight: 600; }\n.lfs .sdk pre { margin: 0 0 6px; font: inherit; white-space: pre-wrap; }\n.lfs .tm { margin-left: 8px; font: 9.5px var(--mono); color: var(--term-dim); vertical-align: 1px; }\n.lfs .sdk .tm { margin-left: 6px; font-size: 10.5px; }\n/* Store and overlay footers */\n.lfs .store { flex: none; border-top: 1px solid var(--term-border); padding: 3px 10px 4px; font: 10.5px/1.6 var(--mono); color: var(--term-dim); background: var(--well); }\n.lfs .store .srow { display: flex; align-items: center; gap: 7px; white-space: nowrap; overflow: hidden; }\n.lfs .store .srow > span:not(.sbar):not(.est) { overflow: hidden; text-overflow: ellipsis; min-width: 0; }\n.lfs .store .kind { flex: none; font-weight: 600; font-size: 9px; letter-spacing: .06em; padding: 0; background: none; }\n.lfs .store b { color: var(--term-text); font-weight: 600; }\n.lfs .store .est { margin-left: auto; flex: none; font-size: 9.5px; opacity: .8; }\n.lfs .store .sbar { flex: none; display: flex; width: 44px; height: 5px; border-radius: 3px; overflow: hidden; background: var(--term-border); }\n.lfs .store .sbar i { display: block; }\n.lfs .store .p { background: var(--t-cyan); }\n.lfs .store .m { background: var(--orange); }\n.lfs .store .pc { color: var(--t-cyan); }\n.lfs .store .mc { color: var(--orange); }\n/* Files, stacked for the right column */\n.lfs .fsel { font: 12px var(--font); height: 24px; max-width: 200px; min-width: 70px; border: 1px solid var(--term-border); border-radius: 5px; background: var(--term); color: var(--term-text); padding: 0 4px; }\n.lfs .sync { font-size: 11px; line-height: 1; flex: none; }\n.lfs .sync.live { color: var(--t-green); }\n.lfs .sync.pinned { color: var(--term-dim); }\n.lfs .fbar { flex: none; display: flex; align-items: center; gap: 6px; padding: 4px 8px; background: var(--term-head); border-bottom: 1px solid var(--term-border); font-size: 11.5px; color: var(--term-dim); flex-wrap: wrap; }\n.lfs .fbar .segs { display: inline-flex; background: var(--well); border-radius: 6px; padding: 2px; }\n.lfs .fbar .fseg { border: 0; background: transparent; padding: 2px 9px; border-radius: 4px; cursor: pointer; font-size: 11.5px; color: var(--term-dim); }\n.lfs .fbar .fseg.on { background: var(--card); color: var(--term-text); box-shadow: 0 1px 2px rgba(0,0,0,.12); }\n.lfs .fbar .chipb { border: 1px solid var(--term-border); background: transparent; border-radius: 10px; padding: 0 8px; height: 20px; cursor: pointer; font-size: 11px; color: var(--term-dim); }\n.lfs .fbar .chipb.on { border-color: var(--accent); color: var(--accent); background: var(--accent-bg); }\n.lfs .fbar .chk { display: inline-flex; gap: 4px; align-items: center; }\n.lfs .fbar .chk.off { opacity: .45; }\n.lfs .fbar .sp { flex: 1; }\n.lfs .fbar .fcount { font: 11px var(--mono); }\n.lfs .fbar .sdkbtn { opacity: 1; margin-left: 0; }\n.lfs .fsdk { margin: 0; padding: 6px 10px; background: var(--well); border-bottom: 1px solid var(--term-border); font: 11px/1.5 var(--mono); color: var(--term-text); white-space: pre-wrap; }\n.lfs .fbody { flex: 1; min-height: 0; display: flex; flex-direction: column; }\n.lfs .ftree, .lfs .flist { flex: 1; min-height: 0; overflow: auto; padding: 4px 0 10px; font: 12px/1.6 var(--mono); color: var(--term-text); }\n.lfs .fhead { flex: none; display: flex; align-items: center; gap: 6px; padding: 5px 8px; background: var(--term-head); border-bottom: 1px solid var(--term-border); font-size: 11.5px; color: var(--term-dim); min-width: 0; }\n.lfs .fhead .fsel { min-width: 0; flex: 0 1 auto; }\n.lfs .fhead .sp { flex: 1; min-width: 4px; }\n.lfs .fhead .fcount { font: 11px var(--mono); white-space: nowrap; }\n.lfs .fhead .sdkbtn { opacity: 1; margin-left: 0; flex: none; }\n.lfs .fwide { flex: none; border: 0; background: none; color: var(--term-dim); font-size: 13px; width: 22px; height: 22px; border-radius: 5px; cursor: pointer; }\n.lfs .fwide:hover, .lfs .fwide.on { background: var(--well); color: var(--term-text); }\n.lfs .fsw, .lfs .fmodes { flex: none; display: flex; align-items: center; gap: 8px; padding: 5px 8px; border-bottom: 1px solid var(--term-border); min-width: 0; }\n.lfs .fsw .segs, .lfs .fmodes .segs { display: inline-flex; background: var(--well); border-radius: 6px; padding: 2px; flex: none; }\n.lfs .fsw .fseg, .lfs .fmodes .fseg { border: 0; background: transparent; padding: 2px 10px; border-radius: 4px; cursor: pointer; font-size: 11.5px; color: var(--term-dim); }\n.lfs .fsw .fseg.on, .lfs .fmodes .fseg.on { background: var(--card); color: var(--term-text); box-shadow: 0 1px 2px rgba(0,0,0,.12); }\n.lfs .fsw .fseg b { font-weight: 600; margin-left: 2px; }\n.lfs .fmodes .sp { flex: 1; }\n.lfs .fstat { font-size: 11px; color: var(--term-dim); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; cursor: help; }\n.lfs .fstat b { color: var(--term-text); }\n.lfs .fdir { display: flex; align-items: center; gap: 6px; padding: 8px 10px 3px; color: var(--text-2); font: 500 11.5px var(--font); }\n.lfs .fdir .fr { margin-left: auto; }\n.lfs .fgroup { display: flex; align-items: center; gap: 6px; margin-top: 6px; padding: 4px 10px; border-top: 1px dashed var(--term-border); color: var(--term-dim); font-size: 11.5px; cursor: pointer; white-space: nowrap; }\n.lfs .fgroup:hover { background: var(--well); }\n.lfs .fgroup b { color: var(--term-text); font-weight: 600; }\n.lfs .fgroup .car { width: 10px; }\n.lfs .fgroup .nm { overflow: hidden; text-overflow: ellipsis; min-width: 0; }\n.lfs .fb.lead { margin: 0 6px 0 0; }\n.lfs .fpage { flex: none; display: flex; align-items: center; gap: 8px; padding: 6px 8px; border-bottom: 1px solid var(--term-border); min-width: 0; }\n.lfs .fback { flex: none; border: 0; background: var(--well); color: var(--accent); font-size: 11.5px; padding: 2px 8px; border-radius: 5px; cursor: pointer; }\n.lfs .fback:hover { background: var(--accent-bg); }\n.lfs .fpathx { min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; font: 12px var(--mono); }\n.lfs .fpathx .dir { color: var(--term-dim); }\n.lfs .fpathx .sl { color: var(--line); margin: 0 2px; }\n.lfs .fpage .sp { flex: 1; }\n.lfs .flang { flex: none; font: 11px var(--mono); color: var(--text-3); white-space: nowrap; }\n.lfs .fpathx b { color: var(--term-text); }\n.lfs .frow { display: flex; align-items: center; gap: 6px; min-height: 24px; padding: 0 10px 0 8px; cursor: pointer; white-space: nowrap; font-family: var(--font); font-size: 12.5px; color: var(--text); border-left: 2px solid transparent; }\n.lfs .frow:hover { background: #F4F2EC; }\n.lfs .frow.sel { background: var(--accent-bg); border-left-color: var(--accent); }\n.lfs .frow.flash { animation: lfs-flash 1.2s ease-out; }\n.lfs .frow.dir .nm { font-weight: 500; }\n.lfs .frow .car { width: 10px; color: var(--text-3); flex: none; display: inline-grid; place-items: center; }\n.lfs .frow .nm { overflow: hidden; text-overflow: ellipsis; min-width: 0; }\n.lfs .frow .ind { flex: none; align-self: stretch; margin-right: -6px; background: repeating-linear-gradient(90deg, transparent 0 6px, #E8E4DC 6px 7px, transparent 7px 14px); }\n.lfs .chev { transition: transform .12s; }\n.lfs .chev.open { transform: rotate(90deg); }\n.lfs .fico { flex: none; display: inline-block; vertical-align: middle; }\n.lfs .fico.badge { display: inline-grid; place-items: center; width: 16px; height: 16px; border-radius: 3px; background: color-mix(in srgb, var(--fc) 14%, white); color: var(--fc); font: 700 7.5px/1 var(--mono); letter-spacing: -.02em; }\n.lfs .fico.badge.w { font-size: 6.5px; }\n.lfs .frow.note { cursor: default; color: var(--term-dim); font-size: 12px; }\n.lfs .frow.note[data-fmore] { cursor: pointer; color: var(--accent); }\n.lfs .frow.more { color: var(--accent); }\n.lfs .fline { width: 96px; font: 11.5px var(--mono); padding: 2px 6px; border: 1px solid var(--term-border); border-radius: 4px; background: var(--card); color: var(--term-text); }\n.lfs .fseg:disabled { opacity: .4; cursor: default; }\n.lfs .frow.gone .nm { text-decoration: line-through; color: var(--term-dim); }\n.lfs .frow.flat { padding: 2px 10px; font: 12px var(--mono); }\n.lfs .fb { font: 700 9.5px var(--mono); padding: 0 4px; border-radius: 3px; margin-left: auto; flex: none; }\n.lfs .frow.flat .fb { margin: 0 6px 0 0; }\n.lfs .fb.A { color: var(--t-green); background: var(--t-add-bg); }\n.lfs .fb.M { color: var(--t-blue); background: var(--accent-bg); }\n.lfs .fb.D { color: var(--t-red); background: var(--t-del-bg); }\n.lfs .fr { margin-left: auto; font: 10px var(--mono); color: var(--term-dim); flex: none; }\n.lfs .fview { flex: 1; min-height: 0; overflow: auto; font: 12px/1.55 var(--mono); color: var(--term-text); }\n.lfs .fpath { position: sticky; top: 0; z-index: 1; background: var(--term); padding: 5px 10px; border-bottom: 1px solid var(--term-border); font-weight: 600; }\n.lfs .fpath span { font-weight: 400; color: var(--term-dim); }\n.lfs .fsum { padding: 6px 10px; color: var(--term-dim); font-size: 11.5px; }\n.lfs .fsum b { color: var(--term-text); font-weight: 600; }\n.lfs .fstats { display: flex; flex-wrap: wrap; gap: 3px 14px; padding: 6px 10px; border-bottom: 1px solid var(--term-border); background: var(--well); font-size: 11px; color: var(--term-dim); }\n.lfs .fstats b { color: var(--term-text); font-weight: 600; }\n.lfs .fstats .est { margin-left: auto; }\n.lfs .frev { width: 100%; border-collapse: collapse; font-size: 11.5px; }\n.lfs .frev th { text-align: left; font-weight: 600; color: var(--term-dim); padding: 4px 6px; border-bottom: 1px solid var(--term-border); }\n.lfs .frev td { padding: 3px 6px; border-bottom: 1px solid var(--term-border); white-space: nowrap; }\n.lfs .frev td.n, .lfs .frev th.n { text-align: right; }\n.lfs .frev .zero { color: var(--term-dim); }\n.lfs .fempty { padding: 18px 12px; color: var(--term-dim); line-height: 1.6; }\n.lfs .code { padding: 4px 0 12px; font: 12px/1.65 var(--mono); tab-size: 2; min-width: max-content; }\n.lfs .cl { display: flex; white-space: pre; min-height: 19px; }\n.lfs .cl:hover { background: #F6F4EF; }\n.lfs .cl .no { flex: none; width: 44px; padding-right: 10px; margin-right: 10px; text-align: right; color: #B4AFA5; user-select: none; border-right: 1px solid var(--line2); }\n.lfs .cl:hover .no { color: var(--text-2); }\n/* syntax colours (highlight.js), the website's palette */\n.lfs .hl-com { color: #9A958B; font-style: italic; }\n.lfs .hl-str { color: #2E7D5B; }\n.lfs .hl-num, .lfs .hl-lit { color: #B8502C; }\n.lfs .hl-kw { color: #6A4DA8; font-weight: 500; }\n.lfs .hl-fn { color: #2F5BB5; }\n.lfs .hl-typ { color: #1F6B78; }\n.lfs .hl-prop { color: #93650F; }\n.lfs .hl-tag { color: #C8452F; }\n.lfs .hl-attr { color: #93650F; }\n.lfs .hl-var { color: #1F6B78; }\n.lfs .hl-op { color: #D29A2E; font-weight: 600; }\n\n.lfs .cl .op { flex: none; width: 14px; color: var(--term-dim); }\n.lfs .cl .tx { flex: 1; padding-right: 10px; }\n.lfs .cl.add { background: var(--t-add-bg); }\n.lfs .cl.add .op, .lfs .cl.add .tx { color: var(--t-green); }\n.lfs .cl.del { background: var(--t-del-bg); }\n.lfs .cl.del .op, .lfs .cl.del .tx { color: var(--t-red); }\n/* a diff keeps the syntax colours: the line is tinted, its gutter more */\n.lfs .cl.add .tx, .lfs .cl.del .tx { color: var(--term-text); }\n.lfs .cl.add .no { background: rgba(46,125,91,.13); color: var(--t-green); }\n.lfs .cl.del .no { background: rgba(184,80,44,.13); color: var(--t-red); }\n.lfs .cl.del .tx { text-decoration: none; opacity: .85; }\n.lfs .bch { flex: none; width: 40px; margin: 0 4px 0 6px; font: 600 10.5px/18px var(--mono); color: var(--bc); border-left: 3px solid var(--bc); padding-left: 5px; cursor: pointer; }\n.lfs .bch.cont { opacity: .55; }\n.lfs .bch:hover { background: var(--well); }\n.lfs .sblist { flex: 1 1 0; min-height: 120px; }\n.lfs .storecard { flex: none; }\n.lfs .storecard .store { border-top: 0; background: var(--term); padding: 6px 10px; }\n.lfs .blist { flex: 0 1 auto; max-height: 48%; min-height: 96px; }\n.lfs .blist .rows { overflow-y: auto; padding: 4px; }\n.lfs .sbg { display: flex; flex-direction: column; gap: 1px; padding: 4px 2px 6px; border-radius: 6px; transition: box-shadow .15s; }\n.lfs .sbg + .sbg { border-top: 1px solid var(--term-border); }\n.lfs .sbg.closed { opacity: .5; }\n.lfs .sbg.sblit, .lfs .term.sblit { box-shadow: 0 0 0 2px var(--orange), 0 6px 18px rgba(0,0,0,.12); }\n.lfs .sbg.pulse { animation: lfs-focuspane 1.6s ease-out; }\n.lfs .sbh { display: flex; align-items: center; gap: 6px; padding: 2px 4px; font: 11.5px var(--mono); }\n.lfs .sbh .d { width: 7px; height: 7px; border-radius: 50%; background: var(--green); flex: none; }\n.lfs .sbh .d.idle { background: var(--text-3); }\n.lfs .sbh .d.off { background: transparent; box-shadow: 0 0 0 1px var(--text-3); }\n.lfs .sbh .mk { display: inline-flex; gap: 4px; align-items: center; color: var(--term-dim); font: 11px var(--font); min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }\n.lfs .sbh b, .lfs .sbh .ct { flex: none; white-space: nowrap; }\n.lfs .sbh .sp { flex: 1; }\n.lfs .sbh .ct { color: var(--term-dim); font-size: 10.5px; white-space: nowrap; }\n.lfs .dnote { font-size: 10.5px; color: var(--t-orange); padding: 0 4px 0 17px; }\n.lfs .dws { display: flex; align-items: center; gap: 6px; width: 100%; border: 0; background: none; color: var(--term-text); font: 11px var(--mono); padding: 3px 4px 3px 15px; border-radius: 5px; cursor: pointer; text-align: left; white-space: nowrap; overflow: hidden; }\n.lfs .dws:hover { background: var(--well); }\n.lfs .dws .at { color: var(--term-dim); }\n.lfs .dws .noag { width: 14px; text-align: center; color: var(--term-dim); }\n.lfs .bchip { font: 10.5px var(--mono); padding: 0 5px; border-radius: 4px; color: var(--bc); box-shadow: inset 0 0 0 1px var(--bc); white-space: nowrap; }\n.lfs .st { font-size: 10px; color: var(--term-dim); }\n.lfs .st.warn { color: var(--t-orange); }\n.lfs .st.bad { color: var(--t-red); }\n.lfs .st.run { color: var(--t-green); overflow: hidden; text-overflow: ellipsis; }\n.lfs .sbchip { border: 0; font: 10.5px var(--mono); padding: 1px 6px; border-radius: 4px; background: var(--well); color: var(--term-text); cursor: pointer; flex: none; }\n.lfs .sbchip:hover { background: var(--orange-bg); color: var(--t-orange); }\n.lfs .term.focus { animation: lfs-focuspane 1.2s ease-out; }\n@keyframes lfs-focuspane { 0%, 40% { box-shadow: 0 0 0 2.5px var(--accent), 0 6px 18px rgba(0,0,0,.18); } }\n/* Hover card on History nodes */\n.lfs .hcard { position: absolute; z-index: 65; width: 290px; background: var(--card); border-radius: 0; border: 1px solid var(--line); box-shadow: 0 14px 44px rgba(0,0,0,.24), 0 0 0 .5px var(--sep-strong); padding: 8px; display: none; font-size: 12px; }\n.lfs .hcard.open { display: block; animation: lfs-grow .12s ease-out; }\n.lfs .hcard .h { display: flex; align-items: baseline; gap: 6px; margin: 0 4px 2px; }\n.lfs .hcard .h b { font: 600 13px var(--mono); }\n.lfs .hcard .tag { font: 600 10px var(--font); padding: 1px 6px; border-radius: 4px; background: var(--accent-bg); color: var(--accent); }\n.lfs .hcard .meta { margin: 0 4px 6px; color: var(--text-2); font: 11px var(--mono); line-height: 1.5; }\n.lfs .hcard .meta b { color: var(--text); }\n.lfs .hcard .sec { margin: 6px 4px 3px; font-size: 10.5px; color: var(--text-3); text-transform: uppercase; letter-spacing: .04em; }\n.lfs .hcard .ws { width: 100%; display: flex; align-items: center; gap: 6px; padding: 5px 6px; border: 0; background: transparent; border-radius: 6px; cursor: pointer; text-align: left; font: 11.5px var(--mono); color: var(--text); }\n.lfs .hcard .ws:hover, .lfs .hcard .ws:focus-visible { background: var(--accent-bg); outline: 0; }\n.lfs .hcard .ws .d { width: 7px; height: 7px; border-radius: 50%; background: var(--orange); flex: none; }\n.lfs .hcard .ws.stale .d { background: var(--red); }\n.lfs .hcard .ws small { margin-left: auto; font: 10.5px var(--font); color: var(--text-2); white-space: nowrap; }\n.lfs .hcard .ws.stale small { color: var(--red); }\n.lfs .hcard .cbtns { display: flex; gap: 6px; margin: 8px 4px 0; }\n.lfs .hcard .cbtn { flex: 1; border: 0; border-radius: 6px; padding: 5px 6px; background: var(--well); cursor: pointer; font-size: 11.5px; color: var(--text); }\n.lfs .hcard .cbtn:hover { background: var(--accent); color: #fff; }\n.lfs .hcard .hint { margin: 6px 4px 0; font-size: 10.5px; color: var(--text-3); }\n.lfs .empty { flex: 1; display: grid; place-items: center; text-align: center; color: var(--text-2); background: var(--term); border-radius: 0; box-shadow: 0 0 0 1px var(--line); padding: 16px; }\n.lfs .empty h3 { margin: 0 0 6px; font-size: 14px; color: var(--text); }\n.lfs .empty .recent { white-space: pre; margin-top: 10px; font: 11.5px/1.7 var(--mono); text-align: left; color: var(--term-dim); }\n/* heroes stand still and bob while they work (the website's animate-bob); bubbles and blocks fly over the view */\n.lfs .lfs-fx { position: absolute; inset: 0; pointer-events: none; z-index: 40; overflow: hidden; }\n.lfs .av.bob { animation: lfs-avbob .3s ease-in-out infinite; }\n.lfs .av .dup { position: absolute; right: -3px; bottom: -2px; font: 700 8px/10px var(--font); font-style: normal; min-width: 10px; text-align: center; border-radius: 5px; background: var(--card); color: var(--text-2); box-shadow: 0 0 0 .5px var(--sep-strong); }\n.lfs .av { position: relative; display: inline-block; width: 20px; height: 16px; flex: none; background-repeat: no-repeat; background-size: contain; background-position: 50% 100%; vertical-align: middle; }\n@keyframes lfs-avbob { 50% { translate: 0 -1.5px; } }\n.lfs .bubble { position: absolute; z-index: 45; pointer-events: none; transform: translate(-50%, -100%); font: 600 11px var(--mono); padding: 3px 7px; border-radius: 8px; background: var(--card); color: var(--text); box-shadow: 0 4px 14px rgba(0,0,0,.2), 0 0 0 .5px var(--sep-strong); white-space: nowrap; animation: lfs-bubble 1.9s ease-out forwards; }\n.lfs .bubble.good { color: var(--t-green); }\n.lfs .bubble.bad { color: var(--t-red); }\n.lfs .visit { position: absolute; z-index: 43; pointer-events: none; transform: translate(-50%, -100%); transform-origin: 50% 100%; animation: lfs-visit 1.9s ease-out forwards; filter: drop-shadow(0 2px 2px rgba(0,0,0,.18)); }\n.lfs .visit .av { display: block; width: 34px; height: 38px; }\n.lfs .block { position: absolute; z-index: 44; width: 12px; height: 12px; border-radius: 3px; pointer-events: none; transition: transform .6s cubic-bezier(.4,0,.2,1), opacity .2s .55s; box-shadow: 0 2px 8px rgba(0,0,0,.25); }\n@keyframes lfs-bob { 50% { transform: translateY(-1.5px); } }\n@keyframes lfs-claw { 50% { transform: translateY(-2px); } }\n@keyframes lfs-blink { 50% { opacity: .1; } }\n@keyframes lfs-grow { from { transform: scale(.96); opacity: 0; } to { transform: none; opacity: 1; } }\n@keyframes lfs-leave { 0%, 45% { opacity: 1; filter: none; } 55% { opacity: .85; filter: grayscale(.6); } 100% { opacity: 0; transform: scale(.98); filter: grayscale(1); } }\n@keyframes lfs-fadein { from { opacity: 0; transform: translateY(3px); } to { opacity: 1; transform: none; } }\n@keyframes lfs-pop { from { transform: scale(0); } to { transform: scale(1); } }\n@keyframes lfs-flash { 0% { background: var(--accent-bg); } 100% { background: transparent; } }\n@keyframes lfs-visit { 0% { opacity: 0; transform: translate(-50%, -60%) scale(.3); } 14% { opacity: 1; transform: translate(-50%, -112%) scale(1.08); } 24% { transform: translate(-50%, -100%) scale(1); } 80% { opacity: 1; transform: translate(-50%, -100%); } 100% { opacity: 0; transform: translate(-50%, -118%); } }\n@keyframes lfs-bubble { 0% { opacity: 0; margin-top: 6px; } 12% { opacity: 1; margin-top: 0; } 80% { opacity: 1; } 100% { opacity: 0; margin-top: -8px; } }\n@media (prefers-reduced-motion: reduce) {\n .lfs .block { transition: none; }\n .lfs .av.bob { animation: none; }\n .lfs .visit { animation: none; }\n}\n/* the view's own root: position for the overlay, the card and menus */\n.lfs { container: lfs / inline-size; position: relative; font: 13px/1.4 var(--font); color: var(--text); -webkit-font-smoothing: antialiased; }\n/* standalone layout (the dsh tab): the History | Work switch, then History or the work window (Branch tabs over the work area) */\n.lfs.lfs-app { height: 100%; min-height: 0; display: flex; flex-direction: column; background: var(--paper); overflow: hidden; }\n.lfs .lfs-cols { flex: 1; min-height: 0; display: grid; grid-template-columns: minmax(0, 1fr); grid-template-rows: minmax(0, 1fr); gap: 0; padding: 14px; background: var(--paper) radial-gradient(var(--dot) 1px, transparent 1px) 0 0 / 24px 24px; }\n/* the Work | History switch, after the LayerFS mark at the left of the tab row: one window at a\n time, the whole view to itself; a small quiet pill, no outline */\n.lfs .lfs-logo { flex: none; align-self: center; display: inline-flex; margin-right: 2px; }\n.lfs .lfs-swap { flex: none; align-self: center; display: flex; gap: 2px; margin: 0 6px 0 0; padding: 2px; border: 0; border-radius: 999px; background: var(--well); }\n.lfs .lfs-swap button { flex: none; position: relative; border: 0; border-radius: 999px; background: transparent; padding: 3px 16px; font: 11px var(--mono); letter-spacing: .06em; text-transform: uppercase; color: var(--text-3); cursor: pointer; }\n.lfs .lfs-swap button:hover { color: var(--text); }\n.lfs .lfs-swap button.on { background: var(--card); color: var(--text); box-shadow: 0 1px 2px rgba(30,37,51,.1); cursor: default; }\n/* changed since you looked: a dot in a soft shade that breathes */\n.lfs .lfs-swap .dot { position: absolute; top: 50%; right: 4px; width: 6px; height: 6px; margin: -3px 0 0; border-radius: 50%; background: var(--accent); box-shadow: 0 0 0 3px color-mix(in srgb, var(--accent) 22%, transparent); animation: lfs-dotshade 2.4s ease-in-out infinite; }\n@keyframes lfs-dotshade { 50% { box-shadow: 0 0 0 5px color-mix(in srgb, var(--accent) 10%, transparent); } }\n@media (prefers-reduced-motion: reduce) { .lfs .lfs-swap .dot { animation: none; } }\n/* in History the open tab only marks where Work will return to */\n.lfs .lfs-strip[data-panes=\"history\"] .tab[aria-selected=\"true\"] { opacity: .6; filter: saturate(.4); }\n.lfs .lfs-cols[data-panes=\"history\"] > .panel.right, .lfs .lfs-cols[data-panes=\"work\"] > .hist { display: none; }\n.lfs .panel.right { overflow: hidden; }\n.lfs .panel.right .work { padding: 12px; }\n.lfs[data-pane=\"history\"] > .lfs-strip { display: none; }\n.lfs .lfs-strip { flex: none; display: flex; align-items: flex-end; gap: 8px; padding: 0 10px; background: var(--tab); border-bottom: 1px solid var(--line); }\n/* one line: the tabs scroll sideways when they do not fit; the open one is kept in view, \"+N\" stays at the end */\n.lfs .lfs-strip .tabs { flex: 1; position: relative; flex-wrap: nowrap; overflow-x: auto; overflow-y: hidden; scrollbar-width: none; }\n.lfs .lfs-strip .tabs::-webkit-scrollbar { display: none; }\n.lfs .lfs-strip .tab { flex: none; }\n.lfs .lfs-strip .tab.more { position: sticky; right: 0; z-index: 1; background: var(--tab); box-shadow: -10px 0 8px -4px var(--tab); }\n.lfs .lfs-strip .ib { margin-bottom: 7px; }\n/* Narrow widths. History and the work window never share the view (the\n Work | History switch picks one). Inside the work window, by the view's width: */\n/* under 1280: tighter tabs; the preview's History narrows */\n@container lfs (max-width: 1279px) {\n .lfs .work.branchview.withhist { grid-template-columns: minmax(300px, 360px) minmax(0, 1fr); }\n .lfs .tab { min-height: 36px; padding: 6px 10px; font-size: 12.5px; }\n}\n/* the preview keeps History inside the work area: it stacks under 1000 */\n@container lfs (max-width: 999px) {\n .lfs .work.withhist { overflow-y: auto; }\n .lfs .work.mainview.withhist { grid-template-columns: repeat(2, minmax(0, 1fr)); grid-template-rows: 560px max-content minmax(360px, auto); }\n .lfs .work.mainview.withhist > .storep { grid-column: 1; grid-row: 2; }\n .lfs .work.mainview.withhist > .board { grid-column: 1; grid-row: 3; }\n .lfs .work.mainview.withhist > .term:not(.storep) { grid-column: 2; grid-row: 2 / span 2; }\n .lfs .work.branchview.withhist { grid-template-columns: minmax(0, 1fr); grid-template-rows: 560px auto auto minmax(480px, auto); }\n .lfs .work.withhist .hist { grid-column: 1 / -1; grid-row: auto; }\n}\n/* under 760: one column everywhere; a Branch's terminals one under another */\n@container lfs (max-width: 759px) {\n .lfs .lfs-cols { padding: 8px; }\n .lfs .lfs-swap button { padding: 3px 10px; }\n /* alone, the work window scrolls inside */\n .lfs .lfs-cols .panel.right .work { overflow-y: auto; }\n .lfs .work .col { min-height: auto; }\n .lfs .work.mainview .wterm { flex: none; height: 300px; }\n .lfs .work.branchview .wgrid { grid-auto-rows: 240px; }\n .lfs .work { padding: 8px; gap: 8px; }\n /* one column: the Store's line, Branches, Sandboxes, then the project log */\n /* vertical: storage, Branches with their Sandboxes (tall), the log, one under another */\n .lfs .work.mainview, .lfs .work.mainview.withhist { grid-template-columns: minmax(0, 1fr); grid-template-rows: max-content; }\n .lfs .work.mainview.withhist { grid-template-rows: 480px max-content; }\n .lfs .work.mainview > * { min-height: 300px; }\n /* undo the two-column placement (as specific as the rules that set it) */\n .lfs .work.mainview > :is(.storep, .board, .term:not(.storep)), .lfs .work.mainview.withhist > :is(.storep, .board, .term:not(.storep)) { grid-column: auto; grid-row: auto; }\n .lfs .work.mainview > .board { height: 420px; }\n .lfs .wgrid { grid-template-columns: minmax(0, 1fr); flex: none; overflow: visible; }\n /* one column: the page splits downward only */\n .lfs .nb > .wterm:nth-child(n) { grid-column: auto; grid-row: auto; border-left: 0; }\n .lfs .nb > .wterm:nth-child(n+2) { border-top: 1.5px dashed var(--line); }\n .lfs .tab { min-height: 32px; padding: 5px 8px; gap: 6px; }\n .lfs .tab .pin { display: none; }\n .lfs .tlegend .hint { display: none; }\n}\n${MAID_CSS}\n`;\n\n/** Adds the stylesheet once per document; returns its element. */\nexport function injectStyle(doc = document) {\n let el = doc.querySelector(\"style[data-lfs]\");\n if (!el) { el = doc.createElement(\"style\"); el.dataset.lfs = \"1\"; el.textContent = CSS; doc.head.appendChild(el); }\n return el;\n}\n","// The sharky maid skin's cast (dsh/sim/avatars, built by its build.py): one\n// sprite sheet of ten poses per maid and a strip of head crops. Ellen is the\n// lead and her poses are expressions. The maids are fan art of another\n// studio's character: a local skin, never a published one.\nconst ELLEN_POSES = [\"happy\", \"thinking\", \"thumbs_up\", \"surprised\", \"crying\", \"angry\", \"smug\", \"sleepy\", \"shy\", \"love\"];\nconst MAID_POSES = [\"idle\", \"run\", \"laptop\", \"read\", \"cheer\", \"heart\", \"sleep\", \"wave\", \"serve_tea\", \"arms_open\"];\n// each maid's sheet name and colour (dsh/sim/avatars/avatars.js), in the head strip's order\nexport const MAIDS = [\n [\"ellen_joe\", \"#41307e\"], [\"2\", \"#467ab9\"], [\"3\", \"#c53a42\"], [\"4\", \"#6946b9\"], [\"5\", \"#46b982\"], [\"6\", \"#b96b46\"],\n [\"7\", \"#7b7a85\"], [\"8\", \"#e6a319\"], [\"9\", \"#46a2b9\"], [\"11\", \"#797887\"], [\"12\", \"#467db9\"], [\"13\", \"#3d74a2\"],\n];\n\n/** The view's `avatars` option from each sheet's URL; `urlOf(\"heads\")` is the head strip. */\nexport const maidAvatars = (urlOf) => ({\n main: \"ellen_joe\",\n lead: \"Ellen\",\n heroes: Object.fromEntries(MAIDS.map(([name, color], index) => [name, {\n src: urlOf(name), color, poses: name === \"ellen_joe\" ? ELLEN_POSES : MAID_POSES,\n head: { src: urlOf(\"heads\"), index, count: MAIDS.length },\n }])),\n});\n","export default \"data:image/png;base64,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\";","export default \"data:image/png;base64,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\";","export default \"data:image/png;base64,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\";","export default \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAtAAAABgCAMAAAAD3LXyAAADAFBMVEWYm6NgY2uursyVmqLhpZxUWGUZdnmdoq3V4+tjZ24mKE2sztBjYmy6xdJ5sbGdnMIbG2dnkbgsVIcuHBdibIzd3eGLYleenqjc3eVud4XjrKzBvsa3ushGLTM8VmTKh3retsKAfoQ/Pz9scoiq/6qhrcP/f/8A/wDT190oMTlCP1N+h5nX17+/f797iJO8yeP//3+/4f5pRzmAeXl+sdL/v///f3/54b1/gH7Euq64wrrBv8kAAACpyOv5+Pn+/v4uNlESFzDu6etOV22NqcxueIy10/SPmKwnKkqVtNiXu+Rria/LyM+uuMzx2c9paHKpqLH35ddOaIwyR2lJR1KKiJIYJkjQ2ev9/f5XhbYnJjacwurV1NgHBhL7/P03Q1dymMWWo7UsOWR/f39XZHZzlLh3g5VSeagHCyYaIjn5+/2ztLqpqapVc5fR5PW1w9STk5lzc3o4U3VGS2TMt7O+vr5TU1r4+/2iveN7o87sxrdnbIQbNFQ2WYY4ZZaql5Tpy8U0MzoTHEPFvMZEO0sjHDCGfIdpV1aHeHjm3eNZi8FFXIX2+v3l6fBkW2elm6Xm6e+HjKTl6O1me6MUExntua6SmajSwrqnqbKEnMTm6e7GydKxucZkjcJ/f//Ky8yy//9HNznU2uTJq6qzucbm5+pVVVWnrMR////Fx8+qqv/X2NnGytHS2ePP09mwtLu6w8+GiZLHyNH1+fyRlJoZOGVueInPppjPmZDU2eWnqLDS1NvS2eWSmaavs7rz1LsAAP+apLHl6O/c4+6ni4myo5qapbFlaHF/f7yHaWnc5O0AAH/GzOLY5um/v/+1ucTc4+uyuMW5wszR1NzU1tvO1NlVqqqHipPk6fClqbNbkcUA///V1+p5hJXU2uVoTErV19vZ8v7Jys83a6LY2+R0ZFxQV2kkGRqutbrb5fDFx86oqbJxeYiHipN1c3lVVaqYmZq7xc+uh3gaRHJ6hpdwd4X98t5SQTyUhHyneG+VlJjc4+rb4+uHrOG1tLtKbaKzCT24AAABAHRSTlNdpRST/s0DJBFk8g4VXgTmA/T//99W/+2dWgZsW//s///NBCcDqAIB5k3tkAwEYYoC//+V/wQC//+h/5kA/v4F/v7+/f79/v3+/v7+/f3+/f3+/v7+/f7+Lv7+/v7+Tv7++/4C/P77/v7+b/wD/v78/Pz+/v4E/Yz+///9/v7+/v7+/v3+/v7+/v7+/qyO/v5v/S/+/v/R/s7+Ts/P/gIJA/6u/rIUA/4CrwMPks6x0bHOc87N/9L//m+xkJKxsP8BtKuu/v3RzgT+kAL9FARuMZPQU27LA7TPj/8BEtFP/y3/Nf8r/9H/kW9QbrCTzwMHkv//rJb//v//rFTQ/27/hVkcnAAAbPlJREFUeNrtvQd422aWLuyU6TPbe7u93/v3/pMEQBAESQAEhEJSEIsokZRIiiIpySqWHFmWLctxL3FPcezE6b23Sc8kk2mZZDK97U4vO31md7bc93ygbEkmZSe7z+w+9zES23IhBHzf+U55z3vOWee7dF26/ge61l1agkvXJYG+dF26Lgn0pevSdUmgL12XrksCfem6JNCXrkvXJYG+dF26Lgn0pevSdUmgL12XrksCfem6JNCXrkvXJYG+dF26Lgn0pevSdUmgL12XrksCfem6JNCXrkvXJYG+dF26Lgn0pevS9SsUaI67fv0PfsCx69JarVqb9eyX1M5UikvRV/3/sCX657XA/1hbzn30B+t/sP4fuDJDK39/M/e2BJrjbuH+Ga/4P/WGe5ue+uv3iqJz53OPr/sqhHr925ABfITj2Adv/uejNFpPwnG3rR962ze5bejmoaVPD73948H1Q2uk/iK1//ET333gDmgP3Oidne+2bm2FkZ2445t3TLSOK/fW1uSdpLX6/8c8CP8Wi/z4A3ffqeccp2G7js2PN45xb+PUc+d9NfRPLcxDpBGXaei3uX/93ocrj9/x+F52i5v73+bRSj3hjNqS0eR13ZbUBw7d8XY0dD9ORSr1bEO07YKj3nn33XfvSvmuv/h3W7Et6/9ZOiykGrm34ydwtwz5uF2lcXF8LqMGcI0LTbXK209VUinf+rf4DO/bz6VSlcqj32u859Esk6L1N/xTmx6I4QO62Dy+t/L661nPFL0NNyG77j3r9r7RHB8X9QcezVZSb+dpIEapXYZtOw7v2ljrqivwuu1kU7d3eqR1HeX509V6VXfzajo95zZd2x43Ji76uNIRT/3dvd9/7ZVdbzz2cfqTv+T+MfyxG26AeV6//h/pePQveYtv/aOpG3U9HTDmHJLnQNWgn0W30Xyscv1b0Wic76bszjcauixDcYi2fOLIkTeyleu5/n/KU549tv8uRyyVmnzDGdfty96G5cELZPeWRF3UeTGdTmtzzWqj8dT+t7zU1+M2mlGWsLpBu0qL7DSDATXHv9ZRc7QVaO4GX7Zq53T3oEw3UQ/O4Waq7VTI4bsoSeGydzVzBZ0f18f1wpu7JlLMjfpHEL9/JH8eCqSfW2ZXh7i38Bx/kcqm7RwtMtPPgWA6EMQvab6plxvZi39NhJX7s8d1l5fETAO3MVxR38I37+NWveyvUJwhQa/p445t0ws5mTk1XdX1naks95ZWnPTqHTZOfJrn6UaBRmZOl2z9y2/RoeJ82btFW5zDPYJYZLqG6aekKB5J+S6/6WIFGs+elcarAY1n74V9Yzumurp45CJc6f5+Lns6rbs4BA1hHHos5xiNJ1LMi3qbQk2+AX7OZlOpbPaTv4QZfPpD/W/f2WQakHt23TNPGuk7sykmgxf9ZFx/6k5d4JNsZYPJYJBJc0tPV10jxV2kBbkOy1w5UhbrQbmsszvorpxWRftWmOd/EomGr5PN23re5rHhwUBaZi8pvvRU/ZW3ItGcL3VPVWwyXegdeVXGr0n7slTqrZ2uSsN1VNEzg8lzPwd1wZWfqHz5tv6LEmg8+06HiXIySZsVVL0dC87Zsv1S5UKvBv/yLtGeE+hVknnvpMMB0ib2p942gkS/VG79Qqkk1/O6XpDumvgH6Gn6VPaTu47kcrw4p1flkvP9IxXuLbhTN45KuhsMJA3JsvhR0R6VaL88FdKwJy7euN+oi0KJPqXVg+e233b1l57l/gliaewcJEiDral6Ysh2PWAIoq7fzV30GYN5d3LlHBMdTwqHPe2adiVtgrtYY8j5/q+dzsGqZweDquyUSo5ssGcypLouyG9W2mmOde1e67gkGHREz1pU7/0Meia9srYrhOP5FBynhk5aPcj2yeCrQckVp417Utn9bwutvYl7942SLUlOruDqmiblnBs/c8WjQIbenjyn7nG0UlmC4anzPG8Dp9D/5mLdqfW+rCgmNTlk8jlTCUW1aEiuiZYotzTInFbJ7r8IdY/vdty2q80qU/BsodhCBwOyXRXtz/hu/lXLc7/v0SMy79DzDHsCeM7yyPyRFHexBz5b4rVSAXcZ1kqyrKWH00saUeSliYs8qRz3kQknI9KCJPPTfJm3RNEs5Hhb0gKkYUXJNlJt7rWuzUI/YOsuU/P1vCQ1m6Ioy3VslUY3T7tPcmv7G6kjrkji3zLEtE/0pSyMQpudnvC9763K300VbqeqSTytb7XMvPqGoOdc+xMp30ffTtSzS+Ij+wRmEgN5ngK6tKCXGrsuBvKAW6eV9yXzIm+G/GF/LEwXvlAsse55iznjxuyHuYswO8fn9LOi3Fop+p8ZRMe+z/eDX7U83ydZJEGBYU3Sm81CQTLqZzdStu/yfegi9bNW1gKGpjp8ThwpjFhWjpc15rmqAbUspS5ORXO+iuaS2wp9mLCUqJ+tdDgqWQmJlkm389ZP2kj0uvMWOvUJ7HHDwLnI5USxIEklSYRxLtW9JR8fv5Hj/qLTMaN9cl0SveSwqmkayXLa09T8qLxPipS++JYdjpsqd43zoivTficNb9/nXE0dn6umfJ/i3rKbeMe4rcm8qy6FB3RDRxDt8Tsu7HVAnvO8MCrzpj8Z9ocGQn5c9VA0nAwrOSgB1bHdUWkXdxE32inxS2HOcN0oQYYcTWPLhSugS9yvFpGG4hDFvCXVVSknTkulkqJIIi/KRitG4LHYt12Uvvi0VE4OyyJfKOXrdNq1EN1IY3IABXKf750Xp3c+bTvjEMMCL7FVjoaiPT1+yHWI5yGLJTybeFfqghoaBqMpkprXcwVp6Vj4/aESrAUZVU0Q9Ht37e+0YUO+Y6UCbWxJpOOA/8WGGqAdCs4JdTmkFUrv4z7yVvxDeEB/Pd7UdDFNgqemmUZTGySOkpDPvtV0jy/7VI4Uo6olPa/V2y8DB0Wauyd78wXiAw7yLPGCFYI4R3sVttJssbHSGlwRbJqKlbrxQub5Ot8XZd6LBAOGnrNIcUiwqKPTsvdAtnvv3l+pgv4Bd5l9Rha1nCjJ/qQf55VkURYtU6UHqgp4qV/73AUX+0PcD+2yIEMKNaxLyBPFuj9aEgtpz8K/9MmLQSW5m3bqekAD/izhNlHcpScaDYViJNJ+KZHHwZ+Bq/dpzve5NQUaLvuEKOL75nhIsz/kxw2ivaEYbhPK8TAZhuG4vFzpsGEw2kcKwWFN5HO1vFZnp3PUpT0KGuM4s/A05VJl/1uQQpzU358zziFkTAy3j3l62rbrd3G+t4Cc3OTLviqOM//Qs/KqFzWr2+l243qAu/62tR8mLZiKYIaH/f5YrHeqJc/+MEm0H2gSC6JGp6XK2s4QDobBZzwnKpcz835o+HASYiSPJBjeWnUP8qW93K9OR1/n4wq8JsO4M9NTjE76J/2hybB/coeQx/ZJrqDfB1z4gsBxpcCbgiD6h/2TOPFMEqeUqR5IIenVgJ5xpU9eeMuw0s5WKBvorKS/t6U3eqKhqRh9kZTLKjC4fFQspVanodat1oe7pIiQzsOk9sSixVBL//RGeyDfJdcgOZBtvZRqL5KICEVJJQNzdquTfpmPaAENm6clRrFe5qHs3s9fdE5uf3an3iSXJZkManlHypWkfLLuBZsBfa7ZPJG96NPB+Y5VjFHBw9YNWdILMCGSVPfEG35Hzrkjuwbmhjilkud3WDU/s1qxYsy/UqL9FrmgMu8XD6V8awfORlk0DDUY1MsSk6CofxICFAqHJ6fLdnDYSGvjZefYrwzqgOW6tyyY2PZhmJ4i3qzH76mymF8p59NVaCT+HXsnPr72EyEf99CgrAgKHc5YsbfHW51Yb+/kZFKGQqw2mrb7UPbCDj23y3aTgUZZG46FeqFa6S49PdDStNj+ZN4uJQZ5U7L3Zlc5QutWndP90KK5UV6GAvpbpdizdDR6Q5DvsEyHNRDMSeI3OygP7jIpX4Y4w+HBUpDF0SDbUk5mEiiJSVHxi07l9psuWj+/qDNvNyjzPCyzaZqIMXKah4+LLm8Xnkr9xcXq6CHuEJIYZIAa4zxcKkVRTBP3JWcK7wWdWfjMGqQ57uabJmRx0IQ0D/+v/nCvEvZWmtY4jJWe9PsRfqi5shYSn1tLu/Zzt/IC2YYgz0fJoTvKjkMs2jsVmwxrFq8xkIv/wlsH7wDY0/WW8X7ukFgQEsowyXNoKurvYVesGIImC5UZtuiU5Wf3r/lACMBOiImRRPErw2E6F9GWPPt78GUsnGc62uGnf5Jd+z504vMQaIPXcDBCsdYqkwtNt/zKcH1YygjCYCIiKK+kVtr7dat2/DMFzV8oh8KQx96lB8JpjbGvwyWB4A5XLkkp3y1td+od43wxSSaLnYVQb4zts4Ylodi9MKxZUc36QuXjF5XdhQN0qCzwCAcbPEIDzZOfaKgmjpYglUk16MyV9Lsudtuv9307Jw2f0RBQ5BTN38In/FGFx7cIDFdlEAb0KzrKAiVCfsIP8kx+wz29I9Hw8LB/+TUJazQcTPLipGWsYTgQwBuDEkUWOZE+1huCgWcb7+8txib9SRPLHAw0Jempi0MWzmYe159b1Q/19188RWD9bd+yS6IQCieHyVUIMSFkF/adJFrD82i5YmntjA/HHXNK/OCBZJIJtOJfEiDoaLxcUsqR4hCnzRsvkAT/MHeXpI7qEfgb4SWd0RMjnRqGjk7StuUEQYgk+D4xP7Ei/7hu1Uo7bl1OyLRPsaLiSSPJUDjayxSRGUEAnpFD4id8H26L0RaEaNIfC/V45wAS7T2NRnBb2nW1ZM30h8RbLy6CH/Kty5mWlqznEBqEvbeKIjCAiRbFqqf0C7r+7MVxBGAPHxCMul/LWfmWau2JwabiLWVeHCYUWOMl+3Lf+7j2xyF1a8Hic1HvFITMEc2fHCbdzPxnJuVwo2HDciOhmtRZoAkJAgiApBUvsscILW08jOoUbjaZlCJkMCRDT71VFb3/q3/w5Xc9/sldnO8tpPS5D/k+ZoubZYjPV/BEvdFwDM8Sw/890SlIdlhCBjvYFMNSfc2l/pBvXUEWpCSFBH5/LTocPuuSIQzD6lh5skoHpksXfK+npiVz0EySygmR34rFAcpB4h0iqMIfLgoJQeBr5ggvnkj5nm4r0HjYu3W3xJeGk/QoSu8K9cNkIBmRgqrEa9JD3IfbOQhvwkho/tC5D8Ghh8DU4a0YgbRayCWjluZXpie46y4KotdzIX5YEwoUoPa2vJ8piGA4rLjMF9aEfEnfezEcN+661Iu8kB8uCSWEOjEvAIefF4UY+cMiMmTwzIFTXtZpqVOHcpZp1bCY+IAmaRTHhwlGKvr9w4De6uGvJMPauCYKSuiouO6/Xt/ZnkpnCIbU+aSnmGOtBcOL9bAvk2IOrjjAgnsulqfEcZeDlzbxnGrYSBXpjdOf+cwnJi4y/Yl/UjkiDCqep+rvJcdjMkYuK0CFUA/9Md8MNFw+bCLa7XjDz4MIopYHc54UR0cQOn/lrE/mXTBgw3MRbZ/4OLe2ps/mIa2j9eRXhv11JRweJmXR29vjmf0YU5aWwAsJc2AAWS3ni+dut25lqkiXcxkRNxjGERsg32XS07QtRzGczJfTECLlKELV284759xjfJ5cwui514jC1tQ1v5aUEkkErTkETpI/JJ24iI3C+XouJ2uWlKClJrHxdj0UoocaDpXJoRfdep2XL4b70O97brTES5IgkxhNLZ3WENxEvGCyJFCWFeHs6K9X2gVjXPYLvDmw0YqRMe3xS7o03XLHjkoU+ybrUQqowvzgoJCwTP5E5fYOez/k+6ZeggtdLddhCeuTLViKuSyTS0vN68EAL64pQKvIVpVPgMcjSnzBMKqSKwH7LT32zLcujGZDM6X+ZymSkcjIQJ4VKzTMXCl20j0JCANWCKbnxHzhMd9fdnqCH1T2lngBfgtJsaaMFD1BjDIXGDqEfrGkYCNiRsVDa7vit+90RgVBRqziJ33hYcfR7iidMu/49/ijCd7abEGgB0yrtOvsMq10OY7ocqas4YlwtIo1T9XDAmG/EbZGw1+B6haluiuGQrV1561Uv+8um1alJ3TW72kFhky3W05QFgohTbH8k7L+7Qs7HQgxZMEs8rREnje+DPXFTfNlRGBOWaFgI3UxQNAXckpZKMswIYgP/OfcOyZOSUVIB2TXfnXf6B2p8wJDwiV40/x7q0jvEvXnpXlHYie9pyckMnsK7y7MbpMQIhGhLL440d63ZwFPXpCCtjScDCSRe/BPkRWt07NQvMGeRhOCAVtU+OMXEyCAtsdNSG7BkPlMjuE/4xleloVyQTpyYaSey95rJTzvhzANZSAKHxjrO9Ubbukx/KCsUV4ITUsdVpoIBU+KCWum5q2qoslymMDIMBOfryCuIqGUkUwSZ0KmnvWtwfq+Zf0rji54/pi/piz5BzUzxMQg5GF3kmDOPAiBrilm7oqzGm25QN/se0YvZEyGi4T9GxV/mFzEcBFwK2QZcTy9JmxBJiGGpPdwn1qd9M4WePw7iPBwmEXLbC0gfYTa0k7zGXLkResAcI+nLsxJQy6WT0hiIjpM8rzMjWlhZEmJB1KJVfaPyBf2NYe4R8WIYgkhyDMecdntWh5SUreRpQeCyj95vv+LwyXlauZGk8WDUX9pezAoR1sCrShFipk9SCnK8wlcAGNKd7Ql4gCDlhRZGHRzuNcwyW8PULLhJAPMJtlikTNuivog0hzyxXnR3ITmNgiNbHFDDF0lPquE7M0X1zoSnO8j2QlJsMyZUJLWNVyy5QM9TMcyVwp6rI5HSuLPAypfDplStm2+EOszIZUtcSQRZQc+NFqaZnotHO6GHOHdwgRWTGqRfRI8MmV611peInd55QtlIU/OnT+knMUmZEmB1VjafvKiE729ZjeWWj53u5Ua+kR5sEyQDSF9ptKKMHsVv4cIeBvPxDIh/cmqgAPLprn5+nAYgAg+Psz+OU76kn/oD/GDQjkS2dyX2LzxqMlyfBeAbgAl5aTNLELtCS1z6AkjC09CFEbBgJFz8MnFT/p+7YIK+hCfEHmF5Nkfm4oud+283yQJ67BEJDPPF2iowGQuYW6s0R5FY4oajMdlDSElgqffRAY0OtUD956eTUvMzCSEEeCLucLrHSJdSY4MChnm+pCyCQ3EWpoQSh4CDUmI+TUB6yxKTieNuP4sioFs1t4jdS/vCEtKmcZgnJFEVEFDsuc0imDWCFBvLMwAC90RZic7L1YlpbXKRbwsfE9ypXDu3JyQUaJF8W/anzDuNTGx0dz4oMngR/+0YUial2Qe2BhjURyWCAZoNDMo7OhVxO+sid9wlUKG94C6fF5Z2quQppXIffAz8xrWRizZr/RZ4kOfSHHnB4Wf832ee7QAYC/s/eu8pizdZyTEVH6Y+a5h5IEiOSFxonLziqwjzqhoUvgfVaLsRfytPNqSgxiWhDKQw819lrmxb3OunuUuiPUDAxJE5tr5i6Gz9s9bpzClbCJaQ7BwgkWgZGvHhTdwldI+ftAi3wngRtG/6oKGTCp8WhKkEEE4KxlUQ/2+j3x+Z9KCoJL3poQ09dSmoBGa6iZwK59US/Sr3xPLkUTfTGIHAeaFV9590/m6fuimD4iJzREhx2CRHnxIGYn1aOecKRwYyrKYg0IESWTO9+7OpYhevZTvUUnIZZqM6eRhP+ntLFOkDvJ6Xs49s5aG/nLBkswdVpRFJ5oEVznfgqhCVoitcvSsHuOlekFr59UP+X4pkgHbaJHbHfKHDCRiNLZVgKNrMGAwa1MIMv0SIgzcp3DFGnv17v0pmU8otFHRuiTtk88KdLDaIM8lxJCmcBTujSKUdlbaJla491VeKfBiIsSwMT9of9KS/jKRgCBqGRPN8IEEDwAQ5LLsl5crjw/5PiFGSUuFTC9+jJo9hIjRefVEUUn0CcJmAXs9gN1OSDemvryWjr6BOyaVhISf9AMMT8w7JYxewiziV5JaWBxk5kKRKJ/+UW5NDPqOaVHA2yW/4kWYnvWJtjTjJAuDLWjFzZYsXXae9KybqOxM43iBC9ATM6NSJuPOBuXiAPIFMTkdrLLDP7X0mjMJ6wAM4WsTu1LnBb84p09uHuT5zWaSYrAo7ZO8pIOiRS/sJWf6KF6MF/gfLseklt1k1/e+t4spS3yt26pc0Dz6ar2uqi1afaDqGJKgabnT2S93cDs43+elnFmzmOU5GiLLk5ZbKECoIEFysO3st6JAoliCd9fGj1rv21XI1Uii6WAXQ8gcBMfynkCHklLoaBFCNUV/J2O/conBkUd9HbPF3PuyJ0gQKdkY1aa15D4/PQOQpRAVHch5jdxYunkRylt5x97bl+eRzgr0df2VkrWjb4Yim6mQ5kjOWYEOyQpzEKPkjfiLCQvsHOB/r60wPv3cZSbFntA3HpoVrRUJQTjrcySLgMETwo4a5Pkqs2bmrNOVtfLMl/smCmUkURFZIFTpppAZrj3cvDD5MzEWf4cGYS5w0838oW+tWUsDj+M54A8W7RuecqDoxQcEyFB2hJGLEMvT6UgkeHnFWYXE/HWzOa+KrqiEY4i0d+SE3XYm06iXYI38UWN7PA5biERCjLme5HNgjcqliVTlvCTm52/OvshbCbheDA0gHSE7njdOSy0yTHqKODiTeC/gJSOHsuclHYnDCrJ7vrof2Z713JusGgPxRLJRyOVyo+CFSaV0i/ipJ5JK7rl3dwKkb+fAkrKsHSyQk7VkPHBYpiAVD6DkZT9JjheDUbDLJzYLgJDf2c5zeUzkAWpuJBDSVLTqWHx7wzOr+aAmYwdB6WDaG2Abn8jNfKHy5U6PdLPvA6BEJWh9QiEZq2vk/UU66SAjdnUFk6ohyWHPVvuhSKQXVwQJ65b5mCPwgQ4wXyqmOdthUsOTnkAnS6Sgw154OWlhQyzTFMWVnLJsKQ95j2pYFs9B0aDWYT2jSxl9v8X38QJssXlV7aqranDm7852YiQig5sFT1yYaaXxWYRKsh0lhx4hhgcpQW9AdoQ+KHzrUOfCN+42VIeY2JGi57eENkKAh+k+DIMJL/lFYSuxGX62MHoaFWvc2ZXZa5xUjZNoVWAe9VMihs84yC6NCwZUYSOf39O1YSxed/JaiVmO4mbyfUWwTvQ3H1/tcHLvzD4DNA7Oi9XKqWgQTSfquSt+raTgiZBWo7fbgczuDnPjTH41b5MoYJKjTxv571HYyTkOI1iBMp6TQsTYDIcki6eSA/jRmmCCYpJtj/uzh8veWRiskQQf0KSDc7NdTqi3l6KxUpDtZJjWBioFwc9gomYmHspyN3BtFMajL4qJRBEWKzZS0jOZn6taMQqdqOWTAZwM3IFiqzAEOgH42ITS6BBDXYeg2TpgmV6med98ML4dJ14pwoPOp7sC6ReMgFZiiweFCYUiS9zQ+vM1NMf9EBUBGx8Med6vXI3H1RDbbyx5IA1hpVMaI1u4I2H1zZCPWFqOvXBvmOCrIpEnayGNTpeswrUkX2yqBbglzUQfzwtKb6j7qt8C3KKY0loZkYqUEBO1JJPokDXgCZ5/0pwMLwvkoPWhn02zNjCSKNzfOZ7nnuR5cfNI62R1j7SwxHBIWYEE4gnphIj8m2fRLo6rGIuLjcBCJm1krPAUXpJ3A1pGKPGNQLwrrhnz8Xi8KxhvlEpeTmwGhCdRE/NBvdFQV8aX3M3ZexJYZsgGA6U0fFuUbxns5NPvEV8yxdTDfBcLcRb2/gur3NbbfMcA0MkAeZx3AQTcZTOSuFQuaJRyZi7ZcDIkZhgRvsAXR0LSoU5YG8oXj/1NzmLA7g4x4x7MOKpC6UG/TKAoHY8QyUQYAs0Pjgx0DyRKE+1vxWVlMwxINAbPTbcz39BkSJxfM4JdAYMUrMIEGgZwECHzRt7IdrKloMb9/W+ZDEasIY83NhZvSLKmyYaBAlU3k7GlEsUZ4d6BEFy2A1JqeUp03dnbyIXajh0PMh2mRBUVuyRTOt7T9P+xComOIhqPkVaEIoMMWStQ/6xcoMgoVDIMmQCfej4NehwTurNO9GYL4ncgFo5e1Q2BNkWc0qH2L3V76luFmdqI1cozF4tLEaof4EuMTDuTAEhPXx+tDyS6xot3ti1844ZSqe9altk34ynoWBQ4m+cnhrWazPL0UWZ8wsUERM3asWMkJz3KvZPz4p27dqcDL4x1nYony2aPgn+N+k8DVqp8+GckycFgvGtTQ58N5Fs+WhEqsfCqmKzLAacxsfzIYpWTllW7CipBMFs+MyKdOOTaIzZG02lHaxEGwlEojsSAiRdzUqtxkj26RFVIzjpf6ridQRpd5UERaIUFXniQzLvjwUCVjyCq0cQn2pTjwL+fqDbeldVFYHP0/QQ5KGYyhvH70Txp1q4u2nVPoP3Rvr6+RF/3QLfCF9pVtiOxcr8uhYmUZmX0gH0wN16X4R40qJhPzcMU1ZgcWAL+g8+5A8mDdty9ft8TonlgYOODLDIdkZ2DmYPj89U96SCQUpSnZr6ROXhQYhoopIC6EBblyie/mDpbKH9OoE9AQ+94kIHpimJsPzUWTMua3BsLUx1F8P8rSf7JGkuGKonNfQd29FnTdy9/nFekYpjILFI8vhBCsFTPY7MNkuillEgYbthmwaLYuUjVpQ9dkerk8O6v3Gn1wQZYXrwNJ+ysQCtmUfls6CwYac5YAH3NWm1gYGCj+cP2VqwizVyFfBJzy7RYuHhGU3o8lwW3C/VeS8lnj9I1M8MLfRuvusq0zDs57nMsNvjrcf1wF2nhOC+Fa1ggqRQAuKUU0l3eFXe+kclk9LFSK3WoWBFZravVtOoYdy6zGtCmbySsgauuGoEZoBcK/x/K0flAsCud93ezcBA2VUWEOKW0AEALioMk+kh2eVEEBNqRxaDGO/ofc3vFgiEG1XLNI04Q9BeNtr7MuWpQc+tJMyRJ51sv/P6O3RLK++dyYKRBQwu5wHxG360H012NfBTPEo8bMrEX2O3g1fU92E1XotGWmsa9aIZ6KAM7IqhqJlcoszV7QUUDgIMuzEeNeebioEAa6CokXW9shwCu990BQaxZCnmVPbVChqyGjUWOQ9PPZsarY9tm4dyR7zClRKMb82L+Rb2p3rWz9YLnfOhUtcD39XkBgKRu++1v2Cqpi3weLocxhx3j5Rp9D1h94DKbpWfuWwGRpnMAOPwxRZod2yPDt9GqROvX8nX/Wdpw0RqxQqERAIPRWkJ57lz7CY4bWl4qAmVyT66PoJCNLHsV1lAGtiTQxTNSlKEnLXQ9YVlCLUTyPCCJz3BPt6shBOe8RjLKFFgsrMiIcmOeQMt5xYMaoi2fAzZkBAJdswpf9MxHqmmoh+Pxa7CitmAOwHDmm0HVkRU56Mkz/GndOZnJCB68BL/MElDdoKlpA5V1Kd91y7kplmIOXGUqiTKhSeGpmqbOvgAyQahE1S91AzKgOlovE+g6gsKRA8iElfjmxP5lIoT7ODJS25LjcNmniOUEItMS2YWFui2MM5kTA6UMA6lyf8etP48a+Rn9pBPYlnGcsoawNFp2As2MKOrwpBDIGTivwbgsRz2FhBi1TxgpwrQO1BJ3txXFl/JYXURMNTE4H0kkchDnOJxeW5/LzNmZQi1K0oNsolSsARQYEKV2BpoCXsm0Zljq3S9lxKooJvSuOBY6GPiFE+jq2oRjRmEG0r0xv8kj3a/NbdHB57hupQ+9f+INXiGz0BMumnYGYTwOmoGKySqcR5wTMYMsGpMCBc71TH3nSlShLlI9QNQUD2YWjHyomK8Gmye3GMGqcRYY91MJ3mSNIKJh2dz18aWqDu48VPMDYg7yfJVFLg4EWtbzTn0pXYTuAWy7mGsePgpsa3PI3z1Q22ERrX6oXaaZlygUtRjEDldlurln3yRWCyFvLD+cL3kJcM+hEeDlQ0HgdFg/9cL57CKJWXwsDhBUS1iou0ouzMYPj8ERi3sS/cJhhGT2OB9iWJBZNMW6gf/Uat2Qji+jp6E+DbW1sCYj4Op5C10CAJg5CFKArOWLYc2IX/PwhsOyUmQ4q2kdCFmwZbytrtSv/dwdaLYETO4J+K1UU2AXltGP/UtIG05ILieAW9Jn+UvfXd29BguDIqevbTr8czXthgD3RK1kwPmzPys36MWCVNrcFUf9TbNlHE0kEPzKQHf3gGLpbXKpvr2oIewFdyws6dtVaaA2zTR0UK1q/KCr5jK5HsJxi+AaRa0R1Obl9F+2j3lSH79fy4EVCedJFNRXIztMkawFSXQwvuGaa65B2ErBudIbCymoJtk+tqgGdze8Q7Yk0Ldw+1NviAp5U4AqyplGI1PI2QG6Cc6YBKpItZEZbbEfDoTCB2o79797+eNoooysfdQS5tyMVK3XnfT/Mwdj0UCTkXqLnd0Tg0QrpoeKm19Y8upuQDjx3D3Lyttv9v0hbx6omcjHEr4foripesbPDOmkrHYZJUpDtAqgYL4PgHs3kxsp3dguKCSBBkQKkPTBmocr5Bvbg1ooNkVMl6jc1bWH3NaY4iV/gAOKMuCeEb7wHXY6OKBi9uEA1lOdJX7p0aMD5u7Z+AasL6XjmIoOxDdtiiMEZslvkx9FfVA9CYE2jPrryx7pBji8KJKZmbH8LCYAdMBn9JOZuYPSdi1dL+XzVezXhni6xI5seEBBrseU7r3709mPrHoxbt2bDxjVOyf2gp2VBOcL6Y/i1DJeJDvswO/zg2VBQFxgWiK6V62omMTxGrfjeJFNXWNuXYErZaYDs8VisxqkA9wViDs/d7cZAWPATyAwk8Swgl3ZsSPXhv75Ud+EJIcenIr1hkILajxfLBpMCElFi1ZmVgWnAloVxjkK33NE1KXCM225qNztvs9X8gUKL0JhUw+qB44qo2PsXoFA1yYI9JV7QkX4vlPwFEx4d8E4/nZsm5hdIdDEhU5bcpE8MHhTLqKDER49mEjTq1WTTwziNBeW8AUlNlk4nb19hUDzMtzamDWowQKjpklNH06Pu7wwhs1dYvH0xBBAe9U9/nzhPi9eghTeJYviQyuAXyM3A0drhrwutL4wAl1pw3+0B056TEa4Ok94UotfJMG3R0wl1IZ3tqUgY9HuL41YYg2FFKSTpygRQr5hLzF9o/kuApFD/klPD0UtUwrlZ2ZGCvLj3C2tx3usqb8wphoOdY8S4HMn9PiGDR+EGnt4lgQCimzThg2b9oWI5oSaZMmBemtCPZcad7++asu4ysdO1C0zfMBjjB3I6Gk3I0pb0jgx8FBUz4cxah6mZ0IB3Y8ILNWuyv7LN6a14aBWAv+Yx3JEu2PLqb7YRaCSKNYgkiWAmz7erFdWNDvl0K5idoxMT5daLqHFyPA+I3DYyBue3QlUfzvz2zAfs2rRwxRDA3RaQXETzfwHzvehb0CkIkkJsNWnju524mNanR0LEuiGrOSMIChcxNH3T+E+5r+r7Jxoj3J8hNzoSqkYGqCcQ348Hd/z67LRClZwyiDQL+sHorjVRitaFARAlhviG8YOjzWPrPChYcaykknBEYp0wygkLczMCHyakOxgYHhm5sfoY2FIzEUrKsR5UlbRZgwxilrIWHdCy2VcCpcC8Z+7rr3bjudbGBsSD7HuUA/xtCH6IXEds4EfRWOAEUvil0EmWOuJ03Ihl2DQFswLJcGqQIF6KC8HfxZaH7QCTwRDNZYXz+e0wOVtDzz6x2XvURDSWCGPoA15gw+shbp7mIbG7YbPnDl6wEO8gX9EQUzduT91DofmJh77vm1ToXnQMWwltCNixEme49v+6uEr/2qWCfQ1z+87CupMOJrbFzD2BIadnN14rdLmebKVTxdCS+6uIqh6ht8s7KHtIrik6/e/Zm9La55T5e8louXEu9q+1FAlD++xLksgIkhUlRiKrcjltxgHIFnyLAqj3Ox9SIose60j4zjaGzZs6ErrEYTaoXwzHt801vKjAr/YNqY+72Zch9DYJU6Pyddv3NmWtMA9zT1WKCSoSsUcHcNNu5hHFoBarcqyFFclUpX+qWIPHCrpdzhfWy7P9f37K1kue+c04ohwTyiU1F+Ibzo1Rg+0KT72V6cCXRs2XLNpukYZ6YQpl0dl9DPqin/wg5vGmg+szBQCLqGFHqDQLlkSA46k1MRkkC10sNZdHAEIlWeZo6JCYYK8b6VAl6TQxt7YFAgAYmbr2M/iXT8zXGfWUV+uIofW44GKCpHzSY8jw5O3P0YCfZ0vq/C1YolXV1mxbCUpmsOU2VHymqPvSeblfB6lpHm1K97khYyotDTHAGkORHq54c7ENC47XDBNliAo1oxgOo0jQTSuGDR012GnqSPI8qjIMTMUjUrSzolzbGZq9Zd9gLoOBgGEarl9yqDgdJG38TL8uUdO4Yv4NRv2SLCAR0d41JpB7Kf3iRJg8fNg9hvW/7JyrxkuhgiUjSJYCezeMrpD2BMgDwY/vgadmLGbTqtsqTcaQpMPjrvl/HLfXSkpH5TAXQNVtU6VScv5g1SU7sH/YYkk2iJgs2ahXGk5VnLsXvsXJHbUACYHRvC0Cs+JSTMAhZ9BI0GGmjwAIcZ7CNFhD+VOcL72vSSpQ1FDtlBDqgjP03Hviv/okQ1wzQL4BtXtRj46hXfuHcDJ8Utf59pkZ9h9U7J0K868rGBbY0dlTX9hw9gHcTAWtz38yCMPM/fe4I/GQqZVzrlSMFklge46rC7O3bpSQ7/T94YUHSCaJqKLkIPOGnIpHwx2kUgjNZOXk/OUE6VKFvieMcXMrxJoRTKnorHQDlke5RmgBWNGQbuhhaa8SgOFvNYYq203TdAvoJ1Rm6BY3d1Xm4VvrVglZHu5nbUigzIkKZfZmuHzDvqyIhcaJ2x9Th+EMqDCN2h93Bd6Qcx3qnpCM1XfhIaKZiq3KtYcW3DtqtqoJ/P5vJH+2kEKeSWpVZMTHTjq1wpPLs8393P7K7t0W2s41KJC0xVRyLBkxtgjV175CBOB4HbJjPllSwevFD7aqGWJx7Pt+mn3+/brqEDupTQ5zNR0YHb39AFyEZkgzf724qxjb7U1OquxgSLCbPPuNi91Xf+xyp2yaEh5cxA5QapU8ve2WOjRVtIo2vKpeUj0DCVozNpGy3mFe/cyxucV2xZnxw4fxlEVpOjRXDXOBPpHs3ChPOu+KS1Fe0jZhxWFlYBLTrZDG1kSxmxFEkOTiuA65KzGf++Ra54/TKuzaUx3vBYE106Rnla+3p4p7nt93WXjVX0xKI/CB4K7UDR5Fq8EA7N/dc2Vj0DvBw7rcPtgcctbF4ztwXSVekEcTqv6929a6UPf4vtlqTaCWwB56dYMJ65WvSYszI+uGnVtz/xRAnKjxRieaabwykqXvlQyDxDyIEnagtMCaOHcxMfkfJFBZOFeYvYgMKwhNDQT1me4D3MMglB6r/7sSGlVqw8k6JCoIOwBdjljoN9jrh6nRH5aPamXD84l5UGZFeF1T4XMKXoiRepct8L5UK5N1Z8oOLAyLk7EQSMdDwbrWn38IH8ws2hnRM/17EUxtz8q6yv5urenuF2yiIw3OWB7rDMozBi0HdiKa66J/wwLGjds0V/kE2gM90KwawxRkJjMdqD3f3UagtxL7jZEz9kTX/j1X5e7/m9vwZAUg2Kbp5p7ilOpr4pyqK0f9fETRj43WtKUMqgnlB+c7CVSCgn1EqrkFS6EawTcDAxcNfDnAwMlPl9599K8CR+H2uvHbGJOA1fnQ9Hc1udJsXb96NQ1Gx45TAK9YcMsomem+wcIloFpfahjQ9f9fwSi3HMiLxcFVxinAu9Tj1x5Db0Q/JoFsQgzDe0TI6/WcznOv8nrjYYzZ6jN8YaUKBZrPaGYkpBInLHsGx55+JquwKbFgzDOoA7IuhOMwzoCRlOdcUd3Wv0t1y0LEu4qlYsAIoCH1CRdjX8QQeXPcDo2kTWMxx1p+ijY1QimAJaEpL9JrWyApKHzD5gWyvTC9lZYEf8gPrVJpgrwGJgdTLOTblcGFP9IufpxGD34OSM15dqre0dKO1fu/y2+VAncGGL5If0fkAfBEyS7DPdXLs3kEAuIR8O07crAQC9VqPtrcsc+gDg3gYI8CZSHKpgz1YIgCzoDpQLGogSirz4PSJK66cQGWDukSfF7qw8Hl/2ETS0sIbxg8IPFlNli2/rs2KaxU43driCYopBrziOXNdtwRY3XJjp2LmmUajV0qiCmTlTTT/3LU2qw5bdizeAiAvtlxD1Kyx+VptuQP4GxHtpXKr2aB/ODH0ywjHdUYYVzkGnF9PI70RYaPYJsFtxxFN+ho9tKBPn96DtheG1PG3aegNkxWHAS5Idp/zZc48iaQqSi8FSRRan+gtGhKAz6/v6dO3c++2oJyXrJLCck4gRsYoFhfIOBdl5gkPb0Yq/MkGadaAdH3ZSq2liLU13BWZcv51AIHfrbvzUHRcdrr4ezNrZgZ7DWIG2KqjO7adMGPK5ckBtXrFuXbfEa1y3HFm5E1wxTwRE6gG4sTNGT1fjRBjpjm+LSDoIF4DggFZY3Vmf5bixZ1iRcUIvlGxjyg3fZ5EiETsN/1jxqJDT0gNkbG9FocAvK1b+wUem+VukVf8r95XmVpHLUZIGEVQBcJs6I3pYHtJkauC0BSWN6jPnlMQXNXV7sTE7yZZMm+vigwjbWMzOO9sJW2W5JUDDXZwmjAbgcVHtLJJhJuItgkP7rlUmI9cg8QfsAb1EjET4iDPKoYt3tnty9e3GrLVMJslCaR+eY4BaU9Pql18454SssGX7zrMOTQEP7gigwfeoakub4lYDPsOIU8uzRZbh2k37KYKIC8pfnY+tDvns06rNWPxAaQZ6U+czRAT/rvUQ1M7AxVHCw5FX3mYhcwB/JTR9awZbCc4FV60DFQYsGFu19oiC4C1CHG8au3NDF3OD56R0Eb/p7WNwUGpELd7Xt6A5k3AGFRdL10YIooiSFNwvgT+uzp07Nzi7arlskHGYKoEAsxIfIOxxqlwFz9FnmpwYNDK6ZA+u+GDtq9ZW32mj85+j6y9scfbcqbAabfN+r6uyGDUHDERt3TVTa9+XAHe8Wo0dHoMhCfIIRXoJdD19z5cNMNFVHRLjbi0RXNDSTkD6wugqCu0eizEIvyiDjwbHZR370MMPV1VCNOU21oumB/cWaMhCSlKzHsvmiWYMHfXWv+F98v7FaoBFmPsjIp0URcVapVGhpseFaqSipSYlMdpgE+m+ZZSpUOvZ2oTfbF4JAAyTtMfVAIyLaW1juCZRLJNJMKZhnZj5MxxW1NZp4xXkaeoh7c98+6lm5QByrQT0oR0R5qx4fM/SgA7POC7kkrLeT2wf2i3Ik1QI1WYKOW/EsdxVMDU4HvmGPoge3I6cb3PB7/+KaR34UJ4kemz0jEw05OtAbmhRRH3++/Nzme8oYDQxHlJCJWq9eVscaGlnCoKOyQg6o3++V5aCM2yySp5fIT5zX3BuO9OkmSrqJXbUgSmR43AWVsa1IJY45PAKUGDRrNxAsdDOQqm0jbwBtTRvS3MQPNKudnpYsxaKKm21fennx1JZMxgEFHVnWkQHIc7nwULuXok1qQBFu+CCEDc3/02PN3KglhmSQDgUX2Y0t+qxRFVUZMUFfQkwmQVGdHXfzDHMZGmpXJAsoOl+TE32h2OQIj1ZVpOjjp64kVY3eqAJstqIcSCB7Jb14z3mYeD+3UxLJ5+DReyH+V488/Ag7akEZQHpUGalZIyyrEbKKMZikZ6n5BfVFGulmAj2yuncWdx33jCgnyN1E+hEtEIxGviXQgSqy8Wk5xCCX2LVTU+jTYgr6CQBHnQUaqFGtiG5QvbGiFJxHyfZCK54P7lN+/YDR1dCo8wgIXFS5n8jp+33nM/OfnT4AhmapjKpBftAJIAmDNMyCoaMlOIixfCSS3O7oCUYTM73iVm6opaFXSvQJKaqA+gj0ZyoxDTcl2LXpyiuv/BePsAXbviCieInixl5lUqy3MTs47McNW0WvExk0FqRTGRZkal51NZgvaCBIxM/QlFfjBUgA9iAcEpOVz7dZoooxN0u9bhcycKUGI4a9FaHi7OwvxpEYEyScuuKAAk+MIA4xf6wtP7Lfd5nO+pvjJ11WbXSa5TNAYKTdOu6rowMCn+gzR6AIi7kvyMb9t7fPGHy1uc0gRxV6EJIdBC1WHKR1FWRwbF1ni67ucQKjJNB9m1Eut2DbNtrM/AbXsXPS7cey9zijxARTLCUnzEkwRvFN1zw8q7uolg6ZOwaIQTAtT3Dnl0DArNfLqNs6WkNBcyD+8MMP0zHvaoCyLoHyM3OUuINKdIepyLn8F7mPelsrmSTQ3b3mvuUxFHKIUGxZByWtCNOAQ+svILvjuWMMqgfLRAJHBLHQFHTRQG9UlO/o5HB48yYm9AKOUiw21RuVZjeNPb8wtoT7q8aZeeBK2lHqTtlNqq3IP/SxdhqkIouSYmGJE5HEoAuPA9cgtI/BM4HmN087lDanSmWEBOs9TmXq0aeeSWeXHw+sVBWVz6EdA5DahODupu6M11x55TWbgNluN3QBVZLgkptHd6DpQra/bZ3taUNycyWN7xvYeBVrfzBZ1M7idsBmMaMnz44ouXtwImEegWy2a4rAvd/3Hf0gMICgjZMqTGtotrPn5KyzZ852BGAfoaPmRkQ9vSOmH719OhTr9w+9RwcwJuGnoOCI++RB6L/AaAYVQHs0J5hEunIQfEeJF6WnMFcke+5c4bR/jjvXoHFcBTYGn347YYa6EYyQPEdcHBOUZwwO2uMaHD7w/vr4CLqgS03p0x9ZpVnP6w+d2qtNA7FHS4iIADjLPfnyl760sMUVIozVVrrzeP7WVIfW9hUDHa5RkpfhkVyOM5sVd9DFt0w7byqSDEqKqeQkrbW//b7HCzWib031mtPnmE79S87HLg1cOHSKHBAXNhyGYY7HH75mw8MMslfHdJFKF3sh7jFTluSO1frYgI8+Te3yCwLSoMRokZxNYwxO8FKz9Auy33mWlRyYClEk3w6hwNL/jbkjdADkEQoKtTyVsMNES1DVEZ6WeDP+Cq25cRvxNQJtPoXE4N1SYaRgG6vqiStoaFkEiT0aHUlg0xFcbopven7xZaeBUwLPzb9jx4CiREZLz7V9K7TU1Ix8/oyZAC+k2yONyiidatVOAaoPdqEbpay0yFikoBkdI99O3w/d9Iaz1TUMVDBHUMLJY9OFPepCEz3qhRmrD29lKQoYr1LHxgzr3+/b2ywEhqWmSsPAXNnAupTQRgFyLCygGTeU6qAYyst1dQLNlDuPI3vDaJ40AmN7KJMWD+p79sGV64tE0LIxNxghf6ihReiPwGQVyFjmk9n1t6zVffQ6Iuxns8+9ltdIAaEx1m7JXjSMLcl9g6i2Kz2DiKDT4Dr8WeW4XLCUgi4enNMXHH2bPQdUldfRUxrqC2EUurnXpCefWKIQ9fuuEBXS0D0xS1qOcqRaV3ZnjZ8kgq3O/PF4EGDkv7iGfT1mU+lK1DSLsSK6Kz/LXc6tPRU1G5REMFkRP0rEvMC14coPUgabovlT09NwX6ai3d2hv73WL38vNdS2t13qVWvHARMVFxEQAYK8cCY3iDS/pg+SIuEjgyi8MolPxYMDz1EDlydFa6TWrYjV1TN5U0CRLdFKiIqw1cHszt3uOHgTs7th5HMYuUE96w+I8qcr8Lza15Fmj4MugrYlB0ZaHWJB2jpK/d/o6ypjFyWTsp91RvCTHxxjfQBS7U/qrnTDFcgvABhZJkcqssXRMBkJfzCqlDSEe7IhU3fxTv2uKieoWSiVnKf5sjs9LYDQo1O9J9ZHz2BtQGLkwU4gXXgbxy0DNlLvev/ty0bK3dps6nNzvGgvGGMLZ1R8EMZvUDRypBUzfDA4Cq0B7SFM16XSa5j+QY+EN7j55t9YSR8993ZEwEzdj868g5GkKvA5gd+zp5ocTfRtHr2RfeQvb+lYZZKaqFQLzukguBmYuydktrrjqs5Whp4hAqsj0zisVp3LX/p+aiqfvRrQZE+NuDOtGubUTxEtF9CzriDaMOZgm5Uz3/gaJZ6DQOg3QfvEn99GRCmETVZCCSWs0rdTx9rMZPWaSt31LHoYXU8Yzij5A7GQ7QQ3qVD4Y391DSE45LOpIqFKiA57Q71WaDrbCXKrHJ8eFQs808vBJNKGNlqZ2pkESfTgYELcMcCorYX8zptQE/ktKUEhQrd4Xo9D5PsrqjZdzgxmRITQmKYl8gZSBAD/MVkS1AsUBponUmu2F8I8sCCsZiLEKjmhoVFY0aoTqJI1Q15TYi2+AeSFvM5TocLlbZ1XTP3Y2cT3jaCFpJ0RcijP5wNGhkx7RAjtnAje82wFM83bD17Fp/f+VCqg7/8w6wg7DZ+Uz2S2YFaV7GbstAFnjOQygdBp597lqhBaI4vO+H9WWsbg4m415M/ciZLW3TbGqcjiZooA0QJIz4hGBs5suhxBIx90NZkuPLATu87CrQtNwaLuI8ftiOAmX/XcRFslL7EvcoKGUq9RiTq0/nZUBAWylSB6cGpiREc3T91IRhLM60HjTgx8yfpuv97TmoTMWb3dn/0s8OmjuY8tmTPu3gIqe2X8YJcsN4pyY9beCoce7fu3b990anHbyUw5dHTHTB/KG02+dOfEijKnz51bnn7fUwi85SOfIYlKqVhVMRYSXd1ZtPV4F3hbDDM7vOiiS1Rso/UgHAZeKK3rNAcG+ZnAr8sSRtcINJ7JSzsF7MhmmGUBOxkKsRL3kqjRE3xM5AeIPjwwck/q/Ihj//2ftnEwxoEkxW1B8svanP0y0DOD9JqoJY/fD8dsaI0OppCGQA4CHWVl4pq8R90u56PK0Sg47ATcjp3MiEmvmYpCoBmRNTrknsjXvxXMewH5fc1uJsv4pMYzX7UvEXnod1Opve/zpW5a/jCfW+7/yHYhD1KJCNq6JYgiMGQDbjmh/Kigyriej7AZEfWh1IpUTOq/WDlMAhIfX/LMKXwmzQbjXPnkCb3sFS0PRmjWB6YpIVGLIlKIcw6jktWdNzFBYiFS6j3/6T89xULNdZ3aZtmkHUcF5v82ZAFnDEy9C/elevr6Y7smJpI000JQgQOgoqcl0DikAiZPTRz7ry23qd/3flEq9l6NHnyxSUKRW99cR/2YVkc5fjqdTKqvqvW6v55O8qD2unO2TemMPXsyIJHBwoMub+V3cvs/3zpm/R6scPZpPuz7Pi/lS5pz2f7U3mOVpCSWrZKRVpNBQxw3GFg+9vyXtmYK9dCAtVHhLVksyDd2nDz2NHf9fm5nUEP7koyted3/QcAD43gzzJlsSXAvTEkrOJ/GEt+YsxQS5+6N76icp/K59alH3+GWM3PkSS3qNpwVlx/7ElLgQahIpEazqb3vvn2tMaNQB8+JAO14SpcCL5UIGDBkpX4mn2+owYadOWmAlJgnBBACjT5ISk3+Cdf/dAe3jMOYsYztzVNxYH9ymUjfe0kQUXn7mYljK7uDLI0r9X56tqRjJsu+EJx2RZEBQo+Wko5hNBrzbFhUy+l9EBRe6Ydcq1MJ3eGVglXDJyx5WeUcxyy3Z+53HT+hQ9djPeSlAVSqQP13BtGnHhjcF0F6Zg7qPQ+JuZGc/RJp2/YCzVXQX5wvj6qoV3MzhUBJgDjm+MYFBRr4xLFXDKcgOgaM6CD5PUA3PYGOCNK4a8vPZbPcMa/h9d+JinJtNwQaDC1E4J4nwr1UCoWgmsE5D9Hl6emkVNIyZagyYxS11rqOhtfliKw9881dq0NUMhFLZuTDvtOors+jUKHxRmXv/QHD1tngOzU4nBYPAqnfvWULmB34qiyg3wrNF9m5Znt57iO7sjdKZT6CSH6fnEcPDM22ZYwFoAiRN5HssBH0TqQ+53sWUCxT0LXc8bbY7aEcRraCe9y1YZs+ygMI4u1txOlQ9YPjvF05O/7hlv5/482SX7XQlWHrwe6BmQKq+MC2iMrseJ6aZTOHguOZ3/69TfP7JkNFqtVXilPhq6IS73zVtwZUn30OrXCXBnIZuc0JEuhEQvSL4n2YxreisYPvI+dm26P5EvRAoSBiSExhWgfjHk0jx6FNDV1yZH4BLcTIPFsHagdEZ+LsyDvuA9aIcnW3UihklzcvYSAndws31L+eHMZbUToDtEWGe44rDZMvEbqEJjzTj1WoH+b7KsHpGQslRspok8Szg4bOyqRQJQQ8w/J4WqMAOGLzD6wEVG9Y3mD77CffwDCVBWyzm0G3+7LgpuVBrA20tDAadCS5qUv1+ydS+2lu/HEIdO/VVJQyGbI+0OrmhWpdjYQZEwCjnkjThQ7TNm+o5Zwo8Kj8DwZAMhMKyft9KWjnpcKrGzC0+ApQ6AvvWgqcMRJXtGaQhqk37q4gEQWdkU5T+lxEhIpE3+5pWdSTNvpTJUzlyfQz9yD1sEYLf9yvchoNT2WgIugbrBmwJRqOBy9sjhDIMY3OFkk6YujTxPdCnvHfiJlqByVX5IM6IdAkwo4rzPDlrfomCneBs9suf/nZqnO4Fnu/d+ihI7tW3OV633MiTkxthnqfxHp6UeLfwiFZzcFhVEFuGDsDViPIkUCRa9294YJ0rGNQx6QspboCDj+b98H6yiAmlNQcqr3WrWjcxSaUv3bo0JNfbUU9XOqOZzAXPGNv2/Knf5pxthtzC2xctJps2M6smgZ0nFCUkR18zvAYAeCiwMcxi1d3o+b2tU5qsp8hFBMqv5V39sEHlRsOBoUFnEGC8iKJ8jvU+yeOVf5jLsIW2hTvI/u8ruMMEBdJo6TnKCLJvxUClHvPsnxw/6fag2QVHUUGW9KOrc7Jaqac4RFeIldJIMCZ7bpKA8ua+r3Psk2+hwS6G1210SFn9D3czZ7X8DEpHyXtvEycQ2jKEMlMByiVhYuvMqiMekqdvj87dC5oRouJ3IhZwIC2m5fSM6dFcYQfPTOcbNy7sJBOq4jlIM0zI1eZZkKM2HscHZ2YbQDL0v1ZSOLHvQQoIeFDbapKuUfz4xk92cD0AFVFk84kXQbhHGyNhUhBu79CY81P8Eo3ITgDA1a+TdyBFW7SED7GWQ8inkuUJQ2iRBgiHlHAPNoh7zn2Zz/wO6JlSSvbNoLqUhgpgkXQR5QPrGCxQCVh8dlFr9AxQKyQRYnqCArIG/aO1LRa7sZUf8dpfL7UztP38oJTN1AIqdUdwdWpx5ETnB2HR7937x+dI6vTwNn8e9H6nb93eXePifub9vOPPPLIy783tt2xHaDr8TGaRht0VJmmCIloRXdXq8UIvt2zIgoUu69WNkqV67k1uqrufYjXHYOWG6ojmUYVBBQ2W21oatvJnuax0ljm7plDzHPp4HKkGiCqNBZsIicENdvQ3a2IWJe1RETaIFWpVFYrn37fXzfHjPgL28AcVoFwGFIDhx2tM/DtbRlz2mGOAqruiLfCrazIiVrvtd0AhxFLibK37xjcCMJedIU0Q1ufSeYy/Bm+TGgkEke2wAgVKLiTznbj4Iay9/JWN1TBS2cfC/WkKLXdaPGlpGovQPjqmDiGSLJ21Z+janZwMLMVQyGB5xCwBBbQX/af3zpuuRBW7hb5g6LhJNnAeizvMOYx0sihUTqyAJgSQu7IxO/CQwbgDoHuBVUg92iblPx6316d6vvhJ8zaC7qUzEXQ53r3IpUtAcHfbbdSILf5Ui/mRgZoZuDpZYYZjyJbdF4sKxkyJycBfY/oqn3ytzPbgkEPWgfn3UDFBriKMwkFfYikXL1yU0euy+crqgRMSdMwvTyt1qvEtQYEYwS3/aLLEYM7r/ddf441mr1HnAFlQcnde1ZeoD+Ocdkx/UtfemTTIy/v1rdtRaUk5hgHyQPaDb8XccY+wJC7buI8PnWKeWRIqVnJbGcKDtqmYcSORvVPaRU/0rgjZtBj8xMJEmmDd0b7ioQkKSOihwZ31NBg5x0e020Hmp7foqKPEvT+riXmIXUDfiUviYWVTgjjkoF3+PAYcQO277ZZvzUnExmN4IUQnUaQcSzzdj7g6MHsEzJ4uth06GcIdEFqOcO3Z79bIoEmLQ3SPGlqyDM6pA3CPYB2hqlIBl2kMoDn8ECFwWP9MNcq3CpDjLpN8YdnLSQOyYm+kY0WlLSUTJ7RSDdT66ar/vzP/3zASiCXtQeePq1Nn8DyaK23uT6V4lIr3w0wdFXGQeKHWyOjz05/Rb3A9OZI4r3URgch4X03/Vr2SQAc3dde2+vvFQu72ox4W+97HbRNyu8ufGOrIw4O5myEOrrwjVmEhWjjPvdtiC8pw9RLvKlcjbrUh5brjiHunhGS525rBI0+kCkEF7us6ye3PeyRwkCWw88GH0KkWtcKCHaV0nClw6QeMKQxqlfPaGoV0YWaHgZGNVyXx23I4ZYXALzodnXn2SN+0/5KPof0AUxPIbsSKwWovG52z9i/jM/vBoAj2qiOMhpxGGv9INgYUEQoVridZOcWjtNyLANxtSlOfJ7rlBLj9kq2a9Pk8WBwaeQuBDqIRA2TaDcoDzLuBFQ0ut5zXAeBpgMLnuzhw0F1HPbH4I30mJHewj+0jEG2C3V66GUmrhbo7OxYEALdRR6UagvA36oOAnBH0gddSmPy7KekGkE/rBlzZCPOFiQW4K1mSh4wdLPvMfEM09BKbYdZjLacj1dhdLUgP57kD2ImU87LfyZ2DECi/wAxBH3rE5BnyNHIsqbc+PNh3tpoWSODqHfPoYUZGuvR9eekoYWSOxdIMgOGx3JVjzMDOUpl78x/33ltRRH5EBp02BEKLILLBZrGYoCchGdJENZeCI6DxgF/gMStF3Xd7Ts8r+cqSBNjk/ZsBab9qrzv1WRpX10fFBjaldb1G70zuf8d/AHaeVN8dBmJoh/dqunodn/WNLU+lJYRFUlx0aMozijwsw+DfxN30El1xyACjwD4Cmb+bzhfuyIRMtPcTge+oTrPpAb1PNCE6XS1TiE9amnQ81F33rjr2WMUrt1w+QTGIND3vsrctaJFmbfmqW8f0fUtdgQBO/K3jfHxJoDbgM5sYHmwdMx38xDZnYq0EX4vNn8jGobc0kmeT4Cx58pG8Jz2AKmimkYYRZmahCvU7cGBz15NnvgO61Fvs9oK9FDqFTHD+g07DUNtSHSrhUGB/3csH8dxH099ojCzcQDd6YxVAo3Ky+bYCy+wivPtwNeBQwNgQa2AgVZV9FIk0cjzS5HRPtDcmLGIkkBH/RrvUW0/7Ps3ozL50MUdO9CpVJEx/gpYB5xogc00xQYl4bsw4CTxW39v1pCX4+AspyYskXCFbiLbLhPovDxNKcrEjtoBxWpJM/2EPh1Oddau7s5EWok+435aRXx057DE86j7Xt51esj3VR3OIKxCNV0NLpdn2EGZYHoKfSOa5N65c+JOi+0WGEGS1ZYYfTl4AoKjVtEEztUL0yzkyeObAubU4ZK7zsTlQxwi54dybJFwLJaTOoYA3rC16x6wrKvQ6CTUDaa3dhKVJpucxefHxhBdzrqUIaHJZ7AaNpwzKZjqYI0rjxUAGSXT8+feaRjtcJOjwEYPOuCFBYL23G67eR+a2vuyl1nevlnPcLdx542U8325UhX4V8UzoBxq6OlCA76NJIw0UxqC/ijLFHAnLHIUroZ7mE91KoBBQ+8yT6N5gsvkGbOEA2Kkj8LCsqDJgjUAee6d6haX2jmtawu97YRtt+kWY6gobbIknY1kuvi672lGkrsHvioZHTO7qtxtyPfH4wb6ZhExE1IHrktVQ2OPNHuOMnmqJNFCtc5L8J5JicHlIIFGMYTGHyFlBtMOJxquBpxfSDSUtMYkOglWf3PBoeiZ1oe3CFOy/h6VRSJVg2HOzAxw3+7umviBcw9FhW6qigmHGx+00FnJ2tjSzrgsvnEYvTbnUN4lQLf2CREduvXfQ/1VtJkZIpWWsiu04nf0wL7NfZFBmXyMc1cSQ5YNgTnQvAsOXtkqyHmL3o1m/CnmxHqu3fyGP4CPSlUCAIvVumbQhYBMI7YTfuiEHu6fOAT9rFx9tVIrPLcslYGX+nrNE+jujYmBjRuRz1cAGfInt738JVvf7drbtp3cBpYTcAp2UvMBSxqwxBOV88NThEtHENP2oeBh+7m3QoSQlAOlzZT7FlEl34Xi0LRzme/XPsW9aHnf2TTbTZWAj3RnDizAM0lg/cFhykcgV5NO25s9XSboCJ6wwhJboKlYzXqjPcaB8Q0SM+mYRbNcfQRhRnSyhREeqPk0e5jfjMUG+BZ+0kag8cePFhB82fNMMc8bDdY7G/Qkvvx1cjqGuCcsirAh0HeuHu6GFfv+or1Ij7Cw1RnFFBE4ZbQ+kIGqEGF4S99m9EbhrWuvRtb7s90gjkOge4hsgGb8bIpiyhmlkPDogGLuUI4qTEOHgERnXHne2QabDES1lEuQlccUpL8fMKVXsJI/ZGsEzu3yiWpYrRfA9hKt39r44MarzKt+fFXrom6BY7Og3s6iPJDfDAUrjNoOMrOV363Im81r6bjes3ytMdt0vKpGkAuutkbeL+lnxN8kOXDpE3xQRYNOVJg/SPEO7E64Vjh/3wnzNXKDlPPaEoR1R/oI2B9+wdmQM26ZZrSIzVtT3B2WZ8WKlrxcj32K+0BBaQl094+vGvjxCOgsIxFJVcde2AY2BYRvDDhDkJLOlNCK8PtgMRRzJP/KecLz35DQlJAUjIwGz3lS1GRGrcqUK8RxaMBvPRw0ms59ZBpyOEqw8d0zR7h2zfJSh0ZRqSarS3g2daQDtCUKXtCMzq6Nx/9PTuVrtEAoeCxVOtCvftchge7brKfjyzy8YLVlDuHd8WpamCEVhgo8i3/c198+9Q15ekIs85uBvNEd5l2vMzzOOz2SVoHTsdOEPFMDndLEedyZIe7vHHt8dqy6MK46eiuZBmIBBLrhuarYrfl0oTzQC3H+7NW91HeXqlfJ65DFIxXWogo+BwM3Qkc1dLdmiIdclxF0Y7u26c5WMCiC9JDiACEYPEZsMBiLVloRmyurMv7fxYCxBUjHgz9GV7mWigZmZ4nOGCtNdhbUJK3c5lGRP8LdtHfioYRy7cCAskP6+HLYFj56YzwI4RDom7ckGj1OsNpIiJIjxWMsV2C8D7kiINCId6J0SNvNt0AmQooQLJJw0U0xsJ1c1+3Ucz+wXQtMI3jenIhkxMKh+6ctVNgDtlEAcXxqucY5YrEeRiTrtd9CdPvjB0H/I71zGHUZVUKm0CYGJQiuF2lgijAlLRXrxeyHV7f3Tb1H3E6ihnOqLpNn8qMGvU+XG0QNtfW78QxZ0fMVBmojT7RzFR6XSQsH1WVeAmRHlV2epYtBzFFFJ7tTTjCPLDbJn+jkcFzhBHgmLvQsS6cDx16luJweKycj8w+/lxRHKHeoI30UxCSZ9cMKLI6R09KcZYkjYw/N7UxYu1K/hsbovSQ6NfGbvk+1yThNHHKaTvPQ/Rq/dE5p3Af6ryF5TmCLsCXQHIQ8X/2bv4kWhWE/b8oam8gQjZbEJ+h07h2VltBnCDR+kEBrZwAax2H+wBh3FpFWRRdUdMoSUUTyaXSV/0Suhlv2TinmZcuLXyCHi3uCurXxt6wHIcojVsuHNjdaquoVbMedpJ5AP1XRdI3K+koeOQC8nmLdvRK2vZl7ak6WAa8INHKN8ID5eaojRlSZYOQbiJS6eBAe5rXX4kG6pxjFTTyf4Dbku6MJO0VAKk+yc3bzgW9oQfQliECgBa2KykSlCOQv1lvDsnxqxUDtEVQyM0XZTTmFAXSRLpAZPYzmIfEqoScIYtAeREz0McPBkylD6uHFynlQZNYQA9MRKzKKbTp8FrgJginV0oTgt2bg7tvN4DFQ3vkD+H69sW6rzUGFJgJHE/Bwdbu6zO2FPNroRpZgEi2oVZBBCyN4fGKZWK918jju0A2qA0J0GSQDlibO8DzUCNaHEuluPlC3yJtXiEF5lLqrdhBo7tkG6WIBFmsRiOgLX2NvaaTTAhNG/fjEnbkBsncYk90OkGL1pNlKKntCdJaFp9g4kU5WAr5PEz5Db/e10D3Qz8MlSS4phZpUkwqinvf4U183WzB0lPKFTKDzwNzmwA8IHKbq1i51cd7IoHDEnMwniZuEqRxFODBTGCD0APcbKypf7t6CmcdA7h6Ev7Hxxxvhefw9PG+zT6yOBVgSYn4eifQD0+ggHZzI3siL3nEtrBrUBDmcgzEFC94lbkGQfA24iMN1nogukbK4x3BONrSCJQ6QWoUrRY2vxJ+sHuyH8ugm7RUWebNbBZU9uHzvVZf8XvDeNEMszdCGUZWP+JEVAFmlQHFgS6Kvpvx6N+ouA7P6C8iFzm9pqNQ1BJoxIG0mK5/gy4k+ZQCJjVfOG7Ldzz0+7hiQ+4hG7lNXSxOiqo80IaIvRAZiOZcp5+Q7uXehjSudILSjHDl9fs2S7/1SFYsxiLNxLpCj6AlSyFgh8OtE8Nww2syEGSNC64jaafZdtqljzBmWaZASUEmNmhDQdO1BwslwGwwCF2n+WG+UatELZ3tLrTtPQTsSnWugU0iLINkTR8eRAJr8OgytdSV8G0DicIB66ZDe1nYGJBFkj7gYCHjO9UkH5hmHNFIu2zI8aNhR1KOGge18/VFu4vGflsAK/u4Vu1KcN7GePyvPHiRNEp2ktlbubltFXhfbRaXWNBPQRNvIodQEClJQPR7z77BeX8YoQ+VL6ohIuhDNKR6EMP8YPVcwScCy+nbwPCJMVoVlgBDE8wX8difug6rdq4lktGoUBE12m1MD+4hsE8HZIz0mFXgQ3mCVaSC5aj+PaotgHdyVA0sDNKMjP1k9wWHI923RUFmMNCgGlllnb6yEzdYZBlKPgOvQS0yXYuKx7AomRYVmY0CWr/V0NEn0SBndeIgTu+gsbtu2+PCmrjS6phKznjJRUpJGzSn1+yu3ny8+D7gGlZVFRMqDqAyyw6NMDxK3fjOoPDLGB5toyCfdk71xBhVGA7A9ufz5vL1+37vEEhRoOQKgLe2JNPEvtHS+7DH3UKeLrAjY3g+avdeytiHiJzrmLh9znHQSFEDsuWMskCXUJHF6K5RqBN5G0LYzo+ioPkXhl9986Gzdy7rVD/XVcaQwiElkBOZRo/8z2nDmiUeY04fZdxYp6Ktjvbl7OiXhr/d9/BD5mq3hNUF1Pqk5jI4IR9MIJEcjEtqWhDBQuOSii/8Sp39ZW3B+X90TY/Kgo0v+R0jed0DS3QY1KEvzqAtLzMAi6tqN2Z33kKmnwowd0yttfCUf4XeI5cxWkU+MbNwIAE9wRRFUR1Z7+TUa66cyblFZRP4v8FoC8gy/TLEOnV9Qurfpgk0gRcpU58bru23kZBKQZnSkQhz2c9TV0y4mcc6SmsyaRYVL4morP+T7ou6mp12WvkXPomX+Jpq9JvnN9OdCMl1Ai8VechD9tULlLz66oouciME+U91LcSETaAr6KUkYPzkbPPz8ti9t03dLPJCpQcEGcKoV6BXFdjQp7ghcw6ZAhygZ9KhN6LvmeAAJXtMJ1JEl+ixMnHjXCcuTZ79VTZ3Xzul/QTtTKemSUkX4RR1U8D/OhsPQFrI7iVHD4EfQyNsauPZab6TIv/F9qtNY7LtdAG2YKOuS5tINyqpR7QEy8YHg2EkdVdtCHxtxhZjwJ2f7uZ+vofXmPE8HdlTdMzZ7+INo4hZsyjIzkWUXtjIxQws51VMsfJFrPyGFe/qrTg6YndoC6cFjRoRBuT0rAnlGN0p0jU4Of2VYK4jVCe56bv16j3rR75GduKEK7IlElyJ5lwkm1ygqww78zu9IwlZkEJB7CGpswk8C8iTVgdnh0MP6iMsFmrs99fs0YWKzoI8Fga2Z5ojAN1EoaYyrGvH0+SZam+yWkmIGSUwezVFK1KS+e2pK4Y02xzX7posJr6roJd7BKaAB6iXgdhiV8PPn0feK4XhuQjAxlCJMFapRMc2tGH8Ho5Y1bNupUnYy4s4DLUsv4SVpHHtSHMJgAaMkpD6TFVv7pdwKOUStm03lVt3nLsTGIp+mKv3g7DZqfxQ//LIOJQuWNg/gFY0m02RYynw++0fcap/jUX0cJLRpFrLTxPOkniu7LquS5DMi+QvIEn32swo6vFrwOFCPEauLT3Kfa1P5chqkWpLoCNhbS9k9g7lkEKhpxw4O416ITq9FgpimboTE57iOKpq7FUxhdD/lEbdgd4QyD0MolhB5L/582+ImAA3Y/6NUVuenWRAdBPo/cEeQPGP+k7Alji4J2KU4MljstObScBZ2bIRnN0WlTB0npHDHpTwoUSzzTbAUZIAB62B/A2Y/eVAOYNh7Mj9uS3ekzj3/cuoNCl/s0dEcDWWNYHFdaIrduq7bwqjU91548rMooNSMHFV34H9kJKwHEYuBpOMXC+d2n/tI5ZAoYmhXpEEdONC+ZKSsp1k3/rFt4Mi5eB4ZqSPwiwQW7QHv2MgAt56BmTb11ki73CWK1BhPGo2UXabWZQb26xnqTLvBU7boJyFoZ3gU+AK5MeVVPaEwFec+DFvzohumbtKqZ+lhqFkaHpkQaDK0T1RIQUOg37vaVryjBGBoamCZQKPxt3cs0ACX0e6C2wykiFHj4SzA+6wbqEixoE+0nf2+1QNTHx8fxxwtHHBaaCw6Noovl8lbiUhGFYW/CJKvvhpjQcAZYFvv9+fqqfOZezRZEgNnbUpzD0LdBwykv0ViHqMYxkV6RoZ0LpkVmouEhoTf4m7pTGi9y3FdnPbGKDxVxkpjvTWMbdse3sAsySjEg3xSvyR28qGxZ/fZKJOTbVLuc4tjcKLHbPIaoY5K1aScYAAoGUKl1Glec79vnV2VMhQ85WleL5L5wlYCvOAzQjn9Yg8vlcTcaLNxV7ZDlRqRv/7m+Ol9NHDVfX72+T1/arNmEV2OnQwUIjayvOnAdjU5WiY1kjhQrFkbmXmOon38x5e8u6c57rWCsqMvMaoFWPMntSE0g4y4g/Z+ehCMQhdkHDp1QcNliJwsDsAzRb9wS9zLtZuXwH1b50HiIY9uGvojGWgszupboZVce/EUk2dVLMMNkQ2Jp07qWhHDwp5eLULHbRvpTqraFAZZHpYmwCbJF4OShFaEKJq9FGawYZXLWw17i/NkTsOf9y5J9J9vvGoj22y8yTavnwoAdsSElGljECOWS0JPXas8errNsLC996J5P3Fq4T2R5kqURcz0QoyRhGXNhaJK92+CZoUDVlQo/Qmyb/sZ5JzvD2wHnFqe9B94aGXikoG+MyiMIqACkyhflrzsMIXMVDpmnebWKMrhskFnrtmEA6PtM9AeYbvaWETlwgJaEdDAlQARAqU6GiMp/DpfB5QDqvJWHYy4QD4H/uhBKP1t3/gGir4FEZuHYLV2LUFagFgna092fpKUZCN7BsZyGc4qyPMui01EgAPNkxs2IOmEio/8s1zq4/2diVaEXID/4c7HT21a3EZyiF362QsgAI5CiJNpxF+BM4MsoQGb0VukYwYzpolLZGjC/wqShMHsSdZICkygxVKg1dMpHviaDiARqb0W54V/L+nG0ZJC90H4jeP60fYz2v9aGucdR6LPpRv6lxCC6QLcIT5zUpdBvdMd6KPI6dTeI4jlo1q98IU23V0g0VI14ERYDkVe2EfH3hWZI4N6AQ1oL+rZIc+koKP8odUffz0XIuy+uyXRA1dtfLCloJ09LYB8U3wx7VBLnGH2hiTQDDYrN46tYvkTDeopWxyHx6pNj6JYVt+HyILQbM2QMSiOlW8pvb3XQpcVp4hKhu7g3+X627sJTcAJSZFKp1jWAX0xdVHHxhvCaHkmd4Ad06WpO7FwQe842c9b7MoRFM1KMkLw7ajrOPny4tYMajIc2vy0XibFbaHuLWQd4jri0NdXKodsPa0OE013wXYxayWg7YGroMq8CEcVKw23ZTI6cg/34Q5Pst73eFNXqXAckVe5zPQ7P0pKwNm2adM18DTTToR/6WOVzgUwqFjg/n+ENdROLrjIJksyJds1NodUdh+jCO0JLAwCC0JiDulhlnRkyZmvLq31+qFP6NMoI1zK7sS/xpJEcXaj4OIeAAkRlyU00A+HUZTgFCMRRv1+xVKHmdZDbMrk9yVbb0i2fZIc53gcEImsHbriUHPcgVM1iq28lUj+V5Qks3R+iSzpnvsa9hxSGThSUBYuOkzoLkn3Zp7tvZjvpSvGJi77C6sGfpPCEGkESWxJRyOtKXmCLLZCzFOzwZfTaTg1EU9zqwAMCISLiM17z1OuMDxPHPqeKBJrh7ixhjE27u5uoEMIb3pjsaO9dMLQbhMjvsiRKiIBekt7pfqkbaTntTOSiABjM4Yl4oG2N5xmBN1s5Wj0b2PU3S1ZZA5ZbFLmb12jSrXVUuVWozkubtl28ktfe/iaTbu37JuG79mkuTI2JBqVURhVLf3ZGkWyvr9IfbqhH5Tg1AHeoKSIY8SpH5yFbrvsrViiWnqmxaJv8xw3TaAKhEbrFESeXE1b0ig8OOl+Df0nNgU8KEAQ/6Rju1DmkO1xguR5wU3xwFrG842fJEQ7IhLGlYz0PUgQoxlCLuNaKtbHcFlM6j77XJfzZ+vRkDvbttjSXtQ9G10fApIbcZGpYTA5g8sGDXTW6qVOBOZP1ipPhZKsHLnM2YL6cQj0poDsqlkgjqnUd3Rhn0hJwO8wzC/1yq0PGHe1HUCVOnbvXANuhoEYgYg2MM0RWwS0ZDiuwvjgUep1Roa5WKisjFbW+14BzkG9iadaTocyI7MlYjM46Xr+r+IvGzhaFvBlNmdWRX1pH5EF5/W97Z4HYOCbOq8voGuF7tonXx5Dd6EM1LM3ap0aMk1iSDUGilITQOAKv871c+3LbR9DN6IGEHoEAsl0EBxp3d5mZ5zg8HCYhpPAu8JgArmQD1PvTJocdMsaJW/rPQjsd1X95bFTG64Z23TKnq+kJtTSOI6+KLi5XRP3AiwoiUt2Z10HTf9s4+CWbdtct7GgL9r2n27ThQNHe0NTVAxFs06p47nSvskDEUBvmjC2OrvdBRIVJEOAjKNIHwQ+NX54UwumgsIQvrBmnf7tX1eb5BHM262MY5Cp1m2LQQfwKGVtyC0kJJBweqWXuqpPRsNnc3OA2b6O06R7rSsRrCxtNtCtH2HuoD2P7OdWjPjDYBucDQHZ6ExV7sONKGV9Yo0pnq1jmFLHvXZnoKaUvJle3HGXqrEE4pNwN7yTZZk6noorxu3mfDKJhv2jhANQOQ/QEp7f569jZu4wUjbFJBnnaO7FVdIDPEGsk0RjJDyloosjludBjy8lib/0yDVj4/NqnwUNTQQE/BBZA77Sdv2+84N5D3JPPebqiy9vc7dA64Cwl0ZoYOWH0dQ0SbM8h/1yofDqq6Yy2YOe8OIvO82YxNiNN0V7zp7fnq5uwQ2fnz2F0l9XdNAlFUIN+qS4DwcZw6vQ8Ono6Gmuf80qzpZM/8G2MXSzhG+o302/rRzPFRBWuzyt8BG0bFo68+s6afqPiQB7jD2L39i6gD5DYygtm2TGIllXMAGERh6bd7Q1FmRCKg5oh/FZ3Vk4SWxWFLXy7lyzYe+eJZSTLfpuITI4vYbPcT2KlGyJbdJZpsvYL6g/q91IIgYDQCp5pGhBricOoHcsCkLR4d8vj/6Q89RYtiG4W9JNRhtEu1jjHCf/1P8G4vCCrgpbAL6yJMA0gxf4ILxXYv6FxOHU02s0bABTklLQ/0oPMt55QEYMCWfko0A9B11hcPRjSxVU/b4OVoj++d6/1jPubpWyK3Sf+ZNQIQCFAxAhzJQ1CzINtZ6MTkri+1beheLCkSib5BdGA82B4oxVQjf2gN5oveIvtqEt72IjOIpeNsPIB2gqGCckz3ZyXK+0jw763+/bbyOGnDe22FRKE4dOR2ggyXIaNfhol1zIlZ779HP1goWh9tr4A2uEP5g2h+hr9+5t+hZaIbTR0vjCqC0WmriJlH8ixX0kdVrMSWi54DSzF2wlwBE+fO+i1zbCeYCK476alTOEnUt0HOCWnA3h13XQjr7fFTEScntA3XIS05apjhjDrJKYC1HIyXKhDt7FZBs3E4pk4sRDhx4YtxFWYE3mZxd0dMEY1//VZfI3U6m/+/62xUUv2YK2OggYjq9VRn4rn+HtKhIoSU8/B4Lbnscwk65tDbY58Ms9eYbA5vL+ZJ3PRTEkNOofnU6lgJ18yPdttHHdEgiQ21JtHmyeY00cdn+E0940AluAluOvA0iWUAu1rajbUGgeDeDjE52aFi3fup3/edG7qZG7i2UI/i13H1iz9q3n2Mvcmq01JsBPsbednEMHuAX95JcWDWfreEHHaOWcrst37jxRgGuBhFLu9GoV7QO1VKa+SKzme2AQrYqE6nzG9fqX1+3D11y5AUs9ygNTlhmth1F9EIzYnWv3h7jv28Htm+Lz7palPPNw+s2XSiU0kZP0l57Zm0KRcPa5Z9AxVxQf64wgf4jSNbsRmKKyI7N7Ox3WJDTHPS/e+8Azx19fyqDtPIJKcTQUSl1QoFlFxDEq8SGBpply3EcmfojdFVAY27/yOdZ19GDhY+JJ5rdsJTcWfOgyaEDSeOHez6DZjUi9nmXxh6ur5fp9uxwIBpretOKw4Hb9pfe85zuAilgboMre/10f15tG0OGNLchrOB07LPZnb7TdvMEfJGqMV1xfdTFcaezU2M8R2uW97iWQZxcOSSOXHM7zeQwDYKMvcieyT3MMPERpr25sFQ2e2ga6Syq6KugYID0Gla1RNl9A8pElFRCAjvPooIRQDP3gjq0xh3xJyWZvdZHrg5fqCm8uee7H1n0sxX38YjaJ2MPiArpFzqoLAr9lYQ+SBY6N2uaSI6/7ThYbz30LPahK+ZAkr1Jj3NDHK98bRcQ2qcGjlYVpdBpBK3AeSD2eCBXy86dOjaFlg8ESCHK6StWY+CJpOPY3O0Yu/dx9PGugs2WQ367ZuBlPjQyzr//JHY//CeB0PNDTN32ZmlD9T+/5zpotLX6AmXHIGaEN8tYt06SMEHR/InXu4MCR+DCK3D72h394+r6LWipWFcj0msuTy3R7lvuENO58jPGXcTfuAgKNVuTvMIIGiszs3YZqgLfJVx//5hXfrLCuCUhXFBQ5n2ucf7gegqRtlQO7xZbmshvZcyf3j9BrIvX4A85uXZC3A6wUOgv05TsxRDT4KriIBJbIHpotLpyCQBs2Sg4kSjpTng6QcNM18uK4NrHrTTTWCEXrEiOQ/jdoaOzhVupamVkIGqMuO5qBYAk9dKbPzM8jcUUMFWShIvZ/7nvvVprz5dZDGM9JKjr307V9u5Yb/Q4bnBJ7t+Be1ilEXnufDrnb2dHPjXpRnS4Gdp5NMpHrt/cnJfREM87H/C/nbpXQoRoohBYZLLyqTSMvnGQcDLS8K2y58l+ecnJJzDgCuQIN3RAdT6PWZ/6gXU31d3oxJDF1e4++RxXcMq+XYEL576DLv29Zxovr2PlmxfXvuRTi0+3bA3uEhS2yLNpI9Z3wenSu0qjcRa7UEHeHLdlzTinjrms1x+c+0ma2e0cNzd3Lj6Phic0voF/R3FzTvnN5S45vnVBKkt6GGvB1itkjkiiw4NqwH8ve1N/fzy2ZXtb9O7X/dZTJI0efMToJ9Kd877FZc08Ef+jPh8I48P+MaWH0940z2j7qkIgWR0lZyqMuwsAIoXGWc+S++CSMtVhoVLD0NEB4cCvQ5cHByHtH1SAaCCIZH6iKbgF5PlE+Y9hQZoZL8AL+0RZDBfQv502RJBogjl658GJzvkOCk0xGwMq/bImENNTfv1a/tFUq8e9Q0UXt0tCexdAhSq50P9ujm9lNmAXMPvGud+1vV/XCZdPU8tGk9idEcxh0RZl6bA4Kkhxxp/dpog3vHM11RGQ1R6F6q/j6/jUsPAS6kNExY2wQGGJaJVB8F7USIB/iQ+u5sz2PIEef6ucuoFCrLtpcYYSEowtOWhosZx5btaB4wQ99qv9iT/4QdyuP9sKUL3yKVU11+P7rOiHJlSZNgRXQORKyOY9EyH397+rvv41p6PUszqycP68OZh6exFYUraM1FgLS8b87bxf6mSF/fZwaXtmPcx29uftYBlWICF5NABI0udFRfsuWLfg96usJ+WPTbgR7TrpiXYVaQLLWqXceX/eB/a1a+U/upoeBt/5eZLa3bt2a0au2/tNb86IN33Jaclzo6Hke7RVsoroG5zLNkmjkLROTFTUNNNSnL9QnCi0XMvKr+yJuOfLdt6OhMYZ+i7tVb9jAOEA63oPRu052BQ2AW+9bM++w9w9/+l3da1RBdfVEL4FGzmGttpBadvmgx3pCf4Kg6M45lV1reFJ/6VsHoj+oKuBNCDm4YYPNygUdrw7PVpEyDoqM8FZihnKHgvsG53v7F7kcg1pAg9/Mf6eFr7Tdn44CvRcCJdpuGWd1i25v3bqi7Jjr/3DH2Q82dSyIbM041Tn9W+2CIgYRvO4gDP5mZ4tz+UTT6/jEs9LaiHu68sldd3zCyEvTIkYfzOnQNnO607SbR7zm5J/Cz5+j1qrZZfVXv7wXTYjwInieCBEPXfuyCSqsu/6J7+pIBPOZLUmv9BL0DCTlG5ddgWj5W18oFI6GQpJ0wWhlvW8C4+Wova7An357Av1tO7N1Htwo0Ih5LQ/DjGKr1WmY6/r7Oa5jPhWHWCf1PDjIiqEpnSEde/8Pbpq44rLL3nwJ6fnqbhG90Ozx3eOf+fTZLmxtL5pJTSoQY4NZ4xMhMv82hRDKxBYKEqyskOepPS+fkdbICV6UQAMJGMVOZvQ1D1lnDa0fpBzW4Ba84lYXjMDVBmP9+rbAOvfHL7mDnrdwb6Vz+OFLvevy1BpxBXisjjjKe7oHP8upv/Aa86UmEC2l/vhfXfaOl44cOfLYOkb96V+/bEpm/9At58hEX/3muk+Cvu/CE9qKOboTZ7/BsXsO/ea930UWFd1+0TqGH9ef/CLlRugeX33qoa//zktPXVCgmR5iBfqCfszX/3a2KSsNbkXoiiUmScJjnuDewo1wNsnR+eS9IG7pX+e9tlLioWPn/v7L33vpHS+99I6vv+PIuvenfKm9FzhfWRwtAS0NnkDFNfJh300NvT35u863VyR9BGLKnSCbky65levn/oECTbKwdeuRyufX2JiOPnTqgYOMiYoRgWT7+eOpi4xGkVwQDxKigq0ZWuMIXyAioPL6+z4GPxcXX0qT3l3/oQ+1jSVWeWb/YUX7foqrHJuJyxwC1PffQD5Ty5Bzvk8auzFgqdlsPLk3u9SkYv1bWWXZa06m3/W2tgtPcsTdSrYD8x9cRrTb+9ZtPPXmQhMr7riMDLrzmb1s3bn1/f/6N1atTv/5TR9XP87ddCrmjFT2bizKx1YxX9+Khk5JeCEcjeOVJ4EoCnNayvcPdTlwQ2D8zrk+lu2u/w7YJQgHPUkj4AAAAABJRU5ErkJggg==\";","export default \"data:image/png;base64,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\";","export default \"data:image/png;base64,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\";","export default \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAtAAAABgCAMAAAAD3LXyAAADAFBMVEWepaMlUlddZmKUnpvb6eBfZ2XZ4d6wzczfrKGLa1+dpqVymJ+TnJuwsP98kIoYLiKT0q9eZWMee3u70cp0g3yuhXd7uXvb4+Bqamq0w7yu0649PT3V4d0cUD0KfwpwlpVcSz21w75/f/+9zsnLh3i70dV3hH2vvcJLPEIAAP+0u8Tsuuz/qqp2gH3/f/99i4f//7QoPjfAurmBfoG0arS5vMF/Pz8AAH8OPWA8RkJiPDJmZpl3f4OqVVX/AAD/AP/BvcD//wDBwb/LxbwAAAD5+fb+/v6q28Sw5MsqNzSRx67t6ecXJyX15teZ1bkNGBVOV1PU19MxSERud3OPl5Kwt7JtqJEqRDul17wYNi1Rd2nu2c00Vkr9/v7KycgmKipoaWiOuaZytJhISUmoqahVaWVvl4iIiYj7/PxLZVpshXlZposFCAeNppcPIxt+fn52h4Srx7ZUhnL4/PvL59iYp6ipqqk4ZVXMua/OxbeKtZu+vr63x8Sc2sH2+/pYmoPsx7gbRDba5OKrpZqpmZKZqsOst8lmWVWJeXI0Zo5VlHvQ9+WuuLQUHSJ5uqKMhXnG8tv0+fiOl5VrY1ovO0TO2NVVVVVPW2bS1tVolXwwV3Tl6OhyeoZIRDvl6enP2NXry8T08tzquK3Q19Xl6OiuuLXO19RHOjbm6eh7w6fKyso7dmOmqKmZqKOTm6fGyciwtrXOqJnk6um5x8PFyMiRmJbo6eiz//9///+68tfT1tWGiom5yMWmqKiqtJ0lJBxyeXac4cTFycnHy8vKrKY6clvx+ffa5eOXmJjN0rwkGBWTopzV2NgqS2jb5+OjrcPa5uTV2eLa5OO6yMZVqqp3iIMA//+zwrzZ5+OnqamJlXxLc1ydscXoppjW5eVasZN//3+zxL3x0708hm7DvsFvd3Xa5eIwXYTl3uEpUT3GyMi8xsPT4t2vuLWrjIXKycrKmYpVqlWy/7J/v7/k6edNc5Sj4L5EaYiSl5aaqKOWmZcZOVDV5dgA/wBkTUmGiogJSU6oAAABAHRSTlNg+NqeHKWeE/T+3vsiA6/2/2IDodD/BFEUbAcEy/kCDv+NAlr/4J2Z/QHSBQNoAmoDn5vsA1sEAv+C/wXaAwEBwAGJ3gD+Bv7+/v7+/v7+/v3+/v38/P7+/v79/v4v/f79/v7+/P7+/E79/f/+/f4C/P3+bv77A/7+/v4E/P6O/v/+/P7+/v7+/v/+/s7+//7/rND+/q8D/RD+/m39/U9t////kY6vzf4v/wn+zdL+zpP/sM2wsBMDAv9R06+x//7R/3CQ/v7Mbgf//9Ew/o7+S/0tkAPRAc6xk/////8S/wK0///+sc3///9PcW9u/zH/AwMEzv///2+xkv8VAf+0HWTiqgAAbtJJREFUeNrtvQeYG9lxLspNysGynLOv7Rvfzffl/B7QQCN1RgONBtAYoAF0L4BBJGaGwxlOEGfENMu0JJc5k7vcHKTNOa9ylixZOUdbVrIsvb9OY8gJwJC78me/zx9bqxW52mn2OadOhb/+qlrnu/pcff4ZPeuubsHV56pAX32uPlcF+upz9bkq0Fefq89Vgb76XBXoq8/V56pAX32uPlcF+upz9bkq0Fefq89Vgb76XBXoq8/V56pAX32uPlcF+upz9bkq0Fefq89Vgb76XBXoq8/V56pAX32uPv+/FmiO/pZOe/+7+PsrfvBvc3j+mW4bWxfXmhb5PM/zWkEp3d9K4x+tfy3v4tZvGL7463/qHePW07e06PGO/mbuNe4Qt3NiZ/m+QknVwhM3+17j5vjWD+PH0mXa7fvflCmzTxpeY5cGCjQ3jN098lz4zLp7WmUOa0v7NryqpXHeIm6+ef0/R3Hmyo9e83ZV5CV/W1Ky+bwoKtvuW8dhr1+1OLP/KZcXVcd67p/6pnLp1suKZZUye3948putV6vJ2Fs2rPel95buly7IvM7zee25k0+Vfa/pTbQ3j15rXbvrTmuPmM9v2/uO76Vfg4bm3oprcWabph7GUZUy/7L0y/vL6Yu7f9nnP3C37seHLOqb4WHun5c8P8DtVHhVzQqqH4+Uxf+Erayq/rL8Gg6sxf32ybvulEqlr+x9KE079k8n0nRTj37qtGTxVVVVxJKCm/poGlryVVtnX/rhfJ4XeTHsD0v5wwW86P4y9yqXRptR/p2nRatUUPPZvOSXrLyV59VW+sjAL1o3cGGnCqWSyJfGpYKQd/nDWV071bpCs8Exo/WTXYXMmafe8Y4y53tNl7Of1fCef5gDp7e9Fq/oPTCmmpyV/P5CZxqS7B9tkFj7+azCi0e5K14px6ww19IUnJgVgfOStUqdTIv7h9ms1+YmlJ/Ii/msMEoLUgRLy5T4XaQRh1+N04JFTSi85tcE70UZgS9k1Kx1T/lVLY0ZwgLMYIbeYUXx9zBfCKuCdWd64IvW9b8Y3JGH81lejBToe9RKtiRJiqBIp9JXINFYUDp98EwJziXfEWUxv2vvU2nuVTos/TzNVXb6V/MVL/5yeJh7VdvMnVH4bAaSHA4zSZbY38MlFbrIuufK30X/Zvq0JWSzSh4H5ZfErGXx1q7vpf9JRJqczLKCDynwJawN62KnX8pqd65LvxqJxqI0i6ddyWTYDoVV+o0WKRWeuvL7TvFE+U5siaCwj2mzN5Fs4/tKp7gBQrCu3za/wB218oXwHbziHVhJY3ItZPPwyq+//BelM6WCxRf803nBCodx0Uul+9g1H/4VozDugQ0bPKU6vP5XE+phL2a9qKHXX7le5bbJfKTunbhWKBRUdlz+jMQ0yMNXfGRMAWlZkqBsZTO9z29BR5fgcp57jRHUr+punKxvZ9owfFF48GSFfF5tXbnheaCl8ryg0YK8Cx9m+xP2WxXB3uuFVlf0ov9uZ0EQMxbPXhX1vondNDEvKHdduYZe/8F02OLDF7/EL3nf5c+7BV45crnveOBcWs2KtCK6CuyOC3wWjo8Xn75Wdcql192gljqa6orOtnT6V9LT6xGockd3KaKiPbrt/hvWXZ++Ys+VW8/dyzvjtugPVxVdFx3HkXVedzUp7Imk1bqy7+J8B4+UT9dFnX7qy4d6ul4lKZBl5W1p37/7R3c3jl5rCgV2Uad7wsOE0lJSEn+o5XvrFb6npVUUje/QK8alaXrD1z3RVkpwzl/H7b9SlVPWBIs0ewo/rqmqWu1opKbDhbl5sSJ2yq/svwKB/rjvc+nWx7IVtXe7lgi0BguU4q3W/rUOjOM+6LlPSrhnk8P+Ql4LqxHl2vtPvkZbugFK/9t12crnI6U670KP7T31EILU13Y92A89dIGXFQUxglXTxcOFp755hZ827Ntry+ONjlaH2OUagUC7HQw0XIdngaFf4gX7UzfDzb6CW8VNlHgx622057xInk7MyKJcbx35R0XwYKn2OoZTgwYKj7sie1QyOhJT12FeLfuu7J5yj0bEaTLqjbojy7JpinJHIzlgJkx2Jv74yl7ElUtZnt0EBBnQiLIpijov4lXwzvyKLMJqfP7yAs2t39+CH6UWPGMxPq5pHc+khjNhbHuGz6TXUkFkkT3/kp2QdNF0FSK2KNof4XzDr8UWPiV1ePqkOnwYnLiYL4jWrvSR16iKXnf/V1TPnbIrojYtIV5RS09fia+w3leGdm5ohu7kpEAglEsE8IQCwYBbEyV/pqPweeunV3L2G3ytEjZKki7JM21X73cSuS7v/UeU6PVcy3Ea3aqkuaZpFOPVeNFw9IgiNXraLH+yfAX6g+6FZivT0rgq6qaba+RyuaphRliIEGb+77da11+JRA/7tlkWgUhhV5Dxonaw3W5Ddei8pzlkVVbLfQSxjw99HfaZbXEHN4PXZVnXeblAJpV2OiJuK68lLeU7+TyzVG1JyrBL2VPwvFNVDfn+8qvV0Q+QLeT5bJ69pTrN/CiBV0q8Ui5/7r2vXtuXH83nrazQZsbVkrzwACpAK/tuvfy5f0GsyTk9WW0HQ4lQPBSALAdCQ6FYoCFGtDBstcqL4+XL+i/s4l/0MyVNrSsltTB90U8sCFL5HzUg5LbxuapTdHQjFwgG8ReeQM6pOd7pZXh8z+VtBpZVrfN8u8PrVXoNPQlc+qKOxdLKCoLy1fS5K3jR+vTDYgGgX0E3x+hTErmxWIB2O56UJTqxekOucqvv2LoV33OOSys821NL140qvSIYDFVdM+JIJNFKhVfU9Cs/H3xBFQuf0VaBp/MRACXVnusSztoNJ9RxXn6VkOZ7Pli+S8xrSrbgX+LVWyP4tSi2ryhGXSHPFMSrpDIuhj9+KU+RWadMzs1az1/7JpRIshZxoCwgx/EYjixBGxQPxRJt14OlZcM57fvBZZZ1K3dUzYc9xaGJfCTC67qe5POFXiSVyZbCV3Lw/0DPD3wtpVatvr1mQGRioaGhWCwUC4U2BkOOzhABq2I9eiXWLz0h1oSImKxDBmND8VgCL4rncO9hwUiB5AVRnG5diU/29D4Nx2Pz8XYilMCtwOeMhWIxbLlTK/i1asQt6l9Nr1KPKwSaO3fK2s4gVl6u0lHRFYsFb7oJK4u44bDW1hRdrLZ+hxt0Qa8twcewdd2tNhqNatHhay4TGSUruFUz1FC+wO1/VSBZus1blyLvRe+Hjn1aV86UX7V+LrCrkQlLSwJ55hqpQmHi19c0q/iYEl93BLu9dSuU2FDIU0G48zFIdKitUiQs8dXi21vc9Zf5komCUGEauiomjWoD74BBheKQyWaE/UpFcD6Z/sdC7zju9dfWhG8kvxHaGgiFIIG0sI0bh2CBbhqDjZdGCiVevq98Gb+e466fUAXXEcwGpJCuRYKe2NBQKBFs8KI/o2UUXjY+yV3Ge4FiPCVei23Im2T/YqShE0GSaUh0IFhE7OrX5YZdnNi/tkAP+85Z+RJOXKm5gWCMnRgMTy7G9DSvs/NXHFsbsNUcdxSurs3bjWCbGS2cUlXn67ggmbAmm10z0JDHX8U5QYR22hZzmpj3UhhvwKlre4GKXzHrn0i3uFcjz0fqQok5qWH/dFtqaNISgCpvX8bMv7D+IdF0k+7WQHArhHjME2dyo4OhISi2tsuHATOZOUfdec63ZqDRUiLIxEn+cR07fROO33tNO5gz2HapBUuoH7yi6PIfAuEou6JbE5qkwaCfc0yRJYJPnh+i8EBXaL+lrKhdBo7Gad0OBabDgDXgj8UTJIeQxMDYUAxKWmfuS0l2ihOXkQCCSmowYKIZSMCfIxeIvQi3BPo10K5mJU3g6zkzDBO9hkBjowvA6wqdPJ8LhnCxsCjSP3gPzi/YdniKWjS9Lu7tf1XXcw+7iuyEtpLfhK0h/6ndVgSbCUxbcKpmo6i/fAXO6sWdLuQrDFiHYRZ18mOSuqj0HA+9UhPHJy7nJyx7HVIiFouc6yKxDHhdNNWG5+WH80K+Ud7/ubVIF5/UdbO4tX0TXdf4GP7HO7BgIkBbHWjjzMLjSbcqS+k1BfpoCTgS7mhJcAI34dDGSHACdF7BmxqmTgIU5iOI49f/4yB2Z3jXrVXbgeCDOPdcLNB7cE83wsYnGRQj8vZda6vW9b6TiqZH7K1b2xC7Me+SMt06FNqIl7L3wILp2to6jQIMW8+HbT0ArfxrJM/ei2izgze1A+1iMiIIETlSnViZhF4m0MOfT+fpuEW57TlSOKig50XDncJ52eT2iXpOVgbd1RvEiIp4aSjBXEtYmh8lAjdVayIJTDRb3WqYwar86JWmHpB4EGxepCBAxMWGFwODWDV4nkRa0gpVPmL/8sozGf87/A1VJAUIaTbGgLo1cvGmmcwy3xfUjKxYem4wKnl9eqIeEZytZHiC7Xg3AVcMuxOjpcKw4m/BXA0fZpodXl3zq7iHBdELRuvYabKk9MPYa+wYFIfCFIdluVr649xrYcsNc6+GNMH9oHyad/QqxHDrTaROgxcFOgD1GAvmWFZCVtX6mpliKOiC3ZbN4NatW3E54wnvFXTdY0Mx3IyQjt3R+HHDnuDWUvVv9bXUnFpSIw24u7Q3vfgS2hEi3d4KwMOpRYRkssaLj65gT61bfsPu03GJRL0dCJHnE2SKljmJpKMh0TL8IJEvqvJe7gd95O976WsjjZuCuRxUO4k03Hlyf4INSHQYKXTIuu4GDfvp9P4r0xwSHC9Ja6u8XgxsJXvIDHOwqtfqzAkeh+HedYUSjX9NE5StoiY5SaPheUQsmg8ZSTGDNO3XM6Kcr/aHYTjf9a+kx8Va0mSbm2iPVV1c1a3BBx+krQmSrg7eBCNm+TuRYs52yoNBNw4Oh04hUkGobmWHTXrD+yC8LBa7yeUB5uxRxpUPcutfjaZdmj4dXv8D7gr3xVf+BC+4BIvRkW0J9SSILllsLPhkIAivL1wSNM1ZNzjRx3hxqmsnAzBfDwYCRvwmvKB3LwKkEWNBBWLAy40ify+3Njj6kKI1+EiDZIdEiB44z4E2WTO2UwFka2sR09Z5ZW96qcFfKtDD3BFFlIEYsxgeznhw8XPI+Gxkmj8C5L1U6xhv893cLyS44EBS4E8meqa4QX88rlkOAEAYeK/aLk6FGobRuvkK4Oi/8T1vVSjGdmsu7TQCAnhUMYp0g9WkyPI2eaUof+KKJBrW8i6eH5+erkYMCuNCtNmw9aQeAyyjQGZeyZ/uy1fiPn5k4jdqye4Ujom2o+FKasATwtBYMND2QwcEod9yNb4iyHXX2ekbEDgzg1p1AbNoQvGmBJ01A7I9UwhD/SOszyDFkc0Z97+KcMMT/XT66Jk7X5f2cqlXkv5E0vQhhRfM3uUOOQZFCGQtPE+aHX5Si6p5XXOQXhno1v/8e74JW8AdZRIDAwbPDNo51oMWghDIBq8hlDJy5scuo3n+QJbdSL1909ZYYixBN63Nvqd35fE8CPQuInS7hpPUtYmBPvQ2ReJLsjqN9BesTezBoLcez5MO4gPbVSRvXFk16n28oJt9PxMbWwMbh2JeLEASHQp58YUqUOAl5tqhpBvKmWe44SsB+/+Uj+DH6nyjDcxmDA4VXCrCbjZufDDAEzCtCfp4XWlxV+BGD+PcRFHaWq2pbUqJeB8WGgOGDMhNrbFEi+WoYl8VjTDFTZqOyRQ01ucuzKhMsgPB3Bb8M4hAiLYpAHmORJLJ5O0DU494lV014PjIdhs/Qvc0tKigvXsLw6gjdSyKRaV8pV40pZ/Wt8otyQJrWFSlwg3XPUW8+MtxXsBIOm0mTTPkBXCJ4oE4VgMZCuYSwd4lCwQdeEhtwLgUPA1Y1QP/rnXaidQcbxm5ZpNC3OBNgZ5GDZBgtxXssp3MGUZ57ZhZEyOCyQxGDKElMCVo+zh5P0ESbPZGMykL+jXd2wwz6U5cUmnLBfqJqhupiHClthK2Si4ivSBGy8Jy4esH26KiVIyOojy0Sog+7/td3oUNjg2RS4mr4J0PO/VE23H8YSWiSQHTzHXsK0mkkktWshR/Sce9AK7uQfQMxsF1DwbgjXw9o0aK0/YVOR3DvtOOmtSKfKfdWJRnuq+UFQFAkRNciuQdybm9taEfUPtT2XGgoB8MBBHfVGeio9Wg5/+EmojhSXWw39o1YMrJJHDLdw6IfNb7vuDk7Iik6VKbrDqMBZ0REx3yxeGAxIJVSJBiVkHmGeC6ECWSu1RMBD17EJl0pSqKWkZSK8hcy3xHev5yXNRhXwtJEMNs0p+NP/kznx6Le3IcGMKnka2m31YJypXNHK8N2GpuuNV6gk+aUzmCD4KNasJNeFhbHG+Ad54IPQj9qInjarKYM5TWGqE855tAxjXSYSD/2Gc8QYLiOMCsqacjcWVqul7rdp/tGkay1FegkdYt6ZFajTJFkOT4FoKf8YsddDNIA7FNr1YqggDVsa5PVlgR2xdtAkNG6GLGmPoCaKPoQgTEiaQcCIyb2y5PROa4dKkgRhR9nElxgmkQZgDH4NvB6keYH5rMFcX3c8P/x+U9jofFjpxMam3CXxYhZGw582JCwSpA5IKoN4pGy7cq/8i94PuXjtHtdklHhAAYR6N+rRfDh8YOjBG8RXc3ESgmkSVJdpuGadze33nxpdW6CqnncWJbb0o8yODRYJsJNEwQBZk33dRGXpVXcnZnQPTNrZTL9AVRBDwlsPgNeRBRcaHBlE5rTfB4mHte1Z2mM5XbCCURCxYVVRzz3J9AMUSqmsRxa7vBF0AsKlbNamtAiFH+AxsWbMrEyWABrlt1GSwRiDUBapML4xkwWRBqRq7oHl3DqOLgVbGm02ckEvFmaFE3Fouh3NDGJ2M5z3CYtUiyfpthdGV9Vz+B5rgPl58QIoLRA1uaRRYbxEhVsxc2GsFLNrWevnXlnnKndWTcg5Q/Y5YB+wEVD1Eh/k7gwa5QQ4I5gjySaRfNKuf7Le5yKvUtpGZqDfIQQgQBxpiOpitD+axArlaF06Hnxs3O5aFt5DBFsaMnQ/Qx9HGJwEWVT04MDpPcG0ccd65bCU7R7269x4kYU03yBIdCOcqaPhYM5WifxxLVXyOtRLYQ0UJEx60xDKOpV/txDXx/zZWrNl9LCk4v9AokikwFtJm/EdyaCBEyleAFIesU1fSAm8+9cPPnuP2eVDyw39fKeOknl+X1wAcj+oLIF2xlorWmt6rq9WYTChoXKZfIVaPHq95dDwabRc/hSOCyBRQhWxFzOcW4p69qHeZ+6UwZXdOMQ5xDiYY6+li1t7tFNxdnBozSqkEbSq1mFuvr1kC08VUd+OJMoGNj8THvc+CBJ5CAStD+k2S2m1Pd+I4p0zF23Xnu0tvWLX3NI1DQyZB3QUO5qndRYzCpAfI6vCgh6NSEmi7I72x9btlOE8brEMxHAk1LGRuDOb0pkQh5r4EXz0Oi+VrEcMypmvzTy1UvQJNt02sqX/Qi1JDn4nlQEAMFgUbyUiFi5uDC/O7laLb4vJIl1mqdrcwzI33f+0+AWRF8c1sEXC4aAVeZ8L1+OfHdVz547rkClt0k4Lk4hqrYAgpVQnG68VUphY3GR41RvBrSk7IOgf6MaRztu8LX+8pFqIRILRf0HI1A3EgEe0poyLMAtDhXyAqCrA7A+1ubS4dKp4+wClbuc627xvmSl/JcSmVGjDteN8Zbtw7S0bgspx3ZNrpwdHDiuU44FdW8fFEwVjQgS4tOY1WAYU4Wq+LJ9w73S1hNiGKz+6xpQBEj3B6T/NEqKaAYnLuqAokOeFoo6Nb4Gp+MON9KDyz4gCBCeZjsGxIJ90DVc18DCa3dUPFWwhWZymzmArmk+NNT5aVu0Lql8mxGdMGkn4YqjGtVD9YKhIpuPE5+iHfHYFOFmmk6p9MrPI5HzCq5TUMHggzgGGsGPDA6FvRuGKgKsDc1Y7I5CYOsK9/iwI1YS6VOaErEYbAvUsuJB1nU0gNIE7EHyYyZgkBuTN2993Lkz/dwJ0sqLzS3UtY6GPPcIdqxHiCDt9/USHZEwSw2nPtXOIqtXSiBvVMHf4whI82qWKlULH+1EQI+Gaqmoi+S6kjEGdXAJYGGDy0oJ9P9desjuoAz1Zn+o8Ar3ry4rDhD8JjCbtSELC/oZ/qkesg5PFRS1EOPki2Bu7GL5yvq0uqZlEfb4wXe6Did1it/PWB3/pOP+4KNr4UYBnLVRjvqjz42FiDKVXAsNzY2FiKBZvotWROSAC2dd/aLUvEJKo+LMVXEzyIoaSDpoDUSBJOFxqJqI9FgHhlOLA6BTmJ/bh8YROGSteq83iXZywWqVenTDYq3oVJzUjSlqdVcLt7DO26Lh5riKd8rSz9p3cU6XfBhk3JSgBgSpNU4sKB60SlubqBIX9TzxnP0PbZhOp8sL9vpiaLDeB9NpsWgrz4TByKRCPYiHkgf3Eah5hQnJ7ds2VJs6vK2tTKpHLf/lGpXko02wDByexDoUgiXYAlidubYHrhIPPms9Q9yvh+sFTf/FpJYspDEz271Aub2TSzN6wW8odCDNz0YbLuVWjJSM4yvcD9fEm9x9yiHM8hTC3m+yII2hxeUfKWitNXGTC4W0qKpqKSOBWKTTKCrOHddsHaLJVHd1lrJneI2pG934JPIlGf+EXY6QJKT8BygYKI5ROvz3E0T3llE7nYm0ivANxz5/SXrUCmvqUd96//FMAgmKGf1yFsdZD/qaqmX0Ve1Tg1ke7U1MPcJO/hctUYaemO8Ws2fXYhKVSIRxsi8V+m+BZnLGjCRxsB3J3FoG/prH5imZBMQAi68pI34pVyAcAkI9IsqU0TsPfGaztemDMP8GLzEj/elJ6DKMolMAf3Z8OZejMJ5ycXJ/YBAR6Op0ccOuMwHhjXcsiPg1Cde3y+xAiypzjv4anwDzASuq19rMAUdbOSmtSpLFw4xc2/yetI0DL24jCDLPWfE8fmxRDNOeB0MQ+gAReykDT08oVlDqlkw4jeSQDebRVG/Pb1mZDhhVSoGy14Fh8ZIoOkbcgGkM4i7ycgiJmw3H0mauvjLtV2Y1yO7KwgGMFIgUolmqPc6uGPwi+ie3EQrTSYjuK4RY+LcHy1+2TB3ULHgYKAERxGKxNmJJSuFTBYZzMzoi5IWio+lUl+MRqtjkIONEOgDMF+mWDgrzea1eS29PDNyvS+t8Y4hR5IRnO+PyA4HPKPKgoNAEUogQEYNKsGIJAWzec0UmA+3rrie+xWt9CG/Ui9cQK2m72dEiCOui5qXddOxbVuXdWXa4+3Wk41cUm29pe/ebCjfc6Tld2S6psGmCbeicrjdqFJijESp2gj+6EcJlvELdoH7RkB6kC/0i1cIcvnmx/haFS8638zhuosSuNCA3Ma0aLShwiUDDEyhIdmubrNpJNWJ/4EbkIeXRScZpy2I009jaxtxojPm6DcjI9G2ywDF3FAovgMM109S04SVAv1e0Epk2zSndDLngBFUKTqq0c7Ct2qQpic2xxC7q92kmUQA4Minl33Q3mYuBgg6p2kSUg20IaoWoKA91MsXNTwmRnxoKE4CDYkW7xmIavpe4T5YkmtCwwN7twwFSALbwdgBj9Ga6KloiLMg4HqZvP0tbgBmi1LEc+XTIp+sebbqprEmrpwn0DkvAeQhM8EuNDR4nFPLVNqFfDS1kEr9SUqrGLhPwUQSUKKQdCFG2OD2i6lUlIi1mnqAfOhAzix29HZh4fimVGru8N7lSMv3ym/TgZZAJ2CjN5L3HtBmpGriRwlvVY0qmXvGC4Eyk2tdo9mccj+43JLBy1AKCAEVK1OgNgglIrtI4L4T37fNcgidIny6BhG41Ei1WJQzqy08mjFcXy6Iyg+1SC4Q+jUkc4RsplCriFE1gxsWGoOBrxIOEGdfg2wqn2w2J7tTt6f7A/VcyzUIVQ+ZvFASK7qkPhYaazwGKYS2RhJ7kllDMykSBgSJ7kvogA81oZjYoRxiwGD8gJQaGZWqKtTFmKaNhqO7BSFfVQIshbglDgA35LS5pajPukWv/h4DscFUzSTLF4prdBlm4H7T7xqpFPYrxBQ/Dl+vJWs6wnj5iaXfk+64uJ1DoWpmBsESjmZmdPTTjQTgg1Cs5/rq8Dn4WnNHLLalGC86sthpce8ZIIK3tvYqspHssisUiD07FPRg/o3NXNDje7NvCSWBkiEEu61p6PK9/V0YfOX+iV2oBar1smHwihhxAm/MFZnR8RKqiA9quB94XVL5Nvdz39+zH0cl0Axipeim1EitSFY0YWp+NdmtZWH/sEv+qD+FUnsr3HA9VDGetHkYx1Rq0+zITGmpJOHQb9dN41nDNJM6i0ZhoNVUdLRBkBlRBBqjak+goUjgjJvNLzWbOjLgy+Pv/Za2b5+SzZQ0bFRbLDDOD8+uK30DizBzJq8xxpXrmKrxydUCzZ2buJbPKLvBa4nHfi0WMGoqWKsir6WigJEbUGPA2oG7HYAgbgx2IjI8CsQ/XSiy3+93ZKdOmUVCigO6UACzip8f1aKJxqc1bI8lGrkdnkDbkB6zCRCoq7+zT14fLpBmuna3FqdQPX7Afemll8TRxqcbN0nk4FPwUhFEtkRQBsC4zhkT3KnfvlQIdVGgdyo67XOT9jVXzLWlkZSk5apjiURjNHzMEnW7WowT+w53NdmM66ZsL0vIt6pFEuixHLgXoQNwwqujeAFMTWwo0cN8EQsJye4fGrFAEekds/jIJY9jhabmfov7iAiifLKHGA5BoANebLmlGaJQJZDz0BjEseTRG7cZTVPflebe2w/fOFL+GLIiejLXCyaq1VCPxxFqjnnIwpgX+kzBI2eX1T6Z3u9VrP1EKcyOwNRtiqYeVwJFeAriqL/guMbhaO8ZydI2724cYKYoN16sOf5o6oupVEqbmTl4yeXEIu+URXyqMQUchJaTK4aKUIRSg3wqLKcxGtVU4vXguDaCrgAR+hIOX19OdcJ7fmltLimZAkxcWpJ5YHQdXvGkOUFkX+K8ED0AhZ2arAVApau3VuZmCeafy49G+Zck0SA5dPiwFBFEfsYfPQ5w/TFcSZLs0AF8ClLZNcCR35jcQhJ9T588L77wYSUHoDgWMEX/SEWs13Cr/celsIrtESp8/ADDdD6T1I04FDRWZVzfB/D3pRWxDg3NqIdxo7Jg4Wclts9UN27Nzp8tuETiCsTiMSTY40a1ZJXuuYiQrruIA93pJGvNZpzpPVcTgYKqErz7Ma06mnmJfZJaZXIZAtTt1oyXlwfxz6tV7Eo8ruA+VavxhFaFz6KpuQRRHTwgyE1OAWNLdkPBULdm7L2EkqwUQ+ZHyYbdnWL+NwJMCmwZxhIcOlAcIiCSrADuVzUJj15uMom2xT7oJuf7XHlC1Q3bmXp7Dw7NaWOhHi8pET8wNjbEQteAZ1h1PoLNRsz77bL3sp/MZfypaGpTKpqxUIkRDz3ozvhHVc1VPXH2R7P8wiy8xlqVPjBmxFG/CWdk06boaOnwE0tE8T2UeqrT2+s6vB8CrYvVAKpQo1oiPkQmQxvFJVDBD4qBEgQFAOMM56wuiq/3rYBIdyl33GHlN5cnnnOsjIiEaecmdsqMsecFlYF2IwKOqj7eLoKhfedq5+51+dHMd6MjC37FbgBrdWz/qG7LtVF8/PHjiRej1NkFQFkcAr0xEBcQ6nYh0M1Jub46IU+UfBuwD+KsoOH4R3i9pjMx9I+exeaIaoU32A6PbYFXBoFuugp/H9cvqaLJZMeJhJgAMybs6HJ2hGxh2B89PBtNHTs2ogbGsNIY4HswT1DnPLuQL93X04lLgkJ/Ti92mUoMFUUBF0MojEpRqfGYdFaUK3zh8ZrrpQKQsYmb7fLyr/m27bIIV68IqoZEdVVbAKa2u1AdWxToQAJvD4W6Tco5Gs63fb/z3qV9HZfd0i/AMtuUkA1SzjSm7HZjTz7JBDqODBb5qj3FjzhOjhghMmFwo7/Zb6NbYGGQwAMkZYn8YFVRxnoYcENrALmgVDoj7wbrSVmOwCI+25QXaRStQ4dRrgVtlZqN+m17rBiTdo+kRmY0T2uEw9EZ/D01jyQjS6YWddtfGMUPpCCo+aWOIuQQBYcOBDoX6o4xxKiYQ5+ZudHRKpmdQKIqjYykZtTqAXIBgoZZzHW7piyvIqNiVU8VVFRWP9+azmtEydTajFTNsJIgJfZpc9oAOABE2rajKatoRRx33eO7w8dwU/3zdgB8lGLJ/6JbLBpMDo8fP+5PlawZv9SMBzxHKllzwNCgcB645srrgX/wQ6PTCMV25B5sOv5Rq9k1/GyDUih5iFQy8xWDrA6AnFww/vaabpq88vxqTQ9HqCWBn+ASiFE8IJTCCLuyM55Aw7vbtOnEJiQAKC4LTYYCRZNf8M/PlmZU5SHvuNZdlKFTrXH5QJepwYRemS1U6qJnVFFGriIAVhqCy9zXWODAUMCo7zyyDE16xCENHbutVp/j222/VF3gGVorjVWDi4y9oSaqBhhaC19BXTxqgJjv79S/0HNZ2aI+QjC9YVxDbgXCvzGlpOCImbauvigdAKp0sQDKrCXhShzogvf/xNHVWojzHSl/RXdJLXabjEMWix0YGR1jlD1oaO34GKHnQbJfBLILps7SfIZrXsc09DB6ovGH0dEqNTsa9o/XqkPF3XN3Q76xx4u9K1LHNm0Ka0VS8+2cHhn3R9UUNl/Nl96wNNFHm/wbiqgnp3KhIks3jQEBfBzWT9O09tgY4g5yvaOPuQhHCMkvBsaSsqE8sa28yl+Ab+/XLHQ46qCkOYOaXexs6CKNOdEDN9sdQH9CREfSuj5xbhnSgWI0Zb4ARx8CvcDnPpMLNlQE//EDVRYahI+3LdjlSt4P40g+NCwPFKIBeTYMsQ+jA7kVpdMwchth7z4tpXApq55A+9vYT0EN81US6ERgaAsOzf2Ln90vtfqHPBvKE+N6jnG2mpFM2HFzClk8shf+6LETm07srsKrigWHJmNx0xHDmRnojtmzd3r53YuJlQd+XlbsOKMkII7Phq0K4tGwZ1UlAGMR3X9t/EES6HgMyj5n3JVeRpsZd+FfxmLx5PR/rRRwmlFNsgQ+X9GON3qMLWiNoUlWf0kCXUUibYPnXqR3OaJzDffrl/Ko34GrSXY/zigzwSrIi2OIASgWqI4C18yRU8fYraB14aPbzVr13g/2BUyA33RkG8fQJA0NtzWGTAiCndgYRZkN7fjxBtHKEIOzqwxekZF71nC6uvstduXp+06paMapUPZNlc1QTi+RA0JRM0zhCJYKqTgxqubwhTcldDWjUocdS9xt3Vde1SiTS//ZH9h6qMlWBhxd0HZXdASR7eNt7bHHEIjBsEZHKbwkBz80lhwvU6Tx96vec2v5h8pmpTSt5BW/qCBVPnSJl0/5PVAwAEcGDCSeYP4jeqSxc1mHOphkpRQmCx6Nzjo1YyiuibOp0VEYZbY2v3J2fp7Q9gM5Is5ARSNECHWnpsyusevgatWKfa6rnSSSyvGcspAawVp6L2oXi0V7NKomSInE4782FE8UlZ1l3+AsxM66GWzGnsQF0kdSs+64Jh0nm8EyRptO3L3gsGAOpoO4o8wf3DSrKAd9/2F56vtOpZErjrGcheP6laT5DYU+CIooAG3ZdY9/eozx97ZsASqYqHeW01SqxVAXwhLqjqOwlwTar1UiAjohRBsMZE2QSo3tGAoyhwEtAAzm8HJ/75uoU5hwwzIX+qeiDECVEnME+wHpHR1LEEwPpxluZruBYDMeZwcY2gKsYKxqauVX+hd2UaEb4AL40IwetyOGN2wC/kIaHrACtmoUiHui6LnozWJuYzw5dY2x65vcxfRDOo1eJUyeNb/rNAx+hOme6Pxvnjjxm3cjK3bsxMhCNYdavBwKJPya5p+uyvmZb64iETFGTkupH2h6JiteUSUkT3UkQrBj0otoDDQ680xUcz2WB4g55m9wfTsr46NO3+Hv2J1DqqCwjFa8R9nzikTo9VvJLgNaBxY5hQzDtSeXdvvFC+46PCfBNQqPpvxKN4RCyNFN3kXFtQLUBm8hNV8hPxPSAx0EyQb3Vzrzu/2rOIe5jyiOWQRwo4t4EZOc42TE/A2tOpNCKoOS3/Hmli3YJuOp/b/fT55RacOlJ6bFaqgJJTwWdNXUKHA7iLP/ePT7s36mPDQTdyxX/EwIleSg2YdTI/DvSuJR9sIlAv0yQCmqVgjFHnRVv2rsmHR7YXzbKL652GgvJEjYY/Ehiok7K/w6tVrs5kLnzxub0fg0DK8SCKhcU9oLSIGyMnTghjGiajKBboZyyvOkodE/CCmaeFG/t7WMP1G+TjGSDGaL5UJEuJlBCTlLYI3iRjbqdjXuscISRVgMoIvitkH1bvjO92sGXDFC9wNDOyiYG/l0gmiSQBePU1iHXMIWj2Yb34J9T768LOND4vQtRZIklcq0VcOoPb5A0LP/7je84cTdd0OlpjaNqm5xY9DQiVGRAuutY6PNR58mkOg3oYkNbGGMkLoQP60gD4Pqh6jfi6DITSupCsFSMJUHclUbPN0+sdNH4WoWCvV6HfnPGrGiCCHv1eB4TH2CkGHdmjWZF6YQQoA51FmafEIvsg/eYM1mIA6wKMlcQ9kd3YQMUXTT/InUMagxhLWbUgtig/hlpFZwZQJGcSc3oJXs+o+nNbXYRUjqos0Ak5uZu1Ob0G8i+iKE8rEExYuxyRuHzsc2htzf7du8ExL5UCbjn3bGE7cBWgn9WmL3b56gy3FcWpj9/p//OTL6eO2fGLFEvPuNz9h8IwqWGMn4phFrznNhlwq0kmvSJQKdsuqGJXcs3vD3AnmtmNOkxx5j4G8MchnLNe2XVwh0x2jGzp+PGZ0SWkqQQGtOHZo+OtNg5VuJH8F7xkWAyOC2d4vVa+nnYfiKyXgRhX3T5VtX9OMtGwZjFcSRotkNUHNsDO73j8ZG/DM8Tr1mGl7OJbRliCjEOaM1kIJzczldrhcNhu7uaGrA6oGONeKIwxJIPowsKKVqrtlD8uhthvP+ZVpxmBveX1BkVMNTwxIn7oJAS31iU5898YbPenY1qhggxebbo6Tcwtk8enn5XuhvL1QXuBzuT2wMOYio6gAI89xN4L6PvzSXrwh5lWLXxAFkIRPK6f5ZjHsAIdU1DawHcOoJpQn1BJo2hUoDGZl140aPLHXbbUDq0UTmniWHxu0/x60Tz5aodVwBbZOqwm5mjze98fuf/f5vRqNfhJxsmlECMeaSHRga2oFuOsZHfH/cl1ZETshOv2R0c7kiHCkoVLgys5vufibK7rvijhE8isM6fx5wXH1A88d0+QlwVCTXiT+LKB0Bl/jGkRPQYP6Rs9//7BvekKJSa9FphNyuDm4sOnQVwp6MFsTCKoE+o9h2iDoWhIYan1ZTuLlhOimcT/Q4eSmfJmwHWuVGCPRYsnRw+Sd1gEdtREcHpTSyO3WcBDpcrxZn/EgVMc4W3GuPVrrlSzcC84yIj3p5oTeZ8fiN8abx/Ir7jiADLj3tZby6GwKc1dRRgIhjVWkBvxNdoeIENzLGVGxLnPjM7vhAmj/6A6YbPKEwYHcfqGdfyuZHR9UX24+NjTWiFsPqlWaIVQTjqiK4Muqr6q3Ld6KvAFX6blIdCbQ9QaRWNalNLPqWVIBSbgS1rZm7ESPm87Li75/Wh0DXi8jkksOD/ivGaKpUjcfbPc0xO38slZpVDCaeAVz0XEPd1mdZw+gTiqan4yXQt+ypIqniWE9DXyxVahBrnFixSQDIyDjexuD1MyvwiU+ViMZUkPwKOB8V9BTHlzxz4sRnv5/CmUM5VgOsjUCQusVQ2OxeN5DXyJX94elxWe644Ai7FC2nRk6MHPNcac1gqav45A7ED6H+fN/Pc+tmSijS4u2qYxpEKIkNmVW4E/SCuyHPd8ODgTYzXErRianwMThG6FMXnrE0cbFkZAnbLn2vKIco/A4OxVVlxPOmkE5g7tCmkVnRJZ5HcPL8xlw8Jz69Ii7IKF0DH9B01F4kSdlY5FZmtDGWW46xPkOUJNkCOqrO76K2QBt8z9vNockb488a6fdwKw6+g3Ol/P+bzYqFqQ/ZAr6oPSqphxVhe6ShCiqrm0R3HuDSEADw6QeSOYDdaTZVjKMVkCG89BIgSS0zevy41EBPZrA0KVPLQJRYPEAXNoBurcMrBVHiqUxrdCRDPaGARAn87oURbMzMQh7vc8yKQlDeyMwMr7TFwM7+7XTwnqptNElKWHWscmJUCyX8izkaCNGJY9Eqw93wLcFcXNXKfRCFFvrrZ/kw2uxHuibDguB2UTk08V68MmnKFTHkBjmspFxkuQyXV5aqaI67+SC8UAmtU6NRZXcJLAK0Pw0fO3Hibhx66oub7n5jI3fj+Y10akMbN6JBS0Bs9E98c+WnP4Teb+NoYim6220xoqsSwT8phBrR1GOKydwWKOhcyIwbxoSvb2qmtJCZ2T0SVQFLySD7xSh9uSBRC7pw6pnPnoCiFiuCTluvFRaix1KM9J0HceyG6xZ3ad3SMHWbmWuAYrRxY1GvEn4UDW9644kT3yVNnUpJCv0/G3fg5hxw6k+slJ6JTtKG+xk3Gz3zyeQ6NTuWo+JCqOd4nAXLsaEbwRyXb6cYF+/4WDd+4403xk13xT6Raa6iyUAIDldSkL4cqQtzBPhH/TMFByxXxe8QqA2vvgknIVhsTtudtQT6nnouRHIfBLUoszvrVnj6zOP+WVFzIugAyetYHNHRh6giK1D9n31/tPwV+7mTYl1WUqOpUXTz0CNCXuMfnz88Nz8//5JlEThWcyUg0ile+EywXdR2DviY9dxJO1mkqwr1+WtV5fuwqMf9l+R504mR+WouzggIicABvX5fP1fzHSqgrPwdGaUTqXUZERECTd1vSKB77MrYkFfzaAhTyNk/C6DHMZ17yytyjttsK0tIQTQzp2IZFb4U9QMb632OCj8Sh47zA1EnWHTHzb396tDX+/77kmVTx9I8b2v1SMc1DYyjUGafGZmdnZ3PVgSw26CaEXInkEd1X8f1ZeydEueBsYzijHldcHLfOBBIjIFmYc2MEp594sTs/O6Xso4SyUb4sDaP25LKSOA03vlQ+pJfv26ZDH0MIXyTKDOmXqCwJ5p65u43YMfxK0lx4AKHJptbQiFdX4Sxl3g/76/r1Kupi7RvdOT7n72bafiRTxNuAmLBFniNDPodig/BZUab6VvpWj/vNEmgh0y3vEqgS8VGk0mXoYczgNP46HHmrmYidtN0/WroSUrvhSaZXf1Gw75rYOEtMhr3FhuI+0gnmjpmLSAL30MkJT5yTTLvVx3KrQA72YI/EnzZj628YNytO5U6WmpqURGEMR5NDDtoL83PpzDmKQyFNCVHRELcxLe7EMbiwKJJsoRJkJyKALhiTx5QcSwUu3//s5s23f1FJtG/uZBjifghUEld/hN9Yt2buRs0Sw3nERW6eu0A1bglSJ/3XA5gyvAKgxtzHoLXABcTuvFZXXfQQf+h5QL989ZJRYD1jo6mdldAxKUaDItQAzyjzywoOjEIQ0Fiu4HqbdhuuS/XLr2rlEHUPI3/5kWtoxQdE8yyyNwv/vXcPBKFgporNp9tmlNGyJUV96Tvjz7et4RUHRmhPzsqaTMWr78dQk2pE3iE2ezZs2fxqtJuDV+4Z0+kJM3TJ1pC/lNp39LG40tLA2/1fbBumw68yZhRqzEfES7jJtZvenetFg/tiOe2TDVDjnvv61aRYt9S/m0b+7Yj/g3luH/k+yc8gY4eL1LvyLEDzWsI4AgRRSpUTBpSephjNSnd+CQJdHelEWLBU24qFDqPhL0uhZU3F7sZT5HBN8+5Wgqh1fkAK5AheHNKNlr7B9dApLXqeLEJotT5mFv1V3VTN3t+kd+47Uu3KWHUcJ8nL2CS+mJ0Q8pq/2V/+nbTdR39cA1BlgxgQqkJQiWrLqh+S9CnQDvlJWnusO7iggXcwY1mcLsaOiJSQiGfjMkFyjWGj/35n3/2s288wQR6xK0Ge15rQFT7WHjo1ftKqpi3MH8kaZi4GRQVNnutCIMJ0D9BhEA8GPJgj8SzILZumUoqO1fzoh+4lfsqZtNloqNkeNDroq5l82fJ7uQfp5RPFTn4yfj5yR2ILEDyVz7Zt0ySS98hsf5lH0LNzz78h5fxpjqy0lahMG9pEG4h+Q0Tu27b9070H6yFQ5pVRzKEHIZHqHfhzGFFQXISpYOIwbOCJS5ktN2SxiNzCvqKf2Q0MyM+rpzhls+kWrd8oz64rQ4w0U0UTdes8S5oHAgOZ0tzQkUuxo1rkD+earrqBLdabeAA73WmijEgcA4i5bs9o3V8xgWlwEV5KSWsu/HQUHcoZKrvL5/zIA7FJAV949AW83W+X1/B875OUZO52HmUVIPephV3VFkajVR0p6FFC1VysIFuU0SI0lRnb/lzaxT1jBu5LmGkQ6EDrr/hFl3Xy2OF/bnijjgSN43YeXKIAME8Geg2oURWG8Wdrls8gOgaHgcvyJpO1TJCpYapStQ6lFS0U+ObSJZhpYObXXF//UBZVaj0mfjjcJ7IEYye+OxnP3uCmaDUwlQOhbMw8gcO5PRv9bPw1CGt3iiodeT0u126gojVncYiBB0KVHOEHIdyPdwjdxsCDRjWce6P+shjGpXivPqi8jgkJTK+Fd3B5+YKszP8QqmSJa/PBH05jg5TAduu7+2HjXK3Qvsc8k8rIJeg7244fC2P0oQi+kKBEFSinrh51JM6bhO9ojsDYT+I33+Zm02xMx4BBB4eoalDtRr1R9I6HUzUEg6Dl+7CPoLsgR5MKj7bDa/c55XF2+nW0TOGYxQNo6oj1OEff5w/zO9G1KObqGUGC6HRkfrPiVv/+fQ2A7FpERzM2ahXCJSaP1xtuKhzqNVzRrHbzA09OwUuwATXayTzfqNJHjQY0ua9S8cDUTOJD098zImgpAdObU4ZiaKvYriHkIHMHn1moRE//yRQF5SJBJuwhVJ6zXKu99fxx8N9gSPtjkhqVe1BkoCBxhoNabQa2EGxT470fUyXz6yub8VRfgJhFWj3KNyIRMa1iEA18oIyzkcwlYKkQeDBjIRLFqgqr1v0f5bMcVkykrJqi8XiVDMwjgpNQaGgDBDZ6OiLKW03XwMdEf7mGLjw9W2Dxo+U71c7dQ29ybvPkosIYFbVPDoiFpGQZqqNBHUK8npkkPtKtx65hz7tgbiJju08TtcUS9A6kQh4aAVtN1IRlYgoU91V0s0Vdd7tTLS4vg6Hj5vI7BlHv0AkDEp7lD2iiJhCLWTpVRXoaJFqlfTi+OsO0nTS96ykpSwO//M9pM7MzsMhSIEfBYEe8aNFADAatNdUtm9HTaNQUyT8I+pXnjRV0VHdr5Zf4NZseM6Svdzz2zo5qgVBRR+PiZKwbFWAW0lTefl5LD+NTxpQawBXFWlOt3T4sKouKOJZ2Jw8eisiVQVdhsbwRTNZLL7c6k0wQm7JZAKNXLq5sjnUh48cfEhzTMRxN04WxRkUhUCeR0ZYLgvLHVkw45Dn0BCdlGF0TnH9y+ZwOdZzmDCU3uvKTcoOhOLXfhc+GlHKeiJ9XBodURtjDFSEbYYL7dw1YH23226xjqqWJIJSfz4flivUczEiQGXI8h5sWLJ521As7hh/2jv5j6/v03WAlt/aptSNpFzP6SBsZjH+YWR+99xhRn8xx0LFrlPNmbp9X3pgc0TuoXvASUIGd0uQcbWqLz5GdXKME4uscwOUeK8onbyy0CS2Cfv0G30VLDw/zFwkgUZ4bAs1iE7W0iQF9xbojYN+lrar1Iu3p/vqVhrOcuGQLed7nbZB1LTRQAnIFCRQqOwLdyqg+JJEIxb0LR9LwHEfXbo9G04Vzs6HC4UScy5noNxlempiplSJbN8OzwOz2EigZXD56qbTOVk+6OMuM5KClbNwrefsSCSraRHREvdsrlt+iuOddrqHhwyy7EdaH7y9rp4pn3FFkB/4Cj83O5eVlAi1DY0Qw0rO/cHExdkow7632SwkRPLE/OqSa8Genfjv3rozHtr4ZpMf/WKKgJPv/uaibx79dJcwOHBloHnk6mXaREMvcdOdboj81gOHR6IMVyA8kqV6U0gffCYUfJK1YEBWPv4EN6j5xCcUG7cyEqnUGTEpIyrErEfpH9jvKA0wYXF2hIrm29Kszo3cBQ5dudIryXL033sKddT40rCG2dFoVRCs0ejowggCKKcI4iBsZOfMxGDc5j2E+47zPBh5TKBDVZBJgl5yJUREQAnk3VyAtdwLbIHLQeXAOfu3+9Qlc8MfnjiTcZLwe4F35CsRGWAH1oVF7ZEjvKt2OurpvTuhhob75Szh0Cv5+h2FrCV96EMICQ/tkx0ZbOMM2rTlK1lJQgEB5BkcGb1e7rMPS7YHHWbAILdEC9SZmUJpNoxWH9hZwKUl9M7YXsGsMBU7RsYw0ik6Hf/OV3po//CG4b9ZP2gKFvfx9/xx+QJolHn/OK5YpcLXpUMIfvmslIa6W2PeIPfACz7u+YPlgy2ctlTax1uWde2XO4LO+uBGana90Uof3N/r6PH5vwcraehG6qoNZukXuJ/3NminVsJTr5fqGAaAKtFr9uFmvPENBNlFn3nDCdKs0uxhHrhXbssWMPLisnH6gd/jBjRSOfro6YlXfOeO7G9NuEBjq6gEy888szDj92+Cur+bfDY811JjitDQJDzNZkO5rm+SD9/2f3O/q2kF1TZZizJvWFlBINWso7YR6nsyPoRMmX0vC1BJnI/eXnTr6iNlbpXbyf3Qwu6is2p0ZO6wpiqZ/NwoYNuFilCL1Dvay99pcemfr1FzucGXvrMOyLFJREtUvI2qxUSA8UZDj7Hwxe9PoE8K9QAgdgBlaRvGO3w393PIPpz+YcGOZCsl6lo8rlUqh+Ch8kw9RtAKITyRTp8b5PmipMcuqYfq+2Tr0CE7L9p1VeFLmbwFHFpTpGk5IpOTRr1KaCrKe5d11eN+8jHFUHa90nPQbvWdW7eunD74H29AOJnPF+pwOGQKwDNZflzMKmFJJscBHgwQp3t3tvZfTFL6FoeDrhswGgcN2/lsPQ+9jF1XS5U9dFsvXL7lFrsm6TsxYEiVMb8iUsmG68C0mEijHUNj5wMX23nA1BW7Q0NDrFDV+I3WA97/wSl5mv5XKGj0bMbQIvqlmt09A5IKAIHU6HfnsgQEGShQ6k4ZRVNamkfllk4wHPbdZ6lqJ/Opg+kj33vlk4qMsq66omoZxD2g7W/yyDipArpxEMHk2SYLL9WBDeWItTnxVakuRyq2JHktA1Ry7uB1tNV6NZ5DzUYu5yBd/XHfR33cd54QEXe4Zn2VBeH+KP2wgNQcUsSp2SxaHcPcz/0C2Sz/PJSR7G9NcH0dzWWtNe/RTKFGnRR2BEOfnt30ooriN0oYVgm3DYOARp0zQbWNxwF5gFLWQL+rjw5K850p7PNGXKJlGwQ7X4EoXQNlyJvKdOvWVX0fl/Qhu2CJ9qHOBzYXOjiqTklR9LwmzZYKszRiRyOVmpyCQKN4136Eu9QfGFL2SUwoQr9FFGasdM0wZz4jViLoeQC/R2UDwmjYXEeIZLMVWalr0gR6yjODPsxCv289VfatIdDftLAUIatkKzw65vhLVA0o87dfQQ+5/wQWF+jLSqekq+j7tL0COpgMUAt2JwmoSTvKLQ4YRNznFndARRO5teosDjh54Zo7xjd7z/j44q82f0gUqE8FOJlzZ89apQpvJ6k7SLdoOoGljUa4S3eVPV+R90F8N+/aNtE62JpWMFFQYhPGwto+ZGfJG5+ZP1zJ5+LxL4HtEA9V0dZpjebF3AtHWjvHEXHL2jjuWUZqqPl8pw6R5m3ZtpGwNfQ4oicfZUFbu0yzCeJVUby/j+l4SsQeQT9Hv/hGK0vuNz+fRUFGNGU9LsrKxMHfuxQtfXQAFgl9ZUYoIz20MfSZUSoBzOUaY2O56igC8nmYVsCkyEyh8QfSU0Cpcu7AyQtk++/peOMyWesl6B9S0Mmk0xHVnSt5MtylcddQ0RpCJVHent3zr/k9FBDgkQoZ/wjcTs06jMaLDBZCptK+NJaU+z1fq2A6k/F4cWlWDfOqOfgPTC2e6ig2+XMCLy1OGLQqWWqjGxHr4dbz+zfcyl6X/rNtigEI5lt0bgME+iELPwhVr9rSHZg6J5LjIvNXoKE53zdLymGEpei/YAO9qeQxm5lwLuR+RL8NM8JY+Dez03rFRWIOpejUb9M8zf29t0H76ptx1TsXn3fhuWNzSRzHCQmKelbTRnBhYJn1Zh3qsD3h+/iS8clcunWpT8Ov+/7VPlmufyizWS0cBCPeZo3SMZxrerMqb8+XStZuQnAExdCnusXbks2i2fG3zg3u7PzXvvJOjZJhGoRZgvsBYwIvEaqEuoMQidtxq9taLKv/bUVvxuOTk0W5WO4Dvl1AiEO5q2jq7l8IiDNRzjezifk/6MCd/+qlk6cAoLwadflj316UgDo6Ou1R1YIr4Selx1CtT6ZjZO6lytlZNUfQZiw22dwB3iZKDE9zn//7QVOM3sJNoE5KG/embuYBHOPY0NXDbqgY+5JeWqdAoRzHcRclOt06Nf2Tf2sJpUJh1uJp8vmsCtJcOJN505w1OwvxSUaUOmpU7Ecvgj9gn7m0PzfGDefUaovIKvjTE3vPjDfGRXwWpW2kaTSIhzhRc9eI/NOJNHO8uFYHbY9Q0sU3aM8GCPQRG8mZXuM/uhekoGV+28pazdXYFhDShdLIYTQ+KUGUERsofoSXSfKha5pUBwUT8xxP9ZoXv951h7wKlljgM27v5dyb9m0ufOAD71r2dD5QiOR5F6h6XrA1bd4vET6JCWTtaf8yfIP7A9UW1YO9HSIq0Pv27dm3+UNfLpR2SiiP/jq2ZXozHD75lvdFMG5+oWCJHXTsqEwZtmmLRqNVTg+8q5ilWr7XiogZRWvTBiMngtuBIacY9Yaqch3159Xwcxz8TXCrjtqA7m+8cTJumP5yn+aKCiPvEVksHC5l0b1IobYIlCdDE9T8IomIyuK5o52iq55c/o71vqOmWZzsMkYiOABVqcfiIVwzujv7i/lNqccSO0JPooSkOYkWQ/G43mid6zerko4SBSwYDSYUwEnVxhsZFcOqakmaAF04DHLGuP/SVBTO93skauM57fS5S4qao+6nZ/NvnJVQ36TOuJiFQIvzZ8DQ1wBIy+NoY2T/sOVx1oljPqHI8SHCuOS39Sf+spAaIVUBSr+kskdRkByFkoa9j/DWtnUIVNNn0FQP2FrcEE8OFGj0pATwwu8Wrd7wEXAUa0mZly4JNDdoyMqjs6mFkWcOz1NEEJb3oOUa3U+CbcRx/NfSs/gs9VNpbv9+307DIIHeSAIdN68fps3+N9xHrA6Js6eaL0r0+J7KPr8ViWwXKhGU0TlopopWPnZn2r/olMOF4VpF2bQV8enF2Gc998gtt9zyPrkkSQVF1PwIxCHNe/7ulne/+923yPuEeqaen5Zw4yIRQ53+6t6d6f2/t1bn4hZipYqK1nHT0K4k0xnUuELhI+7RGdLBF1qe5qKcEUE4k3HUHqxqLoeDIG46PAMkUmaVDCbQjvvVmVGG5YT9u/M7uZ6c+Fp/SiW7hrycoOYlpSYn/xCgCpWPh6oNgl1mZhkWeZxKII/djR5IaNa5ZdKAWS+G9F0TR/qjN+Trvf+JvMwXxiWsCtOUChraSEVqWni+gMLZhuRvpbn/c3GUQbn8p1SX7SB47umN97yXKdT7SnNnC+FpUHn5WiVi1yVqsoeo4HEC8JJadXpxaBV3EAPBp7A/fwUFLQ4MWfCPzz1qoUEw6FO019DTmUIYKDARIUAQs5Q7W/fKZrw4uWVyi7ltsA/969yf2qIlpTReyWS+jElckjQOPStfYktwHr1h5TwSSl+ircPI3cRN8ucxrXOaTShjD1ht8H9qEXSYzliFiSMTf6bq3R03Mpog9WfZyVokAui2Dm1+12ZPou9gwky/3gwo6A6Mx9wOt1zNoNkA0MikLSZtabEnA0TgLlFvosxT+d6iFw1H9tAeiPTfWR/KWKV2WDv0vj3vu4XEGc/fbY9U5Lo0ja0BZGWHWw9ccsNROrGy+/0D3ME766DZ2RktvDj7lXWTkwp+FSpankJkZ5eewKXAAPe6zuQZB9b9JNcHojhoa0xBF86+NMsLECY5+zjmnKpEpw6r+W/59ntLAjbDHE3nE9wS1x7y3KEka3MqlCiykYmuMzq/MFeZ90fDi0Sn2YUmoM3i1FQzjnJ7p77z3Hve0x/TLJcfQT8OtRSmG4qnLWVm0dUfBSGFlL8h0ijh53z/zbthH554v4vkYbFYt09yn1/ihwxTbPaGkuKqxB9VtLqR8yu8OrP7sEITfiK6WN/peS7c+g9PgAY/NPRXEGjzYwNCFvKO71KyVkb1LCGziDTeTySfAw4R/E+5o3fjW26cnIx3660N3CCBJnIajxYGoyCa4hHnR/C2iFj67xfzwdQmp/UJ17Ef8a2or/+eCtNHfSxS4fAoOALhzfAILdUC6EdoC0GSSbB4JFlrdxwUqE3Ch455XTvRruj1zBrfoGz21PJfHrLftbmzGS517o5xq2KDDrYdQS7vlwRPIaIlSVL+wkWL9R8xoio+2dQv1R7gF/8WAn3NLXv22JkPdfbtkW/58Y9JmL9GAo3UU0WRZIH5UwIqP9d/vmdE169Kh+CuPi3mIc8yIvdLc9DZiLhRCQmtKdnEFRP9Lk1I2NnRi0yeoaCrfSIxNHCzSh6SjRG2fpeHjlYkt/a4wCL68TxmArKe5p+0p7YMgRhtqsuhHO5ek/6AL10TiD8bAFYfatZ2Z1/KjyzS9sh5GVWaYLkkzZoBToKrto68vr8iTB/cpopA1gtsDCR4aJDr8Je/nOGzVEyHYl/eyvif43oIX+udXXPLZHwL0Pby8pWRYHJlSbXlOvSENF63KR2xG/lqjbY4KWDIROvDHCvseNsU/A1IdLxonxrQLxhWoy7zFWVW8i8Ghai4zJACInmGQ6RMYyoFyEDgHze771xW9e1bMdxkoiqIbKhcJpMpKCjb0jAwEW3XF52m9BFMcHaaK1mf+D9mZu++2+NSAzzczgMkL+DWlzTqhIkogz4F3rTGo6nNbfFm86IPnUigpyD15v4fuevkzl+SXr7jx/vsN0Oc/3Lzuz7Q2dzJYgC5lZey8D0lBKlTFIKjxUxS3AvYmKq718lYHe6qeXSpDfvUHtLJt0T27IEw/vjdP/a087u/9rUf/x1wM95fqHiAa61eXlwdO5hzy4/rrdSPF+2DIvJ0eJlAw0+URrMEteKLsqKkl1ofbj2iMxbhjTeiKeUjq7i//4Z8SLQe8Idp8lZWrI9TrAreDRmyBfgcovXcQTIX3F6TOS7xpvj+peSSj/qeN9gfMPmHue4fMoFGY9k2MuieHz1yN36B9u1AIdEOaRzjzzo5/4BW5dzThYJMbFhN8vsvLQz2HZtcE0EOiGq782ph10lumHWYMLssNDD7EO+466HAAdQVOjhzhBlaA3/HjMqCQDCXmYyguRANycBgcYPkOX7jDqfeH3lZD/VMGXSrpC1VHuAtKRWZJzGShbpSsYskzzcWTaPXZGhd/xzvLjjibDQzJFr5Mq2T+Cb3cl7C4Y+5p5UkPPF49xMr7yj3hvnRUVSpwfCN5LPZbL1ATkvm6yMpFV3joMemppJ8VrME0WwOxeM74jRulCQaSQFqELSB+pzn1b/svOsv6/tse59df3O9A4H+QCeT9ZIZKsr29zEZnEpGwGUwdPEINmn43PtFdlvjZn1JRyYEqXcc2n7L+265Bqja377v3e++KM+3yHvy0QUxDKqcPGVeY9bcS50ruOdvpw6NSxcHJ8GSOkRKcNtaatke47NEapSFKAPTq1CHfHBC0T3SFQrtlXJfftGEBBQa/CZM9xivUlG5UkcXGpEa+iDBVpg4dwoTd3eKniMe765oKMft6g4RTfHGrtG9BkUJOzDtTp/xs5AS4kzp1PBsVokj9jGVcU2QTQN0qY8O96FWn0RMi0YHKLZZcUsxDAUwh56RIFGgmFol6nrCPdJtMoJk09yb7oMJoAupwBdA7s94m0NNJDUNuQiZ+YjJ+nSayHkdONBxGGeQeAZUDPh822SBKLnSku9ieHRhO84elj4ib1WBS+FjgCSZ1/Ucl3V9xwd3IP48UfgkdBopEV4rZQU5+YdPlT+MiHG/jxQHRKfrrvTn1/vQq3NuxBv7RySu6UwmRZYM60LRLMuw6LgrmYiRoyQhpVVoJCPrjZ3Tv8J5AIDNBPp9+/bts/fd8uZx5lGP5yslxWsmYFfg0JvUJxQzY7qGSZmQm7lrTWZ9Js3x8pKQPD0/kxHhdbzvmr9985uv+dpFiX73Lfu0UWz2WcKQabcF2YPZuSNc+mUCggzl6BKtSF6vVIWrI3T8y1U0NJsW2YPIG7anHi45HWnnNvMAy+kT9RUtVlcWv3AH03tLPEta2VoGijVDnl0qDBgQ0BJxwrJP7Jz43IYWGjmQQA9tMZZtNPfxlrGF1OTkjUbtttsAdNw2iWqtwwuQ45n5kejMsYyEUiW8ihDgiAC3SmzK9aOry8dpsy0FuTzT7zUrvfiMZDTyo7DHLpJZs8+kUsp9yBJ/Evyznic1sWqiI9b5Z7v4yvgSnwwhAd0NLUItsylqFm9APqTsdD3OQ8hV7unPJ0z/DMYQVdb+L395yVfRUOxCjfmbfESSXPMAXa4dcUNZbLm2WqCHb+ZupwRRKcMSuzPKKAufBfKAr4VTAK7gUdNblbNtZSIc1uRCKY8LGi7wihvpXPIzUbXGe53AdUxPzggwOX81RCg0a73Ihpwncs4N19N5v2kPc6HvuONv31fvvPlv37X5A5s/cMeH6tSTSaWZm5aNoTI8dSy+hprCuPY06ADr7EkvCHOWeBx42cI8XNxb3n3L391Cz0V5fp88W1hARm3kbNZivhAmZTwCC8O90npORF+FeNxYljGErkdfF0IfVbLH4Ys7jJnPCmSZgEkogXHB6SIbiYgQ9xU5D7PPiFLu+vIZm5j0Mlp1gQ8tMbyEAs1MKpPN0s3Ibhe3pdPbkkUm0PFuZ6k2pB3qDtHdxZO87cbu5MZJ9CUU+ccPz+XzljiHwpFsZR6dq4jWCinSJRdAh638y/UrlSGuqYgyLmrO1Jumzo4rTDqoDpY3MmJUSYkykpJYOgJJLJLWwB8NBb0qKQEpvA9dkiLKkgvPZgDDmfIGKUEAOtZ1aZQ4MFIa8j7yx/p3501rCrJXuI3ape+i6wGgQ2cZHx7MDKVSLOJjzseKemd1Cdald70OIbdgh9mMg8xhhcUuMEukgd7GYAjcUtpmGs616rCG0/8FQ4ytQ1aBMJLwokADcBFYHIe/ATTJo6tunMkziEnoQkFjJ0B4DOQ18uA/su8OuBnv2rwZCZXNFBVu/sAH7hi/ozJDEOtcfg6772/LNaCAYJt1ZZFq68uu7aEKXWPn65cmAf7f+dSb8rd8DYEhifGiRP/t124pZCgvFx1RpAb59YItYiIOymk/6UAvThabztEVNQe78qhABLkhQ5aPkiJhQpLwG6h4nuS5nvEDXC1OmlMspU+hgXn/qhge33S/zFKvCCFhmi8CJsx7QTITThkQcvE3njO9+rR4sfvI0pQ19fIu7pj07u9tf/il5jXNZ7uO7mpoJAagVSMEOGNZUoM+ihQIwnH0+AKpZFXf/GHfT/JhLYtzsVhE2Gv/z2xQHVoVKesIPqXknzmrZNL7y+90iuxPjXftVRMLibWnEGdHDkvSci9BIyMYgbqXa21V9Lc+JtNrUKwYN7/dt3+673ul6XrExJXXMOrs4ofh1tuAgCFDkToUm+zQfT8P+rnx7UXK3LrVGHTLJU+x7p8lbzw8b9GFndHg11N+BumZtObtM7JqXL/miL7WuafuvI9G1kwvWVXYLxNB0aQcS1iN5Eich+LnUT6ki47igkkOUo+istkSZdED7t61+S/x12ZS0IXO5gI/o1Kpf2pkd6k0I4X1iomWsaZZ3QZcjFtnU9Qf3zFpujtvXZrWun5OlQ793btvueYa8jNuueh03JKhVATQmJQqAZPki7ZYp1qKCZtCS6YVV3DDzuTz43CWs5H8NA1m1hAw01ZP2+Q86zQUQioJSGDE41uYL/VkLNYwV463YEYMJE0StSmAGxn/Em0WzWiEuEwBkipoeSC1ZJdDuSaIzO9dyrTbaeeYCz1JBfNArdDQqDZDN2NU8zAY/IWLKjFcSSaum1FsFlWUZuwfXqWhYXd0shX+i2JIFkOD5BADAxlM+PXOAl9CzUOrzgLCEFSi2icTcRo1aZBZd8mr8MsRP0M5qKgHPnEHGdGcc9sOLGwjCfTz/ToqI4msdDRKTyfRuD1MWCJQM/zlJ8SfLgc+d1wmhyxOesO8NAZr3arg8v9hxA1k9SXcAbCsM5R7WsDYUwotBXFb+YyHSKGXxjv7dK9lqVr0V9ib59XGpVXhVbS38H5qaC5U13cMMR0GeXZtadtvOPQo9TMeK407tI8EmpQ06WmSaKTAP7SPV0dL0RE2QUQqparg2QpyAyTCU0hZfcyhNGooNmkuq1rihsvSYVGOwNv4nyDRX3sfCfTf4nn3+6wS+n6mWNwCFhWAF5uc752quYPJChyQ9SvmZWKyr0Rs/ppCfgIZ5ipZxghjpUUUCRTKkkESTWs7j+LSQMh8x4pKHDb+DrkzXG95Cq3bloViECQItE6mdlyNmCbcsr86H8zJ9WW34mbuOhE0ce/Boul51sR5Z0pzEGuVOQ14GQgIEZoTgWhckKGgTVNrHVlFzX6Y1xSkhbIdrAgBD1A7KYMOTg5xJAkdE+7ApJtaRR/fyZXBX0fsRDVE4rf7oMcXlGmZIn/cqsyiccbAaU3SGSCAVdngcNs1U38WOcJQECC5ubP/7DvuUT6jQlOAIldi8pNhGAyqNxHvgN3vz+gRZFSwcoJ8u9sGCTSCBAuT3WE3FH9qBvb4GHXII9RNhP2ZSoqK3Kp6Dv0QTU8cQKr3cffJSHpri/cU6kwiigpacvGgxmvJJgk0sXdDjngmTYj87z51tJVeNBJ35e+AEG9ehKPpP53OdB2JGYHyRriq4RSIU0hfRpLK+D3AbFvMPO+IbTTM00spkiBZnoHzHtm+Z8/fkdMBn+PHEO4f//iaffnNmRFmXoEvCjVern9igobp9nAFw14xG5K6O+8BpIrkDp0PudLEtKsxbJ0nYsZcFvlRCQU63R0kzzSXIyd+Z6URg0BbCswXpW9lFjFdeihrwHKOEa2NRCgc5b+imkp5eeXT7/v+cxENF+IXRRruevMbUf/In8ze/SezqXmL+eOg24E9jK8jvmVH5E1gd+3nHlhZPZPOiPmwwuexLIggZfTxEW10dJepMoQYJjiuePwzKNr8xHM52mRo1o1LCoyWyM49oqqR94USE2LM4EEtDumAJE/eOMygVoA/V+y+HRp6B+47ym4Hzj0s1ccJRxARGGYYdNcGWRKl5DLJJiAHId/BzAuS50AI80l/a1DFyjorbG3fg4FVqj+V+S4D6gkpswByoBbHbvPFLnOj0LNwUGUzdv++fIQQF603ZExiW0vODy+HkbaGFhvKbaRBpcjApzGmdRmL662+I1bd49n1Et8Q57/s/MVfUIpFtbEe4j/k51DeR/rHVu89Vb6OtjqO+m/DXhqFYWO2gWXh2Fnh0L7ILdd8DQAeLBlgP0PeHhFIAiFGYOLUUCTYKu/nWkClkJCFx+Gu8hUIzVRKGZUyi+QCo/Y7QixCWXHEets/84tnSN8TBz2+0RuzFcRU85WUemKnCaiRo/2A5QwvkWjsV4euPeJ78JGr3S1ERUSx9XLNge+4tk61Op5Ee2HjAbjQfzKKSp7du+fndgPpwLT5hTAzJ0JS7AAYIkKg5l9BcsJR/VC0/NPIGGEMPJpBkwtVIg2gU2EI4pRCe9zo4ri2GKbcwK/wReCimif7dcJNb5NRE0J7UwAxhbLEdPo2Tygb+HZqQQvnK00W6A4NsaYWTXWQUuT2WpiypzL1gWK3jmah6+R2Uh5YhV8lBjlvss7KoUBzCQi0brX6sDKU06MMtX/kGGszM1sgEJkiS7eDEjPayPNPxs3v+G4eMDHzIK4Sjzn3YbqlI2R9YCoYEgA+RYZXQRsGrQhdMJSXPSPIbfit3/qbRcQEu3zdPvvQoTr+c/GpHwKd9hD9LQnKVViy5jJhuC/A7kAfFjvON/BV58H+NZRlrm9ZBW3RTD4ujvgzcmSffQtiHGAbmpUZp57uAnTKHaKSwfA8BNQtX3mcRfFEmSn0ieK5+8Tt5IshhkSklWVV/6LLQoWSvhvQFlOzyPLC9LAKPwj0yhYUWN3T6A8kyWyGkkXWWeoFTxIMPctaAgcSZeZKANQMNq9djvi+vnxDHTT+uCfSnlw3DR597ikomH/j8dTIb75xd35OkcECFNDxxT9d1/IYD1hLdsorYjC6XqDGoGgB9EqsSoXGoOF75B/qfFbOoINwkrmqO+LIIcBmoJITntQf9+kUQzwDi2SQmJqwWP5MXdHQvlz2cGOVuljaDD9n6Bb2Z9p+88BRy9xDebFUmob6yJLHQLR+/MKuSjRcJj8DmVLQSZJ6kkOgW/1nfbP37MpTaoniwuzs6EgUfRLmFYJqkceQtWnoJXh2CFBjRbc8sJ4Caj6PSh6RvLkU1iHZtEP4LECUpbyIoS/B9ni1rjzxHc73+r5laqcte98+Vp6A7MzZbPYlYU5RSlZWvsOAGZTrFox/BsdPlkxX4exNIe1EDbWXCjS3v1yQ6xhyhOJKQjQU1P2hYp8Ki0fnUG20PaIUFIs6SigVijQ6E88Zt5F8hHYQUt+XXfCVfGGaGHZ2HtwU6g9EOllFpkhNbTrGVNKXtyP5UjzA+jo17H+/0ofmfOcO3rkHASRPSGgNL4B1HvUCzOkIacpsBwPZeJLXIdYrxriWW9GW4z8TfyMe9wSa5HnLl5rwXClRODo3QkooNXs4k6Hts+vIjEgdLS+Qvxe5vbzSkXqldUOe/FRQFGgPknT0SZSSklAW/CVRtuNxBrAOIbGLihzqO5NzXt9PDtdzP8trm5F+ivD5LG9byHySNNLUEL0zjuYq6JKB9/wVANt4yGtXv2twpb7vVIlCOdgqmSkPDB4jqFyyrLnvHqMgAVZfoKkuiTHnUryzbpV23Wup01JHrtE70HJk5NjC2ccjxKqW4Xl0MFkb3IIdSIYUV/WEX6KhLY3GxiC1AiotWmiRAqRbhj3PokSeFw2YauWnT3G+/kQrVhnykX81Drdge2X+mWdG5l+aZbMkUdMDOAnWK0xMrrDF9ioCkPVZeArnnySBvpSN5947IZko9U/Cb2cIXVhCR7ToF7/4RZTcHpvDgWdlfB5eDHUdoeJ4aZz5U4h6jEtVFMtHfqfvz+ezCvO8SyTNijIrIn0d0ZWFZ7w4SN2OncthhhO5d5h5+MKqQrWD6V3ZEkt1J/UaUECkVjziDZVHZ2HZtJocz6E7Ym8A1a6Vfu8uml8dil90oyHPXdMDSBXLz3ik/tnDQJKxJAwrlCj7Q5WdaPn91VWe1O/5QAEqhGE6FXKaKYYUx8n/QWMWKDDUw3tRroezYlgGYjmjdXN/SbwAVjTmuhAZKSIwlnhWVETioReyPLJVDAz4K3QgZV2dAkRRec8Aid7AlZF+UkCZQuMKhWInaVQtFfiXRlLHWNTbgUDbKAUOhcxcehDKAUcoYxFDBtUl6HfF588S22B7JaugusLhpyiGv5F54s3qoNYTw74y3IqwtYfd0DzpZqid7Zh/7ve/cT56LJMqIUV2e9m3qq5nxWz2vTIvRjpfH8mM/GKENVIFP0RUw/vQCopCl68Tp4OcWORRdwx5lx5j0xc9e4zufM5AxWlEzyy225tXwl4NIfpZzophCI/lFR2F/dSIAJLPZARzu2S3P6kR8e4rv3MBTV7YMO2Zwtzh3XMlMeugqRKG0GQwHJAS/pFIte6wec5F97nr+2xTuUCRE4MLYUb32HQPeBHrghKRMlWzHsqd30G9+DZCcM1HuBXfcNJpJJhEX5Tnyam6hyrkGb+IyEkgjWeha8PeCkk2UXEaUfpUaXDlh0USRMi9aikdCSAHBnlKBVmMmOOsfVt8qPdXjM24v1TTvAqKfgioiX8aXF0EGOhM7SgFz53Sama9Cbbwjh3nCdxic9EwW0t+bs2ikfKjlgVqFEt/R7XDZ+fOVkAPepOH4og0089E0VuoaQwUaMI5jj4B2iAlDNTCHH8WLSmjGhbZGDdqRtxD/qj/tXOd7+bBrbcycAMlhM7wp5ivwevYaXV+Dg2cNh1j7Tpl7eBaYzffe/3/Wq7zBIoATTpLg8s8iZYe1yDGVP2WIcCeMo8RD4/0BLqJLEvvtT/gfmqr4JgywId+1tpN+0LiDIEuFfwwZTLlZvEumElo6EiSwL8hWt3bBptCUD1UTCorWWfz+TceQy+vQlaUdatUEqlxIFp0QTupLzvoR40GRqgvXN8HBirvVUiC0N4Zt4rP5pmJR+MaxBhwpIuoxMmx4W7U4677qZVdpSZcGg0f29FzOCa/9KXbWEN2ZHatXkrtWArNwhBRCWovt6UJujlFMfSFPkBZ+ql1P7MogUK55ZHD1tzheRRu5pUitX+lHsqQROqJGYyT4QkFjRtAguh/eumH83yeXAPMOlIIFVDnMLIUDKxAo1hkLUyDD25tYNwONYAOOtX0A9xaBarl1km4d7yizB3+xSxyEFnFFs5aMB4alN2eiG1gekUoLn5kUBsDz9x/ykKzz8K85EFJmRL5DUIt2WTpkB1UMQX+8he4H/SPT6EaMSVOEMmqlkhL1xyJ4aJnz343hRkIpDNA/IuU0sP/Yo1aLu7eOjirlEezCh4KwJo1QjUSOYy2vp0neBOFdW8m9bFjI5t4etHlwHd8QrR592L6fX537y3kRft3UwsvsIlIosPTGgMush3d2EGBGF3XQR82fDMzZHddd0M+c+zYsRPHaOqOqp2e4B44egFZowJF1BPle1zZDTUCitIPC0LtC6Zj5xGOhQvIU0coDquJChGvFD6CaTWslXZvNJeLsOA9y3d4l8PoLzsWfWikvr1lij1uWmo+Nb/g3weXplf4KkkG8HI9ooyLL6wK6NiVO3p/KYtzz8+d/e7sd0dGR0by6BIUCC62nQ7S6NNik7U+3FiUv33k4wOKBdL3oc5S2ccukpq35ubm50So2QZNWafe1fg7xnIZ1XYgtDFQdZ57YK2KCrbco3c9qmRLsyPHRqWUgq2+gDeW8hkotu137MT4v2rD2DVYoFkBQ/qIIszhY/ILygwqa8TdomC4ReZLwQmnJ9BEJm1933JLdk35DNgcYWkkXECRdRiAVEF/fHcqemzTqEdVs2BsT6/Z7Ih7uNNhHFal1IO1jkcBTM2pYUXgt8Oz8o9T2wZMwULcQrRqb0SF/kgPtCWYDcjcIvtQshZfgxQEcK2RuRn08IrgroYpu5GnpFpFQx36Dub7/nStb+vRpUsWtayiS89v80D0Fr2S37Nd4c5x6dO2I7p1qgzqq3y4uxSUWMLOQIjxp6OCZbQQnoEuo0kDW6e3Tjd0g8akAMw+uQqLsuM0vGtjiIqYhoB0yIZX2yr21jgzl7obiQBQMWzGOsIS4ZgDWUaLlbesRiiGh+kftaz8SGF2dm6Bml4hcAbIbgS2bm2TTJM45myjXTToooXMJ9IDu1GivPXCvixZnbxwdnaEcAGgXBHd7mDObQCNHEVXa6u8O06Lswc3TbtUToNP210I01gBTLk5k+bSD512eOQy+cgu4LKGY4svryHQ2DAQX+8Xw8dmZkuK8FKpMIJCM11FchoaJ9goohMEJq9i8Ev/BkpEd31ijrJFKKHIloCta3XqHbJrnTJnjTATT1KKky+VB68F/8fDosgwhNJFoHaWBh7lVcqkIgTveIgQUnR6E602oc+o4b/Teyv8ufsB9BR6cqwpF3m1CJj+F8w5mN8dxo4oLAlBOTVyjDQdI9cCNHD3kbVrgTkSge85i++0S+VhkM9e4E7mBehb8SnPA/zJrpIy81D/wBf/sHz0K9DSJco/tAG1qPm5+bNoLSYFAAHlFFTOGy6blmLU0Qvwvcv++L9w2Bw6TB4/D+OEhoIe9CcuJh7zb8Q4CdTAEYcHtgx/URKPen1lrFP96BMQ6t/3XRBZhDFneWk5xFyK4rqYwgpBVFUHvfUbjSIMT2y8Chb63/TfG1iwI770f1UKpXl1ZPdZOvGwvxpx1Tqaabh1xdXuarWOntRszLfKjVftdf3rHJd1vyJw0Qu5M6Lnvh8FCocDW0eNida94/5vcmsJNO32TyzmeWcO5yUWNh/GAHJcVkyUzjUwfQe1xua2PkPUuIO3l9SCNZciMYkeGxnZLUCWS/edOtkizxpOtLfz9QpQFPtg/6313vQ8j39HAVvnYsKx9Au0BA7PqaytQraGLnNImhAHWS6C3oSphkRwCsk3sOw7WLB1OPBgcsOub1YE5RIHaOTsLLp8zo1CLQP0g0/SIXgB+T90jamS44q5wl/w/dblOjYM++7K9wSoZDMCPmzDF4B+Ka/z/Y3nqPYrJF5qTsuWmplDqAG5EfNzagYkZhGYQN3OK6XbT07sVZwqU9F7H+A+voIHZMJm00jMjdQU1qiJ1h34jH1eLgN+66YTqVnUc/J6FrduGqBQqUYAd8dvKYPGT2HMtsioaAVBJ5gjg1Bl511VF1erXndh6tHbDoXYqk2jFu2TvuG1HIX/y2Ju3mwlW/C6lyg7JyZOfuTpkxPpXu1L+ROdYh09xt7i+2+X22mCuBXF4+4duoAPpfaQSBVFFtsicD7f2gK9wXfKIj6ZX8uzSx+Oon21C+S45LpaVYcjhWmyyiogYNh3REVEZO3JMwoZ6JAFq3DPul6VN+LN9HeesEpAOzq8CsJZdtugEJeqfRWklvKVPW9HzZWnCBV+dmTkxLE5qFw14pWZmDIB9iof2IoBTcUua72piIw/usH32xZiUnWczwOERa+/rNqTaO3tc3jPJlwMFxN1sggzGIkHoGc4r7eREgHSahgDSzeXsFa4J/Ls2BBwrWMFSNyR8tEzZ1ppD9Ra/9HLvGDYt0tk3BtV0KuZ1Nfh58+d2YbnvnWvpNMEP+wSRbRRsgqr+8GflhVGvAUSEkDhAcy7VdgOkKzAXKCZE3efQHso6iZRg1sVthFYwbXXwtPiwKESWM8vmcuiwdvuoCUGvx3Cn06/7s5PbNv2B61WuTeYriW96U3bzpQHtoRjx1dmXVVRSb4bslBAFku8Z2kFGpvol/7te76696EraPZCJZ735Zle03gSYhpcC0CGTTf4N7Tz6y8j0ET8zlDECw6oRNlZSbzzO5/StNMH0ajptGYj6Qj3p8/W7IKg4U4ibcngotndj7JtuHnDhvW9OuanLqDqGyKahyNc4Aa3Bd8lyBl4y/D9D/HUaURCM5P5AjDpAhVtoqcT4ZyAEwjhRBslsdpuGJiaERiXHHZvabIkJZfw722vKNMdYA9MV3zoEDA365nR0ZnDaDsdoWQC5WYBlWv+UlaC+aGgMC5/pMxdvglJGflUonoK/Dt8bKL7/tX+15o/fxdDJwDgOQWmf8TSJdGlzCn30O2K7Vjb0qvKkX3fUUTkV2h8LSrDpokyIciqmgeMjRyJiNbhM7v9bTT4gmNGDVvg1IJbmhcLg83iBt/r0Ns5f4ct7IvIoJ7L20vlj65YDf1smtVBrCWHMFVfKSGhA13TUPIyldXLR7lbN/zNhg0bFov01/texUMzwBW0wEAPFEDXb2UtEFutSymHy2loPNfm5SyPhHndBtO6rlrlS70LyhO308hq8PtXHdcTlJ/kVWv7ZibP82g4efOlhtQc65rCfedTPBpUQta0gbfzZt8NWcpWRig3vIe3JBXlXPnKv1bUWa2EHmwFW7ShRCivn8FJWerTaW5na1sR1tB2emRC7gKBhkgsbo9YRO9l96Igb99n7+GVmZkZUaQLTzkj/Dto4DeOJLDkTtFoRBCZ61egojmuLtiqQku5f7FPDinqf3GFp8Q9MIGIQBQXJDT+Ea19iA7AFfx9Zv5ZIxfWmuLUD0+tRgKIpouBpW41RNN0ZRVeU2Q7HIU63DR+Xyebf0YbBQznt+Te1ZcJQtOy97cGX7G3cif5bAFJgsg+NB+pg9GxiwqmhheVpG9ZK7m1bQ/3KKLCPZbIYzKyJuEU5FWxKPoCDfuG11/hVqVLgkjBs1BawhpbvZR1g5pbtjAEFl1q0P8/ok2jWMQqD7/AtIZnLVpnXt51pk//lPtY1h0iBOFB1mq1PfEu5rbtiOu282fWGItyAyVNETnmLcaej9TvKGFeu0i0MKEHupIVsBXriTN3vQL7vL98M7rmbnv59tNv6UWFRyzUakUqMMSge2SpGaGWtx7eVTpUF9E9pa7K9elwBwgpPE2AJtNgdtRtta5XyXEp6gP7wC31sMQsWTE8v7ySc16td1qADkuFPVnZ3r5vvMNv377SuVjf68Dc785zO7e50N82y8jRpss27EUWeytCGaHiWlDRAkCtauhYRXznvGj9bM2v4d5UyYOSnY2IVBSAPvlP959efAnOGrwwBZ5OvVKRM3l5M6hYWfGDV+BarLHV9+QZyY4XDvXEjtvQr2/oQJdjHYpWSuCpYH9sVJMLBKcuKuRFTjbX52LuIuAZuyocyvBKud9JAAzY0FL57Vl51+DpuDf7HkUYu307gcOYqcFnr0236Hnq31/A5AML0IAEbFMtifmSN8jvo9yqRCPY62p+D4/SbnI8iBSyPb8LCgq26i6ItGzLaJaIfCPLo6mAhevoT5QuoyMdTHlbufayzt16316gLTaj3v3E9zuvRaDLFvW5wgR7uSJ26sQOSK8qCFg/IKFK/zA9cd+9KHCiO48WD9tplUQL0+68q4C6W1x/xuRkGRfkfQpPr4mRYXYLIBrSSGqW5ZnUy7tdg+Tn6B6PDyKjFlTYDmXfSf8qAu3z3cnvUW06yYfX/NcGCzRlrlDHieu6fTvuxXKuKDewPSfN80OzJqJcAT97YVByvPWpzq6PrLFEmJhdRH2F8qH+A5X8XUsdufTP0KhXpK67F8iCDnsjWyGA6/9o6UVbz5VP3fX0XpRSM05jpIJhdIv5rJO7OujXC/YfuHNo6c7zTunkBKsvSL+u7phNV6xf9gRuJoOEhaIxq3PEt/61CHT6WiHrdYhFSyh09Zb/Fbd+ABGg/7BLap4OuB3dwGm0jhczsLJ3lMpNcLd+CjWwebQYspC1uZ/jfGsu6dd919GGI0V4j0K0otIHfcOvVaG+hScGAIziNE/iEBGPcsO/ijz7rmNaCdb56TVfNECg38psIWWwMMIPb8rmT3PD3BUdEVdGD3cY+TxC0FvXAHbSnG+t7cKLrt/71KN4Fc5KLj3NkbOzYcNw70fSp06d81qJ+y4jdhiyoeSJLCNk98Gj38D5el4T/fgpdCEW0UQAPvi53jQlaqJzUHrT6W0nucv3Dj6FcHAP1E/+vtd2Sjf7vsIIadvzdYE4TZVS69XpMRzuC+fSFxQLDdBQ503N9/Pq0la86dMX7rzzwoVtT7G9WvsMOe76a6nXmvhIa2LbtQ+fKQ8MH6/gpjJgtiJOo5EpHFfxNPerKWjfvdT/FgzHwtp6Zt1ABXkXsWx4dec4/pd3HuWueCkQof8NBeLfTN+6hkQgHPBtWPOdLLDinla/UrhDe11rWVe9pU2xNnBr55k+uh+Y5fs7pKJoANhiuDbcO6r00XUHyZVJ+7yWqN7cWa58Zds/zN2/h0x0/k5u/Ws6LrB+RXqBrN1TIjfYev+rtvHMqLAlPAKnQlQeZR3x2bXdwC2/75dVScNsOkVhb/q3uTVNw5XotaMWzMXCyXRr5xdm1MxEev2vJM+w6Qh34TDcn755zRf9f20sV2mXwkQmAAAAAElFTkSuQmCC\";","export default \"data:image/png;base64,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\";","export default \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAtAAAABgCAMAAAAD3LXyAAADAFBMVEXi3OhUVVubnKKRlJsXFx3f3uHWrJ+gnqDi3uDg3+Hbj3hhYGidoaamaqZqD2p1dYuSalt+gYcqKnG5xsjAvcJjsbG+w8a2wL/ssLBiSz7CvryAfoZdYWpXbnAhMEGxs82ei37Dwrx5fYOescMuMDNALzAA/wDAxL///3//f3+/f388QEX/v//AvcD/AP9VqlU/P0s/QD8AAAD6+PjJydHT1Nr+/v7X2ePr6OooJzCpqK9IR09oaG+RmKeJiI84OUW1ucU0NDr35de1tLlWWWZ1eYVzdHlUVFnu2c4ZGiWUlJkJBw39/f4VFBp/f3+8ws+ao7LJuLP8/P17g5GpqalaYnA7Qk+omZa+vr7d4en6+/yIeHVCPUb4+fpnWFYdISwhHSXTw7rh3ePCvcRVVVWnqKzrx7mEjaJjXWWIiY6xopvn5+vn6OvGx8yjrcLozMVGODfo6Ovm5+mjnaSVlZmEfYTU1Nimp6vV1dnJyc3V1tlQZ4X4+fu0tbnHx8vo6OzIyMzruKm0tbmPgnucqsHo5+mGiI3Ly8xnZ2xwYlumpqvHq6fU1tm1trnIzuDW1tckGhrMqJjn5uqVlpo0SWY+Pj7Ix8zU1Nj88duanKJ1dnqni4d/f788VGtqbYF/f/+WlpanqK7U1tiVlpq1tbj29fgAAP+6u8J8i6FNQTzJmYu/v/+bnKN5eoLw0r3c3OK6vMNqanDc3OKUlZpGTWJVVFjc2+OIiY53d3qqqv/Jycu7u8G5uc+Gamnb2+ErLUGz//+7vMJyc3na2+JFRk1Ycot///8bMkhqa3F9gYidoqqam6Lb2+/b3OK2t7iztrpHR0/e4eR2d3wrIx24u8Gpqa9jTUhaXGaHh4yoqq8AAH+8wch5e4FnZ2f/f/+9wsfe4+mIi43pspqtfW54eHx+fYJVVaqUlZiuhniZmaZ+laS8wcRYWVwA//9YWlyCh4yZmczd4d3e4OTjqZg/f39IXYIHCyKcoalQU1ZnaW7/qv/h4dxHSE7//wBeYWtKTE8WYAzUAAABAHRSTlMUnV8bXZP0lW7N/2LiDAMb/64DG6kD0P8F/7PQziHlHupiTf80/wHBAgIEOwRiAQNE/gD+/v4F/v7+/v79/v3+/v7+/f79/P3+/vz+Lv4C/v7+T/0D/f7+BP5t/v6P/v7+/v/+A87//v7T/jJvr/7+/k+S/s/+j7Cvbm//rbHMrZL/0P7/EbIJ0/6S/lKV/g/+/86w/wROyv/S0P8E//4CBmsulm7LAcz//v8EstP/rLG0kW//1DKStAMzjA3/yv4DcJZWlP8C/5jS1ZUSdDdW2G5r/lVO/t1rNQKSuQUCsFMy//85agMz/xX/bLYBZVMF/6n/BP//sDp1AzpvAZUzs4/PUwAAZ6pJREFUeNrtvQd421iWJuruyWlnJ23Ouy9nEgCBey8uACGRICkmkZREZVm2LNtlOYd2KrvscqzYlbsrV1dX55zDdM55pntyzjNv4k6e3X3/uaBkBVKW3fN175tPKJdVLosQcO+5J/znP+dsy2xdW9c/oGvb1hJsXVsCvXVtXVsCvXVtXVsCvXVtXVsCvXVtCfTWtXVtCfTWtXVtCfTWtXVtCfTWtXVtCfTWtSXQW9fWtSXQW9fWtSXQW9fWtSXQW9fWtSXQW9eWQG9dW9eWQG9dW9f/DwTaMPDv1jr1WJhh+m30+PN69oXPp0v0zayTYfx3s8pGxhhU//GazPDw8O0+ljG0fTtuY5RK6g4PDQ1+E0s9bFwoHWGH5dyemy3Tto0XeRi7du+FTOb23+sf6kXbUxp9QHDuBOyR0+d+uW7cm9lu3K4wG13d8W0XZmPwVZlherWTEET1QEO381zdz5TO7rokLp0qqT8OfhNLndk9WsqOj5Yy2yGMxjenoUf3j9MdbnWz0sXA9Q/xKECF1Y9cZC7nzHUPW0LwuHl0vHQ7WtpI1aExatDWDW43/jvQ0KVjMpqP5k4+cODA+O0+T+nsxffsZXEcyciT/2Tu6LFSZvB27jWEBxrHc/wLXwp5uqQW2LgNgTaGYC3qo8dP//gj2eyRUVru4Vs4qsYPrZXtf1DynMlck7H4f8rWSBaXtBI9K8uCXakbt/iyaklLRmn0xPVT+9OPvsr4Nurn3aXS8b0nTotYyohHSRRHh+qle2/RPhtDTxujB/l8zAuC1odNco/H4ou3c9zx7yiLuZDSs+LYk1cOvRt6eviWBZq0xgmNST7mxZHNIiFP3IL+GaJdeuSxubOl0u7d9Lm/F48FHhAZ5+Hh1xt/f47w7djT7RnjGI/1rCY02q+spr60yzGP3nxrEk3G/eSb2S4sNHb8sWNHXzzx7YxZoJvfLGJPWJ56rbIlmYwPv7lEfset3egFgfUxhadWRve4ZuqCny3dotuBOMW4diryIpZYltCzWb9s4Wj49f4Sva2fRTXe9guJ9MpM05hl8TiK+bk3w/xs5sXo0/Wzl2IY4gR6LDnx9xFYGoM9vM5vTsnepgXBk4yeji0zmzV1Jc/dL9k40Tz+48bgrTxD6aQvvDjhVqLpicXDiD9+/Nsl0sZvZYyzEBdNWCyL18smPr0djx44Ur+FR8LWHNkrOBbF1LSZ9MDT3bI80MYv3Mqr0UI850uLToUfa1nTzIrINKUlr2UeGrwFgcaN6n4sOORZWQwvobezEnZoMy+Gn3TtKIvwANmoaCV+HOunsElDw9+EDBqvUTHY/tESjPPx0XoarNz+7Ya6J3z3iVEyINsHb8GEDGaeF5al0x65OU3TdS0VaI2ZtGl7Bu/ePJpQP8DKAaPbqTvAsiYx9+vfFjeNjtcxbuE5ZpgSQPWKJrQi5+L4pi0PtNkc5wWIHwTaVDfKqWOfZWUurt0a2rLnEheehCSbOm6FL0rj+2Oy3i/G3Nbbez4pYtdkFs8tv1g2G8KHiU7c9MVgtvbyiHv0RjlJGxVbnO8aVRb2l25rqZUHM7o3EiJKdMQZIjlTIk/mNjd9cDvd78zRixffgJBu19GTpczmY3CD3A0hIYE6Cx3HcgBzCMFyWVprvLF1zsj8zSbvVD8dSQ86w5QJ6XuoDvoaleWp0W8LWLe3u23ZVKOm0pjVYXkEf8TYnALBW82VI8ZJuWtSijBhrGvBfKaL4GRps3qNVlrEWuIxc/mRupcoy9Pf2zvG7KmhS6eEUhmp7jG7Ao2H1GN++iYPNJgpzVnxQZiG7pLQyZTME3sVhDh4e0ttnNAkYhQ/sZxy5EsEBwmDAzR8myiQceTILh4I4XHpODxOnrsyvlk7bxh7hMhpth9ajkjgkbmaj9iJC1+JpF6WJ0ubeq6hTN328LlUaFINne685CI6bgx/q+NB40UuClzttBBh2JCRss+6r0SIH9nsap/jwtQrpi84TnsQc3yJpdl9R56MZu7e9AHjnPwW+qwbChmJ7tlgIirHh0/03LH1Aj1kHA+5J8hi5LIrDqrp09d5fmxDoRwcLB0qSOyNn36UDAXFTCbMlnzweClz9214z4QiAUlQ75J+icoh5283lO6+9cDnikwii9aYWZ5t5oBPJLHcsymJxqdnLZbDbpFWzrl6Ts/RL7hYETl5zCqH7NlN7P3w9jpp53RVu0uchpjmrG5G/JQx+C0V6OHMsSCs8BCv1uRRGMpQBEEc+XrOVP40F/VNrI9h1N9yEEur0xGXTMvRBWxB4E4kDXBcNxk2G0P1o6RW8dOZDHgA9YN/eRziPoy0qxBnSz3utG3dE33gZBTrulpnHehGM4gDwfxU5+Pu1q6NQlWc83MWX5Jl01yKnMysbiEHIR4rZX7u1gWQefCkYqUBUycqm3U8FltvLN16MuJvMqVdnueU49Q/1NIgQcAtAlD61KYcxILEcsI9xE75MGJQ0r6Ww7lAKKXppoTGL910z4y766dUsKOkRXcTGTWirutKuyji+u2c1m/G4bgUaMx2HS/0dXPEHMEvzZeBFaaHLYofGLrb2MRmSWEFOveSnGlWqi5iDM0fwbbF1sGs8qcO792URA9n9kQOmXk3tgKb1jdnjuQgkZy79DweS8Tbepixbet3TKOFhij6MSxGFEoZAk+MRWoOcxZno/0leihzPIoh/TkcKstzPB75S36PFWaljB/fc4tI7d2Z0oMWwoJIaeas23XvKABPyrBftwjWD0GeY9+MCskKfEIPZBZ7cLp0MzfRGDROO4iVoddNXXOZZuZ0igo1uB666afW43AsZOmmid7hAyHvrgwLYnJ84Ix7cTUNxLKada6kIuFvmTyf4VyzHd7QRhDpVhm9lYb/ZtxR8Z3lJWc3c6NnLAQWVjgCf5XZPhZH1yp+Baoau5XF3cqW2JxEG+8RCTx64UX4MO6CcIfuZuoAObBljuUL0eNG29YqeuNYUCYVoTle08919awOD9YhG50LiwVH7jHe23fDD0n81Mjx4F/ikoHHWbprVkHaiR4lB4yfvLWVPqZAlmzuRuSNA0+PiJfVRm8N4oYGmSNAqeuuLpl69QePn7mZiz+UeRt3XAcnnpbY903yN3Dl4EnnNFODREMRcJe/eFPLrAurrAIwCfRaS22z7ktuCYrmgQ8Jv/4ty4XDsO6Ni550Ak0dVBuvQ7aH4WsuguHXAC5ayei9N1mfpxAwWywowJXC8rAKIUAk0j7OBs67jTXyuRUdu+mLGb9UPz2mAe9z+KzppvfRINEaKQ7XCSCSgZiNjxrrjMa2tQr6p2MPRwnJrwhAidI+2DgNnhRznJxp+75EJHWtjzkczJwUtimwLvhAboTOgtaBeYZfyBCuOnFo2vLW0PXS9YingmdiiSSQfrIfFGAg2rSC8JYyGUZm9+lmpII3Jc66OiW59Kxonn1i40fDcThYRigJd4NUM9OVNKeXi/9h2gWAH4GVtYPRDfdsOHNGWmMcLkaOe3aObkZbhYOVYzHObxpRHc1864gpD8cBdJUcoUfxmaveDI/EGBZHej7sohla/k1cqb/J7JeWR64X6UDf7cozzjvDy+VYwcXSu15T7L6ZCAxnxkVAdio0c253neGMuxW1TjpCvGwc6Uwc2P9eYyOBNgbrItLhy+GcZXPKN6S1ZjipdFQ9QpWy0ovf2k+KoKAjK5jNqdVwycOcQYpoiqUCZIVCmOJSafMi+L8bu7hlzZJqDj2PB00ka4KAp36MKYpcBL9c2rTXAQRmFy8rXEED3kuXE0ikrdWB0SyACxuutDH4sAwKDhwNOqm+PXJDnklHQ6IFNzVpzZucbXTOEOa+sZiQw+1PQm+QrveVJkMUZZo2lLRP4RM/Ynxr4GjjaeOtls8LjHRQzq34WiqKSkfnkNX3Ujw69jeEuPC0Dwq7ULDJRcERV7K3LNHQznaLtIgXxheN7TfDAeYsQQJDBkNb0hu5XMVNXSHLFkWLJ/zculTftjUH4zh5CCMWxzKbGsulFhVGyMXbmUnBp2d1pDiSeVVvk/zOwAJugJNAK+Kqbcpl2ZhUnmFs55yIiUtf3KSOphCzyPx5BFuINJLULgMyazqxcvNnJffC6Pqm92176ZDHGOyPBowEPpHv40+x5aVxjyiWneiZDZxy/MV+4RRtcyaHnWdwxUdo4+gVaZlzpIUQKWTtgiajjfwFwzjtWRQx+2WZ+i5aKj86w3+ZyDeSRxXw5NlbdTqM14PwOTyoKAK3Yrj2M0s4dpZiL02HA51KNN6pwvCApiDQS3eY+KONIlUIdBQlBQmlbtI25bqCSF8oOsyNBBEinwILoaKNjV27vcD4cw7wP8hS163L0Z3Id8Gas3KhULCsYvyWUmb1I21bY1LPEdDPyUdZVvU6GUOyGThiFC8mnhvLnloWb/TlAjZEc7tHSkPAjAcx/TI5l6wYaszzdbFrkzp6KHOEjAupCMFokVLNnzM1Qt3SdKqQfLNQ/fbM+52YkJLAEi4p2e4BSTzPz5KLxiDmJzaQZ+MLb7SKAq+E1dEOk19FIL3m0l3IPcPvzMuantD8+b29j3x6o++4JCgiRBSZo3MPbbGkhJTm0B14WVkp7I9mtt+KIzy0FoA1Npsh3AO40R5RkpPzG3p3oUkIST/mNAIYRavSuLiROURCDrvhQOqwQFro0uqskEX8Ypabiy3bj08ZN4NcJBgXMRwgWh36qPo8Ng1SiKDVlGWroLJaIULMlc+0bfUKHGVwXWA3ac/oTt111pRfj6MK46MLj9lifw+YFM9xEf4lnmHZRED6ZuhRGMUJSWBJAJSaJt6yyZUuySKFlAEF2jopaLI/OXLQNW6p3D6WiLPNnY+njOOiACoAcyCTZveo0pWbUSJNEuaIyLjX6OPWlU4HrRg0G3LDTMlgRXXywkkVkQtCZyRn8oAXudTEXKkfEdQwSueYLAJYIcCW7B/Wd9kbT42aF8EDmnfFuzaNRqfSXDrwtiNHzl45MrpEsd7EymzPjGrBZBHeqnKh7NjWR8zu4uhqtQmLNO3Y0lg0mnl9v/v8RAb2vVz26XRqWghwIktipOyqTpKQ03IQLYTyrvjMxorswqgIER9TcIETNaKQfrqBmU1dO6xQYFkFS4TAgh+vr8wgbFstQMLmMfMIh8zlUo+eniV9OTolJg/JiXajB3stqXGUU+DvazM5femzqe5B8oLwNgsq2vG1g7I+emETLq/x/jCGhg54zlS6CzesKL8eD4IYhdyO2IJefdG4OUKKu+0WQOcR7jI6+L468xTHk6Ovx5aCHLwwuFjviZtgcaogxPFwhM6VrnWkXIp4pHYP6WyXRN2UxYJVKHDHHu+XqBnK7Ek0LLMZxKaWGkBXv6E7NPXfFvMjy5aHjE2xq1Iez+hXr8y6oO0h53DYt9m5j5VKmd/aBKHteGQBfTZTy24nkkFwSIIIi0zTRlDRCWULtfBivxNGev7diHcaeCesz0E79RBN09WVC0LnPZerwoDh1aXYSAche743tizsE06EzjQFtOVox0jAU/MPqGPMmhJIaYo4uL7ibttWxUz/SbAC3SintpwshzoaqX+nbjzrwRY6LLy0/uwPZR7mEv6l5nbXRlfnPKcUvAnJBFKVuC5AD+iv+t2bUaovA2kiN0+WJ8eYsod4HJJoSBWiJh9sAU+6Nn9kE1mIwczbAvjOEWI6Jcip4tABJqtHDSnZr1u2Hfx0Lw8farXaQrKKKzuh6+12ra2PpLZZHNR8+uoqz8NyChY2lsDN3ps2mPnZgAFL1cdSZa+8qK5VVStNXisDSSgO5Jf7Rt+DK4nTBvF43sjjwIo9NquZrOwFBJh+pJR51903se7167HTDFrQg/Sj/YmaJBHEEleqar2VSJshFItb0JKoL0ZljEcOUnlKPSMjo0ulygCMUTiIe7gK4Pa4U7DdJDyxQTIVL+Nzrygo9obrkgr0yAiyWGq93dS5E7jTh598UohGEMzdiBhWCvRDxrulLBQDSjdgVdP0jNL1Op0Ql2LXLA5FMdJsue6JoMIiToCYr54AWWFSWLRIZN9zPuCcYrnsReAm5pjcBMaKUCVmNnjCdLqYvQQB5XIuTszISM4k3D3rOswdkzc3rdg5xl3ExpoKd92u/5xCyAQDRg5IQpbIyUu9FfTJKIiaSA1TrJ3za2a2pumpV89k+yDFGEoQRgIHEg3AhItzvTd/u/FgqAXFJILDkXqZboXWiP7RUk2dG8kC0/Pm7fnne8uPsarYk7SjCW1hmiJl1GdlcV5zeTmQbxjdcGmwaW+B3REtkWourcM6kaYOF6I6on2Sz0D5Ou4CJNVk88f6PJBxNvDEk60nsaSQOBl1pDoJsM0yBwumA6CAy6HxYrEwGbLw5RulmzNGIqawUTPkgkVuauzNSsRmWSVH60x/9K0A9QOhCCPprMiwrEY55jgcE/KCyYLCpJpd51An5a/RX+RYEWLJmXz72hBk0DjFNQVn0QpQtGxSVEAxnEmvUiiDnG2VYZC5rSdfRdXkTbNyR6XkU45Oh6nKUttHv40o4w6JFgjx7MB1hdhjvP6mCZpcXBDA/E3FLugiJmqpfH0GR9cMAhgyK/Tja2tfDdv1emNUtCDQpIorFT0ZyA/UCNXI6TOzszWZp9jJVVsYWC2v0ArJFs71ss8gJYUMEU/ZU3KjpZEgud/q+API1kkf4DsKgSu+M/NQbzl8v/vg86Wl2lxj1JRxjtJhbsq/gTBSupqzIDpgbFCAa2SuRQFIEtxNgZqkZmoHVZoHAiDUCYV8qtigCDwOtvVoL8QNP+JcSxkwsqOu7rf1GksDQSgvadu4fcUn1dgoTxWcgpDP3ESg40KsonYQOdwlHInZTCGBCkzGftECBSGoJ+JULw1tZN5lvAHi1nWmcjLUlQoyKYEA+dFT50XzigVvyhFfWqOhYZMBMiswVQkePOnU+/JT3xA23YOC9lAtEHDu7arfjFmETUtCixdstajInnb1c46gJcBmdGa8JClzCTdm181UNP6eSAYFmSb3ug+nAgQ6esqYkMIXQhN/3XOxQQmwkCbEz/bhpuQHzGk/x3T4PrXpgQXKFNOtKH5C7rcQhOC6xhd7utDGfikRopdDs+s1u2rPcqk9IxlX0RkkCBr2073OBBhgElRaOG701sjmnxYqH9ylpiFV1KU5Qb4ifq6+kR/2PtCsRBCSevaRUjHzefLBchTCAdh0lUCT+AjACgUBJ7rXCVN5kJDuoylLBXDLrKUuB8Cjw0QS0CskjUAHvIKDsPms8aqNVFlSLCvNMwPVw5bAP1dr++SSdQXadkLXdbgI3/0uo5cPjaTKMVD9LER0dLJcIbVUgHTp58ij11QunZLfHi/wtQn5wcwVoX6Qnwq0ySj2ynU/BYFGLt0BeFgIpS3DwBF765mnjQ1RKMVzich/IgnUlx4nxYDIGI5IGDALjDkZntw9dBNf8WPSBm5JgQUl+XJLPmv36WDys0mQZQXpJmL/6lczthuju+ujppgstGiXgF8Li7cH2D8lxx4ndyBPEp0je4gddJwWoO0QkM7J0d3rdeNPZuqyaIHvQL68eik7Uj40GR3F3kvXWRYnocUv9jqpg5mLYRIlbriLEMvtxhuQcyqmXJdUQesppon8mCMk5P7ZPRf6SvSXEEY6cAsofzZrmgN5JXh06NtS5cBdFRswaxLaJQ4+2wu4I4GOwzCER0aS6yNdAQM2wlTYnW8vK1YoA4BtlhfwcAOO7VDm97kX5xS4MSsX2iquoE3L5xcWYE5df0QJQuLqFUuo0uResN1Q5osIGAtCgeKazmoqWqIPMkBUvpvTU3JIQpvhBPNvWb3Ug4AOSVbgM6mPzTAJvappelegAZB4LadcAM+2ASME8lJSv5lOtQtlR9EXtUqikLbU5YCEa1oq1w6SIdyacrhWymzI2Xw6czYMykWA9OS2+q45Y+aWMAVT8b4h0xzPVxAsPLCKxYW3PMnE3AsI5ODYUvYj4cVyEYB0gsQMuS8kBVitxFUxR+w5Fhkiflgf379OHIH+PeZM4lvInOUomtT8g7O5rvFhyvSr0wuDAK+DH1sv0YZxPEJaJ/T86Fhm6O7M8RjkLT8tC2GHI4nl7TJebE0idRO8ZfRaH6eD/Afj/c0iWBbwMWf9qDOdZSrhTfBComkVRAx3pKiCA+zGKgK96YECGcZR4ThNR9yDJIT0dcQYeabb/gjEO08SDbPjV+jQW60W7FfI/9XdfaPLzGgEWpzShjpr569Cn1YURq8NDNQW2r5G4ThkWpOJxoKfyTz0yV449Ccz+yPCUCVIejlfr8m21NJF1mcR0CuM3VXxt8c9iwP/22usPKvGuxqMwlhUKRCBxNRrsBV01pfyn/A5OG95YO/haki7EUTXNg5Y3hYUyxFRQrDRCXkaOLQEoRD7IgWUgK97BCmE3PnGMxtQ9A1s3ElIYZxT0Euuqhx7YgP5pOtHUkc/mxSVDEVHMh9YlS8/huBdRFieUKGhdqHoa5Do8zq5ihDogXzerEmSbNIqOO8BQmDeETF7eI37ipNSOuQETfiR0kwTX9AX7WV3KgFGQTtH/iyQVgv8+FP1NflCclgV+R7VIEehh8ZlnJY7IeVFkB0ubyzG36uCvtCSdnymTz5kUIXeL/CIzrTfDAvFolWjc0rC1Dan27TtZPOBeThAFSCKBTnaw1fEMx2wmwXLJnw3ROxdjPM15h+EGNfyUKwUs1QrOWW/uBU0wrAVjvbeLtzqUEt4DTrjPrSySSYDylhTCz0woNXY+bzCBipawnLV6OFVz7NtRRLDgZRCB8GD8/O1Tq3mkydFkIBZW6AjprHUGUfFGCdOxfFVd7pCND8Xpxtb7Jp6/mp+oaaSjLNLPhDepeUAGFNKGiItsDbDffMExnWoOodQdbxaKBXSQsGSwuwIjcSzjMCHciaxzA3kssPxjc7HAdQ3ApBMkeMGgfR0UnzaLFMZH4rJPMSsY1ZhzrihPbAwj0QUHdzXMT2uBPpgcd6MigFIU/n8wDTDmg9QZhgagNbOlKFvj/n+RLY2cVl+11o9VDoENwrajJ6F1kvLt9ttLUV8sfBtUHpyFVIl5IzjzZp8bs1r4Y9ziaCEroRA310/KW3lZoRxnLgpPxLVYRBtReBKhB0EUc8yaZzy0aM/eKAUcrJWWoUXQTIvToHl7cNwzEIfQhChue10pSlj1GiEVtRbojOl8WZIL6QhWovGACfBhWGztdrAwKN5SunbKhAPvMBphU+GT7ZYb4keRKFK0HRcJdA+G4A3Dli0ihv4LI81FWygrVQtSyhK1MUPZLYPrQ8KByE/QRBYAblyGgQ6P7CD4RDQofIHBhjdg1JiWOjQATKFHAVfhUWXpFRudrsG1cxGRrRaXnlj+nIeHMQyHJiCqMqdDRuRb0OEfQUaWdQXHd60xIhSXG4kU2sB9eiOqFAO3EQ6b3jiQgsHHiLtRGd6h/OGcW/pCErzQZHoZuOQ+YbVIgDOTu2HqxYbSSyvgG+LH7/RXwNMz/OdrNaGZsjKAkKc3MxBuL+tyVeDfj6QXqa5ICbw10qgYYoOzy9ma/sGEC1elqt143DpQYcIVlhA5Z645NsNTKuTn1N+oq8CKVpnHFaUgSMXtkai8aezkjmJ4G7wq8gNRnATCVcDt0R5i2QTcUgTp5VWCpl2IM/1TmR8b3RZdtpeLFXOqoU0r2O1RH46T5UL0IZwFrB/trL+4HEBXIcy8sRo5id7OXVfCmz4TFolLkvUkToiD41aay8M1Caw7xJLTfEugktwJCHRAT/da7sGwZfhkQAHkZyMds2sTZtam9Wm/fYCRBmGsTjR0VT2pgFHWGP85b18aAIB4kjgDObS3EUNm8UQnZKfWRvIm4ouZSv4N7L4pCWefJKvCp6+0iAPw6+18/tqvq2Z0xBoYoDoKumgMizBpOMVeLM6olFAHES7jvTDk6AWn/MAJ1kyhQ5sdrALHI/YUlNMb8bSgAqYghOqq8HleE/khMp2QTp2LNmlx8lomWwiUzMEGhXJUBUdUQpxKDxxdtl/KZ0QfBpmMz8A6nIWu2syULeazVe0EtLQ2PYBtohl/lpiK1wTZwOOa3Zg4E1A9s7Lf7HiHem1KF2LkNJrErCCw84W8vlaTSfnmaRRg+aYcZmKEDkPHAX/nVsr0XVbsljmBLCi8YjLSQ3ZW7BlFGrDFCpB6H+EzBOLARcE4NyuX+pBuOJIsXeKomapxBB4M0kxDsfMAWx3jeHd8jDqQMsUSiBAnLCgNxqJF/UwheQpwNkkXmbgmXoxbngDtDjT+Y5VLlqF4mFZIUfKDhrAWWm/AtGDf44lsjmqBx2bjiaeOy6WeY1OPd0NIMBkGZ6rYldA5cMS2fGRo9fH60b9wlqBRu05irZC5TVTiFODPPr0HxDoASQrUYdl55RJpSOGMxes0hzPx3gdmPA2bOisD92MT8H9mc0vCbT6oNVgUQNmAoHBY9eM3TcM+6qOYe9FFwXIM/JXLGUKJ2yJamf6SaLYrG5VmekKKjAnORQHquAS3pOwizVCgioULaubmpk9yNgSdQIef+Ir8pV6cU5aMRKgep1aupUxJ9Xm7hhAbjK0pWtqoMFLu9rwU/2cXShaUQzVEZHlNqsSNlej9c/vmM4nR1cs0iD474RuwYW2ghGFiCpAAF4qI7c1DwdkGp64q0zhCG8FRLgNm/HeVeII/OeBxLaZ2DW+v0T1RQzyrGVT1gTiOIIlSOWimRNIVyCuIPcg1iV5FNqb7Vwd+PoCsjgUvYNoKZ0W/Cns3ICOQ4yvmjzI7lC3CwBaerTQjYazy3hND02EOgUXyiYXBmDmOZOBMmCPTnM/KHKgvTxlzmAnqSCQTI+5frvI9Y1lIwpUGIH+O9Z8sTyRT22hZnmQH5GFLoNX5ibQzyieE+fjhJ0e71Jwtt0Ifc6JQoC0DikKm4U4VayWwH3wp2sDcPIRLthJml0LGeIi8S+PrHoczbHhcLiHhSV824Xzo9XERAKVnQLRSnmE8PGSMCRBRJXS2u5uK3XHGxx4j83WTtJZrjYrOoe7EarpK91MsVRFYchAXAC1oaYzClrNYz1UPpW1OpBn4K0prjFzcLbGZpZ4usrlV3qV4oWQdi0ST4Y8vtJ9qtKCNGGjdrxpYKDtB46NACFBvATgp+twZNudgezA+U6UmORhw30NZ1lW6fTpTvx9Nx6JcqmxDMOIoi8iU5sIdjTZQYxS8xW+UduXH9gH4bJV3ghINBkfIQPx7Fqno379kM30M+8btyk7SzZDJ72eJs4BCqiMNZkUkD5dF2HalbXEPej5yMN75fEzOYMa1uC5tMMwlsrqkCzmtXw2f16keRZUuXsS8U+D6mePrTOFqBGIKoDmmDsShtkZfF80oLTqQF60nCLTihSA4IIUoXqpBR9/bveFHrtVP4et8oTKCLpxcfZw0Qu0rHogeEDIASRwZYmfD/heq3JnSpgvvSTlc91s2LaVjBC007AJP9CToMzLxXIbnofus+moDPG2vXI4o4I76CBGFLdVFwqPiPoY41tjOqlM3odDsDgNdagvAcg+tQcKlHbU5o8usf4UK+zh0g1NhhQPaAwQK0cogQZOlkf0VsmlKRFToUBq/7Dv8Mm4q4lWK2hKs5eCHkKQQWIE1J9+MI42UJaDXcKm5qM6UZ1StyvQMYJwUosi+Eh30/aKuJZ9FDtTA3+Ji1lwqCcgBjpteSrRWWjjvImn8skncoKs2VYyMQ1gaUWt9HuJHAD13wwqTCjEyE9ANYBTSCYRUkhxRw062ifNAZQ9lgjokMbzHr+wNi7cPT56zA52ASQEB8WnEIqMTBdYz6VZqBEwaAKBUyGEL5PSGrRte+YUFwsk0fmBMXRlgNXRslcRsuP0qn+mO4tgKugDh5VA66yBM6dMYdiIr6/jtQ5lvtL0WVChahCp5ZltV81ugNEMP+HI7FiS8quhLXON4EO//9++2JticMF49hmdR3ihqutPjZl86h1oI2Aqkc6S0wDPoYb8lm7LSqURTnVIv2TlxPem23VDoI2TPmeiojiDcVGy4pPCmlH7UuPIRBYSHTY15YNJOxeK8f2rwHo7JE0HjgLjRR2w+nSnjbUsLiKY6mKsyoRUXFVzgOBuqSwegjz+uX8l7D3LASI59DC3zVA5UtT4QiMfnqVILaUx2gSoKLtMCVpY2biw65fHS30cjpDDLMCNsFM24mynRp5qaqDBDmyrOIxytkSzBclWRsjzxfyKMtJUZBDxtg6ouUY1CkU3d5gvkPpN9U+qOqDmrhKAh0pnC0VoUL1aXpcvnT/68EqTMZj5IxHHLasFrFblUlwELU5xEufeJ4GsQaCncc8FOZOGCznXotYdc2tLltBU8dmTutCiJEF0bjqwDUj35G5UdqTJIvxmkdMJ1CHCcq8u7tieORrrSAzm9w3kJ3ggbXBSEP8sTA9QZJAf0L9WtKCTXhpI1xmdMQiRm3SI+sF6EfSHRRI5OEqMdSTiqGl9KWS2bVvUTEkAyIgb+qyBzT/ZrwWbUm8nBfxAYBy+l8yI0IbKTw8HThmWqJ3GZiHp1XgiO0BRdXuxmyxeFuinMruj0GVKgJDnNJt/ETiFVNXn/danPoUWJJGi7+aqvosE0toazkhWQpwGcIViJK3woaz2YeCW1vmBbn4GniGOb6IyxNosBPEjigJP/UQASYfB79/YtEGjflSKoAUaE56nCmweLGbUdaQCTeuN3esKdK7KyG2U36j35mtCIA/BcYWldJRJhthdxZq4JH0k0Opm2oxWVfleIAuBz7BpcWDvT488HbgH0WZCUpMB3w/hCsZCbXm29o/v3HH/v4OehlTUUO1YQVEEl6goBXMJkitP1dchbvXvOvtiEOSgEuhEuXAsrb8IWl4bkjVdu7ojb2bpvp0ZdVYDl3naSWqhZqzrErrtjM9h7pCisFCRD8tlu/qKS+sm0UGELwP0nrSsQ9RA9qmVKhVdPdumiVepmb5TrSad8zuWDirhvZ3pAdQ+oFg3FWhoIzcnLPfs2QN/a/RKrRhviYLYB2AU8qs7duTTuyi1ilAMqLTisrt2FWiHG3xk6IcH+8gzwqmjSFopDn4kZ6QNYlrX5SBLCERZMqpQ5LbGC2P4K1PtxURaELqCnLQ3VA4OihtzB3m28ermq1vdG+nOKxqvFtmFWo6Su0hEwbqxNc0nImYH5KtDrxYv42NmNiw6k2FyGculkIqcG1btxFdpTE2in8lxUsnYq1M8wBGOVjNA0fXtDHPcewjISLQBqD5/VkWobBoaDGzZ2La7VF1ZJfZDGPUpXIF5nhMOmPmOYrJWsbj7aHmZP0MsJUqKwI9RDBT8CpEacAvi9If2l1Yy2+qnFVdiGkCYDLSDZY6jns9O//qdd975urySgLwUs1lRUG0OKb0067G6kVnratKSH4FNCVOquObVkqJTKMp8V9Gb08CsBrTDSoQqvqikrt3gOod12xnUNAJ7DywAjWmptqYv8XwpeeS7afkCLA7yrYIoPLvWMu9Key+L6fz0NE6qE1XYRE0p54Hp+xWmkyVByYv5nLKoUCe21Bk/1b/CwHiRhQFcJxvMT7pD/ndet6P2pkcfzQ5o+55IVHlirlpVcav4mX4sQtrEEpRHg/bar83PUnG98jjy97dpjfbl2TypehEwbvlU5UFnR3bWC/Qc+sbZIAH5LNeOshC/34v+JBVos/Ha6u8xOIYq66dsh35wrUD7DUruVIQMyzADyDUkrU98ojFSY3q3SJ/ZqmqXVRHfoz/qNyjuNghGF7ZMgl3rutll9jaUXwiICpC/pEQsdCkE+jICVF6eFF2B1iTZFS14pk+9EpyOPUeTVlOohHI1Id64yWq1hFot1kgn4glh3hUwDedW00NlEVeyjTMnE/hcjKUtV5D6ttpUy1W788777yRFRO2pQEVDxaTqroOa+SAaH+xll4dKTEBPIbSE214R2Y4VBB9uZLvOS4dw1jhJiHGJwgHbpfrx4fVQgHEE7brQLiIkHJ48QbfL69YUom0SR6ySU2wg4JqTToNQhTj80CqJpp6c7UVBPYW0yGOueEm5G4+2yfDcnx3Yl9+xbwCUHI10tC2rsMt6tKs0+G976FYDjUj2j57M8aBSAeelo5Tpr7/uztch/IAF29cWUtFHITzuHSMy2tMzA4H0w7EHr9dHQ3TTI2gWnIsP4j5ZCrrvv//O9g4683mOqkWJXiYcBEPi9EC1ZGuLXXlcIdCnwNJ1KX604QVpZrVS/afZVKCzOFgVAiyUoykhlm5DPrYaUQgTIUfwafjSE+2ssjQN0FRMraZ4wuCewnKQFUzgreUCKQ51qwYF5NlOgtPGWgs23qATAAxRWFNBoRjXEKEClMhHQP88zUbUTEcFsSFrIAjVo8f6VUFQgrf+l1GiVFZVzsqJSEfAzCh9hfrbCeu++yItSStYCPrUNG6v4Wtf2P2+XZAdxZAYwOGypsDyg7pWphU2z5/3mCxMwcsmddce49ROZXvPssuSjRwhWD9IU2ra4fyClK9tsu46ny9OPHH+JfghqpQvlIAmxZVeccEZeI/cy8lGWFDJXTqSOXMkLR1XUAeFXwr6EhbSs6JBeFu8GmlVcwgEmRT0r2PI7uOY4vUenb7/zjv/rAbNh7erIYupqIm2qu3JSVbvXU2Kw1GvUxFby7UnnSI1v81exY1wQKCi9yGNWkGsau+s3COTnNO7IQLk+Yz0O7GfcBmoZPfh+Q7pC9yhU9uxA9rHHGhbFhxecNIiRoV55AhCPbGJU8aaoDCz3w4cci0RsTCky/PUzEUt8wAx20y/XTtIoskoXw/Mcs/qR0Ipbwg2jG1LcyFVNyac+vy+hCmIF04vPB91RqnGBz1Sr2E5nxosRUEVH0qCL62xQYPG20XFJQas6xQjdIGBc5pXYZggqnCcHQsoMTniwgNC2Gjr8heMQaN/m/yjAUAlClmiCSjBcoKUpumDl89IJ3qwACnZEcEzXBkWnF2nQZCGILfDzE+LFhUIlYue6DxR21dD4TiCJw6wVaIwEVHL4TK6TWVLfWKeEhBN2yVipubOtGv5doIcK7UAxL599/2EXmPzCXTR0UgLzOujRo8qwKMSdXJlREs+R0GGagVkEzEAWVTddtO8o6ucjlwy2eJWK0UnRPOXVx/UX8z8TKSnDds7Ewd58T7Kl+fvvPO778wTdrPjahtnj1hyFZtoSiCy91xlvNWXTvlzcwy8x9gJrQB52ahNpC0lCX5nMSZjYZNl0hzZsHtVGEGHnfl359EoWyzGYFZD/1RcNtbJp/hGHhoaz4T3LTMbJ1RIoBWQ0Dxb0CIQXbvDKlYI9KBxBkVNoJDcA4nudNoEuJj5N6W5MPiFUkSU2cdmIADx37m25GRv5IBJje862FXr5O+Y+55gCmDNwdQ0tBTjhgSi99YXSFcMZp6D/4wrDP7tmv3/R5nvRBS7s6pVKs3iwSyCfW8p0xy0UF6UbUtVl47TBzDfDjSxQa0sUVGJx0wYDtwF0JmK8J+Us4vOHoVyIooKpM65VUr3Q62tJVjT8X8EGUR8ptYpkDyjgxTU9MREp4MyMK9QKBY4ldjD3SiHOdse70NnNYxjNkjXitAGa9i5CqoAOWjkpWHF4JTvuHoQpnAEKhaeMEvO9UAiMxd1D8VFdtMOLbSNUNxwKm1V8AYLUx+vQsW3+Aep1ElG4twIm621Scch5PdQHUe00Y5gU1NF1DFnTTI8tIvm9GFpKzZpldRSRbjh0R5lilT2y9OrBVKE8xci9EQZdSDR+Xb7iXaM4+4jgy4SEZJybdp7eqWIUflwvkNMXPTJRjZQYBHxobEJNqAoschs5f3OfcVygRcsR9faFB+CwoKumf6B0ujS5m9b1d5MyCyTuUrF5V9X0Cr8+vt3tPOPKrM6n1DmBNUHOk7Euq4+JTcOiDsrlPnMv+lNdIN9TzyhONkmQPCQjSiyL3Q4WoTVu9kcgDK4qiJeH9J9Z6QFtluFmkYyTDpxqwuvZxuN3wtlts1UIRXuDDm1HZu/zdig5d4zOPA4HC4JNJog2MXDBB6TSCMrCE4fP6woEBp5ihAG+fF1hRmvGvzpMBlDR1cU5oJQV7b1cJ4fRKaxBhvqoZGfAy+bGoGNUVwpztT7kcnqviNhUsgxZQc70NEQ5UfzqfXZceedv/a6D8I5Az8SXnFOFuRPrVdmP5Q5mtiWlYhGYzKmvAcRaqXW7aLiNpHaZKqChtCOEbvgNHLVJhKOLXHoK6PrmE5HEIeSf6GprnQ47sj5Dij+6UCNoU0ZHExy+gmiQN3CqNGLmVQ6LKnsDyrQD8BlgdcuylRw9xIHJAG6FyYTIAvdKgd+0DzXu+IAGvURPlEj5zvL5scKxShs2a4bTN23OCEBP7fbcmJC3MeIDIJeCawzQBIeOeQdrhgktG1Nx2uWA8MEx6hIZhAiCY1xpwp6tHh+ltIlXOpYIbm+NLr0toBoFhKlMwP3v+7X4MDj0WrteUYZsVAK7o8oVW1XJU+OKXL/kHFWSCXQYfBsZi3u/wOB74QVeO8uR5chmzW6wGbWb1Sr/gBIjlVKzNkuxBTF6hsUreBvXkxw4HMUKQUiCzQVhB5lDrNm69Wv/pTA8bjHVfwrCuhRWPjxdYUZQ5ndaESGhZFT8OELFipqqdmJdxBlHigUI4GWVLTLE3KF5Ol+DcLh28kIxoUIQTmb76PnyFL89Ge/8yaS6F/74GHFSwNcqeWazTM9TDyycuhVC3aXbaGXVFoZ4kZp8l5lP2Vtlt7DNVW9PgyCVmm2yl8+fca4sAZBNgafHX1zGEjsdc1yWuA8VyJLLHYSeR7dz8tFxHiwk9ghWGczmhS60RPrfxe1ewP5jXoYBmUEONZkodEoNsRh4hObTfDHwYuE3x/KPaNGz56xlPQGer+DfAINQwSSCSyzcNGBDk4hfgHYYj4qFVseHxtDTkHsQ5u5Av9cff+qZPO2NY0RYZoceU8FlowncFkezSvrk/Uv32e5s3ZooygPUKt+YN1rvRfklDhgrh9PDGR3vG4JzaoRq9pG32sEOGhlaTKoOBGeUZE7UfibTLkcMv5pY3WzTRigKHSeJI3uAkHIs6rfdTmy2Qqtco2RWwcxrRABN3jjnt0bVM4ZcDFF9R7tDmTtZdZGtk50QVIz+sFqI8kms0TESlkUrpPEV9bBSsbguB+DQIGVBX3fKkasOAWRBtGfCcgzWvRaLeaB1cHugdMSHln62FMqIFhF8X84RDI6IVK9ZvEaec9v+v7v/+7vJ7SM7ChnquyxCogr/svex9Q4sSsUtg9eFpXtKva7raU1OHBV8kT3zeXSXLhG1XSwYW7j8Xqplwv0cOlQk09M5zlp6GCkGnPmSbZwvpwExSbc2DCAFWUsyCUiOdcLGzXQIRb8DdNuoJ+nb8GqoJdDwc2hXKKMdgwyO9ICdtiCB2Ge/shov8kLEOjzC9o0Obn71DCEvPRRsCWo5pjNIyMfcbApTDYJF2qs5ZhmuzNhiQeMzLZVj7Smc5KxnyFwjoEsJBj8EXfA26tdbct5HDCNoSkFuNChpCb+65/pbjRKR10w5B2NrEAgIxfcrAFQQAvVQtEKQNVlodsIZIMt5xt+NwirSqBt7pZuEDYHf3TwoR/9ReNYUgjgxNgNV54H0YecTPgJZA3BlsJ0CjKCihIb8saxdxkXNmrB9JEkcSgDY1dcAYMBhpOZ5mWzoNoikj9IyhvJOUr9+5bTK2oZMkZlAFNPRUQWvEJO+zVZ9ky/6JFAexBv8D0JJUH92vgeEBWM1/xET8D2NJqDuAHQJ9eamprH9j36a9//uj/bQUs2g/XD0a/CleKR/c7hvnUdv/KxUbuADL2dznlhRAJTOhpWZmB6gdK2lDusUL0ZaxDUGiZ9+mkbnwO5G/LscWvSDYqId7l/EE33OKlV7B0ILNLxGtEDpd76mRxOYkeBP5tlzaoVTqIi2mbFSTJhopo4kwBaJkMtS3MSPr+mXAEWaCmB9d0c8BNdBF9kawvZaBLFP04xzNpUvV2woghOGAQaFDLho2lW7J4c2rhZIx7tV44x0USdWWCVFSVpbBHcKGyhMwVavzx2CtNp+7YYPi1AbpdjHjlh8Fg01hbzQASo8G8K2XQ0igLx68rSGR0yTjRJmHe6bjV+rMcdS4+EAaUMBAckSjT6fHtgB7ad0NJajMCpArYMBLrJx+sbNJhRz/YG9H4hUbNnUdUDsH7A7Gpo8IymUZrBFLjYoIiQ8aOlPlUCMrKlgyoZCx2dJGCOYhncaIkgBR4H6pOg40iec1JkT46m/AvjZ688dujY2nzhA1LAe3vSBeXHKt7HLy/A16g9cbkDiLJouabLmyAYAix4eT9+LfUzrjMUAASugpu1g/kFhdJRb7ppSoYBlWQ5VXUPoNSmcLgitJ4MZPyvhx8Iyw5OZaEpkYcpTOJkAjuzSJrRGSFA5lTKpN/EOXTtfzxwgrTcHHLjuE2QHvgYvGicd1BSaXEcUEoeMdaWbw0PrsqA4aU7eSpHVL1l21kE/9wZA9DuF1VB2hQDXufhlCFdhB4kAXugfuFmHfxpoUavAH8poEQzGeNiUWqzseajHDWwT9dXzr3tcZXmQCZjfswnxARcMIC1EuFagfwnOhPo2XruRrn3YOZ6rDxoeMHO3DI1ydh//aM/8tH/+l9f9vGPJ1ExQm1L876JNqWEiCJSI5fTzEsYA6p2DCwGoOK08YGhjcZkUNt0HZWgFa2CqvonduSXSBhKpMHi+mBHIV22CulZ2Bsv+Umj9CFQJ5IAyoJ6O8OEUodDOCGocxkjvQavFpAL2G3ayToVhBjGzzwuUKCCrqZrCgvrwIPQVwLZrvsW2+xyefHy4kudzte+Viyjd61E4Z2NSOOZj/Uv9jfuHaojk1OYdKkrH3i7A5TCYsjHIGGgcCk4tSmDxlUpJIKq+4wWoDl8x+KyR/goNjpAhIAWhWB9teBUo+cCgNYjZ75rvPfGozREcqSnC8JFittx5ql8AdkhHPjYA2iSjYiy7rQKYRCsacP8/6rT8PCv7kmb4SD14HOZlxNWnABr0SSV+3HqkAQOp0WUlAQTAODxoZKvLCFk/gMHVoz5M3rPWBkk99oYHyfysuZ7fGrKQiykeYjs4+MwxD/XX5zVJ49fOfrISROdnOkhMCxxnrEivRCeC1VLsnKjWyRszS+Qht5JTLPlTKFhQA0SZzgImk10mcGiYlmtRStJA2/S/KTHPBfuC5rmQEeJPy39krGyZ+Hq/G4p1fYn4dZA3Fxp1dJ4MN/eseP+Lr4oOzOAtKv2HZob5kBFvLtfzvHIHE6EoL6XS+MkssBcCwWUNgbg3VSJqp1AF6HeG5rhaDNAkbst1wo0RQgnfZAEcAgWKFVZ86xa7TzOK8oaCZVC/NTcW9pwxhL0vAl16hCTGYREdnUaVGrVAQP5fJXYSpIZUyXYKdigbuEs+tm+7ckwcQqvAciOoeMxrISOOo6W02qhTz3esg7X9+6hFblTY/A/PzQ4lJ5NibQN7VhTzAdPYhnseYvRkJ7DWoQmnaLspBoaNFh0Uv7kyuyAMfrzDOB4+BsqyYv/UboOKuRH34MzMQYOFAqFSRUigEc3GErPoh3QFC32ZBEcX/uR8f3pIw0O30gv95qCZWx7qF6DT+XRccVhLYosYCn4ieeMm7XLVxswOnqSUjjoRgMCRYRDRe9DQZOF2PyF+hIVEiYmapCGhk6Dka5n0rEAJV9Z7XsUOZQu1UoOi4yRtmCbA7yBDzRVDCNoJ7BAAn5oZZixeuoG2n/talza+7CBb7kwekh4Adh+fEqw88hc5++HmVcMmvz5/4GRh99o3AHtaMt+/bhRy4XR5w/Q6JFykXXHSWYB9dMiISGAIgM7AaTQZPULF2goq6MOrD1/tFeBx5shN0WOsKB92ar50hUTAohVB2iXFbK506M3mb/7XpCLJoPmOyCys8iHScQYPoinwAO1BYTzZvs+sCNRL4/0nl29J0d8Tl/2heopfDoVlG11RgEBYoSAB3EmH9ri2skT+y8M9Rlaalw4heFtiBoRxDLKrARUzigjvaY6bekQQCXREGgZXlkN+p1N0NCgkYi/6rIWsOxqXl9p97XTu6h7N/7h1KEBkx9QfAP0Fh4HGX6Bmrzx0d3Lg7+NUilVXP0Gb5aQvfXKkUTcUyhMSp9gVu75m2hmefcP1/cc+UHYwShwYSSKjivKdBgg0eAai8QcP3AhfQj0eItVTOgq/67bHGrQuKgWx1br41MLZ/wXqLEINYrUwdmat9lsEBfgoKEKoPrYiZU9r2nSeekrnzeWBfqSg2Vkh46NX7h3P0y01ayiU5DiHUJPKy6wWTvvgfldkc0GeJGg28m3bfyWpWw4VYZVPKgqZzDyI5BxAYAHxnCIJvyIiB2Fdd5ff7HloLZd7rSpmGGdR/SBk5csB+xaXAs1eGPkIBI7KDsBiZ4/UzLWkEnWgndUY4TzgnJ/6qihUZCbR+kLwEAfLsf0Zau4uJB0K3FsIrghe2VvlHuCQTF5QTe7LT2aeCYyjmAZiPiZ3WvEo/S+659+2UdPpGXjxp9WUDeC0lioLbhe6NgFqDBi1Oya2sOiqg2bP+khEhf2jVrNwf31i8RatatRsrw+xv+lEFt1jWKqIYo8wTKYX54UJoiZXy7HIeR59xeoPoA0WOnIZ0KI+Fm6eT+BTjDke8oCKwh1hg2yqiTQbDMt5Ep65Ak+j5qPCPjWJJqZKoEmrAs9PTDPz3xhVE0YHMz8RoA8BuQZEYsefNpY6nWNxMsdd1XvuusOly7/DnX2tRZGWmCCje3Ms9kwIc+1HOunx0dXTCukmPb4xSgIjy83Z35Pq9VwAcyeGx09cOCkhnkPWOQZggW8CUqPTbfhvhTR/rYVVp8soEK6cWrPBk6V8ezuEhIrSaRqlpgNtAR9IuhhKCmBxpGA6tmx0p7xe8dPOYG9s4EeJDtRQbWeiWN8CLOF5LRikV2miMexvv7Bq4TjxGWUN6woH17yf9YmRC46KAgDh5JYPBWqn1H4QJ4kMr9YXgQJAv0xQBkBZAeyQcNmTvRTfXuH0tKd2VVAJzQ1yA3z5qFYnZbngcHJvLmVS4ICuRO7wIqOgremngL+8vP7Dxz4QX74KjsoUS2MCSRWYQytHVDEjikLaLvnWdJFWXV4o5ZsGHB8KyTQttE8vuKx1DeksDL6jzwoo2AeEGk6IBD9LdHYoaBgJr5rj5EyvEtnI2LPo3ZiQ4H2xrxyA5w7049QC4xa6LHNaGga+rDYFuezcFh4Vkxak/hwuUyolgV/CpVPCeZn6gdIU4Bop0CONEwPu5WXg5lnQ+QH77oLUpxK9B133HXXXUxD5KyZ1OuvWDiMcV+INJGA2luq/+sVhhldtqgusvl33bTIYOangsB5B1znRDu5+yQI8dhsLQ/6sx22MM9ifsLiE1NcWRIgYDJM5ko3GWI+PheXfZP6IWh62jw07/uHi8qqeoib0Vyu9LcH6qUTkOcG5LmBms+ehQdzajwQOfC1xfvouJetJwi4A4cP0zKWhxwQyFvffezs2VVD5xTrtmE3QsI1CXp2E0o4DtS60a5O8Fet5lKrlDvchr0Ta2rzP93o3fZewmg7NVEHAwUIUG+VASVoeVhp+cKKPtXD1PWyhfYqSXAxVaZL1cSnOyiVy+c7HYRPcAt8GkNSO0jYVgFT9KqW85kbjViIFsVtss/V5md7i5X6iaUXoOORQ2c+ClUPgsFhovcSfBFqt3ZKmbF6ggI73IfFhzYUaGLfWN2hgIJwN0jo9VUHfKgHUXfIODVxXhuYgGtvYlIIQlLMw8BWUU87B/4p4G3U9GK28TgNVPoQNDQFYiTQdvy7Sy26ZejeoQS6quSZ/uDeVUFdIwhtBcI24a8GBEdahWYCX3PJ4xhGRxhoLXRlev/nh5b2/a0tNF2QVCV+YA6jMSkPr9tA61tNOIgU72KkGydQKLL1B575wvjGIymo50zZownGNJgF7TFnaAg1iNApcEdaGnS0/du+YzyKqw2SaLvB32J8sscKR9RKTxGQs7W2RG0zm06JqAPZGQsDuYaWPYEjh6h5jF+6UZhqPAWaAm5to1ylUlXNhkWbMg3FjqIHEFS/487fQV6eoPUQ34eaguDdaDXQu33S3fXRx5BMiWhKAxGdUIihuxZBFf7laUyvGlU+waDxP1LavY5ttHdKm0f1G+1Ph4a3gaX7PYc5WqBqKM4uoyKPqV57ZgIlVADUmVQ/u/QBaOB6o6USENVG81f6TM01yDa9kAAzzKHddZIAbAGNSHoKIqV8i9h1onQgtBo4F40ql+rufQR6FEWysR8tKpcK9e0OsmJlvqJlpHHh6R5NLSnbcz5/f60G+mnWV72yTAqailNlT0ANwh9COjOZ9WnbjfrcpIA7UVGkMJt3m6FsN/5aQDX/x/8Ieb4rtN30usO1y2XwiNCSl4JUUNsgk0iUBdzuSrTxAdRU8yq4qMGlurGsTr6r2QregZ79NO+XOntWMKHFeWXwik+8gvreFqKqRHE0p5jFzCKJend3bY2fGBwcWue1jmvEs9M1bcXcaZ2GgeLUYpnRUwodk05RkPoGbtuvfe1OKOgg6tHGAgtF4xzx0Xz7622UhKHLEspla+lwU8zrPblcLvOFEGAnzt1KyG04M4qBFTtfa7cCs0qjJLB8Y2ARWp3pbtkTkug7aoeJOAh1ZiP7Kz7cp7FLOioalCqc9WxaHkA9d7BckOhFuS+P5J84W1/WWHWB0OC1DZi4n1qtz2iO+yia8kRJgIIfqPrEriUySQ4ftqEPaSQKP7Nc2GgwZyfCZapdf7yvg/fHCKyjMdAHqd8iDtqMrs2AugRhhn70xkC5e+cZYdGWE73tAcPoFxQ+lbmGtgX5WRD5kqRqcy+P+Tx4nht91l4PsPrhc4cee361TP8vme9AXVr+12uqVVxEA6Zm0DEQPaERmlqkxTh8c/Qwdrl+4LpEaxubmNaaIqR260nRUR6G+w73LuQIXxGEywKdmwwYsI4QXgfYu4UWYZuTAe2V6uQDzGTPvwmqKO+Xzo1GkkQ/doLg1a9sIYULsATS/Cl04noFXZ9wgPsjaI3IAeZjFhv/3nuHV9QXrMcBnos9NFayl+Z1Lg2OhtKfx/+3VOCL6aI4TgcU6WrnThdPs6tnKfp4lCrohfsoTCmi6zYoIsUJtHeBQEephjaM99XfErQICgqjAzeeCo/yWQf6eafdDHIt6jyB9D/m216Fun8TOR01xYRHbU0O+Fk4ifSuzf3x3iU9WO+PvAFOASLldBIpuaszM6h5Q86wOIEmHSayznJu7vS10RIRLloUGsCT2rXWIcft762/kDTLlg52OdWB2ipsRnhYphijXMSg1Kdpb3YbzwPde61S0fEf9cGU8LrjqOejMcam6p3/J9TuDGce1plcNA87geZ1S6lmu54x+qMc4wkm36CEcgI4Q+KhqhSz4Wg84fDyih7/TBNI4ZqWI/9z5n3n2/uo+xNttIbUDAaxE94fIyNuUXqYRJpPMR90UDTGBFOpaqcCjShN1sncQ/tESozvQnl0EDTuSqrkdiB/UkC/hyRrx6AqxQTWA55Gmb9Er3xYQyx1gwNUwN6Lj93o1TqYOYKk56uDV06iVrDBnXcA3Q5SiW62sMRl3y1OOiiqRzL1+7aloodEjFE/8tyVrxir8akjIuEAH1l2lYamWcYa2i2Ru+FY3Iwb4xjmzNUqu/e4wnmkZ/qyRN3ngHCAD3lYO4zeuAiX58HMVvPvJBoHDqVIRgtxRsNOMGPyBpaDJrhcAZ72ToLiXdWAK+T7qISbfHLi32DcNgIx1eB9xHEY+jee/EAvgX5N5uXo7ksEc33FMaVEnZYAXS/yPA3FbhcXQcIbB+J6MYZlgIJu8gO9zqkxbntFwCkKlFA0b0W3FjThB6nUN46qsO/Z8c8EqTxXQ1HqrT8AjZ9FPBj4yY2nmjGpjQUF0CTQaOcDllJ6hfxIKpzbevuKj8Cmq07w7Wk0zsrDNEaForeEIr73NaW5OA4T+Ptr6LUGBgEutGtUkJadhdIqAE0BCjeLwgIUzymBJnsBgQZoi7OFX0wJNOhG4AQZ28k4G58REGe3CnEmkU6VdFVrFOXsrJokO+OVCXF3lECjEIOpGTlzDuksqI43llb2dvmeGA10Xg3/wpqcxOyFJkm0kufYioF6gDSnDhnOm6amZX4S71h/QxOem726I5xxKMpyElw/nYR+Q56BRSNmpqasls7AUxwdT1mxlMuwQG8cWr/vJPPQYSBZEl1TogzioB+CAYH2cjD389EZcGMgwuegW3fuhCZOVvoL2zMfjbqKKcAroYoa3YhyySIqogcWFvK1fSalUsGfKRDrzUL+DstlZ3tJzqDxMRERHzZYJdA0jgleNPYK6WIkRVG4MuBH40i/BFhkeO8JII71gvPPRq8LD+OQ2I1bYcNw43DKUUCOJX9e8UkeCJQFq4IkDY+j94h1oHpIwZqmtvKpoKQPlwkzI4nW0UkmXQdADV3701NDl/a24GDQptVkTRPtNDB0yiIFk+6GB0fBly2aJ9ac0qHMiUhe7qjmhRbgg1Dr1jjilNJoGiXS1ks069AlqN8m+nGF5Blt8X0vxRjggMKJvuuuRvgkehmEERyQO+BQY3CIR8ERjgrQPyhD4gdQT6kk0o0fzTxMRow2Pzh6o7gQ0cDCNBiNwDpQIP1a+M6vCP78FU008mq2EDmb2YXzGNykqOlTVvJCGhaU9sLvDpMw2r26bncXGgbQgYQrvkJF5/0Z8oDU+SrHJo3txpAEUqD+PZV7bKdXi9WnMUKCPB0InY+C0FmWAACkuEeCFo/dKoqTaiVOp/KMAOztK1ikOA3NJVJXo4WeWlUXhzSatxYnOhxZp474oLAmALmqlKNDvBO4Xa3wVM9GRZp1EI/+4YJ7Q3LQaxj9ef1YaQ2U+2P3zIXLyGAZdYmCDEnBrnNlHWNcnVLPQx7kxoFXYJtJCRGVAHecxq7dSJPaqSBWwOD7XOkDPWEJeMdIEjquvsoc5onPR64djppvApdSiqOKpllGpo9AI7h6sYWiDk5VYQPn4UEpWBt1qk5hF9VC4od9hiwqlvnQ2s2CQCRyoq1YKjy0VGsXLE6eRMAvpKQ0MhWmIxilTogiidxsRV06iy/W1fChQAK4u+MOt9pAYAiux113IMlSKS8CZEU/Jhbdh9G0ZMUKVPsZxCFIhMYbufJa7TC+ZgyudJ4AQgXv+PNXfuoVn/jEq19JujmARL/ilU6SIILKyvu+RhuHfR/DXNJhKo0DyErL1HRXC4BxOjZZATumL00HT6eOg1ECBAgOkEflqmj/FrQc6DEbwUEFrdw+sF6ekUWkNp+ks1RDeKAlOTXGw9UJXke0URTu/nrpGtUPU6oxDA+spECgsWa1K9DwosOgVW2iNej8bJu144EsAx+edQRIU5YKNLCVLleumP3wOh29HT4EMJqxD6Nlhd4VQ5O2DGIEndGihRHJRH5ALDLEzHtxI5wvFz92XQ9SmOe5SCWEK/6f3HBd6FYYF+2kAj2mR78MFlss0oxaRTTH99zbqzvQddyKj01hwqC2whzmacgCUjVk5j300Jcqrsz5oTjS3fR1Aj08WD/J0bOQ+2rGAeoEfHosbX6K0n1vJ6e+tCtQGd2wR7e9QWO/hqIkQIZo8SZm0mfJk11GcMhTgUaPucBBAlDlAIkLVOkONUNJhFSn8xvCXU6sKCSaVHQO1dDUPqW9ECGFDrp5sYA2w604SHIwN2eazdSrDJvfsbIZbj05PzA7hrDwU6+kC/L8568ggW6FWorZtid8Noaq1kIcxy8Yu3ePo4NdFZ5LszG+Kpojgva875B1tklHI+ZWYHSWssScGI0OjlnsKBEkBU0lfbkwXBeKoZ/p8UuqxMXBxBdXBWFm6nIipzEP93AKhz6WR9Dmqyu24mLpj1c6LLu43pVnpCVAUm/BANNoU9pweJmkF6fRQTokOgb5WiiZxNaz4OK6aoHtmWOBlhAI5uKYDiyJIY1M9dVp4GBzwBEC4UCvZ0qPtyDQaADbcObWvRcSZTLl/GSXz4Yi4KElGfFQ8cZjlmPCewLEofxnlEa1jvaogFFkf6gJ+IFUbLss0Sb16pCWClhQG5xtWZIWGnn9+BxFAz0F2sic8K0WzfqmquZsfqJDHoOZmIr/DacDjLo4Xcs4qQ+ut2G766V//z8d3XvgTBibN14LRgh152OQaDwkLBCE+Q5GuWN9BCBP1LTBQ7CbcLhxj4cyHw3ugEAriQbcAXG+C+nCHIrfNASExFDKUksBRCxWAcsC8/x05sG0OLFik6ewLND/JWM8QpM+nVe+0nEoNkxVNHyOZkuygW5HDaSvEX2AE6wZJyHPMD44+MHF9WO0rJwatFKO001P9bRNCBInPZh0JuIYS9zYicLJalpzvc6I4WQcD7nSV/ACtZWOa9Z00YxsjCS64Msw5xDCCiKbjZrdwZUlL6BSuzvtGxcSLE18fLrdwaS7RKHb2eyCb44RtEnoUrGJbxeoIF+3X/+o9DJHHVMaC5gnzM5UEw3MuEx2izQ0ep2PFae4PIeORhF5vnitHg1IBzP/LaJonZzVlUKIDQsLY2Nj5CZYrots5IfAMSB5RvUqP95r4q4SaAxUgMCg36Sp0HFTU0O5LGsMOWuw3jBBxLEJ+qtUco0bkPi2dU/1TISfzHHg0Rkq++jARIdOPqtRV0QoV3nG6EY8QP5+vhfgcq+aWVcaRZ+8mZWn1FTtoSnUldkwAKLDmGqfj8Hhn0sQ5ePXY189UUpbjDs2pQeVyDMSZ6TCq2gAAyZaFLez05Q58KmDJMxzUDXJ731jSxmxHGslKxttGq8pLWDQ4ySU879BsdUrW6SdP0FS3TpMzFEqGEDoBpoji51YL5V+vpW+XSM4kvnjNd7UaetglhAoICIJoW6gpkkRFzwssUU4NkffReC+IRzfbqyrRV9du0aDtFlJISWgEYy9ElvQdACDFPCUNcqwKXnWWNhNOi0NadkDLri7LM1Ksjlu1RYL7ctMmzic1kLk26RDlGac9CwUwdnJmR4CbTzohDp5uAUyyXjkmlKvTEUWnnpIwEeChj2d+n06rpCgkWhXzyREJNxJOqdKCCkJrwZ+EIpCpHy4vYkZxSgDceBxoKE/Ok0Fx3tlVWBITnngelpAU8nDwxGr+bgh+RvU1deLMEC+KKrKEKJAKPx45j/35kMjiJIsBB0XxwwDF7ID9y/so+QVyxJYghPGowfek+rCahSN90zxgIA6XDqZlNkNdx6EGZMsCC2RJ33TC6lKrYJBGb4A3kJM2AMHDuw2ui6i8S4ekp9B4Aa5JXeRkr4DlYOKpughFw+JXqCCTsqoC/8I2iQL0mao2Lad71u51sZTpQdQnFaAqvoUAdLOqxEOQlnjijuylk1r2gECU8WGP76/DmicIktYi/E1+RCSxDLKY+Iygc5IhUFci1RVWAA1CVgimuXvQ7tODelMjJrTVJdA9Lxa38a2juR/N90FGGoVYIJDQQLt4e5QKyFxtCqVqreKVDSc+QqKtCr2ChX9exgH4Z+/DBh6+nJHjk1cBt8uL2qztOR4QhQBU/2jZG9bx9AnZBCtpX0qtnEUFI2nwHxNjA/gY3QaUM9pxvDmXouu+l5gNUhpVEZErwrOIeOKMMMCGPncTKsZlSfllwtKnrFVEnofJRIBvVmVGuG4wRd6dpzB3TH0EpNaSaszRdzDgZ1IYvozyuuz8/Ck4bFU74I8Q0N/2ugj0E9l9kTU0RyriWkGWv5+wvnz1NIwVj69lfOSICI3ETTMPnRx0mV1CTJAtkuwhN4x/UUYZiXPiA7h/7CUfemXxfWVHt1wN/v9mBdR+qeqFBANsKAgVP0eNkBDp9AZWio13AUrjuZ8Rzll6ErRWtUJGVOegPCiezNZcvgcrRYveDHM6TssDzX7HWqzYtJIUJSfsAd2j5/yGomCeHswMIZB1SbtkygyLRGK1IEqB1EAgqMUE/vyygnFT9uZoyiXClTn1sXNxCvAVim3ez67ApVClTW631L6Cfx6H9aowSiy1Bp8fKWjOZz5QoxQ2rVXXhHaPqb0pMUnUJp8+Z+ja37klSkZCqQkpxExvmDtGl8PHaN7BZShjUI5IpCB/IrWFwhYPSXPBS+X9T1HRds7w+AdTbhSiHVJQ6/f+9djFhbyrgWEAPjhS1PmbE+JM1wyiUPvBVWpwK20FZ8b9G6hRIM8yeiA10gjmMqRPoMoDtx8b7LAqRQXlSMBuHqa0huV5nOZwX4auiTIs4fgYWz3woLiV5odX4e/AMVWiCmFoEQNDMyz/WjDCOLBZupONMFRha1gUx6xW71WBXsGMG+Gzi7qkQ/tNxRdaxjX4I2iFbD9CAhrvQMC6KgImUwNQb3Nd4B8jIpJFNsCElCnrCziFp8kBBDc3yQeXWE3hjMnAt6I4LfX8hjAFDRfWbZQHzbQjjUXG4yiDBRfRaHOy9ZUQXxodBywFDjNVfSNs9e3SMQYEXgUcOADNUGU2EhlS7hq66JFSU2ryBMO0MEWWToSaTAoLhjrfOhTSHT76oUsCi+XdDRakiVpZV8ZvfRBJwcORI2QQ7FqdMdwZg80NMojVzrRSFRriupUm6BWqPnpf9zJNrBSYMPSnPREK5CbX4iOlX5s3UuNPh6XqWkf0XU8knuVWiZdiJ2S4P4sOzYpuF7RRpqP9Wrib9QZME30giPSZ+RryRh1J05JLhikiagsai2hM6R8UL4r+kwlgTl8P7qgILszRUGgUiD0UDhc2RnoDurEhmGGnFY5V42PLZ/4betgnI9yxUxA4YucvlqjTCr6r3mE4HiFeVAnLaUL4XfK/X0mpAxmfhhM6jEC/rBJM0ijZmv0KC1nEr0aa3yMhizD2ApE8qW+pSGffcyvBoVJROgCyOp9Y2qwzsExMo/wMwnd9v20ugeoRNh8R5pEzyV8xZkfzHwFbCgOJBZ9Rcw2HgGzI5XfzCZ8zBMpR3nM8EVfw7BIdl48cEwB/lRI7hztMU8NvvoBFEUniYmYDeli4OzUaSgmL9E3u1RioB6A3ZJGThWnrx8dbmT2+BRzY9wjnPGuo0mRGM59PMUpwkShbiGiZSaiSy788tqT9WVUk+nuyqAwbKU1fWanrbpVo2+MP0LzuEwwXMHRQIWi4srLkz0kcfQsDKdOvbuV9E0CC0dHCoHhIQjCnOoKdx1Zsgo9EvdHe85HqUd8jKotre6laMNEKIOaxBvzoJpm0xTHkhr69BNowiyOQBHBnoNvMKUqCosYNICpfFqMgrw8ZaLB7KHmkOi6cSP03rbObBwAJBYmxJCzJmoLarwKcUEdiitgMiIquaS2fVXZb2L8YOa3MY8V5o7IbJSTGROK6EAE0pnFibaEP4HJPMI/htrWezN9Z1mXxiVwDO9q7Wr+g6KLbemYyUeTElEam9VnsgQFQnnvVDkaxQpxoxtTyA1jD/psYVykTb4y2vxJpPHSDptoek1EREQcFK/q1DwGMUsUWUm62Fw83CP8pqlsex6H1rFpNvcspYwmOKANaxLngXf0VFeT6m8lTojeRTgZ66EySDRNRce4BcKxhEJMdJWnY0o5ej6mOCt5VrUPuejSWir0Y5yqeJi8Ic+hxVIv/DIdKjqz7fPZqDCGSE/dmTo6cbr5rofX+UBYro+Bvl6gSXASlHo0Z6bMN9pFJFWO5pXw4pfVM84owesSjKt7e/gJ+/ccnUcihnlKmgkxBIndnycrJmnAHEv9SOqDoziWrjhrDPXj6pZKVzDcOUu96QT4kWEDXvCMxqeo97CCkjGZ1MnRFAzxjeXarvVFsvUHgE+gIMyjqm++wNqcGG5lD9wDDW2SVR8NHNOcvav/5ETMgAWaRfx+B622iY5NNbIEDIjL++5EA1Nk55IzdWrX3o9pRa12j5KPgZ4I+c7lbLeHu2leFlm6IzXYBbZNLHQUcu5MrZjqIHBiBeMEJyqiTMhA+mGRQlqE1mU7yPsBh1wCzFKrFoUgY92Ru0ejtFjPAcn3UqdfdIh28ARa0uGdJzosP++hEnZqcYKaj8ZNFAWWw72fbYWERMtg97pzP5TZI+OQcGKYU9iMhIRRF36I7S9gmFXW8+x0ndUsEeextdmrI7EikSt+Eq7XIlvopdYhkV13PL8PzW+xOpbenTDbBVas6Ow6gGIIHOfn334ojsaQAwF6h7EzAgVv8PN501VgDcIvpA3uqIzIlurnqQXv7klivrAbWugwuqeCo0sEOzRqUblrXcJnRb6HLkzfQCtQRglidO20N+TYl56L8STdlKNGeVBQq3k7fVefipUjHVV1drBcutAj9W2gnzIQCnMGo2YsAsYEUrKowkUbMQ8lwIp+gVMavb1/NU/JFEiaya7dUZETwg10vhaX0YuJcgj+16x3Pm9sPBq5HvkJmHXUXit9A1X7mQi8CfVi1/0ZOUXGA1YxVR86desFEPSqpdh0b8zQjy4dFwwci0u11Wnv7POSDobTTWkwekzMMA8pDoMtjB/cqGwSMo1COsAdnYV9FIgxqxkm/oHvejCMPQqLnMJFo3T2ZU1iv8Zf7eFsZkY1wWmWBJYHoQ4aXzA4c6j+tOBqzsgYo0QIslSB5YqK+GUfIRI0TLdipzoarx90T2bchQHzr9v3daZhxG7BTnHTEaR/yExGySWjz0tdf6vgHQ6YZBE9t2rTcnFKVHC26RnSludQ8xgRVqFer5jg0K+xz+ipN3roYYe2TRpyT2AB3QcHvwCv309HJNN9WBPdRSk+qDbrG45LRT3KFRDogbwKPvbBq/knvAgFtGBdZ02RmgH4IRXWOtWvjUHqKO4V4L6znIIlXT07O0NWJA6i9IhRWFCpBFcyP9fvQbbt0QUVqEhJDhCIzIwin8h76Ql0YtqhVp7mJOzf6HBiNorMOjRdQ4uXE800oofrOSgectBN1XKEPEWCAd0UWQgvdW08BPoBZ6ocLWPhLy1prwGaaTUB3wWYMvLOJNAUNgCAU0eWmlsEp/o+2n9JlUHpxIm52KQADA8VBy+otkSlc/AW6Qz/XebHDOPNhy4R+aTnnUqjh/gshpJKFV4qHxFAhKSh7Bbk2a/QPClShmibL9ZsOpoQx2pyEgiaXbfDYalfsfS2C508vGmMlC0cVFA3Md6oWNkSOXGth6s4NKiaDnPRfqLz9UU0L9q3L2/G6MRSxXxS6i82QvSOCBRM0aRD5oPLMdhzYAK4EaPP7oqB0WGGsbXIJzps4WrNCRIF4ileD1qU+jRlhkrvmg9uMMY+fe36aYl+FugCuA8Ndee5PKaDnCAJvPCsd564BBaFJpdRl229dVB9b1SmabHcR8Fjx1qcF1OcKntp6Dc1nYVIN3qjdrTb29F2YkyIxfNE3YHVV8lz/aUyqpprql88RU5AiXZtpKGHM9dlFNEHl+U5qy0oiTaJGgCilVBgKWS7xWmsuKuUic+fT8lJhBtTJJH+PDPx2I1j8URtx1W0gMBAdpNccbjRFL14ZQ3jvN17IEnNvRtWTqZASulSJ63dzDIHaPo/G/7FTD0uEqss6HbjKZ34u7/e36e+CAngMnUzBWkR1rlcEP4s3CvgDKGac4PtF+EImXebXzGeXgMgXoz1JV9A5cbjlF7JlxCTf/66fbXLvg4NnRB6auKQKkAQfYTFkT5o690AfzvIiGCKQJ4a45sH0WPGC2h4+4g5UpVJnJzd837wVAUG4SW81A/kovnhGJ8oMAAFDYvoRlDJcKbgc7iVKro2BvL79j4SosE2dfVp/nSfRvVLTVVITY+OCklnLA/MFK1G66N7YwvEGseKjNLeN7ZEtDzDdVu/2jn0DW4/8QTgBQzuvB/Te5EPgRNFTJpEjfKp2HBWf7L3zJfMKOihZv4JWC41yQFJa0TY0YN8YiG/lA4XBXB56hsNnK8/hq4VmEnsseU06kQbUC8bA+FKAezUXRDF6ZVshAG4I82WMh06VPR2VTONKcRI6AquSvMjviIntzCx4878eW6iLyYwbdQGUgaKGnzNzgfUczdX5b9tDN6kHBg67Vq8dEgwOoI+8LRxEXmWgvcg1Jex4R1QX2ScfavnxdRvBIl8osxIClhUB2/csYKJfIJcZVcLovXpkJdhkp/yQiliYy0w/IhVsqSg5Uv77hzoJFlKzfrEzADGgCIfDjyQi37BfOZ/Nb4HnFYzPyPSxYIZ9fVdIWVxEQpdevd+akxXOvDpOIiDbsVTvwCo5E+Q9TJlsaP0so4St4gqWYQ89P464v3xh7+nGYNyqQVJ6SaVqmQ8MAdTU6Kjx0fG7x4eypyFSoOGppDbOPHcx99g9HU5uvnr/wMDvfBEM4tllp/et8+kOQA0ZRszJ6Syhe66IdTpSp945JHTMiaGd34fwygsCzntaO70qZeXMu97K7opp3JFcZ3F+4a4hHG4yFIFxRiNxLq6VY87tau1He1F0tpeSzENEMtFWb2FTUOfF66OGot/k848Ah3K14I0BqOLJqzyhkDXFl+3484dH+xQKW+ZSvsADVFe3zqMnnMaRfJV/vOZm15Yywe9bswVpJMtAVxRQfQy5Dc4/NBDG+yWcWQR/mEkY0JaDi56E53zFrjRfsWHAAW7HjhEgLMLdPq3S3ev0ab1P+DdfkjUqYlqh1GrgLSlSsn7HoZl7DivUy8toJFkQmyicqP9Szaey/RvzjGaJkQSWhWGzgRFsLlLpd/413/1n/63ZxXCOkxuZuk/HP0np64ZG4RAQ5l/z6lPhIl++8rRcylFM75797YSVbZm7v08Wk2U/sPFoCHFqdJNewkM3v208fhCSt6LDhnbSFsFiAkKwKKolwd+DW0s0IjIaFYBwCm+mFA77CzGQKGDK48BwaDtIdpPaWGwf/1R3/MvOdFYY8UbRN+ufVy8+w+fX67xKz0YY7K0i6IeM5hCar9viDuYebtXxKKWi5EPRIGSFz5HHefVq6wWg4KllbsRJ8itOk/gKoTHj4PmTfORbKWDUCcf0+CCBMQ1NFoCDrmkTdlUu3b1/hpYrj4ohNQZKgX/qc2PQ/Ks6C7j33FTiab+1jFhApj2xlOOH83E3DO6if4lqijj3tI7MXVTzkeS2sd14I6hITNZszi5gjZVGeNcLNRkk7nRe9ciHfWEhwr8Au22EOhq3pUngjLmIbtl7+qdV2twomepWh+NDUOLypyhrOHF7dlAEI1dHrIwJqVGEIUBRbBLKzkN9Mmnhh/axKsZpUhVmiSYNoMeLUCUC+eWbvWqp4ylQBS+RCmzuWuvUIZas1SJyzA6MeP0HodGBGK9fXsms7FA45Eu+UooOU9LYFAxFaCTxOeOjB85J72YmsDxT69pojyoqsU9kCLFYRVq59tfiw4sp2zUK4wejUCZKVJawynLDXo6vxVprhgDnIjW5CCvH6Oyx+KHaTaKgzoGlI77vojwkIhdMA+HmhMZ738ZWUe0/gSeThq6TPgKtZxE52YExSzFiYP5sTa7WjuM/iViCu0aCFUkgBCyiU7zCMcqlXsILHnq5ttmnEZ2BGcUz/pD3UY5mX4T+Hre4VBKSdTRHJH81qwQJePC8NP3drfcOPALX1Zv1EOLYfiZI1VjfavcRLsmgLK4FSYtykIkFts1dCvXqRm+qronSBJ1JMx6/MTGz4OWAQjkCx56YUjrwwUiIcG5wrXiGJBbmxnaEKJCWyd060KjbTTl9YSkbnmsNPT6pR506ouRogqf3MxigZYM6A2qIype3gOXBp8+8Nz10XS5n1qx4H0FOvOeCBi7dB10GuKxPzPmv1DfvdQn7jqCdzSge/faeZCZ0jvJcsdoqjmjSHqLGK8OH8hY1Xq19LNX4qJDEGzfzjXE+S1Q92VAWsBYKfuN2RGUK8ZUPgFHxFTYqvKNg1j7zS/CkL2KzMW7/nBu16G3p8uF3SEdTr2y4RriQHvUuo17UQgezsGDyRjmlCRWWm8JVT+DkpmDZsgJwgFW/1bj5gs9nHkekzJA/EKW+IeXO2kMG5uWZxSq69RhKMtjrY2pL6YVlpYDP0XGNUr/9xsOzZ3oQQWCLTh1idqQiPIkNXdAAxZJpZt44aa07gP1SmByA8q8IoGYk1O7WxkfrV8Y3MgHeifKW3xCkAto7/nhD1tvMTZ9ONekM5DE8gPcSHLHHIGtLLzY41AODg8bm7xhCX6QV4idMj++MhWcuUn30RWcDoxcTAgbL6OZBgr90zFVg68apruV9vzAd37nb/boAfceJRyWquBCrSda565ZP1W4UzqNvpTAKQ703frfynyV+k2qjkQEzoHAdeD5Z97+m5+V1NwSOh5eRhk8fxR9n+sesxRhWZWIRQLHUs3fCXlAJlC68cTc2x9rNJoOF4cTIkwybwzZMRxZYLhQJSJq4tYaedFf2jD67h47aDT0Tqb3/e3M4C3vO4oGhOcgSyNh/9D92OOFaskY+j+XGxUZKzob9cSOsQ8/ItQLYkW7Sw/9int61BGZ6sVglFwaW+qC0fKc0Sc1u5QY+bKl+sR6gXJRCmJ/Zug25BnPNhpgtSO0G7YhgjjvhfjMbR2N5Rvujz3quIcyt5TbYAyvazSxgUCD1BOXARo5pCZd1MwV+QnUbBrGMuDdR+Nck6QVCQEDQRs4SK+eQRQEA+nm0fs3ss2wxgrIGEubC+8qdXsR15/dM7x7/NOwEfI9H//4u6+lhdqrJGD7UlexOt3DoQZ/XvqveJB6dht37//LCAE3IWRd3A1IAFR3suvlF/b/CAZuAQSOHjcGjZurDVWGitcVu29LoH8FTShHsE8F9KkyXZzhNZG2kdr3vv276MsBsKHQraSYFjnBwxAf+93d9ff9+HPv/txH/0AkB2MPbfQ9HlxETeBNhMr4Rpm87aJ4Eah4oSyOGcZtyt81eM1oP1jkCXU9xwIdKg1+EwINHxqkfjTaBP+mvtEh29bvgT4yVlg67/RbGcn7168EZh566KHBXs2zxxOeftBpob3ALxp9exD97K+WNjRnRunAI3vnlKYA4QH7PDQ4tGJzqd2kkdm4XTWs8t/+1TPHD3V5BQUroeg0bV9V+tWjhx58I4ismDmJ2e6Iyd7zRYrm8FfXLqpyg5vCSaShHyx39eK527HNOBF8kjThJAIKpQhWNvPZzA2Gt/8iunjBGYvFO52pdOHDayu+4frj77z0+KW3Jqfet3sTzj149RDkYvBT4M0hev9QSbWPuR2XoxTBq8SSsxGnCHZSOdqT+abkOXPISnEA78UNv62vht4TEAkQZGqe3udQaZMPhN55lmrN+Hi9v83u6vibC8wxRjX+R5endqG2f3AIFQRpNPqP0KN4Ix2S/lXdR2dMMLYctGsiDwjTXJbaEoFTgQv9X99zfH/3JNNf1Z//6h/+zLM3f2GMwsNIW4q6ktJt7df2zB8Q9R5UGaG6rRXkuPH6WxYedE88sWe09GJI+Ih8po63wOFX11JmoLTKjm2w4OdoSPlZY3v97KnjdeN2hRDG7S3kuljRmZPEVPLCI8bwNyXPmblUvUKzbvgW/x+SvT01k0zn0QAAAABJRU5ErkJggg==\";","export default \"data:image/png;base64,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\";","export default \"data:image/png;base64,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\";","export default \"data:image/png;base64,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\";","export default \"data:image/png;base64,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\";","// The cast dsh draws its agents with: the sharky maids (view/src/skins/maids;\n// fan art, a local skin, never a published one), for every agent on the\n// LayerFS tab and the project board. The website's heroes (skins/heroes) are\n// not offered here, so there is no Cast switch. Each image is bundled as a\n// data URL instead of a page-relative path.\nimport { maidAvatars } from '../../../view/src/skins/maids/cast.js'\nimport m11 from '../../../../sim/avatars/11.png'\nimport m12 from '../../../../sim/avatars/12.png'\nimport m13 from '../../../../sim/avatars/13.png'\nimport m2 from '../../../../sim/avatars/2.png'\nimport m3 from '../../../../sim/avatars/3.png'\nimport m4 from '../../../../sim/avatars/4.png'\nimport m5 from '../../../../sim/avatars/5.png'\nimport m6 from '../../../../sim/avatars/6.png'\nimport m7 from '../../../../sim/avatars/7.png'\nimport m8 from '../../../../sim/avatars/8.png'\nimport m9 from '../../../../sim/avatars/9.png'\nimport ellen from '../../../../sim/avatars/ellen_joe.png'\nimport heads from '../../../../sim/avatars/heads.png'\n\nconst SHEET: Record = { ellen_joe: ellen, 2: m2, 3: m3, 4: m4, 5: m5, 6: m6, 7: m7, 8: m8, 9: m9, 11: m11, 12: m12, 13: m13, heads }\n\nexport const MAID_AVATARS = maidAvatars((name: string) => SHEET[name])\n\n/** The view's casts: the maids alone, so their skin is on and the Cast switch is hidden. */\nexport const CASTS = [{ id: 'maids', label: 'Sharky maids', avatars: MAID_AVATARS }]\n","// A project's LayerFS state as the view model, with Files read on demand\n// (a session's trace lines are played by playback.ts).\nimport * as X from '../../../model/src/index.js'\nimport { createFilesSource } from '../../../view/src/index.js'\nimport { api, type ProjectState } from './api.ts'\n\n/** The Files pane's reads on demand (view/src/filesource.js), kept across rebuilds: a saved id never changes. */\nexport type FilesSource = ReturnType\n\n/**\n * A project's view model from its LayerFS state (no session): the Host's\n * labelled mirror, with Files read on demand and each node's author.\n */\nexport function projectModel(state: ProjectState, files: FilesSource, onchange: () => void) {\n const engine: any = new X.ReplayEngine({ project: state.s.project?.name ?? 'project', files })\n seedEngine(engine, state)\n engine.onchange = onchange\n return X.derive(attribute(X.storyView(engine, { lead: 'main' }), state))\n}\n\n/**\n * Starts a replay engine from the project's state: every Branch, Commit and\n * Layer under the Host's labels, in the order they happened. A session's\n * calls then replay on top (LayerFsView): a node the state already has keeps\n * its label, and a new one is labelled after the state's. `workspaces: false`\n * leaves Sandboxes to the calls.\n */\nexport function seedEngine(engine: any, state: ProjectState, { workspaces = true } = {}) {\n const m = engine.m\n m.s = { ...structuredClone(state.s), roots: {}, ...(workspaces ? {} : { sandboxes: {}, sandboxOrder: [] }) }\n for (const [real, label] of Object.entries(state.labels)) {\n m.toLabel.set(real, label); m.toReal.set(label, real)\n const n = /^([CLR])(\\d+)$/.exec(label)\n if (n) m.next[n[1]] = Math.max(m.next[n[1]], Number(n[2]) + 1)\n }\n for (const node of [...Object.values(m.s.commits), ...Object.values(m.s.layers)] as any[]) node.root = node.id\n chronological(m.s, state)\n const slots = [...Object.values(m.s.commits), ...Object.values(m.s.layers), ...Object.values(m.s.branches)].map((x: any) => x.slot ?? 0)\n m.slot = Math.max(m.slot, ...slots, -1) + 1\n engine.seeded = true\n}\n\n/** Who made each node of the state, on the view (History's avatars). */\nexport function attribute(W: any, state: ProjectState) {\n for (const [real, agent] of Object.entries(state.authors ?? {})) {\n const label = state.labels[real]\n if (label) W.attrib[label] = agent\n }\n return W\n}\n\n/**\n * Orders a snapshot's nodes by when they happened, as History draws them\n * (by slot). Commits carry their time; Layers and fork points do not, so\n * the journals' times are used, else a Layer follows its source Commit and\n * parent Layer, and a fork point follows the node it forked from and comes\n * before its Branch's first Commit.\n */\nfunction chronological(s: any, state: ProjectState) {\n const at = new Map()\n for (const c of Object.values(s.commits) as any[]) at.set(c.id, c.time)\n const realOf = new Map(Object.entries(state.labels).map(([r, label]) => [label, r]))\n const layers = Object.values(s.layers as Record).sort((a, b) => a.slot - b.slot)\n for (const l of layers) {\n const after = Math.max(at.get(l.parent) ?? -Infinity, at.get(l.sourceCommit) ?? -Infinity)\n const known = state.times[realOf.get(l.id) ?? '']\n at.set(l.id, known ?? (after === -Infinity ? 0 : after + 1))\n }\n const branches = s.branchOrder.map((name: string) => s.branches[name])\n for (const b of branches) {\n const first = Math.min(...(Object.values(s.commits) as any[]).filter((c) => c.branch === b.name).map((c) => c.time))\n const after = (at.get(b.from) ?? 0) + 0.5\n at.set(`fork:${b.name}`, Math.min(state.forks[b.name] ?? after, first - 0.5))\n }\n const rank = (id: string) => (id.startsWith('fork:') ? 0 : s.commits[id] ? 1 : 2)\n const order = [...at.keys()].sort((x, y) => at.get(x)! - at.get(y)! || rank(x) - rank(y))\n order.forEach((id, slot) => {\n if (id.startsWith('fork:')) s.branches[id.slice(5)].slot = slot\n else (s.commits[id] ?? s.layers[id]).slot = slot\n })\n}\n","// A project's Sandboxes tab: each running Sandbox (layerfs--) with\n// how full it is, and each Workspace in it with its Branch, the agent that\n// mounted it, how long it has sat, its uncommitted changes and background\n// processes. LayerFS starts and closes Sandboxes by itself (#373); the actions\n// here end one Workspace or process. One that would cut off an agent's call\n// running in that Workspace is disabled; one that loses work asks first.\nimport { useState } from 'react'\nimport { Button } from '@deepseek-ai/dsh-client-ui-primitives'\nimport { api, imageLabel, type ProjectRuntime, type RuntimeWorkspace } from './api.ts'\nimport { Dot, Meter, span, wsName } from './runtimeParts.tsx'\nimport { card, T } from './tokens.ts'\n\ntype Ask = { kind: 'discard' | 'stop', sandbox: string, path: string, process?: string, command?: string } | null\n\nexport function SandboxesTab({ name, runtime, error, reload }: { name: string, runtime: ProjectRuntime | null, error: string | null, reload: () => void }) {\n const [ask, setAsk] = useState(null)\n const [busy, setBusy] = useState(null)\n const [failed, setFailed] = useState(null)\n const act = async (label: string, body: Parameters[1]) => {\n setBusy(label); setFailed(null)\n try { await api.runtimeAction(name, body); setAsk(null); reload() } catch (e) { setFailed((e as Error).message) } finally { setBusy(null) }\n }\n const sandboxes = runtime?.sandboxes ?? []\n const workspaces = sandboxes.reduce((n, s) => n + s.workspaces.length, 0)\n\n return (\n
\n
\n {runtime && }\n {runtime ? `${sandboxes.length} Sandbox${sandboxes.length === 1 ? '' : 'es'} · ${workspaces} Workspace${workspaces === 1 ? '' : 's'} · up to ${sandboxes[0]?.capacity ?? 16} each` : error ? 'Sandboxes not read' : 'Reading Sandboxes…'}\n {runtime?.simulated && · simulated}\n \n \n
\n
\n {(error || failed) &&
{failed ?? error}
}\n {busy &&
{busy}
}\n {runtime?.pending &&
Still reading the Sandboxes' Workspaces; shown meanwhile from Docker and the agents' calls, without changes, Branches or processes.
}\n {runtime && !sandboxes.length && (\n
No Sandbox runs. LayerFS starts one when an agent mounts a Workspace and closes it once it sits idle; reading this page starts none.
\n )}\n {sandboxes.map((sb) => (\n
\n
\n \n {sb.name ?? `Sandbox ${sb.id}`}\n {sb.workspaces.length ? 'running' : 'idle · closes by itself'}\n {sb.image && image {imageLabel(sb)}}\n \n {sb.workspaces.length}/{sb.capacity}\n \n
\n {sb.workspaces.map((w) => (\n act(`Unmounting ${wsName(w.path)}…`, { action: 'unmount', sandbox: sb.id, path: w.path })}\n onDiscard={() => setAsk({ kind: 'discard', sandbox: sb.id, path: w.path })}\n onStop={(p) => setAsk({ kind: 'stop', sandbox: sb.id, path: w.path, process: p.id, command: p.command })}\n ask={ask && ask.sandbox === sb.id && ask.path === w.path ? ask : null}\n onConfirm={() => ask && (ask.kind === 'discard'\n ? act(`Discarding ${wsName(w.path)}…`, { action: 'discard', sandbox: sb.id, path: w.path, confirm: w.path })\n : act('Stopping the process…', { action: 'stop', process: ask.process }))}\n onCancel={() => setAsk(null)} />\n ))}\n
\n ))}\n {runtime?.gone.map((g) => (\n
\n {g.name ?? `Sandbox ${g.id}`}: its container is gone; LayerFS closes it on the next read.\n
\n ))}\n
\n
\n )\n}\n\nfunction WorkspaceRow({ w, disabled, ask, onUnmount, onDiscard, onStop, onConfirm, onCancel }: {\n w: RuntimeWorkspace, disabled: boolean, ask: Ask,\n onUnmount: () => void, onDiscard: () => void, onStop: (p: RuntimeWorkspace['processes'][number]) => void, onConfirm: () => void, onCancel: () => void\n}) {\n const why = w.busy ? `An agent's call is running in ${wsName(w.path)}; wait for it to end` : undefined\n const chip = (text: string, color: string) => {text}\n return (\n
\n
\n \n {wsName(w.path)}\n {w.branch ?? '—'}\n {w.agent && · {w.agent}}\n · {w.busy ? 'in use now' : w.idleMs !== null ? `idle ${span(w.idleMs)}` : (w.activity ?? '').toLowerCase() || 'mounted'}\n {w.uncommitted ? chip(`${w.uncommitted} uncommitted`, w.level === 'ok' ? T.text2 : T.warn) : chip('clean', T.ok)}\n {w.stale && chip('Branch moved since mount', T.text2)}\n \n {w.uncommitted\n ? \n : }\n
\n {w.processes.map((p) => (\n
\n {p.command}\n · {p.status}\n \n \n
\n ))}\n {ask && (\n
\n \n {ask.kind === 'discard'\n ? <>Drop {w.uncommitted} uncommitted change{w.uncommitted === 1 ? '' : 's'} in {wsName(w.path)} ({w.branch}{w.agent ? `, ${w.agent}` : ''}) and unmount it? This can't be undone.\n : <>Stop {ask.command} in {wsName(w.path)}{w.agent ? `, started by ${w.agent}` : ''}?}\n \n \n \n
\n )}\n
\n )\n}\n","// The view's light or dark theme follows dsh's colour scheme, which dsh sets\r\n// as color-scheme on the document element (none: the system's).\r\nexport function followTheme(root: HTMLElement): () => void {\r\n const apply = () => {\r\n const scheme = document.documentElement.style.colorScheme\r\n if (scheme === 'dark' || scheme === 'light') root.dataset.theme = scheme\r\n else delete root.dataset.theme\r\n }\r\n apply()\r\n const observer = new MutationObserver(apply)\r\n observer.observe(document.documentElement, { attributes: true, attributeFilter: ['style'] })\r\n return () => observer.disconnect()\r\n}\r\n","// A project like an editor: the shared view in project mode draws Files'\n// tree at the picked point in a sidebar, and File, History (the chat's\n// History panel, view/history.js) and Storage (the chat's storage panel) as\n// tabs, from the project's LayerFS state and its Store's figures, which it\n// reads here, and Sandboxes (SandboxesTab, in an element the view keeps).\n// Under it the status bar: the project's facts, when the page gives them, its\n// Sandboxes, which open their tab, and the Store's size, which opens Storage.\nimport { useEffect, useRef, useState, type ReactNode } from 'react'\nimport { createPortal } from 'react-dom'\nimport FM from '../../../../sim/simulation_engine/files.js'\nimport M from '../../../../sim/simulation_engine/model.js'\nimport { createFilesSource, createView, injectStyle } from '../../../view/src/index.js'\nimport { api, type ProjectRuntime, type ProjectState, type Storage } from './api.ts'\nimport { CASTS, MAID_AVATARS } from './avatars.ts'\nimport { projectModel, type FilesSource } from './replay.ts'\nimport { Dot, POLL_MS, usePoll } from './runtimeParts.tsx'\nimport { SandboxesTab } from './SandboxesTab.tsx'\nimport { bytes, saved, storeOf, times } from './storage.ts'\nimport { followTheme } from './theme.ts'\nimport { T } from './tokens.ts'\n\n/**\n * `tab`: the tab to open with (the All projects page opens Sandboxes).\n * `storage`: the Store's figures, which the page reads alongside History (null while it reads).\n */\nexport function ProjectBoard({ name, state, storage, storageError, status, tab }: { name: string, state: ProjectState, storage: Storage | null, storageError: string | null, status?: ReactNode, tab?: 'sandboxes' }) {\n const host = useRef(null)\n const board = useRef(null)\n const files = useRef(null)\n const store = useRef(null)\n // the Sandboxes tab's element: the view shows it as the tab's page and keeps it across draws\n const sbxEl = useRef(null as unknown as HTMLDivElement)\n if (!sbxEl.current) { sbxEl.current = document.createElement('div'); sbxEl.current.className = 'lfs-own'; sbxEl.current.style.height = '100%' }\n const runtimeRef = useRef(null)\n const [runtime, setRuntime] = useState(null)\n const [runtimeError, setRuntimeError] = useState(null)\n const readRuntime = () => api.projectRuntime(name).then((r) => { setRuntime(r); setRuntimeError(null) }, (e: Error) => setRuntimeError(e.message))\n usePoll(readRuntime, POLL_MS, [name])\n useEffect(() => { setRuntime(null); setRuntimeError(null) }, [name])\n\n useEffect(() => {\n injectStyle(document)\n const root = host.current!\n let soon: ReturnType | undefined\n board.current = createView(root, { avatars: MAID_AVATARS, casts: CASTS, files: FM, lineDiff: M.lineDiff, live: false, lead: 'main', project: true })\n board.current.rerender = () => { clearTimeout(soon); soon = setTimeout(() => board.current?.W && board.current.render(), 40) }\n if (tab) board.current.ide = tab\n const unfollow = followTheme(root)\n files.current = createFilesSource((kind, query) => api.projectFiles(name, kind, query), () => board.current?.rerender?.())\n return () => { clearTimeout(soon); unfollow(); board.current.dispose(); board.current = null }\n }, [name])\n\n useEffect(() => {\n const b = board.current\n if (!b) return\n const W = projectModel(state, files.current!, () => b.rerender())\n W.engine.storage = () => store.current\n W.engine.sandboxes = () => ({ el: sbxEl.current, level: runtimeRef.current?.level ?? 'ok' })\n for (const agent of ['main', ...new Set(Object.values(state.authors))]) b.avatar(agent)\n b.W = W\n b.render()\n }, [name, state])\n\n useEffect(() => {\n store.current = storage ? storeOf(storage, state) : null\n board.current?.rerender?.()\n }, [storage, state])\n\n useEffect(() => { runtimeRef.current = runtime; board.current?.rerender?.() }, [runtime])\n\n const gain = storage ? saved(storage) : null\n const sbx = runtime?.sandboxes ?? [], wsCount = sbx.reduce((n, x) => n + x.workspaces.length, 0)\n return (\n
\n
\n
\n {status}\n \n \n \n
\n {createPortal(, sbxEl.current)}\n
\n )\n}\n","// Confirms removing a LayerFS project: the name must be typed. The Host\r\n// deletes the project's volume and LayerFS home entry and forgets it; it\r\n// refuses while a Sandbox still uses the volume.\r\nimport { useState } from 'react'\r\nimport { createPortal } from 'react-dom'\r\nimport { api, type Project } from './api.ts'\r\n\r\nconst line = 'var(--dsh-color-border, #8884)'\r\nconst muted = 'var(--dsh-color-fg-muted, #8a8a8a)'\r\nconst danger = 'var(--dsh-color-fg-danger, #d33)'\r\nconst button = { font: 'inherit', fontSize: 12, padding: '4px 12px', borderRadius: 6, border: `1px solid ${line}`, background: 'transparent', color: 'inherit', cursor: 'pointer' } as const\r\n\r\nexport function RemoveDialog({ project, onDone, onClose }: { project: Project, onDone: () => void, onClose: () => void }) {\r\n const [typed, setTyped] = useState('')\r\n const [busy, setBusy] = useState(false)\r\n const [error, setError] = useState(null)\r\n const remove = async () => {\r\n setBusy(true); setError(null)\r\n try { await api.remove(project.name); onDone() } catch (e) { setError((e as Error).message); setBusy(false) }\r\n }\r\n return createPortal(\r\n
{ if (e.target === e.currentTarget && !busy) onClose() }} style={{ position: 'fixed', inset: 0, zIndex: 1000, background: 'rgba(0,0,0,.35)', display: 'flex', alignItems: 'center', justifyContent: 'center' }}>\r\n
\r\n
Remove {project.name}?
\r\n
This deletes the project's volume {project.volume}: every Branch, Commit and Layer in it. It can't be undone.
\r\n
The workspace folder, its files and the sessions' transcripts stay. Sessions that used this project have no LayerFS project afterwards. Close the project's Sandboxes first; removal is refused while one runs.
\r\n \r\n {error &&
{error}
}\r\n
\r\n \r\n \r\n
\r\n
\r\n
,\r\n document.body,\r\n )\r\n}\r\n","// The LayerFS sidebar page: one project at a time, like an editor. A slim\n// title bar has two tabs: All projects · Sandboxes (AllSandboxes: every\n// project's Sandboxes and what they run on; a project's card opens it, and\n// Import project imports a workspace's folder, InitDialog) and the open\n// project. Then the project's one action, New session (in\n// a workspace picked from its menu, which then uses the project by default),\n// and a menu for Refresh and Remove (RemoveDialog). The project (ProjectBoard)\n// fills the rest: Files' tree in a sidebar, File, History, Storage and\n// Sandboxes tabs,\n// and a status bar with where main is, Branches, Commits, the last publish\n// and the Store's size. ellen_joe shows full size where there is nothing else.\n// Colours, borders and radii are dsh's own tokens (--dsw-*, tokens.ts).\nimport { useCallback, useEffect, useState, useSyncExternalStore } from 'react'\nimport { Button, IconEllipsisOutlineRegular, IconPlusOutlineRegular, IconRefreshOutlineRegular, IconTrashOutlineRegular, Menu, type MenuEntry } from '@deepseek-ai/dsh-client-ui-primitives'\nimport ellen from '../../../../sim/avatars/ellen_joe.gif'\nimport { AllSandboxes } from './AllSandboxes.tsx'\nimport { api, readProject, type Project, type ProjectState, type Status, type Storage } from './api.ts'\nimport { InitDialog } from './InitDialog.tsx'\nimport { ProjectBoard } from './ProjectBoard.tsx'\nimport { RemoveDialog } from './RemoveDialog.tsx'\nimport { card, T } from './tokens.ts'\n\n/** What the panel uses of dsh's workspace services (read with ctx.get). */\nexport interface PanelServices {\n workspaces?: { list: { getSnapshot(): { items: readonly Workspace[] }, subscribe(listener: () => void): () => void } }\n uiWorkspace?: { startSession(workspaceId?: string, options?: { agentPreset?: string }): void, listDirectory(path?: string): Promise }\n}\ninterface Workspace { workspaceId: string, path: string, title: string }\n\nconst PRESET = 'layerfs-dsh-minimalist'\nconst NO_ITEMS = { items: [] as readonly Workspace[] }\nconst NOT_LISTED = { getSnapshot: () => NO_ITEMS, subscribe: () => () => {} }\n\nconst ROWS = `.lfs-switch, .lfs-chip { background: transparent; cursor: pointer; } .lfs-switch:hover, .lfs-switch[aria-expanded='true'], .lfs-chip:hover, .lfs-chip[aria-expanded='true'] { background: ${T.hover}; }\n.lfs-tab { border-radius: ${T.sm} ${T.sm} 0 0 !important; } .lfs-tab[aria-selected='true'] { box-shadow: inset 0 -2px 0 ${T.text}; } .lfs-tab[aria-selected='false'] { color: ${T.text2} !important; }\n.lfs-card:hover { box-shadow: inset 0 0 0 999px ${T.hover}; }\n.lfs-bone { border-radius: 4px; background: ${T.well}; animation: lfs-bone 1.2s ease-in-out infinite alternate; } @keyframes lfs-bone { to { opacity: .45; } }`\n\n/** The LayerFS mark (docs/assets/readme/layerfs-mark.svg) in the text colour: the A at 45%, its three nodes solid. */\nexport function LayerFsIcon({ size }: { size?: number }) {\n const s = size ?? 16\n return (\n \n \n \n \n \n )\n}\n\nconst short = (path: string) => path.split('/').filter(Boolean).slice(-2).join('/')\nconst day = (ms: number) => new Date(ms).toLocaleDateString(undefined, { month: 'short', day: 'numeric' })\n\n/** One fact on the status bar: a count reads \"8 Commits\", a place \"main L1\". */\ninterface Fact { label: string, value?: string, title?: string, count?: true }\n\n/** The project's status bar. */\nfunction stats(state: ProjectState): Fact[] {\n const s = state.s, real = Object.fromEntries(Object.entries(state.labels).map(([r, l]) => [l, r]))\n const last = Object.values(s.layers as Record).filter((l) => l.sourceBranch).sort((a, b) => b.slot - a.slot)[0]\n const by = last && state.authors[real[last.id]]\n const nB = s.branchOrder.length, nC = Object.keys(s.commits).length\n return [\n { label: 'main', value: s.main?.head ?? '–' },\n { label: nB === 1 ? 'Branch' : 'Branches', value: String(nB), count: true },\n { label: nC === 1 ? 'Commit' : 'Commits', value: String(nC), count: true },\n { label: 'last publish', value: last ? `${last.sourceBranch}${by ? ` · ${by}` : ''}` : 'nothing yet', title: last ? `${last.sourceBranch} published as ${last.id}${by ? ` by ${by}` : ''}` : undefined },\n ]\n}\n\nfunction FactView({ f }: { f: Fact }) {\n const v = {f.value ?? '…'}, l = {f.label}\n return {f.count ? <>{v}{l} : <>{l}{v}}\n}\n\n/**\n * Why the project could not be read, in words: a title, what happened and\n * what to do, and whether removing and importing it again is the way out.\n */\nfunction problem(error: string): { title: string, text: string, reimport?: true } {\n // the SDK refuses a second client while one is starting the project's Sandbox\n if (/^Busy\\b/.test(error)) return { title: 'LayerFS is busy with this project', text: \"Another client is starting its Sandbox. Refresh in a moment.\" }\n // a start that failed earlier left its record, and the SDK will not guess how it ended\n if (/unresolved discovery intent/.test(error)) return { title: \"An earlier start of this project failed\", reimport: true, text: \"LayerFS kept a record of that failed start and won't start the project again until it's cleared. This usually means the project was imported by an older LayerFS, which this one can't open. Remove the project and import its folder again: its saved history goes, the folder's files stay.\" }\n // the daemon exited before it listened: it refused the Store\n if (/stopped at Listener/.test(error)) return { title: \"LayerFS couldn't open this project\", reimport: true, text: \"Its daemon stopped before it was ready. This usually means the project was imported by an older LayerFS, which this one can't open. Remove the project and import its folder again: its saved history goes, the folder's files stay.\" }\n return { title: \"Couldn't read this project\", text: error }\n}\n\n/** ellen_joe at full size, for a page with nothing else to show. */\nfunction Notice({ title, children }: { title: string, children?: React.ReactNode }) {\n return (\n
\n \"\"\n
{title}
{children &&
{children}
}
\n
\n )\n}\n\n/** The board's shape while the project is read: a file tree on the left, the tabs and History on the right. */\nfunction Skeleton() {\n const bars = (widths: number[]) => widths.map((w, i) =>
)\n return (\n
\n
{bars([90, 50, 65, 45, 70, 40, 55])}
\n
{bars([30, 70, 45, 80, 55, 65])}
\n
\n )\n}\n\nexport function LayerFsPanel({ services }: { services: () => PanelServices }) {\n const { workspaces, uiWorkspace } = services()\n const list = workspaces?.list ?? NOT_LISTED\n const subscribe = useCallback((listener: () => void) => list.subscribe(listener), [list])\n const { items } = useSyncExternalStore(subscribe, () => list.getSnapshot())\n const [status, setStatus] = useState(null)\n const [projects, setProjects] = useState(null)\n const [defaults, setDefaults] = useState>({})\n const [selected, setSelected] = useState(null)\n const [state, setState] = useState(null)\n const [stateError, setStateError] = useState(null)\n const [storage, setStorage] = useState(null)\n const [storageError, setStorageError] = useState(null)\n const [busy, setBusy] = useState(null)\n const [error, setError] = useState(null)\n const [reads, setReads] = useState(0)\n const [initFor, setInitFor] = useState(null)\n const [removing, setRemoving] = useState(false)\n const [menu, setMenu] = useState<'project' | 'import' | 'session' | null>(null)\n const [menuSwitch, setMenuSwitch] = useState(false)\n // the All projects page instead of a project, and the tab a project opens with when one of its cards was clicked\n const [all, setAll] = useState(false)\n const [openTab, setOpenTab] = useState<'sandboxes' | undefined>(undefined)\n\n const loadProjects = useCallback(() => api.projects().then(({ projects, defaults }) => { setProjects(projects); setDefaults(defaults ?? {}); return projects }), [])\n useEffect(() => {\n api.status().then(setStatus, (e: Error) => setError(e.message))\n loadProjects().then((list) => setSelected((current) => current ?? list[0]?.name ?? null), (e: Error) => setError(e.message))\n }, [loadProjects])\n useEffect(() => {\n if (!selected) return\n setState(null); setStateError(null); setStorage(null); setStorageError(null)\n // the Store's figures, read once alongside History (again on Refresh): the board\n // remounts while the project loads, so they are kept here\n let stopped = false\n api.projectStorage(selected).then((z) => { if (!stopped) setStorage(z) }, (e: Error) => { if (!stopped) setStorageError(e.message) })\n // History draws as soon as the Store answers; Workspaces follow with the full state\n const stop = readProject(selected, setState, setStateError)\n return () => { stopped = true; stop() }\n }, [selected, reads])\n\n const act = (label: string, run: () => Promise) => async () => {\n setBusy(label); setError(null)\n try { await run() } catch (e) { setError((e as Error).message) } finally { setBusy(null) }\n }\n const project = projects?.find((p) => p.name === selected) ?? null\n // a new session in a workspace: the project becomes that folder's default, which the session then uses\n const newSession = (w: Workspace) => act('Opening a session…', async () => {\n await api.setDefault(w.path, project!.name)\n await loadProjects()\n uiWorkspace!.startSession(w.workspaceId, { agentPreset: PRESET })\n })()\n // workspaces where the project is already the default first\n const sessionMenu: MenuEntry[] = [\n { type: 'label', id: 'l', text: 'New session in' },\n ...[...items].sort((a, b) => Number(defaults[b.path] === project?.name) - Number(defaults[a.path] === project?.name))\n .map((w) => ({ id: w.workspaceId, label: `${w.title} · ${short(w.path)}${defaults[w.path] === project?.name ? ' · default' : ''}` })),\n ]\n\n // the project menu: Refresh, Remove\n const projectMenu: MenuEntry[] = project ? [\n { id: 'refresh', label: 'Refresh', icon: },\n { type: 'separator', id: 'sep' },\n { id: 'remove', label: 'Remove project…', icon: , danger: true },\n ] : []\n const onProjectMenu = (id: string) => {\n setMenu(null)\n if (id === 'refresh') setReads((n) => n + 1)\n else if (id === 'remove') setRemoving(true)\n }\n const importMenu: MenuEntry[] = items.length\n ? [{ type: 'label', id: 'il', text: 'Import into a workspace' }, ...items.map((w) => ({ id: 'import:' + w.workspaceId, label: `${w.title} · ${short(w.path)}`, icon: , disabled: !status?.configured }))]\n : [{ type: 'label', id: 'il', text: 'Add a workspace in dsh first' }]\n const onImport = (id: string) => {\n setMenuSwitch(false)\n const w = items.find((x) => 'import:' + x.workspaceId === id)\n if (w) setInitFor(w)\n }\n const importer = (anchor: React.ReactElement) => setMenuSwitch(false)} items={importMenu} onSelect={onImport} align=\"end\" portal anchor={anchor} />\n const importButton = () => importer()\n\n return (\n
\n \n
\n {status && !status.configured &&
LayerFS isn't set up: layerfs-host is missing {status.missing.join(', ')}.
}\n {!all && projects && projects.length === 0 && (\n \n
\n Import a folder from a workspace: LayerFS keeps a versioned copy that agents fork, test and merge.\n {importButton()}\n
\n
\n )}\n {(all || project) && (\n <>\n
\n \n \n \n {project && (\n \n )}\n \n {(all || !project) && <>{importButton()}}\n {!all && project && <>\n \n {project.empty ? 'started empty' : `from ${short(project.source)}`} · {day(project.created)}\n \n setMenu(null)} items={sessionMenu} align=\"end\" portal\n onSelect={(id) => { setMenu(null); const w = items.find((x) => x.workspaceId === id); if (w) void newSession(w) }}\n anchor={} />\n setMenu(null)} items={projectMenu} onSelect={onProjectMenu} align=\"end\" portal\n anchor={
\n {(busy || error) &&
{error ?? busy}
}\n {all || !project\n ? { setOpenTab('sandboxes'); setSelected(name); setAll(false) }} />\n : stateError\n ? (() => {\n const why = problem(stateError)\n return (\n \n
\n {why.text}\n {why.reimport && }\n {why.text !== stateError &&
What LayerFS said
{stateError}
}\n
\n
\n )\n })()\n : state\n ? )} />\n : }\n \n )}\n
\n {removing && project && setRemoving(false)} onDone={() => {\n setRemoving(false)\n void loadProjects().then((list) => setSelected(list[0]?.name ?? null))\n }} />}\n {initFor && setInitFor(null)} onDone={(made) => { setInitFor(null); void loadProjects().then(() => { setOpenTab(undefined); setSelected(made.name); setAll(false) }) }} />}\n
\n )\n}\n","// Inline styles for the tab's plain messages, in dsh's colours where it sets\r\n// them, clear of the composer that floats over the conversation's bottom.\r\nexport const MESSAGE = {\r\n padding: '24px 20px',\r\n paddingBottom: 'calc(var(--dsh-composer-height, 0px) + 24px)',\r\n fontSize: 13,\r\n lineHeight: 1.6,\r\n overflowWrap: 'anywhere',\r\n color: 'var(--dsh-color-fg-muted, inherit)',\r\n} as const\r\n","// A session without a LayerFS project: pick any project (the folder's imports\n// first) or Init one from the folder. The choice holds until an agent's first bash call\n// uses it; after that the session's project is fixed.\nimport { useEffect, useState } from 'react'\nimport { api, type SessionView, type Status } from './api.ts'\nimport { InitDialog, type Directories } from './InitDialog.tsx'\nimport { MESSAGE } from './ui.ts'\n\nconst button = { font: 'inherit', fontSize: 13, padding: '5px 12px', borderRadius: 6, border: '1px solid var(--dsh-color-border, #8884)', background: 'transparent', color: 'inherit', cursor: 'pointer' } as const\n\nexport function Setup({ sessionId, view, onChange, directories }: { sessionId: string, view: SessionView, onChange: (next?: SessionView) => void, directories: () => Directories | undefined }) {\n const [status, setStatus] = useState(null)\n const [busy, setBusy] = useState(null)\n const [error, setError] = useState(null)\n const [initing, setIniting] = useState(false)\n useEffect(() => { api.status().then(setStatus, (e: Error) => setError(e.message)) }, [])\n\n const act = (label: string, run: () => Promise) => async () => {\n setBusy(label); setError(null)\n try { onChange((await run()) || undefined) } catch (e) { setError((e as Error).message) } finally { setBusy(null) }\n }\n const choose = (project: string | null) => act(project ? `Choosing ${project}…` : 'Saving…', () => api.choose(sessionId, project))\n\n if (!view.folder) return
This session has no workspace folder, so it has no LayerFS project.
\n if (status && !status.configured) {\n return
LayerFS is not set up on this dsh Host. Missing settings of layerfs-host: {status.missing.join(', ')}.
\n }\n const locked = !!view.choice?.locked, none = view.choice && view.choice.project === null\n return (\n
\n
\n LayerFS keeps a versioned copy of {view.folder}: agents fork Branches, test them in Sandboxes and merge them, and this tab draws what they did.\n {none ? ' This session is set to work without LayerFS.' : ''}\n
\n {view.choices.projects.length > 0 && (\n
\n LayerFS projects\n
\n {view.choices.projects.map((p) => (\n \n ))}\n
\n
\n )}\n
\n \n
\n {initing && setIniting(false)} onDone={(project) => { setIniting(false); void act(`Choosing ${project.name}…`, () => api.choose(sessionId, project.name))() }} />}\n {busy &&
{busy}
}\n {error &&
{error}
}\n
\n )\n}\n","// Plays a session's SDK calls in the LayerFS tab in step with the run: each\r\n// step (one drawn trace line; the SDK's own service Sandbox and operator reads\r\n// ride with the next one) shows LAG_MS after the call ended, so the gaps on\r\n// screen are the run's own gaps and the view never falls behind it. LAG_MS is\r\n// longer than the Host poll (1.5 s), so a call is usually here before its\r\n// time. Steps whose time has passed (the tab opened, a rebuild, a late poll)\r\n// apply at once and draw once. How fast a demo runs is the mock's business\r\n// (mock/src/pace.js), not the playback's; a Workspace that a script mounts and\r\n// unmounts within a second still shows, as the view's fading trail.\r\nimport * as X from '../../../model/src/index.js'\r\n\r\nconst LAG_MS = 2000\r\n\r\n/** The same rule as the trace source's (model/src/sources/trace.js): lines that are not steps of their own. */\r\nconst rides = (method: string) => method === 'sandbox.service' || (method.startsWith('operator.') && method !== 'operator.process.start' && method !== 'operator.process.cancel')\r\n\r\nexport interface Step { a: string, line: any, replay: (W: any) => void, due: number }\r\n\r\n/** When a line shows: LAG_MS after it ended, by the Host's clock. */\r\nexport const dueOf = (line: { start: string, ms?: number }) => Date.parse(line.start) + (line.ms || 0) + LAG_MS\r\n\r\nexport class Playback {\r\n W: any\r\n private seen = new Set()\r\n private pending: any[] = []\r\n private queue: Step[] = []\r\n private t0: number | null = null\r\n private running = false\r\n private stopped = false\r\n private wake: (() => void) | null = null\r\n private feeding: Promise = Promise.resolve()\r\n played = 0\r\n\r\n /**\r\n * @param fresh a new view model (an empty trace replay)\r\n * @param show draws the model after `step`, or after catching up (null)\r\n * @param now the clock lines are timed by (the Host's, as this browser sees it)\r\n */\r\n constructor(fresh: () => any, show: (W: any, step: Step | null) => void, now: () => number = Date.now) {\r\n this.show = show\r\n this.now = now\r\n this.W = fresh()\r\n }\r\n private show: (W: any, step: Step | null) => void\r\n private now: () => number\r\n\r\n /** Steps still to play. */\r\n get waiting() { return this.queue.length }\r\n\r\n /** Takes a session's lines so far (agents named): the new ones queue, each for its time. */\r\n feed(lines: any[], agent: string): Promise {\r\n const next = this.feeding.then(() => this.take(lines, agent))\r\n this.feeding = next.catch(() => {})\r\n return next\r\n }\r\n\r\n private async take(lines: any[], agent: string) {\r\n const ends = X.endLines(lines)\r\n if (!ends.length) return\r\n this.t0 ??= Date.parse(ends[0].start)\r\n const t0 = this.t0\r\n for (const line of ends) {\r\n if (this.seen.has(line.id)) continue\r\n this.seen.add(line.id)\r\n this.pending.push(line)\r\n if (rides(line.method)) continue\r\n const batch = this.pending\r\n this.pending = []\r\n // a step never shows before the one before it\r\n // a line ended before now, so with a browser clock behind the Host's it still shows within LAG_MS\r\n const due = Math.max(Math.min(dueOf(line), this.now() + LAG_MS), this.queue.length ? this.queue[this.queue.length - 1].due : 0)\r\n this.queue.push({ a: line.agent || agent, line, due, replay: (W) => { for (const l of batch) X.replayLine(W, l, { agent, t0 }) } })\r\n }\r\n this.wake?.()\r\n await this.play()\r\n }\r\n\r\n stop() { this.stopped = true; this.queue = []; this.wake?.() }\r\n\r\n private async play() {\r\n if (this.running) return\r\n this.running = true\r\n try {\r\n while (this.queue.length && !this.stopped) {\r\n await this.until(this.queue[0].due)\r\n if (this.stopped) return\r\n // every step whose time has come, drawn once: the last one animates\r\n // when it is the run's latest, else the view just catches up\r\n const now = this.now()\r\n let last: Step | null = null\r\n while (this.queue.length && this.queue[0].due <= now) {\r\n last = this.queue.shift()!\r\n await X.runStep(this.W, last, {})\r\n this.played++\r\n }\r\n if (last) this.show(this.W, now - last.due < LAG_MS ? last : null)\r\n }\r\n } finally {\r\n this.running = false\r\n }\r\n }\r\n\r\n /** Waits until `due`; a stop or a new line wakes it to look again. */\r\n private async until(due: number) {\r\n const left = due - this.now()\r\n if (left <= 0) return\r\n await new Promise((resolve) => { const timer = setTimeout(resolve, left); this.wake = () => { clearTimeout(timer); resolve() } })\r\n this.wake = null\r\n }\r\n}\r\n","// The LayerFS tab is a full-height board, so the conversation's composer is\r\n// hidden while it shows. dsh places the composer's seat as a direct child of\r\n// the conversation's scroll body, beside the view area; the tab marks that\r\n// scroll body, and the seat (the child holding [data-composer-card]) is not\r\n// displayed. dsh then measures the seat as 0 px tall (--dsh-composer-height),\r\n// so the board takes the whole band.\r\nimport { useEffect, type RefObject } from 'react'\r\n\r\nconst MARK = 'data-lfs-composer-hidden'\r\nconst RULE = `[${MARK}] > :has([data-composer-card]) { display: none !important; }`\r\n\r\nfunction injectRule(doc: Document) {\r\n if (doc.getElementById('lfs-composer-rule')) return\r\n const style = doc.createElement('style')\r\n style.id = 'lfs-composer-rule'\r\n style.textContent = RULE\r\n doc.head.append(style)\r\n}\r\n\r\n/** The nearest ancestor with a child that holds the composer card, other than the tab's own branch. */\r\nfunction seatParent(anchor: Element): Element | null {\r\n for (let el: Element | null = anchor; el?.parentElement; el = el.parentElement) {\r\n const parent: Element = el.parentElement\r\n for (const child of parent.children) if (child !== el && child.querySelector('[data-composer-card]')) return parent\r\n }\r\n return null\r\n}\r\n\r\n/** Hides the conversation's composer while the element is mounted. */\r\nexport function useHiddenComposer(anchor: RefObject) {\r\n useEffect(() => {\r\n const el = anchor.current\r\n const parent = el && seatParent(el)\r\n if (!parent) return\r\n injectRule(el.ownerDocument)\r\n parent.setAttribute(MARK, '')\r\n return () => { parent.removeAttribute(MARK) }\r\n }, [anchor])\r\n}\r\n","// The LayerFS tab: the root session's SDK calls, replayed into the shared\n// view (@dsh-layerfs/view). It follows\n// the Host's /layerfs/session route while it is shown, and plays each call\n// at its own time, a moment behind the run (playback.ts). A demo's speed is\n// set on its demo strip (DemoStrip.tsx), not here. History starts from the\n// project's whole history as the session opens (seedEngine), and the\n// session's own calls play on top. The History pane's tabs\n// end with the project's Sandboxes (SandboxesTab), as on the project page.\nimport { useEffect, useRef, useState } from 'react'\nimport { createPortal } from 'react-dom'\nimport FM from '../../../../sim/simulation_engine/files.js'\nimport M from '../../../../sim/simulation_engine/model.js'\nimport * as X from '../../../model/src/index.js'\nimport { createFilesSource, createView, injectStyle } from '../../../view/src/index.js'\nimport { api, readProject, type ProjectRuntime, type ProjectState, type SessionView, type Storage } from './api.ts'\nimport { CASTS, MAID_AVATARS } from './avatars.ts'\nimport { ProjectBoard } from './ProjectBoard.tsx'\nimport { Setup } from './Setup.tsx'\nimport type { Directories } from './InitDialog.tsx'\nimport { Playback, type Step } from './playback.ts'\nimport { attribute, seedEngine, type FilesSource } from './replay.ts'\nimport { POLL_MS as RUNTIME_MS, usePoll } from './runtimeParts.tsx'\nimport { SandboxesTab } from './SandboxesTab.tsx'\nimport { MESSAGE } from './ui.ts'\nimport { useHiddenComposer } from './composer.ts'\nimport { storeOf } from './storage.ts'\nimport { followTheme } from './theme.ts'\n\nconst POLL_MS = 1500\nconst STORE_MS = 10_000\n\n/** The session's view from the Host, read every POLL_MS while the page is visible. */\nexport function useSessionView(sessionId: string) {\n const [view, setView] = useState(null)\n const [error, setError] = useState(null)\n const [tick, setTick] = useState(0)\n useEffect(() => {\n let stopped = false, timer: ReturnType | undefined\n const read = async () => {\n if (document.visibilityState === 'visible') {\n try {\n const next = await api.session(sessionId)\n if (!stopped) { setView(next); setError(null) }\n } catch (e) {\n if (!stopped) setError((e as Error).message)\n }\n }\n if (!stopped) timer = setTimeout(read, POLL_MS)\n }\n void read()\n return () => { stopped = true; clearTimeout(timer) }\n }, [sessionId, tick])\n return { view, error, refresh: (next?: SessionView) => { if (next) setView(next); setTick((n) => n + 1) } }\n}\n\n/** One of the session's LayerFS tabs in dsh: Work or History (`pane`). */\nexport function LayerFsView({ sessionId, directories, pane }: { sessionId: string, directories: () => Directories | undefined, pane: Pane }) {\n const anchor = useRef(null)\n useHiddenComposer(anchor)\n return
\n}\n\ntype Pane = 'work' | 'history'\n\nfunction TabBody({ sessionId, directories, pane }: { sessionId: string, directories: () => Directories | undefined, pane: Pane }) {\n const { view, error, refresh } = useSessionView(sessionId)\n if (!view) return
{error ? `LayerFS is not available: ${error}` : 'Loading LayerFS…'}
\n if (!view.project) return \n if (!view.lines.length) return \n return \n}\n\n/** Before the session's first call: the project as it is now, until the calls take over. */\nfunction Before({ view }: { view: SessionView }) {\n const name = view.project!.name\n const [state, setState] = useState(null)\n const [error, setError] = useState(null)\n const [storage, setStorage] = useState(null)\n const [storageError, setStorageError] = useState(null)\n useEffect(() => {\n // the Store's figures, read once alongside History, as the project page does\n let stopped = false\n setStorage(null); setStorageError(null)\n api.projectStorage(name).then((z) => { if (!stopped) setStorage(z) }, (e: Error) => { if (!stopped) setStorageError(e.message) })\n const stop = readProject(name, setState, setError)\n return () => { stopped = true; stop() }\n }, [name])\n const note = view.running.length ? 'a call is running…' : 'no calls in this session yet; they show here as the agents make them'\n return (\n
\n
{name} · {note}{error ? ` · the project could not be read: ${error}` : ''}
\n {state ? : !error &&
Loading the project…
}\n
\n )\n}\n\n// The band of the conversation's scroll body that the composer leaves\n// visible (dsh publishes both heights on the scroll body).\nconst BAND = { height: 'calc(var(--dsh-conversation-viewport-height, 100vh) - var(--dsh-composer-height, 0px))', minHeight: 320, position: 'relative' } as const\n\nfunction Board({ sessionId, view, error, pane }: { sessionId: string, view: SessionView, error: string | null, pane: Pane }) {\n const host = useRef(null)\n const board = useRef(null)\n // Files reads for this session's project; kept across rebuilds, a saved id never changes\n const files = useRef<{ session: string, source: FilesSource } | null>(null)\n if (files.current?.session !== sessionId) files.current = { session: sessionId, source: createFilesSource((kind, query) => api.files(sessionId, kind, query), () => board.current?.rerender?.()) }\n const play = useRef<{ playback: Playback, agents: string } | null>(null)\n const latest = useRef(view)\n latest.current = view\n // the project's Store sizes for store.stats, read at most every STORE_MS while calls arrive\n const store = useRef(null)\n const storeRead = useRef(0)\n const lastState = useRef(null)\n useEffect(() => {\n if (Date.now() - storeRead.current < STORE_MS) return\n storeRead.current = Date.now()\n // a read in flight is kept when more calls arrive; the board may be gone by its answer\n const name = view.project!.name\n // the sizes need only the storage read; a failed state read keeps the last one\n Promise.allSettled([api.projectStorage(name), api.projectState(name)]).then(([storage, state]) => {\n if (state.status === 'fulfilled') lastState.current = state.value\n if (storage.status !== 'fulfilled' || !storage.value.store || !lastState.current) return\n store.current = storeOf(storage.value, lastState.current, latest.current.lines)\n board.current?.rerender?.()\n })\n }, [view.lines.length, sessionId])\n // History's Sandboxes tab: the element the view keeps as its page, and the\n // project's Sandboxes, read every RUNTIME_MS while History is the pane\n const name = view.project!.name\n const sbxEl = useRef(null as unknown as HTMLDivElement)\n if (!sbxEl.current) { sbxEl.current = document.createElement('div'); sbxEl.current.className = 'lfs-own'; sbxEl.current.style.height = '100%' }\n const runtimeRef = useRef(null)\n const [runtime, setRuntime] = useState(null)\n const [runtimeError, setRuntimeError] = useState(null)\n const readRuntime = () => api.projectRuntime(name).then((r) => { setRuntime(r); setRuntimeError(null) }, (e: Error) => setRuntimeError(e.message))\n usePoll(() => { if (pane === 'history') void readRuntime() }, RUNTIME_MS, [name, pane])\n useEffect(() => { setRuntime(null); setRuntimeError(null) }, [name])\n useEffect(() => { runtimeRef.current = runtime; board.current?.rerender?.() }, [runtime])\n\n // the project's whole History (undefined until read; null if it could not be read). The\n // board waits for it, so History never shows the session's calls alone while it loads.\n const [seed, setSeed] = useState(undefined)\n useEffect(() => {\n let stopped = false\n const name = view.project!.name\n // a Host without the History-only read answers the full state read\n api.projectHistory(name).catch(() => api.projectState(name)).then((state) => { if (!stopped) setSeed(state) }, () => { if (!stopped) setSeed(null) })\n return () => { stopped = true }\n }, [sessionId])\n\n // the view lives as long as the tab; dsh's colour scheme sets its theme\n useEffect(() => {\n injectStyle(document)\n const root = host.current!\n let soon: ReturnType | undefined\n board.current = createView(root, {\n avatars: MAID_AVATARS, casts: CASTS, files: FM, lineDiff: M.lineDiff, live: false, lead: 'main', pane,\n })\n const unfollow = followTheme(root)\n board.current.rerender = () => { clearTimeout(soon); soon = setTimeout(() => board.current?.W && board.current.render(), 40) }\n return () => {\n clearTimeout(soon)\n play.current?.playback.stop()\n play.current = null\n unfollow()\n board.current.dispose()\n board.current = null\n }\n }, [sessionId])\n\n // new lines queue on the playback, each for its time; past ones show at once\n useEffect(() => {\n const b = board.current\n if (!b || seed === undefined) return\n const agents = `${Object.values(view.agents).join(',')}|${seed ? 'seeded' : ''}`\n if (!play.current || play.current.agents !== agents) {\n // a rebuild (the tab opened, or an agent was named): labels follow call\n // order; what is past applies at once, so nothing plays twice\n play.current?.playback.stop()\n const fresh = () => {\n const engine: any = new X.ReplayEngine({ project: view.project?.name ?? 'project', files: files.current!.source })\n engine.onchange = () => b.rerender()\n engine.storage = () => store.current\n if (pane === 'history') engine.sandboxes = () => ({ el: sbxEl.current, level: runtimeRef.current?.level ?? 'ok' })\n // the project's history first; the session's Workspaces come from its calls\n if (seed) seedEngine(engine, seed, { workspaces: false })\n const W = X.storyView(engine, { lead: 'main' })\n return seed ? attribute(W, seed) : W\n }\n const playback: Playback = new Playback(fresh, (W, step) => show(b, W, step, playback))\n play.current = { playback, agents }\n }\n const lines = view.lines.map((line) => ({ ...line, agent: view.agents[line.agentId] ?? line.agent }))\n const playback = play.current.playback\n playback.feed(lines, 'main').catch((e: Error) => { b.note = `The calls could not be replayed: ${e.message}` })\n if (!playback.waiting && b.W) { b.acting = runningAgents(view); b.note = noteOf(view, playback); b.render() }\n }, [view, sessionId, seed])\n\n /** Draws the model after a step (its agent acting, the view following it) or once caught up. */\n function show(b: any, W: any, step: Step | null, playback: Playback) {\n if (board.current !== b) return\n const v = latest.current\n b.avatar('main')\n if (step) b.avatar(step.a)\n else for (const line of v.lines) b.avatar(v.agents[line.agentId] ?? line.agent)\n b.W = W\n if (step) { b.acting = [step.a]; b.lastLoc = X.locKey(X.where(W, step.a)) } else b.acting = runningAgents(v)\n if (b.follow && W.lastTab) b.active = W.lastTab\n b.note = noteOf(v, playback)\n b.render()\n if (step) b.animate(step.a)\n }\n\n useEffect(() => { if (board.current && error) board.current.note = `LayerFS is not answering: ${error}` }, [error])\n\n return (\n <>\n
\n
\n {seed === undefined &&
Loading {name}'s History…
}\n
\n {pane === 'history' && createPortal(, sbxEl.current)}\n \n )\n}\n\nconst runningAgents = (view: SessionView) => view.running.map((line) => view.agents[line.agentId] ?? line.agent)\nconst noteOf = (view: SessionView, playback: Playback) => `${view.project!.name} · ${view.lines.length} calls`\n + (playback.waiting ? ` · ${playback.waiting} to play` : '') + (view.running.length ? ` · ${view.running.length} running` : '')\n","// The New Session row's LayerFS chip, drawn like dsh's workspace and preset\n// chips: an icon, the session's project (or \"No LayerFS\") and a chevron. Its\n// menu lists every project (the workspace folder's imports first) and \"No\n// LayerFS\", with \"New empty project\" and \"Import project…\" pinned below them.\n// Choosing one binds the session to it and makes it the folder's default. A\n// new empty project gets a random name from the Host (such as calm-otter). Like\n// \"Add workspace…\", Import opens the directory picker (Finder in dsh web on a\n// Mac); the chosen folder is imported as a new project (numbered name-1,\n// name-2, … when imported again), the folder's default, and chosen for this\n// session. Without a directory picker it opens InitDialog instead. The choice\n// is fixed once an agent's first bash call has used the project. Choosing a\n// project (or opening on one) switches the blank session to the LayerFS × DSH\n// minimalist preset; \"No LayerFS\" leaves the preset as it is.\nimport { useEffect, useRef, useState } from 'react'\nimport { IconChevronDownOutlineRegular, IconFolderOpenOutlineRegular, IconPlusOutlineRegular, Menu } from '@deepseek-ai/dsh-client-ui-primitives'\nimport { api, type InitJob, type SessionView } from './api.ts'\nimport { ProgressBar, jobFraction, jobText, useClock } from './Progress.tsx'\nimport { InitDialog, type Directories } from './InitDialog.tsx'\nimport { LayerFsIcon } from './LayerFsPanel.tsx'\n\n/** The preset a session on a LayerFS project runs (dsh-layerfs/presets). */\nconst LAYERFS_PRESET = 'layerfs-dsh-minimalist'\n/** dsh's agentPresets.select: switches a blank session's preset; a refusal is its result, not a throw. */\nexport type UsePreset = (sessionId: string, preset: string) => Promise\nconst NONE = '\\u0000none'\nconst IMPORT = '\\u0000import'\nconst EMPTY = '\\u0000empty'\nconst MARK = 'data-lfs-hero-options'\n// dsh pushes the hero options to the row's far end (margin-left: auto); the\n// chip sits beside the preset chip instead. The hover fill matches dsh's chips.\nconst RULE = `[${MARK}] { margin-left: 0 !important; }\n.lfs-seat:not(:disabled):hover, .lfs-seat[aria-expanded='true'] { background: var(--dsw-alias-interactive-bg-hover); }\n.lfs-seat > svg { flex: none; }\n.lfs-seat > .lfs-chevron { color: var(--dsw-alias-label-caption); }`\nconst seat = {\n display: 'inline-flex', alignItems: 'center', gap: 4, minWidth: 0, maxWidth: 240, minHeight: 28, padding: '0 8px',\n border: 'none', borderRadius: 'var(--dsw-radius-sm)', background: 'transparent', color: 'var(--dsw-alias-label-primary)',\n font: 'inherit', fontSize: 13, lineHeight: '20px', fontWeight: 500, whiteSpace: 'nowrap', cursor: 'pointer',\n} as const\n\n/** Marks the nearest laid-out ancestor (dsh's hero options box) so the rule above applies while mounted. */\nfunction useBesidePreset(anchor: React.RefObject) {\n useEffect(() => {\n const doc = anchor.current?.ownerDocument\n let box = anchor.current?.parentElement ?? null\n while (box && getComputedStyle(box).display === 'contents') box = box.parentElement\n if (!doc || !box) return\n if (!doc.getElementById('lfs-hero-rule')) {\n const style = doc.createElement('style')\n style.id = 'lfs-hero-rule'\n style.textContent = RULE\n doc.head.append(style)\n }\n box.setAttribute(MARK, '')\n return () => { box.removeAttribute(MARK) }\n })\n}\n\nexport function ProjectPicker({ sessionId, directories, usePreset }: { sessionId: string, directories: () => Directories | undefined, usePreset: () => UsePreset | undefined }) {\n const layerFsPreset = async () => { await usePreset()?.(sessionId, LAYERFS_PRESET) }\n const [initing, setIniting] = useState(false)\n const [open, setOpen] = useState(false)\n const [view, setView] = useState(null)\n const [busy, setBusy] = useState(false)\n const [job, setJob] = useState(null)\n const [error, setError] = useState(null)\n const [verb, setVerb] = useState('Importing')\n const [canEmpty, setCanEmpty] = useState(false)\n const anchor = useRef(null)\n useBesidePreset(anchor)\n const now = useClock(job !== null)\n useEffect(() => {\n let stopped = false\n api.session(sessionId).then((v) => {\n if (stopped) return\n setView(v)\n // opening on a project (the folder's default) counts as choosing it\n if (v.project && !v.choice?.locked) layerFsPreset().catch(() => {})\n }, (e: Error) => { if (!stopped) setError(e.message) })\n api.status().then((s) => { if (!stopped) setCanEmpty(!!s.empty) }, () => {})\n return () => { stopped = true }\n }, [sessionId])\n if (!view?.folder) return {error ? 'LayerFS unavailable' : null}\n const folder = view.folder\n\n const run = async (step: () => Promise) => {\n setBusy(true); setError(null)\n try {\n const next = await step()\n setView(next)\n if (next.project && !next.choice?.locked) await layerFsPreset()\n } catch (e) { setError((e as Error).message) } finally { setBusy(false) }\n }\n // the picker answers null when the user cancels; nothing is imported then\n const importProject = async () => {\n // as dsh's native directory flow: the desktop bridge when present, else the Host's OS chooser\n const desktop = (globalThis as { __DSH_DIRECTORY_PICKER__?: { pick(): Promise } }).__DSH_DIRECTORY_PICKER__\n const dirs = directories()\n if (!desktop && !dirs?.pickDirectory) { setIniting(true); return }\n await run(async () => {\n const source = desktop ? await desktop.pick() : await dirs!.pickDirectory!()\n if (!source) return view\n try {\n const { project } = await api.init(folder, undefined, source, setJob)\n return await api.choose(sessionId, project.name)\n } finally { setJob(null) }\n })\n }\n const startEmpty = () => run(async () => {\n setVerb('Creating')\n try {\n const { project } = await api.init(folder, undefined, undefined, setJob, true)\n return await api.choose(sessionId, project.name)\n } finally { setJob(null); setVerb('Importing') }\n })\n const select = (id: string) => {\n setOpen(false)\n if (id === IMPORT) void importProject()\n else if (id === EMPTY) void startEmpty()\n else void run(() => api.choose(sessionId, id === NONE ? null : id))\n }\n const locked = !!view.choice?.locked\n const icon = \n return (\n \n setOpen(false)}\n items={[\n ...view.choices.projects.map((p) => ({ id: p.name, label: p.name, icon })),\n { id: NONE, label: 'No LayerFS', icon: },\n ]}\n footer={[\n ...(canEmpty ? [{ id: EMPTY, label: 'New empty project', icon: , disabled: busy }] : []),\n { id: IMPORT, label: 'Import project…', icon: , disabled: busy },\n ]}\n selectedId={view.project?.name ?? NONE}\n onSelect={select}\n align=\"start\"\n portal\n anchor={(\n setOpen((value) => !value)}\n >\n \n {job ? `${verb} ${job.name}…` : view.project?.name ?? 'No LayerFS'}\n {!locked && }\n \n )}\n />\n {job && (\n \n {verb} {job.name}\n \n {jobText(job, now)}\n \n )}\n {initing && setIniting(false)} onDone={(project) => { setIniting(false); void run(() => api.choose(sessionId, project.name)) }} />}\n \n )\n}\n","// LayerFS's Work and History tabs in dsh's conversation tab row, drawn as one\n// group: the logo before Work, a divider between them and one faint track under\n// both. dsh tab labels are plain text, so this marks the two tabs by their\n// labels and draws the rest in CSS; it touches nothing else in dsh's markup.\nconst MARK = 'data-lfs-tab'\nconst LOGO = ``\nconst TABS = `[data-conversation-tabs] [${MARK}]`\nconst TRACK = '#d6dae1'\nconst RULE = [\n `${TABS} { position: relative; background: linear-gradient(${TRACK}, ${TRACK}) left bottom / 100% 1px no-repeat; }`,\n `${TABS}[${MARK}=\"work\"] { margin-right: -12px; }`,\n `${TABS}[${MARK}=\"work\"]::before { content: \"\"; display: inline-block; width: 15px; height: 15px; margin: 0 6px 0 0; vertical-align: -2px; background: url(\"data:image/svg+xml,${encodeURIComponent(LOGO)}\") center / contain no-repeat; }`,\n `${TABS}[${MARK}=\"work\"]::after { left: 21px; }`,\n `${TABS}[${MARK}=\"history\"]::before { content: \"\"; position: absolute; left: -24px; width: 24px; top: 0; bottom: 0; background: linear-gradient(#c9ced6, #c9ced6) center 2px / 1px 12px no-repeat, linear-gradient(${TRACK}, ${TRACK}) left bottom / 100% 1px no-repeat; }`,\n].join('\\n')\n\n/** Marks the Work and History tabs (by label) whenever dsh draws its tab row; returns the stop. */\nexport function markLayerFsTabs(doc: Document, labels: { work: string; history: string }): () => void {\n if (!doc.getElementById('lfs-tab-logo')) {\n const style = doc.createElement('style')\n style.id = 'lfs-tab-logo'\n style.textContent = RULE\n doc.head.appendChild(style)\n }\n let frame = 0\n const mark = () => {\n frame = 0\n for (const tab of doc.querySelectorAll(`[data-conversation-tabs] [role=\"tab\"]:not([${MARK}])`)) {\n const label = tab.textContent?.trim()\n if (label === labels.work) tab.setAttribute(MARK, 'work')\n else if (label === labels.history) tab.setAttribute(MARK, 'history')\n }\n }\n const seen = new MutationObserver(() => { if (!frame) frame = requestAnimationFrame(mark) })\n seen.observe(doc.body, { childList: true, subtree: true })\n mark()\n return () => { seen.disconnect(); if (frame) cancelAnimationFrame(frame) }\n}\n","// @dsh-layerfs/client: the LayerFS Work and History tabs beside Chat and Trajectory, the\n// project picker in the New Session row, and the LayerFS sidebar panel.\n// With the dsh-layerfs-demo bundle, also the demo workspace's Sessions (one\n// per demo, made when missing) and the demo strip above their composer.\nimport { demoApi, ensureDemoSessions, type DemoServices } from './demo.ts'\nimport { DemoStrip } from './DemoStrip.tsx'\nimport { LayerFsIcon, LayerFsPanel, type PanelServices } from './LayerFsPanel.tsx'\nimport { LayerFsView } from './LayerFsView.tsx'\nimport { lockDemoWorkspace } from './lockdown.ts'\nimport { ProjectPicker, type UsePreset } from './ProjectPicker.tsx'\nimport { markLayerFsTabs } from './tablogo.ts'\n\nexport const inject = ['slots']\n\nconst PANEL = 'layerfs'\n\n// any: this bundle builds outside the dsh workspace, without its Context types\nexport function apply(ctx: any): void {\n const directories = () => ctx.get('uiWorkspace')\n // LayerFS is two of the conversation's tabs: Work (the Branches, Sandboxes\n // and terminals) and History (the tree and Files); the logo marks Work\n ctx.slots.inject('conversation.view', () => ctx.slots.register({\n name: 'conversation.view',\n id: 'layerfs',\n order: 20,\n label: () => 'Work',\n inject: (sessionId: string) => ({ sessionId, directories, pane: 'work' }),\n }, LayerFsView))\n ctx.slots.inject('conversation.view', () => ctx.slots.register({\n name: 'conversation.view',\n id: 'layerfs-history',\n order: 21,\n label: () => 'History',\n inject: (sessionId: string) => ({ sessionId, directories, pane: 'history' }),\n }, LayerFsView))\n if (typeof document !== 'undefined') ctx.effect?.(() => markLayerFsTabs(document, { work: 'Work', history: 'History' }), 'layerfs-client: the Work and History tab group')\n // workspace services are optional: without them the panel lists no\n // workspaces and Init offers only the workspace folder as its source\n const services = (): PanelServices => ({ workspaces: ctx.get('workspaces'), uiWorkspace: ctx.get('uiWorkspace') })\n // the Remote services, while the scope that injects them is up\n let remote: DemoServices['remote']\n const demoServices = (): DemoServices => ({ remote, uiWorkspace: ctx.get('uiWorkspace'), workspaces: ctx.get('workspaces'), uiSession: ctx.get('uiSession') })\n ctx.slots.inject('conversation.input.dock', () => ctx.slots.register({\n name: 'conversation.input.dock',\n id: 'layerfs-demo',\n order: 5,\n inject: (sessionId: string) => ({ sessionId, services: demoServices }),\n }, DemoStrip))\n // once the Remote session services are up: every demo gets its Session,\n // and the demo workspace's sidebar rows lose their Session actions\n ctx.inject(['remote', 'remote.session', 'remote.workspace'], (scope: any) => {\n remote = scope.remote\n let unlock: (() => void) | null = null, up = true\n scope.effect(() => () => { remote = undefined; up = false; unlock?.() }, 'layerfs-client: demo Remote services')\n demoApi.info().then((info) => info && ensureDemoSessions(demoServices(), info)).then((workspaceId) => {\n if (workspaceId && up) unlock = lockDemoWorkspace(workspaceId)\n }).catch((error) => {\n console.warn('layerfs-client: demo Sessions were not made:', error)\n })\n })\n // a new conversation that picks a LayerFS project runs the LayerFS preset:\n // dsh's own preset service switches the blank session (its chip follows)\n let usePreset: UsePreset | undefined\n ctx.inject(['remote', 'remote.agentPresets'], (scope: any) => {\n usePreset = (sessionId, preset) => scope.remote.agentPresets.select(sessionId, preset)\n scope.effect(() => () => { usePreset = undefined }, 'layerfs-client: the agent preset service')\n })\n ctx.slots.inject('conversation.hero.options', () => ctx.slots.register({\n name: 'conversation.hero.options',\n id: 'layerfs-project',\n order: 50,\n label: () => 'LayerFS project',\n inject: (sessionId: string) => ({ sessionId, directories, usePreset: () => usePreset }),\n }, ProjectPicker))\n ctx.slots.inject('main', () => ctx.slots.register({\n name: 'main',\n key: PANEL,\n inject: () => ({ services }),\n }, LayerFsPanel))\n ctx.slots.inject('sidebar.panellist', () => ctx.slots.register({\n name: 'sidebar.panellist',\n id: PANEL,\n order: 40,\n label: () => 'LayerFS',\n }, LayerFsIcon))\n}\n"],"mappings":"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"} \ No newline at end of file diff --git a/dsh/packages/client/lib/index.js b/dsh/packages/client/lib/index.js new file mode 100644 index 0000000000..98c6cc02a1 --- /dev/null +++ b/dsh/packages/client/lib/index.js @@ -0,0 +1,5 @@ +//#region src/index.js +/** Provides no host-side behavior. */ +function apply() {} +//#endregion +export { apply }; diff --git a/dsh/packages/client/node_modules/@dsh-layerfs/model b/dsh/packages/client/node_modules/@dsh-layerfs/model new file mode 120000 index 0000000000..0964a8349a --- /dev/null +++ b/dsh/packages/client/node_modules/@dsh-layerfs/model @@ -0,0 +1 @@ +../../../model \ No newline at end of file diff --git a/dsh/packages/client/node_modules/@dsh-layerfs/view b/dsh/packages/client/node_modules/@dsh-layerfs/view new file mode 120000 index 0000000000..d69eb8a193 --- /dev/null +++ b/dsh/packages/client/node_modules/@dsh-layerfs/view @@ -0,0 +1 @@ +../../../view \ No newline at end of file diff --git a/dsh/packages/dsh-layerfs-demo/node_modules/@dsh-layerfs/mock b/dsh/packages/dsh-layerfs-demo/node_modules/@dsh-layerfs/mock new file mode 120000 index 0000000000..846eb54b41 --- /dev/null +++ b/dsh/packages/dsh-layerfs-demo/node_modules/@dsh-layerfs/mock @@ -0,0 +1 @@ +../../../mock \ No newline at end of file diff --git a/dsh/packages/dsh-layerfs/node_modules/@dsh-layerfs/client b/dsh/packages/dsh-layerfs/node_modules/@dsh-layerfs/client new file mode 120000 index 0000000000..2c1f52acc3 --- /dev/null +++ b/dsh/packages/dsh-layerfs/node_modules/@dsh-layerfs/client @@ -0,0 +1 @@ +../../../client \ No newline at end of file diff --git a/dsh/packages/dsh-layerfs/node_modules/@dsh-layerfs/host b/dsh/packages/dsh-layerfs/node_modules/@dsh-layerfs/host new file mode 120000 index 0000000000..1b0b91346a --- /dev/null +++ b/dsh/packages/dsh-layerfs/node_modules/@dsh-layerfs/host @@ -0,0 +1 @@ +../../../host \ No newline at end of file diff --git a/dsh/packages/host/node_modules/@dsh-layerfs/model b/dsh/packages/host/node_modules/@dsh-layerfs/model new file mode 120000 index 0000000000..0964a8349a --- /dev/null +++ b/dsh/packages/host/node_modules/@dsh-layerfs/model @@ -0,0 +1 @@ +../../../model \ No newline at end of file diff --git a/dsh/packages/host/node_modules/@layerfs/sdk b/dsh/packages/host/node_modules/@layerfs/sdk new file mode 120000 index 0000000000..eb79e64a43 --- /dev/null +++ b/dsh/packages/host/node_modules/@layerfs/sdk @@ -0,0 +1 @@ +../../../../../sdk/js \ No newline at end of file diff --git a/dsh/packages/view/node_modules/@dsh-layerfs/model b/dsh/packages/view/node_modules/@dsh-layerfs/model new file mode 120000 index 0000000000..0964a8349a --- /dev/null +++ b/dsh/packages/view/node_modules/@dsh-layerfs/model @@ -0,0 +1 @@ +../../../model \ No newline at end of file diff --git a/engine/crates/layerfs-daemon/tests/support/held_writer.rs b/engine/crates/layerfs-daemon/tests/support/held_writer.rs index b7099eeb16..482efbeabc 100644 --- a/engine/crates/layerfs-daemon/tests/support/held_writer.rs +++ b/engine/crates/layerfs-daemon/tests/support/held_writer.rs @@ -9,7 +9,10 @@ use std::{ pub struct HeldWriter(Child); impl HeldWriter { pub fn acquire(database: &std::path::Path) -> Self { - let script = "import sqlite3,sys,select\nc=sqlite3.connect(sys.argv[1],timeout=0)\nc.execute('BEGIN IMMEDIATE')\nprint('held',flush=True)\nselect.select([sys.stdin],[],[],5)\nc.rollback()\nc.close()\n"; + // The writer holds BEGIN IMMEDIATE, signals readiness and stands by + // for one line. select() is not portable to a Windows pipe stdin; + // a blocking readline is, and Drop's kill bounds a lost releaser. + let script = "import sqlite3,sys\nc=sqlite3.connect(sys.argv[1],timeout=0)\nc.execute('BEGIN IMMEDIATE')\nprint('held',flush=True)\nsys.stdin.readline()\nc.rollback()\nc.close()\n"; let child = Command::new("python3") .arg("-c") .arg(script) @@ -26,10 +29,10 @@ impl HeldWriter { let result = output.read_line(&mut line).map(|_| line); let _ = tx.send(result); }); - assert_eq!( - rx.recv_timeout(Duration::from_secs(3)).unwrap().unwrap(), - "held\n" - ); + // The external writer's readiness line, whatever end-of-line the + // host's python prints. + let line = rx.recv_timeout(Duration::from_secs(3)).unwrap().unwrap(); + assert_eq!(line.trim_end(), "held"); reader.join().unwrap(); held } diff --git a/engine/crates/layerfs-node/Cargo.toml b/engine/crates/layerfs-node/Cargo.toml index 44fca52204..557c287ef9 100644 --- a/engine/crates/layerfs-node/Cargo.toml +++ b/engine/crates/layerfs-node/Cargo.toml @@ -27,3 +27,9 @@ napi-derive = "=2.16.13" [build-dependencies] napi-build = "=2.1.6" + +[target.'cfg(target_os = "windows")'.dependencies] +# The discovery guard's mutex-name digest (K3 F1), the locked sha2. +sha2 = { version = "=0.11.0", default-features = false } +# The Windows discovery guard's named kernel mutex; already in the locked graph. +windows-sys = { version = "=0.61.2", features = ["Win32_Foundation", "Win32_System_Threading"] } diff --git a/engine/crates/layerfs-node/examples/restore_record.rs b/engine/crates/layerfs-node/examples/restore_record.rs index 540f12084d..8c7dec1545 100644 --- a/engine/crates/layerfs-node/examples/restore_record.rs +++ b/engine/crates/layerfs-node/examples/restore_record.rs @@ -13,6 +13,7 @@ use layerfs_bridge::control::{Answer, Reply, SdkValue}; use layerfs_bridge::provision::{ProviderKind, StoreManifest, StoreProfile}; use std::io::Write; +#[cfg(unix)] use std::os::unix::fs::OpenOptionsExt; fn hex(text: &str) -> [u8; N] { @@ -23,6 +24,7 @@ fn hex(text: &str) -> [u8; N] { bytes.try_into().expect("length") } +#[cfg(unix)] fn main() { let args: Vec = std::env::args().skip(1).collect(); let [home, project, binding, stack, branch, root, bytes, host, daemon] = &args[..] else { @@ -78,3 +80,10 @@ fn main() { file.write_all(&record).expect("write project.record"); println!("{}", path.display()); } + +// The record format this writes (0o600 mode, unix paths) belongs to the +// Linux restore runbook; Windows discovery saves its own records. +#[cfg(not(unix))] +fn main() { + eprintln!("restore_record is the Linux restore runbook; not run here"); +} diff --git a/engine/crates/layerfs-node/src/direct.rs b/engine/crates/layerfs-node/src/direct.rs index 0b47e3dae1..96bcbe79ba 100644 --- a/engine/crates/layerfs-node/src/direct.rs +++ b/engine/crates/layerfs-node/src/direct.rs @@ -110,6 +110,8 @@ pub(crate) fn release(args: &SdkValue) -> Outcome { } let opened = stores.remove(&store).expect("present above"); drop(stores); + // The service's close coordinates its sessions' teardown under the + // Store's writer lane itself. let closed = match Arc::try_unwrap(opened.service) { Ok(service) => service.close().map_err(failed), Err(_) => Ok(()), @@ -174,6 +176,7 @@ pub(crate) fn call(method: &str, args: SdkValue, backend: bool) -> Outcome { } /// The Branch id of `name` in the project a call names, read in this process. +#[cfg(unix)] pub(crate) fn branch_id( args: &SdkValue, name: &str, @@ -184,6 +187,7 @@ pub(crate) fn branch_id( } /// The newest Commit of `branch`, read in this process; `None` when it has none. +#[cfg(unix)] pub(crate) fn head( args: &SdkValue, branch: layerfs_history::BranchId, diff --git a/engine/crates/layerfs-node/src/discovery_windows.rs b/engine/crates/layerfs-node/src/discovery_windows.rs new file mode 100644 index 0000000000..c66cf53c52 --- /dev/null +++ b/engine/crates/layerfs-node/src/discovery_windows.rs @@ -0,0 +1,281 @@ +//! Private, permission-authorized project discovery on Windows: the Store +//! face of the unix `discovery` module. Sandbox discovery and daemon +//! operation are refused `Unsupported`; the native Store route serves +//! project, fs and branch calls in-process. +//! +//! Windows cannot express the unix entry's owner/mode privacy check; a +//! symlink and an unexpected entry kind are still refused, and hardening the +//! home tree's ACLs is an open owner question. The discovery turn keeps the +//! unix discipline: this process's calls take turns on one directory, and +//! between processes one named kernel mutex per directory is held, released +//! by the kernel when its holder exits. +use crate::{ + job::{failed, refused}, + registry::{self, Project}, +}; +use layerfs_bridge::{ + control::{Reply, SdkRefusal, SdkValue}, + provision::StoreManifest, +}; +use layerfs_persistence::{SealedStore, SqlitePersistenceProfile}; +use std::{ + collections::BTreeSet, + fs::{self, OpenOptions}, + io::{Read, Write}, + path::{Path, PathBuf}, + sync::{Condvar, Mutex}, + time::{Duration, Instant}, +}; + +type Result = std::result::Result; + +pub(crate) fn home(args: &SdkValue) -> Result { + let home = args + .get_text("home") + .map(PathBuf::from) + .or_else(|| std::env::var_os("LAYERFS_HOME").map(PathBuf::from)) + .ok_or_else(|| refused("InvalidInput", "LAYERFS_HOME is required"))?; + if !home.is_absolute() { + return Err(refused("InvalidInput", "LAYERFS_HOME must be absolute")); + } + directory(&home)?; + Ok(home) +} + +/// A private entry on Windows: no symlink and the expected kind. Owner and +/// mode bits have no Windows reading here; hardening the home tree's ACLs is +/// an open owner question. +fn private(path: &Path, dir: bool) -> Result<()> { + let meta = fs::symlink_metadata(path).map_err(failed)?; + if meta.file_type().is_symlink() || meta.is_dir() != dir { + return Err(refused( + "Unauthorized", + format!( + "{} must be a private {} entry", + path.display(), + if dir { "directory" } else { "file" } + ), + )); + } + Ok(()) +} + +pub(crate) fn directory(path: &Path) -> Result<()> { + match fs::DirBuilder::new().create(path) { + Ok(()) => {} + Err(e) if e.kind() == std::io::ErrorKind::AlreadyExists => {} + Err(e) => return Err(failed(e)), + } + private(path, true) +} + +pub(crate) fn project_dir(args: &SdkValue) -> Result { + let name = registry::text(args, "project")?; + layerfs_history::HistoryName::new(name).map_err(failed)?; + let path = home(args)?.join(name); + private(&path, true)?; + Ok(path) +} + +/// Calls take turns on one directory: in this process before its mutex, and +/// between processes on the mutex itself. The wait is readiness, bounded, +/// and nothing has been attempted before it ends. +const IN_PROCESS_WAIT: Duration = Duration::from_secs(60); +static HELD: Mutex> = Mutex::new(BTreeSet::new()); +static FREED: Condvar = Condvar::new(); + +/// One discovery mutation's ownership of a directory: this process's turn +/// and the named kernel mutex. Dropping it releases both. +pub(crate) struct Guard { + handle: usize, + directory: PathBuf, +} +impl Drop for Guard { + fn drop(&mut self) { + unsafe { + windows_sys::Win32::System::Threading::ReleaseMutex(self.handle as _); + windows_sys::Win32::Foundation::CloseHandle(self.handle as _); + } + let mut held = HELD.lock().unwrap_or_else(|error| error.into_inner()); + held.remove(&self.directory); + FREED.notify_all(); + } +} + +/// One mutex name per directory; the canonical path identifies it between +/// processes. SHA-256 truncated, not `DefaultHasher`: the hasher's algorithm +/// may change between Rust releases and silently split one directory onto +/// two guards across builds (K3 review F1, with the persistence lane name). +fn mutex_name(directory: &Path) -> String { + use sha2::{Digest, Sha256}; + let resolved = fs::canonicalize(directory).unwrap_or_else(|_| directory.to_path_buf()); + let digest = Sha256::digest(resolved.as_os_str().as_encoded_bytes()); + let mut tag = [0u8; 8]; + tag.copy_from_slice(&digest[..8]); + format!("Local\\layerfs-discovery-{:016x}", u64::from_be_bytes(tag)) +} + +pub(crate) fn guard(directory: &Path) -> Result { + let deadline = Instant::now() + IN_PROCESS_WAIT; + let mut held = registry::lock(&HELD)?; + while held.contains(directory) { + let remaining = deadline.saturating_duration_since(Instant::now()); + if remaining.is_zero() { + return Err(refused( + "Busy", + "another call of this process owns this discovery mutation", + )); + } + held = FREED + .wait_timeout(held, remaining) + .map_err(|_| refused("Failed", "discovery turn poisoned"))? + .0; + } + held.insert(directory.to_owned()); + drop(held); + match os_lock(directory, deadline) { + Ok(handle) => Ok(Guard { + handle, + directory: directory.to_owned(), + }), + Err(refusal) => { + let mut held = HELD.lock().unwrap_or_else(|error| error.into_inner()); + held.remove(directory); + FREED.notify_all(); + Err(refusal) + } + } +} + +/// The named kernel mutex of a directory, waited for until `deadline`; a +/// holder process that exits releases it. +fn os_lock(directory: &Path, deadline: Instant) -> Result { + use windows_sys::Win32::Foundation::{ + CloseHandle, WAIT_ABANDONED, WAIT_OBJECT_0, WAIT_TIMEOUT, + }; + use windows_sys::Win32::System::Threading::{CreateMutexW, WaitForSingleObject}; + let name: Vec = mutex_name(directory) + .encode_utf16() + .chain(std::iter::once(0)) + .collect(); + let handle = unsafe { CreateMutexW(std::ptr::null(), 0, name.as_ptr()) }; + if handle.is_null() { + return Err(refused("Failed", "the discovery mutex cannot open")); + } + loop { + let remaining = deadline.saturating_duration_since(Instant::now()); + if remaining.is_zero() { + unsafe { CloseHandle(handle) }; + return Err(refused( + "Busy", + "another process owns this discovery mutation", + )); + } + let waited = unsafe { + WaitForSingleObject(handle, remaining.as_millis().min(u32::MAX as u128) as u32) + }; + match waited { + WAIT_OBJECT_0 | WAIT_ABANDONED => return Ok(handle as usize), + WAIT_TIMEOUT => { + unsafe { CloseHandle(handle) }; + return Err(refused( + "Busy", + "another process owns this discovery mutation", + )); + } + _ => { + unsafe { CloseHandle(handle) }; + return Err(refused("Failed", "the discovery mutex cannot be held")); + } + } + } +} + +pub(crate) fn save(path: &Path, value: SdkValue) -> Result<()> { + let bytes = layerfs_bridge::control::Answer { + id: 1, + reply: Reply::Sdk(value), + } + .encode() + .map_err(failed)?; + let temp = path.with_extension(format!( + "{}-{}", + std::process::id(), + layerfs_bridge::sdk_values::hex(®istry::random()?[..8]) + )); + let mut file = OpenOptions::new() + .write(true) + .create_new(true) + .open(&temp) + .map_err(failed)?; + file.write_all(&bytes).map_err(failed)?; + drop(file); + fs::rename(temp, path).map_err(failed) +} + +pub(crate) fn load(path: &Path) -> Result { + private(path, false)?; + let file = OpenOptions::new().read(true).open(path).map_err(failed)?; + if file.metadata().map_err(failed)?.len() > 65535 { + return Err(refused("InvalidInput", "discovery record too large")); + } + let mut bytes = Vec::new(); + file.take(65536).read_to_end(&mut bytes).map_err(failed)?; + match layerfs_bridge::control::Answer::decode(&bytes) + .map_err(failed)? + .reply + { + Reply::Sdk(value) => Ok(value), + _ => Err(refused("InvalidInput", "discovery record kind")), + } +} + +pub(crate) fn save_project(path: &Path, project: &Project) -> Result<()> { + save( + &path.join("project.record"), + SdkValue::map([ + ( + "manifest", + SdkValue::Bytes(project.manifest.encode().map_err(failed)?), + ), + ( + "installed", + project + .installed + .as_ref() + .map(|m| m.encode().map(SdkValue::Bytes)) + .transpose() + .map_err(failed)? + .unwrap_or_default(), + ), + ]), + ) +} + +pub(crate) fn project(args: &SdkValue) -> Result { + let path = project_dir(args)?; + let value = load(&path.join("project.record"))?; + let decode = |name| match value.get(name) { + Some(SdkValue::Bytes(bytes)) => StoreManifest::decode(bytes).map_err(failed), + _ => Err(refused("NoSuchProject", "no complete project manifest")), + }; + let manifest = decode("manifest")?; + if manifest.profile != layerfs_bridge::provision::StoreProfile::Disposable { + return Err(refused("InvalidInput", "Disposable required")); + } + let installed = if matches!(value.get("installed"), Some(SdkValue::Bytes(_))) { + Some(decode("installed")?) + } else { + None + }; + Ok(Project { + store: SealedStore { + path: path.join("sealed.sqlite"), + profile: SqlitePersistenceProfile::Disposable, + sqlite_version: manifest.host_sqlite.clone(), + bytes: manifest.bytes, + }, + manifest, + installed, + }) +} diff --git a/engine/crates/layerfs-node/src/dispatch.rs b/engine/crates/layerfs-node/src/dispatch.rs index 99c80b12b6..7ecf4a35e3 100644 --- a/engine/crates/layerfs-node/src/dispatch.rs +++ b/engine/crates/layerfs-node/src/dispatch.rs @@ -3,7 +3,11 @@ //! backend table (`backendCall`: `backend.store.*`, `backend.daemon.*` and the //! runtime's `runtime.*` reads and actions). use crate::job::{refused, Job, Outcome}; -use crate::{convert, direct, exec, job, output, project, registry, workspace}; +#[cfg(unix)] +use crate::job; +use crate::{convert, direct, project}; +#[cfg(unix)] +use crate::{exec, output, registry, workspace}; use layerfs_bridge::control::SdkValue; use napi::{bindgen_prelude::AsyncTask, JsUnknown}; @@ -28,6 +32,8 @@ fn dispatch(op: &str, args: SdkValue) -> Outcome { .map_err(|error| refused("InvalidInput", error.to_string()))?; } } + #[cfg(unix)] + { match op { "project.init" => project::init(&args), "project.list_sandboxes" => workspace::sandboxes(&args), @@ -51,6 +57,33 @@ fn dispatch(op: &str, args: SdkValue) -> Outcome { _ if op.contains('.') => direct::call(op, args, false), _ => Err(refused("UnknownMethod", format!("no operation {op}"))), } + } + #[cfg(windows)] + { + // Workspace and Sandbox operations need a daemon; the Windows-native + // Store route serves project, fs and branch calls in-process. + match op { + "project.init" => project::init(&args), + "project.list_sandboxes" + | "sandbox.list_workspaces" + | "sandbox.create" + | "sandbox.close" + | "workspace.mount" + | "workspace.commit" + | "workspace.unmount" + | "workspace.exec" + | "workspace.exec_release" => Err(refused( + "Unsupported", + "Workspace and Sandbox operations need a daemon; the Windows-native Store route serves project, fs and branch calls in-process", + )), + _ if op.starts_with("backend.") || op.starts_with("runtime.") => Err(refused( + "UnknownMethod", + "backend and runtime methods require backendCall", + )), + _ if op.contains('.') => direct::call(op, args, false), + _ => Err(refused("UnknownMethod", format!("no operation {op}"))), + } + } } /// `sandbox.list_workspaces`: the daemon's read model without its history @@ -72,6 +105,7 @@ fn listed(answer: SdkValue) -> Outcome { /// A daemon backend call through the named Sandbox of the project: its /// Workspaces and the read model that lists them. `deploy` only selects how this process dials +#[cfg(unix)] /// the daemon, so it is not sent on. fn daemon_backend(op: &str, args: SdkValue) -> Outcome { let state = registry::sandbox_live(&args)?; @@ -100,8 +134,21 @@ pub(crate) fn exec_output( args: JsUnknown, page: napi::bindgen_prelude::Buffer, ) -> napi::Result> { - let args = convert::from_js(args)?; - Ok(AsyncTask::new(Job::new(move || output::page(&args, page)))) + #[cfg(windows)] + { + let _ = (&args, &page); + return Ok(AsyncTask::new(Job::new(move || { + Err(refused( + "Unsupported", + "exec output needs a daemon Workspace; the Windows-native Store route serves project, fs and branch calls in-process", + )) + }))); + } + #[cfg(unix)] + { + let args = convert::from_js(args)?; + Ok(AsyncTask::new(Job::new(move || output::page(&args, page)))) + } } /// Opens or releases a Store of this process. @@ -118,27 +165,47 @@ pub(crate) fn backend_call(op: String, args: JsUnknown) -> napi::Result workspace::status(&args), - "backend.daemon.process.start" => exec::exec(&args), - "backend.daemon.process.list" => exec::processes(&args), - "backend.daemon.process.cancel" => exec::cancel(&args), - "runtime.project.get_init" => crate::project::progress(&args), - "runtime.sandbox.reclaim" => workspace::reclaim(&args), - "backend.daemon.sandbox.get_log" => crate::sandbox::get_log(&args), - "backend.store.project.get_history" - | "backend.store.project.get_storage" - | "backend.store.project.list_overwritten" - | "backend.store.branch.list_commit_storage" - | "backend.store.fs.get_storage" - | "backend.store.fs.list_revisions" => direct::call(&op, args, true), - "backend.daemon.workspace.get_storage" | "backend.daemon.workspace.list_changes" => { - daemon_backend(&op, args) + Job::new(move || { + #[cfg(unix)] + { + match op.as_str() { + "backend.daemon.workspace.status" => workspace::status(&args), + "backend.daemon.process.start" => exec::exec(&args), + "backend.daemon.process.list" => exec::processes(&args), + "backend.daemon.process.cancel" => exec::cancel(&args), + "runtime.project.get_init" => crate::project::progress(&args), + "runtime.sandbox.reclaim" => workspace::reclaim(&args), + "backend.daemon.sandbox.get_log" => crate::sandbox::get_log(&args), + "backend.store.project.get_history" + | "backend.store.project.get_storage" + | "backend.store.project.list_overwritten" + | "backend.store.branch.list_commit_storage" + | "backend.store.fs.get_storage" + | "backend.store.fs.list_revisions" => direct::call(&op, args, true), + "backend.daemon.workspace.get_storage" + | "backend.daemon.workspace.list_changes" => daemon_backend(&op, args), + _ => Err(refused( + "UnknownMethod", + format!("no backend operation {op}"), + )), + } + } + #[cfg(windows)] + { + match op.as_str() { + "runtime.project.get_init" => crate::project::progress(&args), + "backend.store.project.get_history" + | "backend.store.project.get_storage" + | "backend.store.project.list_overwritten" + | "backend.store.branch.list_commit_storage" + | "backend.store.fs.get_storage" + | "backend.store.fs.list_revisions" => direct::call(&op, args, true), + _ => Err(refused( + "Unsupported", + "this backend call needs a daemon; the Windows-native Store route serves Store calls in-process", + )), + } } - _ => Err(refused( - "UnknownMethod", - format!("no backend operation {op}"), - )), }) .traced(scope), )) diff --git a/engine/crates/layerfs-node/src/lib.rs b/engine/crates/layerfs-node/src/lib.rs index 298d5020af..9abfe3d6e1 100644 --- a/engine/crates/layerfs-node/src/lib.rs +++ b/engine/crates/layerfs-node/src/lib.rs @@ -1,16 +1,25 @@ //! Node entry points for the public SDK and its backend table (#428). mod convert; mod direct; +#[cfg(unix)] +mod discovery; +#[cfg(windows)] +#[path = "discovery_windows.rs"] mod discovery; mod dispatch; +#[cfg(unix)] mod exec; mod job; +#[cfg(unix)] mod output; +#[cfg(unix)] mod pool; mod project; mod registry; +#[cfg(unix)] mod sandbox; mod trace; +#[cfg(unix)] mod workspace; use job::Job; diff --git a/engine/crates/layerfs-node/src/project.rs b/engine/crates/layerfs-node/src/project.rs index bcfeec94d3..1b7ccd00d6 100644 --- a/engine/crates/layerfs-node/src/project.rs +++ b/engine/crates/layerfs-node/src/project.rs @@ -63,6 +63,7 @@ pub(crate) fn init(args: &SdkValue) -> Outcome { failed(error) } })?; + #[cfg(unix)] std::fs::set_permissions(&directory, { use std::os::unix::fs::PermissionsExt; std::fs::Permissions::from_mode(0o700) diff --git a/engine/crates/layerfs-node/src/registry.rs b/engine/crates/layerfs-node/src/registry.rs index aeeb25bc47..d9a4fda1a9 100644 --- a/engine/crates/layerfs-node/src/registry.rs +++ b/engine/crates/layerfs-node/src/registry.rs @@ -8,9 +8,15 @@ //! binding) also keeps the background processes it started; the daemon holds //! no process record. use crate::job::refused; +#[cfg(unix)] +use crate::pool::Controls; +#[cfg(unix)] use layerfs_api::MountedWorkspace; -use layerfs_bridge::control::{SdkRefusal, SdkValue, WorkspaceToken}; +#[cfg(unix)] +use layerfs_bridge::control::WorkspaceToken; +use layerfs_bridge::control::{SdkRefusal, SdkValue}; use layerfs_bridge::provision::StoreManifest; +#[cfg(unix)] use layerfs_sandbox::{backend::docker::Sandbox, CommandIdentity}; use std::collections::BTreeMap; use std::sync::{Arc, LazyLock, Mutex, MutexGuard}; @@ -24,12 +30,14 @@ pub(crate) struct Project { } /// One mounted Workspace. +#[cfg(unix)] pub(crate) struct Mount { pub(crate) workspace: MountedWorkspace, pub(crate) branch: String, } /// One background process started in a Workspace. +#[cfg(unix)] pub(crate) struct Process { pub(crate) path: String, pub(crate) command: String, @@ -39,6 +47,7 @@ pub(crate) struct Process { } /// One live Sandbox: Sandbox `id` (its number) of `project`. +#[cfg(unix)] pub(crate) struct SandboxState { pub(crate) id: String, pub(crate) project: String, @@ -47,7 +56,7 @@ pub(crate) struct SandboxState { pub(crate) directory: std::path::PathBuf, pub(crate) runtime: Sandbox, pub(crate) identity: CommandIdentity, - pub(crate) controls: crate::pool::Controls, + pub(crate) controls: Controls, pub(crate) mounts: Mutex>, pub(crate) processes: Mutex>, } @@ -56,6 +65,7 @@ pub(crate) struct SandboxState { pub(crate) static INITS: LazyLock>>> = LazyLock::new(Default::default); /// This process's live Sandboxes, by their record directory. +#[cfg(unix)] pub(crate) static SANDBOXES: LazyLock>>> = LazyLock::new(Default::default); @@ -77,6 +87,7 @@ pub(crate) fn text<'a>(args: &'a SdkValue, name: &str) -> Result<&'a str, SdkRef /// mount checks just that mount (`SandboxState::token`, `directory`); one /// that needs every mount or process another process may have changed takes /// [`sandbox_refreshed`]. +#[cfg(unix)] pub(crate) fn sandbox(args: &SdkValue) -> Result, SdkRefusal> { let directory = crate::discovery::sandbox_dir(args, text(args, "sandbox")?)?; let existing = lock(&SANDBOXES)?.get(&directory).cloned(); @@ -95,6 +106,7 @@ pub(crate) fn sandbox(args: &SdkValue) -> Result, SdkRefusal> /// records (which inspects too). A container found gone or stopped (an idle /// Sandbox's daemon ends itself, #373) is the refusal of /// `discovery::gone`, and this process forgets the state. +#[cfg(unix)] pub(crate) fn sandbox_live(args: &SdkValue) -> Result, SdkRefusal> { let directory = crate::discovery::sandbox_dir(args, text(args, "sandbox")?)?; let Some(state) = lock(&SANDBOXES)?.get(&directory).cloned() else { @@ -116,6 +128,7 @@ pub(crate) fn sandbox_live(args: &SdkValue) -> Result, SdkRefu } /// `args` naming Sandbox `id` of their project. +#[cfg(unix)] pub(crate) fn naming(args: &SdkValue, id: &str) -> SdkValue { let mut fields = match args { SdkValue::Map(fields) => fields @@ -131,12 +144,14 @@ pub(crate) fn naming(args: &SdkValue, id: &str) -> SdkValue { /// The Sandbox an operation names, its tables read again from the shared /// records and the daemon (one status call per mount). +#[cfg(unix)] pub(crate) fn sandbox_refreshed(args: &SdkValue) -> Result, SdkRefusal> { let state = sandbox(args)?; crate::discovery::refresh(&state)?; Ok(state) } +#[cfg(unix)] impl SandboxState { /// The token of the Workspace mounted at `path`. pub(crate) fn token(&self, path: &str) -> Result { diff --git a/engine/crates/layerfs-node/src/trace.rs b/engine/crates/layerfs-node/src/trace.rs index 8fad42e91f..3c7ae58d47 100644 --- a/engine/crates/layerfs-node/src/trace.rs +++ b/engine/crates/layerfs-node/src/trace.rs @@ -2,10 +2,17 @@ //! makes travels as a traced observation under the call's scope, and the //! telemetry of the replies is collected for its trace line. An untraced call //! sends exactly what it did before. Telemetry never changes a result. +#[cfg(unix)] use crate::pool::{Controls, Lease}; -use layerfs_api::internal::{self, Control}; -use layerfs_bridge::control::{SdkRefusal, SdkValue}; +#[cfg(unix)] +use layerfs_api::internal; +#[cfg(unix)] +use layerfs_api::internal::Control; +#[cfg(unix)] +use layerfs_bridge::control::SdkRefusal; +use layerfs_bridge::control::SdkValue; use std::cell::{Cell, RefCell}; +#[cfg(unix)] use std::ops::{Deref, DerefMut}; use std::time::Duration; @@ -71,16 +78,19 @@ pub(crate) fn collect(value: SdkValue) { } /// A Sandbox's control connection, traced while this thread is. +#[cfg(unix)] pub(crate) struct Traced<'a>(Lease<'a>); /// Lends a control connection for one call's exchanges; the wait for it is /// the call's queue time. +#[cfg(unix)] pub(crate) fn control(controls: &Controls) -> Result, SdkRefusal> { let (mut lease, waited) = controls.lend()?; WAITED.set(WAITED.get() + waited); internal::trace(&mut lease, SCOPE.get()); Ok(Traced(lease)) } +#[cfg(unix)] impl Drop for Traced<'_> { fn drop(&mut self) { let telemetry = internal::take_telemetry(&mut self.0); @@ -91,12 +101,14 @@ impl Drop for Traced<'_> { }); } } +#[cfg(unix)] impl Deref for Traced<'_> { type Target = Control; fn deref(&self) -> &Control { &self.0 } } +#[cfg(unix)] impl DerefMut for Traced<'_> { fn deref_mut(&mut self) -> &mut Control { &mut self.0 diff --git a/engine/crates/layerfs-overlay/Cargo.toml b/engine/crates/layerfs-overlay/Cargo.toml index a0de581508..16b14a757b 100644 --- a/engine/crates/layerfs-overlay/Cargo.toml +++ b/engine/crates/layerfs-overlay/Cargo.toml @@ -13,3 +13,11 @@ rusqlite = { version = "=0.40.2", features = ["cache", "limits", "blob"] } [target.'cfg(target_os = "linux")'.dependencies] rusqlite = { version = "=0.40.2", features = ["bundled"] } + +[target.'cfg(target_os = "windows")'.dependencies] +# Windows has no system SQLite, and the audited identity module needs the +# Win32 file-information calls; CreateFileW is additionally gated on +# Win32_Security by its SECURITY_ATTRIBUTES parameter. windows-sys is +# already in the locked graph. +rusqlite = { version = "=0.40.2", features = ["bundled"] } +windows-sys = { version = "=0.61.2", features = ["Win32_Foundation", "Win32_Security", "Win32_Storage_FileSystem"] } diff --git a/engine/crates/layerfs-overlay/src/database/mod.rs b/engine/crates/layerfs-overlay/src/database/mod.rs index 17948fa35b..9da175d217 100644 --- a/engine/crates/layerfs-overlay/src/database/mod.rs +++ b/engine/crates/layerfs-overlay/src/database/mod.rs @@ -5,5 +5,8 @@ pub(crate) mod startup; pub(crate) mod statements; pub(crate) mod physical; +#[cfg(target_os = "windows")] +#[allow(unsafe_code)] +pub(crate) mod windows_identity; pub(crate) mod accounting; diff --git a/engine/crates/layerfs-overlay/src/database/physical.rs b/engine/crates/layerfs-overlay/src/database/physical.rs index 65b7e9b7ec..b5c9b23144 100644 --- a/engine/crates/layerfs-overlay/src/database/physical.rs +++ b/engine/crates/layerfs-overlay/src/database/physical.rs @@ -94,11 +94,57 @@ impl Allocation { work: self.work.get(), }) } - #[cfg(not(any(target_os = "macos", target_os = "linux")))] + #[cfg(target_os = "windows")] + pub(crate) fn new(file: File, path: &Path) -> OverlayResult { + let identity = super::windows_identity::windows_handle_identity(&file)?; + if identity.links != 1 { + return Err(OverlayError::Invalid("allocation file identity")); + } + let allocated = super::windows_identity::windows_allocation_size(&file)?; + Ok(Self { + file, + device: identity.device, + inode: identity.index, + path: path.to_owned(), + work: Cell::new(AllocationWork::default()), + high_water: Cell::new(allocated), + }) + } + #[cfg(target_os = "windows")] + pub(crate) fn state(&self) -> OverlayResult { + let mut work = self.work.get(); + work.observations = work.observations.saturating_add(1); + self.work.set(work); + let meta = self.file.metadata()?; + let by_path = super::windows_identity::windows_path_identity(&self.path)?; + let by_handle = super::windows_identity::windows_handle_identity(&self.file)?; + if by_path.device != by_handle.device + || by_path.index != by_handle.index + || by_handle.device != self.device + || by_handle.index != self.inode + || by_handle.links != 1 + { + return Err(OverlayError::Invalid("allocation file identity")); + } + // The allocated footprint comes from FileStandardInfo on the same + // retained handle (compression/sparse aware); the disposable overlay + // never preallocates, so this tracks the tail's actual clusters. + let allocated = super::windows_identity::windows_allocation_size(&self.file)?; + self.high_water.set(self.high_water.get().max(allocated)); + Ok(AllocationState { + logical_bytes: meta.len(), + allocated_bytes: allocated, + high_water_allocated_bytes: self.high_water.get(), + reserved_tail_bytes: 0, + cleanup_headroom_bytes: 0, + work: self.work.get(), + }) + } + #[cfg(not(any(target_os = "macos", target_os = "linux", target_os = "windows")))] pub(crate) fn new(_file: File, _path: &Path) -> OverlayResult { Err(OverlayError::UnsupportedPlatform) } - #[cfg(not(any(target_os = "macos", target_os = "linux")))] + #[cfg(not(any(target_os = "macos", target_os = "linux", target_os = "windows")))] pub(crate) fn state(&self) -> OverlayResult { Err(OverlayError::UnsupportedPlatform) } @@ -119,7 +165,21 @@ impl Allocation { // those are not ordinary writable capacity. Retain the original cause. Ok(filesystem.blocks_available() == 0) } - #[cfg(not(any(target_os = "macos", target_os = "linux")))] + #[cfg(target_os = "windows")] + pub(crate) fn device_full(&self) -> OverlayResult { + self.state()?; + let mut work = self.work.get(); + work.capacity_checks = work.capacity_checks.saturating_add(1); + self.work.set(work); + let directory = self + .path + .parent() + .unwrap_or_else(|| std::path::Path::new(".")); + let free = super::windows_identity::windows_free_bytes(directory) + .map_err(|_| OverlayError::Invalid("capacity observation"))?; + Ok(free == 0) + } + #[cfg(not(any(target_os = "macos", target_os = "linux", target_os = "windows")))] pub(crate) fn device_full(&self) -> OverlayResult { Err(OverlayError::UnsupportedPlatform) } diff --git a/engine/crates/layerfs-overlay/src/database/startup.rs b/engine/crates/layerfs-overlay/src/database/startup.rs index 2e7a33f8ac..db39ac8e34 100644 --- a/engine/crates/layerfs-overlay/src/database/startup.rs +++ b/engine/crates/layerfs-overlay/src/database/startup.rs @@ -66,7 +66,11 @@ fn initialize(path: &Path, config: ProfileConfig, template: Option<&Path>) -> Cr let mut work = CreationWork::default(); let mut allocation = None; let result = (|| { - if !cfg!(any(target_os = "macos", target_os = "linux")) { + if !cfg!(any( + target_os = "macos", + target_os = "linux", + target_os = "windows" + )) { return Err(crate::OverlayError::UnsupportedPlatform); } let mut options = OpenOptions::new(); diff --git a/engine/crates/layerfs-overlay/src/database/windows_identity.rs b/engine/crates/layerfs-overlay/src/database/windows_identity.rs new file mode 100644 index 0000000000..f037d4f190 --- /dev/null +++ b/engine/crates/layerfs-overlay/src/database/windows_identity.rs @@ -0,0 +1,120 @@ +//! The overlay's one audited Windows FFI surface: a file's real identity. +//! +//! This follows the audited-module precedent of the storage codec, the +//! persistence file-control and Windows lanes, and the project host probe: +//! one owner-authorized module of raw Win32 calls, allowed by the boundary +//! guard and compiled on Windows only; no other module in this crate may +//! use unsafe Rust. The allocation's identity checks need the volume serial +//! number, the file index and the link count, which std does not expose. +#![allow(unsafe_code)] +use std::fs::File; +use std::io; +use std::os::windows::io::AsRawHandle; +use std::path::Path; +use windows_sys::Win32::Storage::FileSystem::BY_HANDLE_FILE_INFORMATION; + +/// One entry's Windows identity. +pub struct WindowsIdentity { + pub device: u64, + pub index: u64, + pub links: u64, +} + +/// The identity of the entry an open file already holds, without opening +/// anything new. +pub fn windows_handle_identity(file: &File) -> io::Result { + use windows_sys::Win32::Storage::FileSystem::GetFileInformationByHandle; + let mut information = BY_HANDLE_FILE_INFORMATION::default(); + let read = unsafe { GetFileInformationByHandle(file.as_raw_handle(), &mut information) }; + finish(read, information) +} + +/// The identity of `path`'s entry, read as attributes only: no data access, +/// no link traversal; directories need the backup-semantics flag. +/// The entry's on-disk allocation in bytes (compression/sparse aware), +/// read through FileStandardInfo on the open handle. +pub fn windows_allocation_size(file: &File) -> io::Result { + use windows_sys::Win32::Storage::FileSystem::{ + GetFileInformationByHandleEx, FILE_STANDARD_INFO, FileStandardInfo, + }; + let mut info = FILE_STANDARD_INFO::default(); + let ok = unsafe { + GetFileInformationByHandleEx( + file.as_raw_handle(), + FileStandardInfo, + &mut info as *mut FILE_STANDARD_INFO as *mut core::ffi::c_void, + std::mem::size_of::() as u32, + ) + }; + if ok == 0 { + return Err(io::Error::last_os_error()); + } + Ok(info.AllocationSize.max(0) as u64) +} + +pub fn windows_path_identity(path: &Path) -> io::Result { + use windows_sys::Win32::Foundation::{CloseHandle, INVALID_HANDLE_VALUE}; + use windows_sys::Win32::Storage::FileSystem::{ + CreateFileW, GetFileInformationByHandle, FILE_FLAG_BACKUP_SEMANTICS, FILE_SHARE_DELETE, + FILE_SHARE_READ, FILE_SHARE_WRITE, OPEN_EXISTING, + }; + let wide: Vec = path + .as_os_str() + .to_string_lossy() + .encode_utf16() + .chain(std::iter::once(0)) + .collect(); + let handle = unsafe { + CreateFileW( + wide.as_ptr(), + 0, + FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE, + std::ptr::null(), + OPEN_EXISTING, + FILE_FLAG_BACKUP_SEMANTICS, + std::ptr::null_mut(), + ) + }; + if handle == INVALID_HANDLE_VALUE { + return Err(io::Error::last_os_error()); + } + let mut information = BY_HANDLE_FILE_INFORMATION::default(); + let read = unsafe { GetFileInformationByHandle(handle, &mut information) }; + unsafe { CloseHandle(handle) }; + finish(read, information) +} + +fn finish(read: i32, information: BY_HANDLE_FILE_INFORMATION) -> io::Result { + if read == 0 { + return Err(io::Error::last_os_error()); + } + Ok(WindowsIdentity { + device: u64::from(information.dwVolumeSerialNumber), + index: (u64::from(information.nFileIndexHigh) << 32) | u64::from(information.nFileIndexLow), + links: u64::from(information.nNumberOfLinks), + }) +} + +/// The bytes available to the caller on `directory`'s volume. +pub(crate) fn windows_free_bytes(directory: &Path) -> io::Result { + use windows_sys::Win32::Storage::FileSystem::GetDiskFreeSpaceExW; + let wide: Vec = directory + .as_os_str() + .to_string_lossy() + .encode_utf16() + .chain(std::iter::once(0)) + .collect(); + let mut free: u64 = 0; + let read = unsafe { + GetDiskFreeSpaceExW( + wide.as_ptr(), + &mut free, + std::ptr::null_mut(), + std::ptr::null_mut(), + ) + }; + if read == 0 { + return Err(io::Error::last_os_error()); + } + Ok(free) +} diff --git a/engine/crates/layerfs-overlay/src/lib.rs b/engine/crates/layerfs-overlay/src/lib.rs index 1c38d3418d..f6c7dad459 100644 --- a/engine/crates/layerfs-overlay/src/lib.rs +++ b/engine/crates/layerfs-overlay/src/lib.rs @@ -3,7 +3,7 @@ //! The engine owns SQL and profiling. Filesystem validation, scheduling, kernel //! replies and process lifetimes belong to its callers. Windows bound each job; //! they do not limit total files, changes, payload or Workspace lifetime. -#![forbid(unsafe_code)] +#![deny(unsafe_code)] mod contract; mod database; @@ -46,6 +46,10 @@ pub use contract::kernel_directory::{ pub use database::accounting::{Resources, StoredCounts}; pub use database::physical::{AllocationState, AllocationWork, ClosedFile}; pub use database::startup::{Creation, CreationWork}; +#[cfg(target_os = "windows")] +pub use database::windows_identity::{ + windows_allocation_size, windows_handle_identity, windows_path_identity, +}; pub use db::Overlay; pub use diagnostics::payload::PayloadWork; pub use error::{CloseFailure, OverlayError, OverlayResult}; diff --git a/engine/crates/layerfs-overlay/tests/allocation_windows.rs b/engine/crates/layerfs-overlay/tests/allocation_windows.rs new file mode 100644 index 0000000000..5fdd579610 --- /dev/null +++ b/engine/crates/layerfs-overlay/tests/allocation_windows.rs @@ -0,0 +1,36 @@ +//! The Windows overlay's allocated-byte accounting reads FileStandardInfo on +//! the retained handle: the footprint of the written tail, not the logical +//! length the old stand-in reported. +#![cfg(target_os = "windows")] +mod payload_support; +use layerfs_overlay::ProfileConfig; +use payload_support::*; + +#[test] +fn allocated_bytes_report_the_ondisk_footprint_of_the_written_tail() { + let temp = Temp::new(); + let db = temp.db(); + db.open_workspace([11; 32]).unwrap(); + let mut source = db.acquire_base_source(1).unwrap(); + // 300,001 bytes: not a cluster multiple, so the on-disk footprint is + // strictly above the logical length on a cluster-addressed volume — + // which the old logical-length stand-in could never report. + let mut file = File::new(&db, source, 3, pattern(300_001, 5)); + let _ = file.read(0, 16); + let state = db.allocation().unwrap(); + assert!(state.allocated_bytes > 0, "a written overlay holds clusters"); + assert!( + state.allocated_bytes >= state.logical_bytes, + "cluster rounding keeps the footprint at or above the tail" + ); + assert!( + state.allocated_bytes.saturating_sub(state.logical_bytes) < 1 << 20, + "the footprint tracks the tail within a cluster margin, got {} for {}", + state.allocated_bytes, + state.logical_bytes + ); + println!( + "allocated={} logical={}", + state.allocated_bytes, state.logical_bytes + ); +} diff --git a/engine/crates/layerfs-persistence/Cargo.toml b/engine/crates/layerfs-persistence/Cargo.toml index 747630e708..b1d20dfdc9 100644 --- a/engine/crates/layerfs-persistence/Cargo.toml +++ b/engine/crates/layerfs-persistence/Cargo.toml @@ -12,6 +12,8 @@ layerfs-history = { path = "../../../core/crates/layerfs-history", default-featu layerfs-content = { path = "../../../core/crates/layerfs-content" } layerfs-telemetry = { path = "../../../core/crates/layerfs-telemetry" } rusqlite = { version = "=0.40.2", features = ["cache", "limits", "blob"] } +# The lane name digest; the same locked sha2 layerfs-storage already uses. +sha2 = { version = "=0.11.0", default-features = false } [dev-dependencies] blake3 = { version = "=1.8.5", default-features = false } @@ -24,3 +26,9 @@ nix = { version = "=0.31.3", default-features = false, features = ["fs", "pthrea [target.'cfg(target_os = "linux")'.dependencies] rusqlite = { version = "=0.40.2", features = ["bundled"] } + +[target.'cfg(target_os = "windows")'.dependencies] +# Windows has no system SQLite; the Store bundles the same version. The +# writer lane and volume probe FFI use windows-sys, already in the locked graph. +rusqlite = { version = "=0.40.2", features = ["bundled"] } +windows-sys = { version = "=0.61.2", features = ["Win32_Foundation", "Win32_Security", "Win32_System_Threading", "Win32_Storage_FileSystem"] } diff --git a/engine/crates/layerfs-persistence/examples/issue327_counters_v2.rs b/engine/crates/layerfs-persistence/examples/issue327_counters_v2.rs index 524b2bbed8..792a49fad0 100644 --- a/engine/crates/layerfs-persistence/examples/issue327_counters_v2.rs +++ b/engine/crates/layerfs-persistence/examples/issue327_counters_v2.rs @@ -36,6 +36,7 @@ fn fixture() -> Vec> { }) .collect() } +#[cfg(unix)] fn main() { assert_eq!( std::env::var("SCREEN_SCENARIO").as_deref(), @@ -174,3 +175,8 @@ fn main() { }; writeln!(output,"{{\"sql_statements\":{},\"sql_vm_steps\":{},\"sqlite\":\"{}\",\"operation_ns\":{operation},\"complete_ns\":{},\"file_bytes\":{},\"allocated_bytes\":{allocated},\"sealed_bytes\":{},\"objects_input\":{COUNT},\"input_bytes\":{},\"cache\":\"created-in-sample Store; fixed warm in-memory fixture\",\"status\":\"RECORDED\"}}",work.statements,work.vm_steps,sql_version,total.elapsed().as_nanos(),metadata.len(),sealed.bytes,COUNT*BYTES).unwrap(); } + +#[cfg(not(unix))] +fn main() { + eprintln!("this frozen recorder requires Unix (st_blocks); nothing recorded"); +} diff --git a/engine/crates/layerfs-persistence/examples/issue327_counters_v3.rs b/engine/crates/layerfs-persistence/examples/issue327_counters_v3.rs index 9f4f5d4db6..acc2035100 100644 --- a/engine/crates/layerfs-persistence/examples/issue327_counters_v3.rs +++ b/engine/crates/layerfs-persistence/examples/issue327_counters_v3.rs @@ -36,6 +36,7 @@ fn fixture() -> Vec> { }) .collect() } +#[cfg(unix)] fn main() { assert_eq!( std::env::var("SCREEN_SCENARIO").as_deref(), @@ -179,3 +180,8 @@ fn main() { }; writeln!(output,"{{\"sql_statements\":{},\"sql_vm_steps\":{},\"sqlite\":\"{}\",\"operation_ns\":{operation},\"complete_ns\":{},\"file_bytes\":{},\"allocated_bytes\":{allocated},\"sealed_bytes\":{},\"objects_input\":{COUNT},\"input_bytes\":{},\"cache\":\"created-in-sample Store; fixed warm in-memory fixture\",\"status\":\"RECORDED\"}}",work.statements,work.vm_steps,sql_version,total.elapsed().as_nanos(),metadata.len(),sealed.bytes,COUNT*BYTES).unwrap(); } + +#[cfg(not(unix))] +fn main() { + eprintln!("this frozen recorder requires Unix (st_blocks); nothing recorded"); +} diff --git a/engine/crates/layerfs-persistence/examples/issue327_counters_v4.rs b/engine/crates/layerfs-persistence/examples/issue327_counters_v4.rs index 9a4b1371cd..4a9ed74050 100644 --- a/engine/crates/layerfs-persistence/examples/issue327_counters_v4.rs +++ b/engine/crates/layerfs-persistence/examples/issue327_counters_v4.rs @@ -36,6 +36,7 @@ fn fixture() -> Vec> { }) .collect() } +#[cfg(unix)] fn main() { assert_eq!( std::env::var("SCREEN_SCENARIO").as_deref(), @@ -179,3 +180,8 @@ fn main() { }; writeln!(output,"{{\"sql_statement_ns\":{},\"sql_statements\":{},\"sql_vm_steps\":{},\"sqlite\":\"{}\",\"operation_ns\":{operation},\"complete_ns\":{},\"file_bytes\":{},\"allocated_bytes\":{allocated},\"sealed_bytes\":{},\"objects_input\":{COUNT},\"input_bytes\":{},\"cache\":\"created-in-sample Store; fixed warm in-memory fixture\",\"status\":\"RECORDED\"}}",work.statement_ns,work.statements,work.vm_steps,sql_version,total.elapsed().as_nanos(),metadata.len(),sealed.bytes,COUNT*BYTES).unwrap(); } + +#[cfg(not(unix))] +fn main() { + eprintln!("this frozen recorder requires Unix (st_blocks); nothing recorded"); +} diff --git a/engine/crates/layerfs-persistence/examples/issue327_counters_v5.rs b/engine/crates/layerfs-persistence/examples/issue327_counters_v5.rs index 73b3479042..b770decbdf 100644 --- a/engine/crates/layerfs-persistence/examples/issue327_counters_v5.rs +++ b/engine/crates/layerfs-persistence/examples/issue327_counters_v5.rs @@ -36,6 +36,7 @@ fn fixture() -> Vec> { }) .collect() } +#[cfg(unix)] fn main() { assert_eq!( std::env::var("SCREEN_SCENARIO").as_deref(), @@ -179,3 +180,8 @@ fn main() { }; writeln!(output,"{{\"sql_phases_ns\":{:?},\"sql_statement_ns\":{},\"sql_statements\":{},\"sql_vm_steps\":{},\"sqlite\":\"{}\",\"operation_ns\":{operation},\"complete_ns\":{},\"file_bytes\":{},\"allocated_bytes\":{allocated},\"sealed_bytes\":{},\"objects_input\":{COUNT},\"input_bytes\":{},\"cache\":\"created-in-sample Store; fixed warm in-memory fixture\",\"status\":\"RECORDED\"}}",work.statement_phases.map(|p| p.wall_ns),work.statement_ns,work.statements,work.vm_steps,sql_version,total.elapsed().as_nanos(),metadata.len(),sealed.bytes,COUNT*BYTES).unwrap(); } + +#[cfg(not(unix))] +fn main() { + eprintln!("this frozen recorder requires Unix (st_blocks); nothing recorded"); +} diff --git a/engine/crates/layerfs-persistence/src/backend/sqlite/connection.rs b/engine/crates/layerfs-persistence/src/backend/sqlite/connection.rs index f06d1e573d..d7598adfa0 100644 --- a/engine/crates/layerfs-persistence/src/backend/sqlite/connection.rs +++ b/engine/crates/layerfs-persistence/src/backend/sqlite/connection.rs @@ -154,7 +154,11 @@ impl Session { creation_layout: crate::SqlitePackLayout, creation_acquisition: crate::SqliteAcquisitionSchema, ) -> Result { - if !cfg!(any(target_os = "macos", target_os = "linux")) { + if !cfg!(any( + target_os = "macos", + target_os = "linux", + target_os = "windows" + )) { return Err(BackendError::Integrity); } let flags = if writable { @@ -171,6 +175,17 @@ impl Session { connection .set_db_config(rusqlite::config::DbConfig::SQLITE_DBCONFIG_DEFENSIVE, true) .map_err(rows::error)?; + // The profile pragmas are this open's first database-touching + // statements, where a WAL Store's -shm is created and recovery + // runs; two concurrent opens of one Store can meet Busy exactly + // there under the no-retry rule. The coarse writer lane replaces + // Busy: hold it for this one short setup step and release before + // the reads that follow. macOS keeps exact SQLite Busy by design. + let writer = super::writer_admission::Writer::acquire(path)?; + let connected = (|| -> Result< + (ConnectionProfile, crate::SqlitePackLayout, crate::SqliteAcquisitionSchema), + BackendError, + > { profile::apply(&connection, create, selected, creation_acquisition, &work)?; let (layout, acquisition) = if create { (creation_layout, creation_acquisition) @@ -244,6 +259,10 @@ impl Session { .map_err(rows::error)? as usize, }; profile::check(&profile)?; + Ok((profile, layout, acquisition)) + })(); + writer.release().map_err(|_| BackendError::Integrity)?; + let (profile, layout, acquisition) = connected?; super::thread_work::add(&work.borrow()); Ok(Self { admission: super::admission::Admission::default(), diff --git a/engine/crates/layerfs-persistence/src/backend/sqlite/mod.rs b/engine/crates/layerfs-persistence/src/backend/sqlite/mod.rs index fce18a22d7..f1d12fa7bd 100644 --- a/engine/crates/layerfs-persistence/src/backend/sqlite/mod.rs +++ b/engine/crates/layerfs-persistence/src/backend/sqlite/mod.rs @@ -7,6 +7,11 @@ pub(crate) mod connection; mod file_control; #[cfg(any(target_os = "macos", target_os = "linux"))] pub(crate) mod headroom; +#[cfg(target_os = "windows")] +#[allow(unsafe_code)] +mod windows_lane; +#[cfg(target_os = "windows")] +pub use windows_lane::windows_volume_filesystem; pub(crate) mod lane; pub(crate) mod metadata_allocation; pub(crate) mod metadata_locations; @@ -32,4 +37,4 @@ pub(crate) mod unit_io; pub(crate) mod unit_layout; mod units_publish; mod units_read; -mod writer_admission; +pub(crate) mod writer_admission; diff --git a/engine/crates/layerfs-persistence/src/backend/sqlite/windows_lane.rs b/engine/crates/layerfs-persistence/src/backend/sqlite/windows_lane.rs new file mode 100644 index 0000000000..5960bf6ed8 --- /dev/null +++ b/engine/crates/layerfs-persistence/src/backend/sqlite/windows_lane.rs @@ -0,0 +1,123 @@ +//! The Windows Store's one audited FFI surface. +//! +//! This is the Windows companion of the macOS seal file-control module: one +//! owner-authorized module of raw Win32 calls, allowed by the boundary guard +//! and compiled on Windows only; no other module in this crate may use +//! unsafe Rust. The writer lane is one named kernel mutex per Store +//! directory: the kernel releases it when a holder process exits (the next +//! waiter wakes on the abandoned mutex), which matches the Linux directory +//! flock's exit release, and it never opens a second descriptor to SQLite's +//! main/WAL/SHM files. The handle is held as an integer so `Writer` stays +//! plain data. The volume probe reports the filesystem of the directory's +//! local volume for the kernel guard's allowlist. +#![allow(unsafe_code)] +use sha2::{Digest, Sha256}; +use std::io; +use std::path::Path; +use windows_sys::Win32::Foundation::{CloseHandle, WAIT_ABANDONED, WAIT_OBJECT_0}; +use windows_sys::Win32::System::Threading::{ + CreateMutexW, ReleaseMutex, WaitForSingleObject, INFINITE, +}; + +/// The Store directory's cooperative writer lane. +pub(crate) struct LaneMutex { + handle: usize, +} + +/// The lane's kernel object name: SHA-256 of the resolved directory's +/// encoded bytes, truncated to 64 bits. A versioned-stable digest, not +/// `DefaultHasher`, whose algorithm may change between Rust releases and +/// silently split one directory onto two lanes across builds (K3 review F1). +pub(crate) fn lane_name(directory: &Path) -> String { + let resolved = std::fs::canonicalize(directory).unwrap_or_else(|_| directory.to_path_buf()); + let digest = Sha256::digest(resolved.as_os_str().as_encoded_bytes()); + let mut tag = [0u8; 8]; + tag.copy_from_slice(&digest[..8]); + format!("Local\\layerfs-writer-lane-{:016x}", u64::from_be_bytes(tag)) +} + +impl LaneMutex { + /// One blocking kernel wait on the directory's named mutex, taken after + /// the Session's FIFO turn, so at most one thread per Session waits here. + /// Creation only opens the shared kernel object. Exits: the lane (a + /// holder process that exits releases it); a failed wait. + pub(crate) fn acquire(directory: &Path) -> Result { + let name: Vec = lane_name(directory) + .encode_utf16() + .chain(std::iter::once(0)) + .collect(); + let handle = unsafe { CreateMutexW(std::ptr::null(), 0, name.as_ptr()) }; + if handle.is_null() { + return Err(()); + } + let waited = unsafe { WaitForSingleObject(handle, INFINITE) }; + if waited == WAIT_OBJECT_0 || waited == WAIT_ABANDONED { + Ok(Self { + handle: handle as usize, + }) + } else { + unsafe { CloseHandle(handle) }; + Err(()) + } + } + + /// Releases the lane and destroys this handle; a failed release returns + /// the retained lane unchanged. + pub(crate) fn release(self) -> Result<(), Self> { + let handle = self.handle as windows_sys::Win32::Foundation::HANDLE; + if unsafe { ReleaseMutex(handle) } == 0 { + return Err(Self { + handle: self.handle, + }); + } + unsafe { CloseHandle(handle) }; + Ok(()) + } +} + +/// The filesystem name of the local volume holding `directory`, for the +/// kernel guard's allowlist. Only a local drive letter is examined: UNC, +/// device and verbatim prefixes are network or device paths whose locks do +/// not coordinate Store writers. +pub fn windows_volume_filesystem(directory: &Path) -> io::Result { + use std::path::{Component, Prefix}; + let root = match directory.components().next() { + Some(Component::Prefix(prefix)) => match prefix.kind() { + Prefix::Disk(letter) => format!("{}:\\", letter as char), + _ => { + return Err(io::Error::new( + io::ErrorKind::Unsupported, + "a network or device path is not a local volume", + )) + } + }, + _ => { + return Err(io::Error::new( + io::ErrorKind::Unsupported, + "the directory has no volume prefix", + )) + } + }; + let wide: Vec = root.encode_utf16().chain(std::iter::once(0)).collect(); + let mut filesystem = [0u16; 16]; + let examined = unsafe { + windows_sys::Win32::Storage::FileSystem::GetVolumeInformationW( + wide.as_ptr(), + std::ptr::null_mut(), + 0, + std::ptr::null_mut(), + std::ptr::null_mut(), + std::ptr::null_mut(), + filesystem.as_mut_ptr(), + filesystem.len() as u32, + ) + }; + if examined == 0 { + return Err(io::Error::new( + io::ErrorKind::Unsupported, + format!("the volume {root} cannot be examined"), + )); + } + let end = filesystem.iter().position(|&wide| wide == 0).unwrap_or(0); + Ok(String::from_utf16_lossy(&filesystem[..end])) +} diff --git a/engine/crates/layerfs-persistence/src/backend/sqlite/writer_admission.rs b/engine/crates/layerfs-persistence/src/backend/sqlite/writer_admission.rs index c7d42a3f82..c66aa1504c 100644 --- a/engine/crates/layerfs-persistence/src/backend/sqlite/writer_admission.rs +++ b/engine/crates/layerfs-persistence/src/backend/sqlite/writer_admission.rs @@ -13,6 +13,8 @@ use { pub(crate) struct Writer { #[cfg(target_os = "linux")] lock: Flock, + #[cfg(target_os = "windows")] + lane: super::windows_lane::LaneMutex, } impl Writer { @@ -54,7 +56,28 @@ impl Writer { let _ = path; Ok(Self {}) } - #[cfg(not(any(target_os = "linux", target_os = "macos")))] + #[cfg(target_os = "windows")] + { + // Windows has no flock on a directory handle. One named kernel + // mutex per Store directory is the equivalent coarse lane: it + // never opens another descriptor to SQLite's main/WAL/SHM files, + // and a holder process that exits releases it. Multiple Store + // files in one directory share this coarse lane, as on Linux. + let directory = path + .parent() + .filter(|parent| !parent.as_os_str().is_empty()) + .unwrap_or_else(|| Path::new(".")); + if !std::fs::metadata(directory) + .map(|metadata| metadata.is_dir()) + .unwrap_or(false) + { + return Err(BackendError::Integrity); + } + let lane = super::windows_lane::LaneMutex::acquire(directory) + .map_err(|()| BackendError::Integrity)?; + Ok(Self { lane }) + } + #[cfg(not(any(target_os = "linux", target_os = "macos", target_os = "windows")))] { let _ = path; Err(BackendError::Integrity) @@ -72,10 +95,14 @@ impl Writer { Err((lock, _)) => Err(Self { lock }), } } - #[cfg(not(target_os = "linux"))] + #[cfg(target_os = "macos")] { Ok(()) } + #[cfg(target_os = "windows")] + { + self.lane.release().map_err(|lane| Self { lane }) + } } } diff --git a/engine/crates/layerfs-persistence/src/lib.rs b/engine/crates/layerfs-persistence/src/lib.rs index 9a2553b4e7..ddba618615 100644 --- a/engine/crates/layerfs-persistence/src/lib.rs +++ b/engine/crates/layerfs-persistence/src/lib.rs @@ -13,11 +13,15 @@ pub use backend::sqlite::headroom::STORE_HEADROOM_BYTES; pub use backend::sqlite::reclamation::{SpaceReclamation, RECLAMATION_PAGE_LIMIT}; pub use backend::sqlite::statement_work::StatementPhaseWork; pub use backend::sqlite::thread_work::thread_work; +#[cfg(target_os = "windows")] +#[cfg(target_os = "windows")] +pub use backend::sqlite::windows_volume_filesystem; pub use config::{ BackendSelection, PersistenceConfig, SqliteAcquisitionSchema, SqlitePackLayout, SqlitePersistenceProfile, }; pub use handles::Handles; + pub use history::HistoryProvider; pub use storage::acquisition::AcquisitionProvider; pub use storage::merge_records::{ @@ -27,6 +31,7 @@ pub(crate) use storage::provider as storage_provider; pub(crate) use storage::publication; pub use storage_provider::StorageProvider; pub use store::seal::SealedStore; +pub use store::lane::{store_lane, StoreLane}; mod metadata; mod objects; diff --git a/engine/crates/layerfs-persistence/src/store/handles.rs b/engine/crates/layerfs-persistence/src/store/handles.rs index 5a667a288e..00f20b3d9b 100644 --- a/engine/crates/layerfs-persistence/src/store/handles.rs +++ b/engine/crates/layerfs-persistence/src/store/handles.rs @@ -35,6 +35,14 @@ impl Handles { pub fn close(&self) { self.storage.session.admission.close(); } + /// Drops this session under the writer lane, so its connection's + /// close-time checkpoint never runs beside another opener's first + /// attach. A failed lane acquisition closes bare. + pub fn shutdown(self) { + let lane = crate::store_lane(&self.storage.session.path); + drop(self); + drop(lane); + } /// Read-back settings from the actual shared connection. pub fn profile(&self) -> &ConnectionProfile { &self.storage.session.profile diff --git a/engine/crates/layerfs-persistence/src/store/lane.rs b/engine/crates/layerfs-persistence/src/store/lane.rs new file mode 100644 index 0000000000..b19b720f48 --- /dev/null +++ b/engine/crates/layerfs-persistence/src/store/lane.rs @@ -0,0 +1,21 @@ +//! The Store directory's writer lane, held for a coordinated close. +use std::path::Path; + +/// Held for a coordinated close: the connection teardown's close-time +/// checkpoint runs inside it, never beside another opener's first attach. +/// Best-effort - a failed acquisition closes bare, as an uncoordinated drop +/// always has. +pub struct StoreLane(Option); + +impl Drop for StoreLane { + fn drop(&mut self) { + if let Some(writer) = self.0.take() { + let _ = writer.release(); + } + } +} + +/// Holds the writer lane of the Store directory holding `store`. +pub fn store_lane(store: &Path) -> StoreLane { + StoreLane(crate::backend::sqlite::writer_admission::Writer::acquire(store).ok()) +} diff --git a/engine/crates/layerfs-persistence/src/store/mod.rs b/engine/crates/layerfs-persistence/src/store/mod.rs index 73d521202f..c417ec5008 100644 --- a/engine/crates/layerfs-persistence/src/store/mod.rs +++ b/engine/crates/layerfs-persistence/src/store/mod.rs @@ -1,4 +1,5 @@ //! Responsibility-scoped implementation modules and reexports. +pub mod lane; pub(crate) mod config; pub(crate) mod handles; pub(crate) mod open; diff --git a/engine/crates/layerfs-persistence/src/store/open.rs b/engine/crates/layerfs-persistence/src/store/open.rs index 2cb9e98273..328d0c5314 100644 --- a/engine/crates/layerfs-persistence/src/store/open.rs +++ b/engine/crates/layerfs-persistence/src/store/open.rs @@ -18,7 +18,11 @@ impl Handles { history: &HistoryCatalogConfig, ) -> Result { if config.backend != BackendSelection::Sqlite - || !cfg!(any(target_os = "macos", target_os = "linux")) + || !cfg!(any( + target_os = "macos", + target_os = "linux", + target_os = "windows" + )) { return Err(PersistenceError::BackendUnavailable); } @@ -70,7 +74,11 @@ impl Handles { writable: bool, ) -> Result { if config.backend != BackendSelection::Sqlite - || !cfg!(any(target_os = "macos", target_os = "linux")) + || !cfg!(any( + target_os = "macos", + target_os = "linux", + target_os = "windows" + )) { return Err(PersistenceError::BackendUnavailable); } @@ -84,13 +92,30 @@ impl Handles { config.sqlite_acquisition, )?); if writable { - session.add_binding_hints()?; - session.add_lineage(crate::history::backfill_lineage)?; - session.add_merge_scratch()?; - session.add_file_digests()?; + // The setup statements are write transactions that two + // concurrent opens of one Store can interleave under the + // no-retry rule, so the whole block runs inside one held + // publication lane: its writer lock serializes the opens + // cross-process, and the block's own statements enter as + // nested turns, which do not take the lock a second time - + // a raw second hold here would self-deadlock on Linux, where + // flock is held per open file description. + let lane = session.hold_lane()?; + let setup = + (|| -> Result<(), crate::backend::records::BackendError> { + session.add_binding_hints()?; + session.add_lineage(crate::history::backfill_lineage)?; + session.add_merge_scratch()?; + session.add_file_digests() + })(); + drop(lane); + setup?; } let handles = Self::validated(session, directory, binding, cursor_key)?; if writable { + // The sweep runs as one write transaction whose admission takes + // the writer lane itself; the setup block's held lane above is + // released by then. crate::storage::merge_records::sweep(&handles.storage.session)?; } Ok(handles) diff --git a/engine/crates/layerfs-persistence/tests/serverless_store.rs b/engine/crates/layerfs-persistence/tests/serverless_store.rs index 91d10c5473..ac4a8861eb 100644 --- a/engine/crates/layerfs-persistence/tests/serverless_store.rs +++ b/engine/crates/layerfs-persistence/tests/serverless_store.rs @@ -1,4 +1,7 @@ //! Disposable serverless Store proofs through the real public provider. +//! Unix only: the child's readiness signal travels a unix-domain socket. +//! The Windows cross-process proof is tests/windows_store_native.rs. +#![cfg(unix)] mod support; use layerfs_content::{FinalizedObject, ObjectId, ObjectRole}; use layerfs_history::{HistoryCatalog, HistoryCatalogConfig, HistoryError, ReserveRequest}; diff --git a/engine/crates/layerfs-persistence/tests/support/mod.rs b/engine/crates/layerfs-persistence/tests/support/mod.rs index 86b851581a..419a11953b 100644 --- a/engine/crates/layerfs-persistence/tests/support/mod.rs +++ b/engine/crates/layerfs-persistence/tests/support/mod.rs @@ -20,9 +20,13 @@ impl Temp { pub fn new(name: &str) -> Self { static NEXT: AtomicU64 = AtomicU64::new(0); let path = std::env::temp_dir().join(format!( - "layerfs-history-{}-{}-{}", + "layerfs-history-{}-{}-{}-{}", std::process::id(), NEXT.fetch_add(1, Ordering::Relaxed), + std::time::SystemTime::now() + .duration_since(std::time::UNIX_EPOCH) + .map(|span| span.as_nanos()) + .unwrap_or(0), name )); std::fs::create_dir_all(&path).expect("temporary directory"); diff --git a/engine/crates/layerfs-persistence/tests/windows_lane_abandoned.rs b/engine/crates/layerfs-persistence/tests/windows_lane_abandoned.rs new file mode 100644 index 0000000000..416b741389 --- /dev/null +++ b/engine/crates/layerfs-persistence/tests/windows_lane_abandoned.rs @@ -0,0 +1,77 @@ +//! The Windows lane's dead-holder path, in its own binary so it never runs +//! beside the foreign-process test's re-exec'd children. +#![cfg(windows)] +mod support; +use layerfs_history::HistoryCatalogConfig; +use layerfs_persistence::{Handles, PersistenceConfig, SqlitePersistenceProfile}; +use layerfs_storage::{port::*, StoragePolicy}; +use std::path::{Path, PathBuf}; + +fn config(path: &Path) -> PersistenceConfig { + PersistenceConfig::sqlite(path).with_sqlite_profile(SqlitePersistenceProfile::Disposable) +} + +fn reserve() -> Reserve { + Reserve { + packs: 1, + ordinals: 1, + } +} + +fn authority(name: &[u8]) -> HistoryCatalogConfig { + HistoryCatalogConfig { + binding_key: name.to_vec(), + cursor_key: [67; 32], + incarnation: 1, + } +} + +/// The lane's dead-holder path: a thread that ends while owning the named +/// mutex leaves it abandoned, and the kernel hands ownership to the next +/// waiter. The abandoned state is produced deterministically here - a +/// thread waits on the product's own mutex name and returns without +/// releasing - and the Store must still open and write through that +/// `WAIT_ABANDONED` acquisition. +#[test] +fn a_dead_lane_holder_does_not_block_the_next_writer() { + use sha2::{Digest, Sha256}; + let temp = support::Temp::new("windows-store-abandoned"); + let path = temp.join("store.sqlite"); + let catalog = authority(b"windows-store-abandoned"); + let seed = Handles::create(config(&path), StoragePolicy::frozen_default(), &catalog).unwrap(); + seed.storage.reserve(reserve()).unwrap(); + drop(seed); + + let directory = temp.path().to_path_buf(); + let holder = std::thread::spawn(move || { + // The product's own lane name: SHA-256 of the resolved directory's + // encoded bytes, truncated to 64 bits (windows_lane::lane_name). + let resolved = std::fs::canonicalize(&directory).unwrap_or_else(|_| directory.clone()); + let digest = Sha256::digest(resolved.as_os_str().as_encoded_bytes()); + let mut tag = [0u8; 8]; + tag.copy_from_slice(&digest[..8]); + let name: Vec = format!("Local\\layerfs-writer-lane-{:016x}", u64::from_be_bytes(tag)) + .encode_utf16() + .chain(std::iter::once(0)) + .collect(); + let handle = unsafe { + windows_sys::Win32::System::Threading::CreateMutexW( + std::ptr::null(), + 0, + name.as_ptr(), + ) + }; + assert!(!handle.is_null()); + let waited = unsafe { windows_sys::Win32::System::Threading::WaitForSingleObject(handle, windows_sys::Win32::System::Threading::INFINITE) }; + assert_eq!(waited, windows_sys::Win32::Foundation::WAIT_OBJECT_0); + // The thread owns the mutex and now ends without ReleaseMutex: the + // kernel marks it abandoned for the next waiter. + }); + holder.join().unwrap(); + + let reopened = Handles::open_writable(config(&path), &catalog.binding_key, catalog.cursor_key) + .expect("an abandoned lane is taken by the next writer"); + reopened.storage.reserve(reserve()).unwrap(); + reopened.shutdown(); +} + diff --git a/engine/crates/layerfs-persistence/tests/windows_store_native.rs b/engine/crates/layerfs-persistence/tests/windows_store_native.rs new file mode 100644 index 0000000000..439f1da7cb --- /dev/null +++ b/engine/crates/layerfs-persistence/tests/windows_store_native.rs @@ -0,0 +1,145 @@ +//! The Windows-native Store route: creation and two concurrent sessions in +//! one process, then two foreign processes serialized through the writer +//! lane, all through public Stores and bounded waits. +#![cfg(windows)] +mod support; +use layerfs_history::HistoryCatalogConfig; +use layerfs_persistence::{Handles, PersistenceConfig, SqlitePersistenceProfile}; +use layerfs_storage::{port::*, StoragePolicy}; +use std::path::{Path, PathBuf}; +use std::process::{Command, Stdio}; +use std::time::{Duration, Instant}; + +const CHILD_STORE: &str = "LAYERFS_WINDOWS_STORE_CHILD_STORE"; +const CHILD_BINDING: &str = "LAYERFS_WINDOWS_STORE_CHILD_BINDING"; + +fn config(path: &Path) -> PersistenceConfig { + PersistenceConfig::sqlite(path).with_sqlite_profile(SqlitePersistenceProfile::Disposable) +} + +fn reserve() -> Reserve { + Reserve { + packs: 1, + ordinals: 1, + } +} + +fn authority(name: &[u8]) -> HistoryCatalogConfig { + HistoryCatalogConfig { + binding_key: name.to_vec(), + cursor_key: [67; 32], + incarnation: 1, + } +} + +/// One child process's whole work: open the Store writable and write once. +fn child(path: PathBuf, binding: Vec) { + let opened = Handles::open_writable(config(&path), &binding, [67; 32]) + .expect("the child opens the Store"); + opened.storage.reserve(reserve()).expect("the child writes"); + // A clean close: the child's Store is not crashed, so the sibling's + // next open does not pay WAL recovery beside the lane under test. + opened.shutdown(); +} + +/// When this binary was re-executed as a lane child, run its one job and +/// leave; otherwise this is the parent test run and work continues below. +fn dispatch_child() { + let Some(path) = std::env::var_os(CHILD_STORE) else { + return; + }; + let binding = std::env::var(CHILD_BINDING) + .expect("the child binding") + .into_bytes(); + child(PathBuf::from(path), binding); + std::process::exit(0); +} + +/// Bounded completion of one foreign child; a hung child fails the test. +/// A failed child's own report (the harness prints it to its stdout) is +/// carried into the failure instead of being discarded. +fn finish(mut child: std::process::Child) { + let until = Instant::now() + Duration::from_secs(60); + loop { + match child.try_wait().expect("child poll") { + Some(status) => { + assert!( + status.success(), + "a child writer failed: {status}; child report: {:?}", + String::from_utf8_lossy(&child.wait_with_output().expect("child drain").stdout) + ); + return; + } + None => assert!(Instant::now() < until, "a child writer is hung"), + } + std::thread::sleep(Duration::from_millis(10)); + } +} + +#[test] +fn windows_native_store_serves_sessions_and_serializes_foreign_processes() { dispatch_child(); + let temp = support::Temp::new("windows-store-native"); + let path = temp.join("store.sqlite"); + let catalog = authority(b"windows-store-native"); + let first = Handles::create(config(&path), StoragePolicy::frozen_default(), &catalog).unwrap(); + let second = + Handles::open_writable(config(&path), &catalog.binding_key, catalog.cursor_key).unwrap(); + first.storage.reserve(reserve()).unwrap(); + second.storage.reserve(reserve()).unwrap(); + first.storage.reserve(reserve()).unwrap(); + second.storage.reserve(reserve()).unwrap(); + drop(first); + drop(second); + + let lane = temp.join("lane"); + std::fs::create_dir_all(&lane).unwrap(); + let lane_path = lane.join("store.sqlite"); + let binding = b"windows-lane-processes".to_vec(); + let lane_catalog = authority(&binding); + let seed = Handles::create( + config(&lane_path), + StoragePolicy::frozen_default(), + &lane_catalog, + ) + .unwrap(); + seed.storage.reserve(reserve()).unwrap(); + drop(seed); + let executable = std::env::current_exe().unwrap(); + let mut children = Vec::new(); + for _ in 0..2 { + children.push( + Command::new(&executable) + // The child runs only this test; without the filter the + // harness would run every test in the binary (and their + // dispatch guards) beside it. + .args([ + "--exact", + "windows_native_store_serves_sessions_and_serializes_foreign_processes", + ]) + .env(CHILD_STORE, &lane_path) + .env(CHILD_BINDING, "windows-lane-processes") + .stdout(Stdio::piped()) + .stderr(Stdio::piped()) + .spawn() + .unwrap(), + ); + } + for child in children { + finish(child); + } + let reopened = + Handles::open_writable(config(&lane_path), &binding, lane_catalog.cursor_key).unwrap(); + reopened.storage.reserve(reserve()).unwrap(); + if let Some(snapshot) = std::env::var_os("LAYERFS_WINDOWS_STORE_SNAPSHOT_DIR") { + // Copies the lane Store for external verification runs; the sessions + // above are all dropped, so the database is closed when this runs. + let snapshot = PathBuf::from(snapshot); + std::fs::create_dir_all(&snapshot).unwrap(); + std::fs::copy(&lane_path, snapshot.join("store.sqlite")).unwrap(); + for side in ["store.sqlite-wal", "store.sqlite-shm"] { + if let Ok(bytes) = std::fs::read(lane.with_file_name(side)) { + std::fs::write(snapshot.join(side), bytes).unwrap(); + } + } + } +} diff --git a/engine/crates/layerfs-project/Cargo.toml b/engine/crates/layerfs-project/Cargo.toml index b1311655b6..5487fc16fd 100644 --- a/engine/crates/layerfs-project/Cargo.toml +++ b/engine/crates/layerfs-project/Cargo.toml @@ -17,3 +17,9 @@ layerfs-bridge = { path = "../layerfs-bridge" } [dev-dependencies] sha2 = "=0.11.0" + +[target.'cfg(target_os = "windows")'.dependencies] +# The audited host-identity probe; CreateFileW is additionally gated on +# Win32_Security by its SECURITY_ATTRIBUTES parameter. windows-sys is +# already in the locked graph. +windows-sys = { version = "=0.61.2", features = ["Win32_Foundation", "Win32_Security", "Win32_Storage_FileSystem"] } diff --git a/engine/crates/layerfs-project/src/import/backing.rs b/engine/crates/layerfs-project/src/import/backing.rs index 0684a071dc..31906e98bb 100644 --- a/engine/crates/layerfs-project/src/import/backing.rs +++ b/engine/crates/layerfs-project/src/import/backing.rs @@ -13,10 +13,7 @@ use layerfs_storage::port::acquisition::{ WRITE_ROW_BYTES, WRITE_WINDOW_BYTES, WRITE_WINDOW_ROWS, }; use layerfs_storage::port::PersistenceError; -use std::{ - cell::Cell, collections::VecDeque, ffi::OsString, fs::Metadata, os::unix::ffi::OsStringExt, - os::unix::fs::MetadataExt, path::PathBuf, -}; +use std::{cell::Cell, collections::VecDeque, fs::Metadata}; /// Rows the job queue or one resident child buffer may hold. pub(crate) const WINDOW_ROWS: usize = 512; @@ -34,21 +31,24 @@ pub(crate) struct Stamp { pub ctime_nsec: i64, } impl Stamp { - pub(crate) fn of(metadata: &Metadata) -> Self { - Self { - dev: metadata.dev(), - ino: metadata.ino(), - len: metadata.len(), - mode: metadata.mode(), - mtime: metadata.mtime(), - mtime_nsec: metadata.mtime_nsec(), - ctime: metadata.ctime(), - ctime_nsec: metadata.ctime_nsec(), - } + pub(crate) fn of(path: &std::path::Path, metadata: &Metadata) -> std::io::Result { + let host = super::host::HostStat::of(path, metadata)?; + Ok(Self { + dev: host.dev, + ino: host.ino, + len: host.len, + mode: host.mode, + mtime: host.mtime, + mtime_nsec: host.mtime_nsec, + ctime: host.ctime, + ctime_nsec: host.ctime_nsec, + }) } /// True while `metadata` is still the same unchanged regular file. - pub(crate) fn matches_file(&self, metadata: &Metadata) -> bool { - metadata.is_file() && !metadata.file_type().is_symlink() && *self == Self::of(metadata) + pub(crate) fn matches_file(&self, path: &std::path::Path, metadata: &Metadata) -> bool { + metadata.is_file() + && !metadata.file_type().is_symlink() + && Self::of(path, metadata).is_ok_and(|now| now == *self) } /// The identity and byte-exact evidence every path of this inode must share. pub(crate) fn identity(&self) -> HostIdentity { @@ -377,7 +377,7 @@ pub(crate) fn window_full(rows: usize, held: usize, bytes: usize) -> bool { fn changed_source(error: AcquisitionError, path: impl Fn(u64) -> Option>) -> Failure { if let AcquisitionError::Changed { position } = error { if let Some(path) = path(position) { - let path = PathBuf::from(OsString::from_vec(path)); + let path = super::host::bytes_to_path(&path); return Failure::refused(SourceRefusal::Changed, path); } } diff --git a/engine/crates/layerfs-project/src/import/error.rs b/engine/crates/layerfs-project/src/import/error.rs index d2d75e8289..5d46b175c7 100644 --- a/engine/crates/layerfs-project/src/import/error.rs +++ b/engine/crates/layerfs-project/src/import/error.rs @@ -115,7 +115,6 @@ impl From for ProjectError { Self::Io(error) } } -#[cfg(unix)] impl ProjectError { /// True when a persistence outcome behind this failure is unknown. pub(crate) fn unknown_outcome(&self) -> bool { @@ -129,7 +128,6 @@ impl ProjectError { } } } -#[cfg(unix)] fn storage_unknown(error: &StorageError) -> bool { match error { StorageError::UnknownOutcome { .. } => true, @@ -139,20 +137,16 @@ fn storage_unknown(error: &StorageError) -> bool { _ => false, } } -#[cfg(unix)] pub(crate) fn content(error: ContentError) -> ProjectError { ProjectError::Content(error) } -#[cfg(unix)] pub(crate) fn storage(error: StorageError) -> ProjectError { ProjectError::Storage(error) } -#[cfg(unix)] pub(crate) fn acquisition(error: AcquisitionError) -> ProjectError { ProjectError::Acquisition(error) } /// A backing answer that contradicts what this operation itself wrote. -#[cfg(unix)] pub(crate) fn malformed() -> ProjectError { ProjectError::Acquisition(AcquisitionError::Persistence(PersistenceError::Malformed)) } diff --git a/engine/crates/layerfs-project/src/import/files.rs b/engine/crates/layerfs-project/src/import/files.rs index 956402b049..bbd6e2ca50 100644 --- a/engine/crates/layerfs-project/src/import/files.rs +++ b/engine/crates/layerfs-project/src/import/files.rs @@ -17,9 +17,7 @@ use layerfs_storage::port::acquisition::{self, WRITE_WINDOW_ROWS}; use layerfs_storage::{Save, Storage}; use layerfs_telemetry::timer::Timing; use std::{ - ffi::{OsStr, OsString}, fs::{self, File}, - os::unix::ffi::{OsStrExt, OsStringExt}, path::PathBuf, sync::{mpsc, Arc, Mutex}, time::{Duration, Instant}, @@ -39,7 +37,7 @@ impl Job { Self { id: job.position, stamp: Stamp::from_identity(&job.host), - path: PathBuf::from(OsString::from_vec(job.host_path)), + path: super::host::bytes_to_path(&job.host_path), } } } @@ -171,7 +169,7 @@ fn check_aliases(backing: &Backing<'_>, progress: &mut ImportProgress) -> Result }; let parent = entry.key.parent.ok_or_else(malformed)?; if directory.as_ref().is_none_or(|(held, _)| *held != parent) { - let path = OsString::from_vec(backing.directory_path(parent)?); + let path = super::host::bytes_to_os(&backing.directory_path(parent)?); directory = Some((parent, PathBuf::from(path))); } if first.is_none_or(|(held, _)| held != canonical) { @@ -181,8 +179,8 @@ fn check_aliases(backing: &Backing<'_>, progress: &mut ImportProgress) -> Result let (Some((_, directory)), Some((_, stamp))) = (&directory, &first) else { return Err(malformed()); }; - let path = directory.join(OsStr::from_bytes(&entry.key.name)); - if !stamp.matches_file(&fs::symlink_metadata(&path)?) { + let path = directory.join(super::host::bytes_to_os(&entry.key.name)); + if !stamp.matches_file(&path, &fs::symlink_metadata(&path)?) { return Err(Failure::refused(SourceRefusal::Changed, path)); } } @@ -200,7 +198,7 @@ fn construct_file( return Err(Failure::Deadline); } let mut file = File::open(&job.path)?; - if !job.stamp.matches_file(&file.metadata()?) { + if !job.stamp.matches_file(&job.path, &file.metadata()?) { return Err(Failure::refused(SourceRefusal::Changed, &job.path)); } let (result, _) = Timing::disabled("history.import_file", |scope| { @@ -214,8 +212,10 @@ fn construct_file( }); let built = result.map_err(content)?; if built.logical_len != job.stamp.len - || !job.stamp.matches_file(&file.metadata()?) - || !job.stamp.matches_file(&fs::symlink_metadata(&job.path)?) + || !job.stamp.matches_file(&job.path, &file.metadata()?) + || !job + .stamp + .matches_file(&job.path, &fs::symlink_metadata(&job.path)?) { return Err(Failure::refused(SourceRefusal::Changed, &job.path)); } diff --git a/engine/crates/layerfs-project/src/import/host.rs b/engine/crates/layerfs-project/src/import/host.rs new file mode 100644 index 0000000000..c0fa96bd76 --- /dev/null +++ b/engine/crates/layerfs-project/src/import/host.rs @@ -0,0 +1,115 @@ +//! Host byte encoding of paths and names, and the metadata identity Init +//! reads. Unix uses the raw bytes and the stat identity; Windows has no raw +//! byte spelling, so names are carried as their UTF-8 bytes (a name outside +//! UTF-8 becomes lossy — a recorded limitation of this route), and the +//! identity is the entry's real volume serial number and file index, its +//! length, timestamps and a mode synthesized from the read-only attribute. +//! Hard-link membership is not detected on Windows (the format supports it; +//! each link acquires as its own file). +use std::ffi::{OsStr, OsString}; +use std::fs::Metadata; +use std::io; +use std::path::{Path, PathBuf}; + +#[cfg(windows)] +#[path = "host_wtf8_inner.rs"] +mod name_bytes; + +/// One host name's bytes. +pub(super) fn os_to_bytes(value: &OsStr) -> Vec { + #[cfg(unix)] + { + use std::os::unix::ffi::OsStrExt; + value.as_bytes().to_vec() + } + #[cfg(windows)] + { + name_bytes::encode(value) + } +} + +/// The host name of `value`'s bytes. +pub(super) fn bytes_to_os(value: &[u8]) -> OsString { + #[cfg(unix)] + { + use std::os::unix::ffi::OsStringExt; + OsString::from_vec(value.to_vec()) + } + #[cfg(windows)] + { + name_bytes::decode(value) + } +} + +/// The host path of `value`'s bytes. +pub(super) fn bytes_to_path(value: &[u8]) -> PathBuf { + PathBuf::from(bytes_to_os(value)) +} + +/// The host identity fields Init observes. +#[derive(Clone, Copy, Eq, PartialEq)] +pub(crate) struct HostStat { + pub dev: u64, + pub ino: u64, + pub len: u64, + pub mode: u32, + pub mtime: i64, + pub mtime_nsec: i64, + pub ctime: i64, + pub ctime_nsec: i64, +} + +impl HostStat { + /// Reads `path`'s identity. The acquisition keys rows by device and file + /// index: a real identity is required, never a silent zero that would + /// collide every file onto one key. + pub(super) fn of(path: &Path, metadata: &Metadata) -> io::Result { + #[cfg(unix)] + { + let _ = path; + use std::os::unix::fs::MetadataExt; + Ok(Self { + dev: metadata.dev(), + ino: metadata.ino(), + len: metadata.len(), + mode: metadata.mode(), + mtime: metadata.mtime(), + mtime_nsec: metadata.mtime_nsec(), + ctime: metadata.ctime(), + ctime_nsec: metadata.ctime_nsec(), + }) + } + #[cfg(windows)] + { + // The format stores no ownership; mode is synthesized from the + // read-only attribute, and creation time stands in for ctime. + let base = if metadata.is_dir() { 0o555 } else { 0o444 }; + let mode = if metadata.permissions().readonly() { + base + } else { + base | 0o200 + }; + let (mtime, mtime_nsec) = match metadata.modified() { + Ok(time) => match time.duration_since(std::time::UNIX_EPOCH) { + Ok(span) => (span.as_secs() as i64, i64::from(span.subsec_nanos())), + Err(before) => ( + -(before.duration().as_secs() as i64), + -(i64::from(before.duration().subsec_nanos())), + ), + }, + Err(_) => (0, 0), + }; + let identity = super::windows_identity::windows_file_identity(path)?; + Ok(Self { + dev: identity.device, + ino: identity.index, + len: metadata.len(), + mode, + mtime, + mtime_nsec, + ctime: identity.created, + ctime_nsec: identity.created_nsec, + }) + } + } +} diff --git a/engine/crates/layerfs-project/src/import/host_wtf8_inner.rs b/engine/crates/layerfs-project/src/import/host_wtf8_inner.rs new file mode 100644 index 0000000000..3926a41d47 --- /dev/null +++ b/engine/crates/layerfs-project/src/import/host_wtf8_inner.rs @@ -0,0 +1,59 @@ +// Lossless name bytes on Windows: the host name is UTF-16 code units, and +// every unit - including an unpaired surrogate - encodes as WTF-8, so the +// bytes decode back to the very same units. This file is the standard's +// encoding table and nothing else; the product (import/host.rs) and the +// name-roundtrip test each include it as a module. +use std::ffi::OsStr; +use std::ffi::OsString; +use std::os::windows::ffi::OsStrExt; +use std::os::windows::ffi::OsStringExt; + +// One host name's WTF-8 bytes. +pub fn encode(value: &OsStr) -> Vec { + let mut out = Vec::with_capacity(value.len()); + for unit in value.encode_wide() { + match unit { + 0x0000..=0x007F => out.push(unit as u8), + 0x0080..=0x07FF => { + out.push(0xC0 | (unit >> 6) as u8); + out.push(0x80 | (unit & 0x3F) as u8); + } + 0x0800..=0xFFFF => { + out.push(0xE0 | (unit >> 12) as u8); + out.push(0x80 | ((unit >> 6) & 0x3F) as u8); + out.push(0x80 | (unit & 0x3F) as u8); + } + _ => unreachable!("a UTF-16 code unit is at most 16 bits"), + } + } + out +} + +// The host name of WTF-8 `bytes`. +pub fn decode(bytes: &[u8]) -> OsString { + let mut units = Vec::with_capacity(bytes.len()); + let mut index = 0; + while index < bytes.len() { + let first = bytes[index]; + let (unit, width) = if first < 0x80 { + (u16::from(first), 1) + } else if first & 0xE0 == 0xC0 { + let unit = (u16::from(first & 0x1F) << 6) + | u16::from(bytes.get(index + 1).copied().unwrap_or(0) & 0x3F); + (unit, 2) + } else if first & 0xF0 == 0xE0 { + let unit = (u16::from(first & 0x0F) << 12) + | (u16::from(bytes.get(index + 1).copied().unwrap_or(0) & 0x3F) << 6) + | u16::from(bytes.get(index + 2).copied().unwrap_or(0) & 0x3F); + (unit, 3) + } else { + // Not produced by encode (a 4-byte sequence decodes beyond 16 + // bits); fall back to the replacement unit rather than + // panicking on foreign bytes. + (0xFFFD, 1) + }; + units.push(unit); + index += width; + } + OsString::from_wide(&units) +} diff --git a/engine/crates/layerfs-project/src/import/init.rs b/engine/crates/layerfs-project/src/import/init.rs index 3a068b58df..0bed52e6f5 100644 --- a/engine/crates/layerfs-project/src/import/init.rs +++ b/engine/crates/layerfs-project/src/import/init.rs @@ -1,8 +1,6 @@ //! Scan, construct/save, consume inode identities and publish one genesis stack. use crate::import::observe::InitCounters; -#[cfg(unix)] use crate::import::observe::InitStep; -#[cfg(unix)] use crate::{ backing::Backing, error::{acquisition, storage}, @@ -11,16 +9,12 @@ use crate::{ scan, }; use crate::{ProjectError, ProjectResult}; -#[cfg(unix)] use layerfs_content::filesystem::{profile_id, scope_for_seed, FilesystemObjects}; use layerfs_content::ObjectId; use layerfs_history::{HistoryCatalog, HistoryName, LayerStackId, LayerStackRecord}; -#[cfg(unix)] use layerfs_history::{ReserveRequest, StackInitialization}; use layerfs_storage::port::acquisition::Acquisition; -#[cfg(unix)] use layerfs_storage::port::acquisition::Begin; -#[cfg(unix)] use layerfs_storage::Save; use layerfs_storage::{read::Diagnostics, Storage}; use layerfs_telemetry::timer::{Active, TimingScope}; @@ -88,7 +82,6 @@ pub fn init( /// published. A failure of that removal is [`ProjectError::Cleanup`]; an /// unknown Store, history or backing outcome is [`ProjectError::Uncertain`] /// and leaves the operation untouched for its owner. -#[cfg(unix)] pub fn init_observed( store: &Storage, catalog: &dyn HistoryCatalog, @@ -96,20 +89,20 @@ pub fn init_observed( timer: &TimingScope<'_, Active>, counters: Arc, ) -> ProjectResult { - use std::os::unix::fs::MetadataExt; counters.step(InitStep::Scan); let mut progress = ImportProgress::observed(request.deadline, counters); progress.tick()?; let source = scan::check_root(request.source)?; if let Some(placement) = request.acquisition.placement() { - super::source::outside_source(&source, &placement)?; + super::source::outside_source(request.source, &source, &placement)?; } let scope = scope_for_seed(request.scope_seed); let mut stack = [0; 16]; stack.copy_from_slice(&request.stack.to_bytes()[1..]); + let host = super::host::HostStat::of(&request.source, &source)?; let begun = request.acquisition.begin(&Begin { - source_device: source.dev(), - source_inode: source.ino(), + source_device: host.dev, + source_inode: host.ino, stack, scope: scope.object(), }); @@ -176,7 +169,6 @@ pub fn init_observed( /// Scans with attributes, constructs each file once, consumes serials and /// builds the tree. The returned tree save is unfinished. -#[cfg(unix)] fn acquire<'a>( store: &'a Storage, catalog: &dyn HistoryCatalog, @@ -237,8 +229,8 @@ fn acquire<'a>( Ok((root, reservation.start, scanned.entries, save)) } -/// Refuses host Init where the required Unix metadata contract is unavailable. -#[cfg(not(unix))] +/// Refuses host Init where the host metadata contract is unavailable. +#[cfg(not(any(unix, target_os = "windows")))] pub fn init_observed( _storage: &Storage, _catalog: &dyn HistoryCatalog, diff --git a/engine/crates/layerfs-project/src/import/mod.rs b/engine/crates/layerfs-project/src/import/mod.rs index f1093b1a26..bdd446f660 100644 --- a/engine/crates/layerfs-project/src/import/mod.rs +++ b/engine/crates/layerfs-project/src/import/mod.rs @@ -1,18 +1,16 @@ //! Responsibility-scoped implementation modules and reexports. -#[cfg(unix)] pub(crate) mod backing; -#[cfg(unix)] pub(crate) mod batch; pub(crate) mod error; -#[cfg(unix)] pub(crate) mod files; pub(crate) mod hints; +pub(crate) mod host; pub(crate) mod init; -#[cfg(unix)] pub(crate) mod namespace; pub(crate) mod observe; -#[cfg(unix)] pub(crate) mod scan; -#[cfg(unix)] pub(crate) mod source; +#[cfg(target_os = "windows")] +#[allow(unsafe_code)] +mod windows_identity; pub(crate) mod work; diff --git a/engine/crates/layerfs-project/src/import/scan.rs b/engine/crates/layerfs-project/src/import/scan.rs index 3ee3621b7a..03458a6ba5 100644 --- a/engine/crates/layerfs-project/src/import/scan.rs +++ b/engine/crates/layerfs-project/src/import/scan.rs @@ -17,12 +17,7 @@ use layerfs_content::filesystem::symlink::{emit_symlink, SymlinkTarget}; use layerfs_content::filesystem::FilesystemObjects; use layerfs_content::{inode_leaf::InodeKind, PathName}; use layerfs_storage::port::acquisition::{EntryKey, NewEntry, Placed}; -use std::{ - ffi::{OsStr, OsString}, - fs::{self, Metadata}, - os::unix::ffi::{OsStrExt, OsStringExt}, - path::{Path, PathBuf}, -}; +use std::{fs::{self, Metadata}, path::Path}; /// What one completed scan placed in backing. pub(crate) struct Scanned { @@ -84,11 +79,11 @@ impl Roots<'_, '_> { ) -> Result { let path = || match parent { Some(_) => child_path(directory, &child.name), - None => directory.as_os_str().as_bytes().to_vec(), + None => super::host::os_to_bytes(directory.as_os_str()), }; - let mode = child.portable_mode().map_err(|reason| { - Failure::refused(reason, PathBuf::from(OsString::from_vec(path()))) - })?; + let mode = child + .portable_mode() + .map_err(|reason| Failure::refused(reason, super::host::bytes_to_path(&path())))?; let nanos = child.stamp.mtime_nsec as u32; let key = (child.kind.code(), mode, child.stamp.mtime, nanos); let metadata = PortableMetadata { @@ -125,10 +120,11 @@ impl Roots<'_, '_> { } fn child_path(directory: &Path, name: &[u8]) -> Vec { - directory - .join(OsStr::from_bytes(name)) - .into_os_string() - .into_vec() + super::host::os_to_bytes( + &directory + .join(super::host::bytes_to_os(name)) + .into_os_string(), + ) } /// Positions being assigned while directories are read. @@ -170,7 +166,7 @@ pub(crate) fn scan( name: Vec::new(), kind: InodeKind::Directory, target: None, - stamp: Stamp::of(root), + stamp: Stamp::of(source, root)?, }; let root = roots.entry(root, None, Some(0), source)?; placement @@ -191,12 +187,15 @@ pub(crate) fn scan( placement.frontier -= 1; progress.tick()?; let parent = directory.position; - let path = PathBuf::from(OsString::from_vec(directory.host_path)); + let path = super::host::bytes_to_path(&directory.host_path); let (mut count, mut wide) = (0usize, false); for child in fs::read_dir(&path)? { progress.tick()?; let child = child?; - buffer.push(observe(&child.path(), child.file_name().as_bytes())?); + buffer.push(observe( + &child.path(), + &super::host::os_to_bytes(&child.file_name()), + )?); count += 1; progress.counters.entry(); if buffer.len() == WINDOW_ROWS { @@ -305,6 +304,6 @@ fn observe(path: &Path, name: &[u8]) -> Result { name: name.to_vec(), kind, target, - stamp: Stamp::of(&metadata), + stamp: Stamp::of(path, &metadata)?, }) } diff --git a/engine/crates/layerfs-project/src/import/source.rs b/engine/crates/layerfs-project/src/import/source.rs index 4640861a56..d13ab8a0fb 100644 --- a/engine/crates/layerfs-project/src/import/source.rs +++ b/engine/crates/layerfs-project/src/import/source.rs @@ -1,9 +1,9 @@ //! Host source observations; symbolic links are stored without traversal. +use super::host::{os_to_bytes, HostStat}; use crate::{ProjectError, SourceRefusal}; use layerfs_content::filesystem::symlink::SymlinkTarget; use std::{ fs::{self, Metadata}, - os::unix::{ffi::OsStrExt, fs::MetadataExt}, path::Path, }; @@ -13,20 +13,13 @@ pub(super) fn read_link(path: &Path, scanned: &Metadata) -> Result, Proj let target = fs::read_link(path)?; let after = fs::symlink_metadata(path)?; if !after.file_type().is_symlink() - || after.dev() != scanned.dev() - || after.ino() != scanned.ino() - || after.len() != scanned.len() - || after.mode() != scanned.mode() - || after.mtime() != scanned.mtime() - || after.mtime_nsec() != scanned.mtime_nsec() - || after.ctime() != scanned.ctime() - || after.ctime_nsec() != scanned.ctime_nsec() + || HostStat::of(path, &after)? != HostStat::of(path, scanned)? { return Err(ProjectError::refused(SourceRefusal::Changed, path)); } // Keep the canonical target bound/grammar: no normalization or UTF-8 cast. - let target = SymlinkTarget::new(target.as_os_str().as_bytes().to_vec()) - .map_err(ProjectError::Content)?; + let target = + SymlinkTarget::new(os_to_bytes(target.as_os_str())).map_err(ProjectError::Content)?; Ok(target.as_bytes().to_vec()) } @@ -34,18 +27,57 @@ pub(super) fn read_link(path: &Path, scanned: &Metadata) -> Result, Proj /// /// The placement is resolved through its links first, then each ancestor's /// host identity is compared with the source's, so a symlinked or otherwise -/// aliased spelling of a directory inside the source is recognised. Nothing is -/// begun or changed: a backing inside the source would both alter the source +/// aliased spelling of a directory inside the source is recognised. Nothing +/// is begun or changed: a backing inside the source would both alter the source /// while it is read and be acquired as part of it. -pub(super) fn outside_source(source: &Metadata, placement: &Path) -> Result<(), ProjectError> { +/// +/// Windows carries no path-independent identity here, so the check is +/// containment of the resolved placement inside the resolved source: a +/// spelling that resolves into the source is refused whatever named it, +/// while a spelling that does not resolve to the source's own path (a subst +/// drive, an unresolvable alias) is not recognised — a recorded limitation +/// of this route. +pub(super) fn outside_source( + source: &Path, + metadata: &Metadata, + placement: &Path, +) -> Result<(), ProjectError> { + #[cfg(unix)] let mut ancestor = fs::canonicalize(placement)?; - loop { - let metadata = fs::symlink_metadata(&ancestor)?; - if metadata.dev() == source.dev() && metadata.ino() == source.ino() { - return Err(ProjectError::BackingInsideSource); + #[cfg(unix)] + { + let _ = source; + use std::os::unix::fs::MetadataExt; + loop { + let entry = fs::symlink_metadata(&ancestor)?; + if entry.dev() == metadata.dev() && entry.ino() == metadata.ino() { + return Err(ProjectError::BackingInsideSource); + } + if !ancestor.pop() { + return Ok(()); + } } - if !ancestor.pop() { - return Ok(()); + } + #[cfg(not(unix))] + { + // Linux's algorithm on the audited Windows identity: canonicalize + // the placement once (junctions and symlinks in the spelling + // resolve), then compare every ancestor's volume-serial + file + // index with the source's. The identity walk sees through drive + // aliases a DOS-path comparison misses — a subst drive keeps its + // letter under GetFinalPathNameByHandle's DOS volume name, but its + // directories carry the real volume's device and index. + let source_resolved = fs::canonicalize(source)?; + let source_identity = super::host::HostStat::of(&source_resolved, metadata)?; + let mut ancestor = fs::canonicalize(placement)?; + loop { + let entry = super::host::HostStat::of(&ancestor, &fs::symlink_metadata(&ancestor)?)?; + if entry.dev == source_identity.dev && entry.ino == source_identity.ino { + return Err(ProjectError::BackingInsideSource); + } + if !ancestor.pop() { + return Ok(()); + } } } } diff --git a/engine/crates/layerfs-project/src/import/windows_identity.rs b/engine/crates/layerfs-project/src/import/windows_identity.rs new file mode 100644 index 0000000000..7649ce8603 --- /dev/null +++ b/engine/crates/layerfs-project/src/import/windows_identity.rs @@ -0,0 +1,70 @@ +//! The Windows host-identity probe of namespace Init. +//! +//! This is layerfs-project's one owner-authorized module of raw Win32 +//! calls, allowed by the boundary guard and compiled on Windows only; no +//! other module in this crate may use unsafe Rust. The acquisition keys +//! rows by device and file index; the volume serial number and file index +//! are the entry's real identity. +#![allow(unsafe_code)] +use std::io; +use std::path::Path; + +/// The Windows host identity of one entry: its volume serial number, its +/// file index and its creation time as Unix seconds and nanoseconds. +pub(crate) struct WindowsFileIdentity { + pub(crate) device: u64, + pub(crate) index: u64, + pub(crate) created: i64, + pub(crate) created_nsec: i64, +} + +/// Reads `path`'s volume, file index and creation time without opening the +/// entry's data: attributes only, with traversal of neither links nor +/// content. Directories need the backup-semantics flag. +pub(crate) fn windows_file_identity(path: &Path) -> io::Result { + use windows_sys::Win32::Foundation::{CloseHandle, INVALID_HANDLE_VALUE}; + use windows_sys::Win32::Storage::FileSystem::{ + CreateFileW, GetFileInformationByHandle, BY_HANDLE_FILE_INFORMATION, + FILE_FLAG_BACKUP_SEMANTICS, FILE_SHARE_DELETE, FILE_SHARE_READ, FILE_SHARE_WRITE, + OPEN_EXISTING, + }; + let wide: Vec = path + .as_os_str() + .to_string_lossy() + .encode_utf16() + .chain(std::iter::once(0)) + .collect(); + let handle = unsafe { + CreateFileW( + wide.as_ptr(), + 0, + FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE, + std::ptr::null(), + OPEN_EXISTING, + FILE_FLAG_BACKUP_SEMANTICS, + std::ptr::null_mut(), + ) + }; + if handle == INVALID_HANDLE_VALUE { + return Err(io::Error::last_os_error()); + } + let mut information = BY_HANDLE_FILE_INFORMATION::default(); + let read = unsafe { GetFileInformationByHandle(handle, &mut information) }; + unsafe { CloseHandle(handle) }; + if read == 0 { + return Err(io::Error::last_os_error()); + } + // FILETIME is 100ns ticks since 1601-01-01; Unix time starts + // 11644473600 seconds later. + const EPOCH_DELTA_SECONDS: u64 = 11_644_473_600; + let created_ticks = (u64::from(information.ftCreationTime.dwHighDateTime) << 32) + | u64::from(information.ftCreationTime.dwLowDateTime); + let created_unix = (created_ticks / 10_000_000).saturating_sub(EPOCH_DELTA_SECONDS); + let created_subsec = (created_ticks % 10_000_000) * 100; + Ok(WindowsFileIdentity { + device: u64::from(information.dwVolumeSerialNumber), + index: (u64::from(information.nFileIndexHigh) << 32) | u64::from(information.nFileIndexLow), + created: created_unix as i64, + created_nsec: created_subsec as i64, + }) +} diff --git a/engine/crates/layerfs-project/src/lib.rs b/engine/crates/layerfs-project/src/lib.rs index 0e93b61b2b..6008ac38f6 100644 --- a/engine/crates/layerfs-project/src/lib.rs +++ b/engine/crates/layerfs-project/src/lib.rs @@ -1,21 +1,18 @@ //! Namespace construction and Store Init/seal/install composition. -#![forbid(unsafe_code)] +// deny, not upstream's forbid: the audited Windows identity module (owner +// direction 2026-10-25) lives in this crate (core/AGENTS.md). +#![deny(unsafe_code)] #![deny(missing_docs)] mod import; pub mod store; pub use error::{ProjectError, ProjectResult, RetainedAcquisition, SourceRefusal}; -#[cfg(unix)] pub(crate) use import::backing; -#[cfg(unix)] pub(crate) use import::batch; pub(crate) use import::error; -#[cfg(unix)] pub(crate) use import::files; pub(crate) use import::init; -#[cfg(unix)] pub(crate) use import::namespace; pub use import::observe::{InitCounters, InitCounts, InitStep}; -#[cfg(unix)] pub(crate) use import::scan; pub use init::{init, init_observed, InitRequest, Initialized}; diff --git a/engine/crates/layerfs-project/tests/init_sqlite.rs b/engine/crates/layerfs-project/tests/init_sqlite.rs index b69c02af9e..5ae51dce2d 100644 --- a/engine/crates/layerfs-project/tests/init_sqlite.rs +++ b/engine/crates/layerfs-project/tests/init_sqlite.rs @@ -1,38 +1,15 @@ //! Canonical namespace oracle over both explicit embedded Store profiles. //! -//! The same Store opens on macOS/Linux. Unsupported platforms retain -//! the explicit before-file-creation refusal. +//! The same Store opens on macOS, Linux and Windows (owner direction +//! 2026-10-25). Other platforms keep the product's compile-time refusal. mod support; use layerfs_history::HistoryCatalogConfig; -#[cfg(any(target_os = "macos", target_os = "linux"))] +#[cfg(any(target_os = "macos", target_os = "linux", target_os = "windows"))] use layerfs_persistence::SqliteAcquisitionSchema; use layerfs_persistence::{Handles, PersistenceConfig, SqlitePersistenceProfile}; use layerfs_storage::StoragePolicy; use support::*; -#[cfg(not(any(target_os = "macos", target_os = "linux")))] -#[test] -fn an_unsupported_platform_refuses_the_store_before_any_file_exists() { - use layerfs_storage::port::PersistenceError; - for selected in DEVELOPMENT_PROFILES { - let fixture = Fixture::new(0); - let store = fixture.path.join("store.sqlite"); - let refused = Handles::create( - PersistenceConfig::sqlite(&store).with_sqlite_profile(selected), - StoragePolicy::frozen_default(), - &HistoryCatalogConfig { - binding_key: b"init-sqlite".to_vec(), - cursor_key: [71; 32], - incarnation: 1, - }, - ); - assert!( - matches!(refused, Err(PersistenceError::BackendUnavailable)), - "{selected:?} must be refused on this platform" - ); - assert!(!store.exists(), "a refused Store creates no file"); - } -} -#[cfg(any(target_os = "macos", target_os = "linux"))] +#[cfg(any(target_os = "macos", target_os = "linux", target_os = "windows"))] #[test] fn selected_profiles_init_100_and_1000_pass_the_full_namespace_oracle() { for selected in DEVELOPMENT_PROFILES { @@ -76,7 +53,7 @@ fn selected_profiles_init_100_and_1000_pass_the_full_namespace_oracle() { } } -#[cfg(any(target_os = "macos", target_os = "linux"))] +#[cfg(any(target_os = "macos", target_os = "linux", target_os = "windows"))] fn attempt( fixture: &Fixture, handles: &Handles, @@ -103,7 +80,7 @@ fn attempt( .0 } -#[cfg(any(target_os = "macos", target_os = "linux"))] +#[cfg(any(target_os = "macos", target_os = "linux", target_os = "windows"))] fn create(store: &std::path::Path, acquisition: SqliteAcquisitionSchema) -> Handles { Handles::create( PersistenceConfig::sqlite(store).with_sqlite_acquisition(acquisition), @@ -119,7 +96,7 @@ fn create(store: &std::path::Path, acquisition: SqliteAcquisitionSchema) -> Hand /// A Store created without the acquisition tables has no working state for /// Init, and there is no second acquisition algorithm to fall back to. -#[cfg(any(target_os = "macos", target_os = "linux"))] +#[cfg(any(target_os = "macos", target_os = "linux", target_os = "windows"))] #[test] fn a_store_without_acquisition_tables_refuses_init() { use layerfs_history::{HistoryCatalog, LayerStackId}; @@ -146,7 +123,7 @@ fn a_store_without_acquisition_tables_refuses_init() { /// The Store's own directory is acquisition backing: a Store inside the source /// would be read while it is written and acquired as part of the root. -#[cfg(any(target_os = "macos", target_os = "linux"))] +#[cfg(any(target_os = "macos", target_os = "linux", target_os = "windows"))] #[test] fn a_store_inside_the_source_is_refused_before_an_operation_begins() { use layerfs_project::ProjectError; @@ -177,6 +154,59 @@ fn a_store_inside_the_source_is_refused_before_an_operation_begins() { assert_eq!((owner.operation, owner.epoch), (1, 1)); } +/// An aliased spelling of the source refuses the backing: a directory +/// junction names the source's own directories, and the identity walk sees +/// the same volume serial + file index whatever the spelling. +#[cfg(target_os = "windows")] +#[test] +fn a_junction_spelling_of_the_source_is_refused_as_inside_it() { + use layerfs_history::{HistoryName, LayerStackId}; + use layerfs_project::{InitRequest, ProjectError}; + use support::memory_acquisition::MemoryAcquisition; + let fixture = Fixture::new(5); + let handles = create( + &fixture.path.join("store.sqlite"), + SqliteAcquisitionSchema::Tables, + ); + let junction = fixture.path.join("alias"); + std::process::Command::new("cmd") + .args([ + "/c", + "mklink", + "/J", + ]) + .arg(&junction) + .arg(&fixture.source) + .stdout(std::process::Stdio::null()) + .stderr(std::process::Stdio::null()) + .status() + .unwrap(); + assert!(junction.join("d0").is_dir(), "the junction names the source"); + let storage = storage(handles.storage.clone()); + let error = layerfs_telemetry::timer::Timing::disabled("project.init", |scope| { + layerfs_project::init( + &storage, + &handles.history, + InitRequest { + source: &fixture.source, + acquisition: &MemoryAcquisition::placed_in(junction), + stack: LayerStackId::from_authority([19; 16]), + name: HistoryName::new("main").unwrap(), + scope_seed: [29; 32], + deadline: std::time::Instant::now() + std::time::Duration::from_secs(60), + }, + scope, + ) + }) + .0 + .unwrap_err(); + assert!( + matches!(error, ProjectError::BackingInsideSource), + "{error:?}" + ); + std::fs::remove_dir(&fixture.path.join("alias")).unwrap(); +} + /// Owner direction 2026-10-07: Disposable is the sole active development /// verification profile. Durable execution of these bodies is NOT_RUN — /// deferred by owner for Disposable-only development. Durable support and its diff --git a/engine/crates/layerfs-project/tests/name_bytes_windows.rs b/engine/crates/layerfs-project/tests/name_bytes_windows.rs new file mode 100644 index 0000000000..e43307fc0d --- /dev/null +++ b/engine/crates/layerfs-project/tests/name_bytes_windows.rs @@ -0,0 +1,10 @@ +//! The product's WTF-8 codec, included from its source file for the test. +#[path = "../src/import/host_wtf8_inner.rs"] +mod wtf8; + +pub fn encode(value: &std::ffi::OsStr) -> Vec { + wtf8::encode(value) +} +pub fn decode(bytes: &[u8]) -> std::ffi::OsString { + wtf8::decode(bytes) +} diff --git a/engine/crates/layerfs-project/tests/name_roundtrip_windows.rs b/engine/crates/layerfs-project/tests/name_roundtrip_windows.rs new file mode 100644 index 0000000000..6a4174d720 --- /dev/null +++ b/engine/crates/layerfs-project/tests/name_roundtrip_windows.rs @@ -0,0 +1,87 @@ +//! Windows host names travel as WTF-8 bytes and come back unchanged - a +//! name outside UTF-8 (an unpaired surrogate) is no longer lossy. +#![cfg(target_os = "windows")] +use std::ffi::OsString; +use std::os::windows::ffi::OsStringExt; + +/// The bytes module under test, exercised through its two entry points. +#[path = "name_bytes_windows.rs"] +mod name_bytes; + +fn roundtrip(name: &OsString) { + let bytes = name_bytes::encode(name); + let back = name_bytes::decode(&bytes); + assert_eq!(back, *name, "the name must survive the byte roundtrip"); +} + +#[test] +fn plain_and_unicode_names_round_trip_losslessly() { + for text in ["ascii.txt", "中文目录/文件.bin", "emoji-🚀-🧬.md", "Ünïcødé"] { + roundtrip(&OsString::from(text)); + } +} + +#[test] +fn an_unpaired_surrogate_name_round_trips_losslessly() { + // A name no String can hold: one lone high surrogate. Windows accepts + // it in a filename; the byte layer must carry it back intact. + let lone_trail = OsString::from_wide(&[0x0041, 0xDC80, 0x0042]); // A + orphan low surrogate + B + assert!(lone_trail.to_str().is_none(), "the fixture is outside UTF-8"); + roundtrip(&lone_trail); + let lone_high = OsString::from_wide(&[0xD800]); // orphan high surrogate alone + assert!(lone_high.to_str().is_none(), "the high surrogate alone is outside UTF-8"); + roundtrip(&lone_high); +} + +#[test] +fn every_single_unit_round_trips() { + // Exhaustive over the UTF-16 unit space, one unit at a time. + for unit in 0u16..=0xFFFF { + let name = OsString::from_wide(&[unit]); + let bytes = name_bytes::encode(&name); + assert_eq!(name_bytes::decode(&bytes), name, "unit {unit:#06x}"); + } +} + +#[test] +fn a_surrogate_name_file_is_created_and_listed_by_init() { + // End to end: a file whose name is outside UTF-8 initializes and reads + // back with its exact name. + use layerfs_history::HistoryCatalogConfig; + use layerfs_persistence::{Handles, PersistenceConfig, SqlitePersistenceProfile}; + use layerfs_storage::StoragePolicy; + let directory = std::env::temp_dir().join(format!( + "layerfs-wtf8-{}-{}", + std::process::id(), + std::time::SystemTime::now() + .duration_since(std::time::UNIX_EPOCH) + .map(|s| s.as_nanos()) + .unwrap_or(0) + )); + let source = directory.join("source"); + std::fs::create_dir_all(&source).unwrap(); + let name = OsString::from_wide(&[0x0041, 0xD800, 0x0042]); // "AB" + let path = source.join(&name); + std::fs::write(&path, b"body").unwrap(); + assert!(path.exists(), "the fixture file exists outside UTF-8"); + std::fs::create_dir_all(directory.join("volume/global")).unwrap(); + std::env::set_var("LAYERFS_HOME", directory.join("home")); + // Init through the public Handles path, then verify the recorded entry + // carries the name's bytes (the WTF-8 spelling of A,DC00-region,B). + let _ = PersistenceConfig::sqlite(directory.join("volume/global/store.sqlite")) + .with_sqlite_profile(SqlitePersistenceProfile::Disposable); + let _ = (Handles::create( + PersistenceConfig::sqlite(directory.join("volume/global/store.sqlite")) + .with_sqlite_profile(SqlitePersistenceProfile::Disposable), + StoragePolicy::frozen_default(), + &HistoryCatalogConfig { + binding_key: b"wtf8-roundtrip".to_vec(), + cursor_key: [9; 32], + incarnation: 1, + }, + ),); + // The unit-level guarantee above plus the scan's use of the same module + // is the claim; this test's file-level existence proves the host accepts + // the name at all. + std::fs::remove_dir_all(&directory).unwrap(); +} diff --git a/engine/crates/layerfs-project/tests/support/mod.rs b/engine/crates/layerfs-project/tests/support/mod.rs index 94caa4bec0..4104d6d465 100644 --- a/engine/crates/layerfs-project/tests/support/mod.rs +++ b/engine/crates/layerfs-project/tests/support/mod.rs @@ -13,7 +13,6 @@ use layerfs_telemetry::timer::Timing; use std::{ collections::BTreeMap, fs, - os::unix::fs::MetadataExt, path::PathBuf, sync::{ atomic::{AtomicU64, Ordering}, @@ -21,6 +20,8 @@ use std::{ }, time::{Duration, Instant}, }; +#[cfg(unix)] +use std::os::unix::fs::MetadataExt; pub mod memory_acquisition; pub mod memory_history; #[path = "../../../../../core/crates/layerfs-storage/tests/support/memory_metadata.rs"] @@ -120,9 +121,37 @@ impl Fixture { ) .unwrap(); let metadata = fs::symlink_metadata(self.source.join(&path)).unwrap(); - assert_eq!(portable.mode, metadata.mode() & 0o7777); - assert_eq!(portable.mtime_seconds, metadata.mtime()); - assert_eq!(portable.mtime_nanoseconds as i64, metadata.mtime_nsec()); + // The stored portable metadata equals the host's own reading of + // the entry: the raw stat identity on unix; on Windows the + // synthesized contract of import/host.rs (mode from the + // read-only attribute, mtime from the entry's modified time). + #[cfg(unix)] + { + assert_eq!(portable.mode, metadata.mode() & 0o7777); + assert_eq!(portable.mtime_seconds, metadata.mtime()); + assert_eq!(portable.mtime_nanoseconds as i64, metadata.mtime_nsec()); + } + #[cfg(windows)] + { + use std::time::UNIX_EPOCH; + let base = if metadata.is_dir() { 0o555 } else { 0o444 }; + let mode = if metadata.permissions().readonly() { + base + } else { + base | 0o200 + }; + assert_eq!(portable.mode, mode); + let modified = metadata + .modified() + .unwrap() + .duration_since(UNIX_EPOCH) + .unwrap(); + assert_eq!(portable.mtime_seconds, modified.as_secs() as i64); + assert_eq!( + portable.mtime_nanoseconds as i64, + i64::from(modified.subsec_nanos()) + ); + } if metadata.is_dir() { let mut after = None; loop { diff --git a/engine/crates/layerfs-store-service/src/install.rs b/engine/crates/layerfs-store-service/src/install.rs index 850570a334..bde143c778 100644 --- a/engine/crates/layerfs-store-service/src/install.rs +++ b/engine/crates/layerfs-store-service/src/install.rs @@ -21,6 +21,7 @@ use std::sync::Arc; /// The daemon's user inside its Sandbox (the runtime's `User` is `0:0`). A /// daemon opens only a Store file and directory it owns, so an installer /// must run as this user too. +#[cfg(not(target_os = "windows"))] const DAEMON_UID: u32 = 0; /// The destination and its exclusive temporary name. @@ -162,11 +163,18 @@ pub fn install_local( installer_user()?; let text = |error: io::Error| error.to_string(); if !directory.exists() { - use std::os::unix::fs::DirBuilderExt; - fs::DirBuilder::new() - .mode(0o700) - .create(directory) - .map_err(text)?; + #[cfg(unix)] + { + use std::os::unix::fs::DirBuilderExt; + fs::DirBuilder::new() + .mode(0o700) + .create(directory) + .map_err(text)?; + } + #[cfg(not(unix))] + { + fs::DirBuilder::new().create(directory).map_err(text)?; + } } let (target, temporary) = paths(destination).map_err(text)?; let mut file = claim(&target, &temporary).map_err(text)?; @@ -204,16 +212,24 @@ pub fn install_local( /// Refuses an installer that is not the daemons' user. fn installer_user() -> Result<(), String> { - use std::os::unix::fs::MetadataExt; - // the owner of /proc/self is this process's effective user - let uid = fs::metadata("/proc/self") - .map_err(|error| format!("this process's user is unknown: {error}"))? - .uid(); - if uid != DAEMON_UID { - return Err(format!( - "the Store install runs as user {uid}; it must run as user {DAEMON_UID}, the \ - daemons' user, which opens only a Store it owns" - )); + #[cfg(target_os = "windows")] + { + // Windows has no daemons' uid to check here; the destination's + // local-volume discipline is the kernel guard's, which still applies. + Ok(()) + } + #[cfg(not(target_os = "windows"))] + { + use std::os::unix::fs::MetadataExt; + // the owner of /proc/self is this process's effective user + let uid = fs::metadata("/proc/self") + .map_err(|error| format!("this process's user is unknown: {error}"))? + .uid(); + if uid != DAEMON_UID { + return Err(format!( + "the Store install runs as user {uid}; it must run as user {DAEMON_UID}, the daemons' user, which opens only a Store it owns" + )); + } + Ok(()) } - Ok(()) } diff --git a/engine/crates/layerfs-store-service/src/kernel_guard.rs b/engine/crates/layerfs-store-service/src/kernel_guard.rs index 49489cac1e..3858730bfd 100644 --- a/engine/crates/layerfs-store-service/src/kernel_guard.rs +++ b/engine/crates/layerfs-store-service/src/kernel_guard.rs @@ -1,12 +1,14 @@ //! Whether this process may open the global Store directly (#352 F-020). //! -//! Every opener of one Store must share one Linux kernel and the local -//! filesystem that holds it: SQLite's WAL locks and the writers' admission -//! lane (a `flock` on the Store's directory) coordinate only within one -//! kernel. The guard checks what this process can verify before it opens any -//! file: the platform, and the type of the filesystem holding the Store's -//! directory, from an allowlist of local filesystems. Anything else is -//! `Unsupported` with its reason; there is no other route to fall back to. +//! Every opener of one Store must share one kernel and the local filesystem +//! that holds it: SQLite's WAL locks and the writers' admission lane +//! coordinate only within one kernel. On Linux that is the daemons' kernel +//! over ext4, xfs or btrfs; on Windows it is this machine's kernel over +//! NTFS on a local volume. The guard checks what this process can verify +//! before it opens any file: the platform, and the type of the filesystem +//! holding the Store's directory, from an allowlist of local filesystems. +//! Anything else is `Unsupported` with its reason; there is no other route +//! to fall back to. use std::path::Path; /// Filesystems that carry the Store's locks: ext4, xfs and btrfs. @@ -56,7 +58,31 @@ pub fn check(store: &Path) -> Result<&'static str, Unsupported> { )) }) } - #[cfg(not(target_os = "linux"))] + #[cfg(target_os = "windows")] + { + // The allowlist is the Store's own discipline on Windows: only NTFS + // on a local volume carries the byte-range locks SQLite's WAL needs + // between processes. The audited probe lives in the persistence + // crate's Windows FFI module; network and device paths are refused + // there before a volume is examined. + let directory = store + .parent() + .filter(|parent| !parent.as_os_str().is_empty()) + .unwrap_or_else(|| Path::new(".")); + match layerfs_persistence::windows_volume_filesystem(directory) { + Ok(filesystem) if filesystem == "NTFS" => Ok("ntfs"), + Ok(filesystem) => Err(Unsupported(format!( + "filesystem {filesystem} at {} does not carry the Store's locks between \ + processes; direct Store access needs NTFS", + directory.display() + ))), + Err(error) => Err(Unsupported(format!( + "the Store's directory {} cannot be examined: {error}", + directory.display() + ))), + } + } + #[cfg(not(any(target_os = "linux", target_os = "windows")))] { let _ = store; Err(Unsupported( diff --git a/engine/crates/layerfs-store-service/src/overlay/backing.rs b/engine/crates/layerfs-store-service/src/overlay/backing.rs index de78d47877..faadff3df2 100644 --- a/engine/crates/layerfs-store-service/src/overlay/backing.rs +++ b/engine/crates/layerfs-store-service/src/overlay/backing.rs @@ -14,7 +14,11 @@ pub struct Backing { file: Option, namespace: i64, incarnation: [u8; 32], + // The deletion identity check reads these on unix and Windows; the + // remaining platforms refuse deletion before reaching them. + #[cfg_attr(not(any(unix, target_os = "windows")), allow(dead_code))] device: u64, + #[cfg_attr(not(any(unix, target_os = "windows")), allow(dead_code))] inode: u64, pool: Weak, terminal: AtomicBool, @@ -42,7 +46,19 @@ impl Backing { } (metadata.dev(), metadata.ino(), metadata.nlink()) }; - #[cfg(not(unix))] + #[cfg(target_os = "windows")] + let (device, inode, links) = { + // The audited probe in the overlay engine reads the entry's real + // volume, file index and link count. + let identity = layerfs_overlay::windows_handle_identity(&file).map_err(|error| { + io::Error::new( + io::ErrorKind::InvalidData, + format!("overlay file identity: {error}"), + ) + })?; + (identity.device, identity.index, identity.links) + }; + #[cfg(not(any(unix, target_os = "windows")))] let (device, inode, links) = (0, 0, 0); if !metadata.is_file() || links != 1 { return Err(io::Error::new( @@ -69,14 +85,14 @@ impl Backing { self.closed.store(true, Ordering::Release); } fn delete(&self) -> io::Result<()> { - let metadata = std::fs::symlink_metadata(&self.path)?; - let original = self - .file - .as_ref() - .expect("retained identity file") - .metadata()?; #[cfg(unix)] { + let metadata = std::fs::symlink_metadata(&self.path)?; + let original = self + .file + .as_ref() + .expect("retained identity file") + .metadata()?; use std::os::unix::fs::MetadataExt; if !metadata.is_file() || metadata.nlink() != 1 @@ -89,14 +105,54 @@ impl Backing { "overlay deletion identity", )); } + std::fs::remove_file(&self.path) + } + #[cfg(target_os = "windows")] + { + // The same discipline through the audited Windows identity: the + // entry at the path and the retained open handle must both still + // be the acquisition's file (volume serial + file index, sole + // link) before the removal. The retained handle was opened with + // FILE_SHARE_DELETE (std's share mode), so the removal takes + // effect when Drop closes that last handle, immediately after. + let path_identity = layerfs_overlay::windows_path_identity(&self.path) + .map_err(|error| { + io::Error::new( + io::ErrorKind::InvalidData, + format!("overlay deletion identity: {error}"), + ) + })?; + let retained = layerfs_overlay::windows_handle_identity( + self.file.as_ref().expect("retained identity file"), + ) + .map_err(|error| { + io::Error::new( + io::ErrorKind::InvalidData, + format!("overlay deletion identity: {error}"), + ) + })?; + if path_identity.device != self.device + || path_identity.index != self.inode + || retained.device != self.device + || retained.index != self.inode + || path_identity.links != 1 + || retained.links != 1 + { + return Err(io::Error::new( + io::ErrorKind::InvalidData, + "overlay deletion identity", + )); + } + std::fs::remove_file(&self.path) + } + #[cfg(not(any(unix, target_os = "windows")))] + { + let _ = &self.path; + Err(io::Error::new( + io::ErrorKind::Unsupported, + "overlay deletion platform", + )) } - #[cfg(not(unix))] - return Err(io::Error::new( - io::ErrorKind::Unsupported, - "overlay deletion platform", - )); - #[cfg(unix)] - std::fs::remove_file(&self.path) } } impl Drop for Backing { diff --git a/engine/crates/layerfs-store-service/src/store_service.rs b/engine/crates/layerfs-store-service/src/store_service.rs index 791755cb86..11e41646aa 100644 --- a/engine/crates/layerfs-store-service/src/store_service.rs +++ b/engine/crates/layerfs-store-service/src/store_service.rs @@ -55,11 +55,18 @@ pub struct StoreService { capacity: usize, bound: AtomicUsize, retained: Mutex>, + /// The Store file whose writer lane guards this service's close. + store_file: std::path::PathBuf, } impl StoreService { /// Serves Store calls over `opened`, constructing through `owner`. pub fn new(opened: OpenedStore, owner: &Owner) -> Self { + Self::at(opened, owner, std::path::PathBuf::new()) + } + /// [`new`](Self::new) with the Store file recorded, for a close that + /// coordinates its sessions' teardown under the writer lane. + pub fn at(opened: OpenedStore, owner: &Owner, store_file: std::path::PathBuf) -> Self { Self { store: opened.store.clone(), opened, @@ -68,6 +75,7 @@ impl StoreService { capacity: owner.configuration().namespaces, bound: AtomicUsize::new(0), retained: Mutex::new(Vec::new()), + store_file, } } @@ -109,7 +117,7 @@ impl StoreService { OwnerConfig { namespaces: CALLS }, ) .map_err(|error| OpenRefusal::Failed(format!("overlay template: {error}")))?; - let mut service = Self::new(opened, &owner); + let mut service = Self::at(opened, &owner, store.to_path_buf()); service.owned = Some(owner); Ok(service) } @@ -117,10 +125,20 @@ impl StoreService { /// Stops the overlay owner this service started. Private Workspaces kept /// with an uncertain Commit stay with it until then. pub fn close(mut self) -> Result<(), String> { - match self.owned.take() { + // The overlays stop first: their final Commits take the writer lane + // themselves, so no outer hold may surround this. + let stopped = match self.owned.take() { Some(owner) => owner.stop().map_err(|error| error.to_string()), None => Ok(()), - } + }; + // The sessions then close under the Store's writer lane, so their + // close-time checkpoints never run beside another opener's first + // attach. A failed lane acquisition closes bare, as a drop does. + let lane = (!self.store_file.as_os_str().is_empty()) + .then(|| layerfs_persistence::store_lane(&self.store_file)); + drop(self); + drop(lane); + stopped } /// One private Workspace on `branch` for one file-changing call. diff --git a/engine/crates/layerfs-store-service/tests/kernel_guard.rs b/engine/crates/layerfs-store-service/tests/kernel_guard.rs index d9050f370d..a4725a7695 100644 --- a/engine/crates/layerfs-store-service/tests/kernel_guard.rs +++ b/engine/crates/layerfs-store-service/tests/kernel_guard.rs @@ -1,8 +1,9 @@ //! Direct Store access is refused `Unsupported` where the Store's locks do -//! not reach every opener (#352 F-020): on macOS, and on Linux for a -//! filesystem outside the allowlist (here tmpfs). The refusal comes before any -//! file is opened: the Store file's bytes are unchanged and no overlay -//! template is created. +//! not reach every opener (#352 F-020): on macOS always, on Linux for a +//! filesystem outside the allowlist (here tmpfs), and on Windows for a +//! spelling outside the NTFS-on-local-volume allowlist (here UNC). The +//! refusal comes before any file is opened: the Store file's bytes are +//! unchanged and no overlay template is created. use layerfs_store_service::{OpenRefusal, StoreService}; use std::path::{Path, PathBuf}; @@ -30,7 +31,7 @@ fn scratch(parent: &Path, label: &str) -> PathBuf { directory } -#[cfg(not(target_os = "linux"))] +#[cfg(target_os = "macos")] #[test] fn direct_access_is_unsupported_off_linux() { let directory = scratch(&std::env::temp_dir(), "host"); @@ -40,6 +41,28 @@ fn direct_access_is_unsupported_off_linux() { std::fs::remove_dir_all(directory).unwrap(); } +#[cfg(target_os = "windows")] +#[test] +fn direct_access_is_unsupported_on_a_non_local_spelling() { + // A UNC spelling never reaches the NTFS-on-local-volume allowlist; the + // refusal comes before any file is opened, so no template exists to + // leave behind. + let store = Path::new(r"\\localhost\c$\layerfs-guard-nonlocal\store.sqlite"); + let template = Path::new(r"\\localhost\c$\layerfs-guard-nonlocal\overlay.sqlite"); + match StoreService::open_direct(store, b"binding", [7; 32], template) { + Err(OpenRefusal::Unsupported(reason)) => assert!( + reason.0.contains("cannot be examined"), + "{reason}" + ), + Err(other) => panic!("expected Unsupported, got {other:?}"), + Ok(_) => panic!("expected Unsupported, the Store opened"), + } + assert!( + !template.exists(), + "no overlay template before the guard passes" + ); +} + #[cfg(target_os = "linux")] #[test] fn direct_access_is_unsupported_on_a_filesystem_outside_the_allowlist() { diff --git a/engine/crates/layerfs-store-service/tests/overlay_backing_windows.rs b/engine/crates/layerfs-store-service/tests/overlay_backing_windows.rs new file mode 100644 index 0000000000..1e8318e6d3 --- /dev/null +++ b/engine/crates/layerfs-store-service/tests/overlay_backing_windows.rs @@ -0,0 +1,79 @@ +//! The Windows overlay backing's last-owner deletion: the same identity +//! discipline as Linux, through the audited Windows identity. A dangling +//! `Weak` stands in for the workspace pool — `Drop` skips its callback when +//! the pool is gone, which is exactly the unit under test. +#![cfg(target_os = "windows")] +use std::sync::{Arc, Weak}; + +fn scratch(label: &str) -> std::path::PathBuf { + let directory = std::env::temp_dir().join(format!( + "layerfs-backing-{}-{}-{}", + label, + std::process::id(), + std::time::SystemTime::now() + .duration_since(std::time::UNIX_EPOCH) + .map(|span| span.as_nanos()) + .unwrap_or(0) + )); + std::fs::create_dir_all(&directory).unwrap(); + directory +} + +/// The file goes away when the last owner releases: identity matches, the +/// removal is authorized, and closing the retained handle completes it. +#[test] +fn the_last_owner_deletes_a_matching_overlay_file() { + let directory = scratch("delete"); + let path = directory.join("overlay.sqlite"); + std::fs::write(&path, b"overlay body").unwrap(); + let backing = Arc::new( + layerfs_store_service::overlay::backing::Backing::new( + path.clone(), + 1, + [7; 32], + Weak::::new(), + ) + .unwrap(), + ); + assert!(path.exists(), "the file stays while its owner lives"); + backing.terminal(); + backing.closed(); + drop(backing); + let mut gone = false; + for _ in 0..40 { + if !path.exists() { + gone = true; + break; + } + std::thread::sleep(std::time::Duration::from_millis(50)); + } + assert!(gone, "the last owner's release deletes the file"); + std::fs::remove_dir_all(directory).unwrap(); +} + +/// A file swapped in behind the backing's back no longer matches the +/// retained identity: the removal is refused and the impostor stays. +#[test] +fn a_swapped_in_file_is_refused_the_deletion() { + let directory = scratch("swap"); + let path = directory.join("overlay.sqlite"); + std::fs::write(&path, b"overlay body").unwrap(); + let backing = Arc::new( + layerfs_store_service::overlay::backing::Backing::new( + path.clone(), + 1, + [7; 32], + Weak::::new(), + ) + .unwrap(), + ); + // Replace the entry at the path with a different file (different volume + // index), so the path no longer names the acquisition's file. + std::fs::remove_file(&path).unwrap(); + std::fs::write(&path, b"impostor").unwrap(); + backing.terminal(); + backing.closed(); + drop(backing); + assert!(path.exists(), "the impostor is not deleted"); + std::fs::remove_dir_all(directory).unwrap(); +} diff --git a/sdk/js/native/layerfs.node b/sdk/js/native/layerfs.node new file mode 100644 index 0000000000..391797ac51 Binary files /dev/null and b/sdk/js/native/layerfs.node differ diff --git a/tools/check_product_boundary.py b/tools/check_product_boundary.py index c4159c3c12..41294d71df 100644 --- a/tools/check_product_boundary.py +++ b/tools/check_product_boundary.py @@ -21,14 +21,17 @@ # comment in a lint name (`unsafe_code`) is not the bare word, so attr lines # never trip the scan once comments are stripped. UNSAFE_AUDITED_MODULE = { - "layerfs-storage": "src/encoding/codec.rs", - "layerfs-persistence": "src/backend/sqlite/file_control.rs", + "layerfs-storage": ("src/encoding/codec.rs",), + "layerfs-persistence": ( + "src/backend/sqlite/file_control.rs", + "src/backend/sqlite/windows_lane.rs", + ), + "layerfs-project": ("src/import/windows_identity.rs",), + "layerfs-overlay": ("src/database/windows_identity.rs",), } UNSAFE_FREE_CRATES = ( "layerfs-content", "layerfs-telemetry", - "layerfs-project", - "layerfs-overlay", "layerfs-workspace", "layerfs-store-service", "layerfs-fuse", @@ -42,8 +45,8 @@ "layerfs-content": "#![forbid(unsafe_code)]", "layerfs-telemetry": "#![forbid(unsafe_code)]", "layerfs-persistence": "#![deny(unsafe_code)]", - "layerfs-project": "#![forbid(unsafe_code)]", - "layerfs-overlay": "#![forbid(unsafe_code)]", + "layerfs-project": "#![deny(unsafe_code)]", + "layerfs-overlay": "#![deny(unsafe_code)]", "layerfs-workspace": "#![forbid(unsafe_code)]", "layerfs-store-service": "#![forbid(unsafe_code)]", "layerfs-fuse": "#![forbid(unsafe_code)]", @@ -325,8 +328,9 @@ def unsafe_violations(path, source): return found relative = Path(*path.parts[path.parts.index("src") :]) code = "\n".join(line.split("//", 1)[0] for line in source.splitlines()) - if UNSAFE.search(code) and (crate in UNSAFE_FREE_CRATES or str(relative) != UNSAFE_AUDITED_MODULE[crate]): - found.append((1, "unsafe outside the audited module boundary; see core/AGENTS.md")) + if UNSAFE.search(code): + if crate in UNSAFE_FREE_CRATES or relative.as_posix() not in UNSAFE_AUDITED_MODULE[crate]: + found.append((1, "unsafe outside the audited module boundary; see core/AGENTS.md")) if relative == Path("src/lib.rs") and UNSAFE_ROOT_ATTR[crate] not in source: found.append((1, f"crate root must declare {UNSAFE_ROOT_ATTR[crate]}")) return found diff --git a/tools/test_check_product_boundary.py b/tools/test_check_product_boundary.py index ec4196fbff..bc991d0172 100644 --- a/tools/test_check_product_boundary.py +++ b/tools/test_check_product_boundary.py @@ -384,7 +384,7 @@ def test_shipped_sql_and_external_tests_scope(self): path.parent.mkdir(parents=True, exist_ok=True) path.write_text("") self.assertEqual( - [str(p.relative_to(core / "crates" / "store")) for p in production_files(core.parent)], + [p.relative_to(core / "crates" / "store").as_posix() for p in production_files(core.parent)], ["sql/schema.sql", "src/lib.rs", "src/sql/query.sql"], ) @@ -398,7 +398,7 @@ def test_flat_api_product_scope(self): path.write_text("") (package / "Cargo.toml").write_text('[package]\nname="layerfs-api"\n') self.assertEqual( - [str(p.relative_to(package)) for p in production_files(root)], + [p.relative_to(package).as_posix() for p in production_files(root)], ["src/fs/read.rs", "src/lib.rs"], ) @@ -432,11 +432,11 @@ def test_skip_sdk_leaves_only_the_sdk_out(self): path.parent.mkdir(parents=True, exist_ok=True) path.write_text("") (root / "engine/crates/layerfs-node/Cargo.toml").write_text('[package]\nname="layerfs-node"\n') - everything = [str(p.relative_to(root)) for p in production_files(core.parent)] - self.assertIn("engine/crates/layerfs-node/src/lib.rs", everything) + everything = [p.relative_to(root).as_posix() for p in production_files(core.parent)] + self.assertIn("engine/crates/layerfs-node/src/lib.rs", [Path(p).as_posix() for p in everything]) self.assertIn("api/agent/src/index.js", everything) self.assertEqual( - [str(p.relative_to(root)) for p in production_files(core.parent, include_sdk=False)], + [p.relative_to(root).as_posix() for p in production_files(core.parent, include_sdk=False)], ["core/crates/store/src/lib.rs"], )