@proxysoul/soulforge 1.9.0 → 2.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -22689,6 +22689,7 @@ var init_tree_sitter2 = __esm(() => {
22689
22689
  tier = 3;
22690
22690
  parser = null;
22691
22691
  languages = new Map;
22692
+ failedLanguages = new Set;
22692
22693
  initPromise = null;
22693
22694
  cache = null;
22694
22695
  treeCache = new Map;
@@ -23400,9 +23401,12 @@ var init_tree_sitter2 = __esm(() => {
23400
23401
  return join4(BUNDLED_WASM_DIR, basename3);
23401
23402
  }
23402
23403
  async doInit() {
23403
- const wasmPath = this.resolveWasm("tree-sitter.wasm");
23404
+ let wasmPath = this.resolveWasm("tree-sitter.wasm");
23404
23405
  if (!existsSync2(wasmPath)) {
23405
- throw new Error(`tree-sitter.wasm not found at ${wasmPath}`);
23406
+ wasmPath = this.resolveWasm("web-tree-sitter.wasm");
23407
+ }
23408
+ if (!existsSync2(wasmPath)) {
23409
+ throw new Error(`tree-sitter.wasm not found in ${BUNDLED_WASM_DIR} or node_modules`);
23406
23410
  }
23407
23411
  const mod = await Promise.resolve().then(() => (init_tree_sitter(), exports_tree_sitter));
23408
23412
  TSQueryClass = mod.Query;
@@ -23415,6 +23419,8 @@ var init_tree_sitter2 = __esm(() => {
23415
23419
  const cached = this.languages.get(language);
23416
23420
  if (cached)
23417
23421
  return cached;
23422
+ if (this.failedLanguages.has(language))
23423
+ return null;
23418
23424
  const wasmFile = GRAMMAR_FILES[language];
23419
23425
  if (!wasmFile)
23420
23426
  return null;
@@ -23422,9 +23428,15 @@ var init_tree_sitter2 = __esm(() => {
23422
23428
  const mod = await Promise.resolve().then(() => (init_tree_sitter(), exports_tree_sitter));
23423
23429
  const wasmPath = this.resolveWasm(`tree-sitter-wasms/out/${wasmFile}`);
23424
23430
  const lang254 = await mod.Language.load(wasmPath);
23431
+ if (this.parser) {
23432
+ this.parser.setLanguage(lang254);
23433
+ const tree = this.parser.parse("# validate");
23434
+ tree?.delete();
23435
+ }
23425
23436
  this.languages.set(language, lang254);
23426
23437
  return lang254;
23427
23438
  } catch {
23439
+ this.failedLanguages.add(language);
23428
23440
  return null;
23429
23441
  }
23430
23442
  }
@@ -23444,7 +23456,14 @@ var init_tree_sitter2 = __esm(() => {
23444
23456
  if (!lang254)
23445
23457
  return null;
23446
23458
  this.parser.setLanguage(lang254);
23447
- const tree = this.parser.parse(content);
23459
+ let tree;
23460
+ try {
23461
+ tree = this.parser.parse(content);
23462
+ } catch {
23463
+ this.failedLanguages.add(grammarKey);
23464
+ this.languages.delete(grammarKey);
23465
+ return null;
23466
+ }
23448
23467
  if (!tree)
23449
23468
  return null;
23450
23469
  if (cached)
@@ -28146,7 +28165,8 @@ var init_config = __esm(() => {
28146
28165
  args: []
28147
28166
  },
28148
28167
  theme: {
28149
- name: "dark"
28168
+ name: "dark",
28169
+ transparent: true
28150
28170
  },
28151
28171
  nvimConfig: "default",
28152
28172
  editorIntegration: {
@@ -575,6 +575,26 @@ var init_file_tree = __esm(() => {
575
575
  IGNORED_DIRS = new Set(["node_modules", ".git", "dist", "build", ".next", ".nuxt", "target", "__pycache__", ".cache", ".soulforge", "coverage"]);
576
576
  });
577
577
 
578
+ // src/core/spawn.ts
579
+ function buildSafeEnv() {
580
+ const env = {};
581
+ for (const [key, value] of Object.entries(process.env)) {
582
+ if (ENV_ALLOWLIST.has(key) || key.startsWith("LC_") || key.startsWith("XDG_")) {
583
+ env[key] = value;
584
+ } else if (!SECRET_ENV_PATTERN.test(key)) {
585
+ env[key] = value;
586
+ }
587
+ }
588
+ env.GIT_TERMINAL_PROMPT = "0";
589
+ return env;
590
+ }
591
+ var SECRET_ENV_PATTERN, ENV_ALLOWLIST, SAFE_STDIO;
592
+ var init_spawn = __esm(() => {
593
+ SECRET_ENV_PATTERN = /_API_KEY$|_SECRET$|_TOKEN$|_PASSWORD$|_CREDENTIAL$|_PRIVATE_KEY$/;
594
+ ENV_ALLOWLIST = new Set(["PATH", "HOME", "USER", "SHELL", "LANG", "TERM", "TERM_PROGRAM", "EDITOR", "VISUAL", "TMPDIR", "GOPATH", "GOROOT", "CARGO_HOME", "RUSTUP_HOME", "NVM_DIR", "BUN_INSTALL", "NODE_PATH", "PYTHONPATH", "VIRTUAL_ENV", "CONDA_PREFIX", "SSH_AUTH_SOCK", "GPG_TTY", "GIT_AUTHOR_NAME", "GIT_AUTHOR_EMAIL", "GIT_COMMITTER_NAME", "GIT_COMMITTER_EMAIL", "SOULFORGE_NO_REPOMAP", "NVIM_APPNAME", "KITTY_WINDOW_ID", "WEZTERM_PANE", "OTUI_TREE_SITTER_WORKER_PATH"]);
595
+ SAFE_STDIO = ["ignore", "pipe", "pipe"];
596
+ });
597
+
578
598
  // node_modules/zustand/esm/vanilla.mjs
579
599
  var createStoreImpl = (createState) => {
580
600
  let state;
@@ -1660,11 +1680,10 @@ function run(args, cwd, timeout = 5000) {
1660
1680
  const proc = spawn("git", args, {
1661
1681
  cwd,
1662
1682
  timeout,
1663
- env: {
1664
- ...process.env
1665
- }
1683
+ env: buildSafeEnv(),
1684
+ stdio: SAFE_STDIO
1666
1685
  });
1667
- proc.stdout.on("data", (d) => chunks.push(d.toString()));
1686
+ proc.stdout?.on("data", (d) => chunks.push(d.toString()));
1668
1687
  proc.on("close", (code) => resolve({
1669
1688
  ok: code === 0,
1670
1689
  stdout: chunks.join("")
@@ -1866,9 +1885,11 @@ function setCoAuthorEnabled(enabled) {
1866
1885
  _coAuthorEnabled = enabled;
1867
1886
  }
1868
1887
  async function gitCommit(cwd, message, amend) {
1869
- const fullMessage = _coAuthorEnabled ? `${message}
1888
+ const cleaned = message.replace(/\\n/g, `
1889
+ `);
1890
+ const fullMessage = _coAuthorEnabled ? `${cleaned}
1870
1891
 
1871
- ${CO_AUTHOR_LINE}` : message;
1892
+ ${CO_AUTHOR_LINE}` : cleaned;
1872
1893
  const args = amend ? ["commit", "--amend", "-m", fullMessage] : ["commit", "-m", fullMessage];
1873
1894
  const {
1874
1895
  ok,
@@ -2266,6 +2287,7 @@ async function buildGitContext(cwd) {
2266
2287
  }
2267
2288
  var encoder, NAMED_ESCAPES, CO_AUTHOR_LINE = "Co-Authored-By: SoulForge <soulforge@proxysoul.com>", _coAuthorEnabled = true;
2268
2289
  var init_status = __esm(() => {
2290
+ init_spawn();
2269
2291
  encoder = new TextEncoder;
2270
2292
  NAMED_ESCAPES = {
2271
2293
  n: `
@@ -20681,10 +20703,13 @@ function validateDownloadUrl(url2) {
20681
20703
  message: `Invalid URL: ${url2}`
20682
20704
  });
20683
20705
  }
20706
+ if (parsed.protocol === "data:") {
20707
+ return;
20708
+ }
20684
20709
  if (parsed.protocol !== "http:" && parsed.protocol !== "https:") {
20685
20710
  throw new DownloadError({
20686
20711
  url: url2,
20687
- message: `URL scheme must be http or https, got ${parsed.protocol}`
20712
+ message: `URL scheme must be http, https, or data, got ${parsed.protocol}`
20688
20713
  });
20689
20714
  }
20690
20715
  const hostname3 = parsed.hostname;
@@ -21944,7 +21969,7 @@ var btoa2, atob2, name14 = "AI_DownloadError", marker15, symbol17, _a17, _b15, D
21944
21969
  });
21945
21970
  }
21946
21971
  return () => `${prefix}${separator}${generator()}`;
21947
- }, generateId, FETCH_FAILED_ERROR_MESSAGES, BUN_ERROR_CODES, VERSION = "4.0.21", getOriginalFetch = () => globalThis.fetch, getFromApi = async ({
21972
+ }, generateId, FETCH_FAILED_ERROR_MESSAGES, BUN_ERROR_CODES, VERSION = "4.0.22", getOriginalFetch = () => globalThis.fetch, getFromApi = async ({
21948
21973
  url: url2,
21949
21974
  headers = {},
21950
21975
  successfulResponseHandler,
@@ -23959,7 +23984,7 @@ var import_oidc, import_oidc2, marker17 = "vercel.ai.gateway.error", symbol18, _
23959
23984
  "ai-model-id": this.modelId
23960
23985
  };
23961
23986
  }
23962
- }, providerMetadataEntrySchema2, gatewayVideoDataSchema, gatewayVideoWarningSchema, gatewayVideoEventSchema, parallelSearchInputSchema, parallelSearchOutputSchema, parallelSearchToolFactory, parallelSearch = (config2 = {}) => parallelSearchToolFactory(config2), perplexitySearchInputSchema, perplexitySearchOutputSchema, perplexitySearchToolFactory, perplexitySearch = (config2 = {}) => perplexitySearchToolFactory(config2), gatewayTools, VERSION2 = "3.0.85", AI_GATEWAY_PROTOCOL_VERSION = "0.0.1", gateway;
23987
+ }, providerMetadataEntrySchema2, gatewayVideoDataSchema, gatewayVideoWarningSchema, gatewayVideoEventSchema, parallelSearchInputSchema, parallelSearchOutputSchema, parallelSearchToolFactory, parallelSearch = (config2 = {}) => parallelSearchToolFactory(config2), perplexitySearchInputSchema, perplexitySearchOutputSchema, perplexitySearchToolFactory, perplexitySearch = (config2 = {}) => perplexitySearchToolFactory(config2), gatewayTools, VERSION2 = "3.0.88", AI_GATEWAY_PROTOCOL_VERSION = "0.0.1", gateway;
23963
23988
  var init_dist4 = __esm(() => {
23964
23989
  init_dist3();
23965
23990
  init_dist();
@@ -28655,7 +28680,7 @@ var import_api, import_api2, __defProp2, __export2 = (target, all) => {
28655
28680
  const bytes = typeof data === "string" ? convertBase64ToUint8Array(data) : data;
28656
28681
  const id3Size = (bytes[6] & 127) << 21 | (bytes[7] & 127) << 14 | (bytes[8] & 127) << 7 | bytes[9] & 127;
28657
28682
  return bytes.slice(id3Size + 10);
28658
- }, VERSION3 = "6.0.143", download = async ({
28683
+ }, VERSION3 = "6.0.146", download = async ({
28659
28684
  url: url2,
28660
28685
  maxBytes,
28661
28686
  abortSignal
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@proxysoul/soulforge",
3
- "version": "1.9.0",
3
+ "version": "2.1.0",
4
4
  "description": "Graph-powered code intelligence — multi-agent coding with codebase-aware AI",
5
5
  "repository": {
6
6
  "type": "git",
@@ -54,23 +54,23 @@
54
54
  "@types/babel__core": "7.20.5",
55
55
  "@types/bun": "1.3.11",
56
56
  "@types/linkify-it": "5.0.0",
57
- "@types/node": "25.5.0",
57
+ "@types/node": "25.5.2",
58
58
  "@types/react": "19.2.14",
59
59
  "babel-plugin-react-compiler": "1.0.0",
60
60
  "bun-types": "1.3.11",
61
61
  "typescript": "6.0.2"
62
62
  },
63
63
  "dependencies": {
64
- "@ai-sdk/anthropic": "3.0.64",
65
- "@ai-sdk/google": "3.0.55",
66
- "@ai-sdk/openai": "3.0.49",
67
- "@ai-sdk/xai": "3.0.75",
64
+ "@ai-sdk/anthropic": "3.0.66",
65
+ "@ai-sdk/google": "3.0.58",
66
+ "@ai-sdk/openai": "3.0.50",
67
+ "@ai-sdk/xai": "3.0.77",
68
68
  "@anthropic-ai/sdk": "0.82.0",
69
69
  "@llmgateway/ai-sdk-provider": "3.5.0",
70
70
  "@mozilla/readability": "0.6.0",
71
71
  "@openrouter/ai-sdk-provider": "2.3.3",
72
- "@opentui/react": "0.1.95",
73
- "ai": "6.0.143",
72
+ "@opentui/react": "0.1.96",
73
+ "ai": "6.0.146",
74
74
  "ghostty-opentui": "1.4.10",
75
75
  "isbinaryfile": "6.0.0",
76
76
  "linkedom": "0.18.12",
@@ -82,6 +82,7 @@
82
82
  "strip-ansi": "7.2.0",
83
83
  "tree-sitter-wasms": "0.1.13",
84
84
  "ts-morph": "27.0.2",
85
+ "vercel-minimax-ai-provider": "^0.0.2",
85
86
  "web-tree-sitter": "0.25.10",
86
87
  "zod": "4.3.6",
87
88
  "zustand": "5.0.12"