reasonix 0.52.0 → 0.53.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (143) hide show
  1. package/README.md +1 -0
  2. package/README.zh-CN.md +1 -0
  3. package/dashboard/dist/app.css +1 -1
  4. package/dashboard/dist/app.js +13 -13
  5. package/dashboard/dist/app.js.map +1 -1
  6. package/dist/cli/{acp-NEUYWGUU.js → acp-ABNDGEYC.js} +63 -30
  7. package/dist/cli/acp-ABNDGEYC.js.map +1 -0
  8. package/dist/cli/chat-377YZV56.js +49 -0
  9. package/dist/cli/{chunk-FY5UERSG.js → chunk-2WZT27GR.js} +9 -9
  10. package/dist/cli/{chunk-B4MOGWHW.js → chunk-4EHRIP5U.js} +7 -7
  11. package/dist/cli/chunk-4EHRIP5U.js.map +1 -0
  12. package/dist/cli/{chunk-RCC73DWQ.js → chunk-4SBXAHR6.js} +4 -4
  13. package/dist/cli/{chunk-5YLEKX2V.js → chunk-4V4TKQMB.js} +4 -4
  14. package/dist/cli/{chunk-5YLEKX2V.js.map → chunk-4V4TKQMB.js.map} +1 -1
  15. package/dist/cli/chunk-7ZO6H6ZK.js +54 -0
  16. package/dist/cli/chunk-7ZO6H6ZK.js.map +1 -0
  17. package/dist/cli/{chunk-3OXD5CBM.js → chunk-A6GSOADP.js} +17870 -16070
  18. package/dist/cli/chunk-A6GSOADP.js.map +1 -0
  19. package/dist/cli/{chunk-Z663GVUB.js → chunk-APOSDBAU.js} +3 -3
  20. package/dist/cli/{chunk-CTRM32BP.js → chunk-B5JISV5I.js} +2 -2
  21. package/dist/cli/{chunk-HNZ4727T.js → chunk-DFHI2MRB.js} +412 -152
  22. package/dist/cli/chunk-DFHI2MRB.js.map +1 -0
  23. package/dist/cli/{chunk-CGVW5W7N.js → chunk-EPIHGOM3.js} +14 -14
  24. package/dist/cli/{chunk-CGVW5W7N.js.map → chunk-EPIHGOM3.js.map} +1 -1
  25. package/dist/cli/{chunk-77JIQ7SL.js → chunk-EQFZIHKJ.js} +8 -8
  26. package/dist/cli/chunk-EQFZIHKJ.js.map +1 -0
  27. package/dist/cli/{chunk-XNMXVL6C.js → chunk-FB27YXPX.js} +2 -2
  28. package/dist/cli/{chunk-ARBGTNHM.js → chunk-FK7NXDRP.js} +2 -2
  29. package/dist/cli/{chunk-AOYUW3HR.js → chunk-GCNBIWK7.js} +22 -2
  30. package/dist/cli/chunk-GCNBIWK7.js.map +1 -0
  31. package/dist/cli/{chunk-XBYHNZ5Z.js → chunk-GMQVINZK.js} +13 -5
  32. package/dist/cli/chunk-GMQVINZK.js.map +1 -0
  33. package/dist/cli/{chunk-MVLPXZAA.js → chunk-GOASYYZ4.js} +43 -11
  34. package/dist/cli/{chunk-MVLPXZAA.js.map → chunk-GOASYYZ4.js.map} +1 -1
  35. package/dist/cli/{chunk-WPY7AFS6.js → chunk-I4SH5Z7S.js} +2 -2
  36. package/dist/cli/{chunk-MW64SQUE.js → chunk-J26XOB2T.js} +2 -2
  37. package/dist/cli/{chunk-DLTE4GBY.js → chunk-J4MYMBJ7.js} +3 -3
  38. package/dist/cli/{chunk-CFJY64UA.js → chunk-LRO63VNK.js} +2 -2
  39. package/dist/cli/{chunk-XUZHBQSM.js → chunk-MQJR7YQ2.js} +2 -2
  40. package/dist/cli/{chunk-CPCUMMSR.js → chunk-NVI4XPOQ.js} +3 -3
  41. package/dist/cli/{chunk-RHQOGG43.js → chunk-OHSVEXFF.js} +3 -3
  42. package/dist/cli/chunk-OHSVEXFF.js.map +1 -0
  43. package/dist/cli/{chunk-AMSK3ZLB.js → chunk-P5SUHDUQ.js} +2 -2
  44. package/dist/cli/{chunk-GFJJEW3Z.js → chunk-QSKDP3OS.js} +55 -5
  45. package/dist/cli/chunk-QSKDP3OS.js.map +1 -0
  46. package/dist/cli/{chunk-D6WRFR6V.js → chunk-R7JMQMLD.js} +6 -5
  47. package/dist/cli/chunk-R7JMQMLD.js.map +1 -0
  48. package/dist/cli/{chunk-VVPV5HU6.js → chunk-RRZIIMAF.js} +2 -2
  49. package/dist/cli/{chunk-GNRKXRRE.js → chunk-S3QII236.js} +369 -359
  50. package/dist/cli/{chunk-GNRKXRRE.js.map → chunk-S3QII236.js.map} +1 -1
  51. package/dist/cli/{chunk-HI6THNAZ.js → chunk-TGP7JGHN.js} +32 -14
  52. package/dist/cli/chunk-TGP7JGHN.js.map +1 -0
  53. package/dist/cli/{chunk-CLHMV6OL.js → chunk-U7G72DHQ.js} +83 -42
  54. package/dist/cli/chunk-U7G72DHQ.js.map +1 -0
  55. package/dist/cli/{chunk-OMNRXZNA.js → chunk-URAI4YRL.js} +2 -2
  56. package/dist/cli/{chunk-6QBUXA73.js → chunk-V4AXMN4X.js} +2 -2
  57. package/dist/cli/{chunk-2W4F3RIZ.js → chunk-XHP6NYOT.js} +3 -2
  58. package/dist/cli/{chunk-2W4F3RIZ.js.map → chunk-XHP6NYOT.js.map} +1 -1
  59. package/dist/cli/{code-WN6D4VZO.js → code-JPFZJYVW.js} +34 -34
  60. package/dist/cli/{commands-DHETOY7O.js → commands-IUL2CLKH.js} +4 -4
  61. package/dist/cli/{commit-BBUYAKZV.js → commit-JT7LYBTL.js} +3 -3
  62. package/dist/cli/{config-KV7VV5LG.js → config-T4RWI5NG.js} +6 -2
  63. package/dist/cli/{desktop-LJVXWXNF.js → desktop-AUBW2SLL.js} +122 -38
  64. package/dist/cli/desktop-AUBW2SLL.js.map +1 -0
  65. package/dist/cli/devtools-O5HOMAGZ.js +3 -0
  66. package/dist/cli/diff-NINZHUJR.js +165 -0
  67. package/dist/cli/diff-NINZHUJR.js.map +1 -0
  68. package/dist/cli/{doctor-GI5LOEZL.js → doctor-OMAYGY4F.js} +10 -10
  69. package/dist/cli/{events-LBKMLFM4.js → events-5IVFJ4H3.js} +5 -5
  70. package/dist/cli/index.js +38 -38
  71. package/dist/cli/{mcp-DKEJK5ND.js → mcp-ECGJACAP.js} +3 -3
  72. package/dist/cli/{mcp-browse-V7KWDY32.js → mcp-browse-NGEOHVJB.js} +15 -15
  73. package/dist/cli/mcp-browse-NGEOHVJB.js.map +1 -0
  74. package/dist/cli/{mcp-inspect-MTABNHVM.js → mcp-inspect-ZIMNRG7G.js} +5 -5
  75. package/dist/cli/{prompt-ATI7DKHF.js → prompt-JCC3A7AA.js} +5 -5
  76. package/dist/cli/{prune-sessions-YQQSZTZS.js → prune-sessions-TE4BJYO2.js} +4 -4
  77. package/dist/cli/{replay-ZJQ4I4CJ.js → replay-2UUTCRTG.js} +29 -29
  78. package/dist/cli/replay-2UUTCRTG.js.map +1 -0
  79. package/dist/cli/{run-HFPRNWJY.js → run-ABQYOPVM.js} +22 -22
  80. package/dist/cli/{server-UHKO2VVM.js → server-MPCXIW2O.js} +27 -25
  81. package/dist/cli/{server-UHKO2VVM.js.map → server-MPCXIW2O.js.map} +1 -1
  82. package/dist/cli/{sessions-IQEWWUH3.js → sessions-YBPRGIAF.js} +16 -16
  83. package/dist/cli/{setup-5BYKCL62.js → setup-A34LF2QE.js} +42 -42
  84. package/dist/cli/setup-A34LF2QE.js.map +1 -0
  85. package/dist/cli/{stats-OFCGOQMZ.js → stats-GKG5JZQX.js} +6 -6
  86. package/dist/cli/stats-GKG5JZQX.js.map +1 -0
  87. package/dist/cli/{version-EODUFAAI.js → version-JD6QSM4X.js} +16 -16
  88. package/dist/index.d.ts +36 -5
  89. package/dist/index.js +443 -73
  90. package/dist/index.js.map +1 -1
  91. package/package.json +7 -2
  92. package/dist/cli/acp-NEUYWGUU.js.map +0 -1
  93. package/dist/cli/chat-QA6IVFJD.js +0 -49
  94. package/dist/cli/chunk-3OXD5CBM.js.map +0 -1
  95. package/dist/cli/chunk-77JIQ7SL.js.map +0 -1
  96. package/dist/cli/chunk-AOYUW3HR.js.map +0 -1
  97. package/dist/cli/chunk-B4MOGWHW.js.map +0 -1
  98. package/dist/cli/chunk-CLHMV6OL.js.map +0 -1
  99. package/dist/cli/chunk-D6WRFR6V.js.map +0 -1
  100. package/dist/cli/chunk-GFJJEW3Z.js.map +0 -1
  101. package/dist/cli/chunk-HI6THNAZ.js.map +0 -1
  102. package/dist/cli/chunk-HNZ4727T.js.map +0 -1
  103. package/dist/cli/chunk-I3NE5S63.js +0 -54
  104. package/dist/cli/chunk-I3NE5S63.js.map +0 -1
  105. package/dist/cli/chunk-RHQOGG43.js.map +0 -1
  106. package/dist/cli/chunk-XBYHNZ5Z.js.map +0 -1
  107. package/dist/cli/desktop-LJVXWXNF.js.map +0 -1
  108. package/dist/cli/diff-2JHMQAHI.js +0 -165
  109. package/dist/cli/diff-2JHMQAHI.js.map +0 -1
  110. package/dist/cli/mcp-browse-V7KWDY32.js.map +0 -1
  111. package/dist/cli/replay-ZJQ4I4CJ.js.map +0 -1
  112. package/dist/cli/setup-5BYKCL62.js.map +0 -1
  113. /package/dist/cli/{chat-QA6IVFJD.js.map → chat-377YZV56.js.map} +0 -0
  114. /package/dist/cli/{chunk-FY5UERSG.js.map → chunk-2WZT27GR.js.map} +0 -0
  115. /package/dist/cli/{chunk-RCC73DWQ.js.map → chunk-4SBXAHR6.js.map} +0 -0
  116. /package/dist/cli/{chunk-Z663GVUB.js.map → chunk-APOSDBAU.js.map} +0 -0
  117. /package/dist/cli/{chunk-CTRM32BP.js.map → chunk-B5JISV5I.js.map} +0 -0
  118. /package/dist/cli/{chunk-XNMXVL6C.js.map → chunk-FB27YXPX.js.map} +0 -0
  119. /package/dist/cli/{chunk-ARBGTNHM.js.map → chunk-FK7NXDRP.js.map} +0 -0
  120. /package/dist/cli/{chunk-WPY7AFS6.js.map → chunk-I4SH5Z7S.js.map} +0 -0
  121. /package/dist/cli/{chunk-MW64SQUE.js.map → chunk-J26XOB2T.js.map} +0 -0
  122. /package/dist/cli/{chunk-DLTE4GBY.js.map → chunk-J4MYMBJ7.js.map} +0 -0
  123. /package/dist/cli/{chunk-CFJY64UA.js.map → chunk-LRO63VNK.js.map} +0 -0
  124. /package/dist/cli/{chunk-XUZHBQSM.js.map → chunk-MQJR7YQ2.js.map} +0 -0
  125. /package/dist/cli/{chunk-CPCUMMSR.js.map → chunk-NVI4XPOQ.js.map} +0 -0
  126. /package/dist/cli/{chunk-AMSK3ZLB.js.map → chunk-P5SUHDUQ.js.map} +0 -0
  127. /package/dist/cli/{chunk-VVPV5HU6.js.map → chunk-RRZIIMAF.js.map} +0 -0
  128. /package/dist/cli/{chunk-OMNRXZNA.js.map → chunk-URAI4YRL.js.map} +0 -0
  129. /package/dist/cli/{chunk-6QBUXA73.js.map → chunk-V4AXMN4X.js.map} +0 -0
  130. /package/dist/cli/{code-WN6D4VZO.js.map → code-JPFZJYVW.js.map} +0 -0
  131. /package/dist/cli/{commands-DHETOY7O.js.map → commands-IUL2CLKH.js.map} +0 -0
  132. /package/dist/cli/{commit-BBUYAKZV.js.map → commit-JT7LYBTL.js.map} +0 -0
  133. /package/dist/cli/{config-KV7VV5LG.js.map → config-T4RWI5NG.js.map} +0 -0
  134. /package/dist/cli/{doctor-GI5LOEZL.js.map → devtools-O5HOMAGZ.js.map} +0 -0
  135. /package/dist/cli/{prompt-ATI7DKHF.js.map → doctor-OMAYGY4F.js.map} +0 -0
  136. /package/dist/cli/{events-LBKMLFM4.js.map → events-5IVFJ4H3.js.map} +0 -0
  137. /package/dist/cli/{mcp-DKEJK5ND.js.map → mcp-ECGJACAP.js.map} +0 -0
  138. /package/dist/cli/{mcp-inspect-MTABNHVM.js.map → mcp-inspect-ZIMNRG7G.js.map} +0 -0
  139. /package/dist/cli/{stats-OFCGOQMZ.js.map → prompt-JCC3A7AA.js.map} +0 -0
  140. /package/dist/cli/{prune-sessions-YQQSZTZS.js.map → prune-sessions-TE4BJYO2.js.map} +0 -0
  141. /package/dist/cli/{run-HFPRNWJY.js.map → run-ABQYOPVM.js.map} +0 -0
  142. /package/dist/cli/{sessions-IQEWWUH3.js.map → sessions-YBPRGIAF.js.map} +0 -0
  143. /package/dist/cli/{version-EODUFAAI.js.map → version-JD6QSM4X.js.map} +0 -0
@@ -2,10 +2,13 @@
2
2
  import { createRequire as __cr } from 'node:module'; if (typeof globalThis.require === 'undefined') { globalThis.require = __cr(import.meta.url); }
3
3
  import {
4
4
  formatTokens
5
- } from "./chunk-77JIQ7SL.js";
5
+ } from "./chunk-EQFZIHKJ.js";
6
6
  import {
7
7
  loadOverlay
8
8
  } from "./chunk-JMBMLOBP.js";
9
+ import {
10
+ renderDashboard
11
+ } from "./chunk-APOSDBAU.js";
9
12
  import {
10
13
  MANUAL_UPDATE_COMMANDS,
11
14
  planUpdate
@@ -32,11 +35,11 @@ import {
32
35
  restoreCheckpoint,
33
36
  savePlanState,
34
37
  suggestSlashCommands
35
- } from "./chunk-B4MOGWHW.js";
38
+ } from "./chunk-4EHRIP5U.js";
36
39
  import {
37
40
  eventLogPath,
38
41
  openEventSink
39
- } from "./chunk-XNMXVL6C.js";
42
+ } from "./chunk-FB27YXPX.js";
40
43
  import {
41
44
  fetchSmitheryDetail,
42
45
  loadMorePages,
@@ -50,20 +53,20 @@ import {
50
53
  formatQQModeLabel,
51
54
  formatQQSetupPrompt,
52
55
  formatQQSetupWaiting
53
- } from "./chunk-MVLPXZAA.js";
56
+ } from "./chunk-GOASYYZ4.js";
54
57
  import {
55
58
  Eventizer,
56
59
  autoResolveVerdict,
57
60
  registerSkillTools,
58
61
  shouldAutoResolveCheckpoint
59
- } from "./chunk-XBYHNZ5Z.js";
62
+ } from "./chunk-GMQVINZK.js";
60
63
  import {
61
64
  formatMcpLifecycleEvent,
62
65
  formatMcpSlowToast
63
- } from "./chunk-CFJY64UA.js";
66
+ } from "./chunk-LRO63VNK.js";
64
67
  import {
65
68
  buildTransportFromSpec
66
- } from "./chunk-XUZHBQSM.js";
69
+ } from "./chunk-MQJR7YQ2.js";
67
70
  import {
68
71
  dumpStartupProfile,
69
72
  markPhase,
@@ -96,15 +99,15 @@ import {
96
99
  toWholeFileEditBlock,
97
100
  walkFilesStream,
98
101
  webFetch
99
- } from "./chunk-HNZ4727T.js";
102
+ } from "./chunk-DFHI2MRB.js";
103
+ import {
104
+ McpClient
105
+ } from "./chunk-4SBXAHR6.js";
100
106
  import {
101
107
  openTranscriptFile,
102
108
  recordFromLoopEvent,
103
109
  writeRecord
104
- } from "./chunk-D6WRFR6V.js";
105
- import {
106
- McpClient
107
- } from "./chunk-RCC73DWQ.js";
110
+ } from "./chunk-R7JMQMLD.js";
108
111
  import {
109
112
  BUILTIN_ALLOWLIST,
110
113
  derivePrefix,
@@ -114,7 +117,18 @@ import {
114
117
  runCommand,
115
118
  stripCompactionMarker,
116
119
  toApprovalPrompt
117
- } from "./chunk-5YLEKX2V.js";
120
+ } from "./chunk-4V4TKQMB.js";
121
+ import {
122
+ aggregateUsage,
123
+ appendUsage,
124
+ defaultUsageLogPath,
125
+ readUsageLog
126
+ } from "./chunk-FK7NXDRP.js";
127
+ import {
128
+ DEEPSEEK_CONTEXT_TOKENS,
129
+ DEFAULT_CONTEXT_TOKENS,
130
+ pricingFor
131
+ } from "./chunk-V4AXMN4X.js";
118
132
  import {
119
133
  MemoryStore,
120
134
  PROJECT_MEMORY_FILE,
@@ -123,12 +137,12 @@ import {
123
137
  memoryEnabled,
124
138
  readProjectMemory,
125
139
  resolveProjectMemoryWritePath
126
- } from "./chunk-DLTE4GBY.js";
140
+ } from "./chunk-J4MYMBJ7.js";
127
141
  import {
128
142
  KeystrokeProvider,
129
143
  SingleSelect,
130
144
  useKeystroke
131
- } from "./chunk-CGVW5W7N.js";
145
+ } from "./chunk-EPIHGOM3.js";
132
146
  import {
133
147
  COLOR,
134
148
  GLYPH,
@@ -136,29 +150,33 @@ import {
136
150
  ThemeProvider,
137
151
  useColor,
138
152
  useThemeTokens
139
- } from "./chunk-RHQOGG43.js";
153
+ } from "./chunk-OHSVEXFF.js";
140
154
  import {
141
- An,
142
- Cv,
143
- L,
144
- W,
145
- Wi,
146
- Wo,
147
- bv,
148
- fc,
155
+ Box_default,
156
+ Link,
157
+ Static,
158
+ Text,
159
+ renderSync,
149
160
  require_react,
150
161
  source_default,
151
162
  stringWidth,
152
- vv,
153
- wv
154
- } from "./chunk-3OXD5CBM.js";
163
+ useAnimationFrame,
164
+ useBoxMetrics,
165
+ useStdout,
166
+ use_app_default,
167
+ use_stdin_default
168
+ } from "./chunk-A6GSOADP.js";
155
169
  import {
156
170
  runDoctorChecks
157
- } from "./chunk-HI6THNAZ.js";
171
+ } from "./chunk-TGP7JGHN.js";
158
172
  import {
159
173
  countTokensBounded,
160
174
  warmupTokenizer
161
175
  } from "./chunk-BOWSNGQC.js";
176
+ import {
177
+ DeepSeekClient,
178
+ pickPrimaryBalance
179
+ } from "./chunk-QSKDP3OS.js";
162
180
  import {
163
181
  HOOK_EVENTS,
164
182
  formatHookOutcomeMessage,
@@ -166,7 +184,7 @@ import {
166
184
  loadHooks,
167
185
  projectSettingsPath,
168
186
  runHooks
169
- } from "./chunk-CPCUMMSR.js";
187
+ } from "./chunk-NVI4XPOQ.js";
170
188
  import {
171
189
  deleteSession,
172
190
  detectGitBranch,
@@ -183,7 +201,7 @@ import {
183
201
  sessionPath,
184
202
  sessionsDir,
185
203
  timestampSuffix
186
- } from "./chunk-AMSK3ZLB.js";
204
+ } from "./chunk-P5SUHDUQ.js";
187
205
  import {
188
206
  VERSION,
189
207
  compareVersions,
@@ -191,27 +209,9 @@ import {
191
209
  detectNpmInstallPrefix,
192
210
  getLatestVersion
193
211
  } from "./chunk-XXC2BYTV.js";
194
- import {
195
- DeepSeekClient,
196
- pickPrimaryBalance
197
- } from "./chunk-GFJJEW3Z.js";
198
212
  import {
199
213
  loadDotenv
200
214
  } from "./chunk-2UQP6H6T.js";
201
- import {
202
- renderDashboard
203
- } from "./chunk-Z663GVUB.js";
204
- import {
205
- aggregateUsage,
206
- appendUsage,
207
- defaultUsageLogPath,
208
- readUsageLog
209
- } from "./chunk-ARBGTNHM.js";
210
- import {
211
- DEEPSEEK_CONTEXT_TOKENS,
212
- DEFAULT_CONTEXT_TOKENS,
213
- pricingFor
214
- } from "./chunk-6QBUXA73.js";
215
215
  import {
216
216
  getLanguage,
217
217
  getSupportedLanguages,
@@ -220,7 +220,7 @@ import {
220
220
  setLanguage,
221
221
  t,
222
222
  tObj
223
- } from "./chunk-CLHMV6OL.js";
223
+ } from "./chunk-U7G72DHQ.js";
224
224
  import {
225
225
  CARD,
226
226
  FG,
@@ -243,6 +243,7 @@ import {
243
243
  isThemeName,
244
244
  listThemeNames,
245
245
  loadApiKey,
246
+ loadBraveApiKey,
246
247
  loadEditMode,
247
248
  loadEndpoint,
248
249
  loadEngineeringLifecycleMode,
@@ -250,6 +251,7 @@ import {
250
251
  loadHistoryScrollMode,
251
252
  loadMetasoApiKey,
252
253
  loadMouseWheelRows,
254
+ loadOllamaApiKey,
253
255
  loadPerplexityApiKey,
254
256
  loadProjectShellAllowed,
255
257
  loadQQConfig,
@@ -283,7 +285,7 @@ import {
283
285
  webSearchEndpoint,
284
286
  webSearchEngine,
285
287
  writeConfig
286
- } from "./chunk-AOYUW3HR.js";
288
+ } from "./chunk-GCNBIWK7.js";
287
289
  import {
288
290
  __commonJS,
289
291
  __require,
@@ -45771,10 +45773,10 @@ function BootSplash() {
45771
45773
  const waveOffset = frame % 4;
45772
45774
  const wave = WAVE_SOURCE.slice(waveOffset, waveOffset + WAVE_WIDTH);
45773
45775
  const dots = ".".repeat(frame % 4 + 1);
45774
- return /* @__PURE__ */ import_react2.default.createElement(W, { flexDirection: "column", alignItems: "center", marginY: 1 }, /* @__PURE__ */ import_react2.default.createElement(W, { flexDirection: "column", alignItems: "flex-start", marginBottom: 1 }, REASONIX_LOGO.map((line) => /* @__PURE__ */ import_react2.default.createElement(L, { key: line, color: TONE.brand, bold: true }, line))), /* @__PURE__ */ import_react2.default.createElement(W, { flexDirection: "column", alignItems: "flex-start" }, spout.map((line, i) => (
45776
+ return /* @__PURE__ */ import_react2.default.createElement(Box_default, { flexDirection: "column", alignItems: "center", marginY: 1 }, /* @__PURE__ */ import_react2.default.createElement(Box_default, { flexDirection: "column", alignItems: "flex-start", marginBottom: 1 }, REASONIX_LOGO.map((line) => /* @__PURE__ */ import_react2.default.createElement(Text, { key: line, color: TONE.brand, bold: true }, line))), /* @__PURE__ */ import_react2.default.createElement(Box_default, { flexDirection: "column", alignItems: "flex-start" }, spout.map((line, i) => (
45775
45777
  // biome-ignore lint/suspicious/noArrayIndexKey: fixed-length spout column, position is the identity
45776
- /* @__PURE__ */ import_react2.default.createElement(L, { key: i, color: TONE.accent }, line.length > 0 ? line : " ")
45777
- )), WHALE_LINES.map((line) => /* @__PURE__ */ import_react2.default.createElement(L, { key: line, color: TONE.brand, bold: true }, line)), /* @__PURE__ */ import_react2.default.createElement(L, { color: FG.faint }, wave)), /* @__PURE__ */ import_react2.default.createElement(W, { marginTop: 1 }, /* @__PURE__ */ import_react2.default.createElement(L, { color: FG.meta }, `${t("common.loading")}${dots}`)));
45778
+ /* @__PURE__ */ import_react2.default.createElement(Text, { key: i, color: TONE.accent }, line.length > 0 ? line : " ")
45779
+ )), WHALE_LINES.map((line) => /* @__PURE__ */ import_react2.default.createElement(Text, { key: line, color: TONE.brand, bold: true }, line)), /* @__PURE__ */ import_react2.default.createElement(Text, { color: FG.faint }, wave)), /* @__PURE__ */ import_react2.default.createElement(Box_default, { marginTop: 1 }, /* @__PURE__ */ import_react2.default.createElement(Text, { color: FG.meta }, `${t("common.loading")}${dots}`)));
45778
45780
  }
45779
45781
 
45780
45782
  // src/cli/ui/CheckpointPicker.tsx
@@ -45826,7 +45828,7 @@ function CheckpointPicker({
45826
45828
  pickerPorts
45827
45829
  }) {
45828
45830
  const [focus, setFocus] = (0, import_react4.useState)(0);
45829
- const { stdout } = bv();
45831
+ const { stdout } = useStdout();
45830
45832
  const rows = stdout?.rows ?? 40;
45831
45833
  const visibleCount = Math.max(3, rows - PAGE_MARGIN);
45832
45834
  const snapshot = (0, import_react4.useMemo)(
@@ -45887,7 +45889,7 @@ function CheckpointPicker({
45887
45889
  const end = Math.min(checkpoints.length, start + visibleCount);
45888
45890
  const shown = checkpoints.slice(start, end);
45889
45891
  const hiddenBelow = checkpoints.length - end;
45890
- return /* @__PURE__ */ import_react4.default.createElement(W, { flexDirection: "column", marginY: 1 }, /* @__PURE__ */ import_react4.default.createElement(W, null, /* @__PURE__ */ import_react4.default.createElement(L, { bold: true, color: TONE.brand }, t("checkpointPicker.header")), /* @__PURE__ */ import_react4.default.createElement(L, { color: FG.meta }, ` \xB7 ${workspace}`)), /* @__PURE__ */ import_react4.default.createElement(W, { height: 1 }), checkpoints.length === 0 ? /* @__PURE__ */ import_react4.default.createElement(W, null, /* @__PURE__ */ import_react4.default.createElement(L, { color: FG.faint }, t("checkpointPicker.empty"))) : shown.map((c, i) => /* @__PURE__ */ import_react4.default.createElement(CheckpointRow, { key: c.id, info: c, focused: start + i === focus })), hiddenBelow > 0 ? /* @__PURE__ */ import_react4.default.createElement(W, null, /* @__PURE__ */ import_react4.default.createElement(L, { color: FG.faint }, t("checkpointPicker.more", { hidden: hiddenBelow }))) : null, /* @__PURE__ */ import_react4.default.createElement(W, { marginTop: 1 }, /* @__PURE__ */ import_react4.default.createElement(L, { color: FG.faint }, checkpoints.length === 0 ? t("checkpointPicker.footerEmpty") : t("checkpointPicker.footer"))));
45892
+ return /* @__PURE__ */ import_react4.default.createElement(Box_default, { flexDirection: "column", marginY: 1 }, /* @__PURE__ */ import_react4.default.createElement(Box_default, null, /* @__PURE__ */ import_react4.default.createElement(Text, { bold: true, color: TONE.brand }, t("checkpointPicker.header")), /* @__PURE__ */ import_react4.default.createElement(Text, { color: FG.meta }, ` \xB7 ${workspace}`)), /* @__PURE__ */ import_react4.default.createElement(Box_default, { height: 1 }), checkpoints.length === 0 ? /* @__PURE__ */ import_react4.default.createElement(Box_default, null, /* @__PURE__ */ import_react4.default.createElement(Text, { color: FG.faint }, t("checkpointPicker.empty"))) : shown.map((c, i) => /* @__PURE__ */ import_react4.default.createElement(CheckpointRow, { key: c.id, info: c, focused: start + i === focus })), hiddenBelow > 0 ? /* @__PURE__ */ import_react4.default.createElement(Box_default, null, /* @__PURE__ */ import_react4.default.createElement(Text, { color: FG.faint }, t("checkpointPicker.more", { hidden: hiddenBelow }))) : null, /* @__PURE__ */ import_react4.default.createElement(Box_default, { marginTop: 1 }, /* @__PURE__ */ import_react4.default.createElement(Text, { color: FG.faint }, checkpoints.length === 0 ? t("checkpointPicker.footerEmpty") : t("checkpointPicker.footer"))));
45891
45893
  }
45892
45894
  function CheckpointRow({
45893
45895
  info,
@@ -45896,8 +45898,8 @@ function CheckpointRow({
45896
45898
  const tag2 = info.source === "manual" ? "" : ` (${info.source})`;
45897
45899
  const sizeKb = (info.bytes / 1024).toFixed(1);
45898
45900
  const time = fmtAgo(info.createdAt);
45899
- return /* @__PURE__ */ import_react4.default.createElement(W, null, /* @__PURE__ */ import_react4.default.createElement(L, { color: focused ? TONE.brand : FG.faint }, focused ? " \u25B8 " : " "), /* @__PURE__ */ import_react4.default.createElement(L, { color: FG.meta }, info.id.slice(0, 7).padEnd(8)), /* @__PURE__ */ import_react4.default.createElement(L, { bold: focused, color: focused ? FG.strong : FG.sub }, info.name), /* @__PURE__ */ import_react4.default.createElement(L, { color: FG.faint }, tag2), /* @__PURE__ */ import_react4.default.createElement(W, { flexGrow: 1 }), /* @__PURE__ */ import_react4.default.createElement(L, { color: FG.faint }, `${time.padStart(8)} \xB7 `), /* @__PURE__ */ import_react4.default.createElement(
45900
- L,
45901
+ return /* @__PURE__ */ import_react4.default.createElement(Box_default, null, /* @__PURE__ */ import_react4.default.createElement(Text, { color: focused ? TONE.brand : FG.faint }, focused ? " \u25B8 " : " "), /* @__PURE__ */ import_react4.default.createElement(Text, { color: FG.meta }, info.id.slice(0, 7).padEnd(8)), /* @__PURE__ */ import_react4.default.createElement(Text, { bold: focused, color: focused ? FG.strong : FG.sub }, info.name), /* @__PURE__ */ import_react4.default.createElement(Text, { color: FG.faint }, tag2), /* @__PURE__ */ import_react4.default.createElement(Box_default, { flexGrow: 1 }), /* @__PURE__ */ import_react4.default.createElement(Text, { color: FG.faint }, `${time.padStart(8)} \xB7 `), /* @__PURE__ */ import_react4.default.createElement(
45902
+ Text,
45901
45903
  {
45902
45904
  color: FG.faint
45903
45905
  },
@@ -45933,8 +45935,8 @@ function ApprovalCard({
45933
45935
  const effectiveFooter = footerHint ?? t("cardLabels.defaultFooter");
45934
45936
  const palette = TONE_PALETTE[tone];
45935
45937
  const headerGlyph = glyph ?? palette.glyph;
45936
- return /* @__PURE__ */ import_react5.default.createElement(W, { flexDirection: "column", marginY: 1, flexShrink: 0 }, /* @__PURE__ */ import_react5.default.createElement(
45937
- W,
45938
+ return /* @__PURE__ */ import_react5.default.createElement(Box_default, { flexDirection: "column", marginY: 1, flexShrink: 0 }, /* @__PURE__ */ import_react5.default.createElement(
45939
+ Box_default,
45938
45940
  {
45939
45941
  flexDirection: "column",
45940
45942
  borderStyle: "round",
@@ -45944,9 +45946,9 @@ function ApprovalCard({
45944
45946
  paddingX: 1,
45945
45947
  flexShrink: 0
45946
45948
  },
45947
- /* @__PURE__ */ import_react5.default.createElement(W, { flexDirection: "row", gap: 1 }, /* @__PURE__ */ import_react5.default.createElement(L, { bold: true, color: palette.color }, headerGlyph), /* @__PURE__ */ import_react5.default.createElement(L, { bold: true, color: FG.strong }, title2), metaRight !== void 0 && /* @__PURE__ */ import_react5.default.createElement(L, { color: metaRightColor ?? FG.faint }, metaRight)),
45948
- /* @__PURE__ */ import_react5.default.createElement(W, { flexDirection: "column", marginTop: 1, flexShrink: 0 }, children)
45949
- ), /* @__PURE__ */ import_react5.default.createElement(W, { paddingX: 2, marginTop: 1, flexShrink: 0 }, /* @__PURE__ */ import_react5.default.createElement(L, { color: FG.faint }, effectiveFooter)));
45949
+ /* @__PURE__ */ import_react5.default.createElement(Box_default, { flexDirection: "row", gap: 1 }, /* @__PURE__ */ import_react5.default.createElement(Text, { bold: true, color: palette.color }, headerGlyph), /* @__PURE__ */ import_react5.default.createElement(Text, { bold: true, color: FG.strong }, title2), metaRight !== void 0 && /* @__PURE__ */ import_react5.default.createElement(Text, { color: metaRightColor ?? FG.faint }, metaRight)),
45950
+ /* @__PURE__ */ import_react5.default.createElement(Box_default, { flexDirection: "column", marginTop: 1, flexShrink: 0 }, children)
45951
+ ), /* @__PURE__ */ import_react5.default.createElement(Box_default, { paddingX: 2, marginTop: 1, flexShrink: 0 }, /* @__PURE__ */ import_react5.default.createElement(Text, { color: FG.faint }, effectiveFooter)));
45950
45952
  }
45951
45953
 
45952
45954
  // src/cli/ui/ChoiceConfirm.tsx
@@ -46043,14 +46045,14 @@ function AtMentionSuggestions({
46043
46045
  const shown = entries.slice(windowStart, windowStart + ROW_WINDOW);
46044
46046
  const hiddenAbove = windowStart;
46045
46047
  const hiddenBelow = total - windowStart - shown.length;
46046
- return /* @__PURE__ */ import_react8.default.createElement(W, { flexDirection: "column", paddingX: 1, marginTop: 1 }, /* @__PURE__ */ import_react8.default.createElement(HeaderRow, { state: state2, hiddenAbove }), total === 0 ? /* @__PURE__ */ import_react8.default.createElement(EmptyRow, { state: state2, color }) : null, shown.map((entry, i) => /* @__PURE__ */ import_react8.default.createElement(
46048
+ return /* @__PURE__ */ import_react8.default.createElement(Box_default, { flexDirection: "column", paddingX: 1, marginTop: 1 }, /* @__PURE__ */ import_react8.default.createElement(HeaderRow, { state: state2, hiddenAbove }), total === 0 ? /* @__PURE__ */ import_react8.default.createElement(EmptyRow, { state: state2, color }) : null, shown.map((entry, i) => /* @__PURE__ */ import_react8.default.createElement(
46047
46049
  EntryRow,
46048
46050
  {
46049
46051
  key: `${entry.insertPath}:${entry.isDir ? "d" : "f"}`,
46050
46052
  entry,
46051
46053
  isSelected: windowStart + i === selectedIndex
46052
46054
  }
46053
- )), hiddenBelow > 0 ? /* @__PURE__ */ import_react8.default.createElement(L, { dimColor: true }, ` \u2193 ${hiddenBelow} below`) : null, /* @__PURE__ */ import_react8.default.createElement(FooterRow, { isBrowse, hasFolder: shown.some((e) => e.isDir) }));
46055
+ )), hiddenBelow > 0 ? /* @__PURE__ */ import_react8.default.createElement(Text, { dim: true }, ` \u2193 ${hiddenBelow} below`) : null, /* @__PURE__ */ import_react8.default.createElement(FooterRow, { isBrowse, hasFolder: shown.some((e) => e.isDir) }));
46054
46056
  }
46055
46057
  function HeaderRow({
46056
46058
  state: state2,
@@ -46058,35 +46060,35 @@ function HeaderRow({
46058
46060
  }) {
46059
46061
  const color = useColor();
46060
46062
  const total = state2.entries.length;
46061
- const lead = /* @__PURE__ */ import_react8.default.createElement(L, { color: color.primary, bold: true }, "@ ");
46063
+ const lead = /* @__PURE__ */ import_react8.default.createElement(Text, { color: color.primary, bold: true }, "@ ");
46062
46064
  if (state2.kind === "browse") {
46063
46065
  const where = state2.baseDir === "" ? "/" : `${state2.baseDir}/`;
46064
46066
  const counter = state2.loading ? t("atMentions.loading") : t(total === 1 ? "atMentions.entrySingular" : "atMentions.entryPlural", { count: total });
46065
- return /* @__PURE__ */ import_react8.default.createElement(W, null, lead, /* @__PURE__ */ import_react8.default.createElement(L, { dimColor: true }, `${where} ${counter}`), hiddenAbove > 0 ? /* @__PURE__ */ import_react8.default.createElement(L, { dimColor: true }, ` \u2191 ${hiddenAbove} above`) : null);
46067
+ return /* @__PURE__ */ import_react8.default.createElement(Box_default, null, lead, /* @__PURE__ */ import_react8.default.createElement(Text, { dim: true }, `${where} ${counter}`), hiddenAbove > 0 ? /* @__PURE__ */ import_react8.default.createElement(Text, { dim: true }, ` \u2191 ${hiddenAbove} above`) : null);
46066
46068
  }
46067
46069
  const status2 = state2.searching ? `${t("atMentions.searching")} ${state2.scanned} ${t("atMentions.scanned")} \xB7 ${total} ${total === 1 ? t("atMentions.match") : t("atMentions.matches")}` : `${total} ${total === 1 ? t("atMentions.match") : t("atMentions.matches")} ${t("atMentions.forFilter", { filter: state2.filter })}`;
46068
- return /* @__PURE__ */ import_react8.default.createElement(W, null, lead, /* @__PURE__ */ import_react8.default.createElement(L, { dimColor: true }, status2), hiddenAbove > 0 ? /* @__PURE__ */ import_react8.default.createElement(L, { dimColor: true }, ` \u2191 ${hiddenAbove} above`) : null);
46070
+ return /* @__PURE__ */ import_react8.default.createElement(Box_default, null, lead, /* @__PURE__ */ import_react8.default.createElement(Text, { dim: true }, status2), hiddenAbove > 0 ? /* @__PURE__ */ import_react8.default.createElement(Text, { dim: true }, ` \u2191 ${hiddenAbove} above`) : null);
46069
46071
  }
46070
46072
  function EmptyRow({ state: state2, color }) {
46071
46073
  if (state2.kind === "browse") {
46072
46074
  if (state2.loading) return null;
46073
- return /* @__PURE__ */ import_react8.default.createElement(W, null, /* @__PURE__ */ import_react8.default.createElement(L, { color: color.warn, bold: true }, GLYPH.warn), /* @__PURE__ */ import_react8.default.createElement(L, null, " "), /* @__PURE__ */ import_react8.default.createElement(L, { color: color.warn }, t("atMentions.emptyDir")));
46075
+ return /* @__PURE__ */ import_react8.default.createElement(Box_default, null, /* @__PURE__ */ import_react8.default.createElement(Text, { color: color.warn, bold: true }, GLYPH.warn), /* @__PURE__ */ import_react8.default.createElement(Text, null, " "), /* @__PURE__ */ import_react8.default.createElement(Text, { color: color.warn }, t("atMentions.emptyDir")));
46074
46076
  }
46075
46077
  if (state2.searching) {
46076
- return /* @__PURE__ */ import_react8.default.createElement(W, null, /* @__PURE__ */ import_react8.default.createElement(L, { dimColor: true }, t("atMentions.scanning")));
46078
+ return /* @__PURE__ */ import_react8.default.createElement(Box_default, null, /* @__PURE__ */ import_react8.default.createElement(Text, { dim: true }, t("atMentions.scanning")));
46077
46079
  }
46078
- return /* @__PURE__ */ import_react8.default.createElement(W, null, /* @__PURE__ */ import_react8.default.createElement(L, { color: color.warn, bold: true }, GLYPH.warn), /* @__PURE__ */ import_react8.default.createElement(L, null, " "), /* @__PURE__ */ import_react8.default.createElement(L, { color: color.warn }, t("atMentions.noMatch", { filter: state2.filter })));
46080
+ return /* @__PURE__ */ import_react8.default.createElement(Box_default, null, /* @__PURE__ */ import_react8.default.createElement(Text, { color: color.warn, bold: true }, GLYPH.warn), /* @__PURE__ */ import_react8.default.createElement(Text, null, " "), /* @__PURE__ */ import_react8.default.createElement(Text, { color: color.warn }, t("atMentions.noMatch", { filter: state2.filter })));
46079
46081
  }
46080
46082
  function EntryRow({ entry, isSelected }) {
46081
46083
  const color = useColor();
46082
46084
  const cursor = isSelected ? `${GLYPH.cur} ` : " ";
46083
46085
  const labelColor = entry.isDir ? color.accent : color.primary;
46084
46086
  const labelText = entry.isDir ? `${entry.label}/` : entry.label;
46085
- return /* @__PURE__ */ import_react8.default.createElement(W, { backgroundColor: isSelected ? SURFACE.bgElev : void 0 }, /* @__PURE__ */ import_react8.default.createElement(L, { color: isSelected ? color.primary : color.info, bold: isSelected }, cursor), /* @__PURE__ */ import_react8.default.createElement(L, { color: labelColor, bold: isSelected }, labelText.padEnd(20)), entry.dirSuffix ? /* @__PURE__ */ import_react8.default.createElement(L, { dimColor: true }, ` ${entry.dirSuffix}`) : null);
46087
+ return /* @__PURE__ */ import_react8.default.createElement(Box_default, { backgroundColor: isSelected ? SURFACE.bgElev : void 0 }, /* @__PURE__ */ import_react8.default.createElement(Text, { color: isSelected ? color.primary : color.info, bold: isSelected }, cursor), /* @__PURE__ */ import_react8.default.createElement(Text, { color: labelColor, bold: isSelected }, labelText.padEnd(20)), entry.dirSuffix ? /* @__PURE__ */ import_react8.default.createElement(Text, { dim: true }, ` ${entry.dirSuffix}`) : null);
46086
46088
  }
46087
46089
  function FooterRow({ isBrowse, hasFolder }) {
46088
46090
  const hintKey = isBrowse && hasFolder ? "atMentions.footerBrowse" : "atMentions.footerInsert";
46089
- return /* @__PURE__ */ import_react8.default.createElement(W, { marginTop: 0 }, /* @__PURE__ */ import_react8.default.createElement(L, { dimColor: true }, ` ${t(hintKey)}`));
46091
+ return /* @__PURE__ */ import_react8.default.createElement(Box_default, { marginTop: 0 }, /* @__PURE__ */ import_react8.default.createElement(Text, { dim: true }, ` ${t(hintKey)}`));
46090
46092
  }
46091
46093
 
46092
46094
  // src/cli/ui/PromptInput.tsx
@@ -46651,7 +46653,7 @@ function PromptInput({
46651
46653
  if (action.historyHandoff === "next") onHistoryNext?.();
46652
46654
  if (action.openExternalEditor) onOpenExternalEditor?.();
46653
46655
  }, inputActive);
46654
- const { stdout } = bv();
46656
+ const { stdout } = useStdout();
46655
46657
  const cols = stdout?.columns ?? 80;
46656
46658
  const promptPrefix = "\u203A ";
46657
46659
  const continuationIndent = " ";
@@ -46673,7 +46675,7 @@ function PromptInput({
46673
46675
  return parts.length > 0 ? ` ${parts.join(source_default.hex(FG.faint)(" \xB7 "))} ` : void 0;
46674
46676
  })();
46675
46677
  return /* @__PURE__ */ import_react9.default.createElement(
46676
- W,
46678
+ Box_default,
46677
46679
  {
46678
46680
  flexDirection: "column",
46679
46681
  paddingX: 1,
@@ -46684,14 +46686,14 @@ function PromptInput({
46684
46686
  borderText: borderLabel ? { content: borderLabel, position: "top", align: "end", offset: 2 } : void 0,
46685
46687
  width: "100%"
46686
46688
  },
46687
- /* @__PURE__ */ import_react9.default.createElement(W, { flexDirection: "column", flexGrow: 1 }, (() => {
46689
+ /* @__PURE__ */ import_react9.default.createElement(Box_default, { flexDirection: "column", flexGrow: 1 }, (() => {
46688
46690
  const rows = [];
46689
46691
  let firstRowEmitted = false;
46690
46692
  for (let renderIdx = 0; renderIdx < renderItems.length; renderIdx++) {
46691
46693
  const item = renderItems[renderIdx];
46692
46694
  if (item.kind === "skip") {
46693
46695
  rows.push(
46694
- /* @__PURE__ */ import_react9.default.createElement(W, { key: `skip-${renderIdx}` }, /* @__PURE__ */ import_react9.default.createElement(L, { color: FG.faint }, continuationIndent), /* @__PURE__ */ import_react9.default.createElement(L, { color: FG.faint }, `[\u2026 ${item.linesHidden} line${item.linesHidden === 1 ? "" : "s"} hidden \u2014 full content kept, submitted on Enter \u2026]`))
46696
+ /* @__PURE__ */ import_react9.default.createElement(Box_default, { key: `skip-${renderIdx}` }, /* @__PURE__ */ import_react9.default.createElement(Text, { color: FG.faint }, continuationIndent), /* @__PURE__ */ import_react9.default.createElement(Text, { color: FG.faint }, `[\u2026 ${item.linesHidden} line${item.linesHidden === 1 ? "" : "s"} hidden \u2014 full content kept, submitted on Enter \u2026]`))
46695
46697
  );
46696
46698
  continue;
46697
46699
  }
@@ -46800,7 +46802,7 @@ function PromptInput({
46800
46802
  }
46801
46803
  }
46802
46804
  return rows;
46803
- })(), showHugeBufferHints && inputActive ? /* @__PURE__ */ import_react9.default.createElement(W, null, /* @__PURE__ */ import_react9.default.createElement(L, { color: FG.faint }, ` [${lines.length} lines \xB7 PgUp/PgDn jump \xB7 Ctrl+U clear \xB7 Ctrl+W del word]`)) : null, inputFrozen ? /* @__PURE__ */ import_react9.default.createElement(W, { marginTop: 1 }, /* @__PURE__ */ import_react9.default.createElement(L, { color: FG.faint }, " esc to stop")) : null, steerBusy ? /* @__PURE__ */ import_react9.default.createElement(W, { marginTop: 1, flexDirection: "row" }, /* @__PURE__ */ import_react9.default.createElement(L, { color: TONE.accent }, " \u23CE "), /* @__PURE__ */ import_react9.default.createElement(L, { color: FG.faint }, t("composer.steerHint")), /* @__PURE__ */ import_react9.default.createElement(L, { color: FG.faint }, " \xB7 "), /* @__PURE__ */ import_react9.default.createElement(L, { color: FG.faint }, "esc to stop")) : null)
46805
+ })(), showHugeBufferHints && inputActive ? /* @__PURE__ */ import_react9.default.createElement(Box_default, null, /* @__PURE__ */ import_react9.default.createElement(Text, { color: FG.faint }, ` [${lines.length} lines \xB7 PgUp/PgDn jump \xB7 Ctrl+U clear \xB7 Ctrl+W del word]`)) : null, inputFrozen ? /* @__PURE__ */ import_react9.default.createElement(Box_default, { marginTop: 1 }, /* @__PURE__ */ import_react9.default.createElement(Text, { color: FG.faint }, " esc to stop")) : null, steerBusy ? /* @__PURE__ */ import_react9.default.createElement(Box_default, { marginTop: 1, flexDirection: "row" }, /* @__PURE__ */ import_react9.default.createElement(Text, { color: TONE.accent }, " \u23CE "), /* @__PURE__ */ import_react9.default.createElement(Text, { color: FG.faint }, t("composer.steerHint")), /* @__PURE__ */ import_react9.default.createElement(Text, { color: FG.faint }, " \xB7 "), /* @__PURE__ */ import_react9.default.createElement(Text, { color: FG.faint }, "esc to stop")) : null)
46804
46806
  );
46805
46807
  }
46806
46808
  function splitLineByPastes(line) {
@@ -46838,9 +46840,9 @@ function PasteChipRow({
46838
46840
  const leadColor = isFirst ? accentColor : FG.faint;
46839
46841
  const labelText = formatChipLabel(entry, pasteId, visibleCells - 6);
46840
46842
  if (active2) {
46841
- return /* @__PURE__ */ import_react9.default.createElement(W, null, /* @__PURE__ */ import_react9.default.createElement(L, { bold: true, color: leadColor }, lead), /* @__PURE__ */ import_react9.default.createElement(L, { bold: true, color: accentColor }, "\u25B8 "), /* @__PURE__ */ import_react9.default.createElement(L, { bold: true, color: "black", backgroundColor: accentColor }, ` ${labelText} `));
46843
+ return /* @__PURE__ */ import_react9.default.createElement(Box_default, null, /* @__PURE__ */ import_react9.default.createElement(Text, { bold: true, color: leadColor }, lead), /* @__PURE__ */ import_react9.default.createElement(Text, { bold: true, color: accentColor }, "\u25B8 "), /* @__PURE__ */ import_react9.default.createElement(Text, { bold: true, color: "ansi:black", backgroundColor: accentColor }, ` ${labelText} `));
46842
46844
  }
46843
- return /* @__PURE__ */ import_react9.default.createElement(W, null, /* @__PURE__ */ import_react9.default.createElement(L, { bold: true, color: leadColor }, lead), /* @__PURE__ */ import_react9.default.createElement(L, { color: FG.faint }, " "), /* @__PURE__ */ import_react9.default.createElement(L, { color: FG.meta }, "\u250C "), /* @__PURE__ */ import_react9.default.createElement(L, { color: FG.body, backgroundColor: SURFACE.bgElev }, `${labelText} `), /* @__PURE__ */ import_react9.default.createElement(L, { color: FG.meta }, " \u2510"));
46845
+ return /* @__PURE__ */ import_react9.default.createElement(Box_default, null, /* @__PURE__ */ import_react9.default.createElement(Text, { bold: true, color: leadColor }, lead), /* @__PURE__ */ import_react9.default.createElement(Text, { color: FG.faint }, " "), /* @__PURE__ */ import_react9.default.createElement(Text, { color: FG.meta }, "\u250C "), /* @__PURE__ */ import_react9.default.createElement(Text, { color: FG.body, backgroundColor: SURFACE.bgElev }, `${labelText} `), /* @__PURE__ */ import_react9.default.createElement(Text, { color: FG.meta }, " \u2510"));
46844
46846
  }
46845
46847
  function formatChipLabel(entry, pasteId, budget2) {
46846
46848
  if (!entry) return `\u{1F4CB} paste #${pasteId + 1} \xB7 (missing)`;
@@ -46886,10 +46888,10 @@ function PromptLine({
46886
46888
  }) {
46887
46889
  const promptActive = !disabled || !!steerBusy;
46888
46890
  if (showPlaceholder) {
46889
- return /* @__PURE__ */ import_react9.default.createElement(W, null, /* @__PURE__ */ import_react9.default.createElement(L, { bold: true, color: accentColor }, promptPrefix), promptActive ? /* @__PURE__ */ import_react9.default.createElement(L, { color: accentColor }, cursorVisible ? "\u258C" : " ") : null, /* @__PURE__ */ import_react9.default.createElement(L, { color: FG.faint }, placeholderText));
46891
+ return /* @__PURE__ */ import_react9.default.createElement(Box_default, null, /* @__PURE__ */ import_react9.default.createElement(Text, { bold: true, color: accentColor }, promptPrefix), promptActive ? /* @__PURE__ */ import_react9.default.createElement(Text, { color: accentColor }, cursorVisible ? "\u258C" : " ") : null, /* @__PURE__ */ import_react9.default.createElement(Text, { color: FG.faint }, placeholderText));
46890
46892
  }
46891
46893
  const viewport = buildViewport(line, isCursorLine ? cursorCol : null, visibleCells, pastes);
46892
- return /* @__PURE__ */ import_react9.default.createElement(W, null, isFirst ? /* @__PURE__ */ import_react9.default.createElement(L, { bold: true, color: accentColor }, promptPrefix) : /* @__PURE__ */ import_react9.default.createElement(L, { color: FG.faint }, continuationIndent), viewport.hiddenLeft ? /* @__PURE__ */ import_react9.default.createElement(L, { color: FG.faint }, "\u2039") : null, /* @__PURE__ */ import_react9.default.createElement(
46894
+ return /* @__PURE__ */ import_react9.default.createElement(Box_default, null, isFirst ? /* @__PURE__ */ import_react9.default.createElement(Text, { bold: true, color: accentColor }, promptPrefix) : /* @__PURE__ */ import_react9.default.createElement(Text, { color: FG.faint }, continuationIndent), viewport.hiddenLeft ? /* @__PURE__ */ import_react9.default.createElement(Text, { color: FG.faint }, "\u2039") : null, /* @__PURE__ */ import_react9.default.createElement(
46893
46895
  ViewportContent,
46894
46896
  {
46895
46897
  segments: viewport.segments,
@@ -46897,7 +46899,7 @@ function PromptLine({
46897
46899
  accentColor,
46898
46900
  cursorVisible
46899
46901
  }
46900
- ), viewport.hiddenRight ? /* @__PURE__ */ import_react9.default.createElement(L, { color: FG.faint }, "\u203A") : null);
46902
+ ), viewport.hiddenRight ? /* @__PURE__ */ import_react9.default.createElement(Text, { color: FG.faint }, "\u203A") : null);
46901
46903
  }
46902
46904
  function ViewportContent({
46903
46905
  segments,
@@ -46926,7 +46928,7 @@ function ViewportContent({
46926
46928
  if (seg.kind === "paste") {
46927
46929
  out.push(
46928
46930
  /* @__PURE__ */ import_react9.default.createElement(
46929
- L,
46931
+ Text,
46930
46932
  {
46931
46933
  key: `p-${i}-cursor`,
46932
46934
  color: FG.body,
@@ -46943,26 +46945,26 @@ function ViewportContent({
46943
46945
  const offsetIntoSeg = cursorCell - cells;
46944
46946
  const split = splitTextByCells(seg.text, offsetIntoSeg);
46945
46947
  if (split.before.length > 0) {
46946
- out.push(/* @__PURE__ */ import_react9.default.createElement(L, { key: `t-${i}-b` }, split.before));
46948
+ out.push(/* @__PURE__ */ import_react9.default.createElement(Text, { key: `t-${i}-b` }, split.before));
46947
46949
  }
46948
46950
  if (split.atCursor.length > 0) {
46949
46951
  out.push(
46950
- /* @__PURE__ */ import_react9.default.createElement(L, { key: `t-${i}-c`, inverse: cursorVisible, color: accentColor }, split.atCursor)
46952
+ /* @__PURE__ */ import_react9.default.createElement(Text, { key: `t-${i}-c`, inverse: cursorVisible, color: accentColor }, split.atCursor)
46951
46953
  );
46952
46954
  } else {
46953
46955
  out.push(
46954
- /* @__PURE__ */ import_react9.default.createElement(L, { key: `t-${i}-c-eol`, color: accentColor }, cursorVisible ? "\u258C" : " ")
46956
+ /* @__PURE__ */ import_react9.default.createElement(Text, { key: `t-${i}-c-eol`, color: accentColor }, cursorVisible ? "\u258C" : " ")
46955
46957
  );
46956
46958
  }
46957
46959
  if (split.after.length > 0) {
46958
- out.push(/* @__PURE__ */ import_react9.default.createElement(L, { key: `t-${i}-a` }, split.after));
46960
+ out.push(/* @__PURE__ */ import_react9.default.createElement(Text, { key: `t-${i}-a` }, split.after));
46959
46961
  }
46960
46962
  placed = true;
46961
46963
  cells += segCells;
46962
46964
  }
46963
46965
  if (!placed) {
46964
46966
  out.push(
46965
- /* @__PURE__ */ import_react9.default.createElement(L, { key: "cursor-eol", color: accentColor }, cursorVisible ? "\u258C" : " ")
46967
+ /* @__PURE__ */ import_react9.default.createElement(Text, { key: "cursor-eol", color: accentColor }, cursorVisible ? "\u258C" : " ")
46966
46968
  );
46967
46969
  }
46968
46970
  return /* @__PURE__ */ import_react9.default.createElement(import_react9.default.Fragment, null, out);
@@ -47005,9 +47007,9 @@ function charCellsForText(ch) {
47005
47007
  }
47006
47008
  function renderSegment(seg, key, _inverse) {
47007
47009
  if (seg.kind === "text") {
47008
- return /* @__PURE__ */ import_react9.default.createElement(L, { key: `s-${key}`, color: FG.body }, seg.text);
47010
+ return /* @__PURE__ */ import_react9.default.createElement(Text, { key: `s-${key}`, color: FG.body }, seg.text);
47009
47011
  }
47010
- return /* @__PURE__ */ import_react9.default.createElement(L, { key: `s-${key}`, backgroundColor: SURFACE.bgElev, color: FG.body }, seg.label);
47012
+ return /* @__PURE__ */ import_react9.default.createElement(Text, { key: `s-${key}`, backgroundColor: SURFACE.bgElev, color: FG.body }, seg.label);
47011
47013
  }
47012
47014
  var COLLAPSE_THRESHOLD = 20;
47013
47015
  var COLLAPSE_HEAD_LINES = 3;
@@ -47083,7 +47085,7 @@ var SHORTCUT_GROUPS = [
47083
47085
  ];
47084
47086
  function ShortcutsHelpModal() {
47085
47087
  return /* @__PURE__ */ import_react10.default.createElement(
47086
- W,
47088
+ Box_default,
47087
47089
  {
47088
47090
  flexDirection: "column",
47089
47091
  borderStyle: "round",
@@ -47092,16 +47094,16 @@ function ShortcutsHelpModal() {
47092
47094
  paddingY: 0,
47093
47095
  backgroundColor: SURFACE.bg
47094
47096
  },
47095
- /* @__PURE__ */ import_react10.default.createElement(W, { justifyContent: "center" }, /* @__PURE__ */ import_react10.default.createElement(L, { bold: true, color: "#649ed2" }, ` ${t("shortcutsHelp.title")} `)),
47097
+ /* @__PURE__ */ import_react10.default.createElement(Box_default, { justifyContent: "center" }, /* @__PURE__ */ import_react10.default.createElement(Text, { bold: true, color: "#649ed2" }, ` ${t("shortcutsHelp.title")} `)),
47096
47098
  SHORTCUT_GROUPS.map((group, groupIdx) => /* @__PURE__ */ import_react10.default.createElement(
47097
- W,
47099
+ Box_default,
47098
47100
  {
47099
47101
  key: group.titleKey,
47100
47102
  flexDirection: "column",
47101
47103
  marginBottom: groupIdx < SHORTCUT_GROUPS.length - 1 ? 0 : 0
47102
47104
  },
47103
- /* @__PURE__ */ import_react10.default.createElement(L, { color: TONE.accent }, ` ${t(group.titleKey)}`),
47104
- group.items.map((item) => /* @__PURE__ */ import_react10.default.createElement(W, { key: item.keys }, /* @__PURE__ */ import_react10.default.createElement(L, { bold: true, color: "#649ed2" }, ` ${item.keys}`), /* @__PURE__ */ import_react10.default.createElement(L, { color: FG.faint }, ` ${t(item.descKey)}`)))
47105
+ /* @__PURE__ */ import_react10.default.createElement(Text, { color: TONE.accent }, ` ${t(group.titleKey)}`),
47106
+ group.items.map((item) => /* @__PURE__ */ import_react10.default.createElement(Box_default, { key: item.keys }, /* @__PURE__ */ import_react10.default.createElement(Text, { bold: true, color: "#649ed2" }, ` ${item.keys}`), /* @__PURE__ */ import_react10.default.createElement(Text, { color: FG.faint }, ` ${t(item.descKey)}`)))
47105
47107
  ))
47106
47108
  );
47107
47109
  }
@@ -47127,13 +47129,13 @@ function SlashArgPicker({
47127
47129
  const translated = t(descKey);
47128
47130
  return translated === descKey ? spec.summary : translated;
47129
47131
  })();
47130
- const headerRow = /* @__PURE__ */ import_react11.default.createElement(W, null, /* @__PURE__ */ import_react11.default.createElement(L, { color: color.accent, bold: true }, "/ "), /* @__PURE__ */ import_react11.default.createElement(L, { color: color.accent, bold: true }, `/${spec.cmd}`), headerArgsHint ? /* @__PURE__ */ import_react11.default.createElement(L, { dimColor: true }, ` ${headerArgsHint}`) : null, /* @__PURE__ */ import_react11.default.createElement(L, { dimColor: true }, ` ${headerSummary}`));
47132
+ const headerRow = /* @__PURE__ */ import_react11.default.createElement(Box_default, null, /* @__PURE__ */ import_react11.default.createElement(Text, { color: color.accent, bold: true }, "/ "), /* @__PURE__ */ import_react11.default.createElement(Text, { color: color.accent, bold: true }, `/${spec.cmd}`), headerArgsHint ? /* @__PURE__ */ import_react11.default.createElement(Text, { dim: true }, ` ${headerArgsHint}`) : null, /* @__PURE__ */ import_react11.default.createElement(Text, { dim: true }, ` ${headerSummary}`));
47131
47133
  if (kind === "hint") {
47132
- return /* @__PURE__ */ import_react11.default.createElement(W, { paddingX: 1, marginTop: 1 }, headerRow);
47134
+ return /* @__PURE__ */ import_react11.default.createElement(Box_default, { paddingX: 1, marginTop: 1 }, headerRow);
47133
47135
  }
47134
47136
  if (matches === null) return null;
47135
47137
  if (matches.length === 0) {
47136
- return /* @__PURE__ */ import_react11.default.createElement(W, { flexDirection: "column", paddingX: 1, marginTop: 1 }, headerRow, /* @__PURE__ */ import_react11.default.createElement(W, null, /* @__PURE__ */ import_react11.default.createElement(L, { color: color.warn, bold: true }, GLYPH.warn), /* @__PURE__ */ import_react11.default.createElement(L, { color: color.warn }, t("slashArgPicker.noMatch", { partial })), /* @__PURE__ */ import_react11.default.createElement(L, { dimColor: true }, t("slashArgPicker.keepTyping"))));
47138
+ return /* @__PURE__ */ import_react11.default.createElement(Box_default, { flexDirection: "column", paddingX: 1, marginTop: 1 }, headerRow, /* @__PURE__ */ import_react11.default.createElement(Box_default, null, /* @__PURE__ */ import_react11.default.createElement(Text, { color: color.warn, bold: true }, GLYPH.warn), /* @__PURE__ */ import_react11.default.createElement(Text, { color: color.warn }, t("slashArgPicker.noMatch", { partial })), /* @__PURE__ */ import_react11.default.createElement(Text, { dim: true }, t("slashArgPicker.keepTyping"))));
47137
47139
  }
47138
47140
  const MAX = 8;
47139
47141
  const total = matches.length;
@@ -47141,11 +47143,11 @@ function SlashArgPicker({
47141
47143
  const shown = matches.slice(windowStart, windowStart + MAX);
47142
47144
  const hiddenAbove = windowStart;
47143
47145
  const hiddenBelow = total - windowStart - shown.length;
47144
- return /* @__PURE__ */ import_react11.default.createElement(W, { flexDirection: "column", paddingX: 1, marginTop: 1 }, headerRow, hiddenAbove > 0 ? /* @__PURE__ */ import_react11.default.createElement(L, { dimColor: true }, t("slashArgPicker.above", { hidden: hiddenAbove })) : null, shown.map((value, i) => {
47146
+ return /* @__PURE__ */ import_react11.default.createElement(Box_default, { flexDirection: "column", paddingX: 1, marginTop: 1 }, headerRow, hiddenAbove > 0 ? /* @__PURE__ */ import_react11.default.createElement(Text, { dim: true }, t("slashArgPicker.above", { hidden: hiddenAbove })) : null, shown.map((value, i) => {
47145
47147
  const idx = windowStart + i;
47146
47148
  const isDir = pathCandidates?.[idx]?.isDir ?? false;
47147
47149
  return /* @__PURE__ */ import_react11.default.createElement(ArgRow, { key: value, value, isSelected: idx === selectedIndex, isDir });
47148
- }), hiddenBelow > 0 ? /* @__PURE__ */ import_react11.default.createElement(L, { dimColor: true }, t("slashArgPicker.below", { hidden: hiddenBelow })) : null, /* @__PURE__ */ import_react11.default.createElement(W, { marginTop: 0 }, /* @__PURE__ */ import_react11.default.createElement(L, { dimColor: true }, t("slashArgPicker.footer"))));
47150
+ }), hiddenBelow > 0 ? /* @__PURE__ */ import_react11.default.createElement(Text, { dim: true }, t("slashArgPicker.below", { hidden: hiddenBelow })) : null, /* @__PURE__ */ import_react11.default.createElement(Box_default, { marginTop: 0 }, /* @__PURE__ */ import_react11.default.createElement(Text, { dim: true }, t("slashArgPicker.footer"))));
47149
47151
  }
47150
47152
  function ArgRow({
47151
47153
  value,
@@ -47153,7 +47155,7 @@ function ArgRow({
47153
47155
  isDir
47154
47156
  }) {
47155
47157
  const color = useColor();
47156
- return /* @__PURE__ */ import_react11.default.createElement(W, { backgroundColor: isSelected ? SURFACE.bgElev : void 0 }, /* @__PURE__ */ import_react11.default.createElement(L, { color: isSelected ? color.primary : color.info, bold: isSelected }, isSelected ? `${GLYPH.cur} ` : " "), /* @__PURE__ */ import_react11.default.createElement(L, { color: isSelected ? color.user : color.info, bold: isSelected, dimColor: !isSelected }, value), isDir ? /* @__PURE__ */ import_react11.default.createElement(L, { dimColor: true }, "/") : null);
47158
+ return /* @__PURE__ */ import_react11.default.createElement(Box_default, { backgroundColor: isSelected ? SURFACE.bgElev : void 0 }, /* @__PURE__ */ import_react11.default.createElement(Text, { color: isSelected ? color.primary : color.info, bold: isSelected }, isSelected ? `${GLYPH.cur} ` : " "), /* @__PURE__ */ import_react11.default.createElement(Text, { color: isSelected ? color.user : color.info, bold: isSelected, dim: !isSelected }, value), isDir ? /* @__PURE__ */ import_react11.default.createElement(Text, { dim: true }, "/") : null);
47157
47159
  }
47158
47160
 
47159
47161
  // src/cli/ui/SlashSuggestions.tsx
@@ -47173,7 +47175,7 @@ function SlashSuggestions({
47173
47175
  advancedHidden
47174
47176
  }) {
47175
47177
  const color = useColor();
47176
- const { stdout } = bv();
47178
+ const { stdout } = useStdout();
47177
47179
  const cols = stdout?.columns ?? 80;
47178
47180
  const [rememberedWindowStart, setRememberedWindowStart] = import_react12.default.useState(0);
47179
47181
  const maxRows = groupMode ? GROUP_MODE_MAX_ROWS : SEARCH_MODE_MAX_ROWS;
@@ -47190,17 +47192,17 @@ function SlashSuggestions({
47190
47192
  }, [windowStart]);
47191
47193
  if (matches === null) return null;
47192
47194
  if (matches.length === 0) {
47193
- return /* @__PURE__ */ import_react12.default.createElement(W, { paddingX: 1, marginTop: 1 }, /* @__PURE__ */ import_react12.default.createElement(L, { color: color.warn, bold: true }, GLYPH.warn), /* @__PURE__ */ import_react12.default.createElement(L, null, " "), /* @__PURE__ */ import_react12.default.createElement(L, { color: color.warn }, t("slashSuggestions.noMatch")), /* @__PURE__ */ import_react12.default.createElement(L, { dimColor: true }, t("slashSuggestions.backspaceHint")));
47195
+ return /* @__PURE__ */ import_react12.default.createElement(Box_default, { paddingX: 1, marginTop: 1 }, /* @__PURE__ */ import_react12.default.createElement(Text, { color: color.warn, bold: true }, GLYPH.warn), /* @__PURE__ */ import_react12.default.createElement(Text, null, " "), /* @__PURE__ */ import_react12.default.createElement(Text, { color: color.warn }, t("slashSuggestions.noMatch")), /* @__PURE__ */ import_react12.default.createElement(Text, { dim: true }, t("slashSuggestions.backspaceHint")));
47194
47196
  }
47195
47197
  const total = matches.length;
47196
47198
  const items = buildVisibleItems(matches, windowStart, maxRows, groupMode);
47197
47199
  const shownCommands = items.filter((item) => item.kind === "command");
47198
47200
  const hiddenAbove = windowStart;
47199
47201
  const hiddenBelow = total - windowStart - shownCommands.length;
47200
- return /* @__PURE__ */ import_react12.default.createElement(W, { flexDirection: "column", paddingX: 1, marginTop: 1, flexShrink: 0, flexWrap: "nowrap" }, /* @__PURE__ */ import_react12.default.createElement(W, null, /* @__PURE__ */ import_react12.default.createElement(L, { color: color.accent, bold: true }, "/ "), /* @__PURE__ */ import_react12.default.createElement(L, { dimColor: true }, t(
47202
+ return /* @__PURE__ */ import_react12.default.createElement(Box_default, { flexDirection: "column", paddingX: 1, marginTop: 1, flexShrink: 0, flexWrap: "nowrap" }, /* @__PURE__ */ import_react12.default.createElement(Box_default, null, /* @__PURE__ */ import_react12.default.createElement(Text, { color: color.accent, bold: true }, "/ "), /* @__PURE__ */ import_react12.default.createElement(Text, { dim: true }, t(
47201
47203
  total === 1 ? "slashSuggestions.commandCount" : "slashSuggestions.commandCountPlural",
47202
47204
  { count: total }
47203
- )), hiddenAbove > 0 ? /* @__PURE__ */ import_react12.default.createElement(L, { dimColor: true }, t("slashSuggestions.aboveLabel", { count: hiddenAbove })) : null), items.map((item) => {
47205
+ )), hiddenAbove > 0 ? /* @__PURE__ */ import_react12.default.createElement(Text, { dim: true }, t("slashSuggestions.aboveLabel", { count: hiddenAbove })) : null), items.map((item) => {
47204
47206
  if (item.kind === "group") {
47205
47207
  return /* @__PURE__ */ import_react12.default.createElement(GroupHeader, { key: `group:${item.group}:${item.beforeIndex}`, group: item.group });
47206
47208
  }
@@ -47213,7 +47215,7 @@ function SlashSuggestions({
47213
47215
  columns: cols
47214
47216
  }
47215
47217
  );
47216
- }), hiddenBelow > 0 ? /* @__PURE__ */ import_react12.default.createElement(L, { dimColor: true }, t("slashSuggestions.belowLabel", { count: hiddenBelow })) : null, groupMode && advancedHidden && advancedHidden > 0 ? /* @__PURE__ */ import_react12.default.createElement(W, { marginTop: 1 }, /* @__PURE__ */ import_react12.default.createElement(L, { dimColor: true }, t("slashSuggestions.advancedHint", { count: advancedHidden }))) : null, /* @__PURE__ */ import_react12.default.createElement(W, { marginTop: 0 }, /* @__PURE__ */ import_react12.default.createElement(L, { dimColor: true }, t("slashSuggestions.footerHint"))));
47218
+ }), hiddenBelow > 0 ? /* @__PURE__ */ import_react12.default.createElement(Text, { dim: true }, t("slashSuggestions.belowLabel", { count: hiddenBelow })) : null, groupMode && advancedHidden && advancedHidden > 0 ? /* @__PURE__ */ import_react12.default.createElement(Box_default, { marginTop: 1 }, /* @__PURE__ */ import_react12.default.createElement(Text, { dim: true }, t("slashSuggestions.advancedHint", { count: advancedHidden }))) : null, /* @__PURE__ */ import_react12.default.createElement(Box_default, { marginTop: 0 }, /* @__PURE__ */ import_react12.default.createElement(Text, { dim: true }, t("slashSuggestions.footerHint"))));
47217
47219
  }
47218
47220
  function computeWindowStart(matches, maxRows, selectedIndex, currentWindowStart, groupMode = false) {
47219
47221
  if (matches.length <= 0) return 0;
@@ -47245,7 +47247,7 @@ function shouldShowGroupHeader(matches, idx) {
47245
47247
  return idx === 0 || matches[idx]?.group !== matches[idx - 1]?.group;
47246
47248
  }
47247
47249
  function GroupHeader({ group }) {
47248
- return /* @__PURE__ */ import_react12.default.createElement(W, { flexShrink: 0, height: 1, flexWrap: "nowrap" }, /* @__PURE__ */ import_react12.default.createElement(L, { dimColor: true, wrap: "truncate" }, ` ${groupLabel(group)}`));
47250
+ return /* @__PURE__ */ import_react12.default.createElement(Box_default, { flexShrink: 0, height: 1, flexWrap: "nowrap" }, /* @__PURE__ */ import_react12.default.createElement(Text, { dim: true, wrap: "truncate" }, ` ${groupLabel(group)}`));
47249
47251
  }
47250
47252
  function SuggestionRow({
47251
47253
  spec,
@@ -47263,7 +47265,7 @@ function SuggestionRow({
47263
47265
  const summaryBudget = Math.max(8, columns - reservedCells);
47264
47266
  const summaryText = truncateCells(`${summary}${aliasHint}`, summaryBudget);
47265
47267
  return /* @__PURE__ */ import_react12.default.createElement(
47266
- W,
47268
+ Box_default,
47267
47269
  {
47268
47270
  flexDirection: "row",
47269
47271
  flexWrap: "nowrap",
@@ -47272,11 +47274,11 @@ function SuggestionRow({
47272
47274
  minHeight: 1,
47273
47275
  backgroundColor: isSelected ? SURFACE.bgElev : void 0
47274
47276
  },
47275
- /* @__PURE__ */ import_react12.default.createElement(L, { color: isSelected ? color.primary : color.info, bold: isSelected, wrap: "truncate" }, isSelected ? `${GLYPH.cur} ` : " "),
47276
- /* @__PURE__ */ import_react12.default.createElement(L, { color: color.accent, bold: isSelected, wrap: "truncate" }, padOrTrim(name, COMMAND_NAME_CELLS)),
47277
- /* @__PURE__ */ import_react12.default.createElement(L, { dimColor: true, wrap: "truncate" }, padOrTrim(argsSuffix, ARGS_CELLS)),
47278
- /* @__PURE__ */ import_react12.default.createElement(L, { wrap: "truncate" }, " "),
47279
- /* @__PURE__ */ import_react12.default.createElement(L, { color: isSelected ? color.user : color.info, dimColor: !isSelected, wrap: "truncate" }, summaryText)
47277
+ /* @__PURE__ */ import_react12.default.createElement(Text, { color: isSelected ? color.primary : color.info, bold: isSelected, wrap: "truncate" }, isSelected ? `${GLYPH.cur} ` : " "),
47278
+ /* @__PURE__ */ import_react12.default.createElement(Text, { color: color.accent, bold: isSelected, wrap: "truncate" }, padOrTrim(name, COMMAND_NAME_CELLS)),
47279
+ /* @__PURE__ */ import_react12.default.createElement(Text, { dim: true, wrap: "truncate" }, padOrTrim(argsSuffix, ARGS_CELLS)),
47280
+ /* @__PURE__ */ import_react12.default.createElement(Text, { wrap: "truncate" }, " "),
47281
+ /* @__PURE__ */ import_react12.default.createElement(Text, { color: isSelected ? color.user : color.info, dim: !isSelected, wrap: "truncate" }, summaryText)
47280
47282
  );
47281
47283
  }
47282
47284
  function padOrTrim(value, cells) {
@@ -47315,12 +47317,12 @@ function useTickerActive() {
47315
47317
  }
47316
47318
  function useTick() {
47317
47319
  const isActive = useTickerActive();
47318
- const [, time] = Wi(isActive ? FAST_TICK_MS : null);
47320
+ const [, time] = useAnimationFrame(isActive ? FAST_TICK_MS : null);
47319
47321
  return isActive ? Math.floor(time / FAST_TICK_MS) : 0;
47320
47322
  }
47321
47323
  function useSlowTick() {
47322
47324
  const isActive = useTickerActive();
47323
- const [, time] = Wi(isActive ? SLOW_TICK_MS : null);
47325
+ const [, time] = useAnimationFrame(isActive ? SLOW_TICK_MS : null);
47324
47326
  return isActive ? Math.floor(time / SLOW_TICK_MS) : 0;
47325
47327
  }
47326
47328
 
@@ -47332,7 +47334,7 @@ function Countdown({
47332
47334
  }) {
47333
47335
  useSlowTick();
47334
47336
  const remainingSec = Math.max(0, Math.ceil((endsAt - Date.now()) / 1e3));
47335
- return /* @__PURE__ */ import_react14.default.createElement(L, { bold: true, color, backgroundColor }, String(remainingSec));
47337
+ return /* @__PURE__ */ import_react14.default.createElement(Text, { bold: true, color, backgroundColor }, String(remainingSec));
47336
47338
  }
47337
47339
 
47338
47340
  // src/cli/ui/state/provider.tsx
@@ -48010,23 +48012,23 @@ var DEFAULT_STATUS_BAR_CONFIG = {
48010
48012
  };
48011
48013
  var BG = SURFACE.bgElev;
48012
48014
  function Pill({ children }) {
48013
- return /* @__PURE__ */ import_react16.default.createElement(W, { flexDirection: "row", flexShrink: 0 }, children);
48015
+ return /* @__PURE__ */ import_react16.default.createElement(Box_default, { flexDirection: "row", flexShrink: 0 }, children);
48014
48016
  }
48015
48017
  function Gap() {
48016
- return /* @__PURE__ */ import_react16.default.createElement(L, null, " ");
48018
+ return /* @__PURE__ */ import_react16.default.createElement(Text, null, " ");
48017
48019
  }
48018
48020
  function StatusRow({
48019
48021
  statusBar = DEFAULT_STATUS_BAR_CONFIG
48020
48022
  }) {
48021
48023
  const status2 = useAgentState((s) => s.status);
48022
48024
  const session = useAgentState((s) => s.session);
48023
- const { stdout } = bv();
48025
+ const { stdout } = useStdout();
48024
48026
  const cols = stdout?.columns ?? 80;
48025
48027
  const hasTurn = status2.cost > 0;
48026
48028
  const hasSession = status2.sessionCost > 0;
48027
48029
  const hasBalance = typeof status2.balance === "number";
48028
48030
  const showWallet = cols >= WALLET_MIN_COLS && (hasSession && statusBar.showSessionCost || hasBalance && statusBar.showBalance);
48029
- return /* @__PURE__ */ import_react16.default.createElement(W, { flexDirection: "row", flexShrink: 0, marginTop: 1 }, /* @__PURE__ */ import_react16.default.createElement(W, { flexDirection: "row", flexWrap: "wrap", flexGrow: 1 }, /* @__PURE__ */ import_react16.default.createElement(L, null, " "), status2.recording ? /* @__PURE__ */ import_react16.default.createElement(Pill, null, /* @__PURE__ */ import_react16.default.createElement(RecordingPill, { rec: status2.recording })) : status2.countdownSeconds !== void 0 ? /* @__PURE__ */ import_react16.default.createElement(Pill, null, /* @__PURE__ */ import_react16.default.createElement(CountdownRow, { mode: status2.mode, secondsLeft: status2.countdownSeconds })) : /* @__PURE__ */ import_react16.default.createElement(Pill, null, /* @__PURE__ */ import_react16.default.createElement(ModePill, { mode: status2.mode, network: status2.network, detail: status2.networkDetail })), /* @__PURE__ */ import_react16.default.createElement(Gap, null), /* @__PURE__ */ import_react16.default.createElement(Pill, null, /* @__PURE__ */ import_react16.default.createElement(L, { color: FG.sub }, `${session.id} \xB7 ${session.branch}`)), hasTurn && statusBar.showTurnCost && /* @__PURE__ */ import_react16.default.createElement(import_react16.default.Fragment, null, /* @__PURE__ */ import_react16.default.createElement(Gap, null), /* @__PURE__ */ import_react16.default.createElement(Pill, null, /* @__PURE__ */ import_react16.default.createElement(L, { bold: true, color: TONE.brand }, "\u25B8 "), /* @__PURE__ */ import_react16.default.createElement(L, { bold: true, color: FG.body }, `${formatCost(status2.cost, status2.costDisplayCurrency ?? status2.balanceCurrency)} ${t("statusBar.turn")}`))), statusBar.showCacheHit && /* @__PURE__ */ import_react16.default.createElement(import_react16.default.Fragment, null, /* @__PURE__ */ import_react16.default.createElement(Gap, null), /* @__PURE__ */ import_react16.default.createElement(Pill, null, /* @__PURE__ */ import_react16.default.createElement(L, { color: TONE.accent }, `${t("statusBar.cache")} ${Math.round(status2.cacheHit * 100)}%`))), statusBar.showCtxUsage && status2.promptTokens !== void 0 && status2.promptTokens > 0 && /* @__PURE__ */ import_react16.default.createElement(import_react16.default.Fragment, null, /* @__PURE__ */ import_react16.default.createElement(Gap, null), /* @__PURE__ */ import_react16.default.createElement(Pill, null, /* @__PURE__ */ import_react16.default.createElement(
48031
+ return /* @__PURE__ */ import_react16.default.createElement(Box_default, { flexDirection: "row", flexShrink: 0, marginTop: 1 }, /* @__PURE__ */ import_react16.default.createElement(Box_default, { flexDirection: "row", flexWrap: "wrap", flexGrow: 1 }, /* @__PURE__ */ import_react16.default.createElement(Text, null, " "), status2.recording ? /* @__PURE__ */ import_react16.default.createElement(Pill, null, /* @__PURE__ */ import_react16.default.createElement(RecordingPill, { rec: status2.recording })) : status2.countdownSeconds !== void 0 ? /* @__PURE__ */ import_react16.default.createElement(Pill, null, /* @__PURE__ */ import_react16.default.createElement(CountdownRow, { mode: status2.mode, secondsLeft: status2.countdownSeconds })) : /* @__PURE__ */ import_react16.default.createElement(Pill, null, /* @__PURE__ */ import_react16.default.createElement(ModePill, { mode: status2.mode, network: status2.network, detail: status2.networkDetail })), /* @__PURE__ */ import_react16.default.createElement(Gap, null), /* @__PURE__ */ import_react16.default.createElement(Pill, null, /* @__PURE__ */ import_react16.default.createElement(Text, { color: FG.sub }, `${session.id} \xB7 ${session.branch}`)), hasTurn && statusBar.showTurnCost && /* @__PURE__ */ import_react16.default.createElement(import_react16.default.Fragment, null, /* @__PURE__ */ import_react16.default.createElement(Gap, null), /* @__PURE__ */ import_react16.default.createElement(Pill, null, /* @__PURE__ */ import_react16.default.createElement(Text, { bold: true, color: TONE.brand }, "\u25B8 "), /* @__PURE__ */ import_react16.default.createElement(Text, { bold: true, color: FG.body }, `${formatCost(status2.cost, status2.costDisplayCurrency ?? status2.balanceCurrency)} ${t("statusBar.turn")}`))), statusBar.showCacheHit && /* @__PURE__ */ import_react16.default.createElement(import_react16.default.Fragment, null, /* @__PURE__ */ import_react16.default.createElement(Gap, null), /* @__PURE__ */ import_react16.default.createElement(Pill, null, /* @__PURE__ */ import_react16.default.createElement(Text, { color: TONE.accent }, `${t("statusBar.cache")} ${Math.round(status2.cacheHit * 100)}%`))), statusBar.showCtxUsage && status2.promptTokens !== void 0 && status2.promptTokens > 0 && /* @__PURE__ */ import_react16.default.createElement(import_react16.default.Fragment, null, /* @__PURE__ */ import_react16.default.createElement(Gap, null), /* @__PURE__ */ import_react16.default.createElement(Pill, null, /* @__PURE__ */ import_react16.default.createElement(
48030
48032
  CtxUsagePill,
48031
48033
  {
48032
48034
  tokens: status2.promptTokens,
@@ -48042,7 +48044,7 @@ function StatusRow({
48042
48044
  showSessionCost: statusBar.showSessionCost,
48043
48045
  showBalance: statusBar.showBalance
48044
48046
  }
48045
- )))), /* @__PURE__ */ import_react16.default.createElement(W, { flexDirection: "row", flexShrink: 0 }, statusBar.showVersion && cols >= VERSION_MIN_COLS && /* @__PURE__ */ import_react16.default.createElement(Pill, null, /* @__PURE__ */ import_react16.default.createElement(L, { color: FG.faint }, `v${VERSION}`)), statusBar.showFeedbackHint && cols >= FEEDBACK_HINT_MIN_COLS && /* @__PURE__ */ import_react16.default.createElement(import_react16.default.Fragment, null, /* @__PURE__ */ import_react16.default.createElement(Gap, null), /* @__PURE__ */ import_react16.default.createElement(Pill, null, /* @__PURE__ */ import_react16.default.createElement(L, { color: FG.meta }, "\u2691 "), /* @__PURE__ */ import_react16.default.createElement(L, { color: FG.sub }, t("statusBar.shortcutsHint"))))));
48047
+ )))), /* @__PURE__ */ import_react16.default.createElement(Box_default, { flexDirection: "row", flexShrink: 0 }, statusBar.showVersion && cols >= VERSION_MIN_COLS && /* @__PURE__ */ import_react16.default.createElement(Pill, null, /* @__PURE__ */ import_react16.default.createElement(Text, { color: FG.faint }, `v${VERSION}`)), statusBar.showFeedbackHint && cols >= FEEDBACK_HINT_MIN_COLS && /* @__PURE__ */ import_react16.default.createElement(import_react16.default.Fragment, null, /* @__PURE__ */ import_react16.default.createElement(Gap, null), /* @__PURE__ */ import_react16.default.createElement(Pill, null, /* @__PURE__ */ import_react16.default.createElement(Text, { color: FG.meta }, "\u2691 "), /* @__PURE__ */ import_react16.default.createElement(Text, { color: FG.sub }, t("statusBar.shortcutsHint"))))));
48046
48048
  }
48047
48049
  function CtxUsagePill({
48048
48050
  tokens,
@@ -48055,13 +48057,13 @@ function CtxUsagePill({
48055
48057
  const showTokens = cols >= CTX_TOKENS_MIN_COLS;
48056
48058
  const showBar = cols >= CTX_BAR_MIN_COLS;
48057
48059
  const filled = Math.round(CTX_BAR_CELLS * ratio);
48058
- return /* @__PURE__ */ import_react16.default.createElement(import_react16.default.Fragment, null, /* @__PURE__ */ import_react16.default.createElement(L, { color: FG.meta, wrap: "truncate" }, `${t("statusBar.ctx")} `), showBar && /* @__PURE__ */ import_react16.default.createElement(import_react16.default.Fragment, null, /* @__PURE__ */ import_react16.default.createElement(L, { color, wrap: "truncate" }, GLYPH.block.repeat(filled)), /* @__PURE__ */ import_react16.default.createElement(L, { color: FG.faint, wrap: "truncate" }, GLYPH.shade1.repeat(CTX_BAR_CELLS - filled)), /* @__PURE__ */ import_react16.default.createElement(L, { wrap: "truncate" }, " ")), /* @__PURE__ */ import_react16.default.createElement(L, { color, wrap: "truncate" }, `${pct}%`), showTokens && /* @__PURE__ */ import_react16.default.createElement(L, { color: FG.faint }, ` \xB7 ${formatTokens(tokens)}/${formatTokens(cap)}`));
48060
+ return /* @__PURE__ */ import_react16.default.createElement(import_react16.default.Fragment, null, /* @__PURE__ */ import_react16.default.createElement(Text, { color: FG.meta, wrap: "truncate" }, `${t("statusBar.ctx")} `), showBar && /* @__PURE__ */ import_react16.default.createElement(import_react16.default.Fragment, null, /* @__PURE__ */ import_react16.default.createElement(Text, { color, wrap: "truncate" }, GLYPH.block.repeat(filled)), /* @__PURE__ */ import_react16.default.createElement(Text, { color: FG.faint, wrap: "truncate" }, GLYPH.shade1.repeat(CTX_BAR_CELLS - filled)), /* @__PURE__ */ import_react16.default.createElement(Text, { wrap: "truncate" }, " ")), /* @__PURE__ */ import_react16.default.createElement(Text, { color, wrap: "truncate" }, `${pct}%`), showTokens && /* @__PURE__ */ import_react16.default.createElement(Text, { color: FG.faint }, ` \xB7 ${formatTokens(tokens)}/${formatTokens(cap)}`));
48059
48061
  }
48060
48062
  function McpLoadingPill({
48061
48063
  ready,
48062
48064
  total
48063
48065
  }) {
48064
- return /* @__PURE__ */ import_react16.default.createElement(import_react16.default.Fragment, null, /* @__PURE__ */ import_react16.default.createElement(L, { color: TONE.brand, wrap: "truncate" }, "\u2301 "), /* @__PURE__ */ import_react16.default.createElement(L, { color: FG.body }, `${t("statusBar.mcpLoading")} ${ready}/${total}`));
48066
+ return /* @__PURE__ */ import_react16.default.createElement(import_react16.default.Fragment, null, /* @__PURE__ */ import_react16.default.createElement(Text, { color: TONE.brand, wrap: "truncate" }, "\u2301 "), /* @__PURE__ */ import_react16.default.createElement(Text, { color: FG.body }, `${t("statusBar.mcpLoading")} ${ready}/${total}`));
48065
48067
  }
48066
48068
  function WalletPill({
48067
48069
  sessionCostUsd,
@@ -48072,7 +48074,7 @@ function WalletPill({
48072
48074
  }) {
48073
48075
  const showSpent = showSessionCost && sessionCostUsd > 0;
48074
48076
  const showBalanceLine = showBalanceCfg && typeof balance === "number";
48075
- return /* @__PURE__ */ import_react16.default.createElement(import_react16.default.Fragment, null, /* @__PURE__ */ import_react16.default.createElement(L, { color: FG.meta, wrap: "truncate" }, "\u26C1 "), showSpent && /* @__PURE__ */ import_react16.default.createElement(L, { color: FG.body }, `${formatCost(sessionCostUsd, currency, 2)} ${t("statusBar.spent")}`), showSpent && showBalanceLine && /* @__PURE__ */ import_react16.default.createElement(L, { color: FG.meta, wrap: "truncate" }, " / "), showBalanceLine && /* @__PURE__ */ import_react16.default.createElement(L, { color: FG.faint, wrap: "truncate" }, t("statusBar.left")), showBalanceLine && /* @__PURE__ */ import_react16.default.createElement(L, { bold: true, color: balanceColor(balance, currency), wrap: "truncate" }, formatBalance(balance, currency, { fractionDigits: 2 })));
48077
+ return /* @__PURE__ */ import_react16.default.createElement(import_react16.default.Fragment, null, /* @__PURE__ */ import_react16.default.createElement(Text, { color: FG.meta, wrap: "truncate" }, "\u26C1 "), showSpent && /* @__PURE__ */ import_react16.default.createElement(Text, { color: FG.body }, `${formatCost(sessionCostUsd, currency, 2)} ${t("statusBar.spent")}`), showSpent && showBalanceLine && /* @__PURE__ */ import_react16.default.createElement(Text, { color: FG.meta, wrap: "truncate" }, " / "), showBalanceLine && /* @__PURE__ */ import_react16.default.createElement(Text, { color: FG.faint, wrap: "truncate" }, t("statusBar.left")), showBalanceLine && /* @__PURE__ */ import_react16.default.createElement(Text, { bold: true, color: balanceColor(balance, currency), wrap: "truncate" }, formatBalance(balance, currency, { fractionDigits: 2 })));
48076
48078
  }
48077
48079
  function ModePill({
48078
48080
  mode: mode2,
@@ -48082,18 +48084,18 @@ function ModePill({
48082
48084
  const modeLabel = `${t("statusBar.editsLabel")}${mode2}`;
48083
48085
  if (network === "online") {
48084
48086
  const pill = modeGlyph(mode2);
48085
- return /* @__PURE__ */ import_react16.default.createElement(import_react16.default.Fragment, null, /* @__PURE__ */ import_react16.default.createElement(L, { color: pill.color, wrap: "truncate" }, pill.glyph), /* @__PURE__ */ import_react16.default.createElement(L, { color: FG.sub, wrap: "truncate" }, ` ${modeLabel}`));
48087
+ return /* @__PURE__ */ import_react16.default.createElement(import_react16.default.Fragment, null, /* @__PURE__ */ import_react16.default.createElement(Text, { color: pill.color, wrap: "truncate" }, pill.glyph), /* @__PURE__ */ import_react16.default.createElement(Text, { color: FG.sub, wrap: "truncate" }, ` ${modeLabel}`));
48086
48088
  }
48087
48089
  const dot = networkDot(network);
48088
48090
  if (network === "slow") {
48089
48091
  const tail = detail ? ` \xB7 ${detail}` : "";
48090
- return /* @__PURE__ */ import_react16.default.createElement(import_react16.default.Fragment, null, /* @__PURE__ */ import_react16.default.createElement(L, { color: dot.color, wrap: "truncate" }, dot.glyph), /* @__PURE__ */ import_react16.default.createElement(L, { color: dot.color }, ` ${modeLabel} \xB7 ${t("statusBar.slow")}${tail}`));
48092
+ return /* @__PURE__ */ import_react16.default.createElement(import_react16.default.Fragment, null, /* @__PURE__ */ import_react16.default.createElement(Text, { color: dot.color, wrap: "truncate" }, dot.glyph), /* @__PURE__ */ import_react16.default.createElement(Text, { color: dot.color }, ` ${modeLabel} \xB7 ${t("statusBar.slow")}${tail}`));
48091
48093
  }
48092
48094
  if (network === "disconnected") {
48093
48095
  const tail = detail ? ` \xB7 ${detail}` : "";
48094
- return /* @__PURE__ */ import_react16.default.createElement(import_react16.default.Fragment, null, /* @__PURE__ */ import_react16.default.createElement(L, { color: dot.color, wrap: "truncate" }, dot.glyph), /* @__PURE__ */ import_react16.default.createElement(L, { color: dot.color, wrap: "truncate" }, ` ${t("statusBar.disconnect")}${tail}`));
48096
+ return /* @__PURE__ */ import_react16.default.createElement(import_react16.default.Fragment, null, /* @__PURE__ */ import_react16.default.createElement(Text, { color: dot.color, wrap: "truncate" }, dot.glyph), /* @__PURE__ */ import_react16.default.createElement(Text, { color: dot.color, wrap: "truncate" }, ` ${t("statusBar.disconnect")}${tail}`));
48095
48097
  }
48096
- return /* @__PURE__ */ import_react16.default.createElement(import_react16.default.Fragment, null, /* @__PURE__ */ import_react16.default.createElement(L, { color: dot.color, wrap: "truncate" }, dot.glyph), /* @__PURE__ */ import_react16.default.createElement(L, { color: dot.color, wrap: "truncate" }, ` ${t("statusBar.reconnecting")}`));
48098
+ return /* @__PURE__ */ import_react16.default.createElement(import_react16.default.Fragment, null, /* @__PURE__ */ import_react16.default.createElement(Text, { color: dot.color, wrap: "truncate" }, dot.glyph), /* @__PURE__ */ import_react16.default.createElement(Text, { color: dot.color, wrap: "truncate" }, ` ${t("statusBar.reconnecting")}`));
48097
48099
  }
48098
48100
  function CountdownRow({
48099
48101
  mode: mode2,
@@ -48101,11 +48103,11 @@ function CountdownRow({
48101
48103
  }) {
48102
48104
  const pill = modeGlyph(mode2);
48103
48105
  const endsAt = Date.now() + secondsLeft * 1e3;
48104
- return /* @__PURE__ */ import_react16.default.createElement(import_react16.default.Fragment, null, /* @__PURE__ */ import_react16.default.createElement(L, { color: pill.color, wrap: "truncate" }, pill.glyph), /* @__PURE__ */ import_react16.default.createElement(L, { color: FG.sub, wrap: "truncate" }, ` ${t("statusBar.editsLabel")}${mode2} \xB7 `), /* @__PURE__ */ import_react16.default.createElement(L, { color: TONE.warn, wrap: "truncate" }, t("statusBar.approvingIn")), /* @__PURE__ */ import_react16.default.createElement(Countdown, { endsAt }), /* @__PURE__ */ import_react16.default.createElement(L, { color: TONE.warn, wrap: "truncate" }, t("statusBar.escToInterrupt")));
48106
+ return /* @__PURE__ */ import_react16.default.createElement(import_react16.default.Fragment, null, /* @__PURE__ */ import_react16.default.createElement(Text, { color: pill.color, wrap: "truncate" }, pill.glyph), /* @__PURE__ */ import_react16.default.createElement(Text, { color: FG.sub, wrap: "truncate" }, ` ${t("statusBar.editsLabel")}${mode2} \xB7 `), /* @__PURE__ */ import_react16.default.createElement(Text, { color: TONE.warn, wrap: "truncate" }, t("statusBar.approvingIn")), /* @__PURE__ */ import_react16.default.createElement(Countdown, { endsAt }), /* @__PURE__ */ import_react16.default.createElement(Text, { color: TONE.warn, wrap: "truncate" }, t("statusBar.escToInterrupt")));
48105
48107
  }
48106
48108
  function RecordingPill({ rec }) {
48107
48109
  const sizeMb = (rec.sizeBytes / (1024 * 1024)).toFixed(1);
48108
- return /* @__PURE__ */ import_react16.default.createElement(import_react16.default.Fragment, null, /* @__PURE__ */ import_react16.default.createElement(L, { bold: true, color: TONE.err, wrap: "truncate" }, t("statusBar.recordingGlyph")), /* @__PURE__ */ import_react16.default.createElement(L, { color: TONE.err }, ` ${sizeMb}${t("statusBar.mb")} \xB7 ${rec.events}${t("statusBar.evt")}`));
48110
+ return /* @__PURE__ */ import_react16.default.createElement(import_react16.default.Fragment, null, /* @__PURE__ */ import_react16.default.createElement(Text, { bold: true, color: TONE.err, wrap: "truncate" }, t("statusBar.recordingGlyph")), /* @__PURE__ */ import_react16.default.createElement(Text, { color: TONE.err }, ` ${sizeMb}${t("statusBar.mb")} \xB7 ${rec.events}${t("statusBar.evt")}`));
48109
48111
  }
48110
48112
  function modeGlyph(mode2) {
48111
48113
  switch (mode2) {
@@ -48226,7 +48228,7 @@ var ComposerArea = import_react17.default.memo(
48226
48228
  slashArgSelected
48227
48229
  }) => {
48228
48230
  useRenderTrace("ComposerArea");
48229
- const inputArea = /* @__PURE__ */ import_react17.default.createElement(W, { flexDirection: "column", flexShrink: 0, flexWrap: "nowrap" }, /* @__PURE__ */ import_react17.default.createElement(W, { flexDirection: "column", flexShrink: 0, flexWrap: "nowrap" }, slashMatches !== null ? /* @__PURE__ */ import_react17.default.createElement(
48231
+ const inputArea = /* @__PURE__ */ import_react17.default.createElement(Box_default, { flexDirection: "column", flexShrink: 0, flexWrap: "nowrap" }, /* @__PURE__ */ import_react17.default.createElement(Box_default, { flexDirection: "column", flexShrink: 0, flexWrap: "nowrap" }, slashMatches !== null ? /* @__PURE__ */ import_react17.default.createElement(
48230
48232
  SlashSuggestions,
48231
48233
  {
48232
48234
  key: `slash-suggestions:${slashGroupMode ? "group" : "search"}`,
@@ -48272,7 +48274,7 @@ function LoopStatusRow({
48272
48274
  }) {
48273
48275
  useSlowTick();
48274
48276
  const nextFireMs = Math.max(0, loop2.nextFireAt - Date.now());
48275
- return /* @__PURE__ */ import_react17.default.createElement(W, null, /* @__PURE__ */ import_react17.default.createElement(L, { color: "cyan" }, `loop: ${formatLoopStatus(loop2.prompt, nextFireMs, loop2.iter)} \u2014 /loop stop or type to cancel`));
48277
+ return /* @__PURE__ */ import_react17.default.createElement(Box_default, null, /* @__PURE__ */ import_react17.default.createElement(Text, { color: "ansi:cyan" }, `loop: ${formatLoopStatus(loop2.prompt, nextFireMs, loop2.iter)} \u2014 /loop stop or type to cancel`));
48276
48278
  }
48277
48279
 
48278
48280
  // src/cli/ui/EditConfirm.tsx
@@ -48457,7 +48459,7 @@ function DenyContextInput({
48457
48459
  setValue((v) => v + ev.input);
48458
48460
  }
48459
48461
  });
48460
- return /* @__PURE__ */ import_react18.default.createElement(W, { flexDirection: "column" }, /* @__PURE__ */ import_react18.default.createElement(W, { flexDirection: "column", marginBottom: 1 }, /* @__PURE__ */ import_react18.default.createElement(L, { color: FG.sub }, description)), /* @__PURE__ */ import_react18.default.createElement(W, null, /* @__PURE__ */ import_react18.default.createElement(L, { bold: true, color: TONE.brand }, "\u203A "), /* @__PURE__ */ import_react18.default.createElement(L, { color: FG.body }, value), /* @__PURE__ */ import_react18.default.createElement(L, { backgroundColor: TONE.brand, color: "#000" }, " ")));
48462
+ return /* @__PURE__ */ import_react18.default.createElement(Box_default, { flexDirection: "column" }, /* @__PURE__ */ import_react18.default.createElement(Box_default, { flexDirection: "column", marginBottom: 1 }, /* @__PURE__ */ import_react18.default.createElement(Text, { color: FG.sub }, description)), /* @__PURE__ */ import_react18.default.createElement(Box_default, null, /* @__PURE__ */ import_react18.default.createElement(Text, { bold: true, color: TONE.brand }, "\u203A "), /* @__PURE__ */ import_react18.default.createElement(Text, { color: FG.body }, value), /* @__PURE__ */ import_react18.default.createElement(Text, { backgroundColor: TONE.brand, color: "#000" }, " ")));
48461
48463
  }
48462
48464
 
48463
48465
  // src/cli/ui/SplitDiff.tsx
@@ -48517,11 +48519,11 @@ function wrapToCells(s, maxCells) {
48517
48519
 
48518
48520
  // src/cli/ui/SplitDiff.tsx
48519
48521
  function SplitDiff({ rows, totalCols }) {
48520
- const { stdout } = bv();
48522
+ const { stdout } = useStdout();
48521
48523
  const cols = totalCols ?? stdout?.columns ?? 80;
48522
48524
  const innerCols = Math.max(40, cols - 6);
48523
48525
  const halfCols = Math.floor((innerCols - 3) / 2);
48524
- return /* @__PURE__ */ import_react19.default.createElement(W, { flexDirection: "column" }, rows.map((row2, i) => /* @__PURE__ */ import_react19.default.createElement(W, { key: `r-${i}-${row2.left.num ?? "p"}-${row2.right.num ?? "p"}` }, /* @__PURE__ */ import_react19.default.createElement(Cell, { side: row2.left, width: halfCols, which: "left" }), /* @__PURE__ */ import_react19.default.createElement(L, { color: COLOR.info, dimColor: true }, " \u2502 "), /* @__PURE__ */ import_react19.default.createElement(Cell, { side: row2.right, width: halfCols, which: "right" }))));
48526
+ return /* @__PURE__ */ import_react19.default.createElement(Box_default, { flexDirection: "column" }, rows.map((row2, i) => /* @__PURE__ */ import_react19.default.createElement(Box_default, { key: `r-${i}-${row2.left.num ?? "p"}-${row2.right.num ?? "p"}` }, /* @__PURE__ */ import_react19.default.createElement(Cell, { side: row2.left, width: halfCols, which: "left" }), /* @__PURE__ */ import_react19.default.createElement(Text, { color: COLOR.info, dim: true }, " \u2502 "), /* @__PURE__ */ import_react19.default.createElement(Cell, { side: row2.right, width: halfCols, which: "right" }))));
48525
48527
  }
48526
48528
  function Cell({
48527
48529
  side,
@@ -48540,22 +48542,22 @@ function Cell({
48540
48542
  const raw = side.text;
48541
48543
  const padded = padToCells(clipToCells(raw, inner), inner);
48542
48544
  if (side.kind === "del") {
48543
- return /* @__PURE__ */ import_react19.default.createElement(L, { color: "#fbc8c8", backgroundColor: "#2a1212" }, `${numStr} ${sign} ${padded}`);
48545
+ return /* @__PURE__ */ import_react19.default.createElement(Text, { color: "#fbc8c8", backgroundColor: "#2a1212" }, `${numStr} ${sign} ${padded}`);
48544
48546
  }
48545
48547
  if (side.kind === "add") {
48546
- return /* @__PURE__ */ import_react19.default.createElement(L, { color: "#bef0c8", backgroundColor: "#0c2718" }, `${numStr} ${sign} ${padded}`);
48548
+ return /* @__PURE__ */ import_react19.default.createElement(Text, { color: "#bef0c8", backgroundColor: "#0c2718" }, `${numStr} ${sign} ${padded}`);
48547
48549
  }
48548
48550
  if (side.kind === "pad") {
48549
- return /* @__PURE__ */ import_react19.default.createElement(L, { color: COLOR.info, dimColor: true, italic: !!raw }, `${numStr} ${sign} ${padded}`);
48551
+ return /* @__PURE__ */ import_react19.default.createElement(Text, { color: COLOR.info, dim: true, italic: !!raw }, `${numStr} ${sign} ${padded}`);
48550
48552
  }
48551
- return /* @__PURE__ */ import_react19.default.createElement(L, { dimColor: true }, `${numStr} ${sign} ${padded}`);
48553
+ return /* @__PURE__ */ import_react19.default.createElement(Text, { dim: true }, `${numStr} ${sign} ${padded}`);
48552
48554
  }
48553
48555
 
48554
48556
  // src/cli/ui/EditConfirm.tsx
48555
48557
  var MODAL_OVERHEAD_ROWS = 18;
48556
48558
  var MIN_DIFF_ROWS = 8;
48557
48559
  function EditConfirm({ block: block2, onChoose }) {
48558
- const { stdout } = bv();
48560
+ const { stdout } = useStdout();
48559
48561
  const rows = stdout?.rows ?? 40;
48560
48562
  const allocated = Math.max(MODAL_OVERHEAD_ROWS + MIN_DIFF_ROWS, rows - 4);
48561
48563
  const budget2 = Math.max(MIN_DIFF_ROWS, allocated - MODAL_OVERHEAD_ROWS);
@@ -48662,12 +48664,12 @@ function EditConfirm({ block: block2, onChoose }) {
48662
48664
  metaRight: metaParts.join(" \xB7 "),
48663
48665
  footerHint: t("editConfirm.footer")
48664
48666
  },
48665
- hiddenAbove > 0 ? /* @__PURE__ */ import_react20.default.createElement(L, { dimColor: true }, t(hiddenAbove === 1 ? "editConfirm.linesAbove" : "editConfirm.linesAbovePlural", {
48667
+ hiddenAbove > 0 ? /* @__PURE__ */ import_react20.default.createElement(Text, { dim: true }, t(hiddenAbove === 1 ? "editConfirm.linesAbove" : "editConfirm.linesAbovePlural", {
48666
48668
  count: hiddenAbove
48667
48669
  })) : null,
48668
48670
  /* @__PURE__ */ import_react20.default.createElement(SplitDiff, { rows: visibleRows }),
48669
- /* @__PURE__ */ import_react20.default.createElement(W, null, /* @__PURE__ */ import_react20.default.createElement(L, { color: "#fbc8c8", backgroundColor: "#2a1212" }, t("editConfirm.oldLabel")), /* @__PURE__ */ import_react20.default.createElement(L, null, " "), /* @__PURE__ */ import_react20.default.createElement(L, { color: "#bef0c8", backgroundColor: "#0c2718" }, t("editConfirm.newLabel")), /* @__PURE__ */ import_react20.default.createElement(L, { dimColor: true }, t("editConfirm.sideBySide"))),
48670
- hiddenBelow > 0 ? /* @__PURE__ */ import_react20.default.createElement(L, { dimColor: true }, t(hiddenBelow === 1 ? "editConfirm.linesBelow" : "editConfirm.linesBelowPlural", {
48671
+ /* @__PURE__ */ import_react20.default.createElement(Box_default, null, /* @__PURE__ */ import_react20.default.createElement(Text, { color: "#fbc8c8", backgroundColor: "#2a1212" }, t("editConfirm.oldLabel")), /* @__PURE__ */ import_react20.default.createElement(Text, null, " "), /* @__PURE__ */ import_react20.default.createElement(Text, { color: "#bef0c8", backgroundColor: "#0c2718" }, t("editConfirm.newLabel")), /* @__PURE__ */ import_react20.default.createElement(Text, { dim: true }, t("editConfirm.sideBySide"))),
48672
+ hiddenBelow > 0 ? /* @__PURE__ */ import_react20.default.createElement(Text, { dim: true }, t(hiddenBelow === 1 ? "editConfirm.linesBelow" : "editConfirm.linesBelowPlural", {
48671
48673
  count: hiddenBelow
48672
48674
  })) : null
48673
48675
  );
@@ -48682,7 +48684,7 @@ function EditPicker({
48682
48684
  onChoose
48683
48685
  }) {
48684
48686
  const [focus, setFocus] = (0, import_react21.useState)(Math.max(0, entries.length - 1));
48685
- const { stdout } = bv();
48687
+ const { stdout } = useStdout();
48686
48688
  const rows = stdout?.rows ?? 40;
48687
48689
  const visibleCount = Math.max(3, rows - PAGE_MARGIN2);
48688
48690
  const maxFocus = Math.max(0, entries.length - 1);
@@ -48703,14 +48705,14 @@ function EditPicker({
48703
48705
  }
48704
48706
  });
48705
48707
  if (entries.length === 0) {
48706
- return /* @__PURE__ */ import_react21.default.createElement(W, { flexDirection: "column", paddingY: 1, paddingX: 2 }, /* @__PURE__ */ import_react21.default.createElement(L, { color: TONE.warn }, t("editPicker.empty")), /* @__PURE__ */ import_react21.default.createElement(L, { color: FG.faint }, t("editPicker.dismiss")));
48708
+ return /* @__PURE__ */ import_react21.default.createElement(Box_default, { flexDirection: "column", paddingY: 1, paddingX: 2 }, /* @__PURE__ */ import_react21.default.createElement(Text, { color: TONE.warn }, t("editPicker.empty")), /* @__PURE__ */ import_react21.default.createElement(Text, { color: FG.faint }, t("editPicker.dismiss")));
48707
48709
  }
48708
48710
  const start = Math.max(
48709
48711
  0,
48710
48712
  Math.min(focus - Math.floor(visibleCount / 2), entries.length - visibleCount)
48711
48713
  );
48712
48714
  const shown = entries.slice(start, start + visibleCount);
48713
- return /* @__PURE__ */ import_react21.default.createElement(W, { flexDirection: "column", paddingY: 1, paddingX: 2 }, /* @__PURE__ */ import_react21.default.createElement(L, { bold: true, color: TONE.brand }, t("editPicker.title")), /* @__PURE__ */ import_react21.default.createElement(L, { color: FG.faint }, t("editPicker.hint")), /* @__PURE__ */ import_react21.default.createElement(W, { flexDirection: "column", marginTop: 1 }, shown.map((entry, i) => {
48715
+ return /* @__PURE__ */ import_react21.default.createElement(Box_default, { flexDirection: "column", paddingY: 1, paddingX: 2 }, /* @__PURE__ */ import_react21.default.createElement(Text, { bold: true, color: TONE.brand }, t("editPicker.title")), /* @__PURE__ */ import_react21.default.createElement(Text, { color: FG.faint }, t("editPicker.hint")), /* @__PURE__ */ import_react21.default.createElement(Box_default, { flexDirection: "column", marginTop: 1 }, shown.map((entry, i) => {
48714
48716
  const globalIdx = start + i;
48715
48717
  const focused = globalIdx === focus;
48716
48718
  return /* @__PURE__ */ import_react21.default.createElement(Row, { key: entry.cardId, entry, focused });
@@ -48722,7 +48724,7 @@ function Row({ entry, focused }) {
48722
48724
  const numLabel = `#${entry.userTurnIndex + 1}`;
48723
48725
  const bg = focused ? SURFACE.bgElev : void 0;
48724
48726
  const fg = focused ? FG.strong : FG.body;
48725
- return /* @__PURE__ */ import_react21.default.createElement(W, { flexDirection: "row", gap: 1 }, /* @__PURE__ */ import_react21.default.createElement(L, { color: focused ? TONE.brand : FG.faint, backgroundColor: bg }, marker), /* @__PURE__ */ import_react21.default.createElement(L, { color: FG.meta, backgroundColor: bg }, numLabel), /* @__PURE__ */ import_react21.default.createElement(L, { color: fg, backgroundColor: bg }, preview));
48727
+ return /* @__PURE__ */ import_react21.default.createElement(Box_default, { flexDirection: "row", gap: 1 }, /* @__PURE__ */ import_react21.default.createElement(Text, { color: focused ? TONE.brand : FG.faint, backgroundColor: bg }, marker), /* @__PURE__ */ import_react21.default.createElement(Text, { color: FG.meta, backgroundColor: bg }, numLabel), /* @__PURE__ */ import_react21.default.createElement(Text, { color: fg, backgroundColor: bg }, preview));
48726
48728
  }
48727
48729
  function oneLinePreview(text2, cells) {
48728
48730
  const firstLine = text2.split(/\n/, 1)[0] ?? "";
@@ -48748,7 +48750,7 @@ var import_react26 = __toESM(require_react(), 1);
48748
48750
  var import_react22 = __toESM(require_react(), 1);
48749
48751
  var ActiveCardContext = import_react22.default.createContext(true);
48750
48752
  function Card({ children }) {
48751
- return /* @__PURE__ */ import_react22.default.createElement(W, { flexDirection: "column", marginTop: 1, width: "100%" }, children);
48753
+ return /* @__PURE__ */ import_react22.default.createElement(Box_default, { flexDirection: "column", marginTop: 1, width: "100%" }, children);
48752
48754
  }
48753
48755
 
48754
48756
  // src/cli/ui/primitives/CardHeader.tsx
@@ -48763,13 +48765,13 @@ function CardHeader({
48763
48765
  }) {
48764
48766
  const active2 = (0, import_react23.useContext)(ActiveCardContext);
48765
48767
  const visibleMeta = active2 ? meta : meta?.filter((item) => typeof item !== "string");
48766
- return /* @__PURE__ */ import_react23.default.createElement(W, { flexDirection: "row", gap: 1 }, typeof glyph === "string" ? /* @__PURE__ */ import_react23.default.createElement(L, { color: tone }, glyph) : glyph, /* @__PURE__ */ import_react23.default.createElement(L, { bold: true, color: tone }, title2), subtitle ? /* @__PURE__ */ import_react23.default.createElement(L, { color: FG.body }, subtitle) : null, visibleMeta?.map((item, i) => {
48768
+ return /* @__PURE__ */ import_react23.default.createElement(Box_default, { flexDirection: "row", gap: 1 }, typeof glyph === "string" ? /* @__PURE__ */ import_react23.default.createElement(Text, { color: tone }, glyph) : glyph, /* @__PURE__ */ import_react23.default.createElement(Text, { bold: true, color: tone }, title2), subtitle ? /* @__PURE__ */ import_react23.default.createElement(Text, { color: FG.body }, subtitle) : null, visibleMeta?.map((item, i) => {
48767
48769
  const isStr = typeof item === "string";
48768
48770
  const text2 = isStr ? item : item.text;
48769
48771
  const color = isStr ? FG.faint : item.color;
48770
48772
  return (
48771
48773
  // biome-ignore lint/suspicious/noArrayIndexKey: meta items are positional
48772
- /* @__PURE__ */ import_react23.default.createElement(import_react23.default.Fragment, { key: `m-${i}` }, /* @__PURE__ */ import_react23.default.createElement(L, { color: FG.faint }, "\xB7"), /* @__PURE__ */ import_react23.default.createElement(L, { color }, text2))
48774
+ /* @__PURE__ */ import_react23.default.createElement(import_react23.default.Fragment, { key: `m-${i}` }, /* @__PURE__ */ import_react23.default.createElement(Text, { color: FG.faint }, "\xB7"), /* @__PURE__ */ import_react23.default.createElement(Text, { color }, text2))
48773
48775
  );
48774
48776
  }), active2 ? right : null);
48775
48777
  }
@@ -48777,7 +48779,7 @@ function CardHeader({
48777
48779
  // src/cli/ui/primitives/Pill.tsx
48778
48780
  var import_react24 = __toESM(require_react(), 1);
48779
48781
  function Pill2({ label, bg, fg, bold = true }) {
48780
- return /* @__PURE__ */ import_react24.default.createElement(L, { backgroundColor: bg, color: fg, bold }, ` ${label} `);
48782
+ return /* @__PURE__ */ import_react24.default.createElement(Text, { backgroundColor: bg, color: fg, bold }, ` ${label} `);
48781
48783
  }
48782
48784
  var PILL_PATH = { bg: "#11141a", fg: "#8b949e" };
48783
48785
  var PILL_MODEL = {
@@ -48805,12 +48807,12 @@ function Pulse({
48805
48807
  color,
48806
48808
  frameMs = DEFAULT_FRAME_MS
48807
48809
  }) {
48808
- const [ref, time] = Wi(active2 ? frameMs : null);
48810
+ const [ref, time] = useAnimationFrame(active2 ? frameMs : null);
48809
48811
  const settledGlyph = settled ?? frames[frames.length - 1] ?? "";
48810
48812
  if (!active2)
48811
- return /* @__PURE__ */ import_react25.default.createElement(W, { ref }, /* @__PURE__ */ import_react25.default.createElement(L, { color }, settledGlyph));
48813
+ return /* @__PURE__ */ import_react25.default.createElement(Box_default, { ref }, /* @__PURE__ */ import_react25.default.createElement(Text, { color }, settledGlyph));
48812
48814
  const idx = Math.floor(time / frameMs) % frames.length;
48813
- return /* @__PURE__ */ import_react25.default.createElement(W, { ref }, /* @__PURE__ */ import_react25.default.createElement(L, { color }, frames[idx] ?? settledGlyph));
48815
+ return /* @__PURE__ */ import_react25.default.createElement(Box_default, { ref }, /* @__PURE__ */ import_react25.default.createElement(Text, { color }, frames[idx] ?? settledGlyph));
48814
48816
  }
48815
48817
  var PULSE_DIAMOND = ["\u25C7", "\u25C8", "\u25C6", "\u25C8"];
48816
48818
  var PULSE_SQUARE = ["\u25A2", "\u25A3", "\u25A4", "\u25A3"];
@@ -48872,7 +48874,7 @@ function ThinkingRow({ text: text2 }) {
48872
48874
  if (secs >= 1) tail.push(formatElapsed(secs));
48873
48875
  if (tokens > 0) tail.push(`\u2193 ${tokens.toLocaleString()} tok`);
48874
48876
  if (tps !== null) tail.push(`${tps} t/s`);
48875
- return /* @__PURE__ */ import_react26.default.createElement(W, { marginY: 1, paddingX: 1, gap: 1 }, /* @__PURE__ */ import_react26.default.createElement(Pulse, { active: true, frames: PULSE_CIRCLE, settled: "\u25CF", color: TONE.accent }), /* @__PURE__ */ import_react26.default.createElement(L, { italic: true, color: FG.sub }, text2), tail.length > 0 ? /* @__PURE__ */ import_react26.default.createElement(L, { color: FG.faint }, `\xB7 ${tail.join(" \xB7 ")}`) : null);
48877
+ return /* @__PURE__ */ import_react26.default.createElement(Box_default, { marginY: 1, paddingX: 1, gap: 1 }, /* @__PURE__ */ import_react26.default.createElement(Pulse, { active: true, frames: PULSE_CIRCLE, settled: "\u25CF", color: TONE.accent }), /* @__PURE__ */ import_react26.default.createElement(Text, { italic: true, color: FG.sub }, text2), tail.length > 0 ? /* @__PURE__ */ import_react26.default.createElement(Text, { color: FG.faint }, `\xB7 ${tail.join(" \xB7 ")}`) : null);
48876
48878
  }
48877
48879
  function UndoBanner({
48878
48880
  banner
@@ -48880,7 +48882,7 @@ function UndoBanner({
48880
48882
  const paused = banner.pausedRemainingMs !== null;
48881
48883
  const ok = banner.results.filter((r) => r.status === "applied" || r.status === "created").length;
48882
48884
  const total = banner.results.length;
48883
- return /* @__PURE__ */ import_react26.default.createElement(W, { marginY: 1, paddingX: 1 }, /* @__PURE__ */ import_react26.default.createElement(L, { backgroundColor: TONE.accent, color: "black", bold: true }, ` \u2713 AUTO-APPLIED ${ok}/${total} `), /* @__PURE__ */ import_react26.default.createElement(L, { color: FG.faint }, " press "), /* @__PURE__ */ import_react26.default.createElement(L, { backgroundColor: TONE.brand, color: "black", bold: true }, " u "), /* @__PURE__ */ import_react26.default.createElement(L, { color: FG.faint }, " to undo \xB7 "), /* @__PURE__ */ import_react26.default.createElement(L, { backgroundColor: paused ? TONE.warn : FG.faint, color: "black", bold: true }, " space "), /* @__PURE__ */ import_react26.default.createElement(L, { color: FG.faint }, paused ? " to resume" : " to pause"), paused ? /* @__PURE__ */ import_react26.default.createElement(L, { color: TONE.warn, bold: true }, " \xB7 paused") : null);
48885
+ return /* @__PURE__ */ import_react26.default.createElement(Box_default, { marginY: 1, paddingX: 1 }, /* @__PURE__ */ import_react26.default.createElement(Text, { backgroundColor: TONE.accent, color: "ansi:black", bold: true }, ` \u2713 AUTO-APPLIED ${ok}/${total} `), /* @__PURE__ */ import_react26.default.createElement(Text, { color: FG.faint }, " press "), /* @__PURE__ */ import_react26.default.createElement(Text, { backgroundColor: TONE.brand, color: "ansi:black", bold: true }, " u "), /* @__PURE__ */ import_react26.default.createElement(Text, { color: FG.faint }, " to undo \xB7 "), /* @__PURE__ */ import_react26.default.createElement(Text, { backgroundColor: paused ? TONE.warn : FG.faint, color: "ansi:black", bold: true }, " space "), /* @__PURE__ */ import_react26.default.createElement(Text, { color: FG.faint }, paused ? " to resume" : " to pause"), paused ? /* @__PURE__ */ import_react26.default.createElement(Text, { color: TONE.warn, bold: true }, " \xB7 paused") : null);
48884
48886
  }
48885
48887
  function subagentPhaseLabel(phase, iter, elapsedMs) {
48886
48888
  if (phase === "summarising") return "summarising findings\u2026";
@@ -48905,7 +48907,7 @@ function SubagentRow({ activity }) {
48905
48907
  meta: [`iter ${activity.iter}`, `${seconds}s`],
48906
48908
  right: modelBadge ? /* @__PURE__ */ import_react26.default.createElement(Pill2, { label: modelBadge.label, ...PILL_MODEL[modelBadge.kind], bold: false }) : null
48907
48909
  }
48908
- ), /* @__PURE__ */ import_react26.default.createElement(L, { color: FG.faint }, "task ", /* @__PURE__ */ import_react26.default.createElement(L, { color: FG.sub }, activity.task)), /* @__PURE__ */ import_react26.default.createElement(L, { color: FG.faint }, "last ", last ? /* @__PURE__ */ import_react26.default.createElement(import_react26.default.Fragment, null, /* @__PURE__ */ import_react26.default.createElement(L, { color: last.color }, `${last.glyph} `), /* @__PURE__ */ import_react26.default.createElement(L, { color: FG.body }, last.label), last.meta ? /* @__PURE__ */ import_react26.default.createElement(L, { color: FG.faint }, ` ${last.meta}`) : null) : /* @__PURE__ */ import_react26.default.createElement(L, { color: FG.faint }, t("editMode.queuedDots"))), streamLine ? /* @__PURE__ */ import_react26.default.createElement(L, { color: FG.faint }, "flow ", /* @__PURE__ */ import_react26.default.createElement(L, { color: FG.sub }, streamLine)) : null, /* @__PURE__ */ import_react26.default.createElement(L, { color: TONE.brand }, "\u25B6 ", phase));
48910
+ ), /* @__PURE__ */ import_react26.default.createElement(Text, { color: FG.faint }, "task ", /* @__PURE__ */ import_react26.default.createElement(Text, { color: FG.sub }, activity.task)), /* @__PURE__ */ import_react26.default.createElement(Text, { color: FG.faint }, "last ", last ? /* @__PURE__ */ import_react26.default.createElement(import_react26.default.Fragment, null, /* @__PURE__ */ import_react26.default.createElement(Text, { color: last.color }, `${last.glyph} `), /* @__PURE__ */ import_react26.default.createElement(Text, { color: FG.body }, last.label), last.meta ? /* @__PURE__ */ import_react26.default.createElement(Text, { color: FG.faint }, ` ${last.meta}`) : null) : /* @__PURE__ */ import_react26.default.createElement(Text, { color: FG.faint }, t("editMode.queuedDots"))), streamLine ? /* @__PURE__ */ import_react26.default.createElement(Text, { color: FG.faint }, "flow ", /* @__PURE__ */ import_react26.default.createElement(Text, { color: FG.sub }, streamLine)) : null, /* @__PURE__ */ import_react26.default.createElement(Text, { color: TONE.brand }, "\u25B6 ", phase));
48909
48911
  }
48910
48912
  function formatBytes(n) {
48911
48913
  if (n < 1024) return `${n} B`;
@@ -48947,7 +48949,7 @@ function SubagentLiveStack({
48947
48949
  title: "subagents",
48948
48950
  subtitle: metaParts.join(" \xB7 ")
48949
48951
  }
48950
- ), visible.map((a) => /* @__PURE__ */ import_react26.default.createElement(CompactSubagentLine, { key: a.runId, activity: a })), overflow > 0 ? /* @__PURE__ */ import_react26.default.createElement(L, { color: FG.faint }, ` +${overflow} more running\u2026`) : null);
48952
+ ), visible.map((a) => /* @__PURE__ */ import_react26.default.createElement(CompactSubagentLine, { key: a.runId, activity: a })), overflow > 0 ? /* @__PURE__ */ import_react26.default.createElement(Text, { color: FG.faint }, ` +${overflow} more running\u2026`) : null);
48951
48953
  }
48952
48954
  function CompactSubagentLine({ activity }) {
48953
48955
  const summarising = activity.phase === "summarising";
@@ -48956,7 +48958,7 @@ function CompactSubagentLine({ activity }) {
48956
48958
  const title2 = activity.skillName ?? truncate(activity.task, 28);
48957
48959
  const titlePadded = title2.padEnd(28);
48958
48960
  const last = activity.lastInner;
48959
- return /* @__PURE__ */ import_react26.default.createElement(W, { flexDirection: "row" }, /* @__PURE__ */ import_react26.default.createElement(L, null, " "), /* @__PURE__ */ import_react26.default.createElement(Pulse, { active: true, frames: PULSE_HEX, settled: summarising ? "\u25B6" : "\u232C", color: glyphColor }), /* @__PURE__ */ import_react26.default.createElement(L, null, " "), /* @__PURE__ */ import_react26.default.createElement(L, { color: FG.body }, titlePadded), /* @__PURE__ */ import_react26.default.createElement(L, { color: FG.faint }, ` iter ${String(activity.iter).padStart(2)} \xB7 ${seconds}s \xB7 `), last ? /* @__PURE__ */ import_react26.default.createElement(import_react26.default.Fragment, null, /* @__PURE__ */ import_react26.default.createElement(L, { color: last.color }, `${last.glyph} `), /* @__PURE__ */ import_react26.default.createElement(L, { color: FG.body }, truncate(last.label, 18)), last.meta ? /* @__PURE__ */ import_react26.default.createElement(L, { color: FG.faint }, ` ${last.meta}`) : null) : /* @__PURE__ */ import_react26.default.createElement(L, { color: FG.faint }, t("editMode.queuedDots")));
48961
+ return /* @__PURE__ */ import_react26.default.createElement(Box_default, { flexDirection: "row" }, /* @__PURE__ */ import_react26.default.createElement(Text, null, " "), /* @__PURE__ */ import_react26.default.createElement(Pulse, { active: true, frames: PULSE_HEX, settled: summarising ? "\u25B6" : "\u232C", color: glyphColor }), /* @__PURE__ */ import_react26.default.createElement(Text, null, " "), /* @__PURE__ */ import_react26.default.createElement(Text, { color: FG.body }, titlePadded), /* @__PURE__ */ import_react26.default.createElement(Text, { color: FG.faint }, ` iter ${String(activity.iter).padStart(2)} \xB7 ${seconds}s \xB7 `), last ? /* @__PURE__ */ import_react26.default.createElement(import_react26.default.Fragment, null, /* @__PURE__ */ import_react26.default.createElement(Text, { color: last.color }, `${last.glyph} `), /* @__PURE__ */ import_react26.default.createElement(Text, { color: FG.body }, truncate(last.label, 18)), last.meta ? /* @__PURE__ */ import_react26.default.createElement(Text, { color: FG.faint }, ` ${last.meta}`) : null) : /* @__PURE__ */ import_react26.default.createElement(Text, { color: FG.faint }, t("editMode.queuedDots")));
48960
48962
  }
48961
48963
  function truncate(text2, max) {
48962
48964
  return text2.length > max ? `${text2.slice(0, max)}\u2026` : text2;
@@ -48984,7 +48986,7 @@ function OngoingToolRow({
48984
48986
  if (secs >= 1) tailParts.push(formatElapsed(secs));
48985
48987
  if (tokens > 0) tailParts.push(`\u2193 ${tokens.toLocaleString()} tok`);
48986
48988
  if (tps !== null) tailParts.push(`${tps} t/s`);
48987
- return /* @__PURE__ */ import_react26.default.createElement(W, { marginY: 1, flexDirection: "column", paddingX: 1 }, /* @__PURE__ */ import_react26.default.createElement(W, { gap: 1 }, /* @__PURE__ */ import_react26.default.createElement(Pulse, { active: true, frames: PULSE_SQUARE, settled: "\u25A3", color: CARD.tool.color }), /* @__PURE__ */ import_react26.default.createElement(L, { color: CARD.tool.color, bold: true }, tool.name), /* @__PURE__ */ import_react26.default.createElement(L, { color: FG.faint }, "running", tailParts.length > 0 ? ` \xB7 ${tailParts.join(" \xB7 ")}` : "")), subagentBytesLine ? /* @__PURE__ */ import_react26.default.createElement(W, { paddingLeft: 3 }, /* @__PURE__ */ import_react26.default.createElement(L, { color: FG.faint }, subagentBytesLine)) : null, progress ? /* @__PURE__ */ import_react26.default.createElement(W, { paddingLeft: 3 }, /* @__PURE__ */ import_react26.default.createElement(L, { color: TONE.brand }, renderProgressLine(progress))) : null, summary ? /* @__PURE__ */ import_react26.default.createElement(W, { paddingLeft: 3 }, /* @__PURE__ */ import_react26.default.createElement(L, { color: FG.faint }, summary)) : null);
48989
+ return /* @__PURE__ */ import_react26.default.createElement(Box_default, { marginY: 1, flexDirection: "column", paddingX: 1 }, /* @__PURE__ */ import_react26.default.createElement(Box_default, { gap: 1 }, /* @__PURE__ */ import_react26.default.createElement(Pulse, { active: true, frames: PULSE_SQUARE, settled: "\u25A3", color: CARD.tool.color }), /* @__PURE__ */ import_react26.default.createElement(Text, { color: CARD.tool.color, bold: true }, tool.name), /* @__PURE__ */ import_react26.default.createElement(Text, { color: FG.faint }, "running", tailParts.length > 0 ? ` \xB7 ${tailParts.join(" \xB7 ")}` : "")), subagentBytesLine ? /* @__PURE__ */ import_react26.default.createElement(Box_default, { paddingLeft: 3 }, /* @__PURE__ */ import_react26.default.createElement(Text, { color: FG.faint }, subagentBytesLine)) : null, progress ? /* @__PURE__ */ import_react26.default.createElement(Box_default, { paddingLeft: 3 }, /* @__PURE__ */ import_react26.default.createElement(Text, { color: TONE.brand }, renderProgressLine(progress))) : null, summary ? /* @__PURE__ */ import_react26.default.createElement(Box_default, { paddingLeft: 3 }, /* @__PURE__ */ import_react26.default.createElement(Text, { color: FG.faint }, summary)) : null);
48988
48990
  }
48989
48991
  function renderProgressLine(p) {
48990
48992
  const msg = p.message ? ` ${p.message}` : "";
@@ -49062,7 +49064,7 @@ function ToastRail() {
49062
49064
  const toasts = useAgentState((s) => s.toasts);
49063
49065
  const dispatch = useDispatch();
49064
49066
  useSlowTick();
49065
- const { stdout } = bv();
49067
+ const { stdout } = useStdout();
49066
49068
  const cols = stdout?.columns ?? 80;
49067
49069
  const rule = "\u2501".repeat(Math.max(20, cols - 4));
49068
49070
  const now = Date.now();
@@ -49078,12 +49080,12 @@ function ToastRail() {
49078
49080
  }, [toasts, dispatch]);
49079
49081
  const visible = toasts.filter((t2) => now - t2.bornAt < t2.ttlMs);
49080
49082
  if (visible.length === 0) return null;
49081
- return /* @__PURE__ */ import_react27.default.createElement(W, { flexDirection: "column" }, visible.map((t2) => {
49083
+ return /* @__PURE__ */ import_react27.default.createElement(Box_default, { flexDirection: "column" }, visible.map((t2) => {
49082
49084
  const color = TONE_COLOR[t2.tone];
49083
49085
  const glyph = TONE_GLYPH[t2.tone];
49084
49086
  const body = bodyColor(t2, now);
49085
49087
  const remainingSec = Math.max(0, Math.ceil((t2.ttlMs - (now - t2.bornAt)) / 1e3));
49086
- return /* @__PURE__ */ import_react27.default.createElement(W, { key: t2.id, flexDirection: "column", paddingX: 1 }, /* @__PURE__ */ import_react27.default.createElement(L, { color }, rule), /* @__PURE__ */ import_react27.default.createElement(W, { flexDirection: "row" }, /* @__PURE__ */ import_react27.default.createElement(L, { color }, glyph), /* @__PURE__ */ import_react27.default.createElement(L, { bold: true, color: body }, ` ${t2.title}`), t2.detail !== void 0 && /* @__PURE__ */ import_react27.default.createElement(L, { color: FG.sub }, ` \xB7 ${t2.detail}`), /* @__PURE__ */ import_react27.default.createElement(W, { flexGrow: 1 }), /* @__PURE__ */ import_react27.default.createElement(L, { color: FG.faint }, `${remainingSec}s`)));
49088
+ return /* @__PURE__ */ import_react27.default.createElement(Box_default, { key: t2.id, flexDirection: "column", paddingX: 1 }, /* @__PURE__ */ import_react27.default.createElement(Text, { color }, rule), /* @__PURE__ */ import_react27.default.createElement(Box_default, { flexDirection: "row" }, /* @__PURE__ */ import_react27.default.createElement(Text, { color }, glyph), /* @__PURE__ */ import_react27.default.createElement(Text, { bold: true, color: body }, ` ${t2.title}`), t2.detail !== void 0 && /* @__PURE__ */ import_react27.default.createElement(Text, { color: FG.sub }, ` \xB7 ${t2.detail}`), /* @__PURE__ */ import_react27.default.createElement(Box_default, { flexGrow: 1 }), /* @__PURE__ */ import_react27.default.createElement(Text, { color: FG.faint }, `${remainingSec}s`)));
49087
49089
  }));
49088
49090
  }
49089
49091
 
@@ -49125,11 +49127,11 @@ function PlanCard({ card }) {
49125
49127
  title: card.title,
49126
49128
  meta: [progress]
49127
49129
  }
49128
- ), window2.hiddenBefore > 0 ? /* @__PURE__ */ import_react28.default.createElement(W, { flexDirection: "row", gap: 1 }, /* @__PURE__ */ import_react28.default.createElement(L, { color: tone.ok }, "\u2713"), /* @__PURE__ */ import_react28.default.createElement(L, { color: fg.faint }, `\u22EF ${window2.hiddenBefore} ${t("cardLabels.done")}`)) : null, window2.steps.map((step) => {
49130
+ ), window2.hiddenBefore > 0 ? /* @__PURE__ */ import_react28.default.createElement(Box_default, { flexDirection: "row", gap: 1 }, /* @__PURE__ */ import_react28.default.createElement(Text, { color: tone.ok }, "\u2713"), /* @__PURE__ */ import_react28.default.createElement(Text, { color: fg.faint }, `\u22EF ${window2.hiddenBefore} ${t("cardLabels.done")}`)) : null, window2.steps.map((step) => {
49129
49131
  const isActive = step.status === "running";
49130
49132
  const titleColor = isActive ? fg.strong : fg.sub;
49131
- return /* @__PURE__ */ import_react28.default.createElement(W, { key: step.id, flexDirection: "row", gap: 1 }, isActive ? /* @__PURE__ */ import_react28.default.createElement(Pulse, { active: true, frames: PULSE_DIAMOND, settled: "\u25C6", color: statusColor[step.status] }) : /* @__PURE__ */ import_react28.default.createElement(L, { color: statusColor[step.status] }, STATUS_GLYPH[step.status]), /* @__PURE__ */ import_react28.default.createElement(L, { bold: isActive, color: titleColor }, `${step.indexLabel}. ${step.title}`), isActive ? /* @__PURE__ */ import_react28.default.createElement(L, { color: toneActive.brand }, t("cardLabels.inProgress")) : null);
49132
- }), window2.hiddenAfter > 0 ? /* @__PURE__ */ import_react28.default.createElement(W, { flexDirection: "row", gap: 1 }, /* @__PURE__ */ import_react28.default.createElement(L, { color: fg.faint }, "\u25CB"), /* @__PURE__ */ import_react28.default.createElement(L, { color: fg.faint }, `\u22EF ${window2.hiddenAfter} ${t("cardLabels.upcoming")}`)) : null);
49133
+ return /* @__PURE__ */ import_react28.default.createElement(Box_default, { key: step.id, flexDirection: "row", gap: 1 }, isActive ? /* @__PURE__ */ import_react28.default.createElement(Pulse, { active: true, frames: PULSE_DIAMOND, settled: "\u25C6", color: statusColor[step.status] }) : /* @__PURE__ */ import_react28.default.createElement(Text, { color: statusColor[step.status] }, STATUS_GLYPH[step.status]), /* @__PURE__ */ import_react28.default.createElement(Text, { bold: isActive, color: titleColor }, `${step.indexLabel}. ${step.title}`), isActive ? /* @__PURE__ */ import_react28.default.createElement(Text, { color: toneActive.brand }, t("cardLabels.inProgress")) : null);
49134
+ }), window2.hiddenAfter > 0 ? /* @__PURE__ */ import_react28.default.createElement(Box_default, { flexDirection: "row", gap: 1 }, /* @__PURE__ */ import_react28.default.createElement(Text, { color: fg.faint }, "\u25CB"), /* @__PURE__ */ import_react28.default.createElement(Text, { color: fg.faint }, `\u22EF ${window2.hiddenAfter} ${t("cardLabels.upcoming")}`)) : null);
49133
49135
  }
49134
49136
  function pickWindow(steps) {
49135
49137
  if (steps.length <= VISIBLE_WINDOW) {
@@ -49189,7 +49191,7 @@ var LiveActivityArea = import_react30.default.memo(
49189
49191
  hideUndo
49190
49192
  }) => {
49191
49193
  useRenderTrace("LiveActivityArea");
49192
- return /* @__PURE__ */ import_react30.default.createElement(W, { flexDirection: "column", flexShrink: 0, flexWrap: "nowrap" }, noTakeoverOverlay && ongoingTool ? /* @__PURE__ */ import_react30.default.createElement(
49194
+ return /* @__PURE__ */ import_react30.default.createElement(Box_default, { flexDirection: "column", flexShrink: 0, flexWrap: "nowrap" }, noTakeoverOverlay && ongoingTool ? /* @__PURE__ */ import_react30.default.createElement(
49193
49195
  OngoingToolRow,
49194
49196
  {
49195
49197
  tool: ongoingTool,
@@ -49463,13 +49465,13 @@ function McpBrowser({
49463
49465
  onClose();
49464
49466
  }
49465
49467
  });
49466
- return /* @__PURE__ */ import_react31.default.createElement(W, { flexDirection: "column", paddingX: 1 }, /* @__PURE__ */ import_react31.default.createElement(W, null, /* @__PURE__ */ import_react31.default.createElement(L, { bold: true, color: COLOR.brand }, t("mcpBrowser.title")), /* @__PURE__ */ import_react31.default.createElement(
49467
- L,
49468
+ return /* @__PURE__ */ import_react31.default.createElement(Box_default, { flexDirection: "column", paddingX: 1 }, /* @__PURE__ */ import_react31.default.createElement(Box_default, null, /* @__PURE__ */ import_react31.default.createElement(Text, { bold: true, color: COLOR.brand }, t("mcpBrowser.title")), /* @__PURE__ */ import_react31.default.createElement(
49469
+ Text,
49468
49470
  {
49469
- dimColor: true
49471
+ dim: true
49470
49472
  },
49471
49473
  ` \xB7 ${configPath} \xB7 ${t("mcpBrowser.serverCount", { count: servers.length, s: servers.length === 1 ? "" : "s" })}`
49472
- )), /* @__PURE__ */ import_react31.default.createElement(W, { marginTop: 1, flexDirection: "column" }, servers.length === 0 ? /* @__PURE__ */ import_react31.default.createElement(L, { dimColor: true }, t("mcpBrowser.empty")) : servers.map((s, i) => /* @__PURE__ */ import_react31.default.createElement(ServerRow, { key: s.label + s.spec, server: s, active: i === index }))), /* @__PURE__ */ import_react31.default.createElement(W, { marginTop: 1 }, /* @__PURE__ */ import_react31.default.createElement(L, { dimColor: true }, t("mcpBrowser.footer"))));
49474
+ )), /* @__PURE__ */ import_react31.default.createElement(Box_default, { marginTop: 1, flexDirection: "column" }, servers.length === 0 ? /* @__PURE__ */ import_react31.default.createElement(Text, { dim: true }, t("mcpBrowser.empty")) : servers.map((s, i) => /* @__PURE__ */ import_react31.default.createElement(ServerRow, { key: s.label + s.spec, server: s, active: i === index }))), /* @__PURE__ */ import_react31.default.createElement(Box_default, { marginTop: 1 }, /* @__PURE__ */ import_react31.default.createElement(Text, { dim: true }, t("mcpBrowser.footer"))));
49473
49475
  }
49474
49476
  function ServerRow({ server, active: active2 }) {
49475
49477
  const { label, toolCount, report } = server;
@@ -49478,7 +49480,7 @@ function ServerRow({ server, active: active2 }) {
49478
49480
  const elapsed = report.elapsedMs;
49479
49481
  const health = healthBadge(elapsed);
49480
49482
  const counts = `${toolCount} tools \xB7 ${resourceCount} resources \xB7 ${promptCount} prompts`;
49481
- return /* @__PURE__ */ import_react31.default.createElement(W, { flexDirection: "column", marginBottom: active2 ? 1 : 0 }, /* @__PURE__ */ import_react31.default.createElement(W, null, /* @__PURE__ */ import_react31.default.createElement(L, { color: active2 ? COLOR.brand : void 0 }, active2 ? "\u25B8 " : " "), /* @__PURE__ */ import_react31.default.createElement(L, { bold: active2, color: active2 ? "#e6edf3" : void 0 }, label.padEnd(14)), /* @__PURE__ */ import_react31.default.createElement(L, { color: health.color }, `${health.glyph} ${health.label}`), /* @__PURE__ */ import_react31.default.createElement(L, { dimColor: true }, ` ${counts}`)), active2 ? /* @__PURE__ */ import_react31.default.createElement(W, null, /* @__PURE__ */ import_react31.default.createElement(L, { dimColor: true }, ` ${capabilityList(server)}`)) : null);
49483
+ return /* @__PURE__ */ import_react31.default.createElement(Box_default, { flexDirection: "column", marginBottom: active2 ? 1 : 0 }, /* @__PURE__ */ import_react31.default.createElement(Box_default, null, /* @__PURE__ */ import_react31.default.createElement(Text, { color: active2 ? COLOR.brand : void 0 }, active2 ? "\u25B8 " : " "), /* @__PURE__ */ import_react31.default.createElement(Text, { bold: active2, color: active2 ? "#e6edf3" : void 0 }, label.padEnd(14)), /* @__PURE__ */ import_react31.default.createElement(Text, { color: health.color }, `${health.glyph} ${health.label}`), /* @__PURE__ */ import_react31.default.createElement(Text, { dim: true }, ` ${counts}`)), active2 ? /* @__PURE__ */ import_react31.default.createElement(Box_default, null, /* @__PURE__ */ import_react31.default.createElement(Text, { dim: true }, ` ${capabilityList(server)}`)) : null);
49482
49484
  }
49483
49485
  function capabilityList(s) {
49484
49486
  const caps = ["tools/list", "tools/call"];
@@ -49765,25 +49767,25 @@ function McpMarketplace({ onClose, postInfo, reloadMcp, pickerPorts }) {
49765
49767
  Math.min(state2.selected - Math.floor(VISIBLE_ROWS / 2), filtered.length - VISIBLE_ROWS)
49766
49768
  );
49767
49769
  const window2 = filtered.slice(Math.max(0, start), Math.max(0, start) + VISIBLE_ROWS);
49768
- return /* @__PURE__ */ import_react32.default.createElement(W, { flexDirection: "column", paddingX: 1 }, /* @__PURE__ */ import_react32.default.createElement(W, null, /* @__PURE__ */ import_react32.default.createElement(L, { bold: true, color: COLOR.brand }, "\u25C8 MCP marketplace"), /* @__PURE__ */ import_react32.default.createElement(L, { dimColor: true }, ` \xB7 ${state2.status}`)), /* @__PURE__ */ import_react32.default.createElement(W, { marginTop: 1 }, /* @__PURE__ */ import_react32.default.createElement(L, null, t("mcpMarketplace.filter")), /* @__PURE__ */ import_react32.default.createElement(L, null, state2.query || t("mcpMarketplace.filterPlaceholder")), /* @__PURE__ */ import_react32.default.createElement(
49769
- L,
49770
+ return /* @__PURE__ */ import_react32.default.createElement(Box_default, { flexDirection: "column", paddingX: 1 }, /* @__PURE__ */ import_react32.default.createElement(Box_default, null, /* @__PURE__ */ import_react32.default.createElement(Text, { bold: true, color: COLOR.brand }, "\u25C8 MCP marketplace"), /* @__PURE__ */ import_react32.default.createElement(Text, { dim: true }, ` \xB7 ${state2.status}`)), /* @__PURE__ */ import_react32.default.createElement(Box_default, { marginTop: 1 }, /* @__PURE__ */ import_react32.default.createElement(Text, null, t("mcpMarketplace.filter")), /* @__PURE__ */ import_react32.default.createElement(Text, null, state2.query || t("mcpMarketplace.filterPlaceholder")), /* @__PURE__ */ import_react32.default.createElement(
49771
+ Text,
49770
49772
  {
49771
- dimColor: true
49773
+ dim: true
49772
49774
  },
49773
49775
  ` ${t(filtered.length === 1 ? "mcpMarketplace.matchSingular" : "mcpMarketplace.matchPlural", { n: filtered.length })}`
49774
- )), /* @__PURE__ */ import_react32.default.createElement(W, { marginTop: 1, flexDirection: "column" }, window2.length === 0 ? /* @__PURE__ */ import_react32.default.createElement(L, { dimColor: true }, state2.loading ? t("mcpMarketplace.loading") : t("mcpMarketplace.noEntries")) : window2.map((e, i) => {
49776
+ )), /* @__PURE__ */ import_react32.default.createElement(Box_default, { marginTop: 1, flexDirection: "column" }, window2.length === 0 ? /* @__PURE__ */ import_react32.default.createElement(Text, { dim: true }, state2.loading ? t("mcpMarketplace.loading") : t("mcpMarketplace.noEntries")) : window2.map((e, i) => {
49775
49777
  const idx = (start || 0) + i;
49776
49778
  const active2 = idx === state2.selected;
49777
49779
  const tag2 = e.source === "official" ? "[off]" : e.source === "smithery" ? "[smt]" : "[loc]";
49778
49780
  const installedSpec = isInstalled(state2.installedSpecs, e);
49779
49781
  const installedBadge = installedSpec ? " \u2713" : "";
49780
49782
  const pop = e.popularity !== void 0 ? ` \xB7 ${e.popularity.toLocaleString()}` : "";
49781
- return /* @__PURE__ */ import_react32.default.createElement(W, { key: e.name }, /* @__PURE__ */ import_react32.default.createElement(L, { color: active2 ? COLOR.brand : void 0 }, active2 ? "\u25B8 " : " "), /* @__PURE__ */ import_react32.default.createElement(L, { bold: active2 }, e.name.padEnd(38).slice(0, 38)), /* @__PURE__ */ import_react32.default.createElement(L, { dimColor: true }, ` ${tag2}${pop}${installedBadge}`));
49782
- })), selected ? /* @__PURE__ */ import_react32.default.createElement(W, { marginTop: 1, flexDirection: "column" }, /* @__PURE__ */ import_react32.default.createElement(L, { bold: true }, overlay?.[selected.name]?.title ?? selected.title, overlay?.[selected.name] ? /* @__PURE__ */ import_react32.default.createElement(L, { dimColor: true }, ` \xB7 ${selected.title}`) : null), /* @__PURE__ */ import_react32.default.createElement(L, { dimColor: true }, overlay?.[selected.name]?.description ?? selected.description?.slice(0, 200) ?? null), selected.install ? /* @__PURE__ */ import_react32.default.createElement(L, { dimColor: true }, t("mcpMarketplace.specLine", {
49783
+ return /* @__PURE__ */ import_react32.default.createElement(Box_default, { key: e.name }, /* @__PURE__ */ import_react32.default.createElement(Text, { color: active2 ? COLOR.brand : void 0 }, active2 ? "\u25B8 " : " "), /* @__PURE__ */ import_react32.default.createElement(Text, { bold: active2 }, e.name.padEnd(38).slice(0, 38)), /* @__PURE__ */ import_react32.default.createElement(Text, { dim: true }, ` ${tag2}${pop}${installedBadge}`));
49784
+ })), selected ? /* @__PURE__ */ import_react32.default.createElement(Box_default, { marginTop: 1, flexDirection: "column" }, /* @__PURE__ */ import_react32.default.createElement(Text, { bold: true }, overlay?.[selected.name]?.title ?? selected.title, overlay?.[selected.name] ? /* @__PURE__ */ import_react32.default.createElement(Text, { dim: true }, ` \xB7 ${selected.title}`) : null), /* @__PURE__ */ import_react32.default.createElement(Text, { dim: true }, overlay?.[selected.name]?.description ?? selected.description?.slice(0, 200) ?? null), selected.install ? /* @__PURE__ */ import_react32.default.createElement(Text, { dim: true }, t("mcpMarketplace.specLine", {
49783
49785
  runtime: selected.install.runtime,
49784
49786
  id: selected.install.packageId ?? selected.install.url ?? "\u2014",
49785
49787
  transport: selected.install.transport
49786
- })) : /* @__PURE__ */ import_react32.default.createElement(L, { dimColor: true }, t("mcpMarketplace.smitheryDetail")), selected.install?.requiredEnv?.length ? /* @__PURE__ */ import_react32.default.createElement(L, { color: "yellow" }, t("mcpMarketplace.needsEnv", { env: selected.install.requiredEnv.join(", ") })) : null) : null, /* @__PURE__ */ import_react32.default.createElement(W, { marginTop: 1 }, /* @__PURE__ */ import_react32.default.createElement(L, { dimColor: true }, t("mcpMarketplace.footerHint"))));
49788
+ })) : /* @__PURE__ */ import_react32.default.createElement(Text, { dim: true }, t("mcpMarketplace.smitheryDetail")), selected.install?.requiredEnv?.length ? /* @__PURE__ */ import_react32.default.createElement(Text, { color: "ansi:yellow" }, t("mcpMarketplace.needsEnv", { env: selected.install.requiredEnv.join(", ") })) : null) : null, /* @__PURE__ */ import_react32.default.createElement(Box_default, { marginTop: 1 }, /* @__PURE__ */ import_react32.default.createElement(Text, { dim: true }, t("mcpMarketplace.footerHint"))));
49787
49789
  }
49788
49790
 
49789
49791
  // src/cli/ui/McpHub.tsx
@@ -49802,14 +49804,14 @@ function McpHub({
49802
49804
  if (ev.paste) return;
49803
49805
  if (ev.tab) setTab((t2) => t2 === "live" ? "marketplace" : "live");
49804
49806
  });
49805
- return /* @__PURE__ */ import_react33.default.createElement(W, { flexDirection: "column" }, /* @__PURE__ */ import_react33.default.createElement(W, { paddingX: 1 }, /* @__PURE__ */ import_react33.default.createElement(L, { bold: true, color: COLOR.brand }, "\u25C8 MCP"), /* @__PURE__ */ import_react33.default.createElement(L, null, " "), /* @__PURE__ */ import_react33.default.createElement(
49807
+ return /* @__PURE__ */ import_react33.default.createElement(Box_default, { flexDirection: "column" }, /* @__PURE__ */ import_react33.default.createElement(Box_default, { paddingX: 1 }, /* @__PURE__ */ import_react33.default.createElement(Text, { bold: true, color: COLOR.brand }, "\u25C8 MCP"), /* @__PURE__ */ import_react33.default.createElement(Text, null, " "), /* @__PURE__ */ import_react33.default.createElement(
49806
49808
  TabPill,
49807
49809
  {
49808
49810
  label: t("handlers.mcp.liveTab"),
49809
49811
  count: liveServers.length,
49810
49812
  active: tab === "live"
49811
49813
  }
49812
- ), /* @__PURE__ */ import_react33.default.createElement(L, null, " "), /* @__PURE__ */ import_react33.default.createElement(TabPill, { label: t("handlers.mcp.marketplaceTab"), active: tab === "marketplace" }), /* @__PURE__ */ import_react33.default.createElement(L, { dimColor: true }, ` ${t("handlers.mcp.tabHint")}`)), tab === "live" ? /* @__PURE__ */ import_react33.default.createElement(
49814
+ ), /* @__PURE__ */ import_react33.default.createElement(Text, null, " "), /* @__PURE__ */ import_react33.default.createElement(TabPill, { label: t("handlers.mcp.marketplaceTab"), active: tab === "marketplace" }), /* @__PURE__ */ import_react33.default.createElement(Text, { dim: true }, ` ${t("handlers.mcp.tabHint")}`)), tab === "live" ? /* @__PURE__ */ import_react33.default.createElement(
49813
49815
  McpBrowser,
49814
49816
  {
49815
49817
  servers: liveServers,
@@ -49831,9 +49833,9 @@ function McpHub({
49831
49833
  function TabPill({ label, count, active: active2 }) {
49832
49834
  const text2 = count !== void 0 ? `${label} (${count})` : label;
49833
49835
  if (active2) {
49834
- return /* @__PURE__ */ import_react33.default.createElement(L, { bold: true, color: COLOR.brand }, "[", text2, "]");
49836
+ return /* @__PURE__ */ import_react33.default.createElement(Text, { bold: true, color: COLOR.brand }, "[", text2, "]");
49835
49837
  }
49836
- return /* @__PURE__ */ import_react33.default.createElement(L, { dimColor: true }, ` ${text2} `);
49838
+ return /* @__PURE__ */ import_react33.default.createElement(Text, { dim: true }, ` ${text2} `);
49837
49839
  }
49838
49840
 
49839
49841
  // src/cli/ui/ModelPicker.tsx
@@ -49857,7 +49859,7 @@ function ModelPicker({
49857
49859
  const rows = [...effortRows, ...modelRows];
49858
49860
  const initialIndex = effortRows.length + Math.max(0, modelList.indexOf(current));
49859
49861
  const [focus, setFocus] = (0, import_react34.useState)(initialIndex);
49860
- const { stdout } = bv();
49862
+ const { stdout } = useStdout();
49861
49863
  const termRows = stdout?.rows ?? 40;
49862
49864
  const visibleCount = Math.max(6, termRows - PAGE_MARGIN3);
49863
49865
  useKeystroke((ev) => {
@@ -49885,12 +49887,12 @@ function ModelPicker({
49885
49887
  const loading = models === null;
49886
49888
  const empty = models !== null && models.length === 0;
49887
49889
  let lastSection = null;
49888
- return /* @__PURE__ */ import_react34.default.createElement(W, { flexDirection: "column", marginY: 1 }, /* @__PURE__ */ import_react34.default.createElement(W, null, /* @__PURE__ */ import_react34.default.createElement(L, { bold: true, color: TONE.brand }, t("modelPicker.header")), /* @__PURE__ */ import_react34.default.createElement(L, { color: FG.meta }, loading ? t("modelPicker.loading") : empty ? t("modelPicker.catalogEmpty") : t("modelPicker.modelsAvailable", { count: modelList.length }))), /* @__PURE__ */ import_react34.default.createElement(W, { height: 1 }), hiddenAbove > 0 ? /* @__PURE__ */ import_react34.default.createElement(W, null, /* @__PURE__ */ import_react34.default.createElement(L, { color: FG.faint }, ` \u2026 ${hiddenAbove}`)) : null, shown.map((row2, i) => {
49890
+ return /* @__PURE__ */ import_react34.default.createElement(Box_default, { flexDirection: "column", marginY: 1 }, /* @__PURE__ */ import_react34.default.createElement(Box_default, null, /* @__PURE__ */ import_react34.default.createElement(Text, { bold: true, color: TONE.brand }, t("modelPicker.header")), /* @__PURE__ */ import_react34.default.createElement(Text, { color: FG.meta }, loading ? t("modelPicker.loading") : empty ? t("modelPicker.catalogEmpty") : t("modelPicker.modelsAvailable", { count: modelList.length }))), /* @__PURE__ */ import_react34.default.createElement(Box_default, { height: 1 }), hiddenAbove > 0 ? /* @__PURE__ */ import_react34.default.createElement(Box_default, null, /* @__PURE__ */ import_react34.default.createElement(Text, { color: FG.faint }, ` \u2026 ${hiddenAbove}`)) : null, shown.map((row2, i) => {
49889
49891
  const idx = start + i;
49890
49892
  const focused = idx === focus;
49891
49893
  const showHeader = row2.kind !== lastSection;
49892
49894
  lastSection = row2.kind;
49893
- const header = showHeader ? /* @__PURE__ */ import_react34.default.createElement(W, { key: `hdr-${row2.kind}`, marginTop: idx === 0 ? 0 : 1 }, /* @__PURE__ */ import_react34.default.createElement(L, { color: FG.meta }, row2.kind === "effort" ? t("modelPicker.effortHeader") : t("modelPicker.modelsHeader"))) : null;
49895
+ const header = showHeader ? /* @__PURE__ */ import_react34.default.createElement(Box_default, { key: `hdr-${row2.kind}`, marginTop: idx === 0 ? 0 : 1 }, /* @__PURE__ */ import_react34.default.createElement(Text, { color: FG.meta }, row2.kind === "effort" ? t("modelPicker.effortHeader") : t("modelPicker.modelsHeader"))) : null;
49894
49896
  const body = row2.kind === "effort" ? /* @__PURE__ */ import_react34.default.createElement(
49895
49897
  EffortRow,
49896
49898
  {
@@ -49909,14 +49911,14 @@ function ModelPicker({
49909
49911
  }
49910
49912
  );
49911
49913
  return /* @__PURE__ */ import_react34.default.createElement(import_react34.default.Fragment, { key: `row-${idx}` }, header, body);
49912
- }), hiddenBelow > 0 ? /* @__PURE__ */ import_react34.default.createElement(W, null, /* @__PURE__ */ import_react34.default.createElement(L, { color: FG.faint }, t("cardLabels.more", { count: hiddenBelow }))) : null, /* @__PURE__ */ import_react34.default.createElement(W, { marginTop: 1 }, /* @__PURE__ */ import_react34.default.createElement(L, { color: FG.faint }, t("modelPicker.pickerFooter"))));
49914
+ }), hiddenBelow > 0 ? /* @__PURE__ */ import_react34.default.createElement(Box_default, null, /* @__PURE__ */ import_react34.default.createElement(Text, { color: FG.faint }, t("cardLabels.more", { count: hiddenBelow }))) : null, /* @__PURE__ */ import_react34.default.createElement(Box_default, { marginTop: 1 }, /* @__PURE__ */ import_react34.default.createElement(Text, { color: FG.faint }, t("modelPicker.pickerFooter"))));
49913
49915
  }
49914
49916
  function EffortRow({
49915
49917
  effort: effort2,
49916
49918
  focused,
49917
49919
  active: active2
49918
49920
  }) {
49919
- return /* @__PURE__ */ import_react34.default.createElement(W, null, /* @__PURE__ */ import_react34.default.createElement(L, { color: focused ? TONE.brand : FG.faint }, focused ? " \u25B8 " : " "), /* @__PURE__ */ import_react34.default.createElement(L, { bold: focused, color: focused ? FG.strong : FG.sub }, effort2.padEnd(8)), /* @__PURE__ */ import_react34.default.createElement(L, { color: FG.meta }, t(`modelPicker.effortDesc.${effort2}`)), active2 ? /* @__PURE__ */ import_react34.default.createElement(L, { color: TONE.brand }, t("modelPicker.currentLabel")) : null);
49921
+ return /* @__PURE__ */ import_react34.default.createElement(Box_default, null, /* @__PURE__ */ import_react34.default.createElement(Text, { color: focused ? TONE.brand : FG.faint }, focused ? " \u25B8 " : " "), /* @__PURE__ */ import_react34.default.createElement(Text, { bold: focused, color: focused ? FG.strong : FG.sub }, effort2.padEnd(8)), /* @__PURE__ */ import_react34.default.createElement(Text, { color: FG.meta }, t(`modelPicker.effortDesc.${effort2}`)), active2 ? /* @__PURE__ */ import_react34.default.createElement(Text, { color: TONE.brand }, t("modelPicker.currentLabel")) : null);
49920
49922
  }
49921
49923
  function ModelRow({
49922
49924
  id,
@@ -49924,7 +49926,7 @@ function ModelRow({
49924
49926
  active: active2
49925
49927
  }) {
49926
49928
  const badge = modelBadgeFor(id);
49927
- return /* @__PURE__ */ import_react34.default.createElement(W, null, /* @__PURE__ */ import_react34.default.createElement(L, { color: focused ? TONE.brand : FG.faint }, focused ? " \u25B8 " : " "), /* @__PURE__ */ import_react34.default.createElement(L, { bold: focused, color: focused ? FG.strong : FG.sub }, id.padEnd(24)), /* @__PURE__ */ import_react34.default.createElement(L, null, " "), /* @__PURE__ */ import_react34.default.createElement(Pill2, { label: badge.label, ...PILL_MODEL[badge.kind], bold: false }), active2 ? /* @__PURE__ */ import_react34.default.createElement(L, { color: TONE.brand }, t("modelPicker.currentLabel")) : null);
49929
+ return /* @__PURE__ */ import_react34.default.createElement(Box_default, null, /* @__PURE__ */ import_react34.default.createElement(Text, { color: focused ? TONE.brand : FG.faint }, focused ? " \u25B8 " : " "), /* @__PURE__ */ import_react34.default.createElement(Text, { bold: focused, color: focused ? FG.strong : FG.sub }, id.padEnd(24)), /* @__PURE__ */ import_react34.default.createElement(Text, null, " "), /* @__PURE__ */ import_react34.default.createElement(Pill2, { label: badge.label, ...PILL_MODEL[badge.kind], bold: false }), active2 ? /* @__PURE__ */ import_react34.default.createElement(Text, { color: TONE.brand }, t("modelPicker.currentLabel")) : null);
49928
49930
  }
49929
49931
  var FALLBACK_MODELS = ["deepseek-v4-flash", "deepseek-v4-pro"];
49930
49932
 
@@ -49972,7 +49974,7 @@ function PathConfirm({ prompt, onChoose }) {
49972
49974
  metaRight: t("pathConfirm.awaiting"),
49973
49975
  footerHint: t("pathConfirm.pickFooter")
49974
49976
  },
49975
- /* @__PURE__ */ import_react35.default.createElement(W, { marginBottom: 1 }, /* @__PURE__ */ import_react35.default.createElement(L, { color: FG.faint }, prompt.preview ?? "")),
49977
+ /* @__PURE__ */ import_react35.default.createElement(Box_default, { marginBottom: 1 }, /* @__PURE__ */ import_react35.default.createElement(Text, { color: FG.faint }, prompt.preview ?? "")),
49976
49978
  /* @__PURE__ */ import_react35.default.createElement(InfoRows, { path, sandboxRoot: prompt.meta?.sandboxRoot, allowPrefix }),
49977
49979
  /* @__PURE__ */ import_react35.default.createElement(
49978
49980
  SingleSelect,
@@ -50013,7 +50015,7 @@ function InfoRows({
50013
50015
  rows.push({ label: t("pathConfirm.allowPrefixLabel"), value: allowPrefix });
50014
50016
  }
50015
50017
  const labelWidth = Math.max(...rows.map((r) => r.label.length));
50016
- return /* @__PURE__ */ import_react35.default.createElement(W, { flexDirection: "column", marginBottom: 1 }, rows.map((r) => /* @__PURE__ */ import_react35.default.createElement(W, { key: r.label, flexDirection: "row", gap: 1 }, /* @__PURE__ */ import_react35.default.createElement(L, { color: FG.faint }, r.label.padEnd(labelWidth)), /* @__PURE__ */ import_react35.default.createElement(L, { color: FG.body }, r.value))));
50018
+ return /* @__PURE__ */ import_react35.default.createElement(Box_default, { flexDirection: "column", marginBottom: 1 }, rows.map((r) => /* @__PURE__ */ import_react35.default.createElement(Box_default, { key: r.label, flexDirection: "row", gap: 1 }, /* @__PURE__ */ import_react35.default.createElement(Text, { color: FG.faint }, r.label.padEnd(labelWidth)), /* @__PURE__ */ import_react35.default.createElement(Text, { color: FG.body }, r.value))));
50017
50019
  }
50018
50020
 
50019
50021
  // src/cli/ui/PlanCheckpointConfirm.tsx
@@ -50035,7 +50037,7 @@ function CharBar({
50035
50037
  const total = Math.max(4, width);
50036
50038
  const clamped = Math.max(0, Math.min(100, Number.isFinite(pct) ? pct : 0));
50037
50039
  const filled = Math.round(total * clamped / 100);
50038
- return /* @__PURE__ */ import_react36.default.createElement(W, null, /* @__PURE__ */ import_react36.default.createElement(L, { color }, GLYPH.block.repeat(filled)), /* @__PURE__ */ import_react36.default.createElement(L, { color: emptyColor ?? COLOR.info, dimColor: true }, GLYPH.shade1.repeat(total - filled)), showLabel ? /* @__PURE__ */ import_react36.default.createElement(L, { dimColor: true }, ` ${label ?? `${Math.round(clamped)}%`}`) : null);
50040
+ return /* @__PURE__ */ import_react36.default.createElement(Box_default, null, /* @__PURE__ */ import_react36.default.createElement(Text, { color }, GLYPH.block.repeat(filled)), /* @__PURE__ */ import_react36.default.createElement(Text, { color: emptyColor ?? COLOR.info, dim: true }, GLYPH.shade1.repeat(total - filled)), showLabel ? /* @__PURE__ */ import_react36.default.createElement(Text, { dim: true }, ` ${label ?? `${Math.round(clamped)}%`}`) : null);
50039
50041
  }
50040
50042
 
50041
50043
  // src/cli/ui/PlanStepList.tsx
@@ -50065,28 +50067,28 @@ function PlanStepListInner({ steps, statuses, focusStepId }) {
50065
50067
  const doneCount = statusList.filter((s) => s === "done").length;
50066
50068
  const pct = Math.round(doneCount / total * 100);
50067
50069
  const showProgress = doneCount > 0;
50068
- return /* @__PURE__ */ import_react37.default.createElement(W, { flexDirection: "column" }, /* @__PURE__ */ import_react37.default.createElement(W, null, /* @__PURE__ */ import_react37.default.createElement(L, { dimColor: true }, showProgress ? t(
50070
+ return /* @__PURE__ */ import_react37.default.createElement(Box_default, { flexDirection: "column" }, /* @__PURE__ */ import_react37.default.createElement(Box_default, null, /* @__PURE__ */ import_react37.default.createElement(Text, { dim: true }, showProgress ? t(
50069
50071
  total === 1 ? "planFlow.stepList.counterDoneSingular" : "planFlow.stepList.counterDone",
50070
50072
  { done: doneCount, total, pct }
50071
50073
  ) : t(total === 1 ? "planFlow.stepList.counterSingular" : "planFlow.stepList.counter", {
50072
50074
  total
50073
- }))), /* @__PURE__ */ import_react37.default.createElement(W, { flexDirection: "column" }, steps.map((step, i) => {
50075
+ }))), /* @__PURE__ */ import_react37.default.createElement(Box_default, { flexDirection: "column" }, steps.map((step, i) => {
50074
50076
  const status2 = statusList[i];
50075
50077
  const isLast = i === total - 1;
50076
50078
  const isCur = focusStepId === step.id;
50077
50079
  const sg = statusGlyph(status2, isCur);
50078
50080
  const risk = riskLabel(step.risk);
50079
50081
  const titleDim = status2 === "done" || status2 === "skipped";
50080
- return /* @__PURE__ */ import_react37.default.createElement(W, { key: step.id }, /* @__PURE__ */ import_react37.default.createElement(L, { color: COLOR.info, dimColor: true }, isLast ? GLYPH.branchEnd : GLYPH.branch), /* @__PURE__ */ import_react37.default.createElement(L, null, " "), /* @__PURE__ */ import_react37.default.createElement(L, { color: sg.color, bold: status2 === "running" || isCur }, sg.glyph), /* @__PURE__ */ import_react37.default.createElement(L, null, " "), /* @__PURE__ */ import_react37.default.createElement(
50081
- L,
50082
+ return /* @__PURE__ */ import_react37.default.createElement(Box_default, { key: step.id }, /* @__PURE__ */ import_react37.default.createElement(Text, { color: COLOR.info, dim: true }, isLast ? GLYPH.branchEnd : GLYPH.branch), /* @__PURE__ */ import_react37.default.createElement(Text, null, " "), /* @__PURE__ */ import_react37.default.createElement(Text, { color: sg.color, bold: status2 === "running" || isCur }, sg.glyph), /* @__PURE__ */ import_react37.default.createElement(Text, null, " "), /* @__PURE__ */ import_react37.default.createElement(
50083
+ Text,
50082
50084
  {
50083
- dimColor: titleDim,
50085
+ dim: titleDim,
50084
50086
  bold: isCur || status2 === "running",
50085
50087
  strikethrough: status2 === "done" || status2 === "skipped"
50086
50088
  },
50087
50089
  `${step.id} \xB7 ${step.title}`
50088
- ), risk ? /* @__PURE__ */ import_react37.default.createElement(import_react37.default.Fragment, null, /* @__PURE__ */ import_react37.default.createElement(L, null, " "), /* @__PURE__ */ import_react37.default.createElement(L, { color: risk.color }, risk.text)) : null);
50089
- })), showProgress ? /* @__PURE__ */ import_react37.default.createElement(W, null, /* @__PURE__ */ import_react37.default.createElement(L, null, " "), /* @__PURE__ */ import_react37.default.createElement(CharBar, { pct, width: 24 })) : null);
50090
+ ), risk ? /* @__PURE__ */ import_react37.default.createElement(import_react37.default.Fragment, null, /* @__PURE__ */ import_react37.default.createElement(Text, null, " "), /* @__PURE__ */ import_react37.default.createElement(Text, { color: risk.color }, risk.text)) : null);
50091
+ })), showProgress ? /* @__PURE__ */ import_react37.default.createElement(Box_default, null, /* @__PURE__ */ import_react37.default.createElement(Text, null, " "), /* @__PURE__ */ import_react37.default.createElement(CharBar, { pct, width: 24 })) : null);
50090
50092
  }
50091
50093
  var PlanStepList = import_react37.default.memo(PlanStepListInner);
50092
50094
 
@@ -50105,7 +50107,7 @@ function PlanCheckpointConfirmInner({
50105
50107
  const isLast = total > 0 && completed >= total;
50106
50108
  const statuses = buildStatusMap(steps, completedStepIds, stepId, isLast);
50107
50109
  const subtitle = counter ? `${counter} \xB7 ${label}` : label;
50108
- return /* @__PURE__ */ import_react38.default.createElement(ApprovalCard, { tone: "ok", glyph: "\u26C1", title: t("planFlow.checkpoint.title"), metaRight: subtitle }, steps && steps.length > 0 ? /* @__PURE__ */ import_react38.default.createElement(W, { marginBottom: 1, flexDirection: "column" }, /* @__PURE__ */ import_react38.default.createElement(PlanStepList, { steps, statuses, focusStepId: stepId })) : null, /* @__PURE__ */ import_react38.default.createElement(
50110
+ return /* @__PURE__ */ import_react38.default.createElement(ApprovalCard, { tone: "ok", glyph: "\u26C1", title: t("planFlow.checkpoint.title"), metaRight: subtitle }, steps && steps.length > 0 ? /* @__PURE__ */ import_react38.default.createElement(Box_default, { marginBottom: 1, flexDirection: "column" }, /* @__PURE__ */ import_react38.default.createElement(PlanStepList, { steps, statuses, focusStepId: stepId })) : null, /* @__PURE__ */ import_react38.default.createElement(
50109
50111
  SingleSelect,
50110
50112
  {
50111
50113
  initialValue: "continue",
@@ -52544,28 +52546,28 @@ function MarkdownView({ text: text2 }) {
52544
52546
  function MarkdownLines({
52545
52547
  lines
52546
52548
  }) {
52547
- return /* @__PURE__ */ import_react39.default.createElement(W, { flexDirection: "column" }, lines.map((line, i) => /* @__PURE__ */ import_react39.default.createElement(LineRow, { key: `md-${i}-${line.kind}`, line })));
52549
+ return /* @__PURE__ */ import_react39.default.createElement(Box_default, { flexDirection: "column" }, lines.map((line, i) => /* @__PURE__ */ import_react39.default.createElement(LineRow, { key: `md-${i}-${line.kind}`, line })));
52548
52550
  }
52549
52551
  function LineRow({ line }) {
52550
52552
  switch (line.kind) {
52551
52553
  case "blank":
52552
- return /* @__PURE__ */ import_react39.default.createElement(L, null, " ");
52554
+ return /* @__PURE__ */ import_react39.default.createElement(Text, null, " ");
52553
52555
  case "hr":
52554
- return /* @__PURE__ */ import_react39.default.createElement(L, { color: FG_FAINT }, "\u2500\u2500\u2500\u2500\u2500\u2500");
52556
+ return /* @__PURE__ */ import_react39.default.createElement(Text, { color: FG_FAINT }, "\u2500\u2500\u2500\u2500\u2500\u2500");
52555
52557
  case "heading":
52556
- return /* @__PURE__ */ import_react39.default.createElement(W, null, /* @__PURE__ */ import_react39.default.createElement(L, { bold: true, color: FG_STRONG }, `${"#".repeat(line.level)} `), /* @__PURE__ */ import_react39.default.createElement(Spans, { spans: line.spans, bold: true, strongColor: true }));
52558
+ return /* @__PURE__ */ import_react39.default.createElement(Box_default, null, /* @__PURE__ */ import_react39.default.createElement(Text, { bold: true, color: FG_STRONG }, `${"#".repeat(line.level)} `), /* @__PURE__ */ import_react39.default.createElement(Spans, { spans: line.spans, bold: true, strongColor: true }));
52557
52559
  case "paragraph":
52558
- return /* @__PURE__ */ import_react39.default.createElement(W, null, /* @__PURE__ */ import_react39.default.createElement(Spans, { spans: line.spans }));
52560
+ return /* @__PURE__ */ import_react39.default.createElement(Box_default, null, /* @__PURE__ */ import_react39.default.createElement(Spans, { spans: line.spans }));
52559
52561
  case "list": {
52560
52562
  const indent = " ".repeat(line.depth * 2);
52561
52563
  const marker = line.task === "done" ? "\u2713" : line.task === "todo" ? "\u25CB" : line.ordered ? `${line.index}.` : "\xB7";
52562
52564
  const markerColor = line.task === "done" ? TONE_OK : line.task === "todo" ? FG_FAINT : FG_META;
52563
- return /* @__PURE__ */ import_react39.default.createElement(W, null, /* @__PURE__ */ import_react39.default.createElement(L, { color: markerColor }, `${indent}${marker} `), /* @__PURE__ */ import_react39.default.createElement(Spans, { spans: line.spans, dim: line.task === "done", strike: line.task === "done" }));
52565
+ return /* @__PURE__ */ import_react39.default.createElement(Box_default, null, /* @__PURE__ */ import_react39.default.createElement(Text, { color: markerColor }, `${indent}${marker} `), /* @__PURE__ */ import_react39.default.createElement(Spans, { spans: line.spans, dim: line.task === "done", strike: line.task === "done" }));
52564
52566
  }
52565
52567
  case "code":
52566
52568
  return /* @__PURE__ */ import_react39.default.createElement(CodeBlock, { lang: line.lang, text: line.text });
52567
52569
  case "blockquote":
52568
- return /* @__PURE__ */ import_react39.default.createElement(W, null, /* @__PURE__ */ import_react39.default.createElement(L, { color: TONE_BRAND }, "\u258E "), /* @__PURE__ */ import_react39.default.createElement(Spans, { spans: line.spans, italic: true }));
52570
+ return /* @__PURE__ */ import_react39.default.createElement(Box_default, null, /* @__PURE__ */ import_react39.default.createElement(Text, { color: TONE_BRAND }, "\u258E "), /* @__PURE__ */ import_react39.default.createElement(Spans, { spans: line.spans, italic: true }));
52569
52571
  }
52570
52572
  }
52571
52573
  function spanKey(span, i) {
@@ -52573,13 +52575,13 @@ function spanKey(span, i) {
52573
52575
  }
52574
52576
  function CodeBlock({ lang, text: text2 }) {
52575
52577
  const lines = text2.split("\n");
52576
- return /* @__PURE__ */ import_react39.default.createElement(W, { flexDirection: "column" }, lang.length > 0 ? /* @__PURE__ */ import_react39.default.createElement(L, { color: FG_META }, ` ${lang}`) : null, lines.map((ln, i) => (
52578
+ return /* @__PURE__ */ import_react39.default.createElement(Box_default, { flexDirection: "column" }, lang.length > 0 ? /* @__PURE__ */ import_react39.default.createElement(Text, { color: FG_META }, ` ${lang}`) : null, lines.map((ln, i) => (
52577
52579
  // biome-ignore lint/suspicious/noArrayIndexKey: code lines are positional + stable per render
52578
- /* @__PURE__ */ import_react39.default.createElement(L, { key: `code-${i}`, backgroundColor: SURFACE_ELEV }, ` ${ln} `)
52580
+ /* @__PURE__ */ import_react39.default.createElement(Text, { key: `code-${i}`, backgroundColor: SURFACE_ELEV }, ` ${ln} `)
52579
52581
  )));
52580
52582
  }
52581
52583
  function Spans({ spans, bold, italic, dim, strike, strongColor }) {
52582
- if (spans.length === 0) return /* @__PURE__ */ import_react39.default.createElement(L, null, " ");
52584
+ if (spans.length === 0) return /* @__PURE__ */ import_react39.default.createElement(Text, null, " ");
52583
52585
  return /* @__PURE__ */ import_react39.default.createElement(import_react39.default.Fragment, null, spans.map((span, i) => /* @__PURE__ */ import_react39.default.createElement(
52584
52586
  SpanText,
52585
52587
  {
@@ -52602,16 +52604,16 @@ function SpanText({
52602
52604
  strongColor
52603
52605
  }) {
52604
52606
  if (span.code) {
52605
- return /* @__PURE__ */ import_react39.default.createElement(L, { color: FG_STRONG, backgroundColor: SURFACE_ELEV }, ` ${span.text} `);
52607
+ return /* @__PURE__ */ import_react39.default.createElement(Text, { color: FG_STRONG, backgroundColor: SURFACE_ELEV }, ` ${span.text} `);
52606
52608
  }
52607
52609
  const color = span.fileRef ? TONE_BRAND : span.link ? TONE_BRAND : strongColor ? FG_STRONG : FG_BODY;
52608
52610
  const inner = /* @__PURE__ */ import_react39.default.createElement(
52609
- L,
52611
+ Text,
52610
52612
  {
52611
52613
  color,
52612
52614
  bold: !!(span.bold || ambientBold),
52613
52615
  italic: !!(span.italic || ambientItalic),
52614
- dimColor: !!ambientDim,
52616
+ dim: !!ambientDim,
52615
52617
  strikethrough: !!(span.strike || ambientStrike),
52616
52618
  underline: !!(span.link || span.fileRef)
52617
52619
  },
@@ -52619,7 +52621,7 @@ function SpanText({
52619
52621
  );
52620
52622
  const target = linkTarget(span);
52621
52623
  if (!target) return inner;
52622
- return /* @__PURE__ */ import_react39.default.createElement(wv, { transform: (text2) => `\x1B]8;;${target}\x1B\\${text2}\x1B]8;;\x1B\\` }, inner);
52624
+ return /* @__PURE__ */ import_react39.default.createElement(Link, { url: target }, inner);
52623
52625
  }
52624
52626
  function linkTarget(span) {
52625
52627
  if (span.link) return span.link;
@@ -52665,7 +52667,7 @@ var MIN_DETAIL_LINES = 6;
52665
52667
  var EXPANDED_MODAL_OVERHEAD_ROWS = 12;
52666
52668
  var EXPANDED_DETAIL_CHROME_ROWS = 4;
52667
52669
  function PlanConfirmInner({ plan: plan2, steps, summary, onChoose }) {
52668
- const { stdout } = bv();
52670
+ const { stdout } = useStdout();
52669
52671
  const totalRows = stdout?.rows ?? 40;
52670
52672
  const [expanded, setExpanded] = (0, import_react40.useState)(false);
52671
52673
  const [detailOffset, setDetailOffset] = (0, import_react40.useState)(0);
@@ -52734,8 +52736,8 @@ function PlanConfirmInner({ plan: plan2, steps, summary, onChoose }) {
52734
52736
  metaRight: t("planFlow.approveCardMetaRight"),
52735
52737
  metaRightColor: CARD.plan.color
52736
52738
  },
52737
- openQuestions ? /* @__PURE__ */ import_react40.default.createElement(W, { marginBottom: 1, flexDirection: "column" }, /* @__PURE__ */ import_react40.default.createElement(L, { color: TONE.warn }, bannerBefore ?? "", /* @__PURE__ */ import_react40.default.createElement(L, { bold: true }, refineLabel), bannerAfter ?? ""), /* @__PURE__ */ import_react40.default.createElement(W, { marginTop: 1, flexDirection: "column" }, /* @__PURE__ */ import_react40.default.createElement(L, { color: TONE.warn, bold: true }, t("planFlow.openQuestionsHeader")), /* @__PURE__ */ import_react40.default.createElement(MarkdownView, { text: openQuestions }))) : null,
52738
- !expanded || plan2.trim().length === 0 ? /* @__PURE__ */ import_react40.default.createElement(W, { marginBottom: 1, flexDirection: "column" }, effectiveSummary ? /* @__PURE__ */ import_react40.default.createElement(L, { color: FG.body }, effectiveSummary) : /* @__PURE__ */ import_react40.default.createElement(L, { color: FG.faint }, t("planFlow.noPlanSummary")), !expanded && hasSteps ? /* @__PURE__ */ import_react40.default.createElement(W, { marginTop: 1, flexDirection: "column" }, /* @__PURE__ */ import_react40.default.createElement(PlanStepList, { steps })) : null, /* @__PURE__ */ import_react40.default.createElement(L, { color: FG.faint }, expanded ? t("planFlow.detailExpandedHint") : t("planFlow.detailCollapsedHint"))) : null,
52739
+ openQuestions ? /* @__PURE__ */ import_react40.default.createElement(Box_default, { marginBottom: 1, flexDirection: "column" }, /* @__PURE__ */ import_react40.default.createElement(Text, { color: TONE.warn }, bannerBefore ?? "", /* @__PURE__ */ import_react40.default.createElement(Text, { bold: true }, refineLabel), bannerAfter ?? ""), /* @__PURE__ */ import_react40.default.createElement(Box_default, { marginTop: 1, flexDirection: "column" }, /* @__PURE__ */ import_react40.default.createElement(Text, { color: TONE.warn, bold: true }, t("planFlow.openQuestionsHeader")), /* @__PURE__ */ import_react40.default.createElement(MarkdownView, { text: openQuestions }))) : null,
52740
+ !expanded || plan2.trim().length === 0 ? /* @__PURE__ */ import_react40.default.createElement(Box_default, { marginBottom: 1, flexDirection: "column" }, effectiveSummary ? /* @__PURE__ */ import_react40.default.createElement(Text, { color: FG.body }, effectiveSummary) : /* @__PURE__ */ import_react40.default.createElement(Text, { color: FG.faint }, t("planFlow.noPlanSummary")), !expanded && hasSteps ? /* @__PURE__ */ import_react40.default.createElement(Box_default, { marginTop: 1, flexDirection: "column" }, /* @__PURE__ */ import_react40.default.createElement(PlanStepList, { steps })) : null, /* @__PURE__ */ import_react40.default.createElement(Text, { color: FG.faint }, expanded ? t("planFlow.detailExpandedHint") : t("planFlow.detailCollapsedHint"))) : null,
52739
52741
  expanded && plan2.trim().length > 0 ? /* @__PURE__ */ import_react40.default.createElement(
52740
52742
  PlanDetailWindow,
52741
52743
  {
@@ -52746,7 +52748,7 @@ function PlanConfirmInner({ plan: plan2, steps, summary, onChoose }) {
52746
52748
  total: planLines.length
52747
52749
  }
52748
52750
  ) : null,
52749
- showDetailScrollHint ? /* @__PURE__ */ import_react40.default.createElement(W, { marginBottom: 1 }, /* @__PURE__ */ import_react40.default.createElement(L, { color: FG.faint }, t("planFlow.detailScrollHint"))) : null,
52751
+ showDetailScrollHint ? /* @__PURE__ */ import_react40.default.createElement(Box_default, { marginBottom: 1 }, /* @__PURE__ */ import_react40.default.createElement(Text, { color: FG.faint }, t("planFlow.detailScrollHint"))) : null,
52750
52752
  /* @__PURE__ */ import_react40.default.createElement(
52751
52753
  SingleSelect,
52752
52754
  {
@@ -52788,7 +52790,7 @@ function PlanDetailWindow({
52788
52790
  end,
52789
52791
  total
52790
52792
  }) {
52791
- return /* @__PURE__ */ import_react40.default.createElement(W, { flexDirection: "column" }, overflow ? /* @__PURE__ */ import_react40.default.createElement(L, { color: FG.faint }, t("planFlow.detailWindow", { start, end, total })) : null, lines.map((line, i) => /* @__PURE__ */ import_react40.default.createElement(L, { key: `plan-detail-${start + i}`, wrap: "truncate" }, line.length > 0 ? line : " ")));
52793
+ return /* @__PURE__ */ import_react40.default.createElement(Box_default, { flexDirection: "column" }, overflow ? /* @__PURE__ */ import_react40.default.createElement(Text, { color: FG.faint }, t("planFlow.detailWindow", { start, end, total })) : null, lines.map((line, i) => /* @__PURE__ */ import_react40.default.createElement(Text, { key: `plan-detail-${start + i}`, wrap: "truncate" }, line.length > 0 ? line : " ")));
52792
52794
  }
52793
52795
  function summarizePlan(plan2, summary, steps) {
52794
52796
  const trimmedSummary = summary?.trim();
@@ -52855,9 +52857,9 @@ function PlanRefineInput({ mode: mode2, questions, onSubmit, onCancel }) {
52855
52857
  title: meta.title,
52856
52858
  footerHint: t("planFlow.refineFooter")
52857
52859
  },
52858
- showQuestions ? /* @__PURE__ */ import_react41.default.createElement(W, { marginBottom: 1, flexDirection: "column" }, /* @__PURE__ */ import_react41.default.createElement(L, { color: TONE.warn, bold: true }, t("planFlow.refineQuestionsHeading")), /* @__PURE__ */ import_react41.default.createElement(MarkdownView, { text: questions })) : null,
52859
- /* @__PURE__ */ import_react41.default.createElement(W, { marginBottom: 1 }, /* @__PURE__ */ import_react41.default.createElement(L, { color: FG.sub }, meta.hint, value === "" ? meta.blankHint : "")),
52860
- /* @__PURE__ */ import_react41.default.createElement(W, null, /* @__PURE__ */ import_react41.default.createElement(L, { color: meta.cursorColor, bold: true }, "\u203A "), /* @__PURE__ */ import_react41.default.createElement(L, null, value), /* @__PURE__ */ import_react41.default.createElement(L, { color: meta.cursorColor, bold: true }, cursorOn ? "\u258D" : " "))
52860
+ showQuestions ? /* @__PURE__ */ import_react41.default.createElement(Box_default, { marginBottom: 1, flexDirection: "column" }, /* @__PURE__ */ import_react41.default.createElement(Text, { color: TONE.warn, bold: true }, t("planFlow.refineQuestionsHeading")), /* @__PURE__ */ import_react41.default.createElement(MarkdownView, { text: questions })) : null,
52861
+ /* @__PURE__ */ import_react41.default.createElement(Box_default, { marginBottom: 1 }, /* @__PURE__ */ import_react41.default.createElement(Text, { color: FG.sub }, meta.hint, value === "" ? meta.blankHint : "")),
52862
+ /* @__PURE__ */ import_react41.default.createElement(Box_default, null, /* @__PURE__ */ import_react41.default.createElement(Text, { color: meta.cursorColor, bold: true }, "\u203A "), /* @__PURE__ */ import_react41.default.createElement(Text, null, value), /* @__PURE__ */ import_react41.default.createElement(Text, { color: meta.cursorColor, bold: true }, cursorOn ? "\u258D" : " "))
52861
52863
  );
52862
52864
  }
52863
52865
 
@@ -52910,15 +52912,15 @@ function PlanReviseConfirmInner({
52910
52912
  kept: keptCount
52911
52913
  })
52912
52914
  },
52913
- /* @__PURE__ */ import_react42.default.createElement(W, { marginBottom: 1 }, /* @__PURE__ */ import_react42.default.createElement(L, null, reason)),
52914
- summary ? /* @__PURE__ */ import_react42.default.createElement(W, { marginBottom: 1 }, /* @__PURE__ */ import_react42.default.createElement(L, { dimColor: true }, t("planReviseConfirm.updatedSummary", { summary }))) : null,
52915
- /* @__PURE__ */ import_react42.default.createElement(W, { marginBottom: 1, flexDirection: "column" }, rows.map((row2) => {
52915
+ /* @__PURE__ */ import_react42.default.createElement(Box_default, { marginBottom: 1 }, /* @__PURE__ */ import_react42.default.createElement(Text, null, reason)),
52916
+ summary ? /* @__PURE__ */ import_react42.default.createElement(Box_default, { marginBottom: 1 }, /* @__PURE__ */ import_react42.default.createElement(Text, { dim: true }, t("planReviseConfirm.updatedSummary", { summary }))) : null,
52917
+ /* @__PURE__ */ import_react42.default.createElement(Box_default, { marginBottom: 1, flexDirection: "column" }, rows.map((row2) => {
52916
52918
  const risk = riskDots(row2.step.risk);
52917
52919
  const prefix = row2.kind === "removed" ? "\u2212" : row2.kind === "added" ? "+" : " ";
52918
52920
  const prefixColor = row2.kind === "removed" ? "#f87171" : row2.kind === "added" ? "#4ade80" : "#94a3b8";
52919
52921
  const dim = row2.kind === "kept";
52920
52922
  const strike = row2.kind === "removed";
52921
- return /* @__PURE__ */ import_react42.default.createElement(W, { key: `${row2.kind}-${row2.step.id}` }, /* @__PURE__ */ import_react42.default.createElement(L, { color: prefixColor, bold: true }, `${prefix} `), /* @__PURE__ */ import_react42.default.createElement(L, { color: risk.color, bold: true, dimColor: dim }, risk.dots), /* @__PURE__ */ import_react42.default.createElement(L, { dimColor: dim, strikethrough: strike }, ` ${row2.step.id} \xB7 ${row2.step.title}`));
52923
+ return /* @__PURE__ */ import_react42.default.createElement(Box_default, { key: `${row2.kind}-${row2.step.id}` }, /* @__PURE__ */ import_react42.default.createElement(Text, { color: prefixColor, bold: true }, `${prefix} `), /* @__PURE__ */ import_react42.default.createElement(Text, { color: risk.color, bold: true, dim }, risk.dots), /* @__PURE__ */ import_react42.default.createElement(Text, { dim, strikethrough: strike }, ` ${row2.step.id} \xB7 ${row2.step.title}`));
52922
52924
  })),
52923
52925
  /* @__PURE__ */ import_react42.default.createElement(
52924
52926
  SingleSelect,
@@ -53037,8 +53039,8 @@ function ReviseRow({
53037
53039
  const marker = row2.done ? "[\u2713]" : row2.skipped ? "[s]" : focused ? "[ ]" : "[ ]";
53038
53040
  const markerColor = row2.done ? TONE.ok : row2.skipped ? FG.faint : focused ? TONE.brand : FG.faint;
53039
53041
  const titleColor = row2.done ? FG.sub : row2.skipped ? FG.faint : focused ? FG.strong : FG.sub;
53040
- const focusGlyph = focused ? /* @__PURE__ */ import_react43.default.createElement(L, { color: TONE.brand }, "\u25B8 ") : /* @__PURE__ */ import_react43.default.createElement(L, null, " ");
53041
- return /* @__PURE__ */ import_react43.default.createElement(W, null, focusGlyph, /* @__PURE__ */ import_react43.default.createElement(L, { color: markerColor }, marker), /* @__PURE__ */ import_react43.default.createElement(L, { color: titleColor, bold: focused, italic: row2.skipped, strikethrough: row2.skipped }, ` ${index + 1}. ${row2.step.title}`), row2.skipped ? /* @__PURE__ */ import_react43.default.createElement(L, { color: TONE.warn }, " \u2190 skipped") : null);
53042
+ const focusGlyph = focused ? /* @__PURE__ */ import_react43.default.createElement(Text, { color: TONE.brand }, "\u25B8 ") : /* @__PURE__ */ import_react43.default.createElement(Text, null, " ");
53043
+ return /* @__PURE__ */ import_react43.default.createElement(Box_default, null, focusGlyph, /* @__PURE__ */ import_react43.default.createElement(Text, { color: markerColor }, marker), /* @__PURE__ */ import_react43.default.createElement(Text, { color: titleColor, bold: focused, italic: row2.skipped, strikethrough: row2.skipped }, ` ${index + 1}. ${row2.step.title}`), row2.skipped ? /* @__PURE__ */ import_react43.default.createElement(Text, { color: TONE.warn }, " \u2190 skipped") : null);
53042
53044
  }
53043
53045
 
53044
53046
  // src/cli/ui/SessionPicker.tsx
@@ -53074,7 +53076,7 @@ function SessionPicker({
53074
53076
  onFocusChange?.(focus);
53075
53077
  }, [focus, onFocusChange]);
53076
53078
  const [renaming, setRenaming] = (0, import_react44.useState)(null);
53077
- const { stdout } = bv();
53079
+ const { stdout } = useStdout();
53078
53080
  const rows = stdout?.rows ?? 40;
53079
53081
  const visibleCount = Math.max(3, rows - PAGE_MARGIN4);
53080
53082
  const snapshot = (0, import_react44.useMemo)(
@@ -53205,13 +53207,13 @@ function SessionPicker({
53205
53207
  const end = Math.min(activeSessions.length, start + visibleCount);
53206
53208
  const shown = activeSessions.slice(start, end);
53207
53209
  const hiddenBelow = activeSessions.length - end;
53208
- return /* @__PURE__ */ import_react44.default.createElement(W, { flexDirection: "column", marginY: 1 }, /* @__PURE__ */ import_react44.default.createElement(W, null, /* @__PURE__ */ import_react44.default.createElement(L, { bold: true, color: TONE.brand }, t("sessionPicker.header")), /* @__PURE__ */ import_react44.default.createElement(L, { color: FG.meta }, ` \xB7 ${workspace}`), hasSearch ? /* @__PURE__ */ import_react44.default.createElement(
53209
- L,
53210
+ return /* @__PURE__ */ import_react44.default.createElement(Box_default, { flexDirection: "column", marginY: 1 }, /* @__PURE__ */ import_react44.default.createElement(Box_default, null, /* @__PURE__ */ import_react44.default.createElement(Text, { bold: true, color: TONE.brand }, t("sessionPicker.header")), /* @__PURE__ */ import_react44.default.createElement(Text, { color: FG.meta }, ` \xB7 ${workspace}`), hasSearch ? /* @__PURE__ */ import_react44.default.createElement(
53211
+ Text,
53210
53212
  {
53211
53213
  color: FG.meta
53212
53214
  },
53213
53215
  ` \xB7 /${query} (${activeSessions.length}/${sessions2.length})`
53214
- ) : null), /* @__PURE__ */ import_react44.default.createElement(W, { height: 1 }), sessions2.length === 0 ? /* @__PURE__ */ import_react44.default.createElement(W, null, /* @__PURE__ */ import_react44.default.createElement(L, { color: FG.faint }, t("sessionPicker.empty")), /* @__PURE__ */ import_react44.default.createElement(L, { bold: true, color: TONE.brand }, "\u23CE"), /* @__PURE__ */ import_react44.default.createElement(L, { color: FG.faint }, t("sessionPicker.emptyNew"))) : activeSessions.length === 0 ? /* @__PURE__ */ import_react44.default.createElement(W, null, /* @__PURE__ */ import_react44.default.createElement(L, { color: FG.faint }, t("sessionPicker.searchEmpty"))) : shown.map((s, i) => /* @__PURE__ */ import_react44.default.createElement(
53216
+ ) : null), /* @__PURE__ */ import_react44.default.createElement(Box_default, { height: 1 }), sessions2.length === 0 ? /* @__PURE__ */ import_react44.default.createElement(Box_default, null, /* @__PURE__ */ import_react44.default.createElement(Text, { color: FG.faint }, t("sessionPicker.empty")), /* @__PURE__ */ import_react44.default.createElement(Text, { bold: true, color: TONE.brand }, "\u23CE"), /* @__PURE__ */ import_react44.default.createElement(Text, { color: FG.faint }, t("sessionPicker.emptyNew"))) : activeSessions.length === 0 ? /* @__PURE__ */ import_react44.default.createElement(Box_default, null, /* @__PURE__ */ import_react44.default.createElement(Text, { color: FG.faint }, t("sessionPicker.searchEmpty"))) : shown.map((s, i) => /* @__PURE__ */ import_react44.default.createElement(
53215
53217
  SessionRow,
53216
53218
  {
53217
53219
  key: s.name,
@@ -53219,7 +53221,7 @@ function SessionPicker({
53219
53221
  focused: start + i === focus,
53220
53222
  walletCurrency
53221
53223
  }
53222
- )), hiddenBelow > 0 ? /* @__PURE__ */ import_react44.default.createElement(W, null, /* @__PURE__ */ import_react44.default.createElement(L, { color: FG.faint }, t("cardLabels.more", { count: hiddenBelow }))) : null, renaming ? /* @__PURE__ */ import_react44.default.createElement(W, { marginTop: 1 }, /* @__PURE__ */ import_react44.default.createElement(L, { color: FG.faint }, t("sessionPicker.renamePrompt", { from: renaming.from })), /* @__PURE__ */ import_react44.default.createElement(L, { bold: true, color: TONE.brand }, renaming.buf), /* @__PURE__ */ import_react44.default.createElement(L, { backgroundColor: TONE.brand, color: "black" }, " ")) : null, searching ? /* @__PURE__ */ import_react44.default.createElement(W, { marginTop: 1 }, /* @__PURE__ */ import_react44.default.createElement(L, { color: FG.faint }, t("sessionPicker.searchPrompt")), /* @__PURE__ */ import_react44.default.createElement(L, { bold: true, color: TONE.brand }, query), /* @__PURE__ */ import_react44.default.createElement(L, { backgroundColor: TONE.brand, color: "black" }, " ")) : null, /* @__PURE__ */ import_react44.default.createElement(W, { marginTop: 1 }, /* @__PURE__ */ import_react44.default.createElement(L, { color: FG.faint }, renaming ? t("sessionPicker.renameHint") : searching ? t("sessionPicker.searchHint") : sessions2.length === 0 ? t("sessionPicker.emptyHint") : t("sessionPicker.pickerHint"))));
53224
+ )), hiddenBelow > 0 ? /* @__PURE__ */ import_react44.default.createElement(Box_default, null, /* @__PURE__ */ import_react44.default.createElement(Text, { color: FG.faint }, t("cardLabels.more", { count: hiddenBelow }))) : null, renaming ? /* @__PURE__ */ import_react44.default.createElement(Box_default, { marginTop: 1 }, /* @__PURE__ */ import_react44.default.createElement(Text, { color: FG.faint }, t("sessionPicker.renamePrompt", { from: renaming.from })), /* @__PURE__ */ import_react44.default.createElement(Text, { bold: true, color: TONE.brand }, renaming.buf), /* @__PURE__ */ import_react44.default.createElement(Text, { backgroundColor: TONE.brand, color: "ansi:black" }, " ")) : null, searching ? /* @__PURE__ */ import_react44.default.createElement(Box_default, { marginTop: 1 }, /* @__PURE__ */ import_react44.default.createElement(Text, { color: FG.faint }, t("sessionPicker.searchPrompt")), /* @__PURE__ */ import_react44.default.createElement(Text, { bold: true, color: TONE.brand }, query), /* @__PURE__ */ import_react44.default.createElement(Text, { backgroundColor: TONE.brand, color: "ansi:black" }, " ")) : null, /* @__PURE__ */ import_react44.default.createElement(Box_default, { marginTop: 1 }, /* @__PURE__ */ import_react44.default.createElement(Text, { color: FG.faint }, renaming ? t("sessionPicker.renameHint") : searching ? t("sessionPicker.searchHint") : sessions2.length === 0 ? t("sessionPicker.emptyHint") : t("sessionPicker.pickerHint"))));
53223
53225
  }
53224
53226
  function SessionRow({
53225
53227
  info,
@@ -53233,7 +53235,7 @@ function SessionRow({
53233
53235
  const currency = walletCurrency ?? info.meta.balanceCurrency;
53234
53236
  const costLabel = info.meta.totalCostUsd !== void 0 ? formatCost(info.meta.totalCostUsd, currency, 2) : "";
53235
53237
  const time = relativeTime2(info.mtime);
53236
- return /* @__PURE__ */ import_react44.default.createElement(W, null, /* @__PURE__ */ import_react44.default.createElement(L, { color: focused ? TONE.brand : FG.faint }, focused ? " \u25B8 " : " "), /* @__PURE__ */ import_react44.default.createElement(L, { bold: focused, color: focused ? FG.strong : FG.sub }, info.name.padEnd(12)), /* @__PURE__ */ import_react44.default.createElement(L, { color: FG.meta }, ` \xB7 ${branch.padEnd(8)} \xB7 `), /* @__PURE__ */ import_react44.default.createElement(L, { color: focused ? FG.body : FG.sub }, truncate2(summary, 40)), /* @__PURE__ */ import_react44.default.createElement(W, { flexGrow: 1 }), /* @__PURE__ */ import_react44.default.createElement(L, { color: FG.faint }, `${time.padStart(11)} `), /* @__PURE__ */ import_react44.default.createElement(L, { color: FG.faint }, t("sessionPicker.turns", { count: turns })), costLabel ? /* @__PURE__ */ import_react44.default.createElement(L, { color: FG.faint }, ` \xB7 ${costLabel}`) : null);
53238
+ return /* @__PURE__ */ import_react44.default.createElement(Box_default, null, /* @__PURE__ */ import_react44.default.createElement(Text, { color: focused ? TONE.brand : FG.faint }, focused ? " \u25B8 " : " "), /* @__PURE__ */ import_react44.default.createElement(Text, { bold: focused, color: focused ? FG.strong : FG.sub }, info.name.padEnd(12)), /* @__PURE__ */ import_react44.default.createElement(Text, { color: FG.meta }, ` \xB7 ${branch.padEnd(8)} \xB7 `), /* @__PURE__ */ import_react44.default.createElement(Text, { color: focused ? FG.body : FG.sub }, truncate2(summary, 40)), /* @__PURE__ */ import_react44.default.createElement(Box_default, { flexGrow: 1 }), /* @__PURE__ */ import_react44.default.createElement(Text, { color: FG.faint }, `${time.padStart(11)} `), /* @__PURE__ */ import_react44.default.createElement(Text, { color: FG.faint }, t("sessionPicker.turns", { count: turns })), costLabel ? /* @__PURE__ */ import_react44.default.createElement(Text, { color: FG.faint }, ` \xB7 ${costLabel}`) : null);
53237
53239
  }
53238
53240
  function truncate2(s, max) {
53239
53241
  if (s.length <= max) return s;
@@ -53296,7 +53298,7 @@ function ShellConfirm({ prompt, onChoose }) {
53296
53298
  metaRight: t("shellConfirm.awaiting"),
53297
53299
  footerHint: t("shellConfirm.pickFooter")
53298
53300
  },
53299
- /* @__PURE__ */ import_react45.default.createElement(W, { marginBottom: 1, flexDirection: "column" }, /* @__PURE__ */ import_react45.default.createElement(W, null, /* @__PURE__ */ import_react45.default.createElement(L, { bold: true, color: FG.strong }, "$ "), /* @__PURE__ */ import_react45.default.createElement(L, { bold: true, color: FG.strong }, prompt.subtitle ?? ""))),
53301
+ /* @__PURE__ */ import_react45.default.createElement(Box_default, { marginBottom: 1, flexDirection: "column" }, /* @__PURE__ */ import_react45.default.createElement(Box_default, null, /* @__PURE__ */ import_react45.default.createElement(Text, { bold: true, color: FG.strong }, "$ "), /* @__PURE__ */ import_react45.default.createElement(Text, { bold: true, color: FG.strong }, prompt.subtitle ?? ""))),
53300
53302
  /* @__PURE__ */ import_react45.default.createElement(InfoRows2, { meta: prompt.meta }),
53301
53303
  /* @__PURE__ */ import_react45.default.createElement(
53302
53304
  SingleSelect,
@@ -53334,7 +53336,7 @@ function InfoRows2({ meta }) {
53334
53336
  value
53335
53337
  }));
53336
53338
  const labelWidth = Math.max(...rows.map((r) => r.label.length));
53337
- return /* @__PURE__ */ import_react45.default.createElement(W, { flexDirection: "column", marginBottom: 1 }, rows.map((r) => /* @__PURE__ */ import_react45.default.createElement(W, { key: r.label, flexDirection: "row", gap: 1 }, /* @__PURE__ */ import_react45.default.createElement(L, { color: FG.faint }, r.label.padEnd(labelWidth)), /* @__PURE__ */ import_react45.default.createElement(L, { color: FG.body }, r.value))));
53339
+ return /* @__PURE__ */ import_react45.default.createElement(Box_default, { flexDirection: "column", marginBottom: 1 }, rows.map((r) => /* @__PURE__ */ import_react45.default.createElement(Box_default, { key: r.label, flexDirection: "row", gap: 1 }, /* @__PURE__ */ import_react45.default.createElement(Text, { color: FG.faint }, r.label.padEnd(labelWidth)), /* @__PURE__ */ import_react45.default.createElement(Text, { color: FG.body }, r.value))));
53338
53340
  }
53339
53341
 
53340
53342
  // src/cli/ui/ThemePicker.tsx
@@ -53350,7 +53352,7 @@ function ThemePicker({
53350
53352
  label: value,
53351
53353
  hint: describeTheme(value, currentPreference, activeTheme)
53352
53354
  }));
53353
- return /* @__PURE__ */ import_react46.default.createElement(W, { flexDirection: "column", marginY: 1 }, /* @__PURE__ */ import_react46.default.createElement(L, { bold: true }, t("themePicker.header")), /* @__PURE__ */ import_react46.default.createElement(
53355
+ return /* @__PURE__ */ import_react46.default.createElement(Box_default, { flexDirection: "column", marginY: 1 }, /* @__PURE__ */ import_react46.default.createElement(Text, { bold: true }, t("themePicker.header")), /* @__PURE__ */ import_react46.default.createElement(
53354
53356
  SingleSelect,
53355
53357
  {
53356
53358
  items,
@@ -53380,8 +53382,8 @@ function WelcomeBanner({
53380
53382
  const tagline = inCodeMode ? t("ui.taglineCode") : t("ui.taglineChat");
53381
53383
  const taglineSub = t("ui.taglineSub");
53382
53384
  const startTextRaw = t("ui.startSessionHint");
53383
- return /* @__PURE__ */ import_react47.default.createElement(W, { flexDirection: "column", alignItems: "center", marginY: 1 }, /* @__PURE__ */ import_react47.default.createElement(
53384
- W,
53385
+ return /* @__PURE__ */ import_react47.default.createElement(Box_default, { flexDirection: "column", alignItems: "center", marginY: 1 }, /* @__PURE__ */ import_react47.default.createElement(
53386
+ Box_default,
53385
53387
  {
53386
53388
  flexDirection: "column",
53387
53389
  alignItems: "center",
@@ -53390,9 +53392,9 @@ function WelcomeBanner({
53390
53392
  paddingX: 4,
53391
53393
  paddingY: 1
53392
53394
  },
53393
- /* @__PURE__ */ import_react47.default.createElement(W, { flexDirection: "row", gap: 2 }, /* @__PURE__ */ import_react47.default.createElement(L, { color: TONE.brand, bold: true }, "REASONIX"), /* @__PURE__ */ import_react47.default.createElement(L, { color: FG.faint }, "\xD7"), /* @__PURE__ */ import_react47.default.createElement(W, { flexDirection: "row", gap: 1 }, /* @__PURE__ */ import_react47.default.createElement(L, null, "\u{1F40B}"), /* @__PURE__ */ import_react47.default.createElement(L, { color: TONE.accent, bold: true }, "DeepSeek"))),
53394
- /* @__PURE__ */ import_react47.default.createElement(W, { marginTop: 1, flexDirection: "column", alignItems: "center" }, /* @__PURE__ */ import_react47.default.createElement(L, { color: FG.body }, tagline), /* @__PURE__ */ import_react47.default.createElement(L, { color: FG.meta }, taglineSub))
53395
- ), /* @__PURE__ */ import_react47.default.createElement(W, { marginTop: 1 }, /* @__PURE__ */ import_react47.default.createElement(L, { color: FG.sub }, startTextRaw)), /* @__PURE__ */ import_react47.default.createElement(W, { marginTop: 1, flexDirection: "row", gap: 3 }, HINTS.map((cmd) => /* @__PURE__ */ import_react47.default.createElement(L, { key: cmd, color: FG.meta }, cmd))), inCodeMode && workspaceRoot ? /* @__PURE__ */ import_react47.default.createElement(W, { marginTop: 1, flexDirection: "row", gap: 1 }, /* @__PURE__ */ import_react47.default.createElement(L, { color: TONE.brand }, t("welcomeBanner.workspace")), /* @__PURE__ */ import_react47.default.createElement(L, { color: FG.faint }, "\xB7"), /* @__PURE__ */ import_react47.default.createElement(L, { color: FG.body }, workspaceRoot), /* @__PURE__ */ import_react47.default.createElement(L, { color: FG.faint }, t("welcomeBanner.relaunchHint"))) : null, dashboardUrl ? /* @__PURE__ */ import_react47.default.createElement(W, { marginTop: 1, flexDirection: "row", gap: 1 }, /* @__PURE__ */ import_react47.default.createElement(L, { color: TONE.brand, bold: true }, t("welcomeBanner.dashboard")), /* @__PURE__ */ import_react47.default.createElement(L, { color: FG.faint }, "\xB7"), /* @__PURE__ */ import_react47.default.createElement(L, { color: TONE.accent }, dashboardUrl)) : null);
53395
+ /* @__PURE__ */ import_react47.default.createElement(Box_default, { flexDirection: "row", gap: 2 }, /* @__PURE__ */ import_react47.default.createElement(Text, { color: TONE.brand, bold: true }, "REASONIX"), /* @__PURE__ */ import_react47.default.createElement(Text, { color: FG.faint }, "\xD7"), /* @__PURE__ */ import_react47.default.createElement(Box_default, { flexDirection: "row", gap: 1 }, /* @__PURE__ */ import_react47.default.createElement(Text, null, "\u{1F40B}"), /* @__PURE__ */ import_react47.default.createElement(Text, { color: TONE.accent, bold: true }, "DeepSeek"))),
53396
+ /* @__PURE__ */ import_react47.default.createElement(Box_default, { marginTop: 1, flexDirection: "column", alignItems: "center" }, /* @__PURE__ */ import_react47.default.createElement(Text, { color: FG.body }, tagline), /* @__PURE__ */ import_react47.default.createElement(Text, { color: FG.meta }, taglineSub))
53397
+ ), /* @__PURE__ */ import_react47.default.createElement(Box_default, { marginTop: 1 }, /* @__PURE__ */ import_react47.default.createElement(Text, { color: FG.sub }, startTextRaw)), /* @__PURE__ */ import_react47.default.createElement(Box_default, { marginTop: 1, flexDirection: "row", gap: 3 }, HINTS.map((cmd) => /* @__PURE__ */ import_react47.default.createElement(Text, { key: cmd, color: FG.meta }, cmd))), inCodeMode && workspaceRoot ? /* @__PURE__ */ import_react47.default.createElement(Box_default, { marginTop: 1, flexDirection: "row", gap: 1 }, /* @__PURE__ */ import_react47.default.createElement(Text, { color: TONE.brand }, t("welcomeBanner.workspace")), /* @__PURE__ */ import_react47.default.createElement(Text, { color: FG.faint }, "\xB7"), /* @__PURE__ */ import_react47.default.createElement(Text, { color: FG.body }, workspaceRoot), /* @__PURE__ */ import_react47.default.createElement(Text, { color: FG.faint }, t("welcomeBanner.relaunchHint"))) : null, dashboardUrl ? /* @__PURE__ */ import_react47.default.createElement(Box_default, { marginTop: 1, flexDirection: "row", gap: 1 }, /* @__PURE__ */ import_react47.default.createElement(Text, { color: TONE.brand, bold: true }, t("welcomeBanner.dashboard")), /* @__PURE__ */ import_react47.default.createElement(Text, { color: FG.faint }, "\xB7"), /* @__PURE__ */ import_react47.default.createElement(Text, { color: TONE.accent }, dashboardUrl)) : null);
53396
53398
  }
53397
53399
 
53398
53400
  // src/cli/ui/WorkspacePicker.tsx
@@ -53417,7 +53419,7 @@ function WorkspacePicker({
53417
53419
  (0, import_react48.useEffect)(() => {
53418
53420
  setFocus((f) => Math.max(0, Math.min(f, maxFocus)));
53419
53421
  }, [maxFocus]);
53420
- const { stdout } = bv();
53422
+ const { stdout } = useStdout();
53421
53423
  const rows = stdout?.rows ?? 40;
53422
53424
  const visibleCount = Math.max(3, rows - PAGE_MARGIN5);
53423
53425
  useKeystroke((ev) => {
@@ -53474,13 +53476,13 @@ function WorkspacePicker({
53474
53476
  const end = Math.min(activeWorkspaces.length, start + visibleCount);
53475
53477
  const shown = activeWorkspaces.slice(start, end);
53476
53478
  const hiddenBelow = activeWorkspaces.length - end;
53477
- return /* @__PURE__ */ import_react48.default.createElement(W, { flexDirection: "column", marginY: 1 }, /* @__PURE__ */ import_react48.default.createElement(W, null, /* @__PURE__ */ import_react48.default.createElement(L, { bold: true, color: TONE.brand }, t("workspacePicker.header")), /* @__PURE__ */ import_react48.default.createElement(L, { color: FG.meta }, ` \xB7 ${currentWorkspace}`), hasSearch ? /* @__PURE__ */ import_react48.default.createElement(
53478
- L,
53479
+ return /* @__PURE__ */ import_react48.default.createElement(Box_default, { flexDirection: "column", marginY: 1 }, /* @__PURE__ */ import_react48.default.createElement(Box_default, null, /* @__PURE__ */ import_react48.default.createElement(Text, { bold: true, color: TONE.brand }, t("workspacePicker.header")), /* @__PURE__ */ import_react48.default.createElement(Text, { color: FG.meta }, ` \xB7 ${currentWorkspace}`), hasSearch ? /* @__PURE__ */ import_react48.default.createElement(
53480
+ Text,
53479
53481
  {
53480
53482
  color: FG.meta
53481
53483
  },
53482
53484
  ` \xB7 /${query} (${activeWorkspaces.length}/${workspaces.length})`
53483
- ) : null), /* @__PURE__ */ import_react48.default.createElement(W, { height: 1 }), workspaces.length === 0 ? /* @__PURE__ */ import_react48.default.createElement(W, null, /* @__PURE__ */ import_react48.default.createElement(L, { color: FG.faint }, t("workspacePicker.empty"))) : activeWorkspaces.length === 0 ? /* @__PURE__ */ import_react48.default.createElement(W, null, /* @__PURE__ */ import_react48.default.createElement(L, { color: FG.faint }, t("workspacePicker.searchEmpty"))) : shown.map((w, i) => /* @__PURE__ */ import_react48.default.createElement(WorkspaceRow, { key: w.path, info: w, focused: start + i === focus })), hiddenBelow > 0 ? /* @__PURE__ */ import_react48.default.createElement(W, null, /* @__PURE__ */ import_react48.default.createElement(L, { color: FG.faint }, t("cardLabels.more", { count: hiddenBelow }))) : null, searching ? /* @__PURE__ */ import_react48.default.createElement(W, { marginTop: 1 }, /* @__PURE__ */ import_react48.default.createElement(L, { color: FG.faint }, t("workspacePicker.searchPrompt")), /* @__PURE__ */ import_react48.default.createElement(L, { bold: true, color: TONE.brand }, query), /* @__PURE__ */ import_react48.default.createElement(L, { backgroundColor: TONE.brand, color: "black" }, " ")) : null, /* @__PURE__ */ import_react48.default.createElement(W, { marginTop: 1 }, /* @__PURE__ */ import_react48.default.createElement(L, { color: FG.faint }, searching ? t("workspacePicker.searchHint") : t("workspacePicker.pickerHint"))));
53485
+ ) : null), /* @__PURE__ */ import_react48.default.createElement(Box_default, { height: 1 }), workspaces.length === 0 ? /* @__PURE__ */ import_react48.default.createElement(Box_default, null, /* @__PURE__ */ import_react48.default.createElement(Text, { color: FG.faint }, t("workspacePicker.empty"))) : activeWorkspaces.length === 0 ? /* @__PURE__ */ import_react48.default.createElement(Box_default, null, /* @__PURE__ */ import_react48.default.createElement(Text, { color: FG.faint }, t("workspacePicker.searchEmpty"))) : shown.map((w, i) => /* @__PURE__ */ import_react48.default.createElement(WorkspaceRow, { key: w.path, info: w, focused: start + i === focus })), hiddenBelow > 0 ? /* @__PURE__ */ import_react48.default.createElement(Box_default, null, /* @__PURE__ */ import_react48.default.createElement(Text, { color: FG.faint }, t("cardLabels.more", { count: hiddenBelow }))) : null, searching ? /* @__PURE__ */ import_react48.default.createElement(Box_default, { marginTop: 1 }, /* @__PURE__ */ import_react48.default.createElement(Text, { color: FG.faint }, t("workspacePicker.searchPrompt")), /* @__PURE__ */ import_react48.default.createElement(Text, { bold: true, color: TONE.brand }, query), /* @__PURE__ */ import_react48.default.createElement(Text, { backgroundColor: TONE.brand, color: "ansi:black" }, " ")) : null, /* @__PURE__ */ import_react48.default.createElement(Box_default, { marginTop: 1 }, /* @__PURE__ */ import_react48.default.createElement(Text, { color: FG.faint }, searching ? t("workspacePicker.searchHint") : t("workspacePicker.pickerHint"))));
53484
53486
  }
53485
53487
  function WorkspaceRow({
53486
53488
  info,
@@ -53493,7 +53495,7 @@ function WorkspaceRow({
53493
53495
  count: info.sessions
53494
53496
  }
53495
53497
  );
53496
- return /* @__PURE__ */ import_react48.default.createElement(W, null, /* @__PURE__ */ import_react48.default.createElement(L, { color: focused ? TONE.brand : FG.faint }, focused ? " \u25B8 " : " "), /* @__PURE__ */ import_react48.default.createElement(L, { bold: focused, color: focused ? FG.strong : FG.sub }, label.padEnd(16)), /* @__PURE__ */ import_react48.default.createElement(L, { color: FG.meta }, info.current ? ` \xB7 ${t("workspacePicker.current")} \xB7 ` : " \xB7 "), /* @__PURE__ */ import_react48.default.createElement(L, { color: focused ? FG.body : FG.sub }, info.path), /* @__PURE__ */ import_react48.default.createElement(W, { flexGrow: 1 }), /* @__PURE__ */ import_react48.default.createElement(L, { color: FG.faint }, meta));
53498
+ return /* @__PURE__ */ import_react48.default.createElement(Box_default, null, /* @__PURE__ */ import_react48.default.createElement(Text, { color: focused ? TONE.brand : FG.faint }, focused ? " \u25B8 " : " "), /* @__PURE__ */ import_react48.default.createElement(Text, { bold: focused, color: focused ? FG.strong : FG.sub }, label.padEnd(16)), /* @__PURE__ */ import_react48.default.createElement(Text, { color: FG.meta }, info.current ? ` \xB7 ${t("workspacePicker.current")} \xB7 ` : " \xB7 "), /* @__PURE__ */ import_react48.default.createElement(Text, { color: focused ? FG.body : FG.sub }, info.path), /* @__PURE__ */ import_react48.default.createElement(Box_default, { flexGrow: 1 }), /* @__PURE__ */ import_react48.default.createElement(Text, { color: FG.faint }, meta));
53497
53499
  }
53498
53500
  function oneLine2(s) {
53499
53501
  return s.replace(/\s+/g, " ").trim();
@@ -54637,7 +54639,7 @@ function CompactionCard({ card }) {
54637
54639
  title: "compacted history",
54638
54640
  meta: [`${card.summary.length.toLocaleString()} chars \xB7 ${lines.length} lines`]
54639
54641
  }
54640
- ), previewLines.map((line, i) => /* @__PURE__ */ import_react61.default.createElement(L, { key: `${card.id}:p:${i}`, color: FG.sub }, line || " ")), hiddenCount > 0 ? /* @__PURE__ */ import_react61.default.createElement(W, { marginTop: 1 }, /* @__PURE__ */ import_react61.default.createElement(L, { color: FG.sub, dimColor: true }, "\u2026 ", hiddenCount, " more line", hiddenCount === 1 ? "" : "s", " (full summary in session log)")) : null);
54642
+ ), previewLines.map((line, i) => /* @__PURE__ */ import_react61.default.createElement(Text, { key: `${card.id}:p:${i}`, color: FG.sub }, line || " ")), hiddenCount > 0 ? /* @__PURE__ */ import_react61.default.createElement(Box_default, { marginTop: 1 }, /* @__PURE__ */ import_react61.default.createElement(Text, { color: FG.sub, dim: true }, "\u2026 ", hiddenCount, " more line", hiddenCount === 1 ? "" : "s", " (full summary in session log)")) : null);
54641
54643
  }
54642
54644
 
54643
54645
  // src/cli/ui/cards/CtxCard.tsx
@@ -54645,7 +54647,7 @@ var import_react62 = __toESM(require_react(), 1);
54645
54647
  var BAR_CELLS = 32;
54646
54648
  function row(label, tokens, ratio, color) {
54647
54649
  const filled = Math.max(0, Math.min(BAR_CELLS, Math.round(ratio * BAR_CELLS)));
54648
- return /* @__PURE__ */ import_react62.default.createElement(W, { flexDirection: "row", gap: 1 }, /* @__PURE__ */ import_react62.default.createElement(L, { color: FG.sub }, label.padEnd(7)), /* @__PURE__ */ import_react62.default.createElement(L, { color }, "\u2588".repeat(filled)), /* @__PURE__ */ import_react62.default.createElement(L, { color: FG.faint }, "\u2591".repeat(BAR_CELLS - filled)), /* @__PURE__ */ import_react62.default.createElement(L, { bold: true, color: FG.body }, tokens.toLocaleString()), /* @__PURE__ */ import_react62.default.createElement(L, { color: FG.faint }, `\xB7 ${(ratio * 100).toFixed(1)}%`));
54650
+ return /* @__PURE__ */ import_react62.default.createElement(Box_default, { flexDirection: "row", gap: 1 }, /* @__PURE__ */ import_react62.default.createElement(Text, { color: FG.sub }, label.padEnd(7)), /* @__PURE__ */ import_react62.default.createElement(Text, { color }, "\u2588".repeat(filled)), /* @__PURE__ */ import_react62.default.createElement(Text, { color: FG.faint }, "\u2591".repeat(BAR_CELLS - filled)), /* @__PURE__ */ import_react62.default.createElement(Text, { bold: true, color: FG.body }, tokens.toLocaleString()), /* @__PURE__ */ import_react62.default.createElement(Text, { color: FG.faint }, `\xB7 ${(ratio * 100).toFixed(1)}%`));
54649
54651
  }
54650
54652
  function CtxCard({ card }) {
54651
54653
  const cap = Math.max(1, card.ctxMax);
@@ -54659,8 +54661,8 @@ function CtxCard({ card }) {
54659
54661
  title: t("cardTitles.context"),
54660
54662
  meta: [`${used.toLocaleString()} / ${cap.toLocaleString()} (${usedPct.toFixed(1)}%)`]
54661
54663
  }
54662
- ), row(t("cardLabels.system"), card.systemTokens, card.systemTokens / cap, TONE.brand), row(t("cardLabels.tools"), card.toolsTokens, card.toolsTokens / cap, TONE.warn), row(t("cardLabels.log"), card.logTokens, card.logTokens / cap, TONE.ok), row(t("cardLabels.input"), card.inputTokens, card.inputTokens / cap, TONE.accent), card.topTools.length > 0 ? /* @__PURE__ */ import_react62.default.createElement(import_react62.default.Fragment, null, /* @__PURE__ */ import_react62.default.createElement(L, { color: FG.faint }, `${t("cardLabels.topTools")} \xB7 ${card.toolsCount} ${t("cardLabels.tools")} \xB7 ${card.logMessages} ${t("cardLabels.logMsgs")}`), card.topTools.slice(0, 5).map((tool) => /* @__PURE__ */ import_react62.default.createElement(W, { key: `${tool.turn}-${tool.name}`, flexDirection: "row", gap: 1 }, /* @__PURE__ */ import_react62.default.createElement(L, { color: FG.sub }, tool.name), /* @__PURE__ */ import_react62.default.createElement(
54663
- L,
54664
+ ), row(t("cardLabels.system"), card.systemTokens, card.systemTokens / cap, TONE.brand), row(t("cardLabels.tools"), card.toolsTokens, card.toolsTokens / cap, TONE.warn), row(t("cardLabels.log"), card.logTokens, card.logTokens / cap, TONE.ok), row(t("cardLabels.input"), card.inputTokens, card.inputTokens / cap, TONE.accent), card.topTools.length > 0 ? /* @__PURE__ */ import_react62.default.createElement(import_react62.default.Fragment, null, /* @__PURE__ */ import_react62.default.createElement(Text, { color: FG.faint }, `${t("cardLabels.topTools")} \xB7 ${card.toolsCount} ${t("cardLabels.tools")} \xB7 ${card.logMessages} ${t("cardLabels.logMsgs")}`), card.topTools.slice(0, 5).map((tool) => /* @__PURE__ */ import_react62.default.createElement(Box_default, { key: `${tool.turn}-${tool.name}`, flexDirection: "row", gap: 1 }, /* @__PURE__ */ import_react62.default.createElement(Text, { color: FG.sub }, tool.name), /* @__PURE__ */ import_react62.default.createElement(
54665
+ Text,
54664
54666
  {
54665
54667
  color: FG.faint
54666
54668
  },
@@ -54695,7 +54697,7 @@ function DiffCard({ card }) {
54695
54697
  { text: `-${card.stats.del}`, color: TONE.err }
54696
54698
  ]
54697
54699
  }
54698
- ), card.hunks.map((hunk) => /* @__PURE__ */ import_react63.default.createElement(W, { key: `${card.id}:${hunk.header}`, flexDirection: "column" }, /* @__PURE__ */ import_react63.default.createElement(L, { italic: true, color: FG.faint }, hunk.header), hunk.lines.map((line, li) => /* @__PURE__ */ import_react63.default.createElement(W, { key: `${card.id}:${hunk.header}:${li}`, flexDirection: "row", gap: 1 }, /* @__PURE__ */ import_react63.default.createElement(L, { color: LINE_COLOR[line.kind] }, LINE_GLYPH[line.kind]), /* @__PURE__ */ import_react63.default.createElement(L, { color: LINE_COLOR[line.kind], dimColor: line.kind === "ctx" }, line.text))))), showFooter && /* @__PURE__ */ import_react63.default.createElement(W, { flexDirection: "row", gap: 2 }, /* @__PURE__ */ import_react63.default.createElement(L, { bold: true, color: TONE.ok }, t("cardLabels.applyAction")), /* @__PURE__ */ import_react63.default.createElement(L, { color: FG.sub }, t("cardLabels.skipAction")), /* @__PURE__ */ import_react63.default.createElement(L, { bold: true, color: TONE.err }, t("cardLabels.rejectAction"))));
54700
+ ), card.hunks.map((hunk) => /* @__PURE__ */ import_react63.default.createElement(Box_default, { key: `${card.id}:${hunk.header}`, flexDirection: "column" }, /* @__PURE__ */ import_react63.default.createElement(Text, { italic: true, color: FG.faint }, hunk.header), hunk.lines.map((line, li) => /* @__PURE__ */ import_react63.default.createElement(Box_default, { key: `${card.id}:${hunk.header}:${li}`, flexDirection: "row", gap: 1 }, /* @__PURE__ */ import_react63.default.createElement(Text, { color: LINE_COLOR[line.kind] }, LINE_GLYPH[line.kind]), /* @__PURE__ */ import_react63.default.createElement(Text, { color: LINE_COLOR[line.kind], dim: line.kind === "ctx" }, line.text))))), showFooter && /* @__PURE__ */ import_react63.default.createElement(Box_default, { flexDirection: "row", gap: 2 }, /* @__PURE__ */ import_react63.default.createElement(Text, { bold: true, color: TONE.ok }, t("cardLabels.applyAction")), /* @__PURE__ */ import_react63.default.createElement(Text, { color: FG.sub }, t("cardLabels.skipAction")), /* @__PURE__ */ import_react63.default.createElement(Text, { bold: true, color: TONE.err }, t("cardLabels.rejectAction"))));
54699
54701
  }
54700
54702
 
54701
54703
  // src/cli/ui/cards/DoctorCard.tsx
@@ -54735,7 +54737,7 @@ function DoctorCard({ card }) {
54735
54737
  title: t("cardTitles.doctor"),
54736
54738
  meta: [summary]
54737
54739
  }
54738
- ), card.checks.map((c) => /* @__PURE__ */ import_react64.default.createElement(W, { key: c.label, flexDirection: "row", gap: 1 }, /* @__PURE__ */ import_react64.default.createElement(L, { color: levelColor[c.level] }, LEVEL_GLYPH[c.level]), /* @__PURE__ */ import_react64.default.createElement(L, { bold: true, color: fg.body }, c.label.padEnd(labelWidth + 1)), /* @__PURE__ */ import_react64.default.createElement(L, { color: fg.sub }, c.detail), /* @__PURE__ */ import_react64.default.createElement(L, { color: levelColor[c.level] }, levelTag(c.level)))));
54740
+ ), card.checks.map((c) => /* @__PURE__ */ import_react64.default.createElement(Box_default, { key: c.label, flexDirection: "row", gap: 1 }, /* @__PURE__ */ import_react64.default.createElement(Text, { color: levelColor[c.level] }, LEVEL_GLYPH[c.level]), /* @__PURE__ */ import_react64.default.createElement(Text, { bold: true, color: fg.body }, c.label.padEnd(labelWidth + 1)), /* @__PURE__ */ import_react64.default.createElement(Text, { color: fg.sub }, c.detail), /* @__PURE__ */ import_react64.default.createElement(Text, { color: levelColor[c.level] }, levelTag(c.level)))));
54739
54741
  }
54740
54742
 
54741
54743
  // src/cli/ui/cards/ErrorCard.tsx
@@ -54757,10 +54759,10 @@ function ErrorCard({ card }) {
54757
54759
  title: card.title || t("cardTitles.error"),
54758
54760
  meta: retryNote ? [retryNote] : void 0
54759
54761
  }
54760
- ), messageLines.map((line, i) => /* @__PURE__ */ import_react65.default.createElement(L, { key: `${card.id}:msg:${i}`, color: TONE.err }, line || " ")), hasStack ? /* @__PURE__ */ import_react65.default.createElement(W, { flexDirection: "column", marginTop: 1 }, /* @__PURE__ */ import_react65.default.createElement(L, { color: FG.meta }, t("cardLabels.stackTrace")), stackHidden > 0 ? /* @__PURE__ */ import_react65.default.createElement(L, { color: FG.faint }, t(
54762
+ ), messageLines.map((line, i) => /* @__PURE__ */ import_react65.default.createElement(Text, { key: `${card.id}:msg:${i}`, color: TONE.err }, line || " ")), hasStack ? /* @__PURE__ */ import_react65.default.createElement(Box_default, { flexDirection: "column", marginTop: 1 }, /* @__PURE__ */ import_react65.default.createElement(Text, { color: FG.meta }, t("cardLabels.stackTrace")), stackHidden > 0 ? /* @__PURE__ */ import_react65.default.createElement(Text, { color: FG.faint }, t(
54761
54763
  stackHidden === 1 ? "cardLabels.earlierStackLine" : "cardLabels.earlierStackLines",
54762
54764
  { count: stackHidden }
54763
- )) : null, stackVisible.map((line, i) => /* @__PURE__ */ import_react65.default.createElement(L, { key: `${card.id}:stk:${stackHidden + i}`, color: FG.meta }, line || " "))) : null);
54765
+ )) : null, stackVisible.map((line, i) => /* @__PURE__ */ import_react65.default.createElement(Text, { key: `${card.id}:stk:${stackHidden + i}`, color: FG.meta }, line || " "))) : null);
54764
54766
  }
54765
54767
 
54766
54768
  // src/cli/ui/cards/LiveCard.tsx
@@ -54791,7 +54793,7 @@ function LiveCard({ card }) {
54791
54793
  const isPulsing = PULSING_VARIANTS.has(card.variant);
54792
54794
  const frames = card.variant === "thinking" ? PULSE_DIAMOND : PULSE_CIRCLE;
54793
54795
  const settled = VARIANT_GLYPH[card.variant];
54794
- return /* @__PURE__ */ import_react66.default.createElement(W, { paddingLeft: 2, flexDirection: "row", gap: 1 }, isPulsing ? /* @__PURE__ */ import_react66.default.createElement(Pulse, { active: true, frames, settled, color }) : /* @__PURE__ */ import_react66.default.createElement(L, { bold: true, color }, VARIANT_GLYPH[card.variant]), /* @__PURE__ */ import_react66.default.createElement(L, { color: FG.body }, card.text), card.meta !== void 0 ? /* @__PURE__ */ import_react66.default.createElement(L, { color: FG.faint }, `\xB7 ${card.meta}`) : null);
54796
+ return /* @__PURE__ */ import_react66.default.createElement(Box_default, { paddingLeft: 2, flexDirection: "row", gap: 1 }, isPulsing ? /* @__PURE__ */ import_react66.default.createElement(Pulse, { active: true, frames, settled, color }) : /* @__PURE__ */ import_react66.default.createElement(Text, { bold: true, color }, VARIANT_GLYPH[card.variant]), /* @__PURE__ */ import_react66.default.createElement(Text, { color: FG.body }, card.text), card.meta !== void 0 ? /* @__PURE__ */ import_react66.default.createElement(Text, { color: FG.faint }, `\xB7 ${card.meta}`) : null);
54795
54797
  }
54796
54798
 
54797
54799
  // src/cli/ui/cards/MemoryCard.tsx
@@ -54842,7 +54844,7 @@ function MemoryCard({ card }) {
54842
54844
  const all = card.entries.filter((e) => e.category === category);
54843
54845
  const shown = all.slice(0, 5);
54844
54846
  const remaining = all.length - shown.length;
54845
- return /* @__PURE__ */ import_react67.default.createElement(W, { key: category, flexDirection: "column" }, /* @__PURE__ */ import_react67.default.createElement(L, { color: FG.faint }, `${categoryLabel(category)} (${counts[category]})`), shown.map((entry) => /* @__PURE__ */ import_react67.default.createElement(W, { key: `${category}:${entry.summary}`, flexDirection: "row", gap: 1 }, /* @__PURE__ */ import_react67.default.createElement(L, { color: CATEGORY_GLYPH_COLOR[category] }, CATEGORY_GLYPH[category]), /* @__PURE__ */ import_react67.default.createElement(L, { color: FG.sub }, entry.summary))), remaining > 0 ? /* @__PURE__ */ import_react67.default.createElement(L, { color: FG.faint }, t("cardLabels.more", { count: remaining })) : null);
54847
+ return /* @__PURE__ */ import_react67.default.createElement(Box_default, { key: category, flexDirection: "column" }, /* @__PURE__ */ import_react67.default.createElement(Text, { color: FG.faint }, `${categoryLabel(category)} (${counts[category]})`), shown.map((entry) => /* @__PURE__ */ import_react67.default.createElement(Box_default, { key: `${category}:${entry.summary}`, flexDirection: "row", gap: 1 }, /* @__PURE__ */ import_react67.default.createElement(Text, { color: CATEGORY_GLYPH_COLOR[category] }, CATEGORY_GLYPH[category]), /* @__PURE__ */ import_react67.default.createElement(Text, { color: FG.sub }, entry.summary))), remaining > 0 ? /* @__PURE__ */ import_react67.default.createElement(Text, { color: FG.faint }, t("cardLabels.more", { count: remaining })) : null);
54846
54848
  }));
54847
54849
  }
54848
54850
  function countByCategory(entries) {
@@ -54862,7 +54864,7 @@ var import_react71 = __toESM(require_react(), 1);
54862
54864
  // src/cli/ui/primitives/CursorBlock.tsx
54863
54865
  var import_react68 = __toESM(require_react(), 1);
54864
54866
  function CursorBlock() {
54865
- return /* @__PURE__ */ import_react68.default.createElement(L, { inverse: true, color: CARD.streaming.color }, " ");
54867
+ return /* @__PURE__ */ import_react68.default.createElement(Text, { inverse: true, color: CARD.streaming.color }, " ");
54866
54868
  }
54867
54869
 
54868
54870
  // src/cli/ui/state/verbose-context.ts
@@ -54941,7 +54943,7 @@ function ReasoningCard({
54941
54943
  card,
54942
54944
  expanded
54943
54945
  }) {
54944
- const { stdout } = bv();
54946
+ const { stdout } = useStdout();
54945
54947
  const cols = stdout?.columns ?? 80;
54946
54948
  const lineCells = Math.max(20, cols - 4);
54947
54949
  const verbose = import_react71.default.useContext(VerboseContext);
@@ -54967,7 +54969,7 @@ function ReasoningHeader({
54967
54969
  const metaTrail2 = metaParts.length > 0 ? ` \xB7 ${metaParts.join(" \xB7 ")}` : "";
54968
54970
  const collapsedHint = !expanded && card.text.length > 0 ? " (\u2303o to expand)" : "";
54969
54971
  const modelBadge = card.model ? modelBadgeFor(card.model) : null;
54970
- return /* @__PURE__ */ import_react71.default.createElement(W, { flexDirection: "row", gap: 1 }, /* @__PURE__ */ import_react71.default.createElement(
54972
+ return /* @__PURE__ */ import_react71.default.createElement(Box_default, { flexDirection: "row", gap: 1 }, /* @__PURE__ */ import_react71.default.createElement(
54971
54973
  Pulse,
54972
54974
  {
54973
54975
  active: streamingActive,
@@ -54975,7 +54977,7 @@ function ReasoningHeader({
54975
54977
  settled: "\u25C6",
54976
54978
  color: card.aborted ? TONE.err : FG.faint
54977
54979
  }
54978
- ), /* @__PURE__ */ import_react71.default.createElement(L, { italic: true, dimColor: true, color: card.aborted ? TONE.err : void 0 }, `${baseTitle}${metaTrail2}${collapsedHint}`), modelBadge ? /* @__PURE__ */ import_react71.default.createElement(Pill2, { label: modelBadge.label, ...PILL_MODEL[modelBadge.kind], bold: false }) : null);
54980
+ ), /* @__PURE__ */ import_react71.default.createElement(Text, { italic: true, dim: true, color: card.aborted ? TONE.err : void 0 }, `${baseTitle}${metaTrail2}${collapsedHint}`), modelBadge ? /* @__PURE__ */ import_react71.default.createElement(Pill2, { label: modelBadge.label, ...PILL_MODEL[modelBadge.kind], bold: false }) : null);
54979
54981
  }
54980
54982
  function headerMeta(card) {
54981
54983
  if (card.streaming) {
@@ -54994,7 +54996,7 @@ function headerDuration(card) {
54994
54996
  function StreamingPreview({ card, visualLines, lineCells }) {
54995
54997
  const visible = visualLines.slice(-STREAMING_PREVIEW_LINES);
54996
54998
  const hasOverflow = visualLines.length > visible.length;
54997
- return /* @__PURE__ */ import_react71.default.createElement(import_react71.default.Fragment, null, hasOverflow ? /* @__PURE__ */ import_react71.default.createElement(L, { color: FG.faint }, "\u22EE") : null, /* @__PURE__ */ import_react71.default.createElement(
54999
+ return /* @__PURE__ */ import_react71.default.createElement(import_react71.default.Fragment, null, hasOverflow ? /* @__PURE__ */ import_react71.default.createElement(Text, { color: FG.faint }, "\u22EE") : null, /* @__PURE__ */ import_react71.default.createElement(
54998
55000
  BodyLines,
54999
55001
  {
55000
55002
  card,
@@ -55029,7 +55031,7 @@ function SettledPreview({ card, visualLines, lineCells }) {
55029
55031
  ));
55030
55032
  }
55031
55033
  function EmptyHint() {
55032
- return /* @__PURE__ */ import_react71.default.createElement(L, { italic: true, color: FG.faint }, "no thinking \u2014 direct answer");
55034
+ return /* @__PURE__ */ import_react71.default.createElement(Text, { italic: true, color: FG.faint }, "no thinking \u2014 direct answer");
55033
55035
  }
55034
55036
  function BodyLines({
55035
55037
  card,
@@ -55044,17 +55046,17 @@ function BodyLines({
55044
55046
  return /* @__PURE__ */ import_react71.default.createElement(import_react71.default.Fragment, null, lines.map((line, i) => {
55045
55047
  const isLast = i === lines.length - 1;
55046
55048
  const isFirst = i === 0;
55047
- return /* @__PURE__ */ import_react71.default.createElement(W, { key: `${card.id}:b:${indexOffset + i}`, flexDirection: "row", gap: 1 }, anchor ? /* @__PURE__ */ import_react71.default.createElement(L, { color: tone }, isFirst ? "\u21B3" : " ") : null, /* @__PURE__ */ import_react71.default.createElement(L, { italic: true, color: FG.meta }, clipToCells(line, innerCells)), isLast && cursorOnLast && /* @__PURE__ */ import_react71.default.createElement(CursorBlock, null));
55049
+ return /* @__PURE__ */ import_react71.default.createElement(Box_default, { key: `${card.id}:b:${indexOffset + i}`, flexDirection: "row", gap: 1 }, anchor ? /* @__PURE__ */ import_react71.default.createElement(Text, { color: tone }, isFirst ? "\u21B3" : " ") : null, /* @__PURE__ */ import_react71.default.createElement(Text, { italic: true, color: FG.meta }, clipToCells(line, innerCells)), isLast && cursorOnLast && /* @__PURE__ */ import_react71.default.createElement(CursorBlock, null));
55048
55050
  }));
55049
55051
  }
55050
55052
  function MidElisionHint({ droppedLines }) {
55051
- return /* @__PURE__ */ import_react71.default.createElement(L, { color: FG.faint }, `\u22EF ${droppedLines} line${droppedLines === 1 ? "" : "s"} elided`);
55053
+ return /* @__PURE__ */ import_react71.default.createElement(Text, { color: FG.faint }, `\u22EF ${droppedLines} line${droppedLines === 1 ? "" : "s"} elided`);
55052
55054
  }
55053
55055
  function ScrollPastHint({ card }) {
55054
55056
  const parts = [];
55055
55057
  if (card.paragraphs > 0) parts.push(`${card.paragraphs} \xB6`);
55056
55058
  if (card.tokens > 0) parts.push(`~${card.tokens.toLocaleString()} tok`);
55057
- return /* @__PURE__ */ import_react71.default.createElement(L, { color: FG.faint }, `\u22EF ${parts.join(" + ")} scrolled past \xB7 /reasoning last`);
55059
+ return /* @__PURE__ */ import_react71.default.createElement(Text, { color: FG.faint }, `\u22EF ${parts.join(" + ")} scrolled past \xB7 /reasoning last`);
55058
55060
  }
55059
55061
 
55060
55062
  // src/cli/ui/cards/SearchCard.tsx
@@ -55076,7 +55078,7 @@ function SearchCard({ card }) {
55076
55078
  subtitle: `"${card.query}"`,
55077
55079
  meta: [stats3, elapsed]
55078
55080
  }
55079
- ), grouped.map(([file, hits]) => /* @__PURE__ */ import_react72.default.createElement(W, { key: file, flexDirection: "column" }, /* @__PURE__ */ import_react72.default.createElement(L, { bold: true, color: FG.strong }, file), hits.map((h, i) => /* @__PURE__ */ import_react72.default.createElement(W, { key: `${file}:${h.line}:${i}`, flexDirection: "row", gap: 1 }, /* @__PURE__ */ import_react72.default.createElement(L, { color: FG.faint }, `${h.line.toString().padStart(4)} \u2502`), /* @__PURE__ */ import_react72.default.createElement(HighlightedLine, { text: h.preview, start: h.matchStart, end: h.matchEnd }))))), card.hits.length > 10 ? /* @__PURE__ */ import_react72.default.createElement(L, { color: FG.faint }, t(
55081
+ ), grouped.map(([file, hits]) => /* @__PURE__ */ import_react72.default.createElement(Box_default, { key: file, flexDirection: "column" }, /* @__PURE__ */ import_react72.default.createElement(Text, { bold: true, color: FG.strong }, file), hits.map((h, i) => /* @__PURE__ */ import_react72.default.createElement(Box_default, { key: `${file}:${h.line}:${i}`, flexDirection: "row", gap: 1 }, /* @__PURE__ */ import_react72.default.createElement(Text, { color: FG.faint }, `${h.line.toString().padStart(4)} \u2502`), /* @__PURE__ */ import_react72.default.createElement(HighlightedLine, { text: h.preview, start: h.matchStart, end: h.matchEnd }))))), card.hits.length > 10 ? /* @__PURE__ */ import_react72.default.createElement(Text, { color: FG.faint }, t(
55080
55082
  card.hits.length - 10 === 1 ? "cardLabels.moreHitSingular" : "cardLabels.moreHitsPlural",
55081
55083
  { count: card.hits.length - 10 }
55082
55084
  )) : null);
@@ -55087,9 +55089,9 @@ function HighlightedLine({
55087
55089
  end
55088
55090
  }) {
55089
55091
  if (start < 0 || end <= start || end > text2.length) {
55090
- return /* @__PURE__ */ import_react72.default.createElement(L, { color: FG.sub }, text2);
55092
+ return /* @__PURE__ */ import_react72.default.createElement(Text, { color: FG.sub }, text2);
55091
55093
  }
55092
- return /* @__PURE__ */ import_react72.default.createElement(import_react72.default.Fragment, null, /* @__PURE__ */ import_react72.default.createElement(L, { color: FG.sub }, text2.slice(0, start)), /* @__PURE__ */ import_react72.default.createElement(L, { bold: true, inverse: true }, text2.slice(start, end)), /* @__PURE__ */ import_react72.default.createElement(L, { color: FG.sub }, text2.slice(end)));
55094
+ return /* @__PURE__ */ import_react72.default.createElement(import_react72.default.Fragment, null, /* @__PURE__ */ import_react72.default.createElement(Text, { color: FG.sub }, text2.slice(0, start)), /* @__PURE__ */ import_react72.default.createElement(Text, { bold: true, inverse: true }, text2.slice(start, end)), /* @__PURE__ */ import_react72.default.createElement(Text, { color: FG.sub }, text2.slice(end)));
55093
55095
  }
55094
55096
  function groupByFile(hits) {
55095
55097
  const map = /* @__PURE__ */ new Map();
@@ -55116,13 +55118,13 @@ var MarkdownWidthCtx = import_react74.default.createContext(void 0);
55116
55118
  function useWidth() {
55117
55119
  const ctx = import_react74.default.useContext(MarkdownWidthCtx);
55118
55120
  if (ctx !== void 0) return ctx;
55119
- return (bv()?.stdout?.columns ?? process.stdout.columns ?? 80) - BODY_LEFT_CELLS;
55121
+ return (useStdout()?.stdout?.columns ?? process.stdout.columns ?? 80) - BODY_LEFT_CELLS;
55120
55122
  }
55121
55123
  marked.setOptions({ gfm: true, breaks: false });
55122
55124
  function Markdown({ text: text2, width }) {
55123
55125
  const tokens = import_react74.default.useMemo(() => marked.lexer(text2), [text2]);
55124
55126
  const ctxWidth = width !== void 0 ? Math.max(1, width) : void 0;
55125
- return /* @__PURE__ */ import_react74.default.createElement(MarkdownWidthCtx.Provider, { value: ctxWidth }, /* @__PURE__ */ import_react74.default.createElement(W, { flexDirection: "column", gap: 1 }, tokens.map((token, i) => /* @__PURE__ */ import_react74.default.createElement(BlockToken, { key: `${i}-${token.type}`, token }))));
55127
+ return /* @__PURE__ */ import_react74.default.createElement(MarkdownWidthCtx.Provider, { value: ctxWidth }, /* @__PURE__ */ import_react74.default.createElement(Box_default, { flexDirection: "column", gap: 1 }, tokens.map((token, i) => /* @__PURE__ */ import_react74.default.createElement(BlockToken, { key: `${i}-${token.type}`, token }))));
55126
55128
  }
55127
55129
  function BlockToken({ token }) {
55128
55130
  switch (token.type) {
@@ -55141,21 +55143,21 @@ function BlockToken({ token }) {
55141
55143
  case "table":
55142
55144
  return /* @__PURE__ */ import_react74.default.createElement(Table, { token });
55143
55145
  case "html":
55144
- return /* @__PURE__ */ import_react74.default.createElement(L, { color: FG.body }, token.text);
55146
+ return /* @__PURE__ */ import_react74.default.createElement(Text, { color: FG.body }, token.text);
55145
55147
  case "space":
55146
55148
  return null;
55147
55149
  default:
55148
- return /* @__PURE__ */ import_react74.default.createElement(L, { color: FG.body }, token.raw ?? "");
55150
+ return /* @__PURE__ */ import_react74.default.createElement(Text, { color: FG.body }, token.raw ?? "");
55149
55151
  }
55150
55152
  }
55151
55153
  function Heading({ token }) {
55152
- return /* @__PURE__ */ import_react74.default.createElement(W, null, /* @__PURE__ */ import_react74.default.createElement(L, { bold: true, color: FG.strong, backgroundColor: SURFACE.bgElev }, ` ${plainText(token.tokens)} `));
55154
+ return /* @__PURE__ */ import_react74.default.createElement(Box_default, null, /* @__PURE__ */ import_react74.default.createElement(Text, { bold: true, color: FG.strong, backgroundColor: SURFACE.bgElev }, ` ${plainText(token.tokens)} `));
55153
55155
  }
55154
55156
  function Paragraph({ token }) {
55155
- return /* @__PURE__ */ import_react74.default.createElement(L, { color: FG.body }, /* @__PURE__ */ import_react74.default.createElement(Inline, { tokens: token.tokens ?? [] }));
55157
+ return /* @__PURE__ */ import_react74.default.createElement(Text, { color: FG.body }, /* @__PURE__ */ import_react74.default.createElement(Inline, { tokens: token.tokens ?? [] }));
55156
55158
  }
55157
55159
  function List({ token, depth }) {
55158
- return /* @__PURE__ */ import_react74.default.createElement(W, { flexDirection: "column" }, token.items.map((item, i) => /* @__PURE__ */ import_react74.default.createElement(
55160
+ return /* @__PURE__ */ import_react74.default.createElement(Box_default, { flexDirection: "column" }, token.items.map((item, i) => /* @__PURE__ */ import_react74.default.createElement(
55159
55161
  ListItem,
55160
55162
  {
55161
55163
  key: `${i}-${item.text.slice(0, 24)}`,
@@ -55176,12 +55178,12 @@ function ListItem({
55176
55178
  const markerColor = item.task ? item.checked ? TONE.ok : FG.faint : FG.meta;
55177
55179
  const dim = item.task && item.checked === true;
55178
55180
  const indent = " ".repeat(depth + 1);
55179
- return /* @__PURE__ */ import_react74.default.createElement(W, null, /* @__PURE__ */ import_react74.default.createElement(L, { color: markerColor }, `${indent}${marker} `), /* @__PURE__ */ import_react74.default.createElement(W, { flexDirection: "column" }, item.tokens.map((tok, i) => {
55181
+ return /* @__PURE__ */ import_react74.default.createElement(Box_default, null, /* @__PURE__ */ import_react74.default.createElement(Text, { color: markerColor }, `${indent}${marker} `), /* @__PURE__ */ import_react74.default.createElement(Box_default, { flexDirection: "column" }, item.tokens.map((tok, i) => {
55180
55182
  if (tok.type === "text") {
55181
55183
  const inner = tok.tokens;
55182
55184
  return (
55183
55185
  // biome-ignore lint/suspicious/noArrayIndexKey: list-item children are positional and stable per render
55184
- /* @__PURE__ */ import_react74.default.createElement(L, { key: `t-${i}`, color: dim ? FG.faint : FG.body, strikethrough: dim }, inner ? /* @__PURE__ */ import_react74.default.createElement(Inline, { tokens: inner }) : tok.text)
55186
+ /* @__PURE__ */ import_react74.default.createElement(Text, { key: `t-${i}`, color: dim ? FG.faint : FG.body, strikethrough: dim }, inner ? /* @__PURE__ */ import_react74.default.createElement(Inline, { tokens: inner }) : tok.text)
55185
55187
  );
55186
55188
  }
55187
55189
  if (tok.type === "list") {
@@ -55196,9 +55198,9 @@ function CodeBlock2({ token }) {
55196
55198
  () => highlightCode(decodeHtmlEntities(token.text), lang).split("\n"),
55197
55199
  [token.text, lang]
55198
55200
  );
55199
- return /* @__PURE__ */ import_react74.default.createElement(W, { flexDirection: "column" }, lang ? /* @__PURE__ */ import_react74.default.createElement(W, null, /* @__PURE__ */ import_react74.default.createElement(L, { color: FG.meta }, ` ${lang}`)) : null, /* @__PURE__ */ import_react74.default.createElement(W, { flexDirection: "column" }, lines.map((line, i) => (
55201
+ return /* @__PURE__ */ import_react74.default.createElement(Box_default, { flexDirection: "column" }, lang ? /* @__PURE__ */ import_react74.default.createElement(Box_default, null, /* @__PURE__ */ import_react74.default.createElement(Text, { color: FG.meta }, ` ${lang}`)) : null, /* @__PURE__ */ import_react74.default.createElement(Box_default, { flexDirection: "column" }, lines.map((line, i) => (
55200
55202
  // biome-ignore lint/suspicious/noArrayIndexKey: code lines are positional and stable per render
55201
- /* @__PURE__ */ import_react74.default.createElement(L, { key: `code-${i}`, backgroundColor: SURFACE.bgElev }, ` ${line} `)
55203
+ /* @__PURE__ */ import_react74.default.createElement(Text, { key: `code-${i}`, backgroundColor: SURFACE.bgElev }, ` ${line} `)
55202
55204
  ))));
55203
55205
  }
55204
55206
  function highlightCode(source, lang) {
@@ -55211,12 +55213,12 @@ function highlightCode(source, lang) {
55211
55213
  }
55212
55214
  }
55213
55215
  function Blockquote({ token }) {
55214
- return /* @__PURE__ */ import_react74.default.createElement(W, { flexDirection: "column" }, (token.tokens ?? []).map((child, i) => /* @__PURE__ */ import_react74.default.createElement(W, { key: `${i}-${child.type}`, flexDirection: "row" }, /* @__PURE__ */ import_react74.default.createElement(L, { color: TONE.brand }, " \u258E "), /* @__PURE__ */ import_react74.default.createElement(W, { flexDirection: "column", flexGrow: 1 }, child.type === "paragraph" ? /* @__PURE__ */ import_react74.default.createElement(L, { italic: true, color: FG.sub }, /* @__PURE__ */ import_react74.default.createElement(Inline, { tokens: child.tokens ?? [] })) : /* @__PURE__ */ import_react74.default.createElement(BlockToken, { token: child })))));
55216
+ return /* @__PURE__ */ import_react74.default.createElement(Box_default, { flexDirection: "column" }, (token.tokens ?? []).map((child, i) => /* @__PURE__ */ import_react74.default.createElement(Box_default, { key: `${i}-${child.type}`, flexDirection: "row" }, /* @__PURE__ */ import_react74.default.createElement(Text, { color: TONE.brand }, " \u258E "), /* @__PURE__ */ import_react74.default.createElement(Box_default, { flexDirection: "column", flexGrow: 1 }, child.type === "paragraph" ? /* @__PURE__ */ import_react74.default.createElement(Text, { italic: true, color: FG.sub }, /* @__PURE__ */ import_react74.default.createElement(Inline, { tokens: child.tokens ?? [] })) : /* @__PURE__ */ import_react74.default.createElement(BlockToken, { token: child })))));
55215
55217
  }
55216
55218
  function HorizontalRule() {
55217
55219
  const width = useWidth();
55218
55220
  const rule = "\u2500".repeat(Math.max(width, 1));
55219
- return /* @__PURE__ */ import_react74.default.createElement(L, { color: FG.faint }, ` ${rule}`);
55221
+ return /* @__PURE__ */ import_react74.default.createElement(Text, { color: FG.faint }, ` ${rule}`);
55220
55222
  }
55221
55223
  function tableLayout(headerCells, bodyCells, availableWidth) {
55222
55224
  const colCount = headerCells.length;
@@ -55272,14 +55274,14 @@ function ColumnarTable({
55272
55274
  gap
55273
55275
  }) {
55274
55276
  const ruleRow = widths.map((w) => "\u2500".repeat(w)).join(gap);
55275
- return /* @__PURE__ */ import_react74.default.createElement(W, { flexDirection: "column" }, /* @__PURE__ */ import_react74.default.createElement(W, null, /* @__PURE__ */ import_react74.default.createElement(L, null, " "), headerCells.map((cell, i) => (
55277
+ return /* @__PURE__ */ import_react74.default.createElement(Box_default, { flexDirection: "column" }, /* @__PURE__ */ import_react74.default.createElement(Box_default, null, /* @__PURE__ */ import_react74.default.createElement(Text, null, " "), headerCells.map((cell, i) => (
55276
55278
  // biome-ignore lint/suspicious/noArrayIndexKey: header cells positional
55277
- /* @__PURE__ */ import_react74.default.createElement(import_react74.default.Fragment, { key: `h-${i}` }, /* @__PURE__ */ import_react74.default.createElement(L, { bold: true, color: FG.sub }, padToCells(cell, widths[i])), i < colCount - 1 ? /* @__PURE__ */ import_react74.default.createElement(L, null, gap) : null)
55278
- ))), /* @__PURE__ */ import_react74.default.createElement(W, null, /* @__PURE__ */ import_react74.default.createElement(L, null, " "), /* @__PURE__ */ import_react74.default.createElement(L, { color: FG.faint }, ruleRow)), bodyCells.map((row2, ri) => (
55279
+ /* @__PURE__ */ import_react74.default.createElement(import_react74.default.Fragment, { key: `h-${i}` }, /* @__PURE__ */ import_react74.default.createElement(Text, { bold: true, color: FG.sub }, padToCells(cell, widths[i])), i < colCount - 1 ? /* @__PURE__ */ import_react74.default.createElement(Text, null, gap) : null)
55280
+ ))), /* @__PURE__ */ import_react74.default.createElement(Box_default, null, /* @__PURE__ */ import_react74.default.createElement(Text, null, " "), /* @__PURE__ */ import_react74.default.createElement(Text, { color: FG.faint }, ruleRow)), bodyCells.map((row2, ri) => (
55279
55281
  // biome-ignore lint/suspicious/noArrayIndexKey: body rows positional
55280
- /* @__PURE__ */ import_react74.default.createElement(W, { key: `tr-${ri}` }, /* @__PURE__ */ import_react74.default.createElement(L, null, " "), row2.map((cell, i) => (
55282
+ /* @__PURE__ */ import_react74.default.createElement(Box_default, { key: `tr-${ri}` }, /* @__PURE__ */ import_react74.default.createElement(Text, null, " "), row2.map((cell, i) => (
55281
55283
  // biome-ignore lint/suspicious/noArrayIndexKey: cells positional
55282
- /* @__PURE__ */ import_react74.default.createElement(import_react74.default.Fragment, { key: `c-${ri}-${i}` }, /* @__PURE__ */ import_react74.default.createElement(L, { color: FG.body }, padToCells(cell ?? "", widths[i])), i < colCount - 1 ? /* @__PURE__ */ import_react74.default.createElement(L, null, gap) : null)
55284
+ /* @__PURE__ */ import_react74.default.createElement(import_react74.default.Fragment, { key: `c-${ri}-${i}` }, /* @__PURE__ */ import_react74.default.createElement(Text, { color: FG.body }, padToCells(cell ?? "", widths[i])), i < colCount - 1 ? /* @__PURE__ */ import_react74.default.createElement(Text, null, gap) : null)
55283
55285
  )))
55284
55286
  )));
55285
55287
  }
@@ -55289,14 +55291,14 @@ function FallbackTable({
55289
55291
  labelPad,
55290
55292
  valueCells
55291
55293
  }) {
55292
- return /* @__PURE__ */ import_react74.default.createElement(W, { flexDirection: "column" }, bodyCells.map((row2, ri) => (
55294
+ return /* @__PURE__ */ import_react74.default.createElement(Box_default, { flexDirection: "column" }, bodyCells.map((row2, ri) => (
55293
55295
  // biome-ignore lint/suspicious/noArrayIndexKey: body rows positional
55294
- /* @__PURE__ */ import_react74.default.createElement(W, { key: `fr-${ri}`, flexDirection: "column" }, ri > 0 ? /* @__PURE__ */ import_react74.default.createElement(L, null, " ") : null, headerCells.map((h, ci) => {
55296
+ /* @__PURE__ */ import_react74.default.createElement(Box_default, { key: `fr-${ri}`, flexDirection: "column" }, ri > 0 ? /* @__PURE__ */ import_react74.default.createElement(Text, null, " ") : null, headerCells.map((h, ci) => {
55295
55297
  const label = `${padToCells(h, labelPad - 2)}: `;
55296
55298
  const lines = wrapToCells(row2[ci] ?? "", valueCells);
55297
55299
  return lines.map((line, li) => (
55298
55300
  // biome-ignore lint/suspicious/noArrayIndexKey: fallback table lines are positional
55299
- /* @__PURE__ */ import_react74.default.createElement(W, { key: `fc-${ri}-${ci}-${li}` }, li === 0 ? /* @__PURE__ */ import_react74.default.createElement(L, { bold: true, color: FG.sub }, label) : /* @__PURE__ */ import_react74.default.createElement(L, null, padToCells("", labelPad)), /* @__PURE__ */ import_react74.default.createElement(L, { color: FG.body }, line))
55301
+ /* @__PURE__ */ import_react74.default.createElement(Box_default, { key: `fc-${ri}-${ci}-${li}` }, li === 0 ? /* @__PURE__ */ import_react74.default.createElement(Text, { bold: true, color: FG.sub }, label) : /* @__PURE__ */ import_react74.default.createElement(Text, null, padToCells("", labelPad)), /* @__PURE__ */ import_react74.default.createElement(Text, { color: FG.body }, line))
55300
55302
  ));
55301
55303
  }))
55302
55304
  )));
@@ -55313,10 +55315,10 @@ function looksLikeFileRef(path, hasLine) {
55313
55315
  return ext.length >= 2;
55314
55316
  }
55315
55317
  function osc8(children, target, color) {
55316
- return /* @__PURE__ */ import_react74.default.createElement(wv, { transform: (text2) => `\x1B]8;;${target}\x1B\\${text2}\x1B]8;;\x1B\\` }, /* @__PURE__ */ import_react74.default.createElement(L, { color, underline: true }, children));
55318
+ return /* @__PURE__ */ import_react74.default.createElement(Link, { url: target }, /* @__PURE__ */ import_react74.default.createElement(Text, { color, underline: true }, children));
55317
55319
  }
55318
55320
  function renderInlineText(raw) {
55319
- if (!raw) return /* @__PURE__ */ import_react74.default.createElement(L, null, raw);
55321
+ if (!raw) return /* @__PURE__ */ import_react74.default.createElement(Text, null, raw);
55320
55322
  const out = [];
55321
55323
  let cursor = 0;
55322
55324
  const hits = [];
@@ -55327,7 +55329,7 @@ function renderInlineText(raw) {
55327
55329
  hits.push({
55328
55330
  start,
55329
55331
  end,
55330
- node: /* @__PURE__ */ import_react74.default.createElement(L, { color: TONE.warn, underline: true }, `@${path}`)
55332
+ node: /* @__PURE__ */ import_react74.default.createElement(Text, { color: TONE.warn, underline: true }, `@${path}`)
55331
55333
  });
55332
55334
  }
55333
55335
  for (const m of raw.matchAll(FILE_REF_RE2)) {
@@ -55344,12 +55346,12 @@ function renderInlineText(raw) {
55344
55346
  let key = 0;
55345
55347
  for (const h of hits) {
55346
55348
  if (h.start > cursor) {
55347
- out.push(/* @__PURE__ */ import_react74.default.createElement(L, { key: `t-${key++}` }, raw.slice(cursor, h.start)));
55349
+ out.push(/* @__PURE__ */ import_react74.default.createElement(Text, { key: `t-${key++}` }, raw.slice(cursor, h.start)));
55348
55350
  }
55349
55351
  out.push(/* @__PURE__ */ import_react74.default.createElement(import_react74.default.Fragment, { key: `r-${key++}` }, h.node));
55350
55352
  cursor = h.end;
55351
55353
  }
55352
- if (cursor < raw.length) out.push(/* @__PURE__ */ import_react74.default.createElement(L, { key: `t-${key++}` }, raw.slice(cursor)));
55354
+ if (cursor < raw.length) out.push(/* @__PURE__ */ import_react74.default.createElement(Text, { key: `t-${key++}` }, raw.slice(cursor)));
55353
55355
  return /* @__PURE__ */ import_react74.default.createElement(import_react74.default.Fragment, null, out);
55354
55356
  }
55355
55357
  function InlineToken({ token }) {
@@ -55359,29 +55361,29 @@ function InlineToken({ token }) {
55359
55361
  return t2.tokens ? /* @__PURE__ */ import_react74.default.createElement(Inline, { tokens: t2.tokens }) : renderInlineText(t2.text);
55360
55362
  }
55361
55363
  case "strong":
55362
- return /* @__PURE__ */ import_react74.default.createElement(L, { bold: true, color: FG.strong }, /* @__PURE__ */ import_react74.default.createElement(Inline, { tokens: token.tokens }));
55364
+ return /* @__PURE__ */ import_react74.default.createElement(Text, { bold: true, color: FG.strong }, /* @__PURE__ */ import_react74.default.createElement(Inline, { tokens: token.tokens }));
55363
55365
  case "em":
55364
- return /* @__PURE__ */ import_react74.default.createElement(L, { italic: true }, /* @__PURE__ */ import_react74.default.createElement(Inline, { tokens: token.tokens }));
55366
+ return /* @__PURE__ */ import_react74.default.createElement(Text, { italic: true }, /* @__PURE__ */ import_react74.default.createElement(Inline, { tokens: token.tokens }));
55365
55367
  case "codespan":
55366
- return /* @__PURE__ */ import_react74.default.createElement(L, { color: FG.strong, backgroundColor: SURFACE.bgElev }, ` ${decodeHtmlEntities(token.text)} `);
55368
+ return /* @__PURE__ */ import_react74.default.createElement(Text, { color: FG.strong, backgroundColor: SURFACE.bgElev }, ` ${decodeHtmlEntities(token.text)} `);
55367
55369
  case "del":
55368
- return /* @__PURE__ */ import_react74.default.createElement(L, { color: TONE.err, strikethrough: true }, /* @__PURE__ */ import_react74.default.createElement(Inline, { tokens: token.tokens }));
55370
+ return /* @__PURE__ */ import_react74.default.createElement(Text, { color: TONE.err, strikethrough: true }, /* @__PURE__ */ import_react74.default.createElement(Inline, { tokens: token.tokens }));
55369
55371
  case "link": {
55370
55372
  const l = token;
55371
55373
  return osc8(/* @__PURE__ */ import_react74.default.createElement(Inline, { tokens: l.tokens }), l.href, TONE.brand);
55372
55374
  }
55373
55375
  case "image": {
55374
55376
  const im = token;
55375
- return /* @__PURE__ */ import_react74.default.createElement(L, { color: TONE.brand }, `[image: ${im.text || im.href}]`);
55377
+ return /* @__PURE__ */ import_react74.default.createElement(Text, { color: TONE.brand }, `[image: ${im.text || im.href}]`);
55376
55378
  }
55377
55379
  case "br":
55378
- return /* @__PURE__ */ import_react74.default.createElement(L, null, "\n");
55380
+ return /* @__PURE__ */ import_react74.default.createElement(Text, null, "\n");
55379
55381
  case "escape":
55380
- return /* @__PURE__ */ import_react74.default.createElement(L, null, token.text);
55382
+ return /* @__PURE__ */ import_react74.default.createElement(Text, null, token.text);
55381
55383
  case "html":
55382
- return /* @__PURE__ */ import_react74.default.createElement(L, null, token.text);
55384
+ return /* @__PURE__ */ import_react74.default.createElement(Text, null, token.text);
55383
55385
  default:
55384
- return /* @__PURE__ */ import_react74.default.createElement(L, null, token.raw ?? "");
55386
+ return /* @__PURE__ */ import_react74.default.createElement(Text, null, token.raw ?? "");
55385
55387
  }
55386
55388
  }
55387
55389
  function plainText(tokens) {
@@ -55462,7 +55464,7 @@ function useLiveTokenRate(card, enabled2) {
55462
55464
  }
55463
55465
  var PILL_RATE = { bg: "#11141a", fg: "#8b949e" };
55464
55466
  function StreamingCard({ card }) {
55465
- const { stdout } = bv();
55467
+ const { stdout } = useStdout();
55466
55468
  const cols = stdout?.columns ?? 80;
55467
55469
  const expanded = (0, import_react75.useContext)(LiveExpandContext);
55468
55470
  const liveRate = useLiveTokenRate(card, !card.done && !card.aborted);
@@ -55500,9 +55502,9 @@ function StreamingCard({ card }) {
55500
55502
  title: headLabel,
55501
55503
  right: /* @__PURE__ */ import_react75.default.createElement(import_react75.default.Fragment, null, liveRatePill, expandPill, modelPill)
55502
55504
  }
55503
- ), expanded && droppedAbove > 0 ? /* @__PURE__ */ import_react75.default.createElement(L, { color: FG.faint }, t(droppedAbove === 1 ? "cardLabels.earlierLine" : "cardLabels.earlierLines", {
55505
+ ), expanded && droppedAbove > 0 ? /* @__PURE__ */ import_react75.default.createElement(Text, { color: FG.faint }, t(droppedAbove === 1 ? "cardLabels.earlierLine" : "cardLabels.earlierLines", {
55504
55506
  count: droppedAbove
55505
- })) : null, visible.map((line, i) => /* @__PURE__ */ import_react75.default.createElement(W, { key: `${card.id}:${visualLines.length - visible.length + i}`, flexDirection: "row" }, /* @__PURE__ */ import_react75.default.createElement(L, { color: aborted ? FG.meta : FG.body }, clipToCells(line, lineCells)))), aborted ? /* @__PURE__ */ import_react75.default.createElement(L, { color: FG.faint }, t("cardLabels.truncatedByEsc")) : null);
55507
+ })) : null, visible.map((line, i) => /* @__PURE__ */ import_react75.default.createElement(Box_default, { key: `${card.id}:${visualLines.length - visible.length + i}`, flexDirection: "row" }, /* @__PURE__ */ import_react75.default.createElement(Text, { color: aborted ? FG.meta : FG.body }, clipToCells(line, lineCells)))), aborted ? /* @__PURE__ */ import_react75.default.createElement(Text, { color: FG.faint }, t("cardLabels.truncatedByEsc")) : null);
55506
55508
  }
55507
55509
 
55508
55510
  // src/cli/ui/cards/SubAgentCard.tsx
@@ -55529,7 +55531,7 @@ function SubAgentCard({ card }) {
55529
55531
  subtitle: card.task,
55530
55532
  meta: headerMeta2
55531
55533
  }
55532
- ), card.name ? /* @__PURE__ */ import_react76.default.createElement(L, { color: fg.faint }, `${t("cardLabels.agent")} \xB7 ${card.name}`) : null, card.tools && card.tools.length > 0 && /* @__PURE__ */ import_react76.default.createElement(L, { color: fg.faint }, `${t("cardLabels.tools")} \xB7 ${card.tools.join(", ")}`), card.children.map((child) => /* @__PURE__ */ import_react76.default.createElement(W, { key: child.id, flexDirection: "row", gap: 1 }, inLive ? null : /* @__PURE__ */ import_react76.default.createElement(L, { color: tone.violet }, "\u23BF"), /* @__PURE__ */ import_react76.default.createElement(ChildRow, { card: child }))));
55534
+ ), card.name ? /* @__PURE__ */ import_react76.default.createElement(Text, { color: fg.faint }, `${t("cardLabels.agent")} \xB7 ${card.name}`) : null, card.tools && card.tools.length > 0 && /* @__PURE__ */ import_react76.default.createElement(Text, { color: fg.faint }, `${t("cardLabels.tools")} \xB7 ${card.tools.join(", ")}`), card.children.map((child) => /* @__PURE__ */ import_react76.default.createElement(Box_default, { key: child.id, flexDirection: "row", gap: 1 }, inLive ? null : /* @__PURE__ */ import_react76.default.createElement(Text, { color: tone.violet }, "\u23BF"), /* @__PURE__ */ import_react76.default.createElement(ChildRow, { card: child }))));
55533
55535
  }
55534
55536
  function isChildDone(card) {
55535
55537
  switch (card.kind) {
@@ -55546,7 +55548,7 @@ function ChildRow({ card }) {
55546
55548
  const { fg, tone } = useThemeTokens();
55547
55549
  const v = childVisual(card, tone.ok, tone.err, fg.faint);
55548
55550
  const isDone = isChildDone(card);
55549
- return /* @__PURE__ */ import_react76.default.createElement(import_react76.default.Fragment, null, v.statusGlyph, /* @__PURE__ */ import_react76.default.createElement(L, { color: v.kindColor }, v.kindGlyph), /* @__PURE__ */ import_react76.default.createElement(L, { dimColor: isDone, color: fg.body }, v.text));
55551
+ return /* @__PURE__ */ import_react76.default.createElement(import_react76.default.Fragment, null, v.statusGlyph, /* @__PURE__ */ import_react76.default.createElement(Text, { color: v.kindColor }, v.kindGlyph), /* @__PURE__ */ import_react76.default.createElement(Text, { dim: isDone, color: fg.body }, v.text));
55550
55552
  }
55551
55553
  function runningGlyph(color, kind) {
55552
55554
  const frames = kind === "tool" ? PULSE_SQUARE : kind === "streaming" ? PULSE_CIRCLE : PULSE_DIAMOND;
@@ -55554,10 +55556,10 @@ function runningGlyph(color, kind) {
55554
55556
  return /* @__PURE__ */ import_react76.default.createElement(Pulse, { active: true, frames, settled, color });
55555
55557
  }
55556
55558
  function doneGlyph(color) {
55557
- return /* @__PURE__ */ import_react76.default.createElement(L, { color }, "\u2713");
55559
+ return /* @__PURE__ */ import_react76.default.createElement(Text, { color }, "\u2713");
55558
55560
  }
55559
55561
  function failedGlyph(color) {
55560
- return /* @__PURE__ */ import_react76.default.createElement(L, { color }, "\u2717");
55562
+ return /* @__PURE__ */ import_react76.default.createElement(Text, { color }, "\u2717");
55561
55563
  }
55562
55564
  function childVisual(card, doneColor, failedColor, fallbackColor) {
55563
55565
  switch (card.kind) {
@@ -55602,7 +55604,7 @@ function childVisual(card, doneColor, failedColor, fallbackColor) {
55602
55604
  };
55603
55605
  default:
55604
55606
  return {
55605
- statusGlyph: /* @__PURE__ */ import_react76.default.createElement(L, { color: fallbackColor }, "\xB7"),
55607
+ statusGlyph: /* @__PURE__ */ import_react76.default.createElement(Text, { color: fallbackColor }, "\xB7"),
55606
55608
  kindGlyph: "\xB7",
55607
55609
  kindColor: fallbackColor,
55608
55610
  text: card.kind
@@ -55646,7 +55648,7 @@ function TaskCard({ card }) {
55646
55648
  subtitle: `${card.index} / ${card.total} ${card.title}`,
55647
55649
  meta: [elapsed, card.status]
55648
55650
  }
55649
- ), card.steps.map((step) => /* @__PURE__ */ import_react77.default.createElement(W, { key: step.id, flexDirection: "row", gap: 1 }, step.status === "running" ? /* @__PURE__ */ import_react77.default.createElement(Pulse, { active: true, frames: PULSE_TRIANGLE, settled: "\u25B6", color: stepColor[step.status] }) : /* @__PURE__ */ import_react77.default.createElement(L, { color: stepColor[step.status] }, STEP_GLYPH[step.status]), /* @__PURE__ */ import_react77.default.createElement(L, { bold: true, color: fg.body }, (step.toolName ?? t("cardLabels.stepLabel")).padEnd(7)), /* @__PURE__ */ import_react77.default.createElement(Pill2, { label: step.title, ...PILL_PATH, bold: false }), step.detail ? /* @__PURE__ */ import_react77.default.createElement(L, { color: fg.faint }, step.detail) : null, step.elapsedMs !== void 0 ? /* @__PURE__ */ import_react77.default.createElement(L, { color: fg.faint }, `${(step.elapsedMs / 1e3).toFixed(2)}s`) : null)));
55651
+ ), card.steps.map((step) => /* @__PURE__ */ import_react77.default.createElement(Box_default, { key: step.id, flexDirection: "row", gap: 1 }, step.status === "running" ? /* @__PURE__ */ import_react77.default.createElement(Pulse, { active: true, frames: PULSE_TRIANGLE, settled: "\u25B6", color: stepColor[step.status] }) : /* @__PURE__ */ import_react77.default.createElement(Text, { color: stepColor[step.status] }, STEP_GLYPH[step.status]), /* @__PURE__ */ import_react77.default.createElement(Text, { bold: true, color: fg.body }, (step.toolName ?? t("cardLabels.stepLabel")).padEnd(7)), /* @__PURE__ */ import_react77.default.createElement(Pill2, { label: step.title, ...PILL_PATH, bold: false }), step.detail ? /* @__PURE__ */ import_react77.default.createElement(Text, { color: fg.faint }, step.detail) : null, step.elapsedMs !== void 0 ? /* @__PURE__ */ import_react77.default.createElement(Text, { color: fg.faint }, `${(step.elapsedMs / 1e3).toFixed(2)}s`) : null)));
55650
55652
  }
55651
55653
 
55652
55654
  // src/cli/ui/cards/TipCard.tsx
@@ -55657,7 +55659,7 @@ function TipCard({ card }) {
55657
55659
  (max, sec) => sec.rows.reduce((m, r) => Math.max(m, stringWidth(r.key)), max),
55658
55660
  0
55659
55661
  );
55660
- return /* @__PURE__ */ import_react78.default.createElement(W, { flexDirection: "column", paddingLeft: 2, marginY: 1 }, /* @__PURE__ */ import_react78.default.createElement(W, { flexDirection: "row", justifyContent: "space-between" }, /* @__PURE__ */ import_react78.default.createElement(W, { flexDirection: "row", gap: 1 }, /* @__PURE__ */ import_react78.default.createElement(L, { color: TONE.accent, bold: true }, "\u24D8"), /* @__PURE__ */ import_react78.default.createElement(L, { color: FG.body, bold: true }, card.topic)), card.oneTime ? /* @__PURE__ */ import_react78.default.createElement(L, { color: FG.faint }, t("ui.tipShownOnce")) : null), card.sections.map((section, i) => /* @__PURE__ */ import_react78.default.createElement(W, { key: section.title ?? `section-${i}`, flexDirection: "column", marginTop: 1 }, section.title ? /* @__PURE__ */ import_react78.default.createElement(W, { marginBottom: 0 }, /* @__PURE__ */ import_react78.default.createElement(L, { color: FG.sub }, section.title)) : null, section.rows.map((row2) => /* @__PURE__ */ import_react78.default.createElement(
55662
+ return /* @__PURE__ */ import_react78.default.createElement(Box_default, { flexDirection: "column", paddingLeft: 2, marginY: 1 }, /* @__PURE__ */ import_react78.default.createElement(Box_default, { flexDirection: "row", justifyContent: "space-between" }, /* @__PURE__ */ import_react78.default.createElement(Box_default, { flexDirection: "row", gap: 1 }, /* @__PURE__ */ import_react78.default.createElement(Text, { color: TONE.accent, bold: true }, "\u24D8"), /* @__PURE__ */ import_react78.default.createElement(Text, { color: FG.body, bold: true }, card.topic)), card.oneTime ? /* @__PURE__ */ import_react78.default.createElement(Text, { color: FG.faint }, t("ui.tipShownOnce")) : null), card.sections.map((section, i) => /* @__PURE__ */ import_react78.default.createElement(Box_default, { key: section.title ?? `section-${i}`, flexDirection: "column", marginTop: 1 }, section.title ? /* @__PURE__ */ import_react78.default.createElement(Box_default, { marginBottom: 0 }, /* @__PURE__ */ import_react78.default.createElement(Text, { color: FG.sub }, section.title)) : null, section.rows.map((row2) => /* @__PURE__ */ import_react78.default.createElement(
55661
55663
  TipRowRender,
55662
55664
  {
55663
55665
  key: row2.key,
@@ -55665,7 +55667,7 @@ function TipCard({ card }) {
55665
55667
  keyWidth,
55666
55668
  indent: section.title ? 2 : 0
55667
55669
  }
55668
- )))), card.footer ? /* @__PURE__ */ import_react78.default.createElement(W, { marginTop: 1 }, /* @__PURE__ */ import_react78.default.createElement(L, { color: FG.faint }, card.footer)) : null);
55670
+ )))), card.footer ? /* @__PURE__ */ import_react78.default.createElement(Box_default, { marginTop: 1 }, /* @__PURE__ */ import_react78.default.createElement(Text, { color: FG.faint }, card.footer)) : null);
55669
55671
  }
55670
55672
  function TipRowRender({
55671
55673
  row: row2,
@@ -55674,7 +55676,7 @@ function TipRowRender({
55674
55676
  }) {
55675
55677
  const pad = " ".repeat(Math.max(0, keyWidth - stringWidth(row2.key) + KEY_GUTTER));
55676
55678
  const lead = indent > 0 ? " ".repeat(indent) : "";
55677
- return /* @__PURE__ */ import_react78.default.createElement(W, { flexDirection: "row" }, lead ? /* @__PURE__ */ import_react78.default.createElement(L, null, lead) : null, /* @__PURE__ */ import_react78.default.createElement(L, { color: TONE.accent }, row2.key), /* @__PURE__ */ import_react78.default.createElement(L, null, pad), /* @__PURE__ */ import_react78.default.createElement(L, { color: FG.body }, row2.text));
55679
+ return /* @__PURE__ */ import_react78.default.createElement(Box_default, { flexDirection: "row" }, lead ? /* @__PURE__ */ import_react78.default.createElement(Text, null, lead) : null, /* @__PURE__ */ import_react78.default.createElement(Text, { color: TONE.accent }, row2.key), /* @__PURE__ */ import_react78.default.createElement(Text, null, pad), /* @__PURE__ */ import_react78.default.createElement(Text, { color: FG.body }, row2.text));
55678
55680
  }
55679
55681
 
55680
55682
  // src/cli/ui/cards/ToolCard.tsx
@@ -55708,7 +55710,7 @@ function tailLinesFor(name) {
55708
55710
  return /(?:^|_)(read|search|list|tree|get|status|diff|fetch|grep)(_|$)/.test(lower) || lower === "job_output" ? READ_TAIL : OTHER_TAIL;
55709
55711
  }
55710
55712
  function ToolCard({ card }) {
55711
- const { stdout } = bv();
55713
+ const { stdout } = useStdout();
55712
55714
  const cols = stdout?.columns ?? 80;
55713
55715
  const lineCells = Math.max(20, cols - 4);
55714
55716
  const argsLabel = formatArgsSummary(card.args);
@@ -55750,18 +55752,18 @@ function ToolCard({ card }) {
55750
55752
  meta: meta.length > 0 ? meta : void 0
55751
55753
  }
55752
55754
  ), showBody && (subagentMarkdown !== null ? /* @__PURE__ */ import_react80.default.createElement(Markdown, { text: subagentMarkdown, width: lineCells }) : /* @__PURE__ */ import_react80.default.createElement(import_react80.default.Fragment, null, preview.rows.map(
55753
- (row2, i) => row2.kind === "hidden" ? /* @__PURE__ */ import_react80.default.createElement(L, { key: `${card.id}:hidden:${i}`, color: FG.faint }, t(
55755
+ (row2, i) => row2.kind === "hidden" ? /* @__PURE__ */ import_react80.default.createElement(Text, { key: `${card.id}:hidden:${i}`, color: FG.faint }, t(
55754
55756
  hiddenRowLabelKey({
55755
55757
  count: row2.count,
55756
55758
  includeShortcut: i === firstHiddenRow
55757
55759
  }),
55758
55760
  { count: row2.count }
55759
55761
  )) : /* @__PURE__ */ import_react80.default.createElement(
55760
- L,
55762
+ Text,
55761
55763
  {
55762
55764
  key: `${card.id}:line:${row2.index}`,
55763
55765
  color: errColor,
55764
- dimColor: !card.exitCode || card.exitCode === 0
55766
+ dim: !card.exitCode || card.exitCode === 0
55765
55767
  },
55766
55768
  clipToCells(row2.text, lineCells) || " "
55767
55769
  )
@@ -55876,7 +55878,7 @@ function compactNum(n) {
55876
55878
  function bar(ratio, color) {
55877
55879
  const filled = Math.max(0, Math.min(BAR_CELLS2, Math.round(ratio * BAR_CELLS2)));
55878
55880
  const empty = BAR_CELLS2 - filled;
55879
- return /* @__PURE__ */ import_react81.default.createElement(import_react81.default.Fragment, null, /* @__PURE__ */ import_react81.default.createElement(L, { color }, "\u2588".repeat(filled)), /* @__PURE__ */ import_react81.default.createElement(L, { color: FG.faint }, "\u2591".repeat(empty)));
55881
+ return /* @__PURE__ */ import_react81.default.createElement(import_react81.default.Fragment, null, /* @__PURE__ */ import_react81.default.createElement(Text, { color }, "\u2588".repeat(filled)), /* @__PURE__ */ import_react81.default.createElement(Text, { color: FG.faint }, "\u2591".repeat(empty)));
55880
55882
  }
55881
55883
  function UsageCard({ card }) {
55882
55884
  const costDisplayCurrency = useAgentState((s) => s.status.costDisplayCurrency);
@@ -55891,14 +55893,14 @@ function UsageCard({ card }) {
55891
55893
  formatCost(card.cost, costCur)
55892
55894
  ];
55893
55895
  if (card.elapsedMs !== void 0) headerMeta2.push(`${(card.elapsedMs / 1e3).toFixed(1)}s`);
55894
- return /* @__PURE__ */ import_react81.default.createElement(Card, { tone: FG.meta }, /* @__PURE__ */ import_react81.default.createElement(CardHeader, { glyph: "\u03A3", tone: FG.meta, title: t("cardTitles.usage"), meta: headerMeta2 }), /* @__PURE__ */ import_react81.default.createElement(W, { flexDirection: "row", gap: 1 }, /* @__PURE__ */ import_react81.default.createElement(L, { color: FG.sub }, t("cardLabels.prompt")), bar(promptRatio, TONE.brand), /* @__PURE__ */ import_react81.default.createElement(L, { bold: true, color: FG.body }, card.tokens.prompt.toLocaleString()), /* @__PURE__ */ import_react81.default.createElement(L, { color: FG.faint }, `/ 1M \xB7 ${(promptRatio * 100).toFixed(1)}%`)), /* @__PURE__ */ import_react81.default.createElement(W, { flexDirection: "row", gap: 1 }, /* @__PURE__ */ import_react81.default.createElement(L, { color: FG.sub }, t("cardLabels.reason")), bar(reasonRatio, TONE.accent), /* @__PURE__ */ import_react81.default.createElement(L, { bold: true, color: FG.body }, card.tokens.reason.toLocaleString())), /* @__PURE__ */ import_react81.default.createElement(W, { flexDirection: "row", gap: 1 }, /* @__PURE__ */ import_react81.default.createElement(L, { color: FG.sub }, t("cardLabels.output")), bar(outputRatio, TONE.brand), /* @__PURE__ */ import_react81.default.createElement(L, { bold: true, color: FG.body }, card.tokens.output.toLocaleString())), /* @__PURE__ */ import_react81.default.createElement(W, { flexDirection: "row", gap: 1 }, /* @__PURE__ */ import_react81.default.createElement(L, { color: FG.sub }, t("cardLabels.cache"), " "), bar(card.cacheHit, TONE.ok), /* @__PURE__ */ import_react81.default.createElement(L, { bold: true, color: TONE.ok }, `${(card.cacheHit * 100).toFixed(1)}%`)), /* @__PURE__ */ import_react81.default.createElement(W, { flexDirection: "row", gap: 1 }, /* @__PURE__ */ import_react81.default.createElement(L, { color: FG.faint }, t("cardLabels.session")), /* @__PURE__ */ import_react81.default.createElement(L, { bold: true, color: FG.body }, `\u25CF ${formatCost(card.sessionCost, costCur, 3)}`), card.balance !== void 0 ? /* @__PURE__ */ import_react81.default.createElement(import_react81.default.Fragment, null, /* @__PURE__ */ import_react81.default.createElement(L, { color: FG.faint }, `\xB7 ${t("cardLabels.balance")}`), /* @__PURE__ */ import_react81.default.createElement(L, { bold: true, color: TONE.brand }, formatBalance(card.balance, card.balanceCurrency))) : null));
55896
+ return /* @__PURE__ */ import_react81.default.createElement(Card, { tone: FG.meta }, /* @__PURE__ */ import_react81.default.createElement(CardHeader, { glyph: "\u03A3", tone: FG.meta, title: t("cardTitles.usage"), meta: headerMeta2 }), /* @__PURE__ */ import_react81.default.createElement(Box_default, { flexDirection: "row", gap: 1 }, /* @__PURE__ */ import_react81.default.createElement(Text, { color: FG.sub }, t("cardLabels.prompt")), bar(promptRatio, TONE.brand), /* @__PURE__ */ import_react81.default.createElement(Text, { bold: true, color: FG.body }, card.tokens.prompt.toLocaleString()), /* @__PURE__ */ import_react81.default.createElement(Text, { color: FG.faint }, `/ 1M \xB7 ${(promptRatio * 100).toFixed(1)}%`)), /* @__PURE__ */ import_react81.default.createElement(Box_default, { flexDirection: "row", gap: 1 }, /* @__PURE__ */ import_react81.default.createElement(Text, { color: FG.sub }, t("cardLabels.reason")), bar(reasonRatio, TONE.accent), /* @__PURE__ */ import_react81.default.createElement(Text, { bold: true, color: FG.body }, card.tokens.reason.toLocaleString())), /* @__PURE__ */ import_react81.default.createElement(Box_default, { flexDirection: "row", gap: 1 }, /* @__PURE__ */ import_react81.default.createElement(Text, { color: FG.sub }, t("cardLabels.output")), bar(outputRatio, TONE.brand), /* @__PURE__ */ import_react81.default.createElement(Text, { bold: true, color: FG.body }, card.tokens.output.toLocaleString())), /* @__PURE__ */ import_react81.default.createElement(Box_default, { flexDirection: "row", gap: 1 }, /* @__PURE__ */ import_react81.default.createElement(Text, { color: FG.sub }, t("cardLabels.cache"), " "), bar(card.cacheHit, TONE.ok), /* @__PURE__ */ import_react81.default.createElement(Text, { bold: true, color: TONE.ok }, `${(card.cacheHit * 100).toFixed(1)}%`)), /* @__PURE__ */ import_react81.default.createElement(Box_default, { flexDirection: "row", gap: 1 }, /* @__PURE__ */ import_react81.default.createElement(Text, { color: FG.faint }, t("cardLabels.session")), /* @__PURE__ */ import_react81.default.createElement(Text, { bold: true, color: FG.body }, `\u25CF ${formatCost(card.sessionCost, costCur, 3)}`), card.balance !== void 0 ? /* @__PURE__ */ import_react81.default.createElement(import_react81.default.Fragment, null, /* @__PURE__ */ import_react81.default.createElement(Text, { color: FG.faint }, `\xB7 ${t("cardLabels.balance")}`), /* @__PURE__ */ import_react81.default.createElement(Text, { bold: true, color: TONE.brand }, formatBalance(card.balance, card.balanceCurrency))) : null));
55895
55897
  }
55896
55898
  function CompactUsageRow({
55897
55899
  card,
55898
55900
  displayCurrency
55899
55901
  }) {
55900
55902
  const elapsed = card.elapsedMs !== void 0 ? ` \xB7 ${(card.elapsedMs / 1e3).toFixed(1)}s` : "";
55901
- return /* @__PURE__ */ import_react81.default.createElement(W, { flexDirection: "row", gap: 1, marginTop: 1 }, /* @__PURE__ */ import_react81.default.createElement(L, { color: FG.meta }, "\u03A3"), /* @__PURE__ */ import_react81.default.createElement(L, { color: FG.faint }, `${t("cardLabels.turn")} ${card.turn}`), /* @__PURE__ */ import_react81.default.createElement(L, { color: FG.meta }, `\xB7 ${compactNum(card.tokens.prompt)} ${t("cardLabels.prompt")} \xB7 ${compactNum(card.tokens.output)} ${t("cardLabels.output")}`), /* @__PURE__ */ import_react81.default.createElement(L, { color: FG.faint }, `\xB7 ${t("cardLabels.cache")}`), /* @__PURE__ */ import_react81.default.createElement(L, { color: TONE.ok }, `${(card.cacheHit * 100).toFixed(0)}%`), /* @__PURE__ */ import_react81.default.createElement(L, { color: FG.faint }, `\xB7 ${formatCost(card.cost, displayCurrency)}${elapsed}`), card.balance !== void 0 ? /* @__PURE__ */ import_react81.default.createElement(L, { color: TONE.brand }, `\xB7 ${formatBalance(card.balance, card.balanceCurrency)}`) : null);
55903
+ return /* @__PURE__ */ import_react81.default.createElement(Box_default, { flexDirection: "row", gap: 1, marginTop: 1 }, /* @__PURE__ */ import_react81.default.createElement(Text, { color: FG.meta }, "\u03A3"), /* @__PURE__ */ import_react81.default.createElement(Text, { color: FG.faint }, `${t("cardLabels.turn")} ${card.turn}`), /* @__PURE__ */ import_react81.default.createElement(Text, { color: FG.meta }, `\xB7 ${compactNum(card.tokens.prompt)} ${t("cardLabels.prompt")} \xB7 ${compactNum(card.tokens.output)} ${t("cardLabels.output")}`), /* @__PURE__ */ import_react81.default.createElement(Text, { color: FG.faint }, `\xB7 ${t("cardLabels.cache")}`), /* @__PURE__ */ import_react81.default.createElement(Text, { color: TONE.ok }, `${(card.cacheHit * 100).toFixed(0)}%`), /* @__PURE__ */ import_react81.default.createElement(Text, { color: FG.faint }, `\xB7 ${formatCost(card.cost, displayCurrency)}${elapsed}`), card.balance !== void 0 ? /* @__PURE__ */ import_react81.default.createElement(Text, { color: TONE.brand }, `\xB7 ${formatBalance(card.balance, card.balanceCurrency)}`) : null);
55902
55904
  }
55903
55905
 
55904
55906
  // src/cli/ui/cards/UserCard.tsx
@@ -55919,7 +55921,7 @@ function formatRelativeTime(ts, now = Date.now()) {
55919
55921
 
55920
55922
  // src/cli/ui/cards/UserCard.tsx
55921
55923
  function UserCard({ card }) {
55922
- return /* @__PURE__ */ import_react82.default.createElement(W, { flexDirection: "column", width: "100%", paddingX: 1, backgroundColor: MESSAGE_BG.user }, /* @__PURE__ */ import_react82.default.createElement(
55924
+ return /* @__PURE__ */ import_react82.default.createElement(Box_default, { flexDirection: "column", width: "100%", paddingX: 1, backgroundColor: MESSAGE_BG.user }, /* @__PURE__ */ import_react82.default.createElement(
55923
55925
  CardHeader,
55924
55926
  {
55925
55927
  glyph: CARD.user.glyph,
@@ -55927,7 +55929,7 @@ function UserCard({ card }) {
55927
55929
  title: t("cardTitles.you"),
55928
55930
  meta: [formatRelativeTime(card.ts)]
55929
55931
  }
55930
- ), /* @__PURE__ */ import_react82.default.createElement(W, { flexDirection: "row", gap: 1 }, /* @__PURE__ */ import_react82.default.createElement(L, { color: FG.sub }, "\u21B3"), /* @__PURE__ */ import_react82.default.createElement(L, null, card.text)));
55932
+ ), /* @__PURE__ */ import_react82.default.createElement(Box_default, { flexDirection: "row", gap: 1 }, /* @__PURE__ */ import_react82.default.createElement(Text, { color: FG.sub }, "\u21B3"), /* @__PURE__ */ import_react82.default.createElement(Text, null, card.text)));
55931
55933
  }
55932
55934
 
55933
55935
  // src/cli/ui/cards/WarnCard.tsx
@@ -55942,14 +55944,14 @@ function WarnCard({ card }) {
55942
55944
  title: card.title,
55943
55945
  meta: card.detail ? [card.detail] : void 0
55944
55946
  }
55945
- ), messageLines.map((line, i) => /* @__PURE__ */ import_react83.default.createElement(L, { key: `${card.id}:${i}`, color: FG.body }, line || " ")));
55947
+ ), messageLines.map((line, i) => /* @__PURE__ */ import_react83.default.createElement(Text, { key: `${card.id}:${i}`, color: FG.body }, line || " ")));
55946
55948
  }
55947
55949
 
55948
55950
  // src/cli/ui/cards/CardRenderer.tsx
55949
55951
  var CardRenderer = import_react84.default.memo(function CardRenderer2({
55950
55952
  card
55951
55953
  }) {
55952
- return /* @__PURE__ */ import_react84.default.createElement(W, { flexDirection: "column" }, renderCard(card));
55954
+ return /* @__PURE__ */ import_react84.default.createElement(Box_default, { flexDirection: "column" }, renderCard(card));
55953
55955
  });
55954
55956
  function renderCard(card) {
55955
55957
  switch (card.kind) {
@@ -55994,7 +55996,7 @@ function renderCard(card) {
55994
55996
  }
55995
55997
  }
55996
55998
  function FallbackCard({ card }) {
55997
- return /* @__PURE__ */ import_react84.default.createElement(W, { flexDirection: "row" }, /* @__PURE__ */ import_react84.default.createElement(L, { color: FG.faint }, ` \xB7 ${card.kind} card \xB7 not yet migrated`));
55999
+ return /* @__PURE__ */ import_react84.default.createElement(Box_default, { flexDirection: "row" }, /* @__PURE__ */ import_react84.default.createElement(Text, { color: FG.faint }, ` \xB7 ${card.kind} card \xB7 not yet migrated`));
55998
56000
  }
55999
56001
 
56000
56002
  // src/cli/ui/state/chat-scroll-provider.tsx
@@ -56190,13 +56192,7 @@ function CardStream({
56190
56192
  const cardHeights = useChatScrollState((s) => s.cardHeights);
56191
56193
  const { setMaxScroll, setCardHeight, pruneCardHeights } = useChatScrollActions();
56192
56194
  const outerRef = (0, import_react86.useRef)(null);
56193
- const innerRef = (0, import_react86.useRef)(null);
56194
- const outer = Cv(outerRef);
56195
- const inner = Cv(innerRef);
56196
- const maxScroll = Math.max(0, inner.height - outer.height);
56197
- (0, import_react86.useEffect)(() => {
56198
- setMaxScroll(maxScroll);
56199
- }, [maxScroll, setMaxScroll]);
56195
+ const outer = useBoxMetrics(outerRef);
56200
56196
  (0, import_react86.useEffect)(() => {
56201
56197
  pruneCardHeights(new Set(cards.map((c) => c.id)));
56202
56198
  }, [cards, pruneCardHeights]);
@@ -56204,12 +56200,21 @@ function CardStream({
56204
56200
  if (suppressLive && cards.length > 0 && !isFullySettled(cards[cards.length - 1])) {
56205
56201
  visible = cards.slice(0, -1);
56206
56202
  }
56203
+ const totalInnerRows = (0, import_react86.useMemo)(() => {
56204
+ let sum = 0;
56205
+ for (const card of visible) sum += cardHeights.get(card.id) ?? 0;
56206
+ return sum;
56207
+ }, [visible, cardHeights]);
56208
+ const maxScroll = Math.max(0, totalInnerRows - outer.height);
56209
+ (0, import_react86.useEffect)(() => {
56210
+ setMaxScroll(maxScroll);
56211
+ }, [maxScroll, setMaxScroll]);
56207
56212
  const items = (0, import_react86.useMemo)(
56208
56213
  () => computeCardStreamItems(visible, cardHeights, scrollRows, outer.height),
56209
56214
  [visible, cardHeights, scrollRows, outer.height]
56210
56215
  );
56211
- return /* @__PURE__ */ import_react86.default.createElement(import_react86.default.Fragment, null, /* @__PURE__ */ import_react86.default.createElement(W, { height: 1, flexShrink: 0 }, scrollRows > 0 ? /* @__PURE__ */ import_react86.default.createElement(ScrollIndicator, { scrollRows, maxScroll }) : null), /* @__PURE__ */ import_react86.default.createElement(W, { ref: outerRef, flexDirection: "column", flexGrow: 1, overflow: "hidden" }, /* @__PURE__ */ import_react86.default.createElement(W, { ref: innerRef, flexDirection: "column", marginTop: -scrollRows, flexShrink: 0 }, items.map(
56212
- (item) => item.kind === "spacer" ? /* @__PURE__ */ import_react86.default.createElement(W, { key: item.key, height: item.rows, flexShrink: 0 }) : /* @__PURE__ */ import_react86.default.createElement(MeasuredCard, { key: item.card.id, card: item.card, report: setCardHeight })
56216
+ return /* @__PURE__ */ import_react86.default.createElement(import_react86.default.Fragment, null, /* @__PURE__ */ import_react86.default.createElement(Box_default, { height: 1, flexShrink: 0 }, scrollRows > 0 ? /* @__PURE__ */ import_react86.default.createElement(ScrollIndicator, { scrollRows, maxScroll }) : null), /* @__PURE__ */ import_react86.default.createElement(Box_default, { ref: outerRef, flexDirection: "column", flexGrow: 1, overflow: "hidden" }, /* @__PURE__ */ import_react86.default.createElement(Box_default, { flexDirection: "column", marginTop: -scrollRows, flexShrink: 0 }, items.map(
56217
+ (item) => item.kind === "spacer" ? /* @__PURE__ */ import_react86.default.createElement(Box_default, { key: item.key, height: item.rows, flexShrink: 0 }) : /* @__PURE__ */ import_react86.default.createElement(MeasuredCard, { key: item.card.id, card: item.card, report: setCardHeight })
56213
56218
  ))));
56214
56219
  }
56215
56220
  function MeasuredCard({
@@ -56217,7 +56222,7 @@ function MeasuredCard({
56217
56222
  report
56218
56223
  }) {
56219
56224
  const ref = (0, import_react86.useRef)(null);
56220
- const metrics = Cv(ref);
56225
+ const metrics = useBoxMetrics(ref);
56221
56226
  const lastReportedRef = (0, import_react86.useRef)(0);
56222
56227
  const settled = isFullySettled(card);
56223
56228
  (0, import_react86.useEffect)(() => {
@@ -56227,7 +56232,7 @@ function MeasuredCard({
56227
56232
  lastReportedRef.current = rows;
56228
56233
  report(card.id, rows);
56229
56234
  }, [card.id, metrics.height, report, settled]);
56230
- return /* @__PURE__ */ import_react86.default.createElement(W, { ref, flexDirection: "column", flexShrink: 0 }, /* @__PURE__ */ import_react86.default.createElement(CardRenderer, { card }));
56235
+ return /* @__PURE__ */ import_react86.default.createElement(Box_default, { ref, flexDirection: "column", flexShrink: 0 }, /* @__PURE__ */ import_react86.default.createElement(CardRenderer, { card }));
56231
56236
  }
56232
56237
  function ScrollIndicator({
56233
56238
  scrollRows,
@@ -56245,10 +56250,10 @@ function ScrollIndicator({
56245
56250
  const above = scrollRows === 1 ? t("cardStream.scrollAbove", { scroll: scrollRows, max: maxScroll }) : t("cardStream.scrollAbovePlural", { scroll: scrollRows, max: maxScroll });
56246
56251
  const more = remaining > 0 ? t("cardStream.scrollMore", { remaining }) : "";
56247
56252
  const text2 = `${above}${more}${t("cardStream.scrollPgUp")}${t("cardStream.scrollCopy")}`;
56248
- const { stdout } = bv();
56253
+ const { stdout } = useStdout();
56249
56254
  const cols = stdout?.columns ?? 80;
56250
56255
  const pad = Math.max(0, cols - stringWidth(text2));
56251
- return /* @__PURE__ */ import_react86.default.createElement(L, { color: hot ? TONE.accent : FG.faint, backgroundColor: SURFACE.bgElev }, text2 + " ".repeat(pad));
56256
+ return /* @__PURE__ */ import_react86.default.createElement(Text, { color: hot ? TONE.accent : FG.faint, backgroundColor: SURFACE.bgElev }, text2 + " ".repeat(pad));
56252
56257
  }
56253
56258
  function isFullySettled(card) {
56254
56259
  switch (card.kind) {
@@ -56282,7 +56287,7 @@ function StaticCardStreamInner({
56282
56287
  [visibleCards]
56283
56288
  );
56284
56289
  const visibleDynamic = suppressLive && hasUnsettledDynamic && dynamicItems.length > 0 ? dynamicItems.slice(0, -1) : dynamicItems;
56285
- return /* @__PURE__ */ import_react87.default.createElement(import_react87.default.Fragment, null, /* @__PURE__ */ import_react87.default.createElement(vv, { items: staticItems }, (card) => /* @__PURE__ */ import_react87.default.createElement(W, { key: card.id, flexDirection: "column", flexShrink: 0 }, /* @__PURE__ */ import_react87.default.createElement(CardRenderer, { card }))), /* @__PURE__ */ import_react87.default.createElement(W, { flexDirection: "column", flexShrink: 0 }, visibleDynamic.map((card) => /* @__PURE__ */ import_react87.default.createElement(W, { key: card.id, flexDirection: "column", flexShrink: 0 }, /* @__PURE__ */ import_react87.default.createElement(CardRenderer, { card })))));
56290
+ return /* @__PURE__ */ import_react87.default.createElement(import_react87.default.Fragment, null, /* @__PURE__ */ import_react87.default.createElement(Static, { items: staticItems }, (card) => /* @__PURE__ */ import_react87.default.createElement(Box_default, { key: card.id, flexDirection: "column", flexShrink: 0 }, /* @__PURE__ */ import_react87.default.createElement(CardRenderer, { card }))), /* @__PURE__ */ import_react87.default.createElement(Box_default, { flexDirection: "column", flexShrink: 0 }, visibleDynamic.map((card) => /* @__PURE__ */ import_react87.default.createElement(Box_default, { key: card.id, flexDirection: "column", flexShrink: 0 }, /* @__PURE__ */ import_react87.default.createElement(CardRenderer, { card })))));
56286
56291
  }
56287
56292
  function useProgressiveBacklog(cards) {
56288
56293
  const backlogRef = (0, import_react87.useRef)(null);
@@ -58692,7 +58697,7 @@ var handlers17 = {
58692
58697
  var handlers18 = {
58693
58698
  "search-engine": (args, _loop, ctx) => {
58694
58699
  const engine = args[0];
58695
- if (!engine || engine !== "bing" && engine !== "searxng" && engine !== "metaso" && engine !== "tavily" && engine !== "perplexity" && engine !== "exa") {
58700
+ if (!engine || engine !== "bing" && engine !== "searxng" && engine !== "metaso" && engine !== "tavily" && engine !== "perplexity" && engine !== "exa" && engine !== "brave" && engine !== "ollama") {
58696
58701
  return {
58697
58702
  info: [
58698
58703
  t("handlers.webSearchEngine.currentEngine", { engine: webSearchEngine() }),
@@ -58706,6 +58711,8 @@ var handlers18 = {
58706
58711
  t("handlers.webSearchEngine.usageTavily"),
58707
58712
  t("handlers.webSearchEngine.usagePerplexity"),
58708
58713
  t("handlers.webSearchEngine.usageExa"),
58714
+ t("handlers.webSearchEngine.usageOllama"),
58715
+ t("handlers.webSearchEngine.usageBrave"),
58709
58716
  "",
58710
58717
  t("handlers.webSearchEngine.alias"),
58711
58718
  "",
@@ -58715,9 +58722,9 @@ var handlers18 = {
58715
58722
  };
58716
58723
  }
58717
58724
  const cfg = readConfig();
58718
- const apiKeyEngines = /* @__PURE__ */ new Set(["tavily", "perplexity", "exa", "metaso"]);
58725
+ const apiKeyEngines = /* @__PURE__ */ new Set(["tavily", "perplexity", "exa", "metaso", "ollama", "brave"]);
58719
58726
  if (apiKeyEngines.has(engine)) {
58720
- const loadKey = engine === "tavily" ? loadTavilyApiKey : engine === "perplexity" ? loadPerplexityApiKey : engine === "exa" ? loadExaApiKey : loadMetasoApiKey;
58727
+ const loadKey = engine === "tavily" ? loadTavilyApiKey : engine === "perplexity" ? loadPerplexityApiKey : engine === "exa" ? loadExaApiKey : engine === "ollama" ? loadOllamaApiKey : engine === "brave" ? loadBraveApiKey : loadMetasoApiKey;
58721
58728
  if (args[1]) {
58722
58729
  cfg.webSearchEngine = engine;
58723
58730
  cfg[`${engine}ApiKey`] = args[1];
@@ -58741,7 +58748,7 @@ var handlers18 = {
58741
58748
  cfg.webSearchEndpoint = raw.includes("://") ? raw : `http://${raw}`;
58742
58749
  }
58743
58750
  writeConfig(cfg);
58744
- const note = engine === "searxng" ? t("handlers.webSearchEngine.switchedSearxngNote", { endpoint: webSearchEndpoint() }) : engine === "metaso" ? t("handlers.webSearchEngine.switchedMetasoNote") : engine === "tavily" ? t("handlers.webSearchEngine.switchedTavilyNote") : engine === "perplexity" ? t("handlers.webSearchEngine.switchedPerplexityNote") : engine === "exa" ? t("handlers.webSearchEngine.switchedExaNote") : "";
58751
+ const note = engine === "searxng" ? t("handlers.webSearchEngine.switchedSearxngNote", { endpoint: webSearchEndpoint() }) : engine === "metaso" ? t("handlers.webSearchEngine.switchedMetasoNote") : engine === "tavily" ? t("handlers.webSearchEngine.switchedTavilyNote") : engine === "perplexity" ? t("handlers.webSearchEngine.switchedPerplexityNote") : engine === "exa" ? t("handlers.webSearchEngine.switchedExaNote") : engine === "ollama" ? t("handlers.webSearchEngine.switchedOllamaNote") : engine === "brave" ? t("handlers.webSearchEngine.switchedBraveNote") : "";
58745
58752
  const detail = engine === "searxng" ? t("handlers.webSearchEngine.confirmedDetail", { endpoint: webSearchEndpoint() }) : "";
58746
58753
  return { info: t("handlers.webSearchEngine.confirmed", { engine, detail }) };
58747
58754
  },
@@ -60111,7 +60118,7 @@ function AppInner({
60111
60118
  setStatusLine,
60112
60119
  clear: clearToolProgressDisplay
60113
60120
  } = useToolProgressDisplay(progressSink);
60114
- const { stdout } = bv();
60121
+ const { stdout } = useStdout();
60115
60122
  const walletCurrencyRef = (0, import_react93.useRef)(void 0);
60116
60123
  const { activities: subagentActivities, sinkRef: subagentSinkRef } = useSubagent({
60117
60124
  session,
@@ -60206,7 +60213,7 @@ function AppInner({
60206
60213
  isHistoryMode
60207
60214
  } = useInputRecall(setInput);
60208
60215
  const chatScroll = useChatScrollActions();
60209
- const { setRawMode, isRawModeSupported } = An();
60216
+ const { setRawMode, isRawModeSupported } = use_stdin_default();
60210
60217
  const handleOpenExternalEditor = (0, import_react93.useCallback)(async () => {
60211
60218
  if (!isRawModeSupported) {
60212
60219
  log.pushWarning(t("composer.editorFailed"), t("composer.editorNoRawMode"));
@@ -61217,6 +61224,9 @@ ${t("mcpLifecycle.failedSetupHint")}`
61217
61224
  totalInputCostUsd: s.totalInputCostUsd,
61218
61225
  totalOutputCostUsd: s.totalOutputCostUsd,
61219
61226
  cacheHitRatio: s.cacheHitRatio,
61227
+ cacheHitTokens: loop2.stats.cumulativeCacheHitTokens,
61228
+ cacheMissTokens: loop2.stats.cumulativeCacheMissTokens,
61229
+ totalCompletionTokens: loop2.stats.cumulativeCompletionTokens,
61220
61230
  lastPromptTokens: s.lastPromptTokens,
61221
61231
  contextCapTokens: ctxCap2,
61222
61232
  // useSessionInfo's Balance is a flat { currency, total }; the
@@ -61382,8 +61392,8 @@ ${t("mcpLifecycle.failedSetupHint")}`
61382
61392
  return persistentDashboardHandle.url;
61383
61393
  }
61384
61394
  const startup = (async () => {
61385
- const { startDashboardServer } = await import("./server-UHKO2VVM.js");
61386
- const { saveDashboardPort } = await import("./config-KV7VV5LG.js");
61395
+ const { startDashboardServer } = await import("./server-MPCXIW2O.js");
61396
+ const { saveDashboardPort } = await import("./config-T4RWI5NG.js");
61387
61397
  const tryStart = (port) => startDashboardServer(buildCtx(), {
61388
61398
  port,
61389
61399
  host: dashboardHost,
@@ -62784,7 +62794,7 @@ ${answer}`, "brand");
62784
62794
  );
62785
62795
  const tickerSuspended = modalOpen || !busy && !isStreaming;
62786
62796
  if (!bootReady) return /* @__PURE__ */ import_react93.default.createElement(BootSplash, null);
62787
- return /* @__PURE__ */ import_react93.default.createElement(import_react93.default.Fragment, null, /* @__PURE__ */ import_react93.default.createElement(TickerProvider, { disabled: tickerSuspended }, /* @__PURE__ */ import_react93.default.createElement(InflightProvider, { inflight: loop2.inflight }, /* @__PURE__ */ import_react93.default.createElement(W, { flexDirection: "row" }, /* @__PURE__ */ import_react93.default.createElement(W, { flexDirection: "column", flexGrow: 1 }, /* @__PURE__ */ import_react93.default.createElement(W, { flexDirection: "column", flexGrow: 1 }, /* @__PURE__ */ import_react93.default.createElement(LiveExpandContext.Provider, { value: liveExpand }, /* @__PURE__ */ import_react93.default.createElement(VerboseContext.Provider, { value: verboseMode }, historyScrollMode === "app" ? /* @__PURE__ */ import_react93.default.createElement(CardStream, { suppressLive: modalOpen }) : /* @__PURE__ */ import_react93.default.createElement(StaticCardStream, { suppressLive: modalOpen }))), !hasConversation && !busy && !isStreaming && slashMatches === null ? /* @__PURE__ */ import_react93.default.createElement(W, { flexGrow: 1, justifyContent: "center" }, /* @__PURE__ */ import_react93.default.createElement(
62797
+ return /* @__PURE__ */ import_react93.default.createElement(import_react93.default.Fragment, null, /* @__PURE__ */ import_react93.default.createElement(TickerProvider, { disabled: tickerSuspended }, /* @__PURE__ */ import_react93.default.createElement(InflightProvider, { inflight: loop2.inflight }, /* @__PURE__ */ import_react93.default.createElement(Box_default, { flexDirection: "row" }, /* @__PURE__ */ import_react93.default.createElement(Box_default, { flexDirection: "column", flexGrow: 1 }, /* @__PURE__ */ import_react93.default.createElement(Box_default, { flexDirection: "column", flexGrow: 1 }, /* @__PURE__ */ import_react93.default.createElement(LiveExpandContext.Provider, { value: liveExpand }, /* @__PURE__ */ import_react93.default.createElement(VerboseContext.Provider, { value: verboseMode }, historyScrollMode === "app" ? /* @__PURE__ */ import_react93.default.createElement(CardStream, { suppressLive: modalOpen }) : /* @__PURE__ */ import_react93.default.createElement(StaticCardStream, { suppressLive: modalOpen }))), !hasConversation && !busy && !isStreaming && slashMatches === null ? /* @__PURE__ */ import_react93.default.createElement(Box_default, { flexGrow: 1, justifyContent: "center" }, /* @__PURE__ */ import_react93.default.createElement(
62788
62798
  WelcomeBanner,
62789
62799
  {
62790
62800
  inCodeMode: !!codeMode,
@@ -63210,18 +63220,18 @@ function MaskedInput({
63210
63220
  });
63211
63221
  if (value.length === 0) {
63212
63222
  if (placeholder.length === 0) {
63213
- return /* @__PURE__ */ import_react94.default.createElement(L, { inverse: true }, " ");
63223
+ return /* @__PURE__ */ import_react94.default.createElement(Text, { inverse: true }, " ");
63214
63224
  }
63215
- return /* @__PURE__ */ import_react94.default.createElement(import_react94.default.Fragment, null, /* @__PURE__ */ import_react94.default.createElement(L, { inverse: true }, placeholder[0]), /* @__PURE__ */ import_react94.default.createElement(L, { color: FG.faint }, placeholder.slice(1)));
63225
+ return /* @__PURE__ */ import_react94.default.createElement(import_react94.default.Fragment, null, /* @__PURE__ */ import_react94.default.createElement(Text, { inverse: true }, placeholder[0]), /* @__PURE__ */ import_react94.default.createElement(Text, { color: FG.faint }, placeholder.slice(1)));
63216
63226
  }
63217
- return /* @__PURE__ */ import_react94.default.createElement(import_react94.default.Fragment, null, /* @__PURE__ */ import_react94.default.createElement(L, null, mask.repeat(value.length)), /* @__PURE__ */ import_react94.default.createElement(L, { inverse: true }, " "));
63227
+ return /* @__PURE__ */ import_react94.default.createElement(import_react94.default.Fragment, null, /* @__PURE__ */ import_react94.default.createElement(Text, null, mask.repeat(value.length)), /* @__PURE__ */ import_react94.default.createElement(Text, { inverse: true }, " "));
63218
63228
  }
63219
63229
 
63220
63230
  // src/cli/ui/Setup.tsx
63221
63231
  function Setup({ onReady }) {
63222
63232
  const [value, setValue] = (0, import_react95.useState)("");
63223
63233
  const [error, setError] = (0, import_react95.useState)(null);
63224
- const { exit: exit2 } = fc();
63234
+ const { exit: exit2 } = use_app_default();
63225
63235
  const handleSubmit = (raw) => {
63226
63236
  const trimmed = raw.trim();
63227
63237
  if (trimmed === "/exit" || trimmed === "/quit") {
@@ -63241,7 +63251,7 @@ function Setup({ onReady }) {
63241
63251
  }
63242
63252
  onReady(trimmed);
63243
63253
  };
63244
- return /* @__PURE__ */ import_react95.default.createElement(W, { flexDirection: "column", paddingX: 1, marginY: 1 }, /* @__PURE__ */ import_react95.default.createElement(W, null, /* @__PURE__ */ import_react95.default.createElement(L, { bold: true, color: GRADIENT[0] }, GLYPH.brand), /* @__PURE__ */ import_react95.default.createElement(L, null, " "), /* @__PURE__ */ import_react95.default.createElement(L, { bold: true }, t("wizard.welcomeTitle"))), /* @__PURE__ */ import_react95.default.createElement(W, { marginTop: 1 }, /* @__PURE__ */ import_react95.default.createElement(L, { color: COLOR.info }, t("wizard.apiKeyPrompt"))), /* @__PURE__ */ import_react95.default.createElement(W, null, /* @__PURE__ */ import_react95.default.createElement(L, { dimColor: true }, ` ${t("wizard.apiKeyGetOne")}`)), /* @__PURE__ */ import_react95.default.createElement(W, null, /* @__PURE__ */ import_react95.default.createElement(L, { dimColor: true }, t("wizard.apiKeySavedLocally", { path: defaultConfigPath() }))), /* @__PURE__ */ import_react95.default.createElement(W, { marginTop: 1 }, /* @__PURE__ */ import_react95.default.createElement(L, { bold: true, color: COLOR.brand }, GLYPH.bar), /* @__PURE__ */ import_react95.default.createElement(L, { bold: true, color: COLOR.primary }, " \u203A "), /* @__PURE__ */ import_react95.default.createElement(
63254
+ return /* @__PURE__ */ import_react95.default.createElement(Box_default, { flexDirection: "column", paddingX: 1, marginY: 1 }, /* @__PURE__ */ import_react95.default.createElement(Box_default, null, /* @__PURE__ */ import_react95.default.createElement(Text, { bold: true, color: GRADIENT[0] }, GLYPH.brand), /* @__PURE__ */ import_react95.default.createElement(Text, null, " "), /* @__PURE__ */ import_react95.default.createElement(Text, { bold: true }, t("wizard.welcomeTitle"))), /* @__PURE__ */ import_react95.default.createElement(Box_default, { marginTop: 1 }, /* @__PURE__ */ import_react95.default.createElement(Text, { color: COLOR.info }, t("wizard.apiKeyPrompt"))), /* @__PURE__ */ import_react95.default.createElement(Box_default, null, /* @__PURE__ */ import_react95.default.createElement(Text, { dim: true }, ` ${t("wizard.apiKeyGetOne")}`)), /* @__PURE__ */ import_react95.default.createElement(Box_default, null, /* @__PURE__ */ import_react95.default.createElement(Text, { dim: true }, t("wizard.apiKeySavedLocally", { path: defaultConfigPath() }))), /* @__PURE__ */ import_react95.default.createElement(Box_default, { marginTop: 1 }, /* @__PURE__ */ import_react95.default.createElement(Text, { bold: true, color: COLOR.brand }, GLYPH.bar), /* @__PURE__ */ import_react95.default.createElement(Text, { bold: true, color: COLOR.primary }, " \u203A "), /* @__PURE__ */ import_react95.default.createElement(
63245
63255
  MaskedInput,
63246
63256
  {
63247
63257
  value,
@@ -63250,7 +63260,7 @@ function Setup({ onReady }) {
63250
63260
  mask: "\u2022",
63251
63261
  placeholder: t("wizard.apiKeyPlaceholder")
63252
63262
  }
63253
- )), error ? /* @__PURE__ */ import_react95.default.createElement(W, { marginTop: 1 }, /* @__PURE__ */ import_react95.default.createElement(L, { color: COLOR.err, bold: true }, GLYPH.err), /* @__PURE__ */ import_react95.default.createElement(L, { color: COLOR.err }, ` ${error}`)) : value ? /* @__PURE__ */ import_react95.default.createElement(W, { marginTop: 1 }, /* @__PURE__ */ import_react95.default.createElement(L, { dimColor: true }, t("wizard.apiKeyPreview", { redacted: redactKey(value) }))) : null, /* @__PURE__ */ import_react95.default.createElement(W, { marginTop: 1 }, /* @__PURE__ */ import_react95.default.createElement(L, { dimColor: true }, t("wizard.exitHint"))));
63263
+ )), error ? /* @__PURE__ */ import_react95.default.createElement(Box_default, { marginTop: 1 }, /* @__PURE__ */ import_react95.default.createElement(Text, { color: COLOR.err, bold: true }, GLYPH.err), /* @__PURE__ */ import_react95.default.createElement(Text, { color: COLOR.err }, ` ${error}`)) : value ? /* @__PURE__ */ import_react95.default.createElement(Box_default, { marginTop: 1 }, /* @__PURE__ */ import_react95.default.createElement(Text, { dim: true }, t("wizard.apiKeyPreview", { redacted: redactKey(value) }))) : null, /* @__PURE__ */ import_react95.default.createElement(Box_default, { marginTop: 1 }, /* @__PURE__ */ import_react95.default.createElement(Text, { dim: true }, t("wizard.exitHint"))));
63254
63264
  }
63255
63265
 
63256
63266
  // src/cli/ui/drain-tty.ts
@@ -63553,7 +63563,7 @@ async function chatCommand(opts) {
63553
63563
  process.exit(143);
63554
63564
  });
63555
63565
  }
63556
- const { waitUntilExit } = Wo(
63566
+ const { waitUntilExit } = renderSync(
63557
63567
  /* @__PURE__ */ import_react96.default.createElement(
63558
63568
  Root,
63559
63569
  {
@@ -63589,4 +63599,4 @@ async function chatCommand(opts) {
63589
63599
  export {
63590
63600
  chatCommand
63591
63601
  };
63592
- //# sourceMappingURL=chunk-GNRKXRRE.js.map
63602
+ //# sourceMappingURL=chunk-S3QII236.js.map