@proxysoul/soulforge 2.20.3 → 2.20.4

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 -184
  2. package/package.json +1 -1
package/dist/index.js CHANGED
@@ -71927,7 +71927,7 @@ var package_default;
71927
71927
  var init_package = __esm(() => {
71928
71928
  package_default = {
71929
71929
  name: "@proxysoul/soulforge",
71930
- version: "2.20.3",
71930
+ version: "2.20.4",
71931
71931
  description: "Graph-powered code intelligence \u2014 multi-agent coding with codebase-aware AI",
71932
71932
  repository: {
71933
71933
  type: "git",
@@ -94533,31 +94533,22 @@ var init_opencode_go = __esm(() => {
94533
94533
  },
94534
94534
  fallbackModels: [
94535
94535
  { id: "glm-5.1", name: "GLM 5.1" },
94536
- { id: "glm-5", name: "GLM 5" },
94537
94536
  { id: "kimi-k2.6", name: "Kimi K2.6" },
94538
- { id: "kimi-k2.5", name: "Kimi K2.5" },
94537
+ { id: "minimax-m3", name: "MiniMax M3" },
94539
94538
  { id: "mimo-v2.5-pro", name: "MiMo V2.5 Pro" },
94540
- { id: "mimo-v2.5", name: "MiMo V2.5" },
94541
- { id: "minimax-m2.7", name: "MiniMax M2.7" },
94542
- { id: "minimax-m2.5", name: "MiniMax M2.5" },
94543
- { id: "qwen3.6-plus", name: "Qwen3.6 Plus" },
94544
- { id: "qwen3.5-plus", name: "Qwen3.5 Plus" },
94539
+ { id: "qwen3.7-max", name: "Qwen3.7 Max" },
94545
94540
  { id: "deepseek-v4-pro", name: "DeepSeek V4 Pro" },
94546
94541
  { id: "deepseek-v4-flash", name: "DeepSeek V4 Flash" }
94547
94542
  ],
94548
94543
  contextWindows: [
94549
- ["glm-5.1", 204800],
94550
94544
  ["glm-5", 204800],
94551
- ["kimi-k2.6", 262000],
94552
- ["kimi-k2.5", 262000],
94553
- ["mimo-v2.5-pro", 262144],
94554
- ["mimo-v2.5", 262144],
94555
- ["minimax-m2.7", 196000],
94556
- ["minimax-m2.5", 196000],
94557
- ["qwen3.6-plus", 1e6],
94558
- ["qwen3.5-plus", 1e6],
94559
- ["deepseek-v4-pro", 131072],
94560
- ["deepseek-v4-flash", 131072]
94545
+ ["kimi-k2", 262000],
94546
+ ["mimo-v2", 262144],
94547
+ ["minimax-m3", 196000],
94548
+ ["minimax-m2", 196000],
94549
+ ["qwen3", 1e6],
94550
+ ["deepseek-v4", 131072],
94551
+ ["hy3", 262144]
94561
94552
  ]
94562
94553
  };
94563
94554
  });
@@ -94612,109 +94603,37 @@ var init_opencode_zen = __esm(() => {
94612
94603
  }
94613
94604
  },
94614
94605
  fallbackModels: [
94615
- { id: "gpt-5.5-pro", name: "GPT 5.5 Pro" },
94616
94606
  { id: "gpt-5.5", name: "GPT 5.5" },
94617
- { id: "gpt-5.4-pro", name: "GPT 5.4 Pro" },
94618
94607
  { id: "gpt-5.4", name: "GPT 5.4" },
94619
- { id: "gpt-5.4-mini", name: "GPT 5.4 Mini" },
94620
- { id: "gpt-5.4-nano", name: "GPT 5.4 Nano" },
94621
- { id: "gpt-5.3-codex", name: "GPT 5.3 Codex" },
94622
- { id: "gpt-5.3-codex-spark", name: "GPT 5.3 Codex Spark" },
94623
- { id: "gpt-5.2", name: "GPT 5.2" },
94624
- { id: "gpt-5.2-codex", name: "GPT 5.2 Codex" },
94625
- { id: "gpt-5.1", name: "GPT 5.1" },
94626
- { id: "gpt-5.1-codex", name: "GPT 5.1 Codex" },
94627
- { id: "gpt-5.1-codex-max", name: "GPT 5.1 Codex Max" },
94628
- { id: "gpt-5.1-codex-mini", name: "GPT 5.1 Codex Mini" },
94629
- { id: "gpt-5", name: "GPT 5" },
94630
- { id: "gpt-5-codex", name: "GPT 5 Codex" },
94631
- { id: "gpt-5-nano", name: "GPT 5 Nano" },
94632
94608
  { id: "claude-opus-4-8", name: "Claude Opus 4.8" },
94633
- { id: "claude-opus-4-7", name: "Claude Opus 4.7" },
94634
- { id: "claude-opus-4-6", name: "Claude Opus 4.6" },
94635
- { id: "claude-opus-4-5", name: "Claude Opus 4.5" },
94636
- { id: "claude-opus-4-1", name: "Claude Opus 4.1" },
94637
94609
  { id: "claude-sonnet-4-6", name: "Claude Sonnet 4.6" },
94638
- { id: "claude-sonnet-4-5", name: "Claude Sonnet 4.5" },
94639
- { id: "claude-sonnet-4", name: "Claude Sonnet 4" },
94640
94610
  { id: "claude-haiku-4-5", name: "Claude Haiku 4.5" },
94641
94611
  { id: "gemini-3.1-pro", name: "Gemini 3.1 Pro" },
94642
- { id: "gemini-3-flash", name: "Gemini 3 Flash" },
94643
- { id: "minimax-m2.7", name: "MiniMax M2.7" },
94644
- { id: "minimax-m2.5", name: "MiniMax M2.5" },
94645
- { id: "minimax-m2.5-free", name: "MiniMax M2.5 Free" },
94612
+ { id: "minimax-m3", name: "MiniMax M3" },
94646
94613
  { id: "glm-5.1", name: "GLM 5.1" },
94647
- { id: "glm-5", name: "GLM 5" },
94648
94614
  { id: "kimi-k2.6", name: "Kimi K2.6" },
94649
- { id: "kimi-k2.5", name: "Kimi K2.5" },
94650
- { id: "deepseek-v4-flash-free", name: "DeepSeek V4 Flash Free" },
94651
- { id: "qwen3.6-plus", name: "Qwen3.6 Plus" },
94652
- { id: "qwen3.5-plus", name: "Qwen3.5 Plus" },
94653
- { id: "big-pickle", name: "Big Pickle" },
94654
- { id: "nemotron-3-super-free", name: "Nemotron 3 Super Free" },
94655
- { id: "ring-2.6-1t-free", name: "Ring 2.6 1T Free" },
94656
- { id: "trinity-large-preview-free", name: "Trinity Large Preview Free" }
94615
+ { id: "qwen3.7-max", name: "Qwen3.7 Max" },
94616
+ { id: "deepseek-v4-flash", name: "DeepSeek V4 Flash" },
94617
+ { id: "grok-build-0.1", name: "Grok Build 0.1" }
94657
94618
  ],
94658
94619
  contextWindows: [
94659
94620
  ...SHARED_CONTEXT_WINDOWS,
94660
- ["gpt-5.5-pro", 1050000],
94661
94621
  ["gpt-5.5", 1050000],
94662
94622
  ["gpt-5.4", 1050000],
94663
- ["gpt-5.4-pro", 1050000],
94664
- ["gpt-5.4-mini", 400000],
94665
- ["gpt-5.4-nano", 400000],
94666
- ["gpt-5.3-codex", 400000],
94667
- ["gpt-5.3-codex-spark", 400000],
94668
- ["gpt-5.2", 400000],
94669
- ["gpt-5.2-codex", 400000],
94670
- ["gpt-5.1", 400000],
94671
- ["gpt-5.1-codex", 400000],
94672
- ["gpt-5.1-codex-max", 400000],
94673
- ["gpt-5.1-codex-mini", 400000],
94674
94623
  ["gpt-5", 400000],
94675
- ["gpt-5-codex", 400000],
94676
- ["gpt-5-nano", 400000],
94677
- ["gpt-5.4-pro", 1050000],
94678
- ["gpt-5.4-mini", 400000],
94679
- ["gpt-5.4-nano", 400000],
94680
- ["gpt-5.3-codex", 400000],
94681
- ["gpt-5.3-codex-spark", 400000],
94682
- ["gpt-5.2", 400000],
94683
- ["gpt-5.2-codex", 400000],
94684
- ["gpt-5.1", 400000],
94685
- ["gpt-5.1-codex", 400000],
94686
- ["gpt-5.1-codex-max", 400000],
94687
- ["gpt-5.1-codex-mini", 400000],
94688
- ["gpt-5", 400000],
94689
- ["gpt-5-codex", 400000],
94690
- ["gpt-5-nano", 400000],
94691
94624
  ["claude-opus-4-8", 1e6],
94692
94625
  ["claude-opus-4-7", 1e6],
94693
94626
  ["claude-opus-4-6", 1e6],
94694
- ["claude-opus-4-5", 200000],
94695
- ["claude-opus-4-1", 200000],
94696
94627
  ["claude-sonnet-4-6", 1e6],
94697
94628
  ["claude-sonnet-4-5", 1e6],
94698
- ["claude-sonnet-4", 200000],
94699
- ["claude-haiku-4-5", 200000],
94700
- ["claude-opus-4.8", 1e6],
94701
- ["claude-opus-4.6", 1e6],
94702
- ["claude-sonnet-4.6", 1e6],
94703
- ["claude-sonnet-4.5", 1e6],
94704
- ["claude-sonnet-4.6", 1e6],
94705
- ["claude-sonnet-4.5", 200000],
94706
- ["minimax-m2.5", 196000],
94707
- ["minimax-m2.5-free", 196000],
94708
- ["kimi-k2.5", 262000],
94709
- ["gemini-3.1-pro", 1048576],
94710
- ["gemini-3-flash", 1048576],
94711
- ["qwen3.6-plus", 1e6],
94712
- ["qwen3.5-plus", 1e6],
94713
- ["deepseek-v4-flash-free", 131072],
94629
+ ["minimax-m3", 196000],
94630
+ ["minimax-m2", 196000],
94631
+ ["kimi-k2", 262000],
94632
+ ["mimo-v2", 262144],
94633
+ ["nemotron-3", 262000],
94634
+ ["grok-build", 256000],
94714
94635
  ["big-pickle", 200000],
94715
- ["nemotron-3-super-free", 262000],
94716
- ["ring-2.6-1t-free", 131072],
94717
- ["trinity-large-preview-free", 262144]
94636
+ ["deepseek-v4", 131072]
94718
94637
  ]
94719
94638
  };
94720
94639
  });
