@proxysoul/soulforge 2.20.3 → 2.20.5

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 +326 -346
  2. package/package.json +1 -1
package/dist/index.js CHANGED
@@ -65798,7 +65798,14 @@ function resolveModel(modelId) {
65798
65798
  if (!provider) {
65799
65799
  throw new Error(`Unknown provider "${providerId}"`);
65800
65800
  }
65801
- return provider.createModel(model);
65801
+ const base = provider.createModel(model);
65802
+ return wrapLanguageModel({
65803
+ model: base,
65804
+ middleware: [
65805
+ extractReasoningMiddleware({ tagName: "think" }),
65806
+ extractReasoningMiddleware({ tagName: "thinking" })
65807
+ ]
65808
+ });
65802
65809
  }
65803
65810
  function onProviderSwitch(listener) {
65804
65811
  providerSwitchListeners.add(listener);
@@ -65808,6 +65815,7 @@ function onProviderSwitch(listener) {
65808
65815
  }
65809
65816
  var cachedStatuses = null, providerStatusListeners, activeProviderId = null, providerSwitchListeners;
65810
65817
  var init_provider = __esm(() => {
65818
+ init_dist5();
65811
65819
  init_secrets();
65812
65820
  init_providers();
65813
65821
  providerStatusListeners = new Set;
@@ -71927,7 +71935,7 @@ var package_default;
71927
71935
  var init_package = __esm(() => {
71928
71936
  package_default = {
71929
71937
  name: "@proxysoul/soulforge",
71930
- version: "2.20.3",
71938
+ version: "2.20.5",
71931
71939
  description: "Graph-powered code intelligence \u2014 multi-agent coding with codebase-aware AI",
71932
71940
  repository: {
71933
71941
  type: "git",
@@ -94533,31 +94541,22 @@ var init_opencode_go = __esm(() => {
94533
94541
  },
94534
94542
  fallbackModels: [
94535
94543
  { id: "glm-5.1", name: "GLM 5.1" },
94536
- { id: "glm-5", name: "GLM 5" },
94537
94544
  { id: "kimi-k2.6", name: "Kimi K2.6" },
94538
- { id: "kimi-k2.5", name: "Kimi K2.5" },
94545
+ { id: "minimax-m3", name: "MiniMax M3" },
94539
94546
  { 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" },
94547
+ { id: "qwen3.7-max", name: "Qwen3.7 Max" },
94545
94548
  { id: "deepseek-v4-pro", name: "DeepSeek V4 Pro" },
94546
94549
  { id: "deepseek-v4-flash", name: "DeepSeek V4 Flash" }
94547
94550
  ],
94548
94551
  contextWindows: [
94549
- ["glm-5.1", 204800],
94550
94552
  ["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]
94553
+ ["kimi-k2", 262000],
94554
+ ["mimo-v2", 262144],
94555
+ ["minimax-m3", 196000],
94556
+ ["minimax-m2", 196000],
94557
+ ["qwen3", 1e6],
94558
+ ["deepseek-v4", 131072],
94559
+ ["hy3", 262144]
94561
94560
  ]
94562
94561
  };
94563
94562
  });
@@ -94612,109 +94611,37 @@ var init_opencode_zen = __esm(() => {
94612
94611
  }
94613
94612
  },
94614
94613
  fallbackModels: [
94615
- { id: "gpt-5.5-pro", name: "GPT 5.5 Pro" },
94616
94614
  { id: "gpt-5.5", name: "GPT 5.5" },
94617
- { id: "gpt-5.4-pro", name: "GPT 5.4 Pro" },
94618
94615
  { 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
94616
  { 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
94617
  { 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
94618
  { id: "claude-haiku-4-5", name: "Claude Haiku 4.5" },
94641
94619
  { 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" },
94620
+ { id: "minimax-m3", name: "MiniMax M3" },
94646
94621
  { id: "glm-5.1", name: "GLM 5.1" },
94647
- { id: "glm-5", name: "GLM 5" },
94648
94622
  { 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" }
94623
+ { id: "qwen3.7-max", name: "Qwen3.7 Max" },
94624
+ { id: "deepseek-v4-flash", name: "DeepSeek V4 Flash" },
94625
+ { id: "grok-build-0.1", name: "Grok Build 0.1" }
94657
94626
  ],
94658
94627
  contextWindows: [
94659
94628
  ...SHARED_CONTEXT_WINDOWS,
94660
- ["gpt-5.5-pro", 1050000],
94661
94629
  ["gpt-5.5", 1050000],
94662
94630
  ["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
- ["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
94631
  ["gpt-5", 400000],
94689
- ["gpt-5-codex", 400000],
94690
- ["gpt-5-nano", 400000],
94691
94632
  ["claude-opus-4-8", 1e6],
94692
94633
  ["claude-opus-4-7", 1e6],
94693
94634
  ["claude-opus-4-6", 1e6],
94694
- ["claude-opus-4-5", 200000],
94695
- ["claude-opus-4-1", 200000],
94696
94635
  ["claude-sonnet-4-6", 1e6],
94697
94636
  ["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],
94637
+ ["minimax-m3", 196000],
94638
+ ["minimax-m2", 196000],
94639
+ ["kimi-k2", 262000],
94640
+ ["mimo-v2", 262144],
94641
+ ["nemotron-3", 262000],
94642
+ ["grok-build", 256000],
94714
94643
  ["big-pickle", 200000],
94715
- ["nemotron-3-super-free", 262000],
94716
- ["ring-2.6-1t-free", 131072],
94717
- ["trinity-large-preview-free", 262144]
94644
+ ["deepseek-v4", 131072]
94718
94645
  ]
94719
94646
  };
94720
94647
  });
@@ -432961,6 +432888,9 @@ ${lines.join(`
432961
432888
  try {
432962
432889
  recordMemoryAction(resolved.id);
432963
432890
  } catch {}
432891
+ try {
432892
+ manager.recordRecallAcross([{ scope: resolved.scope, id: resolved.id }]);
432893
+ } catch {}
432964
432894
  return { success: true, output: formatRecordFull(resolved) };
432965
432895
  }
432966
432896
  function handleList() {
@@ -433006,6 +432936,9 @@ ${lines.join(`
433006
432936
  });
433007
432937
  if (hits.length === 0)
433008
432938
  return { success: true, output: "No matching memories found." };
432939
+ try {
432940
+ manager.recordRecallAcross(hits.map((h) => ({ scope: h.scope, id: h.record.id })));
432941
+ } catch {}
433009
432942
  return {
433010
432943
  success: true,
433011
432944
  output: hits.map(({ record: record2, scope, normalized_score }) => `${formatRecordLine({ ...record2, scope })} score=${normalized_score.toFixed(2)}`).join(`
@@ -448158,6 +448091,7 @@ var init_manager6 = __esm(() => {
448158
448091
  this.recallCache = { key: cacheKey, pair: null };
448159
448092
  return null;
448160
448093
  }
448094
+ this.memoryManager.recordRecallAcross(results.map((r) => ({ scope: r.scope, id: r.record.id })));
448161
448095
  const fresh = results.filter((r) => !this.surfacedMemoryIds.has(r.record.id));
448162
448096
  if (fresh.length === 0) {
448163
448097
  this.recallCache = { key: cacheKey, pair: null };
@@ -448182,7 +448116,6 @@ var init_manager6 = __esm(() => {
448182
448116
  lines.push("(call memory(action:'get', id:<8-char prefix>) to read full details)");
448183
448117
  }
448184
448118
  lines.push("</recalled_memories>");
448185
- this.memoryManager.recordRecallAcross(surfacedIds);
448186
448119
  const userMessage = lines.join(`
448187
448120
  `);
448188
448121
  const assistantAck = MEMORY_RECALL_ACK(surfacedIds.length);
@@ -478126,14 +478059,18 @@ Proceeding without it will significantly reduce capabilities \u2014 no soul tool
478126
478059
  stallAbortedAt = Date.now();
478127
478060
  abortController.abort();
478128
478061
  }, 1e4);
478129
- let streamEventCount = 0;
478130
478062
  let yieldBeforeNext = false;
478063
+ let lastYieldTs = Date.now();
478064
+ const YIELD_BUDGET_MS = 8;
478065
+ const hearthBridgeMod = await Promise.resolve().then(() => (init_bridge(), exports_bridge));
478066
+ const hearthLive = hearthBridgeMod.hearthBridge.listBindings().some((b5) => b5.tabId === tabId);
478131
478067
  const streamIterator = result.fullStream[Symbol.asyncIterator]();
478132
478068
  for await (const part of { [Symbol.asyncIterator]: () => streamIterator }) {
478133
478069
  markActivity();
478134
- if (yieldBeforeNext || ++streamEventCount % 5 === 0) {
478070
+ if (yieldBeforeNext || Date.now() - lastYieldTs >= YIELD_BUDGET_MS) {
478135
478071
  yieldBeforeNext = false;
478136
- await new Promise((r4) => setTimeout(r4, 0));
478072
+ lastYieldTs = Date.now();
478073
+ await Promise.resolve();
478137
478074
  }
478138
478075
  switch (part.type) {
478139
478076
  case "start-step": {
@@ -478155,9 +478092,8 @@ Proceeding without it will significantly reduce capabilities \u2014 no soul tool
478155
478092
  case "reasoning-delta": {
478156
478093
  gotFirstContent = true;
478157
478094
  appendReasoningContent(part.text);
478158
- Promise.resolve().then(() => (init_bridge(), exports_bridge)).then(({ reasoningStreamEmitter: reasoningStreamEmitter2 }) => {
478159
- reasoningStreamEmitter2.append(tabId, part.text);
478160
- });
478095
+ if (hearthLive)
478096
+ hearthBridgeMod.reasoningStreamEmitter.append(tabId, part.text);
478161
478097
  break;
478162
478098
  }
478163
478099
  case "reasoning-end":
@@ -478166,9 +478102,11 @@ Proceeding without it will significantly reduce capabilities \u2014 no soul tool
478166
478102
  case "text-delta": {
478167
478103
  gotFirstContent = true;
478168
478104
  appendText(part.text);
478169
- Promise.resolve().then(() => (init_bridge(), exports_bridge)).then(({ bridgeStreamEmitter: bridgeStreamEmitter2 }) => {
478170
- bridgeStreamEmitter2.stream(tabId, { type: "text", content: part.text });
478171
- });
478105
+ if (hearthLive)
478106
+ hearthBridgeMod.bridgeStreamEmitter.stream(tabId, {
478107
+ type: "text",
478108
+ content: part.text
478109
+ });
478172
478110
  queueMicrotaskFlush();
478173
478111
  break;
478174
478112
  }
@@ -486105,6 +486043,7 @@ var init_MessageList = __esm(() => {
486105
486043
  const hasContent = msg.content.trim().length > 0;
486106
486044
  const hasTools = msg.toolCalls && msg.toolCalls.length > 0;
486107
486045
  const isEmpty = !hasSegments && !hasContent && !hasTools;
486046
+ const onlyHiddenReasoning = !isEmpty && !hasContent && !hasTools && !showReasoning && !!msg.segments?.length && msg.segments.every((s2) => s2.type === "reasoning");
486108
486047
  const finalResponseSeed = import_react58.useMemo(() => {
486109
486048
  let h3 = 0;
486110
486049
  for (let i4 = 0;i4 < msg.id.length; i4++)
@@ -486229,6 +486168,10 @@ var init_MessageList = __esm(() => {
486229
486168
  fg: t.textMuted,
486230
486169
  attributes: TextAttributes9.ITALIC,
486231
486170
  children: "Empty response \u2014 model returned no content."
486171
+ }, undefined, false, undefined, this) : onlyHiddenReasoning ? /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("text", {
486172
+ fg: t.textMuted,
486173
+ attributes: TextAttributes9.ITALIC,
486174
+ children: "Thinking\u2026 (reasoning hidden)"
486232
486175
  }, undefined, false, undefined, this) : autoLayout ? /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV(import_jsx_dev_runtime2.Fragment, {
486233
486176
  children: [
486234
486177
  autoLayout.opening ? /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("box", {
@@ -486743,6 +486686,7 @@ var init_useTextDrip = __esm(() => {
486743
486686
  });
486744
486687
 
486745
486688
  // src/components/chat/StreamSegmentList.tsx
486689
+ import { TextAttributes as TextAttributes10 } from "@opentui/core";
486746
486690
  function trimToCompleteLines(text3) {
486747
486691
  return text3;
486748
486692
  }
@@ -486762,6 +486706,7 @@ function DripText({ content, streaming }) {
486762
486706
  }
486763
486707
  var import_react61, StreamSegmentList;
486764
486708
  var init_StreamSegmentList = __esm(() => {
486709
+ init_store();
486765
486710
  init_Markdown();
486766
486711
  init_ReasoningBlock();
486767
486712
  init_ToolCallDisplay();
@@ -486777,6 +486722,7 @@ var init_StreamSegmentList = __esm(() => {
486777
486722
  showReasoning = true,
486778
486723
  reasoningExpanded = false
486779
486724
  }) {
486725
+ const t = useTheme();
486780
486726
  const toolCallMap = import_react61.useMemo(() => {
486781
486727
  const m5 = new Map;
486782
486728
  for (const tc of toolCalls)
@@ -486836,71 +486782,79 @@ var init_StreamSegmentList = __esm(() => {
486836
486782
  }
486837
486783
  return -1;
486838
486784
  }, [merged, streaming]);
486785
+ const hasVisibleContent = merged.some((seg) => seg.type === "reasoning" && showReasoning || seg.type === "text" && seg.content.trim().length > 0 || seg.type === "tools");
486839
486786
  let lastVisibleType = null;
486840
486787
  return /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV(import_jsx_dev_runtime2.Fragment, {
486841
- children: merged.map((seg, i4) => {
486842
- if (seg.type === "reasoning" && !showReasoning)
486843
- return null;
486844
- const needsGap = lastVisibleType !== null && lastVisibleType !== seg.type ? 1 : 0;
486845
- if (seg.type === "text") {
486846
- lastVisibleType = seg.type;
486847
- const isActiveSegment = i4 === lastTextIndex;
486848
- const display = trimToCompleteLines(seg.content);
486849
- if (display.length === 0)
486788
+ children: [
486789
+ streaming && !hasVisibleContent ? /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("text", {
486790
+ fg: t.textMuted,
486791
+ attributes: TextAttributes10.ITALIC,
486792
+ children: "Thinking\u2026"
486793
+ }, undefined, false, undefined, this) : null,
486794
+ merged.map((seg, i4) => {
486795
+ if (seg.type === "reasoning" && !showReasoning)
486850
486796
  return null;
486851
- if (isActiveSegment) {
486797
+ const needsGap = lastVisibleType !== null && lastVisibleType !== seg.type ? 1 : 0;
486798
+ if (seg.type === "text") {
486799
+ lastVisibleType = seg.type;
486800
+ const isActiveSegment = i4 === lastTextIndex;
486801
+ const display = trimToCompleteLines(seg.content);
486802
+ if (display.length === 0)
486803
+ return null;
486804
+ if (isActiveSegment) {
486805
+ return /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("box", {
486806
+ flexDirection: "column",
486807
+ marginTop: needsGap,
486808
+ children: /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV(DripText, {
486809
+ content: display,
486810
+ streaming
486811
+ }, undefined, false, undefined, this)
486812
+ }, `text-${String(i4)}`, false, undefined, this);
486813
+ }
486852
486814
  return /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("box", {
486853
486815
  flexDirection: "column",
486854
486816
  marginTop: needsGap,
486855
- children: /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV(DripText, {
486856
- content: display,
486857
- streaming
486817
+ children: /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV(Markdown, {
486818
+ text: display,
486819
+ streaming: true
486858
486820
  }, undefined, false, undefined, this)
486859
486821
  }, `text-${String(i4)}`, false, undefined, this);
486860
486822
  }
486861
- return /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("box", {
486862
- flexDirection: "column",
486863
- marginTop: needsGap,
486864
- children: /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV(Markdown, {
486865
- text: display,
486866
- streaming: true
486867
- }, undefined, false, undefined, this)
486868
- }, `text-${String(i4)}`, false, undefined, this);
486869
- }
486870
- if (seg.type === "reasoning") {
486823
+ if (seg.type === "reasoning") {
486824
+ lastVisibleType = seg.type;
486825
+ const rkey = `${seg.id}-${reasoningExpanded ? "exp" : "col"}`;
486826
+ return /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("box", {
486827
+ flexDirection: "column",
486828
+ marginTop: needsGap,
486829
+ children: /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV(ReasoningBlock, {
486830
+ content: seg.content,
486831
+ expanded: reasoningExpanded,
486832
+ isStreaming: !seg.done,
486833
+ id: seg.id
486834
+ }, undefined, false, undefined, this)
486835
+ }, rkey, false, undefined, this);
486836
+ }
486837
+ const calls = seg.callIds.map((id) => toolCallMap.get(id)).filter((tc) => tc != null);
486838
+ if (calls.length === 0)
486839
+ return null;
486871
486840
  lastVisibleType = seg.type;
486872
- const rkey = `${seg.id}-${reasoningExpanded ? "exp" : "col"}`;
486873
486841
  return /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("box", {
486874
- flexDirection: "column",
486875
486842
  marginTop: needsGap,
486876
- children: /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV(ReasoningBlock, {
486877
- content: seg.content,
486878
- expanded: reasoningExpanded,
486879
- isStreaming: !seg.done,
486880
- id: seg.id
486843
+ children: /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV(ToolCallDisplay, {
486844
+ calls,
486845
+ allCalls: toolCalls,
486846
+ verbose,
486847
+ diffStyle
486881
486848
  }, undefined, false, undefined, this)
486882
- }, rkey, false, undefined, this);
486883
- }
486884
- const calls = seg.callIds.map((id) => toolCallMap.get(id)).filter((tc) => tc != null);
486885
- if (calls.length === 0)
486886
- return null;
486887
- lastVisibleType = seg.type;
486888
- return /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("box", {
486889
- marginTop: needsGap,
486890
- children: /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV(ToolCallDisplay, {
486891
- calls,
486892
- allCalls: toolCalls,
486893
- verbose,
486894
- diffStyle
486895
- }, undefined, false, undefined, this)
486896
- }, seg.callIds[0], false, undefined, this);
486897
- })
486898
- }, undefined, false, undefined, this);
486849
+ }, seg.callIds[0], false, undefined, this);
486850
+ })
486851
+ ]
486852
+ }, undefined, true, undefined, this);
486899
486853
  });
486900
486854
  });
486901
486855
 
486902
486856
  // src/components/chat/FinalResponseView.tsx
486903
- import { TextAttributes as TextAttributes10 } from "@opentui/core";
486857
+ import { TextAttributes as TextAttributes11 } from "@opentui/core";
486904
486858
  function filterQuietTools(name39) {
486905
486859
  return !QUIET_TOOLS2.has(name39);
486906
486860
  }
@@ -487089,7 +487043,7 @@ var init_FinalResponseView = __esm(() => {
487089
487043
  }, undefined, false, undefined, this),
487090
487044
  /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("span", {
487091
487045
  fg: effectiveDone ? t.textSecondary : t.textPrimary,
487092
- attributes: effectiveDone ? undefined : TextAttributes10.BOLD,
487046
+ attributes: effectiveDone ? undefined : TextAttributes11.BOLD,
487093
487047
  children: statusMsg
487094
487048
  }, undefined, false, undefined, this),
487095
487049
  effectiveDone ? null : /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV(Spinner, {
@@ -487448,7 +487402,7 @@ var init_tips = __esm(() => {
487448
487402
  });
487449
487403
 
487450
487404
  // src/components/chat/InputBox.tsx
487451
- import { decodePasteBytes as decodePasteBytes2, TextAttributes as TextAttributes11 } from "@opentui/core";
487405
+ import { decodePasteBytes as decodePasteBytes2, TextAttributes as TextAttributes12 } from "@opentui/core";
487452
487406
  function getCommands() {
487453
487407
  return getCommandDefs().filter((c) => !isDefHidden(c)).map((c) => ({ cmd: c.cmd, icon: icon(c.ic), desc: c.desc }));
487454
487408
  }
@@ -487503,7 +487457,7 @@ var init_InputBox = __esm(async () => {
487503
487457
  return /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("text", {
487504
487458
  children: spans.map((s2, i4) => /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("span", {
487505
487459
  fg: s2.hl ? t.brandSecondary : t.textPrimary,
487506
- attributes: s2.hl ? TextAttributes11.BOLD : undefined,
487460
+ attributes: s2.hl ? TextAttributes12.BOLD : undefined,
487507
487461
  children: s2.text
487508
487462
  }, i4, false, undefined, this))
487509
487463
  }, undefined, false, undefined, this);
@@ -488103,7 +488057,7 @@ var init_InputBox = __esm(async () => {
488103
488057
  }, undefined, false, undefined, this),
488104
488058
  /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("text", {
488105
488059
  fg: isSelected ? t.info : t.borderSlash,
488106
- attributes: isSelected ? TextAttributes11.BOLD : undefined,
488060
+ attributes: isSelected ? TextAttributes12.BOLD : undefined,
488107
488061
  children: match2.cmd
488108
488062
  }, undefined, false, undefined, this),
488109
488063
  /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("text", {
@@ -488153,7 +488107,7 @@ var init_InputBox = __esm(async () => {
488153
488107
  children: [
488154
488108
  /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("text", {
488155
488109
  fg: t.warning,
488156
- attributes: TextAttributes11.BOLD,
488110
+ attributes: TextAttributes12.BOLD,
488157
488111
  children: [
488158
488112
  icon("clock_alt"),
488159
488113
  " history"
@@ -488218,7 +488172,7 @@ var init_InputBox = __esm(async () => {
488218
488172
  children: [
488219
488173
  /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("text", {
488220
488174
  fg: t.warning,
488221
- attributes: TextAttributes11.BOLD,
488175
+ attributes: TextAttributes12.BOLD,
488222
488176
  children: "search: "
488223
488177
  }, undefined, false, undefined, this),
488224
488178
  /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("text", {
@@ -488236,7 +488190,7 @@ var init_InputBox = __esm(async () => {
488236
488190
  children: [
488237
488191
  /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("text", {
488238
488192
  fg: t.brandSecondary,
488239
- attributes: TextAttributes11.BOLD,
488193
+ attributes: TextAttributes12.BOLD,
488240
488194
  flexShrink: 0,
488241
488195
  children: [
488242
488196
  ">",
@@ -488261,7 +488215,7 @@ var init_InputBox = __esm(async () => {
488261
488215
  }, undefined, false, undefined, this),
488262
488216
  showBusy && !showAutocomplete ? /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("text", {
488263
488217
  fg: t.error,
488264
- attributes: TextAttributes11.BOLD,
488218
+ attributes: TextAttributes12.BOLD,
488265
488219
  flexShrink: 0,
488266
488220
  children: " ^X stop"
488267
488221
  }, undefined, false, undefined, this) : ghost ? /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("text", {
@@ -488298,7 +488252,7 @@ var init_InputBox = __esm(async () => {
488298
488252
  });
488299
488253
 
488300
488254
  // src/components/plan/TaskProgress.tsx
488301
- import { TextAttributes as TextAttributes12 } from "@opentui/core";
488255
+ import { TextAttributes as TextAttributes13 } from "@opentui/core";
488302
488256
  function InlineSpinner({ color }) {
488303
488257
  return /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV(Spinner, {
488304
488258
  inline: true,
@@ -488341,7 +488295,7 @@ function TaskList({ tasks, nested }) {
488341
488295
  }, undefined, false, undefined, this),
488342
488296
  /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("span", {
488343
488297
  fg: task.status === "done" ? theme2.textMuted : task.status === "in-progress" ? theme2.textPrimary : STATUS_COLORS[task.status] ?? theme2.textMuted,
488344
- attributes: task.status === "in-progress" ? TextAttributes12.BOLD : undefined,
488298
+ attributes: task.status === "in-progress" ? TextAttributes13.BOLD : undefined,
488345
488299
  children: task.title
488346
488300
  }, undefined, false, undefined, this)
488347
488301
  ]
@@ -488387,7 +488341,7 @@ function TaskList({ tasks, nested }) {
488387
488341
  children: [
488388
488342
  /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("text", {
488389
488343
  fg: theme2.brand,
488390
- attributes: TextAttributes12.BOLD,
488344
+ attributes: TextAttributes13.BOLD,
488391
488345
  children: [
488392
488346
  icon("plan"),
488393
488347
  " Tasks"
@@ -488463,7 +488417,7 @@ var init_TaskProgress = __esm(() => {
488463
488417
  });
488464
488418
 
488465
488419
  // src/components/plan/PlanProgress.tsx
488466
- import { TextAttributes as TextAttributes13 } from "@opentui/core";
488420
+ import { TextAttributes as TextAttributes14 } from "@opentui/core";
488467
488421
  function PlanProgress({ plan, tasks }) {
488468
488422
  const t = useTheme();
488469
488423
  const STATUS_COLORS = {
@@ -488506,7 +488460,7 @@ function PlanProgress({ plan, tasks }) {
488506
488460
  children: [
488507
488461
  /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("text", {
488508
488462
  fg: allDone ? t.success : t.brandAlt,
488509
- attributes: TextAttributes13.BOLD,
488463
+ attributes: TextAttributes14.BOLD,
488510
488464
  children: [
488511
488465
  icon("plan"),
488512
488466
  " ",
@@ -488543,7 +488497,7 @@ function PlanProgress({ plan, tasks }) {
488543
488497
  }, undefined, false, undefined, this),
488544
488498
  /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("text", {
488545
488499
  fg: step.status === "active" ? t.textPrimary : STATUS_COLORS[step.status],
488546
- attributes: step.status === "active" ? TextAttributes13.BOLD : undefined,
488500
+ attributes: step.status === "active" ? TextAttributes14.BOLD : undefined,
488547
488501
  children: step.label
488548
488502
  }, undefined, false, undefined, this)
488549
488503
  ]
@@ -489265,7 +489219,7 @@ var init_ui2 = __esm(() => {
489265
489219
  });
489266
489220
 
489267
489221
  // src/components/plan/PlanReviewPrompt.tsx
489268
- import { TextAttributes as TextAttributes14 } from "@opentui/core";
489222
+ import { TextAttributes as TextAttributes15 } from "@opentui/core";
489269
489223
  function PlanReviewPrompt({
489270
489224
  onAccept,
489271
489225
  onClearAndImplement,
@@ -489360,7 +489314,7 @@ function PlanReviewPrompt({
489360
489314
  children: [
489361
489315
  /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("text", {
489362
489316
  fg: ACCENT,
489363
- attributes: TextAttributes14.BOLD,
489317
+ attributes: TextAttributes15.BOLD,
489364
489318
  children: [
489365
489319
  icon("plan"),
489366
489320
  " ",
@@ -489523,7 +489477,7 @@ function PlanReviewPrompt({
489523
489477
  }, undefined, false, undefined, this),
489524
489478
  /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("span", {
489525
489479
  fg: selected ? t.textPrimary : t.textSecondary,
489526
- attributes: selected ? TextAttributes14.BOLD : undefined,
489480
+ attributes: selected ? TextAttributes15.BOLD : undefined,
489527
489481
  children: [
489528
489482
  opt.icon,
489529
489483
  " ",
@@ -489559,7 +489513,7 @@ var init_PlanReviewPrompt = __esm(async () => {
489559
489513
  });
489560
489514
 
489561
489515
  // src/components/QuestionPrompt.tsx
489562
- import { TextAttributes as TextAttributes15 } from "@opentui/core";
489516
+ import { TextAttributes as TextAttributes16 } from "@opentui/core";
489563
489517
  function OptionRow({
489564
489518
  label,
489565
489519
  isSelected,
@@ -489573,7 +489527,7 @@ function OptionRow({
489573
489527
  }, undefined, false, undefined, this),
489574
489528
  /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("span", {
489575
489529
  fg: isSelected ? t.textPrimary : t.textSecondary,
489576
- attributes: isSelected ? TextAttributes15.BOLD : undefined,
489530
+ attributes: isSelected ? TextAttributes16.BOLD : undefined,
489577
489531
  children: label
489578
489532
  }, undefined, false, undefined, this)
489579
489533
  ]
@@ -489656,7 +489610,7 @@ function QuestionPrompt({ question, isActive, onAnswer }) {
489656
489610
  /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("box", {
489657
489611
  children: /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("text", {
489658
489612
  fg: t.brand,
489659
- attributes: TextAttributes15.BOLD,
489613
+ attributes: TextAttributes16.BOLD,
489660
489614
  children: [
489661
489615
  icon("question"),
489662
489616
  " Question"
@@ -489808,7 +489762,7 @@ var init_AnimatedBorder = __esm(() => {
489808
489762
  });
489809
489763
 
489810
489764
  // src/components/layout/NewFlameLogo.tsx
489811
- import { fg as fgStyle2, StyledText as StyledText2, TextAttributes as TextAttributes16 } from "@opentui/core";
489765
+ import { fg as fgStyle2, StyledText as StyledText2, TextAttributes as TextAttributes17 } from "@opentui/core";
489812
489766
  function heatToCell(h3) {
489813
489767
  if (h3 >= 0.9)
489814
489768
  return { ch: "#", color: "#fffae8" };
@@ -490414,12 +490368,12 @@ var init_NewFlameLogo = __esm(() => {
490414
490368
  "\u255A\u2550\u2550\u2550\u2550\u2550\u2550\u255D \u255A\u2550\u2550\u2550\u2550\u2550\u255D \u255A\u2550\u2550\u2550\u2550\u2550\u255D \u255A\u2550\u2550\u2550\u2550\u2550\u2550\u255D \u255A\u2550\u255D \u255A\u2550\u2550\u2550\u2550\u2550\u255D \u255A\u2550\u255D \u255A\u2550\u255D \u255A\u2550\u2550\u2550\u2550\u2550\u255D \u255A\u2550\u2550\u2550\u2550\u2550\u2550\u255D"
490415
490369
  ];
490416
490370
  WM_W = WORDMARK2[0]?.length ?? 0;
490417
- BOLD12 = TextAttributes16.BOLD;
490371
+ BOLD12 = TextAttributes17.BOLD;
490418
490372
  WORDMARK_ROWS = WORDMARK2.length;
490419
490373
  });
490420
490374
 
490421
490375
  // src/components/layout/LandingPage.tsx
490422
- import { fg as fgStyle3, StyledText as StyledText3, TextAttributes as TextAttributes17 } from "@opentui/core";
490376
+ import { fg as fgStyle3, StyledText as StyledText3, TextAttributes as TextAttributes18 } from "@opentui/core";
490423
490377
  function spawnParticle(cols, rows) {
490424
490378
  return {
490425
490379
  x: Math.floor(Math.random() * cols),
@@ -490811,8 +490765,8 @@ var init_LandingPage = __esm(async () => {
490811
490765
  init_jsx_dev_runtime();
490812
490766
  await init_react2();
490813
490767
  import_react78 = __toESM(require_react(), 1);
490814
- BOLD13 = TextAttributes17.BOLD;
490815
- ITALIC4 = TextAttributes17.ITALIC;
490768
+ BOLD13 = TextAttributes18.BOLD;
490769
+ ITALIC4 = TextAttributes18.ITALIC;
490816
490770
  QUIPS = [
490817
490771
  "The forge awaits your command.",
490818
490772
  "The anvil is warm. What shall we build?",
@@ -491035,7 +490989,7 @@ var init_LoadingStatus = __esm(() => {
491035
490989
  });
491036
490990
 
491037
490991
  // src/components/layout/SystemBanner.tsx
491038
- import { TextAttributes as TextAttributes18 } from "@opentui/core";
490992
+ import { TextAttributes as TextAttributes19 } from "@opentui/core";
491039
490993
  function hexToRgb3(hex3) {
491040
490994
  const h3 = hex3.replace("#", "");
491041
490995
  const n = h3.length === 3 ? h3.split("").map((c) => c + c).join("") : h3;
@@ -491198,7 +491152,7 @@ function SystemBanner({ messages, expanded = false }) {
491198
491152
  }, undefined, true, undefined, this),
491199
491153
  /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("span", {
491200
491154
  fg: fAccent,
491201
- attributes: TextAttributes18.BOLD,
491155
+ attributes: TextAttributes19.BOLD,
491202
491156
  children: err2 ? "Error" : "System"
491203
491157
  }, undefined, false, undefined, this),
491204
491158
  /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("span", {
@@ -491469,7 +491423,7 @@ var init_TerminalList = __esm(() => {
491469
491423
  // src/components/layout/TabInstance.tsx
491470
491424
  import { unlink as unlink3 } from "fs/promises";
491471
491425
  import { join as join63 } from "path";
491472
- import { TextAttributes as TextAttributes19 } from "@opentui/core";
491426
+ import { TextAttributes as TextAttributes20 } from "@opentui/core";
491473
491427
  function getScrollbarVisible(tk) {
491474
491428
  return {
491475
491429
  visible: true,
@@ -492150,7 +492104,7 @@ var init_TabInstance = __esm(async () => {
492150
492104
  flexShrink: 0,
492151
492105
  children: /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("text", {
492152
492106
  fg: t.error,
492153
- attributes: TextAttributes19.BOLD,
492107
+ attributes: TextAttributes20.BOLD,
492154
492108
  children: [
492155
492109
  icon("stop"),
492156
492110
  " ^X to stop"
@@ -494559,7 +494513,7 @@ var init_CommandPalette = __esm(async () => {
494559
494513
  });
494560
494514
 
494561
494515
  // src/components/modals/CommandPicker.tsx
494562
- import { TextAttributes as TextAttributes20 } from "@opentui/core";
494516
+ import { TextAttributes as TextAttributes21 } from "@opentui/core";
494563
494517
  function useListScroll(maxVisible) {
494564
494518
  const [cursor, setCursor] = import_react102.useState(0);
494565
494519
  const [scrollOffset, setScrollOffset] = import_react102.useState(0);
@@ -494654,7 +494608,7 @@ function OptionRow2({
494654
494608
  /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("text", {
494655
494609
  bg,
494656
494610
  fg: labelFg,
494657
- attributes: isActive && !isDisabled ? TextAttributes20.BOLD : undefined,
494611
+ attributes: isActive && !isDisabled ? TextAttributes21.BOLD : undefined,
494658
494612
  children: option2.label
494659
494613
  }, undefined, false, undefined, this),
494660
494614
  isCurrent && !isDisabled && /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("text", {
@@ -495711,11 +495665,11 @@ var init_data = __esm(() => {
495711
495665
  });
495712
495666
 
495713
495667
  // src/components/modals/wizard/theme.ts
495714
- import { TextAttributes as TextAttributes21 } from "@opentui/core";
495668
+ import { TextAttributes as TextAttributes22 } from "@opentui/core";
495715
495669
  var BOLD15, ITALIC5;
495716
495670
  var init_theme2 = __esm(() => {
495717
- BOLD15 = TextAttributes21.BOLD;
495718
- ITALIC5 = TextAttributes21.ITALIC;
495671
+ BOLD15 = TextAttributes22.BOLD;
495672
+ ITALIC5 = TextAttributes22.ITALIC;
495719
495673
  });
495720
495674
 
495721
495675
  // src/components/modals/wizard/primitives.tsx
@@ -496115,7 +496069,7 @@ var init_RemoteStep = __esm(() => {
496115
496069
  });
496116
496070
 
496117
496071
  // src/components/modals/wizard/steps/SetupStep.tsx
496118
- import { decodePasteBytes as decodePasteBytes5, TextAttributes as TextAttributes22 } from "@opentui/core";
496072
+ import { decodePasteBytes as decodePasteBytes5, TextAttributes as TextAttributes23 } from "@opentui/core";
496119
496073
  function hasKey(id) {
496120
496074
  return getSecretSources(id, getDefaultKeyPriority()).active !== "none";
496121
496075
  }
@@ -496602,7 +496556,7 @@ function SetupStep({
496602
496556
  href: selectedProvider.url,
496603
496557
  children: /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("span", {
496604
496558
  fg: t.info,
496605
- attributes: TextAttributes22.UNDERLINE,
496559
+ attributes: TextAttributes23.UNDERLINE,
496606
496560
  children: selectedProvider.url.replace("https://", "").replace(/\?.*$/, "")
496607
496561
  }, undefined, false, undefined, this)
496608
496562
  }, undefined, false, undefined, this)
@@ -496671,7 +496625,7 @@ function SetupStep({
496671
496625
  href: GATEWAY_REF,
496672
496626
  children: /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("span", {
496673
496627
  fg: t.info,
496674
- attributes: TextAttributes22.UNDERLINE,
496628
+ attributes: TextAttributes23.UNDERLINE,
496675
496629
  children: "llmgateway.io"
496676
496630
  }, undefined, false, undefined, this)
496677
496631
  }, undefined, false, undefined, this),
@@ -496858,7 +496812,7 @@ var init_ShortcutsStep = __esm(() => {
496858
496812
  });
496859
496813
 
496860
496814
  // src/components/modals/wizard/steps/ThemeStep.tsx
496861
- import { TextAttributes as TextAttributes23 } from "@opentui/core";
496815
+ import { TextAttributes as TextAttributes24 } from "@opentui/core";
496862
496816
  function opacityToIndex2(opacity) {
496863
496817
  const idx = OPACITY_LEVELS2.indexOf(opacity);
496864
496818
  return idx >= 0 ? idx : OPACITY_LEVELS2.length - 1;
@@ -497067,7 +497021,7 @@ function ThemeStep({ iw, setActive }) {
497067
497021
  isCurrent && /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("text", {
497068
497022
  bg,
497069
497023
  fg: t.success,
497070
- attributes: TextAttributes23.BOLD,
497024
+ attributes: TextAttributes24.BOLD,
497071
497025
  children: " \u2713"
497072
497026
  }, undefined, false, undefined, this)
497073
497027
  ]
@@ -498784,7 +498738,7 @@ var init_SessionPicker = __esm(async () => {
498784
498738
  });
498785
498739
 
498786
498740
  // src/components/modals/StatusDashboard.tsx
498787
- import { TextAttributes as TextAttributes24 } from "@opentui/core";
498741
+ import { TextAttributes as TextAttributes25 } from "@opentui/core";
498788
498742
  function fmtTokens(n) {
498789
498743
  if (n >= 1e6)
498790
498744
  return `${(n / 1e6).toFixed(1)}M`;
@@ -499990,7 +499944,7 @@ var init_StatusDashboard = __esm(async () => {
499990
499944
  init_jsx_dev_runtime();
499991
499945
  await init_react2();
499992
499946
  import_react132 = __toESM(require_react(), 1);
499993
- BOLD16 = TextAttributes24.BOLD;
499947
+ BOLD16 = TextAttributes25.BOLD;
499994
499948
  TABS = ["Usage", "Prompt", "Cost", "Tabs", "Dispatch", "System"];
499995
499949
  });
499996
499950
 
@@ -500833,7 +500787,7 @@ var init_UiDemo = __esm(async () => {
500833
500787
  });
500834
500788
 
500835
500789
  // src/components/modals/UpdateModal.tsx
500836
- import { TextAttributes as TextAttributes25 } from "@opentui/core";
500790
+ import { TextAttributes as TextAttributes26 } from "@opentui/core";
500837
500791
  function trunc(s2, max) {
500838
500792
  return s2.length > max ? `${s2.slice(0, max - 1)}\u2026` : s2;
500839
500793
  }
@@ -501638,9 +501592,9 @@ var init_UpdateModal = __esm(async () => {
501638
501592
  "The record keeper is away from the anvil",
501639
501593
  "The changelog embers have gone cold \u2014 GitHub unreachable"
501640
501594
  ];
501641
- BOLD17 = TextAttributes25.BOLD;
501642
- ITALIC6 = TextAttributes25.ITALIC;
501643
- DIM6 = TextAttributes25.DIM;
501595
+ BOLD17 = TextAttributes26.BOLD;
501596
+ ITALIC6 = TextAttributes26.ITALIC;
501597
+ DIM6 = TextAttributes26.DIM;
501644
501598
  TYPE_BADGE = {
501645
501599
  feat: { label: "feat", color: "success" },
501646
501600
  fix: { label: "fix", color: "brandSecondary" },
@@ -501898,7 +501852,7 @@ import { spawn as spawn21 } from "child_process";
501898
501852
  import { appendFileSync as appendFileSync5, existsSync as existsSync58, readFileSync as readFileSync33, statSync as statSync12, watch as watch3 } from "fs";
501899
501853
  import { tmpdir as tmpdir6 } from "os";
501900
501854
  import { delimiter as delimiter2, dirname as dirname25, join as join64, resolve as resolve45 } from "path";
501901
- import { decodePasteBytes as decodePasteBytes6, TextAttributes as TextAttributes26 } from "@opentui/core";
501855
+ import { decodePasteBytes as decodePasteBytes6, TextAttributes as TextAttributes27 } from "@opentui/core";
501902
501856
  function surfaceIdFrom(kind, id) {
501903
501857
  return `${kind}:${id}`;
501904
501858
  }
@@ -502053,7 +502007,7 @@ function Divider3({ w: w6, label, t }) {
502053
502007
  /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("text", {
502054
502008
  bg: t.bgPopup,
502055
502009
  fg: t.brandAlt,
502056
- attributes: TextAttributes26.BOLD,
502010
+ attributes: TextAttributes27.BOLD,
502057
502011
  children: [
502058
502012
  " ",
502059
502013
  label,
@@ -502126,7 +502080,7 @@ function FooterHints({
502126
502080
  /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("span", {
502127
502081
  bg: t.bgPopup,
502128
502082
  fg: t.brandAlt,
502129
- attributes: TextAttributes26.BOLD,
502083
+ attributes: TextAttributes27.BOLD,
502130
502084
  children: h3.key
502131
502085
  }, undefined, false, undefined, this),
502132
502086
  /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("span", {
@@ -503165,7 +503119,7 @@ function HearthSettings({ visible, onClose }) {
503165
503119
  /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("text", {
503166
503120
  bg: t.bgPopup,
503167
503121
  fg: t.brand,
503168
- attributes: TextAttributes26.BOLD,
503122
+ attributes: TextAttributes27.BOLD,
503169
503123
  children: " \u2302 Hearth [experimental]"
503170
503124
  }, undefined, false, undefined, this),
503171
503125
  /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV(VSpacer3, {}, undefined, false, undefined, this),
@@ -503175,7 +503129,7 @@ function HearthSettings({ visible, onClose }) {
503175
503129
  return /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("text", {
503176
503130
  bg,
503177
503131
  fg: active ? t.brand : t.textPrimary,
503178
- attributes: active ? TextAttributes26.BOLD : undefined,
503132
+ attributes: active ? TextAttributes27.BOLD : undefined,
503179
503133
  children: [
503180
503134
  active ? " \u25B8 " : " ",
503181
503135
  icon(TAB_ICON[tk]),
@@ -503394,7 +503348,7 @@ function renderSurfaces(w6, rows, t, entries2, cursor, status) {
503394
503348
  /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("text", {
503395
503349
  bg: t.bgPopup,
503396
503350
  fg: t.brandAlt,
503397
- attributes: TextAttributes26.BOLD,
503351
+ attributes: TextAttributes27.BOLD,
503398
503352
  children: "Surfaces"
503399
503353
  }, undefined, false, undefined, this),
503400
503354
  /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("text", {
@@ -503429,7 +503383,7 @@ function renderSurfaces(w6, rows, t, entries2, cursor, status) {
503429
503383
  /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("text", {
503430
503384
  bg,
503431
503385
  fg: t.textPrimary,
503432
- attributes: isSel ? TextAttributes26.BOLD : undefined,
503386
+ attributes: isSel ? TextAttributes27.BOLD : undefined,
503433
503387
  children: [
503434
503388
  " ",
503435
503389
  truncateMid(sid, listW - 10)
@@ -503515,7 +503469,7 @@ function renderSurfaceDetail(w6, t, entry, status) {
503515
503469
  /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("text", {
503516
503470
  bg: t.bgPopup,
503517
503471
  fg: t.brandAlt,
503518
- attributes: TextAttributes26.BOLD,
503472
+ attributes: TextAttributes27.BOLD,
503519
503473
  children: sid
503520
503474
  }, undefined, false, undefined, this),
503521
503475
  /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("text", {
@@ -503757,7 +503711,7 @@ function renderDaemon(w6, rows, t, config2, status, logs, startupError, service)
503757
503711
  /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("text", {
503758
503712
  bg: t.bgPopup,
503759
503713
  fg: t.brandAlt,
503760
- attributes: TextAttributes26.BOLD,
503714
+ attributes: TextAttributes27.BOLD,
503761
503715
  children: "Daemon"
503762
503716
  }, undefined, false, undefined, this),
503763
503717
  /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("text", {
@@ -503784,7 +503738,7 @@ function renderDaemon(w6, rows, t, config2, status, logs, startupError, service)
503784
503738
  /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("text", {
503785
503739
  bg: t.bgPopup,
503786
503740
  fg: status.running ? t.success : t.warning,
503787
- attributes: TextAttributes26.BOLD,
503741
+ attributes: TextAttributes27.BOLD,
503788
503742
  children: status.running ? "\u25CF RUNNING" : "\u25CB STOPPED"
503789
503743
  }, undefined, false, undefined, this),
503790
503744
  /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("text", {
@@ -503878,7 +503832,7 @@ function renderDaemon(w6, rows, t, config2, status, logs, startupError, service)
503878
503832
  /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("text", {
503879
503833
  bg: t.bgPopup,
503880
503834
  fg: t.error,
503881
- attributes: TextAttributes26.BOLD,
503835
+ attributes: TextAttributes27.BOLD,
503882
503836
  children: " boot failure"
503883
503837
  }, undefined, false, undefined, this),
503884
503838
  /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("text", {
@@ -503979,7 +503933,7 @@ function renderDaemon(w6, rows, t, config2, status, logs, startupError, service)
503979
503933
  /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("span", {
503980
503934
  bg: t.bgPopup,
503981
503935
  fg: service?.installed ? t.success : t.textDim,
503982
- attributes: TextAttributes26.BOLD,
503936
+ attributes: TextAttributes27.BOLD,
503983
503937
  children: service?.installed ? service.active ? "active on boot" : "installed (inactive)" : service?.platform === "unsupported" ? "not supported on this OS" : "not installed"
503984
503938
  }, undefined, false, undefined, this),
503985
503939
  service?.installed && service.unitLabel ? /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV(import_jsx_dev_runtime2.Fragment, {
@@ -504009,7 +503963,7 @@ function renderDaemon(w6, rows, t, config2, status, logs, startupError, service)
504009
503963
  /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("span", {
504010
503964
  bg: t.bgPopup,
504011
503965
  fg: t.brandAlt,
504012
- attributes: TextAttributes26.BOLD,
503966
+ attributes: TextAttributes27.BOLD,
504013
503967
  children: "[s]"
504014
503968
  }, undefined, false, undefined, this),
504015
503969
  " ",
@@ -504024,7 +503978,7 @@ function renderDaemon(w6, rows, t, config2, status, logs, startupError, service)
504024
503978
  /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("span", {
504025
503979
  bg: t.bgPopup,
504026
503980
  fg: t.brandAlt,
504027
- attributes: TextAttributes26.BOLD,
503981
+ attributes: TextAttributes27.BOLD,
504028
503982
  children: "[b]"
504029
503983
  }, undefined, false, undefined, this),
504030
503984
  " ",
@@ -504039,7 +503993,7 @@ function renderDaemon(w6, rows, t, config2, status, logs, startupError, service)
504039
503993
  /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("span", {
504040
503994
  bg: t.bgPopup,
504041
503995
  fg: t.brandAlt,
504042
- attributes: TextAttributes26.BOLD,
503996
+ attributes: TextAttributes27.BOLD,
504043
503997
  children: "[r]"
504044
503998
  }, undefined, false, undefined, this),
504045
503999
  " ",
@@ -504080,7 +504034,7 @@ function renderPairings(w6, _rows, t, pairings, cursor) {
504080
504034
  /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("text", {
504081
504035
  bg: t.bgPopup,
504082
504036
  fg: t.brandAlt,
504083
- attributes: TextAttributes26.BOLD,
504037
+ attributes: TextAttributes27.BOLD,
504084
504038
  children: "Pairings"
504085
504039
  }, undefined, false, undefined, this),
504086
504040
  /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV(VSpacer3, {}, undefined, false, undefined, this),
@@ -504119,7 +504073,7 @@ function renderPairings(w6, _rows, t, pairings, cursor) {
504119
504073
  /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("text", {
504120
504074
  bg: t.bgPopup,
504121
504075
  fg: t.brandAlt,
504122
- attributes: TextAttributes26.BOLD,
504076
+ attributes: TextAttributes27.BOLD,
504123
504077
  children: "Paired chats"
504124
504078
  }, undefined, false, undefined, this),
504125
504079
  /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("text", {
@@ -504141,7 +504095,7 @@ function renderPairings(w6, _rows, t, pairings, cursor) {
504141
504095
  /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("text", {
504142
504096
  bg: t.bgPopup,
504143
504097
  fg: t.info,
504144
- attributes: TextAttributes26.BOLD,
504098
+ attributes: TextAttributes27.BOLD,
504145
504099
  children: [
504146
504100
  " \u25BE ",
504147
504101
  sid
@@ -504189,7 +504143,7 @@ function renderPairings(w6, _rows, t, pairings, cursor) {
504189
504143
  /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("text", {
504190
504144
  bg: t.bgPopup,
504191
504145
  fg: t.brandAlt,
504192
- attributes: TextAttributes26.BOLD,
504146
+ attributes: TextAttributes27.BOLD,
504193
504147
  children: selected.sid
504194
504148
  }, undefined, false, undefined, this),
504195
504149
  /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("text", {
@@ -504269,7 +504223,7 @@ function renderLogs(w6, rows, t, lines, scroll, autoscroll, filter7, filterFocus
504269
504223
  /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("text", {
504270
504224
  bg: t.bgPopup,
504271
504225
  fg: t.brandAlt,
504272
- attributes: TextAttributes26.BOLD,
504226
+ attributes: TextAttributes27.BOLD,
504273
504227
  children: "Logs"
504274
504228
  }, undefined, false, undefined, this),
504275
504229
  /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("text", {
@@ -504351,7 +504305,7 @@ function renderAddSurface(_w, _rows, mode, t) {
504351
504305
  /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("text", {
504352
504306
  bg: t.bgPopup,
504353
504307
  fg: t.brandAlt,
504354
- attributes: TextAttributes26.BOLD,
504308
+ attributes: TextAttributes27.BOLD,
504355
504309
  children: "Add surface"
504356
504310
  }, undefined, false, undefined, this),
504357
504311
  /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("text", {
@@ -504415,7 +504369,7 @@ function renderAddChat(_w, _rows, mode, t) {
504415
504369
  /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("text", {
504416
504370
  bg: t.bgPopup,
504417
504371
  fg: t.brandAlt,
504418
- attributes: TextAttributes26.BOLD,
504372
+ attributes: TextAttributes27.BOLD,
504419
504373
  children: "Bind chat"
504420
504374
  }, undefined, false, undefined, this),
504421
504375
  /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("text", {
@@ -504472,7 +504426,7 @@ function renderTokenInput(_w, _rows, mode, t) {
504472
504426
  /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("text", {
504473
504427
  bg: t.bgPopup,
504474
504428
  fg: t.brandAlt,
504475
- attributes: TextAttributes26.BOLD,
504429
+ attributes: TextAttributes27.BOLD,
504476
504430
  children: "Bot token"
504477
504431
  }, undefined, false, undefined, this),
504478
504432
  /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("text", {
@@ -504531,7 +504485,7 @@ function renderPairCode(_w, _rows, mode, t) {
504531
504485
  /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("text", {
504532
504486
  bg: t.bgPopup,
504533
504487
  fg: t.brandAlt,
504534
- attributes: TextAttributes26.BOLD,
504488
+ attributes: TextAttributes27.BOLD,
504535
504489
  children: "Pairing code"
504536
504490
  }, undefined, false, undefined, this),
504537
504491
  /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("text", {
@@ -504548,7 +504502,7 @@ function renderPairCode(_w, _rows, mode, t) {
504548
504502
  /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("text", {
504549
504503
  bg: t.bgPopup,
504550
504504
  fg: t.brand,
504551
- attributes: TextAttributes26.BOLD,
504505
+ attributes: TextAttributes27.BOLD,
504552
504506
  children: [
504553
504507
  " ",
504554
504508
  mode.code
@@ -504641,7 +504595,7 @@ function renderPickProvider(_w, _rows, mode, t) {
504641
504595
  /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("text", {
504642
504596
  bg: t.bgPopup,
504643
504597
  fg: t.brandAlt,
504644
- attributes: TextAttributes26.BOLD,
504598
+ attributes: TextAttributes27.BOLD,
504645
504599
  children: "Add surface"
504646
504600
  }, undefined, false, undefined, this),
504647
504601
  /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("text", {
@@ -504666,7 +504620,7 @@ function renderPickProvider(_w, _rows, mode, t) {
504666
504620
  /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("text", {
504667
504621
  bg,
504668
504622
  fg,
504669
- attributes: active ? TextAttributes26.BOLD : undefined,
504623
+ attributes: active ? TextAttributes27.BOLD : undefined,
504670
504624
  children: [
504671
504625
  active ? "\u25B8 " : " ",
504672
504626
  p3.label,
@@ -504707,7 +504661,7 @@ function renderQuickTelegram(_w, _rows, mode, t) {
504707
504661
  /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("text", {
504708
504662
  bg: t.bgPopup,
504709
504663
  fg: t.brandAlt,
504710
- attributes: TextAttributes26.BOLD,
504664
+ attributes: TextAttributes27.BOLD,
504711
504665
  children: "Telegram setup"
504712
504666
  }, undefined, false, undefined, this),
504713
504667
  /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("text", {
@@ -504795,7 +504749,7 @@ function renderQuickDiscord(_w, _rows, mode, t) {
504795
504749
  /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("text", {
504796
504750
  bg: t.bgPopup,
504797
504751
  fg: t.brandAlt,
504798
- attributes: TextAttributes26.BOLD,
504752
+ attributes: TextAttributes27.BOLD,
504799
504753
  children: "Discord setup"
504800
504754
  }, undefined, false, undefined, this),
504801
504755
  /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("text", {
@@ -504844,7 +504798,7 @@ function renderQuickDiscord(_w, _rows, mode, t) {
504844
504798
  sameChannelUser ? /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("text", {
504845
504799
  bg: t.bgPopup,
504846
504800
  fg: t.error,
504847
- attributes: TextAttributes26.BOLD,
504801
+ attributes: TextAttributes27.BOLD,
504848
504802
  children: " \u2715 channel id = user id. Right-click YOUR name, not the channel."
504849
504803
  }, undefined, false, undefined, this) : null,
504850
504804
  /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV(FieldRow, {
@@ -504889,7 +504843,7 @@ function renderAddAllowed(_w, _rows, mode, t) {
504889
504843
  /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("text", {
504890
504844
  bg: t.bgPopup,
504891
504845
  fg: t.brandAlt,
504892
- attributes: TextAttributes26.BOLD,
504846
+ attributes: TextAttributes27.BOLD,
504893
504847
  children: "Allow user"
504894
504848
  }, undefined, false, undefined, this),
504895
504849
  /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("text", {
@@ -505701,7 +505655,7 @@ var init_installer = __esm(() => {
505701
505655
  // src/components/settings/LspInstallSearch.tsx
505702
505656
  import { existsSync as existsSync60 } from "fs";
505703
505657
  import { join as join66 } from "path";
505704
- import { TextAttributes as TextAttributes27 } from "@opentui/core";
505658
+ import { TextAttributes as TextAttributes28 } from "@opentui/core";
505705
505659
  function methodLabel(status) {
505706
505660
  if (status.requiresToolchain && !status.toolchainAvailable) {
505707
505661
  return `[requires ${status.requiresToolchain}]`;
@@ -505800,7 +505754,7 @@ function PackageRow({
505800
505754
  /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("text", {
505801
505755
  bg,
505802
505756
  fg: nameFg,
505803
- attributes: isActive ? TextAttributes27.BOLD : undefined,
505757
+ attributes: isActive ? TextAttributes28.BOLD : undefined,
505804
505758
  children: status.pkg.name
505805
505759
  }, undefined, false, undefined, this),
505806
505760
  lang254 ? /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("text", {
@@ -506258,7 +506212,7 @@ function LspInstallSearch({
506258
506212
  backgroundColor: t.bgPopup,
506259
506213
  children: /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("text", {
506260
506214
  fg: t.textPrimary,
506261
- attributes: TextAttributes27.BOLD,
506215
+ attributes: TextAttributes28.BOLD,
506262
506216
  bg: t.bgPopup,
506263
506217
  children: [
506264
506218
  disabledServers.includes(pendingToggle.pkg.name) ? "Enable" : "Disable",
@@ -506301,7 +506255,7 @@ var init_LspInstallSearch = __esm(async () => {
506301
506255
  });
506302
506256
 
506303
506257
  // src/components/settings/MCPSettings.tsx
506304
- import { TextAttributes as TextAttributes28 } from "@opentui/core";
506258
+ import { TextAttributes as TextAttributes29 } from "@opentui/core";
506305
506259
  function useListScroll2(maxVisible, totalItems) {
506306
506260
  const [cursor, setCursor] = import_react146.useState(0);
506307
506261
  const [scrollOffset, setScrollOffset] = import_react146.useState(0);
@@ -506850,7 +506804,7 @@ function MCPSettings({
506850
506804
  /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("text", {
506851
506805
  bg: t.bgPopup,
506852
506806
  fg: t.brandAlt,
506853
- attributes: TextAttributes28.BOLD,
506807
+ attributes: TextAttributes29.BOLD,
506854
506808
  children: " P"
506855
506809
  }, undefined, false, undefined, this),
506856
506810
  /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("text", {
@@ -506861,7 +506815,7 @@ function MCPSettings({
506861
506815
  /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("text", {
506862
506816
  bg: t.bgPopup,
506863
506817
  fg: t.textMuted,
506864
- attributes: TextAttributes28.BOLD,
506818
+ attributes: TextAttributes29.BOLD,
506865
506819
  children: "G"
506866
506820
  }, undefined, false, undefined, this),
506867
506821
  /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("text", {
@@ -506916,7 +506870,7 @@ function ServerDetail({
506916
506870
  }, undefined, false, undefined, this),
506917
506871
  /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("text", {
506918
506872
  fg: t.textPrimary,
506919
- attributes: TextAttributes28.BOLD,
506873
+ attributes: TextAttributes29.BOLD,
506920
506874
  bg: t.bgPopup,
506921
506875
  children: config2.name
506922
506876
  }, undefined, false, undefined, this),
@@ -507001,7 +506955,7 @@ function ServerDetail({
507001
506955
  /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("text", {
507002
506956
  bg: t.bgPopup,
507003
506957
  fg: t.error,
507004
- attributes: TextAttributes28.BOLD,
506958
+ attributes: TextAttributes29.BOLD,
507005
506959
  children: [
507006
506960
  " ",
507007
506961
  icon("error"),
@@ -507207,7 +507161,7 @@ function FormBody({
507207
507161
  /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("text", {
507208
507162
  bg,
507209
507163
  fg: active ? t.brand : t.textMuted,
507210
- attributes: active ? TextAttributes28.BOLD : undefined,
507164
+ attributes: active ? TextAttributes29.BOLD : undefined,
507211
507165
  children: LABEL[field].padEnd(12)
507212
507166
  }, undefined, false, undefined, this),
507213
507167
  !active && /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("text", {
@@ -507345,7 +507299,7 @@ var init_MCPSettings = __esm(async () => {
507345
507299
  }, undefined, false, undefined, this),
507346
507300
  /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("span", {
507347
507301
  fg: t.success,
507348
- attributes: TextAttributes28.BOLD,
507302
+ attributes: TextAttributes29.BOLD,
507349
507303
  children: "ctrl+a"
507350
507304
  }, undefined, false, undefined, this),
507351
507305
  /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("span", {
@@ -507387,7 +507341,7 @@ var init_MCPSettings = __esm(async () => {
507387
507341
  /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("text", {
507388
507342
  bg,
507389
507343
  fg: scopeCol,
507390
- attributes: TextAttributes28.BOLD,
507344
+ attributes: TextAttributes29.BOLD,
507391
507345
  children: scopeBadge
507392
507346
  }, undefined, false, undefined, this),
507393
507347
  /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("text", {
@@ -507410,7 +507364,7 @@ var init_MCPSettings = __esm(async () => {
507410
507364
  /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("text", {
507411
507365
  bg,
507412
507366
  fg: isSelected ? "white" : t.textPrimary,
507413
- attributes: TextAttributes28.BOLD,
507367
+ attributes: TextAttributes29.BOLD,
507414
507368
  children: config2.name
507415
507369
  }, undefined, false, undefined, this),
507416
507370
  /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("text", {
@@ -507477,7 +507431,7 @@ var init_MCPSettings = __esm(async () => {
507477
507431
  /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("text", {
507478
507432
  bg: deleteChoice === "no" ? t.bgPopupHighlight : bg,
507479
507433
  fg: deleteChoice === "no" ? "white" : t.textDim,
507480
- attributes: deleteChoice === "no" ? TextAttributes28.BOLD : undefined,
507434
+ attributes: deleteChoice === "no" ? TextAttributes29.BOLD : undefined,
507481
507435
  children: deleteChoice === "no" ? " \u25B8 No " : " No "
507482
507436
  }, undefined, false, undefined, this),
507483
507437
  /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("text", {
@@ -507488,7 +507442,7 @@ var init_MCPSettings = __esm(async () => {
507488
507442
  /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("text", {
507489
507443
  bg: deleteChoice === "yes" ? t.bgPopupHighlight : bg,
507490
507444
  fg: deleteChoice === "yes" ? t.error : t.textDim,
507491
- attributes: deleteChoice === "yes" ? TextAttributes28.BOLD : undefined,
507445
+ attributes: deleteChoice === "yes" ? TextAttributes29.BOLD : undefined,
507492
507446
  children: deleteChoice === "yes" ? " \u25B8 Yes " : " Yes "
507493
507447
  }, undefined, false, undefined, this)
507494
507448
  ]
@@ -507593,7 +507547,7 @@ var init_MCPSettings = __esm(async () => {
507593
507547
  /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("text", {
507594
507548
  bg,
507595
507549
  fg: sel ? "white" : t.info,
507596
- attributes: TextAttributes28.BOLD,
507550
+ attributes: TextAttributes29.BOLD,
507597
507551
  children: tool4.name
507598
507552
  }, undefined, false, undefined, this)
507599
507553
  ]
@@ -508821,6 +508775,7 @@ function RepoMapStatusPopup({
508821
508775
  const stateRef = import_react152.useRef(useRepoMapStore.getState());
508822
508776
  const [, setRenderTick] = import_react152.useState(0);
508823
508777
  const spinnerRef = import_react152.useRef(0);
508778
+ const bodyScrollRef = import_react152.useRef(null);
508824
508779
  const initialMode = currentMode ?? "off";
508825
508780
  const initialLimit = currentLimit ?? 300;
508826
508781
  const [selectedMode, setSelectedMode] = import_react152.useState(initialMode);
@@ -508863,6 +508818,15 @@ function RepoMapStatusPopup({
508863
508818
  }, 150);
508864
508819
  return () => clearInterval(timer);
508865
508820
  }, [visible]);
508821
+ import_react152.useEffect(() => {
508822
+ if (!visible)
508823
+ return;
508824
+ const sb = bodyScrollRef.current;
508825
+ if (!sb)
508826
+ return;
508827
+ const id = focusRow === 2 /* Budget */ ? "repomap-budget" : "repomap-semantic";
508828
+ queueMicrotask(() => sb.scrollChildIntoView(id));
508829
+ }, [visible, focusRow]);
508866
508830
  const hasConfig = onApply !== undefined;
508867
508831
  const isModified = selectedMode !== (currentMode ?? "off") || selectedLimit !== (currentLimit ?? 300) || selectedAutoRegen !== (currentAutoRegen ?? false) || selectedTokenBudget !== currentTokenBudget || selectedScope !== (currentScope ?? "project");
508868
508832
  useKeyboard((evt) => {
@@ -509049,6 +509013,7 @@ function RepoMapStatusPopup({
509049
509013
  ];
509050
509014
  const showLimitRow = selectedMode === "llm" || selectedMode === "full";
509051
509015
  const popupH = Math.min(Math.max(18, Math.floor(termRows * 0.85)), termRows - 2);
509016
+ const bodyH = Math.max(4, popupH - 7);
509052
509017
  const headerBlurb = hasConfig ? `Soul Map \xB7 ${selectedScope}${isModified ? " (modified)" : ""}` : `Soul Map \xB7 ${status}`;
509053
509018
  const footerHints = hasConfig ? [
509054
509019
  { key: "\u2191\u2193", label: "focus" },
@@ -509072,8 +509037,10 @@ function RepoMapStatusPopup({
509072
509037
  titleIcon: "repomap",
509073
509038
  blurb: headerBlurb,
509074
509039
  footerHints,
509075
- children: /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("box", {
509076
- flexDirection: "column",
509040
+ children: /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("scrollbox", {
509041
+ ref: bodyScrollRef,
509042
+ height: bodyH,
509043
+ scrollAcceleration: listScrollAccel,
509077
509044
  paddingX: 1,
509078
509045
  children: [
509079
509046
  /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV(VSpacer, {}, undefined, false, undefined, this),
@@ -509133,94 +509100,106 @@ function RepoMapStatusPopup({
509133
509100
  /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV(Divider, {
509134
509101
  width: innerW - 2
509135
509102
  }, undefined, false, undefined, this),
509136
- /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV(Section, {
509137
- title: "Semantic Summaries",
509103
+ /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("box", {
509104
+ id: "repomap-semantic",
509105
+ flexDirection: "column",
509106
+ backgroundColor: t.bgPopup,
509107
+ children: /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV(Section, {
509108
+ title: "Semantic Summaries",
509109
+ children: [
509110
+ /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV(SegmentedControl, {
509111
+ label: "Mode",
509112
+ options: SEMANTIC_MODES.map((m5) => ({ value: m5, label: MODE_LABELS2[m5] })),
509113
+ value: selectedMode,
509114
+ focused: focusRow === 0 /* Mode */
509115
+ }, undefined, false, undefined, this),
509116
+ showLimitRow ? /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV(import_jsx_dev_runtime2.Fragment, {
509117
+ children: [
509118
+ /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV(SegmentedControl, {
509119
+ label: "LLM Limit",
509120
+ options: LLM_LIMIT_PRESETS.map((v4) => ({ value: v4, label: String(v4) })),
509121
+ value: selectedLimit,
509122
+ focused: focusRow === 1 /* Limit */,
509123
+ suffix: "symbols"
509124
+ }, undefined, false, undefined, this),
509125
+ /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV(Toggle, {
509126
+ label: "Auto-regen [A]",
509127
+ description: "costs tokens on each file change",
509128
+ on: selectedAutoRegen
509129
+ }, undefined, false, undefined, this)
509130
+ ]
509131
+ }, undefined, true, undefined, this) : null,
509132
+ /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV(Hint, {
509133
+ children: [
509134
+ selectedMode,
509135
+ " \u2014 ",
509136
+ MODE_DESCRIPTIONS[selectedMode]
509137
+ ]
509138
+ }, undefined, true, undefined, this),
509139
+ /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV(VSpacer, {}, undefined, false, undefined, this),
509140
+ /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("box", {
509141
+ flexDirection: "row",
509142
+ paddingX: 1,
509143
+ backgroundColor: t.bgPopup,
509144
+ children: [
509145
+ onRegenerate ? /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV(KeyCap, {
509146
+ keyName: "G",
509147
+ label: "regenerate",
509148
+ accent: t.info
509149
+ }, undefined, false, undefined, this) : null,
509150
+ onRegenerate && onClearSummaries ? /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("text", {
509151
+ bg: t.bgPopup,
509152
+ children: " "
509153
+ }, undefined, false, undefined, this) : null,
509154
+ onClearSummaries ? confirmClear ? /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV(KeyCap, {
509155
+ keyName: "C",
509156
+ label: "CONFIRM clear (preserves LLM)",
509157
+ accent: t.brandSecondary
509158
+ }, undefined, false, undefined, this) : /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV(KeyCap, {
509159
+ keyName: "C",
509160
+ label: "clear summaries",
509161
+ accent: t.warning
509162
+ }, undefined, false, undefined, this) : null,
509163
+ onLspEnrich ? /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("text", {
509164
+ bg: t.bgPopup,
509165
+ children: " "
509166
+ }, undefined, false, undefined, this) : null,
509167
+ onLspEnrich ? /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV(KeyCap, {
509168
+ keyName: "L",
509169
+ label: "lsp enrich",
509170
+ accent: t.success
509171
+ }, undefined, false, undefined, this) : null
509172
+ ]
509173
+ }, undefined, true, undefined, this)
509174
+ ]
509175
+ }, undefined, true, undefined, this)
509176
+ }, undefined, false, undefined, this),
509177
+ /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("box", {
509178
+ id: "repomap-budget",
509179
+ flexDirection: "column",
509180
+ backgroundColor: t.bgPopup,
509138
509181
  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 */
509182
+ /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV(Divider, {
509183
+ width: innerW - 2
509144
509184
  }, undefined, false, undefined, this),
509145
- showLimitRow ? /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV(import_jsx_dev_runtime2.Fragment, {
509185
+ /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV(Section, {
509186
+ title: "Map Token Budget",
509146
509187
  children: [
509147
509188
  /* @__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"
509189
+ label: "Budget",
509190
+ options: budgetChips.map((c) => ({
509191
+ value: c.value ?? "auto",
509192
+ label: c.label
509193
+ })),
509194
+ value: selectedTokenBudget ?? "auto",
509195
+ focused: focusRow === 2 /* Budget */
509153
509196
  }, 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
509197
+ /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV(Hint, {
509198
+ children: selectedTokenBudget === undefined ? "scales with conversation length (1.5k\u20134k)" : `fixed ${String(selectedTokenBudget / 1000)}k tokens \u2014 more files visible, higher prompt cost`
509158
509199
  }, undefined, false, undefined, this)
509159
509200
  ]
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
509201
  }, undefined, true, undefined, this)
509203
509202
  ]
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
509203
  }, undefined, true, undefined, this)
509225
509204
  ]
509226
509205
  }, undefined, true, undefined, this)
@@ -509234,6 +509213,7 @@ var init_RepoMapStatusPopup = __esm(async () => {
509234
509213
  init_repomap();
509235
509214
  init_shared();
509236
509215
  init_ui2();
509216
+ init_scroll();
509237
509217
  init_jsx_dev_runtime();
509238
509218
  await init_react2();
509239
509219
  import_react152 = __toESM(require_react(), 1);
@@ -509661,7 +509641,7 @@ var init_RouterSettings = __esm(async () => {
509661
509641
  // src/components/settings/SkillSearch.tsx
509662
509642
  import { existsSync as existsSync61 } from "fs";
509663
509643
  import { join as join67 } from "path";
509664
- import { TextAttributes as TextAttributes29 } from "@opentui/core";
509644
+ import { TextAttributes as TextAttributes30 } from "@opentui/core";
509665
509645
  function SearchSkillRow({
509666
509646
  skill,
509667
509647
  isSelected,
@@ -509683,18 +509663,18 @@ function SearchSkillRow({
509683
509663
  isLoaded ? /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("text", {
509684
509664
  bg,
509685
509665
  fg: t.info,
509686
- attributes: TextAttributes29.BOLD,
509666
+ attributes: TextAttributes30.BOLD,
509687
509667
  children: "\u25CF "
509688
509668
  }, undefined, false, undefined, this) : isInstalled ? /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("text", {
509689
509669
  bg,
509690
509670
  fg: t.success,
509691
- attributes: TextAttributes29.BOLD,
509671
+ attributes: TextAttributes30.BOLD,
509692
509672
  children: "\u2713 "
509693
509673
  }, undefined, false, undefined, this) : null,
509694
509674
  /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("text", {
509695
509675
  bg,
509696
509676
  fg: isSelected ? t.brand : t.textSecondary,
509697
- attributes: isSelected ? TextAttributes29.BOLD : undefined,
509677
+ attributes: isSelected ? TextAttributes30.BOLD : undefined,
509698
509678
  children: skill.skillId
509699
509679
  }, undefined, false, undefined, this),
509700
509680
  /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("text", {
@@ -509737,7 +509717,7 @@ function InstalledSkillRow({
509737
509717
  /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("text", {
509738
509718
  bg,
509739
509719
  fg: isSelected ? t.brand : t.textSecondary,
509740
- attributes: isSelected ? TextAttributes29.BOLD : undefined,
509720
+ attributes: isSelected ? TextAttributes30.BOLD : undefined,
509741
509721
  children: skill.name
509742
509722
  }, undefined, false, undefined, this),
509743
509723
  /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("text", {
@@ -509751,7 +509731,7 @@ function InstalledSkillRow({
509751
509731
  isLoaded && /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("text", {
509752
509732
  bg,
509753
509733
  fg: t.info,
509754
- attributes: TextAttributes29.BOLD,
509734
+ attributes: TextAttributes30.BOLD,
509755
509735
  children: [
509756
509736
  " ",
509757
509737
  "\u25CF"
@@ -509779,13 +509759,13 @@ function ActiveSkillRow({
509779
509759
  /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("text", {
509780
509760
  bg,
509781
509761
  fg: t.info,
509782
- attributes: TextAttributes29.BOLD,
509762
+ attributes: TextAttributes30.BOLD,
509783
509763
  children: "\u25CF "
509784
509764
  }, undefined, false, undefined, this),
509785
509765
  /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("text", {
509786
509766
  bg,
509787
509767
  fg: isSelected ? t.brand : t.textPrimary,
509788
- attributes: isSelected ? TextAttributes29.BOLD : undefined,
509768
+ attributes: isSelected ? TextAttributes30.BOLD : undefined,
509789
509769
  children: name39
509790
509770
  }, undefined, false, undefined, this)
509791
509771
  ]
@@ -510120,7 +510100,7 @@ function SkillSearch({ visible, contextManager, onClose, onSystemMessage }) {
510120
510100
  backgroundColor: popupBg,
510121
510101
  children: /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("text", {
510122
510102
  fg: t.textPrimary,
510123
- attributes: TextAttributes29.BOLD,
510103
+ attributes: TextAttributes30.BOLD,
510124
510104
  bg: popupBg,
510125
510105
  children: [
510126
510106
  'Install "',
@@ -511160,7 +511140,7 @@ __export(exports_App, {
511160
511140
  App: () => App
511161
511141
  });
511162
511142
  import { join as join69 } from "path";
511163
- import { TextAttributes as TextAttributes30 } from "@opentui/core";
511143
+ import { TextAttributes as TextAttributes31 } from "@opentui/core";
511164
511144
  function truncate5(str, max) {
511165
511145
  return str.length > max ? `${str.slice(0, max - 1)}\u2026` : str;
511166
511146
  }
@@ -511245,7 +511225,7 @@ function ShutdownSplash({
511245
511225
  alignItems: "center",
511246
511226
  children: [
511247
511227
  wordmark.map((line2, idx) => /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("text", {
511248
- attributes: TextAttributes30.BOLD,
511228
+ attributes: TextAttributes31.BOLD,
511249
511229
  children: renderRow(line2)
511250
511230
  }, idx, false, undefined, this)),
511251
511231
  /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("box", {
@@ -512379,7 +512359,7 @@ function App({
512379
512359
  children: [
512380
512360
  /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("text", {
512381
512361
  fg: t.brand,
512382
- attributes: TextAttributes30.BOLD,
512362
+ attributes: TextAttributes31.BOLD,
512383
512363
  children: [
512384
512364
  icon("ghost"),
512385
512365
  " SoulForge"
@@ -512485,7 +512465,7 @@ function App({
512485
512465
  }, undefined, false, undefined, this),
512486
512466
  /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("text", {
512487
512467
  fg: modeColor,
512488
- attributes: TextAttributes30.BOLD,
512468
+ attributes: TextAttributes31.BOLD,
512489
512469
  children: [
512490
512470
  "[",
512491
512471
  modeLabel,