From 8b12638ba07925f422e7a6c1283cf547276d66f0 Mon Sep 17 00:00:00 2001 From: kaghni Date: Thu, 9 Apr 2026 14:21:16 -0700 Subject: [PATCH 01/17] Restructure into monorepo: shared src/, claude-code/, openclaw/ MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Move CC config (hooks, commands, skills, bundle, build) into claude-code/ - Keep shared core in src/ (deeplake-api, config, utils, hooks, shell, commands) - Add openclaw/ plugin with its own source and build - Root .claude-plugin/marketplace.json points to ./claude-code - Plugin renamed: deeplake-hivemind → hivemind - Both plugins build independently, both bundle shared core --- .claude-plugin/marketplace.json | 16 +- claude-code/.claude-plugin/plugin.json | 19 + {bundle => claude-code/bundle}/capture.js | 14 +- .../bundle}/commands/auth-login.js | 4 +- .../bundle}/pre-tool-use.js | 16 +- {bundle => claude-code/bundle}/session-end.js | 10 +- .../bundle}/session-start.js | 18 +- .../bundle}/shell/deeplake-shell.js | 1048 ++++++++--------- {bundle => claude-code/bundle}/wiki-worker.js | 2 +- {commands => claude-code/commands}/login.md | 0 claude-code/commands/update.md | 12 + claude-code/esbuild.config.mjs | 37 + {hooks => claude-code/hooks}/hooks.json | 0 claude-code/package.json | 44 + .../skills}/deeplake-memory/SKILL.md | 0 .../tests}/autoupdate.test.ts | 0 {tests => claude-code/tests}/capture.test.ts | 2 +- .../tests}/deeplake-fs.test.ts | 2 +- .../tests}/grep-interceptor.test.ts | 4 +- .../tests}/real-table-test.mjs | 0 .../tests}/session-end-upload.test.ts | 0 .../tests}/session-summary.test.ts | 2 +- .../tests}/sessions-table.test.ts | 2 +- {tests => claude-code/tests}/sql.test.ts | 2 +- claude-code/tsconfig.json | 19 + .../vitest.config.ts | 0 commands/update.md | 12 - esbuild.config.mjs | 35 - openclaw/esbuild.config.mjs | 12 + openclaw/openclaw.plugin.json | 18 + openclaw/package.json | 24 + openclaw/skills/SKILL.md | 33 + openclaw/src/credentials.ts | 47 + openclaw/src/index.ts | 246 ++++ openclaw/src/memory.ts | 114 ++ 35 files changed, 1196 insertions(+), 618 deletions(-) create mode 100644 claude-code/.claude-plugin/plugin.json rename {bundle => claude-code/bundle}/capture.js (98%) rename {bundle => claude-code/bundle}/commands/auth-login.js (99%) rename {bundle => claude-code/bundle}/pre-tool-use.js (98%) rename {bundle => claude-code/bundle}/session-end.js (97%) rename {bundle => claude-code/bundle}/session-start.js (98%) rename {bundle => claude-code/bundle}/shell/deeplake-shell.js (98%) rename {bundle => claude-code/bundle}/wiki-worker.js (99%) rename {commands => claude-code/commands}/login.md (100%) create mode 100644 claude-code/commands/update.md create mode 100644 claude-code/esbuild.config.mjs rename {hooks => claude-code/hooks}/hooks.json (100%) create mode 100644 claude-code/package.json rename {skills => claude-code/skills}/deeplake-memory/SKILL.md (100%) rename {tests => claude-code/tests}/autoupdate.test.ts (100%) rename {tests => claude-code/tests}/capture.test.ts (99%) rename {tests => claude-code/tests}/deeplake-fs.test.ts (99%) rename {tests => claude-code/tests}/grep-interceptor.test.ts (97%) rename {tests => claude-code/tests}/real-table-test.mjs (100%) rename {tests => claude-code/tests}/session-end-upload.test.ts (100%) rename {tests => claude-code/tests}/session-summary.test.ts (99%) rename {tests => claude-code/tests}/sessions-table.test.ts (99%) rename {tests => claude-code/tests}/sql.test.ts (96%) create mode 100644 claude-code/tsconfig.json rename vitest.config.ts => claude-code/vitest.config.ts (100%) delete mode 100644 commands/update.md delete mode 100644 esbuild.config.mjs create mode 100644 openclaw/esbuild.config.mjs create mode 100644 openclaw/openclaw.plugin.json create mode 100644 openclaw/package.json create mode 100644 openclaw/skills/SKILL.md create mode 100644 openclaw/src/credentials.ts create mode 100644 openclaw/src/index.ts create mode 100644 openclaw/src/memory.ts diff --git a/.claude-plugin/marketplace.json b/.claude-plugin/marketplace.json index 4f13301..7faa2ff 100644 --- a/.claude-plugin/marketplace.json +++ b/.claude-plugin/marketplace.json @@ -1,20 +1,20 @@ { - "name": "deeplake-claude-code-plugins", + "name": "deeplake-hivemind", "owner": { "name": "Activeloop", "email": "support@activeloop.ai" }, "metadata": { - "description": "Cloud-backed persistent memory for Claude Code — captures conversations and makes them searchable across sessions, users, and agents", - "version": "0.5.10" + "description": "Cloud-backed persistent shared memory for AI agents powered by Deeplake", + "version": "0.6.0" }, "plugins": [ { - "name": "deeplake-hivemind", - "description": "Persistent shared memory powered by Deeplake — captures all session activity and provides cross-session, cross-agent memory search via virtual filesystem", - "version": "0.5.10", - "source": "./", - "homepage": "https://github.com/activeloopai/deeplake-claude-code-plugins" + "name": "hivemind", + "description": "Persistent shared memory powered by Deeplake — captures all session activity and provides cross-session, cross-agent memory search", + "version": "0.6.0", + "source": "./claude-code", + "homepage": "https://github.com/activeloopai/deeplake-hivemind" } ] } diff --git a/claude-code/.claude-plugin/plugin.json b/claude-code/.claude-plugin/plugin.json new file mode 100644 index 0000000..c87ed11 --- /dev/null +++ b/claude-code/.claude-plugin/plugin.json @@ -0,0 +1,19 @@ +{ + "name": "hivemind", + "description": "Cloud-backed persistent memory powered by Deeplake — read, write, and share memory across Claude Code sessions and agents", + "version": "0.6.0", + "author": { + "name": "Activeloop", + "url": "https://deeplake.ai" + }, + "homepage": "https://deeplake.ai", + "repository": "https://github.com/activeloopai/deeplake-hivemind", + "license": "Apache-2.0", + "keywords": [ + "memory", + "deeplake", + "persistent-memory", + "shared-memory", + "agent-memory" + ] +} diff --git a/bundle/capture.js b/claude-code/bundle/capture.js similarity index 98% rename from bundle/capture.js rename to claude-code/bundle/capture.js index 91f8ec8..0f21aa8 100755 --- a/bundle/capture.js +++ b/claude-code/bundle/capture.js @@ -1,6 +1,6 @@ #!/usr/bin/env node -// dist/src/utils/stdin.js +// ../dist/src/utils/stdin.js function readStdin() { return new Promise((resolve, reject) => { let data = ""; @@ -17,7 +17,7 @@ function readStdin() { }); } -// dist/src/config.js +// ../dist/src/config.js import { readFileSync, existsSync } from "node:fs"; import { join } from "node:path"; import { homedir, userInfo } from "node:os"; @@ -49,10 +49,10 @@ function loadConfig() { }; } -// dist/src/deeplake-api.js +// ../dist/src/deeplake-api.js import { randomUUID } from "node:crypto"; -// dist/src/utils/debug.js +// ../dist/src/utils/debug.js import { appendFileSync } from "node:fs"; import { join as join2 } from "node:path"; import { homedir as homedir2 } from "node:os"; @@ -65,12 +65,12 @@ function log(tag, msg) { `); } -// dist/src/utils/sql.js +// ../dist/src/utils/sql.js function sqlStr(value) { return value.replace(/\\/g, "\\\\").replace(/'/g, "''").replace(/\0/g, "").replace(/[\x01-\x08\x0b\x0c\x0e-\x1f\x7f]/g, ""); } -// dist/src/deeplake-api.js +// ../dist/src/deeplake-api.js var log2 = (msg) => log("sdk", msg); var DeeplakeApi = class { token; @@ -204,7 +204,7 @@ var DeeplakeApi = class { } }; -// dist/src/hooks/capture.js +// ../dist/src/hooks/capture.js var log3 = (msg) => log("capture", msg); var CAPTURE = process.env.DEEPLAKE_CAPTURE !== "false"; function buildSessionPath(config, sessionId) { diff --git a/bundle/commands/auth-login.js b/claude-code/bundle/commands/auth-login.js similarity index 99% rename from bundle/commands/auth-login.js rename to claude-code/bundle/commands/auth-login.js index 522fcd1..fa994e6 100755 --- a/bundle/commands/auth-login.js +++ b/claude-code/bundle/commands/auth-login.js @@ -1,6 +1,6 @@ #!/usr/bin/env node -// dist/src/commands/auth.js +// ../dist/src/commands/auth.js import { readFileSync, writeFileSync, existsSync, mkdirSync } from "node:fs"; import { join } from "node:path"; import { homedir } from "node:os"; @@ -193,7 +193,7 @@ Using: ${orgName} return creds; } -// dist/src/commands/auth-login.js +// ../dist/src/commands/auth-login.js async function main() { const args = process.argv.slice(2); const cmd = args[0] ?? "whoami"; diff --git a/bundle/pre-tool-use.js b/claude-code/bundle/pre-tool-use.js similarity index 98% rename from bundle/pre-tool-use.js rename to claude-code/bundle/pre-tool-use.js index 3538674..39e856b 100755 --- a/bundle/pre-tool-use.js +++ b/claude-code/bundle/pre-tool-use.js @@ -1,6 +1,6 @@ #!/usr/bin/env node -// dist/src/hooks/pre-tool-use.js +// ../dist/src/hooks/pre-tool-use.js import { existsSync as existsSync2 } from "node:fs"; import { execFileSync } from "node:child_process"; import { join as join3 } from "node:path"; @@ -8,7 +8,7 @@ import { homedir as homedir3 } from "node:os"; import { fileURLToPath } from "node:url"; import { dirname } from "node:path"; -// dist/src/utils/stdin.js +// ../dist/src/utils/stdin.js function readStdin() { return new Promise((resolve, reject) => { let data = ""; @@ -25,7 +25,7 @@ function readStdin() { }); } -// dist/src/config.js +// ../dist/src/config.js import { readFileSync, existsSync } from "node:fs"; import { join } from "node:path"; import { homedir, userInfo } from "node:os"; @@ -57,10 +57,10 @@ function loadConfig() { }; } -// dist/src/deeplake-api.js +// ../dist/src/deeplake-api.js import { randomUUID } from "node:crypto"; -// dist/src/utils/debug.js +// ../dist/src/utils/debug.js import { appendFileSync } from "node:fs"; import { join as join2 } from "node:path"; import { homedir as homedir2 } from "node:os"; @@ -73,12 +73,12 @@ function log(tag, msg) { `); } -// dist/src/utils/sql.js +// ../dist/src/utils/sql.js function sqlStr(value) { return value.replace(/\\/g, "\\\\").replace(/'/g, "''").replace(/\0/g, "").replace(/[\x01-\x08\x0b\x0c\x0e-\x1f\x7f]/g, ""); } -// dist/src/deeplake-api.js +// ../dist/src/deeplake-api.js var log2 = (msg) => log("sdk", msg); var DeeplakeApi = class { token; @@ -212,7 +212,7 @@ var DeeplakeApi = class { } }; -// dist/src/hooks/pre-tool-use.js +// ../dist/src/hooks/pre-tool-use.js var log3 = (msg) => log("pre", msg); var MEMORY_PATH = join3(homedir3(), ".deeplake", "memory"); var TILDE_PATH = "~/.deeplake/memory"; diff --git a/bundle/session-end.js b/claude-code/bundle/session-end.js similarity index 97% rename from bundle/session-end.js rename to claude-code/bundle/session-end.js index 8e7f620..ad05cac 100755 --- a/bundle/session-end.js +++ b/claude-code/bundle/session-end.js @@ -1,13 +1,13 @@ #!/usr/bin/env node -// dist/src/hooks/session-end.js +// ../dist/src/hooks/session-end.js import { spawn, execSync } from "node:child_process"; import { fileURLToPath } from "node:url"; import { dirname, join as join3 } from "node:path"; import { writeFileSync, mkdirSync, appendFileSync as appendFileSync2 } from "node:fs"; import { homedir as homedir3, tmpdir } from "node:os"; -// dist/src/utils/stdin.js +// ../dist/src/utils/stdin.js function readStdin() { return new Promise((resolve, reject) => { let data = ""; @@ -24,7 +24,7 @@ function readStdin() { }); } -// dist/src/config.js +// ../dist/src/config.js import { readFileSync, existsSync } from "node:fs"; import { join } from "node:path"; import { homedir, userInfo } from "node:os"; @@ -56,7 +56,7 @@ function loadConfig() { }; } -// dist/src/utils/debug.js +// ../dist/src/utils/debug.js import { appendFileSync } from "node:fs"; import { join as join2 } from "node:path"; import { homedir as homedir2 } from "node:os"; @@ -69,7 +69,7 @@ function log(tag, msg) { `); } -// dist/src/hooks/session-end.js +// ../dist/src/hooks/session-end.js var log2 = (msg) => log("session-end", msg); var HOME = homedir3(); var WIKI_LOG = join3(HOME, ".claude", "hooks", "deeplake-wiki.log"); diff --git a/bundle/session-start.js b/claude-code/bundle/session-start.js similarity index 98% rename from bundle/session-start.js rename to claude-code/bundle/session-start.js index 1e1975b..ef91043 100755 --- a/bundle/session-start.js +++ b/claude-code/bundle/session-start.js @@ -1,13 +1,13 @@ #!/usr/bin/env node -// dist/src/hooks/session-start.js +// ../dist/src/hooks/session-start.js import { fileURLToPath } from "node:url"; import { dirname, join as join4 } from "node:path"; import { mkdirSync as mkdirSync2, appendFileSync as appendFileSync2, readFileSync as readFileSync3 } from "node:fs"; import { execSync as execSync2 } from "node:child_process"; import { homedir as homedir4 } from "node:os"; -// dist/src/commands/auth.js +// ../dist/src/commands/auth.js import { readFileSync, writeFileSync, existsSync, mkdirSync } from "node:fs"; import { join } from "node:path"; import { homedir } from "node:os"; @@ -29,7 +29,7 @@ function saveCredentials(creds) { writeFileSync(CREDS_PATH, JSON.stringify({ ...creds, savedAt: (/* @__PURE__ */ new Date()).toISOString() }, null, 2), { mode: 384 }); } -// dist/src/config.js +// ../dist/src/config.js import { readFileSync as readFileSync2, existsSync as existsSync2 } from "node:fs"; import { join as join2 } from "node:path"; import { homedir as homedir2, userInfo } from "node:os"; @@ -61,10 +61,10 @@ function loadConfig() { }; } -// dist/src/deeplake-api.js +// ../dist/src/deeplake-api.js import { randomUUID } from "node:crypto"; -// dist/src/utils/debug.js +// ../dist/src/utils/debug.js import { appendFileSync } from "node:fs"; import { join as join3 } from "node:path"; import { homedir as homedir3 } from "node:os"; @@ -77,12 +77,12 @@ function log(tag, msg) { `); } -// dist/src/utils/sql.js +// ../dist/src/utils/sql.js function sqlStr(value) { return value.replace(/\\/g, "\\\\").replace(/'/g, "''").replace(/\0/g, "").replace(/[\x01-\x08\x0b\x0c\x0e-\x1f\x7f]/g, ""); } -// dist/src/deeplake-api.js +// ../dist/src/deeplake-api.js var log2 = (msg) => log("sdk", msg); var DeeplakeApi = class { token; @@ -216,7 +216,7 @@ var DeeplakeApi = class { } }; -// dist/src/utils/stdin.js +// ../dist/src/utils/stdin.js function readStdin() { return new Promise((resolve, reject) => { let data = ""; @@ -233,7 +233,7 @@ function readStdin() { }); } -// dist/src/hooks/session-start.js +// ../dist/src/hooks/session-start.js var log3 = (msg) => log("session-start", msg); var __bundleDir = dirname(fileURLToPath(import.meta.url)); var AUTH_CMD = join4(__bundleDir, "commands", "auth-login.js"); diff --git a/bundle/shell/deeplake-shell.js b/claude-code/bundle/shell/deeplake-shell.js similarity index 98% rename from bundle/shell/deeplake-shell.js rename to claude-code/bundle/shell/deeplake-shell.js index fe5f9b0..6a88657 100755 --- a/bundle/shell/deeplake-shell.js +++ b/claude-code/bundle/shell/deeplake-shell.js @@ -38,7 +38,7 @@ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__ge mod )); -// node_modules/just-bash/dist/bundle/chunks/chunk-YNYSPYQ5.js +// ../node_modules/just-bash/dist/bundle/chunks/chunk-YNYSPYQ5.js function T1(n24) { let t6 = 0; return n24.includes("i") && (t6 |= y.CASE_INSENSITIVE), n24.includes("m") && (t6 |= y.MULTILINE), n24.includes("s") && (t6 |= y.DOTALL), t6; @@ -51,7 +51,7 @@ function b1(n24, t6 = "") { } var g, u, a, b, w, O, R1, I, F, X, P, _, m, v, U, z, V, L, $, j, N, E, W, Y, M, c, q, D, K, Z, d, n1, r1, a1, o1, l1, h1, u1, c1, p1, f1, g1, A1, w1, E1, d1, O1, C1, m1, S1, x, H, Q, J, t1, e1, s1, y, B, i1; var init_chunk_YNYSPYQ5 = __esm({ - "node_modules/just-bash/dist/bundle/chunks/chunk-YNYSPYQ5.js"() { + "../node_modules/just-bash/dist/bundle/chunks/chunk-YNYSPYQ5.js"() { g = class n { static FOLD_CASE = 1; static LITERAL = 2; @@ -2970,13 +2970,13 @@ var init_chunk_YNYSPYQ5 = __esm({ } }); -// node_modules/just-bash/dist/bundle/chunks/chunk-GFQRA5P5.js +// ../node_modules/just-bash/dist/bundle/chunks/chunk-GFQRA5P5.js function v2(r10) { return r10 instanceof c2 || r10 instanceof a2 || r10 instanceof i; } var n15, c2, a2, i, u2, x2, d2, p, l, h, m2, b2, $2, f, C; var init_chunk_GFQRA5P5 = __esm({ - "node_modules/just-bash/dist/bundle/chunks/chunk-GFQRA5P5.js"() { + "../node_modules/just-bash/dist/bundle/chunks/chunk-GFQRA5P5.js"() { n15 = class extends Error { stdout; stderr; @@ -3090,7 +3090,7 @@ var init_chunk_GFQRA5P5 = __esm({ } }); -// node_modules/just-bash/dist/bundle/chunks/chunk-FEIOJCZD.js +// ../node_modules/just-bash/dist/bundle/chunks/chunk-FEIOJCZD.js function $3(e6, t6) { for (; t6 < e6.length; ) { if (e6[t6] === "\\" && e6[t6 + 1] === ` @@ -8494,7 +8494,7 @@ async function Ve(e6, t6, r10 = false) { } var Re, w2, p2, pe, Bt, Dr, xr, _r, ve, Qe, Ze, Qt, Ue, Zt, Ut, Ht, G, Tr, Fr, zr, V2, Yr, dn, oe, yn, xi, as, Le, ys, kt; var init_chunk_FEIOJCZD = __esm({ - "node_modules/just-bash/dist/bundle/chunks/chunk-FEIOJCZD.js"() { + "../node_modules/just-bash/dist/bundle/chunks/chunk-FEIOJCZD.js"() { init_chunk_YNYSPYQ5(); init_chunk_GFQRA5P5(); Re = ["=", "+=", "-=", "*=", "/=", "%=", "<<=", ">>=", "&=", "|=", "^="]; @@ -9839,7 +9839,7 @@ var init_chunk_FEIOJCZD = __esm({ } }); -// node_modules/just-bash/dist/bundle/chunks/chunk-XHM67O4N.js +// ../node_modules/just-bash/dist/bundle/chunks/chunk-XHM67O4N.js import * as i2 from "node:fs"; import * as o from "node:path"; function c3(t6) { @@ -9873,14 +9873,14 @@ function v4(t6, e6) { return c3(p3(n24, e6)); } var init_chunk_XHM67O4N = __esm({ - "node_modules/just-bash/dist/bundle/chunks/chunk-XHM67O4N.js"() { + "../node_modules/just-bash/dist/bundle/chunks/chunk-XHM67O4N.js"() { } }); -// node_modules/just-bash/dist/bundle/chunks/chunk-CWQS3NFK.js +// ../node_modules/just-bash/dist/bundle/chunks/chunk-CWQS3NFK.js var r, e2, o2, a3; var init_chunk_CWQS3NFK = __esm({ - "node_modules/just-bash/dist/bundle/chunks/chunk-CWQS3NFK.js"() { + "../node_modules/just-bash/dist/bundle/chunks/chunk-CWQS3NFK.js"() { r = globalThis.SharedArrayBuffer; e2 = globalThis.Atomics; o2 = performance.now.bind(performance); @@ -9888,10 +9888,10 @@ var init_chunk_CWQS3NFK = __esm({ } }); -// node_modules/just-bash/dist/bundle/chunks/chunk-DXB73IDG.js +// ../node_modules/just-bash/dist/bundle/chunks/chunk-DXB73IDG.js var h3, e3, i3, j2, k2, l2, m4, n16, o3, p4, g2, q3, r2; var init_chunk_DXB73IDG = __esm({ - "node_modules/just-bash/dist/bundle/chunks/chunk-DXB73IDG.js"() { + "../node_modules/just-bash/dist/bundle/chunks/chunk-DXB73IDG.js"() { h3 = Object.create; e3 = Object.defineProperty; i3 = Object.getOwnPropertyDescriptor; @@ -9916,7 +9916,7 @@ var init_chunk_DXB73IDG = __esm({ } }); -// node_modules/just-bash/dist/bundle/chunks/chunk-5QMZ5MUS.js +// ../node_modules/just-bash/dist/bundle/chunks/chunk-5QMZ5MUS.js function v5() { let a15 = [{ prop: "Function", target: globalThis, violationType: "function_constructor", strategy: "throw", reason: "Function constructor allows arbitrary code execution" }, { prop: "eval", target: globalThis, violationType: "eval", strategy: "throw", reason: "eval() allows arbitrary code execution" }, { prop: "setTimeout", target: globalThis, violationType: "setTimeout", strategy: "throw", reason: "setTimeout with string argument allows code execution" }, { prop: "setInterval", target: globalThis, violationType: "setInterval", strategy: "throw", reason: "setInterval with string argument allows code execution" }, { prop: "setImmediate", target: globalThis, violationType: "setImmediate", strategy: "throw", reason: "setImmediate could be used to escape sandbox context" }, { prop: "env", target: process, violationType: "process_env", strategy: "throw", reason: "process.env could leak sensitive environment variables", allowedKeys: /* @__PURE__ */ new Set(["NODE_V8_COVERAGE", "NODE_DEBUG", "NODE_DEBUG_NATIVE", "NODE_COMPILE_CACHE", "WATCH_REPORT_DEPENDENCIES", "FORCE_COLOR", "DEBUG", "UNDICI_NO_FG", "JEST_WORKER_ID", "__MINIMATCH_TESTING_PLATFORM__", "LOG_TOKENS", "LOG_STREAM"]) }, { prop: "binding", target: process, violationType: "process_binding", strategy: "throw", reason: "process.binding provides access to native Node.js modules" }, { prop: "_linkedBinding", target: process, violationType: "process_binding", strategy: "throw", reason: "process._linkedBinding provides access to native Node.js modules" }, { prop: "dlopen", target: process, violationType: "process_dlopen", strategy: "throw", reason: "process.dlopen allows loading native addons" }, { prop: "getBuiltinModule", target: process, violationType: "process_get_builtin_module", strategy: "throw", reason: "process.getBuiltinModule allows loading native Node.js modules (fs, child_process, vm)" }, { prop: "exit", target: process, violationType: "process_exit", strategy: "throw", reason: "process.exit could terminate the interpreter" }, { prop: "abort", target: process, violationType: "process_exit", strategy: "throw", reason: "process.abort could crash the interpreter" }, { prop: "kill", target: process, violationType: "process_kill", strategy: "throw", reason: "process.kill could signal other processes" }, { prop: "setuid", target: process, violationType: "process_setuid", strategy: "throw", reason: "process.setuid could escalate privileges" }, { prop: "setgid", target: process, violationType: "process_setuid", strategy: "throw", reason: "process.setgid could escalate privileges" }, { prop: "seteuid", target: process, violationType: "process_setuid", strategy: "throw", reason: "process.seteuid could escalate effective user privileges" }, { prop: "setegid", target: process, violationType: "process_setuid", strategy: "throw", reason: "process.setegid could escalate effective group privileges" }, { prop: "initgroups", target: process, violationType: "process_setuid", strategy: "throw", reason: "process.initgroups could modify supplementary group IDs" }, { prop: "setgroups", target: process, violationType: "process_setuid", strategy: "throw", reason: "process.setgroups could modify supplementary group IDs" }, { prop: "umask", target: process, violationType: "process_umask", strategy: "throw", reason: "process.umask could modify file creation permissions" }, { prop: "argv", target: process, violationType: "process_argv", strategy: "throw", reason: "process.argv may contain secrets in CLI arguments" }, { prop: "cwd", target: process, violationType: "process_chdir", strategy: "throw", reason: "process.cwd could disclose real host working directory path" }, { prop: "chdir", target: process, violationType: "process_chdir", strategy: "throw", reason: "process.chdir could confuse the interpreter's CWD tracking" }, { prop: "report", target: process, violationType: "process_report", strategy: "throw", reason: "process.report could disclose full environment, host paths, and system info" }, { prop: "loadEnvFile", target: process, violationType: "process_env", strategy: "throw", reason: "process.loadEnvFile could load env files bypassing env proxy" }, { prop: "setUncaughtExceptionCaptureCallback", target: process, violationType: "process_exception_handler", strategy: "throw", reason: "setUncaughtExceptionCaptureCallback could intercept security errors" }, { prop: "send", target: process, violationType: "process_send", strategy: "throw", reason: "process.send could communicate with parent process in IPC contexts" }, { prop: "channel", target: process, violationType: "process_channel", strategy: "throw", reason: "process.channel could access IPC channel to parent process" }, { prop: "cpuUsage", target: process, violationType: "process_timing", strategy: "throw", reason: "process.cpuUsage could enable timing side-channel attacks" }, { prop: "memoryUsage", target: process, violationType: "process_timing", strategy: "throw", reason: "process.memoryUsage could enable timing side-channel attacks" }, { prop: "hrtime", target: process, violationType: "process_timing", strategy: "throw", reason: "process.hrtime could enable timing side-channel attacks" }, { prop: "WeakRef", target: globalThis, violationType: "weak_ref", strategy: "throw", reason: "WeakRef could be used to leak references outside sandbox" }, { prop: "FinalizationRegistry", target: globalThis, violationType: "finalization_registry", strategy: "throw", reason: "FinalizationRegistry could be used to leak references outside sandbox" }, { prop: "Reflect", target: globalThis, violationType: "reflect", strategy: "freeze", reason: "Reflect provides introspection capabilities" }, { prop: "Proxy", target: globalThis, violationType: "proxy", strategy: "throw", reason: "Proxy allows intercepting and modifying object behavior" }, { prop: "WebAssembly", target: globalThis, violationType: "webassembly", strategy: "throw", reason: "WebAssembly allows executing arbitrary compiled code" }, { prop: "SharedArrayBuffer", target: globalThis, violationType: "shared_array_buffer", strategy: "throw", reason: "SharedArrayBuffer could enable side-channel communication or timing attacks" }, { prop: "Atomics", target: globalThis, violationType: "atomics", strategy: "throw", reason: "Atomics could enable side-channel communication or timing attacks" }, { prop: "performance", target: globalThis, violationType: "performance_timing", strategy: "throw", reason: "performance.now() provides sub-millisecond timing for side-channel attacks" }, { prop: "stdout", target: process, violationType: "process_stdout", strategy: "throw", reason: "process.stdout could bypass interpreter output to write to host stdout" }, { prop: "stderr", target: process, violationType: "process_stderr", strategy: "throw", reason: "process.stderr could bypass interpreter output to write to host stderr" }, { prop: "__defineGetter__", target: Object.prototype, violationType: "prototype_mutation", strategy: "throw", reason: "__defineGetter__ allows prototype pollution via getter injection" }, { prop: "__defineSetter__", target: Object.prototype, violationType: "prototype_mutation", strategy: "throw", reason: "__defineSetter__ allows prototype pollution via setter injection" }, { prop: "__lookupGetter__", target: Object.prototype, violationType: "prototype_mutation", strategy: "throw", reason: "__lookupGetter__ enables introspection for prototype pollution attacks" }, { prop: "__lookupSetter__", target: Object.prototype, violationType: "prototype_mutation", strategy: "throw", reason: "__lookupSetter__ enables introspection for prototype pollution attacks" }, { prop: "JSON", target: globalThis, violationType: "json_mutation", strategy: "freeze", reason: "Freeze JSON to prevent mutation of parsing/serialization" }, { prop: "Math", target: globalThis, violationType: "math_mutation", strategy: "freeze", reason: "Freeze Math to prevent mutation of math utilities" }]; try { @@ -9963,7 +9963,7 @@ function E2(a15) { } var f2, x4, k3, d3, u3, T2, m5, _2; var init_chunk_5QMZ5MUS = __esm({ - "node_modules/just-bash/dist/bundle/chunks/chunk-5QMZ5MUS.js"() { + "../node_modules/just-bash/dist/bundle/chunks/chunk-5QMZ5MUS.js"() { init_chunk_DXB73IDG(); f2 = typeof __BROWSER__ < "u" && __BROWSER__; x4 = null; @@ -10513,13 +10513,13 @@ This is a defense-in-depth measure and indicates a bug in just-bash. Please repo } }); -// node_modules/just-bash/dist/bundle/chunks/chunk-A5O5YHGN.js +// ../node_modules/just-bash/dist/bundle/chunks/chunk-A5O5YHGN.js function l3(t6) { return typeof t6 != "function" ? t6 : _2.bindCurrentContext(t6); } var i4, r3, s, T3, b3, u4; var init_chunk_A5O5YHGN = __esm({ - "node_modules/just-bash/dist/bundle/chunks/chunk-A5O5YHGN.js"() { + "../node_modules/just-bash/dist/bundle/chunks/chunk-A5O5YHGN.js"() { init_chunk_5QMZ5MUS(); i4 = globalThis.setTimeout.bind(globalThis); r3 = globalThis.clearTimeout.bind(globalThis); @@ -10530,7 +10530,7 @@ var init_chunk_A5O5YHGN = __esm({ } }); -// node_modules/just-bash/dist/bundle/chunks/chunk-IPJHKYVM.js +// ../node_modules/just-bash/dist/bundle/chunks/chunk-IPJHKYVM.js function n17(e6) { return `'${e6.replace(/'/g, "'\\''")}'`; } @@ -10538,11 +10538,11 @@ function r4(e6) { return e6.map(n17).join(" "); } var init_chunk_IPJHKYVM = __esm({ - "node_modules/just-bash/dist/bundle/chunks/chunk-IPJHKYVM.js"() { + "../node_modules/just-bash/dist/bundle/chunks/chunk-IPJHKYVM.js"() { } }); -// node_modules/just-bash/dist/bundle/chunks/chunk-OJDRYQWQ.js +// ../node_modules/just-bash/dist/bundle/chunks/chunk-OJDRYQWQ.js function r5(e6) { return Object.assign(/* @__PURE__ */ Object.create(null), Object.fromEntries(e6)); } @@ -10553,11 +10553,11 @@ function c4(...e6) { return Object.assign(/* @__PURE__ */ Object.create(null), ...e6); } var init_chunk_OJDRYQWQ = __esm({ - "node_modules/just-bash/dist/bundle/chunks/chunk-OJDRYQWQ.js"() { + "../node_modules/just-bash/dist/bundle/chunks/chunk-OJDRYQWQ.js"() { } }); -// node_modules/just-bash/dist/bundle/chunks/chunk-24IMIIXA.js +// ../node_modules/just-bash/dist/bundle/chunks/chunk-24IMIIXA.js function a5(t6, e6, n24) { if (!t6 || _2.isInSandboxedContext()) return; let r10 = `${e6} ${n24} attempted outside defense context`; @@ -10573,12 +10573,12 @@ function d4(t6, e6, n24, r10) { return t6 ? _2.bindCurrentContext(o14) : o14; } var init_chunk_24IMIIXA = __esm({ - "node_modules/just-bash/dist/bundle/chunks/chunk-24IMIIXA.js"() { + "../node_modules/just-bash/dist/bundle/chunks/chunk-24IMIIXA.js"() { init_chunk_5QMZ5MUS(); } }); -// node_modules/just-bash/dist/bundle/chunks/chunk-3THT3N7L.js +// ../node_modules/just-bash/dist/bundle/chunks/chunk-3THT3N7L.js function a6(r10, s10, t6) { if (!r10) return r10; let e6 = r10.replace(/\n\s+at\s.*/g, ""); @@ -10591,20 +10591,20 @@ function i5(r10) { return a6(r10, true, true); } var init_chunk_3THT3N7L = __esm({ - "node_modules/just-bash/dist/bundle/chunks/chunk-3THT3N7L.js"() { + "../node_modules/just-bash/dist/bundle/chunks/chunk-3THT3N7L.js"() { } }); -// node_modules/just-bash/dist/bundle/chunks/chunk-44UOCSGV.js +// ../node_modules/just-bash/dist/bundle/chunks/chunk-44UOCSGV.js function n20(e6) { return e6 instanceof Error ? e6.message : String(e6); } var init_chunk_44UOCSGV = __esm({ - "node_modules/just-bash/dist/bundle/chunks/chunk-44UOCSGV.js"() { + "../node_modules/just-bash/dist/bundle/chunks/chunk-44UOCSGV.js"() { } }); -// node_modules/just-bash/dist/bundle/chunks/chunk-GCTKCWKD.js +// ../node_modules/just-bash/dist/bundle/chunks/chunk-GCTKCWKD.js function n21(r10) { let s10 = "", e6 = 0; for (; e6 < r10.length; ) if (r10[e6] === "\\") { @@ -10699,7 +10699,7 @@ function n21(r10) { } var c5, f3; var init_chunk_GCTKCWKD = __esm({ - "node_modules/just-bash/dist/bundle/chunks/chunk-GCTKCWKD.js"() { + "../node_modules/just-bash/dist/bundle/chunks/chunk-GCTKCWKD.js"() { c5 = { name: "echo", async execute(r10, s10) { let e6 = false, o14 = s10.xpgEcho ?? false, a15 = 0; for (; a15 < r10.length; ) { @@ -10722,20 +10722,20 @@ var init_chunk_GCTKCWKD = __esm({ } }); -// node_modules/just-bash/dist/bundle/chunks/echo-O45JWWI2.js +// ../node_modules/just-bash/dist/bundle/chunks/echo-O45JWWI2.js var echo_O45JWWI2_exports = {}; __export(echo_O45JWWI2_exports, { echoCommand: () => c5, flagsForFuzzing: () => f3 }); var init_echo_O45JWWI2 = __esm({ - "node_modules/just-bash/dist/bundle/chunks/echo-O45JWWI2.js"() { + "../node_modules/just-bash/dist/bundle/chunks/echo-O45JWWI2.js"() { init_chunk_GCTKCWKD(); init_chunk_DXB73IDG(); } }); -// node_modules/just-bash/dist/bundle/chunks/chunk-7L36YK2X.js +// ../node_modules/just-bash/dist/bundle/chunks/chunk-7L36YK2X.js async function y3(t6, n24, s10) { let { cmdName: r10, allowStdinMarker: f11 = true, stopOnError: a15 = false, batchSize: u12 = 100 } = s10; if (n24.length === 0) return { files: [{ filename: "", content: t6.stdin }], stderr: "", exitCode: 0 }; @@ -10762,11 +10762,11 @@ async function b4(t6, n24, s10) { return r10.exitCode !== 0 ? { ok: false, error: { stdout: "", stderr: r10.stderr, exitCode: r10.exitCode } } : { ok: true, content: r10.files.map((a15) => a15.content).join("") }; } var init_chunk_7L36YK2X = __esm({ - "node_modules/just-bash/dist/bundle/chunks/chunk-7L36YK2X.js"() { + "../node_modules/just-bash/dist/bundle/chunks/chunk-7L36YK2X.js"() { } }); -// node_modules/just-bash/dist/bundle/chunks/chunk-74CEPOFO.js +// ../node_modules/just-bash/dist/bundle/chunks/chunk-74CEPOFO.js function s2(t6) { let e6 = `${t6.name} - ${t6.summary} @@ -10815,11 +10815,11 @@ function r6(t6, e6) { `, exitCode: 1 }; } var init_chunk_74CEPOFO = __esm({ - "node_modules/just-bash/dist/bundle/chunks/chunk-74CEPOFO.js"() { + "../node_modules/just-bash/dist/bundle/chunks/chunk-74CEPOFO.js"() { } }); -// node_modules/just-bash/dist/bundle/chunks/chunk-HWKDQ44K.js +// ../node_modules/just-bash/dist/bundle/chunks/chunk-HWKDQ44K.js function x6(a15, i11, d15) { let g17 = /* @__PURE__ */ new Map(), h18 = /* @__PURE__ */ new Map(); for (let [t6, e6] of Object.entries(d15)) { @@ -10876,12 +10876,12 @@ function x6(a15, i11, d15) { return { ok: true, result: { flags: s10, positional: b26 } }; } var init_chunk_HWKDQ44K = __esm({ - "node_modules/just-bash/dist/bundle/chunks/chunk-HWKDQ44K.js"() { + "../node_modules/just-bash/dist/bundle/chunks/chunk-HWKDQ44K.js"() { init_chunk_74CEPOFO(); } }); -// node_modules/just-bash/dist/bundle/chunks/chunk-TXBZCHCQ.js +// ../node_modules/just-bash/dist/bundle/chunks/chunk-TXBZCHCQ.js function y4(n24, s10) { let e6 = n24.split(` `), r10 = n24.endsWith(` @@ -10892,7 +10892,7 @@ function y4(n24, s10) { } var b5, g3, F3, w4; var init_chunk_TXBZCHCQ = __esm({ - "node_modules/just-bash/dist/bundle/chunks/chunk-TXBZCHCQ.js"() { + "../node_modules/just-bash/dist/bundle/chunks/chunk-TXBZCHCQ.js"() { init_chunk_7L36YK2X(); init_chunk_HWKDQ44K(); init_chunk_74CEPOFO(); @@ -10914,14 +10914,14 @@ var init_chunk_TXBZCHCQ = __esm({ } }); -// node_modules/just-bash/dist/bundle/chunks/cat-RDUMLXKC.js +// ../node_modules/just-bash/dist/bundle/chunks/cat-RDUMLXKC.js var cat_RDUMLXKC_exports = {}; __export(cat_RDUMLXKC_exports, { catCommand: () => F3, flagsForFuzzing: () => w4 }); var init_cat_RDUMLXKC = __esm({ - "node_modules/just-bash/dist/bundle/chunks/cat-RDUMLXKC.js"() { + "../node_modules/just-bash/dist/bundle/chunks/cat-RDUMLXKC.js"() { init_chunk_TXBZCHCQ(); init_chunk_7L36YK2X(); init_chunk_HWKDQ44K(); @@ -10930,7 +10930,7 @@ var init_cat_RDUMLXKC = __esm({ } }); -// node_modules/just-bash/dist/bundle/chunks/chunk-EEXR5ZDP.js +// ../node_modules/just-bash/dist/bundle/chunks/chunk-EEXR5ZDP.js function i6(t6, l7, e6) { let c15 = t6; e6 >= 0 && c15.length > e6 && (c15 = c15.slice(0, e6)); @@ -11021,13 +11021,13 @@ function r7(t6) { return l7; } var init_chunk_EEXR5ZDP = __esm({ - "node_modules/just-bash/dist/bundle/chunks/chunk-EEXR5ZDP.js"() { + "../node_modules/just-bash/dist/bundle/chunks/chunk-EEXR5ZDP.js"() { } }); -// node_modules/sprintf-js/src/sprintf.js +// ../node_modules/sprintf-js/src/sprintf.js var require_sprintf = __commonJS({ - "node_modules/sprintf-js/src/sprintf.js"(exports) { + "../node_modules/sprintf-js/src/sprintf.js"(exports) { !(function() { "use strict"; var re9 = { @@ -11228,7 +11228,7 @@ var require_sprintf = __commonJS({ } }); -// node_modules/just-bash/dist/bundle/chunks/chunk-T56QNPHK.js +// ../node_modules/just-bash/dist/bundle/chunks/chunk-T56QNPHK.js function P3(t6, s10, r10) { let e6 = new Date(s10 * 1e3), a15 = "", n24 = 0; for (; n24 < t6.length; ) if (t6[n24] === "%" && n24 + 1 < t6.length) { @@ -11707,7 +11707,7 @@ function ae2(t6) { } var import_sprintf_js, X3, de2, d5, he2; var init_chunk_T56QNPHK = __esm({ - "node_modules/just-bash/dist/bundle/chunks/chunk-T56QNPHK.js"() { + "../node_modules/just-bash/dist/bundle/chunks/chunk-T56QNPHK.js"() { init_chunk_EEXR5ZDP(); init_chunk_GFQRA5P5(); init_chunk_44UOCSGV(); @@ -11766,14 +11766,14 @@ var init_chunk_T56QNPHK = __esm({ } }); -// node_modules/just-bash/dist/bundle/chunks/printf-CX64KX2P.js +// ../node_modules/just-bash/dist/bundle/chunks/printf-CX64KX2P.js var printf_CX64KX2P_exports = {}; __export(printf_CX64KX2P_exports, { flagsForFuzzing: () => he2, printfCommand: () => de2 }); var init_printf_CX64KX2P = __esm({ - "node_modules/just-bash/dist/bundle/chunks/printf-CX64KX2P.js"() { + "../node_modules/just-bash/dist/bundle/chunks/printf-CX64KX2P.js"() { init_chunk_T56QNPHK(); init_chunk_EEXR5ZDP(); init_chunk_GFQRA5P5(); @@ -11783,10 +11783,10 @@ var init_printf_CX64KX2P = __esm({ } }); -// node_modules/balanced-match/dist/esm/index.js +// ../node_modules/balanced-match/dist/esm/index.js var balanced, maybeMatch, range; var init_esm = __esm({ - "node_modules/balanced-match/dist/esm/index.js"() { + "../node_modules/balanced-match/dist/esm/index.js"() { balanced = (a15, b26, str) => { const ma3 = a15 instanceof RegExp ? maybeMatch(a15, str) : a15; const mb = b26 instanceof RegExp ? maybeMatch(b26, str) : b26; @@ -11841,7 +11841,7 @@ var init_esm = __esm({ } }); -// node_modules/brace-expansion/dist/esm/index.js +// ../node_modules/brace-expansion/dist/esm/index.js function numeric(str) { return !isNaN(str) ? parseInt(str, 10) : str.charCodeAt(0); } @@ -11986,7 +11986,7 @@ function expand_(str, max, isTop) { } var escSlash, escOpen, escClose, escComma, escPeriod, escSlashPattern, escOpenPattern, escClosePattern, escCommaPattern, escPeriodPattern, slashPattern, openPattern, closePattern, commaPattern, periodPattern, EXPANSION_MAX; var init_esm2 = __esm({ - "node_modules/brace-expansion/dist/esm/index.js"() { + "../node_modules/brace-expansion/dist/esm/index.js"() { init_esm(); escSlash = "\0SLASH" + Math.random() + "\0"; escOpen = "\0OPEN" + Math.random() + "\0"; @@ -12007,10 +12007,10 @@ var init_esm2 = __esm({ } }); -// node_modules/minimatch/dist/esm/assert-valid-pattern.js +// ../node_modules/minimatch/dist/esm/assert-valid-pattern.js var MAX_PATTERN_LENGTH, assertValidPattern; var init_assert_valid_pattern = __esm({ - "node_modules/minimatch/dist/esm/assert-valid-pattern.js"() { + "../node_modules/minimatch/dist/esm/assert-valid-pattern.js"() { MAX_PATTERN_LENGTH = 1024 * 64; assertValidPattern = (pattern) => { if (typeof pattern !== "string") { @@ -12023,10 +12023,10 @@ var init_assert_valid_pattern = __esm({ } }); -// node_modules/minimatch/dist/esm/brace-expressions.js +// ../node_modules/minimatch/dist/esm/brace-expressions.js var posixClasses, braceEscape, regexpEscape, rangesToString, parseClass; var init_brace_expressions = __esm({ - "node_modules/minimatch/dist/esm/brace-expressions.js"() { + "../node_modules/minimatch/dist/esm/brace-expressions.js"() { posixClasses = { "[:alnum:]": ["\\p{L}\\p{Nl}\\p{Nd}", true], "[:alpha:]": ["\\p{L}\\p{Nl}", true], @@ -12137,10 +12137,10 @@ var init_brace_expressions = __esm({ } }); -// node_modules/minimatch/dist/esm/unescape.js +// ../node_modules/minimatch/dist/esm/unescape.js var unescape; var init_unescape = __esm({ - "node_modules/minimatch/dist/esm/unescape.js"() { + "../node_modules/minimatch/dist/esm/unescape.js"() { unescape = (s10, { windowsPathsNoEscape = false, magicalBraces = true } = {}) => { if (magicalBraces) { return windowsPathsNoEscape ? s10.replace(/\[([^/\\])\]/g, "$1") : s10.replace(/((?!\\).|^)\[([^/\\])\]/g, "$1$2").replace(/\\([^/])/g, "$1"); @@ -12150,10 +12150,10 @@ var init_unescape = __esm({ } }); -// node_modules/minimatch/dist/esm/ast.js +// ../node_modules/minimatch/dist/esm/ast.js var _a, types, isExtglobType, isExtglobAST, adoptionMap, adoptionWithSpaceMap, adoptionAnyMap, usurpMap, startNoTraversal, startNoDot, addPatternStart, justDots, reSpecials, regExpEscape, qmark, star, starNoEmpty, ID, AST; var init_ast = __esm({ - "node_modules/minimatch/dist/esm/ast.js"() { + "../node_modules/minimatch/dist/esm/ast.js"() { init_brace_expressions(); init_unescape(); types = /* @__PURE__ */ new Set(["!", "?", "+", "*", "@"]); @@ -12800,10 +12800,10 @@ var init_ast = __esm({ } }); -// node_modules/minimatch/dist/esm/escape.js +// ../node_modules/minimatch/dist/esm/escape.js var escape; var init_escape = __esm({ - "node_modules/minimatch/dist/esm/escape.js"() { + "../node_modules/minimatch/dist/esm/escape.js"() { escape = (s10, { windowsPathsNoEscape = false, magicalBraces = false } = {}) => { if (magicalBraces) { return windowsPathsNoEscape ? s10.replace(/[?*()[\]{}]/g, "[$&]") : s10.replace(/[?*()[\]\\{}]/g, "\\$&"); @@ -12813,10 +12813,10 @@ var init_escape = __esm({ } }); -// node_modules/minimatch/dist/esm/index.js +// ../node_modules/minimatch/dist/esm/index.js var minimatch, starDotExtRE, starDotExtTest, starDotExtTestDot, starDotExtTestNocase, starDotExtTestNocaseDot, starDotStarRE, starDotStarTest, starDotStarTestDot, dotStarRE, dotStarTest, starRE, starTest, starTestDot, qmarksRE, qmarksTestNocase, qmarksTestNocaseDot, qmarksTestDot, qmarksTest, qmarksTestNoExt, qmarksTestNoExtDot, defaultPlatform, path, sep, GLOBSTAR, qmark2, star2, twoStarDot, twoStarNoDot, filter, ext, defaults, braceExpand, makeRe, match, globMagic, regExpEscape2, Minimatch; var init_esm3 = __esm({ - "node_modules/minimatch/dist/esm/index.js"() { + "../node_modules/minimatch/dist/esm/index.js"() { init_esm2(); init_assert_valid_pattern(); init_ast(); @@ -13635,7 +13635,7 @@ var init_esm3 = __esm({ } }); -// node_modules/just-bash/dist/bundle/chunks/chunk-V7TAPXDL.js +// ../node_modules/just-bash/dist/bundle/chunks/chunk-V7TAPXDL.js function M3(n24) { if (n24 < 1024) return String(n24); if (n24 < 1024 * 1024) { @@ -13832,7 +13832,7 @@ async function O3(n24, s10, c15, w20, S18, y21, P21, b26 = false, g17 = false, v } var k4, G3, Z4, q5; var init_chunk_V7TAPXDL = __esm({ - "node_modules/just-bash/dist/bundle/chunks/chunk-V7TAPXDL.js"() { + "../node_modules/just-bash/dist/bundle/chunks/chunk-V7TAPXDL.js"() { init_chunk_HWKDQ44K(); init_chunk_74CEPOFO(); init_esm3(); @@ -13885,14 +13885,14 @@ var init_chunk_V7TAPXDL = __esm({ } }); -// node_modules/just-bash/dist/bundle/chunks/ls-KSXFZCWH.js +// ../node_modules/just-bash/dist/bundle/chunks/ls-KSXFZCWH.js var ls_KSXFZCWH_exports = {}; __export(ls_KSXFZCWH_exports, { flagsForFuzzing: () => q5, lsCommand: () => Z4 }); var init_ls_KSXFZCWH = __esm({ - "node_modules/just-bash/dist/bundle/chunks/ls-KSXFZCWH.js"() { + "../node_modules/just-bash/dist/bundle/chunks/ls-KSXFZCWH.js"() { init_chunk_V7TAPXDL(); init_chunk_HWKDQ44K(); init_chunk_74CEPOFO(); @@ -13900,10 +13900,10 @@ var init_ls_KSXFZCWH = __esm({ } }); -// node_modules/just-bash/dist/bundle/chunks/chunk-MDDMCKUK.js +// ../node_modules/just-bash/dist/bundle/chunks/chunk-MDDMCKUK.js var p5, b6, h5; var init_chunk_MDDMCKUK = __esm({ - "node_modules/just-bash/dist/bundle/chunks/chunk-MDDMCKUK.js"() { + "../node_modules/just-bash/dist/bundle/chunks/chunk-MDDMCKUK.js"() { init_chunk_3THT3N7L(); init_chunk_HWKDQ44K(); init_chunk_44UOCSGV(); @@ -13932,14 +13932,14 @@ var init_chunk_MDDMCKUK = __esm({ } }); -// node_modules/just-bash/dist/bundle/chunks/mkdir-TDEMSB6C.js +// ../node_modules/just-bash/dist/bundle/chunks/mkdir-TDEMSB6C.js var mkdir_TDEMSB6C_exports = {}; __export(mkdir_TDEMSB6C_exports, { flagsForFuzzing: () => h5, mkdirCommand: () => b6 }); var init_mkdir_TDEMSB6C = __esm({ - "node_modules/just-bash/dist/bundle/chunks/mkdir-TDEMSB6C.js"() { + "../node_modules/just-bash/dist/bundle/chunks/mkdir-TDEMSB6C.js"() { init_chunk_MDDMCKUK(); init_chunk_3THT3N7L(); init_chunk_HWKDQ44K(); @@ -13949,7 +13949,7 @@ var init_mkdir_TDEMSB6C = __esm({ } }); -// node_modules/just-bash/dist/bundle/chunks/chunk-OCS6LSEM.js +// ../node_modules/just-bash/dist/bundle/chunks/chunk-OCS6LSEM.js async function b7(t6, r10, e6, a15) { let o14 = "", s10 = "", n24 = t6.fs.resolvePath(t6.cwd, r10), i11 = await v7(t6, n24, r10, a15); if (o14 += i11.stdout, s10 += i11.stderr, i11.exitCode !== 0) return { stdout: o14, stderr: s10, exitCode: i11.exitCode }; @@ -13989,7 +13989,7 @@ function C3(t6) { } var x7, y5, D3, $4; var init_chunk_OCS6LSEM = __esm({ - "node_modules/just-bash/dist/bundle/chunks/chunk-OCS6LSEM.js"() { + "../node_modules/just-bash/dist/bundle/chunks/chunk-OCS6LSEM.js"() { init_chunk_HWKDQ44K(); init_chunk_44UOCSGV(); x7 = `Usage: rmdir [-pv] DIRECTORY... @@ -14018,14 +14018,14 @@ Options: } }); -// node_modules/just-bash/dist/bundle/chunks/rmdir-XTQXT7RK.js +// ../node_modules/just-bash/dist/bundle/chunks/rmdir-XTQXT7RK.js var rmdir_XTQXT7RK_exports = {}; __export(rmdir_XTQXT7RK_exports, { flagsForFuzzing: () => $4, rmdirCommand: () => D3 }); var init_rmdir_XTQXT7RK = __esm({ - "node_modules/just-bash/dist/bundle/chunks/rmdir-XTQXT7RK.js"() { + "../node_modules/just-bash/dist/bundle/chunks/rmdir-XTQXT7RK.js"() { init_chunk_OCS6LSEM(); init_chunk_HWKDQ44K(); init_chunk_44UOCSGV(); @@ -14034,7 +14034,7 @@ var init_rmdir_XTQXT7RK = __esm({ } }); -// node_modules/just-bash/dist/bundle/chunks/chunk-OCLXQMOG.js +// ../node_modules/just-bash/dist/bundle/chunks/chunk-OCLXQMOG.js function h6(s10) { let a15 = s10.replace(/\//g, "-"), r10 = new Date(a15); if (!Number.isNaN(r10.getTime())) return r10; @@ -14052,7 +14052,7 @@ function h6(s10) { } var N3, b8; var init_chunk_OCLXQMOG = __esm({ - "node_modules/just-bash/dist/bundle/chunks/chunk-OCLXQMOG.js"() { + "../node_modules/just-bash/dist/bundle/chunks/chunk-OCLXQMOG.js"() { init_chunk_44UOCSGV(); init_chunk_74CEPOFO(); N3 = { name: "touch", async execute(s10, a15) { @@ -14111,14 +14111,14 @@ var init_chunk_OCLXQMOG = __esm({ } }); -// node_modules/just-bash/dist/bundle/chunks/touch-DX2IJOQ4.js +// ../node_modules/just-bash/dist/bundle/chunks/touch-DX2IJOQ4.js var touch_DX2IJOQ4_exports = {}; __export(touch_DX2IJOQ4_exports, { flagsForFuzzing: () => b8, touchCommand: () => N3 }); var init_touch_DX2IJOQ4 = __esm({ - "node_modules/just-bash/dist/bundle/chunks/touch-DX2IJOQ4.js"() { + "../node_modules/just-bash/dist/bundle/chunks/touch-DX2IJOQ4.js"() { init_chunk_OCLXQMOG(); init_chunk_44UOCSGV(); init_chunk_74CEPOFO(); @@ -14126,10 +14126,10 @@ var init_touch_DX2IJOQ4 = __esm({ } }); -// node_modules/just-bash/dist/bundle/chunks/chunk-MIZPJHVH.js +// ../node_modules/just-bash/dist/bundle/chunks/chunk-MIZPJHVH.js var v8, E3, $5; var init_chunk_MIZPJHVH = __esm({ - "node_modules/just-bash/dist/bundle/chunks/chunk-MIZPJHVH.js"() { + "../node_modules/just-bash/dist/bundle/chunks/chunk-MIZPJHVH.js"() { init_chunk_3THT3N7L(); init_chunk_HWKDQ44K(); init_chunk_44UOCSGV(); @@ -14165,14 +14165,14 @@ var init_chunk_MIZPJHVH = __esm({ } }); -// node_modules/just-bash/dist/bundle/chunks/rm-RTZG23RL.js +// ../node_modules/just-bash/dist/bundle/chunks/rm-RTZG23RL.js var rm_RTZG23RL_exports = {}; __export(rm_RTZG23RL_exports, { flagsForFuzzing: () => $5, rmCommand: () => E3 }); var init_rm_RTZG23RL = __esm({ - "node_modules/just-bash/dist/bundle/chunks/rm-RTZG23RL.js"() { + "../node_modules/just-bash/dist/bundle/chunks/rm-RTZG23RL.js"() { init_chunk_MIZPJHVH(); init_chunk_3THT3N7L(); init_chunk_HWKDQ44K(); @@ -14182,10 +14182,10 @@ var init_rm_RTZG23RL = __esm({ } }); -// node_modules/just-bash/dist/bundle/chunks/chunk-NUYSJFDK.js +// ../node_modules/just-bash/dist/bundle/chunks/chunk-NUYSJFDK.js var D4, E4, A, F4; var init_chunk_NUYSJFDK = __esm({ - "node_modules/just-bash/dist/bundle/chunks/chunk-NUYSJFDK.js"() { + "../node_modules/just-bash/dist/bundle/chunks/chunk-NUYSJFDK.js"() { init_chunk_HWKDQ44K(); init_chunk_44UOCSGV(); init_chunk_74CEPOFO(); @@ -14235,14 +14235,14 @@ var init_chunk_NUYSJFDK = __esm({ } }); -// node_modules/just-bash/dist/bundle/chunks/cp-XOYR4ABJ.js +// ../node_modules/just-bash/dist/bundle/chunks/cp-XOYR4ABJ.js var cp_XOYR4ABJ_exports = {}; __export(cp_XOYR4ABJ_exports, { cpCommand: () => A, flagsForFuzzing: () => F4 }); var init_cp_XOYR4ABJ = __esm({ - "node_modules/just-bash/dist/bundle/chunks/cp-XOYR4ABJ.js"() { + "../node_modules/just-bash/dist/bundle/chunks/cp-XOYR4ABJ.js"() { init_chunk_NUYSJFDK(); init_chunk_HWKDQ44K(); init_chunk_44UOCSGV(); @@ -14251,10 +14251,10 @@ var init_cp_XOYR4ABJ = __esm({ } }); -// node_modules/just-bash/dist/bundle/chunks/chunk-A4JSPFCI.js +// ../node_modules/just-bash/dist/bundle/chunks/chunk-A4JSPFCI.js var C4, P4, O4, x8; var init_chunk_A4JSPFCI = __esm({ - "node_modules/just-bash/dist/bundle/chunks/chunk-A4JSPFCI.js"() { + "../node_modules/just-bash/dist/bundle/chunks/chunk-A4JSPFCI.js"() { init_chunk_HWKDQ44K(); init_chunk_44UOCSGV(); init_chunk_74CEPOFO(); @@ -14302,14 +14302,14 @@ var init_chunk_A4JSPFCI = __esm({ } }); -// node_modules/just-bash/dist/bundle/chunks/mv-Z6MORUFL.js +// ../node_modules/just-bash/dist/bundle/chunks/mv-Z6MORUFL.js var mv_Z6MORUFL_exports = {}; __export(mv_Z6MORUFL_exports, { flagsForFuzzing: () => x8, mvCommand: () => O4 }); var init_mv_Z6MORUFL = __esm({ - "node_modules/just-bash/dist/bundle/chunks/mv-Z6MORUFL.js"() { + "../node_modules/just-bash/dist/bundle/chunks/mv-Z6MORUFL.js"() { init_chunk_A4JSPFCI(); init_chunk_HWKDQ44K(); init_chunk_44UOCSGV(); @@ -14318,10 +14318,10 @@ var init_mv_Z6MORUFL = __esm({ } }); -// node_modules/just-bash/dist/bundle/chunks/chunk-PBXLG62G.js +// ../node_modules/just-bash/dist/bundle/chunks/chunk-PBXLG62G.js var y6, v9, $6; var init_chunk_PBXLG62G = __esm({ - "node_modules/just-bash/dist/bundle/chunks/chunk-PBXLG62G.js"() { + "../node_modules/just-bash/dist/bundle/chunks/chunk-PBXLG62G.js"() { init_chunk_3THT3N7L(); init_chunk_74CEPOFO(); y6 = { name: "ln", summary: "make links between files", usage: "ln [OPTIONS] TARGET LINK_NAME", options: ["-s create a symbolic link instead of a hard link", "-f remove existing destination files", "-n treat LINK_NAME as a normal file if it is a symbolic link to a directory", "-v print name of each linked file", " --help display this help and exit"] }; @@ -14374,14 +14374,14 @@ var init_chunk_PBXLG62G = __esm({ } }); -// node_modules/just-bash/dist/bundle/chunks/ln-4TRFBYAT.js +// ../node_modules/just-bash/dist/bundle/chunks/ln-4TRFBYAT.js var ln_4TRFBYAT_exports = {}; __export(ln_4TRFBYAT_exports, { flagsForFuzzing: () => $6, lnCommand: () => v9 }); var init_ln_4TRFBYAT = __esm({ - "node_modules/just-bash/dist/bundle/chunks/ln-4TRFBYAT.js"() { + "../node_modules/just-bash/dist/bundle/chunks/ln-4TRFBYAT.js"() { init_chunk_PBXLG62G(); init_chunk_3THT3N7L(); init_chunk_74CEPOFO(); @@ -14389,7 +14389,7 @@ var init_ln_4TRFBYAT = __esm({ } }); -// node_modules/just-bash/dist/bundle/chunks/chunk-4GTNDTRF.js +// ../node_modules/just-bash/dist/bundle/chunks/chunk-4GTNDTRF.js async function y7(s10, a15, e6, c15, i11) { let n24 = "", l7 = await s10.fs.readdir(a15); for (let r10 of l7) { @@ -14428,7 +14428,7 @@ function p6(s10, a15 = 420) { } var R3, C5, O5; var init_chunk_4GTNDTRF = __esm({ - "node_modules/just-bash/dist/bundle/chunks/chunk-4GTNDTRF.js"() { + "../node_modules/just-bash/dist/bundle/chunks/chunk-4GTNDTRF.js"() { init_chunk_74CEPOFO(); R3 = { name: "chmod", summary: "change file mode bits", usage: "chmod [OPTIONS] MODE FILE...", options: ["-R change files recursively", "-v output a diagnostic for every file processed", " --help display this help and exit"] }; C5 = { name: "chmod", async execute(s10, a15) { @@ -14488,24 +14488,24 @@ var init_chunk_4GTNDTRF = __esm({ } }); -// node_modules/just-bash/dist/bundle/chunks/chmod-SYMGL4JA.js +// ../node_modules/just-bash/dist/bundle/chunks/chmod-SYMGL4JA.js var chmod_SYMGL4JA_exports = {}; __export(chmod_SYMGL4JA_exports, { chmodCommand: () => C5, flagsForFuzzing: () => O5 }); var init_chmod_SYMGL4JA = __esm({ - "node_modules/just-bash/dist/bundle/chunks/chmod-SYMGL4JA.js"() { + "../node_modules/just-bash/dist/bundle/chunks/chmod-SYMGL4JA.js"() { init_chunk_4GTNDTRF(); init_chunk_74CEPOFO(); init_chunk_DXB73IDG(); } }); -// node_modules/just-bash/dist/bundle/chunks/chunk-A4HU7SVR.js +// ../node_modules/just-bash/dist/bundle/chunks/chunk-A4HU7SVR.js var o5, f4; var init_chunk_A4HU7SVR = __esm({ - "node_modules/just-bash/dist/bundle/chunks/chunk-A4HU7SVR.js"() { + "../node_modules/just-bash/dist/bundle/chunks/chunk-A4HU7SVR.js"() { o5 = { name: "pwd", async execute(l7, a15) { let t6 = false; for (let e6 of l7) if (e6 === "-P") t6 = true; @@ -14526,23 +14526,23 @@ var init_chunk_A4HU7SVR = __esm({ } }); -// node_modules/just-bash/dist/bundle/chunks/pwd-D4OZ7N27.js +// ../node_modules/just-bash/dist/bundle/chunks/pwd-D4OZ7N27.js var pwd_D4OZ7N27_exports = {}; __export(pwd_D4OZ7N27_exports, { flagsForFuzzing: () => f4, pwdCommand: () => o5 }); var init_pwd_D4OZ7N27 = __esm({ - "node_modules/just-bash/dist/bundle/chunks/pwd-D4OZ7N27.js"() { + "../node_modules/just-bash/dist/bundle/chunks/pwd-D4OZ7N27.js"() { init_chunk_A4HU7SVR(); init_chunk_DXB73IDG(); } }); -// node_modules/just-bash/dist/bundle/chunks/chunk-HJWBQKYG.js +// ../node_modules/just-bash/dist/bundle/chunks/chunk-HJWBQKYG.js var m6, y8, w5; var init_chunk_HJWBQKYG = __esm({ - "node_modules/just-bash/dist/bundle/chunks/chunk-HJWBQKYG.js"() { + "../node_modules/just-bash/dist/bundle/chunks/chunk-HJWBQKYG.js"() { init_chunk_74CEPOFO(); m6 = { name: "readlink", summary: "print resolved symbolic links or canonical file names", usage: "readlink [OPTIONS] FILE...", options: ["-f canonicalize by following every symlink in every component of the given name recursively", " --help display this help and exit"] }; y8 = { name: "readlink", async execute(a15, l7) { @@ -14596,21 +14596,21 @@ var init_chunk_HJWBQKYG = __esm({ } }); -// node_modules/just-bash/dist/bundle/chunks/readlink-MI4GCHJF.js +// ../node_modules/just-bash/dist/bundle/chunks/readlink-MI4GCHJF.js var readlink_MI4GCHJF_exports = {}; __export(readlink_MI4GCHJF_exports, { flagsForFuzzing: () => w5, readlinkCommand: () => y8 }); var init_readlink_MI4GCHJF = __esm({ - "node_modules/just-bash/dist/bundle/chunks/readlink-MI4GCHJF.js"() { + "../node_modules/just-bash/dist/bundle/chunks/readlink-MI4GCHJF.js"() { init_chunk_HJWBQKYG(); init_chunk_74CEPOFO(); init_chunk_DXB73IDG(); } }); -// node_modules/just-bash/dist/bundle/chunks/chunk-HDQ56CKY.js +// ../node_modules/just-bash/dist/bundle/chunks/chunk-HDQ56CKY.js function I3(t6, r10) { let i11 = 10, s10 = null, o14 = false, l7 = false, n24 = false, u12 = []; for (let f11 = 0; f11 < t6.length; f11++) { @@ -14705,15 +14705,15 @@ function g4(t6, r10, i11, s10) { `; } var init_chunk_HDQ56CKY = __esm({ - "node_modules/just-bash/dist/bundle/chunks/chunk-HDQ56CKY.js"() { + "../node_modules/just-bash/dist/bundle/chunks/chunk-HDQ56CKY.js"() { init_chunk_74CEPOFO(); } }); -// node_modules/just-bash/dist/bundle/chunks/chunk-64BAICW3.js +// ../node_modules/just-bash/dist/bundle/chunks/chunk-64BAICW3.js var f5, m7, g5; var init_chunk_64BAICW3 = __esm({ - "node_modules/just-bash/dist/bundle/chunks/chunk-64BAICW3.js"() { + "../node_modules/just-bash/dist/bundle/chunks/chunk-64BAICW3.js"() { init_chunk_HDQ56CKY(); init_chunk_74CEPOFO(); f5 = { name: "head", summary: "output the first part of files", usage: "head [OPTION]... [FILE]...", options: ["-c, --bytes=NUM print the first NUM bytes", "-n, --lines=NUM print the first NUM lines (default 10)", "-q, --quiet never print headers giving file names", "-v, --verbose always print headers giving file names", " --help display this help and exit"] }; @@ -14728,14 +14728,14 @@ var init_chunk_64BAICW3 = __esm({ } }); -// node_modules/just-bash/dist/bundle/chunks/head-HT2B6D2J.js +// ../node_modules/just-bash/dist/bundle/chunks/head-HT2B6D2J.js var head_HT2B6D2J_exports = {}; __export(head_HT2B6D2J_exports, { flagsForFuzzing: () => g5, headCommand: () => m7 }); var init_head_HT2B6D2J = __esm({ - "node_modules/just-bash/dist/bundle/chunks/head-HT2B6D2J.js"() { + "../node_modules/just-bash/dist/bundle/chunks/head-HT2B6D2J.js"() { init_chunk_64BAICW3(); init_chunk_HDQ56CKY(); init_chunk_74CEPOFO(); @@ -14743,10 +14743,10 @@ var init_head_HT2B6D2J = __esm({ } }); -// node_modules/just-bash/dist/bundle/chunks/chunk-DCAAORBQ.js +// ../node_modules/just-bash/dist/bundle/chunks/chunk-DCAAORBQ.js var m8, d6, c6; var init_chunk_DCAAORBQ = __esm({ - "node_modules/just-bash/dist/bundle/chunks/chunk-DCAAORBQ.js"() { + "../node_modules/just-bash/dist/bundle/chunks/chunk-DCAAORBQ.js"() { init_chunk_HDQ56CKY(); init_chunk_74CEPOFO(); m8 = { name: "tail", summary: "output the last part of files", usage: "tail [OPTION]... [FILE]...", options: ["-c, --bytes=NUM print the last NUM bytes", "-n, --lines=NUM print the last NUM lines (default 10)", "-n +NUM print starting from line NUM", "-q, --quiet never print headers giving file names", "-v, --verbose always print headers giving file names", " --help display this help and exit"] }; @@ -14761,14 +14761,14 @@ var init_chunk_DCAAORBQ = __esm({ } }); -// node_modules/just-bash/dist/bundle/chunks/tail-S5ULNTJU.js +// ../node_modules/just-bash/dist/bundle/chunks/tail-S5ULNTJU.js var tail_S5ULNTJU_exports = {}; __export(tail_S5ULNTJU_exports, { flagsForFuzzing: () => c6, tailCommand: () => d6 }); var init_tail_S5ULNTJU = __esm({ - "node_modules/just-bash/dist/bundle/chunks/tail-S5ULNTJU.js"() { + "../node_modules/just-bash/dist/bundle/chunks/tail-S5ULNTJU.js"() { init_chunk_DCAAORBQ(); init_chunk_HDQ56CKY(); init_chunk_74CEPOFO(); @@ -14776,7 +14776,7 @@ var init_tail_S5ULNTJU = __esm({ } }); -// node_modules/just-bash/dist/bundle/chunks/chunk-GXVXFKBA.js +// ../node_modules/just-bash/dist/bundle/chunks/chunk-GXVXFKBA.js function C6(a15) { let c15 = a15.length, n24 = 0, o14 = 0, e6 = false; for (let s10 = 0; s10 < c15; s10++) { @@ -14794,7 +14794,7 @@ function w6(a15, c15, n24, o14, e6, s10) { } var $8, H3, E5, I4; var init_chunk_GXVXFKBA = __esm({ - "node_modules/just-bash/dist/bundle/chunks/chunk-GXVXFKBA.js"() { + "../node_modules/just-bash/dist/bundle/chunks/chunk-GXVXFKBA.js"() { init_chunk_7L36YK2X(); init_chunk_HWKDQ44K(); init_chunk_74CEPOFO(); @@ -14829,14 +14829,14 @@ var init_chunk_GXVXFKBA = __esm({ } }); -// node_modules/just-bash/dist/bundle/chunks/wc-TQB3VNOX.js +// ../node_modules/just-bash/dist/bundle/chunks/wc-TQB3VNOX.js var wc_TQB3VNOX_exports = {}; __export(wc_TQB3VNOX_exports, { flagsForFuzzing: () => I4, wcCommand: () => E5 }); var init_wc_TQB3VNOX = __esm({ - "node_modules/just-bash/dist/bundle/chunks/wc-TQB3VNOX.js"() { + "../node_modules/just-bash/dist/bundle/chunks/wc-TQB3VNOX.js"() { init_chunk_GXVXFKBA(); init_chunk_7L36YK2X(); init_chunk_HWKDQ44K(); @@ -14845,20 +14845,20 @@ var init_wc_TQB3VNOX = __esm({ } }); -// node_modules/just-bash/dist/bundle/chunks/chunk-X2AJGDEF.js +// ../node_modules/just-bash/dist/bundle/chunks/chunk-X2AJGDEF.js function x9(r10, o14) { let t6 = o14 ? "d" : "-", n24 = [r10 & 256 ? "r" : "-", r10 & 128 ? "w" : "-", r10 & 64 ? "x" : "-", r10 & 32 ? "r" : "-", r10 & 16 ? "w" : "-", r10 & 8 ? "x" : "-", r10 & 4 ? "r" : "-", r10 & 2 ? "w" : "-", r10 & 1 ? "x" : "-"]; return t6 + n24.join(""); } var init_chunk_X2AJGDEF = __esm({ - "node_modules/just-bash/dist/bundle/chunks/chunk-X2AJGDEF.js"() { + "../node_modules/just-bash/dist/bundle/chunks/chunk-X2AJGDEF.js"() { } }); -// node_modules/just-bash/dist/bundle/chunks/chunk-5QVNJEHU.js +// ../node_modules/just-bash/dist/bundle/chunks/chunk-5QVNJEHU.js var S2, $9, A2, M4; var init_chunk_5QVNJEHU = __esm({ - "node_modules/just-bash/dist/bundle/chunks/chunk-5QVNJEHU.js"() { + "../node_modules/just-bash/dist/bundle/chunks/chunk-5QVNJEHU.js"() { init_chunk_X2AJGDEF(); init_chunk_HWKDQ44K(); init_chunk_74CEPOFO(); @@ -14899,14 +14899,14 @@ var init_chunk_5QVNJEHU = __esm({ } }); -// node_modules/just-bash/dist/bundle/chunks/stat-BT5A227F.js +// ../node_modules/just-bash/dist/bundle/chunks/stat-BT5A227F.js var stat_BT5A227F_exports = {}; __export(stat_BT5A227F_exports, { flagsForFuzzing: () => M4, statCommand: () => A2 }); var init_stat_BT5A227F = __esm({ - "node_modules/just-bash/dist/bundle/chunks/stat-BT5A227F.js"() { + "../node_modules/just-bash/dist/bundle/chunks/stat-BT5A227F.js"() { init_chunk_5QVNJEHU(); init_chunk_X2AJGDEF(); init_chunk_HWKDQ44K(); @@ -14915,7 +14915,7 @@ var init_stat_BT5A227F = __esm({ } }); -// node_modules/just-bash/dist/bundle/chunks/chunk-J642UCRS.js +// ../node_modules/just-bash/dist/bundle/chunks/chunk-J642UCRS.js function u5(l7, c15, t6) { let s10 = typeof t6 == "boolean" ? { ignoreCase: t6 } : t6 ?? {}, e6 = c15; s10.stripQuotes && (e6.startsWith('"') && e6.endsWith('"') || e6.startsWith("'") && e6.endsWith("'")) && (e6 = e6.slice(1, -1)); @@ -14945,14 +14945,14 @@ function a7(l7, c15) { } var g6, o6; var init_chunk_J642UCRS = __esm({ - "node_modules/just-bash/dist/bundle/chunks/chunk-J642UCRS.js"() { + "../node_modules/just-bash/dist/bundle/chunks/chunk-J642UCRS.js"() { init_chunk_YNYSPYQ5(); g6 = 2048; o6 = /* @__PURE__ */ new Map(); } }); -// node_modules/just-bash/dist/bundle/chunks/chunk-VLGZJRPG.js +// ../node_modules/just-bash/dist/bundle/chunks/chunk-VLGZJRPG.js function B3(n24, t6) { return n24.replace(/\$(&|\d+|<([^>]+)>)/g, (e6, i11, s10) => { if (i11 === "&") return t6[0]; @@ -15409,13 +15409,13 @@ function se2(n24) { } var q6; var init_chunk_VLGZJRPG = __esm({ - "node_modules/just-bash/dist/bundle/chunks/chunk-VLGZJRPG.js"() { + "../node_modules/just-bash/dist/bundle/chunks/chunk-VLGZJRPG.js"() { init_chunk_YNYSPYQ5(); q6 = /* @__PURE__ */ new Map([["alpha", "a-zA-Z"], ["digit", "0-9"], ["alnum", "a-zA-Z0-9"], ["lower", "a-z"], ["upper", "A-Z"], ["xdigit", "0-9A-Fa-f"], ["space", " \\t\\n\\r\\f\\v"], ["blank", " \\t"], ["punct", "!-/:-@\\[-`{-~"], ["graph", "!-~"], ["print", " -~"], ["cntrl", "\\x00-\\x1F\\x7F"], ["ascii", "\\x00-\\x7F"], ["word", "a-zA-Z0-9_"]]); } }); -// node_modules/just-bash/dist/bundle/chunks/chunk-YS3AZT3J.js +// ../node_modules/just-bash/dist/bundle/chunks/chunk-YS3AZT3J.js async function K4(t6, s10, l7, f11, c15 = 0) { if (c15 >= J4) return; let p22 = l7.fs.resolvePath(l7.cwd, t6); @@ -15503,7 +15503,7 @@ async function H5(t6, s10, l7 = [], f11 = [], c15 = [], p22, m26 = 0) { } var se3, j3, J4, ae3, fe2, ue2, ce2, pe2; var init_chunk_YS3AZT3J = __esm({ - "node_modules/just-bash/dist/bundle/chunks/chunk-YS3AZT3J.js"() { + "../node_modules/just-bash/dist/bundle/chunks/chunk-YS3AZT3J.js"() { init_chunk_J642UCRS(); init_chunk_VLGZJRPG(); init_chunk_74CEPOFO(); @@ -15652,7 +15652,7 @@ var init_chunk_YS3AZT3J = __esm({ } }); -// node_modules/just-bash/dist/bundle/chunks/grep-3AIAIJVR.js +// ../node_modules/just-bash/dist/bundle/chunks/grep-3AIAIJVR.js var grep_3AIAIJVR_exports = {}; __export(grep_3AIAIJVR_exports, { egrepCommand: () => fe2, @@ -15663,7 +15663,7 @@ __export(grep_3AIAIJVR_exports, { grepCommand: () => j3 }); var init_grep_3AIAIJVR = __esm({ - "node_modules/just-bash/dist/bundle/chunks/grep-3AIAIJVR.js"() { + "../node_modules/just-bash/dist/bundle/chunks/grep-3AIAIJVR.js"() { init_chunk_YS3AZT3J(); init_chunk_J642UCRS(); init_chunk_VLGZJRPG(); @@ -15673,7 +15673,7 @@ var init_grep_3AIAIJVR = __esm({ } }); -// node_modules/just-bash/dist/bundle/chunks/chunk-7TSDKFEO.js +// ../node_modules/just-bash/dist/bundle/chunks/chunk-7TSDKFEO.js function a8(e6, n24) { if (Array.isArray(e6)) throw new TypeError(`${n24}: expected object, got array`); if (Object.getPrototypeOf(e6) !== null) throw new TypeError(`${n24}: expected null-prototype object, got prototypal object`); @@ -15719,13 +15719,13 @@ function b9(...e6) { } var i7, p7; var init_chunk_7TSDKFEO = __esm({ - "node_modules/just-bash/dist/bundle/chunks/chunk-7TSDKFEO.js"() { + "../node_modules/just-bash/dist/bundle/chunks/chunk-7TSDKFEO.js"() { i7 = /* @__PURE__ */ new Set(["__proto__", "constructor", "prototype"]); p7 = /* @__PURE__ */ new Set([...i7, "__defineGetter__", "__defineSetter__", "__lookupGetter__", "__lookupSetter__", "hasOwnProperty", "isPrototypeOf", "propertyIsEnumerable", "toLocaleString", "toString", "valueOf"]); } }); -// node_modules/just-bash/dist/bundle/chunks/chunk-NYQYO467.js +// ../node_modules/just-bash/dist/bundle/chunks/chunk-NYQYO467.js import { gunzipSync as ue3 } from "node:zlib"; function H6() { let e6 = []; @@ -16174,7 +16174,7 @@ async function be2(e6, t6, n24, s10, r10, l7, i11) { } var q7, M5, J5, ne5, re2, T5, k5, we2, Be, Ee2; var init_chunk_NYQYO467 = __esm({ - "node_modules/just-bash/dist/bundle/chunks/chunk-NYQYO467.js"() { + "../node_modules/just-bash/dist/bundle/chunks/chunk-NYQYO467.js"() { init_chunk_7TSDKFEO(); init_chunk_VLGZJRPG(); init_chunk_IPJHKYVM(); @@ -16513,14 +16513,14 @@ EXAMPLES: } }); -// node_modules/just-bash/dist/bundle/chunks/rg-FOQSCCX3.js +// ../node_modules/just-bash/dist/bundle/chunks/rg-FOQSCCX3.js var rg_FOQSCCX3_exports = {}; __export(rg_FOQSCCX3_exports, { flagsForFuzzing: () => Ee2, rgCommand: () => Be }); var init_rg_FOQSCCX3 = __esm({ - "node_modules/just-bash/dist/bundle/chunks/rg-FOQSCCX3.js"() { + "../node_modules/just-bash/dist/bundle/chunks/rg-FOQSCCX3.js"() { init_chunk_NYQYO467(); init_chunk_7TSDKFEO(); init_chunk_VLGZJRPG(); @@ -16531,7 +16531,7 @@ var init_rg_FOQSCCX3 = __esm({ } }); -// node_modules/just-bash/dist/bundle/chunks/chunk-OL3S66CO.js +// ../node_modules/just-bash/dist/bundle/chunks/chunk-OL3S66CO.js function H7(i11) { let e6 = "", t6 = 0, n24 = false; for (; t6 < i11.length; ) { @@ -17177,7 +17177,7 @@ async function K6(i11, e6, t6, n24 = {}) { } var z4, de4, o7, _6, Z6, xe3, De2, qe2; var init_chunk_OL3S66CO = __esm({ - "node_modules/just-bash/dist/bundle/chunks/chunk-OL3S66CO.js"() { + "../node_modules/just-bash/dist/bundle/chunks/chunk-OL3S66CO.js"() { init_chunk_24IMIIXA(); init_chunk_5QMZ5MUS(); init_chunk_YNYSPYQ5(); @@ -17816,14 +17816,14 @@ Addresses: } }); -// node_modules/just-bash/dist/bundle/chunks/sed-VFTTATXJ.js +// ../node_modules/just-bash/dist/bundle/chunks/sed-VFTTATXJ.js var sed_VFTTATXJ_exports = {}; __export(sed_VFTTATXJ_exports, { flagsForFuzzing: () => qe2, sedCommand: () => De2 }); var init_sed_VFTTATXJ = __esm({ - "node_modules/just-bash/dist/bundle/chunks/sed-VFTTATXJ.js"() { + "../node_modules/just-bash/dist/bundle/chunks/sed-VFTTATXJ.js"() { init_chunk_OL3S66CO(); init_chunk_24IMIIXA(); init_chunk_5QMZ5MUS(); @@ -17835,7 +17835,7 @@ var init_sed_VFTTATXJ = __esm({ } }); -// node_modules/just-bash/dist/bundle/chunks/chunk-OARHFVLG.js +// ../node_modules/just-bash/dist/bundle/chunks/chunk-OARHFVLG.js function ie4(e6 = {}) { let { fieldSep: t6 = He2, maxIterations: n24 = Ue2, maxRecursionDepth: i11 = Be2, maxOutputSize: s10 = 0, fs: a15, cwd: o14, exec: l7, coverage: u12, requireDefenseContext: N16 } = e6; return { FS: " ", OFS: " ", ORS: ` @@ -18954,7 +18954,7 @@ function Ge2(e6) { } var Ue2, Be2, He2, U3, Re2, Ce3, q8, r8, _t2, ee4, p8, ne7, Wt2, Wn2, Vn2; var init_chunk_OARHFVLG = __esm({ - "node_modules/just-bash/dist/bundle/chunks/chunk-OARHFVLG.js"() { + "../node_modules/just-bash/dist/bundle/chunks/chunk-OARHFVLG.js"() { init_chunk_OJDRYQWQ(); init_chunk_24IMIIXA(); init_chunk_5QMZ5MUS(); @@ -19765,14 +19765,14 @@ var init_chunk_OARHFVLG = __esm({ } }); -// node_modules/just-bash/dist/bundle/chunks/awk2-POPGKRAI.js +// ../node_modules/just-bash/dist/bundle/chunks/awk2-POPGKRAI.js var awk2_POPGKRAI_exports = {}; __export(awk2_POPGKRAI_exports, { awkCommand2: () => Wn2, flagsForFuzzing: () => Vn2 }); var init_awk2_POPGKRAI = __esm({ - "node_modules/just-bash/dist/bundle/chunks/awk2-POPGKRAI.js"() { + "../node_modules/just-bash/dist/bundle/chunks/awk2-POPGKRAI.js"() { init_chunk_OARHFVLG(); init_chunk_OJDRYQWQ(); init_chunk_24IMIIXA(); @@ -19784,7 +19784,7 @@ var init_awk2_POPGKRAI = __esm({ } }); -// node_modules/just-bash/dist/bundle/chunks/chunk-KMEYNNUA.js +// ../node_modules/just-bash/dist/bundle/chunks/chunk-KMEYNNUA.js function O7(u12) { let r10 = u12.trim(), e6 = r10.match(/^([+-]?\d*\.?\d+)\s*([kmgtpeKMGTPE])?[iI]?[bB]?$/); if (!e6) { @@ -19919,7 +19919,7 @@ function y11(u12) { } var A4, P6, q9, j6, U4; var init_chunk_KMEYNNUA = __esm({ - "node_modules/just-bash/dist/bundle/chunks/chunk-KMEYNNUA.js"() { + "../node_modules/just-bash/dist/bundle/chunks/chunk-KMEYNNUA.js"() { init_chunk_7L36YK2X(); init_chunk_74CEPOFO(); A4 = /* @__PURE__ */ new Map([["", 1], ["k", 1024], ["m", 1048576], ["g", 1073741824], ["t", 1099511627776], ["p", 1125899906842624], ["e", 1152921504606847e3]]); @@ -20018,14 +20018,14 @@ Examples: } }); -// node_modules/just-bash/dist/bundle/chunks/sort-DCNRDA7U.js +// ../node_modules/just-bash/dist/bundle/chunks/sort-DCNRDA7U.js var sort_DCNRDA7U_exports = {}; __export(sort_DCNRDA7U_exports, { flagsForFuzzing: () => U4, sortCommand: () => j6 }); var init_sort_DCNRDA7U = __esm({ - "node_modules/just-bash/dist/bundle/chunks/sort-DCNRDA7U.js"() { + "../node_modules/just-bash/dist/bundle/chunks/sort-DCNRDA7U.js"() { init_chunk_KMEYNNUA(); init_chunk_7L36YK2X(); init_chunk_74CEPOFO(); @@ -20033,10 +20033,10 @@ var init_sort_DCNRDA7U = __esm({ } }); -// node_modules/just-bash/dist/bundle/chunks/chunk-WKFATFPP.js +// ../node_modules/just-bash/dist/bundle/chunks/chunk-WKFATFPP.js var O8, w8, N5, P7; var init_chunk_WKFATFPP = __esm({ - "node_modules/just-bash/dist/bundle/chunks/chunk-WKFATFPP.js"() { + "../node_modules/just-bash/dist/bundle/chunks/chunk-WKFATFPP.js"() { init_chunk_7L36YK2X(); init_chunk_HWKDQ44K(); init_chunk_74CEPOFO(); @@ -20066,14 +20066,14 @@ var init_chunk_WKFATFPP = __esm({ } }); -// node_modules/just-bash/dist/bundle/chunks/uniq-SUNANL47.js +// ../node_modules/just-bash/dist/bundle/chunks/uniq-SUNANL47.js var uniq_SUNANL47_exports = {}; __export(uniq_SUNANL47_exports, { flagsForFuzzing: () => P7, uniqCommand: () => N5 }); var init_uniq_SUNANL47 = __esm({ - "node_modules/just-bash/dist/bundle/chunks/uniq-SUNANL47.js"() { + "../node_modules/just-bash/dist/bundle/chunks/uniq-SUNANL47.js"() { init_chunk_WKFATFPP(); init_chunk_7L36YK2X(); init_chunk_HWKDQ44K(); @@ -20082,10 +20082,10 @@ var init_uniq_SUNANL47 = __esm({ } }); -// node_modules/just-bash/dist/bundle/chunks/chunk-Z7JVV2SM.js +// ../node_modules/just-bash/dist/bundle/chunks/chunk-Z7JVV2SM.js var x12, C7, I6; var init_chunk_Z7JVV2SM = __esm({ - "node_modules/just-bash/dist/bundle/chunks/chunk-Z7JVV2SM.js"() { + "../node_modules/just-bash/dist/bundle/chunks/chunk-Z7JVV2SM.js"() { init_chunk_74CEPOFO(); x12 = { name: "comm", summary: "compare two sorted files line by line", usage: "comm [OPTION]... FILE1 FILE2", options: ["-1 suppress column 1 (lines unique to FILE1)", "-2 suppress column 2 (lines unique to FILE2)", "-3 suppress column 3 (lines that appear in both files)", " --help display this help and exit"] }; C7 = { name: "comm", async execute(p22, a15) { @@ -20136,21 +20136,21 @@ Try 'comm --help' for more information. } }); -// node_modules/just-bash/dist/bundle/chunks/comm-5SLSESQG.js +// ../node_modules/just-bash/dist/bundle/chunks/comm-5SLSESQG.js var comm_5SLSESQG_exports = {}; __export(comm_5SLSESQG_exports, { commCommand: () => C7, flagsForFuzzing: () => I6 }); var init_comm_5SLSESQG = __esm({ - "node_modules/just-bash/dist/bundle/chunks/comm-5SLSESQG.js"() { + "../node_modules/just-bash/dist/bundle/chunks/comm-5SLSESQG.js"() { init_chunk_Z7JVV2SM(); init_chunk_74CEPOFO(); init_chunk_DXB73IDG(); } }); -// node_modules/just-bash/dist/bundle/chunks/chunk-SDNKECQQ.js +// ../node_modules/just-bash/dist/bundle/chunks/chunk-SDNKECQQ.js function F5(t6) { let c15 = [], l7 = t6.split(","); for (let n24 of l7) if (n24.includes("-")) { @@ -20172,7 +20172,7 @@ function L5(t6, c15) { } var w9, k7, C8; var init_chunk_SDNKECQQ = __esm({ - "node_modules/just-bash/dist/bundle/chunks/chunk-SDNKECQQ.js"() { + "../node_modules/just-bash/dist/bundle/chunks/chunk-SDNKECQQ.js"() { init_chunk_7L36YK2X(); init_chunk_74CEPOFO(); w9 = { name: "cut", summary: "remove sections from each line of files", usage: "cut [OPTION]... [FILE]...", options: ["-c LIST select only these characters", "-d DELIM use DELIM instead of TAB for field delimiter", "-f LIST select only these fields", "-s, --only-delimited do not print lines without delimiters", " --help display this help and exit"] }; @@ -20229,14 +20229,14 @@ var init_chunk_SDNKECQQ = __esm({ } }); -// node_modules/just-bash/dist/bundle/chunks/cut-OPC3VAGB.js +// ../node_modules/just-bash/dist/bundle/chunks/cut-OPC3VAGB.js var cut_OPC3VAGB_exports = {}; __export(cut_OPC3VAGB_exports, { cutCommand: () => k7, flagsForFuzzing: () => C8 }); var init_cut_OPC3VAGB = __esm({ - "node_modules/just-bash/dist/bundle/chunks/cut-OPC3VAGB.js"() { + "../node_modules/just-bash/dist/bundle/chunks/cut-OPC3VAGB.js"() { init_chunk_SDNKECQQ(); init_chunk_7L36YK2X(); init_chunk_74CEPOFO(); @@ -20244,7 +20244,7 @@ var init_cut_OPC3VAGB = __esm({ } }); -// node_modules/just-bash/dist/bundle/chunks/chunk-JVPRLUMK.js +// ../node_modules/just-bash/dist/bundle/chunks/chunk-JVPRLUMK.js function y12(s10, i11) { if (s10.length === 0) return ""; if (s10.length === 1) return s10[0]; @@ -20257,7 +20257,7 @@ function y12(s10, i11) { } var I7, F6, P8, T7; var init_chunk_JVPRLUMK = __esm({ - "node_modules/just-bash/dist/bundle/chunks/chunk-JVPRLUMK.js"() { + "../node_modules/just-bash/dist/bundle/chunks/chunk-JVPRLUMK.js"() { init_chunk_HWKDQ44K(); init_chunk_74CEPOFO(); I7 = { name: "paste", summary: "merge lines of files", usage: "paste [OPTION]... [FILE]...", description: ["Write lines consisting of the sequentially corresponding lines from", "each FILE, separated by TABs, to standard output.", "", "With no FILE, or when FILE is -, read standard input."], options: ["-d, --delimiters=LIST reuse characters from LIST instead of TABs", "-s, --serial paste one file at a time instead of in parallel", " --help display this help and exit"], examples: ["paste file1 file2 Merge file1 and file2 side by side", "paste -d, file1 file2 Use comma as delimiter", "paste -s file1 Paste all lines of file1 on one line", "paste - - < file Paste pairs of lines from file"] }; @@ -20306,14 +20306,14 @@ var init_chunk_JVPRLUMK = __esm({ } }); -// node_modules/just-bash/dist/bundle/chunks/paste-7N6AFSDS.js +// ../node_modules/just-bash/dist/bundle/chunks/paste-7N6AFSDS.js var paste_7N6AFSDS_exports = {}; __export(paste_7N6AFSDS_exports, { flagsForFuzzing: () => T7, pasteCommand: () => P8 }); var init_paste_7N6AFSDS = __esm({ - "node_modules/just-bash/dist/bundle/chunks/paste-7N6AFSDS.js"() { + "../node_modules/just-bash/dist/bundle/chunks/paste-7N6AFSDS.js"() { init_chunk_JVPRLUMK(); init_chunk_HWKDQ44K(); init_chunk_74CEPOFO(); @@ -20321,7 +20321,7 @@ var init_paste_7N6AFSDS = __esm({ } }); -// node_modules/just-bash/dist/bundle/chunks/chunk-62RKD26F.js +// ../node_modules/just-bash/dist/bundle/chunks/chunk-62RKD26F.js function S5(r10) { let o14 = "", e6 = 0; for (; e6 < r10.length; ) { @@ -20352,7 +20352,7 @@ function S5(r10) { } var x13, b11, w10, q10, T8; var init_chunk_62RKD26F = __esm({ - "node_modules/just-bash/dist/bundle/chunks/chunk-62RKD26F.js"() { + "../node_modules/just-bash/dist/bundle/chunks/chunk-62RKD26F.js"() { init_chunk_3THT3N7L(); init_chunk_HWKDQ44K(); init_chunk_74CEPOFO(); @@ -20422,14 +20422,14 @@ var init_chunk_62RKD26F = __esm({ } }); -// node_modules/just-bash/dist/bundle/chunks/tr-2HXZRDSW.js +// ../node_modules/just-bash/dist/bundle/chunks/tr-2HXZRDSW.js var tr_2HXZRDSW_exports = {}; __export(tr_2HXZRDSW_exports, { flagsForFuzzing: () => T8, trCommand: () => q10 }); var init_tr_2HXZRDSW = __esm({ - "node_modules/just-bash/dist/bundle/chunks/tr-2HXZRDSW.js"() { + "../node_modules/just-bash/dist/bundle/chunks/tr-2HXZRDSW.js"() { init_chunk_62RKD26F(); init_chunk_3THT3N7L(); init_chunk_HWKDQ44K(); @@ -20438,13 +20438,13 @@ var init_tr_2HXZRDSW = __esm({ } }); -// node_modules/just-bash/dist/bundle/chunks/chunk-QCDB2VPH.js +// ../node_modules/just-bash/dist/bundle/chunks/chunk-QCDB2VPH.js function d7(t6) { return Array.from(t6).reverse().join(""); } var u7, v12, m10; var init_chunk_QCDB2VPH = __esm({ - "node_modules/just-bash/dist/bundle/chunks/chunk-QCDB2VPH.js"() { + "../node_modules/just-bash/dist/bundle/chunks/chunk-QCDB2VPH.js"() { init_chunk_74CEPOFO(); u7 = { name: "rev", summary: "reverse lines characterwise", usage: "rev [file ...]", description: "Copies the specified files to standard output, reversing the order of characters in every line. If no files are specified, standard input is read.", examples: ["echo 'hello' | rev # Output: olleh", "rev file.txt # Reverse each line in file"] }; v12 = { name: "rev", execute: async (t6, s10) => { @@ -20484,21 +20484,21 @@ var init_chunk_QCDB2VPH = __esm({ } }); -// node_modules/just-bash/dist/bundle/chunks/rev-XOSYPP45.js +// ../node_modules/just-bash/dist/bundle/chunks/rev-XOSYPP45.js var rev_XOSYPP45_exports = {}; __export(rev_XOSYPP45_exports, { flagsForFuzzing: () => m10, rev: () => v12 }); var init_rev_XOSYPP45 = __esm({ - "node_modules/just-bash/dist/bundle/chunks/rev-XOSYPP45.js"() { + "../node_modules/just-bash/dist/bundle/chunks/rev-XOSYPP45.js"() { init_chunk_QCDB2VPH(); init_chunk_74CEPOFO(); init_chunk_DXB73IDG(); } }); -// node_modules/just-bash/dist/bundle/chunks/chunk-F23WWYKW.js +// ../node_modules/just-bash/dist/bundle/chunks/chunk-F23WWYKW.js function p9(r10, s10, i11) { let l7 = String(r10); switch (s10) { @@ -20543,7 +20543,7 @@ function b12(r10, s10, i11) { } var h7, y13, x14; var init_chunk_F23WWYKW = __esm({ - "node_modules/just-bash/dist/bundle/chunks/chunk-F23WWYKW.js"() { + "../node_modules/just-bash/dist/bundle/chunks/chunk-F23WWYKW.js"() { init_chunk_74CEPOFO(); h7 = { name: "nl", summary: "number lines of files", usage: "nl [OPTION]... [FILE]...", description: "Write each FILE to standard output, with line numbers added. If no FILE is specified, standard input is read.", options: ["-b STYLE Body numbering style: a (all), t (non-empty), n (none)", "-n FORMAT Number format: ln (left), rn (right), rz (right zeros)", "-w WIDTH Number width (default: 6)", "-s SEP Separator after number (default: TAB)", "-v START Starting line number (default: 1)", "-i INCR Line number increment (default: 1)"], examples: ["nl file.txt # Number non-empty lines", "nl -ba file.txt # Number all lines", "nl -n rz -w 3 file.txt # Right-justified with zeros", "nl -s ': ' file.txt # Use ': ' as separator"] }; y13 = { name: "nl", execute: async (r10, s10) => { @@ -20628,21 +20628,21 @@ var init_chunk_F23WWYKW = __esm({ } }); -// node_modules/just-bash/dist/bundle/chunks/nl-U5YJDM32.js +// ../node_modules/just-bash/dist/bundle/chunks/nl-U5YJDM32.js var nl_U5YJDM32_exports = {}; __export(nl_U5YJDM32_exports, { flagsForFuzzing: () => x14, nl: () => y13 }); var init_nl_U5YJDM32 = __esm({ - "node_modules/just-bash/dist/bundle/chunks/nl-U5YJDM32.js"() { + "../node_modules/just-bash/dist/bundle/chunks/nl-U5YJDM32.js"() { init_chunk_F23WWYKW(); init_chunk_74CEPOFO(); init_chunk_DXB73IDG(); } }); -// node_modules/just-bash/dist/bundle/chunks/chunk-D4J545R4.js +// ../node_modules/just-bash/dist/bundle/chunks/chunk-D4J545R4.js function g8(s10, r10, n24) { return n24 ? new TextEncoder().encode(s10).length : s10 === " " ? 8 - r10 % 8 : s10 === "\b" ? -1 : 1; } @@ -20667,7 +20667,7 @@ function b13(s10, r10) { } var m11, k8, x15; var init_chunk_D4J545R4 = __esm({ - "node_modules/just-bash/dist/bundle/chunks/chunk-D4J545R4.js"() { + "../node_modules/just-bash/dist/bundle/chunks/chunk-D4J545R4.js"() { init_chunk_74CEPOFO(); m11 = { name: "fold", summary: "wrap each input line to fit in specified width", usage: "fold [OPTION]... [FILE]...", description: "Wrap input lines in each FILE, writing to standard output. If no FILE is specified, standard input is read.", options: ["-w WIDTH Use WIDTH columns instead of 80", "-s Break at spaces", "-b Count bytes rather than columns"], examples: ["fold -w 40 file.txt # Wrap at 40 columns", "fold -sw 40 file.txt # Word wrap at 40 columns", "echo 'long line' | fold -w 5 # Force wrap at 5"] }; k8 = { name: "fold", execute: async (s10, r10) => { @@ -20731,21 +20731,21 @@ var init_chunk_D4J545R4 = __esm({ } }); -// node_modules/just-bash/dist/bundle/chunks/fold-LDSORVYE.js +// ../node_modules/just-bash/dist/bundle/chunks/fold-LDSORVYE.js var fold_LDSORVYE_exports = {}; __export(fold_LDSORVYE_exports, { flagsForFuzzing: () => x15, fold: () => k8 }); var init_fold_LDSORVYE = __esm({ - "node_modules/just-bash/dist/bundle/chunks/fold-LDSORVYE.js"() { + "../node_modules/just-bash/dist/bundle/chunks/fold-LDSORVYE.js"() { init_chunk_D4J545R4(); init_chunk_74CEPOFO(); init_chunk_DXB73IDG(); } }); -// node_modules/just-bash/dist/bundle/chunks/chunk-VJFXDYWH.js +// ../node_modules/just-bash/dist/bundle/chunks/chunk-VJFXDYWH.js function p10(n24) { let i11 = n24.split(",").map((o14) => o14.trim()), t6 = []; for (let o14 of i11) { @@ -20789,7 +20789,7 @@ function c7(n24, i11) { } var h8, m12, v13; var init_chunk_VJFXDYWH = __esm({ - "node_modules/just-bash/dist/bundle/chunks/chunk-VJFXDYWH.js"() { + "../node_modules/just-bash/dist/bundle/chunks/chunk-VJFXDYWH.js"() { init_chunk_74CEPOFO(); h8 = { name: "expand", summary: "convert tabs to spaces", usage: "expand [OPTION]... [FILE]...", description: "Convert TABs in each FILE to spaces, writing to standard output. If no FILE is specified, standard input is read.", options: ["-t N Use N spaces per tab (default: 8)", "-t LIST Use comma-separated list of tab stops", "-i Only convert leading tabs on each line"], examples: ["expand file.txt # Convert all tabs to 8 spaces", "expand -t 4 file.txt # Use 4-space tabs", "expand -t 4,8,12 file.txt # Custom tab stops"] }; m12 = { name: "expand", execute: async (n24, i11) => { @@ -20842,21 +20842,21 @@ var init_chunk_VJFXDYWH = __esm({ } }); -// node_modules/just-bash/dist/bundle/chunks/expand-DTNXU4LQ.js +// ../node_modules/just-bash/dist/bundle/chunks/expand-DTNXU4LQ.js var expand_DTNXU4LQ_exports = {}; __export(expand_DTNXU4LQ_exports, { expand: () => m12, flagsForFuzzing: () => v13 }); var init_expand_DTNXU4LQ = __esm({ - "node_modules/just-bash/dist/bundle/chunks/expand-DTNXU4LQ.js"() { + "../node_modules/just-bash/dist/bundle/chunks/expand-DTNXU4LQ.js"() { init_chunk_VJFXDYWH(); init_chunk_74CEPOFO(); init_chunk_DXB73IDG(); } }); -// node_modules/just-bash/dist/bundle/chunks/chunk-PYSFUGCK.js +// ../node_modules/just-bash/dist/bundle/chunks/chunk-PYSFUGCK.js function f7(s10) { let i11 = s10.split(",").map((l7) => l7.trim()), e6 = []; for (let l7 of i11) { @@ -20910,7 +20910,7 @@ function C9(s10, i11) { } var k9, w11, F7; var init_chunk_PYSFUGCK = __esm({ - "node_modules/just-bash/dist/bundle/chunks/chunk-PYSFUGCK.js"() { + "../node_modules/just-bash/dist/bundle/chunks/chunk-PYSFUGCK.js"() { init_chunk_74CEPOFO(); k9 = { name: "unexpand", summary: "convert spaces to tabs", usage: "unexpand [OPTION]... [FILE]...", description: "Convert blanks in each FILE to TABs, writing to standard output. If no FILE is specified, standard input is read.", options: ["-t N Use N spaces per tab (default: 8)", "-t LIST Use comma-separated list of tab stops", "-a Convert all sequences of blanks (not just leading)"], examples: ["unexpand file.txt # Convert leading spaces to tabs", "unexpand -a file.txt # Convert all space sequences", "unexpand -t 4 file.txt # Use 4-space tabs"] }; w11 = { name: "unexpand", execute: async (s10, i11) => { @@ -20963,21 +20963,21 @@ var init_chunk_PYSFUGCK = __esm({ } }); -// node_modules/just-bash/dist/bundle/chunks/unexpand-RGTMIGZM.js +// ../node_modules/just-bash/dist/bundle/chunks/unexpand-RGTMIGZM.js var unexpand_RGTMIGZM_exports = {}; __export(unexpand_RGTMIGZM_exports, { flagsForFuzzing: () => F7, unexpand: () => w11 }); var init_unexpand_RGTMIGZM = __esm({ - "node_modules/just-bash/dist/bundle/chunks/unexpand-RGTMIGZM.js"() { + "../node_modules/just-bash/dist/bundle/chunks/unexpand-RGTMIGZM.js"() { init_chunk_PYSFUGCK(); init_chunk_74CEPOFO(); init_chunk_DXB73IDG(); } }); -// node_modules/just-bash/dist/bundle/chunks/chunk-VYOJP4TV.js +// ../node_modules/just-bash/dist/bundle/chunks/chunk-VYOJP4TV.js function p11(n24) { return n24 >= 32 && n24 <= 126 || n24 === 9; } @@ -21015,7 +21015,7 @@ function g10(n24, s10) { } var m13, b14, N7; var init_chunk_VYOJP4TV = __esm({ - "node_modules/just-bash/dist/bundle/chunks/chunk-VYOJP4TV.js"() { + "../node_modules/just-bash/dist/bundle/chunks/chunk-VYOJP4TV.js"() { init_chunk_74CEPOFO(); m13 = { name: "strings", summary: "print the sequences of printable characters in files", usage: "strings [OPTION]... [FILE]...", description: "For each FILE, print the printable character sequences that are at least MIN characters long. If no FILE is specified, standard input is read.", options: ["-n MIN Print sequences of at least MIN characters (default: 4)", "-t FORMAT Print offset before each string (o=octal, x=hex, d=decimal)", "-a Scan the entire file (default behavior)", "-e ENCODING Select character encoding (s=7-bit, S=8-bit)"], examples: ["strings file.bin # Extract strings (min 4 chars)", "strings -n 8 file.bin # Extract strings (min 8 chars)", "strings -t x file.bin # Show hex offset", "echo 'hello' | strings # Read from stdin"] }; b14 = { name: "strings", execute: async (n24, s10) => { @@ -21092,21 +21092,21 @@ var init_chunk_VYOJP4TV = __esm({ } }); -// node_modules/just-bash/dist/bundle/chunks/strings-7PLOGTPD.js +// ../node_modules/just-bash/dist/bundle/chunks/strings-7PLOGTPD.js var strings_7PLOGTPD_exports = {}; __export(strings_7PLOGTPD_exports, { flagsForFuzzing: () => N7, strings: () => b14 }); var init_strings_7PLOGTPD = __esm({ - "node_modules/just-bash/dist/bundle/chunks/strings-7PLOGTPD.js"() { + "../node_modules/just-bash/dist/bundle/chunks/strings-7PLOGTPD.js"() { init_chunk_VYOJP4TV(); init_chunk_74CEPOFO(); init_chunk_DXB73IDG(); } }); -// node_modules/just-bash/dist/bundle/chunks/chunk-MYE6AGBJ.js +// ../node_modules/just-bash/dist/bundle/chunks/chunk-MYE6AGBJ.js function m14(s10) { let l7 = s10.match(/^(\d+)([KMGTPEZY]?)([B]?)$/i); if (!l7) return null; @@ -21154,7 +21154,7 @@ function S6(s10, l7) { } var k10, p12, I8, $11; var init_chunk_MYE6AGBJ = __esm({ - "node_modules/just-bash/dist/bundle/chunks/chunk-MYE6AGBJ.js"() { + "../node_modules/just-bash/dist/bundle/chunks/chunk-MYE6AGBJ.js"() { init_chunk_74CEPOFO(); k10 = { name: "split", summary: "split a file into pieces", usage: "split [OPTION]... [FILE [PREFIX]]", description: "Output pieces of FILE to PREFIXaa, PREFIXab, ...; default size is 1000 lines, and default PREFIX is 'x'.", options: ["-l N Put N lines per output file", "-b SIZE Put SIZE bytes per output file (K, M, G suffixes)", "-n CHUNKS Split into CHUNKS equal-sized files", "-d Use numeric suffixes (00, 01, ...) instead of alphabetic", "-a LENGTH Use suffixes of length LENGTH (default: 2)", "--additional-suffix=SUFFIX Append SUFFIX to file names"], examples: ["split -l 100 file.txt # Split into 100-line chunks", "split -b 1M file.bin # Split into 1MB chunks", "split -n 5 file.txt # Split into 5 equal parts", "split -d file.txt part_ # part_00, part_01, ...", "split -a 3 -d file.txt x # x000, x001, ..."] }; p12 = 1e5; @@ -21253,21 +21253,21 @@ var init_chunk_MYE6AGBJ = __esm({ } }); -// node_modules/just-bash/dist/bundle/chunks/split-SITCSYCZ.js +// ../node_modules/just-bash/dist/bundle/chunks/split-SITCSYCZ.js var split_SITCSYCZ_exports = {}; __export(split_SITCSYCZ_exports, { flagsForFuzzing: () => $11, split: () => I8 }); var init_split_SITCSYCZ = __esm({ - "node_modules/just-bash/dist/bundle/chunks/split-SITCSYCZ.js"() { + "../node_modules/just-bash/dist/bundle/chunks/split-SITCSYCZ.js"() { init_chunk_MYE6AGBJ(); init_chunk_74CEPOFO(); init_chunk_DXB73IDG(); } }); -// node_modules/just-bash/dist/bundle/chunks/chunk-LWEGUNWT.js +// ../node_modules/just-bash/dist/bundle/chunks/chunk-LWEGUNWT.js function C11(t6, e6, l7) { return e6 ? l7 ? t6.split(e6) : t6.split(e6).filter((n24) => n24.length > 0) : l7 ? t6.split(/[ \t]/) : t6.split(/[ \t]+/).filter((n24) => n24.length > 0); } @@ -21306,7 +21306,7 @@ function j7(t6, e6, l7) { } var v15, H8, M8, P9; var init_chunk_LWEGUNWT = __esm({ - "node_modules/just-bash/dist/bundle/chunks/chunk-LWEGUNWT.js"() { + "../node_modules/just-bash/dist/bundle/chunks/chunk-LWEGUNWT.js"() { init_chunk_HWKDQ44K(); init_chunk_74CEPOFO(); v15 = { name: "column", summary: "columnate lists", usage: "column [OPTION]... [FILE]...", description: "Format input into multiple columns. By default, fills rows first. Use -t to create a table based on whitespace-delimited input.", options: ["-t Create a table (determine columns from input)", "-s SEP Input field delimiter (default: whitespace)", "-o SEP Output field delimiter (default: two spaces)", "-c WIDTH Output width for fill mode (default: 80)", "-n Don't merge multiple adjacent delimiters"], examples: ["ls | column # Fill columns with ls output", "cat data | column -t # Format as table", "column -t -s ',' file # Format CSV as table", "column -c 40 file # Fill 40-char wide columns"] }; @@ -21352,14 +21352,14 @@ var init_chunk_LWEGUNWT = __esm({ } }); -// node_modules/just-bash/dist/bundle/chunks/column-WLPMMSTS.js +// ../node_modules/just-bash/dist/bundle/chunks/column-WLPMMSTS.js var column_WLPMMSTS_exports = {}; __export(column_WLPMMSTS_exports, { column: () => M8, flagsForFuzzing: () => P9 }); var init_column_WLPMMSTS = __esm({ - "node_modules/just-bash/dist/bundle/chunks/column-WLPMMSTS.js"() { + "../node_modules/just-bash/dist/bundle/chunks/column-WLPMMSTS.js"() { init_chunk_LWEGUNWT(); init_chunk_HWKDQ44K(); init_chunk_74CEPOFO(); @@ -21367,7 +21367,7 @@ var init_column_WLPMMSTS = __esm({ } }); -// node_modules/just-bash/dist/bundle/chunks/chunk-A7ICOL4V.js +// ../node_modules/just-bash/dist/bundle/chunks/chunk-A7ICOL4V.js function N8(i11, s10) { return s10 ? i11.split(s10) : i11.split(/[ \t]+/).filter((n24) => n24.length > 0); } @@ -21403,7 +21403,7 @@ function I10(i11) { } var v16, w12, U5; var init_chunk_A7ICOL4V = __esm({ - "node_modules/just-bash/dist/bundle/chunks/chunk-A7ICOL4V.js"() { + "../node_modules/just-bash/dist/bundle/chunks/chunk-A7ICOL4V.js"() { init_chunk_74CEPOFO(); v16 = { name: "join", summary: "join lines of two files on a common field", usage: "join [OPTION]... FILE1 FILE2", description: "For each pair of input lines with identical join fields, write a line to standard output. The default join field is the first, delimited by blanks.", options: ["-1 FIELD Join on this FIELD of file 1 (default: 1)", "-2 FIELD Join on this FIELD of file 2 (default: 1)", "-t CHAR Use CHAR as input and output field separator", "-a FILENUM Also print unpairable lines from file FILENUM (1 or 2)", "-v FILENUM Like -a but only output unpairable lines", "-e STRING Replace missing fields with STRING", "-o FORMAT Output format (comma-separated list of FILENUM.FIELD)", "-i Ignore case when comparing fields"], examples: ["join file1 file2 # Join on first field", "join -1 2 -2 1 file1 file2 # Join file1 col 2 with file2 col 1", "join -t ',' file1.csv file2.csv # Join CSV files", "join -a 1 file1 file2 # Left outer join"] }; w12 = { name: "join", execute: async (i11, s10) => { @@ -21487,24 +21487,24 @@ var init_chunk_A7ICOL4V = __esm({ } }); -// node_modules/just-bash/dist/bundle/chunks/join-GG2LDHE5.js +// ../node_modules/just-bash/dist/bundle/chunks/join-GG2LDHE5.js var join_GG2LDHE5_exports = {}; __export(join_GG2LDHE5_exports, { flagsForFuzzing: () => U5, join: () => w12 }); var init_join_GG2LDHE5 = __esm({ - "node_modules/just-bash/dist/bundle/chunks/join-GG2LDHE5.js"() { + "../node_modules/just-bash/dist/bundle/chunks/join-GG2LDHE5.js"() { init_chunk_A7ICOL4V(); init_chunk_74CEPOFO(); init_chunk_DXB73IDG(); } }); -// node_modules/just-bash/dist/bundle/chunks/chunk-55VFSPNA.js +// ../node_modules/just-bash/dist/bundle/chunks/chunk-55VFSPNA.js var u8, m16, y16, w13; var init_chunk_55VFSPNA = __esm({ - "node_modules/just-bash/dist/bundle/chunks/chunk-55VFSPNA.js"() { + "../node_modules/just-bash/dist/bundle/chunks/chunk-55VFSPNA.js"() { init_chunk_HWKDQ44K(); init_chunk_74CEPOFO(); u8 = { name: "tee", summary: "read from stdin and write to stdout and files", usage: "tee [OPTION]... [FILE]...", options: ["-a, --append append to the given FILEs, do not overwrite", " --help display this help and exit"] }; @@ -21527,14 +21527,14 @@ var init_chunk_55VFSPNA = __esm({ } }); -// node_modules/just-bash/dist/bundle/chunks/tee-O7VXZDCO.js +// ../node_modules/just-bash/dist/bundle/chunks/tee-O7VXZDCO.js var tee_O7VXZDCO_exports = {}; __export(tee_O7VXZDCO_exports, { flagsForFuzzing: () => w13, teeCommand: () => y16 }); var init_tee_O7VXZDCO = __esm({ - "node_modules/just-bash/dist/bundle/chunks/tee-O7VXZDCO.js"() { + "../node_modules/just-bash/dist/bundle/chunks/tee-O7VXZDCO.js"() { init_chunk_55VFSPNA(); init_chunk_HWKDQ44K(); init_chunk_74CEPOFO(); @@ -21542,7 +21542,7 @@ var init_tee_O7VXZDCO = __esm({ } }); -// node_modules/just-bash/dist/bundle/chunks/chunk-LPQPILI2.js +// ../node_modules/just-bash/dist/bundle/chunks/chunk-LPQPILI2.js function k11(e6, t6) { switch (e6.type) { case "name": { @@ -22103,7 +22103,7 @@ function ze3(e6, t6) { } var ye4, $e3, Re3, je3, Je3; var init_chunk_LPQPILI2 = __esm({ - "node_modules/just-bash/dist/bundle/chunks/chunk-LPQPILI2.js"() { + "../node_modules/just-bash/dist/bundle/chunks/chunk-LPQPILI2.js"() { init_chunk_X2AJGDEF(); init_chunk_J642UCRS(); init_chunk_IPJHKYVM(); @@ -22326,14 +22326,14 @@ var init_chunk_LPQPILI2 = __esm({ } }); -// node_modules/just-bash/dist/bundle/chunks/find-TPUOAIUQ.js +// ../node_modules/just-bash/dist/bundle/chunks/find-TPUOAIUQ.js var find_TPUOAIUQ_exports = {}; __export(find_TPUOAIUQ_exports, { findCommand: () => je3, flagsForFuzzing: () => Je3 }); var init_find_TPUOAIUQ = __esm({ - "node_modules/just-bash/dist/bundle/chunks/find-TPUOAIUQ.js"() { + "../node_modules/just-bash/dist/bundle/chunks/find-TPUOAIUQ.js"() { init_chunk_LPQPILI2(); init_chunk_X2AJGDEF(); init_chunk_J642UCRS(); @@ -22345,10 +22345,10 @@ var init_find_TPUOAIUQ = __esm({ } }); -// node_modules/just-bash/dist/bundle/chunks/chunk-ALLTKNUZ.js +// ../node_modules/just-bash/dist/bundle/chunks/chunk-ALLTKNUZ.js var p13, c8, h9; var init_chunk_ALLTKNUZ = __esm({ - "node_modules/just-bash/dist/bundle/chunks/chunk-ALLTKNUZ.js"() { + "../node_modules/just-bash/dist/bundle/chunks/chunk-ALLTKNUZ.js"() { init_chunk_74CEPOFO(); p13 = { name: "basename", summary: "strip directory and suffix from filenames", usage: `basename NAME [SUFFIX] basename OPTION... NAME...`, options: ["-a, --multiple support multiple arguments", "-s, --suffix=SUFFIX remove a trailing SUFFIX", " --help display this help and exit"] }; @@ -22375,24 +22375,24 @@ basename OPTION... NAME...`, options: ["-a, --multiple support multiple argume } }); -// node_modules/just-bash/dist/bundle/chunks/basename-AA2KJYZQ.js +// ../node_modules/just-bash/dist/bundle/chunks/basename-AA2KJYZQ.js var basename_AA2KJYZQ_exports = {}; __export(basename_AA2KJYZQ_exports, { basenameCommand: () => c8, flagsForFuzzing: () => h9 }); var init_basename_AA2KJYZQ = __esm({ - "node_modules/just-bash/dist/bundle/chunks/basename-AA2KJYZQ.js"() { + "../node_modules/just-bash/dist/bundle/chunks/basename-AA2KJYZQ.js"() { init_chunk_ALLTKNUZ(); init_chunk_74CEPOFO(); init_chunk_DXB73IDG(); } }); -// node_modules/just-bash/dist/bundle/chunks/chunk-4Q4SM6WR.js +// ../node_modules/just-bash/dist/bundle/chunks/chunk-4Q4SM6WR.js var m17, p14, c9; var init_chunk_4Q4SM6WR = __esm({ - "node_modules/just-bash/dist/bundle/chunks/chunk-4Q4SM6WR.js"() { + "../node_modules/just-bash/dist/bundle/chunks/chunk-4Q4SM6WR.js"() { init_chunk_74CEPOFO(); m17 = { name: "dirname", summary: "strip last component from file name", usage: "dirname [OPTION] NAME...", options: [" --help display this help and exit"] }; p14 = { name: "dirname", async execute(t6, l7) { @@ -22413,21 +22413,21 @@ var init_chunk_4Q4SM6WR = __esm({ } }); -// node_modules/just-bash/dist/bundle/chunks/dirname-LEMTZZFS.js +// ../node_modules/just-bash/dist/bundle/chunks/dirname-LEMTZZFS.js var dirname_LEMTZZFS_exports = {}; __export(dirname_LEMTZZFS_exports, { dirnameCommand: () => p14, flagsForFuzzing: () => c9 }); var init_dirname_LEMTZZFS = __esm({ - "node_modules/just-bash/dist/bundle/chunks/dirname-LEMTZZFS.js"() { + "../node_modules/just-bash/dist/bundle/chunks/dirname-LEMTZZFS.js"() { init_chunk_4Q4SM6WR(); init_chunk_74CEPOFO(); init_chunk_DXB73IDG(); } }); -// node_modules/just-bash/dist/bundle/chunks/chunk-XVDPCNWR.js +// ../node_modules/just-bash/dist/bundle/chunks/chunk-XVDPCNWR.js async function T9(i11, o14, s10, f11, d15) { let e6 = { output: "", stderr: "", dirCount: 0, fileCount: 0 }, l7 = i11.fs.resolvePath(i11.cwd, o14); try { @@ -22527,7 +22527,7 @@ async function w14(i11, o14, s10, f11, d15) { } var P10, b15, O9, L8; var init_chunk_XVDPCNWR = __esm({ - "node_modules/just-bash/dist/bundle/chunks/chunk-XVDPCNWR.js"() { + "../node_modules/just-bash/dist/bundle/chunks/chunk-XVDPCNWR.js"() { init_chunk_HWKDQ44K(); init_chunk_74CEPOFO(); P10 = { name: "tree", summary: "list contents of directories in a tree-like format", usage: "tree [OPTION]... [DIRECTORY]...", options: ["-a include hidden files", "-d list directories only", "-L LEVEL limit depth of directory tree", "-f print full path prefix for each file", " --help display this help and exit"] }; @@ -22551,14 +22551,14 @@ ${a15} director${a15 === 1 ? "y" : "ies"}`, f11.directoriesOnly || (e6 += `, ${n } }); -// node_modules/just-bash/dist/bundle/chunks/tree-LYXBS7DC.js +// ../node_modules/just-bash/dist/bundle/chunks/tree-LYXBS7DC.js var tree_LYXBS7DC_exports = {}; __export(tree_LYXBS7DC_exports, { flagsForFuzzing: () => L8, treeCommand: () => O9 }); var init_tree_LYXBS7DC = __esm({ - "node_modules/just-bash/dist/bundle/chunks/tree-LYXBS7DC.js"() { + "../node_modules/just-bash/dist/bundle/chunks/tree-LYXBS7DC.js"() { init_chunk_XVDPCNWR(); init_chunk_HWKDQ44K(); init_chunk_74CEPOFO(); @@ -22566,7 +22566,7 @@ var init_tree_LYXBS7DC = __esm({ } }); -// node_modules/just-bash/dist/bundle/chunks/chunk-RPNGRAAP.js +// ../node_modules/just-bash/dist/bundle/chunks/chunk-RPNGRAAP.js async function w15(a15, s10, n24, r10, l7) { let o14 = { output: "", totalSize: 0, stderr: "" }; if (l7 > E7) return o14; @@ -22637,7 +22637,7 @@ function D7(a15, s10) { } var x17, R4, _8, E7, v17; var init_chunk_RPNGRAAP = __esm({ - "node_modules/just-bash/dist/bundle/chunks/chunk-RPNGRAAP.js"() { + "../node_modules/just-bash/dist/bundle/chunks/chunk-RPNGRAAP.js"() { init_chunk_HWKDQ44K(); init_chunk_74CEPOFO(); x17 = { name: "du", summary: "estimate file space usage", usage: "du [OPTION]... [FILE]...", options: ["-a write counts for all files, not just directories", "-h print sizes in human readable format", "-s display only a total for each argument", "-c produce a grand total", "--max-depth=N print total for directory only if N or fewer levels deep", " --help display this help and exit"] }; @@ -22668,14 +22668,14 @@ var init_chunk_RPNGRAAP = __esm({ } }); -// node_modules/just-bash/dist/bundle/chunks/du-WO2ENHXQ.js +// ../node_modules/just-bash/dist/bundle/chunks/du-WO2ENHXQ.js var du_WO2ENHXQ_exports = {}; __export(du_WO2ENHXQ_exports, { duCommand: () => _8, flagsForFuzzing: () => v17 }); var init_du_WO2ENHXQ = __esm({ - "node_modules/just-bash/dist/bundle/chunks/du-WO2ENHXQ.js"() { + "../node_modules/just-bash/dist/bundle/chunks/du-WO2ENHXQ.js"() { init_chunk_RPNGRAAP(); init_chunk_HWKDQ44K(); init_chunk_74CEPOFO(); @@ -22683,10 +22683,10 @@ var init_du_WO2ENHXQ = __esm({ } }); -// node_modules/just-bash/dist/bundle/chunks/chunk-NAERJDUW.js +// ../node_modules/just-bash/dist/bundle/chunks/chunk-NAERJDUW.js var g12, w16, x18, E8, M9, N9; var init_chunk_NAERJDUW = __esm({ - "node_modules/just-bash/dist/bundle/chunks/chunk-NAERJDUW.js"() { + "../node_modules/just-bash/dist/bundle/chunks/chunk-NAERJDUW.js"() { init_chunk_OJDRYQWQ(); init_chunk_74CEPOFO(); g12 = { name: "env", summary: "run a program in a modified environment", usage: "env [OPTION]... [NAME=VALUE]... [COMMAND [ARG]...]", options: ["-i, --ignore-environment start with an empty environment", "-u NAME, --unset=NAME remove NAME from the environment", " --help display this help and exit"] }; @@ -22757,7 +22757,7 @@ var init_chunk_NAERJDUW = __esm({ } }); -// node_modules/just-bash/dist/bundle/chunks/env-5EPCWSXR.js +// ../node_modules/just-bash/dist/bundle/chunks/env-5EPCWSXR.js var env_5EPCWSXR_exports = {}; __export(env_5EPCWSXR_exports, { envCommand: () => w16, @@ -22766,7 +22766,7 @@ __export(env_5EPCWSXR_exports, { printenvFlagsForFuzzing: () => N9 }); var init_env_5EPCWSXR = __esm({ - "node_modules/just-bash/dist/bundle/chunks/env-5EPCWSXR.js"() { + "../node_modules/just-bash/dist/bundle/chunks/env-5EPCWSXR.js"() { init_chunk_NAERJDUW(); init_chunk_OJDRYQWQ(); init_chunk_74CEPOFO(); @@ -22774,10 +22774,10 @@ var init_env_5EPCWSXR = __esm({ } }); -// node_modules/just-bash/dist/bundle/chunks/chunk-VOBGTVA6.js +// ../node_modules/just-bash/dist/bundle/chunks/chunk-VOBGTVA6.js var d9, o8, m18, c10, p15, h10; var init_chunk_VOBGTVA6 = __esm({ - "node_modules/just-bash/dist/bundle/chunks/chunk-VOBGTVA6.js"() { + "../node_modules/just-bash/dist/bundle/chunks/chunk-VOBGTVA6.js"() { init_chunk_74CEPOFO(); d9 = { name: "alias", summary: "define or display aliases", usage: "alias [name[=value] ...]", options: [" --help display this help and exit"] }; o8 = "BASH_ALIAS_"; @@ -22828,7 +22828,7 @@ var init_chunk_VOBGTVA6 = __esm({ } }); -// node_modules/just-bash/dist/bundle/chunks/alias-JE7RI5QX.js +// ../node_modules/just-bash/dist/bundle/chunks/alias-JE7RI5QX.js var alias_JE7RI5QX_exports = {}; __export(alias_JE7RI5QX_exports, { aliasCommand: () => m18, @@ -22837,17 +22837,17 @@ __export(alias_JE7RI5QX_exports, { unaliasFlagsForFuzzing: () => h10 }); var init_alias_JE7RI5QX = __esm({ - "node_modules/just-bash/dist/bundle/chunks/alias-JE7RI5QX.js"() { + "../node_modules/just-bash/dist/bundle/chunks/alias-JE7RI5QX.js"() { init_chunk_VOBGTVA6(); init_chunk_74CEPOFO(); init_chunk_DXB73IDG(); } }); -// node_modules/just-bash/dist/bundle/chunks/chunk-NCNPKYJZ.js +// ../node_modules/just-bash/dist/bundle/chunks/chunk-NCNPKYJZ.js var p16, h11, m19, u9; var init_chunk_NCNPKYJZ = __esm({ - "node_modules/just-bash/dist/bundle/chunks/chunk-NCNPKYJZ.js"() { + "../node_modules/just-bash/dist/bundle/chunks/chunk-NCNPKYJZ.js"() { init_chunk_74CEPOFO(); p16 = { name: "history", summary: "display command history", usage: "history [n]", options: ["-c clear the history list", " --help display this help and exit"] }; h11 = "BASH_HISTORY"; @@ -22874,24 +22874,24 @@ var init_chunk_NCNPKYJZ = __esm({ } }); -// node_modules/just-bash/dist/bundle/chunks/history-J4QRNGRO.js +// ../node_modules/just-bash/dist/bundle/chunks/history-J4QRNGRO.js var history_J4QRNGRO_exports = {}; __export(history_J4QRNGRO_exports, { flagsForFuzzing: () => u9, historyCommand: () => m19 }); var init_history_J4QRNGRO = __esm({ - "node_modules/just-bash/dist/bundle/chunks/history-J4QRNGRO.js"() { + "../node_modules/just-bash/dist/bundle/chunks/history-J4QRNGRO.js"() { init_chunk_NCNPKYJZ(); init_chunk_74CEPOFO(); init_chunk_DXB73IDG(); } }); -// node_modules/just-bash/dist/bundle/chunks/chunk-TOMNU26N.js +// ../node_modules/just-bash/dist/bundle/chunks/chunk-TOMNU26N.js var $12, P11, H9; var init_chunk_TOMNU26N = __esm({ - "node_modules/just-bash/dist/bundle/chunks/chunk-TOMNU26N.js"() { + "../node_modules/just-bash/dist/bundle/chunks/chunk-TOMNU26N.js"() { init_chunk_IPJHKYVM(); init_chunk_74CEPOFO(); $12 = { name: "xargs", summary: "build and execute command lines from standard input", usage: "xargs [OPTION]... [COMMAND [INITIAL-ARGS]]", options: ["-I REPLACE replace occurrences of REPLACE with input", "-d DELIM use DELIM as input delimiter (e.g., -d '\\n' for newline)", "-n NUM use at most NUM arguments per command line", "-P NUM run at most NUM processes at a time", "-0, --null items are separated by null, not whitespace", "-t, --verbose print commands before executing", "-r, --no-run-if-empty do not run command if input is empty", " --help display this help and exit"] }; @@ -22961,14 +22961,14 @@ var init_chunk_TOMNU26N = __esm({ } }); -// node_modules/just-bash/dist/bundle/chunks/xargs-I6EZUCYF.js +// ../node_modules/just-bash/dist/bundle/chunks/xargs-I6EZUCYF.js var xargs_I6EZUCYF_exports = {}; __export(xargs_I6EZUCYF_exports, { flagsForFuzzing: () => H9, xargsCommand: () => P11 }); var init_xargs_I6EZUCYF = __esm({ - "node_modules/just-bash/dist/bundle/chunks/xargs-I6EZUCYF.js"() { + "../node_modules/just-bash/dist/bundle/chunks/xargs-I6EZUCYF.js"() { init_chunk_TOMNU26N(); init_chunk_IPJHKYVM(); init_chunk_74CEPOFO(); @@ -22976,10 +22976,10 @@ var init_xargs_I6EZUCYF = __esm({ } }); -// node_modules/just-bash/dist/bundle/chunks/chunk-R6QSAL5T.js +// ../node_modules/just-bash/dist/bundle/chunks/chunk-R6QSAL5T.js var e4, t, s3, r9; var init_chunk_R6QSAL5T = __esm({ - "node_modules/just-bash/dist/bundle/chunks/chunk-R6QSAL5T.js"() { + "../node_modules/just-bash/dist/bundle/chunks/chunk-R6QSAL5T.js"() { e4 = { name: "true", async execute() { return { stdout: "", stderr: "", exitCode: 0 }; } }; @@ -22991,7 +22991,7 @@ var init_chunk_R6QSAL5T = __esm({ } }); -// node_modules/just-bash/dist/bundle/chunks/true-WHJNXCHG.js +// ../node_modules/just-bash/dist/bundle/chunks/true-WHJNXCHG.js var true_WHJNXCHG_exports = {}; __export(true_WHJNXCHG_exports, { falseCommand: () => t, @@ -23000,16 +23000,16 @@ __export(true_WHJNXCHG_exports, { trueCommand: () => e4 }); var init_true_WHJNXCHG = __esm({ - "node_modules/just-bash/dist/bundle/chunks/true-WHJNXCHG.js"() { + "../node_modules/just-bash/dist/bundle/chunks/true-WHJNXCHG.js"() { init_chunk_R6QSAL5T(); init_chunk_DXB73IDG(); } }); -// node_modules/just-bash/dist/bundle/chunks/chunk-LL3S3NLB.js +// ../node_modules/just-bash/dist/bundle/chunks/chunk-LL3S3NLB.js var t2, s4, o9; var init_chunk_LL3S3NLB = __esm({ - "node_modules/just-bash/dist/bundle/chunks/chunk-LL3S3NLB.js"() { + "../node_modules/just-bash/dist/bundle/chunks/chunk-LL3S3NLB.js"() { init_chunk_74CEPOFO(); t2 = { name: "clear", summary: "clear the terminal screen", usage: "clear [OPTIONS]", options: [" --help display this help and exit"] }; s4 = { name: "clear", async execute(r10, c15) { @@ -23019,21 +23019,21 @@ var init_chunk_LL3S3NLB = __esm({ } }); -// node_modules/just-bash/dist/bundle/chunks/clear-5CZ5X4YR.js +// ../node_modules/just-bash/dist/bundle/chunks/clear-5CZ5X4YR.js var clear_5CZ5X4YR_exports = {}; __export(clear_5CZ5X4YR_exports, { clearCommand: () => s4, flagsForFuzzing: () => o9 }); var init_clear_5CZ5X4YR = __esm({ - "node_modules/just-bash/dist/bundle/chunks/clear-5CZ5X4YR.js"() { + "../node_modules/just-bash/dist/bundle/chunks/clear-5CZ5X4YR.js"() { init_chunk_LL3S3NLB(); init_chunk_74CEPOFO(); init_chunk_DXB73IDG(); } }); -// node_modules/just-bash/dist/bundle/chunks/chunk-D6CWQ5DW.js +// ../node_modules/just-bash/dist/bundle/chunks/chunk-D6CWQ5DW.js async function o10(t6, e6, n24, r10) { if (!r10.exec) return { stdout: "", stderr: `bash: internal error: exec function not available `, exitCode: 1 }; @@ -23051,7 +23051,7 @@ async function o10(t6, e6, n24, r10) { } var d10, y17, C12, b16, P12; var init_chunk_D6CWQ5DW = __esm({ - "node_modules/just-bash/dist/bundle/chunks/chunk-D6CWQ5DW.js"() { + "../node_modules/just-bash/dist/bundle/chunks/chunk-D6CWQ5DW.js"() { init_chunk_OJDRYQWQ(); init_chunk_74CEPOFO(); d10 = { name: "bash", summary: "execute shell commands or scripts", usage: "bash [OPTIONS] [SCRIPT_FILE] [ARGUMENTS...]", options: ["-c COMMAND execute COMMAND string", " --help display this help and exit"], notes: ["Without -c, reads and executes commands from SCRIPT_FILE.", "Arguments are passed as $1, $2, etc. to the script.", '$0 is set to the script name (or "bash" with -c).'] }; @@ -23092,7 +23092,7 @@ var init_chunk_D6CWQ5DW = __esm({ } }); -// node_modules/just-bash/dist/bundle/chunks/bash-IJWYRKFO.js +// ../node_modules/just-bash/dist/bundle/chunks/bash-IJWYRKFO.js var bash_IJWYRKFO_exports = {}; __export(bash_IJWYRKFO_exports, { bashCommand: () => y17, @@ -23101,7 +23101,7 @@ __export(bash_IJWYRKFO_exports, { shFlagsForFuzzing: () => P12 }); var init_bash_IJWYRKFO = __esm({ - "node_modules/just-bash/dist/bundle/chunks/bash-IJWYRKFO.js"() { + "../node_modules/just-bash/dist/bundle/chunks/bash-IJWYRKFO.js"() { init_chunk_D6CWQ5DW(); init_chunk_OJDRYQWQ(); init_chunk_74CEPOFO(); @@ -23109,7 +23109,7 @@ var init_bash_IJWYRKFO = __esm({ } }); -// node_modules/just-bash/dist/bundle/chunks/chunk-BBXLRYSX.js +// ../node_modules/just-bash/dist/bundle/chunks/chunk-BBXLRYSX.js function W8(t6, r10, e6, n24, p22, o14, u12, c15, s10, f11) { switch (r10) { case "sort": @@ -25316,7 +25316,7 @@ function Ne3(t6) { } var Ot3, Nt3, P13, H10, St3, bt3, Ct3, At3, Y5, ut3; var init_chunk_BBXLRYSX = __esm({ - "node_modules/just-bash/dist/bundle/chunks/chunk-BBXLRYSX.js"() { + "../node_modules/just-bash/dist/bundle/chunks/chunk-BBXLRYSX.js"() { init_chunk_7TSDKFEO(); init_chunk_OJDRYQWQ(); init_chunk_24IMIIXA(); @@ -25713,7 +25713,7 @@ var init_chunk_BBXLRYSX = __esm({ } }); -// node_modules/just-bash/dist/bundle/chunks/chunk-YCFVLTST.js +// ../node_modules/just-bash/dist/bundle/chunks/chunk-YCFVLTST.js function A5(s10) { let r10 = [], t6 = 0, l7 = s10.length; for (; t6 < l7; ) { @@ -25778,7 +25778,7 @@ ${i11.repeat(n24)}}`; } var W9, Y6, Z9; var init_chunk_YCFVLTST = __esm({ - "node_modules/just-bash/dist/bundle/chunks/chunk-YCFVLTST.js"() { + "../node_modules/just-bash/dist/bundle/chunks/chunk-YCFVLTST.js"() { init_chunk_BBXLRYSX(); init_chunk_7TSDKFEO(); init_chunk_24IMIIXA(); @@ -25869,14 +25869,14 @@ var init_chunk_YCFVLTST = __esm({ } }); -// node_modules/just-bash/dist/bundle/chunks/jq-ODXZBPLY.js +// ../node_modules/just-bash/dist/bundle/chunks/jq-ODXZBPLY.js var jq_ODXZBPLY_exports = {}; __export(jq_ODXZBPLY_exports, { flagsForFuzzing: () => Z9, jqCommand: () => Y6 }); var init_jq_ODXZBPLY = __esm({ - "node_modules/just-bash/dist/bundle/chunks/jq-ODXZBPLY.js"() { + "../node_modules/just-bash/dist/bundle/chunks/jq-ODXZBPLY.js"() { init_chunk_YCFVLTST(); init_chunk_BBXLRYSX(); init_chunk_7TSDKFEO(); @@ -25892,7 +25892,7 @@ var init_jq_ODXZBPLY = __esm({ } }); -// node_modules/just-bash/dist/bundle/chunks/chunk-QJ7O6ZN3.js +// ../node_modules/just-bash/dist/bundle/chunks/chunk-QJ7O6ZN3.js async function p17(r10, o14, n24) { if (o14.length === 0 || o14.length === 1 && o14[0] === "-") return { ok: true, data: Uint8Array.from(r10.stdin, (e6) => e6.charCodeAt(0)) }; let d15 = []; @@ -25915,7 +25915,7 @@ async function p17(r10, o14, n24) { } var b17, m20, A6, F10; var init_chunk_QJ7O6ZN3 = __esm({ - "node_modules/just-bash/dist/bundle/chunks/chunk-QJ7O6ZN3.js"() { + "../node_modules/just-bash/dist/bundle/chunks/chunk-QJ7O6ZN3.js"() { init_chunk_HWKDQ44K(); init_chunk_74CEPOFO(); b17 = { name: "base64", summary: "base64 encode/decode data and print to standard output", usage: "base64 [OPTION]... [FILE]", options: ["-d, --decode decode data", "-w, --wrap=COLS wrap encoded lines after COLS character (default 76, 0 to disable)", " --help display this help and exit"] }; @@ -25956,14 +25956,14 @@ var init_chunk_QJ7O6ZN3 = __esm({ } }); -// node_modules/just-bash/dist/bundle/chunks/base64-4YMZCVJ5.js +// ../node_modules/just-bash/dist/bundle/chunks/base64-4YMZCVJ5.js var base64_4YMZCVJ5_exports = {}; __export(base64_4YMZCVJ5_exports, { base64Command: () => A6, flagsForFuzzing: () => F10 }); var init_base64_4YMZCVJ5 = __esm({ - "node_modules/just-bash/dist/bundle/chunks/base64-4YMZCVJ5.js"() { + "../node_modules/just-bash/dist/bundle/chunks/base64-4YMZCVJ5.js"() { init_chunk_QJ7O6ZN3(); init_chunk_HWKDQ44K(); init_chunk_74CEPOFO(); @@ -25971,10 +25971,10 @@ var init_base64_4YMZCVJ5 = __esm({ } }); -// node_modules/diff/libesm/diff/base.js +// ../node_modules/diff/libesm/diff/base.js var Diff; var init_base = __esm({ - "node_modules/diff/libesm/diff/base.js"() { + "../node_modules/diff/libesm/diff/base.js"() { Diff = class { diff(oldStr, newStr, options = {}) { let callback; @@ -26178,7 +26178,7 @@ var init_base = __esm({ } }); -// node_modules/diff/libesm/diff/line.js +// ../node_modules/diff/libesm/diff/line.js function diffLines(oldStr, newStr, options) { return lineDiff.diff(oldStr, newStr, options); } @@ -26202,7 +26202,7 @@ function tokenize(value, options) { } var LineDiff, lineDiff; var init_line = __esm({ - "node_modules/diff/libesm/diff/line.js"() { + "../node_modules/diff/libesm/diff/line.js"() { init_base(); LineDiff = class extends Diff { constructor() { @@ -26232,7 +26232,7 @@ var init_line = __esm({ } }); -// node_modules/diff/libesm/patch/create.js +// ../node_modules/diff/libesm/patch/create.js function structuredPatch(oldFileName, newFileName, oldStr, newStr, oldHeader, newHeader, options) { let optionsObj; if (!options) { @@ -26408,7 +26408,7 @@ function splitLines(text) { } var INCLUDE_HEADERS; var init_create = __esm({ - "node_modules/diff/libesm/patch/create.js"() { + "../node_modules/diff/libesm/patch/create.js"() { init_line(); INCLUDE_HEADERS = { includeIndex: true, @@ -26418,17 +26418,17 @@ var init_create = __esm({ } }); -// node_modules/diff/libesm/index.js +// ../node_modules/diff/libesm/index.js var init_libesm = __esm({ - "node_modules/diff/libesm/index.js"() { + "../node_modules/diff/libesm/index.js"() { init_create(); } }); -// node_modules/just-bash/dist/bundle/chunks/chunk-TLSUDHID.js +// ../node_modules/just-bash/dist/bundle/chunks/chunk-TLSUDHID.js var y18, b18, $14, x19; var init_chunk_TLSUDHID = __esm({ - "node_modules/just-bash/dist/bundle/chunks/chunk-TLSUDHID.js"() { + "../node_modules/just-bash/dist/bundle/chunks/chunk-TLSUDHID.js"() { init_chunk_HWKDQ44K(); init_chunk_74CEPOFO(); init_libesm(); @@ -26463,14 +26463,14 @@ var init_chunk_TLSUDHID = __esm({ } }); -// node_modules/just-bash/dist/bundle/chunks/diff-HJF2MPDN.js +// ../node_modules/just-bash/dist/bundle/chunks/diff-HJF2MPDN.js var diff_HJF2MPDN_exports = {}; __export(diff_HJF2MPDN_exports, { diffCommand: () => $14, flagsForFuzzing: () => x19 }); var init_diff_HJF2MPDN = __esm({ - "node_modules/just-bash/dist/bundle/chunks/diff-HJF2MPDN.js"() { + "../node_modules/just-bash/dist/bundle/chunks/diff-HJF2MPDN.js"() { init_chunk_TLSUDHID(); init_chunk_HWKDQ44K(); init_chunk_74CEPOFO(); @@ -26478,7 +26478,7 @@ var init_diff_HJF2MPDN = __esm({ } }); -// node_modules/just-bash/dist/bundle/chunks/chunk-D7MEQ3VN.js +// ../node_modules/just-bash/dist/bundle/chunks/chunk-D7MEQ3VN.js function s5(a15, i11 = 2) { return String(a15).padStart(i11, "0"); } @@ -26579,7 +26579,7 @@ function h12(a15) { } var g13, T10, S8, M11, D9; var init_chunk_D7MEQ3VN = __esm({ - "node_modules/just-bash/dist/bundle/chunks/chunk-D7MEQ3VN.js"() { + "../node_modules/just-bash/dist/bundle/chunks/chunk-D7MEQ3VN.js"() { init_chunk_74CEPOFO(); g13 = { name: "date", summary: "display the current time in the given FORMAT", usage: "date [OPTION]... [+FORMAT]", options: ["-d, --date=STRING display time described by STRING", "-u, --utc print Coordinated Universal Time (UTC)", "-I, --iso-8601 output date/time in ISO 8601 format", "-R, --rfc-email output RFC 5322 date format", " --help display this help and exit"] }; T10 = ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"]; @@ -26614,21 +26614,21 @@ var init_chunk_D7MEQ3VN = __esm({ } }); -// node_modules/just-bash/dist/bundle/chunks/date-DD7FVA2V.js +// ../node_modules/just-bash/dist/bundle/chunks/date-DD7FVA2V.js var date_DD7FVA2V_exports = {}; __export(date_DD7FVA2V_exports, { dateCommand: () => M11, flagsForFuzzing: () => D9 }); var init_date_DD7FVA2V = __esm({ - "node_modules/just-bash/dist/bundle/chunks/date-DD7FVA2V.js"() { + "../node_modules/just-bash/dist/bundle/chunks/date-DD7FVA2V.js"() { init_chunk_D7MEQ3VN(); init_chunk_74CEPOFO(); init_chunk_DXB73IDG(); } }); -// node_modules/just-bash/dist/bundle/chunks/chunk-3ZUFRYJ4.js +// ../node_modules/just-bash/dist/bundle/chunks/chunk-3ZUFRYJ4.js function n22(e6) { let r10 = e6.match(/^(\d+\.?\d*)(s|m|h|d)?$/); if (!r10) return null; @@ -26647,14 +26647,14 @@ function n22(e6) { } } var init_chunk_3ZUFRYJ4 = __esm({ - "node_modules/just-bash/dist/bundle/chunks/chunk-3ZUFRYJ4.js"() { + "../node_modules/just-bash/dist/bundle/chunks/chunk-3ZUFRYJ4.js"() { } }); -// node_modules/just-bash/dist/bundle/chunks/chunk-GOV5EKKI.js +// ../node_modules/just-bash/dist/bundle/chunks/chunk-GOV5EKKI.js var u10, m21, h13, b20; var init_chunk_GOV5EKKI = __esm({ - "node_modules/just-bash/dist/bundle/chunks/chunk-GOV5EKKI.js"() { + "../node_modules/just-bash/dist/bundle/chunks/chunk-GOV5EKKI.js"() { init_chunk_3ZUFRYJ4(); init_chunk_A5O5YHGN(); init_chunk_74CEPOFO(); @@ -26690,14 +26690,14 @@ NUMBER may be a decimal number.`, options: [" --help display this help and ex } }); -// node_modules/just-bash/dist/bundle/chunks/sleep-VZFPZFWA.js +// ../node_modules/just-bash/dist/bundle/chunks/sleep-VZFPZFWA.js var sleep_VZFPZFWA_exports = {}; __export(sleep_VZFPZFWA_exports, { flagsForFuzzing: () => b20, sleepCommand: () => h13 }); var init_sleep_VZFPZFWA = __esm({ - "node_modules/just-bash/dist/bundle/chunks/sleep-VZFPZFWA.js"() { + "../node_modules/just-bash/dist/bundle/chunks/sleep-VZFPZFWA.js"() { init_chunk_GOV5EKKI(); init_chunk_3ZUFRYJ4(); init_chunk_A5O5YHGN(); @@ -26707,10 +26707,10 @@ var init_sleep_VZFPZFWA = __esm({ } }); -// node_modules/just-bash/dist/bundle/chunks/chunk-YTNYSM6T.js +// ../node_modules/just-bash/dist/bundle/chunks/chunk-YTNYSM6T.js var v19, N10, D10; var init_chunk_YTNYSM6T = __esm({ - "node_modules/just-bash/dist/bundle/chunks/chunk-YTNYSM6T.js"() { + "../node_modules/just-bash/dist/bundle/chunks/chunk-YTNYSM6T.js"() { init_chunk_3ZUFRYJ4(); init_chunk_A5O5YHGN(); init_chunk_IPJHKYVM(); @@ -26771,14 +26771,14 @@ DURATION is a number with optional suffix: } }); -// node_modules/just-bash/dist/bundle/chunks/timeout-VRKMCG72.js +// ../node_modules/just-bash/dist/bundle/chunks/timeout-VRKMCG72.js var timeout_VRKMCG72_exports = {}; __export(timeout_VRKMCG72_exports, { flagsForFuzzing: () => D10, timeoutCommand: () => N10 }); var init_timeout_VRKMCG72 = __esm({ - "node_modules/just-bash/dist/bundle/chunks/timeout-VRKMCG72.js"() { + "../node_modules/just-bash/dist/bundle/chunks/timeout-VRKMCG72.js"() { init_chunk_YTNYSM6T(); init_chunk_3ZUFRYJ4(); init_chunk_A5O5YHGN(); @@ -26789,14 +26789,14 @@ var init_timeout_VRKMCG72 = __esm({ } }); -// node_modules/just-bash/dist/bundle/chunks/chunk-Z6LRHWXI.js +// ../node_modules/just-bash/dist/bundle/chunks/chunk-Z6LRHWXI.js function F11(r10) { let s10 = Math.floor(r10 / 3600), a15 = Math.floor(r10 % 3600 / 60), o14 = r10 % 60; return s10 > 0 ? `${s10}:${a15.toString().padStart(2, "0")}:${o14.toFixed(2).padStart(5, "0")}` : `${a15}:${o14.toFixed(2).padStart(5, "0")}`; } var v20, S9; var init_chunk_Z6LRHWXI = __esm({ - "node_modules/just-bash/dist/bundle/chunks/chunk-Z6LRHWXI.js"() { + "../node_modules/just-bash/dist/bundle/chunks/chunk-Z6LRHWXI.js"() { init_chunk_CWQS3NFK(); init_chunk_IPJHKYVM(); init_chunk_OJDRYQWQ(); @@ -26859,14 +26859,14 @@ sys 0.00 } }); -// node_modules/just-bash/dist/bundle/chunks/time-DEUO3QV2.js +// ../node_modules/just-bash/dist/bundle/chunks/time-DEUO3QV2.js var time_DEUO3QV2_exports = {}; __export(time_DEUO3QV2_exports, { flagsForFuzzing: () => S9, timeCommand: () => v20 }); var init_time_DEUO3QV2 = __esm({ - "node_modules/just-bash/dist/bundle/chunks/time-DEUO3QV2.js"() { + "../node_modules/just-bash/dist/bundle/chunks/time-DEUO3QV2.js"() { init_chunk_Z6LRHWXI(); init_chunk_CWQS3NFK(); init_chunk_IPJHKYVM(); @@ -26876,10 +26876,10 @@ var init_time_DEUO3QV2 = __esm({ } }); -// node_modules/just-bash/dist/bundle/chunks/chunk-A7A2DBEE.js +// ../node_modules/just-bash/dist/bundle/chunks/chunk-A7A2DBEE.js var F12, b21; var init_chunk_A7A2DBEE = __esm({ - "node_modules/just-bash/dist/bundle/chunks/chunk-A7A2DBEE.js"() { + "../node_modules/just-bash/dist/bundle/chunks/chunk-A7A2DBEE.js"() { F12 = { name: "seq", async execute(r10) { let d15 = ` `, f11 = false, s10 = [], t6 = 0; @@ -26938,20 +26938,20 @@ var init_chunk_A7A2DBEE = __esm({ } }); -// node_modules/just-bash/dist/bundle/chunks/seq-RN5ZUASB.js +// ../node_modules/just-bash/dist/bundle/chunks/seq-RN5ZUASB.js var seq_RN5ZUASB_exports = {}; __export(seq_RN5ZUASB_exports, { flagsForFuzzing: () => b21, seqCommand: () => F12 }); var init_seq_RN5ZUASB = __esm({ - "node_modules/just-bash/dist/bundle/chunks/seq-RN5ZUASB.js"() { + "../node_modules/just-bash/dist/bundle/chunks/seq-RN5ZUASB.js"() { init_chunk_A7A2DBEE(); init_chunk_DXB73IDG(); } }); -// node_modules/just-bash/dist/bundle/chunks/chunk-YFG2CMIF.js +// ../node_modules/just-bash/dist/bundle/chunks/chunk-YFG2CMIF.js function x20(s10) { if (s10.length === 1) return s10[0]; let r10 = 0; @@ -27059,7 +27059,7 @@ function x20(s10) { } var S10, E9; var init_chunk_YFG2CMIF = __esm({ - "node_modules/just-bash/dist/bundle/chunks/chunk-YFG2CMIF.js"() { + "../node_modules/just-bash/dist/bundle/chunks/chunk-YFG2CMIF.js"() { init_chunk_YNYSPYQ5(); init_chunk_3THT3N7L(); S10 = { name: "expr", async execute(s10, r10) { @@ -27078,14 +27078,14 @@ var init_chunk_YFG2CMIF = __esm({ } }); -// node_modules/just-bash/dist/bundle/chunks/expr-5T3UU5KE.js +// ../node_modules/just-bash/dist/bundle/chunks/expr-5T3UU5KE.js var expr_5T3UU5KE_exports = {}; __export(expr_5T3UU5KE_exports, { exprCommand: () => S10, flagsForFuzzing: () => E9 }); var init_expr_5T3UU5KE = __esm({ - "node_modules/just-bash/dist/bundle/chunks/expr-5T3UU5KE.js"() { + "../node_modules/just-bash/dist/bundle/chunks/expr-5T3UU5KE.js"() { init_chunk_YFG2CMIF(); init_chunk_YNYSPYQ5(); init_chunk_3THT3N7L(); @@ -27093,7 +27093,7 @@ var init_expr_5T3UU5KE = __esm({ } }); -// node_modules/just-bash/dist/bundle/chunks/chunk-EIZGF4BS.js +// ../node_modules/just-bash/dist/bundle/chunks/chunk-EIZGF4BS.js function L10(n24) { function h18(r10, u12) { return r10 << u12 | r10 >>> 32 - u12; @@ -27182,30 +27182,30 @@ function S11(n24, h18, g17) { } var F13; var init_chunk_EIZGF4BS = __esm({ - "node_modules/just-bash/dist/bundle/chunks/chunk-EIZGF4BS.js"() { + "../node_modules/just-bash/dist/bundle/chunks/chunk-EIZGF4BS.js"() { init_chunk_74CEPOFO(); F13 = /* @__PURE__ */ new Map([["sha1", "SHA-1"], ["sha256", "SHA-256"]]); } }); -// node_modules/just-bash/dist/bundle/chunks/chunk-APT7OOP2.js +// ../node_modules/just-bash/dist/bundle/chunks/chunk-APT7OOP2.js var s6, o11; var init_chunk_APT7OOP2 = __esm({ - "node_modules/just-bash/dist/bundle/chunks/chunk-APT7OOP2.js"() { + "../node_modules/just-bash/dist/bundle/chunks/chunk-APT7OOP2.js"() { init_chunk_EIZGF4BS(); s6 = S11("md5sum", "md5", "compute MD5 message digest"); o11 = { name: "md5sum", flags: [{ flag: "-c", type: "boolean" }], needsFiles: true }; } }); -// node_modules/just-bash/dist/bundle/chunks/md5sum-INMIK4DX.js +// ../node_modules/just-bash/dist/bundle/chunks/md5sum-INMIK4DX.js var md5sum_INMIK4DX_exports = {}; __export(md5sum_INMIK4DX_exports, { flagsForFuzzing: () => o11, md5sumCommand: () => s6 }); var init_md5sum_INMIK4DX = __esm({ - "node_modules/just-bash/dist/bundle/chunks/md5sum-INMIK4DX.js"() { + "../node_modules/just-bash/dist/bundle/chunks/md5sum-INMIK4DX.js"() { init_chunk_APT7OOP2(); init_chunk_EIZGF4BS(); init_chunk_74CEPOFO(); @@ -27213,24 +27213,24 @@ var init_md5sum_INMIK4DX = __esm({ } }); -// node_modules/just-bash/dist/bundle/chunks/chunk-XKQRETAK.js +// ../node_modules/just-bash/dist/bundle/chunks/chunk-XKQRETAK.js var a9, m22; var init_chunk_XKQRETAK = __esm({ - "node_modules/just-bash/dist/bundle/chunks/chunk-XKQRETAK.js"() { + "../node_modules/just-bash/dist/bundle/chunks/chunk-XKQRETAK.js"() { init_chunk_EIZGF4BS(); a9 = S11("sha1sum", "sha1", "compute SHA1 message digest"); m22 = { name: "sha1sum", flags: [{ flag: "-c", type: "boolean" }], needsFiles: true }; } }); -// node_modules/just-bash/dist/bundle/chunks/sha1sum-VJPNLNU6.js +// ../node_modules/just-bash/dist/bundle/chunks/sha1sum-VJPNLNU6.js var sha1sum_VJPNLNU6_exports = {}; __export(sha1sum_VJPNLNU6_exports, { flagsForFuzzing: () => m22, sha1sumCommand: () => a9 }); var init_sha1sum_VJPNLNU6 = __esm({ - "node_modules/just-bash/dist/bundle/chunks/sha1sum-VJPNLNU6.js"() { + "../node_modules/just-bash/dist/bundle/chunks/sha1sum-VJPNLNU6.js"() { init_chunk_XKQRETAK(); init_chunk_EIZGF4BS(); init_chunk_74CEPOFO(); @@ -27238,24 +27238,24 @@ var init_sha1sum_VJPNLNU6 = __esm({ } }); -// node_modules/just-bash/dist/bundle/chunks/chunk-5V6VZH6T.js +// ../node_modules/just-bash/dist/bundle/chunks/chunk-5V6VZH6T.js var a10, m23; var init_chunk_5V6VZH6T = __esm({ - "node_modules/just-bash/dist/bundle/chunks/chunk-5V6VZH6T.js"() { + "../node_modules/just-bash/dist/bundle/chunks/chunk-5V6VZH6T.js"() { init_chunk_EIZGF4BS(); a10 = S11("sha256sum", "sha256", "compute SHA256 message digest"); m23 = { name: "sha256sum", flags: [{ flag: "-c", type: "boolean" }], needsFiles: true }; } }); -// node_modules/just-bash/dist/bundle/chunks/sha256sum-PI32XWXY.js +// ../node_modules/just-bash/dist/bundle/chunks/sha256sum-PI32XWXY.js var sha256sum_PI32XWXY_exports = {}; __export(sha256sum_PI32XWXY_exports, { flagsForFuzzing: () => m23, sha256sumCommand: () => a10 }); var init_sha256sum_PI32XWXY = __esm({ - "node_modules/just-bash/dist/bundle/chunks/sha256sum-PI32XWXY.js"() { + "../node_modules/just-bash/dist/bundle/chunks/sha256sum-PI32XWXY.js"() { init_chunk_5V6VZH6T(); init_chunk_EIZGF4BS(); init_chunk_74CEPOFO(); @@ -27263,7 +27263,7 @@ var init_sha256sum_PI32XWXY = __esm({ } }); -// node_modules/just-bash/dist/bundle/chunks/chunk-CR5AFCPT.js +// ../node_modules/just-bash/dist/bundle/chunks/chunk-CR5AFCPT.js import { open as ct4 } from "node:fs/promises"; function oe4(i11) { try { @@ -27521,7 +27521,7 @@ async function Qt2(i11, e6) { } var Te3, ze4, fe4, Le3, je4, _e3, He3, We3, nt4, x21, D11, M12, J9, _9, L11, S12, st4, X8, Z10, Q6, $15, ft4, Ae3, ce6, mt4, Be3, d12, R5, h14, Ie4, Oe3, De4, b22, Je4, U7, ue6, Ve3, qe4, Ge3, E10, xe5, Nt4, ie5, H11, W10, ur2, xr2, dr2, Ye3, Ke3, et4, he6, we4, Ht3, Wt3, Vt2, qt, Gt3, Dr2, Mr; var init_chunk_CR5AFCPT = __esm({ - "node_modules/just-bash/dist/bundle/chunks/chunk-CR5AFCPT.js"() { + "../node_modules/just-bash/dist/bundle/chunks/chunk-CR5AFCPT.js"() { init_chunk_74CEPOFO(); init_chunk_DXB73IDG(); Te3 = o3((ae9) => { @@ -28796,23 +28796,23 @@ var init_chunk_CR5AFCPT = __esm({ } }); -// node_modules/just-bash/dist/bundle/chunks/file-ZIGAJ4YS.js +// ../node_modules/just-bash/dist/bundle/chunks/file-ZIGAJ4YS.js var file_ZIGAJ4YS_exports = {}; __export(file_ZIGAJ4YS_exports, { fileCommand: () => Dr2, flagsForFuzzing: () => Mr }); var init_file_ZIGAJ4YS = __esm({ - "node_modules/just-bash/dist/bundle/chunks/file-ZIGAJ4YS.js"() { + "../node_modules/just-bash/dist/bundle/chunks/file-ZIGAJ4YS.js"() { init_chunk_CR5AFCPT(); init_chunk_74CEPOFO(); init_chunk_DXB73IDG(); } }); -// node_modules/@mixmark-io/domino/lib/Event.js +// ../node_modules/@mixmark-io/domino/lib/Event.js var require_Event = __commonJS({ - "node_modules/@mixmark-io/domino/lib/Event.js"(exports, module) { + "../node_modules/@mixmark-io/domino/lib/Event.js"(exports, module) { "use strict"; module.exports = Event; Event.CAPTURING_PHASE = 1; @@ -28867,9 +28867,9 @@ var require_Event = __commonJS({ } }); -// node_modules/@mixmark-io/domino/lib/UIEvent.js +// ../node_modules/@mixmark-io/domino/lib/UIEvent.js var require_UIEvent = __commonJS({ - "node_modules/@mixmark-io/domino/lib/UIEvent.js"(exports, module) { + "../node_modules/@mixmark-io/domino/lib/UIEvent.js"(exports, module) { "use strict"; var Event = require_Event(); module.exports = UIEvent; @@ -28889,9 +28889,9 @@ var require_UIEvent = __commonJS({ } }); -// node_modules/@mixmark-io/domino/lib/MouseEvent.js +// ../node_modules/@mixmark-io/domino/lib/MouseEvent.js var require_MouseEvent = __commonJS({ - "node_modules/@mixmark-io/domino/lib/MouseEvent.js"(exports, module) { + "../node_modules/@mixmark-io/domino/lib/MouseEvent.js"(exports, module) { "use strict"; var UIEvent = require_UIEvent(); module.exports = MouseEvent; @@ -28950,9 +28950,9 @@ var require_MouseEvent = __commonJS({ } }); -// node_modules/@mixmark-io/domino/lib/DOMException.js +// ../node_modules/@mixmark-io/domino/lib/DOMException.js var require_DOMException = __commonJS({ - "node_modules/@mixmark-io/domino/lib/DOMException.js"(exports, module) { + "../node_modules/@mixmark-io/domino/lib/DOMException.js"(exports, module) { "use strict"; module.exports = DOMException; var INDEX_SIZE_ERR = 1; @@ -29087,16 +29087,16 @@ var require_DOMException = __commonJS({ } }); -// node_modules/@mixmark-io/domino/lib/config.js +// ../node_modules/@mixmark-io/domino/lib/config.js var require_config = __commonJS({ - "node_modules/@mixmark-io/domino/lib/config.js"(exports) { + "../node_modules/@mixmark-io/domino/lib/config.js"(exports) { exports.isApiWritable = !globalThis.__domino_frozen__; } }); -// node_modules/@mixmark-io/domino/lib/utils.js +// ../node_modules/@mixmark-io/domino/lib/utils.js var require_utils = __commonJS({ - "node_modules/@mixmark-io/domino/lib/utils.js"(exports) { + "../node_modules/@mixmark-io/domino/lib/utils.js"(exports) { "use strict"; var DOMException = require_DOMException(); var ERR = DOMException; @@ -29209,9 +29209,9 @@ var require_utils = __commonJS({ } }); -// node_modules/@mixmark-io/domino/lib/EventTarget.js +// ../node_modules/@mixmark-io/domino/lib/EventTarget.js var require_EventTarget = __commonJS({ - "node_modules/@mixmark-io/domino/lib/EventTarget.js"(exports, module) { + "../node_modules/@mixmark-io/domino/lib/EventTarget.js"(exports, module) { "use strict"; var Event = require_Event(); var MouseEvent = require_MouseEvent(); @@ -29455,9 +29455,9 @@ var require_EventTarget = __commonJS({ } }); -// node_modules/@mixmark-io/domino/lib/LinkedList.js +// ../node_modules/@mixmark-io/domino/lib/LinkedList.js var require_LinkedList = __commonJS({ - "node_modules/@mixmark-io/domino/lib/LinkedList.js"(exports, module) { + "../node_modules/@mixmark-io/domino/lib/LinkedList.js"(exports, module) { "use strict"; var utils = require_utils(); var LinkedList = module.exports = { @@ -29505,9 +29505,9 @@ var require_LinkedList = __commonJS({ } }); -// node_modules/@mixmark-io/domino/lib/NodeUtils.js +// ../node_modules/@mixmark-io/domino/lib/NodeUtils.js var require_NodeUtils = __commonJS({ - "node_modules/@mixmark-io/domino/lib/NodeUtils.js"(exports, module) { + "../node_modules/@mixmark-io/domino/lib/NodeUtils.js"(exports, module) { "use strict"; module.exports = { // NOTE: The `serializeOne()` function used to live on the `Node.prototype` @@ -29705,9 +29705,9 @@ var require_NodeUtils = __commonJS({ } }); -// node_modules/@mixmark-io/domino/lib/Node.js +// ../node_modules/@mixmark-io/domino/lib/Node.js var require_Node = __commonJS({ - "node_modules/@mixmark-io/domino/lib/Node.js"(exports, module) { + "../node_modules/@mixmark-io/domino/lib/Node.js"(exports, module) { "use strict"; module.exports = Node; var EventTarget = require_EventTarget(); @@ -30305,9 +30305,9 @@ var require_Node = __commonJS({ } }); -// node_modules/@mixmark-io/domino/lib/NodeList.es6.js +// ../node_modules/@mixmark-io/domino/lib/NodeList.es6.js var require_NodeList_es6 = __commonJS({ - "node_modules/@mixmark-io/domino/lib/NodeList.es6.js"(exports, module) { + "../node_modules/@mixmark-io/domino/lib/NodeList.es6.js"(exports, module) { "use strict"; module.exports = class NodeList extends Array { constructor(a15) { @@ -30325,9 +30325,9 @@ var require_NodeList_es6 = __commonJS({ } }); -// node_modules/@mixmark-io/domino/lib/NodeList.es5.js +// ../node_modules/@mixmark-io/domino/lib/NodeList.es5.js var require_NodeList_es5 = __commonJS({ - "node_modules/@mixmark-io/domino/lib/NodeList.es5.js"(exports, module) { + "../node_modules/@mixmark-io/domino/lib/NodeList.es5.js"(exports, module) { "use strict"; function item(i11) { return this[i11] || null; @@ -30341,9 +30341,9 @@ var require_NodeList_es5 = __commonJS({ } }); -// node_modules/@mixmark-io/domino/lib/NodeList.js +// ../node_modules/@mixmark-io/domino/lib/NodeList.js var require_NodeList = __commonJS({ - "node_modules/@mixmark-io/domino/lib/NodeList.js"(exports, module) { + "../node_modules/@mixmark-io/domino/lib/NodeList.js"(exports, module) { "use strict"; var NodeList; try { @@ -30355,9 +30355,9 @@ var require_NodeList = __commonJS({ } }); -// node_modules/@mixmark-io/domino/lib/ContainerNode.js +// ../node_modules/@mixmark-io/domino/lib/ContainerNode.js var require_ContainerNode = __commonJS({ - "node_modules/@mixmark-io/domino/lib/ContainerNode.js"(exports, module) { + "../node_modules/@mixmark-io/domino/lib/ContainerNode.js"(exports, module) { "use strict"; module.exports = ContainerNode; var Node = require_Node(); @@ -30426,9 +30426,9 @@ var require_ContainerNode = __commonJS({ } }); -// node_modules/@mixmark-io/domino/lib/xmlnames.js +// ../node_modules/@mixmark-io/domino/lib/xmlnames.js var require_xmlnames = __commonJS({ - "node_modules/@mixmark-io/domino/lib/xmlnames.js"(exports) { + "../node_modules/@mixmark-io/domino/lib/xmlnames.js"(exports) { "use strict"; exports.isValidName = isValidName; exports.isValidQName = isValidQName; @@ -30470,9 +30470,9 @@ var require_xmlnames = __commonJS({ } }); -// node_modules/@mixmark-io/domino/lib/attributes.js +// ../node_modules/@mixmark-io/domino/lib/attributes.js var require_attributes = __commonJS({ - "node_modules/@mixmark-io/domino/lib/attributes.js"(exports) { + "../node_modules/@mixmark-io/domino/lib/attributes.js"(exports) { "use strict"; var utils = require_utils(); exports.property = function(attr) { @@ -30602,9 +30602,9 @@ var require_attributes = __commonJS({ } }); -// node_modules/@mixmark-io/domino/lib/FilteredElementList.js +// ../node_modules/@mixmark-io/domino/lib/FilteredElementList.js var require_FilteredElementList = __commonJS({ - "node_modules/@mixmark-io/domino/lib/FilteredElementList.js"(exports, module) { + "../node_modules/@mixmark-io/domino/lib/FilteredElementList.js"(exports, module) { "use strict"; module.exports = FilteredElementList; var Node = require_Node(); @@ -30674,9 +30674,9 @@ var require_FilteredElementList = __commonJS({ } }); -// node_modules/@mixmark-io/domino/lib/DOMTokenList.js +// ../node_modules/@mixmark-io/domino/lib/DOMTokenList.js var require_DOMTokenList = __commonJS({ - "node_modules/@mixmark-io/domino/lib/DOMTokenList.js"(exports, module) { + "../node_modules/@mixmark-io/domino/lib/DOMTokenList.js"(exports, module) { "use strict"; var utils = require_utils(); module.exports = DOMTokenList; @@ -30840,9 +30840,9 @@ var require_DOMTokenList = __commonJS({ } }); -// node_modules/@mixmark-io/domino/lib/select.js +// ../node_modules/@mixmark-io/domino/lib/select.js var require_select = __commonJS({ - "node_modules/@mixmark-io/domino/lib/select.js"(exports, module) { + "../node_modules/@mixmark-io/domino/lib/select.js"(exports, module) { "use strict"; var window2 = Object.create(null, { location: { get: function() { @@ -31574,9 +31574,9 @@ var require_select = __commonJS({ } }); -// node_modules/@mixmark-io/domino/lib/ChildNode.js +// ../node_modules/@mixmark-io/domino/lib/ChildNode.js var require_ChildNode = __commonJS({ - "node_modules/@mixmark-io/domino/lib/ChildNode.js"(exports, module) { + "../node_modules/@mixmark-io/domino/lib/ChildNode.js"(exports, module) { "use strict"; var Node = require_Node(); var LinkedList = require_LinkedList(); @@ -31675,9 +31675,9 @@ var require_ChildNode = __commonJS({ } }); -// node_modules/@mixmark-io/domino/lib/NonDocumentTypeChildNode.js +// ../node_modules/@mixmark-io/domino/lib/NonDocumentTypeChildNode.js var require_NonDocumentTypeChildNode = __commonJS({ - "node_modules/@mixmark-io/domino/lib/NonDocumentTypeChildNode.js"(exports, module) { + "../node_modules/@mixmark-io/domino/lib/NonDocumentTypeChildNode.js"(exports, module) { "use strict"; var Node = require_Node(); var NonDocumentTypeChildNode = { @@ -31702,9 +31702,9 @@ var require_NonDocumentTypeChildNode = __commonJS({ } }); -// node_modules/@mixmark-io/domino/lib/NamedNodeMap.js +// ../node_modules/@mixmark-io/domino/lib/NamedNodeMap.js var require_NamedNodeMap = __commonJS({ - "node_modules/@mixmark-io/domino/lib/NamedNodeMap.js"(exports, module) { + "../node_modules/@mixmark-io/domino/lib/NamedNodeMap.js"(exports, module) { "use strict"; module.exports = NamedNodeMap; var utils = require_utils(); @@ -31742,9 +31742,9 @@ var require_NamedNodeMap = __commonJS({ } }); -// node_modules/@mixmark-io/domino/lib/Element.js +// ../node_modules/@mixmark-io/domino/lib/Element.js var require_Element = __commonJS({ - "node_modules/@mixmark-io/domino/lib/Element.js"(exports, module) { + "../node_modules/@mixmark-io/domino/lib/Element.js"(exports, module) { "use strict"; module.exports = Element; var xml = require_xmlnames(); @@ -32778,9 +32778,9 @@ var require_Element = __commonJS({ } }); -// node_modules/@mixmark-io/domino/lib/Leaf.js +// ../node_modules/@mixmark-io/domino/lib/Leaf.js var require_Leaf = __commonJS({ - "node_modules/@mixmark-io/domino/lib/Leaf.js"(exports, module) { + "../node_modules/@mixmark-io/domino/lib/Leaf.js"(exports, module) { "use strict"; module.exports = Leaf; var Node = require_Node(); @@ -32819,9 +32819,9 @@ var require_Leaf = __commonJS({ } }); -// node_modules/@mixmark-io/domino/lib/CharacterData.js +// ../node_modules/@mixmark-io/domino/lib/CharacterData.js var require_CharacterData = __commonJS({ - "node_modules/@mixmark-io/domino/lib/CharacterData.js"(exports, module) { + "../node_modules/@mixmark-io/domino/lib/CharacterData.js"(exports, module) { "use strict"; module.exports = CharacterData; var Leaf = require_Leaf(); @@ -32930,9 +32930,9 @@ var require_CharacterData = __commonJS({ } }); -// node_modules/@mixmark-io/domino/lib/Text.js +// ../node_modules/@mixmark-io/domino/lib/Text.js var require_Text = __commonJS({ - "node_modules/@mixmark-io/domino/lib/Text.js"(exports, module) { + "../node_modules/@mixmark-io/domino/lib/Text.js"(exports, module) { "use strict"; module.exports = Text; var utils = require_utils(); @@ -33006,9 +33006,9 @@ var require_Text = __commonJS({ } }); -// node_modules/@mixmark-io/domino/lib/Comment.js +// ../node_modules/@mixmark-io/domino/lib/Comment.js var require_Comment = __commonJS({ - "node_modules/@mixmark-io/domino/lib/Comment.js"(exports, module) { + "../node_modules/@mixmark-io/domino/lib/Comment.js"(exports, module) { "use strict"; module.exports = Comment; var Node = require_Node(); @@ -33053,9 +33053,9 @@ var require_Comment = __commonJS({ } }); -// node_modules/@mixmark-io/domino/lib/DocumentFragment.js +// ../node_modules/@mixmark-io/domino/lib/DocumentFragment.js var require_DocumentFragment = __commonJS({ - "node_modules/@mixmark-io/domino/lib/DocumentFragment.js"(exports, module) { + "../node_modules/@mixmark-io/domino/lib/DocumentFragment.js"(exports, module) { "use strict"; module.exports = DocumentFragment; var Node = require_Node(); @@ -33118,9 +33118,9 @@ var require_DocumentFragment = __commonJS({ } }); -// node_modules/@mixmark-io/domino/lib/ProcessingInstruction.js +// ../node_modules/@mixmark-io/domino/lib/ProcessingInstruction.js var require_ProcessingInstruction = __commonJS({ - "node_modules/@mixmark-io/domino/lib/ProcessingInstruction.js"(exports, module) { + "../node_modules/@mixmark-io/domino/lib/ProcessingInstruction.js"(exports, module) { "use strict"; module.exports = ProcessingInstruction; var Node = require_Node(); @@ -33170,9 +33170,9 @@ var require_ProcessingInstruction = __commonJS({ } }); -// node_modules/@mixmark-io/domino/lib/NodeFilter.js +// ../node_modules/@mixmark-io/domino/lib/NodeFilter.js var require_NodeFilter = __commonJS({ - "node_modules/@mixmark-io/domino/lib/NodeFilter.js"(exports, module) { + "../node_modules/@mixmark-io/domino/lib/NodeFilter.js"(exports, module) { "use strict"; var NodeFilter = { // Constants for acceptNode() @@ -33203,9 +33203,9 @@ var require_NodeFilter = __commonJS({ } }); -// node_modules/@mixmark-io/domino/lib/NodeTraversal.js +// ../node_modules/@mixmark-io/domino/lib/NodeTraversal.js var require_NodeTraversal = __commonJS({ - "node_modules/@mixmark-io/domino/lib/NodeTraversal.js"(exports, module) { + "../node_modules/@mixmark-io/domino/lib/NodeTraversal.js"(exports, module) { "use strict"; var NodeTraversal = module.exports = { nextSkippingChildren, @@ -33270,9 +33270,9 @@ var require_NodeTraversal = __commonJS({ } }); -// node_modules/@mixmark-io/domino/lib/TreeWalker.js +// ../node_modules/@mixmark-io/domino/lib/TreeWalker.js var require_TreeWalker = __commonJS({ - "node_modules/@mixmark-io/domino/lib/TreeWalker.js"(exports, module) { + "../node_modules/@mixmark-io/domino/lib/TreeWalker.js"(exports, module) { "use strict"; module.exports = TreeWalker; var Node = require_Node(); @@ -33551,9 +33551,9 @@ var require_TreeWalker = __commonJS({ } }); -// node_modules/@mixmark-io/domino/lib/NodeIterator.js +// ../node_modules/@mixmark-io/domino/lib/NodeIterator.js var require_NodeIterator = __commonJS({ - "node_modules/@mixmark-io/domino/lib/NodeIterator.js"(exports, module) { + "../node_modules/@mixmark-io/domino/lib/NodeIterator.js"(exports, module) { "use strict"; module.exports = NodeIterator; var NodeFilter = require_NodeFilter(); @@ -33723,9 +33723,9 @@ var require_NodeIterator = __commonJS({ } }); -// node_modules/@mixmark-io/domino/lib/URL.js +// ../node_modules/@mixmark-io/domino/lib/URL.js var require_URL = __commonJS({ - "node_modules/@mixmark-io/domino/lib/URL.js"(exports, module) { + "../node_modules/@mixmark-io/domino/lib/URL.js"(exports, module) { "use strict"; module.exports = URL2; function URL2(url) { @@ -33889,9 +33889,9 @@ var require_URL = __commonJS({ } }); -// node_modules/@mixmark-io/domino/lib/CustomEvent.js +// ../node_modules/@mixmark-io/domino/lib/CustomEvent.js var require_CustomEvent = __commonJS({ - "node_modules/@mixmark-io/domino/lib/CustomEvent.js"(exports, module) { + "../node_modules/@mixmark-io/domino/lib/CustomEvent.js"(exports, module) { "use strict"; module.exports = CustomEvent; var Event = require_Event(); @@ -33904,9 +33904,9 @@ var require_CustomEvent = __commonJS({ } }); -// node_modules/@mixmark-io/domino/lib/events.js +// ../node_modules/@mixmark-io/domino/lib/events.js var require_events = __commonJS({ - "node_modules/@mixmark-io/domino/lib/events.js"(exports, module) { + "../node_modules/@mixmark-io/domino/lib/events.js"(exports, module) { "use strict"; module.exports = { Event: require_Event(), @@ -33917,9 +33917,9 @@ var require_events = __commonJS({ } }); -// node_modules/@mixmark-io/domino/lib/style_parser.js +// ../node_modules/@mixmark-io/domino/lib/style_parser.js var require_style_parser = __commonJS({ - "node_modules/@mixmark-io/domino/lib/style_parser.js"(exports) { + "../node_modules/@mixmark-io/domino/lib/style_parser.js"(exports) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.hyphenate = exports.parse = void 0; @@ -33987,9 +33987,9 @@ var require_style_parser = __commonJS({ } }); -// node_modules/@mixmark-io/domino/lib/CSSStyleDeclaration.js +// ../node_modules/@mixmark-io/domino/lib/CSSStyleDeclaration.js var require_CSSStyleDeclaration = __commonJS({ - "node_modules/@mixmark-io/domino/lib/CSSStyleDeclaration.js"(exports, module) { + "../node_modules/@mixmark-io/domino/lib/CSSStyleDeclaration.js"(exports, module) { "use strict"; var { parse } = require_style_parser(); module.exports = function(elt) { @@ -34171,9 +34171,9 @@ var require_CSSStyleDeclaration = __commonJS({ } }); -// node_modules/@mixmark-io/domino/lib/URLUtils.js +// ../node_modules/@mixmark-io/domino/lib/URLUtils.js var require_URLUtils = __commonJS({ - "node_modules/@mixmark-io/domino/lib/URLUtils.js"(exports, module) { + "../node_modules/@mixmark-io/domino/lib/URLUtils.js"(exports, module) { "use strict"; var URL2 = require_URL(); module.exports = URLUtils; @@ -34418,9 +34418,9 @@ var require_URLUtils = __commonJS({ } }); -// node_modules/@mixmark-io/domino/lib/defineElement.js +// ../node_modules/@mixmark-io/domino/lib/defineElement.js var require_defineElement = __commonJS({ - "node_modules/@mixmark-io/domino/lib/defineElement.js"(exports, module) { + "../node_modules/@mixmark-io/domino/lib/defineElement.js"(exports, module) { "use strict"; var attributes = require_attributes(); var isApiWritable = require_config().isApiWritable; @@ -34482,9 +34482,9 @@ var require_defineElement = __commonJS({ } }); -// node_modules/@mixmark-io/domino/lib/htmlelts.js +// ../node_modules/@mixmark-io/domino/lib/htmlelts.js var require_htmlelts = __commonJS({ - "node_modules/@mixmark-io/domino/lib/htmlelts.js"(exports) { + "../node_modules/@mixmark-io/domino/lib/htmlelts.js"(exports) { "use strict"; var Node = require_Node(); var Element = require_Element(); @@ -36037,9 +36037,9 @@ var require_htmlelts = __commonJS({ } }); -// node_modules/@mixmark-io/domino/lib/svg.js +// ../node_modules/@mixmark-io/domino/lib/svg.js var require_svg = __commonJS({ - "node_modules/@mixmark-io/domino/lib/svg.js"(exports) { + "../node_modules/@mixmark-io/domino/lib/svg.js"(exports) { "use strict"; var Element = require_Element(); var defineElement = require_defineElement(); @@ -36166,9 +36166,9 @@ var require_svg = __commonJS({ } }); -// node_modules/@mixmark-io/domino/lib/MutationConstants.js +// ../node_modules/@mixmark-io/domino/lib/MutationConstants.js var require_MutationConstants = __commonJS({ - "node_modules/@mixmark-io/domino/lib/MutationConstants.js"(exports, module) { + "../node_modules/@mixmark-io/domino/lib/MutationConstants.js"(exports, module) { "use strict"; module.exports = { VALUE: 1, @@ -36187,9 +36187,9 @@ var require_MutationConstants = __commonJS({ } }); -// node_modules/@mixmark-io/domino/lib/Document.js +// ../node_modules/@mixmark-io/domino/lib/Document.js var require_Document = __commonJS({ - "node_modules/@mixmark-io/domino/lib/Document.js"(exports, module) { + "../node_modules/@mixmark-io/domino/lib/Document.js"(exports, module) { "use strict"; module.exports = Document; var Node = require_Node(); @@ -36931,9 +36931,9 @@ var require_Document = __commonJS({ } }); -// node_modules/@mixmark-io/domino/lib/DocumentType.js +// ../node_modules/@mixmark-io/domino/lib/DocumentType.js var require_DocumentType = __commonJS({ - "node_modules/@mixmark-io/domino/lib/DocumentType.js"(exports, module) { + "../node_modules/@mixmark-io/domino/lib/DocumentType.js"(exports, module) { "use strict"; module.exports = DocumentType; var Node = require_Node(); @@ -36970,9 +36970,9 @@ var require_DocumentType = __commonJS({ } }); -// node_modules/@mixmark-io/domino/lib/HTMLParser.js +// ../node_modules/@mixmark-io/domino/lib/HTMLParser.js var require_HTMLParser = __commonJS({ - "node_modules/@mixmark-io/domino/lib/HTMLParser.js"(exports, module) { + "../node_modules/@mixmark-io/domino/lib/HTMLParser.js"(exports, module) { "use strict"; module.exports = HTMLParser; var Document = require_Document(); @@ -45132,9 +45132,9 @@ var require_HTMLParser = __commonJS({ } }); -// node_modules/@mixmark-io/domino/lib/DOMImplementation.js +// ../node_modules/@mixmark-io/domino/lib/DOMImplementation.js var require_DOMImplementation = __commonJS({ - "node_modules/@mixmark-io/domino/lib/DOMImplementation.js"(exports, module) { + "../node_modules/@mixmark-io/domino/lib/DOMImplementation.js"(exports, module) { "use strict"; module.exports = DOMImplementation; var Document = require_Document(); @@ -45211,9 +45211,9 @@ var require_DOMImplementation = __commonJS({ } }); -// node_modules/@mixmark-io/domino/lib/Location.js +// ../node_modules/@mixmark-io/domino/lib/Location.js var require_Location = __commonJS({ - "node_modules/@mixmark-io/domino/lib/Location.js"(exports, module) { + "../node_modules/@mixmark-io/domino/lib/Location.js"(exports, module) { "use strict"; var URL2 = require_URL(); var URLUtils = require_URLUtils(); @@ -45251,9 +45251,9 @@ var require_Location = __commonJS({ } }); -// node_modules/@mixmark-io/domino/lib/NavigatorID.js +// ../node_modules/@mixmark-io/domino/lib/NavigatorID.js var require_NavigatorID = __commonJS({ - "node_modules/@mixmark-io/domino/lib/NavigatorID.js"(exports, module) { + "../node_modules/@mixmark-io/domino/lib/NavigatorID.js"(exports, module) { "use strict"; var NavigatorID = Object.create(null, { appCodeName: { value: "Mozilla" }, @@ -45273,9 +45273,9 @@ var require_NavigatorID = __commonJS({ } }); -// node_modules/@mixmark-io/domino/lib/WindowTimers.js +// ../node_modules/@mixmark-io/domino/lib/WindowTimers.js var require_WindowTimers = __commonJS({ - "node_modules/@mixmark-io/domino/lib/WindowTimers.js"(exports, module) { + "../node_modules/@mixmark-io/domino/lib/WindowTimers.js"(exports, module) { "use strict"; var WindowTimers = { setTimeout, @@ -45287,9 +45287,9 @@ var require_WindowTimers = __commonJS({ } }); -// node_modules/@mixmark-io/domino/lib/impl.js +// ../node_modules/@mixmark-io/domino/lib/impl.js var require_impl = __commonJS({ - "node_modules/@mixmark-io/domino/lib/impl.js"(exports, module) { + "../node_modules/@mixmark-io/domino/lib/impl.js"(exports, module) { "use strict"; var utils = require_utils(); exports = module.exports = { @@ -45318,9 +45318,9 @@ var require_impl = __commonJS({ } }); -// node_modules/@mixmark-io/domino/lib/Window.js +// ../node_modules/@mixmark-io/domino/lib/Window.js var require_Window = __commonJS({ - "node_modules/@mixmark-io/domino/lib/Window.js"(exports, module) { + "../node_modules/@mixmark-io/domino/lib/Window.js"(exports, module) { "use strict"; var DOMImplementation = require_DOMImplementation(); var EventTarget = require_EventTarget(); @@ -45386,9 +45386,9 @@ var require_Window = __commonJS({ } }); -// node_modules/@mixmark-io/domino/lib/index.js +// ../node_modules/@mixmark-io/domino/lib/index.js var require_lib = __commonJS({ - "node_modules/@mixmark-io/domino/lib/index.js"(exports) { + "../node_modules/@mixmark-io/domino/lib/index.js"(exports) { "use strict"; var DOMImplementation = require_DOMImplementation(); var HTMLParser = require_HTMLParser(); @@ -45469,9 +45469,9 @@ var require_lib = __commonJS({ } }); -// node_modules/turndown/lib/turndown.cjs.js +// ../node_modules/turndown/lib/turndown.cjs.js var require_turndown_cjs = __commonJS({ - "node_modules/turndown/lib/turndown.cjs.js"(exports, module) { + "../node_modules/turndown/lib/turndown.cjs.js"(exports, module) { "use strict"; function extend(destination) { for (var i11 = 1; i11 < arguments.length; i11++) { @@ -46114,10 +46114,10 @@ var require_turndown_cjs = __commonJS({ } }); -// node_modules/just-bash/dist/bundle/chunks/chunk-MDLLFABN.js +// ../node_modules/just-bash/dist/bundle/chunks/chunk-MDLLFABN.js var import_turndown, p18, g14, x22; var init_chunk_MDLLFABN = __esm({ - "node_modules/just-bash/dist/bundle/chunks/chunk-MDLLFABN.js"() { + "../node_modules/just-bash/dist/bundle/chunks/chunk-MDLLFABN.js"() { init_chunk_74CEPOFO(); import_turndown = __toESM(require_turndown_cjs(), 1); p18 = { name: "html-to-markdown", summary: "convert HTML to Markdown (BashEnv extension)", usage: "html-to-markdown [OPTION]... [FILE]", description: ["Convert HTML content to Markdown format using the turndown library.", "This is a non-standard BashEnv extension command, not available in regular bash.", "", "Read HTML from FILE or standard input and output Markdown to standard output.", "Commonly used with curl to convert web pages:", " curl -s https://example.com | html-to-markdown", "", "Supported HTML elements:", " - Headings (h1-h6) \u2192 # Markdown headings", " - Paragraphs (p) \u2192 Plain text with blank lines", " - Links (a) \u2192 [text](url)", " - Images (img) \u2192 ![alt](src)", " - Bold/Strong \u2192 **text**", " - Italic/Em \u2192 _text_", " - Code (code, pre) \u2192 `inline` or fenced blocks", " - Lists (ul, ol, li) \u2192 - or 1. items", " - Blockquotes \u2192 > quoted text", " - Horizontal rules (hr) \u2192 ---"], options: ["-b, --bullet=CHAR bullet character for unordered lists (-, +, or *)", "-c, --code=FENCE fence style for code blocks (``` or ~~~)", "-r, --hr=STRING string for horizontal rules (default: ---)", " --heading-style=STYLE", " heading style: 'atx' for # headings (default),", " 'setext' for underlined headings (h1/h2 only)", " --help display this help and exit"], examples: ["echo '

Hello

World

' | html-to-markdown", "html-to-markdown page.html", "curl -s https://example.com | html-to-markdown > page.md"] }; @@ -46165,21 +46165,21 @@ var init_chunk_MDLLFABN = __esm({ } }); -// node_modules/just-bash/dist/bundle/chunks/html-to-markdown-TFCECAGV.js +// ../node_modules/just-bash/dist/bundle/chunks/html-to-markdown-TFCECAGV.js var html_to_markdown_TFCECAGV_exports = {}; __export(html_to_markdown_TFCECAGV_exports, { flagsForFuzzing: () => x22, htmlToMarkdownCommand: () => g14 }); var init_html_to_markdown_TFCECAGV = __esm({ - "node_modules/just-bash/dist/bundle/chunks/html-to-markdown-TFCECAGV.js"() { + "../node_modules/just-bash/dist/bundle/chunks/html-to-markdown-TFCECAGV.js"() { init_chunk_MDLLFABN(); init_chunk_74CEPOFO(); init_chunk_DXB73IDG(); } }); -// node_modules/just-bash/dist/bundle/chunks/chunk-MLXIYONF.js +// ../node_modules/just-bash/dist/bundle/chunks/chunk-MLXIYONF.js function d13(n24) { let e6 = [], s10 = new Set(n24); e6.push(`Available commands: @@ -46201,7 +46201,7 @@ function d13(n24) { } var c11, h15, p19; var init_chunk_MLXIYONF = __esm({ - "node_modules/just-bash/dist/bundle/chunks/chunk-MLXIYONF.js"() { + "../node_modules/just-bash/dist/bundle/chunks/chunk-MLXIYONF.js"() { init_chunk_IPJHKYVM(); c11 = /* @__PURE__ */ new Map([["File operations", ["ls", "cat", "head", "tail", "wc", "touch", "mkdir", "rm", "cp", "mv", "ln", "chmod", "stat", "readlink"]], ["Text processing", ["grep", "sed", "awk", "sort", "uniq", "cut", "tr", "tee", "diff"]], ["Search", ["find"]], ["Navigation & paths", ["pwd", "basename", "dirname", "tree", "du"]], ["Environment & shell", ["echo", "printf", "env", "printenv", "export", "alias", "unalias", "history", "clear", "true", "false", "bash", "sh"]], ["Data processing", ["xargs", "jq", "base64", "date"]], ["Network", ["curl", "html-to-markdown"]]]); h15 = { name: "help", async execute(n24, e6) { @@ -46226,24 +46226,24 @@ Otherwise, lists all available commands. } }); -// node_modules/just-bash/dist/bundle/chunks/help-VVWX7SA5.js +// ../node_modules/just-bash/dist/bundle/chunks/help-VVWX7SA5.js var help_VVWX7SA5_exports = {}; __export(help_VVWX7SA5_exports, { flagsForFuzzing: () => p19, helpCommand: () => h15 }); var init_help_VVWX7SA5 = __esm({ - "node_modules/just-bash/dist/bundle/chunks/help-VVWX7SA5.js"() { + "../node_modules/just-bash/dist/bundle/chunks/help-VVWX7SA5.js"() { init_chunk_MLXIYONF(); init_chunk_IPJHKYVM(); init_chunk_DXB73IDG(); } }); -// node_modules/just-bash/dist/bundle/chunks/chunk-A65PWWJC.js +// ../node_modules/just-bash/dist/bundle/chunks/chunk-A65PWWJC.js var g15, w17, A8, v21; var init_chunk_A65PWWJC = __esm({ - "node_modules/just-bash/dist/bundle/chunks/chunk-A65PWWJC.js"() { + "../node_modules/just-bash/dist/bundle/chunks/chunk-A65PWWJC.js"() { init_chunk_HWKDQ44K(); init_chunk_74CEPOFO(); g15 = { name: "which", summary: "locate a command", usage: "which [-as] program ...", options: ["-a List all instances of executables found", "-s No output, just return 0 if found, 1 if not", "--help display this help and exit"] }; @@ -46271,14 +46271,14 @@ var init_chunk_A65PWWJC = __esm({ } }); -// node_modules/just-bash/dist/bundle/chunks/which-XZHEH76L.js +// ../node_modules/just-bash/dist/bundle/chunks/which-XZHEH76L.js var which_XZHEH76L_exports = {}; __export(which_XZHEH76L_exports, { flagsForFuzzing: () => v21, whichCommand: () => A8 }); var init_which_XZHEH76L = __esm({ - "node_modules/just-bash/dist/bundle/chunks/which-XZHEH76L.js"() { + "../node_modules/just-bash/dist/bundle/chunks/which-XZHEH76L.js"() { init_chunk_A65PWWJC(); init_chunk_HWKDQ44K(); init_chunk_74CEPOFO(); @@ -46286,7 +46286,7 @@ var init_which_XZHEH76L = __esm({ } }); -// node_modules/just-bash/dist/bundle/chunks/chunk-MHTUABJP.js +// ../node_modules/just-bash/dist/bundle/chunks/chunk-MHTUABJP.js async function c12(e6, t6) { if (e6.length > 0 && e6[0] !== "-") { let i11 = t6.fs.resolvePath(t6.cwd, e6[0]); @@ -46313,78 +46313,78 @@ async function c12(e6, t6) { } var l5, a11; var init_chunk_MHTUABJP = __esm({ - "node_modules/just-bash/dist/bundle/chunks/chunk-MHTUABJP.js"() { + "../node_modules/just-bash/dist/bundle/chunks/chunk-MHTUABJP.js"() { l5 = { name: "tac", execute: c12 }; a11 = { name: "tac", flags: [], stdinType: "text", needsFiles: true }; } }); -// node_modules/just-bash/dist/bundle/chunks/tac-SJGXQ4T2.js +// ../node_modules/just-bash/dist/bundle/chunks/tac-SJGXQ4T2.js var tac_SJGXQ4T2_exports = {}; __export(tac_SJGXQ4T2_exports, { flagsForFuzzing: () => a11, tac: () => l5 }); var init_tac_SJGXQ4T2 = __esm({ - "node_modules/just-bash/dist/bundle/chunks/tac-SJGXQ4T2.js"() { + "../node_modules/just-bash/dist/bundle/chunks/tac-SJGXQ4T2.js"() { init_chunk_MHTUABJP(); init_chunk_DXB73IDG(); } }); -// node_modules/just-bash/dist/bundle/chunks/chunk-4HHKTUW3.js +// ../node_modules/just-bash/dist/bundle/chunks/chunk-4HHKTUW3.js async function t5(e6, n24) { return { stdout: `localhost `, stderr: "", exitCode: 0 }; } var o12, s7; var init_chunk_4HHKTUW3 = __esm({ - "node_modules/just-bash/dist/bundle/chunks/chunk-4HHKTUW3.js"() { + "../node_modules/just-bash/dist/bundle/chunks/chunk-4HHKTUW3.js"() { o12 = { name: "hostname", execute: t5 }; s7 = { name: "hostname", flags: [] }; } }); -// node_modules/just-bash/dist/bundle/chunks/hostname-BK6HG2DE.js +// ../node_modules/just-bash/dist/bundle/chunks/hostname-BK6HG2DE.js var hostname_BK6HG2DE_exports = {}; __export(hostname_BK6HG2DE_exports, { flagsForFuzzing: () => s7, hostname: () => o12 }); var init_hostname_BK6HG2DE = __esm({ - "node_modules/just-bash/dist/bundle/chunks/hostname-BK6HG2DE.js"() { + "../node_modules/just-bash/dist/bundle/chunks/hostname-BK6HG2DE.js"() { init_chunk_4HHKTUW3(); init_chunk_DXB73IDG(); } }); -// node_modules/just-bash/dist/bundle/chunks/chunk-HJQJAYMS.js +// ../node_modules/just-bash/dist/bundle/chunks/chunk-HJQJAYMS.js async function e5(t6, o14) { return { stdout: `user `, stderr: "", exitCode: 0 }; } var a12, n23; var init_chunk_HJQJAYMS = __esm({ - "node_modules/just-bash/dist/bundle/chunks/chunk-HJQJAYMS.js"() { + "../node_modules/just-bash/dist/bundle/chunks/chunk-HJQJAYMS.js"() { a12 = { name: "whoami", execute: e5 }; n23 = { name: "whoami", flags: [] }; } }); -// node_modules/just-bash/dist/bundle/chunks/whoami-DGKU3D2X.js +// ../node_modules/just-bash/dist/bundle/chunks/whoami-DGKU3D2X.js var whoami_DGKU3D2X_exports = {}; __export(whoami_DGKU3D2X_exports, { flagsForFuzzing: () => n23, whoami: () => a12 }); var init_whoami_DGKU3D2X = __esm({ - "node_modules/just-bash/dist/bundle/chunks/whoami-DGKU3D2X.js"() { + "../node_modules/just-bash/dist/bundle/chunks/whoami-DGKU3D2X.js"() { init_chunk_HJQJAYMS(); init_chunk_DXB73IDG(); } }); -// node_modules/just-bash/dist/bundle/chunks/chunk-PP6PSHAB.js +// ../node_modules/just-bash/dist/bundle/chunks/chunk-PP6PSHAB.js async function x23(a15, u12) { let o14 = "octal", n24 = [], i11 = []; for (let t6 = 0; t6 < a15.length; t6++) { @@ -46435,26 +46435,26 @@ async function x23(a15, u12) { } var $16, v22; var init_chunk_PP6PSHAB = __esm({ - "node_modules/just-bash/dist/bundle/chunks/chunk-PP6PSHAB.js"() { + "../node_modules/just-bash/dist/bundle/chunks/chunk-PP6PSHAB.js"() { $16 = { name: "od", execute: x23 }; v22 = { name: "od", flags: [{ flag: "-c", type: "boolean" }, { flag: "-A", type: "value", valueHint: "string" }, { flag: "-t", type: "value", valueHint: "string" }, { flag: "-N", type: "value", valueHint: "number" }], stdinType: "text", needsFiles: true }; } }); -// node_modules/just-bash/dist/bundle/chunks/od-VJEF2UR5.js +// ../node_modules/just-bash/dist/bundle/chunks/od-VJEF2UR5.js var od_VJEF2UR5_exports = {}; __export(od_VJEF2UR5_exports, { flagsForFuzzing: () => v22, od: () => $16 }); var init_od_VJEF2UR5 = __esm({ - "node_modules/just-bash/dist/bundle/chunks/od-VJEF2UR5.js"() { + "../node_modules/just-bash/dist/bundle/chunks/od-VJEF2UR5.js"() { init_chunk_PP6PSHAB(); init_chunk_DXB73IDG(); } }); -// node_modules/just-bash/dist/bundle/chunks/chunk-LTZRCH7N.js +// ../node_modules/just-bash/dist/bundle/chunks/chunk-LTZRCH7N.js import { constants as x24, gunzipSync as F14, gzipSync as S13 } from "node:zlib"; function E11(e6) { return e6.best ? x24.Z_BEST_COMPRESSION : e6.level8 ? 8 : e6.level7 ? 7 : e6.level6 ? 6 : e6.level5 ? 5 : e6.level4 ? 4 : e6.level3 ? 3 : e6.level2 ? 2 : e6.fast ? x24.Z_BEST_SPEED : x24.Z_DEFAULT_COMPRESSION; @@ -46678,7 +46678,7 @@ async function C14(e6, t6, r10) { } var O10, U8, D12, T11, G5, M13, Z11, R6, K9, j10; var init_chunk_LTZRCH7N = __esm({ - "node_modules/just-bash/dist/bundle/chunks/chunk-LTZRCH7N.js"() { + "../node_modules/just-bash/dist/bundle/chunks/chunk-LTZRCH7N.js"() { init_chunk_HWKDQ44K(); init_chunk_74CEPOFO(); O10 = { name: "gzip", summary: "compress or expand files", usage: "gzip [OPTION]... [FILE]...", description: `Compress FILEs (by default, in-place). @@ -46708,7 +46708,7 @@ When no FILE is given, or when FILE is -, read from standard input.`, options: [ } }); -// node_modules/just-bash/dist/bundle/chunks/gzip-AQXSGOVS.js +// ../node_modules/just-bash/dist/bundle/chunks/gzip-AQXSGOVS.js var gzip_AQXSGOVS_exports = {}; __export(gzip_AQXSGOVS_exports, { flagsForFuzzing: () => R6, @@ -46719,7 +46719,7 @@ __export(gzip_AQXSGOVS_exports, { zcatFlagsForFuzzing: () => j10 }); var init_gzip_AQXSGOVS = __esm({ - "node_modules/just-bash/dist/bundle/chunks/gzip-AQXSGOVS.js"() { + "../node_modules/just-bash/dist/bundle/chunks/gzip-AQXSGOVS.js"() { init_chunk_LTZRCH7N(); init_chunk_HWKDQ44K(); init_chunk_74CEPOFO(); @@ -46727,9 +46727,9 @@ var init_gzip_AQXSGOVS = __esm({ } }); -// node_modules/amdefine/amdefine.js +// ../node_modules/amdefine/amdefine.js var require_amdefine = __commonJS({ - "node_modules/amdefine/amdefine.js"(exports, module) { + "../node_modules/amdefine/amdefine.js"(exports, module) { "use strict"; function amdefine(module2, requireFn) { "use strict"; @@ -46918,9 +46918,9 @@ var require_amdefine = __commonJS({ } }); -// node_modules/compressjs/main.js +// ../node_modules/compressjs/main.js var require_main = __commonJS({ - "node_modules/compressjs/main.js"(exports, module) { + "../node_modules/compressjs/main.js"(exports, module) { if (typeof define2 !== "function") { define2 = require_amdefine()(module); } @@ -46956,7 +46956,7 @@ var require_main = __commonJS({ } }); -// node_modules/just-bash/dist/bundle/chunks/chunk-ZXL7TQLN.js +// ../node_modules/just-bash/dist/bundle/chunks/chunk-ZXL7TQLN.js function v24(e6, t6, n24, r10) { r10 && F15.encodeInto(r10, e6.subarray(t6, t6 + n24)); } @@ -48111,7 +48111,7 @@ async function pt4(e6, t6, n24) { } var import_compressjs, j11, ue7, fe5, Z12, Be4, Ne4, De5, $17, F15, de7, b24, X9, Le4, We4, Ye4, O11, W12, k13, M14, ye5, B5, N11, D13, L13, y20, xe6, ve5, Me4, ot4, Ft3, zt2; var init_chunk_ZXL7TQLN = __esm({ - "node_modules/just-bash/dist/bundle/chunks/chunk-ZXL7TQLN.js"() { + "../node_modules/just-bash/dist/bundle/chunks/chunk-ZXL7TQLN.js"() { init_chunk_X2AJGDEF(); init_chunk_5QMZ5MUS(); init_chunk_YNYSPYQ5(); @@ -48193,14 +48193,14 @@ var init_chunk_ZXL7TQLN = __esm({ } }); -// node_modules/just-bash/dist/bundle/chunks/tar-232RCEFK.js +// ../node_modules/just-bash/dist/bundle/chunks/tar-232RCEFK.js var tar_232RCEFK_exports = {}; __export(tar_232RCEFK_exports, { flagsForFuzzing: () => zt2, tarCommand: () => Ft3 }); var init_tar_232RCEFK = __esm({ - "node_modules/just-bash/dist/bundle/chunks/tar-232RCEFK.js"() { + "../node_modules/just-bash/dist/bundle/chunks/tar-232RCEFK.js"() { init_chunk_ZXL7TQLN(); init_chunk_X2AJGDEF(); init_chunk_5QMZ5MUS(); @@ -48210,10 +48210,10 @@ var init_tar_232RCEFK = __esm({ } }); -// node_modules/just-bash/dist/bundle/chunks/chunk-SYMJJMQ4.js +// ../node_modules/just-bash/dist/bundle/chunks/chunk-SYMJJMQ4.js var xe7; var init_chunk_SYMJJMQ4 = __esm({ - "node_modules/just-bash/dist/bundle/chunks/chunk-SYMJJMQ4.js"() { + "../node_modules/just-bash/dist/bundle/chunks/chunk-SYMJJMQ4.js"() { init_chunk_DXB73IDG(); xe7 = o3((de10, pe7) => { (function(oe7, R13) { @@ -48821,7 +48821,7 @@ var init_chunk_SYMJJMQ4 = __esm({ } }); -// node_modules/just-bash/dist/bundle/chunks/chunk-XORM457F.js +// ../node_modules/just-bash/dist/bundle/chunks/chunk-XORM457F.js function St4(s10, e6) { let t6 = [], n24 = e6.exec(s10); for (; n24; ) { @@ -49774,7 +49774,7 @@ function Mh(s10) { } var Xi, O12, Ke5, Us, Pt3, Js, z9, Mt4, Je6, C16, We5, xt5, Ge5, Tr2, Qe5, He5, Cr2, nn, Jt3, an2, se9, cn2, ie7, Te5, re5, Oe5, tt5, Zt3, hn2, ke5, mn2, yn2, to, io, Nn2, os2, Tn2, mo, go, bo, Cn2, Pn2, vo, Mo, Vn3, xo, lt5, ut6, dt6, gs2, Xn2, Dn2, Xo, Qo, Ce5, ta, na, ei, si, ca, ua, pa2, ya, oi, va, Ta, Ia, Ss2, gi, bi, Si, Ra, Ua, Pi, Ha, za, Za, be6, el, tl, sl, il, cl, ji, Nt5, V11, _e5, x26, fl, ul, dl, hl, Be5, Sl2, El, Al2, Ps2, we6, $l, As2, Ei, T12, Kl, Fe4, Rl, Yl, Ul, Jl, Qi, Gl, tr2, bt4, kh, qh, Ja, Ph, hg, pg; var init_chunk_XORM457F = __esm({ - "node_modules/just-bash/dist/bundle/chunks/chunk-XORM457F.js"() { + "../node_modules/just-bash/dist/bundle/chunks/chunk-XORM457F.js"() { init_chunk_SYMJJMQ4(); init_chunk_BBXLRYSX(); init_chunk_7TSDKFEO(); @@ -54259,14 +54259,14 @@ EXAMPLES: } }); -// node_modules/just-bash/dist/bundle/chunks/yq-MJMAR36V.js +// ../node_modules/just-bash/dist/bundle/chunks/yq-MJMAR36V.js var yq_MJMAR36V_exports = {}; __export(yq_MJMAR36V_exports, { flagsForFuzzing: () => pg, yqCommand: () => hg }); var init_yq_MJMAR36V = __esm({ - "node_modules/just-bash/dist/bundle/chunks/yq-MJMAR36V.js"() { + "../node_modules/just-bash/dist/bundle/chunks/yq-MJMAR36V.js"() { init_chunk_XORM457F(); init_chunk_SYMJJMQ4(); init_chunk_BBXLRYSX(); @@ -54282,7 +54282,7 @@ var init_yq_MJMAR36V = __esm({ } }); -// node_modules/just-bash/dist/bundle/chunks/chunk-F55TLFGB.js +// ../node_modules/just-bash/dist/bundle/chunks/chunk-F55TLFGB.js function j12() { return /* @__PURE__ */ Object.create(null); } @@ -54369,28 +54369,28 @@ async function k14(e6, o14) { } var w18; var init_chunk_F55TLFGB = __esm({ - "node_modules/just-bash/dist/bundle/chunks/chunk-F55TLFGB.js"() { + "../node_modules/just-bash/dist/bundle/chunks/chunk-F55TLFGB.js"() { init_chunk_SYMJJMQ4(); init_chunk_DXB73IDG(); w18 = q3(xe7(), 1); } }); -// node_modules/just-bash/dist/bundle/chunks/xan-view-ECQUO7AJ.js +// ../node_modules/just-bash/dist/bundle/chunks/xan-view-ECQUO7AJ.js var xan_view_ECQUO7AJ_exports = {}; __export(xan_view_ECQUO7AJ_exports, { cmdFlatten: () => W13, cmdView: () => k14 }); var init_xan_view_ECQUO7AJ = __esm({ - "node_modules/just-bash/dist/bundle/chunks/xan-view-ECQUO7AJ.js"() { + "../node_modules/just-bash/dist/bundle/chunks/xan-view-ECQUO7AJ.js"() { init_chunk_F55TLFGB(); init_chunk_SYMJJMQ4(); init_chunk_DXB73IDG(); } }); -// node_modules/just-bash/dist/bundle/chunks/chunk-UNYNJIFU.js +// ../node_modules/just-bash/dist/bundle/chunks/chunk-UNYNJIFU.js function V12(e6) { let n24 = [], s10 = new q14(e6).tokenize(), r10 = 0, o14 = () => s10[r10] || { type: "eof", value: "", pos: 0 }, i11 = () => s10[r10++]; for (; o14().type !== "eof"; ) { @@ -55454,7 +55454,7 @@ async function Ve6(e6, n24) { } var q14, He6, Je7, R9, J11, U10, z10, nt6, me7, Be6, lt6, Ye5, ut7, fn2, dn2; var init_chunk_UNYNJIFU = __esm({ - "node_modules/just-bash/dist/bundle/chunks/chunk-UNYNJIFU.js"() { + "../node_modules/just-bash/dist/bundle/chunks/chunk-UNYNJIFU.js"() { init_chunk_F55TLFGB(); init_chunk_SYMJJMQ4(); init_chunk_BBXLRYSX(); @@ -56080,14 +56080,14 @@ Run 'xan --help' for usage. } }); -// node_modules/just-bash/dist/bundle/chunks/xan-BXDXYEIB.js +// ../node_modules/just-bash/dist/bundle/chunks/xan-BXDXYEIB.js var xan_BXDXYEIB_exports = {}; __export(xan_BXDXYEIB_exports, { flagsForFuzzing: () => dn2, xanCommand: () => fn2 }); var init_xan_BXDXYEIB = __esm({ - "node_modules/just-bash/dist/bundle/chunks/xan-BXDXYEIB.js"() { + "../node_modules/just-bash/dist/bundle/chunks/xan-BXDXYEIB.js"() { init_chunk_UNYNJIFU(); init_chunk_F55TLFGB(); init_chunk_SYMJJMQ4(); @@ -56104,9 +56104,9 @@ var init_xan_BXDXYEIB = __esm({ } }); -// node_modules/sql.js/dist/sql-wasm.js +// ../node_modules/sql.js/dist/sql-wasm.js var require_sql_wasm = __commonJS({ - "node_modules/sql.js/dist/sql-wasm.js"(exports, module) { + "../node_modules/sql.js/dist/sql-wasm.js"(exports, module) { var initSqlJsPromise = void 0; var initSqlJs = function(moduleConfig) { if (initSqlJsPromise) { @@ -58247,7 +58247,7 @@ var require_sql_wasm = __commonJS({ } }); -// node_modules/just-bash/dist/bundle/chunks/chunk-HWBSOZZR.js +// ../node_modules/just-bash/dist/bundle/chunks/chunk-HWBSOZZR.js import { randomBytes as z11 } from "node:crypto"; import { existsSync as T13 } from "node:fs"; import { dirname as X10, join as x27 } from "node:path"; @@ -58536,7 +58536,7 @@ async function ie9(e6, t6, r10) { } var import_sql, Z14, v25, ne10, $e7, ye7; var init_chunk_HWBSOZZR = __esm({ - "node_modules/just-bash/dist/bundle/chunks/chunk-HWBSOZZR.js"() { + "../node_modules/just-bash/dist/bundle/chunks/chunk-HWBSOZZR.js"() { init_chunk_A5O5YHGN(); init_chunk_24IMIIXA(); init_chunk_5QMZ5MUS(); @@ -58600,7 +58600,7 @@ var init_chunk_HWBSOZZR = __esm({ } }); -// node_modules/just-bash/dist/bundle/chunks/sqlite3-56UMWEY3.js +// ../node_modules/just-bash/dist/bundle/chunks/sqlite3-56UMWEY3.js var sqlite3_56UMWEY3_exports = {}; __export(sqlite3_56UMWEY3_exports, { _internals: () => ne10, @@ -58608,7 +58608,7 @@ __export(sqlite3_56UMWEY3_exports, { sqlite3Command: () => $e7 }); var init_sqlite3_56UMWEY3 = __esm({ - "node_modules/just-bash/dist/bundle/chunks/sqlite3-56UMWEY3.js"() { + "../node_modules/just-bash/dist/bundle/chunks/sqlite3-56UMWEY3.js"() { init_chunk_HWBSOZZR(); init_chunk_A5O5YHGN(); init_chunk_24IMIIXA(); @@ -58619,13 +58619,13 @@ var init_sqlite3_56UMWEY3 = __esm({ } }); -// node_modules/just-bash/dist/bundle/chunks/chunk-S4EYC6T6.js +// ../node_modules/just-bash/dist/bundle/chunks/chunk-S4EYC6T6.js function _13() { return new r(E13.TOTAL); } var h16, a13, u11, s9, E13, S16, l6, R11, A11; var init_chunk_S4EYC6T6 = __esm({ - "node_modules/just-bash/dist/bundle/chunks/chunk-S4EYC6T6.js"() { + "../node_modules/just-bash/dist/bundle/chunks/chunk-S4EYC6T6.js"() { init_chunk_CWQS3NFK(); init_chunk_A5O5YHGN(); init_chunk_IPJHKYVM(); @@ -59109,7 +59109,7 @@ ${this.commandName}: execution timeout exceeded } }); -// node_modules/just-bash/dist/bundle/chunks/python3-SG3DOKBZ.js +// ../node_modules/just-bash/dist/bundle/chunks/python3-SG3DOKBZ.js var python3_SG3DOKBZ_exports = {}; __export(python3_SG3DOKBZ_exports, { _resetExecutionQueue: () => ie10, @@ -59228,7 +59228,7 @@ async function j13(r10, e6, t6, o14 = []) { } var U12, H13, I15, k16, N13, Y10, ce10; var init_python3_SG3DOKBZ = __esm({ - "node_modules/just-bash/dist/bundle/chunks/python3-SG3DOKBZ.js"() { + "../node_modules/just-bash/dist/bundle/chunks/python3-SG3DOKBZ.js"() { init_chunk_S4EYC6T6(); init_chunk_XHM67O4N(); init_chunk_CWQS3NFK(); @@ -59280,7 +59280,7 @@ var init_python3_SG3DOKBZ = __esm({ } }); -// node_modules/just-bash/dist/bundle/chunks/js-exec-4CW5N6RM.js +// ../node_modules/just-bash/dist/bundle/chunks/js-exec-4CW5N6RM.js var js_exec_4CW5N6RM_exports = {}; __export(js_exec_4CW5N6RM_exports, { jsExecCommand: () => de9, @@ -59378,7 +59378,7 @@ async function X11(t6, e6, r10, s10 = [], n24, u12, a15) { } var N14, H14, B9, _14, i10, w19, c13, o13, $19, de9, fe8; var init_js_exec_4CW5N6RM = __esm({ - "node_modules/just-bash/dist/bundle/chunks/js-exec-4CW5N6RM.js"() { + "../node_modules/just-bash/dist/bundle/chunks/js-exec-4CW5N6RM.js"() { init_chunk_S4EYC6T6(); init_chunk_XHM67O4N(); init_chunk_CWQS3NFK(); @@ -59518,7 +59518,7 @@ ${_14}`, exitCode: 1 }; } }); -// node_modules/just-bash/dist/bundle/chunks/curl-COE4TZE6.js +// ../node_modules/just-bash/dist/bundle/chunks/curl-COE4TZE6.js var curl_COE4TZE6_exports = {}; __export(curl_COE4TZE6_exports, { curlCommand: () => q15 @@ -59751,7 +59751,7 @@ function H15(s10, t6, a15) { } var F18, q15; var init_curl_COE4TZE6 = __esm({ - "node_modules/just-bash/dist/bundle/chunks/curl-COE4TZE6.js"() { + "../node_modules/just-bash/dist/bundle/chunks/curl-COE4TZE6.js"() { init_chunk_CWQS3NFK(); init_chunk_44UOCSGV(); init_chunk_74CEPOFO(); @@ -59787,7 +59787,7 @@ var init_curl_COE4TZE6 = __esm({ } }); -// node_modules/just-bash/dist/bundle/chunks/flag-coverage-LMTH7T5F.js +// ../node_modules/just-bash/dist/bundle/chunks/flag-coverage-LMTH7T5F.js var flag_coverage_LMTH7T5F_exports = {}; __export(flag_coverage_LMTH7T5F_exports, { emitFlagCoverage: () => Fa @@ -59801,7 +59801,7 @@ function Fa(r10, o14, Dr4) { } var Er2, Br; var init_flag_coverage_LMTH7T5F = __esm({ - "node_modules/just-bash/dist/bundle/chunks/flag-coverage-LMTH7T5F.js"() { + "../node_modules/just-bash/dist/bundle/chunks/flag-coverage-LMTH7T5F.js"() { init_chunk_ZXL7TQLN(); init_chunk_XORM457F(); init_chunk_UNYNJIFU(); @@ -59908,7 +59908,7 @@ var init_flag_coverage_LMTH7T5F = __esm({ } }); -// node_modules/just-bash/dist/bundle/chunks/expansion-ENLSRCXJ.js +// ../node_modules/just-bash/dist/bundle/chunks/expansion-ENLSRCXJ.js var expansion_ENLSRCXJ_exports = {}; __export(expansion_ENLSRCXJ_exports, { escapeGlobChars: () => X2, @@ -59925,7 +59925,7 @@ __export(expansion_ENLSRCXJ_exports, { isWordFullyQuoted: () => Al }); var init_expansion_ENLSRCXJ = __esm({ - "node_modules/just-bash/dist/bundle/chunks/expansion-ENLSRCXJ.js"() { + "../node_modules/just-bash/dist/bundle/chunks/expansion-ENLSRCXJ.js"() { init_chunk_FEIOJCZD(); init_chunk_YNYSPYQ5(); init_chunk_GFQRA5P5(); @@ -59933,10 +59933,10 @@ var init_expansion_ENLSRCXJ = __esm({ } }); -// dist/src/shell/deeplake-shell.js +// ../dist/src/shell/deeplake-shell.js import { createInterface } from "node:readline"; -// node_modules/just-bash/dist/bundle/index.js +// ../node_modules/just-bash/dist/bundle/index.js init_chunk_FEIOJCZD(); init_chunk_XHM67O4N(); init_chunk_CWQS3NFK(); @@ -66720,7 +66720,7 @@ function Bi3(e6) { } } -// dist/src/config.js +// ../dist/src/config.js import { readFileSync, existsSync as existsSync2 } from "node:fs"; import { join as join4 } from "node:path"; import { homedir, userInfo } from "node:os"; @@ -66752,10 +66752,10 @@ function loadConfig() { }; } -// dist/src/deeplake-api.js +// ../dist/src/deeplake-api.js import { randomUUID } from "node:crypto"; -// dist/src/utils/debug.js +// ../dist/src/utils/debug.js import { appendFileSync } from "node:fs"; import { join as join5 } from "node:path"; import { homedir as homedir2 } from "node:os"; @@ -66768,12 +66768,12 @@ function log(tag, msg) { `); } -// dist/src/utils/sql.js +// ../dist/src/utils/sql.js function sqlStr(value) { return value.replace(/\\/g, "\\\\").replace(/'/g, "''").replace(/\0/g, "").replace(/[\x01-\x08\x0b\x0c\x0e-\x1f\x7f]/g, ""); } -// dist/src/deeplake-api.js +// ../dist/src/deeplake-api.js var log2 = (msg) => log("sdk", msg); var DeeplakeApi = class { token; @@ -66907,7 +66907,7 @@ var DeeplakeApi = class { } }; -// dist/src/shell/deeplake-fs.js +// ../dist/src/shell/deeplake-fs.js import { basename as basename4, posix } from "node:path"; import { randomUUID as randomUUID2 } from "node:crypto"; var BATCH_SIZE = 10; @@ -67436,11 +67436,11 @@ var DeeplakeFs = class _DeeplakeFs { } }; -// node_modules/yargs-parser/build/lib/index.js +// ../node_modules/yargs-parser/build/lib/index.js import { format } from "util"; import { normalize, resolve as resolve4 } from "path"; -// node_modules/yargs-parser/build/lib/string-utils.js +// ../node_modules/yargs-parser/build/lib/string-utils.js function camelCase(str) { const isCamelCase = str !== str.toLowerCase() && str !== str.toUpperCase(); if (!isCamelCase) { @@ -67494,7 +67494,7 @@ function looksLikeNumber(x28) { return /^[-]?(?:\d+(?:\.\d*)?|\.\d+)(e[-+]?\d+)?$/.test(x28); } -// node_modules/yargs-parser/build/lib/tokenize-arg-string.js +// ../node_modules/yargs-parser/build/lib/tokenize-arg-string.js function tokenizeArgString(argString) { if (Array.isArray(argString)) { return argString.map((e6) => typeof e6 !== "string" ? e6 + "" : e6); @@ -67526,7 +67526,7 @@ function tokenizeArgString(argString) { return args; } -// node_modules/yargs-parser/build/lib/yargs-parser-types.js +// ../node_modules/yargs-parser/build/lib/yargs-parser-types.js var DefaultValuesForTypeKey; (function(DefaultValuesForTypeKey2) { DefaultValuesForTypeKey2["BOOLEAN"] = "boolean"; @@ -67535,7 +67535,7 @@ var DefaultValuesForTypeKey; DefaultValuesForTypeKey2["ARRAY"] = "array"; })(DefaultValuesForTypeKey || (DefaultValuesForTypeKey = {})); -// node_modules/yargs-parser/build/lib/yargs-parser.js +// ../node_modules/yargs-parser/build/lib/yargs-parser.js var mixin; var YargsParser = class { constructor(_mixin) { @@ -68375,7 +68375,7 @@ function stripQuotes(val) { return typeof val === "string" && (val[0] === "'" || val[0] === '"') && val[val.length - 1] === val[0] ? val.substring(1, val.length - 1) : val; } -// node_modules/yargs-parser/build/lib/index.js +// ../node_modules/yargs-parser/build/lib/index.js import { readFileSync as readFileSync2 } from "fs"; import { createRequire } from "node:module"; var _a3; @@ -68421,7 +68421,7 @@ yargsParser.decamelize = decamelize; yargsParser.looksLikeNumber = looksLikeNumber; var lib_default = yargsParser; -// dist/src/shell/grep-interceptor.js +// ../dist/src/shell/grep-interceptor.js function createGrepCommand(client, fs3, table) { return Yi2("grep", async (args, ctx) => { const parsed = lib_default(args, { @@ -68500,7 +68500,7 @@ function createGrepCommand(client, fs3, table) { }); } -// dist/src/shell/deeplake-shell.js +// ../dist/src/shell/deeplake-shell.js async function main() { const config = loadConfig(); if (!config) { diff --git a/bundle/wiki-worker.js b/claude-code/bundle/wiki-worker.js similarity index 99% rename from bundle/wiki-worker.js rename to claude-code/bundle/wiki-worker.js index 9bec648..d17e563 100755 --- a/bundle/wiki-worker.js +++ b/claude-code/bundle/wiki-worker.js @@ -1,6 +1,6 @@ #!/usr/bin/env node -// dist/src/hooks/wiki-worker.js +// ../dist/src/hooks/wiki-worker.js import { readFileSync, writeFileSync, existsSync, appendFileSync, mkdirSync, rmSync } from "node:fs"; import { execFileSync } from "node:child_process"; import { join } from "node:path"; diff --git a/commands/login.md b/claude-code/commands/login.md similarity index 100% rename from commands/login.md rename to claude-code/commands/login.md diff --git a/claude-code/commands/update.md b/claude-code/commands/update.md new file mode 100644 index 0000000..897588c --- /dev/null +++ b/claude-code/commands/update.md @@ -0,0 +1,12 @@ +--- +description: Update the Hivemind plugin to the latest version +allowed-tools: Bash +--- + +First refresh the marketplace cache, then update across all scopes: + +```bash +claude plugin marketplace update deeplake-hivemind 2>/dev/null; claude plugin update hivemind@deeplake-hivemind --scope user 2>/dev/null; claude plugin update hivemind@deeplake-hivemind --scope project 2>/dev/null; claude plugin update hivemind@deeplake-hivemind --scope local 2>/dev/null; claude plugin update hivemind@deeplake-hivemind --scope managed 2>/dev/null; echo "Done." +``` + +Tell the user to run `/reload-plugins` to apply the update. diff --git a/claude-code/esbuild.config.mjs b/claude-code/esbuild.config.mjs new file mode 100644 index 0000000..a620b27 --- /dev/null +++ b/claude-code/esbuild.config.mjs @@ -0,0 +1,37 @@ +import { build } from "esbuild"; +import { chmodSync } from "node:fs"; + +// tsc compiles from repo root into dist/ +// Entry points reference the dist output +const hooks = [ + { entry: "../dist/src/hooks/session-start.js", out: "session-start" }, + { entry: "../dist/src/hooks/capture.js", out: "capture" }, + { entry: "../dist/src/hooks/pre-tool-use.js", out: "pre-tool-use" }, + { entry: "../dist/src/hooks/session-end.js", out: "session-end" }, + { entry: "../dist/src/hooks/wiki-worker.js", out: "wiki-worker" }, +]; + +const shell = [ + { entry: "../dist/src/shell/deeplake-shell.js", out: "shell/deeplake-shell" }, +]; + +const commands = [ + { entry: "../dist/src/commands/auth-login.js", out: "commands/auth-login" }, +]; + +const all = [...hooks, ...shell, ...commands]; + +await build({ + entryPoints: Object.fromEntries(all.map(h => [h.out, h.entry])), + bundle: true, + platform: "node", + format: "esm", + outdir: "bundle", + external: ["node:*", "node-liblzma", "@mongodb-js/zstd"], +}); + +for (const h of all) { + chmodSync(`bundle/${h.out}.js`, 0o755); +} + +console.log(`Bundled ${all.length} entries into bundle/`); diff --git a/hooks/hooks.json b/claude-code/hooks/hooks.json similarity index 100% rename from hooks/hooks.json rename to claude-code/hooks/hooks.json diff --git a/claude-code/package.json b/claude-code/package.json new file mode 100644 index 0000000..f42b78a --- /dev/null +++ b/claude-code/package.json @@ -0,0 +1,44 @@ +{ + "name": "deeplake-claude-code-plugins", + "version": "0.5.10", + "description": "Claude Code plugin for Deeplake memory — captures file ops and syncs to Deeplake cloud", + "type": "module", + "bin": { + "deeplake-shell": "bundle/deeplake-shell.js" + }, + "scripts": { + "build": "tsc && node esbuild.config.mjs", + "bundle": "node esbuild.config.mjs", + "dev": "tsc --watch", + "shell": "tsx src/shell/deeplake-shell.ts", + "test": "vitest run", + "typecheck": "tsc --noEmit", + "ci": "npm run typecheck && npm test", + "prepare": "husky" + }, + "lint-staged": { + "*.ts": [ + "bash -c 'tsc --noEmit --skipLibCheck'" + ], + "*.md": [] + }, + "dependencies": { + "deeplake": "^0.3.30", + "just-bash": "^2.14.0", + "yargs-parser": "^22.0.0" + }, + "devDependencies": { + "@types/node": "^25.0.0", + "@types/yargs-parser": "^21.0.3", + "@vitest/coverage-v8": "^4.1.3", + "esbuild": "^0.28.0", + "husky": "^9.1.7", + "lint-staged": "^16.4.0", + "tsx": "^4.7.0", + "typescript": "^6.0.0", + "vitest": "^4.0.0" + }, + "engines": { + "node": ">=22.0.0" + } +} diff --git a/skills/deeplake-memory/SKILL.md b/claude-code/skills/deeplake-memory/SKILL.md similarity index 100% rename from skills/deeplake-memory/SKILL.md rename to claude-code/skills/deeplake-memory/SKILL.md diff --git a/tests/autoupdate.test.ts b/claude-code/tests/autoupdate.test.ts similarity index 100% rename from tests/autoupdate.test.ts rename to claude-code/tests/autoupdate.test.ts diff --git a/tests/capture.test.ts b/claude-code/tests/capture.test.ts similarity index 99% rename from tests/capture.test.ts rename to claude-code/tests/capture.test.ts index 28d1ff6..51b338f 100644 --- a/tests/capture.test.ts +++ b/claude-code/tests/capture.test.ts @@ -1,5 +1,5 @@ import { describe, it, expect } from "vitest"; -import { sqlStr } from "../src/utils/sql.js"; +import { sqlStr } from "../../src/utils/sql.js"; // ── buildSessionPath (extracted logic from capture.ts) ───────────────────────── diff --git a/tests/deeplake-fs.test.ts b/claude-code/tests/deeplake-fs.test.ts similarity index 99% rename from tests/deeplake-fs.test.ts rename to claude-code/tests/deeplake-fs.test.ts index 2f066d7..8736762 100644 --- a/tests/deeplake-fs.test.ts +++ b/claude-code/tests/deeplake-fs.test.ts @@ -1,5 +1,5 @@ import { describe, it, expect, beforeEach, vi } from "vitest"; -import { DeeplakeFs, isText, guessMime } from "../src/shell/deeplake-fs.js"; +import { DeeplakeFs, isText, guessMime } from "../../src/shell/deeplake-fs.js"; // ── Mock ManagedClient ──────────────────────────────────────────────────────── type Row = { diff --git a/tests/grep-interceptor.test.ts b/claude-code/tests/grep-interceptor.test.ts similarity index 97% rename from tests/grep-interceptor.test.ts rename to claude-code/tests/grep-interceptor.test.ts index 1492584..77fa02c 100644 --- a/tests/grep-interceptor.test.ts +++ b/claude-code/tests/grep-interceptor.test.ts @@ -1,6 +1,6 @@ import { describe, it, expect, vi, beforeEach } from "vitest"; -import { createGrepCommand } from "../src/shell/grep-interceptor.js"; -import { DeeplakeFs } from "../src/shell/deeplake-fs.js"; +import { createGrepCommand } from "../../src/shell/grep-interceptor.js"; +import { DeeplakeFs } from "../../src/shell/deeplake-fs.js"; // ── Minimal mocks ───────────────────────────────────────────────────────────── function makeClient(queryResults: Record[] = []) { diff --git a/tests/real-table-test.mjs b/claude-code/tests/real-table-test.mjs similarity index 100% rename from tests/real-table-test.mjs rename to claude-code/tests/real-table-test.mjs diff --git a/tests/session-end-upload.test.ts b/claude-code/tests/session-end-upload.test.ts similarity index 100% rename from tests/session-end-upload.test.ts rename to claude-code/tests/session-end-upload.test.ts diff --git a/tests/session-summary.test.ts b/claude-code/tests/session-summary.test.ts similarity index 99% rename from tests/session-summary.test.ts rename to claude-code/tests/session-summary.test.ts index 3564da2..0f81399 100644 --- a/tests/session-summary.test.ts +++ b/claude-code/tests/session-summary.test.ts @@ -1,5 +1,5 @@ import { describe, it, expect, beforeEach, vi } from "vitest"; -import { DeeplakeFs, isText, guessMime } from "../src/shell/deeplake-fs.js"; +import { DeeplakeFs, isText, guessMime } from "../../src/shell/deeplake-fs.js"; // ── Mock client (same pattern as deeplake-fs.test.ts) ──────────────────────── type Row = { diff --git a/tests/sessions-table.test.ts b/claude-code/tests/sessions-table.test.ts similarity index 99% rename from tests/sessions-table.test.ts rename to claude-code/tests/sessions-table.test.ts index e9f164a..893c381 100644 --- a/tests/sessions-table.test.ts +++ b/claude-code/tests/sessions-table.test.ts @@ -1,5 +1,5 @@ import { describe, it, expect, vi } from "vitest"; -import { DeeplakeFs, isText, guessMime } from "../src/shell/deeplake-fs.js"; +import { DeeplakeFs, isText, guessMime } from "../../src/shell/deeplake-fs.js"; // ── Mock client that simulates both memory and sessions tables ────────────── diff --git a/tests/sql.test.ts b/claude-code/tests/sql.test.ts similarity index 96% rename from tests/sql.test.ts rename to claude-code/tests/sql.test.ts index 28bc774..d4d1151 100644 --- a/tests/sql.test.ts +++ b/claude-code/tests/sql.test.ts @@ -1,5 +1,5 @@ import { describe, it, expect } from "vitest"; -import { sqlStr, sqlLike, sqlIdent } from "../src/utils/sql.js"; +import { sqlStr, sqlLike, sqlIdent } from "../../src/utils/sql.js"; describe("sqlStr", () => { it("escapes single quotes", () => { diff --git a/claude-code/tsconfig.json b/claude-code/tsconfig.json new file mode 100644 index 0000000..579fac4 --- /dev/null +++ b/claude-code/tsconfig.json @@ -0,0 +1,19 @@ +{ + "compilerOptions": { + "target": "ES2022", + "module": "Node16", + "moduleResolution": "Node16", + "outDir": "dist", + "rootDir": ".", + "strict": true, + "types": ["node"], + "esModuleInterop": true, + "skipLibCheck": true, + "forceConsistentCasingInFileNames": true, + "declaration": true, + "sourceMap": true, + "resolveJsonModule": true + }, + "include": ["src/**/*", "tests/**/*"], + "exclude": ["node_modules", "dist", "bundle"] +} diff --git a/vitest.config.ts b/claude-code/vitest.config.ts similarity index 100% rename from vitest.config.ts rename to claude-code/vitest.config.ts diff --git a/commands/update.md b/commands/update.md deleted file mode 100644 index 3e9e3d6..0000000 --- a/commands/update.md +++ /dev/null @@ -1,12 +0,0 @@ ---- -description: Update the Deeplake Hivemind plugin to the latest version -allowed-tools: Bash ---- - -First refresh the marketplace cache, then update across all scopes: - -```bash -claude plugin marketplace update deeplake-claude-code-plugins 2>/dev/null; claude plugin update deeplake-hivemind@deeplake-claude-code-plugins --scope user 2>/dev/null; claude plugin update deeplake-hivemind@deeplake-claude-code-plugins --scope project 2>/dev/null; claude plugin update deeplake-hivemind@deeplake-claude-code-plugins --scope local 2>/dev/null; claude plugin update deeplake-hivemind@deeplake-claude-code-plugins --scope managed 2>/dev/null; echo "Done." -``` - -Tell the user to run `/reload-plugins` to apply the update. diff --git a/esbuild.config.mjs b/esbuild.config.mjs deleted file mode 100644 index dad7ffb..0000000 --- a/esbuild.config.mjs +++ /dev/null @@ -1,35 +0,0 @@ -import { build } from "esbuild"; -import { chmodSync } from "node:fs"; - -const hooks = [ - { entry: "dist/src/hooks/session-start.js", out: "session-start" }, - { entry: "dist/src/hooks/capture.js", out: "capture" }, - { entry: "dist/src/hooks/pre-tool-use.js", out: "pre-tool-use" }, - { entry: "dist/src/hooks/session-end.js", out: "session-end" }, - { entry: "dist/src/hooks/wiki-worker.js", out: "wiki-worker" }, -]; - -const shell = [ - { entry: "dist/src/shell/deeplake-shell.js", out: "shell/deeplake-shell" }, -]; - -const commands = [ - { entry: "dist/src/commands/auth-login.js", out: "commands/auth-login" }, -]; - -const all = [...hooks, ...shell, ...commands]; - -await build({ - entryPoints: Object.fromEntries(all.map(h => [h.out, h.entry])), - bundle: true, - platform: "node", - format: "esm", - outdir: "bundle", - external: ["node:*", "node-liblzma", "@mongodb-js/zstd"], -}); - -for (const h of all) { - chmodSync(`bundle/${h.out}.js`, 0o755); -} - -console.log(`Bundled ${all.length} entries into bundle/`); diff --git a/openclaw/esbuild.config.mjs b/openclaw/esbuild.config.mjs new file mode 100644 index 0000000..81c2230 --- /dev/null +++ b/openclaw/esbuild.config.mjs @@ -0,0 +1,12 @@ +import { build } from "esbuild"; + +await build({ + entryPoints: ["src/index.ts"], + bundle: true, + platform: "node", + format: "esm", + outdir: "dist", + external: ["node:*"], +}); + +console.log("Built openclaw/dist/index.js"); diff --git a/openclaw/openclaw.plugin.json b/openclaw/openclaw.plugin.json new file mode 100644 index 0000000..a25a21c --- /dev/null +++ b/openclaw/openclaw.plugin.json @@ -0,0 +1,18 @@ +{ + "id": "hivemind", + "kind": "memory", + "name": "Hivemind Memory", + "description": "Cloud-backed shared memory powered by DeepLake — auto-capture and auto-recall via REST API", + "uiHints": { + "autoCapture": { "label": "Auto-Capture" }, + "autoRecall": { "label": "Auto-Recall" } + }, + "configSchema": { + "type": "object", + "additionalProperties": false, + "properties": { + "autoCapture": { "type": "boolean" }, + "autoRecall": { "type": "boolean" } + } + } +} diff --git a/openclaw/package.json b/openclaw/package.json new file mode 100644 index 0000000..e59b154 --- /dev/null +++ b/openclaw/package.json @@ -0,0 +1,24 @@ +{ + "name": "hivemind", + "version": "0.6.0", + "type": "module", + "description": "Hivemind — cloud-backed persistent shared memory for AI agents, powered by DeepLake", + "license": "Apache-2.0", + "openclaw": { + "extensions": ["./dist/index.js"], + "install": { + "npmSpec": "hivemind", + "minHostVersion": ">=2026.3.22" + }, + "compat": { + "pluginApi": ">=1.0.0" + }, + "build": { + "openclawVersion": "2026.3.22" + } + }, + "files": ["dist", "openclaw.plugin.json"], + "scripts": { + "build": "node esbuild.config.mjs" + } +} diff --git a/openclaw/skills/SKILL.md b/openclaw/skills/SKILL.md new file mode 100644 index 0000000..1efd067 --- /dev/null +++ b/openclaw/skills/SKILL.md @@ -0,0 +1,33 @@ +--- +name: deeplake-plugin +description: Cloud-backed shared memory for AI agents powered by DeepLake. Install once, memory persists across sessions, machines, and channels. +allowed-tools: Read +--- + +# DeepLake Memory + +Cloud-backed memory that syncs across all agents via DeepLake REST API. + +## Installation + +```bash +openclaw plugins install deeplake-plugin +``` + +After install, send a message. The plugin will send you an authentication link. Click it, sign in, and memory activates on the next message. No CLI needed. + +## How it works + +The plugin automatically: +- **Captures** every conversation (user + assistant messages) to DeepLake cloud +- **Recalls** relevant memories before each agent turn via keyword search +- All data stored as structured rows in DeepLake — searchable, persistent, shared + +## Sharing memory + +Multiple agents on different machines share memory when users are in the same DeepLake organization. Invite teammates via the DeepLake dashboard. + +## Troubleshooting + +- **Auth link not appearing** → Restart the gateway and try again +- **Memory not recalling** → Memories are searched by keyword matching. Use specific terms. diff --git a/openclaw/src/credentials.ts b/openclaw/src/credentials.ts new file mode 100644 index 0000000..412eb88 --- /dev/null +++ b/openclaw/src/credentials.ts @@ -0,0 +1,47 @@ +import { existsSync, readFileSync, writeFileSync, mkdirSync } from "node:fs"; +import { homedir } from "node:os"; +import { join } from "node:path"; + +export interface Credentials { + token: string; + orgId: string; + apiUrl: string; + savedAt: string; +} + +export function loadCredentials(): Credentials | null { + const credsPath = join(homedir(), ".deeplake", "credentials.json"); + if (!existsSync(credsPath)) return null; + try { + const creds = JSON.parse(readFileSync(credsPath, "utf-8")); + if (!creds.token || !creds.orgId) return null; + return creds; + } catch { + return null; + } +} + +export function saveCredentials(creds: Credentials): void { + const deeplakeDir = join(homedir(), ".deeplake"); + mkdirSync(deeplakeDir, { recursive: true }); + writeFileSync(join(deeplakeDir, "credentials.json"), JSON.stringify(creds), { mode: 0o600 }); +} + +export function hasCredentials(): boolean { + return existsSync(join(homedir(), ".deeplake", "credentials.json")); +} + +export function addToLoadPaths(): void { + const ocConfigPath = join(homedir(), ".openclaw", "openclaw.json"); + if (!existsSync(ocConfigPath)) return; + try { + const ocConfig = JSON.parse(readFileSync(ocConfigPath, "utf-8")); + const installPath = ocConfig?.plugins?.installs?.["deeplake-plugin"]?.installPath; + if (!installPath) return; + const loadPaths: string[] = ocConfig?.plugins?.load?.paths ?? []; + if (loadPaths.includes(installPath)) return; + if (!ocConfig.plugins.load) ocConfig.plugins.load = {}; + ocConfig.plugins.load.paths = [...loadPaths, installPath]; + writeFileSync(ocConfigPath, JSON.stringify(ocConfig, null, 2)); + } catch {} +} diff --git a/openclaw/src/index.ts b/openclaw/src/index.ts new file mode 100644 index 0000000..fa9100e --- /dev/null +++ b/openclaw/src/index.ts @@ -0,0 +1,246 @@ +function definePluginEntry(entry: T): T { return entry; } +import { homedir } from "node:os"; +import { join } from "node:path"; +import { DeepLakeAPI, type SearchResult } from "./memory.js"; +import { loadCredentials, saveCredentials, hasCredentials, addToLoadPaths } from "./credentials.js"; + +interface PluginConfig { + mountPath?: string; + autoCapture?: boolean; + autoRecall?: boolean; +} + +interface PluginLogger { + info?(...args: unknown[]): void; + error(...args: unknown[]): void; +} + +interface PluginAPI { + pluginConfig?: Record; + logger: PluginLogger; + on(event: string, handler: (event: Record) => Promise): void; +} + +const API_URL = "https://api.deeplake.ai"; + +// --- Auth state --- +let authPending = false; +let authUrl: string | null = null; + +async function requestAuth(): Promise { + if (authPending) return authUrl ?? ""; + authPending = true; + const resp = await fetch(`${API_URL}/auth/device/code`, { + method: "POST", + headers: { "Content-Type": "application/json" }, + }); + if (!resp.ok) { + authPending = false; + throw new Error("DeepLake auth service unavailable"); + } + const data = await resp.json() as { + verification_uri_complete: string; + device_code: string; + interval: number; + expires_in: number; + }; + + authUrl = data.verification_uri_complete; + + // Poll in background + const pollMs = Math.max(data.interval || 5, 5) * 1000; + const deadline = Date.now() + data.expires_in * 1000; + (async () => { + while (Date.now() < deadline && authPending) { + await new Promise(r => setTimeout(r, pollMs)); + try { + const tokenResp = await fetch(`${API_URL}/auth/device/token`, { + method: "POST", + headers: { "Content-Type": "application/json" }, + body: JSON.stringify({ device_code: data.device_code }), + }); + if (tokenResp.ok) { + const tokenData = await tokenResp.json() as { access_token: string }; + const token = tokenData.access_token; + + const orgsResp = await fetch(`${API_URL}/organizations`, { + headers: { Authorization: `Bearer ${token}`, "X-Deeplake-Client": "cli" }, + }); + let orgId = ""; + if (orgsResp.ok) { + const orgs = await orgsResp.json() as Array<{ id: string; name: string }>; + const personal = orgs.find(o => o.name.endsWith("'s Organization")); + orgId = personal?.id ?? orgs[0]?.id ?? ""; + } + + let savedToken = token; + if (orgId) { + try { + const apiTokenResp = await fetch(`${API_URL}/users/me/tokens`, { + method: "POST", + headers: { + Authorization: `Bearer ${token}`, + "Content-Type": "application/json", + "X-Activeloop-Org-Id": orgId, + }, + body: JSON.stringify({ name: `deeplake-plugin-${new Date().toISOString().split("T")[0]}`, duration: 365 * 24 * 60 * 60, organization_id: orgId }), + }); + if (apiTokenResp.ok) { + const respData = await apiTokenResp.json() as { token: string | { token: string } }; + savedToken = typeof respData.token === "string" ? respData.token : respData.token.token; + } + } catch {} + } + + saveCredentials({ token: savedToken, orgId, apiUrl: API_URL, savedAt: new Date().toISOString() }); + + authPending = false; + authUrl = null; + return; + } + } catch {} + } + authPending = false; + authUrl = null; + })(); + + return data.verification_uri_complete; +} + +// --- API instance --- +let api: DeepLakeAPI | null = null; +const capturedCounts = new Map(); +const fallbackSessionId = crypto.randomUUID(); + +async function getApi(): Promise { + if (api) return api; + + const creds = loadCredentials(); + if (!creds) { + if (!authPending) await requestAuth(); + return null; + } + + api = new DeepLakeAPI(creds.token, creds.orgId, creds.apiUrl || API_URL); + await api.ensureTable(); + return api; +} + +export default definePluginEntry({ + id: "deeplake-plugin", + name: "DeepLake Memory", + description: "Cloud-backed shared memory powered by DeepLake", + kind: "memory", + + register(pluginApi: PluginAPI) { + try { + // Workaround: OpenClaw extensions/ plugins don't wire hooks to the global runner. + // Adding ourselves to plugins.load.paths ensures hooks fire after next restart. + addToLoadPaths(); + + const config = (pluginApi.pluginConfig ?? {}) as PluginConfig; + const logger = pluginApi.logger; + + const hook = (event: string, handler: (event: Record) => Promise) => { + if (pluginApi.on) pluginApi.on(event, handler); + }; + + // Auto-recall: search memory before each turn + if (config.autoRecall !== false) { + hook("before_agent_start", async (event: { prompt?: string }) => { + if (!event.prompt || event.prompt.length < 5) return; + try { + const dl = await getApi(); + + if (!dl && authUrl) { + return { + prependContext: `\n\nIMPORTANT: The user needs to authenticate with DeepLake to activate shared memory. Include this clickable link in your reply: ${authUrl}\nTell them to click it and sign in, then send another message.\n`, + }; + } + if (!dl) return; + + const stopWords = new Set(["the","and","for","are","but","not","you","all","can","had","her","was","one","our","out","has","have","what","does","like","with","this","that","from","they","been","will","more","when","who","how","its","into","some","than","them","these","then","your","just","about","would","could","should","where","which","there","their","being","each","other"]); + const words = event.prompt.toLowerCase() + .replace(/[^a-z0-9\s]/g, " ") + .split(/\s+/) + .filter(w => w.length >= 3 && !stopWords.has(w)); + + if (!words.length) return; + + const allResults: SearchResult[] = []; + const seen = new Set(); + for (const word of words.slice(0, 3)) { + for (const r of await dl.search(word, 3)) { + if (!seen.has(r.snippet)) { + seen.add(r.snippet); + allResults.push(r); + } + } + } + const results = allResults.slice(0, 5); + if (!results.length) return; + + const recalled = results + .map(r => `[${r.path}] ${r.snippet.slice(0, 300)}`) + .join("\n\n"); + + logger.info?.(`Auto-recalled ${results.length} memories`); + return { + prependContext: "\n\n\n" + recalled + "\n\n", + }; + } catch (err) { + logger.error(`Auto-recall failed: ${err instanceof Error ? err.message : String(err)}`); + } + }); + } + + // Auto-capture: store new messages via API + if (config.autoCapture !== false) { + hook("agent_end", async (event) => { + const ev = event as { success?: boolean; session_id?: string; messages?: Array<{ role: string; content: string | Array<{ type: string; text?: string }> }> }; + if (!ev.success || !ev.messages?.length) return; + try { + const dl = await getApi(); + if (!dl) return; + + const sid = ev.session_id || fallbackSessionId; + const lastCount = capturedCounts.get(sid) ?? 0; + const newMessages = ev.messages.slice(lastCount); + capturedCounts.set(sid, ev.messages.length); + if (!newMessages.length) return; + + for (const msg of newMessages) { + if (msg.role !== "user" && msg.role !== "assistant") continue; + let text = ""; + if (typeof msg.content === "string") { + text = msg.content; + } else if (Array.isArray(msg.content)) { + text = msg.content + .filter(b => b.type === "text" && b.text) + .map(b => b.text!) + .join("\n"); + } + if (!text.trim()) continue; + await dl.write(sid, msg.role, text); + } + + logger.info?.(`Auto-captured ${newMessages.length} messages`); + } catch (err) { + logger.error(`Auto-capture failed: ${err instanceof Error ? err.message : String(err)}`); + } + }); + } + + // Pre-fetch auth URL during registration + if (!hasCredentials() && !authPending) { + requestAuth().catch(err => { + logger.error(`Pre-auth failed: ${err instanceof Error ? err.message : String(err)}`); + }); + } + + logger.info?.("DeepLake Memory plugin registered"); + } catch (err) { + pluginApi.logger?.error?.(`DeepLake Memory register failed: ${err instanceof Error ? err.message : String(err)}`); + } + }, +}); diff --git a/openclaw/src/memory.ts b/openclaw/src/memory.ts new file mode 100644 index 0000000..16783d4 --- /dev/null +++ b/openclaw/src/memory.ts @@ -0,0 +1,114 @@ +export interface SearchResult { + path: string; + snippet: string; + lineStart: number; + score: number; +} + +const TABLE_NAME = "deeplake_plugin_memory"; + +/** + * DeepLake REST API client for memory operations. + * All operations use fetch() — pure HTTP, no shell commands. + */ +export class DeepLakeAPI { + private tableReady = false; + + constructor( + private token: string, + private orgId: string, + private apiUrl: string, + private workspace: string = "default", + ) {} + + private async query(sql: string): Promise<{ columns: string[]; rows: unknown[][]; row_count: number }> { + const resp = await fetch(`${this.apiUrl}/workspaces/${this.workspace}/tables/query`, { + method: "POST", + headers: { + Authorization: `Bearer ${this.token}`, + "Content-Type": "application/json", + "X-Activeloop-Org-Id": this.orgId, + }, + body: JSON.stringify({ query: sql }), + }); + if (!resp.ok) { + const text = await resp.text().catch(() => ""); + throw new Error(`API ${resp.status}: ${text.slice(0, 200)}`); + } + return resp.json(); + } + + async ensureTable(): Promise { + if (this.tableReady) return; + try { + await fetch(`${this.apiUrl}/workspaces/${this.workspace}/tables`, { + method: "POST", + headers: { + Authorization: `Bearer ${this.token}`, + "Content-Type": "application/json", + "X-Activeloop-Org-Id": this.orgId, + }, + body: JSON.stringify({ + table_name: TABLE_NAME, + table_schema: { + id: "TEXT", + session_id: "TEXT", + role: "TEXT", + content: "TEXT", + timestamp: "TEXT", + channel: "TEXT", + sender: "TEXT", + }, + }), + }); + } catch { + // Table might already exist — that's fine + } + this.tableReady = true; + } + + async write( + sessionId: string, + role: string, + content: string, + channel?: string, + sender?: string, + ): Promise { + await this.ensureTable(); + const id = crypto.randomUUID(); + const ts = new Date().toISOString(); + const esc = (s: string) => s.replace(/'/g, "''"); + const sql = `INSERT INTO "${TABLE_NAME}" (id, session_id, role, content, timestamp, channel, sender) VALUES ('${esc(id)}', '${esc(sessionId)}', '${esc(role)}', '${esc(content)}', '${esc(ts)}', '${esc(channel ?? "")}', '${esc(sender ?? "")}')`; + await this.query(sql); + } + + async search(queryText: string, limit = 10): Promise { + if (!queryText.trim()) return []; + await this.ensureTable(); + const esc = queryText.replace(/'/g, "''"); + const sql = `SELECT session_id, role, content, timestamp FROM "${TABLE_NAME}" WHERE content ILIKE '%${esc}%' ORDER BY timestamp DESC LIMIT ${limit}`; + try { + const result = await this.query(sql); + return result.rows.map((row, i) => ({ + path: `session:${row[0]}`, + snippet: `[${row[1]}] ${String(row[2]).slice(0, 500)}`, + lineStart: i + 1, + score: 1.0, + })); + } catch { + return []; + } + } + + async read(sessionId?: string, limit = 50): Promise { + await this.ensureTable(); + const where = sessionId ? `WHERE session_id = '${sessionId.replace(/'/g, "''")}'` : ""; + const sql = `SELECT role, content, timestamp FROM "${TABLE_NAME}" ${where} ORDER BY timestamp DESC LIMIT ${limit}`; + try { + const result = await this.query(sql); + return result.rows.map(row => `[${row[0]}] ${row[1]}`); + } catch { + return []; + } + } +} From ebc9bfd077a7f57a5903441ae8f61b322d7c68a9 Mon Sep 17 00:00:00 2001 From: kaghni Date: Thu, 9 Apr 2026 16:07:00 -0700 Subject: [PATCH 02/17] Rename package to deeplake-hivemind, update build scripts --- package.json | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/package.json b/package.json index f42b78a..9dd6588 100644 --- a/package.json +++ b/package.json @@ -1,14 +1,14 @@ { - "name": "deeplake-claude-code-plugins", - "version": "0.5.10", - "description": "Claude Code plugin for Deeplake memory — captures file ops and syncs to Deeplake cloud", + "name": "deeplake-hivemind", + "version": "0.6.0", + "description": "Cloud-backed persistent shared memory for AI agents powered by Deeplake", "type": "module", "bin": { "deeplake-shell": "bundle/deeplake-shell.js" }, "scripts": { - "build": "tsc && node esbuild.config.mjs", - "bundle": "node esbuild.config.mjs", + "build": "tsc && cd claude-code && node esbuild.config.mjs", + "bundle": "cd claude-code && node esbuild.config.mjs", "dev": "tsc --watch", "shell": "tsx src/shell/deeplake-shell.ts", "test": "vitest run", From 29581f0e00ed82e19a436688f5a815ce394f7fcc Mon Sep 17 00:00:00 2001 From: kaghni Date: Thu, 9 Apr 2026 16:14:33 -0700 Subject: [PATCH 03/17] =?UTF-8?q?Move=20esbuild=20config=20to=20root=20?= =?UTF-8?q?=E2=80=94=20single=20build=20for=20all=20plugins?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- claude-code/bundle/capture.js | 14 +- claude-code/bundle/commands/auth-login.js | 4 +- claude-code/bundle/pre-tool-use.js | 16 +- claude-code/bundle/session-end.js | 10 +- claude-code/bundle/session-start.js | 18 +- claude-code/bundle/shell/deeplake-shell.js | 1048 ++++++++++---------- claude-code/bundle/wiki-worker.js | 2 +- claude-code/esbuild.config.mjs | 37 - esbuild.config.mjs | 46 + openclaw/esbuild.config.mjs | 12 - package.json | 4 +- 11 files changed, 604 insertions(+), 607 deletions(-) delete mode 100644 claude-code/esbuild.config.mjs create mode 100644 esbuild.config.mjs delete mode 100644 openclaw/esbuild.config.mjs diff --git a/claude-code/bundle/capture.js b/claude-code/bundle/capture.js index 0f21aa8..91f8ec8 100755 --- a/claude-code/bundle/capture.js +++ b/claude-code/bundle/capture.js @@ -1,6 +1,6 @@ #!/usr/bin/env node -// ../dist/src/utils/stdin.js +// dist/src/utils/stdin.js function readStdin() { return new Promise((resolve, reject) => { let data = ""; @@ -17,7 +17,7 @@ function readStdin() { }); } -// ../dist/src/config.js +// dist/src/config.js import { readFileSync, existsSync } from "node:fs"; import { join } from "node:path"; import { homedir, userInfo } from "node:os"; @@ -49,10 +49,10 @@ function loadConfig() { }; } -// ../dist/src/deeplake-api.js +// dist/src/deeplake-api.js import { randomUUID } from "node:crypto"; -// ../dist/src/utils/debug.js +// dist/src/utils/debug.js import { appendFileSync } from "node:fs"; import { join as join2 } from "node:path"; import { homedir as homedir2 } from "node:os"; @@ -65,12 +65,12 @@ function log(tag, msg) { `); } -// ../dist/src/utils/sql.js +// dist/src/utils/sql.js function sqlStr(value) { return value.replace(/\\/g, "\\\\").replace(/'/g, "''").replace(/\0/g, "").replace(/[\x01-\x08\x0b\x0c\x0e-\x1f\x7f]/g, ""); } -// ../dist/src/deeplake-api.js +// dist/src/deeplake-api.js var log2 = (msg) => log("sdk", msg); var DeeplakeApi = class { token; @@ -204,7 +204,7 @@ var DeeplakeApi = class { } }; -// ../dist/src/hooks/capture.js +// dist/src/hooks/capture.js var log3 = (msg) => log("capture", msg); var CAPTURE = process.env.DEEPLAKE_CAPTURE !== "false"; function buildSessionPath(config, sessionId) { diff --git a/claude-code/bundle/commands/auth-login.js b/claude-code/bundle/commands/auth-login.js index fa994e6..522fcd1 100755 --- a/claude-code/bundle/commands/auth-login.js +++ b/claude-code/bundle/commands/auth-login.js @@ -1,6 +1,6 @@ #!/usr/bin/env node -// ../dist/src/commands/auth.js +// dist/src/commands/auth.js import { readFileSync, writeFileSync, existsSync, mkdirSync } from "node:fs"; import { join } from "node:path"; import { homedir } from "node:os"; @@ -193,7 +193,7 @@ Using: ${orgName} return creds; } -// ../dist/src/commands/auth-login.js +// dist/src/commands/auth-login.js async function main() { const args = process.argv.slice(2); const cmd = args[0] ?? "whoami"; diff --git a/claude-code/bundle/pre-tool-use.js b/claude-code/bundle/pre-tool-use.js index 39e856b..3538674 100755 --- a/claude-code/bundle/pre-tool-use.js +++ b/claude-code/bundle/pre-tool-use.js @@ -1,6 +1,6 @@ #!/usr/bin/env node -// ../dist/src/hooks/pre-tool-use.js +// dist/src/hooks/pre-tool-use.js import { existsSync as existsSync2 } from "node:fs"; import { execFileSync } from "node:child_process"; import { join as join3 } from "node:path"; @@ -8,7 +8,7 @@ import { homedir as homedir3 } from "node:os"; import { fileURLToPath } from "node:url"; import { dirname } from "node:path"; -// ../dist/src/utils/stdin.js +// dist/src/utils/stdin.js function readStdin() { return new Promise((resolve, reject) => { let data = ""; @@ -25,7 +25,7 @@ function readStdin() { }); } -// ../dist/src/config.js +// dist/src/config.js import { readFileSync, existsSync } from "node:fs"; import { join } from "node:path"; import { homedir, userInfo } from "node:os"; @@ -57,10 +57,10 @@ function loadConfig() { }; } -// ../dist/src/deeplake-api.js +// dist/src/deeplake-api.js import { randomUUID } from "node:crypto"; -// ../dist/src/utils/debug.js +// dist/src/utils/debug.js import { appendFileSync } from "node:fs"; import { join as join2 } from "node:path"; import { homedir as homedir2 } from "node:os"; @@ -73,12 +73,12 @@ function log(tag, msg) { `); } -// ../dist/src/utils/sql.js +// dist/src/utils/sql.js function sqlStr(value) { return value.replace(/\\/g, "\\\\").replace(/'/g, "''").replace(/\0/g, "").replace(/[\x01-\x08\x0b\x0c\x0e-\x1f\x7f]/g, ""); } -// ../dist/src/deeplake-api.js +// dist/src/deeplake-api.js var log2 = (msg) => log("sdk", msg); var DeeplakeApi = class { token; @@ -212,7 +212,7 @@ var DeeplakeApi = class { } }; -// ../dist/src/hooks/pre-tool-use.js +// dist/src/hooks/pre-tool-use.js var log3 = (msg) => log("pre", msg); var MEMORY_PATH = join3(homedir3(), ".deeplake", "memory"); var TILDE_PATH = "~/.deeplake/memory"; diff --git a/claude-code/bundle/session-end.js b/claude-code/bundle/session-end.js index ad05cac..8e7f620 100755 --- a/claude-code/bundle/session-end.js +++ b/claude-code/bundle/session-end.js @@ -1,13 +1,13 @@ #!/usr/bin/env node -// ../dist/src/hooks/session-end.js +// dist/src/hooks/session-end.js import { spawn, execSync } from "node:child_process"; import { fileURLToPath } from "node:url"; import { dirname, join as join3 } from "node:path"; import { writeFileSync, mkdirSync, appendFileSync as appendFileSync2 } from "node:fs"; import { homedir as homedir3, tmpdir } from "node:os"; -// ../dist/src/utils/stdin.js +// dist/src/utils/stdin.js function readStdin() { return new Promise((resolve, reject) => { let data = ""; @@ -24,7 +24,7 @@ function readStdin() { }); } -// ../dist/src/config.js +// dist/src/config.js import { readFileSync, existsSync } from "node:fs"; import { join } from "node:path"; import { homedir, userInfo } from "node:os"; @@ -56,7 +56,7 @@ function loadConfig() { }; } -// ../dist/src/utils/debug.js +// dist/src/utils/debug.js import { appendFileSync } from "node:fs"; import { join as join2 } from "node:path"; import { homedir as homedir2 } from "node:os"; @@ -69,7 +69,7 @@ function log(tag, msg) { `); } -// ../dist/src/hooks/session-end.js +// dist/src/hooks/session-end.js var log2 = (msg) => log("session-end", msg); var HOME = homedir3(); var WIKI_LOG = join3(HOME, ".claude", "hooks", "deeplake-wiki.log"); diff --git a/claude-code/bundle/session-start.js b/claude-code/bundle/session-start.js index ef91043..1e1975b 100755 --- a/claude-code/bundle/session-start.js +++ b/claude-code/bundle/session-start.js @@ -1,13 +1,13 @@ #!/usr/bin/env node -// ../dist/src/hooks/session-start.js +// dist/src/hooks/session-start.js import { fileURLToPath } from "node:url"; import { dirname, join as join4 } from "node:path"; import { mkdirSync as mkdirSync2, appendFileSync as appendFileSync2, readFileSync as readFileSync3 } from "node:fs"; import { execSync as execSync2 } from "node:child_process"; import { homedir as homedir4 } from "node:os"; -// ../dist/src/commands/auth.js +// dist/src/commands/auth.js import { readFileSync, writeFileSync, existsSync, mkdirSync } from "node:fs"; import { join } from "node:path"; import { homedir } from "node:os"; @@ -29,7 +29,7 @@ function saveCredentials(creds) { writeFileSync(CREDS_PATH, JSON.stringify({ ...creds, savedAt: (/* @__PURE__ */ new Date()).toISOString() }, null, 2), { mode: 384 }); } -// ../dist/src/config.js +// dist/src/config.js import { readFileSync as readFileSync2, existsSync as existsSync2 } from "node:fs"; import { join as join2 } from "node:path"; import { homedir as homedir2, userInfo } from "node:os"; @@ -61,10 +61,10 @@ function loadConfig() { }; } -// ../dist/src/deeplake-api.js +// dist/src/deeplake-api.js import { randomUUID } from "node:crypto"; -// ../dist/src/utils/debug.js +// dist/src/utils/debug.js import { appendFileSync } from "node:fs"; import { join as join3 } from "node:path"; import { homedir as homedir3 } from "node:os"; @@ -77,12 +77,12 @@ function log(tag, msg) { `); } -// ../dist/src/utils/sql.js +// dist/src/utils/sql.js function sqlStr(value) { return value.replace(/\\/g, "\\\\").replace(/'/g, "''").replace(/\0/g, "").replace(/[\x01-\x08\x0b\x0c\x0e-\x1f\x7f]/g, ""); } -// ../dist/src/deeplake-api.js +// dist/src/deeplake-api.js var log2 = (msg) => log("sdk", msg); var DeeplakeApi = class { token; @@ -216,7 +216,7 @@ var DeeplakeApi = class { } }; -// ../dist/src/utils/stdin.js +// dist/src/utils/stdin.js function readStdin() { return new Promise((resolve, reject) => { let data = ""; @@ -233,7 +233,7 @@ function readStdin() { }); } -// ../dist/src/hooks/session-start.js +// dist/src/hooks/session-start.js var log3 = (msg) => log("session-start", msg); var __bundleDir = dirname(fileURLToPath(import.meta.url)); var AUTH_CMD = join4(__bundleDir, "commands", "auth-login.js"); diff --git a/claude-code/bundle/shell/deeplake-shell.js b/claude-code/bundle/shell/deeplake-shell.js index 6a88657..fe5f9b0 100755 --- a/claude-code/bundle/shell/deeplake-shell.js +++ b/claude-code/bundle/shell/deeplake-shell.js @@ -38,7 +38,7 @@ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__ge mod )); -// ../node_modules/just-bash/dist/bundle/chunks/chunk-YNYSPYQ5.js +// node_modules/just-bash/dist/bundle/chunks/chunk-YNYSPYQ5.js function T1(n24) { let t6 = 0; return n24.includes("i") && (t6 |= y.CASE_INSENSITIVE), n24.includes("m") && (t6 |= y.MULTILINE), n24.includes("s") && (t6 |= y.DOTALL), t6; @@ -51,7 +51,7 @@ function b1(n24, t6 = "") { } var g, u, a, b, w, O, R1, I, F, X, P, _, m, v, U, z, V, L, $, j, N, E, W, Y, M, c, q, D, K, Z, d, n1, r1, a1, o1, l1, h1, u1, c1, p1, f1, g1, A1, w1, E1, d1, O1, C1, m1, S1, x, H, Q, J, t1, e1, s1, y, B, i1; var init_chunk_YNYSPYQ5 = __esm({ - "../node_modules/just-bash/dist/bundle/chunks/chunk-YNYSPYQ5.js"() { + "node_modules/just-bash/dist/bundle/chunks/chunk-YNYSPYQ5.js"() { g = class n { static FOLD_CASE = 1; static LITERAL = 2; @@ -2970,13 +2970,13 @@ var init_chunk_YNYSPYQ5 = __esm({ } }); -// ../node_modules/just-bash/dist/bundle/chunks/chunk-GFQRA5P5.js +// node_modules/just-bash/dist/bundle/chunks/chunk-GFQRA5P5.js function v2(r10) { return r10 instanceof c2 || r10 instanceof a2 || r10 instanceof i; } var n15, c2, a2, i, u2, x2, d2, p, l, h, m2, b2, $2, f, C; var init_chunk_GFQRA5P5 = __esm({ - "../node_modules/just-bash/dist/bundle/chunks/chunk-GFQRA5P5.js"() { + "node_modules/just-bash/dist/bundle/chunks/chunk-GFQRA5P5.js"() { n15 = class extends Error { stdout; stderr; @@ -3090,7 +3090,7 @@ var init_chunk_GFQRA5P5 = __esm({ } }); -// ../node_modules/just-bash/dist/bundle/chunks/chunk-FEIOJCZD.js +// node_modules/just-bash/dist/bundle/chunks/chunk-FEIOJCZD.js function $3(e6, t6) { for (; t6 < e6.length; ) { if (e6[t6] === "\\" && e6[t6 + 1] === ` @@ -8494,7 +8494,7 @@ async function Ve(e6, t6, r10 = false) { } var Re, w2, p2, pe, Bt, Dr, xr, _r, ve, Qe, Ze, Qt, Ue, Zt, Ut, Ht, G, Tr, Fr, zr, V2, Yr, dn, oe, yn, xi, as, Le, ys, kt; var init_chunk_FEIOJCZD = __esm({ - "../node_modules/just-bash/dist/bundle/chunks/chunk-FEIOJCZD.js"() { + "node_modules/just-bash/dist/bundle/chunks/chunk-FEIOJCZD.js"() { init_chunk_YNYSPYQ5(); init_chunk_GFQRA5P5(); Re = ["=", "+=", "-=", "*=", "/=", "%=", "<<=", ">>=", "&=", "|=", "^="]; @@ -9839,7 +9839,7 @@ var init_chunk_FEIOJCZD = __esm({ } }); -// ../node_modules/just-bash/dist/bundle/chunks/chunk-XHM67O4N.js +// node_modules/just-bash/dist/bundle/chunks/chunk-XHM67O4N.js import * as i2 from "node:fs"; import * as o from "node:path"; function c3(t6) { @@ -9873,14 +9873,14 @@ function v4(t6, e6) { return c3(p3(n24, e6)); } var init_chunk_XHM67O4N = __esm({ - "../node_modules/just-bash/dist/bundle/chunks/chunk-XHM67O4N.js"() { + "node_modules/just-bash/dist/bundle/chunks/chunk-XHM67O4N.js"() { } }); -// ../node_modules/just-bash/dist/bundle/chunks/chunk-CWQS3NFK.js +// node_modules/just-bash/dist/bundle/chunks/chunk-CWQS3NFK.js var r, e2, o2, a3; var init_chunk_CWQS3NFK = __esm({ - "../node_modules/just-bash/dist/bundle/chunks/chunk-CWQS3NFK.js"() { + "node_modules/just-bash/dist/bundle/chunks/chunk-CWQS3NFK.js"() { r = globalThis.SharedArrayBuffer; e2 = globalThis.Atomics; o2 = performance.now.bind(performance); @@ -9888,10 +9888,10 @@ var init_chunk_CWQS3NFK = __esm({ } }); -// ../node_modules/just-bash/dist/bundle/chunks/chunk-DXB73IDG.js +// node_modules/just-bash/dist/bundle/chunks/chunk-DXB73IDG.js var h3, e3, i3, j2, k2, l2, m4, n16, o3, p4, g2, q3, r2; var init_chunk_DXB73IDG = __esm({ - "../node_modules/just-bash/dist/bundle/chunks/chunk-DXB73IDG.js"() { + "node_modules/just-bash/dist/bundle/chunks/chunk-DXB73IDG.js"() { h3 = Object.create; e3 = Object.defineProperty; i3 = Object.getOwnPropertyDescriptor; @@ -9916,7 +9916,7 @@ var init_chunk_DXB73IDG = __esm({ } }); -// ../node_modules/just-bash/dist/bundle/chunks/chunk-5QMZ5MUS.js +// node_modules/just-bash/dist/bundle/chunks/chunk-5QMZ5MUS.js function v5() { let a15 = [{ prop: "Function", target: globalThis, violationType: "function_constructor", strategy: "throw", reason: "Function constructor allows arbitrary code execution" }, { prop: "eval", target: globalThis, violationType: "eval", strategy: "throw", reason: "eval() allows arbitrary code execution" }, { prop: "setTimeout", target: globalThis, violationType: "setTimeout", strategy: "throw", reason: "setTimeout with string argument allows code execution" }, { prop: "setInterval", target: globalThis, violationType: "setInterval", strategy: "throw", reason: "setInterval with string argument allows code execution" }, { prop: "setImmediate", target: globalThis, violationType: "setImmediate", strategy: "throw", reason: "setImmediate could be used to escape sandbox context" }, { prop: "env", target: process, violationType: "process_env", strategy: "throw", reason: "process.env could leak sensitive environment variables", allowedKeys: /* @__PURE__ */ new Set(["NODE_V8_COVERAGE", "NODE_DEBUG", "NODE_DEBUG_NATIVE", "NODE_COMPILE_CACHE", "WATCH_REPORT_DEPENDENCIES", "FORCE_COLOR", "DEBUG", "UNDICI_NO_FG", "JEST_WORKER_ID", "__MINIMATCH_TESTING_PLATFORM__", "LOG_TOKENS", "LOG_STREAM"]) }, { prop: "binding", target: process, violationType: "process_binding", strategy: "throw", reason: "process.binding provides access to native Node.js modules" }, { prop: "_linkedBinding", target: process, violationType: "process_binding", strategy: "throw", reason: "process._linkedBinding provides access to native Node.js modules" }, { prop: "dlopen", target: process, violationType: "process_dlopen", strategy: "throw", reason: "process.dlopen allows loading native addons" }, { prop: "getBuiltinModule", target: process, violationType: "process_get_builtin_module", strategy: "throw", reason: "process.getBuiltinModule allows loading native Node.js modules (fs, child_process, vm)" }, { prop: "exit", target: process, violationType: "process_exit", strategy: "throw", reason: "process.exit could terminate the interpreter" }, { prop: "abort", target: process, violationType: "process_exit", strategy: "throw", reason: "process.abort could crash the interpreter" }, { prop: "kill", target: process, violationType: "process_kill", strategy: "throw", reason: "process.kill could signal other processes" }, { prop: "setuid", target: process, violationType: "process_setuid", strategy: "throw", reason: "process.setuid could escalate privileges" }, { prop: "setgid", target: process, violationType: "process_setuid", strategy: "throw", reason: "process.setgid could escalate privileges" }, { prop: "seteuid", target: process, violationType: "process_setuid", strategy: "throw", reason: "process.seteuid could escalate effective user privileges" }, { prop: "setegid", target: process, violationType: "process_setuid", strategy: "throw", reason: "process.setegid could escalate effective group privileges" }, { prop: "initgroups", target: process, violationType: "process_setuid", strategy: "throw", reason: "process.initgroups could modify supplementary group IDs" }, { prop: "setgroups", target: process, violationType: "process_setuid", strategy: "throw", reason: "process.setgroups could modify supplementary group IDs" }, { prop: "umask", target: process, violationType: "process_umask", strategy: "throw", reason: "process.umask could modify file creation permissions" }, { prop: "argv", target: process, violationType: "process_argv", strategy: "throw", reason: "process.argv may contain secrets in CLI arguments" }, { prop: "cwd", target: process, violationType: "process_chdir", strategy: "throw", reason: "process.cwd could disclose real host working directory path" }, { prop: "chdir", target: process, violationType: "process_chdir", strategy: "throw", reason: "process.chdir could confuse the interpreter's CWD tracking" }, { prop: "report", target: process, violationType: "process_report", strategy: "throw", reason: "process.report could disclose full environment, host paths, and system info" }, { prop: "loadEnvFile", target: process, violationType: "process_env", strategy: "throw", reason: "process.loadEnvFile could load env files bypassing env proxy" }, { prop: "setUncaughtExceptionCaptureCallback", target: process, violationType: "process_exception_handler", strategy: "throw", reason: "setUncaughtExceptionCaptureCallback could intercept security errors" }, { prop: "send", target: process, violationType: "process_send", strategy: "throw", reason: "process.send could communicate with parent process in IPC contexts" }, { prop: "channel", target: process, violationType: "process_channel", strategy: "throw", reason: "process.channel could access IPC channel to parent process" }, { prop: "cpuUsage", target: process, violationType: "process_timing", strategy: "throw", reason: "process.cpuUsage could enable timing side-channel attacks" }, { prop: "memoryUsage", target: process, violationType: "process_timing", strategy: "throw", reason: "process.memoryUsage could enable timing side-channel attacks" }, { prop: "hrtime", target: process, violationType: "process_timing", strategy: "throw", reason: "process.hrtime could enable timing side-channel attacks" }, { prop: "WeakRef", target: globalThis, violationType: "weak_ref", strategy: "throw", reason: "WeakRef could be used to leak references outside sandbox" }, { prop: "FinalizationRegistry", target: globalThis, violationType: "finalization_registry", strategy: "throw", reason: "FinalizationRegistry could be used to leak references outside sandbox" }, { prop: "Reflect", target: globalThis, violationType: "reflect", strategy: "freeze", reason: "Reflect provides introspection capabilities" }, { prop: "Proxy", target: globalThis, violationType: "proxy", strategy: "throw", reason: "Proxy allows intercepting and modifying object behavior" }, { prop: "WebAssembly", target: globalThis, violationType: "webassembly", strategy: "throw", reason: "WebAssembly allows executing arbitrary compiled code" }, { prop: "SharedArrayBuffer", target: globalThis, violationType: "shared_array_buffer", strategy: "throw", reason: "SharedArrayBuffer could enable side-channel communication or timing attacks" }, { prop: "Atomics", target: globalThis, violationType: "atomics", strategy: "throw", reason: "Atomics could enable side-channel communication or timing attacks" }, { prop: "performance", target: globalThis, violationType: "performance_timing", strategy: "throw", reason: "performance.now() provides sub-millisecond timing for side-channel attacks" }, { prop: "stdout", target: process, violationType: "process_stdout", strategy: "throw", reason: "process.stdout could bypass interpreter output to write to host stdout" }, { prop: "stderr", target: process, violationType: "process_stderr", strategy: "throw", reason: "process.stderr could bypass interpreter output to write to host stderr" }, { prop: "__defineGetter__", target: Object.prototype, violationType: "prototype_mutation", strategy: "throw", reason: "__defineGetter__ allows prototype pollution via getter injection" }, { prop: "__defineSetter__", target: Object.prototype, violationType: "prototype_mutation", strategy: "throw", reason: "__defineSetter__ allows prototype pollution via setter injection" }, { prop: "__lookupGetter__", target: Object.prototype, violationType: "prototype_mutation", strategy: "throw", reason: "__lookupGetter__ enables introspection for prototype pollution attacks" }, { prop: "__lookupSetter__", target: Object.prototype, violationType: "prototype_mutation", strategy: "throw", reason: "__lookupSetter__ enables introspection for prototype pollution attacks" }, { prop: "JSON", target: globalThis, violationType: "json_mutation", strategy: "freeze", reason: "Freeze JSON to prevent mutation of parsing/serialization" }, { prop: "Math", target: globalThis, violationType: "math_mutation", strategy: "freeze", reason: "Freeze Math to prevent mutation of math utilities" }]; try { @@ -9963,7 +9963,7 @@ function E2(a15) { } var f2, x4, k3, d3, u3, T2, m5, _2; var init_chunk_5QMZ5MUS = __esm({ - "../node_modules/just-bash/dist/bundle/chunks/chunk-5QMZ5MUS.js"() { + "node_modules/just-bash/dist/bundle/chunks/chunk-5QMZ5MUS.js"() { init_chunk_DXB73IDG(); f2 = typeof __BROWSER__ < "u" && __BROWSER__; x4 = null; @@ -10513,13 +10513,13 @@ This is a defense-in-depth measure and indicates a bug in just-bash. Please repo } }); -// ../node_modules/just-bash/dist/bundle/chunks/chunk-A5O5YHGN.js +// node_modules/just-bash/dist/bundle/chunks/chunk-A5O5YHGN.js function l3(t6) { return typeof t6 != "function" ? t6 : _2.bindCurrentContext(t6); } var i4, r3, s, T3, b3, u4; var init_chunk_A5O5YHGN = __esm({ - "../node_modules/just-bash/dist/bundle/chunks/chunk-A5O5YHGN.js"() { + "node_modules/just-bash/dist/bundle/chunks/chunk-A5O5YHGN.js"() { init_chunk_5QMZ5MUS(); i4 = globalThis.setTimeout.bind(globalThis); r3 = globalThis.clearTimeout.bind(globalThis); @@ -10530,7 +10530,7 @@ var init_chunk_A5O5YHGN = __esm({ } }); -// ../node_modules/just-bash/dist/bundle/chunks/chunk-IPJHKYVM.js +// node_modules/just-bash/dist/bundle/chunks/chunk-IPJHKYVM.js function n17(e6) { return `'${e6.replace(/'/g, "'\\''")}'`; } @@ -10538,11 +10538,11 @@ function r4(e6) { return e6.map(n17).join(" "); } var init_chunk_IPJHKYVM = __esm({ - "../node_modules/just-bash/dist/bundle/chunks/chunk-IPJHKYVM.js"() { + "node_modules/just-bash/dist/bundle/chunks/chunk-IPJHKYVM.js"() { } }); -// ../node_modules/just-bash/dist/bundle/chunks/chunk-OJDRYQWQ.js +// node_modules/just-bash/dist/bundle/chunks/chunk-OJDRYQWQ.js function r5(e6) { return Object.assign(/* @__PURE__ */ Object.create(null), Object.fromEntries(e6)); } @@ -10553,11 +10553,11 @@ function c4(...e6) { return Object.assign(/* @__PURE__ */ Object.create(null), ...e6); } var init_chunk_OJDRYQWQ = __esm({ - "../node_modules/just-bash/dist/bundle/chunks/chunk-OJDRYQWQ.js"() { + "node_modules/just-bash/dist/bundle/chunks/chunk-OJDRYQWQ.js"() { } }); -// ../node_modules/just-bash/dist/bundle/chunks/chunk-24IMIIXA.js +// node_modules/just-bash/dist/bundle/chunks/chunk-24IMIIXA.js function a5(t6, e6, n24) { if (!t6 || _2.isInSandboxedContext()) return; let r10 = `${e6} ${n24} attempted outside defense context`; @@ -10573,12 +10573,12 @@ function d4(t6, e6, n24, r10) { return t6 ? _2.bindCurrentContext(o14) : o14; } var init_chunk_24IMIIXA = __esm({ - "../node_modules/just-bash/dist/bundle/chunks/chunk-24IMIIXA.js"() { + "node_modules/just-bash/dist/bundle/chunks/chunk-24IMIIXA.js"() { init_chunk_5QMZ5MUS(); } }); -// ../node_modules/just-bash/dist/bundle/chunks/chunk-3THT3N7L.js +// node_modules/just-bash/dist/bundle/chunks/chunk-3THT3N7L.js function a6(r10, s10, t6) { if (!r10) return r10; let e6 = r10.replace(/\n\s+at\s.*/g, ""); @@ -10591,20 +10591,20 @@ function i5(r10) { return a6(r10, true, true); } var init_chunk_3THT3N7L = __esm({ - "../node_modules/just-bash/dist/bundle/chunks/chunk-3THT3N7L.js"() { + "node_modules/just-bash/dist/bundle/chunks/chunk-3THT3N7L.js"() { } }); -// ../node_modules/just-bash/dist/bundle/chunks/chunk-44UOCSGV.js +// node_modules/just-bash/dist/bundle/chunks/chunk-44UOCSGV.js function n20(e6) { return e6 instanceof Error ? e6.message : String(e6); } var init_chunk_44UOCSGV = __esm({ - "../node_modules/just-bash/dist/bundle/chunks/chunk-44UOCSGV.js"() { + "node_modules/just-bash/dist/bundle/chunks/chunk-44UOCSGV.js"() { } }); -// ../node_modules/just-bash/dist/bundle/chunks/chunk-GCTKCWKD.js +// node_modules/just-bash/dist/bundle/chunks/chunk-GCTKCWKD.js function n21(r10) { let s10 = "", e6 = 0; for (; e6 < r10.length; ) if (r10[e6] === "\\") { @@ -10699,7 +10699,7 @@ function n21(r10) { } var c5, f3; var init_chunk_GCTKCWKD = __esm({ - "../node_modules/just-bash/dist/bundle/chunks/chunk-GCTKCWKD.js"() { + "node_modules/just-bash/dist/bundle/chunks/chunk-GCTKCWKD.js"() { c5 = { name: "echo", async execute(r10, s10) { let e6 = false, o14 = s10.xpgEcho ?? false, a15 = 0; for (; a15 < r10.length; ) { @@ -10722,20 +10722,20 @@ var init_chunk_GCTKCWKD = __esm({ } }); -// ../node_modules/just-bash/dist/bundle/chunks/echo-O45JWWI2.js +// node_modules/just-bash/dist/bundle/chunks/echo-O45JWWI2.js var echo_O45JWWI2_exports = {}; __export(echo_O45JWWI2_exports, { echoCommand: () => c5, flagsForFuzzing: () => f3 }); var init_echo_O45JWWI2 = __esm({ - "../node_modules/just-bash/dist/bundle/chunks/echo-O45JWWI2.js"() { + "node_modules/just-bash/dist/bundle/chunks/echo-O45JWWI2.js"() { init_chunk_GCTKCWKD(); init_chunk_DXB73IDG(); } }); -// ../node_modules/just-bash/dist/bundle/chunks/chunk-7L36YK2X.js +// node_modules/just-bash/dist/bundle/chunks/chunk-7L36YK2X.js async function y3(t6, n24, s10) { let { cmdName: r10, allowStdinMarker: f11 = true, stopOnError: a15 = false, batchSize: u12 = 100 } = s10; if (n24.length === 0) return { files: [{ filename: "", content: t6.stdin }], stderr: "", exitCode: 0 }; @@ -10762,11 +10762,11 @@ async function b4(t6, n24, s10) { return r10.exitCode !== 0 ? { ok: false, error: { stdout: "", stderr: r10.stderr, exitCode: r10.exitCode } } : { ok: true, content: r10.files.map((a15) => a15.content).join("") }; } var init_chunk_7L36YK2X = __esm({ - "../node_modules/just-bash/dist/bundle/chunks/chunk-7L36YK2X.js"() { + "node_modules/just-bash/dist/bundle/chunks/chunk-7L36YK2X.js"() { } }); -// ../node_modules/just-bash/dist/bundle/chunks/chunk-74CEPOFO.js +// node_modules/just-bash/dist/bundle/chunks/chunk-74CEPOFO.js function s2(t6) { let e6 = `${t6.name} - ${t6.summary} @@ -10815,11 +10815,11 @@ function r6(t6, e6) { `, exitCode: 1 }; } var init_chunk_74CEPOFO = __esm({ - "../node_modules/just-bash/dist/bundle/chunks/chunk-74CEPOFO.js"() { + "node_modules/just-bash/dist/bundle/chunks/chunk-74CEPOFO.js"() { } }); -// ../node_modules/just-bash/dist/bundle/chunks/chunk-HWKDQ44K.js +// node_modules/just-bash/dist/bundle/chunks/chunk-HWKDQ44K.js function x6(a15, i11, d15) { let g17 = /* @__PURE__ */ new Map(), h18 = /* @__PURE__ */ new Map(); for (let [t6, e6] of Object.entries(d15)) { @@ -10876,12 +10876,12 @@ function x6(a15, i11, d15) { return { ok: true, result: { flags: s10, positional: b26 } }; } var init_chunk_HWKDQ44K = __esm({ - "../node_modules/just-bash/dist/bundle/chunks/chunk-HWKDQ44K.js"() { + "node_modules/just-bash/dist/bundle/chunks/chunk-HWKDQ44K.js"() { init_chunk_74CEPOFO(); } }); -// ../node_modules/just-bash/dist/bundle/chunks/chunk-TXBZCHCQ.js +// node_modules/just-bash/dist/bundle/chunks/chunk-TXBZCHCQ.js function y4(n24, s10) { let e6 = n24.split(` `), r10 = n24.endsWith(` @@ -10892,7 +10892,7 @@ function y4(n24, s10) { } var b5, g3, F3, w4; var init_chunk_TXBZCHCQ = __esm({ - "../node_modules/just-bash/dist/bundle/chunks/chunk-TXBZCHCQ.js"() { + "node_modules/just-bash/dist/bundle/chunks/chunk-TXBZCHCQ.js"() { init_chunk_7L36YK2X(); init_chunk_HWKDQ44K(); init_chunk_74CEPOFO(); @@ -10914,14 +10914,14 @@ var init_chunk_TXBZCHCQ = __esm({ } }); -// ../node_modules/just-bash/dist/bundle/chunks/cat-RDUMLXKC.js +// node_modules/just-bash/dist/bundle/chunks/cat-RDUMLXKC.js var cat_RDUMLXKC_exports = {}; __export(cat_RDUMLXKC_exports, { catCommand: () => F3, flagsForFuzzing: () => w4 }); var init_cat_RDUMLXKC = __esm({ - "../node_modules/just-bash/dist/bundle/chunks/cat-RDUMLXKC.js"() { + "node_modules/just-bash/dist/bundle/chunks/cat-RDUMLXKC.js"() { init_chunk_TXBZCHCQ(); init_chunk_7L36YK2X(); init_chunk_HWKDQ44K(); @@ -10930,7 +10930,7 @@ var init_cat_RDUMLXKC = __esm({ } }); -// ../node_modules/just-bash/dist/bundle/chunks/chunk-EEXR5ZDP.js +// node_modules/just-bash/dist/bundle/chunks/chunk-EEXR5ZDP.js function i6(t6, l7, e6) { let c15 = t6; e6 >= 0 && c15.length > e6 && (c15 = c15.slice(0, e6)); @@ -11021,13 +11021,13 @@ function r7(t6) { return l7; } var init_chunk_EEXR5ZDP = __esm({ - "../node_modules/just-bash/dist/bundle/chunks/chunk-EEXR5ZDP.js"() { + "node_modules/just-bash/dist/bundle/chunks/chunk-EEXR5ZDP.js"() { } }); -// ../node_modules/sprintf-js/src/sprintf.js +// node_modules/sprintf-js/src/sprintf.js var require_sprintf = __commonJS({ - "../node_modules/sprintf-js/src/sprintf.js"(exports) { + "node_modules/sprintf-js/src/sprintf.js"(exports) { !(function() { "use strict"; var re9 = { @@ -11228,7 +11228,7 @@ var require_sprintf = __commonJS({ } }); -// ../node_modules/just-bash/dist/bundle/chunks/chunk-T56QNPHK.js +// node_modules/just-bash/dist/bundle/chunks/chunk-T56QNPHK.js function P3(t6, s10, r10) { let e6 = new Date(s10 * 1e3), a15 = "", n24 = 0; for (; n24 < t6.length; ) if (t6[n24] === "%" && n24 + 1 < t6.length) { @@ -11707,7 +11707,7 @@ function ae2(t6) { } var import_sprintf_js, X3, de2, d5, he2; var init_chunk_T56QNPHK = __esm({ - "../node_modules/just-bash/dist/bundle/chunks/chunk-T56QNPHK.js"() { + "node_modules/just-bash/dist/bundle/chunks/chunk-T56QNPHK.js"() { init_chunk_EEXR5ZDP(); init_chunk_GFQRA5P5(); init_chunk_44UOCSGV(); @@ -11766,14 +11766,14 @@ var init_chunk_T56QNPHK = __esm({ } }); -// ../node_modules/just-bash/dist/bundle/chunks/printf-CX64KX2P.js +// node_modules/just-bash/dist/bundle/chunks/printf-CX64KX2P.js var printf_CX64KX2P_exports = {}; __export(printf_CX64KX2P_exports, { flagsForFuzzing: () => he2, printfCommand: () => de2 }); var init_printf_CX64KX2P = __esm({ - "../node_modules/just-bash/dist/bundle/chunks/printf-CX64KX2P.js"() { + "node_modules/just-bash/dist/bundle/chunks/printf-CX64KX2P.js"() { init_chunk_T56QNPHK(); init_chunk_EEXR5ZDP(); init_chunk_GFQRA5P5(); @@ -11783,10 +11783,10 @@ var init_printf_CX64KX2P = __esm({ } }); -// ../node_modules/balanced-match/dist/esm/index.js +// node_modules/balanced-match/dist/esm/index.js var balanced, maybeMatch, range; var init_esm = __esm({ - "../node_modules/balanced-match/dist/esm/index.js"() { + "node_modules/balanced-match/dist/esm/index.js"() { balanced = (a15, b26, str) => { const ma3 = a15 instanceof RegExp ? maybeMatch(a15, str) : a15; const mb = b26 instanceof RegExp ? maybeMatch(b26, str) : b26; @@ -11841,7 +11841,7 @@ var init_esm = __esm({ } }); -// ../node_modules/brace-expansion/dist/esm/index.js +// node_modules/brace-expansion/dist/esm/index.js function numeric(str) { return !isNaN(str) ? parseInt(str, 10) : str.charCodeAt(0); } @@ -11986,7 +11986,7 @@ function expand_(str, max, isTop) { } var escSlash, escOpen, escClose, escComma, escPeriod, escSlashPattern, escOpenPattern, escClosePattern, escCommaPattern, escPeriodPattern, slashPattern, openPattern, closePattern, commaPattern, periodPattern, EXPANSION_MAX; var init_esm2 = __esm({ - "../node_modules/brace-expansion/dist/esm/index.js"() { + "node_modules/brace-expansion/dist/esm/index.js"() { init_esm(); escSlash = "\0SLASH" + Math.random() + "\0"; escOpen = "\0OPEN" + Math.random() + "\0"; @@ -12007,10 +12007,10 @@ var init_esm2 = __esm({ } }); -// ../node_modules/minimatch/dist/esm/assert-valid-pattern.js +// node_modules/minimatch/dist/esm/assert-valid-pattern.js var MAX_PATTERN_LENGTH, assertValidPattern; var init_assert_valid_pattern = __esm({ - "../node_modules/minimatch/dist/esm/assert-valid-pattern.js"() { + "node_modules/minimatch/dist/esm/assert-valid-pattern.js"() { MAX_PATTERN_LENGTH = 1024 * 64; assertValidPattern = (pattern) => { if (typeof pattern !== "string") { @@ -12023,10 +12023,10 @@ var init_assert_valid_pattern = __esm({ } }); -// ../node_modules/minimatch/dist/esm/brace-expressions.js +// node_modules/minimatch/dist/esm/brace-expressions.js var posixClasses, braceEscape, regexpEscape, rangesToString, parseClass; var init_brace_expressions = __esm({ - "../node_modules/minimatch/dist/esm/brace-expressions.js"() { + "node_modules/minimatch/dist/esm/brace-expressions.js"() { posixClasses = { "[:alnum:]": ["\\p{L}\\p{Nl}\\p{Nd}", true], "[:alpha:]": ["\\p{L}\\p{Nl}", true], @@ -12137,10 +12137,10 @@ var init_brace_expressions = __esm({ } }); -// ../node_modules/minimatch/dist/esm/unescape.js +// node_modules/minimatch/dist/esm/unescape.js var unescape; var init_unescape = __esm({ - "../node_modules/minimatch/dist/esm/unescape.js"() { + "node_modules/minimatch/dist/esm/unescape.js"() { unescape = (s10, { windowsPathsNoEscape = false, magicalBraces = true } = {}) => { if (magicalBraces) { return windowsPathsNoEscape ? s10.replace(/\[([^/\\])\]/g, "$1") : s10.replace(/((?!\\).|^)\[([^/\\])\]/g, "$1$2").replace(/\\([^/])/g, "$1"); @@ -12150,10 +12150,10 @@ var init_unescape = __esm({ } }); -// ../node_modules/minimatch/dist/esm/ast.js +// node_modules/minimatch/dist/esm/ast.js var _a, types, isExtglobType, isExtglobAST, adoptionMap, adoptionWithSpaceMap, adoptionAnyMap, usurpMap, startNoTraversal, startNoDot, addPatternStart, justDots, reSpecials, regExpEscape, qmark, star, starNoEmpty, ID, AST; var init_ast = __esm({ - "../node_modules/minimatch/dist/esm/ast.js"() { + "node_modules/minimatch/dist/esm/ast.js"() { init_brace_expressions(); init_unescape(); types = /* @__PURE__ */ new Set(["!", "?", "+", "*", "@"]); @@ -12800,10 +12800,10 @@ var init_ast = __esm({ } }); -// ../node_modules/minimatch/dist/esm/escape.js +// node_modules/minimatch/dist/esm/escape.js var escape; var init_escape = __esm({ - "../node_modules/minimatch/dist/esm/escape.js"() { + "node_modules/minimatch/dist/esm/escape.js"() { escape = (s10, { windowsPathsNoEscape = false, magicalBraces = false } = {}) => { if (magicalBraces) { return windowsPathsNoEscape ? s10.replace(/[?*()[\]{}]/g, "[$&]") : s10.replace(/[?*()[\]\\{}]/g, "\\$&"); @@ -12813,10 +12813,10 @@ var init_escape = __esm({ } }); -// ../node_modules/minimatch/dist/esm/index.js +// node_modules/minimatch/dist/esm/index.js var minimatch, starDotExtRE, starDotExtTest, starDotExtTestDot, starDotExtTestNocase, starDotExtTestNocaseDot, starDotStarRE, starDotStarTest, starDotStarTestDot, dotStarRE, dotStarTest, starRE, starTest, starTestDot, qmarksRE, qmarksTestNocase, qmarksTestNocaseDot, qmarksTestDot, qmarksTest, qmarksTestNoExt, qmarksTestNoExtDot, defaultPlatform, path, sep, GLOBSTAR, qmark2, star2, twoStarDot, twoStarNoDot, filter, ext, defaults, braceExpand, makeRe, match, globMagic, regExpEscape2, Minimatch; var init_esm3 = __esm({ - "../node_modules/minimatch/dist/esm/index.js"() { + "node_modules/minimatch/dist/esm/index.js"() { init_esm2(); init_assert_valid_pattern(); init_ast(); @@ -13635,7 +13635,7 @@ var init_esm3 = __esm({ } }); -// ../node_modules/just-bash/dist/bundle/chunks/chunk-V7TAPXDL.js +// node_modules/just-bash/dist/bundle/chunks/chunk-V7TAPXDL.js function M3(n24) { if (n24 < 1024) return String(n24); if (n24 < 1024 * 1024) { @@ -13832,7 +13832,7 @@ async function O3(n24, s10, c15, w20, S18, y21, P21, b26 = false, g17 = false, v } var k4, G3, Z4, q5; var init_chunk_V7TAPXDL = __esm({ - "../node_modules/just-bash/dist/bundle/chunks/chunk-V7TAPXDL.js"() { + "node_modules/just-bash/dist/bundle/chunks/chunk-V7TAPXDL.js"() { init_chunk_HWKDQ44K(); init_chunk_74CEPOFO(); init_esm3(); @@ -13885,14 +13885,14 @@ var init_chunk_V7TAPXDL = __esm({ } }); -// ../node_modules/just-bash/dist/bundle/chunks/ls-KSXFZCWH.js +// node_modules/just-bash/dist/bundle/chunks/ls-KSXFZCWH.js var ls_KSXFZCWH_exports = {}; __export(ls_KSXFZCWH_exports, { flagsForFuzzing: () => q5, lsCommand: () => Z4 }); var init_ls_KSXFZCWH = __esm({ - "../node_modules/just-bash/dist/bundle/chunks/ls-KSXFZCWH.js"() { + "node_modules/just-bash/dist/bundle/chunks/ls-KSXFZCWH.js"() { init_chunk_V7TAPXDL(); init_chunk_HWKDQ44K(); init_chunk_74CEPOFO(); @@ -13900,10 +13900,10 @@ var init_ls_KSXFZCWH = __esm({ } }); -// ../node_modules/just-bash/dist/bundle/chunks/chunk-MDDMCKUK.js +// node_modules/just-bash/dist/bundle/chunks/chunk-MDDMCKUK.js var p5, b6, h5; var init_chunk_MDDMCKUK = __esm({ - "../node_modules/just-bash/dist/bundle/chunks/chunk-MDDMCKUK.js"() { + "node_modules/just-bash/dist/bundle/chunks/chunk-MDDMCKUK.js"() { init_chunk_3THT3N7L(); init_chunk_HWKDQ44K(); init_chunk_44UOCSGV(); @@ -13932,14 +13932,14 @@ var init_chunk_MDDMCKUK = __esm({ } }); -// ../node_modules/just-bash/dist/bundle/chunks/mkdir-TDEMSB6C.js +// node_modules/just-bash/dist/bundle/chunks/mkdir-TDEMSB6C.js var mkdir_TDEMSB6C_exports = {}; __export(mkdir_TDEMSB6C_exports, { flagsForFuzzing: () => h5, mkdirCommand: () => b6 }); var init_mkdir_TDEMSB6C = __esm({ - "../node_modules/just-bash/dist/bundle/chunks/mkdir-TDEMSB6C.js"() { + "node_modules/just-bash/dist/bundle/chunks/mkdir-TDEMSB6C.js"() { init_chunk_MDDMCKUK(); init_chunk_3THT3N7L(); init_chunk_HWKDQ44K(); @@ -13949,7 +13949,7 @@ var init_mkdir_TDEMSB6C = __esm({ } }); -// ../node_modules/just-bash/dist/bundle/chunks/chunk-OCS6LSEM.js +// node_modules/just-bash/dist/bundle/chunks/chunk-OCS6LSEM.js async function b7(t6, r10, e6, a15) { let o14 = "", s10 = "", n24 = t6.fs.resolvePath(t6.cwd, r10), i11 = await v7(t6, n24, r10, a15); if (o14 += i11.stdout, s10 += i11.stderr, i11.exitCode !== 0) return { stdout: o14, stderr: s10, exitCode: i11.exitCode }; @@ -13989,7 +13989,7 @@ function C3(t6) { } var x7, y5, D3, $4; var init_chunk_OCS6LSEM = __esm({ - "../node_modules/just-bash/dist/bundle/chunks/chunk-OCS6LSEM.js"() { + "node_modules/just-bash/dist/bundle/chunks/chunk-OCS6LSEM.js"() { init_chunk_HWKDQ44K(); init_chunk_44UOCSGV(); x7 = `Usage: rmdir [-pv] DIRECTORY... @@ -14018,14 +14018,14 @@ Options: } }); -// ../node_modules/just-bash/dist/bundle/chunks/rmdir-XTQXT7RK.js +// node_modules/just-bash/dist/bundle/chunks/rmdir-XTQXT7RK.js var rmdir_XTQXT7RK_exports = {}; __export(rmdir_XTQXT7RK_exports, { flagsForFuzzing: () => $4, rmdirCommand: () => D3 }); var init_rmdir_XTQXT7RK = __esm({ - "../node_modules/just-bash/dist/bundle/chunks/rmdir-XTQXT7RK.js"() { + "node_modules/just-bash/dist/bundle/chunks/rmdir-XTQXT7RK.js"() { init_chunk_OCS6LSEM(); init_chunk_HWKDQ44K(); init_chunk_44UOCSGV(); @@ -14034,7 +14034,7 @@ var init_rmdir_XTQXT7RK = __esm({ } }); -// ../node_modules/just-bash/dist/bundle/chunks/chunk-OCLXQMOG.js +// node_modules/just-bash/dist/bundle/chunks/chunk-OCLXQMOG.js function h6(s10) { let a15 = s10.replace(/\//g, "-"), r10 = new Date(a15); if (!Number.isNaN(r10.getTime())) return r10; @@ -14052,7 +14052,7 @@ function h6(s10) { } var N3, b8; var init_chunk_OCLXQMOG = __esm({ - "../node_modules/just-bash/dist/bundle/chunks/chunk-OCLXQMOG.js"() { + "node_modules/just-bash/dist/bundle/chunks/chunk-OCLXQMOG.js"() { init_chunk_44UOCSGV(); init_chunk_74CEPOFO(); N3 = { name: "touch", async execute(s10, a15) { @@ -14111,14 +14111,14 @@ var init_chunk_OCLXQMOG = __esm({ } }); -// ../node_modules/just-bash/dist/bundle/chunks/touch-DX2IJOQ4.js +// node_modules/just-bash/dist/bundle/chunks/touch-DX2IJOQ4.js var touch_DX2IJOQ4_exports = {}; __export(touch_DX2IJOQ4_exports, { flagsForFuzzing: () => b8, touchCommand: () => N3 }); var init_touch_DX2IJOQ4 = __esm({ - "../node_modules/just-bash/dist/bundle/chunks/touch-DX2IJOQ4.js"() { + "node_modules/just-bash/dist/bundle/chunks/touch-DX2IJOQ4.js"() { init_chunk_OCLXQMOG(); init_chunk_44UOCSGV(); init_chunk_74CEPOFO(); @@ -14126,10 +14126,10 @@ var init_touch_DX2IJOQ4 = __esm({ } }); -// ../node_modules/just-bash/dist/bundle/chunks/chunk-MIZPJHVH.js +// node_modules/just-bash/dist/bundle/chunks/chunk-MIZPJHVH.js var v8, E3, $5; var init_chunk_MIZPJHVH = __esm({ - "../node_modules/just-bash/dist/bundle/chunks/chunk-MIZPJHVH.js"() { + "node_modules/just-bash/dist/bundle/chunks/chunk-MIZPJHVH.js"() { init_chunk_3THT3N7L(); init_chunk_HWKDQ44K(); init_chunk_44UOCSGV(); @@ -14165,14 +14165,14 @@ var init_chunk_MIZPJHVH = __esm({ } }); -// ../node_modules/just-bash/dist/bundle/chunks/rm-RTZG23RL.js +// node_modules/just-bash/dist/bundle/chunks/rm-RTZG23RL.js var rm_RTZG23RL_exports = {}; __export(rm_RTZG23RL_exports, { flagsForFuzzing: () => $5, rmCommand: () => E3 }); var init_rm_RTZG23RL = __esm({ - "../node_modules/just-bash/dist/bundle/chunks/rm-RTZG23RL.js"() { + "node_modules/just-bash/dist/bundle/chunks/rm-RTZG23RL.js"() { init_chunk_MIZPJHVH(); init_chunk_3THT3N7L(); init_chunk_HWKDQ44K(); @@ -14182,10 +14182,10 @@ var init_rm_RTZG23RL = __esm({ } }); -// ../node_modules/just-bash/dist/bundle/chunks/chunk-NUYSJFDK.js +// node_modules/just-bash/dist/bundle/chunks/chunk-NUYSJFDK.js var D4, E4, A, F4; var init_chunk_NUYSJFDK = __esm({ - "../node_modules/just-bash/dist/bundle/chunks/chunk-NUYSJFDK.js"() { + "node_modules/just-bash/dist/bundle/chunks/chunk-NUYSJFDK.js"() { init_chunk_HWKDQ44K(); init_chunk_44UOCSGV(); init_chunk_74CEPOFO(); @@ -14235,14 +14235,14 @@ var init_chunk_NUYSJFDK = __esm({ } }); -// ../node_modules/just-bash/dist/bundle/chunks/cp-XOYR4ABJ.js +// node_modules/just-bash/dist/bundle/chunks/cp-XOYR4ABJ.js var cp_XOYR4ABJ_exports = {}; __export(cp_XOYR4ABJ_exports, { cpCommand: () => A, flagsForFuzzing: () => F4 }); var init_cp_XOYR4ABJ = __esm({ - "../node_modules/just-bash/dist/bundle/chunks/cp-XOYR4ABJ.js"() { + "node_modules/just-bash/dist/bundle/chunks/cp-XOYR4ABJ.js"() { init_chunk_NUYSJFDK(); init_chunk_HWKDQ44K(); init_chunk_44UOCSGV(); @@ -14251,10 +14251,10 @@ var init_cp_XOYR4ABJ = __esm({ } }); -// ../node_modules/just-bash/dist/bundle/chunks/chunk-A4JSPFCI.js +// node_modules/just-bash/dist/bundle/chunks/chunk-A4JSPFCI.js var C4, P4, O4, x8; var init_chunk_A4JSPFCI = __esm({ - "../node_modules/just-bash/dist/bundle/chunks/chunk-A4JSPFCI.js"() { + "node_modules/just-bash/dist/bundle/chunks/chunk-A4JSPFCI.js"() { init_chunk_HWKDQ44K(); init_chunk_44UOCSGV(); init_chunk_74CEPOFO(); @@ -14302,14 +14302,14 @@ var init_chunk_A4JSPFCI = __esm({ } }); -// ../node_modules/just-bash/dist/bundle/chunks/mv-Z6MORUFL.js +// node_modules/just-bash/dist/bundle/chunks/mv-Z6MORUFL.js var mv_Z6MORUFL_exports = {}; __export(mv_Z6MORUFL_exports, { flagsForFuzzing: () => x8, mvCommand: () => O4 }); var init_mv_Z6MORUFL = __esm({ - "../node_modules/just-bash/dist/bundle/chunks/mv-Z6MORUFL.js"() { + "node_modules/just-bash/dist/bundle/chunks/mv-Z6MORUFL.js"() { init_chunk_A4JSPFCI(); init_chunk_HWKDQ44K(); init_chunk_44UOCSGV(); @@ -14318,10 +14318,10 @@ var init_mv_Z6MORUFL = __esm({ } }); -// ../node_modules/just-bash/dist/bundle/chunks/chunk-PBXLG62G.js +// node_modules/just-bash/dist/bundle/chunks/chunk-PBXLG62G.js var y6, v9, $6; var init_chunk_PBXLG62G = __esm({ - "../node_modules/just-bash/dist/bundle/chunks/chunk-PBXLG62G.js"() { + "node_modules/just-bash/dist/bundle/chunks/chunk-PBXLG62G.js"() { init_chunk_3THT3N7L(); init_chunk_74CEPOFO(); y6 = { name: "ln", summary: "make links between files", usage: "ln [OPTIONS] TARGET LINK_NAME", options: ["-s create a symbolic link instead of a hard link", "-f remove existing destination files", "-n treat LINK_NAME as a normal file if it is a symbolic link to a directory", "-v print name of each linked file", " --help display this help and exit"] }; @@ -14374,14 +14374,14 @@ var init_chunk_PBXLG62G = __esm({ } }); -// ../node_modules/just-bash/dist/bundle/chunks/ln-4TRFBYAT.js +// node_modules/just-bash/dist/bundle/chunks/ln-4TRFBYAT.js var ln_4TRFBYAT_exports = {}; __export(ln_4TRFBYAT_exports, { flagsForFuzzing: () => $6, lnCommand: () => v9 }); var init_ln_4TRFBYAT = __esm({ - "../node_modules/just-bash/dist/bundle/chunks/ln-4TRFBYAT.js"() { + "node_modules/just-bash/dist/bundle/chunks/ln-4TRFBYAT.js"() { init_chunk_PBXLG62G(); init_chunk_3THT3N7L(); init_chunk_74CEPOFO(); @@ -14389,7 +14389,7 @@ var init_ln_4TRFBYAT = __esm({ } }); -// ../node_modules/just-bash/dist/bundle/chunks/chunk-4GTNDTRF.js +// node_modules/just-bash/dist/bundle/chunks/chunk-4GTNDTRF.js async function y7(s10, a15, e6, c15, i11) { let n24 = "", l7 = await s10.fs.readdir(a15); for (let r10 of l7) { @@ -14428,7 +14428,7 @@ function p6(s10, a15 = 420) { } var R3, C5, O5; var init_chunk_4GTNDTRF = __esm({ - "../node_modules/just-bash/dist/bundle/chunks/chunk-4GTNDTRF.js"() { + "node_modules/just-bash/dist/bundle/chunks/chunk-4GTNDTRF.js"() { init_chunk_74CEPOFO(); R3 = { name: "chmod", summary: "change file mode bits", usage: "chmod [OPTIONS] MODE FILE...", options: ["-R change files recursively", "-v output a diagnostic for every file processed", " --help display this help and exit"] }; C5 = { name: "chmod", async execute(s10, a15) { @@ -14488,24 +14488,24 @@ var init_chunk_4GTNDTRF = __esm({ } }); -// ../node_modules/just-bash/dist/bundle/chunks/chmod-SYMGL4JA.js +// node_modules/just-bash/dist/bundle/chunks/chmod-SYMGL4JA.js var chmod_SYMGL4JA_exports = {}; __export(chmod_SYMGL4JA_exports, { chmodCommand: () => C5, flagsForFuzzing: () => O5 }); var init_chmod_SYMGL4JA = __esm({ - "../node_modules/just-bash/dist/bundle/chunks/chmod-SYMGL4JA.js"() { + "node_modules/just-bash/dist/bundle/chunks/chmod-SYMGL4JA.js"() { init_chunk_4GTNDTRF(); init_chunk_74CEPOFO(); init_chunk_DXB73IDG(); } }); -// ../node_modules/just-bash/dist/bundle/chunks/chunk-A4HU7SVR.js +// node_modules/just-bash/dist/bundle/chunks/chunk-A4HU7SVR.js var o5, f4; var init_chunk_A4HU7SVR = __esm({ - "../node_modules/just-bash/dist/bundle/chunks/chunk-A4HU7SVR.js"() { + "node_modules/just-bash/dist/bundle/chunks/chunk-A4HU7SVR.js"() { o5 = { name: "pwd", async execute(l7, a15) { let t6 = false; for (let e6 of l7) if (e6 === "-P") t6 = true; @@ -14526,23 +14526,23 @@ var init_chunk_A4HU7SVR = __esm({ } }); -// ../node_modules/just-bash/dist/bundle/chunks/pwd-D4OZ7N27.js +// node_modules/just-bash/dist/bundle/chunks/pwd-D4OZ7N27.js var pwd_D4OZ7N27_exports = {}; __export(pwd_D4OZ7N27_exports, { flagsForFuzzing: () => f4, pwdCommand: () => o5 }); var init_pwd_D4OZ7N27 = __esm({ - "../node_modules/just-bash/dist/bundle/chunks/pwd-D4OZ7N27.js"() { + "node_modules/just-bash/dist/bundle/chunks/pwd-D4OZ7N27.js"() { init_chunk_A4HU7SVR(); init_chunk_DXB73IDG(); } }); -// ../node_modules/just-bash/dist/bundle/chunks/chunk-HJWBQKYG.js +// node_modules/just-bash/dist/bundle/chunks/chunk-HJWBQKYG.js var m6, y8, w5; var init_chunk_HJWBQKYG = __esm({ - "../node_modules/just-bash/dist/bundle/chunks/chunk-HJWBQKYG.js"() { + "node_modules/just-bash/dist/bundle/chunks/chunk-HJWBQKYG.js"() { init_chunk_74CEPOFO(); m6 = { name: "readlink", summary: "print resolved symbolic links or canonical file names", usage: "readlink [OPTIONS] FILE...", options: ["-f canonicalize by following every symlink in every component of the given name recursively", " --help display this help and exit"] }; y8 = { name: "readlink", async execute(a15, l7) { @@ -14596,21 +14596,21 @@ var init_chunk_HJWBQKYG = __esm({ } }); -// ../node_modules/just-bash/dist/bundle/chunks/readlink-MI4GCHJF.js +// node_modules/just-bash/dist/bundle/chunks/readlink-MI4GCHJF.js var readlink_MI4GCHJF_exports = {}; __export(readlink_MI4GCHJF_exports, { flagsForFuzzing: () => w5, readlinkCommand: () => y8 }); var init_readlink_MI4GCHJF = __esm({ - "../node_modules/just-bash/dist/bundle/chunks/readlink-MI4GCHJF.js"() { + "node_modules/just-bash/dist/bundle/chunks/readlink-MI4GCHJF.js"() { init_chunk_HJWBQKYG(); init_chunk_74CEPOFO(); init_chunk_DXB73IDG(); } }); -// ../node_modules/just-bash/dist/bundle/chunks/chunk-HDQ56CKY.js +// node_modules/just-bash/dist/bundle/chunks/chunk-HDQ56CKY.js function I3(t6, r10) { let i11 = 10, s10 = null, o14 = false, l7 = false, n24 = false, u12 = []; for (let f11 = 0; f11 < t6.length; f11++) { @@ -14705,15 +14705,15 @@ function g4(t6, r10, i11, s10) { `; } var init_chunk_HDQ56CKY = __esm({ - "../node_modules/just-bash/dist/bundle/chunks/chunk-HDQ56CKY.js"() { + "node_modules/just-bash/dist/bundle/chunks/chunk-HDQ56CKY.js"() { init_chunk_74CEPOFO(); } }); -// ../node_modules/just-bash/dist/bundle/chunks/chunk-64BAICW3.js +// node_modules/just-bash/dist/bundle/chunks/chunk-64BAICW3.js var f5, m7, g5; var init_chunk_64BAICW3 = __esm({ - "../node_modules/just-bash/dist/bundle/chunks/chunk-64BAICW3.js"() { + "node_modules/just-bash/dist/bundle/chunks/chunk-64BAICW3.js"() { init_chunk_HDQ56CKY(); init_chunk_74CEPOFO(); f5 = { name: "head", summary: "output the first part of files", usage: "head [OPTION]... [FILE]...", options: ["-c, --bytes=NUM print the first NUM bytes", "-n, --lines=NUM print the first NUM lines (default 10)", "-q, --quiet never print headers giving file names", "-v, --verbose always print headers giving file names", " --help display this help and exit"] }; @@ -14728,14 +14728,14 @@ var init_chunk_64BAICW3 = __esm({ } }); -// ../node_modules/just-bash/dist/bundle/chunks/head-HT2B6D2J.js +// node_modules/just-bash/dist/bundle/chunks/head-HT2B6D2J.js var head_HT2B6D2J_exports = {}; __export(head_HT2B6D2J_exports, { flagsForFuzzing: () => g5, headCommand: () => m7 }); var init_head_HT2B6D2J = __esm({ - "../node_modules/just-bash/dist/bundle/chunks/head-HT2B6D2J.js"() { + "node_modules/just-bash/dist/bundle/chunks/head-HT2B6D2J.js"() { init_chunk_64BAICW3(); init_chunk_HDQ56CKY(); init_chunk_74CEPOFO(); @@ -14743,10 +14743,10 @@ var init_head_HT2B6D2J = __esm({ } }); -// ../node_modules/just-bash/dist/bundle/chunks/chunk-DCAAORBQ.js +// node_modules/just-bash/dist/bundle/chunks/chunk-DCAAORBQ.js var m8, d6, c6; var init_chunk_DCAAORBQ = __esm({ - "../node_modules/just-bash/dist/bundle/chunks/chunk-DCAAORBQ.js"() { + "node_modules/just-bash/dist/bundle/chunks/chunk-DCAAORBQ.js"() { init_chunk_HDQ56CKY(); init_chunk_74CEPOFO(); m8 = { name: "tail", summary: "output the last part of files", usage: "tail [OPTION]... [FILE]...", options: ["-c, --bytes=NUM print the last NUM bytes", "-n, --lines=NUM print the last NUM lines (default 10)", "-n +NUM print starting from line NUM", "-q, --quiet never print headers giving file names", "-v, --verbose always print headers giving file names", " --help display this help and exit"] }; @@ -14761,14 +14761,14 @@ var init_chunk_DCAAORBQ = __esm({ } }); -// ../node_modules/just-bash/dist/bundle/chunks/tail-S5ULNTJU.js +// node_modules/just-bash/dist/bundle/chunks/tail-S5ULNTJU.js var tail_S5ULNTJU_exports = {}; __export(tail_S5ULNTJU_exports, { flagsForFuzzing: () => c6, tailCommand: () => d6 }); var init_tail_S5ULNTJU = __esm({ - "../node_modules/just-bash/dist/bundle/chunks/tail-S5ULNTJU.js"() { + "node_modules/just-bash/dist/bundle/chunks/tail-S5ULNTJU.js"() { init_chunk_DCAAORBQ(); init_chunk_HDQ56CKY(); init_chunk_74CEPOFO(); @@ -14776,7 +14776,7 @@ var init_tail_S5ULNTJU = __esm({ } }); -// ../node_modules/just-bash/dist/bundle/chunks/chunk-GXVXFKBA.js +// node_modules/just-bash/dist/bundle/chunks/chunk-GXVXFKBA.js function C6(a15) { let c15 = a15.length, n24 = 0, o14 = 0, e6 = false; for (let s10 = 0; s10 < c15; s10++) { @@ -14794,7 +14794,7 @@ function w6(a15, c15, n24, o14, e6, s10) { } var $8, H3, E5, I4; var init_chunk_GXVXFKBA = __esm({ - "../node_modules/just-bash/dist/bundle/chunks/chunk-GXVXFKBA.js"() { + "node_modules/just-bash/dist/bundle/chunks/chunk-GXVXFKBA.js"() { init_chunk_7L36YK2X(); init_chunk_HWKDQ44K(); init_chunk_74CEPOFO(); @@ -14829,14 +14829,14 @@ var init_chunk_GXVXFKBA = __esm({ } }); -// ../node_modules/just-bash/dist/bundle/chunks/wc-TQB3VNOX.js +// node_modules/just-bash/dist/bundle/chunks/wc-TQB3VNOX.js var wc_TQB3VNOX_exports = {}; __export(wc_TQB3VNOX_exports, { flagsForFuzzing: () => I4, wcCommand: () => E5 }); var init_wc_TQB3VNOX = __esm({ - "../node_modules/just-bash/dist/bundle/chunks/wc-TQB3VNOX.js"() { + "node_modules/just-bash/dist/bundle/chunks/wc-TQB3VNOX.js"() { init_chunk_GXVXFKBA(); init_chunk_7L36YK2X(); init_chunk_HWKDQ44K(); @@ -14845,20 +14845,20 @@ var init_wc_TQB3VNOX = __esm({ } }); -// ../node_modules/just-bash/dist/bundle/chunks/chunk-X2AJGDEF.js +// node_modules/just-bash/dist/bundle/chunks/chunk-X2AJGDEF.js function x9(r10, o14) { let t6 = o14 ? "d" : "-", n24 = [r10 & 256 ? "r" : "-", r10 & 128 ? "w" : "-", r10 & 64 ? "x" : "-", r10 & 32 ? "r" : "-", r10 & 16 ? "w" : "-", r10 & 8 ? "x" : "-", r10 & 4 ? "r" : "-", r10 & 2 ? "w" : "-", r10 & 1 ? "x" : "-"]; return t6 + n24.join(""); } var init_chunk_X2AJGDEF = __esm({ - "../node_modules/just-bash/dist/bundle/chunks/chunk-X2AJGDEF.js"() { + "node_modules/just-bash/dist/bundle/chunks/chunk-X2AJGDEF.js"() { } }); -// ../node_modules/just-bash/dist/bundle/chunks/chunk-5QVNJEHU.js +// node_modules/just-bash/dist/bundle/chunks/chunk-5QVNJEHU.js var S2, $9, A2, M4; var init_chunk_5QVNJEHU = __esm({ - "../node_modules/just-bash/dist/bundle/chunks/chunk-5QVNJEHU.js"() { + "node_modules/just-bash/dist/bundle/chunks/chunk-5QVNJEHU.js"() { init_chunk_X2AJGDEF(); init_chunk_HWKDQ44K(); init_chunk_74CEPOFO(); @@ -14899,14 +14899,14 @@ var init_chunk_5QVNJEHU = __esm({ } }); -// ../node_modules/just-bash/dist/bundle/chunks/stat-BT5A227F.js +// node_modules/just-bash/dist/bundle/chunks/stat-BT5A227F.js var stat_BT5A227F_exports = {}; __export(stat_BT5A227F_exports, { flagsForFuzzing: () => M4, statCommand: () => A2 }); var init_stat_BT5A227F = __esm({ - "../node_modules/just-bash/dist/bundle/chunks/stat-BT5A227F.js"() { + "node_modules/just-bash/dist/bundle/chunks/stat-BT5A227F.js"() { init_chunk_5QVNJEHU(); init_chunk_X2AJGDEF(); init_chunk_HWKDQ44K(); @@ -14915,7 +14915,7 @@ var init_stat_BT5A227F = __esm({ } }); -// ../node_modules/just-bash/dist/bundle/chunks/chunk-J642UCRS.js +// node_modules/just-bash/dist/bundle/chunks/chunk-J642UCRS.js function u5(l7, c15, t6) { let s10 = typeof t6 == "boolean" ? { ignoreCase: t6 } : t6 ?? {}, e6 = c15; s10.stripQuotes && (e6.startsWith('"') && e6.endsWith('"') || e6.startsWith("'") && e6.endsWith("'")) && (e6 = e6.slice(1, -1)); @@ -14945,14 +14945,14 @@ function a7(l7, c15) { } var g6, o6; var init_chunk_J642UCRS = __esm({ - "../node_modules/just-bash/dist/bundle/chunks/chunk-J642UCRS.js"() { + "node_modules/just-bash/dist/bundle/chunks/chunk-J642UCRS.js"() { init_chunk_YNYSPYQ5(); g6 = 2048; o6 = /* @__PURE__ */ new Map(); } }); -// ../node_modules/just-bash/dist/bundle/chunks/chunk-VLGZJRPG.js +// node_modules/just-bash/dist/bundle/chunks/chunk-VLGZJRPG.js function B3(n24, t6) { return n24.replace(/\$(&|\d+|<([^>]+)>)/g, (e6, i11, s10) => { if (i11 === "&") return t6[0]; @@ -15409,13 +15409,13 @@ function se2(n24) { } var q6; var init_chunk_VLGZJRPG = __esm({ - "../node_modules/just-bash/dist/bundle/chunks/chunk-VLGZJRPG.js"() { + "node_modules/just-bash/dist/bundle/chunks/chunk-VLGZJRPG.js"() { init_chunk_YNYSPYQ5(); q6 = /* @__PURE__ */ new Map([["alpha", "a-zA-Z"], ["digit", "0-9"], ["alnum", "a-zA-Z0-9"], ["lower", "a-z"], ["upper", "A-Z"], ["xdigit", "0-9A-Fa-f"], ["space", " \\t\\n\\r\\f\\v"], ["blank", " \\t"], ["punct", "!-/:-@\\[-`{-~"], ["graph", "!-~"], ["print", " -~"], ["cntrl", "\\x00-\\x1F\\x7F"], ["ascii", "\\x00-\\x7F"], ["word", "a-zA-Z0-9_"]]); } }); -// ../node_modules/just-bash/dist/bundle/chunks/chunk-YS3AZT3J.js +// node_modules/just-bash/dist/bundle/chunks/chunk-YS3AZT3J.js async function K4(t6, s10, l7, f11, c15 = 0) { if (c15 >= J4) return; let p22 = l7.fs.resolvePath(l7.cwd, t6); @@ -15503,7 +15503,7 @@ async function H5(t6, s10, l7 = [], f11 = [], c15 = [], p22, m26 = 0) { } var se3, j3, J4, ae3, fe2, ue2, ce2, pe2; var init_chunk_YS3AZT3J = __esm({ - "../node_modules/just-bash/dist/bundle/chunks/chunk-YS3AZT3J.js"() { + "node_modules/just-bash/dist/bundle/chunks/chunk-YS3AZT3J.js"() { init_chunk_J642UCRS(); init_chunk_VLGZJRPG(); init_chunk_74CEPOFO(); @@ -15652,7 +15652,7 @@ var init_chunk_YS3AZT3J = __esm({ } }); -// ../node_modules/just-bash/dist/bundle/chunks/grep-3AIAIJVR.js +// node_modules/just-bash/dist/bundle/chunks/grep-3AIAIJVR.js var grep_3AIAIJVR_exports = {}; __export(grep_3AIAIJVR_exports, { egrepCommand: () => fe2, @@ -15663,7 +15663,7 @@ __export(grep_3AIAIJVR_exports, { grepCommand: () => j3 }); var init_grep_3AIAIJVR = __esm({ - "../node_modules/just-bash/dist/bundle/chunks/grep-3AIAIJVR.js"() { + "node_modules/just-bash/dist/bundle/chunks/grep-3AIAIJVR.js"() { init_chunk_YS3AZT3J(); init_chunk_J642UCRS(); init_chunk_VLGZJRPG(); @@ -15673,7 +15673,7 @@ var init_grep_3AIAIJVR = __esm({ } }); -// ../node_modules/just-bash/dist/bundle/chunks/chunk-7TSDKFEO.js +// node_modules/just-bash/dist/bundle/chunks/chunk-7TSDKFEO.js function a8(e6, n24) { if (Array.isArray(e6)) throw new TypeError(`${n24}: expected object, got array`); if (Object.getPrototypeOf(e6) !== null) throw new TypeError(`${n24}: expected null-prototype object, got prototypal object`); @@ -15719,13 +15719,13 @@ function b9(...e6) { } var i7, p7; var init_chunk_7TSDKFEO = __esm({ - "../node_modules/just-bash/dist/bundle/chunks/chunk-7TSDKFEO.js"() { + "node_modules/just-bash/dist/bundle/chunks/chunk-7TSDKFEO.js"() { i7 = /* @__PURE__ */ new Set(["__proto__", "constructor", "prototype"]); p7 = /* @__PURE__ */ new Set([...i7, "__defineGetter__", "__defineSetter__", "__lookupGetter__", "__lookupSetter__", "hasOwnProperty", "isPrototypeOf", "propertyIsEnumerable", "toLocaleString", "toString", "valueOf"]); } }); -// ../node_modules/just-bash/dist/bundle/chunks/chunk-NYQYO467.js +// node_modules/just-bash/dist/bundle/chunks/chunk-NYQYO467.js import { gunzipSync as ue3 } from "node:zlib"; function H6() { let e6 = []; @@ -16174,7 +16174,7 @@ async function be2(e6, t6, n24, s10, r10, l7, i11) { } var q7, M5, J5, ne5, re2, T5, k5, we2, Be, Ee2; var init_chunk_NYQYO467 = __esm({ - "../node_modules/just-bash/dist/bundle/chunks/chunk-NYQYO467.js"() { + "node_modules/just-bash/dist/bundle/chunks/chunk-NYQYO467.js"() { init_chunk_7TSDKFEO(); init_chunk_VLGZJRPG(); init_chunk_IPJHKYVM(); @@ -16513,14 +16513,14 @@ EXAMPLES: } }); -// ../node_modules/just-bash/dist/bundle/chunks/rg-FOQSCCX3.js +// node_modules/just-bash/dist/bundle/chunks/rg-FOQSCCX3.js var rg_FOQSCCX3_exports = {}; __export(rg_FOQSCCX3_exports, { flagsForFuzzing: () => Ee2, rgCommand: () => Be }); var init_rg_FOQSCCX3 = __esm({ - "../node_modules/just-bash/dist/bundle/chunks/rg-FOQSCCX3.js"() { + "node_modules/just-bash/dist/bundle/chunks/rg-FOQSCCX3.js"() { init_chunk_NYQYO467(); init_chunk_7TSDKFEO(); init_chunk_VLGZJRPG(); @@ -16531,7 +16531,7 @@ var init_rg_FOQSCCX3 = __esm({ } }); -// ../node_modules/just-bash/dist/bundle/chunks/chunk-OL3S66CO.js +// node_modules/just-bash/dist/bundle/chunks/chunk-OL3S66CO.js function H7(i11) { let e6 = "", t6 = 0, n24 = false; for (; t6 < i11.length; ) { @@ -17177,7 +17177,7 @@ async function K6(i11, e6, t6, n24 = {}) { } var z4, de4, o7, _6, Z6, xe3, De2, qe2; var init_chunk_OL3S66CO = __esm({ - "../node_modules/just-bash/dist/bundle/chunks/chunk-OL3S66CO.js"() { + "node_modules/just-bash/dist/bundle/chunks/chunk-OL3S66CO.js"() { init_chunk_24IMIIXA(); init_chunk_5QMZ5MUS(); init_chunk_YNYSPYQ5(); @@ -17816,14 +17816,14 @@ Addresses: } }); -// ../node_modules/just-bash/dist/bundle/chunks/sed-VFTTATXJ.js +// node_modules/just-bash/dist/bundle/chunks/sed-VFTTATXJ.js var sed_VFTTATXJ_exports = {}; __export(sed_VFTTATXJ_exports, { flagsForFuzzing: () => qe2, sedCommand: () => De2 }); var init_sed_VFTTATXJ = __esm({ - "../node_modules/just-bash/dist/bundle/chunks/sed-VFTTATXJ.js"() { + "node_modules/just-bash/dist/bundle/chunks/sed-VFTTATXJ.js"() { init_chunk_OL3S66CO(); init_chunk_24IMIIXA(); init_chunk_5QMZ5MUS(); @@ -17835,7 +17835,7 @@ var init_sed_VFTTATXJ = __esm({ } }); -// ../node_modules/just-bash/dist/bundle/chunks/chunk-OARHFVLG.js +// node_modules/just-bash/dist/bundle/chunks/chunk-OARHFVLG.js function ie4(e6 = {}) { let { fieldSep: t6 = He2, maxIterations: n24 = Ue2, maxRecursionDepth: i11 = Be2, maxOutputSize: s10 = 0, fs: a15, cwd: o14, exec: l7, coverage: u12, requireDefenseContext: N16 } = e6; return { FS: " ", OFS: " ", ORS: ` @@ -18954,7 +18954,7 @@ function Ge2(e6) { } var Ue2, Be2, He2, U3, Re2, Ce3, q8, r8, _t2, ee4, p8, ne7, Wt2, Wn2, Vn2; var init_chunk_OARHFVLG = __esm({ - "../node_modules/just-bash/dist/bundle/chunks/chunk-OARHFVLG.js"() { + "node_modules/just-bash/dist/bundle/chunks/chunk-OARHFVLG.js"() { init_chunk_OJDRYQWQ(); init_chunk_24IMIIXA(); init_chunk_5QMZ5MUS(); @@ -19765,14 +19765,14 @@ var init_chunk_OARHFVLG = __esm({ } }); -// ../node_modules/just-bash/dist/bundle/chunks/awk2-POPGKRAI.js +// node_modules/just-bash/dist/bundle/chunks/awk2-POPGKRAI.js var awk2_POPGKRAI_exports = {}; __export(awk2_POPGKRAI_exports, { awkCommand2: () => Wn2, flagsForFuzzing: () => Vn2 }); var init_awk2_POPGKRAI = __esm({ - "../node_modules/just-bash/dist/bundle/chunks/awk2-POPGKRAI.js"() { + "node_modules/just-bash/dist/bundle/chunks/awk2-POPGKRAI.js"() { init_chunk_OARHFVLG(); init_chunk_OJDRYQWQ(); init_chunk_24IMIIXA(); @@ -19784,7 +19784,7 @@ var init_awk2_POPGKRAI = __esm({ } }); -// ../node_modules/just-bash/dist/bundle/chunks/chunk-KMEYNNUA.js +// node_modules/just-bash/dist/bundle/chunks/chunk-KMEYNNUA.js function O7(u12) { let r10 = u12.trim(), e6 = r10.match(/^([+-]?\d*\.?\d+)\s*([kmgtpeKMGTPE])?[iI]?[bB]?$/); if (!e6) { @@ -19919,7 +19919,7 @@ function y11(u12) { } var A4, P6, q9, j6, U4; var init_chunk_KMEYNNUA = __esm({ - "../node_modules/just-bash/dist/bundle/chunks/chunk-KMEYNNUA.js"() { + "node_modules/just-bash/dist/bundle/chunks/chunk-KMEYNNUA.js"() { init_chunk_7L36YK2X(); init_chunk_74CEPOFO(); A4 = /* @__PURE__ */ new Map([["", 1], ["k", 1024], ["m", 1048576], ["g", 1073741824], ["t", 1099511627776], ["p", 1125899906842624], ["e", 1152921504606847e3]]); @@ -20018,14 +20018,14 @@ Examples: } }); -// ../node_modules/just-bash/dist/bundle/chunks/sort-DCNRDA7U.js +// node_modules/just-bash/dist/bundle/chunks/sort-DCNRDA7U.js var sort_DCNRDA7U_exports = {}; __export(sort_DCNRDA7U_exports, { flagsForFuzzing: () => U4, sortCommand: () => j6 }); var init_sort_DCNRDA7U = __esm({ - "../node_modules/just-bash/dist/bundle/chunks/sort-DCNRDA7U.js"() { + "node_modules/just-bash/dist/bundle/chunks/sort-DCNRDA7U.js"() { init_chunk_KMEYNNUA(); init_chunk_7L36YK2X(); init_chunk_74CEPOFO(); @@ -20033,10 +20033,10 @@ var init_sort_DCNRDA7U = __esm({ } }); -// ../node_modules/just-bash/dist/bundle/chunks/chunk-WKFATFPP.js +// node_modules/just-bash/dist/bundle/chunks/chunk-WKFATFPP.js var O8, w8, N5, P7; var init_chunk_WKFATFPP = __esm({ - "../node_modules/just-bash/dist/bundle/chunks/chunk-WKFATFPP.js"() { + "node_modules/just-bash/dist/bundle/chunks/chunk-WKFATFPP.js"() { init_chunk_7L36YK2X(); init_chunk_HWKDQ44K(); init_chunk_74CEPOFO(); @@ -20066,14 +20066,14 @@ var init_chunk_WKFATFPP = __esm({ } }); -// ../node_modules/just-bash/dist/bundle/chunks/uniq-SUNANL47.js +// node_modules/just-bash/dist/bundle/chunks/uniq-SUNANL47.js var uniq_SUNANL47_exports = {}; __export(uniq_SUNANL47_exports, { flagsForFuzzing: () => P7, uniqCommand: () => N5 }); var init_uniq_SUNANL47 = __esm({ - "../node_modules/just-bash/dist/bundle/chunks/uniq-SUNANL47.js"() { + "node_modules/just-bash/dist/bundle/chunks/uniq-SUNANL47.js"() { init_chunk_WKFATFPP(); init_chunk_7L36YK2X(); init_chunk_HWKDQ44K(); @@ -20082,10 +20082,10 @@ var init_uniq_SUNANL47 = __esm({ } }); -// ../node_modules/just-bash/dist/bundle/chunks/chunk-Z7JVV2SM.js +// node_modules/just-bash/dist/bundle/chunks/chunk-Z7JVV2SM.js var x12, C7, I6; var init_chunk_Z7JVV2SM = __esm({ - "../node_modules/just-bash/dist/bundle/chunks/chunk-Z7JVV2SM.js"() { + "node_modules/just-bash/dist/bundle/chunks/chunk-Z7JVV2SM.js"() { init_chunk_74CEPOFO(); x12 = { name: "comm", summary: "compare two sorted files line by line", usage: "comm [OPTION]... FILE1 FILE2", options: ["-1 suppress column 1 (lines unique to FILE1)", "-2 suppress column 2 (lines unique to FILE2)", "-3 suppress column 3 (lines that appear in both files)", " --help display this help and exit"] }; C7 = { name: "comm", async execute(p22, a15) { @@ -20136,21 +20136,21 @@ Try 'comm --help' for more information. } }); -// ../node_modules/just-bash/dist/bundle/chunks/comm-5SLSESQG.js +// node_modules/just-bash/dist/bundle/chunks/comm-5SLSESQG.js var comm_5SLSESQG_exports = {}; __export(comm_5SLSESQG_exports, { commCommand: () => C7, flagsForFuzzing: () => I6 }); var init_comm_5SLSESQG = __esm({ - "../node_modules/just-bash/dist/bundle/chunks/comm-5SLSESQG.js"() { + "node_modules/just-bash/dist/bundle/chunks/comm-5SLSESQG.js"() { init_chunk_Z7JVV2SM(); init_chunk_74CEPOFO(); init_chunk_DXB73IDG(); } }); -// ../node_modules/just-bash/dist/bundle/chunks/chunk-SDNKECQQ.js +// node_modules/just-bash/dist/bundle/chunks/chunk-SDNKECQQ.js function F5(t6) { let c15 = [], l7 = t6.split(","); for (let n24 of l7) if (n24.includes("-")) { @@ -20172,7 +20172,7 @@ function L5(t6, c15) { } var w9, k7, C8; var init_chunk_SDNKECQQ = __esm({ - "../node_modules/just-bash/dist/bundle/chunks/chunk-SDNKECQQ.js"() { + "node_modules/just-bash/dist/bundle/chunks/chunk-SDNKECQQ.js"() { init_chunk_7L36YK2X(); init_chunk_74CEPOFO(); w9 = { name: "cut", summary: "remove sections from each line of files", usage: "cut [OPTION]... [FILE]...", options: ["-c LIST select only these characters", "-d DELIM use DELIM instead of TAB for field delimiter", "-f LIST select only these fields", "-s, --only-delimited do not print lines without delimiters", " --help display this help and exit"] }; @@ -20229,14 +20229,14 @@ var init_chunk_SDNKECQQ = __esm({ } }); -// ../node_modules/just-bash/dist/bundle/chunks/cut-OPC3VAGB.js +// node_modules/just-bash/dist/bundle/chunks/cut-OPC3VAGB.js var cut_OPC3VAGB_exports = {}; __export(cut_OPC3VAGB_exports, { cutCommand: () => k7, flagsForFuzzing: () => C8 }); var init_cut_OPC3VAGB = __esm({ - "../node_modules/just-bash/dist/bundle/chunks/cut-OPC3VAGB.js"() { + "node_modules/just-bash/dist/bundle/chunks/cut-OPC3VAGB.js"() { init_chunk_SDNKECQQ(); init_chunk_7L36YK2X(); init_chunk_74CEPOFO(); @@ -20244,7 +20244,7 @@ var init_cut_OPC3VAGB = __esm({ } }); -// ../node_modules/just-bash/dist/bundle/chunks/chunk-JVPRLUMK.js +// node_modules/just-bash/dist/bundle/chunks/chunk-JVPRLUMK.js function y12(s10, i11) { if (s10.length === 0) return ""; if (s10.length === 1) return s10[0]; @@ -20257,7 +20257,7 @@ function y12(s10, i11) { } var I7, F6, P8, T7; var init_chunk_JVPRLUMK = __esm({ - "../node_modules/just-bash/dist/bundle/chunks/chunk-JVPRLUMK.js"() { + "node_modules/just-bash/dist/bundle/chunks/chunk-JVPRLUMK.js"() { init_chunk_HWKDQ44K(); init_chunk_74CEPOFO(); I7 = { name: "paste", summary: "merge lines of files", usage: "paste [OPTION]... [FILE]...", description: ["Write lines consisting of the sequentially corresponding lines from", "each FILE, separated by TABs, to standard output.", "", "With no FILE, or when FILE is -, read standard input."], options: ["-d, --delimiters=LIST reuse characters from LIST instead of TABs", "-s, --serial paste one file at a time instead of in parallel", " --help display this help and exit"], examples: ["paste file1 file2 Merge file1 and file2 side by side", "paste -d, file1 file2 Use comma as delimiter", "paste -s file1 Paste all lines of file1 on one line", "paste - - < file Paste pairs of lines from file"] }; @@ -20306,14 +20306,14 @@ var init_chunk_JVPRLUMK = __esm({ } }); -// ../node_modules/just-bash/dist/bundle/chunks/paste-7N6AFSDS.js +// node_modules/just-bash/dist/bundle/chunks/paste-7N6AFSDS.js var paste_7N6AFSDS_exports = {}; __export(paste_7N6AFSDS_exports, { flagsForFuzzing: () => T7, pasteCommand: () => P8 }); var init_paste_7N6AFSDS = __esm({ - "../node_modules/just-bash/dist/bundle/chunks/paste-7N6AFSDS.js"() { + "node_modules/just-bash/dist/bundle/chunks/paste-7N6AFSDS.js"() { init_chunk_JVPRLUMK(); init_chunk_HWKDQ44K(); init_chunk_74CEPOFO(); @@ -20321,7 +20321,7 @@ var init_paste_7N6AFSDS = __esm({ } }); -// ../node_modules/just-bash/dist/bundle/chunks/chunk-62RKD26F.js +// node_modules/just-bash/dist/bundle/chunks/chunk-62RKD26F.js function S5(r10) { let o14 = "", e6 = 0; for (; e6 < r10.length; ) { @@ -20352,7 +20352,7 @@ function S5(r10) { } var x13, b11, w10, q10, T8; var init_chunk_62RKD26F = __esm({ - "../node_modules/just-bash/dist/bundle/chunks/chunk-62RKD26F.js"() { + "node_modules/just-bash/dist/bundle/chunks/chunk-62RKD26F.js"() { init_chunk_3THT3N7L(); init_chunk_HWKDQ44K(); init_chunk_74CEPOFO(); @@ -20422,14 +20422,14 @@ var init_chunk_62RKD26F = __esm({ } }); -// ../node_modules/just-bash/dist/bundle/chunks/tr-2HXZRDSW.js +// node_modules/just-bash/dist/bundle/chunks/tr-2HXZRDSW.js var tr_2HXZRDSW_exports = {}; __export(tr_2HXZRDSW_exports, { flagsForFuzzing: () => T8, trCommand: () => q10 }); var init_tr_2HXZRDSW = __esm({ - "../node_modules/just-bash/dist/bundle/chunks/tr-2HXZRDSW.js"() { + "node_modules/just-bash/dist/bundle/chunks/tr-2HXZRDSW.js"() { init_chunk_62RKD26F(); init_chunk_3THT3N7L(); init_chunk_HWKDQ44K(); @@ -20438,13 +20438,13 @@ var init_tr_2HXZRDSW = __esm({ } }); -// ../node_modules/just-bash/dist/bundle/chunks/chunk-QCDB2VPH.js +// node_modules/just-bash/dist/bundle/chunks/chunk-QCDB2VPH.js function d7(t6) { return Array.from(t6).reverse().join(""); } var u7, v12, m10; var init_chunk_QCDB2VPH = __esm({ - "../node_modules/just-bash/dist/bundle/chunks/chunk-QCDB2VPH.js"() { + "node_modules/just-bash/dist/bundle/chunks/chunk-QCDB2VPH.js"() { init_chunk_74CEPOFO(); u7 = { name: "rev", summary: "reverse lines characterwise", usage: "rev [file ...]", description: "Copies the specified files to standard output, reversing the order of characters in every line. If no files are specified, standard input is read.", examples: ["echo 'hello' | rev # Output: olleh", "rev file.txt # Reverse each line in file"] }; v12 = { name: "rev", execute: async (t6, s10) => { @@ -20484,21 +20484,21 @@ var init_chunk_QCDB2VPH = __esm({ } }); -// ../node_modules/just-bash/dist/bundle/chunks/rev-XOSYPP45.js +// node_modules/just-bash/dist/bundle/chunks/rev-XOSYPP45.js var rev_XOSYPP45_exports = {}; __export(rev_XOSYPP45_exports, { flagsForFuzzing: () => m10, rev: () => v12 }); var init_rev_XOSYPP45 = __esm({ - "../node_modules/just-bash/dist/bundle/chunks/rev-XOSYPP45.js"() { + "node_modules/just-bash/dist/bundle/chunks/rev-XOSYPP45.js"() { init_chunk_QCDB2VPH(); init_chunk_74CEPOFO(); init_chunk_DXB73IDG(); } }); -// ../node_modules/just-bash/dist/bundle/chunks/chunk-F23WWYKW.js +// node_modules/just-bash/dist/bundle/chunks/chunk-F23WWYKW.js function p9(r10, s10, i11) { let l7 = String(r10); switch (s10) { @@ -20543,7 +20543,7 @@ function b12(r10, s10, i11) { } var h7, y13, x14; var init_chunk_F23WWYKW = __esm({ - "../node_modules/just-bash/dist/bundle/chunks/chunk-F23WWYKW.js"() { + "node_modules/just-bash/dist/bundle/chunks/chunk-F23WWYKW.js"() { init_chunk_74CEPOFO(); h7 = { name: "nl", summary: "number lines of files", usage: "nl [OPTION]... [FILE]...", description: "Write each FILE to standard output, with line numbers added. If no FILE is specified, standard input is read.", options: ["-b STYLE Body numbering style: a (all), t (non-empty), n (none)", "-n FORMAT Number format: ln (left), rn (right), rz (right zeros)", "-w WIDTH Number width (default: 6)", "-s SEP Separator after number (default: TAB)", "-v START Starting line number (default: 1)", "-i INCR Line number increment (default: 1)"], examples: ["nl file.txt # Number non-empty lines", "nl -ba file.txt # Number all lines", "nl -n rz -w 3 file.txt # Right-justified with zeros", "nl -s ': ' file.txt # Use ': ' as separator"] }; y13 = { name: "nl", execute: async (r10, s10) => { @@ -20628,21 +20628,21 @@ var init_chunk_F23WWYKW = __esm({ } }); -// ../node_modules/just-bash/dist/bundle/chunks/nl-U5YJDM32.js +// node_modules/just-bash/dist/bundle/chunks/nl-U5YJDM32.js var nl_U5YJDM32_exports = {}; __export(nl_U5YJDM32_exports, { flagsForFuzzing: () => x14, nl: () => y13 }); var init_nl_U5YJDM32 = __esm({ - "../node_modules/just-bash/dist/bundle/chunks/nl-U5YJDM32.js"() { + "node_modules/just-bash/dist/bundle/chunks/nl-U5YJDM32.js"() { init_chunk_F23WWYKW(); init_chunk_74CEPOFO(); init_chunk_DXB73IDG(); } }); -// ../node_modules/just-bash/dist/bundle/chunks/chunk-D4J545R4.js +// node_modules/just-bash/dist/bundle/chunks/chunk-D4J545R4.js function g8(s10, r10, n24) { return n24 ? new TextEncoder().encode(s10).length : s10 === " " ? 8 - r10 % 8 : s10 === "\b" ? -1 : 1; } @@ -20667,7 +20667,7 @@ function b13(s10, r10) { } var m11, k8, x15; var init_chunk_D4J545R4 = __esm({ - "../node_modules/just-bash/dist/bundle/chunks/chunk-D4J545R4.js"() { + "node_modules/just-bash/dist/bundle/chunks/chunk-D4J545R4.js"() { init_chunk_74CEPOFO(); m11 = { name: "fold", summary: "wrap each input line to fit in specified width", usage: "fold [OPTION]... [FILE]...", description: "Wrap input lines in each FILE, writing to standard output. If no FILE is specified, standard input is read.", options: ["-w WIDTH Use WIDTH columns instead of 80", "-s Break at spaces", "-b Count bytes rather than columns"], examples: ["fold -w 40 file.txt # Wrap at 40 columns", "fold -sw 40 file.txt # Word wrap at 40 columns", "echo 'long line' | fold -w 5 # Force wrap at 5"] }; k8 = { name: "fold", execute: async (s10, r10) => { @@ -20731,21 +20731,21 @@ var init_chunk_D4J545R4 = __esm({ } }); -// ../node_modules/just-bash/dist/bundle/chunks/fold-LDSORVYE.js +// node_modules/just-bash/dist/bundle/chunks/fold-LDSORVYE.js var fold_LDSORVYE_exports = {}; __export(fold_LDSORVYE_exports, { flagsForFuzzing: () => x15, fold: () => k8 }); var init_fold_LDSORVYE = __esm({ - "../node_modules/just-bash/dist/bundle/chunks/fold-LDSORVYE.js"() { + "node_modules/just-bash/dist/bundle/chunks/fold-LDSORVYE.js"() { init_chunk_D4J545R4(); init_chunk_74CEPOFO(); init_chunk_DXB73IDG(); } }); -// ../node_modules/just-bash/dist/bundle/chunks/chunk-VJFXDYWH.js +// node_modules/just-bash/dist/bundle/chunks/chunk-VJFXDYWH.js function p10(n24) { let i11 = n24.split(",").map((o14) => o14.trim()), t6 = []; for (let o14 of i11) { @@ -20789,7 +20789,7 @@ function c7(n24, i11) { } var h8, m12, v13; var init_chunk_VJFXDYWH = __esm({ - "../node_modules/just-bash/dist/bundle/chunks/chunk-VJFXDYWH.js"() { + "node_modules/just-bash/dist/bundle/chunks/chunk-VJFXDYWH.js"() { init_chunk_74CEPOFO(); h8 = { name: "expand", summary: "convert tabs to spaces", usage: "expand [OPTION]... [FILE]...", description: "Convert TABs in each FILE to spaces, writing to standard output. If no FILE is specified, standard input is read.", options: ["-t N Use N spaces per tab (default: 8)", "-t LIST Use comma-separated list of tab stops", "-i Only convert leading tabs on each line"], examples: ["expand file.txt # Convert all tabs to 8 spaces", "expand -t 4 file.txt # Use 4-space tabs", "expand -t 4,8,12 file.txt # Custom tab stops"] }; m12 = { name: "expand", execute: async (n24, i11) => { @@ -20842,21 +20842,21 @@ var init_chunk_VJFXDYWH = __esm({ } }); -// ../node_modules/just-bash/dist/bundle/chunks/expand-DTNXU4LQ.js +// node_modules/just-bash/dist/bundle/chunks/expand-DTNXU4LQ.js var expand_DTNXU4LQ_exports = {}; __export(expand_DTNXU4LQ_exports, { expand: () => m12, flagsForFuzzing: () => v13 }); var init_expand_DTNXU4LQ = __esm({ - "../node_modules/just-bash/dist/bundle/chunks/expand-DTNXU4LQ.js"() { + "node_modules/just-bash/dist/bundle/chunks/expand-DTNXU4LQ.js"() { init_chunk_VJFXDYWH(); init_chunk_74CEPOFO(); init_chunk_DXB73IDG(); } }); -// ../node_modules/just-bash/dist/bundle/chunks/chunk-PYSFUGCK.js +// node_modules/just-bash/dist/bundle/chunks/chunk-PYSFUGCK.js function f7(s10) { let i11 = s10.split(",").map((l7) => l7.trim()), e6 = []; for (let l7 of i11) { @@ -20910,7 +20910,7 @@ function C9(s10, i11) { } var k9, w11, F7; var init_chunk_PYSFUGCK = __esm({ - "../node_modules/just-bash/dist/bundle/chunks/chunk-PYSFUGCK.js"() { + "node_modules/just-bash/dist/bundle/chunks/chunk-PYSFUGCK.js"() { init_chunk_74CEPOFO(); k9 = { name: "unexpand", summary: "convert spaces to tabs", usage: "unexpand [OPTION]... [FILE]...", description: "Convert blanks in each FILE to TABs, writing to standard output. If no FILE is specified, standard input is read.", options: ["-t N Use N spaces per tab (default: 8)", "-t LIST Use comma-separated list of tab stops", "-a Convert all sequences of blanks (not just leading)"], examples: ["unexpand file.txt # Convert leading spaces to tabs", "unexpand -a file.txt # Convert all space sequences", "unexpand -t 4 file.txt # Use 4-space tabs"] }; w11 = { name: "unexpand", execute: async (s10, i11) => { @@ -20963,21 +20963,21 @@ var init_chunk_PYSFUGCK = __esm({ } }); -// ../node_modules/just-bash/dist/bundle/chunks/unexpand-RGTMIGZM.js +// node_modules/just-bash/dist/bundle/chunks/unexpand-RGTMIGZM.js var unexpand_RGTMIGZM_exports = {}; __export(unexpand_RGTMIGZM_exports, { flagsForFuzzing: () => F7, unexpand: () => w11 }); var init_unexpand_RGTMIGZM = __esm({ - "../node_modules/just-bash/dist/bundle/chunks/unexpand-RGTMIGZM.js"() { + "node_modules/just-bash/dist/bundle/chunks/unexpand-RGTMIGZM.js"() { init_chunk_PYSFUGCK(); init_chunk_74CEPOFO(); init_chunk_DXB73IDG(); } }); -// ../node_modules/just-bash/dist/bundle/chunks/chunk-VYOJP4TV.js +// node_modules/just-bash/dist/bundle/chunks/chunk-VYOJP4TV.js function p11(n24) { return n24 >= 32 && n24 <= 126 || n24 === 9; } @@ -21015,7 +21015,7 @@ function g10(n24, s10) { } var m13, b14, N7; var init_chunk_VYOJP4TV = __esm({ - "../node_modules/just-bash/dist/bundle/chunks/chunk-VYOJP4TV.js"() { + "node_modules/just-bash/dist/bundle/chunks/chunk-VYOJP4TV.js"() { init_chunk_74CEPOFO(); m13 = { name: "strings", summary: "print the sequences of printable characters in files", usage: "strings [OPTION]... [FILE]...", description: "For each FILE, print the printable character sequences that are at least MIN characters long. If no FILE is specified, standard input is read.", options: ["-n MIN Print sequences of at least MIN characters (default: 4)", "-t FORMAT Print offset before each string (o=octal, x=hex, d=decimal)", "-a Scan the entire file (default behavior)", "-e ENCODING Select character encoding (s=7-bit, S=8-bit)"], examples: ["strings file.bin # Extract strings (min 4 chars)", "strings -n 8 file.bin # Extract strings (min 8 chars)", "strings -t x file.bin # Show hex offset", "echo 'hello' | strings # Read from stdin"] }; b14 = { name: "strings", execute: async (n24, s10) => { @@ -21092,21 +21092,21 @@ var init_chunk_VYOJP4TV = __esm({ } }); -// ../node_modules/just-bash/dist/bundle/chunks/strings-7PLOGTPD.js +// node_modules/just-bash/dist/bundle/chunks/strings-7PLOGTPD.js var strings_7PLOGTPD_exports = {}; __export(strings_7PLOGTPD_exports, { flagsForFuzzing: () => N7, strings: () => b14 }); var init_strings_7PLOGTPD = __esm({ - "../node_modules/just-bash/dist/bundle/chunks/strings-7PLOGTPD.js"() { + "node_modules/just-bash/dist/bundle/chunks/strings-7PLOGTPD.js"() { init_chunk_VYOJP4TV(); init_chunk_74CEPOFO(); init_chunk_DXB73IDG(); } }); -// ../node_modules/just-bash/dist/bundle/chunks/chunk-MYE6AGBJ.js +// node_modules/just-bash/dist/bundle/chunks/chunk-MYE6AGBJ.js function m14(s10) { let l7 = s10.match(/^(\d+)([KMGTPEZY]?)([B]?)$/i); if (!l7) return null; @@ -21154,7 +21154,7 @@ function S6(s10, l7) { } var k10, p12, I8, $11; var init_chunk_MYE6AGBJ = __esm({ - "../node_modules/just-bash/dist/bundle/chunks/chunk-MYE6AGBJ.js"() { + "node_modules/just-bash/dist/bundle/chunks/chunk-MYE6AGBJ.js"() { init_chunk_74CEPOFO(); k10 = { name: "split", summary: "split a file into pieces", usage: "split [OPTION]... [FILE [PREFIX]]", description: "Output pieces of FILE to PREFIXaa, PREFIXab, ...; default size is 1000 lines, and default PREFIX is 'x'.", options: ["-l N Put N lines per output file", "-b SIZE Put SIZE bytes per output file (K, M, G suffixes)", "-n CHUNKS Split into CHUNKS equal-sized files", "-d Use numeric suffixes (00, 01, ...) instead of alphabetic", "-a LENGTH Use suffixes of length LENGTH (default: 2)", "--additional-suffix=SUFFIX Append SUFFIX to file names"], examples: ["split -l 100 file.txt # Split into 100-line chunks", "split -b 1M file.bin # Split into 1MB chunks", "split -n 5 file.txt # Split into 5 equal parts", "split -d file.txt part_ # part_00, part_01, ...", "split -a 3 -d file.txt x # x000, x001, ..."] }; p12 = 1e5; @@ -21253,21 +21253,21 @@ var init_chunk_MYE6AGBJ = __esm({ } }); -// ../node_modules/just-bash/dist/bundle/chunks/split-SITCSYCZ.js +// node_modules/just-bash/dist/bundle/chunks/split-SITCSYCZ.js var split_SITCSYCZ_exports = {}; __export(split_SITCSYCZ_exports, { flagsForFuzzing: () => $11, split: () => I8 }); var init_split_SITCSYCZ = __esm({ - "../node_modules/just-bash/dist/bundle/chunks/split-SITCSYCZ.js"() { + "node_modules/just-bash/dist/bundle/chunks/split-SITCSYCZ.js"() { init_chunk_MYE6AGBJ(); init_chunk_74CEPOFO(); init_chunk_DXB73IDG(); } }); -// ../node_modules/just-bash/dist/bundle/chunks/chunk-LWEGUNWT.js +// node_modules/just-bash/dist/bundle/chunks/chunk-LWEGUNWT.js function C11(t6, e6, l7) { return e6 ? l7 ? t6.split(e6) : t6.split(e6).filter((n24) => n24.length > 0) : l7 ? t6.split(/[ \t]/) : t6.split(/[ \t]+/).filter((n24) => n24.length > 0); } @@ -21306,7 +21306,7 @@ function j7(t6, e6, l7) { } var v15, H8, M8, P9; var init_chunk_LWEGUNWT = __esm({ - "../node_modules/just-bash/dist/bundle/chunks/chunk-LWEGUNWT.js"() { + "node_modules/just-bash/dist/bundle/chunks/chunk-LWEGUNWT.js"() { init_chunk_HWKDQ44K(); init_chunk_74CEPOFO(); v15 = { name: "column", summary: "columnate lists", usage: "column [OPTION]... [FILE]...", description: "Format input into multiple columns. By default, fills rows first. Use -t to create a table based on whitespace-delimited input.", options: ["-t Create a table (determine columns from input)", "-s SEP Input field delimiter (default: whitespace)", "-o SEP Output field delimiter (default: two spaces)", "-c WIDTH Output width for fill mode (default: 80)", "-n Don't merge multiple adjacent delimiters"], examples: ["ls | column # Fill columns with ls output", "cat data | column -t # Format as table", "column -t -s ',' file # Format CSV as table", "column -c 40 file # Fill 40-char wide columns"] }; @@ -21352,14 +21352,14 @@ var init_chunk_LWEGUNWT = __esm({ } }); -// ../node_modules/just-bash/dist/bundle/chunks/column-WLPMMSTS.js +// node_modules/just-bash/dist/bundle/chunks/column-WLPMMSTS.js var column_WLPMMSTS_exports = {}; __export(column_WLPMMSTS_exports, { column: () => M8, flagsForFuzzing: () => P9 }); var init_column_WLPMMSTS = __esm({ - "../node_modules/just-bash/dist/bundle/chunks/column-WLPMMSTS.js"() { + "node_modules/just-bash/dist/bundle/chunks/column-WLPMMSTS.js"() { init_chunk_LWEGUNWT(); init_chunk_HWKDQ44K(); init_chunk_74CEPOFO(); @@ -21367,7 +21367,7 @@ var init_column_WLPMMSTS = __esm({ } }); -// ../node_modules/just-bash/dist/bundle/chunks/chunk-A7ICOL4V.js +// node_modules/just-bash/dist/bundle/chunks/chunk-A7ICOL4V.js function N8(i11, s10) { return s10 ? i11.split(s10) : i11.split(/[ \t]+/).filter((n24) => n24.length > 0); } @@ -21403,7 +21403,7 @@ function I10(i11) { } var v16, w12, U5; var init_chunk_A7ICOL4V = __esm({ - "../node_modules/just-bash/dist/bundle/chunks/chunk-A7ICOL4V.js"() { + "node_modules/just-bash/dist/bundle/chunks/chunk-A7ICOL4V.js"() { init_chunk_74CEPOFO(); v16 = { name: "join", summary: "join lines of two files on a common field", usage: "join [OPTION]... FILE1 FILE2", description: "For each pair of input lines with identical join fields, write a line to standard output. The default join field is the first, delimited by blanks.", options: ["-1 FIELD Join on this FIELD of file 1 (default: 1)", "-2 FIELD Join on this FIELD of file 2 (default: 1)", "-t CHAR Use CHAR as input and output field separator", "-a FILENUM Also print unpairable lines from file FILENUM (1 or 2)", "-v FILENUM Like -a but only output unpairable lines", "-e STRING Replace missing fields with STRING", "-o FORMAT Output format (comma-separated list of FILENUM.FIELD)", "-i Ignore case when comparing fields"], examples: ["join file1 file2 # Join on first field", "join -1 2 -2 1 file1 file2 # Join file1 col 2 with file2 col 1", "join -t ',' file1.csv file2.csv # Join CSV files", "join -a 1 file1 file2 # Left outer join"] }; w12 = { name: "join", execute: async (i11, s10) => { @@ -21487,24 +21487,24 @@ var init_chunk_A7ICOL4V = __esm({ } }); -// ../node_modules/just-bash/dist/bundle/chunks/join-GG2LDHE5.js +// node_modules/just-bash/dist/bundle/chunks/join-GG2LDHE5.js var join_GG2LDHE5_exports = {}; __export(join_GG2LDHE5_exports, { flagsForFuzzing: () => U5, join: () => w12 }); var init_join_GG2LDHE5 = __esm({ - "../node_modules/just-bash/dist/bundle/chunks/join-GG2LDHE5.js"() { + "node_modules/just-bash/dist/bundle/chunks/join-GG2LDHE5.js"() { init_chunk_A7ICOL4V(); init_chunk_74CEPOFO(); init_chunk_DXB73IDG(); } }); -// ../node_modules/just-bash/dist/bundle/chunks/chunk-55VFSPNA.js +// node_modules/just-bash/dist/bundle/chunks/chunk-55VFSPNA.js var u8, m16, y16, w13; var init_chunk_55VFSPNA = __esm({ - "../node_modules/just-bash/dist/bundle/chunks/chunk-55VFSPNA.js"() { + "node_modules/just-bash/dist/bundle/chunks/chunk-55VFSPNA.js"() { init_chunk_HWKDQ44K(); init_chunk_74CEPOFO(); u8 = { name: "tee", summary: "read from stdin and write to stdout and files", usage: "tee [OPTION]... [FILE]...", options: ["-a, --append append to the given FILEs, do not overwrite", " --help display this help and exit"] }; @@ -21527,14 +21527,14 @@ var init_chunk_55VFSPNA = __esm({ } }); -// ../node_modules/just-bash/dist/bundle/chunks/tee-O7VXZDCO.js +// node_modules/just-bash/dist/bundle/chunks/tee-O7VXZDCO.js var tee_O7VXZDCO_exports = {}; __export(tee_O7VXZDCO_exports, { flagsForFuzzing: () => w13, teeCommand: () => y16 }); var init_tee_O7VXZDCO = __esm({ - "../node_modules/just-bash/dist/bundle/chunks/tee-O7VXZDCO.js"() { + "node_modules/just-bash/dist/bundle/chunks/tee-O7VXZDCO.js"() { init_chunk_55VFSPNA(); init_chunk_HWKDQ44K(); init_chunk_74CEPOFO(); @@ -21542,7 +21542,7 @@ var init_tee_O7VXZDCO = __esm({ } }); -// ../node_modules/just-bash/dist/bundle/chunks/chunk-LPQPILI2.js +// node_modules/just-bash/dist/bundle/chunks/chunk-LPQPILI2.js function k11(e6, t6) { switch (e6.type) { case "name": { @@ -22103,7 +22103,7 @@ function ze3(e6, t6) { } var ye4, $e3, Re3, je3, Je3; var init_chunk_LPQPILI2 = __esm({ - "../node_modules/just-bash/dist/bundle/chunks/chunk-LPQPILI2.js"() { + "node_modules/just-bash/dist/bundle/chunks/chunk-LPQPILI2.js"() { init_chunk_X2AJGDEF(); init_chunk_J642UCRS(); init_chunk_IPJHKYVM(); @@ -22326,14 +22326,14 @@ var init_chunk_LPQPILI2 = __esm({ } }); -// ../node_modules/just-bash/dist/bundle/chunks/find-TPUOAIUQ.js +// node_modules/just-bash/dist/bundle/chunks/find-TPUOAIUQ.js var find_TPUOAIUQ_exports = {}; __export(find_TPUOAIUQ_exports, { findCommand: () => je3, flagsForFuzzing: () => Je3 }); var init_find_TPUOAIUQ = __esm({ - "../node_modules/just-bash/dist/bundle/chunks/find-TPUOAIUQ.js"() { + "node_modules/just-bash/dist/bundle/chunks/find-TPUOAIUQ.js"() { init_chunk_LPQPILI2(); init_chunk_X2AJGDEF(); init_chunk_J642UCRS(); @@ -22345,10 +22345,10 @@ var init_find_TPUOAIUQ = __esm({ } }); -// ../node_modules/just-bash/dist/bundle/chunks/chunk-ALLTKNUZ.js +// node_modules/just-bash/dist/bundle/chunks/chunk-ALLTKNUZ.js var p13, c8, h9; var init_chunk_ALLTKNUZ = __esm({ - "../node_modules/just-bash/dist/bundle/chunks/chunk-ALLTKNUZ.js"() { + "node_modules/just-bash/dist/bundle/chunks/chunk-ALLTKNUZ.js"() { init_chunk_74CEPOFO(); p13 = { name: "basename", summary: "strip directory and suffix from filenames", usage: `basename NAME [SUFFIX] basename OPTION... NAME...`, options: ["-a, --multiple support multiple arguments", "-s, --suffix=SUFFIX remove a trailing SUFFIX", " --help display this help and exit"] }; @@ -22375,24 +22375,24 @@ basename OPTION... NAME...`, options: ["-a, --multiple support multiple argume } }); -// ../node_modules/just-bash/dist/bundle/chunks/basename-AA2KJYZQ.js +// node_modules/just-bash/dist/bundle/chunks/basename-AA2KJYZQ.js var basename_AA2KJYZQ_exports = {}; __export(basename_AA2KJYZQ_exports, { basenameCommand: () => c8, flagsForFuzzing: () => h9 }); var init_basename_AA2KJYZQ = __esm({ - "../node_modules/just-bash/dist/bundle/chunks/basename-AA2KJYZQ.js"() { + "node_modules/just-bash/dist/bundle/chunks/basename-AA2KJYZQ.js"() { init_chunk_ALLTKNUZ(); init_chunk_74CEPOFO(); init_chunk_DXB73IDG(); } }); -// ../node_modules/just-bash/dist/bundle/chunks/chunk-4Q4SM6WR.js +// node_modules/just-bash/dist/bundle/chunks/chunk-4Q4SM6WR.js var m17, p14, c9; var init_chunk_4Q4SM6WR = __esm({ - "../node_modules/just-bash/dist/bundle/chunks/chunk-4Q4SM6WR.js"() { + "node_modules/just-bash/dist/bundle/chunks/chunk-4Q4SM6WR.js"() { init_chunk_74CEPOFO(); m17 = { name: "dirname", summary: "strip last component from file name", usage: "dirname [OPTION] NAME...", options: [" --help display this help and exit"] }; p14 = { name: "dirname", async execute(t6, l7) { @@ -22413,21 +22413,21 @@ var init_chunk_4Q4SM6WR = __esm({ } }); -// ../node_modules/just-bash/dist/bundle/chunks/dirname-LEMTZZFS.js +// node_modules/just-bash/dist/bundle/chunks/dirname-LEMTZZFS.js var dirname_LEMTZZFS_exports = {}; __export(dirname_LEMTZZFS_exports, { dirnameCommand: () => p14, flagsForFuzzing: () => c9 }); var init_dirname_LEMTZZFS = __esm({ - "../node_modules/just-bash/dist/bundle/chunks/dirname-LEMTZZFS.js"() { + "node_modules/just-bash/dist/bundle/chunks/dirname-LEMTZZFS.js"() { init_chunk_4Q4SM6WR(); init_chunk_74CEPOFO(); init_chunk_DXB73IDG(); } }); -// ../node_modules/just-bash/dist/bundle/chunks/chunk-XVDPCNWR.js +// node_modules/just-bash/dist/bundle/chunks/chunk-XVDPCNWR.js async function T9(i11, o14, s10, f11, d15) { let e6 = { output: "", stderr: "", dirCount: 0, fileCount: 0 }, l7 = i11.fs.resolvePath(i11.cwd, o14); try { @@ -22527,7 +22527,7 @@ async function w14(i11, o14, s10, f11, d15) { } var P10, b15, O9, L8; var init_chunk_XVDPCNWR = __esm({ - "../node_modules/just-bash/dist/bundle/chunks/chunk-XVDPCNWR.js"() { + "node_modules/just-bash/dist/bundle/chunks/chunk-XVDPCNWR.js"() { init_chunk_HWKDQ44K(); init_chunk_74CEPOFO(); P10 = { name: "tree", summary: "list contents of directories in a tree-like format", usage: "tree [OPTION]... [DIRECTORY]...", options: ["-a include hidden files", "-d list directories only", "-L LEVEL limit depth of directory tree", "-f print full path prefix for each file", " --help display this help and exit"] }; @@ -22551,14 +22551,14 @@ ${a15} director${a15 === 1 ? "y" : "ies"}`, f11.directoriesOnly || (e6 += `, ${n } }); -// ../node_modules/just-bash/dist/bundle/chunks/tree-LYXBS7DC.js +// node_modules/just-bash/dist/bundle/chunks/tree-LYXBS7DC.js var tree_LYXBS7DC_exports = {}; __export(tree_LYXBS7DC_exports, { flagsForFuzzing: () => L8, treeCommand: () => O9 }); var init_tree_LYXBS7DC = __esm({ - "../node_modules/just-bash/dist/bundle/chunks/tree-LYXBS7DC.js"() { + "node_modules/just-bash/dist/bundle/chunks/tree-LYXBS7DC.js"() { init_chunk_XVDPCNWR(); init_chunk_HWKDQ44K(); init_chunk_74CEPOFO(); @@ -22566,7 +22566,7 @@ var init_tree_LYXBS7DC = __esm({ } }); -// ../node_modules/just-bash/dist/bundle/chunks/chunk-RPNGRAAP.js +// node_modules/just-bash/dist/bundle/chunks/chunk-RPNGRAAP.js async function w15(a15, s10, n24, r10, l7) { let o14 = { output: "", totalSize: 0, stderr: "" }; if (l7 > E7) return o14; @@ -22637,7 +22637,7 @@ function D7(a15, s10) { } var x17, R4, _8, E7, v17; var init_chunk_RPNGRAAP = __esm({ - "../node_modules/just-bash/dist/bundle/chunks/chunk-RPNGRAAP.js"() { + "node_modules/just-bash/dist/bundle/chunks/chunk-RPNGRAAP.js"() { init_chunk_HWKDQ44K(); init_chunk_74CEPOFO(); x17 = { name: "du", summary: "estimate file space usage", usage: "du [OPTION]... [FILE]...", options: ["-a write counts for all files, not just directories", "-h print sizes in human readable format", "-s display only a total for each argument", "-c produce a grand total", "--max-depth=N print total for directory only if N or fewer levels deep", " --help display this help and exit"] }; @@ -22668,14 +22668,14 @@ var init_chunk_RPNGRAAP = __esm({ } }); -// ../node_modules/just-bash/dist/bundle/chunks/du-WO2ENHXQ.js +// node_modules/just-bash/dist/bundle/chunks/du-WO2ENHXQ.js var du_WO2ENHXQ_exports = {}; __export(du_WO2ENHXQ_exports, { duCommand: () => _8, flagsForFuzzing: () => v17 }); var init_du_WO2ENHXQ = __esm({ - "../node_modules/just-bash/dist/bundle/chunks/du-WO2ENHXQ.js"() { + "node_modules/just-bash/dist/bundle/chunks/du-WO2ENHXQ.js"() { init_chunk_RPNGRAAP(); init_chunk_HWKDQ44K(); init_chunk_74CEPOFO(); @@ -22683,10 +22683,10 @@ var init_du_WO2ENHXQ = __esm({ } }); -// ../node_modules/just-bash/dist/bundle/chunks/chunk-NAERJDUW.js +// node_modules/just-bash/dist/bundle/chunks/chunk-NAERJDUW.js var g12, w16, x18, E8, M9, N9; var init_chunk_NAERJDUW = __esm({ - "../node_modules/just-bash/dist/bundle/chunks/chunk-NAERJDUW.js"() { + "node_modules/just-bash/dist/bundle/chunks/chunk-NAERJDUW.js"() { init_chunk_OJDRYQWQ(); init_chunk_74CEPOFO(); g12 = { name: "env", summary: "run a program in a modified environment", usage: "env [OPTION]... [NAME=VALUE]... [COMMAND [ARG]...]", options: ["-i, --ignore-environment start with an empty environment", "-u NAME, --unset=NAME remove NAME from the environment", " --help display this help and exit"] }; @@ -22757,7 +22757,7 @@ var init_chunk_NAERJDUW = __esm({ } }); -// ../node_modules/just-bash/dist/bundle/chunks/env-5EPCWSXR.js +// node_modules/just-bash/dist/bundle/chunks/env-5EPCWSXR.js var env_5EPCWSXR_exports = {}; __export(env_5EPCWSXR_exports, { envCommand: () => w16, @@ -22766,7 +22766,7 @@ __export(env_5EPCWSXR_exports, { printenvFlagsForFuzzing: () => N9 }); var init_env_5EPCWSXR = __esm({ - "../node_modules/just-bash/dist/bundle/chunks/env-5EPCWSXR.js"() { + "node_modules/just-bash/dist/bundle/chunks/env-5EPCWSXR.js"() { init_chunk_NAERJDUW(); init_chunk_OJDRYQWQ(); init_chunk_74CEPOFO(); @@ -22774,10 +22774,10 @@ var init_env_5EPCWSXR = __esm({ } }); -// ../node_modules/just-bash/dist/bundle/chunks/chunk-VOBGTVA6.js +// node_modules/just-bash/dist/bundle/chunks/chunk-VOBGTVA6.js var d9, o8, m18, c10, p15, h10; var init_chunk_VOBGTVA6 = __esm({ - "../node_modules/just-bash/dist/bundle/chunks/chunk-VOBGTVA6.js"() { + "node_modules/just-bash/dist/bundle/chunks/chunk-VOBGTVA6.js"() { init_chunk_74CEPOFO(); d9 = { name: "alias", summary: "define or display aliases", usage: "alias [name[=value] ...]", options: [" --help display this help and exit"] }; o8 = "BASH_ALIAS_"; @@ -22828,7 +22828,7 @@ var init_chunk_VOBGTVA6 = __esm({ } }); -// ../node_modules/just-bash/dist/bundle/chunks/alias-JE7RI5QX.js +// node_modules/just-bash/dist/bundle/chunks/alias-JE7RI5QX.js var alias_JE7RI5QX_exports = {}; __export(alias_JE7RI5QX_exports, { aliasCommand: () => m18, @@ -22837,17 +22837,17 @@ __export(alias_JE7RI5QX_exports, { unaliasFlagsForFuzzing: () => h10 }); var init_alias_JE7RI5QX = __esm({ - "../node_modules/just-bash/dist/bundle/chunks/alias-JE7RI5QX.js"() { + "node_modules/just-bash/dist/bundle/chunks/alias-JE7RI5QX.js"() { init_chunk_VOBGTVA6(); init_chunk_74CEPOFO(); init_chunk_DXB73IDG(); } }); -// ../node_modules/just-bash/dist/bundle/chunks/chunk-NCNPKYJZ.js +// node_modules/just-bash/dist/bundle/chunks/chunk-NCNPKYJZ.js var p16, h11, m19, u9; var init_chunk_NCNPKYJZ = __esm({ - "../node_modules/just-bash/dist/bundle/chunks/chunk-NCNPKYJZ.js"() { + "node_modules/just-bash/dist/bundle/chunks/chunk-NCNPKYJZ.js"() { init_chunk_74CEPOFO(); p16 = { name: "history", summary: "display command history", usage: "history [n]", options: ["-c clear the history list", " --help display this help and exit"] }; h11 = "BASH_HISTORY"; @@ -22874,24 +22874,24 @@ var init_chunk_NCNPKYJZ = __esm({ } }); -// ../node_modules/just-bash/dist/bundle/chunks/history-J4QRNGRO.js +// node_modules/just-bash/dist/bundle/chunks/history-J4QRNGRO.js var history_J4QRNGRO_exports = {}; __export(history_J4QRNGRO_exports, { flagsForFuzzing: () => u9, historyCommand: () => m19 }); var init_history_J4QRNGRO = __esm({ - "../node_modules/just-bash/dist/bundle/chunks/history-J4QRNGRO.js"() { + "node_modules/just-bash/dist/bundle/chunks/history-J4QRNGRO.js"() { init_chunk_NCNPKYJZ(); init_chunk_74CEPOFO(); init_chunk_DXB73IDG(); } }); -// ../node_modules/just-bash/dist/bundle/chunks/chunk-TOMNU26N.js +// node_modules/just-bash/dist/bundle/chunks/chunk-TOMNU26N.js var $12, P11, H9; var init_chunk_TOMNU26N = __esm({ - "../node_modules/just-bash/dist/bundle/chunks/chunk-TOMNU26N.js"() { + "node_modules/just-bash/dist/bundle/chunks/chunk-TOMNU26N.js"() { init_chunk_IPJHKYVM(); init_chunk_74CEPOFO(); $12 = { name: "xargs", summary: "build and execute command lines from standard input", usage: "xargs [OPTION]... [COMMAND [INITIAL-ARGS]]", options: ["-I REPLACE replace occurrences of REPLACE with input", "-d DELIM use DELIM as input delimiter (e.g., -d '\\n' for newline)", "-n NUM use at most NUM arguments per command line", "-P NUM run at most NUM processes at a time", "-0, --null items are separated by null, not whitespace", "-t, --verbose print commands before executing", "-r, --no-run-if-empty do not run command if input is empty", " --help display this help and exit"] }; @@ -22961,14 +22961,14 @@ var init_chunk_TOMNU26N = __esm({ } }); -// ../node_modules/just-bash/dist/bundle/chunks/xargs-I6EZUCYF.js +// node_modules/just-bash/dist/bundle/chunks/xargs-I6EZUCYF.js var xargs_I6EZUCYF_exports = {}; __export(xargs_I6EZUCYF_exports, { flagsForFuzzing: () => H9, xargsCommand: () => P11 }); var init_xargs_I6EZUCYF = __esm({ - "../node_modules/just-bash/dist/bundle/chunks/xargs-I6EZUCYF.js"() { + "node_modules/just-bash/dist/bundle/chunks/xargs-I6EZUCYF.js"() { init_chunk_TOMNU26N(); init_chunk_IPJHKYVM(); init_chunk_74CEPOFO(); @@ -22976,10 +22976,10 @@ var init_xargs_I6EZUCYF = __esm({ } }); -// ../node_modules/just-bash/dist/bundle/chunks/chunk-R6QSAL5T.js +// node_modules/just-bash/dist/bundle/chunks/chunk-R6QSAL5T.js var e4, t, s3, r9; var init_chunk_R6QSAL5T = __esm({ - "../node_modules/just-bash/dist/bundle/chunks/chunk-R6QSAL5T.js"() { + "node_modules/just-bash/dist/bundle/chunks/chunk-R6QSAL5T.js"() { e4 = { name: "true", async execute() { return { stdout: "", stderr: "", exitCode: 0 }; } }; @@ -22991,7 +22991,7 @@ var init_chunk_R6QSAL5T = __esm({ } }); -// ../node_modules/just-bash/dist/bundle/chunks/true-WHJNXCHG.js +// node_modules/just-bash/dist/bundle/chunks/true-WHJNXCHG.js var true_WHJNXCHG_exports = {}; __export(true_WHJNXCHG_exports, { falseCommand: () => t, @@ -23000,16 +23000,16 @@ __export(true_WHJNXCHG_exports, { trueCommand: () => e4 }); var init_true_WHJNXCHG = __esm({ - "../node_modules/just-bash/dist/bundle/chunks/true-WHJNXCHG.js"() { + "node_modules/just-bash/dist/bundle/chunks/true-WHJNXCHG.js"() { init_chunk_R6QSAL5T(); init_chunk_DXB73IDG(); } }); -// ../node_modules/just-bash/dist/bundle/chunks/chunk-LL3S3NLB.js +// node_modules/just-bash/dist/bundle/chunks/chunk-LL3S3NLB.js var t2, s4, o9; var init_chunk_LL3S3NLB = __esm({ - "../node_modules/just-bash/dist/bundle/chunks/chunk-LL3S3NLB.js"() { + "node_modules/just-bash/dist/bundle/chunks/chunk-LL3S3NLB.js"() { init_chunk_74CEPOFO(); t2 = { name: "clear", summary: "clear the terminal screen", usage: "clear [OPTIONS]", options: [" --help display this help and exit"] }; s4 = { name: "clear", async execute(r10, c15) { @@ -23019,21 +23019,21 @@ var init_chunk_LL3S3NLB = __esm({ } }); -// ../node_modules/just-bash/dist/bundle/chunks/clear-5CZ5X4YR.js +// node_modules/just-bash/dist/bundle/chunks/clear-5CZ5X4YR.js var clear_5CZ5X4YR_exports = {}; __export(clear_5CZ5X4YR_exports, { clearCommand: () => s4, flagsForFuzzing: () => o9 }); var init_clear_5CZ5X4YR = __esm({ - "../node_modules/just-bash/dist/bundle/chunks/clear-5CZ5X4YR.js"() { + "node_modules/just-bash/dist/bundle/chunks/clear-5CZ5X4YR.js"() { init_chunk_LL3S3NLB(); init_chunk_74CEPOFO(); init_chunk_DXB73IDG(); } }); -// ../node_modules/just-bash/dist/bundle/chunks/chunk-D6CWQ5DW.js +// node_modules/just-bash/dist/bundle/chunks/chunk-D6CWQ5DW.js async function o10(t6, e6, n24, r10) { if (!r10.exec) return { stdout: "", stderr: `bash: internal error: exec function not available `, exitCode: 1 }; @@ -23051,7 +23051,7 @@ async function o10(t6, e6, n24, r10) { } var d10, y17, C12, b16, P12; var init_chunk_D6CWQ5DW = __esm({ - "../node_modules/just-bash/dist/bundle/chunks/chunk-D6CWQ5DW.js"() { + "node_modules/just-bash/dist/bundle/chunks/chunk-D6CWQ5DW.js"() { init_chunk_OJDRYQWQ(); init_chunk_74CEPOFO(); d10 = { name: "bash", summary: "execute shell commands or scripts", usage: "bash [OPTIONS] [SCRIPT_FILE] [ARGUMENTS...]", options: ["-c COMMAND execute COMMAND string", " --help display this help and exit"], notes: ["Without -c, reads and executes commands from SCRIPT_FILE.", "Arguments are passed as $1, $2, etc. to the script.", '$0 is set to the script name (or "bash" with -c).'] }; @@ -23092,7 +23092,7 @@ var init_chunk_D6CWQ5DW = __esm({ } }); -// ../node_modules/just-bash/dist/bundle/chunks/bash-IJWYRKFO.js +// node_modules/just-bash/dist/bundle/chunks/bash-IJWYRKFO.js var bash_IJWYRKFO_exports = {}; __export(bash_IJWYRKFO_exports, { bashCommand: () => y17, @@ -23101,7 +23101,7 @@ __export(bash_IJWYRKFO_exports, { shFlagsForFuzzing: () => P12 }); var init_bash_IJWYRKFO = __esm({ - "../node_modules/just-bash/dist/bundle/chunks/bash-IJWYRKFO.js"() { + "node_modules/just-bash/dist/bundle/chunks/bash-IJWYRKFO.js"() { init_chunk_D6CWQ5DW(); init_chunk_OJDRYQWQ(); init_chunk_74CEPOFO(); @@ -23109,7 +23109,7 @@ var init_bash_IJWYRKFO = __esm({ } }); -// ../node_modules/just-bash/dist/bundle/chunks/chunk-BBXLRYSX.js +// node_modules/just-bash/dist/bundle/chunks/chunk-BBXLRYSX.js function W8(t6, r10, e6, n24, p22, o14, u12, c15, s10, f11) { switch (r10) { case "sort": @@ -25316,7 +25316,7 @@ function Ne3(t6) { } var Ot3, Nt3, P13, H10, St3, bt3, Ct3, At3, Y5, ut3; var init_chunk_BBXLRYSX = __esm({ - "../node_modules/just-bash/dist/bundle/chunks/chunk-BBXLRYSX.js"() { + "node_modules/just-bash/dist/bundle/chunks/chunk-BBXLRYSX.js"() { init_chunk_7TSDKFEO(); init_chunk_OJDRYQWQ(); init_chunk_24IMIIXA(); @@ -25713,7 +25713,7 @@ var init_chunk_BBXLRYSX = __esm({ } }); -// ../node_modules/just-bash/dist/bundle/chunks/chunk-YCFVLTST.js +// node_modules/just-bash/dist/bundle/chunks/chunk-YCFVLTST.js function A5(s10) { let r10 = [], t6 = 0, l7 = s10.length; for (; t6 < l7; ) { @@ -25778,7 +25778,7 @@ ${i11.repeat(n24)}}`; } var W9, Y6, Z9; var init_chunk_YCFVLTST = __esm({ - "../node_modules/just-bash/dist/bundle/chunks/chunk-YCFVLTST.js"() { + "node_modules/just-bash/dist/bundle/chunks/chunk-YCFVLTST.js"() { init_chunk_BBXLRYSX(); init_chunk_7TSDKFEO(); init_chunk_24IMIIXA(); @@ -25869,14 +25869,14 @@ var init_chunk_YCFVLTST = __esm({ } }); -// ../node_modules/just-bash/dist/bundle/chunks/jq-ODXZBPLY.js +// node_modules/just-bash/dist/bundle/chunks/jq-ODXZBPLY.js var jq_ODXZBPLY_exports = {}; __export(jq_ODXZBPLY_exports, { flagsForFuzzing: () => Z9, jqCommand: () => Y6 }); var init_jq_ODXZBPLY = __esm({ - "../node_modules/just-bash/dist/bundle/chunks/jq-ODXZBPLY.js"() { + "node_modules/just-bash/dist/bundle/chunks/jq-ODXZBPLY.js"() { init_chunk_YCFVLTST(); init_chunk_BBXLRYSX(); init_chunk_7TSDKFEO(); @@ -25892,7 +25892,7 @@ var init_jq_ODXZBPLY = __esm({ } }); -// ../node_modules/just-bash/dist/bundle/chunks/chunk-QJ7O6ZN3.js +// node_modules/just-bash/dist/bundle/chunks/chunk-QJ7O6ZN3.js async function p17(r10, o14, n24) { if (o14.length === 0 || o14.length === 1 && o14[0] === "-") return { ok: true, data: Uint8Array.from(r10.stdin, (e6) => e6.charCodeAt(0)) }; let d15 = []; @@ -25915,7 +25915,7 @@ async function p17(r10, o14, n24) { } var b17, m20, A6, F10; var init_chunk_QJ7O6ZN3 = __esm({ - "../node_modules/just-bash/dist/bundle/chunks/chunk-QJ7O6ZN3.js"() { + "node_modules/just-bash/dist/bundle/chunks/chunk-QJ7O6ZN3.js"() { init_chunk_HWKDQ44K(); init_chunk_74CEPOFO(); b17 = { name: "base64", summary: "base64 encode/decode data and print to standard output", usage: "base64 [OPTION]... [FILE]", options: ["-d, --decode decode data", "-w, --wrap=COLS wrap encoded lines after COLS character (default 76, 0 to disable)", " --help display this help and exit"] }; @@ -25956,14 +25956,14 @@ var init_chunk_QJ7O6ZN3 = __esm({ } }); -// ../node_modules/just-bash/dist/bundle/chunks/base64-4YMZCVJ5.js +// node_modules/just-bash/dist/bundle/chunks/base64-4YMZCVJ5.js var base64_4YMZCVJ5_exports = {}; __export(base64_4YMZCVJ5_exports, { base64Command: () => A6, flagsForFuzzing: () => F10 }); var init_base64_4YMZCVJ5 = __esm({ - "../node_modules/just-bash/dist/bundle/chunks/base64-4YMZCVJ5.js"() { + "node_modules/just-bash/dist/bundle/chunks/base64-4YMZCVJ5.js"() { init_chunk_QJ7O6ZN3(); init_chunk_HWKDQ44K(); init_chunk_74CEPOFO(); @@ -25971,10 +25971,10 @@ var init_base64_4YMZCVJ5 = __esm({ } }); -// ../node_modules/diff/libesm/diff/base.js +// node_modules/diff/libesm/diff/base.js var Diff; var init_base = __esm({ - "../node_modules/diff/libesm/diff/base.js"() { + "node_modules/diff/libesm/diff/base.js"() { Diff = class { diff(oldStr, newStr, options = {}) { let callback; @@ -26178,7 +26178,7 @@ var init_base = __esm({ } }); -// ../node_modules/diff/libesm/diff/line.js +// node_modules/diff/libesm/diff/line.js function diffLines(oldStr, newStr, options) { return lineDiff.diff(oldStr, newStr, options); } @@ -26202,7 +26202,7 @@ function tokenize(value, options) { } var LineDiff, lineDiff; var init_line = __esm({ - "../node_modules/diff/libesm/diff/line.js"() { + "node_modules/diff/libesm/diff/line.js"() { init_base(); LineDiff = class extends Diff { constructor() { @@ -26232,7 +26232,7 @@ var init_line = __esm({ } }); -// ../node_modules/diff/libesm/patch/create.js +// node_modules/diff/libesm/patch/create.js function structuredPatch(oldFileName, newFileName, oldStr, newStr, oldHeader, newHeader, options) { let optionsObj; if (!options) { @@ -26408,7 +26408,7 @@ function splitLines(text) { } var INCLUDE_HEADERS; var init_create = __esm({ - "../node_modules/diff/libesm/patch/create.js"() { + "node_modules/diff/libesm/patch/create.js"() { init_line(); INCLUDE_HEADERS = { includeIndex: true, @@ -26418,17 +26418,17 @@ var init_create = __esm({ } }); -// ../node_modules/diff/libesm/index.js +// node_modules/diff/libesm/index.js var init_libesm = __esm({ - "../node_modules/diff/libesm/index.js"() { + "node_modules/diff/libesm/index.js"() { init_create(); } }); -// ../node_modules/just-bash/dist/bundle/chunks/chunk-TLSUDHID.js +// node_modules/just-bash/dist/bundle/chunks/chunk-TLSUDHID.js var y18, b18, $14, x19; var init_chunk_TLSUDHID = __esm({ - "../node_modules/just-bash/dist/bundle/chunks/chunk-TLSUDHID.js"() { + "node_modules/just-bash/dist/bundle/chunks/chunk-TLSUDHID.js"() { init_chunk_HWKDQ44K(); init_chunk_74CEPOFO(); init_libesm(); @@ -26463,14 +26463,14 @@ var init_chunk_TLSUDHID = __esm({ } }); -// ../node_modules/just-bash/dist/bundle/chunks/diff-HJF2MPDN.js +// node_modules/just-bash/dist/bundle/chunks/diff-HJF2MPDN.js var diff_HJF2MPDN_exports = {}; __export(diff_HJF2MPDN_exports, { diffCommand: () => $14, flagsForFuzzing: () => x19 }); var init_diff_HJF2MPDN = __esm({ - "../node_modules/just-bash/dist/bundle/chunks/diff-HJF2MPDN.js"() { + "node_modules/just-bash/dist/bundle/chunks/diff-HJF2MPDN.js"() { init_chunk_TLSUDHID(); init_chunk_HWKDQ44K(); init_chunk_74CEPOFO(); @@ -26478,7 +26478,7 @@ var init_diff_HJF2MPDN = __esm({ } }); -// ../node_modules/just-bash/dist/bundle/chunks/chunk-D7MEQ3VN.js +// node_modules/just-bash/dist/bundle/chunks/chunk-D7MEQ3VN.js function s5(a15, i11 = 2) { return String(a15).padStart(i11, "0"); } @@ -26579,7 +26579,7 @@ function h12(a15) { } var g13, T10, S8, M11, D9; var init_chunk_D7MEQ3VN = __esm({ - "../node_modules/just-bash/dist/bundle/chunks/chunk-D7MEQ3VN.js"() { + "node_modules/just-bash/dist/bundle/chunks/chunk-D7MEQ3VN.js"() { init_chunk_74CEPOFO(); g13 = { name: "date", summary: "display the current time in the given FORMAT", usage: "date [OPTION]... [+FORMAT]", options: ["-d, --date=STRING display time described by STRING", "-u, --utc print Coordinated Universal Time (UTC)", "-I, --iso-8601 output date/time in ISO 8601 format", "-R, --rfc-email output RFC 5322 date format", " --help display this help and exit"] }; T10 = ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"]; @@ -26614,21 +26614,21 @@ var init_chunk_D7MEQ3VN = __esm({ } }); -// ../node_modules/just-bash/dist/bundle/chunks/date-DD7FVA2V.js +// node_modules/just-bash/dist/bundle/chunks/date-DD7FVA2V.js var date_DD7FVA2V_exports = {}; __export(date_DD7FVA2V_exports, { dateCommand: () => M11, flagsForFuzzing: () => D9 }); var init_date_DD7FVA2V = __esm({ - "../node_modules/just-bash/dist/bundle/chunks/date-DD7FVA2V.js"() { + "node_modules/just-bash/dist/bundle/chunks/date-DD7FVA2V.js"() { init_chunk_D7MEQ3VN(); init_chunk_74CEPOFO(); init_chunk_DXB73IDG(); } }); -// ../node_modules/just-bash/dist/bundle/chunks/chunk-3ZUFRYJ4.js +// node_modules/just-bash/dist/bundle/chunks/chunk-3ZUFRYJ4.js function n22(e6) { let r10 = e6.match(/^(\d+\.?\d*)(s|m|h|d)?$/); if (!r10) return null; @@ -26647,14 +26647,14 @@ function n22(e6) { } } var init_chunk_3ZUFRYJ4 = __esm({ - "../node_modules/just-bash/dist/bundle/chunks/chunk-3ZUFRYJ4.js"() { + "node_modules/just-bash/dist/bundle/chunks/chunk-3ZUFRYJ4.js"() { } }); -// ../node_modules/just-bash/dist/bundle/chunks/chunk-GOV5EKKI.js +// node_modules/just-bash/dist/bundle/chunks/chunk-GOV5EKKI.js var u10, m21, h13, b20; var init_chunk_GOV5EKKI = __esm({ - "../node_modules/just-bash/dist/bundle/chunks/chunk-GOV5EKKI.js"() { + "node_modules/just-bash/dist/bundle/chunks/chunk-GOV5EKKI.js"() { init_chunk_3ZUFRYJ4(); init_chunk_A5O5YHGN(); init_chunk_74CEPOFO(); @@ -26690,14 +26690,14 @@ NUMBER may be a decimal number.`, options: [" --help display this help and ex } }); -// ../node_modules/just-bash/dist/bundle/chunks/sleep-VZFPZFWA.js +// node_modules/just-bash/dist/bundle/chunks/sleep-VZFPZFWA.js var sleep_VZFPZFWA_exports = {}; __export(sleep_VZFPZFWA_exports, { flagsForFuzzing: () => b20, sleepCommand: () => h13 }); var init_sleep_VZFPZFWA = __esm({ - "../node_modules/just-bash/dist/bundle/chunks/sleep-VZFPZFWA.js"() { + "node_modules/just-bash/dist/bundle/chunks/sleep-VZFPZFWA.js"() { init_chunk_GOV5EKKI(); init_chunk_3ZUFRYJ4(); init_chunk_A5O5YHGN(); @@ -26707,10 +26707,10 @@ var init_sleep_VZFPZFWA = __esm({ } }); -// ../node_modules/just-bash/dist/bundle/chunks/chunk-YTNYSM6T.js +// node_modules/just-bash/dist/bundle/chunks/chunk-YTNYSM6T.js var v19, N10, D10; var init_chunk_YTNYSM6T = __esm({ - "../node_modules/just-bash/dist/bundle/chunks/chunk-YTNYSM6T.js"() { + "node_modules/just-bash/dist/bundle/chunks/chunk-YTNYSM6T.js"() { init_chunk_3ZUFRYJ4(); init_chunk_A5O5YHGN(); init_chunk_IPJHKYVM(); @@ -26771,14 +26771,14 @@ DURATION is a number with optional suffix: } }); -// ../node_modules/just-bash/dist/bundle/chunks/timeout-VRKMCG72.js +// node_modules/just-bash/dist/bundle/chunks/timeout-VRKMCG72.js var timeout_VRKMCG72_exports = {}; __export(timeout_VRKMCG72_exports, { flagsForFuzzing: () => D10, timeoutCommand: () => N10 }); var init_timeout_VRKMCG72 = __esm({ - "../node_modules/just-bash/dist/bundle/chunks/timeout-VRKMCG72.js"() { + "node_modules/just-bash/dist/bundle/chunks/timeout-VRKMCG72.js"() { init_chunk_YTNYSM6T(); init_chunk_3ZUFRYJ4(); init_chunk_A5O5YHGN(); @@ -26789,14 +26789,14 @@ var init_timeout_VRKMCG72 = __esm({ } }); -// ../node_modules/just-bash/dist/bundle/chunks/chunk-Z6LRHWXI.js +// node_modules/just-bash/dist/bundle/chunks/chunk-Z6LRHWXI.js function F11(r10) { let s10 = Math.floor(r10 / 3600), a15 = Math.floor(r10 % 3600 / 60), o14 = r10 % 60; return s10 > 0 ? `${s10}:${a15.toString().padStart(2, "0")}:${o14.toFixed(2).padStart(5, "0")}` : `${a15}:${o14.toFixed(2).padStart(5, "0")}`; } var v20, S9; var init_chunk_Z6LRHWXI = __esm({ - "../node_modules/just-bash/dist/bundle/chunks/chunk-Z6LRHWXI.js"() { + "node_modules/just-bash/dist/bundle/chunks/chunk-Z6LRHWXI.js"() { init_chunk_CWQS3NFK(); init_chunk_IPJHKYVM(); init_chunk_OJDRYQWQ(); @@ -26859,14 +26859,14 @@ sys 0.00 } }); -// ../node_modules/just-bash/dist/bundle/chunks/time-DEUO3QV2.js +// node_modules/just-bash/dist/bundle/chunks/time-DEUO3QV2.js var time_DEUO3QV2_exports = {}; __export(time_DEUO3QV2_exports, { flagsForFuzzing: () => S9, timeCommand: () => v20 }); var init_time_DEUO3QV2 = __esm({ - "../node_modules/just-bash/dist/bundle/chunks/time-DEUO3QV2.js"() { + "node_modules/just-bash/dist/bundle/chunks/time-DEUO3QV2.js"() { init_chunk_Z6LRHWXI(); init_chunk_CWQS3NFK(); init_chunk_IPJHKYVM(); @@ -26876,10 +26876,10 @@ var init_time_DEUO3QV2 = __esm({ } }); -// ../node_modules/just-bash/dist/bundle/chunks/chunk-A7A2DBEE.js +// node_modules/just-bash/dist/bundle/chunks/chunk-A7A2DBEE.js var F12, b21; var init_chunk_A7A2DBEE = __esm({ - "../node_modules/just-bash/dist/bundle/chunks/chunk-A7A2DBEE.js"() { + "node_modules/just-bash/dist/bundle/chunks/chunk-A7A2DBEE.js"() { F12 = { name: "seq", async execute(r10) { let d15 = ` `, f11 = false, s10 = [], t6 = 0; @@ -26938,20 +26938,20 @@ var init_chunk_A7A2DBEE = __esm({ } }); -// ../node_modules/just-bash/dist/bundle/chunks/seq-RN5ZUASB.js +// node_modules/just-bash/dist/bundle/chunks/seq-RN5ZUASB.js var seq_RN5ZUASB_exports = {}; __export(seq_RN5ZUASB_exports, { flagsForFuzzing: () => b21, seqCommand: () => F12 }); var init_seq_RN5ZUASB = __esm({ - "../node_modules/just-bash/dist/bundle/chunks/seq-RN5ZUASB.js"() { + "node_modules/just-bash/dist/bundle/chunks/seq-RN5ZUASB.js"() { init_chunk_A7A2DBEE(); init_chunk_DXB73IDG(); } }); -// ../node_modules/just-bash/dist/bundle/chunks/chunk-YFG2CMIF.js +// node_modules/just-bash/dist/bundle/chunks/chunk-YFG2CMIF.js function x20(s10) { if (s10.length === 1) return s10[0]; let r10 = 0; @@ -27059,7 +27059,7 @@ function x20(s10) { } var S10, E9; var init_chunk_YFG2CMIF = __esm({ - "../node_modules/just-bash/dist/bundle/chunks/chunk-YFG2CMIF.js"() { + "node_modules/just-bash/dist/bundle/chunks/chunk-YFG2CMIF.js"() { init_chunk_YNYSPYQ5(); init_chunk_3THT3N7L(); S10 = { name: "expr", async execute(s10, r10) { @@ -27078,14 +27078,14 @@ var init_chunk_YFG2CMIF = __esm({ } }); -// ../node_modules/just-bash/dist/bundle/chunks/expr-5T3UU5KE.js +// node_modules/just-bash/dist/bundle/chunks/expr-5T3UU5KE.js var expr_5T3UU5KE_exports = {}; __export(expr_5T3UU5KE_exports, { exprCommand: () => S10, flagsForFuzzing: () => E9 }); var init_expr_5T3UU5KE = __esm({ - "../node_modules/just-bash/dist/bundle/chunks/expr-5T3UU5KE.js"() { + "node_modules/just-bash/dist/bundle/chunks/expr-5T3UU5KE.js"() { init_chunk_YFG2CMIF(); init_chunk_YNYSPYQ5(); init_chunk_3THT3N7L(); @@ -27093,7 +27093,7 @@ var init_expr_5T3UU5KE = __esm({ } }); -// ../node_modules/just-bash/dist/bundle/chunks/chunk-EIZGF4BS.js +// node_modules/just-bash/dist/bundle/chunks/chunk-EIZGF4BS.js function L10(n24) { function h18(r10, u12) { return r10 << u12 | r10 >>> 32 - u12; @@ -27182,30 +27182,30 @@ function S11(n24, h18, g17) { } var F13; var init_chunk_EIZGF4BS = __esm({ - "../node_modules/just-bash/dist/bundle/chunks/chunk-EIZGF4BS.js"() { + "node_modules/just-bash/dist/bundle/chunks/chunk-EIZGF4BS.js"() { init_chunk_74CEPOFO(); F13 = /* @__PURE__ */ new Map([["sha1", "SHA-1"], ["sha256", "SHA-256"]]); } }); -// ../node_modules/just-bash/dist/bundle/chunks/chunk-APT7OOP2.js +// node_modules/just-bash/dist/bundle/chunks/chunk-APT7OOP2.js var s6, o11; var init_chunk_APT7OOP2 = __esm({ - "../node_modules/just-bash/dist/bundle/chunks/chunk-APT7OOP2.js"() { + "node_modules/just-bash/dist/bundle/chunks/chunk-APT7OOP2.js"() { init_chunk_EIZGF4BS(); s6 = S11("md5sum", "md5", "compute MD5 message digest"); o11 = { name: "md5sum", flags: [{ flag: "-c", type: "boolean" }], needsFiles: true }; } }); -// ../node_modules/just-bash/dist/bundle/chunks/md5sum-INMIK4DX.js +// node_modules/just-bash/dist/bundle/chunks/md5sum-INMIK4DX.js var md5sum_INMIK4DX_exports = {}; __export(md5sum_INMIK4DX_exports, { flagsForFuzzing: () => o11, md5sumCommand: () => s6 }); var init_md5sum_INMIK4DX = __esm({ - "../node_modules/just-bash/dist/bundle/chunks/md5sum-INMIK4DX.js"() { + "node_modules/just-bash/dist/bundle/chunks/md5sum-INMIK4DX.js"() { init_chunk_APT7OOP2(); init_chunk_EIZGF4BS(); init_chunk_74CEPOFO(); @@ -27213,24 +27213,24 @@ var init_md5sum_INMIK4DX = __esm({ } }); -// ../node_modules/just-bash/dist/bundle/chunks/chunk-XKQRETAK.js +// node_modules/just-bash/dist/bundle/chunks/chunk-XKQRETAK.js var a9, m22; var init_chunk_XKQRETAK = __esm({ - "../node_modules/just-bash/dist/bundle/chunks/chunk-XKQRETAK.js"() { + "node_modules/just-bash/dist/bundle/chunks/chunk-XKQRETAK.js"() { init_chunk_EIZGF4BS(); a9 = S11("sha1sum", "sha1", "compute SHA1 message digest"); m22 = { name: "sha1sum", flags: [{ flag: "-c", type: "boolean" }], needsFiles: true }; } }); -// ../node_modules/just-bash/dist/bundle/chunks/sha1sum-VJPNLNU6.js +// node_modules/just-bash/dist/bundle/chunks/sha1sum-VJPNLNU6.js var sha1sum_VJPNLNU6_exports = {}; __export(sha1sum_VJPNLNU6_exports, { flagsForFuzzing: () => m22, sha1sumCommand: () => a9 }); var init_sha1sum_VJPNLNU6 = __esm({ - "../node_modules/just-bash/dist/bundle/chunks/sha1sum-VJPNLNU6.js"() { + "node_modules/just-bash/dist/bundle/chunks/sha1sum-VJPNLNU6.js"() { init_chunk_XKQRETAK(); init_chunk_EIZGF4BS(); init_chunk_74CEPOFO(); @@ -27238,24 +27238,24 @@ var init_sha1sum_VJPNLNU6 = __esm({ } }); -// ../node_modules/just-bash/dist/bundle/chunks/chunk-5V6VZH6T.js +// node_modules/just-bash/dist/bundle/chunks/chunk-5V6VZH6T.js var a10, m23; var init_chunk_5V6VZH6T = __esm({ - "../node_modules/just-bash/dist/bundle/chunks/chunk-5V6VZH6T.js"() { + "node_modules/just-bash/dist/bundle/chunks/chunk-5V6VZH6T.js"() { init_chunk_EIZGF4BS(); a10 = S11("sha256sum", "sha256", "compute SHA256 message digest"); m23 = { name: "sha256sum", flags: [{ flag: "-c", type: "boolean" }], needsFiles: true }; } }); -// ../node_modules/just-bash/dist/bundle/chunks/sha256sum-PI32XWXY.js +// node_modules/just-bash/dist/bundle/chunks/sha256sum-PI32XWXY.js var sha256sum_PI32XWXY_exports = {}; __export(sha256sum_PI32XWXY_exports, { flagsForFuzzing: () => m23, sha256sumCommand: () => a10 }); var init_sha256sum_PI32XWXY = __esm({ - "../node_modules/just-bash/dist/bundle/chunks/sha256sum-PI32XWXY.js"() { + "node_modules/just-bash/dist/bundle/chunks/sha256sum-PI32XWXY.js"() { init_chunk_5V6VZH6T(); init_chunk_EIZGF4BS(); init_chunk_74CEPOFO(); @@ -27263,7 +27263,7 @@ var init_sha256sum_PI32XWXY = __esm({ } }); -// ../node_modules/just-bash/dist/bundle/chunks/chunk-CR5AFCPT.js +// node_modules/just-bash/dist/bundle/chunks/chunk-CR5AFCPT.js import { open as ct4 } from "node:fs/promises"; function oe4(i11) { try { @@ -27521,7 +27521,7 @@ async function Qt2(i11, e6) { } var Te3, ze4, fe4, Le3, je4, _e3, He3, We3, nt4, x21, D11, M12, J9, _9, L11, S12, st4, X8, Z10, Q6, $15, ft4, Ae3, ce6, mt4, Be3, d12, R5, h14, Ie4, Oe3, De4, b22, Je4, U7, ue6, Ve3, qe4, Ge3, E10, xe5, Nt4, ie5, H11, W10, ur2, xr2, dr2, Ye3, Ke3, et4, he6, we4, Ht3, Wt3, Vt2, qt, Gt3, Dr2, Mr; var init_chunk_CR5AFCPT = __esm({ - "../node_modules/just-bash/dist/bundle/chunks/chunk-CR5AFCPT.js"() { + "node_modules/just-bash/dist/bundle/chunks/chunk-CR5AFCPT.js"() { init_chunk_74CEPOFO(); init_chunk_DXB73IDG(); Te3 = o3((ae9) => { @@ -28796,23 +28796,23 @@ var init_chunk_CR5AFCPT = __esm({ } }); -// ../node_modules/just-bash/dist/bundle/chunks/file-ZIGAJ4YS.js +// node_modules/just-bash/dist/bundle/chunks/file-ZIGAJ4YS.js var file_ZIGAJ4YS_exports = {}; __export(file_ZIGAJ4YS_exports, { fileCommand: () => Dr2, flagsForFuzzing: () => Mr }); var init_file_ZIGAJ4YS = __esm({ - "../node_modules/just-bash/dist/bundle/chunks/file-ZIGAJ4YS.js"() { + "node_modules/just-bash/dist/bundle/chunks/file-ZIGAJ4YS.js"() { init_chunk_CR5AFCPT(); init_chunk_74CEPOFO(); init_chunk_DXB73IDG(); } }); -// ../node_modules/@mixmark-io/domino/lib/Event.js +// node_modules/@mixmark-io/domino/lib/Event.js var require_Event = __commonJS({ - "../node_modules/@mixmark-io/domino/lib/Event.js"(exports, module) { + "node_modules/@mixmark-io/domino/lib/Event.js"(exports, module) { "use strict"; module.exports = Event; Event.CAPTURING_PHASE = 1; @@ -28867,9 +28867,9 @@ var require_Event = __commonJS({ } }); -// ../node_modules/@mixmark-io/domino/lib/UIEvent.js +// node_modules/@mixmark-io/domino/lib/UIEvent.js var require_UIEvent = __commonJS({ - "../node_modules/@mixmark-io/domino/lib/UIEvent.js"(exports, module) { + "node_modules/@mixmark-io/domino/lib/UIEvent.js"(exports, module) { "use strict"; var Event = require_Event(); module.exports = UIEvent; @@ -28889,9 +28889,9 @@ var require_UIEvent = __commonJS({ } }); -// ../node_modules/@mixmark-io/domino/lib/MouseEvent.js +// node_modules/@mixmark-io/domino/lib/MouseEvent.js var require_MouseEvent = __commonJS({ - "../node_modules/@mixmark-io/domino/lib/MouseEvent.js"(exports, module) { + "node_modules/@mixmark-io/domino/lib/MouseEvent.js"(exports, module) { "use strict"; var UIEvent = require_UIEvent(); module.exports = MouseEvent; @@ -28950,9 +28950,9 @@ var require_MouseEvent = __commonJS({ } }); -// ../node_modules/@mixmark-io/domino/lib/DOMException.js +// node_modules/@mixmark-io/domino/lib/DOMException.js var require_DOMException = __commonJS({ - "../node_modules/@mixmark-io/domino/lib/DOMException.js"(exports, module) { + "node_modules/@mixmark-io/domino/lib/DOMException.js"(exports, module) { "use strict"; module.exports = DOMException; var INDEX_SIZE_ERR = 1; @@ -29087,16 +29087,16 @@ var require_DOMException = __commonJS({ } }); -// ../node_modules/@mixmark-io/domino/lib/config.js +// node_modules/@mixmark-io/domino/lib/config.js var require_config = __commonJS({ - "../node_modules/@mixmark-io/domino/lib/config.js"(exports) { + "node_modules/@mixmark-io/domino/lib/config.js"(exports) { exports.isApiWritable = !globalThis.__domino_frozen__; } }); -// ../node_modules/@mixmark-io/domino/lib/utils.js +// node_modules/@mixmark-io/domino/lib/utils.js var require_utils = __commonJS({ - "../node_modules/@mixmark-io/domino/lib/utils.js"(exports) { + "node_modules/@mixmark-io/domino/lib/utils.js"(exports) { "use strict"; var DOMException = require_DOMException(); var ERR = DOMException; @@ -29209,9 +29209,9 @@ var require_utils = __commonJS({ } }); -// ../node_modules/@mixmark-io/domino/lib/EventTarget.js +// node_modules/@mixmark-io/domino/lib/EventTarget.js var require_EventTarget = __commonJS({ - "../node_modules/@mixmark-io/domino/lib/EventTarget.js"(exports, module) { + "node_modules/@mixmark-io/domino/lib/EventTarget.js"(exports, module) { "use strict"; var Event = require_Event(); var MouseEvent = require_MouseEvent(); @@ -29455,9 +29455,9 @@ var require_EventTarget = __commonJS({ } }); -// ../node_modules/@mixmark-io/domino/lib/LinkedList.js +// node_modules/@mixmark-io/domino/lib/LinkedList.js var require_LinkedList = __commonJS({ - "../node_modules/@mixmark-io/domino/lib/LinkedList.js"(exports, module) { + "node_modules/@mixmark-io/domino/lib/LinkedList.js"(exports, module) { "use strict"; var utils = require_utils(); var LinkedList = module.exports = { @@ -29505,9 +29505,9 @@ var require_LinkedList = __commonJS({ } }); -// ../node_modules/@mixmark-io/domino/lib/NodeUtils.js +// node_modules/@mixmark-io/domino/lib/NodeUtils.js var require_NodeUtils = __commonJS({ - "../node_modules/@mixmark-io/domino/lib/NodeUtils.js"(exports, module) { + "node_modules/@mixmark-io/domino/lib/NodeUtils.js"(exports, module) { "use strict"; module.exports = { // NOTE: The `serializeOne()` function used to live on the `Node.prototype` @@ -29705,9 +29705,9 @@ var require_NodeUtils = __commonJS({ } }); -// ../node_modules/@mixmark-io/domino/lib/Node.js +// node_modules/@mixmark-io/domino/lib/Node.js var require_Node = __commonJS({ - "../node_modules/@mixmark-io/domino/lib/Node.js"(exports, module) { + "node_modules/@mixmark-io/domino/lib/Node.js"(exports, module) { "use strict"; module.exports = Node; var EventTarget = require_EventTarget(); @@ -30305,9 +30305,9 @@ var require_Node = __commonJS({ } }); -// ../node_modules/@mixmark-io/domino/lib/NodeList.es6.js +// node_modules/@mixmark-io/domino/lib/NodeList.es6.js var require_NodeList_es6 = __commonJS({ - "../node_modules/@mixmark-io/domino/lib/NodeList.es6.js"(exports, module) { + "node_modules/@mixmark-io/domino/lib/NodeList.es6.js"(exports, module) { "use strict"; module.exports = class NodeList extends Array { constructor(a15) { @@ -30325,9 +30325,9 @@ var require_NodeList_es6 = __commonJS({ } }); -// ../node_modules/@mixmark-io/domino/lib/NodeList.es5.js +// node_modules/@mixmark-io/domino/lib/NodeList.es5.js var require_NodeList_es5 = __commonJS({ - "../node_modules/@mixmark-io/domino/lib/NodeList.es5.js"(exports, module) { + "node_modules/@mixmark-io/domino/lib/NodeList.es5.js"(exports, module) { "use strict"; function item(i11) { return this[i11] || null; @@ -30341,9 +30341,9 @@ var require_NodeList_es5 = __commonJS({ } }); -// ../node_modules/@mixmark-io/domino/lib/NodeList.js +// node_modules/@mixmark-io/domino/lib/NodeList.js var require_NodeList = __commonJS({ - "../node_modules/@mixmark-io/domino/lib/NodeList.js"(exports, module) { + "node_modules/@mixmark-io/domino/lib/NodeList.js"(exports, module) { "use strict"; var NodeList; try { @@ -30355,9 +30355,9 @@ var require_NodeList = __commonJS({ } }); -// ../node_modules/@mixmark-io/domino/lib/ContainerNode.js +// node_modules/@mixmark-io/domino/lib/ContainerNode.js var require_ContainerNode = __commonJS({ - "../node_modules/@mixmark-io/domino/lib/ContainerNode.js"(exports, module) { + "node_modules/@mixmark-io/domino/lib/ContainerNode.js"(exports, module) { "use strict"; module.exports = ContainerNode; var Node = require_Node(); @@ -30426,9 +30426,9 @@ var require_ContainerNode = __commonJS({ } }); -// ../node_modules/@mixmark-io/domino/lib/xmlnames.js +// node_modules/@mixmark-io/domino/lib/xmlnames.js var require_xmlnames = __commonJS({ - "../node_modules/@mixmark-io/domino/lib/xmlnames.js"(exports) { + "node_modules/@mixmark-io/domino/lib/xmlnames.js"(exports) { "use strict"; exports.isValidName = isValidName; exports.isValidQName = isValidQName; @@ -30470,9 +30470,9 @@ var require_xmlnames = __commonJS({ } }); -// ../node_modules/@mixmark-io/domino/lib/attributes.js +// node_modules/@mixmark-io/domino/lib/attributes.js var require_attributes = __commonJS({ - "../node_modules/@mixmark-io/domino/lib/attributes.js"(exports) { + "node_modules/@mixmark-io/domino/lib/attributes.js"(exports) { "use strict"; var utils = require_utils(); exports.property = function(attr) { @@ -30602,9 +30602,9 @@ var require_attributes = __commonJS({ } }); -// ../node_modules/@mixmark-io/domino/lib/FilteredElementList.js +// node_modules/@mixmark-io/domino/lib/FilteredElementList.js var require_FilteredElementList = __commonJS({ - "../node_modules/@mixmark-io/domino/lib/FilteredElementList.js"(exports, module) { + "node_modules/@mixmark-io/domino/lib/FilteredElementList.js"(exports, module) { "use strict"; module.exports = FilteredElementList; var Node = require_Node(); @@ -30674,9 +30674,9 @@ var require_FilteredElementList = __commonJS({ } }); -// ../node_modules/@mixmark-io/domino/lib/DOMTokenList.js +// node_modules/@mixmark-io/domino/lib/DOMTokenList.js var require_DOMTokenList = __commonJS({ - "../node_modules/@mixmark-io/domino/lib/DOMTokenList.js"(exports, module) { + "node_modules/@mixmark-io/domino/lib/DOMTokenList.js"(exports, module) { "use strict"; var utils = require_utils(); module.exports = DOMTokenList; @@ -30840,9 +30840,9 @@ var require_DOMTokenList = __commonJS({ } }); -// ../node_modules/@mixmark-io/domino/lib/select.js +// node_modules/@mixmark-io/domino/lib/select.js var require_select = __commonJS({ - "../node_modules/@mixmark-io/domino/lib/select.js"(exports, module) { + "node_modules/@mixmark-io/domino/lib/select.js"(exports, module) { "use strict"; var window2 = Object.create(null, { location: { get: function() { @@ -31574,9 +31574,9 @@ var require_select = __commonJS({ } }); -// ../node_modules/@mixmark-io/domino/lib/ChildNode.js +// node_modules/@mixmark-io/domino/lib/ChildNode.js var require_ChildNode = __commonJS({ - "../node_modules/@mixmark-io/domino/lib/ChildNode.js"(exports, module) { + "node_modules/@mixmark-io/domino/lib/ChildNode.js"(exports, module) { "use strict"; var Node = require_Node(); var LinkedList = require_LinkedList(); @@ -31675,9 +31675,9 @@ var require_ChildNode = __commonJS({ } }); -// ../node_modules/@mixmark-io/domino/lib/NonDocumentTypeChildNode.js +// node_modules/@mixmark-io/domino/lib/NonDocumentTypeChildNode.js var require_NonDocumentTypeChildNode = __commonJS({ - "../node_modules/@mixmark-io/domino/lib/NonDocumentTypeChildNode.js"(exports, module) { + "node_modules/@mixmark-io/domino/lib/NonDocumentTypeChildNode.js"(exports, module) { "use strict"; var Node = require_Node(); var NonDocumentTypeChildNode = { @@ -31702,9 +31702,9 @@ var require_NonDocumentTypeChildNode = __commonJS({ } }); -// ../node_modules/@mixmark-io/domino/lib/NamedNodeMap.js +// node_modules/@mixmark-io/domino/lib/NamedNodeMap.js var require_NamedNodeMap = __commonJS({ - "../node_modules/@mixmark-io/domino/lib/NamedNodeMap.js"(exports, module) { + "node_modules/@mixmark-io/domino/lib/NamedNodeMap.js"(exports, module) { "use strict"; module.exports = NamedNodeMap; var utils = require_utils(); @@ -31742,9 +31742,9 @@ var require_NamedNodeMap = __commonJS({ } }); -// ../node_modules/@mixmark-io/domino/lib/Element.js +// node_modules/@mixmark-io/domino/lib/Element.js var require_Element = __commonJS({ - "../node_modules/@mixmark-io/domino/lib/Element.js"(exports, module) { + "node_modules/@mixmark-io/domino/lib/Element.js"(exports, module) { "use strict"; module.exports = Element; var xml = require_xmlnames(); @@ -32778,9 +32778,9 @@ var require_Element = __commonJS({ } }); -// ../node_modules/@mixmark-io/domino/lib/Leaf.js +// node_modules/@mixmark-io/domino/lib/Leaf.js var require_Leaf = __commonJS({ - "../node_modules/@mixmark-io/domino/lib/Leaf.js"(exports, module) { + "node_modules/@mixmark-io/domino/lib/Leaf.js"(exports, module) { "use strict"; module.exports = Leaf; var Node = require_Node(); @@ -32819,9 +32819,9 @@ var require_Leaf = __commonJS({ } }); -// ../node_modules/@mixmark-io/domino/lib/CharacterData.js +// node_modules/@mixmark-io/domino/lib/CharacterData.js var require_CharacterData = __commonJS({ - "../node_modules/@mixmark-io/domino/lib/CharacterData.js"(exports, module) { + "node_modules/@mixmark-io/domino/lib/CharacterData.js"(exports, module) { "use strict"; module.exports = CharacterData; var Leaf = require_Leaf(); @@ -32930,9 +32930,9 @@ var require_CharacterData = __commonJS({ } }); -// ../node_modules/@mixmark-io/domino/lib/Text.js +// node_modules/@mixmark-io/domino/lib/Text.js var require_Text = __commonJS({ - "../node_modules/@mixmark-io/domino/lib/Text.js"(exports, module) { + "node_modules/@mixmark-io/domino/lib/Text.js"(exports, module) { "use strict"; module.exports = Text; var utils = require_utils(); @@ -33006,9 +33006,9 @@ var require_Text = __commonJS({ } }); -// ../node_modules/@mixmark-io/domino/lib/Comment.js +// node_modules/@mixmark-io/domino/lib/Comment.js var require_Comment = __commonJS({ - "../node_modules/@mixmark-io/domino/lib/Comment.js"(exports, module) { + "node_modules/@mixmark-io/domino/lib/Comment.js"(exports, module) { "use strict"; module.exports = Comment; var Node = require_Node(); @@ -33053,9 +33053,9 @@ var require_Comment = __commonJS({ } }); -// ../node_modules/@mixmark-io/domino/lib/DocumentFragment.js +// node_modules/@mixmark-io/domino/lib/DocumentFragment.js var require_DocumentFragment = __commonJS({ - "../node_modules/@mixmark-io/domino/lib/DocumentFragment.js"(exports, module) { + "node_modules/@mixmark-io/domino/lib/DocumentFragment.js"(exports, module) { "use strict"; module.exports = DocumentFragment; var Node = require_Node(); @@ -33118,9 +33118,9 @@ var require_DocumentFragment = __commonJS({ } }); -// ../node_modules/@mixmark-io/domino/lib/ProcessingInstruction.js +// node_modules/@mixmark-io/domino/lib/ProcessingInstruction.js var require_ProcessingInstruction = __commonJS({ - "../node_modules/@mixmark-io/domino/lib/ProcessingInstruction.js"(exports, module) { + "node_modules/@mixmark-io/domino/lib/ProcessingInstruction.js"(exports, module) { "use strict"; module.exports = ProcessingInstruction; var Node = require_Node(); @@ -33170,9 +33170,9 @@ var require_ProcessingInstruction = __commonJS({ } }); -// ../node_modules/@mixmark-io/domino/lib/NodeFilter.js +// node_modules/@mixmark-io/domino/lib/NodeFilter.js var require_NodeFilter = __commonJS({ - "../node_modules/@mixmark-io/domino/lib/NodeFilter.js"(exports, module) { + "node_modules/@mixmark-io/domino/lib/NodeFilter.js"(exports, module) { "use strict"; var NodeFilter = { // Constants for acceptNode() @@ -33203,9 +33203,9 @@ var require_NodeFilter = __commonJS({ } }); -// ../node_modules/@mixmark-io/domino/lib/NodeTraversal.js +// node_modules/@mixmark-io/domino/lib/NodeTraversal.js var require_NodeTraversal = __commonJS({ - "../node_modules/@mixmark-io/domino/lib/NodeTraversal.js"(exports, module) { + "node_modules/@mixmark-io/domino/lib/NodeTraversal.js"(exports, module) { "use strict"; var NodeTraversal = module.exports = { nextSkippingChildren, @@ -33270,9 +33270,9 @@ var require_NodeTraversal = __commonJS({ } }); -// ../node_modules/@mixmark-io/domino/lib/TreeWalker.js +// node_modules/@mixmark-io/domino/lib/TreeWalker.js var require_TreeWalker = __commonJS({ - "../node_modules/@mixmark-io/domino/lib/TreeWalker.js"(exports, module) { + "node_modules/@mixmark-io/domino/lib/TreeWalker.js"(exports, module) { "use strict"; module.exports = TreeWalker; var Node = require_Node(); @@ -33551,9 +33551,9 @@ var require_TreeWalker = __commonJS({ } }); -// ../node_modules/@mixmark-io/domino/lib/NodeIterator.js +// node_modules/@mixmark-io/domino/lib/NodeIterator.js var require_NodeIterator = __commonJS({ - "../node_modules/@mixmark-io/domino/lib/NodeIterator.js"(exports, module) { + "node_modules/@mixmark-io/domino/lib/NodeIterator.js"(exports, module) { "use strict"; module.exports = NodeIterator; var NodeFilter = require_NodeFilter(); @@ -33723,9 +33723,9 @@ var require_NodeIterator = __commonJS({ } }); -// ../node_modules/@mixmark-io/domino/lib/URL.js +// node_modules/@mixmark-io/domino/lib/URL.js var require_URL = __commonJS({ - "../node_modules/@mixmark-io/domino/lib/URL.js"(exports, module) { + "node_modules/@mixmark-io/domino/lib/URL.js"(exports, module) { "use strict"; module.exports = URL2; function URL2(url) { @@ -33889,9 +33889,9 @@ var require_URL = __commonJS({ } }); -// ../node_modules/@mixmark-io/domino/lib/CustomEvent.js +// node_modules/@mixmark-io/domino/lib/CustomEvent.js var require_CustomEvent = __commonJS({ - "../node_modules/@mixmark-io/domino/lib/CustomEvent.js"(exports, module) { + "node_modules/@mixmark-io/domino/lib/CustomEvent.js"(exports, module) { "use strict"; module.exports = CustomEvent; var Event = require_Event(); @@ -33904,9 +33904,9 @@ var require_CustomEvent = __commonJS({ } }); -// ../node_modules/@mixmark-io/domino/lib/events.js +// node_modules/@mixmark-io/domino/lib/events.js var require_events = __commonJS({ - "../node_modules/@mixmark-io/domino/lib/events.js"(exports, module) { + "node_modules/@mixmark-io/domino/lib/events.js"(exports, module) { "use strict"; module.exports = { Event: require_Event(), @@ -33917,9 +33917,9 @@ var require_events = __commonJS({ } }); -// ../node_modules/@mixmark-io/domino/lib/style_parser.js +// node_modules/@mixmark-io/domino/lib/style_parser.js var require_style_parser = __commonJS({ - "../node_modules/@mixmark-io/domino/lib/style_parser.js"(exports) { + "node_modules/@mixmark-io/domino/lib/style_parser.js"(exports) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.hyphenate = exports.parse = void 0; @@ -33987,9 +33987,9 @@ var require_style_parser = __commonJS({ } }); -// ../node_modules/@mixmark-io/domino/lib/CSSStyleDeclaration.js +// node_modules/@mixmark-io/domino/lib/CSSStyleDeclaration.js var require_CSSStyleDeclaration = __commonJS({ - "../node_modules/@mixmark-io/domino/lib/CSSStyleDeclaration.js"(exports, module) { + "node_modules/@mixmark-io/domino/lib/CSSStyleDeclaration.js"(exports, module) { "use strict"; var { parse } = require_style_parser(); module.exports = function(elt) { @@ -34171,9 +34171,9 @@ var require_CSSStyleDeclaration = __commonJS({ } }); -// ../node_modules/@mixmark-io/domino/lib/URLUtils.js +// node_modules/@mixmark-io/domino/lib/URLUtils.js var require_URLUtils = __commonJS({ - "../node_modules/@mixmark-io/domino/lib/URLUtils.js"(exports, module) { + "node_modules/@mixmark-io/domino/lib/URLUtils.js"(exports, module) { "use strict"; var URL2 = require_URL(); module.exports = URLUtils; @@ -34418,9 +34418,9 @@ var require_URLUtils = __commonJS({ } }); -// ../node_modules/@mixmark-io/domino/lib/defineElement.js +// node_modules/@mixmark-io/domino/lib/defineElement.js var require_defineElement = __commonJS({ - "../node_modules/@mixmark-io/domino/lib/defineElement.js"(exports, module) { + "node_modules/@mixmark-io/domino/lib/defineElement.js"(exports, module) { "use strict"; var attributes = require_attributes(); var isApiWritable = require_config().isApiWritable; @@ -34482,9 +34482,9 @@ var require_defineElement = __commonJS({ } }); -// ../node_modules/@mixmark-io/domino/lib/htmlelts.js +// node_modules/@mixmark-io/domino/lib/htmlelts.js var require_htmlelts = __commonJS({ - "../node_modules/@mixmark-io/domino/lib/htmlelts.js"(exports) { + "node_modules/@mixmark-io/domino/lib/htmlelts.js"(exports) { "use strict"; var Node = require_Node(); var Element = require_Element(); @@ -36037,9 +36037,9 @@ var require_htmlelts = __commonJS({ } }); -// ../node_modules/@mixmark-io/domino/lib/svg.js +// node_modules/@mixmark-io/domino/lib/svg.js var require_svg = __commonJS({ - "../node_modules/@mixmark-io/domino/lib/svg.js"(exports) { + "node_modules/@mixmark-io/domino/lib/svg.js"(exports) { "use strict"; var Element = require_Element(); var defineElement = require_defineElement(); @@ -36166,9 +36166,9 @@ var require_svg = __commonJS({ } }); -// ../node_modules/@mixmark-io/domino/lib/MutationConstants.js +// node_modules/@mixmark-io/domino/lib/MutationConstants.js var require_MutationConstants = __commonJS({ - "../node_modules/@mixmark-io/domino/lib/MutationConstants.js"(exports, module) { + "node_modules/@mixmark-io/domino/lib/MutationConstants.js"(exports, module) { "use strict"; module.exports = { VALUE: 1, @@ -36187,9 +36187,9 @@ var require_MutationConstants = __commonJS({ } }); -// ../node_modules/@mixmark-io/domino/lib/Document.js +// node_modules/@mixmark-io/domino/lib/Document.js var require_Document = __commonJS({ - "../node_modules/@mixmark-io/domino/lib/Document.js"(exports, module) { + "node_modules/@mixmark-io/domino/lib/Document.js"(exports, module) { "use strict"; module.exports = Document; var Node = require_Node(); @@ -36931,9 +36931,9 @@ var require_Document = __commonJS({ } }); -// ../node_modules/@mixmark-io/domino/lib/DocumentType.js +// node_modules/@mixmark-io/domino/lib/DocumentType.js var require_DocumentType = __commonJS({ - "../node_modules/@mixmark-io/domino/lib/DocumentType.js"(exports, module) { + "node_modules/@mixmark-io/domino/lib/DocumentType.js"(exports, module) { "use strict"; module.exports = DocumentType; var Node = require_Node(); @@ -36970,9 +36970,9 @@ var require_DocumentType = __commonJS({ } }); -// ../node_modules/@mixmark-io/domino/lib/HTMLParser.js +// node_modules/@mixmark-io/domino/lib/HTMLParser.js var require_HTMLParser = __commonJS({ - "../node_modules/@mixmark-io/domino/lib/HTMLParser.js"(exports, module) { + "node_modules/@mixmark-io/domino/lib/HTMLParser.js"(exports, module) { "use strict"; module.exports = HTMLParser; var Document = require_Document(); @@ -45132,9 +45132,9 @@ var require_HTMLParser = __commonJS({ } }); -// ../node_modules/@mixmark-io/domino/lib/DOMImplementation.js +// node_modules/@mixmark-io/domino/lib/DOMImplementation.js var require_DOMImplementation = __commonJS({ - "../node_modules/@mixmark-io/domino/lib/DOMImplementation.js"(exports, module) { + "node_modules/@mixmark-io/domino/lib/DOMImplementation.js"(exports, module) { "use strict"; module.exports = DOMImplementation; var Document = require_Document(); @@ -45211,9 +45211,9 @@ var require_DOMImplementation = __commonJS({ } }); -// ../node_modules/@mixmark-io/domino/lib/Location.js +// node_modules/@mixmark-io/domino/lib/Location.js var require_Location = __commonJS({ - "../node_modules/@mixmark-io/domino/lib/Location.js"(exports, module) { + "node_modules/@mixmark-io/domino/lib/Location.js"(exports, module) { "use strict"; var URL2 = require_URL(); var URLUtils = require_URLUtils(); @@ -45251,9 +45251,9 @@ var require_Location = __commonJS({ } }); -// ../node_modules/@mixmark-io/domino/lib/NavigatorID.js +// node_modules/@mixmark-io/domino/lib/NavigatorID.js var require_NavigatorID = __commonJS({ - "../node_modules/@mixmark-io/domino/lib/NavigatorID.js"(exports, module) { + "node_modules/@mixmark-io/domino/lib/NavigatorID.js"(exports, module) { "use strict"; var NavigatorID = Object.create(null, { appCodeName: { value: "Mozilla" }, @@ -45273,9 +45273,9 @@ var require_NavigatorID = __commonJS({ } }); -// ../node_modules/@mixmark-io/domino/lib/WindowTimers.js +// node_modules/@mixmark-io/domino/lib/WindowTimers.js var require_WindowTimers = __commonJS({ - "../node_modules/@mixmark-io/domino/lib/WindowTimers.js"(exports, module) { + "node_modules/@mixmark-io/domino/lib/WindowTimers.js"(exports, module) { "use strict"; var WindowTimers = { setTimeout, @@ -45287,9 +45287,9 @@ var require_WindowTimers = __commonJS({ } }); -// ../node_modules/@mixmark-io/domino/lib/impl.js +// node_modules/@mixmark-io/domino/lib/impl.js var require_impl = __commonJS({ - "../node_modules/@mixmark-io/domino/lib/impl.js"(exports, module) { + "node_modules/@mixmark-io/domino/lib/impl.js"(exports, module) { "use strict"; var utils = require_utils(); exports = module.exports = { @@ -45318,9 +45318,9 @@ var require_impl = __commonJS({ } }); -// ../node_modules/@mixmark-io/domino/lib/Window.js +// node_modules/@mixmark-io/domino/lib/Window.js var require_Window = __commonJS({ - "../node_modules/@mixmark-io/domino/lib/Window.js"(exports, module) { + "node_modules/@mixmark-io/domino/lib/Window.js"(exports, module) { "use strict"; var DOMImplementation = require_DOMImplementation(); var EventTarget = require_EventTarget(); @@ -45386,9 +45386,9 @@ var require_Window = __commonJS({ } }); -// ../node_modules/@mixmark-io/domino/lib/index.js +// node_modules/@mixmark-io/domino/lib/index.js var require_lib = __commonJS({ - "../node_modules/@mixmark-io/domino/lib/index.js"(exports) { + "node_modules/@mixmark-io/domino/lib/index.js"(exports) { "use strict"; var DOMImplementation = require_DOMImplementation(); var HTMLParser = require_HTMLParser(); @@ -45469,9 +45469,9 @@ var require_lib = __commonJS({ } }); -// ../node_modules/turndown/lib/turndown.cjs.js +// node_modules/turndown/lib/turndown.cjs.js var require_turndown_cjs = __commonJS({ - "../node_modules/turndown/lib/turndown.cjs.js"(exports, module) { + "node_modules/turndown/lib/turndown.cjs.js"(exports, module) { "use strict"; function extend(destination) { for (var i11 = 1; i11 < arguments.length; i11++) { @@ -46114,10 +46114,10 @@ var require_turndown_cjs = __commonJS({ } }); -// ../node_modules/just-bash/dist/bundle/chunks/chunk-MDLLFABN.js +// node_modules/just-bash/dist/bundle/chunks/chunk-MDLLFABN.js var import_turndown, p18, g14, x22; var init_chunk_MDLLFABN = __esm({ - "../node_modules/just-bash/dist/bundle/chunks/chunk-MDLLFABN.js"() { + "node_modules/just-bash/dist/bundle/chunks/chunk-MDLLFABN.js"() { init_chunk_74CEPOFO(); import_turndown = __toESM(require_turndown_cjs(), 1); p18 = { name: "html-to-markdown", summary: "convert HTML to Markdown (BashEnv extension)", usage: "html-to-markdown [OPTION]... [FILE]", description: ["Convert HTML content to Markdown format using the turndown library.", "This is a non-standard BashEnv extension command, not available in regular bash.", "", "Read HTML from FILE or standard input and output Markdown to standard output.", "Commonly used with curl to convert web pages:", " curl -s https://example.com | html-to-markdown", "", "Supported HTML elements:", " - Headings (h1-h6) \u2192 # Markdown headings", " - Paragraphs (p) \u2192 Plain text with blank lines", " - Links (a) \u2192 [text](url)", " - Images (img) \u2192 ![alt](src)", " - Bold/Strong \u2192 **text**", " - Italic/Em \u2192 _text_", " - Code (code, pre) \u2192 `inline` or fenced blocks", " - Lists (ul, ol, li) \u2192 - or 1. items", " - Blockquotes \u2192 > quoted text", " - Horizontal rules (hr) \u2192 ---"], options: ["-b, --bullet=CHAR bullet character for unordered lists (-, +, or *)", "-c, --code=FENCE fence style for code blocks (``` or ~~~)", "-r, --hr=STRING string for horizontal rules (default: ---)", " --heading-style=STYLE", " heading style: 'atx' for # headings (default),", " 'setext' for underlined headings (h1/h2 only)", " --help display this help and exit"], examples: ["echo '

Hello

World

' | html-to-markdown", "html-to-markdown page.html", "curl -s https://example.com | html-to-markdown > page.md"] }; @@ -46165,21 +46165,21 @@ var init_chunk_MDLLFABN = __esm({ } }); -// ../node_modules/just-bash/dist/bundle/chunks/html-to-markdown-TFCECAGV.js +// node_modules/just-bash/dist/bundle/chunks/html-to-markdown-TFCECAGV.js var html_to_markdown_TFCECAGV_exports = {}; __export(html_to_markdown_TFCECAGV_exports, { flagsForFuzzing: () => x22, htmlToMarkdownCommand: () => g14 }); var init_html_to_markdown_TFCECAGV = __esm({ - "../node_modules/just-bash/dist/bundle/chunks/html-to-markdown-TFCECAGV.js"() { + "node_modules/just-bash/dist/bundle/chunks/html-to-markdown-TFCECAGV.js"() { init_chunk_MDLLFABN(); init_chunk_74CEPOFO(); init_chunk_DXB73IDG(); } }); -// ../node_modules/just-bash/dist/bundle/chunks/chunk-MLXIYONF.js +// node_modules/just-bash/dist/bundle/chunks/chunk-MLXIYONF.js function d13(n24) { let e6 = [], s10 = new Set(n24); e6.push(`Available commands: @@ -46201,7 +46201,7 @@ function d13(n24) { } var c11, h15, p19; var init_chunk_MLXIYONF = __esm({ - "../node_modules/just-bash/dist/bundle/chunks/chunk-MLXIYONF.js"() { + "node_modules/just-bash/dist/bundle/chunks/chunk-MLXIYONF.js"() { init_chunk_IPJHKYVM(); c11 = /* @__PURE__ */ new Map([["File operations", ["ls", "cat", "head", "tail", "wc", "touch", "mkdir", "rm", "cp", "mv", "ln", "chmod", "stat", "readlink"]], ["Text processing", ["grep", "sed", "awk", "sort", "uniq", "cut", "tr", "tee", "diff"]], ["Search", ["find"]], ["Navigation & paths", ["pwd", "basename", "dirname", "tree", "du"]], ["Environment & shell", ["echo", "printf", "env", "printenv", "export", "alias", "unalias", "history", "clear", "true", "false", "bash", "sh"]], ["Data processing", ["xargs", "jq", "base64", "date"]], ["Network", ["curl", "html-to-markdown"]]]); h15 = { name: "help", async execute(n24, e6) { @@ -46226,24 +46226,24 @@ Otherwise, lists all available commands. } }); -// ../node_modules/just-bash/dist/bundle/chunks/help-VVWX7SA5.js +// node_modules/just-bash/dist/bundle/chunks/help-VVWX7SA5.js var help_VVWX7SA5_exports = {}; __export(help_VVWX7SA5_exports, { flagsForFuzzing: () => p19, helpCommand: () => h15 }); var init_help_VVWX7SA5 = __esm({ - "../node_modules/just-bash/dist/bundle/chunks/help-VVWX7SA5.js"() { + "node_modules/just-bash/dist/bundle/chunks/help-VVWX7SA5.js"() { init_chunk_MLXIYONF(); init_chunk_IPJHKYVM(); init_chunk_DXB73IDG(); } }); -// ../node_modules/just-bash/dist/bundle/chunks/chunk-A65PWWJC.js +// node_modules/just-bash/dist/bundle/chunks/chunk-A65PWWJC.js var g15, w17, A8, v21; var init_chunk_A65PWWJC = __esm({ - "../node_modules/just-bash/dist/bundle/chunks/chunk-A65PWWJC.js"() { + "node_modules/just-bash/dist/bundle/chunks/chunk-A65PWWJC.js"() { init_chunk_HWKDQ44K(); init_chunk_74CEPOFO(); g15 = { name: "which", summary: "locate a command", usage: "which [-as] program ...", options: ["-a List all instances of executables found", "-s No output, just return 0 if found, 1 if not", "--help display this help and exit"] }; @@ -46271,14 +46271,14 @@ var init_chunk_A65PWWJC = __esm({ } }); -// ../node_modules/just-bash/dist/bundle/chunks/which-XZHEH76L.js +// node_modules/just-bash/dist/bundle/chunks/which-XZHEH76L.js var which_XZHEH76L_exports = {}; __export(which_XZHEH76L_exports, { flagsForFuzzing: () => v21, whichCommand: () => A8 }); var init_which_XZHEH76L = __esm({ - "../node_modules/just-bash/dist/bundle/chunks/which-XZHEH76L.js"() { + "node_modules/just-bash/dist/bundle/chunks/which-XZHEH76L.js"() { init_chunk_A65PWWJC(); init_chunk_HWKDQ44K(); init_chunk_74CEPOFO(); @@ -46286,7 +46286,7 @@ var init_which_XZHEH76L = __esm({ } }); -// ../node_modules/just-bash/dist/bundle/chunks/chunk-MHTUABJP.js +// node_modules/just-bash/dist/bundle/chunks/chunk-MHTUABJP.js async function c12(e6, t6) { if (e6.length > 0 && e6[0] !== "-") { let i11 = t6.fs.resolvePath(t6.cwd, e6[0]); @@ -46313,78 +46313,78 @@ async function c12(e6, t6) { } var l5, a11; var init_chunk_MHTUABJP = __esm({ - "../node_modules/just-bash/dist/bundle/chunks/chunk-MHTUABJP.js"() { + "node_modules/just-bash/dist/bundle/chunks/chunk-MHTUABJP.js"() { l5 = { name: "tac", execute: c12 }; a11 = { name: "tac", flags: [], stdinType: "text", needsFiles: true }; } }); -// ../node_modules/just-bash/dist/bundle/chunks/tac-SJGXQ4T2.js +// node_modules/just-bash/dist/bundle/chunks/tac-SJGXQ4T2.js var tac_SJGXQ4T2_exports = {}; __export(tac_SJGXQ4T2_exports, { flagsForFuzzing: () => a11, tac: () => l5 }); var init_tac_SJGXQ4T2 = __esm({ - "../node_modules/just-bash/dist/bundle/chunks/tac-SJGXQ4T2.js"() { + "node_modules/just-bash/dist/bundle/chunks/tac-SJGXQ4T2.js"() { init_chunk_MHTUABJP(); init_chunk_DXB73IDG(); } }); -// ../node_modules/just-bash/dist/bundle/chunks/chunk-4HHKTUW3.js +// node_modules/just-bash/dist/bundle/chunks/chunk-4HHKTUW3.js async function t5(e6, n24) { return { stdout: `localhost `, stderr: "", exitCode: 0 }; } var o12, s7; var init_chunk_4HHKTUW3 = __esm({ - "../node_modules/just-bash/dist/bundle/chunks/chunk-4HHKTUW3.js"() { + "node_modules/just-bash/dist/bundle/chunks/chunk-4HHKTUW3.js"() { o12 = { name: "hostname", execute: t5 }; s7 = { name: "hostname", flags: [] }; } }); -// ../node_modules/just-bash/dist/bundle/chunks/hostname-BK6HG2DE.js +// node_modules/just-bash/dist/bundle/chunks/hostname-BK6HG2DE.js var hostname_BK6HG2DE_exports = {}; __export(hostname_BK6HG2DE_exports, { flagsForFuzzing: () => s7, hostname: () => o12 }); var init_hostname_BK6HG2DE = __esm({ - "../node_modules/just-bash/dist/bundle/chunks/hostname-BK6HG2DE.js"() { + "node_modules/just-bash/dist/bundle/chunks/hostname-BK6HG2DE.js"() { init_chunk_4HHKTUW3(); init_chunk_DXB73IDG(); } }); -// ../node_modules/just-bash/dist/bundle/chunks/chunk-HJQJAYMS.js +// node_modules/just-bash/dist/bundle/chunks/chunk-HJQJAYMS.js async function e5(t6, o14) { return { stdout: `user `, stderr: "", exitCode: 0 }; } var a12, n23; var init_chunk_HJQJAYMS = __esm({ - "../node_modules/just-bash/dist/bundle/chunks/chunk-HJQJAYMS.js"() { + "node_modules/just-bash/dist/bundle/chunks/chunk-HJQJAYMS.js"() { a12 = { name: "whoami", execute: e5 }; n23 = { name: "whoami", flags: [] }; } }); -// ../node_modules/just-bash/dist/bundle/chunks/whoami-DGKU3D2X.js +// node_modules/just-bash/dist/bundle/chunks/whoami-DGKU3D2X.js var whoami_DGKU3D2X_exports = {}; __export(whoami_DGKU3D2X_exports, { flagsForFuzzing: () => n23, whoami: () => a12 }); var init_whoami_DGKU3D2X = __esm({ - "../node_modules/just-bash/dist/bundle/chunks/whoami-DGKU3D2X.js"() { + "node_modules/just-bash/dist/bundle/chunks/whoami-DGKU3D2X.js"() { init_chunk_HJQJAYMS(); init_chunk_DXB73IDG(); } }); -// ../node_modules/just-bash/dist/bundle/chunks/chunk-PP6PSHAB.js +// node_modules/just-bash/dist/bundle/chunks/chunk-PP6PSHAB.js async function x23(a15, u12) { let o14 = "octal", n24 = [], i11 = []; for (let t6 = 0; t6 < a15.length; t6++) { @@ -46435,26 +46435,26 @@ async function x23(a15, u12) { } var $16, v22; var init_chunk_PP6PSHAB = __esm({ - "../node_modules/just-bash/dist/bundle/chunks/chunk-PP6PSHAB.js"() { + "node_modules/just-bash/dist/bundle/chunks/chunk-PP6PSHAB.js"() { $16 = { name: "od", execute: x23 }; v22 = { name: "od", flags: [{ flag: "-c", type: "boolean" }, { flag: "-A", type: "value", valueHint: "string" }, { flag: "-t", type: "value", valueHint: "string" }, { flag: "-N", type: "value", valueHint: "number" }], stdinType: "text", needsFiles: true }; } }); -// ../node_modules/just-bash/dist/bundle/chunks/od-VJEF2UR5.js +// node_modules/just-bash/dist/bundle/chunks/od-VJEF2UR5.js var od_VJEF2UR5_exports = {}; __export(od_VJEF2UR5_exports, { flagsForFuzzing: () => v22, od: () => $16 }); var init_od_VJEF2UR5 = __esm({ - "../node_modules/just-bash/dist/bundle/chunks/od-VJEF2UR5.js"() { + "node_modules/just-bash/dist/bundle/chunks/od-VJEF2UR5.js"() { init_chunk_PP6PSHAB(); init_chunk_DXB73IDG(); } }); -// ../node_modules/just-bash/dist/bundle/chunks/chunk-LTZRCH7N.js +// node_modules/just-bash/dist/bundle/chunks/chunk-LTZRCH7N.js import { constants as x24, gunzipSync as F14, gzipSync as S13 } from "node:zlib"; function E11(e6) { return e6.best ? x24.Z_BEST_COMPRESSION : e6.level8 ? 8 : e6.level7 ? 7 : e6.level6 ? 6 : e6.level5 ? 5 : e6.level4 ? 4 : e6.level3 ? 3 : e6.level2 ? 2 : e6.fast ? x24.Z_BEST_SPEED : x24.Z_DEFAULT_COMPRESSION; @@ -46678,7 +46678,7 @@ async function C14(e6, t6, r10) { } var O10, U8, D12, T11, G5, M13, Z11, R6, K9, j10; var init_chunk_LTZRCH7N = __esm({ - "../node_modules/just-bash/dist/bundle/chunks/chunk-LTZRCH7N.js"() { + "node_modules/just-bash/dist/bundle/chunks/chunk-LTZRCH7N.js"() { init_chunk_HWKDQ44K(); init_chunk_74CEPOFO(); O10 = { name: "gzip", summary: "compress or expand files", usage: "gzip [OPTION]... [FILE]...", description: `Compress FILEs (by default, in-place). @@ -46708,7 +46708,7 @@ When no FILE is given, or when FILE is -, read from standard input.`, options: [ } }); -// ../node_modules/just-bash/dist/bundle/chunks/gzip-AQXSGOVS.js +// node_modules/just-bash/dist/bundle/chunks/gzip-AQXSGOVS.js var gzip_AQXSGOVS_exports = {}; __export(gzip_AQXSGOVS_exports, { flagsForFuzzing: () => R6, @@ -46719,7 +46719,7 @@ __export(gzip_AQXSGOVS_exports, { zcatFlagsForFuzzing: () => j10 }); var init_gzip_AQXSGOVS = __esm({ - "../node_modules/just-bash/dist/bundle/chunks/gzip-AQXSGOVS.js"() { + "node_modules/just-bash/dist/bundle/chunks/gzip-AQXSGOVS.js"() { init_chunk_LTZRCH7N(); init_chunk_HWKDQ44K(); init_chunk_74CEPOFO(); @@ -46727,9 +46727,9 @@ var init_gzip_AQXSGOVS = __esm({ } }); -// ../node_modules/amdefine/amdefine.js +// node_modules/amdefine/amdefine.js var require_amdefine = __commonJS({ - "../node_modules/amdefine/amdefine.js"(exports, module) { + "node_modules/amdefine/amdefine.js"(exports, module) { "use strict"; function amdefine(module2, requireFn) { "use strict"; @@ -46918,9 +46918,9 @@ var require_amdefine = __commonJS({ } }); -// ../node_modules/compressjs/main.js +// node_modules/compressjs/main.js var require_main = __commonJS({ - "../node_modules/compressjs/main.js"(exports, module) { + "node_modules/compressjs/main.js"(exports, module) { if (typeof define2 !== "function") { define2 = require_amdefine()(module); } @@ -46956,7 +46956,7 @@ var require_main = __commonJS({ } }); -// ../node_modules/just-bash/dist/bundle/chunks/chunk-ZXL7TQLN.js +// node_modules/just-bash/dist/bundle/chunks/chunk-ZXL7TQLN.js function v24(e6, t6, n24, r10) { r10 && F15.encodeInto(r10, e6.subarray(t6, t6 + n24)); } @@ -48111,7 +48111,7 @@ async function pt4(e6, t6, n24) { } var import_compressjs, j11, ue7, fe5, Z12, Be4, Ne4, De5, $17, F15, de7, b24, X9, Le4, We4, Ye4, O11, W12, k13, M14, ye5, B5, N11, D13, L13, y20, xe6, ve5, Me4, ot4, Ft3, zt2; var init_chunk_ZXL7TQLN = __esm({ - "../node_modules/just-bash/dist/bundle/chunks/chunk-ZXL7TQLN.js"() { + "node_modules/just-bash/dist/bundle/chunks/chunk-ZXL7TQLN.js"() { init_chunk_X2AJGDEF(); init_chunk_5QMZ5MUS(); init_chunk_YNYSPYQ5(); @@ -48193,14 +48193,14 @@ var init_chunk_ZXL7TQLN = __esm({ } }); -// ../node_modules/just-bash/dist/bundle/chunks/tar-232RCEFK.js +// node_modules/just-bash/dist/bundle/chunks/tar-232RCEFK.js var tar_232RCEFK_exports = {}; __export(tar_232RCEFK_exports, { flagsForFuzzing: () => zt2, tarCommand: () => Ft3 }); var init_tar_232RCEFK = __esm({ - "../node_modules/just-bash/dist/bundle/chunks/tar-232RCEFK.js"() { + "node_modules/just-bash/dist/bundle/chunks/tar-232RCEFK.js"() { init_chunk_ZXL7TQLN(); init_chunk_X2AJGDEF(); init_chunk_5QMZ5MUS(); @@ -48210,10 +48210,10 @@ var init_tar_232RCEFK = __esm({ } }); -// ../node_modules/just-bash/dist/bundle/chunks/chunk-SYMJJMQ4.js +// node_modules/just-bash/dist/bundle/chunks/chunk-SYMJJMQ4.js var xe7; var init_chunk_SYMJJMQ4 = __esm({ - "../node_modules/just-bash/dist/bundle/chunks/chunk-SYMJJMQ4.js"() { + "node_modules/just-bash/dist/bundle/chunks/chunk-SYMJJMQ4.js"() { init_chunk_DXB73IDG(); xe7 = o3((de10, pe7) => { (function(oe7, R13) { @@ -48821,7 +48821,7 @@ var init_chunk_SYMJJMQ4 = __esm({ } }); -// ../node_modules/just-bash/dist/bundle/chunks/chunk-XORM457F.js +// node_modules/just-bash/dist/bundle/chunks/chunk-XORM457F.js function St4(s10, e6) { let t6 = [], n24 = e6.exec(s10); for (; n24; ) { @@ -49774,7 +49774,7 @@ function Mh(s10) { } var Xi, O12, Ke5, Us, Pt3, Js, z9, Mt4, Je6, C16, We5, xt5, Ge5, Tr2, Qe5, He5, Cr2, nn, Jt3, an2, se9, cn2, ie7, Te5, re5, Oe5, tt5, Zt3, hn2, ke5, mn2, yn2, to, io, Nn2, os2, Tn2, mo, go, bo, Cn2, Pn2, vo, Mo, Vn3, xo, lt5, ut6, dt6, gs2, Xn2, Dn2, Xo, Qo, Ce5, ta, na, ei, si, ca, ua, pa2, ya, oi, va, Ta, Ia, Ss2, gi, bi, Si, Ra, Ua, Pi, Ha, za, Za, be6, el, tl, sl, il, cl, ji, Nt5, V11, _e5, x26, fl, ul, dl, hl, Be5, Sl2, El, Al2, Ps2, we6, $l, As2, Ei, T12, Kl, Fe4, Rl, Yl, Ul, Jl, Qi, Gl, tr2, bt4, kh, qh, Ja, Ph, hg, pg; var init_chunk_XORM457F = __esm({ - "../node_modules/just-bash/dist/bundle/chunks/chunk-XORM457F.js"() { + "node_modules/just-bash/dist/bundle/chunks/chunk-XORM457F.js"() { init_chunk_SYMJJMQ4(); init_chunk_BBXLRYSX(); init_chunk_7TSDKFEO(); @@ -54259,14 +54259,14 @@ EXAMPLES: } }); -// ../node_modules/just-bash/dist/bundle/chunks/yq-MJMAR36V.js +// node_modules/just-bash/dist/bundle/chunks/yq-MJMAR36V.js var yq_MJMAR36V_exports = {}; __export(yq_MJMAR36V_exports, { flagsForFuzzing: () => pg, yqCommand: () => hg }); var init_yq_MJMAR36V = __esm({ - "../node_modules/just-bash/dist/bundle/chunks/yq-MJMAR36V.js"() { + "node_modules/just-bash/dist/bundle/chunks/yq-MJMAR36V.js"() { init_chunk_XORM457F(); init_chunk_SYMJJMQ4(); init_chunk_BBXLRYSX(); @@ -54282,7 +54282,7 @@ var init_yq_MJMAR36V = __esm({ } }); -// ../node_modules/just-bash/dist/bundle/chunks/chunk-F55TLFGB.js +// node_modules/just-bash/dist/bundle/chunks/chunk-F55TLFGB.js function j12() { return /* @__PURE__ */ Object.create(null); } @@ -54369,28 +54369,28 @@ async function k14(e6, o14) { } var w18; var init_chunk_F55TLFGB = __esm({ - "../node_modules/just-bash/dist/bundle/chunks/chunk-F55TLFGB.js"() { + "node_modules/just-bash/dist/bundle/chunks/chunk-F55TLFGB.js"() { init_chunk_SYMJJMQ4(); init_chunk_DXB73IDG(); w18 = q3(xe7(), 1); } }); -// ../node_modules/just-bash/dist/bundle/chunks/xan-view-ECQUO7AJ.js +// node_modules/just-bash/dist/bundle/chunks/xan-view-ECQUO7AJ.js var xan_view_ECQUO7AJ_exports = {}; __export(xan_view_ECQUO7AJ_exports, { cmdFlatten: () => W13, cmdView: () => k14 }); var init_xan_view_ECQUO7AJ = __esm({ - "../node_modules/just-bash/dist/bundle/chunks/xan-view-ECQUO7AJ.js"() { + "node_modules/just-bash/dist/bundle/chunks/xan-view-ECQUO7AJ.js"() { init_chunk_F55TLFGB(); init_chunk_SYMJJMQ4(); init_chunk_DXB73IDG(); } }); -// ../node_modules/just-bash/dist/bundle/chunks/chunk-UNYNJIFU.js +// node_modules/just-bash/dist/bundle/chunks/chunk-UNYNJIFU.js function V12(e6) { let n24 = [], s10 = new q14(e6).tokenize(), r10 = 0, o14 = () => s10[r10] || { type: "eof", value: "", pos: 0 }, i11 = () => s10[r10++]; for (; o14().type !== "eof"; ) { @@ -55454,7 +55454,7 @@ async function Ve6(e6, n24) { } var q14, He6, Je7, R9, J11, U10, z10, nt6, me7, Be6, lt6, Ye5, ut7, fn2, dn2; var init_chunk_UNYNJIFU = __esm({ - "../node_modules/just-bash/dist/bundle/chunks/chunk-UNYNJIFU.js"() { + "node_modules/just-bash/dist/bundle/chunks/chunk-UNYNJIFU.js"() { init_chunk_F55TLFGB(); init_chunk_SYMJJMQ4(); init_chunk_BBXLRYSX(); @@ -56080,14 +56080,14 @@ Run 'xan --help' for usage. } }); -// ../node_modules/just-bash/dist/bundle/chunks/xan-BXDXYEIB.js +// node_modules/just-bash/dist/bundle/chunks/xan-BXDXYEIB.js var xan_BXDXYEIB_exports = {}; __export(xan_BXDXYEIB_exports, { flagsForFuzzing: () => dn2, xanCommand: () => fn2 }); var init_xan_BXDXYEIB = __esm({ - "../node_modules/just-bash/dist/bundle/chunks/xan-BXDXYEIB.js"() { + "node_modules/just-bash/dist/bundle/chunks/xan-BXDXYEIB.js"() { init_chunk_UNYNJIFU(); init_chunk_F55TLFGB(); init_chunk_SYMJJMQ4(); @@ -56104,9 +56104,9 @@ var init_xan_BXDXYEIB = __esm({ } }); -// ../node_modules/sql.js/dist/sql-wasm.js +// node_modules/sql.js/dist/sql-wasm.js var require_sql_wasm = __commonJS({ - "../node_modules/sql.js/dist/sql-wasm.js"(exports, module) { + "node_modules/sql.js/dist/sql-wasm.js"(exports, module) { var initSqlJsPromise = void 0; var initSqlJs = function(moduleConfig) { if (initSqlJsPromise) { @@ -58247,7 +58247,7 @@ var require_sql_wasm = __commonJS({ } }); -// ../node_modules/just-bash/dist/bundle/chunks/chunk-HWBSOZZR.js +// node_modules/just-bash/dist/bundle/chunks/chunk-HWBSOZZR.js import { randomBytes as z11 } from "node:crypto"; import { existsSync as T13 } from "node:fs"; import { dirname as X10, join as x27 } from "node:path"; @@ -58536,7 +58536,7 @@ async function ie9(e6, t6, r10) { } var import_sql, Z14, v25, ne10, $e7, ye7; var init_chunk_HWBSOZZR = __esm({ - "../node_modules/just-bash/dist/bundle/chunks/chunk-HWBSOZZR.js"() { + "node_modules/just-bash/dist/bundle/chunks/chunk-HWBSOZZR.js"() { init_chunk_A5O5YHGN(); init_chunk_24IMIIXA(); init_chunk_5QMZ5MUS(); @@ -58600,7 +58600,7 @@ var init_chunk_HWBSOZZR = __esm({ } }); -// ../node_modules/just-bash/dist/bundle/chunks/sqlite3-56UMWEY3.js +// node_modules/just-bash/dist/bundle/chunks/sqlite3-56UMWEY3.js var sqlite3_56UMWEY3_exports = {}; __export(sqlite3_56UMWEY3_exports, { _internals: () => ne10, @@ -58608,7 +58608,7 @@ __export(sqlite3_56UMWEY3_exports, { sqlite3Command: () => $e7 }); var init_sqlite3_56UMWEY3 = __esm({ - "../node_modules/just-bash/dist/bundle/chunks/sqlite3-56UMWEY3.js"() { + "node_modules/just-bash/dist/bundle/chunks/sqlite3-56UMWEY3.js"() { init_chunk_HWBSOZZR(); init_chunk_A5O5YHGN(); init_chunk_24IMIIXA(); @@ -58619,13 +58619,13 @@ var init_sqlite3_56UMWEY3 = __esm({ } }); -// ../node_modules/just-bash/dist/bundle/chunks/chunk-S4EYC6T6.js +// node_modules/just-bash/dist/bundle/chunks/chunk-S4EYC6T6.js function _13() { return new r(E13.TOTAL); } var h16, a13, u11, s9, E13, S16, l6, R11, A11; var init_chunk_S4EYC6T6 = __esm({ - "../node_modules/just-bash/dist/bundle/chunks/chunk-S4EYC6T6.js"() { + "node_modules/just-bash/dist/bundle/chunks/chunk-S4EYC6T6.js"() { init_chunk_CWQS3NFK(); init_chunk_A5O5YHGN(); init_chunk_IPJHKYVM(); @@ -59109,7 +59109,7 @@ ${this.commandName}: execution timeout exceeded } }); -// ../node_modules/just-bash/dist/bundle/chunks/python3-SG3DOKBZ.js +// node_modules/just-bash/dist/bundle/chunks/python3-SG3DOKBZ.js var python3_SG3DOKBZ_exports = {}; __export(python3_SG3DOKBZ_exports, { _resetExecutionQueue: () => ie10, @@ -59228,7 +59228,7 @@ async function j13(r10, e6, t6, o14 = []) { } var U12, H13, I15, k16, N13, Y10, ce10; var init_python3_SG3DOKBZ = __esm({ - "../node_modules/just-bash/dist/bundle/chunks/python3-SG3DOKBZ.js"() { + "node_modules/just-bash/dist/bundle/chunks/python3-SG3DOKBZ.js"() { init_chunk_S4EYC6T6(); init_chunk_XHM67O4N(); init_chunk_CWQS3NFK(); @@ -59280,7 +59280,7 @@ var init_python3_SG3DOKBZ = __esm({ } }); -// ../node_modules/just-bash/dist/bundle/chunks/js-exec-4CW5N6RM.js +// node_modules/just-bash/dist/bundle/chunks/js-exec-4CW5N6RM.js var js_exec_4CW5N6RM_exports = {}; __export(js_exec_4CW5N6RM_exports, { jsExecCommand: () => de9, @@ -59378,7 +59378,7 @@ async function X11(t6, e6, r10, s10 = [], n24, u12, a15) { } var N14, H14, B9, _14, i10, w19, c13, o13, $19, de9, fe8; var init_js_exec_4CW5N6RM = __esm({ - "../node_modules/just-bash/dist/bundle/chunks/js-exec-4CW5N6RM.js"() { + "node_modules/just-bash/dist/bundle/chunks/js-exec-4CW5N6RM.js"() { init_chunk_S4EYC6T6(); init_chunk_XHM67O4N(); init_chunk_CWQS3NFK(); @@ -59518,7 +59518,7 @@ ${_14}`, exitCode: 1 }; } }); -// ../node_modules/just-bash/dist/bundle/chunks/curl-COE4TZE6.js +// node_modules/just-bash/dist/bundle/chunks/curl-COE4TZE6.js var curl_COE4TZE6_exports = {}; __export(curl_COE4TZE6_exports, { curlCommand: () => q15 @@ -59751,7 +59751,7 @@ function H15(s10, t6, a15) { } var F18, q15; var init_curl_COE4TZE6 = __esm({ - "../node_modules/just-bash/dist/bundle/chunks/curl-COE4TZE6.js"() { + "node_modules/just-bash/dist/bundle/chunks/curl-COE4TZE6.js"() { init_chunk_CWQS3NFK(); init_chunk_44UOCSGV(); init_chunk_74CEPOFO(); @@ -59787,7 +59787,7 @@ var init_curl_COE4TZE6 = __esm({ } }); -// ../node_modules/just-bash/dist/bundle/chunks/flag-coverage-LMTH7T5F.js +// node_modules/just-bash/dist/bundle/chunks/flag-coverage-LMTH7T5F.js var flag_coverage_LMTH7T5F_exports = {}; __export(flag_coverage_LMTH7T5F_exports, { emitFlagCoverage: () => Fa @@ -59801,7 +59801,7 @@ function Fa(r10, o14, Dr4) { } var Er2, Br; var init_flag_coverage_LMTH7T5F = __esm({ - "../node_modules/just-bash/dist/bundle/chunks/flag-coverage-LMTH7T5F.js"() { + "node_modules/just-bash/dist/bundle/chunks/flag-coverage-LMTH7T5F.js"() { init_chunk_ZXL7TQLN(); init_chunk_XORM457F(); init_chunk_UNYNJIFU(); @@ -59908,7 +59908,7 @@ var init_flag_coverage_LMTH7T5F = __esm({ } }); -// ../node_modules/just-bash/dist/bundle/chunks/expansion-ENLSRCXJ.js +// node_modules/just-bash/dist/bundle/chunks/expansion-ENLSRCXJ.js var expansion_ENLSRCXJ_exports = {}; __export(expansion_ENLSRCXJ_exports, { escapeGlobChars: () => X2, @@ -59925,7 +59925,7 @@ __export(expansion_ENLSRCXJ_exports, { isWordFullyQuoted: () => Al }); var init_expansion_ENLSRCXJ = __esm({ - "../node_modules/just-bash/dist/bundle/chunks/expansion-ENLSRCXJ.js"() { + "node_modules/just-bash/dist/bundle/chunks/expansion-ENLSRCXJ.js"() { init_chunk_FEIOJCZD(); init_chunk_YNYSPYQ5(); init_chunk_GFQRA5P5(); @@ -59933,10 +59933,10 @@ var init_expansion_ENLSRCXJ = __esm({ } }); -// ../dist/src/shell/deeplake-shell.js +// dist/src/shell/deeplake-shell.js import { createInterface } from "node:readline"; -// ../node_modules/just-bash/dist/bundle/index.js +// node_modules/just-bash/dist/bundle/index.js init_chunk_FEIOJCZD(); init_chunk_XHM67O4N(); init_chunk_CWQS3NFK(); @@ -66720,7 +66720,7 @@ function Bi3(e6) { } } -// ../dist/src/config.js +// dist/src/config.js import { readFileSync, existsSync as existsSync2 } from "node:fs"; import { join as join4 } from "node:path"; import { homedir, userInfo } from "node:os"; @@ -66752,10 +66752,10 @@ function loadConfig() { }; } -// ../dist/src/deeplake-api.js +// dist/src/deeplake-api.js import { randomUUID } from "node:crypto"; -// ../dist/src/utils/debug.js +// dist/src/utils/debug.js import { appendFileSync } from "node:fs"; import { join as join5 } from "node:path"; import { homedir as homedir2 } from "node:os"; @@ -66768,12 +66768,12 @@ function log(tag, msg) { `); } -// ../dist/src/utils/sql.js +// dist/src/utils/sql.js function sqlStr(value) { return value.replace(/\\/g, "\\\\").replace(/'/g, "''").replace(/\0/g, "").replace(/[\x01-\x08\x0b\x0c\x0e-\x1f\x7f]/g, ""); } -// ../dist/src/deeplake-api.js +// dist/src/deeplake-api.js var log2 = (msg) => log("sdk", msg); var DeeplakeApi = class { token; @@ -66907,7 +66907,7 @@ var DeeplakeApi = class { } }; -// ../dist/src/shell/deeplake-fs.js +// dist/src/shell/deeplake-fs.js import { basename as basename4, posix } from "node:path"; import { randomUUID as randomUUID2 } from "node:crypto"; var BATCH_SIZE = 10; @@ -67436,11 +67436,11 @@ var DeeplakeFs = class _DeeplakeFs { } }; -// ../node_modules/yargs-parser/build/lib/index.js +// node_modules/yargs-parser/build/lib/index.js import { format } from "util"; import { normalize, resolve as resolve4 } from "path"; -// ../node_modules/yargs-parser/build/lib/string-utils.js +// node_modules/yargs-parser/build/lib/string-utils.js function camelCase(str) { const isCamelCase = str !== str.toLowerCase() && str !== str.toUpperCase(); if (!isCamelCase) { @@ -67494,7 +67494,7 @@ function looksLikeNumber(x28) { return /^[-]?(?:\d+(?:\.\d*)?|\.\d+)(e[-+]?\d+)?$/.test(x28); } -// ../node_modules/yargs-parser/build/lib/tokenize-arg-string.js +// node_modules/yargs-parser/build/lib/tokenize-arg-string.js function tokenizeArgString(argString) { if (Array.isArray(argString)) { return argString.map((e6) => typeof e6 !== "string" ? e6 + "" : e6); @@ -67526,7 +67526,7 @@ function tokenizeArgString(argString) { return args; } -// ../node_modules/yargs-parser/build/lib/yargs-parser-types.js +// node_modules/yargs-parser/build/lib/yargs-parser-types.js var DefaultValuesForTypeKey; (function(DefaultValuesForTypeKey2) { DefaultValuesForTypeKey2["BOOLEAN"] = "boolean"; @@ -67535,7 +67535,7 @@ var DefaultValuesForTypeKey; DefaultValuesForTypeKey2["ARRAY"] = "array"; })(DefaultValuesForTypeKey || (DefaultValuesForTypeKey = {})); -// ../node_modules/yargs-parser/build/lib/yargs-parser.js +// node_modules/yargs-parser/build/lib/yargs-parser.js var mixin; var YargsParser = class { constructor(_mixin) { @@ -68375,7 +68375,7 @@ function stripQuotes(val) { return typeof val === "string" && (val[0] === "'" || val[0] === '"') && val[val.length - 1] === val[0] ? val.substring(1, val.length - 1) : val; } -// ../node_modules/yargs-parser/build/lib/index.js +// node_modules/yargs-parser/build/lib/index.js import { readFileSync as readFileSync2 } from "fs"; import { createRequire } from "node:module"; var _a3; @@ -68421,7 +68421,7 @@ yargsParser.decamelize = decamelize; yargsParser.looksLikeNumber = looksLikeNumber; var lib_default = yargsParser; -// ../dist/src/shell/grep-interceptor.js +// dist/src/shell/grep-interceptor.js function createGrepCommand(client, fs3, table) { return Yi2("grep", async (args, ctx) => { const parsed = lib_default(args, { @@ -68500,7 +68500,7 @@ function createGrepCommand(client, fs3, table) { }); } -// ../dist/src/shell/deeplake-shell.js +// dist/src/shell/deeplake-shell.js async function main() { const config = loadConfig(); if (!config) { diff --git a/claude-code/bundle/wiki-worker.js b/claude-code/bundle/wiki-worker.js index d17e563..9bec648 100755 --- a/claude-code/bundle/wiki-worker.js +++ b/claude-code/bundle/wiki-worker.js @@ -1,6 +1,6 @@ #!/usr/bin/env node -// ../dist/src/hooks/wiki-worker.js +// dist/src/hooks/wiki-worker.js import { readFileSync, writeFileSync, existsSync, appendFileSync, mkdirSync, rmSync } from "node:fs"; import { execFileSync } from "node:child_process"; import { join } from "node:path"; diff --git a/claude-code/esbuild.config.mjs b/claude-code/esbuild.config.mjs deleted file mode 100644 index a620b27..0000000 --- a/claude-code/esbuild.config.mjs +++ /dev/null @@ -1,37 +0,0 @@ -import { build } from "esbuild"; -import { chmodSync } from "node:fs"; - -// tsc compiles from repo root into dist/ -// Entry points reference the dist output -const hooks = [ - { entry: "../dist/src/hooks/session-start.js", out: "session-start" }, - { entry: "../dist/src/hooks/capture.js", out: "capture" }, - { entry: "../dist/src/hooks/pre-tool-use.js", out: "pre-tool-use" }, - { entry: "../dist/src/hooks/session-end.js", out: "session-end" }, - { entry: "../dist/src/hooks/wiki-worker.js", out: "wiki-worker" }, -]; - -const shell = [ - { entry: "../dist/src/shell/deeplake-shell.js", out: "shell/deeplake-shell" }, -]; - -const commands = [ - { entry: "../dist/src/commands/auth-login.js", out: "commands/auth-login" }, -]; - -const all = [...hooks, ...shell, ...commands]; - -await build({ - entryPoints: Object.fromEntries(all.map(h => [h.out, h.entry])), - bundle: true, - platform: "node", - format: "esm", - outdir: "bundle", - external: ["node:*", "node-liblzma", "@mongodb-js/zstd"], -}); - -for (const h of all) { - chmodSync(`bundle/${h.out}.js`, 0o755); -} - -console.log(`Bundled ${all.length} entries into bundle/`); diff --git a/esbuild.config.mjs b/esbuild.config.mjs new file mode 100644 index 0000000..54c3419 --- /dev/null +++ b/esbuild.config.mjs @@ -0,0 +1,46 @@ +import { build } from "esbuild"; +import { chmodSync } from "node:fs"; + +// Claude Code plugin +const ccHooks = [ + { entry: "dist/src/hooks/session-start.js", out: "session-start" }, + { entry: "dist/src/hooks/capture.js", out: "capture" }, + { entry: "dist/src/hooks/pre-tool-use.js", out: "pre-tool-use" }, + { entry: "dist/src/hooks/session-end.js", out: "session-end" }, + { entry: "dist/src/hooks/wiki-worker.js", out: "wiki-worker" }, +]; + +const ccShell = [ + { entry: "dist/src/shell/deeplake-shell.js", out: "shell/deeplake-shell" }, +]; + +const ccCommands = [ + { entry: "dist/src/commands/auth-login.js", out: "commands/auth-login" }, +]; + +const ccAll = [...ccHooks, ...ccShell, ...ccCommands]; + +await build({ + entryPoints: Object.fromEntries(ccAll.map(h => [h.out, h.entry])), + bundle: true, + platform: "node", + format: "esm", + outdir: "claude-code/bundle", + external: ["node:*", "node-liblzma", "@mongodb-js/zstd"], +}); + +for (const h of ccAll) { + chmodSync(`claude-code/bundle/${h.out}.js`, 0o755); +} + +// OpenClaw plugin +await build({ + entryPoints: { index: "openclaw/src/index.ts" }, + bundle: true, + platform: "node", + format: "esm", + outdir: "openclaw/dist", + external: ["node:*"], +}); + +console.log(`Built: ${ccAll.length} CC bundles + 1 OpenClaw bundle`); diff --git a/openclaw/esbuild.config.mjs b/openclaw/esbuild.config.mjs deleted file mode 100644 index 81c2230..0000000 --- a/openclaw/esbuild.config.mjs +++ /dev/null @@ -1,12 +0,0 @@ -import { build } from "esbuild"; - -await build({ - entryPoints: ["src/index.ts"], - bundle: true, - platform: "node", - format: "esm", - outdir: "dist", - external: ["node:*"], -}); - -console.log("Built openclaw/dist/index.js"); diff --git a/package.json b/package.json index 9dd6588..13abf7f 100644 --- a/package.json +++ b/package.json @@ -7,8 +7,8 @@ "deeplake-shell": "bundle/deeplake-shell.js" }, "scripts": { - "build": "tsc && cd claude-code && node esbuild.config.mjs", - "bundle": "cd claude-code && node esbuild.config.mjs", + "build": "tsc && node esbuild.config.mjs", + "bundle": "node esbuild.config.mjs", "dev": "tsc --watch", "shell": "tsx src/shell/deeplake-shell.ts", "test": "vitest run", From 963336ad69539dcd4924677251e5d8d6dac2fc02 Mon Sep 17 00:00:00 2001 From: kaghni Date: Thu, 9 Apr 2026 16:20:22 -0700 Subject: [PATCH 04/17] =?UTF-8?q?Fix=20test=20imports:=20../src/=20?= =?UTF-8?q?=E2=86=92=20../../src/=20for=20dynamic=20imports?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- claude-code/tests/sessions-table.test.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/claude-code/tests/sessions-table.test.ts b/claude-code/tests/sessions-table.test.ts index 893c381..ac35a11 100644 --- a/claude-code/tests/sessions-table.test.ts +++ b/claude-code/tests/sessions-table.test.ts @@ -215,7 +215,7 @@ describe("ensureSessionsTable schema", () => { // Import and call ensureSessionsTable // We test by checking the SQL passed to query - const { DeeplakeApi } = await import("../src/deeplake-api.js"); + const { DeeplakeApi } = await import("../../src/deeplake-api.js"); const api = new DeeplakeApi("token", "https://api.test", "org", "ws", "memory"); // Mock listTables to return empty (table doesn't exist) @@ -241,7 +241,7 @@ describe("ensureSessionsTable schema", () => { }); it("memory table uses summary column (not content_text)", async () => { - const { DeeplakeApi } = await import("../src/deeplake-api.js"); + const { DeeplakeApi } = await import("../../src/deeplake-api.js"); const api = new DeeplakeApi("token", "https://api.test", "org", "ws", "memory"); const queryCalls: string[] = []; api.query = vi.fn().mockImplementation(async (sql: string) => { @@ -260,7 +260,7 @@ describe("ensureSessionsTable schema", () => { }); it("memory table migration adds author column", async () => { - const { DeeplakeApi } = await import("../src/deeplake-api.js"); + const { DeeplakeApi } = await import("../../src/deeplake-api.js"); const api = new DeeplakeApi("token", "https://api.test", "org", "ws", "memory"); const queryCalls: string[] = []; api.query = vi.fn().mockImplementation(async (sql: string) => { From 746e5707d4d01e2a0501157b6145ac07bc15be54 Mon Sep 17 00:00:00 2001 From: kaghni Date: Thu, 9 Apr 2026 16:23:12 -0700 Subject: [PATCH 05/17] Remove redundant claude-code/package.json --- claude-code/package.json | 44 ---------------------------------------- 1 file changed, 44 deletions(-) delete mode 100644 claude-code/package.json diff --git a/claude-code/package.json b/claude-code/package.json deleted file mode 100644 index f42b78a..0000000 --- a/claude-code/package.json +++ /dev/null @@ -1,44 +0,0 @@ -{ - "name": "deeplake-claude-code-plugins", - "version": "0.5.10", - "description": "Claude Code plugin for Deeplake memory — captures file ops and syncs to Deeplake cloud", - "type": "module", - "bin": { - "deeplake-shell": "bundle/deeplake-shell.js" - }, - "scripts": { - "build": "tsc && node esbuild.config.mjs", - "bundle": "node esbuild.config.mjs", - "dev": "tsc --watch", - "shell": "tsx src/shell/deeplake-shell.ts", - "test": "vitest run", - "typecheck": "tsc --noEmit", - "ci": "npm run typecheck && npm test", - "prepare": "husky" - }, - "lint-staged": { - "*.ts": [ - "bash -c 'tsc --noEmit --skipLibCheck'" - ], - "*.md": [] - }, - "dependencies": { - "deeplake": "^0.3.30", - "just-bash": "^2.14.0", - "yargs-parser": "^22.0.0" - }, - "devDependencies": { - "@types/node": "^25.0.0", - "@types/yargs-parser": "^21.0.3", - "@vitest/coverage-v8": "^4.1.3", - "esbuild": "^0.28.0", - "husky": "^9.1.7", - "lint-staged": "^16.4.0", - "tsx": "^4.7.0", - "typescript": "^6.0.0", - "vitest": "^4.0.0" - }, - "engines": { - "node": ">=22.0.0" - } -} From bf717b001d33a85c24938ed9ec9fb8d31c676130 Mon Sep 17 00:00:00 2001 From: kaghni Date: Thu, 9 Apr 2026 16:28:13 -0700 Subject: [PATCH 06/17] Fix CI: update bundle path to claude-code/bundle/ --- .github/workflows/ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 18ba8db..e77c5b3 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -30,7 +30,7 @@ jobs: - name: Verify bundle/ directory is up to date run: | - git diff --exit-code bundle/ || { + git diff --exit-code claude-code/bundle/ || { echo "::error::bundle/ is out of date. Run 'npm run build' and commit the bundle/ directory." exit 1 } From b4df40c49661f8a84bb95dc0b231bb93b60fe796 Mon Sep 17 00:00:00 2001 From: kaghni Date: Thu, 9 Apr 2026 16:47:37 -0700 Subject: [PATCH 07/17] =?UTF-8?q?Rename=20to=20hivemind=20everywhere=20?= =?UTF-8?q?=E2=80=94=20remove=20all=20deeplake=20branding=20from=20user-fa?= =?UTF-8?q?cing=20text?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .claude-plugin/marketplace.json | 8 +- .claude-plugin/plugin.json | 6 +- CLAUDE.md | 10 +- README.md | 266 ------------------ claude-code/.claude-plugin/plugin.json | 9 +- claude-code/commands/login.md | 4 +- claude-code/commands/update.md | 2 +- claude-code/hooks/hooks.json | 2 +- .../SKILL.md | 10 +- claude-code/tests/autoupdate.test.ts | 10 +- openclaw/openclaw.plugin.json | 2 +- openclaw/skills/SKILL.md | 16 +- package.json | 4 +- 13 files changed, 41 insertions(+), 308 deletions(-) rename claude-code/skills/{deeplake-memory => hivemind-memory}/SKILL.md (89%) diff --git a/.claude-plugin/marketplace.json b/.claude-plugin/marketplace.json index 7faa2ff..67c57e5 100644 --- a/.claude-plugin/marketplace.json +++ b/.claude-plugin/marketplace.json @@ -1,20 +1,20 @@ { - "name": "deeplake-hivemind", + "name": "hivemind", "owner": { "name": "Activeloop", "email": "support@activeloop.ai" }, "metadata": { - "description": "Cloud-backed persistent shared memory for AI agents powered by Deeplake", + "description": "Cloud-backed persistent shared memory for AI agents powered by Activeloop", "version": "0.6.0" }, "plugins": [ { "name": "hivemind", - "description": "Persistent shared memory powered by Deeplake — captures all session activity and provides cross-session, cross-agent memory search", + "description": "Persistent shared memory powered by Activeloop — captures all session activity and provides cross-session, cross-agent memory search", "version": "0.6.0", "source": "./claude-code", - "homepage": "https://github.com/activeloopai/deeplake-hivemind" + "homepage": "https://github.com/activeloopai/hivemind" } ] } diff --git a/.claude-plugin/plugin.json b/.claude-plugin/plugin.json index 84a24bd..e9fcdc8 100644 --- a/.claude-plugin/plugin.json +++ b/.claude-plugin/plugin.json @@ -1,13 +1,13 @@ { - "name": "deeplake-hivemind", - "description": "Cloud-backed persistent memory powered by Deeplake — read, write, and share memory across Claude Code sessions and agents", + "name": "hivemind", + "description": "Cloud-backed persistent memory powered by Activeloop — read, write, and share memory across Claude Code sessions and agents", "version": "0.5.10", "author": { "name": "Activeloop", "url": "https://deeplake.ai" }, "homepage": "https://deeplake.ai", - "repository": "https://github.com/activeloopai/deeplake-claude-code-plugins", + "repository": "https://github.com/activeloopai/hivemind", "license": "Apache-2.0", "keywords": [ "memory", diff --git a/CLAUDE.md b/CLAUDE.md index 6aaba96..f50deb5 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -4,7 +4,7 @@ This file provides guidance to Claude Code (claude.ai/code) when working with co ## What This Is -A Claude Code plugin that provides persistent, cloud-backed memory for AI agents. It captures session activity (prompts, tool calls, responses) into a Deeplake SQL table and intercepts file operations targeting `~/.deeplake/memory/` through a virtual filesystem backed by Deeplake's API. +A Claude Code plugin that provides persistent, cloud-backed memory for AI agents. It captures session activity (prompts, tool calls, responses) into a Hivemind SQL table and intercepts file operations targeting `~/.deeplake/memory/` through a virtual filesystem backed by Hivemind's API. ## Commands @@ -14,7 +14,7 @@ npm run build # TypeScript compile + esbuild bundle (5 ESM outputs into npm run bundle # esbuild bundle only (skip tsc) npm run dev # TypeScript watch mode npm test # Run vitest tests -npm run shell # Interactive virtual shell against Deeplake +npm run shell # Interactive virtual shell against Hivemind DEEPLAKE_DEBUG=1 npm run shell # Shell with debug logging ``` @@ -26,7 +26,7 @@ The plugin operates through 5 Claude Code hooks defined in `hooks/hooks.json`. E 1. **SessionStart** (`session-start.js`) — Loads credentials, bootstraps the virtual FS cache, injects memory context into Claude's system prompt 2. **UserPromptSubmit** (`capture.js`) — Captures user prompts to session JSONL -3. **PreToolUse** (`pre-tool-use.js`) — Intercepts Read/Write/Edit/Glob/Grep/Bash targeting `~/.deeplake/memory/`, rewrites them to run through the virtual shell. Unsafe commands either pass through to Deeplake CLI (if installed) or show an install prompt +3. **PreToolUse** (`pre-tool-use.js`) — Intercepts Read/Write/Edit/Glob/Grep/Bash targeting `~/.deeplake/memory/`, rewrites them to run through the virtual shell. Unsafe commands either pass through to Hivemind CLI (if installed) or show an install prompt 4. **PostToolUse** (`capture.js`, async) — Captures tool name + input + response to session JSONL 5. **Stop** (`capture.js`) — Final capture before session ends @@ -35,7 +35,7 @@ Hooks receive/return JSON via stdin/stdout. ### Key Modules - **`src/config.ts`** — Credentials from `~/.deeplake/credentials.json` or env vars -- **`src/deeplake-api.ts`** — Two clients: local JSONL appender + HTTP SQL query client against Deeplake API +- **`src/deeplake-api.ts`** — Two clients: local JSONL appender + HTTP SQL query client against Hivemind API - **`src/path-match.ts`** — Detects if a tool call targets the memory path - **`src/shell/deeplake-fs.ts`** — Virtual filesystem (~1000 LOC) implementing `just-bash` IFileSystem. Handles bootstrap from SQL, read/write via SELECT/INSERT+DELETE, BM25 search via `content_text <#> 'pattern'`, batched writes (coalesced every 200ms) - **`src/shell/grep-interceptor.ts`** — Custom grep using BM25 search instead of regex @@ -56,7 +56,7 @@ Hooks receive/return JSON via stdin/stdout. ## Testing -Tests are in `tests/` using vitest. They mock the Deeplake API client to verify filesystem behavior: +Tests are in `tests/` using vitest. They mock the Hivemind API client to verify filesystem behavior: - `tests/deeplake-fs.test.ts` — Virtual filesystem operations (read/write/list/search) - `tests/grep-interceptor.test.ts` — BM25 search integration diff --git a/README.md b/README.md index b1d368c..e69de29 100644 --- a/README.md +++ b/README.md @@ -1,266 +0,0 @@ -# Deeplake Memory — Claude Code Plugin - -Persistent, shared memory for Claude Code backed by [Deeplake](https://deeplake.ai). Captures conversation history, tool calls, and responses across sessions and makes them searchable by any agent or user in the same workspace. - -## What it does - -- **Captures** every session's prompts, tool calls, and responses into a shared Deeplake table -- **Intercepts** file operations targeting `~/.deeplake/memory/` and routes them through a virtual filesystem backed by Deeplake cloud SQL -- **Provides** full-text search across all captured memory via `Grep pattern="keyword" path="~/.deeplake/memory"` -- **Upgrades** gracefully: basic mode (just-bash virtual FS) works out of the box; install the Deeplake CLI for full FUSE mount support - -## Installation - -### As a Claude Code plugin - -From within Claude Code, run: - -``` -/plugin marketplace add activeloopai/deeplake-claude-code-plugins -/plugin install deeplake-hivemind@deeplake-claude-code-plugins -/reload-plugins -/deeplake-hivemind:login -``` - -### Updating - -The plugin auto-updates by default — it checks for new versions on each session start and installs them automatically. You'll see a notice when an update is applied; run `/reload-plugins` to activate it. - -To manually update: - -``` -/deeplake-hivemind:update -``` - -To toggle auto-updates: - -``` -autoupdate off # disable (via org management CLI) -autoupdate on # re-enable -autoupdate # check current status -``` - -### From source (development) - -```bash -npm install -npm run build -claude --plugin-dir /path/to/deeplake-claude-code-plugins -/deeplake-hivemind:login -``` - -## Authentication - -After installing the plugin, run `/deeplake-hivemind:login` to authenticate. This opens a browser for SSO login via the OAuth Device Authorization Flow (RFC 8628). - -1. Run `/deeplake-hivemind:login` in Claude Code -2. Browser opens — sign in at Deeplake -3. Select your organization -4. Credentials saved to `~/.deeplake/credentials.json` (permissions: 0600) - -On subsequent sessions, the plugin detects existing credentials and connects automatically. - -To re-login or switch organizations: - -``` -/deeplake-hivemind:login -``` - -Alternatively, set environment variables directly: - -```bash -export DEEPLAKE_TOKEN=your-token -export DEEPLAKE_ORG_ID=your-org-id -export DEEPLAKE_WORKSPACE_ID=default # optional -``` -``` - -## ⚠️ Data Collection Notice - -This plugin captures the following data and stores it in your Deeplake workspace: - -| Data | What | Where | -|-----------------------|------------------------------------|---------------------------| -| User prompts | Every message you send to Claude | Shared Deeplake workspace | -| Tool calls | Tool name + full input | Shared Deeplake workspace | -| Tool responses | Full tool output | Shared Deeplake workspace | -| Assistant responses | Claude's final response text | Shared Deeplake workspace | -| Subagent activity | Subagent tool calls and responses | Shared Deeplake workspace | - -**All users with access to your Deeplake workspace can read this data.** - -A DATA NOTICE is displayed at the start of every session when capture is enabled. - -To opt out of capture: `export DEEPLAKE_CAPTURE=false` - -## Configuration - -| Variable | Default | Description | -|--------------------------|---------------------------|-------------------------------------------| -| `DEEPLAKE_TOKEN` | — | API token (auto-set by device login) | -| `DEEPLAKE_ORG_ID` | — | Organization ID (auto-set by device login)| -| `DEEPLAKE_WORKSPACE_ID` | `default` | Workspace name | -| `DEEPLAKE_API_URL` | `https://api.deeplake.ai` | API endpoint | -| `DEEPLAKE_TABLE` | `memory` | SQL table for summaries and virtual FS | -| `DEEPLAKE_SESSIONS_TABLE`| `sessions` | SQL table for per-event session capture | -| `DEEPLAKE_MEMORY_PATH` | `~/.deeplake/memory` | Path that triggers interception | -| `DEEPLAKE_CAPTURE` | `true` | Set to `false` to disable capture | -| `DEEPLAKE_DEBUG` | — | Set to `1` for verbose hook debug logs | - -### Debug mode and capture control - -```bash -# Enable debug logging (writes to ~/.deeplake/hook-debug.log) -DEEPLAKE_DEBUG=1 claude - -# Disable session capture -DEEPLAKE_CAPTURE=false claude -``` - -## Usage - -### Search memory - -In Claude Code, just ask: - -``` -"What was Emanuele working on?" -"Search deeplake memory for authentication" -"List files in ~/.deeplake/memory/" -``` - -Claude automatically checks both built-in memory and Deeplake memory when recalling information. - -### Interactive shell - -```bash -npm run shell -# ds:/$ ls / -# ds:/$ cat /session_abc123.jsonl -# ds:/$ echo "note" > /notes.txt -``` - -### One-shot commands - -```bash -npm run shell -- -c "ls /" -npm run shell -- -c "cat /CLAUDE.md" -npm run shell -- -c "grep -r 'keyword' /" -``` - -## Architecture - -``` -┌─────────────────────────────────────────────────────────────┐ -│ Claude Code │ -└──────────────────────────┬──────────────────────────────────┘ - │ -┌──────────────────────────▼──────────────────────────────────┐ -│ SessionStart │ -│ Auth login (device flow) + inject context + DATA NOTICE │ -└──────────────────────────┬──────────────────────────────────┘ - │ -┌──────────────────────────▼──────────────────────────────────┐ -│ UserPromptSubmit → capture.js → INSERT row into sessions │ -└──────────────────────────┬──────────────────────────────────┘ - │ -┌──────────────────────────▼──────────────────────────────────┐ -│ PreToolUse — intercept commands on ~/.deeplake/memory/ │ -│ │ -│ ├─ Read/Grep (fast path) → direct SQL query │ -│ ├─ safe (cat, ls, jq...) → just-bash + DeeplakeFS │ -│ ├─ unsafe + CLI installed → real bash + FUSE mount │ -│ ├─ unsafe + no CLI → deny + install prompt │ -│ └─ deeplake mount/login → pass through │ -└──────────────────────────┬──────────────────────────────────┘ - │ -┌──────────────────────────▼──────────────────────────────────┐ -│ PostToolUse (async) → capture.js → INSERT row into sessions│ -└──────────────────────────┬──────────────────────────────────┘ - │ -┌──────────────────────────▼──────────────────────────────────┐ -│ Stop → capture.js → INSERT row into sessions │ -└──────────────────────────┬──────────────────────────────────┘ - │ -┌──────────────────────────▼───────────────────────────────────┐ -│ SubagentStop (async) → capture.js → INSERT row into sessions│ -└──────────────────────────┬───────────────────────────────────┘ - │ -┌──────────────────────────▼──────────────────────────────────┐ -│ SessionEnd → spawns wiki-worker.js in background │ -│ → fetches events, runs claude -p, uploads summary │ -│ → /summaries/*.md + /index.md │ -└──────────────────────────┬──────────────────────────────────┘ - │ -┌──────────────────────────▼──────────────────────────────────┐ -│ Deeplake REST API │ -│ sessions table · memory table (summaries, index) │ -└─────────────────────────────────────────────────────────────┘ -``` - -### Hook events - -All capture hooks use a single unified `capture.js` bundle — one INSERT per event into the sessions SQL table. - -| Hook | Bundle | Purpose | Async | -|---------------------|------------------|-------------------------------------------------|-------| -| `SessionStart` | `session-start` | Auth login, inject context, DATA NOTICE | No | -| `UserPromptSubmit` | `capture` | Capture user message | No | -| `PreToolUse` | `pre-tool-use` | Intercept and rewrite memory-targeting commands | No | -| `PostToolUse` | `capture` | Capture tool call + response | Yes | -| `Stop` | `capture` | Capture assistant response | No | -| `SubagentStop` | `capture` | Capture subagent activity | Yes | -| `SessionEnd` | `session-end` | Spawn wiki-worker for AI summary | No | - -## Security - -- SQL values escaped with `sqlStr()`, `sqlLike()`, `sqlIdent()` (see `src/utils/sql.ts`) -- Only 80+ allowlisted builtins run in the virtual FS; unsafe binaries pass through or are denied -- Credentials stored with mode `0600`, config dir with mode `0700` -- Device flow login — no tokens in environment or code -- `DEEPLAKE_CAPTURE=false` fully disables data collection - -## Local development - -### Prerequisites - -- **Node.js >= 22** — install via [nodejs.org](https://nodejs.org) or a version manager: - ```bash - # nvm - nvm install 22 - - # brew - brew install node - ``` - -### Setup - -```bash -git clone https://github.com/activeloopai/deeplake-claude-code-plugins.git -cd deeplake-claude-code-plugins -npm install -npm run build # tsc + esbuild → bundle/ -``` - -### Commands - -```bash -npm run build # TypeScript compile + esbuild bundle -npm run bundle # esbuild bundle only (skip tsc) -npm run dev # TypeScript watch mode -npm test # vitest unit tests -npm run shell # interactive shell against real Deeplake -DEEPLAKE_DEBUG=1 npm run shell # with debug logging -``` - -### Test the plugin locally with Claude Code - -```bash -claude --plugin-dir . -``` - -After making changes, run `npm run build` and send a new message in Claude Code to pick up the updated hooks. - -## License - -Apache License 2.0 — © Activeloop, Inc. See [LICENSE](LICENSE) for details. diff --git a/claude-code/.claude-plugin/plugin.json b/claude-code/.claude-plugin/plugin.json index c87ed11..cf907de 100644 --- a/claude-code/.claude-plugin/plugin.json +++ b/claude-code/.claude-plugin/plugin.json @@ -1,17 +1,16 @@ { "name": "hivemind", - "description": "Cloud-backed persistent memory powered by Deeplake — read, write, and share memory across Claude Code sessions and agents", + "description": "Cloud-backed persistent memory powered by Activeloop — read, write, and share memory across Claude Code sessions and agents", "version": "0.6.0", "author": { "name": "Activeloop", - "url": "https://deeplake.ai" + "url": "https://activeloop.ai" }, - "homepage": "https://deeplake.ai", - "repository": "https://github.com/activeloopai/deeplake-hivemind", + "homepage": "https://activeloop.ai", + "repository": "https://github.com/activeloopai/hivemind", "license": "Apache-2.0", "keywords": [ "memory", - "deeplake", "persistent-memory", "shared-memory", "agent-memory" diff --git a/claude-code/commands/login.md b/claude-code/commands/login.md index 11e893b..1395768 100644 --- a/claude-code/commands/login.md +++ b/claude-code/commands/login.md @@ -1,5 +1,5 @@ --- -description: Log in to Deeplake and select your organization +description: Log in to Hivemind and select your organization allowed-tools: Bash --- @@ -11,7 +11,7 @@ node "${CLAUDE_PLUGIN_ROOT}/bundle/commands/auth-login.js" login If login succeeds, show this welcome message: -🐝 Welcome to Deeplake Hivemind! +🐝 Welcome to Hivemind! Your Claude Code agents can now talk to each other and share memory across sessions, teammates, and machines. diff --git a/claude-code/commands/update.md b/claude-code/commands/update.md index 897588c..da455a4 100644 --- a/claude-code/commands/update.md +++ b/claude-code/commands/update.md @@ -6,7 +6,7 @@ allowed-tools: Bash First refresh the marketplace cache, then update across all scopes: ```bash -claude plugin marketplace update deeplake-hivemind 2>/dev/null; claude plugin update hivemind@deeplake-hivemind --scope user 2>/dev/null; claude plugin update hivemind@deeplake-hivemind --scope project 2>/dev/null; claude plugin update hivemind@deeplake-hivemind --scope local 2>/dev/null; claude plugin update hivemind@deeplake-hivemind --scope managed 2>/dev/null; echo "Done." +claude plugin marketplace update hivemind 2>/dev/null; claude plugin update hivemind@hivemind --scope user 2>/dev/null; claude plugin update hivemind@hivemind --scope project 2>/dev/null; claude plugin update hivemind@hivemind --scope local 2>/dev/null; claude plugin update hivemind@hivemind --scope managed 2>/dev/null; echo "Done." ``` Tell the user to run `/reload-plugins` to apply the update. diff --git a/claude-code/hooks/hooks.json b/claude-code/hooks/hooks.json index 22f7829..53073eb 100644 --- a/claude-code/hooks/hooks.json +++ b/claude-code/hooks/hooks.json @@ -1,5 +1,5 @@ { - "description": "Deeplake memory — captures all session activity and provides memory search via ~/.deeplake/memory", + "description": "Hivemind memory — captures all session activity and provides memory search via ~/.deeplake/memory", "hooks": { "SessionStart": [ { diff --git a/claude-code/skills/deeplake-memory/SKILL.md b/claude-code/skills/hivemind-memory/SKILL.md similarity index 89% rename from claude-code/skills/deeplake-memory/SKILL.md rename to claude-code/skills/hivemind-memory/SKILL.md index e1105bf..b6c803a 100644 --- a/claude-code/skills/deeplake-memory/SKILL.md +++ b/claude-code/skills/hivemind-memory/SKILL.md @@ -1,15 +1,15 @@ --- -name: deeplake-memory -description: Global team and org memory powered by Deeplake. ALWAYS check BOTH built-in memory AND Deeplake memory when recalling information. +name: hivemind-memory +description: Global team and org memory powered by Activeloop. ALWAYS check BOTH built-in memory AND Hivemind memory when recalling information. allowed-tools: Grep Read Bash --- -# Deeplake Memory +# Hivemind Memory You have TWO memory sources. ALWAYS check BOTH when the user asks you to recall, remember, or look up ANY information: 1. **Your built-in memory** (`~/.claude/`) — personal per-project notes -2. **Deeplake global memory** (`~/.deeplake/memory/`) — global memory shared across all sessions, users, and agents in the org +2. **Hivemind global memory** (`~/.deeplake/memory/`) — global memory shared across all sessions, users, and agents in the org ## Memory Structure @@ -55,7 +55,7 @@ If a file returns empty after 2 attempts, skip it and move on. Report what you f ## Getting Started After installing the plugin: -1. Run `/deeplake-hivemind:login` to authenticate +1. Run `/hivemind:login` to authenticate 2. Start using memory — ask questions, Claude automatically captures and searches ## Configuration diff --git a/claude-code/tests/autoupdate.test.ts b/claude-code/tests/autoupdate.test.ts index e4e4ef3..46447f3 100644 --- a/claude-code/tests/autoupdate.test.ts +++ b/claude-code/tests/autoupdate.test.ts @@ -54,12 +54,12 @@ function buildUpdateNotice(current: string, latest: string, autoupdate: boolean, if (autoupdate) { if (updateSucceeded) { - return `\n\n✅ Deeplake Hivemind auto-updated: ${current} → ${latest}. Tell the user to run /reload-plugins to apply.`; + return `\n\n✅ Hivemind auto-updated: ${current} → ${latest}. Tell the user to run /reload-plugins to apply.`; } else { - return `\n\n⬆️ Deeplake Hivemind update available: ${current} → ${latest}. Auto-update failed — run /deeplake-hivemind:update to upgrade manually.`; + return `\n\n⬆️ Hivemind update available: ${current} → ${latest}. Auto-update failed — run /hivemind:update to upgrade manually.`; } } - return `\n\n⬆️ Deeplake Hivemind update available: ${current} → ${latest}. Run /deeplake-hivemind:update to upgrade.`; + return `\n\n⬆️ Hivemind update available: ${current} → ${latest}. Run /hivemind:update to upgrade.`; } describe("update notice generation", () => { @@ -82,13 +82,13 @@ describe("update notice generation", () => { const notice = buildUpdateNotice("0.3.8", "0.4.0", true, false); expect(notice).toContain("⬆️"); expect(notice).toContain("Auto-update failed"); - expect(notice).toContain("/deeplake-hivemind:update"); + expect(notice).toContain("/hivemind:update"); }); it("shows manual upgrade notice when autoupdate is off", () => { const notice = buildUpdateNotice("0.3.8", "0.4.0", false, null); expect(notice).toContain("⬆️"); - expect(notice).toContain("/deeplake-hivemind:update"); + expect(notice).toContain("/hivemind:update"); expect(notice).not.toContain("Auto-update failed"); expect(notice).not.toContain("✅"); }); diff --git a/openclaw/openclaw.plugin.json b/openclaw/openclaw.plugin.json index a25a21c..ac90681 100644 --- a/openclaw/openclaw.plugin.json +++ b/openclaw/openclaw.plugin.json @@ -2,7 +2,7 @@ "id": "hivemind", "kind": "memory", "name": "Hivemind Memory", - "description": "Cloud-backed shared memory powered by DeepLake — auto-capture and auto-recall via REST API", + "description": "Cloud-backed shared memory powered by Hivemind — auto-capture and auto-recall via REST API", "uiHints": { "autoCapture": { "label": "Auto-Capture" }, "autoRecall": { "label": "Auto-Recall" } diff --git a/openclaw/skills/SKILL.md b/openclaw/skills/SKILL.md index 1efd067..7e36a55 100644 --- a/openclaw/skills/SKILL.md +++ b/openclaw/skills/SKILL.md @@ -1,17 +1,17 @@ --- -name: deeplake-plugin -description: Cloud-backed shared memory for AI agents powered by DeepLake. Install once, memory persists across sessions, machines, and channels. +name: hivemind +description: Cloud-backed shared memory for AI agents powered by Hivemind. Install once, memory persists across sessions, machines, and channels. allowed-tools: Read --- -# DeepLake Memory +# Hivemind Memory -Cloud-backed memory that syncs across all agents via DeepLake REST API. +Cloud-backed memory that syncs across all agents via Hivemind REST API. ## Installation ```bash -openclaw plugins install deeplake-plugin +openclaw plugins install hivemind ``` After install, send a message. The plugin will send you an authentication link. Click it, sign in, and memory activates on the next message. No CLI needed. @@ -19,13 +19,13 @@ After install, send a message. The plugin will send you an authentication link. ## How it works The plugin automatically: -- **Captures** every conversation (user + assistant messages) to DeepLake cloud +- **Captures** every conversation (user + assistant messages) to Hivemind cloud - **Recalls** relevant memories before each agent turn via keyword search -- All data stored as structured rows in DeepLake — searchable, persistent, shared +- All data stored as structured rows in Hivemind — searchable, persistent, shared ## Sharing memory -Multiple agents on different machines share memory when users are in the same DeepLake organization. Invite teammates via the DeepLake dashboard. +Multiple agents on different machines share memory when users are in the same Hivemind organization. Invite teammates via the Hivemind dashboard. ## Troubleshooting diff --git a/package.json b/package.json index 13abf7f..6900fd7 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { - "name": "deeplake-hivemind", + "name": "hivemind", "version": "0.6.0", - "description": "Cloud-backed persistent shared memory for AI agents powered by Deeplake", + "description": "Cloud-backed persistent shared memory for AI agents powered by Activeloop", "type": "module", "bin": { "deeplake-shell": "bundle/deeplake-shell.js" From 0576daa58a11765ea9ff4a58268008caa15738b2 Mon Sep 17 00:00:00 2001 From: Emanuele Fenocchi Date: Fri, 10 Apr 2026 20:38:44 +0000 Subject: [PATCH 08/17] =?UTF-8?q?Remove=20BYTEA=20content=20column=20?= =?UTF-8?q?=E2=80=94=20use=20summary=20TEXT=20only?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit All file content is text (markdown, JSONL). The BYTEA content column duplicated the summary column with unnecessary hex encoding overhead. - Remove content: Buffer from WriteRow and PendingRow interfaces - Remove hex encoding from upsert, flush, appendFile, session-start, wiki-worker - Remove isText(), decodeContent() helpers and binary mime types - Prefetch uses SELECT summary instead of SELECT summary, content - CREATE TABLE no longer includes content BYTEA column --- claude-code/bundle/capture.js | 9 +- claude-code/bundle/pre-tool-use.js | 9 +- claude-code/bundle/session-start.js | 12 +- claude-code/bundle/wiki-worker.js | 5 +- claude-code/tests/deeplake-fs.test.ts | 104 +++------ claude-code/tests/real-table-test.mjs | 258 ++++++++++++---------- claude-code/tests/session-summary.test.ts | 41 ++-- claude-code/tests/sessions-table.test.ts | 16 +- src/deeplake-api.ts | 11 +- src/hooks/session-start.ts | 5 +- src/hooks/wiki-worker.ts | 7 +- src/shell/deeplake-fs.ts | 107 ++++----- 12 files changed, 255 insertions(+), 329 deletions(-) diff --git a/claude-code/bundle/capture.js b/claude-code/bundle/capture.js index 053d9b9..8811a20 100755 --- a/claude-code/bundle/capture.js +++ b/claude-code/bundle/capture.js @@ -186,13 +186,12 @@ var DeeplakeApi = class { log2(`commit: ${rows.length} rows`); } async upsertRowSql(row) { - const hex = row.content.toString("hex"); const ts = (/* @__PURE__ */ new Date()).toISOString(); const cd = row.creationDate ?? ts; const lud = row.lastUpdateDate ?? ts; const exists = await this.query(`SELECT path FROM "${this.tableName}" WHERE path = '${sqlStr(row.path)}' LIMIT 1`); if (exists.length > 0) { - let setClauses = `content = E'\\\\x${hex}', summary = E'${sqlStr(row.contentText)}', mime_type = '${sqlStr(row.mimeType)}', size_bytes = ${row.sizeBytes}, last_update_date = '${lud}'`; + let setClauses = `summary = E'${sqlStr(row.contentText)}', mime_type = '${sqlStr(row.mimeType)}', size_bytes = ${row.sizeBytes}, last_update_date = '${lud}'`; if (row.project !== void 0) setClauses += `, project = '${sqlStr(row.project)}'`; if (row.description !== void 0) @@ -200,8 +199,8 @@ var DeeplakeApi = class { await this.query(`UPDATE "${this.tableName}" SET ${setClauses} WHERE path = '${sqlStr(row.path)}'`); } else { const id = randomUUID(); - let cols = "id, path, filename, content, summary, mime_type, size_bytes, creation_date, last_update_date"; - let vals = `'${id}', '${sqlStr(row.path)}', '${sqlStr(row.filename)}', E'\\\\x${hex}', E'${sqlStr(row.contentText)}', '${sqlStr(row.mimeType)}', ${row.sizeBytes}, '${cd}', '${lud}'`; + let cols = "id, path, filename, summary, mime_type, size_bytes, creation_date, last_update_date"; + let vals = `'${id}', '${sqlStr(row.path)}', '${sqlStr(row.filename)}', E'${sqlStr(row.contentText)}', '${sqlStr(row.mimeType)}', ${row.sizeBytes}, '${cd}', '${lud}'`; if (row.project !== void 0) { cols += ", project"; vals += `, '${sqlStr(row.project)}'`; @@ -258,7 +257,7 @@ var DeeplakeApi = class { const tables = await this.listTables(); if (!tables.includes(tbl)) { log2(`table "${tbl}" not found, creating`); - await this.query(`CREATE TABLE IF NOT EXISTS "${tbl}" (id TEXT NOT NULL DEFAULT '', path TEXT NOT NULL DEFAULT '', filename TEXT NOT NULL DEFAULT '', content BYTEA NOT NULL DEFAULT ''::bytea, summary TEXT NOT NULL DEFAULT '', author TEXT NOT NULL DEFAULT '', mime_type TEXT NOT NULL DEFAULT 'application/octet-stream', size_bytes BIGINT NOT NULL DEFAULT 0, project TEXT NOT NULL DEFAULT '', description TEXT NOT NULL DEFAULT '', creation_date TEXT NOT NULL DEFAULT '', last_update_date TEXT NOT NULL DEFAULT '') USING deeplake`); + await this.query(`CREATE TABLE IF NOT EXISTS "${tbl}" (id TEXT NOT NULL DEFAULT '', path TEXT NOT NULL DEFAULT '', filename TEXT NOT NULL DEFAULT '', summary TEXT NOT NULL DEFAULT '', author TEXT NOT NULL DEFAULT '', mime_type TEXT NOT NULL DEFAULT 'text/plain', size_bytes BIGINT NOT NULL DEFAULT 0, project TEXT NOT NULL DEFAULT '', description TEXT NOT NULL DEFAULT '', creation_date TEXT NOT NULL DEFAULT '', last_update_date TEXT NOT NULL DEFAULT '') USING deeplake`); log2(`table "${tbl}" created`); } else { for (const col of ["project", "description", "creation_date", "last_update_date", "author"]) { diff --git a/claude-code/bundle/pre-tool-use.js b/claude-code/bundle/pre-tool-use.js index b391c1b..95bce5b 100755 --- a/claude-code/bundle/pre-tool-use.js +++ b/claude-code/bundle/pre-tool-use.js @@ -194,13 +194,12 @@ var DeeplakeApi = class { log2(`commit: ${rows.length} rows`); } async upsertRowSql(row) { - const hex = row.content.toString("hex"); const ts = (/* @__PURE__ */ new Date()).toISOString(); const cd = row.creationDate ?? ts; const lud = row.lastUpdateDate ?? ts; const exists = await this.query(`SELECT path FROM "${this.tableName}" WHERE path = '${sqlStr(row.path)}' LIMIT 1`); if (exists.length > 0) { - let setClauses = `content = E'\\\\x${hex}', summary = E'${sqlStr(row.contentText)}', mime_type = '${sqlStr(row.mimeType)}', size_bytes = ${row.sizeBytes}, last_update_date = '${lud}'`; + let setClauses = `summary = E'${sqlStr(row.contentText)}', mime_type = '${sqlStr(row.mimeType)}', size_bytes = ${row.sizeBytes}, last_update_date = '${lud}'`; if (row.project !== void 0) setClauses += `, project = '${sqlStr(row.project)}'`; if (row.description !== void 0) @@ -208,8 +207,8 @@ var DeeplakeApi = class { await this.query(`UPDATE "${this.tableName}" SET ${setClauses} WHERE path = '${sqlStr(row.path)}'`); } else { const id = randomUUID(); - let cols = "id, path, filename, content, summary, mime_type, size_bytes, creation_date, last_update_date"; - let vals = `'${id}', '${sqlStr(row.path)}', '${sqlStr(row.filename)}', E'\\\\x${hex}', E'${sqlStr(row.contentText)}', '${sqlStr(row.mimeType)}', ${row.sizeBytes}, '${cd}', '${lud}'`; + let cols = "id, path, filename, summary, mime_type, size_bytes, creation_date, last_update_date"; + let vals = `'${id}', '${sqlStr(row.path)}', '${sqlStr(row.filename)}', E'${sqlStr(row.contentText)}', '${sqlStr(row.mimeType)}', ${row.sizeBytes}, '${cd}', '${lud}'`; if (row.project !== void 0) { cols += ", project"; vals += `, '${sqlStr(row.project)}'`; @@ -266,7 +265,7 @@ var DeeplakeApi = class { const tables = await this.listTables(); if (!tables.includes(tbl)) { log2(`table "${tbl}" not found, creating`); - await this.query(`CREATE TABLE IF NOT EXISTS "${tbl}" (id TEXT NOT NULL DEFAULT '', path TEXT NOT NULL DEFAULT '', filename TEXT NOT NULL DEFAULT '', content BYTEA NOT NULL DEFAULT ''::bytea, summary TEXT NOT NULL DEFAULT '', author TEXT NOT NULL DEFAULT '', mime_type TEXT NOT NULL DEFAULT 'application/octet-stream', size_bytes BIGINT NOT NULL DEFAULT 0, project TEXT NOT NULL DEFAULT '', description TEXT NOT NULL DEFAULT '', creation_date TEXT NOT NULL DEFAULT '', last_update_date TEXT NOT NULL DEFAULT '') USING deeplake`); + await this.query(`CREATE TABLE IF NOT EXISTS "${tbl}" (id TEXT NOT NULL DEFAULT '', path TEXT NOT NULL DEFAULT '', filename TEXT NOT NULL DEFAULT '', summary TEXT NOT NULL DEFAULT '', author TEXT NOT NULL DEFAULT '', mime_type TEXT NOT NULL DEFAULT 'text/plain', size_bytes BIGINT NOT NULL DEFAULT 0, project TEXT NOT NULL DEFAULT '', description TEXT NOT NULL DEFAULT '', creation_date TEXT NOT NULL DEFAULT '', last_update_date TEXT NOT NULL DEFAULT '') USING deeplake`); log2(`table "${tbl}" created`); } else { for (const col of ["project", "description", "creation_date", "last_update_date", "author"]) { diff --git a/claude-code/bundle/session-start.js b/claude-code/bundle/session-start.js index eb2cfc2..9693a22 100755 --- a/claude-code/bundle/session-start.js +++ b/claude-code/bundle/session-start.js @@ -198,13 +198,12 @@ var DeeplakeApi = class { log2(`commit: ${rows.length} rows`); } async upsertRowSql(row) { - const hex = row.content.toString("hex"); const ts = (/* @__PURE__ */ new Date()).toISOString(); const cd = row.creationDate ?? ts; const lud = row.lastUpdateDate ?? ts; const exists = await this.query(`SELECT path FROM "${this.tableName}" WHERE path = '${sqlStr(row.path)}' LIMIT 1`); if (exists.length > 0) { - let setClauses = `content = E'\\\\x${hex}', summary = E'${sqlStr(row.contentText)}', mime_type = '${sqlStr(row.mimeType)}', size_bytes = ${row.sizeBytes}, last_update_date = '${lud}'`; + let setClauses = `summary = E'${sqlStr(row.contentText)}', mime_type = '${sqlStr(row.mimeType)}', size_bytes = ${row.sizeBytes}, last_update_date = '${lud}'`; if (row.project !== void 0) setClauses += `, project = '${sqlStr(row.project)}'`; if (row.description !== void 0) @@ -212,8 +211,8 @@ var DeeplakeApi = class { await this.query(`UPDATE "${this.tableName}" SET ${setClauses} WHERE path = '${sqlStr(row.path)}'`); } else { const id = randomUUID(); - let cols = "id, path, filename, content, summary, mime_type, size_bytes, creation_date, last_update_date"; - let vals = `'${id}', '${sqlStr(row.path)}', '${sqlStr(row.filename)}', E'\\\\x${hex}', E'${sqlStr(row.contentText)}', '${sqlStr(row.mimeType)}', ${row.sizeBytes}, '${cd}', '${lud}'`; + let cols = "id, path, filename, summary, mime_type, size_bytes, creation_date, last_update_date"; + let vals = `'${id}', '${sqlStr(row.path)}', '${sqlStr(row.filename)}', E'${sqlStr(row.contentText)}', '${sqlStr(row.mimeType)}', ${row.sizeBytes}, '${cd}', '${lud}'`; if (row.project !== void 0) { cols += ", project"; vals += `, '${sqlStr(row.project)}'`; @@ -270,7 +269,7 @@ var DeeplakeApi = class { const tables = await this.listTables(); if (!tables.includes(tbl)) { log2(`table "${tbl}" not found, creating`); - await this.query(`CREATE TABLE IF NOT EXISTS "${tbl}" (id TEXT NOT NULL DEFAULT '', path TEXT NOT NULL DEFAULT '', filename TEXT NOT NULL DEFAULT '', content BYTEA NOT NULL DEFAULT ''::bytea, summary TEXT NOT NULL DEFAULT '', author TEXT NOT NULL DEFAULT '', mime_type TEXT NOT NULL DEFAULT 'application/octet-stream', size_bytes BIGINT NOT NULL DEFAULT 0, project TEXT NOT NULL DEFAULT '', description TEXT NOT NULL DEFAULT '', creation_date TEXT NOT NULL DEFAULT '', last_update_date TEXT NOT NULL DEFAULT '') USING deeplake`); + await this.query(`CREATE TABLE IF NOT EXISTS "${tbl}" (id TEXT NOT NULL DEFAULT '', path TEXT NOT NULL DEFAULT '', filename TEXT NOT NULL DEFAULT '', summary TEXT NOT NULL DEFAULT '', author TEXT NOT NULL DEFAULT '', mime_type TEXT NOT NULL DEFAULT 'text/plain', size_bytes BIGINT NOT NULL DEFAULT 0, project TEXT NOT NULL DEFAULT '', description TEXT NOT NULL DEFAULT '', creation_date TEXT NOT NULL DEFAULT '', last_update_date TEXT NOT NULL DEFAULT '') USING deeplake`); log2(`table "${tbl}" created`); } else { for (const col of ["project", "description", "creation_date", "last_update_date", "author"]) { @@ -399,9 +398,8 @@ async function createPlaceholder(api, table, sessionId, cwd, userName, orgName, `- **Status**: in-progress`, "" ].join("\n"); - const hex = Buffer.from(content, "utf-8").toString("hex"); const filename = `${sessionId}.md`; - await api.query(`INSERT INTO "${table}" (id, path, filename, content, summary, author, mime_type, size_bytes, project, description, creation_date, last_update_date) VALUES ('${crypto.randomUUID()}', '${sqlStr(summaryPath)}', '${sqlStr(filename)}', E'\\\\x${hex}', E'${sqlStr(content)}', '${sqlStr(userName)}', 'text/markdown', ${Buffer.byteLength(content, "utf-8")}, '${sqlStr(projectName)}', 'in progress', '${now}', '${now}')`); + await api.query(`INSERT INTO "${table}" (id, path, filename, summary, author, mime_type, size_bytes, project, description, creation_date, last_update_date) VALUES ('${crypto.randomUUID()}', '${sqlStr(summaryPath)}', '${sqlStr(filename)}', E'${sqlStr(content)}', '${sqlStr(userName)}', 'text/markdown', ${Buffer.byteLength(content, "utf-8")}, '${sqlStr(projectName)}', 'in progress', '${now}', '${now}')`); wikiLog(`SessionStart: created placeholder for ${sessionId} (${cwd})`); } async function main() { diff --git a/claude-code/bundle/wiki-worker.js b/claude-code/bundle/wiki-worker.js index 9bec648..f3e864d 100755 --- a/claude-code/bundle/wiki-worker.js +++ b/claude-code/bundle/wiki-worker.js @@ -103,17 +103,16 @@ async function main() { if (existsSync(tmpSummary)) { const text = readFileSync(tmpSummary, "utf-8"); if (text.trim()) { - const hex = Buffer.from(text, "utf-8").toString("hex"); const fname = `${cfg.sessionId}.md`; const vpath = `/summaries/${cfg.userName}/${fname}`; const ts = (/* @__PURE__ */ new Date()).toISOString(); await query(`SELECT deeplake_sync_table('${cfg.memoryTable}')`); const existing = await query(`SELECT path FROM "${cfg.memoryTable}" WHERE path = '${esc(vpath)}' LIMIT 1`); if (existing.length > 0) { - await query(`UPDATE "${cfg.memoryTable}" SET content = E'\\\\x${hex}', summary = E'${esc(text)}', size_bytes = ${Buffer.byteLength(text)}, last_update_date = '${ts}' WHERE path = '${esc(vpath)}'`); + await query(`UPDATE "${cfg.memoryTable}" SET summary = E'${esc(text)}', size_bytes = ${Buffer.byteLength(text)}, last_update_date = '${ts}' WHERE path = '${esc(vpath)}'`); } else { const id = crypto.randomUUID(); - await query(`INSERT INTO "${cfg.memoryTable}" (id, path, filename, content, summary, author, mime_type, size_bytes, project, creation_date, last_update_date) VALUES ('${id}', '${esc(vpath)}', '${esc(fname)}', E'\\\\x${hex}', E'${esc(text)}', '${esc(cfg.userName)}', 'text/markdown', ${Buffer.byteLength(text)}, '${esc(cfg.project)}', '${ts}', '${ts}')`); + await query(`INSERT INTO "${cfg.memoryTable}" (id, path, filename, summary, author, mime_type, size_bytes, project, creation_date, last_update_date) VALUES ('${id}', '${esc(vpath)}', '${esc(fname)}', E'${esc(text)}', '${esc(cfg.userName)}', 'text/markdown', ${Buffer.byteLength(text)}, '${esc(cfg.project)}', '${ts}', '${ts}')`); } wlog(`uploaded ${vpath}`); try { diff --git a/claude-code/tests/deeplake-fs.test.ts b/claude-code/tests/deeplake-fs.test.ts index 1b0620d..c4fd600 100644 --- a/claude-code/tests/deeplake-fs.test.ts +++ b/claude-code/tests/deeplake-fs.test.ts @@ -1,9 +1,9 @@ import { describe, it, expect, beforeEach, vi } from "vitest"; -import { DeeplakeFs, isText, guessMime } from "../../src/shell/deeplake-fs.js"; +import { DeeplakeFs, guessMime } from "../../src/shell/deeplake-fs.js"; // ── Mock ManagedClient ──────────────────────────────────────────────────────── type Row = { - id: string; path: string; filename: string; content: Buffer; + id: string; path: string; filename: string; summary: string; mime_type: string; size_bytes: number; project: string; description: string; creation_date: string; last_update_date: string; }; @@ -13,8 +13,7 @@ function makeClient(seed: Record = {}) { id: `seed-${path}`, path, filename: path.split("/").pop()!, - content, - summary: isText(content) ? content.toString("utf-8") : "", + summary: content.toString("utf-8"), mime_type: guessMime(path.split("/").pop()!), size_bytes: content.length, project: "", @@ -31,27 +30,20 @@ function makeClient(seed: Record = {}) { if (sql.includes("SELECT path, size_bytes, mime_type")) { return rows.map(r => ({ path: r.path, size_bytes: r.size_bytes, mime_type: r.mime_type })); } - // Read: SELECT content FROM ... WHERE path = '...' - if (sql.includes("SELECT content FROM")) { + // Read: SELECT summary FROM ... WHERE path = '...' + if (sql.includes("SELECT summary FROM")) { const match = sql.match(/path = '([^']+)'/); const row = match ? rows.find(r => r.path === match[1]) : undefined; - // Return hex-encoded content like PostgreSQL BYTEA - return row ? [{ content: `\\x${row.content.toString("hex")}` }] : []; + return row ? [{ summary: row.summary }] : []; } - // Read: SELECT summary, content FROM ... WHERE path = '...' - if (sql.includes("SELECT summary, content") && !sql.includes("IN (")) { - const match = sql.match(/path = '([^']+)'/); - const row = match ? rows.find(r => r.path === match[1]) : undefined; - return row ? [{ summary: row.summary, content: `\\x${row.content.toString("hex")}` }] : []; - } - // Prefetch: SELECT path, summary, content FROM ... WHERE path IN (...) - if (sql.includes("SELECT path, summary, content") && sql.includes("IN (")) { + // Prefetch: SELECT path, summary FROM ... WHERE path IN (...) + if (sql.includes("SELECT path, summary") && sql.includes("IN (")) { const inMatch = sql.match(/IN \(([^)]+)\)/); if (inMatch) { const paths = inMatch[1].split(",").map(s => s.trim().replace(/^'|'$/g, "")); return rows .filter(r => paths.includes(r.path)) - .map(r => ({ path: r.path, summary: r.summary, content: `\\x${r.content.toString("hex")}` })); + .map(r => ({ path: r.path, summary: r.summary })); } return []; } @@ -103,23 +95,18 @@ function makeClient(seed: Record = {}) { if (sql.includes("summary = summary ||")) { // appendFile: SQL-level concat - const hexMatch = sql.match(/content \|\| E'\\\\x([0-9a-f]*)'/); - if (hexMatch) { - const appendBuf = Buffer.from(hexMatch[1], "hex"); - row.content = Buffer.concat([row.content, appendBuf]); - row.summary += appendBuf.toString("utf-8"); - row.size_bytes = row.content.length; + const appendMatch = sql.match(/summary \|\| E'((?:[^']|'')*)'/); + if (appendMatch) { + const appendText = appendMatch[1].replace(/''/g, "'"); + row.summary += appendText; + row.size_bytes = Buffer.byteLength(row.summary, "utf-8"); } } else { // Full overwrite UPDATE (_doFlush for existing paths) - const hexMatch = sql.match(/content = E'\\\\x([0-9a-f]*)'/); const textMatch = sql.match(/summary = E'((?:[^']|'')*)'/); - if (hexMatch) { - row.content = Buffer.from(hexMatch[1], "hex"); - row.size_bytes = row.content.length; - } if (textMatch) { row.summary = textMatch[1].replace(/''/g, "'"); + row.size_bytes = Buffer.byteLength(row.summary, "utf-8"); } } // Handle new metadata columns in any UPDATE @@ -144,13 +131,9 @@ function makeClient(seed: Record = {}) { const pathMatch = hasId ? sql.match(/VALUES \('[^']+', '([^']+)'/) // skip id : sql.match(/VALUES \('([^']+)'/); - const hexMatch = sql.match(/E'\\\\x([0-9a-f]*)'/); - const textMatch = sql.match(/E'\\\\x[0-9a-f]*', E'((?:[^']|'')*)'/); if (pathMatch) { const path = pathMatch[1]; const filename = path.split("/").pop()!; - const content = hexMatch ? Buffer.from(hexMatch[1], "hex") : Buffer.alloc(0); - const summary = textMatch?.[1]?.replace(/''/g, "'") ?? ""; const id = idMatch?.[1] ?? ""; // Parse columns and values positionally const colsPart = sql.match(/\(([^)]+)\)\s+VALUES/)?.[1] ?? ""; @@ -189,7 +172,8 @@ function makeClient(seed: Record = {}) { // Remove existing row if any (upsert) const idx = rows.findIndex(r => r.path === path); if (idx >= 0) rows.splice(idx, 1); - rows.push({ id, path, filename, content, summary, mime_type: "text/plain", size_bytes: content.length, project, description, creation_date, last_update_date }); + const summary = colMap["summary"] ?? ""; + rows.push({ id, path, filename, summary, mime_type: "text/plain", size_bytes: Buffer.byteLength(summary, "utf-8"), project, description, creation_date, last_update_date }); } } return []; @@ -218,25 +202,11 @@ async function makeFs(seed: Record = {}, mount = "/memo return { fs, client }; } -// ── Unit: helpers ───────────────────────────────────────────────────────────── -describe("isText", () => { - it("returns true for plain UTF-8", () => { - expect(isText(Buffer.from("hello world"))).toBe(true); - }); - it("returns false for buffer containing null byte", () => { - expect(isText(Buffer.from([0x68, 0x00, 0x6c]))).toBe(false); - }); - it("returns false for buffer with null byte (binary marker)", () => { - // Real binary files (PNG body, PDFs, zips) contain null bytes - const binary = Buffer.from([0x89, 0x50, 0x4e, 0x47, 0x00, 0x0a, 0x1a, 0x0a]); - expect(isText(binary)).toBe(false); - }); -}); describe("guessMime", () => { it("returns application/json for .json", () => expect(guessMime("foo.json")).toBe("application/json")); - it("returns image/png for .png", () => expect(guessMime("image.png")).toBe("image/png")); - it("returns octet-stream for .bin", () => expect(guessMime("file.bin")).toBe("application/octet-stream")); + it("returns text/markdown for .md", () => expect(guessMime("notes.md")).toBe("text/markdown")); + it("returns text/plain for unknown ext", () => expect(guessMime("file.xyz")).toBe("text/plain")); }); // ── Bootstrap ───────────────────────────────────────────────────────────────── @@ -274,9 +244,8 @@ describe("readFile", () => { const { fs, client } = await makeFs({ "/memory/hello.txt": "hello" }); const content = await fs.readFile("/memory/hello.txt"); expect(content).toBe("hello"); - // Should use the summary+content SELECT, not content-only SELECT const calls = (client.query.mock.calls as [string][]); - expect(calls.some(c => (c[0] as string).includes("summary, content"))).toBe(true); + expect(calls.some(c => (c[0] as string).includes("SELECT summary FROM"))).toBe(true); }); it("throws ENOENT for missing file", async () => { @@ -290,22 +259,19 @@ describe("readFile", () => { }); }); -// ── Binary reads ────────────────────────────────────────────────────────────── +// ── Buffer reads ────────────────────────────────────────────────────────────── describe("readFileBuffer", () => { - it("roundtrips binary content exactly", async () => { - // PNG-like: has null bytes → binary - const binary = Buffer.from([0x89, 0x50, 0x4e, 0x47, 0x00, 0x01, 0x02, 0x03]); - const { fs } = await makeFs({ "/memory/img.png": binary }); - - const result = await fs.readFileBuffer("/memory/img.png"); - expect(Buffer.from(result)).toEqual(binary); + it("roundtrips text content as buffer", async () => { + const { fs } = await makeFs({ "/memory/notes.txt": "hello world" }); + const result = await fs.readFileBuffer("/memory/notes.txt"); + expect(Buffer.from(result).toString("utf-8")).toBe("hello world"); }); - it("reads via SQL SELECT content query", async () => { - const { fs, client } = await makeFs({ "/memory/data.bin": Buffer.from([1, 2, 3]) }); - await fs.readFileBuffer("/memory/data.bin"); + it("reads via SQL SELECT summary query", async () => { + const { fs, client } = await makeFs({ "/memory/data.txt": "test data" }); + await fs.readFileBuffer("/memory/data.txt"); const selectCalls = (client.query.mock.calls as [string][]).filter(c => - (c[0] as string).includes("SELECT content FROM") + (c[0] as string).includes("SELECT summary FROM") ); expect(selectCalls.length).toBeGreaterThan(0); }); @@ -349,18 +315,16 @@ describe("writeFile", () => { expect(await fs.readFile("/memory/a.txt")).toBe("new"); }); - it("stores contentText='' for binary files (INSERT has empty E'' for summary)", async () => { + it("stores text content in summary column on INSERT", async () => { const { fs, client } = await makeFs({}); - const binary = Buffer.from([0x89, 0x50, 0x00, 0x01]); // Write 10 to trigger flush for (let i = 0; i < 9; i++) await fs.writeFile(`/memory/dummy${i}.txt`, "x"); - await fs.writeFile("/memory/img.png", binary); + await fs.writeFile("/memory/notes.md", "# Hello"); const insertCalls = (client.query.mock.calls as [string][]) - .filter(c => (c[0] as string).startsWith("INSERT") && (c[0] as string).includes("img.png")); + .filter(c => (c[0] as string).startsWith("INSERT") && (c[0] as string).includes("notes.md")); expect(insertCalls.length).toBe(1); - // summary should be E'' (empty string) for binary - expect(insertCalls[0][0]).toMatch(/E'\\\\x[0-9a-f]+', E''/); + expect(insertCalls[0][0]).toContain("# Hello"); }); }); @@ -873,7 +837,7 @@ describe("virtual index.md", () => { // Manually insert a legacy row (no username dir) client._rows.push({ id: "legacy", path: "/summaries/old-sess.md", filename: "old-sess.md", - content: Buffer.from("# Old"), summary: "# Old", mime_type: "text/markdown", + summary: "# Old", mime_type: "text/markdown", size_bytes: 5, project: "proj-a", description: "Legacy", creation_date: "2026-04-01", last_update_date: "2026-04-01", }); const content = await fs.readFile("/index.md"); diff --git a/claude-code/tests/real-table-test.mjs b/claude-code/tests/real-table-test.mjs index 88326d9..ef380f2 100644 --- a/claude-code/tests/real-table-test.mjs +++ b/claude-code/tests/real-table-test.mjs @@ -1,15 +1,15 @@ #!/usr/bin/env node /** - * Manual test script: exercises INSERT/UPDATE/appendFile patterns against a real Deeplake table. - * Uses a temporary test table, cleans up after itself. + * E2E test: exercises the text-only schema (no BYTEA content column) + * against a real Deeplake table. Uses a temporary test table, cleans up after itself. */ import { readFileSync } from "node:fs"; import { randomUUID } from "node:crypto"; - import { homedir } from "node:os"; import { join } from "node:path"; + const creds = JSON.parse(readFileSync(join(homedir(), ".deeplake/credentials.json"), "utf-8")); -const TABLE = "test_upsert_" + Date.now(); +const TABLE = "test_textonly_" + Date.now(); const API = creds.apiUrl + "/workspaces/" + creds.workspaceId + "/tables"; async function query(sql) { @@ -26,7 +26,6 @@ async function query(sql) { if (!r.ok) throw new Error(`API ${r.status}: ${text.slice(0, 300)}`); try { const json = JSON.parse(text); - // Convert columnar format {columns, rows} to array of objects if (json.columns && json.rows) { return json.rows.map(row => { const obj = {}; @@ -55,171 +54,186 @@ function assert(condition, name) { } try { - // ── Setup ────────────────────────────────────────────────────────────────── - console.log(`\nCreating table "${TABLE}"...`); + // ── Setup: text-only schema (no BYTEA content column) ───────────────────── + console.log(`\nCreating table "${TABLE}" (text-only schema)...`); await query( `CREATE TABLE IF NOT EXISTS "${TABLE}" (` + `id TEXT NOT NULL DEFAULT '', ` + `path TEXT NOT NULL DEFAULT '', ` + `filename TEXT NOT NULL DEFAULT '', ` + - `content BYTEA NOT NULL DEFAULT ''::bytea, ` + `summary TEXT NOT NULL DEFAULT '', ` + - `mime_type TEXT NOT NULL DEFAULT 'application/octet-stream', ` + + `author TEXT NOT NULL DEFAULT '', ` + + `mime_type TEXT NOT NULL DEFAULT 'text/plain', ` + `size_bytes BIGINT NOT NULL DEFAULT 0, ` + - `timestamp TEXT NOT NULL DEFAULT ''` + + `project TEXT NOT NULL DEFAULT '', ` + + `description TEXT NOT NULL DEFAULT '', ` + + `creation_date TEXT NOT NULL DEFAULT '', ` + + `last_update_date TEXT NOT NULL DEFAULT ''` + `) USING deeplake` ); console.log("Table created.\n"); - // ── Test 1: INSERT new row ───────────────────────────────────────────────── - console.log("Test 1: INSERT new row"); + // ── Test 1: INSERT new row (text only, no hex) ──────────────────────────── + console.log("Test 1: INSERT new row (text-only)"); const id1 = randomUUID(); const ts1 = new Date().toISOString(); - const text1 = "hello world"; - const hex1 = Buffer.from(text1).toString("hex"); + const text1 = "# Hello World\nThis is a test file."; await query( - `INSERT INTO "${TABLE}" (id, path, filename, content, summary, mime_type, size_bytes, timestamp) ` + - `VALUES ('${id1}', '/test/file1.txt', 'file1.txt', E'\\\\x${hex1}', E'${esc(text1)}', 'text/plain', ${Buffer.byteLength(text1)}, '${ts1}')` + `INSERT INTO "${TABLE}" (id, path, filename, summary, author, mime_type, size_bytes, creation_date, last_update_date) ` + + `VALUES ('${id1}', '/test/file1.md', 'file1.md', E'${esc(text1)}', 'test-user', 'text/markdown', ${Buffer.byteLength(text1)}, '${ts1}', '${ts1}')` ); - await query(`SELECT deeplake_sync_table('${TABLE}')`); - const rows1 = await query(`SELECT id, path, summary, timestamp FROM "${TABLE}" WHERE path = '/test/file1.txt'`); + await sync(); + const rows1 = await query(`SELECT id, path, summary, author, creation_date FROM "${TABLE}" WHERE path = '/test/file1.md'`); assert(rows1.length === 1, "row inserted"); - assert(rows1[0].id === id1, `id matches (${rows1[0].id})`); + assert(rows1[0].id === id1, `id matches`); assert(rows1[0].summary === text1, "summary matches"); - assert(rows1[0].timestamp === ts1, "timestamp matches"); + assert(rows1[0].author === "test-user", "author matches"); + assert(rows1[0].creation_date === ts1, "creation_date matches"); - // ── Test 2: UPDATE existing row (preserves id, updates timestamp) ────────── - console.log("\nTest 2: UPDATE existing row — id preserved, timestamp refreshed"); - await new Promise(r => setTimeout(r, 100)); // ensure different timestamp + // ── Test 2: UPDATE existing row ─────────────────────────────────────────── + console.log("\nTest 2: UPDATE existing row — id preserved, content replaced"); + await new Promise(r => setTimeout(r, 100)); const ts2 = new Date().toISOString(); - const text2 = "updated content"; - const hex2 = Buffer.from(text2).toString("hex"); + const text2 = "# Updated\nNew content here."; await query( - `UPDATE "${TABLE}" SET content = E'\\\\x${hex2}', summary = E'${esc(text2)}', ` + - `mime_type = 'text/plain', size_bytes = ${Buffer.byteLength(text2)}, timestamp = '${ts2}' ` + - `WHERE path = '/test/file1.txt'` + `UPDATE "${TABLE}" SET summary = E'${esc(text2)}', ` + + `size_bytes = ${Buffer.byteLength(text2)}, last_update_date = '${ts2}' ` + + `WHERE path = '/test/file1.md'` ); - await query(`SELECT deeplake_sync_table('${TABLE}')`); - const rows2 = await query(`SELECT id, summary, timestamp FROM "${TABLE}" WHERE path = '/test/file1.txt'`); + await sync(); + const rows2 = await query(`SELECT id, summary, last_update_date FROM "${TABLE}" WHERE path = '/test/file1.md'`); assert(rows2.length === 1, "still one row"); - assert(rows2[0].id === id1, `id preserved after UPDATE (${rows2[0].id})`); + assert(rows2[0].id === id1, `id preserved after UPDATE`); assert(rows2[0].summary === text2, "summary updated"); - assert(rows2[0].timestamp === ts2, `timestamp updated (${rows2[0].timestamp})`); + assert(rows2[0].last_update_date === ts2, "last_update_date refreshed"); - // ── Test 3: appendFile UPDATE (concat content, update timestamp) ─────────── - console.log("\nTest 3: appendFile UPDATE — concat content, timestamp refreshed"); + // ── Test 3: appendFile — SQL-level text concat ──────────────────────────── + console.log("\nTest 3: appendFile — SQL text concat (no hex)"); await new Promise(r => setTimeout(r, 100)); const ts3 = new Date().toISOString(); - const append = "\nappended line"; - const appendHex = Buffer.from(append).toString("hex"); + const append = "\n## Appended Section\nExtra content."; await query( `UPDATE "${TABLE}" SET ` + `summary = summary || E'${esc(append)}', ` + - `content = content || E'\\\\x${appendHex}', ` + `size_bytes = size_bytes + ${Buffer.byteLength(append)}, ` + - `timestamp = '${ts3}' ` + - `WHERE path = '/test/file1.txt'` + `last_update_date = '${ts3}' ` + + `WHERE path = '/test/file1.md'` ); - await query(`SELECT deeplake_sync_table('${TABLE}')`); - const rows3 = await query(`SELECT id, summary, size_bytes, timestamp FROM "${TABLE}" WHERE path = '/test/file1.txt'`); + await sync(); + const rows3 = await query(`SELECT id, summary, size_bytes FROM "${TABLE}" WHERE path = '/test/file1.md'`); assert(rows3.length === 1, "still one row"); - assert(rows3[0].id === id1, `id preserved after append (${rows3[0].id})`); - assert(rows3[0].summary === text2 + append, `summary concatenated`); - assert(rows3[0].timestamp === ts3, `timestamp updated (${rows3[0].timestamp})`); - - // ── Test 4: SELECT check before upsert (path exists) ────────────────────── - console.log("\nTest 4: SELECT-based existence check for upsert"); - const exists = await query(`SELECT path FROM "${TABLE}" WHERE path = '/test/file1.txt' LIMIT 1`); - assert(exists.length > 0, "existing path found"); - const notExists = await query(`SELECT path FROM "${TABLE}" WHERE path = '/test/nonexistent.txt' LIMIT 1`); - assert(notExists.length === 0, "missing path returns empty"); - - // ── Test 5: Full upsert flow — check then UPDATE ────────────────────────── - console.log("\nTest 5: Full upsert — SELECT then UPDATE for existing path"); + assert(rows3[0].id === id1, `id preserved after append`); + assert(rows3[0].summary === text2 + append, "summary concatenated correctly"); + assert(rows3[0].size_bytes === Buffer.byteLength(text2 + append), "size_bytes updated"); + + // ── Test 4: Upsert flow — SELECT then UPDATE ───────────────────────────── + console.log("\nTest 4: Upsert — SELECT then UPDATE for existing path"); await new Promise(r => setTimeout(r, 100)); + const ts4 = new Date().toISOString(); + const text4 = "upsert-overwrite"; + const check4 = await query(`SELECT path FROM "${TABLE}" WHERE path = '/test/file1.md' LIMIT 1`); + assert(check4.length > 0, "existing path found"); + await query( + `UPDATE "${TABLE}" SET summary = E'${esc(text4)}', ` + + `size_bytes = ${Buffer.byteLength(text4)}, last_update_date = '${ts4}' ` + + `WHERE path = '/test/file1.md'` + ); + await sync(); + const rows4 = await query(`SELECT id, summary FROM "${TABLE}" WHERE path = '/test/file1.md'`); + assert(rows4[0].id === id1, "id preserved through upsert"); + assert(rows4[0].summary === text4, "content replaced via upsert"); + + // ── Test 5: Upsert flow — SELECT then INSERT for new path ──────────────── + console.log("\nTest 5: Upsert — INSERT for new path"); + const id5 = randomUUID(); const ts5 = new Date().toISOString(); - const text5 = "upsert-updated"; - const hex5 = Buffer.from(text5).toString("hex"); - const check5 = await query(`SELECT path FROM "${TABLE}" WHERE path = '/test/file1.txt' LIMIT 1`); - if (check5.length > 0) { - await query( - `UPDATE "${TABLE}" SET content = E'\\\\x${hex5}', summary = E'${esc(text5)}', ` + - `mime_type = 'text/plain', size_bytes = ${Buffer.byteLength(text5)}, timestamp = '${ts5}' ` + - `WHERE path = '/test/file1.txt'` - ); - } - await query(`SELECT deeplake_sync_table('${TABLE}')`); - const rows5 = await query(`SELECT id, summary, timestamp FROM "${TABLE}" WHERE path = '/test/file1.txt'`); - assert(rows5[0].id === id1, `id still preserved through upsert (${rows5[0].id})`); - assert(rows5[0].summary === text5, "content replaced via upsert"); - assert(rows5[0].timestamp === ts5, "timestamp refreshed via upsert"); - - // ── Test 6: Full upsert flow — SELECT then INSERT for new path ───────────── - console.log("\nTest 6: Full upsert — SELECT then INSERT for new path"); - const id6 = randomUUID(); - const ts6 = new Date().toISOString(); - const text6 = "brand new file"; - const hex6 = Buffer.from(text6).toString("hex"); - const check6 = await query(`SELECT path FROM "${TABLE}" WHERE path = '/test/file2.txt' LIMIT 1`); - if (check6.length === 0) { - await query( - `INSERT INTO "${TABLE}" (id, path, filename, content, summary, mime_type, size_bytes, timestamp) ` + - `VALUES ('${id6}', '/test/file2.txt', 'file2.txt', E'\\\\x${hex6}', E'${esc(text6)}', 'text/plain', ${Buffer.byteLength(text6)}, '${ts6}')` - ); - } - await query(`SELECT deeplake_sync_table('${TABLE}')`); - const rows6 = await query(`SELECT id, summary, timestamp FROM "${TABLE}" WHERE path = '/test/file2.txt'`); - assert(rows6.length === 1, "new row inserted"); - assert(rows6[0].id === id6, `new id assigned (${rows6[0].id})`); - assert(rows6[0].summary === text6, "content correct"); - - // ── Test 7: Multiple updates preserve same id ────────────────────────────── - console.log("\nTest 7: Multiple sequential updates preserve same id"); + const text5 = "# Second File\nBrand new."; + const check5 = await query(`SELECT path FROM "${TABLE}" WHERE path = '/test/file2.md' LIMIT 1`); + assert(check5.length === 0, "path does not exist yet"); + await query( + `INSERT INTO "${TABLE}" (id, path, filename, summary, author, mime_type, size_bytes, project, description, creation_date, last_update_date) ` + + `VALUES ('${id5}', '/test/file2.md', 'file2.md', E'${esc(text5)}', 'alice', 'text/markdown', ${Buffer.byteLength(text5)}, 'my-project', 'test file', '${ts5}', '${ts5}')` + ); + await sync(); + const rows5 = await query(`SELECT id, summary, author, project, description FROM "${TABLE}" WHERE path = '/test/file2.md'`); + assert(rows5.length === 1, "new row inserted"); + assert(rows5[0].id === id5, "correct id"); + assert(rows5[0].summary === text5, "content correct"); + assert(rows5[0].author === "alice", "author set"); + assert(rows5[0].project === "my-project", "project set"); + assert(rows5[0].description === "test file", "description set"); + + // ── Test 6: Multiple updates preserve id ────────────────────────────────── + console.log("\nTest 6: Multiple sequential updates preserve id"); for (let i = 0; i < 3; i++) { const ts = new Date().toISOString(); - const txt = `update-${i}`; - const hx = Buffer.from(txt).toString("hex"); + const txt = `revision-${i}`; await query( - `UPDATE "${TABLE}" SET content = E'\\\\x${hx}', summary = E'${esc(txt)}', ` + - `size_bytes = ${Buffer.byteLength(txt)}, timestamp = '${ts}' ` + - `WHERE path = '/test/file1.txt'` + `UPDATE "${TABLE}" SET summary = E'${esc(txt)}', ` + + `size_bytes = ${Buffer.byteLength(txt)}, last_update_date = '${ts}' ` + + `WHERE path = '/test/file1.md'` ); } - await query(`SELECT deeplake_sync_table('${TABLE}')`); - const rows7 = await query(`SELECT id, summary FROM "${TABLE}" WHERE path = '/test/file1.txt'`); - assert(rows7[0].id === id1, `id still original after 3 updates (${rows7[0].id})`); - assert(rows7[0].summary === "update-2", "content is from last update"); - - // ── Test 8: DELETE then re-INSERT gets new id ────────────────────────────── - console.log("\nTest 8: After DELETE, re-INSERT gets a new id"); - await query(`DELETE FROM "${TABLE}" WHERE path = '/test/file2.txt'`); - await query(`SELECT deeplake_sync_table('${TABLE}')`); - const id8 = randomUUID(); - const ts8 = new Date().toISOString(); + await sync(); + const rows6 = await query(`SELECT id, summary FROM "${TABLE}" WHERE path = '/test/file1.md'`); + assert(rows6[0].id === id1, "id still original after 3 updates"); + assert(rows6[0].summary === "revision-2", "content is from last update"); + + // ── Test 7: DELETE then re-INSERT gets new id ───────────────────────────── + console.log("\nTest 7: DELETE + re-INSERT gets new id"); + await query(`DELETE FROM "${TABLE}" WHERE path = '/test/file2.md'`); + await sync(); + const id7 = randomUUID(); + const ts7 = new Date().toISOString(); await query( - `INSERT INTO "${TABLE}" (id, path, filename, content, summary, mime_type, size_bytes, timestamp) ` + - `VALUES ('${id8}', '/test/file2.txt', 'file2.txt', E'\\\\x${hex6}', E'${esc(text6)}', 'text/plain', ${Buffer.byteLength(text6)}, '${ts8}')` + `INSERT INTO "${TABLE}" (id, path, filename, summary, mime_type, size_bytes, creation_date, last_update_date) ` + + `VALUES ('${id7}', '/test/file2.md', 'file2.md', E'${esc(text5)}', 'text/markdown', ${Buffer.byteLength(text5)}, '${ts7}', '${ts7}')` ); - await query(`SELECT deeplake_sync_table('${TABLE}')`); - const rows8 = await query(`SELECT id FROM "${TABLE}" WHERE path = '/test/file2.txt'`); - assert(rows8[0].id === id8, `new id after delete+insert (${rows8[0].id} !== old ${id6})`); + await sync(); + const rows7 = await query(`SELECT id FROM "${TABLE}" WHERE path = '/test/file2.md'`); + assert(rows7[0].id === id7, `new id after delete+insert (got ${rows7[0].id})`); - // ── Test 9: UPDATE on non-existent path is a no-op ───────────────────────── - console.log("\nTest 9: UPDATE on non-existent path is a no-op"); + // ── Test 8: UPDATE on non-existent path is a no-op ──────────────────────── + console.log("\nTest 8: UPDATE on non-existent path is a no-op"); await query( - `UPDATE "${TABLE}" SET summary = E'ghost', timestamp = '${new Date().toISOString()}' ` + - `WHERE path = '/test/does-not-exist.txt'` + `UPDATE "${TABLE}" SET summary = E'ghost', last_update_date = '${new Date().toISOString()}' ` + + `WHERE path = '/test/does-not-exist.md'` ); - await query(`SELECT deeplake_sync_table('${TABLE}')`); - const rows9 = await query(`SELECT path FROM "${TABLE}" WHERE path = '/test/does-not-exist.txt'`); - assert(rows9.length === 0, "no row created by UPDATE on missing path"); - - // ── Summary ──────────────────────────────────────────────────────────────── + await sync(); + const rows8 = await query(`SELECT path FROM "${TABLE}" WHERE path = '/test/does-not-exist.md'`); + assert(rows8.length === 0, "no row created by UPDATE on missing path"); + + // ── Test 9: Special characters in content ───────────────────────────────── + console.log("\nTest 9: Special characters — quotes, backslashes, unicode"); + const id9 = randomUUID(); + const text9 = "It's a \"test\" with \\backslashes\\ and émojis 🎉"; + await query( + `INSERT INTO "${TABLE}" (id, path, filename, summary, mime_type, size_bytes, creation_date, last_update_date) ` + + `VALUES ('${id9}', '/test/special.md', 'special.md', E'${esc(text9)}', 'text/markdown', ${Buffer.byteLength(text9)}, '${new Date().toISOString()}', '${new Date().toISOString()}')` + ); + await sync(); + const rows9 = await query(`SELECT summary FROM "${TABLE}" WHERE path = '/test/special.md'`); + assert(rows9.length === 1, "row with special chars inserted"); + assert(rows9[0].summary === text9, `special chars roundtripped: ${rows9[0].summary}`); + + // ── Test 10: No BYTEA column in schema ──────────────────────────────────── + console.log("\nTest 10: Schema has no BYTEA content column"); + const cols = await query( + `SELECT column_name, data_type FROM information_schema.columns WHERE table_name = '${TABLE}'` + ); + const colNames = cols.map(c => c.column_name); + assert(!colNames.includes("content"), "no 'content' column in schema"); + assert(colNames.includes("summary"), "has 'summary' column"); + assert(colNames.includes("author"), "has 'author' column"); + const summaryCol = cols.find(c => c.column_name === "summary"); + assert(summaryCol?.data_type === "text", `summary is TEXT (got ${summaryCol?.data_type})`); + + // ── Summary ─────────────────────────────────────────────────────────────── console.log(`\n${"=".repeat(50)}`); console.log(`Results: ${passed} passed, ${failed} failed`); } finally { - // ── Cleanup ──────────────────────────────────────────────────────────────── + // ── Cleanup ─────────────────────────────────────────────────────────────── console.log(`\nDropping table "${TABLE}"...`); try { await query(`DROP TABLE "${TABLE}"`); diff --git a/claude-code/tests/session-summary.test.ts b/claude-code/tests/session-summary.test.ts index 0f81399..09f123a 100644 --- a/claude-code/tests/session-summary.test.ts +++ b/claude-code/tests/session-summary.test.ts @@ -1,9 +1,9 @@ import { describe, it, expect, beforeEach, vi } from "vitest"; -import { DeeplakeFs, isText, guessMime } from "../../src/shell/deeplake-fs.js"; +import { DeeplakeFs, guessMime } from "../../src/shell/deeplake-fs.js"; // ── Mock client (same pattern as deeplake-fs.test.ts) ──────────────────────── type Row = { - id: string; path: string; filename: string; content: Buffer; + id: string; path: string; filename: string; summary: string; mime_type: string; size_bytes: number; project: string; description: string; creation_date: string; last_update_date: string; }; @@ -13,8 +13,7 @@ function makeClient(seed: Record = {}) { id: `seed-${path}`, path, filename: path.split("/").pop()!, - content, - summary: isText(content) ? content.toString("utf-8") : "", + summary: content.toString("utf-8"), mime_type: guessMime(path.split("/").pop()!), size_bytes: content.length, project: "", @@ -29,15 +28,10 @@ function makeClient(seed: Record = {}) { if (sql.includes("SELECT path, size_bytes, mime_type")) { return rows.map(r => ({ path: r.path, size_bytes: r.size_bytes, mime_type: r.mime_type })); } - if (sql.includes("SELECT content FROM")) { + if (sql.includes("SELECT summary FROM")) { const match = sql.match(/path = '([^']+)'/); const row = match ? rows.find(r => r.path === match[1]) : undefined; - return row ? [{ content: `\\x${row.content.toString("hex")}` }] : []; - } - if (sql.includes("SELECT summary, content")) { - const match = sql.match(/path = '([^']+)'/); - const row = match ? rows.find(r => r.path === match[1]) : undefined; - return row ? [{ summary: row.summary, content: `\\x${row.content.toString("hex")}` }] : []; + return row ? [{ summary: row.summary }] : []; } if (sql.includes("SELECT path, project, description, creation_date, last_update_date")) { return rows @@ -71,18 +65,18 @@ function makeClient(seed: Record = {}) { const cdMatch = sql.match(/creation_date = '([^']+)'/); if (cdMatch) row.creation_date = cdMatch[1]; if (sql.includes("summary = summary ||")) { - const hexMatch = sql.match(/content \|\| E'\\\\x([0-9a-f]*)'/); - if (hexMatch) { - const appendBuf = Buffer.from(hexMatch[1], "hex"); - row.content = Buffer.concat([row.content, appendBuf]); - row.summary += appendBuf.toString("utf-8"); - row.size_bytes = row.content.length; + const appendMatch = sql.match(/summary \|\| E'((?:[^']|'')*)'/); + if (appendMatch) { + const appendText = appendMatch[1].replace(/''/g, "'"); + row.summary += appendText; + row.size_bytes = Buffer.byteLength(row.summary, "utf-8"); } } else { - const hexMatch = sql.match(/content = E'\\\\x([0-9a-f]*)'/); const textMatch = sql.match(/summary = E'((?:[^']|'')*)'/); - if (hexMatch) { row.content = Buffer.from(hexMatch[1], "hex"); row.size_bytes = row.content.length; } - if (textMatch) { row.summary = textMatch[1].replace(/''/g, "'"); } + if (textMatch) { + row.summary = textMatch[1].replace(/''/g, "'"); + row.size_bytes = Buffer.byteLength(row.summary, "utf-8"); + } } const projMatch = sql.match(/project = '([^']*)'/); if (projMatch) row.project = projMatch[1]; @@ -96,12 +90,8 @@ function makeClient(seed: Record = {}) { const valuesMatch = sql.match(/VALUES \((.+)\)$/s); if (valuesMatch) { const pathMatch = sql.match(/VALUES \('[^']+', '([^']+)'/); - const hexMatch = sql.match(/E'\\\\x([0-9a-f]*)'/); - const textMatch = sql.match(/E'\\\\x[0-9a-f]*', E'((?:[^']|'')*)'/); if (pathMatch) { const path = pathMatch[1]; - const content = hexMatch ? Buffer.from(hexMatch[1], "hex") : Buffer.alloc(0); - const summary = textMatch?.[1]?.replace(/''/g, "'") ?? ""; const colsPart = sql.match(/\(([^)]+)\)\s+VALUES/)?.[1] ?? ""; const colsList = colsPart.split(",").map(c => c.trim()); const valsStr = valuesMatch[1]; @@ -125,11 +115,12 @@ function makeClient(seed: Record = {}) { } const colMap: Record = {}; for (let c = 0; c < colsList.length; c++) colMap[colsList[c]] = allVals[c] ?? ""; + const summary = colMap["summary"] ?? ""; const idx = rows.findIndex(r => r.path === path); if (idx >= 0) rows.splice(idx, 1); rows.push({ id: colMap["id"] ?? "", path, filename: path.split("/").pop()!, - content, summary, mime_type: "text/plain", size_bytes: content.length, + summary, mime_type: "text/plain", size_bytes: Buffer.byteLength(summary, "utf-8"), project: colMap["project"] ?? "", description: colMap["description"] ?? "", creation_date: colMap["creation_date"] ?? "", last_update_date: colMap["last_update_date"] ?? "", }); diff --git a/claude-code/tests/sessions-table.test.ts b/claude-code/tests/sessions-table.test.ts index ac35a11..a4aa94f 100644 --- a/claude-code/tests/sessions-table.test.ts +++ b/claude-code/tests/sessions-table.test.ts @@ -1,5 +1,5 @@ import { describe, it, expect, vi } from "vitest"; -import { DeeplakeFs, isText, guessMime } from "../../src/shell/deeplake-fs.js"; +import { DeeplakeFs, guessMime } from "../../src/shell/deeplake-fs.js"; // ── Mock client that simulates both memory and sessions tables ────────────── @@ -48,20 +48,11 @@ function makeClient(memoryRows: Row[] = [], sessionRows: Row[] = []) { } // Read from memory table - if (sql.includes("SELECT summary, content") && !isSessionsQuery) { + if (sql.includes("SELECT summary FROM") && !isSessionsQuery) { const pathMatch = sql.match(/path = '([^']+)'/); if (pathMatch) { const row = memoryRows.find(r => r.path === pathMatch[1]); - return row ? [{ summary: row.text_content, content: "" }] : []; - } - } - - // SELECT content (binary) from memory - if (sql.includes("SELECT content FROM") && !isSessionsQuery) { - const pathMatch = sql.match(/path = '([^']+)'/); - if (pathMatch) { - const row = memoryRows.find(r => r.path === pathMatch[1]); - return row ? [{ content: `\\x${Buffer.from(row.text_content).toString("hex")}` }] : []; + return row ? [{ summary: row.text_content }] : []; } } @@ -257,6 +248,7 @@ describe("ensureSessionsTable schema", () => { expect(createSql).toContain("summary TEXT"); expect(createSql).toContain("author TEXT"); expect(createSql).not.toContain("content_text"); + expect(createSql).not.toContain("BYTEA"); }); it("memory table migration adds author column", async () => { diff --git a/src/deeplake-api.ts b/src/deeplake-api.ts index e658cbf..24c12f0 100644 --- a/src/deeplake-api.ts +++ b/src/deeplake-api.ts @@ -37,7 +37,6 @@ class Semaphore { export interface WriteRow { path: string; filename: string; - content: Buffer; contentText: string; mimeType: string; sizeBytes: number; @@ -135,7 +134,6 @@ export class DeeplakeApi { } private async upsertRowSql(row: WriteRow): Promise { - const hex = row.content.toString("hex"); const ts = new Date().toISOString(); const cd = row.creationDate ?? ts; const lud = row.lastUpdateDate ?? ts; @@ -143,7 +141,7 @@ export class DeeplakeApi { `SELECT path FROM "${this.tableName}" WHERE path = '${sqlStr(row.path)}' LIMIT 1` ); if (exists.length > 0) { - let setClauses = `content = E'\\\\x${hex}', summary = E'${sqlStr(row.contentText)}', ` + + let setClauses = `summary = E'${sqlStr(row.contentText)}', ` + `mime_type = '${sqlStr(row.mimeType)}', size_bytes = ${row.sizeBytes}, last_update_date = '${lud}'`; if (row.project !== undefined) setClauses += `, project = '${sqlStr(row.project)}'`; if (row.description !== undefined) setClauses += `, description = '${sqlStr(row.description)}'`; @@ -152,8 +150,8 @@ export class DeeplakeApi { ); } else { const id = randomUUID(); - let cols = "id, path, filename, content, summary, mime_type, size_bytes, creation_date, last_update_date"; - let vals = `'${id}', '${sqlStr(row.path)}', '${sqlStr(row.filename)}', E'\\\\x${hex}', E'${sqlStr(row.contentText)}', '${sqlStr(row.mimeType)}', ${row.sizeBytes}, '${cd}', '${lud}'`; + let cols = "id, path, filename, summary, mime_type, size_bytes, creation_date, last_update_date"; + let vals = `'${id}', '${sqlStr(row.path)}', '${sqlStr(row.filename)}', E'${sqlStr(row.contentText)}', '${sqlStr(row.mimeType)}', ${row.sizeBytes}, '${cd}', '${lud}'`; if (row.project !== undefined) { cols += ", project"; vals += `, '${sqlStr(row.project)}'`; } if (row.description !== undefined) { cols += ", description"; vals += `, '${sqlStr(row.description)}'`; } await this.query( @@ -220,10 +218,9 @@ export class DeeplakeApi { `id TEXT NOT NULL DEFAULT '', ` + `path TEXT NOT NULL DEFAULT '', ` + `filename TEXT NOT NULL DEFAULT '', ` + - `content BYTEA NOT NULL DEFAULT ''::bytea, ` + `summary TEXT NOT NULL DEFAULT '', ` + `author TEXT NOT NULL DEFAULT '', ` + - `mime_type TEXT NOT NULL DEFAULT 'application/octet-stream', ` + + `mime_type TEXT NOT NULL DEFAULT 'text/plain', ` + `size_bytes BIGINT NOT NULL DEFAULT 0, ` + `project TEXT NOT NULL DEFAULT '', ` + `description TEXT NOT NULL DEFAULT '', ` + diff --git a/src/hooks/session-start.ts b/src/hooks/session-start.ts index 11f543a..e6d76f7 100644 --- a/src/hooks/session-start.ts +++ b/src/hooks/session-start.ts @@ -117,12 +117,11 @@ async function createPlaceholder(api: DeeplakeApi, table: string, sessionId: str `- **Status**: in-progress`, "", ].join("\n"); - const hex = Buffer.from(content, "utf-8").toString("hex"); const filename = `${sessionId}.md`; await api.query( - `INSERT INTO "${table}" (id, path, filename, content, summary, author, mime_type, size_bytes, project, description, creation_date, last_update_date) ` + - `VALUES ('${crypto.randomUUID()}', '${sqlStr(summaryPath)}', '${sqlStr(filename)}', E'\\\\x${hex}', E'${sqlStr(content)}', '${sqlStr(userName)}', 'text/markdown', ` + + `INSERT INTO "${table}" (id, path, filename, summary, author, mime_type, size_bytes, project, description, creation_date, last_update_date) ` + + `VALUES ('${crypto.randomUUID()}', '${sqlStr(summaryPath)}', '${sqlStr(filename)}', E'${sqlStr(content)}', '${sqlStr(userName)}', 'text/markdown', ` + `${Buffer.byteLength(content, "utf-8")}, '${sqlStr(projectName)}', 'in progress', '${now}', '${now}')` ); diff --git a/src/hooks/wiki-worker.ts b/src/hooks/wiki-worker.ts index 4014402..9fbecb6 100644 --- a/src/hooks/wiki-worker.ts +++ b/src/hooks/wiki-worker.ts @@ -161,7 +161,6 @@ async function main(): Promise { if (existsSync(tmpSummary)) { const text = readFileSync(tmpSummary, "utf-8"); if (text.trim()) { - const hex = Buffer.from(text, "utf-8").toString("hex"); const fname = `${cfg.sessionId}.md`; const vpath = `/summaries/${cfg.userName}/${fname}`; const ts = new Date().toISOString(); @@ -174,15 +173,15 @@ async function main(): Promise { if (existing.length > 0) { await query( `UPDATE "${cfg.memoryTable}" SET ` + - `content = E'\\\\x${hex}', summary = E'${esc(text)}', ` + + `summary = E'${esc(text)}', ` + `size_bytes = ${Buffer.byteLength(text)}, last_update_date = '${ts}' ` + `WHERE path = '${esc(vpath)}'` ); } else { const id = crypto.randomUUID(); await query( - `INSERT INTO "${cfg.memoryTable}" (id, path, filename, content, summary, author, mime_type, size_bytes, project, creation_date, last_update_date) ` + - `VALUES ('${id}', '${esc(vpath)}', '${esc(fname)}', E'\\\\x${hex}', E'${esc(text)}', '${esc(cfg.userName)}', 'text/markdown', ` + + `INSERT INTO "${cfg.memoryTable}" (id, path, filename, summary, author, mime_type, size_bytes, project, creation_date, last_update_date) ` + + `VALUES ('${id}', '${esc(vpath)}', '${esc(fname)}', E'${esc(text)}', '${esc(cfg.userName)}', 'text/markdown', ` + `${Buffer.byteLength(text)}, '${esc(cfg.project)}', '${ts}', '${ts}')` ); } diff --git a/src/shell/deeplake-fs.ts b/src/shell/deeplake-fs.ts index 4191fa9..31b46c9 100644 --- a/src/shell/deeplake-fs.ts +++ b/src/shell/deeplake-fs.ts @@ -13,7 +13,6 @@ interface DirentEntry { name: string; isFile: boolean; isDirectory: boolean; isS // ── constants ───────────────────────────────────────────────────────────────── const BATCH_SIZE = 10; const FLUSH_DEBOUNCE_MS = 200; -const TEXT_DETECT_BYTES = 4096; // ── helpers ─────────────────────────────────────────────────────────────────── export function normPath(p: string): string { @@ -28,22 +27,14 @@ function parentOf(p: string): string { import { sqlStr as esc } from "../utils/sql.js"; -export function isText(buf: Buffer): boolean { - const end = Math.min(buf.length, TEXT_DETECT_BYTES); - for (let i = 0; i < end; i++) if (buf[i] === 0) return false; - return true; -} - export function guessMime(filename: string): string { const ext = filename.split(".").pop()?.toLowerCase() ?? ""; return ( ({ json: "application/json", md: "text/markdown", txt: "text/plain", js: "text/javascript", ts: "text/typescript", html: "text/html", - css: "text/css", png: "image/png", jpg: "image/jpeg", jpeg: "image/jpeg", - pdf: "application/pdf", svg: "image/svg+xml", gz: "application/gzip", - zip: "application/zip", - } as Record)[ext] ?? "application/octet-stream" + css: "text/css", + } as Record)[ext] ?? "text/plain" ); } @@ -51,23 +42,11 @@ function fsErr(code: string, msg: string, path: string): Error { return Object.assign(new Error(`${code}: ${msg}, '${path}'`), { code }); } -// Decode content returned from SQL: PostgreSQL hex-encodes BYTEA as '\x...' -function decodeContent(raw: unknown): Buffer { - if (raw instanceof Uint8Array) return Buffer.from(raw); - if (Buffer.isBuffer(raw)) return raw; - if (typeof raw === "string") { - return raw.startsWith("\\x") - ? Buffer.from(raw.slice(2), "hex") - : Buffer.from(raw, "base64"); - } - throw new Error(`Unexpected content type: ${typeof raw}`); -} - // ── types ───────────────────────────────────────────────────────────────────── interface FileMeta { size: number; mime: string; mtime: Date; } interface PendingRow { - path: string; filename: string; content: Buffer; + path: string; filename: string; contentText: string; mimeType: string; sizeBytes: number; project?: string; description?: string; creationDate?: string; lastUpdateDate?: string; @@ -239,7 +218,6 @@ export class DeeplakeFs implements IFileSystem { } private async upsertRow(r: PendingRow): Promise { - const hex = r.content.toString("hex"); const text = esc(r.contentText); const p = esc(r.path); const fname = esc(r.filename); @@ -248,7 +226,7 @@ export class DeeplakeFs implements IFileSystem { const cd = r.creationDate ?? ts; const lud = r.lastUpdateDate ?? ts; if (this.flushed.has(r.path)) { - let setClauses = `filename = '${fname}', content = E'\\\\x${hex}', summary = E'${text}', ` + + let setClauses = `filename = '${fname}', summary = E'${text}', ` + `mime_type = '${mime}', size_bytes = ${r.sizeBytes}, last_update_date = '${esc(lud)}'`; if (r.project !== undefined) setClauses += `, project = '${esc(r.project)}'`; if (r.description !== undefined) setClauses += `, description = '${esc(r.description)}'`; @@ -257,10 +235,10 @@ export class DeeplakeFs implements IFileSystem { ); } else { const id = randomUUID(); - const cols = "id, path, filename, content, summary, mime_type, size_bytes, creation_date, last_update_date" + + const cols = "id, path, filename, summary, mime_type, size_bytes, creation_date, last_update_date" + (r.project !== undefined ? ", project" : "") + (r.description !== undefined ? ", description" : ""); - const vals = `'${id}', '${p}', '${fname}', E'\\\\x${hex}', E'${text}', '${mime}', ${r.sizeBytes}, '${esc(cd)}', '${esc(lud)}'` + + const vals = `'${id}', '${p}', '${fname}', E'${text}', '${mime}', ${r.sizeBytes}, '${esc(cd)}', '${esc(lud)}'` + (r.project !== undefined ? `, '${esc(r.project)}'` : "") + (r.description !== undefined ? `, '${esc(r.description)}'` : ""); await this.client.query( @@ -277,13 +255,22 @@ export class DeeplakeFs implements IFileSystem { `SELECT path, project, description, creation_date, last_update_date FROM "${this.table}" ` + `WHERE path LIKE '${esc("/summaries/")}%' ORDER BY last_update_date DESC` ); + + // Build a lookup: sessionId → JSONL path from sessionPaths + const sessionPathsByUser = new Map(); + for (const sp of this.sessionPaths) { + // Session path format: /sessions//___.jsonl + const m = sp.match(/\/sessions\/[^/]+\/[^/]+_([^.]+)\.jsonl$/); + if (m) sessionPathsByUser.set(m[1], sp.slice(1)); // strip leading / + } + const lines: string[] = [ "# Session Index", "", "List of all Claude Code sessions with summaries.", "", - "| Session | Created | Last Updated | Project | Description |", - "|---------|---------|--------------|---------|-------------|", + "| Session | Conversation | Created | Last Updated | Project | Description |", + "|---------|-------------|---------|--------------|---------|-------------|", ]; for (const row of rows) { const p = row["path"] as string; @@ -293,11 +280,13 @@ export class DeeplakeFs implements IFileSystem { const summaryUser = match[1]; const sessionId = match[2]; const relPath = `summaries/${summaryUser}/${sessionId}.md`; + const convPath = sessionPathsByUser.get(sessionId); + const convLink = convPath ? `[messages](${convPath})` : ""; const project = (row["project"] as string) || ""; const description = (row["description"] as string) || ""; const creationDate = (row["creation_date"] as string) || ""; const lastUpdateDate = (row["last_update_date"] as string) || ""; - lines.push(`| [${sessionId}](${relPath}) | ${creationDate} | ${lastUpdateDate} | ${project} | ${description} |`); + lines.push(`| [${sessionId}](${relPath}) | ${convLink} | ${creationDate} | ${lastUpdateDate} | ${project} | ${description} |`); } lines.push(""); return lines.join("\n"); @@ -324,16 +313,12 @@ export class DeeplakeFs implements IFileSystem { const inList = uncached.map(p => `'${esc(p)}'`).join(", "); const rows = await this.client.query( - `SELECT path, summary, content FROM "${this.table}" WHERE path IN (${inList})` + `SELECT path, summary FROM "${this.table}" WHERE path IN (${inList})` ); for (const row of rows) { const p = row["path"] as string; - const text = row["summary"] as string; - if (text && text.length > 0) { - this.files.set(p, Buffer.from(text, "utf-8")); - } else if (row["content"] != null) { - this.files.set(p, decodeContent(row["content"])); - } + const text = (row["summary"] as string) ?? ""; + this.files.set(p, Buffer.from(text, "utf-8")); } } @@ -350,7 +335,7 @@ export class DeeplakeFs implements IFileSystem { // 2. Pending batch (written but not yet flushed) const pend = this.pending.get(p); - if (pend) { this.files.set(p, pend.content); return pend.content; } + if (pend) { const buf = Buffer.from(pend.contentText, "utf-8"); this.files.set(p, buf); return buf; } // 3. Session files: concatenate rows from sessions table if (this.sessionPaths.has(p) && this.sessionsTable) { @@ -364,12 +349,12 @@ export class DeeplakeFs implements IFileSystem { return buf; } - // 4. SQL query — content column (BYTEA returned as hex '\x...') + // 4. SQL query — summary column (text content) const rows = await this.client.query( - `SELECT content FROM "${this.table}" WHERE path = '${esc(p)}' LIMIT 1` + `SELECT summary FROM "${this.table}" WHERE path = '${esc(p)}' LIMIT 1` ); if (rows.length === 0) throw fsErr("ENOENT", "no such file or directory", p); - const buf = decodeContent(rows[0]["content"]); + const buf = Buffer.from((rows[0]["summary"] as string) ?? "", "utf-8"); this.files.set(p, buf); return buf; } @@ -402,7 +387,7 @@ export class DeeplakeFs implements IFileSystem { // Pending batch const pend = this.pending.get(p); - if (pend) return pend.contentText || pend.content.toString("utf-8"); + if (pend) return pend.contentText; // Session files: concatenate rows from sessions table, ordered by creation_date if (this.sessionPaths.has(p) && this.sessionsTable) { @@ -416,22 +401,14 @@ export class DeeplakeFs implements IFileSystem { return text; } - // For text files prefer summary column (avoids decoding binary column) const rows = await this.client.query( - `SELECT summary, content FROM "${this.table}" WHERE path = '${esc(p)}' LIMIT 1` + `SELECT summary FROM "${this.table}" WHERE path = '${esc(p)}' LIMIT 1` ); if (rows.length === 0) throw fsErr("ENOENT", "no such file or directory", p); - const row = rows[0]; - const text = row["summary"] as string; - if (text && text.length > 0) { - const buf = Buffer.from(text, "utf-8"); - this.files.set(p, buf); - return text; - } - // Binary file: decode content column - const buf = decodeContent(row["content"]); + const text = (rows[0]["summary"] as string) ?? ""; + const buf = Buffer.from(text, "utf-8"); this.files.set(p, buf); - return buf.toString("utf-8"); + return text; } // ── IFileSystem: writes ─────────────────────────────────────────────────── @@ -444,17 +421,17 @@ export class DeeplakeFs implements IFileSystem { const p = normPath(path); if (this.dirs.has(p) && !this.files.has(p)) throw fsErr("EISDIR", "illegal operation on a directory", p); - const buf = typeof content === "string" ? Buffer.from(content, "utf-8") : Buffer.from(content); + const text = typeof content === "string" ? content : Buffer.from(content).toString("utf-8"); + const buf = Buffer.from(text, "utf-8"); const mime = guessMime(basename(p)); - const contentText = isText(buf) ? buf.toString("utf-8") : ""; this.files.set(p, buf); this.meta.set(p, { size: buf.length, mime, mtime: new Date() }); this.addToTree(p); this.pending.set(p, { - path: p, filename: basename(p), content: buf, - contentText, mimeType: mime, sizeBytes: buf.length, + path: p, filename: basename(p), + contentText: text, mimeType: mime, sizeBytes: buf.length, ...meta, }); @@ -466,17 +443,17 @@ export class DeeplakeFs implements IFileSystem { const p = normPath(path); if (this.dirs.has(p) && !this.files.has(p)) throw fsErr("EISDIR", "illegal operation on a directory", p); - const buf = typeof content === "string" ? Buffer.from(content, "utf-8") : Buffer.from(content); + const text = typeof content === "string" ? content : Buffer.from(content).toString("utf-8"); + const buf = Buffer.from(text, "utf-8"); const mime = guessMime(basename(p)); - const contentText = isText(buf) ? buf.toString("utf-8") : ""; this.files.set(p, buf); this.meta.set(p, { size: buf.length, mime, mtime: new Date() }); this.addToTree(p); this.pending.set(p, { - path: p, filename: basename(p), content: buf, - contentText, mimeType: mime, sizeBytes: buf.length, + path: p, filename: basename(p), + contentText: text, mimeType: mime, sizeBytes: buf.length, }); if (this.pending.size >= BATCH_SIZE) await this.flush(); @@ -489,12 +466,10 @@ export class DeeplakeFs implements IFileSystem { // Fast path: SQL-level concat — no read-back, O(1) per append if (this.files.has(p) || await this.exists(p).catch(() => false)) { - const addHex = Buffer.from(add, "utf-8").toString("hex"); const ts = new Date().toISOString(); await this.client.query( `UPDATE "${this.table}" SET ` + `summary = summary || E'${esc(add)}', ` + - `content = content || E'\\\\x${addHex}', ` + `size_bytes = size_bytes + ${Buffer.byteLength(add, "utf-8")}, ` + `last_update_date = '${ts}' ` + `WHERE path = '${esc(p)}'` @@ -505,7 +480,7 @@ export class DeeplakeFs implements IFileSystem { if (m) { m.size += Buffer.byteLength(add, "utf-8"); m.mtime = new Date(ts); } } else { // File doesn't exist yet — create it - await this.writeFile(p, typeof content === "string" ? Buffer.from(content, "utf-8") : Buffer.from(content), opts); + await this.writeFile(p, content, opts); await this.flush(); } } From 350b2a2f7dc70cbd55f754522b4bfc2ae0b2f411 Mon Sep 17 00:00:00 2001 From: Emanuele Fenocchi Date: Fri, 10 Apr 2026 20:39:04 +0000 Subject: [PATCH 09/17] Update tests for text-only schema and Conversation column - Prefetch tests: SELECT path, summary (no content column) - Virtual index tests: expect Conversation column header - Prefetch mock: return {path, summary} without content --- claude-code/tests/deeplake-fs.test.ts | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/claude-code/tests/deeplake-fs.test.ts b/claude-code/tests/deeplake-fs.test.ts index c4fd600..4cbf03b 100644 --- a/claude-code/tests/deeplake-fs.test.ts +++ b/claude-code/tests/deeplake-fs.test.ts @@ -516,7 +516,7 @@ describe("prefetch", () => { // Should issue exactly one SELECT ... WHERE path IN (...) query const prefetchCalls = (client.query.mock.calls as [string][]).filter( - c => c[0].includes("SELECT path, summary, content") && c[0].includes("IN (") + c => c[0].includes("SELECT path, summary") && c[0].includes("IN (") ); expect(prefetchCalls.length).toBe(1); expect(prefetchCalls[0][0]).toContain("/memory/a.txt"); @@ -541,7 +541,7 @@ describe("prefetch", () => { // Only b.txt should be in the IN list const prefetchCalls = (client.query.mock.calls as [string][]).filter( - c => c[0].includes("SELECT path, summary, content") && c[0].includes("IN (") + c => c[0].includes("SELECT path, summary") && c[0].includes("IN (") ); expect(prefetchCalls.length).toBe(1); expect(prefetchCalls[0][0]).not.toContain("/memory/a.txt"); @@ -557,7 +557,7 @@ describe("prefetch", () => { // No query should be issued — file is in pending batch const prefetchCalls = (client.query.mock.calls as [string][]).filter( - c => c[0].includes("SELECT path, summary, content") + c => c[0].includes("SELECT path, summary") ); expect(prefetchCalls.length).toBe(0); }); @@ -570,7 +570,7 @@ describe("prefetch", () => { // Only a.txt should be queried, nonexistent is not in the tree const prefetchCalls = (client.query.mock.calls as [string][]).filter( - c => c[0].includes("SELECT path, summary, content") && c[0].includes("IN (") + c => c[0].includes("SELECT path, summary") && c[0].includes("IN (") ); expect(prefetchCalls.length).toBe(1); expect(prefetchCalls[0][0]).toContain("/memory/a.txt"); @@ -752,7 +752,7 @@ describe("virtual index.md", () => { ]); const content = await fs.readFile("/index.md"); expect(content).toContain("# Session Index"); - expect(content).toContain("| Session | Created | Last Updated | Project | Description |"); + expect(content).toContain("| Session | Conversation | Created | Last Updated | Project | Description |"); expect(content).toContain("aaa-111"); expect(content).toContain("bbb-222"); expect(content).toContain("my-project"); @@ -807,7 +807,7 @@ describe("virtual index.md", () => { const { fs } = await makeFs({}, "/"); const content = await fs.readFile("/index.md"); expect(content).toContain("# Session Index"); - expect(content).toContain("| Session | Created | Last Updated | Project | Description |"); + expect(content).toContain("| Session | Conversation | Created | Last Updated | Project | Description |"); // No data rows const lines = content.split("\n").filter(l => l.startsWith("| [")); expect(lines.length).toBe(0); From dfd12e9452d3d2d538a9836b7beec316e0fbc71f Mon Sep 17 00:00:00 2001 From: Emanuele Fenocchi Date: Fri, 10 Apr 2026 20:39:19 +0000 Subject: [PATCH 10/17] Remove stale compiled .js/.d.ts from src/ These were generated by tsc into src/ instead of dist/ and caused vitest to resolve stale code instead of the TypeScript source. --- src/deeplake-api.d.ts | 37 --- src/deeplake-api.js | 167 ----------- src/shell/deeplake-fs.d.ts | 69 ----- src/shell/deeplake-fs.js | 512 -------------------------------- src/shell/grep-interceptor.d.ts | 14 - src/shell/grep-interceptor.js | 105 ------- src/utils/debug.d.ts | 1 - src/utils/debug.js | 11 - src/utils/sql.d.ts | 19 -- src/utils/sql.js | 35 --- 10 files changed, 970 deletions(-) delete mode 100644 src/deeplake-api.d.ts delete mode 100644 src/deeplake-api.js delete mode 100644 src/shell/deeplake-fs.d.ts delete mode 100644 src/shell/deeplake-fs.js delete mode 100644 src/shell/grep-interceptor.d.ts delete mode 100644 src/shell/grep-interceptor.js delete mode 100644 src/utils/debug.d.ts delete mode 100644 src/utils/debug.js delete mode 100644 src/utils/sql.d.ts delete mode 100644 src/utils/sql.js diff --git a/src/deeplake-api.d.ts b/src/deeplake-api.d.ts deleted file mode 100644 index 072cdd1..0000000 --- a/src/deeplake-api.d.ts +++ /dev/null @@ -1,37 +0,0 @@ -export interface WriteRow { - path: string; - filename: string; - contentText: string; - mimeType: string; - sizeBytes: number; - project?: string; - description?: string; - creationDate?: string; - lastUpdateDate?: string; -} -export declare class DeeplakeApi { - private token; - private apiUrl; - private orgId; - private workspaceId; - readonly tableName: string; - private _pendingRows; - constructor(token: string, apiUrl: string, orgId: string, workspaceId: string, tableName: string); - /** Execute SQL and return results as row-objects. */ - query(sql: string): Promise[]>; - /** Queue rows for writing. Call commit() to flush. */ - appendRows(rows: WriteRow[]): void; - /** Flush pending rows via SQL. */ - commit(): Promise; - private upsertRowSql; - /** Update specific columns on a row by path. */ - updateColumns(path: string, columns: Record): Promise; - /** Create a BM25 search index on a column. */ - createIndex(column: string): Promise; - /** List all tables in the workspace. */ - listTables(): Promise; - /** Create the memory table if it doesn't already exist. Migrate columns on existing tables. */ - ensureTable(name?: string): Promise; - /** Create the sessions table (uses JSONB for message since every row is a JSON event). */ - ensureSessionsTable(name: string): Promise; -} diff --git a/src/deeplake-api.js b/src/deeplake-api.js deleted file mode 100644 index 3ed5ceb..0000000 --- a/src/deeplake-api.js +++ /dev/null @@ -1,167 +0,0 @@ -import { randomUUID } from "node:crypto"; -import { log as _log } from "./utils/debug.js"; -import { sqlStr } from "./utils/sql.js"; -const log = (msg) => _log("sdk", msg); -export class DeeplakeApi { - token; - apiUrl; - orgId; - workspaceId; - tableName; - _pendingRows = []; - constructor(token, apiUrl, orgId, workspaceId, tableName) { - this.token = token; - this.apiUrl = apiUrl; - this.orgId = orgId; - this.workspaceId = workspaceId; - this.tableName = tableName; - } - /** Execute SQL and return results as row-objects. */ - async query(sql) { - const resp = await fetch(`${this.apiUrl}/workspaces/${this.workspaceId}/tables/query`, { - method: "POST", - headers: { - Authorization: `Bearer ${this.token}`, - "Content-Type": "application/json", - "X-Activeloop-Org-Id": this.orgId, - }, - body: JSON.stringify({ query: sql }), - }); - if (!resp.ok) { - const text = await resp.text().catch(() => ""); - throw new Error(`Query failed: ${resp.status}: ${text.slice(0, 200)}`); - } - const raw = await resp.json(); - if (!raw?.rows || !raw?.columns) - return []; - return raw.rows.map(row => Object.fromEntries(raw.columns.map((col, i) => [col, row[i]]))); - } - // ── Writes ────────────────────────────────────────────────────────────────── - /** Queue rows for writing. Call commit() to flush. */ - appendRows(rows) { - this._pendingRows.push(...rows); - } - /** Flush pending rows via SQL. */ - async commit() { - if (this._pendingRows.length === 0) - return; - const rows = this._pendingRows; - this._pendingRows = []; - const CONCURRENCY = 10; - for (let i = 0; i < rows.length; i += CONCURRENCY) { - const chunk = rows.slice(i, i + CONCURRENCY); - await Promise.allSettled(chunk.map(r => this.upsertRowSql(r))); - } - log(`commit: ${rows.length} rows`); - } - async upsertRowSql(row) { - const ts = new Date().toISOString(); - const cd = row.creationDate ?? ts; - const lud = row.lastUpdateDate ?? ts; - const exists = await this.query(`SELECT path FROM "${this.tableName}" WHERE path = '${sqlStr(row.path)}' LIMIT 1`); - if (exists.length > 0) { - let setClauses = `summary = E'${sqlStr(row.contentText)}', ` + - `mime_type = '${sqlStr(row.mimeType)}', size_bytes = ${row.sizeBytes}, last_update_date = '${lud}'`; - if (row.project !== undefined) - setClauses += `, project = '${sqlStr(row.project)}'`; - if (row.description !== undefined) - setClauses += `, description = '${sqlStr(row.description)}'`; - await this.query(`UPDATE "${this.tableName}" SET ${setClauses} WHERE path = '${sqlStr(row.path)}'`); - } - else { - const id = randomUUID(); - let cols = "id, path, filename, summary, mime_type, size_bytes, creation_date, last_update_date"; - let vals = `'${id}', '${sqlStr(row.path)}', '${sqlStr(row.filename)}', E'${sqlStr(row.contentText)}', '${sqlStr(row.mimeType)}', ${row.sizeBytes}, '${cd}', '${lud}'`; - if (row.project !== undefined) { - cols += ", project"; - vals += `, '${sqlStr(row.project)}'`; - } - if (row.description !== undefined) { - cols += ", description"; - vals += `, '${sqlStr(row.description)}'`; - } - await this.query(`INSERT INTO "${this.tableName}" (${cols}) VALUES (${vals})`); - } - } - /** Update specific columns on a row by path. */ - async updateColumns(path, columns) { - const setClauses = Object.entries(columns) - .map(([col, val]) => typeof val === "number" ? `${col} = ${val}` : `${col} = '${sqlStr(String(val))}'`) - .join(", "); - await this.query(`UPDATE "${this.tableName}" SET ${setClauses} WHERE path = '${sqlStr(path)}'`); - } - // ── Convenience ───────────────────────────────────────────────────────────── - /** Create a BM25 search index on a column. */ - async createIndex(column) { - await this.query(`CREATE INDEX IF NOT EXISTS idx_${sqlStr(column)}_bm25 ON "${this.tableName}" USING deeplake_index ("${column}")`); - } - /** List all tables in the workspace. */ - async listTables() { - const resp = await fetch(`${this.apiUrl}/workspaces/${this.workspaceId}/tables`, { - headers: { - Authorization: `Bearer ${this.token}`, - "X-Activeloop-Org-Id": this.orgId, - }, - }); - if (!resp.ok) - return []; - const data = await resp.json(); - return (data.tables ?? []).map(t => t.table_name); - } - /** Create the memory table if it doesn't already exist. Migrate columns on existing tables. */ - async ensureTable(name) { - const tbl = name ?? this.tableName; - const tables = await this.listTables(); - if (!tables.includes(tbl)) { - log(`table "${tbl}" not found, creating`); - await this.query(`CREATE TABLE IF NOT EXISTS "${tbl}" (` + - `id TEXT NOT NULL DEFAULT '', ` + - `path TEXT NOT NULL DEFAULT '', ` + - `filename TEXT NOT NULL DEFAULT '', ` + - `summary TEXT NOT NULL DEFAULT '', ` + - `author TEXT NOT NULL DEFAULT '', ` + - `mime_type TEXT NOT NULL DEFAULT 'text/plain', ` + - `size_bytes BIGINT NOT NULL DEFAULT 0, ` + - `project TEXT NOT NULL DEFAULT '', ` + - `description TEXT NOT NULL DEFAULT '', ` + - `creation_date TEXT NOT NULL DEFAULT '', ` + - `last_update_date TEXT NOT NULL DEFAULT ''` + - `) USING deeplake`); - log(`table "${tbl}" created`); - } - else { - // Migrate: add new columns if missing on existing tables - for (const col of ["project", "description", "creation_date", "last_update_date", "author"]) { - try { - await this.query(`ALTER TABLE "${tbl}" ADD COLUMN ${col} TEXT NOT NULL DEFAULT ''`); - log(`added column "${col}" to "${tbl}"`); - } - catch { - // Column already exists — ignore - } - } - } - } - /** Create the sessions table (uses JSONB for message since every row is a JSON event). */ - async ensureSessionsTable(name) { - const tables = await this.listTables(); - if (!tables.includes(name)) { - log(`table "${name}" not found, creating`); - await this.query(`CREATE TABLE IF NOT EXISTS "${name}" (` + - `id TEXT NOT NULL DEFAULT '', ` + - `path TEXT NOT NULL DEFAULT '', ` + - `filename TEXT NOT NULL DEFAULT '', ` + - `message JSONB, ` + - `author TEXT NOT NULL DEFAULT '', ` + - `mime_type TEXT NOT NULL DEFAULT 'application/json', ` + - `size_bytes BIGINT NOT NULL DEFAULT 0, ` + - `project TEXT NOT NULL DEFAULT '', ` + - `description TEXT NOT NULL DEFAULT '', ` + - `creation_date TEXT NOT NULL DEFAULT '', ` + - `last_update_date TEXT NOT NULL DEFAULT ''` + - `) USING deeplake`); - log(`table "${name}" created`); - } - } -} -//# sourceMappingURL=deeplake-api.js.map \ No newline at end of file diff --git a/src/shell/deeplake-fs.d.ts b/src/shell/deeplake-fs.d.ts deleted file mode 100644 index 0e54b70..0000000 --- a/src/shell/deeplake-fs.d.ts +++ /dev/null @@ -1,69 +0,0 @@ -import type { DeeplakeApi } from "../deeplake-api.js"; -import type { IFileSystem, FsStat, MkdirOptions, RmOptions, CpOptions, FileContent, BufferEncoding } from "just-bash"; -interface ReadFileOptions { - encoding?: BufferEncoding; -} -interface WriteFileOptions { - encoding?: BufferEncoding; -} -interface DirentEntry { - name: string; - isFile: boolean; - isDirectory: boolean; - isSymbolicLink: boolean; -} -export declare function normPath(p: string): string; -export declare function guessMime(filename: string): string; -export declare class DeeplakeFs implements IFileSystem { - private readonly client; - private readonly table; - readonly mountPoint: string; - private files; - private meta; - private dirs; - private pending; - private flushed; - /** Number of files loaded from the server during bootstrap. */ - get fileCount(): number; - private flushTimer; - private flushChain; - private sessionPaths; - private sessionsTable; - private constructor(); - static create(client: DeeplakeApi, table: string, mount?: string, sessionsTable?: string): Promise; - private addToTree; - private removeFromTree; - private scheduleFlush; - flush(): Promise; - private _doFlush; - private generateVirtualIndex; - readFileBuffer(path: string): Promise; - readFile(path: string, _opts?: ReadFileOptions | BufferEncoding): Promise; - /** Write a file with optional row-level metadata (project, description, dates). */ - writeFileWithMeta(path: string, content: FileContent, meta: { - project?: string; - description?: string; - creationDate?: string; - lastUpdateDate?: string; - }): Promise; - writeFile(path: string, content: FileContent, _opts?: WriteFileOptions | BufferEncoding): Promise; - appendFile(path: string, content: FileContent, opts?: WriteFileOptions | BufferEncoding): Promise; - exists(path: string): Promise; - stat(path: string): Promise; - lstat(path: string): Promise; - chmod(_path: string, _mode: number): Promise; - utimes(_path: string, _atime: Date, _mtime: Date): Promise; - symlink(_target: string, linkPath: string): Promise; - link(_src: string, destPath: string): Promise; - readlink(path: string): Promise; - realpath(path: string): Promise; - mkdir(path: string, opts?: MkdirOptions): Promise; - readdir(path: string): Promise; - readdirWithFileTypes(path: string): Promise; - rm(path: string, opts?: RmOptions): Promise; - cp(src: string, dest: string, opts?: CpOptions): Promise; - mv(src: string, dest: string): Promise; - resolvePath(base: string, path: string): string; - getAllPaths(): string[]; -} -export {}; diff --git a/src/shell/deeplake-fs.js b/src/shell/deeplake-fs.js deleted file mode 100644 index 1a910a0..0000000 --- a/src/shell/deeplake-fs.js +++ /dev/null @@ -1,512 +0,0 @@ -import { basename, posix } from "node:path"; -import { randomUUID } from "node:crypto"; -// ── constants ───────────────────────────────────────────────────────────────── -const BATCH_SIZE = 10; -const FLUSH_DEBOUNCE_MS = 200; -// ── helpers ─────────────────────────────────────────────────────────────────── -export function normPath(p) { - const r = posix.normalize(p.startsWith("/") ? p : "/" + p); - return r === "/" ? r : r.replace(/\/$/, ""); -} -function parentOf(p) { - const i = p.lastIndexOf("/"); - return i <= 0 ? "/" : p.slice(0, i); -} -import { sqlStr as esc } from "../utils/sql.js"; -export function guessMime(filename) { - const ext = filename.split(".").pop()?.toLowerCase() ?? ""; - return ({ - json: "application/json", md: "text/markdown", txt: "text/plain", - js: "text/javascript", ts: "text/typescript", html: "text/html", - css: "text/css", - }[ext] ?? "text/plain"); -} -function fsErr(code, msg, path) { - return Object.assign(new Error(`${code}: ${msg}, '${path}'`), { code }); -} -// ── DeeplakeFs ──────────────────────────────────────────────────────────────── -export class DeeplakeFs { - client; - table; - mountPoint; - // path → Buffer (content) or null (exists but not fetched yet) - files = new Map(); - meta = new Map(); - // dir path → Set of immediate child names - dirs = new Map(); - // batched writes pending SQL flush - pending = new Map(); - // paths that have been flushed (INSERT) at least once — subsequent flushes use UPDATE - flushed = new Set(); - /** Number of files loaded from the server during bootstrap. */ - get fileCount() { return this.files.size; } - flushTimer = null; - // serialize flushes - flushChain = Promise.resolve(); - // Paths that live in the sessions table (multi-row, read by concatenation) - sessionPaths = new Set(); - sessionsTable = null; - constructor(client, table, mountPoint) { - this.client = client; - this.table = table; - this.mountPoint = mountPoint; - this.dirs.set(mountPoint, new Set()); - if (mountPoint !== "/") - this.dirs.set("/", new Set([mountPoint.slice(1)])); - } - static async create(client, table, mount = "/memory", sessionsTable) { - const fs = new DeeplakeFs(client, table, mount); - fs.sessionsTable = sessionsTable ?? null; - // Ensure the table exists before bootstrapping. - await client.ensureTable(); - // Sync table to ensure query engine sees latest writes. - await client.query(`SELECT deeplake_sync_table('${table}')`); - // Bootstrap: load path metadata from memory table. - const sql = `SELECT path, size_bytes, mime_type FROM "${table}" ORDER BY path`; - try { - let rows; - try { - rows = await client.query(sql); - } - catch { - rows = await client.query(sql); - } - for (const row of rows) { - const p = row["path"]; - fs.files.set(p, null); - fs.meta.set(p, { - size: Number(row["size_bytes"] ?? 0), - mime: row["mime_type"] ?? "application/octet-stream", - mtime: new Date(), - }); - fs.addToTree(p); - fs.flushed.add(p); - } - } - catch { - // Table may not exist yet — start empty - } - // Bootstrap: load session paths from sessions table (distinct paths only). - if (sessionsTable) { - try { - await client.query(`SELECT deeplake_sync_table('${sessionsTable}')`); - const sessionRows = await client.query(`SELECT path, SUM(size_bytes) as total_size FROM "${sessionsTable}" GROUP BY path ORDER BY path`); - for (const row of sessionRows) { - const p = row["path"]; - if (!fs.files.has(p)) { - fs.files.set(p, null); - fs.meta.set(p, { - size: Number(row["total_size"] ?? 0), - mime: "application/x-ndjson", - mtime: new Date(), - }); - fs.addToTree(p); - } - fs.sessionPaths.add(p); - } - } - catch { - // Sessions table may not exist yet - } - } - return fs; - } - // ── tree management ─────────────────────────────────────────────────────── - addToTree(filePath) { - const segs = filePath.split("/").filter(Boolean); - for (let d = 0; d < segs.length; d++) { - const dir = d === 0 ? "/" : "/" + segs.slice(0, d).join("/"); - if (!this.dirs.has(dir)) - this.dirs.set(dir, new Set()); - this.dirs.get(dir).add(segs[d]); - } - } - removeFromTree(filePath) { - this.files.delete(filePath); - this.meta.delete(filePath); - this.pending.delete(filePath); - this.flushed.delete(filePath); - const parent = parentOf(filePath); - this.dirs.get(parent)?.delete(basename(filePath)); - } - // ── flush / write batching ──────────────────────────────────────────────── - scheduleFlush() { - if (this.flushTimer !== null) - return; - this.flushTimer = setTimeout(() => { - this.flush().catch(() => { }); - }, FLUSH_DEBOUNCE_MS); - } - async flush() { - this.flushChain = this.flushChain.then(() => this._doFlush()); - return this.flushChain; - } - async _doFlush() { - if (this.pending.size === 0) - return; - if (this.flushTimer !== null) { - clearTimeout(this.flushTimer); - this.flushTimer = null; - } - const rows = [...this.pending.values()]; - this.pending.clear(); - // Upsert: UPDATE existing rows, INSERT new ones. Preserves stable id. - for (const r of rows) { - const text = esc(r.contentText); - const p = esc(r.path); - const fname = esc(r.filename); - const mime = esc(r.mimeType); - const ts = new Date().toISOString(); - const cd = r.creationDate ?? ts; - const lud = r.lastUpdateDate ?? ts; - if (this.flushed.has(r.path)) { - let setClauses = `filename = '${fname}', summary = E'${text}', ` + - `mime_type = '${mime}', size_bytes = ${r.sizeBytes}, last_update_date = '${esc(lud)}'`; - if (r.project !== undefined) - setClauses += `, project = '${esc(r.project)}'`; - if (r.description !== undefined) - setClauses += `, description = '${esc(r.description)}'`; - await this.client.query(`UPDATE "${this.table}" SET ${setClauses} WHERE path = '${p}'`); - } - else { - const id = randomUUID(); - const cols = "id, path, filename, summary, mime_type, size_bytes, creation_date, last_update_date" + - (r.project !== undefined ? ", project" : "") + - (r.description !== undefined ? ", description" : ""); - const vals = `'${id}', '${p}', '${fname}', E'${text}', '${mime}', ${r.sizeBytes}, '${esc(cd)}', '${esc(lud)}'` + - (r.project !== undefined ? `, '${esc(r.project)}'` : "") + - (r.description !== undefined ? `, '${esc(r.description)}'` : ""); - await this.client.query(`INSERT INTO "${this.table}" (${cols}) VALUES (${vals})`); - this.flushed.add(r.path); - } - } - // Sync so subsequent reads see the new data. - await this.client.query(`SELECT deeplake_sync_table('${this.table}')`); - } - // ── Virtual index.md generation ──────────────────────────────────────────── - async generateVirtualIndex() { - const rows = await this.client.query(`SELECT path, project, description, creation_date, last_update_date FROM "${this.table}" ` + - `WHERE path LIKE '${esc("/summaries/")}%' ORDER BY last_update_date DESC`); - const lines = [ - "# Session Index", - "", - "List of all Claude Code sessions with summaries.", - "", - "| Session | Created | Last Updated | Project | Description |", - "|---------|---------|--------------|---------|-------------|", - ]; - for (const row of rows) { - const p = row["path"]; - // Extract session ID from path: /summaries//.md - const match = p.match(/\/summaries\/([^/]+)\/([^/]+)\.md$/); - if (!match) - continue; - const summaryUser = match[1]; - const sessionId = match[2]; - const relPath = `summaries/${summaryUser}/${sessionId}.md`; - const project = row["project"] || ""; - const description = row["description"] || ""; - const creationDate = row["creation_date"] || ""; - const lastUpdateDate = row["last_update_date"] || ""; - lines.push(`| [${sessionId}](${relPath}) | ${creationDate} | ${lastUpdateDate} | ${project} | ${description} |`); - } - lines.push(""); - return lines.join("\n"); - } - // ── IFileSystem: reads ──────────────────────────────────────────────────── - async readFileBuffer(path) { - const p = normPath(path); - if (this.dirs.has(p) && !this.files.has(p)) - throw fsErr("EISDIR", "illegal operation on a directory", p); - if (!this.files.has(p)) - throw fsErr("ENOENT", "no such file or directory", p); - // 1. Content cache - const cached = this.files.get(p); - if (cached !== null && cached !== undefined) - return cached; - // 2. Pending batch (written but not yet flushed) - const pend = this.pending.get(p); - if (pend) { - const buf = Buffer.from(pend.contentText, "utf-8"); - this.files.set(p, buf); - return buf; - } - // 3. Session files: concatenate rows from sessions table - if (this.sessionPaths.has(p) && this.sessionsTable) { - const rows = await this.client.query(`SELECT message FROM "${this.sessionsTable}" WHERE path = '${esc(p)}' ORDER BY creation_date ASC`); - if (rows.length === 0) - throw fsErr("ENOENT", "no such file or directory", p); - const text = rows.map(r => typeof r["message"] === "string" ? r["message"] : JSON.stringify(r["message"])).join("\n"); - const buf = Buffer.from(text, "utf-8"); - this.files.set(p, buf); - return buf; - } - // 4. SQL query — summary column (text content) - const rows = await this.client.query(`SELECT summary FROM "${this.table}" WHERE path = '${esc(p)}' LIMIT 1`); - if (rows.length === 0) - throw fsErr("ENOENT", "no such file or directory", p); - const buf = Buffer.from(rows[0]["summary"] ?? "", "utf-8"); - this.files.set(p, buf); - return buf; - } - async readFile(path, _opts) { - const p = normPath(path); - if (this.dirs.has(p) && !this.files.has(p)) - throw fsErr("EISDIR", "illegal operation on a directory", p); - // Virtual index.md: if no real row exists, generate from summary rows - if (p === "/index.md" && !this.files.has(p)) { - // Check if a real /index.md row exists in the table - const realRows = await this.client.query(`SELECT summary FROM "${this.table}" WHERE path = '${esc("/index.md")}' LIMIT 1`); - if (realRows.length > 0 && realRows[0]["summary"]) { - const text = realRows[0]["summary"]; - const buf = Buffer.from(text, "utf-8"); - this.files.set(p, buf); - return text; - } - // No real row — generate virtual index - return this.generateVirtualIndex(); - } - if (!this.files.has(p)) - throw fsErr("ENOENT", "no such file or directory", p); - // Pending batch - const pend = this.pending.get(p); - if (pend) - return pend.contentText; - // Session files: concatenate rows from sessions table, ordered by creation_date - if (this.sessionPaths.has(p) && this.sessionsTable) { - const rows = await this.client.query(`SELECT message FROM "${this.sessionsTable}" WHERE path = '${esc(p)}' ORDER BY creation_date ASC`); - if (rows.length === 0) - throw fsErr("ENOENT", "no such file or directory", p); - const text = rows.map(r => typeof r["message"] === "string" ? r["message"] : JSON.stringify(r["message"])).join("\n"); - const buf = Buffer.from(text, "utf-8"); - this.files.set(p, buf); - return text; - } - const rows = await this.client.query(`SELECT summary FROM "${this.table}" WHERE path = '${esc(p)}' LIMIT 1`); - if (rows.length === 0) - throw fsErr("ENOENT", "no such file or directory", p); - const text = rows[0]["summary"] ?? ""; - const buf = Buffer.from(text, "utf-8"); - this.files.set(p, buf); - return text; - } - // ── IFileSystem: writes ─────────────────────────────────────────────────── - /** Write a file with optional row-level metadata (project, description, dates). */ - async writeFileWithMeta(path, content, meta) { - const p = normPath(path); - if (this.dirs.has(p) && !this.files.has(p)) - throw fsErr("EISDIR", "illegal operation on a directory", p); - const text = typeof content === "string" ? content : Buffer.from(content).toString("utf-8"); - const buf = Buffer.from(text, "utf-8"); - const mime = guessMime(basename(p)); - this.files.set(p, buf); - this.meta.set(p, { size: buf.length, mime, mtime: new Date() }); - this.addToTree(p); - this.pending.set(p, { - path: p, filename: basename(p), - contentText: text, mimeType: mime, sizeBytes: buf.length, - ...meta, - }); - if (this.pending.size >= BATCH_SIZE) - await this.flush(); - else - this.scheduleFlush(); - } - async writeFile(path, content, _opts) { - const p = normPath(path); - if (this.dirs.has(p) && !this.files.has(p)) - throw fsErr("EISDIR", "illegal operation on a directory", p); - const text = typeof content === "string" ? content : Buffer.from(content).toString("utf-8"); - const buf = Buffer.from(text, "utf-8"); - const mime = guessMime(basename(p)); - this.files.set(p, buf); - this.meta.set(p, { size: buf.length, mime, mtime: new Date() }); - this.addToTree(p); - this.pending.set(p, { - path: p, filename: basename(p), - contentText: text, mimeType: mime, sizeBytes: buf.length, - }); - if (this.pending.size >= BATCH_SIZE) - await this.flush(); - else - this.scheduleFlush(); - } - async appendFile(path, content, opts) { - const p = normPath(path); - const add = typeof content === "string" ? content : Buffer.from(content).toString("utf-8"); - // Fast path: SQL-level concat — no read-back, O(1) per append - if (this.files.has(p) || await this.exists(p).catch(() => false)) { - const ts = new Date().toISOString(); - await this.client.query(`UPDATE "${this.table}" SET ` + - `summary = summary || E'${esc(add)}', ` + - `size_bytes = size_bytes + ${Buffer.byteLength(add, "utf-8")}, ` + - `last_update_date = '${ts}' ` + - `WHERE path = '${esc(p)}'`); - // Update local metadata - const m = this.meta.get(p); - if (m) { - m.size += Buffer.byteLength(add, "utf-8"); - m.mtime = new Date(ts); - } - } - else { - // File doesn't exist yet — create it - await this.writeFile(p, content, opts); - await this.flush(); - } - } - // ── IFileSystem: metadata ───────────────────────────────────────────────── - async exists(path) { - const p = normPath(path); - if (p === "/index.md") - return true; // Virtual index always exists - return this.files.has(p) || this.dirs.has(p); - } - async stat(path) { - const p = normPath(path); - const isFile = this.files.has(p); - const isDir = this.dirs.has(p); - // Virtual index.md: always exists as a file - if (p === "/index.md" && !isFile && !isDir) { - return { - isFile: true, isDirectory: false, isSymbolicLink: false, - mode: 0o644, size: 0, mtime: new Date(), - }; - } - if (!isFile && !isDir) - throw fsErr("ENOENT", "no such file or directory", p); - const m = this.meta.get(p); - return { - isFile: isFile && !isDir, - isDirectory: isDir, - isSymbolicLink: false, - mode: isDir ? 0o755 : 0o644, - size: m?.size ?? 0, - mtime: m?.mtime ?? new Date(), - }; - } - async lstat(path) { return this.stat(path); } - async chmod(_path, _mode) { } - async utimes(_path, _atime, _mtime) { } - async symlink(_target, linkPath) { throw fsErr("EPERM", "operation not permitted", linkPath); } - async link(_src, destPath) { throw fsErr("EPERM", "operation not permitted", destPath); } - async readlink(path) { throw fsErr("EINVAL", "invalid argument", path); } - async realpath(path) { - const p = normPath(path); - if (p === "/index.md") - return p; // Virtual index always exists - if (!this.files.has(p) && !this.dirs.has(p)) - throw fsErr("ENOENT", "no such file or directory", p); - return p; - } - // ── IFileSystem: directories ────────────────────────────────────────────── - async mkdir(path, opts) { - const p = normPath(path); - if (this.files.has(p)) - throw fsErr("EEXIST", "file exists", p); - if (this.dirs.has(p)) { - if (!opts?.recursive) - throw fsErr("EEXIST", "file exists", p); - return; - } - if (!opts?.recursive) { - const parent = parentOf(p); - if (!this.dirs.has(parent)) - throw fsErr("ENOENT", "no such file or directory", parent); - } - this.dirs.set(p, new Set()); - const parent = parentOf(p); - if (!this.dirs.has(parent)) - this.dirs.set(parent, new Set()); - this.dirs.get(parent).add(basename(p)); - } - async readdir(path) { - const p = normPath(path); - if (!this.dirs.has(p)) - throw fsErr("ENOTDIR", "not a directory", p); - const entries = [...(this.dirs.get(p) ?? [])]; - // Virtual index.md: always show in root listing even if no real row exists - if (p === "/" && !entries.includes("index.md")) { - entries.push("index.md"); - } - return entries; - } - async readdirWithFileTypes(path) { - const names = await this.readdir(path); - const p = normPath(path); - return names.map(name => { - const child = p === "/" ? `/${name}` : `${p}/${name}`; - return { - name, - isFile: (this.files.has(child) || child === "/index.md") && !this.dirs.has(child), - isDirectory: this.dirs.has(child), - isSymbolicLink: false, - }; - }); - } - // ── IFileSystem: structural mutations ───────────────────────────────────── - async rm(path, opts) { - const p = normPath(path); - if (!this.files.has(p) && !this.dirs.has(p)) { - if (opts?.force) - return; - throw fsErr("ENOENT", "no such file or directory", p); - } - if (this.dirs.has(p)) { - const children = this.dirs.get(p) ?? new Set(); - if (children.size > 0 && !opts?.recursive) - throw fsErr("ENOTEMPTY", "directory not empty", p); - // Collect all descendant files before mutating state - const toDelete = []; - const stack = [p]; - while (stack.length) { - const cur = stack.pop(); - for (const child of [...(this.dirs.get(cur) ?? [])]) { - const childPath = cur === "/" ? `/${child}` : `${cur}/${child}`; - if (this.files.has(childPath)) - toDelete.push(childPath); - if (this.dirs.has(childPath)) - stack.push(childPath); - } - } - for (const fp of toDelete) - this.removeFromTree(fp); - this.dirs.delete(p); - this.dirs.get(parentOf(p))?.delete(basename(p)); - if (toDelete.length > 0) { - const inList = toDelete.map(fp => `'${esc(fp)}'`).join(", "); - await this.client.query(`DELETE FROM "${this.table}" WHERE path IN (${inList})`); - } - } - else { - await this.client.query(`DELETE FROM "${this.table}" WHERE path = '${esc(p)}'`); - this.removeFromTree(p); - } - } - async cp(src, dest, opts) { - const s = normPath(src), d = normPath(dest); - if (this.dirs.has(s) && !this.files.has(s)) { - if (!opts?.recursive) - throw fsErr("EISDIR", "is a directory", s); - for (const fp of [...this.files.keys()].filter(k => k === s || k.startsWith(s + "/"))) { - await this.writeFile(d + fp.slice(s.length), await this.readFileBuffer(fp)); - } - } - else { - await this.writeFile(d, await this.readFileBuffer(s)); - } - } - async mv(src, dest) { - await this.cp(src, dest, { recursive: true }); - await this.rm(src, { recursive: true, force: true }); - } - resolvePath(base, path) { - if (path.startsWith("/")) - return normPath(path); - return normPath(posix.join(base, path)); - } - getAllPaths() { - return [...new Set([...this.files.keys(), ...this.dirs.keys()])]; - } -} -//# sourceMappingURL=deeplake-fs.js.map \ No newline at end of file diff --git a/src/shell/grep-interceptor.d.ts b/src/shell/grep-interceptor.d.ts deleted file mode 100644 index 88dac7f..0000000 --- a/src/shell/grep-interceptor.d.ts +++ /dev/null @@ -1,14 +0,0 @@ -import type { DeeplakeApi } from "../deeplake-api.js"; -import type { DeeplakeFs } from "./deeplake-fs.js"; -/** - * Custom grep command for just-bash that replaces the built-in when the target - * paths are under the Deeplake mount. Two-phase strategy: - * 1. Coarse BM25 filter via Deeplake SQL → candidate paths - * 2. Prefetch candidates into the in-memory content cache - * 3. Fine-grained regex match line-by-line (in-memory, no further network I/O) - * - * Falls back to ILIKE if BM25 index is unavailable. - * Falls through (returns exitCode=127) for paths outside the mount so - * just-bash can route to its own built-in grep. - */ -export declare function createGrepCommand(client: DeeplakeApi, fs: DeeplakeFs, table: string): import("just-bash").Command; diff --git a/src/shell/grep-interceptor.js b/src/shell/grep-interceptor.js deleted file mode 100644 index 97e1f18..0000000 --- a/src/shell/grep-interceptor.js +++ /dev/null @@ -1,105 +0,0 @@ -import { defineCommand } from "just-bash"; -import yargsParser from "yargs-parser"; -import { sqlStr as esc } from "../utils/sql.js"; -/** - * Custom grep command for just-bash that replaces the built-in when the target - * paths are under the Deeplake mount. Two-phase strategy: - * 1. Coarse BM25 filter via Deeplake SQL → candidate paths - * 2. Prefetch candidates into the in-memory content cache - * 3. Fine-grained regex match line-by-line (in-memory, no further network I/O) - * - * Falls back to ILIKE if BM25 index is unavailable. - * Falls through (returns exitCode=127) for paths outside the mount so - * just-bash can route to its own built-in grep. - */ -export function createGrepCommand(client, fs, table) { - return defineCommand("grep", async (args, ctx) => { - const parsed = yargsParser(args, { - boolean: ["r", "R", "l", "i", "n", "v", "c", "F", "fixed-strings", "recursive", "ignore-case"], - alias: { r: "recursive", R: "recursive", F: "fixed-strings", i: "ignore-case", n: "line-number" }, - }); - const positional = parsed._; - if (positional.length === 0) { - return { stdout: "", stderr: "grep: missing pattern\n", exitCode: 1 }; - } - const pattern = String(positional[0]); - const targetArgs = positional.slice(1); - // Resolve all target paths against cwd - const targets = targetArgs.length > 0 - ? targetArgs.map(t => ctx.fs.resolvePath(ctx.cwd, String(t))).filter(Boolean) - : [ctx.cwd]; - if (targets.length === 0) - return { stdout: "", stderr: "", exitCode: 1 }; - const mount = fs.mountPoint; - // Only intercept if all targets are under our mount point - const allUnderMount = targets.every(t => t === mount || t.startsWith(mount + "/")); - if (!allUnderMount) { - // Signal to caller that this command doesn't handle it - return { stdout: "", stderr: "", exitCode: 127 }; - } - // ── Phase 1: coarse filter — try BM25, fall back to in-memory ────────── - let candidates = []; - try { - const bm25 = await Promise.race([ - client.query(`SELECT path FROM "${table}" WHERE summary <#> '${esc(pattern)}' LIMIT 50`), - new Promise((_, reject) => setTimeout(() => reject(new Error("timeout")), 3000)), - ]); - candidates = bm25.map(r => r["path"]).filter(Boolean); - } - catch { - // BM25 index not available or timed out — fall back to in-memory - } - if (candidates.length === 0) { - // No BM25 results or no index — use all files under targets and search in-memory - candidates = fs.getAllPaths().filter(p => !p.endsWith("/")); - } - // Narrow candidates to those under the requested targets - candidates = candidates.filter(c => targets.some(t => t === "/" || c === t || c.startsWith(t + "/"))); - // ── Phase 2: prefetch into content cache (parallel) ───────────────────── - await Promise.all(candidates.map(p => fs.readFile(p).catch(() => null))); - // ── Phase 3: fine-grained in-memory match ──────────────────────────────── - const fixedString = parsed.F || parsed["fixed-strings"]; - const ignoreCase = parsed.i || parsed["ignore-case"]; - const showLine = parsed.n || parsed["line-number"]; - const invertMatch = parsed.v; - const filesOnly = parsed.l; - const countOnly = parsed.c; - const re = new RegExp(fixedString ? pattern.replace(/[.*+?^${}()|[\]\\]/g, "\\$&") : pattern, ignoreCase ? "i" : ""); - const output = []; - const multipleFiles = candidates.length > 1; - for (const fp of candidates) { - const content = await fs.readFile(fp).catch(() => null); - if (content === null) - continue; - const lines = content.split("\n"); - const matchedLines = []; - for (let i = 0; i < lines.length; i++) { - const matched = re.test(lines[i]); - if (matched !== invertMatch) { - if (filesOnly) { - output.push(fp); - break; - } - const prefix = multipleFiles ? `${fp}:` : ""; - const lineNo = showLine ? `${i + 1}:` : ""; - matchedLines.push(`${prefix}${lineNo}${lines[i]}`); - } - } - if (!filesOnly) { - if (countOnly) { - const prefix = multipleFiles ? `${fp}:` : ""; - output.push(`${prefix}${matchedLines.length}`); - } - else { - output.push(...matchedLines); - } - } - } - return { - stdout: output.length > 0 ? output.join("\n") + "\n" : "", - stderr: "", - exitCode: output.length > 0 ? 0 : 1, - }; - }); -} -//# sourceMappingURL=grep-interceptor.js.map \ No newline at end of file diff --git a/src/utils/debug.d.ts b/src/utils/debug.d.ts deleted file mode 100644 index be96180..0000000 --- a/src/utils/debug.d.ts +++ /dev/null @@ -1 +0,0 @@ -export declare function log(tag: string, msg: string): void; diff --git a/src/utils/debug.js b/src/utils/debug.js deleted file mode 100644 index 932fdc7..0000000 --- a/src/utils/debug.js +++ /dev/null @@ -1,11 +0,0 @@ -import { appendFileSync } from "node:fs"; -import { join } from "node:path"; -import { homedir } from "node:os"; -const DEBUG = process.env.DEEPLAKE_DEBUG === "1"; -const LOG = join(homedir(), ".deeplake", "hook-debug.log"); -export function log(tag, msg) { - if (!DEBUG) - return; - appendFileSync(LOG, `${new Date().toISOString()} [${tag}] ${msg}\n`); -} -//# sourceMappingURL=debug.js.map \ No newline at end of file diff --git a/src/utils/sql.d.ts b/src/utils/sql.d.ts deleted file mode 100644 index c934a45..0000000 --- a/src/utils/sql.d.ts +++ /dev/null @@ -1,19 +0,0 @@ -/** - * SQL escaping utilities for Deeplake SQL API. - * - * The Deeplake HTTP query endpoint does not support parameterized queries, - * so we must escape values carefully before interpolation. - */ -/** - * Escape a string value for use inside a SQL single-quoted literal. - * Handles: single quotes, backslashes, NUL bytes, and control characters. - */ -export declare function sqlStr(value: string): string; -/** - * Escape a string for use inside a SQL LIKE/ILIKE pattern. - */ -export declare function sqlLike(value: string): string; -/** - * Validate and return a safe SQL identifier (table or column name). - */ -export declare function sqlIdent(name: string): string; diff --git a/src/utils/sql.js b/src/utils/sql.js deleted file mode 100644 index 60f441f..0000000 --- a/src/utils/sql.js +++ /dev/null @@ -1,35 +0,0 @@ -/** - * SQL escaping utilities for Deeplake SQL API. - * - * The Deeplake HTTP query endpoint does not support parameterized queries, - * so we must escape values carefully before interpolation. - */ -/** - * Escape a string value for use inside a SQL single-quoted literal. - * Handles: single quotes, backslashes, NUL bytes, and control characters. - */ -export function sqlStr(value) { - return value - .replace(/\\/g, "\\\\") - .replace(/'/g, "''") - .replace(/\0/g, "") - .replace(/[\x01-\x08\x0b\x0c\x0e-\x1f\x7f]/g, ""); -} -/** - * Escape a string for use inside a SQL LIKE/ILIKE pattern. - */ -export function sqlLike(value) { - return sqlStr(value) - .replace(/%/g, "\\%") - .replace(/_/g, "\\_"); -} -/** - * Validate and return a safe SQL identifier (table or column name). - */ -export function sqlIdent(name) { - if (!/^[a-zA-Z_][a-zA-Z0-9_]*$/.test(name)) { - throw new Error(`Invalid SQL identifier: ${JSON.stringify(name)}`); - } - return name; -} -//# sourceMappingURL=sql.js.map \ No newline at end of file From 6b2760f1fd0b7342850c4475b3865b76a2c9f42b Mon Sep 17 00:00:00 2001 From: Emanuele Fenocchi Date: Fri, 10 Apr 2026 20:39:24 +0000 Subject: [PATCH 11/17] Rebuild bundles for text-only schema and Conversation column --- claude-code/bundle/shell/deeplake-shell.js | 113 ++++++++------------- 1 file changed, 41 insertions(+), 72 deletions(-) diff --git a/claude-code/bundle/shell/deeplake-shell.js b/claude-code/bundle/shell/deeplake-shell.js index 50633c5..04baf79 100755 --- a/claude-code/bundle/shell/deeplake-shell.js +++ b/claude-code/bundle/shell/deeplake-shell.js @@ -66889,13 +66889,12 @@ var DeeplakeApi = class { log2(`commit: ${rows.length} rows`); } async upsertRowSql(row) { - const hex = row.content.toString("hex"); const ts3 = (/* @__PURE__ */ new Date()).toISOString(); const cd = row.creationDate ?? ts3; const lud = row.lastUpdateDate ?? ts3; const exists = await this.query(`SELECT path FROM "${this.tableName}" WHERE path = '${sqlStr(row.path)}' LIMIT 1`); if (exists.length > 0) { - let setClauses = `content = E'\\\\x${hex}', summary = E'${sqlStr(row.contentText)}', mime_type = '${sqlStr(row.mimeType)}', size_bytes = ${row.sizeBytes}, last_update_date = '${lud}'`; + let setClauses = `summary = E'${sqlStr(row.contentText)}', mime_type = '${sqlStr(row.mimeType)}', size_bytes = ${row.sizeBytes}, last_update_date = '${lud}'`; if (row.project !== void 0) setClauses += `, project = '${sqlStr(row.project)}'`; if (row.description !== void 0) @@ -66903,8 +66902,8 @@ var DeeplakeApi = class { await this.query(`UPDATE "${this.tableName}" SET ${setClauses} WHERE path = '${sqlStr(row.path)}'`); } else { const id = randomUUID(); - let cols = "id, path, filename, content, summary, mime_type, size_bytes, creation_date, last_update_date"; - let vals = `'${id}', '${sqlStr(row.path)}', '${sqlStr(row.filename)}', E'\\\\x${hex}', E'${sqlStr(row.contentText)}', '${sqlStr(row.mimeType)}', ${row.sizeBytes}, '${cd}', '${lud}'`; + let cols = "id, path, filename, summary, mime_type, size_bytes, creation_date, last_update_date"; + let vals = `'${id}', '${sqlStr(row.path)}', '${sqlStr(row.filename)}', E'${sqlStr(row.contentText)}', '${sqlStr(row.mimeType)}', ${row.sizeBytes}, '${cd}', '${lud}'`; if (row.project !== void 0) { cols += ", project"; vals += `, '${sqlStr(row.project)}'`; @@ -66961,7 +66960,7 @@ var DeeplakeApi = class { const tables = await this.listTables(); if (!tables.includes(tbl)) { log2(`table "${tbl}" not found, creating`); - await this.query(`CREATE TABLE IF NOT EXISTS "${tbl}" (id TEXT NOT NULL DEFAULT '', path TEXT NOT NULL DEFAULT '', filename TEXT NOT NULL DEFAULT '', content BYTEA NOT NULL DEFAULT ''::bytea, summary TEXT NOT NULL DEFAULT '', author TEXT NOT NULL DEFAULT '', mime_type TEXT NOT NULL DEFAULT 'application/octet-stream', size_bytes BIGINT NOT NULL DEFAULT 0, project TEXT NOT NULL DEFAULT '', description TEXT NOT NULL DEFAULT '', creation_date TEXT NOT NULL DEFAULT '', last_update_date TEXT NOT NULL DEFAULT '') USING deeplake`); + await this.query(`CREATE TABLE IF NOT EXISTS "${tbl}" (id TEXT NOT NULL DEFAULT '', path TEXT NOT NULL DEFAULT '', filename TEXT NOT NULL DEFAULT '', summary TEXT NOT NULL DEFAULT '', author TEXT NOT NULL DEFAULT '', mime_type TEXT NOT NULL DEFAULT 'text/plain', size_bytes BIGINT NOT NULL DEFAULT 0, project TEXT NOT NULL DEFAULT '', description TEXT NOT NULL DEFAULT '', creation_date TEXT NOT NULL DEFAULT '', last_update_date TEXT NOT NULL DEFAULT '') USING deeplake`); log2(`table "${tbl}" created`); } else { for (const col of ["project", "description", "creation_date", "last_update_date", "author"]) { @@ -66989,7 +66988,6 @@ import { basename as basename4, posix } from "node:path"; import { randomUUID as randomUUID2 } from "node:crypto"; var BATCH_SIZE = 10; var FLUSH_DEBOUNCE_MS = 200; -var TEXT_DETECT_BYTES = 4096; function normPath(p22) { const r10 = posix.normalize(p22.startsWith("/") ? p22 : "/" + p22); return r10 === "/" ? r10 : r10.replace(/\/$/, ""); @@ -66998,13 +66996,6 @@ function parentOf(p22) { const i11 = p22.lastIndexOf("/"); return i11 <= 0 ? "/" : p22.slice(0, i11); } -function isText(buf) { - const end = Math.min(buf.length, TEXT_DETECT_BYTES); - for (let i11 = 0; i11 < end; i11++) - if (buf[i11] === 0) - return false; - return true; -} function guessMime(filename) { const ext2 = filename.split(".").pop()?.toLowerCase() ?? ""; return { @@ -67014,29 +67005,12 @@ function guessMime(filename) { js: "text/javascript", ts: "text/typescript", html: "text/html", - css: "text/css", - png: "image/png", - jpg: "image/jpeg", - jpeg: "image/jpeg", - pdf: "application/pdf", - svg: "image/svg+xml", - gz: "application/gzip", - zip: "application/zip" - }[ext2] ?? "application/octet-stream"; + css: "text/css" + }[ext2] ?? "text/plain"; } function fsErr(code, msg, path2) { return Object.assign(new Error(`${code}: ${msg}, '${path2}'`), { code }); } -function decodeContent(raw) { - if (raw instanceof Uint8Array) - return Buffer.from(raw); - if (Buffer.isBuffer(raw)) - return raw; - if (typeof raw === "string") { - return raw.startsWith("\\x") ? Buffer.from(raw.slice(2), "hex") : Buffer.from(raw, "base64"); - } - throw new Error(`Unexpected content type: ${typeof raw}`); -} var DeeplakeFs = class _DeeplakeFs { client; table; @@ -67179,7 +67153,6 @@ var DeeplakeFs = class _DeeplakeFs { } } async upsertRow(r10) { - const hex = r10.content.toString("hex"); const text = sqlStr(r10.contentText); const p22 = sqlStr(r10.path); const fname = sqlStr(r10.filename); @@ -67188,7 +67161,7 @@ var DeeplakeFs = class _DeeplakeFs { const cd = r10.creationDate ?? ts3; const lud = r10.lastUpdateDate ?? ts3; if (this.flushed.has(r10.path)) { - let setClauses = `filename = '${fname}', content = E'\\\\x${hex}', summary = E'${text}', mime_type = '${mime}', size_bytes = ${r10.sizeBytes}, last_update_date = '${sqlStr(lud)}'`; + let setClauses = `filename = '${fname}', summary = E'${text}', mime_type = '${mime}', size_bytes = ${r10.sizeBytes}, last_update_date = '${sqlStr(lud)}'`; if (r10.project !== void 0) setClauses += `, project = '${sqlStr(r10.project)}'`; if (r10.description !== void 0) @@ -67196,8 +67169,8 @@ var DeeplakeFs = class _DeeplakeFs { await this.client.query(`UPDATE "${this.table}" SET ${setClauses} WHERE path = '${p22}'`); } else { const id = randomUUID2(); - const cols = "id, path, filename, content, summary, mime_type, size_bytes, creation_date, last_update_date" + (r10.project !== void 0 ? ", project" : "") + (r10.description !== void 0 ? ", description" : ""); - const vals = `'${id}', '${p22}', '${fname}', E'\\\\x${hex}', E'${text}', '${mime}', ${r10.sizeBytes}, '${sqlStr(cd)}', '${sqlStr(lud)}'` + (r10.project !== void 0 ? `, '${sqlStr(r10.project)}'` : "") + (r10.description !== void 0 ? `, '${sqlStr(r10.description)}'` : ""); + const cols = "id, path, filename, summary, mime_type, size_bytes, creation_date, last_update_date" + (r10.project !== void 0 ? ", project" : "") + (r10.description !== void 0 ? ", description" : ""); + const vals = `'${id}', '${p22}', '${fname}', E'${text}', '${mime}', ${r10.sizeBytes}, '${sqlStr(cd)}', '${sqlStr(lud)}'` + (r10.project !== void 0 ? `, '${sqlStr(r10.project)}'` : "") + (r10.description !== void 0 ? `, '${sqlStr(r10.description)}'` : ""); await this.client.query(`INSERT INTO "${this.table}" (${cols}) VALUES (${vals})`); this.flushed.add(r10.path); } @@ -67205,13 +67178,19 @@ var DeeplakeFs = class _DeeplakeFs { // ── Virtual index.md generation ──────────────────────────────────────────── async generateVirtualIndex() { const rows = await this.client.query(`SELECT path, project, description, creation_date, last_update_date FROM "${this.table}" WHERE path LIKE '${sqlStr("/summaries/")}%' ORDER BY last_update_date DESC`); + const sessionPathsByUser = /* @__PURE__ */ new Map(); + for (const sp of this.sessionPaths) { + const m26 = sp.match(/\/sessions\/[^/]+\/[^/]+_([^.]+)\.jsonl$/); + if (m26) + sessionPathsByUser.set(m26[1], sp.slice(1)); + } const lines = [ "# Session Index", "", "List of all Claude Code sessions with summaries.", "", - "| Session | Created | Last Updated | Project | Description |", - "|---------|---------|--------------|---------|-------------|" + "| Session | Conversation | Created | Last Updated | Project | Description |", + "|---------|-------------|---------|--------------|---------|-------------|" ]; for (const row of rows) { const p22 = row["path"]; @@ -67221,11 +67200,13 @@ var DeeplakeFs = class _DeeplakeFs { const summaryUser = match2[1]; const sessionId = match2[2]; const relPath = `summaries/${summaryUser}/${sessionId}.md`; + const convPath = sessionPathsByUser.get(sessionId); + const convLink = convPath ? `[messages](${convPath})` : ""; const project = row["project"] || ""; const description = row["description"] || ""; const creationDate = row["creation_date"] || ""; const lastUpdateDate = row["last_update_date"] || ""; - lines.push(`| [${sessionId}](${relPath}) | ${creationDate} | ${lastUpdateDate} | ${project} | ${description} |`); + lines.push(`| [${sessionId}](${relPath}) | ${convLink} | ${creationDate} | ${lastUpdateDate} | ${project} | ${description} |`); } lines.push(""); return lines.join("\n"); @@ -67253,15 +67234,11 @@ var DeeplakeFs = class _DeeplakeFs { if (uncached.length === 0) return; const inList = uncached.map((p22) => `'${sqlStr(p22)}'`).join(", "); - const rows = await this.client.query(`SELECT path, summary, content FROM "${this.table}" WHERE path IN (${inList})`); + const rows = await this.client.query(`SELECT path, summary FROM "${this.table}" WHERE path IN (${inList})`); for (const row of rows) { const p22 = row["path"]; - const text = row["summary"]; - if (text && text.length > 0) { - this.files.set(p22, Buffer.from(text, "utf-8")); - } else if (row["content"] != null) { - this.files.set(p22, decodeContent(row["content"])); - } + const text = row["summary"] ?? ""; + this.files.set(p22, Buffer.from(text, "utf-8")); } } // ── IFileSystem: reads ──────────────────────────────────────────────────── @@ -67276,8 +67253,9 @@ var DeeplakeFs = class _DeeplakeFs { return cached; const pend = this.pending.get(p22); if (pend) { - this.files.set(p22, pend.content); - return pend.content; + const buf2 = Buffer.from(pend.contentText, "utf-8"); + this.files.set(p22, buf2); + return buf2; } if (this.sessionPaths.has(p22) && this.sessionsTable) { const rows2 = await this.client.query(`SELECT message FROM "${this.sessionsTable}" WHERE path = '${sqlStr(p22)}' ORDER BY creation_date ASC`); @@ -67288,10 +67266,10 @@ var DeeplakeFs = class _DeeplakeFs { this.files.set(p22, buf2); return buf2; } - const rows = await this.client.query(`SELECT content FROM "${this.table}" WHERE path = '${sqlStr(p22)}' LIMIT 1`); + const rows = await this.client.query(`SELECT summary FROM "${this.table}" WHERE path = '${sqlStr(p22)}' LIMIT 1`); if (rows.length === 0) throw fsErr("ENOENT", "no such file or directory", p22); - const buf = decodeContent(rows[0]["content"]); + const buf = Buffer.from(rows[0]["summary"] ?? "", "utf-8"); this.files.set(p22, buf); return buf; } @@ -67316,7 +67294,7 @@ var DeeplakeFs = class _DeeplakeFs { return cached.toString("utf-8"); const pend = this.pending.get(p22); if (pend) - return pend.contentText || pend.content.toString("utf-8"); + return pend.contentText; if (this.sessionPaths.has(p22) && this.sessionsTable) { const rows2 = await this.client.query(`SELECT message FROM "${this.sessionsTable}" WHERE path = '${sqlStr(p22)}' ORDER BY creation_date ASC`); if (rows2.length === 0) @@ -67326,19 +67304,13 @@ var DeeplakeFs = class _DeeplakeFs { this.files.set(p22, buf2); return text2; } - const rows = await this.client.query(`SELECT summary, content FROM "${this.table}" WHERE path = '${sqlStr(p22)}' LIMIT 1`); + const rows = await this.client.query(`SELECT summary FROM "${this.table}" WHERE path = '${sqlStr(p22)}' LIMIT 1`); if (rows.length === 0) throw fsErr("ENOENT", "no such file or directory", p22); - const row = rows[0]; - const text = row["summary"]; - if (text && text.length > 0) { - const buf2 = Buffer.from(text, "utf-8"); - this.files.set(p22, buf2); - return text; - } - const buf = decodeContent(row["content"]); + const text = rows[0]["summary"] ?? ""; + const buf = Buffer.from(text, "utf-8"); this.files.set(p22, buf); - return buf.toString("utf-8"); + return text; } // ── IFileSystem: writes ─────────────────────────────────────────────────── /** Write a file with optional row-level metadata (project, description, dates). */ @@ -67346,17 +67318,16 @@ var DeeplakeFs = class _DeeplakeFs { const p22 = normPath(path2); if (this.dirs.has(p22) && !this.files.has(p22)) throw fsErr("EISDIR", "illegal operation on a directory", p22); - const buf = typeof content === "string" ? Buffer.from(content, "utf-8") : Buffer.from(content); + const text = typeof content === "string" ? content : Buffer.from(content).toString("utf-8"); + const buf = Buffer.from(text, "utf-8"); const mime = guessMime(basename4(p22)); - const contentText = isText(buf) ? buf.toString("utf-8") : ""; this.files.set(p22, buf); this.meta.set(p22, { size: buf.length, mime, mtime: /* @__PURE__ */ new Date() }); this.addToTree(p22); this.pending.set(p22, { path: p22, filename: basename4(p22), - content: buf, - contentText, + contentText: text, mimeType: mime, sizeBytes: buf.length, ...meta @@ -67370,17 +67341,16 @@ var DeeplakeFs = class _DeeplakeFs { const p22 = normPath(path2); if (this.dirs.has(p22) && !this.files.has(p22)) throw fsErr("EISDIR", "illegal operation on a directory", p22); - const buf = typeof content === "string" ? Buffer.from(content, "utf-8") : Buffer.from(content); + const text = typeof content === "string" ? content : Buffer.from(content).toString("utf-8"); + const buf = Buffer.from(text, "utf-8"); const mime = guessMime(basename4(p22)); - const contentText = isText(buf) ? buf.toString("utf-8") : ""; this.files.set(p22, buf); this.meta.set(p22, { size: buf.length, mime, mtime: /* @__PURE__ */ new Date() }); this.addToTree(p22); this.pending.set(p22, { path: p22, filename: basename4(p22), - content: buf, - contentText, + contentText: text, mimeType: mime, sizeBytes: buf.length }); @@ -67393,9 +67363,8 @@ var DeeplakeFs = class _DeeplakeFs { const p22 = normPath(path2); const add = typeof content === "string" ? content : Buffer.from(content).toString("utf-8"); if (this.files.has(p22) || await this.exists(p22).catch(() => false)) { - const addHex = Buffer.from(add, "utf-8").toString("hex"); const ts3 = (/* @__PURE__ */ new Date()).toISOString(); - await this.client.query(`UPDATE "${this.table}" SET summary = summary || E'${sqlStr(add)}', content = content || E'\\\\x${addHex}', size_bytes = size_bytes + ${Buffer.byteLength(add, "utf-8")}, last_update_date = '${ts3}' WHERE path = '${sqlStr(p22)}'`); + await this.client.query(`UPDATE "${this.table}" SET summary = summary || E'${sqlStr(add)}', size_bytes = size_bytes + ${Buffer.byteLength(add, "utf-8")}, last_update_date = '${ts3}' WHERE path = '${sqlStr(p22)}'`); this.files.set(p22, null); const m26 = this.meta.get(p22); if (m26) { @@ -67403,7 +67372,7 @@ var DeeplakeFs = class _DeeplakeFs { m26.mtime = new Date(ts3); } } else { - await this.writeFile(p22, typeof content === "string" ? Buffer.from(content, "utf-8") : Buffer.from(content), opts); + await this.writeFile(p22, content, opts); await this.flush(); } } From 84702e647f24400ea8d091549950fb5a1869d383 Mon Sep 17 00:00:00 2001 From: Emanuele Fenocchi Date: Fri, 10 Apr 2026 20:49:03 +0000 Subject: [PATCH 12/17] Reject appendFile on session paths with EPERM Session JSONL files live in the sessions table (multi-row), not the memory table. An appendFile UPDATE against the memory table silently matched 0 rows. Now throws EPERM early. --- claude-code/bundle/shell/deeplake-shell.js | 2 ++ src/shell/deeplake-fs.ts | 3 +++ 2 files changed, 5 insertions(+) diff --git a/claude-code/bundle/shell/deeplake-shell.js b/claude-code/bundle/shell/deeplake-shell.js index 04baf79..4f945ae 100755 --- a/claude-code/bundle/shell/deeplake-shell.js +++ b/claude-code/bundle/shell/deeplake-shell.js @@ -67362,6 +67362,8 @@ var DeeplakeFs = class _DeeplakeFs { async appendFile(path2, content, opts) { const p22 = normPath(path2); const add = typeof content === "string" ? content : Buffer.from(content).toString("utf-8"); + if (this.sessionPaths.has(p22)) + throw fsErr("EPERM", "session files are read-only", p22); if (this.files.has(p22) || await this.exists(p22).catch(() => false)) { const ts3 = (/* @__PURE__ */ new Date()).toISOString(); await this.client.query(`UPDATE "${this.table}" SET summary = summary || E'${sqlStr(add)}', size_bytes = size_bytes + ${Buffer.byteLength(add, "utf-8")}, last_update_date = '${ts3}' WHERE path = '${sqlStr(p22)}'`); diff --git a/src/shell/deeplake-fs.ts b/src/shell/deeplake-fs.ts index 31b46c9..2bb01e6 100644 --- a/src/shell/deeplake-fs.ts +++ b/src/shell/deeplake-fs.ts @@ -464,6 +464,9 @@ export class DeeplakeFs implements IFileSystem { const p = normPath(path); const add = typeof content === "string" ? content : Buffer.from(content).toString("utf-8"); + // Session files are read-only (multi-row in sessions table, not memory table) + if (this.sessionPaths.has(p)) throw fsErr("EPERM", "session files are read-only", p); + // Fast path: SQL-level concat — no read-back, O(1) per append if (this.files.has(p) || await this.exists(p).catch(() => false)) { const ts = new Date().toISOString(); From e36c46c8423cef7a3f8386d63d4038711b87f7f2 Mon Sep 17 00:00:00 2001 From: Emanuele Fenocchi Date: Fri, 10 Apr 2026 21:15:28 +0000 Subject: [PATCH 13/17] Guard all write operations on session paths with EPERM MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Session JSONL files are read-only through the VFS — they live in the sessions table and are written only by the capture hook. Previously writeFile, rm, cp (to session dest), and mv on session paths either silently created ghost rows in the memory table or faked a delete that reverted on next bootstrap. Now all mutating operations throw EPERM early. Reads and cp-from session source still work. --- claude-code/tests/sessions-table.test.ts | 63 ++++++++++++++++++++++++ src/shell/deeplake-fs.ts | 7 +++ 2 files changed, 70 insertions(+) diff --git a/claude-code/tests/sessions-table.test.ts b/claude-code/tests/sessions-table.test.ts index a4aa94f..5dca82a 100644 --- a/claude-code/tests/sessions-table.test.ts +++ b/claude-code/tests/sessions-table.test.ts @@ -195,6 +195,69 @@ describe("DeeplakeFs — multiple sessions in same table", () => { }); }); +describe("session files are read-only", () => { + async function makeFsWithSession() { + const sessionRows: Row[] = [ + { path: "/sessions/alice/alice_org_default_s1.jsonl", text_content: '{"type":"user_message"}', size_bytes: 22, mime_type: "application/json", creation_date: "2026-01-01T00:00:01Z" }, + ]; + const memoryRows: Row[] = [ + { path: "/notes.md", text_content: "hello", size_bytes: 5, mime_type: "text/markdown", creation_date: "2026-01-01" }, + ]; + const client = makeClient(memoryRows, sessionRows); + const fs = await DeeplakeFs.create(client as never, "memory", "/", "sessions"); + return { fs, client }; + } + + it("writeFile rejects session paths with EPERM", async () => { + const { fs } = await makeFsWithSession(); + await expect(fs.writeFile("/sessions/alice/alice_org_default_s1.jsonl", "overwrite")) + .rejects.toMatchObject({ code: "EPERM" }); + }); + + it("appendFile rejects session paths with EPERM", async () => { + const { fs } = await makeFsWithSession(); + await expect(fs.appendFile("/sessions/alice/alice_org_default_s1.jsonl", "append")) + .rejects.toMatchObject({ code: "EPERM" }); + }); + + it("rm rejects session paths with EPERM", async () => { + const { fs } = await makeFsWithSession(); + await expect(fs.rm("/sessions/alice/alice_org_default_s1.jsonl")) + .rejects.toMatchObject({ code: "EPERM" }); + }); + + it("cp rejects session path as destination with EPERM", async () => { + const { fs } = await makeFsWithSession(); + await expect(fs.cp("/notes.md", "/sessions/alice/alice_org_default_s1.jsonl")) + .rejects.toMatchObject({ code: "EPERM" }); + }); + + it("mv rejects session path as source with EPERM", async () => { + const { fs } = await makeFsWithSession(); + await expect(fs.mv("/sessions/alice/alice_org_default_s1.jsonl", "/moved.jsonl")) + .rejects.toMatchObject({ code: "EPERM" }); + }); + + it("mv rejects session path as destination with EPERM", async () => { + const { fs } = await makeFsWithSession(); + await expect(fs.mv("/notes.md", "/sessions/alice/alice_org_default_s1.jsonl")) + .rejects.toMatchObject({ code: "EPERM" }); + }); + + it("readFile still works on session paths", async () => { + const { fs } = await makeFsWithSession(); + const content = await fs.readFile("/sessions/alice/alice_org_default_s1.jsonl"); + expect(content).toContain("user_message"); + }); + + it("cp from session path as source works (read-only source is fine)", async () => { + const { fs } = await makeFsWithSession(); + await fs.cp("/sessions/alice/alice_org_default_s1.jsonl", "/copy.jsonl"); + const content = await fs.readFile("/copy.jsonl"); + expect(content).toContain("user_message"); + }); +}); + describe("ensureSessionsTable schema", () => { it("creates table with JSONB message column", async () => { const client = { diff --git a/src/shell/deeplake-fs.ts b/src/shell/deeplake-fs.ts index 2bb01e6..85783b3 100644 --- a/src/shell/deeplake-fs.ts +++ b/src/shell/deeplake-fs.ts @@ -419,6 +419,7 @@ export class DeeplakeFs implements IFileSystem { meta: { project?: string; description?: string; creationDate?: string; lastUpdateDate?: string }, ): Promise { const p = normPath(path); + if (this.sessionPaths.has(p)) throw fsErr("EPERM", "session files are read-only", p); if (this.dirs.has(p) && !this.files.has(p)) throw fsErr("EISDIR", "illegal operation on a directory", p); const text = typeof content === "string" ? content : Buffer.from(content).toString("utf-8"); @@ -441,6 +442,7 @@ export class DeeplakeFs implements IFileSystem { async writeFile(path: string, content: FileContent, _opts?: WriteFileOptions | BufferEncoding): Promise { const p = normPath(path); + if (this.sessionPaths.has(p)) throw fsErr("EPERM", "session files are read-only", p); if (this.dirs.has(p) && !this.files.has(p)) throw fsErr("EISDIR", "illegal operation on a directory", p); const text = typeof content === "string" ? content : Buffer.from(content).toString("utf-8"); @@ -581,6 +583,7 @@ export class DeeplakeFs implements IFileSystem { async rm(path: string, opts?: RmOptions): Promise { const p = normPath(path); + if (this.sessionPaths.has(p)) throw fsErr("EPERM", "session files are read-only", p); if (!this.files.has(p) && !this.dirs.has(p)) { if (opts?.force) return; throw fsErr("ENOENT", "no such file or directory", p); @@ -617,6 +620,7 @@ export class DeeplakeFs implements IFileSystem { async cp(src: string, dest: string, opts?: CpOptions): Promise { const s = normPath(src), d = normPath(dest); + if (this.sessionPaths.has(d)) throw fsErr("EPERM", "session files are read-only", d); if (this.dirs.has(s) && !this.files.has(s)) { if (!opts?.recursive) throw fsErr("EISDIR", "is a directory", s); for (const fp of [...this.files.keys()].filter(k => k === s || k.startsWith(s + "/"))) { @@ -628,6 +632,9 @@ export class DeeplakeFs implements IFileSystem { } async mv(src: string, dest: string): Promise { + const s = normPath(src), d = normPath(dest); + if (this.sessionPaths.has(s)) throw fsErr("EPERM", "session files are read-only", s); + if (this.sessionPaths.has(d)) throw fsErr("EPERM", "session files are read-only", d); await this.cp(src, dest, { recursive: true }); await this.rm(src, { recursive: true, force: true }); } From 92dc96ff9101599127f60359c6430abe3050cd55 Mon Sep 17 00:00:00 2001 From: Emanuele Fenocchi Date: Fri, 10 Apr 2026 21:15:32 +0000 Subject: [PATCH 14/17] Rebuild bundle with session path EPERM guards --- claude-code/bundle/shell/deeplake-shell.js | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/claude-code/bundle/shell/deeplake-shell.js b/claude-code/bundle/shell/deeplake-shell.js index 4f945ae..3604a35 100755 --- a/claude-code/bundle/shell/deeplake-shell.js +++ b/claude-code/bundle/shell/deeplake-shell.js @@ -67316,6 +67316,8 @@ var DeeplakeFs = class _DeeplakeFs { /** Write a file with optional row-level metadata (project, description, dates). */ async writeFileWithMeta(path2, content, meta) { const p22 = normPath(path2); + if (this.sessionPaths.has(p22)) + throw fsErr("EPERM", "session files are read-only", p22); if (this.dirs.has(p22) && !this.files.has(p22)) throw fsErr("EISDIR", "illegal operation on a directory", p22); const text = typeof content === "string" ? content : Buffer.from(content).toString("utf-8"); @@ -67339,6 +67341,8 @@ var DeeplakeFs = class _DeeplakeFs { } async writeFile(path2, content, _opts) { const p22 = normPath(path2); + if (this.sessionPaths.has(p22)) + throw fsErr("EPERM", "session files are read-only", p22); if (this.dirs.has(p22) && !this.files.has(p22)) throw fsErr("EISDIR", "illegal operation on a directory", p22); const text = typeof content === "string" ? content : Buffer.from(content).toString("utf-8"); @@ -67482,6 +67486,8 @@ var DeeplakeFs = class _DeeplakeFs { // ── IFileSystem: structural mutations ───────────────────────────────────── async rm(path2, opts) { const p22 = normPath(path2); + if (this.sessionPaths.has(p22)) + throw fsErr("EPERM", "session files are read-only", p22); if (!this.files.has(p22) && !this.dirs.has(p22)) { if (opts?.force) return; @@ -67518,6 +67524,8 @@ var DeeplakeFs = class _DeeplakeFs { } async cp(src, dest, opts) { const s10 = normPath(src), d15 = normPath(dest); + if (this.sessionPaths.has(d15)) + throw fsErr("EPERM", "session files are read-only", d15); if (this.dirs.has(s10) && !this.files.has(s10)) { if (!opts?.recursive) throw fsErr("EISDIR", "is a directory", s10); @@ -67529,6 +67537,11 @@ var DeeplakeFs = class _DeeplakeFs { } } async mv(src, dest) { + const s10 = normPath(src), d15 = normPath(dest); + if (this.sessionPaths.has(s10)) + throw fsErr("EPERM", "session files are read-only", s10); + if (this.sessionPaths.has(d15)) + throw fsErr("EPERM", "session files are read-only", d15); await this.cp(src, dest, { recursive: true }); await this.rm(src, { recursive: true, force: true }); } From 2757d94648878bac0e8fb800c6ec5c4b4d4e2b2d Mon Sep 17 00:00:00 2001 From: Emanuele Fenocchi Date: Fri, 10 Apr 2026 22:05:08 +0000 Subject: [PATCH 15/17] Fix rm -rf bypassing session path guard Recursive directory delete collected session files into toDelete and removed them from the in-memory tree, making them invisible until restart. Now filters session paths out of the delete list. Verified via E2E: rm -rf /sessions/ leaves all session files intact. --- claude-code/bundle/shell/deeplake-shell.js | 7 ++++--- claude-code/tests/sessions-table.test.ts | 9 +++++++++ src/shell/deeplake-fs.ts | 8 +++++--- 3 files changed, 18 insertions(+), 6 deletions(-) diff --git a/claude-code/bundle/shell/deeplake-shell.js b/claude-code/bundle/shell/deeplake-shell.js index 3604a35..6453609 100755 --- a/claude-code/bundle/shell/deeplake-shell.js +++ b/claude-code/bundle/shell/deeplake-shell.js @@ -67509,12 +67509,13 @@ var DeeplakeFs = class _DeeplakeFs { stack.push(childPath); } } - for (const fp of toDelete) + const safeToDelete = toDelete.filter((fp) => !this.sessionPaths.has(fp)); + for (const fp of safeToDelete) this.removeFromTree(fp); this.dirs.delete(p22); this.dirs.get(parentOf(p22))?.delete(basename4(p22)); - if (toDelete.length > 0) { - const inList = toDelete.map((fp) => `'${sqlStr(fp)}'`).join(", "); + if (safeToDelete.length > 0) { + const inList = safeToDelete.map((fp) => `'${sqlStr(fp)}'`).join(", "); await this.client.query(`DELETE FROM "${this.table}" WHERE path IN (${inList})`); } } else { diff --git a/claude-code/tests/sessions-table.test.ts b/claude-code/tests/sessions-table.test.ts index 5dca82a..81f3bb5 100644 --- a/claude-code/tests/sessions-table.test.ts +++ b/claude-code/tests/sessions-table.test.ts @@ -256,6 +256,15 @@ describe("session files are read-only", () => { const content = await fs.readFile("/copy.jsonl"); expect(content).toContain("user_message"); }); + + it("rm -rf on parent dir skips session files", async () => { + const { fs } = await makeFsWithSession(); + // rm -rf /sessions should not remove session files from the tree + await fs.rm("/sessions", { recursive: true, force: true }); + // Session file should still be readable + const content = await fs.readFile("/sessions/alice/alice_org_default_s1.jsonl"); + expect(content).toContain("user_message"); + }); }); describe("ensureSessionsTable schema", () => { diff --git a/src/shell/deeplake-fs.ts b/src/shell/deeplake-fs.ts index 85783b3..8b97232 100644 --- a/src/shell/deeplake-fs.ts +++ b/src/shell/deeplake-fs.ts @@ -604,12 +604,14 @@ export class DeeplakeFs implements IFileSystem { if (this.dirs.has(childPath)) stack.push(childPath); } } - for (const fp of toDelete) this.removeFromTree(fp); + // Filter out session paths — they are read-only + const safeToDelete = toDelete.filter(fp => !this.sessionPaths.has(fp)); + for (const fp of safeToDelete) this.removeFromTree(fp); this.dirs.delete(p); this.dirs.get(parentOf(p))?.delete(basename(p)); - if (toDelete.length > 0) { - const inList = toDelete.map(fp => `'${esc(fp)}'`).join(", "); + if (safeToDelete.length > 0) { + const inList = safeToDelete.map(fp => `'${esc(fp)}'`).join(", "); await this.client.query(`DELETE FROM "${this.table}" WHERE path IN (${inList})`); } } else { From 4dba1ca74fc80d86988abe12b43a07902d21d8d7 Mon Sep 17 00:00:00 2001 From: Emanuele Fenocchi Date: Fri, 10 Apr 2026 22:09:01 +0000 Subject: [PATCH 16/17] Restore README.md from main --- README.md | 232 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 232 insertions(+) diff --git a/README.md b/README.md index e69de29..f5f83fe 100644 --- a/README.md +++ b/README.md @@ -0,0 +1,232 @@ +

+
+ + Hivemind + +
+ Hivemind +
+

+ +

One brain for every agent on your team.

+ +

+ License + Node + Deeplake +

+ +

+ Persistent, cloud-backed shared memory for AI agents.
+ Captures everything. Recalls anything. Shares across sessions, teammates, and machines. +

+ +--- + +## What it does + +- 🧠 **Captures** every session's prompts, tool calls, and responses into a shared cloud SQL table +- 🔍 **Searches** across all memory with BM25 full-text search (falls back to ILIKE when index unavailable) +- 🔗 **Shares** memory across sessions, agents, teammates, and machines in real-time +- 📁 **Intercepts** file operations on `~/.deeplake/memory/` through a virtual filesystem backed by SQL +- 📝 **Summarizes** sessions into AI-generated wiki pages via a background worker at session end + +## Platforms + +| Platform | Status | Install | +|-----------------|----------------|------------------------------------------------------------| +| **Claude Code** | ✅ Stable | See [Quick start](#quick-start-claude-code) | +| **OpenClaw** | 🔧 Beta | See [Quick start](#quick-start-openclaw) | +| **Codex** | 🔜 Coming soon | — | + +## Quick start (Claude Code) + +Add the marketplace: + +``` +/plugin marketplace add activeloopai/hivemind +``` + +Install the plugin: + +``` +/plugin install hivemind +``` + +Reload plugins: + +``` +/reload-plugins +``` + +Log in: + +``` +/hivemind:login +``` + +That's it. Your agents now share a brain. + +### Updating + +The plugin auto-updates on each session start. To manually update: + +``` +/hivemind:update +``` + +## Quick start (OpenClaw) + +Install from ClawHub (Telegram, TUI, WhatsApp): + +``` +openclaw plugins install hivemind +``` + +Send a message. The plugin sends you an auth link. Click, sign in, done. + +## How it works + +``` +┌─────────────────────────────────────────────────────────────┐ +│ Your AI Agent │ +└──────────────────────────┬──────────────────────────────────┘ + │ + ┌──────────────────▼──────────────────┐ + │ 📥 Capture (every turn) │ + │ prompts · tool calls · responses │ + └──────────────────┬──────────────────┘ + │ + ┌──────────────────▼──────────────────┐ + │ 🧠 Hivemind Cloud │ + │ SQL tables · BM25 search │ + │ shared across all agents │ + └──────────────────┬──────────────────┘ + │ + ┌──────────────────▼──────────────────┐ + │ 🔍 Recall (before each turn) │ + │ search memory · inject context │ + └─────────────────────────────────────┘ +``` + +Every session is captured. Every agent can recall. Teammates in the same org see the same memory. + +## Features + +### 🔍 Natural search + +Just ask Claude naturally: + +``` +"What was Emanuele working on?" +"Search memory for authentication bugs" +"What did we decide about the API design?" +``` + +### 📝 AI-generated session summaries + +After each session, a background worker generates a wiki summary: key decisions, code changes, next steps. Browse them at `~/.deeplake/memory/summaries/`. + +### 👥 Team sharing + +Invite teammates to your Deeplake org. Their agents see your memory, your agents see theirs. No setup, no sync, no merge conflicts. + +### 🔒 Privacy controls + +Disable capture entirely: + +```bash +DEEPLAKE_CAPTURE=false claude +``` + +Enable debug logging: + +```bash +DEEPLAKE_DEBUG=1 claude +``` + +## ⚠️ Data collection notice + +This plugin captures session activity and stores it in your Deeplake workspace: + +| Data | What's captured | +|-----------------------|------------------------------------| +| User prompts | Every message you send | +| Tool calls | Tool name + full input | +| Tool responses | Full tool output | +| Assistant responses | Claude's final response | +| Subagent activity | Subagent tool calls and responses | + +**All users in your Deeplake workspace can read this data.** A DATA NOTICE is displayed at the start of every session. + +## Configuration + +| Variable | Default | Description | +|---------------------------|---------------------------|--------------------------------------------| +| `DEEPLAKE_TOKEN` | — | API token (auto-set by login) | +| `DEEPLAKE_ORG_ID` | — | Organization ID (auto-set by login) | +| `DEEPLAKE_WORKSPACE_ID` | `default` | Workspace name | +| `DEEPLAKE_API_URL` | `https://api.deeplake.ai` | API endpoint | +| `DEEPLAKE_TABLE` | `memory` | SQL table for summaries and virtual FS | +| `DEEPLAKE_SESSIONS_TABLE` | `sessions` | SQL table for per-event session capture | +| `DEEPLAKE_MEMORY_PATH` | `~/.deeplake/memory` | Path that triggers interception | +| `DEEPLAKE_CAPTURE` | `true` | Set to `false` to disable capture | +| `DEEPLAKE_DEBUG` | — | Set to `1` for verbose hook debug logs | + +## Architecture + +### Hook lifecycle (Claude Code) + +| Hook | Purpose | Async | +|---------------------|--------------------------------------------------|-------| +| `SessionStart` | Auth login, inject context, DATA NOTICE | No | +| `UserPromptSubmit` | Capture user message | No | +| `PreToolUse` | Intercept and rewrite memory-targeting commands | No | +| `PostToolUse` | Capture tool call + response | Yes | +| `Stop` | Capture assistant response | No | +| `SubagentStop` | Capture subagent activity | Yes | +| `SessionEnd` | Spawn wiki-worker for AI summary | No | + +### Monorepo structure + +``` +hivemind/ +├── src/ ← shared core (API client, auth, config, SQL utils) +├── claude-code/ ← Claude Code plugin (hooks, virtual FS, shell) +├── openclaw/ ← OpenClaw plugin (auto-recall, auto-capture) +└── codex/ ← coming soon +``` + +## Security + +- SQL values escaped with `sqlStr()`, `sqlLike()`, `sqlIdent()` +- ~70 allowlisted builtins run in the virtual FS; unrecognized commands are denied +- Credentials stored with mode `0600`, config dir with mode `0700` +- Device flow login: no tokens in environment or code +- `DEEPLAKE_CAPTURE=false` fully disables data collection + +## Development + +```bash +git clone https://github.com/activeloopai/hivemind.git +cd hivemind +npm install +npm run build # tsc + esbuild → claude-code/bundle/ + openclaw/dist/ +npm test # vitest +``` + +Test locally with Claude Code: + +```bash +claude --plugin-dir claude-code +``` + +Interactive shell against Deeplake: + +```bash +npm run shell +``` + +## License + +Apache License 2.0 — © Activeloop, Inc. See [LICENSE](LICENSE) for details. From 051e8c9a661ffb8fb083430f3986e0c43dec5354 Mon Sep 17 00:00:00 2001 From: Emanuele Fenocchi Date: Fri, 10 Apr 2026 22:10:19 +0000 Subject: [PATCH 17/17] Fix merge artifacts: restore version, login.md, remove local settings - Restore 0.6.7 version from main (merge took older 0.6.6) - Restore login.md welcome message from main - Remove .claude/settings.json (local config, not for repo) - Add .claude/ to .gitignore --- .claude-plugin/marketplace.json | 4 ++-- .claude-plugin/plugin.json | 2 +- .claude/settings.json | 5 ----- .gitignore | 1 + claude-code/commands/login.md | 4 +++- package-lock.json | 4 ++-- package.json | 2 +- 7 files changed, 10 insertions(+), 12 deletions(-) delete mode 100644 .claude/settings.json diff --git a/.claude-plugin/marketplace.json b/.claude-plugin/marketplace.json index bad0255..f40a7e3 100644 --- a/.claude-plugin/marketplace.json +++ b/.claude-plugin/marketplace.json @@ -6,13 +6,13 @@ }, "metadata": { "description": "Cloud-backed persistent shared memory for AI agents powered by Deeplake", - "version": "0.6.6" + "version": "0.6.7" }, "plugins": [ { "name": "hivemind", "description": "Persistent shared memory powered by Deeplake — captures all session activity and provides cross-session, cross-agent memory search", - "version": "0.6.6", + "version": "0.6.7", "source": "./claude-code", "homepage": "https://github.com/activeloopai/hivemind" } diff --git a/.claude-plugin/plugin.json b/.claude-plugin/plugin.json index 8028d11..158e0fa 100644 --- a/.claude-plugin/plugin.json +++ b/.claude-plugin/plugin.json @@ -1,7 +1,7 @@ { "name": "hivemind", "description": "Cloud-backed persistent memory powered by Deeplake — read, write, and share memory across Claude Code sessions and agents", - "version": "0.6.6", + "version": "0.6.7", "author": { "name": "Activeloop", "url": "https://deeplake.ai" diff --git a/.claude/settings.json b/.claude/settings.json deleted file mode 100644 index 7075e90..0000000 --- a/.claude/settings.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "enabledPlugins": { - "hivemind@deeplake-claude-code-plugins": true - } -} diff --git a/.gitignore b/.gitignore index 96d7afd..d19216b 100644 --- a/.gitignore +++ b/.gitignore @@ -7,3 +7,4 @@ tmp/ .env.* coverage/ bench/ +.claude/ diff --git a/claude-code/commands/login.md b/claude-code/commands/login.md index 1395768..79a0578 100644 --- a/claude-code/commands/login.md +++ b/claude-code/commands/login.md @@ -9,10 +9,12 @@ Run: node "${CLAUDE_PLUGIN_ROOT}/bundle/commands/auth-login.js" login ``` -If login succeeds, show this welcome message: +If login succeeds, show this welcome message. Include the organization name from the command output: 🐝 Welcome to Hivemind! +Current org: **{org name from output}** + Your Claude Code agents can now talk to each other and share memory across sessions, teammates, and machines. Get started: diff --git a/package-lock.json b/package-lock.json index edd81ae..1e88ebc 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "deeplake-claude-code-plugins", - "version": "0.6.6", + "version": "0.6.7", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "deeplake-claude-code-plugins", - "version": "0.6.6", + "version": "0.6.7", "dependencies": { "deeplake": "^0.3.30", "just-bash": "^2.14.0", diff --git a/package.json b/package.json index 2a06bf5..bd502a0 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "hivemind", - "version": "0.6.6", + "version": "0.6.7", "description": "Cloud-backed persistent shared memory for AI agents powered by Deeplake", "type": "module", "bin": {