@@ -432961,6 +432880,9 @@ ${lines.join(`
432961
432880
  try {
432962
432881
  recordMemoryAction(resolved.id);
432963
432882
  } catch {}
432883
+ try {
432884
+ manager.recordRecallAcross([{ scope: resolved.scope, id: resolved.id }]);
432885
+ } catch {}
432964
432886
  return { success: true, output: formatRecordFull(resolved) };
432965
432887
  }
432966
432888
  function handleList() {
@@ -433006,6 +432928,9 @@ ${lines.join(`
433006
432928
  });
433007
432929
  if (hits.length === 0)
433008
432930
  return { success: true, output: "No matching memories found." };
432931
+ try {
432932
+ manager.recordRecallAcross(hits.map((h) => ({ scope: h.scope, id: h.record.id })));
432933
+ } catch {}
433009
432934
  return {
433010
432935
  success: true,
433011
432936
  output: hits.map(({ record: record2, scope, normalized_score }) => `${formatRecordLine({ ...record2, scope })} score=${normalized_score.toFixed(2)}`).join(`
@@ -448158,6 +448083,7 @@ var init_manager6 = __esm(() => {
448158
448083
  this.recallCache = { key: cacheKey, pair: null };
448159
448084
  return null;
448160
448085
  }
448086
+ this.memoryManager.recordRecallAcross(results.map((r) => ({ scope: r.scope, id: r.record.id })));
448161
448087
  const fresh = results.filter((r) => !this.surfacedMemoryIds.has(r.record.id));
448162
448088
  if (fresh.length === 0) {
448163
448089
  this.recallCache = { key: cacheKey, pair: null };
@@ -448182,7 +448108,6 @@ var init_manager6 = __esm(() => {
448182
448108
  lines.push("(call memory(action:'get', id:<8-char prefix>) to read full details)");
448183
448109
  }
448184
448110
  lines.push("</recalled_memories>");
448185
- this.memoryManager.recordRecallAcross(surfacedIds);
448186
448111
  const userMessage = lines.join(`
448187
448112
  `);
448188
448113
  const assistantAck = MEMORY_RECALL_ACK(surfacedIds.length);
@@ -508821,6 +508746,7 @@ function RepoMapStatusPopup({
508821
508746
  const stateRef = import_react152.useRef(useRepoMapStore.getState());
508822
508747
  const [, setRenderTick] = import_react152.useState(0);
508823
508748
  const spinnerRef = import_react152.useRef(0);
508749
+ const bodyScrollRef = import_react152.useRef(null);
508824
508750
  const initialMode = currentMode ?? "off";
508825
508751
  const initialLimit = currentLimit ?? 300;
508826
508752
  const [selectedMode, setSelectedMode] = import_react152.useState(initialMode);
@@ -508863,6 +508789,15 @@ function RepoMapStatusPopup({
508863
508789
  }, 150);
508864
508790
  return () => clearInterval(timer);
508865
508791
  }, [visible]);
508792
+ import_react152.useEffect(() => {
508793
+ if (!visible)
508794
+ return;
508795
+ const sb = bodyScrollRef.current;
508796
+ if (!sb)
508797
+ return;
508798
+ const id = focusRow === 2 /* Budget */ ? "repomap-budget" : "repomap-semantic";
508799
+ queueMicrotask(() => sb.scrollChildIntoView(id));
508800
+ }, [visible, focusRow]);
508866
508801
  const hasConfig = onApply !== undefined;
508867
508802
  const isModified = selectedMode !== (currentMode ?? "off") || selectedLimit !== (currentLimit ?? 300) || selectedAutoRegen !== (currentAutoRegen ?? false) || selectedTokenBudget !== currentTokenBudget || selectedScope !== (currentScope ?? "project");
508868
508803
  useKeyboard((evt) => {
@@ -509049,6 +508984,7 @@ function RepoMapStatusPopup({
509049
508984
  ];
509050
508985
  const showLimitRow = selectedMode === "llm" || selectedMode === "full";
509051
508986
  const popupH = Math.min(Math.max(18, Math.floor(termRows * 0.85)), termRows - 2);
508987
+ const bodyH = Math.max(4, popupH - 7);
509052
508988
  const headerBlurb = hasConfig ? `Soul Map \xB7 ${selectedScope}${isModified ? " (modified)" : ""}` : `Soul Map \xB7 ${status}`;
509053
508989
  const footerHints = hasConfig ? [
509054
508990
  { key: "\u2191\u2193", label: "focus" },
@@ -509072,8 +509008,10 @@ function RepoMapStatusPopup({
509072
509008
  titleIcon: "repomap",
509073
509009
  blurb: headerBlurb,
509074
509010
  footerHints,
509075
- children: /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("box", {
509076
- flexDirection: "column",
509011
+ children: /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("scrollbox", {
509012
+ ref: bodyScrollRef,
509013
+ height: bodyH,
509014
+ scrollAcceleration: listScrollAccel,
509077
509015
  paddingX: 1,
509078
509016
  children: [
509079
509017
  /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV(VSpacer, {}, undefined, false, undefined, this),
@@ -509133,94 +509071,106 @@ function RepoMapStatusPopup({
509133
509071
  /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV(Divider, {
509134
509072
  width: innerW - 2
509135
509073
  }, undefined, false, undefined, this),
509136
- /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV(Section, {
509137
- title: "Semantic Summaries",
509074
+ /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("box", {
509075
+ id: "repomap-semantic",
509076
+ flexDirection: "column",
509077
+ backgroundColor: t.bgPopup,
509078
+ children: /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV(Section, {
509079
+ title: "Semantic Summaries",
509080
+ children: [
509081
+ /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV(SegmentedControl, {
509082
+ label: "Mode",
509083
+ options: SEMANTIC_MODES.map((m5) => ({ value: m5, label: MODE_LABELS2[m5] })),
509084
+ value: selectedMode,
509085
+ focused: focusRow === 0 /* Mode */
509086
+ }, undefined, false, undefined, this),
509087
+ showLimitRow ? /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV(import_jsx_dev_runtime2.Fragment, {
509088
+ children: [
509089
+ /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV(SegmentedControl, {
509090
+ label: "LLM Limit",
509091
+ options: LLM_LIMIT_PRESETS.map((v4) => ({ value: v4, label: String(v4) })),
509092
+ value: selectedLimit,
509093
+ focused: focusRow === 1 /* Limit */,
509094
+ suffix: "symbols"
509095
+ }, undefined, false, undefined, this),
509096
+ /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV(Toggle, {
509097
+ label: "Auto-regen [A]",
509098
+ description: "costs tokens on each file change",
509099
+ on: selectedAutoRegen
509100
+ }, undefined, false, undefined, this)
509101
+ ]
509102
+ }, undefined, true, undefined, this) : null,
509103
+ /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV(Hint, {
509104
+ children: [
509105
+ selectedMode,
509106
+ " \u2014 ",
509107
+ MODE_DESCRIPTIONS[selectedMode]
509108
+ ]
509109
+ }, undefined, true, undefined, this),
509110
+ /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV(VSpacer, {}, undefined, false, undefined, this),
509111
+ /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("box", {
509112
+ flexDirection: "row",
509113
+ paddingX: 1,
509114
+ backgroundColor: t.bgPopup,
509115
+ children: [
509116
+ onRegenerate ? /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV(KeyCap, {
509117
+ keyName: "G",
509118
+ label: "regenerate",
509119
+ accent: t.info
509120
+ }, undefined, false, undefined, this) : null,
509121
+ onRegenerate && onClearSummaries ? /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("text", {
509122
+ bg: t.bgPopup,
509123
+ children: " "
509124
+ }, undefined, false, undefined, this) : null,
509125
+ onClearSummaries ? confirmClear ? /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV(KeyCap, {
509126
+ keyName: "C",
509127
+ label: "CONFIRM clear (preserves LLM)",
509128
+ accent: t.brandSecondary
509129
+ }, undefined, false, undefined, this) : /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV(KeyCap, {
509130
+ keyName: "C",
509131
+ label: "clear summaries",
509132
+ accent: t.warning
509133
+ }, undefined, false, undefined, this) : null,
509134
+ onLspEnrich ? /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("text", {
509135
+ bg: t.bgPopup,
509136
+ children: " "
509137
+ }, undefined, false, undefined, this) : null,
509138
+ onLspEnrich ? /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV(KeyCap, {
509139
+ keyName: "L",
509140
+ label: "lsp enrich",
509141
+ accent: t.success
509142
+ }, undefined, false, undefined, this) : null
509143
+ ]
509144
+ }, undefined, true, undefined, this)
509145
+ ]
509146
+ }, undefined, true, undefined, this)
509147
+ }, undefined, false, undefined, this),
509148
+ /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("box", {
509149
+ id: "repomap-budget",
509150
+ flexDirection: "column",
509151
+ backgroundColor: t.bgPopup,
509138
509152
  children: [
509139
- /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV(SegmentedControl, {
509140
- label: "Mode",
509141
- options: SEMANTIC_MODES.map((m5) => ({ value: m5, label: MODE_LABELS2[m5] })),
509142
- value: selectedMode,
509143
- focused: focusRow === 0 /* Mode */
509153
+ /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV(Divider, {
509154
+ width: innerW - 2
509144
509155
  }, undefined, false, undefined, this),
509145
- showLimitRow ? /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV(import_jsx_dev_runtime2.Fragment, {
509156
+ /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV(Section, {
509157
+ title: "Map Token Budget",
509146
509158
  children: [
509147
509159
  /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV(SegmentedControl, {
509148
- label: "LLM Limit",
509149
- options: LLM_LIMIT_PRESETS.map((v4) => ({ value: v4, label: String(v4) })),
509150
- value: selectedLimit,
509151
- focused: focusRow === 1 /* Limit */,
509152
- suffix: "symbols"
509160
+ label: "Budget",
509161
+ options: budgetChips.map((c) => ({
509162
+ value: c.value ?? "auto",
509163
+ label: c.label
509164
+ })),
509165
+ value: selectedTokenBudget ?? "auto",
509166
+ focused: focusRow === 2 /* Budget */
509153
509167
  }, undefined, false, undefined, this),
509154
- /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV(Toggle, {
509155
- label: "Auto-regen [A]",
509156
- description: "costs tokens on each file change",
509157
- on: selectedAutoRegen
509168
+ /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV(Hint, {
509169
+ children: selectedTokenBudget === undefined ? "scales with conversation length (1.5k\u20134k)" : `fixed ${String(selectedTokenBudget / 1000)}k tokens \u2014 more files visible, higher prompt cost`
509158
509170
  }, undefined, false, undefined, this)
509159
509171
  ]
509160
- }, undefined, true, undefined, this) : null,
509161
- /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV(Hint, {
509162
- children: [
509163
- selectedMode,
509164
- " \u2014 ",
509165
- MODE_DESCRIPTIONS[selectedMode]
509166
- ]
509167
- }, undefined, true, undefined, this),
509168
- /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV(VSpacer, {}, undefined, false, undefined, this),
509169
- /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("box", {
509170
- flexDirection: "row",
509171
- paddingX: 1,
509172
- backgroundColor: t.bgPopup,
509173
- children: [
509174
- onRegenerate ? /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV(KeyCap, {
509175
- keyName: "G",
509176
- label: "regenerate",
509177
- accent: t.info
509178
- }, undefined, false, undefined, this) : null,
509179
- onRegenerate && onClearSummaries ? /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("text", {
509180
- bg: t.bgPopup,
509181
- children: " "
509182
- }, undefined, false, undefined, this) : null,
509183
- onClearSummaries ? confirmClear ? /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV(KeyCap, {
509184
- keyName: "C",
509185
- label: "CONFIRM clear (preserves LLM)",
509186
- accent: t.brandSecondary
509187
- }, undefined, false, undefined, this) : /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV(KeyCap, {
509188
- keyName: "C",
509189
- label: "clear summaries",
509190
- accent: t.warning
509191
- }, undefined, false, undefined, this) : null,
509192
- onLspEnrich ? /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("text", {
509193
- bg: t.bgPopup,
509194
- children: " "
509195
- }, undefined, false, undefined, this) : null,
509196
- onLspEnrich ? /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV(KeyCap, {
509197
- keyName: "L",
509198
- label: "lsp enrich",
509199
- accent: t.success
509200
- }, undefined, false, undefined, this) : null
509201
- ]
509202
509172
  }, undefined, true, undefined, this)
509203
509173
  ]
509204
- }, undefined, true, undefined, this),
509205
- /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV(Divider, {
509206
- width: innerW - 2
509207
- }, undefined, false, undefined, this),
509208
- /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV(Section, {
509209
- title: "Map Token Budget",
509210
- children: [
509211
- /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV(SegmentedControl, {
509212
- label: "Budget",
509213
- options: budgetChips.map((c) => ({
509214
- value: c.value ?? "auto",
509215
- label: c.label
509216
- })),
509217
- value: selectedTokenBudget ?? "auto",
509218
- focused: focusRow === 2 /* Budget */
509219
- }, undefined, false, undefined, this),
509220
- /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV(Hint, {
509221
- children: selectedTokenBudget === undefined ? "scales with conversation length (1.5k\u20134k)" : `fixed ${String(selectedTokenBudget / 1000)}k tokens \u2014 more files visible, higher prompt cost`
509222
- }, undefined, false, undefined, this)
509223
- ]
509224
509174
  }, undefined, true, undefined, this)
509225
509175
  ]
509226
509176
  }, undefined, true, undefined, this)
@@ -509234,6 +509184,7 @@ var init_RepoMapStatusPopup = __esm(async () => {
509234
509184
  init_repomap();
509235
509185
  init_shared();
509236
509186
  init_ui2();
509187
+ init_scroll();
509237
509188
  init_jsx_dev_runtime();
509238
509189
  await init_react2();
509239
509190
  import_react152 = __toESM(require_react(), 1);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@proxysoul/soulforge",
3
- "version": "2.20.3",
3
+ "version": "2.20.4",
4
4
  "description": "Graph-powered code intelligence — multi-agent coding with codebase-aware AI",
5
5
  "repository": {
6
6
  "type": "git",