@proxysoul/soulforge 2.20.4 → 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 +192 -163
  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.4",
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",
@@ -478051,14 +478059,18 @@ Proceeding without it will significantly reduce capabilities \u2014 no soul tool
478051
478059
  stallAbortedAt = Date.now();
478052
478060
  abortController.abort();
478053
478061
  }, 1e4);
478054
- let streamEventCount = 0;
478055
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);
478056
478067
  const streamIterator = result.fullStream[Symbol.asyncIterator]();
478057
478068
  for await (const part of { [Symbol.asyncIterator]: () => streamIterator }) {
478058
478069
  markActivity();
478059
- if (yieldBeforeNext || ++streamEventCount % 5 === 0) {
478070
+ if (yieldBeforeNext || Date.now() - lastYieldTs >= YIELD_BUDGET_MS) {
478060
478071
  yieldBeforeNext = false;
478061
- await new Promise((r4) => setTimeout(r4, 0));
478072
+ lastYieldTs = Date.now();
478073
+ await Promise.resolve();
478062
478074
  }
478063
478075
  switch (part.type) {
478064
478076
  case "start-step": {
@@ -478080,9 +478092,8 @@ Proceeding without it will significantly reduce capabilities \u2014 no soul tool
478080
478092
  case "reasoning-delta": {
478081
478093
  gotFirstContent = true;
478082
478094
  appendReasoningContent(part.text);
478083
- Promise.resolve().then(() => (init_bridge(), exports_bridge)).then(({ reasoningStreamEmitter: reasoningStreamEmitter2 }) => {
478084
- reasoningStreamEmitter2.append(tabId, part.text);
478085
- });
478095
+ if (hearthLive)
478096
+ hearthBridgeMod.reasoningStreamEmitter.append(tabId, part.text);
478086
478097
  break;
478087
478098
  }
478088
478099
  case "reasoning-end":
@@ -478091,9 +478102,11 @@ Proceeding without it will significantly reduce capabilities \u2014 no soul tool
478091
478102
  case "text-delta": {
478092
478103
  gotFirstContent = true;
478093
478104
  appendText(part.text);
478094
- Promise.resolve().then(() => (init_bridge(), exports_bridge)).then(({ bridgeStreamEmitter: bridgeStreamEmitter2 }) => {
478095
- bridgeStreamEmitter2.stream(tabId, { type: "text", content: part.text });
478096
- });
478105
+ if (hearthLive)
478106
+ hearthBridgeMod.bridgeStreamEmitter.stream(tabId, {
478107
+ type: "text",
478108
+ content: part.text
478109
+ });
478097
478110
  queueMicrotaskFlush();
478098
478111
  break;
478099
478112
  }
@@ -486030,6 +486043,7 @@ var init_MessageList = __esm(() => {
486030
486043
  const hasContent = msg.content.trim().length > 0;
486031
486044
  const hasTools = msg.toolCalls && msg.toolCalls.length > 0;
486032
486045
  const isEmpty = !hasSegments && !hasContent && !hasTools;
486046
+ const onlyHiddenReasoning = !isEmpty && !hasContent && !hasTools && !showReasoning && !!msg.segments?.length && msg.segments.every((s2) => s2.type === "reasoning");
486033
486047
  const finalResponseSeed = import_react58.useMemo(() => {
486034
486048
  let h3 = 0;
486035
486049
  for (let i4 = 0;i4 < msg.id.length; i4++)
@@ -486154,6 +486168,10 @@ var init_MessageList = __esm(() => {
486154
486168
  fg: t.textMuted,
486155
486169
  attributes: TextAttributes9.ITALIC,
486156
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)"
486157
486175
  }, undefined, false, undefined, this) : autoLayout ? /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV(import_jsx_dev_runtime2.Fragment, {
486158
486176
  children: [
486159
486177
  autoLayout.opening ? /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("box", {
@@ -486668,6 +486686,7 @@ var init_useTextDrip = __esm(() => {
486668
486686
  });
486669
486687
 
486670
486688
  // src/components/chat/StreamSegmentList.tsx
486689
+ import { TextAttributes as TextAttributes10 } from "@opentui/core";
486671
486690
  function trimToCompleteLines(text3) {
486672
486691
  return text3;
486673
486692
  }
@@ -486687,6 +486706,7 @@ function DripText({ content, streaming }) {
486687
486706
  }
486688
486707
  var import_react61, StreamSegmentList;
486689
486708
  var init_StreamSegmentList = __esm(() => {
486709
+ init_store();
486690
486710
  init_Markdown();
486691
486711
  init_ReasoningBlock();
486692
486712
  init_ToolCallDisplay();
@@ -486702,6 +486722,7 @@ var init_StreamSegmentList = __esm(() => {
486702
486722
  showReasoning = true,
486703
486723
  reasoningExpanded = false
486704
486724
  }) {
486725
+ const t = useTheme();
486705
486726
  const toolCallMap = import_react61.useMemo(() => {
486706
486727
  const m5 = new Map;
486707
486728
  for (const tc of toolCalls)
@@ -486761,71 +486782,79 @@ var init_StreamSegmentList = __esm(() => {
486761
486782
  }
486762
486783
  return -1;
486763
486784
  }, [merged, streaming]);
486785
+ const hasVisibleContent = merged.some((seg) => seg.type === "reasoning" && showReasoning || seg.type === "text" && seg.content.trim().length > 0 || seg.type === "tools");
486764
486786
  let lastVisibleType = null;
486765
486787
  return /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV(import_jsx_dev_runtime2.Fragment, {
486766
- children: merged.map((seg, i4) => {
486767
- if (seg.type === "reasoning" && !showReasoning)
486768
- return null;
486769
- const needsGap = lastVisibleType !== null && lastVisibleType !== seg.type ? 1 : 0;
486770
- if (seg.type === "text") {
486771
- lastVisibleType = seg.type;
486772
- const isActiveSegment = i4 === lastTextIndex;
486773
- const display = trimToCompleteLines(seg.content);
486774
- 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)
486775
486796
  return null;
486776
- 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
+ }
486777
486814
  return /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("box", {
486778
486815
  flexDirection: "column",
486779
486816
  marginTop: needsGap,
486780
- children: /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV(DripText, {
486781
- content: display,
486782
- streaming
486817
+ children: /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV(Markdown, {
486818
+ text: display,
486819
+ streaming: true
486783
486820
  }, undefined, false, undefined, this)
486784
486821
  }, `text-${String(i4)}`, false, undefined, this);
486785
486822
  }
486786
- return /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("box", {
486787
- flexDirection: "column",
486788
- marginTop: needsGap,
486789
- children: /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV(Markdown, {
486790
- text: display,
486791
- streaming: true
486792
- }, undefined, false, undefined, this)
486793
- }, `text-${String(i4)}`, false, undefined, this);
486794
- }
486795
- 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;
486796
486840
  lastVisibleType = seg.type;
486797
- const rkey = `${seg.id}-${reasoningExpanded ? "exp" : "col"}`;
486798
486841
  return /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("box", {
486799
- flexDirection: "column",
486800
486842
  marginTop: needsGap,
486801
- children: /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV(ReasoningBlock, {
486802
- content: seg.content,
486803
- expanded: reasoningExpanded,
486804
- isStreaming: !seg.done,
486805
- id: seg.id
486843
+ children: /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV(ToolCallDisplay, {
486844
+ calls,
486845
+ allCalls: toolCalls,
486846
+ verbose,
486847
+ diffStyle
486806
486848
  }, undefined, false, undefined, this)
486807
- }, rkey, false, undefined, this);
486808
- }
486809
- const calls = seg.callIds.map((id) => toolCallMap.get(id)).filter((tc) => tc != null);
486810
- if (calls.length === 0)
486811
- return null;
486812
- lastVisibleType = seg.type;
486813
- return /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("box", {
486814
- marginTop: needsGap,
486815
- children: /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV(ToolCallDisplay, {
486816
- calls,
486817
- allCalls: toolCalls,
486818
- verbose,
486819
- diffStyle
486820
- }, undefined, false, undefined, this)
486821
- }, seg.callIds[0], false, undefined, this);
486822
- })
486823
- }, undefined, false, undefined, this);
486849
+ }, seg.callIds[0], false, undefined, this);
486850
+ })
486851
+ ]
486852
+ }, undefined, true, undefined, this);
486824
486853
  });
486825
486854
  });
486826
486855
 
486827
486856
  // src/components/chat/FinalResponseView.tsx
486828
- import { TextAttributes as TextAttributes10 } from "@opentui/core";
486857
+ import { TextAttributes as TextAttributes11 } from "@opentui/core";
486829
486858
  function filterQuietTools(name39) {
486830
486859
  return !QUIET_TOOLS2.has(name39);
486831
486860
  }
@@ -487014,7 +487043,7 @@ var init_FinalResponseView = __esm(() => {
487014
487043
  }, undefined, false, undefined, this),
487015
487044
  /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("span", {
487016
487045
  fg: effectiveDone ? t.textSecondary : t.textPrimary,
487017
- attributes: effectiveDone ? undefined : TextAttributes10.BOLD,
487046
+ attributes: effectiveDone ? undefined : TextAttributes11.BOLD,
487018
487047
  children: statusMsg
487019
487048
  }, undefined, false, undefined, this),
487020
487049
  effectiveDone ? null : /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV(Spinner, {
@@ -487373,7 +487402,7 @@ var init_tips = __esm(() => {
487373
487402
  });
487374
487403
 
487375
487404
  // src/components/chat/InputBox.tsx
487376
- import { decodePasteBytes as decodePasteBytes2, TextAttributes as TextAttributes11 } from "@opentui/core";
487405
+ import { decodePasteBytes as decodePasteBytes2, TextAttributes as TextAttributes12 } from "@opentui/core";
487377
487406
  function getCommands() {
487378
487407
  return getCommandDefs().filter((c) => !isDefHidden(c)).map((c) => ({ cmd: c.cmd, icon: icon(c.ic), desc: c.desc }));
487379
487408
  }
@@ -487428,7 +487457,7 @@ var init_InputBox = __esm(async () => {
487428
487457
  return /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("text", {
487429
487458
  children: spans.map((s2, i4) => /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("span", {
487430
487459
  fg: s2.hl ? t.brandSecondary : t.textPrimary,
487431
- attributes: s2.hl ? TextAttributes11.BOLD : undefined,
487460
+ attributes: s2.hl ? TextAttributes12.BOLD : undefined,
487432
487461
  children: s2.text
487433
487462
  }, i4, false, undefined, this))
487434
487463
  }, undefined, false, undefined, this);
@@ -488028,7 +488057,7 @@ var init_InputBox = __esm(async () => {
488028
488057
  }, undefined, false, undefined, this),
488029
488058
  /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("text", {
488030
488059
  fg: isSelected ? t.info : t.borderSlash,
488031
- attributes: isSelected ? TextAttributes11.BOLD : undefined,
488060
+ attributes: isSelected ? TextAttributes12.BOLD : undefined,
488032
488061
  children: match2.cmd
488033
488062
  }, undefined, false, undefined, this),
488034
488063
  /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("text", {
@@ -488078,7 +488107,7 @@ var init_InputBox = __esm(async () => {
488078
488107
  children: [
488079
488108
  /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("text", {
488080
488109
  fg: t.warning,
488081
- attributes: TextAttributes11.BOLD,
488110
+ attributes: TextAttributes12.BOLD,
488082
488111
  children: [
488083
488112
  icon("clock_alt"),
488084
488113
  " history"
@@ -488143,7 +488172,7 @@ var init_InputBox = __esm(async () => {
488143
488172
  children: [
488144
488173
  /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("text", {
488145
488174
  fg: t.warning,
488146
- attributes: TextAttributes11.BOLD,
488175
+ attributes: TextAttributes12.BOLD,
488147
488176
  children: "search: "
488148
488177
  }, undefined, false, undefined, this),
488149
488178
  /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("text", {
@@ -488161,7 +488190,7 @@ var init_InputBox = __esm(async () => {
488161
488190
  children: [
488162
488191
  /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("text", {
488163
488192
  fg: t.brandSecondary,
488164
- attributes: TextAttributes11.BOLD,
488193
+ attributes: TextAttributes12.BOLD,
488165
488194
  flexShrink: 0,
488166
488195
  children: [
488167
488196
  ">",
@@ -488186,7 +488215,7 @@ var init_InputBox = __esm(async () => {
488186
488215
  }, undefined, false, undefined, this),
488187
488216
  showBusy && !showAutocomplete ? /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("text", {
488188
488217
  fg: t.error,
488189
- attributes: TextAttributes11.BOLD,
488218
+ attributes: TextAttributes12.BOLD,
488190
488219
  flexShrink: 0,
488191
488220
  children: " ^X stop"
488192
488221
  }, undefined, false, undefined, this) : ghost ? /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("text", {
@@ -488223,7 +488252,7 @@ var init_InputBox = __esm(async () => {
488223
488252
  });
488224
488253
 
488225
488254
  // src/components/plan/TaskProgress.tsx
488226
- import { TextAttributes as TextAttributes12 } from "@opentui/core";
488255
+ import { TextAttributes as TextAttributes13 } from "@opentui/core";
488227
488256
  function InlineSpinner({ color }) {
488228
488257
  return /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV(Spinner, {
488229
488258
  inline: true,
@@ -488266,7 +488295,7 @@ function TaskList({ tasks, nested }) {
488266
488295
  }, undefined, false, undefined, this),
488267
488296
  /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("span", {
488268
488297
  fg: task.status === "done" ? theme2.textMuted : task.status === "in-progress" ? theme2.textPrimary : STATUS_COLORS[task.status] ?? theme2.textMuted,
488269
- attributes: task.status === "in-progress" ? TextAttributes12.BOLD : undefined,
488298
+ attributes: task.status === "in-progress" ? TextAttributes13.BOLD : undefined,
488270
488299
  children: task.title
488271
488300
  }, undefined, false, undefined, this)
488272
488301
  ]
@@ -488312,7 +488341,7 @@ function TaskList({ tasks, nested }) {
488312
488341
  children: [
488313
488342
  /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("text", {
488314
488343
  fg: theme2.brand,
488315
- attributes: TextAttributes12.BOLD,
488344
+ attributes: TextAttributes13.BOLD,
488316
488345
  children: [
488317
488346
  icon("plan"),
488318
488347
  " Tasks"
@@ -488388,7 +488417,7 @@ var init_TaskProgress = __esm(() => {
488388
488417
  });
488389
488418
 
488390
488419
  // src/components/plan/PlanProgress.tsx
488391
- import { TextAttributes as TextAttributes13 } from "@opentui/core";
488420
+ import { TextAttributes as TextAttributes14 } from "@opentui/core";
488392
488421
  function PlanProgress({ plan, tasks }) {
488393
488422
  const t = useTheme();
488394
488423
  const STATUS_COLORS = {
@@ -488431,7 +488460,7 @@ function PlanProgress({ plan, tasks }) {
488431
488460
  children: [
488432
488461
  /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("text", {
488433
488462
  fg: allDone ? t.success : t.brandAlt,
488434
- attributes: TextAttributes13.BOLD,
488463
+ attributes: TextAttributes14.BOLD,
488435
488464
  children: [
488436
488465
  icon("plan"),
488437
488466
  " ",
@@ -488468,7 +488497,7 @@ function PlanProgress({ plan, tasks }) {
488468
488497
  }, undefined, false, undefined, this),
488469
488498
  /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("text", {
488470
488499
  fg: step.status === "active" ? t.textPrimary : STATUS_COLORS[step.status],
488471
- attributes: step.status === "active" ? TextAttributes13.BOLD : undefined,
488500
+ attributes: step.status === "active" ? TextAttributes14.BOLD : undefined,
488472
488501
  children: step.label
488473
488502
  }, undefined, false, undefined, this)
488474
488503
  ]
@@ -489190,7 +489219,7 @@ var init_ui2 = __esm(() => {
489190
489219
  });
489191
489220
 
489192
489221
  // src/components/plan/PlanReviewPrompt.tsx
489193
- import { TextAttributes as TextAttributes14 } from "@opentui/core";
489222
+ import { TextAttributes as TextAttributes15 } from "@opentui/core";
489194
489223
  function PlanReviewPrompt({
489195
489224
  onAccept,
489196
489225
  onClearAndImplement,
@@ -489285,7 +489314,7 @@ function PlanReviewPrompt({
489285
489314
  children: [
489286
489315
  /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("text", {
489287
489316
  fg: ACCENT,
489288
- attributes: TextAttributes14.BOLD,
489317
+ attributes: TextAttributes15.BOLD,
489289
489318
  children: [
489290
489319
  icon("plan"),
489291
489320
  " ",
@@ -489448,7 +489477,7 @@ function PlanReviewPrompt({
489448
489477
  }, undefined, false, undefined, this),
489449
489478
  /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("span", {
489450
489479
  fg: selected ? t.textPrimary : t.textSecondary,
489451
- attributes: selected ? TextAttributes14.BOLD : undefined,
489480
+ attributes: selected ? TextAttributes15.BOLD : undefined,
489452
489481
  children: [
489453
489482
  opt.icon,
489454
489483
  " ",
@@ -489484,7 +489513,7 @@ var init_PlanReviewPrompt = __esm(async () => {
489484
489513
  });
489485
489514
 
489486
489515
  // src/components/QuestionPrompt.tsx
489487
- import { TextAttributes as TextAttributes15 } from "@opentui/core";
489516
+ import { TextAttributes as TextAttributes16 } from "@opentui/core";
489488
489517
  function OptionRow({
489489
489518
  label,
489490
489519
  isSelected,
@@ -489498,7 +489527,7 @@ function OptionRow({
489498
489527
  }, undefined, false, undefined, this),
489499
489528
  /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("span", {
489500
489529
  fg: isSelected ? t.textPrimary : t.textSecondary,
489501
- attributes: isSelected ? TextAttributes15.BOLD : undefined,
489530
+ attributes: isSelected ? TextAttributes16.BOLD : undefined,
489502
489531
  children: label
489503
489532
  }, undefined, false, undefined, this)
489504
489533
  ]
@@ -489581,7 +489610,7 @@ function QuestionPrompt({ question, isActive, onAnswer }) {
489581
489610
  /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("box", {
489582
489611
  children: /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("text", {
489583
489612
  fg: t.brand,
489584
- attributes: TextAttributes15.BOLD,
489613
+ attributes: TextAttributes16.BOLD,
489585
489614
  children: [
489586
489615
  icon("question"),
489587
489616
  " Question"
@@ -489733,7 +489762,7 @@ var init_AnimatedBorder = __esm(() => {
489733
489762
  });
489734
489763
 
489735
489764
  // src/components/layout/NewFlameLogo.tsx
489736
- 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";
489737
489766
  function heatToCell(h3) {
489738
489767
  if (h3 >= 0.9)
489739
489768
  return { ch: "#", color: "#fffae8" };
@@ -490339,12 +490368,12 @@ var init_NewFlameLogo = __esm(() => {
490339
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"
490340
490369
  ];
490341
490370
  WM_W = WORDMARK2[0]?.length ?? 0;
490342
- BOLD12 = TextAttributes16.BOLD;
490371
+ BOLD12 = TextAttributes17.BOLD;
490343
490372
  WORDMARK_ROWS = WORDMARK2.length;
490344
490373
  });
490345
490374
 
490346
490375
  // src/components/layout/LandingPage.tsx
490347
- 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";
490348
490377
  function spawnParticle(cols, rows) {
490349
490378
  return {
490350
490379
  x: Math.floor(Math.random() * cols),
@@ -490736,8 +490765,8 @@ var init_LandingPage = __esm(async () => {
490736
490765
  init_jsx_dev_runtime();
490737
490766
  await init_react2();
490738
490767
  import_react78 = __toESM(require_react(), 1);
490739
- BOLD13 = TextAttributes17.BOLD;
490740
- ITALIC4 = TextAttributes17.ITALIC;
490768
+ BOLD13 = TextAttributes18.BOLD;
490769
+ ITALIC4 = TextAttributes18.ITALIC;
490741
490770
  QUIPS = [
490742
490771
  "The forge awaits your command.",
490743
490772
  "The anvil is warm. What shall we build?",
@@ -490960,7 +490989,7 @@ var init_LoadingStatus = __esm(() => {
490960
490989
  });
490961
490990
 
490962
490991
  // src/components/layout/SystemBanner.tsx
490963
- import { TextAttributes as TextAttributes18 } from "@opentui/core";
490992
+ import { TextAttributes as TextAttributes19 } from "@opentui/core";
490964
490993
  function hexToRgb3(hex3) {
490965
490994
  const h3 = hex3.replace("#", "");
490966
490995
  const n = h3.length === 3 ? h3.split("").map((c) => c + c).join("") : h3;
@@ -491123,7 +491152,7 @@ function SystemBanner({ messages, expanded = false }) {
491123
491152
  }, undefined, true, undefined, this),
491124
491153
  /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("span", {
491125
491154
  fg: fAccent,
491126
- attributes: TextAttributes18.BOLD,
491155
+ attributes: TextAttributes19.BOLD,
491127
491156
  children: err2 ? "Error" : "System"
491128
491157
  }, undefined, false, undefined, this),
491129
491158
  /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("span", {
@@ -491394,7 +491423,7 @@ var init_TerminalList = __esm(() => {
491394
491423
  // src/components/layout/TabInstance.tsx
491395
491424
  import { unlink as unlink3 } from "fs/promises";
491396
491425
  import { join as join63 } from "path";
491397
- import { TextAttributes as TextAttributes19 } from "@opentui/core";
491426
+ import { TextAttributes as TextAttributes20 } from "@opentui/core";
491398
491427
  function getScrollbarVisible(tk) {
491399
491428
  return {
491400
491429
  visible: true,
@@ -492075,7 +492104,7 @@ var init_TabInstance = __esm(async () => {
492075
492104
  flexShrink: 0,
492076
492105
  children: /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("text", {
492077
492106
  fg: t.error,
492078
- attributes: TextAttributes19.BOLD,
492107
+ attributes: TextAttributes20.BOLD,
492079
492108
  children: [
492080
492109
  icon("stop"),
492081
492110
  " ^X to stop"
@@ -494484,7 +494513,7 @@ var init_CommandPalette = __esm(async () => {
494484
494513
  });
494485
494514
 
494486
494515
  // src/components/modals/CommandPicker.tsx
494487
- import { TextAttributes as TextAttributes20 } from "@opentui/core";
494516
+ import { TextAttributes as TextAttributes21 } from "@opentui/core";
494488
494517
  function useListScroll(maxVisible) {
494489
494518
  const [cursor, setCursor] = import_react102.useState(0);
494490
494519
  const [scrollOffset, setScrollOffset] = import_react102.useState(0);
@@ -494579,7 +494608,7 @@ function OptionRow2({
494579
494608
  /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("text", {
494580
494609
  bg,
494581
494610
  fg: labelFg,
494582
- attributes: isActive && !isDisabled ? TextAttributes20.BOLD : undefined,
494611
+ attributes: isActive && !isDisabled ? TextAttributes21.BOLD : undefined,
494583
494612
  children: option2.label
494584
494613
  }, undefined, false, undefined, this),
494585
494614
  isCurrent && !isDisabled && /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("text", {
@@ -495636,11 +495665,11 @@ var init_data = __esm(() => {
495636
495665
  });
495637
495666
 
495638
495667
  // src/components/modals/wizard/theme.ts
495639
- import { TextAttributes as TextAttributes21 } from "@opentui/core";
495668
+ import { TextAttributes as TextAttributes22 } from "@opentui/core";
495640
495669
  var BOLD15, ITALIC5;
495641
495670
  var init_theme2 = __esm(() => {
495642
- BOLD15 = TextAttributes21.BOLD;
495643
- ITALIC5 = TextAttributes21.ITALIC;
495671
+ BOLD15 = TextAttributes22.BOLD;
495672
+ ITALIC5 = TextAttributes22.ITALIC;
495644
495673
  });
495645
495674
 
495646
495675
  // src/components/modals/wizard/primitives.tsx
@@ -496040,7 +496069,7 @@ var init_RemoteStep = __esm(() => {
496040
496069
  });
496041
496070
 
496042
496071
  // src/components/modals/wizard/steps/SetupStep.tsx
496043
- import { decodePasteBytes as decodePasteBytes5, TextAttributes as TextAttributes22 } from "@opentui/core";
496072
+ import { decodePasteBytes as decodePasteBytes5, TextAttributes as TextAttributes23 } from "@opentui/core";
496044
496073
  function hasKey(id) {
496045
496074
  return getSecretSources(id, getDefaultKeyPriority()).active !== "none";
496046
496075
  }
@@ -496527,7 +496556,7 @@ function SetupStep({
496527
496556
  href: selectedProvider.url,
496528
496557
  children: /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("span", {
496529
496558
  fg: t.info,
496530
- attributes: TextAttributes22.UNDERLINE,
496559
+ attributes: TextAttributes23.UNDERLINE,
496531
496560
  children: selectedProvider.url.replace("https://", "").replace(/\?.*$/, "")
496532
496561
  }, undefined, false, undefined, this)
496533
496562
  }, undefined, false, undefined, this)
@@ -496596,7 +496625,7 @@ function SetupStep({
496596
496625
  href: GATEWAY_REF,
496597
496626
  children: /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("span", {
496598
496627
  fg: t.info,
496599
- attributes: TextAttributes22.UNDERLINE,
496628
+ attributes: TextAttributes23.UNDERLINE,
496600
496629
  children: "llmgateway.io"
496601
496630
  }, undefined, false, undefined, this)
496602
496631
  }, undefined, false, undefined, this),
@@ -496783,7 +496812,7 @@ var init_ShortcutsStep = __esm(() => {
496783
496812
  });
496784
496813
 
496785
496814
  // src/components/modals/wizard/steps/ThemeStep.tsx
496786
- import { TextAttributes as TextAttributes23 } from "@opentui/core";
496815
+ import { TextAttributes as TextAttributes24 } from "@opentui/core";
496787
496816
  function opacityToIndex2(opacity) {
496788
496817
  const idx = OPACITY_LEVELS2.indexOf(opacity);
496789
496818
  return idx >= 0 ? idx : OPACITY_LEVELS2.length - 1;
@@ -496992,7 +497021,7 @@ function ThemeStep({ iw, setActive }) {
496992
497021
  isCurrent && /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("text", {
496993
497022
  bg,
496994
497023
  fg: t.success,
496995
- attributes: TextAttributes23.BOLD,
497024
+ attributes: TextAttributes24.BOLD,
496996
497025
  children: " \u2713"
496997
497026
  }, undefined, false, undefined, this)
496998
497027
  ]
@@ -498709,7 +498738,7 @@ var init_SessionPicker = __esm(async () => {
498709
498738
  });
498710
498739
 
498711
498740
  // src/components/modals/StatusDashboard.tsx
498712
- import { TextAttributes as TextAttributes24 } from "@opentui/core";
498741
+ import { TextAttributes as TextAttributes25 } from "@opentui/core";
498713
498742
  function fmtTokens(n) {
498714
498743
  if (n >= 1e6)
498715
498744
  return `${(n / 1e6).toFixed(1)}M`;
@@ -499915,7 +499944,7 @@ var init_StatusDashboard = __esm(async () => {
499915
499944
  init_jsx_dev_runtime();
499916
499945
  await init_react2();
499917
499946
  import_react132 = __toESM(require_react(), 1);
499918
- BOLD16 = TextAttributes24.BOLD;
499947
+ BOLD16 = TextAttributes25.BOLD;
499919
499948
  TABS = ["Usage", "Prompt", "Cost", "Tabs", "Dispatch", "System"];
499920
499949
  });
499921
499950
 
@@ -500758,7 +500787,7 @@ var init_UiDemo = __esm(async () => {
500758
500787
  });
500759
500788
 
500760
500789
  // src/components/modals/UpdateModal.tsx
500761
- import { TextAttributes as TextAttributes25 } from "@opentui/core";
500790
+ import { TextAttributes as TextAttributes26 } from "@opentui/core";
500762
500791
  function trunc(s2, max) {
500763
500792
  return s2.length > max ? `${s2.slice(0, max - 1)}\u2026` : s2;
500764
500793
  }
@@ -501563,9 +501592,9 @@ var init_UpdateModal = __esm(async () => {
501563
501592
  "The record keeper is away from the anvil",
501564
501593
  "The changelog embers have gone cold \u2014 GitHub unreachable"
501565
501594
  ];
501566
- BOLD17 = TextAttributes25.BOLD;
501567
- ITALIC6 = TextAttributes25.ITALIC;
501568
- DIM6 = TextAttributes25.DIM;
501595
+ BOLD17 = TextAttributes26.BOLD;
501596
+ ITALIC6 = TextAttributes26.ITALIC;
501597
+ DIM6 = TextAttributes26.DIM;
501569
501598
  TYPE_BADGE = {
501570
501599
  feat: { label: "feat", color: "success" },
501571
501600
  fix: { label: "fix", color: "brandSecondary" },
@@ -501823,7 +501852,7 @@ import { spawn as spawn21 } from "child_process";
501823
501852
  import { appendFileSync as appendFileSync5, existsSync as existsSync58, readFileSync as readFileSync33, statSync as statSync12, watch as watch3 } from "fs";
501824
501853
  import { tmpdir as tmpdir6 } from "os";
501825
501854
  import { delimiter as delimiter2, dirname as dirname25, join as join64, resolve as resolve45 } from "path";
501826
- import { decodePasteBytes as decodePasteBytes6, TextAttributes as TextAttributes26 } from "@opentui/core";
501855
+ import { decodePasteBytes as decodePasteBytes6, TextAttributes as TextAttributes27 } from "@opentui/core";
501827
501856
  function surfaceIdFrom(kind, id) {
501828
501857
  return `${kind}:${id}`;
501829
501858
  }
@@ -501978,7 +502007,7 @@ function Divider3({ w: w6, label, t }) {
501978
502007
  /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("text", {
501979
502008
  bg: t.bgPopup,
501980
502009
  fg: t.brandAlt,
501981
- attributes: TextAttributes26.BOLD,
502010
+ attributes: TextAttributes27.BOLD,
501982
502011
  children: [
501983
502012
  " ",
501984
502013
  label,
@@ -502051,7 +502080,7 @@ function FooterHints({
502051
502080
  /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("span", {
502052
502081
  bg: t.bgPopup,
502053
502082
  fg: t.brandAlt,
502054
- attributes: TextAttributes26.BOLD,
502083
+ attributes: TextAttributes27.BOLD,
502055
502084
  children: h3.key
502056
502085
  }, undefined, false, undefined, this),
502057
502086
  /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("span", {
@@ -503090,7 +503119,7 @@ function HearthSettings({ visible, onClose }) {
503090
503119
  /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("text", {
503091
503120
  bg: t.bgPopup,
503092
503121
  fg: t.brand,
503093
- attributes: TextAttributes26.BOLD,
503122
+ attributes: TextAttributes27.BOLD,
503094
503123
  children: " \u2302 Hearth [experimental]"
503095
503124
  }, undefined, false, undefined, this),
503096
503125
  /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV(VSpacer3, {}, undefined, false, undefined, this),
@@ -503100,7 +503129,7 @@ function HearthSettings({ visible, onClose }) {
503100
503129
  return /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("text", {
503101
503130
  bg,
503102
503131
  fg: active ? t.brand : t.textPrimary,
503103
- attributes: active ? TextAttributes26.BOLD : undefined,
503132
+ attributes: active ? TextAttributes27.BOLD : undefined,
503104
503133
  children: [
503105
503134
  active ? " \u25B8 " : " ",
503106
503135
  icon(TAB_ICON[tk]),
@@ -503319,7 +503348,7 @@ function renderSurfaces(w6, rows, t, entries2, cursor, status) {
503319
503348
  /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("text", {
503320
503349
  bg: t.bgPopup,
503321
503350
  fg: t.brandAlt,
503322
- attributes: TextAttributes26.BOLD,
503351
+ attributes: TextAttributes27.BOLD,
503323
503352
  children: "Surfaces"
503324
503353
  }, undefined, false, undefined, this),
503325
503354
  /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("text", {
@@ -503354,7 +503383,7 @@ function renderSurfaces(w6, rows, t, entries2, cursor, status) {
503354
503383
  /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("text", {
503355
503384
  bg,
503356
503385
  fg: t.textPrimary,
503357
- attributes: isSel ? TextAttributes26.BOLD : undefined,
503386
+ attributes: isSel ? TextAttributes27.BOLD : undefined,
503358
503387
  children: [
503359
503388
  " ",
503360
503389
  truncateMid(sid, listW - 10)
@@ -503440,7 +503469,7 @@ function renderSurfaceDetail(w6, t, entry, status) {
503440
503469
  /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("text", {
503441
503470
  bg: t.bgPopup,
503442
503471
  fg: t.brandAlt,
503443
- attributes: TextAttributes26.BOLD,
503472
+ attributes: TextAttributes27.BOLD,
503444
503473
  children: sid
503445
503474
  }, undefined, false, undefined, this),
503446
503475
  /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("text", {
@@ -503682,7 +503711,7 @@ function renderDaemon(w6, rows, t, config2, status, logs, startupError, service)
503682
503711
  /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("text", {
503683
503712
  bg: t.bgPopup,
503684
503713
  fg: t.brandAlt,
503685
- attributes: TextAttributes26.BOLD,
503714
+ attributes: TextAttributes27.BOLD,
503686
503715
  children: "Daemon"
503687
503716
  }, undefined, false, undefined, this),
503688
503717
  /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("text", {
@@ -503709,7 +503738,7 @@ function renderDaemon(w6, rows, t, config2, status, logs, startupError, service)
503709
503738
  /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("text", {
503710
503739
  bg: t.bgPopup,
503711
503740
  fg: status.running ? t.success : t.warning,
503712
- attributes: TextAttributes26.BOLD,
503741
+ attributes: TextAttributes27.BOLD,
503713
503742
  children: status.running ? "\u25CF RUNNING" : "\u25CB STOPPED"
503714
503743
  }, undefined, false, undefined, this),
503715
503744
  /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("text", {
@@ -503803,7 +503832,7 @@ function renderDaemon(w6, rows, t, config2, status, logs, startupError, service)
503803
503832
  /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("text", {
503804
503833
  bg: t.bgPopup,
503805
503834
  fg: t.error,
503806
- attributes: TextAttributes26.BOLD,
503835
+ attributes: TextAttributes27.BOLD,
503807
503836
  children: " boot failure"
503808
503837
  }, undefined, false, undefined, this),
503809
503838
  /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("text", {
@@ -503904,7 +503933,7 @@ function renderDaemon(w6, rows, t, config2, status, logs, startupError, service)
503904
503933
  /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("span", {
503905
503934
  bg: t.bgPopup,
503906
503935
  fg: service?.installed ? t.success : t.textDim,
503907
- attributes: TextAttributes26.BOLD,
503936
+ attributes: TextAttributes27.BOLD,
503908
503937
  children: service?.installed ? service.active ? "active on boot" : "installed (inactive)" : service?.platform === "unsupported" ? "not supported on this OS" : "not installed"
503909
503938
  }, undefined, false, undefined, this),
503910
503939
  service?.installed && service.unitLabel ? /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV(import_jsx_dev_runtime2.Fragment, {
@@ -503934,7 +503963,7 @@ function renderDaemon(w6, rows, t, config2, status, logs, startupError, service)
503934
503963
  /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("span", {
503935
503964
  bg: t.bgPopup,
503936
503965
  fg: t.brandAlt,
503937
- attributes: TextAttributes26.BOLD,
503966
+ attributes: TextAttributes27.BOLD,
503938
503967
  children: "[s]"
503939
503968
  }, undefined, false, undefined, this),
503940
503969
  " ",
@@ -503949,7 +503978,7 @@ function renderDaemon(w6, rows, t, config2, status, logs, startupError, service)
503949
503978
  /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("span", {
503950
503979
  bg: t.bgPopup,
503951
503980
  fg: t.brandAlt,
503952
- attributes: TextAttributes26.BOLD,
503981
+ attributes: TextAttributes27.BOLD,
503953
503982
  children: "[b]"
503954
503983
  }, undefined, false, undefined, this),
503955
503984
  " ",
@@ -503964,7 +503993,7 @@ function renderDaemon(w6, rows, t, config2, status, logs, startupError, service)
503964
503993
  /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("span", {
503965
503994
  bg: t.bgPopup,
503966
503995
  fg: t.brandAlt,
503967
- attributes: TextAttributes26.BOLD,
503996
+ attributes: TextAttributes27.BOLD,
503968
503997
  children: "[r]"
503969
503998
  }, undefined, false, undefined, this),
503970
503999
  " ",
@@ -504005,7 +504034,7 @@ function renderPairings(w6, _rows, t, pairings, cursor) {
504005
504034
  /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("text", {
504006
504035
  bg: t.bgPopup,
504007
504036
  fg: t.brandAlt,
504008
- attributes: TextAttributes26.BOLD,
504037
+ attributes: TextAttributes27.BOLD,
504009
504038
  children: "Pairings"
504010
504039
  }, undefined, false, undefined, this),
504011
504040
  /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV(VSpacer3, {}, undefined, false, undefined, this),
@@ -504044,7 +504073,7 @@ function renderPairings(w6, _rows, t, pairings, cursor) {
504044
504073
  /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("text", {
504045
504074
  bg: t.bgPopup,
504046
504075
  fg: t.brandAlt,
504047
- attributes: TextAttributes26.BOLD,
504076
+ attributes: TextAttributes27.BOLD,
504048
504077
  children: "Paired chats"
504049
504078
  }, undefined, false, undefined, this),
504050
504079
  /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("text", {
@@ -504066,7 +504095,7 @@ function renderPairings(w6, _rows, t, pairings, cursor) {
504066
504095
  /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("text", {
504067
504096
  bg: t.bgPopup,
504068
504097
  fg: t.info,
504069
- attributes: TextAttributes26.BOLD,
504098
+ attributes: TextAttributes27.BOLD,
504070
504099
  children: [
504071
504100
  " \u25BE ",
504072
504101
  sid
@@ -504114,7 +504143,7 @@ function renderPairings(w6, _rows, t, pairings, cursor) {
504114
504143
  /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("text", {
504115
504144
  bg: t.bgPopup,
504116
504145
  fg: t.brandAlt,
504117
- attributes: TextAttributes26.BOLD,
504146
+ attributes: TextAttributes27.BOLD,
504118
504147
  children: selected.sid
504119
504148
  }, undefined, false, undefined, this),
504120
504149
  /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("text", {
@@ -504194,7 +504223,7 @@ function renderLogs(w6, rows, t, lines, scroll, autoscroll, filter7, filterFocus
504194
504223
  /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("text", {
504195
504224
  bg: t.bgPopup,
504196
504225
  fg: t.brandAlt,
504197
- attributes: TextAttributes26.BOLD,
504226
+ attributes: TextAttributes27.BOLD,
504198
504227
  children: "Logs"
504199
504228
  }, undefined, false, undefined, this),
504200
504229
  /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("text", {
@@ -504276,7 +504305,7 @@ function renderAddSurface(_w, _rows, mode, t) {
504276
504305
  /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("text", {
504277
504306
  bg: t.bgPopup,
504278
504307
  fg: t.brandAlt,
504279
- attributes: TextAttributes26.BOLD,
504308
+ attributes: TextAttributes27.BOLD,
504280
504309
  children: "Add surface"
504281
504310
  }, undefined, false, undefined, this),
504282
504311
  /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("text", {
@@ -504340,7 +504369,7 @@ function renderAddChat(_w, _rows, mode, t) {
504340
504369
  /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("text", {
504341
504370
  bg: t.bgPopup,
504342
504371
  fg: t.brandAlt,
504343
- attributes: TextAttributes26.BOLD,
504372
+ attributes: TextAttributes27.BOLD,
504344
504373
  children: "Bind chat"
504345
504374
  }, undefined, false, undefined, this),
504346
504375
  /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("text", {
@@ -504397,7 +504426,7 @@ function renderTokenInput(_w, _rows, mode, t) {
504397
504426
  /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("text", {
504398
504427
  bg: t.bgPopup,
504399
504428
  fg: t.brandAlt,
504400
- attributes: TextAttributes26.BOLD,
504429
+ attributes: TextAttributes27.BOLD,
504401
504430
  children: "Bot token"
504402
504431
  }, undefined, false, undefined, this),
504403
504432
  /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("text", {
@@ -504456,7 +504485,7 @@ function renderPairCode(_w, _rows, mode, t) {
504456
504485
  /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("text", {
504457
504486
  bg: t.bgPopup,
504458
504487
  fg: t.brandAlt,
504459
- attributes: TextAttributes26.BOLD,
504488
+ attributes: TextAttributes27.BOLD,
504460
504489
  children: "Pairing code"
504461
504490
  }, undefined, false, undefined, this),
504462
504491
  /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("text", {
@@ -504473,7 +504502,7 @@ function renderPairCode(_w, _rows, mode, t) {
504473
504502
  /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("text", {
504474
504503
  bg: t.bgPopup,
504475
504504
  fg: t.brand,
504476
- attributes: TextAttributes26.BOLD,
504505
+ attributes: TextAttributes27.BOLD,
504477
504506
  children: [
504478
504507
  " ",
504479
504508
  mode.code
@@ -504566,7 +504595,7 @@ function renderPickProvider(_w, _rows, mode, t) {
504566
504595
  /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("text", {
504567
504596
  bg: t.bgPopup,
504568
504597
  fg: t.brandAlt,
504569
- attributes: TextAttributes26.BOLD,
504598
+ attributes: TextAttributes27.BOLD,
504570
504599
  children: "Add surface"
504571
504600
  }, undefined, false, undefined, this),
504572
504601
  /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("text", {
@@ -504591,7 +504620,7 @@ function renderPickProvider(_w, _rows, mode, t) {
504591
504620
  /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("text", {
504592
504621
  bg,
504593
504622
  fg,
504594
- attributes: active ? TextAttributes26.BOLD : undefined,
504623
+ attributes: active ? TextAttributes27.BOLD : undefined,
504595
504624
  children: [
504596
504625
  active ? "\u25B8 " : " ",
504597
504626
  p3.label,
@@ -504632,7 +504661,7 @@ function renderQuickTelegram(_w, _rows, mode, t) {
504632
504661
  /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("text", {
504633
504662
  bg: t.bgPopup,
504634
504663
  fg: t.brandAlt,
504635
- attributes: TextAttributes26.BOLD,
504664
+ attributes: TextAttributes27.BOLD,
504636
504665
  children: "Telegram setup"
504637
504666
  }, undefined, false, undefined, this),
504638
504667
  /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("text", {
@@ -504720,7 +504749,7 @@ function renderQuickDiscord(_w, _rows, mode, t) {
504720
504749
  /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("text", {
504721
504750
  bg: t.bgPopup,
504722
504751
  fg: t.brandAlt,
504723
- attributes: TextAttributes26.BOLD,
504752
+ attributes: TextAttributes27.BOLD,
504724
504753
  children: "Discord setup"
504725
504754
  }, undefined, false, undefined, this),
504726
504755
  /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("text", {
@@ -504769,7 +504798,7 @@ function renderQuickDiscord(_w, _rows, mode, t) {
504769
504798
  sameChannelUser ? /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("text", {
504770
504799
  bg: t.bgPopup,
504771
504800
  fg: t.error,
504772
- attributes: TextAttributes26.BOLD,
504801
+ attributes: TextAttributes27.BOLD,
504773
504802
  children: " \u2715 channel id = user id. Right-click YOUR name, not the channel."
504774
504803
  }, undefined, false, undefined, this) : null,
504775
504804
  /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV(FieldRow, {
@@ -504814,7 +504843,7 @@ function renderAddAllowed(_w, _rows, mode, t) {
504814
504843
  /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("text", {
504815
504844
  bg: t.bgPopup,
504816
504845
  fg: t.brandAlt,
504817
- attributes: TextAttributes26.BOLD,
504846
+ attributes: TextAttributes27.BOLD,
504818
504847
  children: "Allow user"
504819
504848
  }, undefined, false, undefined, this),
504820
504849
  /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("text", {
@@ -505626,7 +505655,7 @@ var init_installer = __esm(() => {
505626
505655
  // src/components/settings/LspInstallSearch.tsx
505627
505656
  import { existsSync as existsSync60 } from "fs";
505628
505657
  import { join as join66 } from "path";
505629
- import { TextAttributes as TextAttributes27 } from "@opentui/core";
505658
+ import { TextAttributes as TextAttributes28 } from "@opentui/core";
505630
505659
  function methodLabel(status) {
505631
505660
  if (status.requiresToolchain && !status.toolchainAvailable) {
505632
505661
  return `[requires ${status.requiresToolchain}]`;
@@ -505725,7 +505754,7 @@ function PackageRow({
505725
505754
  /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("text", {
505726
505755
  bg,
505727
505756
  fg: nameFg,
505728
- attributes: isActive ? TextAttributes27.BOLD : undefined,
505757
+ attributes: isActive ? TextAttributes28.BOLD : undefined,
505729
505758
  children: status.pkg.name
505730
505759
  }, undefined, false, undefined, this),
505731
505760
  lang254 ? /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("text", {
@@ -506183,7 +506212,7 @@ function LspInstallSearch({
506183
506212
  backgroundColor: t.bgPopup,
506184
506213
  children: /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("text", {
506185
506214
  fg: t.textPrimary,
506186
- attributes: TextAttributes27.BOLD,
506215
+ attributes: TextAttributes28.BOLD,
506187
506216
  bg: t.bgPopup,
506188
506217
  children: [
506189
506218
  disabledServers.includes(pendingToggle.pkg.name) ? "Enable" : "Disable",
@@ -506226,7 +506255,7 @@ var init_LspInstallSearch = __esm(async () => {
506226
506255
  });
506227
506256
 
506228
506257
  // src/components/settings/MCPSettings.tsx
506229
- import { TextAttributes as TextAttributes28 } from "@opentui/core";
506258
+ import { TextAttributes as TextAttributes29 } from "@opentui/core";
506230
506259
  function useListScroll2(maxVisible, totalItems) {
506231
506260
  const [cursor, setCursor] = import_react146.useState(0);
506232
506261
  const [scrollOffset, setScrollOffset] = import_react146.useState(0);
@@ -506775,7 +506804,7 @@ function MCPSettings({
506775
506804
  /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("text", {
506776
506805
  bg: t.bgPopup,
506777
506806
  fg: t.brandAlt,
506778
- attributes: TextAttributes28.BOLD,
506807
+ attributes: TextAttributes29.BOLD,
506779
506808
  children: " P"
506780
506809
  }, undefined, false, undefined, this),
506781
506810
  /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("text", {
@@ -506786,7 +506815,7 @@ function MCPSettings({
506786
506815
  /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("text", {
506787
506816
  bg: t.bgPopup,
506788
506817
  fg: t.textMuted,
506789
- attributes: TextAttributes28.BOLD,
506818
+ attributes: TextAttributes29.BOLD,
506790
506819
  children: "G"
506791
506820
  }, undefined, false, undefined, this),
506792
506821
  /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("text", {
@@ -506841,7 +506870,7 @@ function ServerDetail({
506841
506870
  }, undefined, false, undefined, this),
506842
506871
  /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("text", {
506843
506872
  fg: t.textPrimary,
506844
- attributes: TextAttributes28.BOLD,
506873
+ attributes: TextAttributes29.BOLD,
506845
506874
  bg: t.bgPopup,
506846
506875
  children: config2.name
506847
506876
  }, undefined, false, undefined, this),
@@ -506926,7 +506955,7 @@ function ServerDetail({
506926
506955
  /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("text", {
506927
506956
  bg: t.bgPopup,
506928
506957
  fg: t.error,
506929
- attributes: TextAttributes28.BOLD,
506958
+ attributes: TextAttributes29.BOLD,
506930
506959
  children: [
506931
506960
  " ",
506932
506961
  icon("error"),
@@ -507132,7 +507161,7 @@ function FormBody({
507132
507161
  /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("text", {
507133
507162
  bg,
507134
507163
  fg: active ? t.brand : t.textMuted,
507135
- attributes: active ? TextAttributes28.BOLD : undefined,
507164
+ attributes: active ? TextAttributes29.BOLD : undefined,
507136
507165
  children: LABEL[field].padEnd(12)
507137
507166
  }, undefined, false, undefined, this),
507138
507167
  !active && /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("text", {
@@ -507270,7 +507299,7 @@ var init_MCPSettings = __esm(async () => {
507270
507299
  }, undefined, false, undefined, this),
507271
507300
  /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("span", {
507272
507301
  fg: t.success,
507273
- attributes: TextAttributes28.BOLD,
507302
+ attributes: TextAttributes29.BOLD,
507274
507303
  children: "ctrl+a"
507275
507304
  }, undefined, false, undefined, this),
507276
507305
  /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("span", {
@@ -507312,7 +507341,7 @@ var init_MCPSettings = __esm(async () => {
507312
507341
  /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("text", {
507313
507342
  bg,
507314
507343
  fg: scopeCol,
507315
- attributes: TextAttributes28.BOLD,
507344
+ attributes: TextAttributes29.BOLD,
507316
507345
  children: scopeBadge
507317
507346
  }, undefined, false, undefined, this),
507318
507347
  /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("text", {
@@ -507335,7 +507364,7 @@ var init_MCPSettings = __esm(async () => {
507335
507364
  /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("text", {
507336
507365
  bg,
507337
507366
  fg: isSelected ? "white" : t.textPrimary,
507338
- attributes: TextAttributes28.BOLD,
507367
+ attributes: TextAttributes29.BOLD,
507339
507368
  children: config2.name
507340
507369
  }, undefined, false, undefined, this),
507341
507370
  /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("text", {
@@ -507402,7 +507431,7 @@ var init_MCPSettings = __esm(async () => {
507402
507431
  /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("text", {
507403
507432
  bg: deleteChoice === "no" ? t.bgPopupHighlight : bg,
507404
507433
  fg: deleteChoice === "no" ? "white" : t.textDim,
507405
- attributes: deleteChoice === "no" ? TextAttributes28.BOLD : undefined,
507434
+ attributes: deleteChoice === "no" ? TextAttributes29.BOLD : undefined,
507406
507435
  children: deleteChoice === "no" ? " \u25B8 No " : " No "
507407
507436
  }, undefined, false, undefined, this),
507408
507437
  /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("text", {
@@ -507413,7 +507442,7 @@ var init_MCPSettings = __esm(async () => {
507413
507442
  /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("text", {
507414
507443
  bg: deleteChoice === "yes" ? t.bgPopupHighlight : bg,
507415
507444
  fg: deleteChoice === "yes" ? t.error : t.textDim,
507416
- attributes: deleteChoice === "yes" ? TextAttributes28.BOLD : undefined,
507445
+ attributes: deleteChoice === "yes" ? TextAttributes29.BOLD : undefined,
507417
507446
  children: deleteChoice === "yes" ? " \u25B8 Yes " : " Yes "
507418
507447
  }, undefined, false, undefined, this)
507419
507448
  ]
@@ -507518,7 +507547,7 @@ var init_MCPSettings = __esm(async () => {
507518
507547
  /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("text", {
507519
507548
  bg,
507520
507549
  fg: sel ? "white" : t.info,
507521
- attributes: TextAttributes28.BOLD,
507550
+ attributes: TextAttributes29.BOLD,
507522
507551
  children: tool4.name
507523
507552
  }, undefined, false, undefined, this)
507524
507553
  ]
@@ -509612,7 +509641,7 @@ var init_RouterSettings = __esm(async () => {
509612
509641
  // src/components/settings/SkillSearch.tsx
509613
509642
  import { existsSync as existsSync61 } from "fs";
509614
509643
  import { join as join67 } from "path";
509615
- import { TextAttributes as TextAttributes29 } from "@opentui/core";
509644
+ import { TextAttributes as TextAttributes30 } from "@opentui/core";
509616
509645
  function SearchSkillRow({
509617
509646
  skill,
509618
509647
  isSelected,
@@ -509634,18 +509663,18 @@ function SearchSkillRow({
509634
509663
  isLoaded ? /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("text", {
509635
509664
  bg,
509636
509665
  fg: t.info,
509637
- attributes: TextAttributes29.BOLD,
509666
+ attributes: TextAttributes30.BOLD,
509638
509667
  children: "\u25CF "
509639
509668
  }, undefined, false, undefined, this) : isInstalled ? /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("text", {
509640
509669
  bg,
509641
509670
  fg: t.success,
509642
- attributes: TextAttributes29.BOLD,
509671
+ attributes: TextAttributes30.BOLD,
509643
509672
  children: "\u2713 "
509644
509673
  }, undefined, false, undefined, this) : null,
509645
509674
  /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("text", {
509646
509675
  bg,
509647
509676
  fg: isSelected ? t.brand : t.textSecondary,
509648
- attributes: isSelected ? TextAttributes29.BOLD : undefined,
509677
+ attributes: isSelected ? TextAttributes30.BOLD : undefined,
509649
509678
  children: skill.skillId
509650
509679
  }, undefined, false, undefined, this),
509651
509680
  /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("text", {
@@ -509688,7 +509717,7 @@ function InstalledSkillRow({
509688
509717
  /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("text", {
509689
509718
  bg,
509690
509719
  fg: isSelected ? t.brand : t.textSecondary,
509691
- attributes: isSelected ? TextAttributes29.BOLD : undefined,
509720
+ attributes: isSelected ? TextAttributes30.BOLD : undefined,
509692
509721
  children: skill.name
509693
509722
  }, undefined, false, undefined, this),
509694
509723
  /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("text", {
@@ -509702,7 +509731,7 @@ function InstalledSkillRow({
509702
509731
  isLoaded && /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("text", {
509703
509732
  bg,
509704
509733
  fg: t.info,
509705
- attributes: TextAttributes29.BOLD,
509734
+ attributes: TextAttributes30.BOLD,
509706
509735
  children: [
509707
509736
  " ",
509708
509737
  "\u25CF"
@@ -509730,13 +509759,13 @@ function ActiveSkillRow({
509730
509759
  /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("text", {
509731
509760
  bg,
509732
509761
  fg: t.info,
509733
- attributes: TextAttributes29.BOLD,
509762
+ attributes: TextAttributes30.BOLD,
509734
509763
  children: "\u25CF "
509735
509764
  }, undefined, false, undefined, this),
509736
509765
  /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("text", {
509737
509766
  bg,
509738
509767
  fg: isSelected ? t.brand : t.textPrimary,
509739
- attributes: isSelected ? TextAttributes29.BOLD : undefined,
509768
+ attributes: isSelected ? TextAttributes30.BOLD : undefined,
509740
509769
  children: name39
509741
509770
  }, undefined, false, undefined, this)
509742
509771
  ]
@@ -510071,7 +510100,7 @@ function SkillSearch({ visible, contextManager, onClose, onSystemMessage }) {
510071
510100
  backgroundColor: popupBg,
510072
510101
  children: /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("text", {
510073
510102
  fg: t.textPrimary,
510074
- attributes: TextAttributes29.BOLD,
510103
+ attributes: TextAttributes30.BOLD,
510075
510104
  bg: popupBg,
510076
510105
  children: [
510077
510106
  'Install "',
@@ -511111,7 +511140,7 @@ __export(exports_App, {
511111
511140
  App: () => App
511112
511141
  });
511113
511142
  import { join as join69 } from "path";
511114
- import { TextAttributes as TextAttributes30 } from "@opentui/core";
511143
+ import { TextAttributes as TextAttributes31 } from "@opentui/core";
511115
511144
  function truncate5(str, max) {
511116
511145
  return str.length > max ? `${str.slice(0, max - 1)}\u2026` : str;
511117
511146
  }
@@ -511196,7 +511225,7 @@ function ShutdownSplash({
511196
511225
  alignItems: "center",
511197
511226
  children: [
511198
511227
  wordmark.map((line2, idx) => /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("text", {
511199
- attributes: TextAttributes30.BOLD,
511228
+ attributes: TextAttributes31.BOLD,
511200
511229
  children: renderRow(line2)
511201
511230
  }, idx, false, undefined, this)),
511202
511231
  /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("box", {
@@ -512330,7 +512359,7 @@ function App({
512330
512359
  children: [
512331
512360
  /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("text", {
512332
512361
  fg: t.brand,
512333
- attributes: TextAttributes30.BOLD,
512362
+ attributes: TextAttributes31.BOLD,
512334
512363
  children: [
512335
512364
  icon("ghost"),
512336
512365
  " SoulForge"
@@ -512436,7 +512465,7 @@ function App({
512436
512465
  }, undefined, false, undefined, this),
512437
512466
  /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("text", {
512438
512467
  fg: modeColor,
512439
- attributes: TextAttributes30.BOLD,
512468
+ attributes: TextAttributes31.BOLD,
512440
512469
  children: [
512441
512470
  "[",
512442
512471
  modeLabel,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@proxysoul/soulforge",
3
- "version": "2.20.4",
3
+ "version": "2.20.5",
4
4
  "description": "Graph-powered code intelligence — multi-agent coding with codebase-aware AI",
5
5
  "repository": {
6
6
  "type": "git",