@todoforai/edge 0.13.4 → 0.13.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (2) hide show
  1. package/dist/index.js +135 -11
  2. package/package.json +1 -1
package/dist/index.js CHANGED
@@ -48974,7 +48974,8 @@ var tool_catalog_default = {
48974
48974
  capabilities: "Create & manage TODOs, run workflows, API access",
48975
48975
  statusCmd: "todoai --help >/dev/null 2>&1",
48976
48976
  installCmd: "bun add -g @todoforai/cli",
48977
- versionCmd: "todoai --version 2>/dev/null | head -1"
48977
+ versionCmd: "todoai --version 2>/dev/null | head -1",
48978
+ preinstall: true
48978
48979
  },
48979
48980
  newman: {
48980
48981
  category: "testing",
@@ -48985,6 +48986,16 @@ var tool_catalog_default = {
48985
48986
  capabilities: "Run API test collections, CI/CD integration, HTML reports",
48986
48987
  versionCmd: "newman --version 2>/dev/null | head -1"
48987
48988
  },
48989
+ curl: {
48990
+ category: "networking",
48991
+ pkg: "curl",
48992
+ installer: "system",
48993
+ label: "curl",
48994
+ statusCmd: "curl --version >/dev/null 2>&1",
48995
+ capabilities: "HTTP/HTTPS/FTP client: GET/POST/PUT/DELETE, headers, auth, file upload/download, follow redirects, cookies, TLS.",
48996
+ versionCmd: "curl --version 2>/dev/null | head -1",
48997
+ preinstall: true
48998
+ },
48988
48999
  cloudflared: {
48989
49000
  category: "networking",
48990
49001
  pkg: "cloudflared",
@@ -49091,6 +49102,7 @@ var tool_catalog_default = {
49091
49102
  capabilities: "Spawn a TODO for AI sub-agent (FluidAgent) from the CLI; pipe stdin in, get an answer out",
49092
49103
  description: 'Run a sub-agent task from a shell block. Usage: `todoforai-subagent [-m model] [-s :preset|@file|text] [--tools read,grep,bash] "<question>"`. Pipe stdin to include input context. Presets: :review, :explore, :plan, :summarize. Auth via TODOFORAI_API_KEY (auto-injected by edge).',
49093
49104
  versionCmd: "todoforai-subagent --version 2>/dev/null | head -1",
49105
+ installCmd: "bun add -g @todoforai/subagent",
49094
49106
  preinstall: true
49095
49107
  },
49096
49108
  "todoforai-review": {
@@ -49101,6 +49113,7 @@ var tool_catalog_default = {
49101
49113
  capabilities: "Review a git diff with a sub-agent: assess goal, find issues, suggest simpler approaches",
49102
49114
  description: 'Capture `git diff` and ask a read-only sub-agent to review it. Usage: `todoforai-review [--repo <path>] [--against <ref>] "<goal>"`. Default diffs uncommitted changes vs HEAD. Wraps `todoforai-subagent --sysmsg :review --tools read,grep,bash`.',
49103
49115
  versionCmd: "todoforai-review --version 2>/dev/null | head -1",
49116
+ installCmd: "bun add -g @todoforai/review",
49104
49117
  preinstall: true
49105
49118
  },
49106
49119
  "todoforai-explore": {
@@ -49111,6 +49124,7 @@ var tool_catalog_default = {
49111
49124
  capabilities: "Explore a codebase with a sub-agent: map structure, find patterns, surface relevant files",
49112
49125
  description: 'Ask a read-only sub-agent to explore a codebase. Usage: `todoforai-explore [--repo <path>] "<question>"`. Sub-agent uses read/grep/bash to investigate and reports findings with file:line citations. Wraps `todoforai-subagent --sysmsg :explore`.',
49113
49126
  versionCmd: "todoforai-explore --version 2>/dev/null | head -1",
49127
+ installCmd: "bun add -g @todoforai/explore",
49114
49128
  preinstall: true
49115
49129
  },
49116
49130
  "todoforai-summary": {
@@ -49121,7 +49135,71 @@ var tool_catalog_default = {
49121
49135
  capabilities: "Summarize files or piped input via a sub-agent",
49122
49136
  description: 'Summarize file contents or stdin. Usage: `todoforai-summary [-f <file>]... [<files...>] [<focus>]` or `cat x | todoforai-summary "focus"`. Wraps `todoforai-subagent --sysmsg :summarize`.',
49123
49137
  versionCmd: "todoforai-summary --version 2>/dev/null | head -1",
49138
+ installCmd: "bun add -g @todoforai/summary",
49124
49139
  preinstall: true
49140
+ },
49141
+ ripgrep: {
49142
+ category: "development",
49143
+ pkg: "ripgrep",
49144
+ installer: "binary",
49145
+ label: "ripgrep (rg)",
49146
+ capabilities: "Fast recursive grep with regex, .gitignore-aware, parallel, unicode-correct",
49147
+ description: "Fast code/text search. Usage: `rg <pattern> [path]`, `-i` case-insensitive, `-l` files only, `-t <lang>` filter by language, `-g '<glob>'` filter by glob, `-C N` context. Prefer over `grep -r`.",
49148
+ versionCmd: "rg --version 2>/dev/null | head -1",
49149
+ preinstall: true,
49150
+ binary: {
49151
+ "linux-x86_64": { url: "https://github.com/BurntSushi/ripgrep/releases/download/14.1.1/ripgrep-14.1.1-x86_64-unknown-linux-musl.tar.gz", archive: "tar.gz", extract: "ripgrep-14.1.1-x86_64-unknown-linux-musl/rg" },
49152
+ "linux-aarch64": { url: "https://github.com/BurntSushi/ripgrep/releases/download/14.1.1/ripgrep-14.1.1-aarch64-unknown-linux-gnu.tar.gz", archive: "tar.gz", extract: "ripgrep-14.1.1-aarch64-unknown-linux-gnu/rg" },
49153
+ "darwin-x86_64": { url: "https://github.com/BurntSushi/ripgrep/releases/download/14.1.1/ripgrep-14.1.1-x86_64-apple-darwin.tar.gz", archive: "tar.gz", extract: "ripgrep-14.1.1-x86_64-apple-darwin/rg" },
49154
+ "darwin-aarch64": { url: "https://github.com/BurntSushi/ripgrep/releases/download/14.1.1/ripgrep-14.1.1-aarch64-apple-darwin.tar.gz", archive: "tar.gz", extract: "ripgrep-14.1.1-aarch64-apple-darwin/rg" },
49155
+ "windows-x86_64": { url: "https://github.com/BurntSushi/ripgrep/releases/download/14.1.1/ripgrep-14.1.1-x86_64-pc-windows-msvc.zip", archive: "zip", extract: "ripgrep-14.1.1-x86_64-pc-windows-msvc/rg.exe" }
49156
+ },
49157
+ binName: "rg"
49158
+ },
49159
+ fd: {
49160
+ category: "development",
49161
+ pkg: "fd-find",
49162
+ installer: "binary",
49163
+ label: "fd",
49164
+ capabilities: "Fast user-friendly find replacement: regex by default, .gitignore-aware, parallel",
49165
+ description: "Find files/dirs by name. Usage: `fd <pattern> [path]`, `-e <ext>` filter by extension, `-t f|d` type, `-H` include hidden, `-x <cmd>` exec per match.",
49166
+ versionCmd: "fd --version 2>/dev/null | head -1",
49167
+ preinstall: true,
49168
+ binary: {
49169
+ "linux-x86_64": { url: "https://github.com/sharkdp/fd/releases/download/v10.2.0/fd-v10.2.0-x86_64-unknown-linux-musl.tar.gz", archive: "tar.gz", extract: "fd-v10.2.0-x86_64-unknown-linux-musl/fd" },
49170
+ "linux-aarch64": { url: "https://github.com/sharkdp/fd/releases/download/v10.2.0/fd-v10.2.0-aarch64-unknown-linux-gnu.tar.gz", archive: "tar.gz", extract: "fd-v10.2.0-aarch64-unknown-linux-gnu/fd" },
49171
+ "darwin-x86_64": { url: "https://github.com/sharkdp/fd/releases/download/v10.2.0/fd-v10.2.0-x86_64-apple-darwin.tar.gz", archive: "tar.gz", extract: "fd-v10.2.0-x86_64-apple-darwin/fd" },
49172
+ "darwin-aarch64": { url: "https://github.com/sharkdp/fd/releases/download/v10.2.0/fd-v10.2.0-aarch64-apple-darwin.tar.gz", archive: "tar.gz", extract: "fd-v10.2.0-aarch64-apple-darwin/fd" },
49173
+ "windows-x86_64": { url: "https://github.com/sharkdp/fd/releases/download/v10.2.0/fd-v10.2.0-x86_64-pc-windows-msvc.zip", archive: "zip", extract: "fd-v10.2.0-x86_64-pc-windows-msvc/fd.exe" }
49174
+ },
49175
+ binName: "fd"
49176
+ },
49177
+ jq: {
49178
+ category: "development",
49179
+ pkg: "jq",
49180
+ installer: "binary",
49181
+ label: "jq",
49182
+ capabilities: "Command-line JSON processor: query, filter, transform, format JSON streams",
49183
+ description: "JSON pipeline tool. Usage: `cat x.json | jq '.field'`, `jq -r` raw output, `jq '.[] | select(.k==\"v\")'`, `jq -s` slurp array. Pairs well with curl/rg.",
49184
+ versionCmd: "jq --version 2>/dev/null | head -1",
49185
+ preinstall: true,
49186
+ binary: {
49187
+ "linux-x86_64": { url: "https://github.com/jqlang/jq/releases/download/jq-1.7.1/jq-linux-amd64", archive: "raw" },
49188
+ "linux-aarch64": { url: "https://github.com/jqlang/jq/releases/download/jq-1.7.1/jq-linux-arm64", archive: "raw" },
49189
+ "darwin-x86_64": { url: "https://github.com/jqlang/jq/releases/download/jq-1.7.1/jq-macos-amd64", archive: "raw" },
49190
+ "darwin-aarch64": { url: "https://github.com/jqlang/jq/releases/download/jq-1.7.1/jq-macos-arm64", archive: "raw" },
49191
+ "windows-x86_64": { url: "https://github.com/jqlang/jq/releases/download/jq-1.7.1/jq-windows-amd64.exe", archive: "raw" }
49192
+ },
49193
+ binName: "jq"
49194
+ },
49195
+ patch: {
49196
+ category: "development",
49197
+ pkg: "patch",
49198
+ installer: "system",
49199
+ label: "GNU patch",
49200
+ capabilities: "Apply unified/context diff patches to files; reverse, dry-run, fuzzy matching",
49201
+ description: "Apply diffs. Usage: `patch -p1 < changes.diff` (strip 1 leading path component), `--dry-run` to preview, `-R` to reverse, `-N` skip already-applied. Reads unified (`diff -u`) or context diffs.",
49202
+ versionCmd: "patch --version 2>/dev/null | head -1"
49125
49203
  }
49126
49204
  };
49127
49205
 
@@ -49365,6 +49443,30 @@ function installWithNpm(name, pkg) {
49365
49443
  throw new Error(`npm install failed (exit ${result.status}) | stderr: ${stderr || "(empty)"} | stdout: ${stdout || "(empty)"}`);
49366
49444
  }
49367
49445
  }
49446
+ function installWithBun(name, pkg) {
49447
+ const TIMEOUT_MS = 120000;
49448
+ log2("info", `Installing ${name} via bun (${pkg})`);
49449
+ fs3.mkdirSync(TOOLS_DIR, { recursive: true });
49450
+ const result = spawnSync("bun", ["add", "--cwd", TOOLS_DIR, pkg], {
49451
+ stdio: "pipe",
49452
+ timeout: TIMEOUT_MS,
49453
+ shell: true
49454
+ });
49455
+ const stderr = result.stderr?.toString().trim() || "";
49456
+ const stdout = result.stdout?.toString().trim() || "";
49457
+ if (result.error) {
49458
+ throw new Error(`bun add failed: ${result.error.message} | stderr: ${stderr || "(empty)"} | stdout: ${stdout || "(empty)"}`);
49459
+ }
49460
+ if (result.signal) {
49461
+ throw new Error(`bun add killed by ${result.signal}${result.signal === "SIGTERM" ? ` (likely timed out after ${TIMEOUT_MS / 1000}s)` : ""} | stderr: ${stderr || "(empty)"}`);
49462
+ }
49463
+ if (result.status === null) {
49464
+ throw new Error(`bun add: null exit code (likely timed out after ${TIMEOUT_MS / 1000}s) | stderr: ${stderr || "(empty)"} | stdout: ${stdout || "(empty)"}`);
49465
+ }
49466
+ if (result.status !== 0) {
49467
+ throw new Error(`bun add failed (exit ${result.status}) | stderr: ${stderr || "(empty)"} | stdout: ${stdout || "(empty)"}`);
49468
+ }
49469
+ }
49368
49470
  function installWithPip(name, pkg) {
49369
49471
  const venvDir = path3.join(TOOLS_DIR, "venv");
49370
49472
  const venvPython = os3.platform() === "win32" ? path3.join(venvDir, "Scripts", "python.exe") : path3.join(venvDir, "bin", "python");
@@ -49427,9 +49529,13 @@ function installWithPip(name, pkg) {
49427
49529
  }
49428
49530
  var INSTALLERS = {
49429
49531
  npm: installWithNpm,
49532
+ bun: installWithBun,
49430
49533
  pip: installWithPip,
49431
49534
  binary: async (name, _pkg) => {
49432
49535
  await installBinary(name);
49536
+ },
49537
+ system: () => {
49538
+ log2("warn", "system-installer tools are not auto-installed; install via apt/brew");
49433
49539
  }
49434
49540
  };
49435
49541
  var installing = new Set;
@@ -49474,6 +49580,8 @@ function uninstallTool(name) {
49474
49580
  }
49475
49581
  } else if (installerType === "npm") {
49476
49582
  spawnSync("npm", ["uninstall", "--prefix", TOOLS_DIR, pkg], { stdio: "pipe", timeout: 30000, shell: true });
49583
+ } else if (installerType === "bun") {
49584
+ spawnSync("bun", ["remove", "--cwd", TOOLS_DIR, pkg], { stdio: "pipe", timeout: 30000, shell: true });
49477
49585
  } else if (installerType === "pip") {
49478
49586
  const venvPython = os3.platform() === "win32" ? path3.join(TOOLS_DIR, "venv", "Scripts", "python.exe") : path3.join(TOOLS_DIR, "venv", "bin", "python");
49479
49587
  const python = fs3.existsSync(venvPython) ? venvPython : "python3";
@@ -49698,9 +49806,11 @@ import fs4 from "fs";
49698
49806
  // node_modules/fflate/esm/index.mjs
49699
49807
  import { createRequire as createRequire2 } from "module";
49700
49808
  var require2 = createRequire2("/");
49809
+ var _a;
49701
49810
  var Worker2;
49811
+ var isMarkedAsUntransferable;
49702
49812
  try {
49703
- Worker2 = require2("worker_threads").Worker;
49813
+ _a = require2("worker_threads"), Worker2 = _a.Worker, isMarkedAsUntransferable = _a.isMarkedAsUntransferable;
49704
49814
  } catch (e) {}
49705
49815
  var u8 = Uint8Array;
49706
49816
  var u16 = Uint16Array;
@@ -50357,7 +50467,7 @@ var fltn = function(d, p, t, o) {
50357
50467
  var val = d[k], n = p + k, op = o;
50358
50468
  if (Array.isArray(val))
50359
50469
  op = mrg(o, val[1]), val = val[0];
50360
- if (val instanceof u8)
50470
+ if (ArrayBuffer.isView(val))
50361
50471
  t[n] = [val, op];
50362
50472
  else {
50363
50473
  t[n += "/"] = [new u8(0), op];
@@ -50440,14 +50550,28 @@ var slzh = function(d, b) {
50440
50550
  return b + 30 + b2(d, b + 26) + b2(d, b + 28);
50441
50551
  };
50442
50552
  var zh = function(d, b, z) {
50443
- var fnl = b2(d, b + 28), fn = strFromU8(d.subarray(b + 46, b + 46 + fnl), !(b2(d, b + 8) & 2048)), es = b + 46 + fnl, bs = b4(d, b + 20);
50444
- var _a2 = z && bs == 4294967295 ? z64e(d, es) : [bs, b4(d, b + 24), b4(d, b + 42)], sc = _a2[0], su = _a2[1], off = _a2[2];
50445
- return [b2(d, b + 10), sc, su, fn, es + b2(d, b + 30) + b2(d, b + 32), off];
50553
+ var fnl = b2(d, b + 28), efl = b2(d, b + 30), fn = strFromU8(d.subarray(b + 46, b + 46 + fnl), !(b2(d, b + 8) & 2048)), es = b + 46 + fnl;
50554
+ var _a2 = z64hs(d, es, efl, z, b4(d, b + 20), b4(d, b + 24), b4(d, b + 42)), sc = _a2[0], su = _a2[1], off = _a2[2];
50555
+ return [b2(d, b + 10), sc, su, fn, es + efl + b2(d, b + 32), off];
50446
50556
  };
50447
- var z64e = function(d, b) {
50448
- for (;b2(d, b) != 1; b += 4 + b2(d, b + 2))
50449
- ;
50450
- return [b8(d, b + 12), b8(d, b + 4), b8(d, b + 20)];
50557
+ var z64hs = function(d, b, l, z, sc, su, off) {
50558
+ var nsc = sc == 4294967295, nsu = su == 4294967295, noff = off == 4294967295, e = b + l;
50559
+ var nf = nsc + nsu + noff;
50560
+ if (z && nf) {
50561
+ for (;b + 4 < e; b += 4 + b2(d, b + 2)) {
50562
+ if (b2(d, b) == 1) {
50563
+ return [
50564
+ nsc ? b8(d, b + 4 + 8 * nsu) : sc,
50565
+ nsu ? b8(d, b + 4) : su,
50566
+ noff ? b8(d, b + 4 + 8 * (nsu + nsc)) : off,
50567
+ 1
50568
+ ];
50569
+ }
50570
+ }
50571
+ if (z < 2)
50572
+ err(13);
50573
+ }
50574
+ return [sc, su, off, 0];
50451
50575
  };
50452
50576
  var exfl = function(ex) {
50453
50577
  var le = 0;
@@ -50561,7 +50685,7 @@ function unzipSync(data, opts) {
50561
50685
  if (!c)
50562
50686
  return {};
50563
50687
  var o = b4(data, e + 16);
50564
- var z = o == 4294967295 || c == 65535;
50688
+ var z = b4(data, e - 20) == 117853008;
50565
50689
  if (z) {
50566
50690
  var ze = b4(data, e - 12);
50567
50691
  z = b4(data, ze) == 101075792;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@todoforai/edge",
3
- "version": "0.13.4",
3
+ "version": "0.13.6",
4
4
  "type": "module",
5
5
  "bin": {
6
6
  "todoforai-edge": "dist/index.js"