reasonix 0.51.0 → 0.52.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.
- package/dashboard/dist/app.css +1 -1
- package/dashboard/dist/app.js +3 -3
- package/dashboard/dist/app.js.map +1 -1
- package/dist/cli/{acp-XEUHGG7X.js → acp-NEUYWGUU.js} +26 -26
- package/dist/cli/chat-QA6IVFJD.js +49 -0
- package/dist/cli/{chunk-HGK57NBN.js → chunk-2W4F3RIZ.js} +2 -2
- package/dist/cli/{chunk-UO6E7FN3.js → chunk-3OXD5CBM.js} +32756 -31192
- package/dist/cli/chunk-3OXD5CBM.js.map +1 -0
- package/dist/cli/{chunk-UMZ6KHTS.js → chunk-5YLEKX2V.js} +2 -2
- package/dist/cli/{chunk-BA5R6BAE.js → chunk-6QBUXA73.js} +2 -2
- package/dist/cli/chunk-77JIQ7SL.js +40 -0
- package/dist/cli/chunk-77JIQ7SL.js.map +1 -0
- package/dist/cli/{chunk-6XWXIVQ3.js → chunk-AMSK3ZLB.js} +2 -2
- package/dist/cli/chunk-AMSK3ZLB.js.map +1 -0
- package/dist/cli/{chunk-A5PBEIJ7.js → chunk-AOYUW3HR.js} +37 -4
- package/dist/cli/chunk-AOYUW3HR.js.map +1 -0
- package/dist/cli/{chunk-3YRTIWFX.js → chunk-ARBGTNHM.js} +2 -2
- package/dist/cli/{chunk-3BTK5BHI.js → chunk-B4MOGWHW.js} +2 -2
- package/dist/cli/{chunk-5AIDYVH2.js → chunk-CFJY64UA.js} +2 -2
- package/dist/cli/{chunk-SBHF5NWD.js → chunk-CGVW5W7N.js} +14 -14
- package/dist/cli/{chunk-SBHF5NWD.js.map → chunk-CGVW5W7N.js.map} +1 -1
- package/dist/cli/{chunk-DVD67FXQ.js → chunk-CLHMV6OL.js} +568 -66
- package/dist/cli/chunk-CLHMV6OL.js.map +1 -0
- package/dist/cli/{chunk-2WUEAI2I.js → chunk-CPCUMMSR.js} +3 -3
- package/dist/cli/{chunk-JHWQDJZA.js → chunk-CTRM32BP.js} +2 -2
- package/dist/cli/{chunk-544J4PXD.js → chunk-D6WRFR6V.js} +5 -5
- package/dist/cli/{chunk-N4SEBLU4.js → chunk-DLTE4GBY.js} +3 -3
- package/dist/cli/{chunk-NRROJXXT.js → chunk-FY5UERSG.js} +9 -9
- package/dist/cli/{chunk-C2MRSJTV.js → chunk-GFJJEW3Z.js} +18 -10
- package/dist/cli/chunk-GFJJEW3Z.js.map +1 -0
- package/dist/cli/{chunk-R6KIHEF3.js → chunk-GNRKXRRE.js} +743 -660
- package/dist/cli/chunk-GNRKXRRE.js.map +1 -0
- package/dist/cli/{chunk-SXSAWOB7.js → chunk-HI6THNAZ.js} +19 -17
- package/dist/cli/chunk-HI6THNAZ.js.map +1 -0
- package/dist/cli/{chunk-K4YQFULP.js → chunk-HNZ4727T.js} +15 -15
- package/dist/cli/chunk-I3NE5S63.js +54 -0
- package/dist/cli/{chunk-EAMXOWUW.js.map → chunk-I3NE5S63.js.map} +1 -1
- package/dist/cli/{chunk-FEZK652I.js → chunk-MVLPXZAA.js} +834 -10
- package/dist/cli/chunk-MVLPXZAA.js.map +1 -0
- package/dist/cli/{chunk-36BM7INR.js → chunk-MW64SQUE.js} +2 -2
- package/dist/cli/{chunk-Z3MKG7MQ.js → chunk-OMNRXZNA.js} +2 -2
- package/dist/cli/{chunk-7YPMTE3U.js → chunk-RCC73DWQ.js} +5 -9
- package/dist/cli/chunk-RCC73DWQ.js.map +1 -0
- package/dist/cli/{chunk-2HVTBFCI.js → chunk-RHQOGG43.js} +5 -3
- package/dist/cli/chunk-RHQOGG43.js.map +1 -0
- package/dist/cli/{chunk-EWVFGYT6.js → chunk-VVPV5HU6.js} +2 -2
- package/dist/cli/{chunk-7YB26OQO.js → chunk-WPY7AFS6.js} +2 -2
- package/dist/cli/{chunk-BM6BBFAV.js → chunk-XBYHNZ5Z.js} +2 -2
- package/dist/cli/{chunk-WPOKBW5E.js → chunk-XNMXVL6C.js} +2 -2
- package/dist/cli/{chunk-SVD4UPRQ.js → chunk-XUZHBQSM.js} +2 -2
- package/dist/cli/{chunk-Q46B3Z7H.js → chunk-YMYX6QTC.js} +8 -5
- package/dist/cli/{chunk-Q46B3Z7H.js.map → chunk-YMYX6QTC.js.map} +1 -1
- package/dist/cli/{chunk-K3QJ3GKI.js → chunk-Z663GVUB.js} +3 -3
- package/dist/cli/{code-BMXLBC7D.js → code-WN6D4VZO.js} +35 -36
- package/dist/cli/{code-BMXLBC7D.js.map → code-WN6D4VZO.js.map} +1 -1
- package/dist/cli/{commands-E4RZXMF6.js → commands-DHETOY7O.js} +4 -4
- package/dist/cli/{commit-KSRQ64IL.js → commit-BBUYAKZV.js} +3 -3
- package/dist/cli/{config-QNDONOTU.js → config-KV7VV5LG.js} +4 -2
- package/dist/cli/{desktop-H3ZHIMDA.js → desktop-LJVXWXNF.js} +557 -70
- package/dist/cli/desktop-LJVXWXNF.js.map +1 -0
- package/dist/cli/diff-2JHMQAHI.js +165 -0
- package/dist/cli/{diff-I4PYI43W.js.map → diff-2JHMQAHI.js.map} +1 -1
- package/dist/cli/{doctor-Y2E4MY2F.js → doctor-GI5LOEZL.js} +11 -11
- package/dist/cli/{events-47HOT7ZA.js → events-LBKMLFM4.js} +5 -5
- package/dist/cli/index.js +40 -39
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/{mcp-76DK63ZB.js → mcp-DKEJK5ND.js} +3 -3
- package/dist/cli/{mcp-browse-SDNUGO74.js → mcp-browse-V7KWDY32.js} +15 -15
- package/dist/cli/{mcp-browse-SDNUGO74.js.map → mcp-browse-V7KWDY32.js.map} +1 -1
- package/dist/cli/{mcp-inspect-BL5DEO5M.js → mcp-inspect-MTABNHVM.js} +5 -5
- package/dist/cli/{prompt-JLATI3P7.js → prompt-ATI7DKHF.js} +5 -5
- package/dist/cli/{prune-sessions-WHZDFUKD.js → prune-sessions-YQQSZTZS.js} +4 -4
- package/dist/cli/{replay-MHXS7C7Z.js → replay-ZJQ4I4CJ.js} +30 -30
- package/dist/cli/{replay-MHXS7C7Z.js.map → replay-ZJQ4I4CJ.js.map} +1 -1
- package/dist/cli/{run-SXNCPRJE.js → run-HFPRNWJY.js} +22 -22
- package/dist/cli/{server-GEHOE6CO.js → server-UHKO2VVM.js} +23 -23
- package/dist/cli/{sessions-EPBFYISL.js → sessions-IQEWWUH3.js} +16 -16
- package/dist/cli/setup-5BYKCL62.js +502 -0
- package/dist/cli/setup-5BYKCL62.js.map +1 -0
- package/dist/cli/{stats-4WB4XHBP.js → stats-OFCGOQMZ.js} +6 -6
- package/dist/cli/{version-4SP3DLLH.js → version-EODUFAAI.js} +16 -16
- package/dist/index.d.ts +12 -1
- package/dist/index.js +613 -78
- package/dist/index.js.map +1 -1
- package/package.json +21 -3
- package/dist/cli/chat-NJ2Q5KHG.js +0 -50
- package/dist/cli/chunk-2HVTBFCI.js.map +0 -1
- package/dist/cli/chunk-5BBC6YMV.js +0 -832
- package/dist/cli/chunk-5BBC6YMV.js.map +0 -1
- package/dist/cli/chunk-6XWXIVQ3.js.map +0 -1
- package/dist/cli/chunk-7YPMTE3U.js.map +0 -1
- package/dist/cli/chunk-A5PBEIJ7.js.map +0 -1
- package/dist/cli/chunk-C2MRSJTV.js.map +0 -1
- package/dist/cli/chunk-DVD67FXQ.js.map +0 -1
- package/dist/cli/chunk-EAMXOWUW.js +0 -54
- package/dist/cli/chunk-FEZK652I.js.map +0 -1
- package/dist/cli/chunk-R6KIHEF3.js.map +0 -1
- package/dist/cli/chunk-SXSAWOB7.js.map +0 -1
- package/dist/cli/chunk-UO6E7FN3.js.map +0 -1
- package/dist/cli/chunk-UPW544V3.js +0 -96
- package/dist/cli/chunk-UPW544V3.js.map +0 -1
- package/dist/cli/desktop-H3ZHIMDA.js.map +0 -1
- package/dist/cli/devtools-HW3WDT3Q.js +0 -91
- package/dist/cli/devtools-HW3WDT3Q.js.map +0 -1
- package/dist/cli/diff-I4PYI43W.js +0 -165
- package/dist/cli/setup-IW2XR5XI.js +0 -593
- package/dist/cli/setup-IW2XR5XI.js.map +0 -1
- /package/dist/cli/{acp-XEUHGG7X.js.map → acp-NEUYWGUU.js.map} +0 -0
- /package/dist/cli/{chat-NJ2Q5KHG.js.map → chat-QA6IVFJD.js.map} +0 -0
- /package/dist/cli/{chunk-HGK57NBN.js.map → chunk-2W4F3RIZ.js.map} +0 -0
- /package/dist/cli/{chunk-UMZ6KHTS.js.map → chunk-5YLEKX2V.js.map} +0 -0
- /package/dist/cli/{chunk-BA5R6BAE.js.map → chunk-6QBUXA73.js.map} +0 -0
- /package/dist/cli/{chunk-3YRTIWFX.js.map → chunk-ARBGTNHM.js.map} +0 -0
- /package/dist/cli/{chunk-3BTK5BHI.js.map → chunk-B4MOGWHW.js.map} +0 -0
- /package/dist/cli/{chunk-5AIDYVH2.js.map → chunk-CFJY64UA.js.map} +0 -0
- /package/dist/cli/{chunk-2WUEAI2I.js.map → chunk-CPCUMMSR.js.map} +0 -0
- /package/dist/cli/{chunk-JHWQDJZA.js.map → chunk-CTRM32BP.js.map} +0 -0
- /package/dist/cli/{chunk-544J4PXD.js.map → chunk-D6WRFR6V.js.map} +0 -0
- /package/dist/cli/{chunk-N4SEBLU4.js.map → chunk-DLTE4GBY.js.map} +0 -0
- /package/dist/cli/{chunk-NRROJXXT.js.map → chunk-FY5UERSG.js.map} +0 -0
- /package/dist/cli/{chunk-K4YQFULP.js.map → chunk-HNZ4727T.js.map} +0 -0
- /package/dist/cli/{chunk-36BM7INR.js.map → chunk-MW64SQUE.js.map} +0 -0
- /package/dist/cli/{chunk-Z3MKG7MQ.js.map → chunk-OMNRXZNA.js.map} +0 -0
- /package/dist/cli/{chunk-EWVFGYT6.js.map → chunk-VVPV5HU6.js.map} +0 -0
- /package/dist/cli/{chunk-7YB26OQO.js.map → chunk-WPY7AFS6.js.map} +0 -0
- /package/dist/cli/{chunk-BM6BBFAV.js.map → chunk-XBYHNZ5Z.js.map} +0 -0
- /package/dist/cli/{chunk-WPOKBW5E.js.map → chunk-XNMXVL6C.js.map} +0 -0
- /package/dist/cli/{chunk-SVD4UPRQ.js.map → chunk-XUZHBQSM.js.map} +0 -0
- /package/dist/cli/{chunk-K3QJ3GKI.js.map → chunk-Z663GVUB.js.map} +0 -0
- /package/dist/cli/{commands-E4RZXMF6.js.map → commands-DHETOY7O.js.map} +0 -0
- /package/dist/cli/{commit-KSRQ64IL.js.map → commit-BBUYAKZV.js.map} +0 -0
- /package/dist/cli/{config-QNDONOTU.js.map → config-KV7VV5LG.js.map} +0 -0
- /package/dist/cli/{doctor-Y2E4MY2F.js.map → doctor-GI5LOEZL.js.map} +0 -0
- /package/dist/cli/{events-47HOT7ZA.js.map → events-LBKMLFM4.js.map} +0 -0
- /package/dist/cli/{mcp-76DK63ZB.js.map → mcp-DKEJK5ND.js.map} +0 -0
- /package/dist/cli/{mcp-inspect-BL5DEO5M.js.map → mcp-inspect-MTABNHVM.js.map} +0 -0
- /package/dist/cli/{prompt-JLATI3P7.js.map → prompt-ATI7DKHF.js.map} +0 -0
- /package/dist/cli/{prune-sessions-WHZDFUKD.js.map → prune-sessions-YQQSZTZS.js.map} +0 -0
- /package/dist/cli/{run-SXNCPRJE.js.map → run-HFPRNWJY.js.map} +0 -0
- /package/dist/cli/{server-GEHOE6CO.js.map → server-UHKO2VVM.js.map} +0 -0
- /package/dist/cli/{sessions-EPBFYISL.js.map → sessions-IQEWWUH3.js.map} +0 -0
- /package/dist/cli/{stats-4WB4XHBP.js.map → stats-OFCGOQMZ.js.map} +0 -0
- /package/dist/cli/{version-4SP3DLLH.js.map → version-EODUFAAI.js.map} +0 -0
|
@@ -1,15 +1,11 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import { createRequire as __cr } from 'node:module'; if (typeof globalThis.require === 'undefined') { globalThis.require = __cr(import.meta.url); }
|
|
3
3
|
import {
|
|
4
|
-
formatTokens
|
|
5
|
-
|
|
6
|
-
} from "./chunk-UPW544V3.js";
|
|
4
|
+
formatTokens
|
|
5
|
+
} from "./chunk-77JIQ7SL.js";
|
|
7
6
|
import {
|
|
8
7
|
loadOverlay
|
|
9
8
|
} from "./chunk-JMBMLOBP.js";
|
|
10
|
-
import {
|
|
11
|
-
renderDashboard
|
|
12
|
-
} from "./chunk-K3QJ3GKI.js";
|
|
13
9
|
import {
|
|
14
10
|
MANUAL_UPDATE_COMMANDS,
|
|
15
11
|
planUpdate
|
|
@@ -36,11 +32,11 @@ import {
|
|
|
36
32
|
restoreCheckpoint,
|
|
37
33
|
savePlanState,
|
|
38
34
|
suggestSlashCommands
|
|
39
|
-
} from "./chunk-
|
|
35
|
+
} from "./chunk-B4MOGWHW.js";
|
|
40
36
|
import {
|
|
41
37
|
eventLogPath,
|
|
42
38
|
openEventSink
|
|
43
|
-
} from "./chunk-
|
|
39
|
+
} from "./chunk-XNMXVL6C.js";
|
|
44
40
|
import {
|
|
45
41
|
fetchSmitheryDetail,
|
|
46
42
|
loadMorePages,
|
|
@@ -54,20 +50,20 @@ import {
|
|
|
54
50
|
formatQQModeLabel,
|
|
55
51
|
formatQQSetupPrompt,
|
|
56
52
|
formatQQSetupWaiting
|
|
57
|
-
} from "./chunk-
|
|
53
|
+
} from "./chunk-MVLPXZAA.js";
|
|
58
54
|
import {
|
|
59
55
|
Eventizer,
|
|
60
56
|
autoResolveVerdict,
|
|
61
57
|
registerSkillTools,
|
|
62
58
|
shouldAutoResolveCheckpoint
|
|
63
|
-
} from "./chunk-
|
|
59
|
+
} from "./chunk-XBYHNZ5Z.js";
|
|
64
60
|
import {
|
|
65
61
|
formatMcpLifecycleEvent,
|
|
66
62
|
formatMcpSlowToast
|
|
67
|
-
} from "./chunk-
|
|
63
|
+
} from "./chunk-CFJY64UA.js";
|
|
68
64
|
import {
|
|
69
65
|
buildTransportFromSpec
|
|
70
|
-
} from "./chunk-
|
|
66
|
+
} from "./chunk-XUZHBQSM.js";
|
|
71
67
|
import {
|
|
72
68
|
dumpStartupProfile,
|
|
73
69
|
markPhase,
|
|
@@ -100,15 +96,15 @@ import {
|
|
|
100
96
|
toWholeFileEditBlock,
|
|
101
97
|
walkFilesStream,
|
|
102
98
|
webFetch
|
|
103
|
-
} from "./chunk-
|
|
104
|
-
import {
|
|
105
|
-
McpClient
|
|
106
|
-
} from "./chunk-7YPMTE3U.js";
|
|
99
|
+
} from "./chunk-HNZ4727T.js";
|
|
107
100
|
import {
|
|
108
101
|
openTranscriptFile,
|
|
109
102
|
recordFromLoopEvent,
|
|
110
103
|
writeRecord
|
|
111
|
-
} from "./chunk-
|
|
104
|
+
} from "./chunk-D6WRFR6V.js";
|
|
105
|
+
import {
|
|
106
|
+
McpClient
|
|
107
|
+
} from "./chunk-RCC73DWQ.js";
|
|
112
108
|
import {
|
|
113
109
|
BUILTIN_ALLOWLIST,
|
|
114
110
|
derivePrefix,
|
|
@@ -118,18 +114,7 @@ import {
|
|
|
118
114
|
runCommand,
|
|
119
115
|
stripCompactionMarker,
|
|
120
116
|
toApprovalPrompt
|
|
121
|
-
} from "./chunk-
|
|
122
|
-
import {
|
|
123
|
-
aggregateUsage,
|
|
124
|
-
appendUsage,
|
|
125
|
-
defaultUsageLogPath,
|
|
126
|
-
readUsageLog
|
|
127
|
-
} from "./chunk-3YRTIWFX.js";
|
|
128
|
-
import {
|
|
129
|
-
DEEPSEEK_CONTEXT_TOKENS,
|
|
130
|
-
DEFAULT_CONTEXT_TOKENS,
|
|
131
|
-
pricingFor
|
|
132
|
-
} from "./chunk-BA5R6BAE.js";
|
|
117
|
+
} from "./chunk-5YLEKX2V.js";
|
|
133
118
|
import {
|
|
134
119
|
MemoryStore,
|
|
135
120
|
PROJECT_MEMORY_FILE,
|
|
@@ -138,12 +123,12 @@ import {
|
|
|
138
123
|
memoryEnabled,
|
|
139
124
|
readProjectMemory,
|
|
140
125
|
resolveProjectMemoryWritePath
|
|
141
|
-
} from "./chunk-
|
|
126
|
+
} from "./chunk-DLTE4GBY.js";
|
|
142
127
|
import {
|
|
143
128
|
KeystrokeProvider,
|
|
144
129
|
SingleSelect,
|
|
145
130
|
useKeystroke
|
|
146
|
-
} from "./chunk-
|
|
131
|
+
} from "./chunk-CGVW5W7N.js";
|
|
147
132
|
import {
|
|
148
133
|
COLOR,
|
|
149
134
|
GLYPH,
|
|
@@ -151,31 +136,29 @@ import {
|
|
|
151
136
|
ThemeProvider,
|
|
152
137
|
useColor,
|
|
153
138
|
useThemeTokens
|
|
154
|
-
} from "./chunk-
|
|
139
|
+
} from "./chunk-RHQOGG43.js";
|
|
155
140
|
import {
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
141
|
+
An,
|
|
142
|
+
Cv,
|
|
143
|
+
L,
|
|
144
|
+
W,
|
|
145
|
+
Wi,
|
|
146
|
+
Wo,
|
|
147
|
+
bv,
|
|
148
|
+
fc,
|
|
161
149
|
require_react,
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
} from "./chunk-UO6E7FN3.js";
|
|
150
|
+
source_default,
|
|
151
|
+
stringWidth,
|
|
152
|
+
vv,
|
|
153
|
+
wv
|
|
154
|
+
} from "./chunk-3OXD5CBM.js";
|
|
168
155
|
import {
|
|
169
156
|
runDoctorChecks
|
|
170
|
-
} from "./chunk-
|
|
157
|
+
} from "./chunk-HI6THNAZ.js";
|
|
171
158
|
import {
|
|
172
159
|
countTokensBounded,
|
|
173
160
|
warmupTokenizer
|
|
174
161
|
} from "./chunk-BOWSNGQC.js";
|
|
175
|
-
import {
|
|
176
|
-
DeepSeekClient,
|
|
177
|
-
pickPrimaryBalance
|
|
178
|
-
} from "./chunk-C2MRSJTV.js";
|
|
179
162
|
import {
|
|
180
163
|
HOOK_EVENTS,
|
|
181
164
|
formatHookOutcomeMessage,
|
|
@@ -183,7 +166,7 @@ import {
|
|
|
183
166
|
loadHooks,
|
|
184
167
|
projectSettingsPath,
|
|
185
168
|
runHooks
|
|
186
|
-
} from "./chunk-
|
|
169
|
+
} from "./chunk-CPCUMMSR.js";
|
|
187
170
|
import {
|
|
188
171
|
deleteSession,
|
|
189
172
|
detectGitBranch,
|
|
@@ -200,7 +183,7 @@ import {
|
|
|
200
183
|
sessionPath,
|
|
201
184
|
sessionsDir,
|
|
202
185
|
timestampSuffix
|
|
203
|
-
} from "./chunk-
|
|
186
|
+
} from "./chunk-AMSK3ZLB.js";
|
|
204
187
|
import {
|
|
205
188
|
VERSION,
|
|
206
189
|
compareVersions,
|
|
@@ -208,9 +191,27 @@ import {
|
|
|
208
191
|
detectNpmInstallPrefix,
|
|
209
192
|
getLatestVersion
|
|
210
193
|
} from "./chunk-XXC2BYTV.js";
|
|
194
|
+
import {
|
|
195
|
+
DeepSeekClient,
|
|
196
|
+
pickPrimaryBalance
|
|
197
|
+
} from "./chunk-GFJJEW3Z.js";
|
|
211
198
|
import {
|
|
212
199
|
loadDotenv
|
|
213
200
|
} 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";
|
|
214
215
|
import {
|
|
215
216
|
getLanguage,
|
|
216
217
|
getSupportedLanguages,
|
|
@@ -219,10 +220,11 @@ import {
|
|
|
219
220
|
setLanguage,
|
|
220
221
|
t,
|
|
221
222
|
tObj
|
|
222
|
-
} from "./chunk-
|
|
223
|
+
} from "./chunk-CLHMV6OL.js";
|
|
223
224
|
import {
|
|
224
225
|
CARD,
|
|
225
226
|
FG,
|
|
227
|
+
MESSAGE_BG,
|
|
226
228
|
SURFACE,
|
|
227
229
|
TONE,
|
|
228
230
|
TONE_ACTIVE,
|
|
@@ -281,7 +283,7 @@ import {
|
|
|
281
283
|
webSearchEndpoint,
|
|
282
284
|
webSearchEngine,
|
|
283
285
|
writeConfig
|
|
284
|
-
} from "./chunk-
|
|
286
|
+
} from "./chunk-AOYUW3HR.js";
|
|
285
287
|
import {
|
|
286
288
|
__commonJS,
|
|
287
289
|
__require,
|
|
@@ -45769,10 +45771,10 @@ function BootSplash() {
|
|
|
45769
45771
|
const waveOffset = frame % 4;
|
|
45770
45772
|
const wave = WAVE_SOURCE.slice(waveOffset, waveOffset + WAVE_WIDTH);
|
|
45771
45773
|
const dots = ".".repeat(frame % 4 + 1);
|
|
45772
|
-
return /* @__PURE__ */ import_react2.default.createElement(
|
|
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) => (
|
|
45773
45775
|
// biome-ignore lint/suspicious/noArrayIndexKey: fixed-length spout column, position is the identity
|
|
45774
|
-
/* @__PURE__ */ import_react2.default.createElement(
|
|
45775
|
-
)), WHALE_LINES.map((line) => /* @__PURE__ */ import_react2.default.createElement(
|
|
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}`)));
|
|
45776
45778
|
}
|
|
45777
45779
|
|
|
45778
45780
|
// src/cli/ui/CheckpointPicker.tsx
|
|
@@ -45824,7 +45826,7 @@ function CheckpointPicker({
|
|
|
45824
45826
|
pickerPorts
|
|
45825
45827
|
}) {
|
|
45826
45828
|
const [focus, setFocus] = (0, import_react4.useState)(0);
|
|
45827
|
-
const { stdout } =
|
|
45829
|
+
const { stdout } = bv();
|
|
45828
45830
|
const rows = stdout?.rows ?? 40;
|
|
45829
45831
|
const visibleCount = Math.max(3, rows - PAGE_MARGIN);
|
|
45830
45832
|
const snapshot = (0, import_react4.useMemo)(
|
|
@@ -45885,7 +45887,7 @@ function CheckpointPicker({
|
|
|
45885
45887
|
const end = Math.min(checkpoints.length, start + visibleCount);
|
|
45886
45888
|
const shown = checkpoints.slice(start, end);
|
|
45887
45889
|
const hiddenBelow = checkpoints.length - end;
|
|
45888
|
-
return /* @__PURE__ */ import_react4.default.createElement(
|
|
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"))));
|
|
45889
45891
|
}
|
|
45890
45892
|
function CheckpointRow({
|
|
45891
45893
|
info,
|
|
@@ -45894,8 +45896,8 @@ function CheckpointRow({
|
|
|
45894
45896
|
const tag2 = info.source === "manual" ? "" : ` (${info.source})`;
|
|
45895
45897
|
const sizeKb = (info.bytes / 1024).toFixed(1);
|
|
45896
45898
|
const time = fmtAgo(info.createdAt);
|
|
45897
|
-
return /* @__PURE__ */ import_react4.default.createElement(
|
|
45898
|
-
|
|
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,
|
|
45899
45901
|
{
|
|
45900
45902
|
color: FG.faint
|
|
45901
45903
|
},
|
|
@@ -45908,8 +45910,6 @@ var import_react6 = __toESM(require_react(), 1);
|
|
|
45908
45910
|
|
|
45909
45911
|
// src/cli/ui/cards/ApprovalCard.tsx
|
|
45910
45912
|
var import_react5 = __toESM(require_react(), 1);
|
|
45911
|
-
var SEPARATOR_PAD = 6;
|
|
45912
|
-
var MIN_SEPARATOR = 20;
|
|
45913
45913
|
var TONE_PALETTE = {
|
|
45914
45914
|
warn: { color: CARD.warn.color, glyph: "\u26A0" },
|
|
45915
45915
|
error: { color: CARD.error.color, glyph: "\u2717" },
|
|
@@ -45933,10 +45933,20 @@ function ApprovalCard({
|
|
|
45933
45933
|
const effectiveFooter = footerHint ?? t("cardLabels.defaultFooter");
|
|
45934
45934
|
const palette = TONE_PALETTE[tone];
|
|
45935
45935
|
const headerGlyph = glyph ?? palette.glyph;
|
|
45936
|
-
|
|
45937
|
-
|
|
45938
|
-
|
|
45939
|
-
|
|
45936
|
+
return /* @__PURE__ */ import_react5.default.createElement(W, { flexDirection: "column", marginY: 1, flexShrink: 0 }, /* @__PURE__ */ import_react5.default.createElement(
|
|
45937
|
+
W,
|
|
45938
|
+
{
|
|
45939
|
+
flexDirection: "column",
|
|
45940
|
+
borderStyle: "round",
|
|
45941
|
+
borderLeft: false,
|
|
45942
|
+
borderRight: false,
|
|
45943
|
+
borderColor: palette.color,
|
|
45944
|
+
paddingX: 1,
|
|
45945
|
+
flexShrink: 0
|
|
45946
|
+
},
|
|
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)));
|
|
45940
45950
|
}
|
|
45941
45951
|
|
|
45942
45952
|
// src/cli/ui/ChoiceConfirm.tsx
|
|
@@ -46033,14 +46043,14 @@ function AtMentionSuggestions({
|
|
|
46033
46043
|
const shown = entries.slice(windowStart, windowStart + ROW_WINDOW);
|
|
46034
46044
|
const hiddenAbove = windowStart;
|
|
46035
46045
|
const hiddenBelow = total - windowStart - shown.length;
|
|
46036
|
-
return /* @__PURE__ */ import_react8.default.createElement(
|
|
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(
|
|
46037
46047
|
EntryRow,
|
|
46038
46048
|
{
|
|
46039
46049
|
key: `${entry.insertPath}:${entry.isDir ? "d" : "f"}`,
|
|
46040
46050
|
entry,
|
|
46041
46051
|
isSelected: windowStart + i === selectedIndex
|
|
46042
46052
|
}
|
|
46043
|
-
)), hiddenBelow > 0 ? /* @__PURE__ */ import_react8.default.createElement(
|
|
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) }));
|
|
46044
46054
|
}
|
|
46045
46055
|
function HeaderRow({
|
|
46046
46056
|
state: state2,
|
|
@@ -46048,35 +46058,35 @@ function HeaderRow({
|
|
|
46048
46058
|
}) {
|
|
46049
46059
|
const color = useColor();
|
|
46050
46060
|
const total = state2.entries.length;
|
|
46051
|
-
const lead = /* @__PURE__ */ import_react8.default.createElement(
|
|
46061
|
+
const lead = /* @__PURE__ */ import_react8.default.createElement(L, { color: color.primary, bold: true }, "@ ");
|
|
46052
46062
|
if (state2.kind === "browse") {
|
|
46053
46063
|
const where = state2.baseDir === "" ? "/" : `${state2.baseDir}/`;
|
|
46054
46064
|
const counter = state2.loading ? t("atMentions.loading") : t(total === 1 ? "atMentions.entrySingular" : "atMentions.entryPlural", { count: total });
|
|
46055
|
-
return /* @__PURE__ */ import_react8.default.createElement(
|
|
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);
|
|
46056
46066
|
}
|
|
46057
46067
|
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 })}`;
|
|
46058
|
-
return /* @__PURE__ */ import_react8.default.createElement(
|
|
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);
|
|
46059
46069
|
}
|
|
46060
46070
|
function EmptyRow({ state: state2, color }) {
|
|
46061
46071
|
if (state2.kind === "browse") {
|
|
46062
46072
|
if (state2.loading) return null;
|
|
46063
|
-
return /* @__PURE__ */ import_react8.default.createElement(
|
|
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")));
|
|
46064
46074
|
}
|
|
46065
46075
|
if (state2.searching) {
|
|
46066
|
-
return /* @__PURE__ */ import_react8.default.createElement(
|
|
46076
|
+
return /* @__PURE__ */ import_react8.default.createElement(W, null, /* @__PURE__ */ import_react8.default.createElement(L, { dimColor: true }, t("atMentions.scanning")));
|
|
46067
46077
|
}
|
|
46068
|
-
return /* @__PURE__ */ import_react8.default.createElement(
|
|
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 })));
|
|
46069
46079
|
}
|
|
46070
46080
|
function EntryRow({ entry, isSelected }) {
|
|
46071
46081
|
const color = useColor();
|
|
46072
46082
|
const cursor = isSelected ? `${GLYPH.cur} ` : " ";
|
|
46073
46083
|
const labelColor = entry.isDir ? color.accent : color.primary;
|
|
46074
46084
|
const labelText = entry.isDir ? `${entry.label}/` : entry.label;
|
|
46075
|
-
return /* @__PURE__ */ import_react8.default.createElement(
|
|
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);
|
|
46076
46086
|
}
|
|
46077
46087
|
function FooterRow({ isBrowse, hasFolder }) {
|
|
46078
46088
|
const hintKey = isBrowse && hasFolder ? "atMentions.footerBrowse" : "atMentions.footerInsert";
|
|
46079
|
-
return /* @__PURE__ */ import_react8.default.createElement(
|
|
46089
|
+
return /* @__PURE__ */ import_react8.default.createElement(W, { marginTop: 0 }, /* @__PURE__ */ import_react8.default.createElement(L, { dimColor: true }, ` ${t(hintKey)}`));
|
|
46080
46090
|
}
|
|
46081
46091
|
|
|
46082
46092
|
// src/cli/ui/PromptInput.tsx
|
|
@@ -46518,13 +46528,17 @@ function textToSegments(line, pastes) {
|
|
|
46518
46528
|
// src/cli/ui/PromptInput.tsx
|
|
46519
46529
|
var INLINE_PASTE_THRESHOLD = 200;
|
|
46520
46530
|
var IME_GUARD_MS = 50;
|
|
46521
|
-
var SYSTEM_CURSOR_SYNC_IDLE_MS = 120;
|
|
46522
46531
|
function hasNonAscii(s) {
|
|
46523
46532
|
for (let i = 0; i < s.length; i++) {
|
|
46524
46533
|
if (s.charCodeAt(i) > 127) return true;
|
|
46525
46534
|
}
|
|
46526
46535
|
return false;
|
|
46527
46536
|
}
|
|
46537
|
+
function isPotentialImeCommitInput(s) {
|
|
46538
|
+
if (s.length === 0) return false;
|
|
46539
|
+
if (hasNonAscii(s)) return true;
|
|
46540
|
+
return s.length > 1;
|
|
46541
|
+
}
|
|
46528
46542
|
function shouldInlinePaste(content) {
|
|
46529
46543
|
return !content.includes("\n") && content.length <= INLINE_PASTE_THRESHOLD;
|
|
46530
46544
|
}
|
|
@@ -46551,8 +46565,7 @@ function PromptInput({
|
|
|
46551
46565
|
}, [cursor, onCursorChange]);
|
|
46552
46566
|
const pastesRef = (0, import_react9.useRef)(/* @__PURE__ */ new Map());
|
|
46553
46567
|
const nextPasteIdRef = (0, import_react9.useRef)(0);
|
|
46554
|
-
const
|
|
46555
|
-
const lastNonAsciiInputAtRef = (0, import_react9.useRef)(0);
|
|
46568
|
+
const lastImeCommitInputAtRef = (0, import_react9.useRef)(0);
|
|
46556
46569
|
const lastLocalValueRef = (0, import_react9.useRef)(value);
|
|
46557
46570
|
const cursorRef = (0, import_react9.useRef)(cursor);
|
|
46558
46571
|
cursorRef.current = cursor;
|
|
@@ -46586,8 +46599,8 @@ function PromptInput({
|
|
|
46586
46599
|
if (ev.input.length > 0) registerPaste(ev.input);
|
|
46587
46600
|
return;
|
|
46588
46601
|
}
|
|
46589
|
-
if (
|
|
46590
|
-
|
|
46602
|
+
if (isPotentialImeCommitInput(ev.input)) {
|
|
46603
|
+
lastImeCommitInputAtRef.current = Date.now();
|
|
46591
46604
|
}
|
|
46592
46605
|
const key = {
|
|
46593
46606
|
input: ev.input,
|
|
@@ -46622,8 +46635,8 @@ function PromptInput({
|
|
|
46622
46635
|
setCursor(action.cursor);
|
|
46623
46636
|
}
|
|
46624
46637
|
if (action.submit) {
|
|
46625
|
-
if (Date.now() -
|
|
46626
|
-
|
|
46638
|
+
if (Date.now() - lastImeCommitInputAtRef.current < IME_GUARD_MS) {
|
|
46639
|
+
lastImeCommitInputAtRef.current = 0;
|
|
46627
46640
|
return;
|
|
46628
46641
|
}
|
|
46629
46642
|
const raw = action.submitValue ?? lastLocalValueRef.current;
|
|
@@ -46638,7 +46651,7 @@ function PromptInput({
|
|
|
46638
46651
|
if (action.historyHandoff === "next") onHistoryNext?.();
|
|
46639
46652
|
if (action.openExternalEditor) onOpenExternalEditor?.();
|
|
46640
46653
|
}, inputActive);
|
|
46641
|
-
const { stdout } =
|
|
46654
|
+
const { stdout } = bv();
|
|
46642
46655
|
const cols = stdout?.columns ?? 80;
|
|
46643
46656
|
const promptPrefix = "\u203A ";
|
|
46644
46657
|
const continuationIndent = " ";
|
|
@@ -46651,148 +46664,144 @@ function PromptInput({
|
|
|
46651
46664
|
const { line: cursorLine, col: cursorCol } = lineAndColumn(value, cursor);
|
|
46652
46665
|
const renderItems = collapseLinesForDisplay(lines, cursorLine);
|
|
46653
46666
|
const showHugeBufferHints = lines.length > 20;
|
|
46654
|
-
const
|
|
46655
|
-
const
|
|
46656
|
-
if (
|
|
46657
|
-
|
|
46658
|
-
|
|
46659
|
-
|
|
46660
|
-
|
|
46661
|
-
const rowsInsideBelow = linesBelow + largeHint + 2 + modeRow + frozenHint;
|
|
46662
|
-
const rowsBelow = rowsInsideBelow + rowsAfter;
|
|
46663
|
-
const targetRow = Math.max(1, totalRows - rowsBelow);
|
|
46664
|
-
const cursorLineText = cursorLine >= 0 && cursorLine < lines.length ? lines[cursorLine] : "";
|
|
46665
|
-
const textBeforeCursor = cursorLineText.slice(0, cursorCol);
|
|
46666
|
-
const cursorCells = stringCells(textBeforeCursor, pastesRef.current);
|
|
46667
|
-
const targetCol = 1 + 1 + 2 + cursorCells;
|
|
46668
|
-
return `\x1B[${targetRow};${targetCol}H`;
|
|
46667
|
+
const borderLabel = (() => {
|
|
46668
|
+
const parts = [];
|
|
46669
|
+
if (planMode) parts.push(source_default.hex(TONE.warn)(`[${t("statsPanel.modePlan")}]`));
|
|
46670
|
+
if (isHistoryMode) parts.push(source_default.hex(TONE.accent)("\u2191 history"));
|
|
46671
|
+
if (mode2) parts.push(source_default.hex(TONE.brand)(mode2));
|
|
46672
|
+
if (model2) parts.push(source_default.hex(FG.faint)(model2));
|
|
46673
|
+
return parts.length > 0 ? ` ${parts.join(source_default.hex(FG.faint)(" \xB7 "))} ` : void 0;
|
|
46669
46674
|
})();
|
|
46670
|
-
|
|
46671
|
-
|
|
46672
|
-
|
|
46673
|
-
|
|
46674
|
-
|
|
46675
|
-
|
|
46676
|
-
|
|
46677
|
-
|
|
46678
|
-
|
|
46679
|
-
|
|
46680
|
-
|
|
46681
|
-
|
|
46682
|
-
|
|
46683
|
-
const
|
|
46684
|
-
|
|
46685
|
-
|
|
46686
|
-
|
|
46687
|
-
)
|
|
46688
|
-
|
|
46689
|
-
|
|
46690
|
-
|
|
46691
|
-
|
|
46692
|
-
|
|
46693
|
-
|
|
46694
|
-
|
|
46695
|
-
|
|
46696
|
-
|
|
46697
|
-
|
|
46698
|
-
{
|
|
46699
|
-
key: `ln-${i}-text-0`,
|
|
46700
|
-
line: "",
|
|
46701
|
-
isFirst: true,
|
|
46702
|
-
isCursorLine: isCursorLine && inputActive,
|
|
46703
|
-
cursorCol: isCursorLine ? cursorCol : null,
|
|
46704
|
-
cursorVisible,
|
|
46705
|
-
showPlaceholder: true,
|
|
46706
|
-
placeholderText: effectivePlaceholder,
|
|
46707
|
-
promptPrefix,
|
|
46708
|
-
continuationIndent,
|
|
46709
|
-
visibleCells,
|
|
46710
|
-
accentColor,
|
|
46711
|
-
pastes: pastesRef.current,
|
|
46712
|
-
disabled: disabled === true,
|
|
46713
|
-
steerBusy
|
|
46714
|
-
}
|
|
46715
|
-
)
|
|
46716
|
-
);
|
|
46717
|
-
firstRowEmitted = true;
|
|
46718
|
-
continue;
|
|
46719
|
-
}
|
|
46720
|
-
const segs = splitLineByPastes(line);
|
|
46721
|
-
for (let segIdx = 0; segIdx < segs.length; segIdx++) {
|
|
46722
|
-
const seg = segs[segIdx];
|
|
46723
|
-
const isFirst = !firstRowEmitted;
|
|
46724
|
-
firstRowEmitted = true;
|
|
46725
|
-
if (seg.kind === "paste") {
|
|
46726
|
-
const cursorOnIt = isCursorLine && cursorCol >= seg.startOffset && cursorCol <= seg.startOffset + 1;
|
|
46675
|
+
return /* @__PURE__ */ import_react9.default.createElement(
|
|
46676
|
+
W,
|
|
46677
|
+
{
|
|
46678
|
+
flexDirection: "column",
|
|
46679
|
+
paddingX: 1,
|
|
46680
|
+
borderStyle: "round",
|
|
46681
|
+
borderLeft: false,
|
|
46682
|
+
borderRight: false,
|
|
46683
|
+
borderColor: inputActive ? TONE.brand : FG.faint,
|
|
46684
|
+
borderText: borderLabel ? { content: borderLabel, position: "top", align: "end", offset: 2 } : void 0,
|
|
46685
|
+
width: "100%"
|
|
46686
|
+
},
|
|
46687
|
+
/* @__PURE__ */ import_react9.default.createElement(W, { flexDirection: "column", flexGrow: 1 }, (() => {
|
|
46688
|
+
const rows = [];
|
|
46689
|
+
let firstRowEmitted = false;
|
|
46690
|
+
for (let renderIdx = 0; renderIdx < renderItems.length; renderIdx++) {
|
|
46691
|
+
const item = renderItems[renderIdx];
|
|
46692
|
+
if (item.kind === "skip") {
|
|
46693
|
+
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]`))
|
|
46695
|
+
);
|
|
46696
|
+
continue;
|
|
46697
|
+
}
|
|
46698
|
+
const i = item.originalIndex;
|
|
46699
|
+
const line = item.line;
|
|
46700
|
+
const isCursorLine = i === cursorLine;
|
|
46701
|
+
const showPlaceholder = i === 0 && value.length === 0;
|
|
46702
|
+
if (showPlaceholder) {
|
|
46727
46703
|
rows.push(
|
|
46728
46704
|
/* @__PURE__ */ import_react9.default.createElement(
|
|
46729
|
-
|
|
46705
|
+
PromptLine,
|
|
46706
|
+
{
|
|
46707
|
+
key: `ln-${i}-text-0`,
|
|
46708
|
+
line: "",
|
|
46709
|
+
isFirst: true,
|
|
46710
|
+
isCursorLine: isCursorLine && inputActive,
|
|
46711
|
+
cursorCol: isCursorLine ? cursorCol : null,
|
|
46712
|
+
cursorVisible,
|
|
46713
|
+
showPlaceholder: true,
|
|
46714
|
+
placeholderText: effectivePlaceholder,
|
|
46715
|
+
promptPrefix,
|
|
46716
|
+
continuationIndent,
|
|
46717
|
+
visibleCells,
|
|
46718
|
+
accentColor,
|
|
46719
|
+
pastes: pastesRef.current,
|
|
46720
|
+
disabled: disabled === true,
|
|
46721
|
+
steerBusy
|
|
46722
|
+
}
|
|
46723
|
+
)
|
|
46724
|
+
);
|
|
46725
|
+
firstRowEmitted = true;
|
|
46726
|
+
continue;
|
|
46727
|
+
}
|
|
46728
|
+
const segs = splitLineByPastes(line);
|
|
46729
|
+
for (let segIdx = 0; segIdx < segs.length; segIdx++) {
|
|
46730
|
+
const seg = segs[segIdx];
|
|
46731
|
+
const isFirst = !firstRowEmitted;
|
|
46732
|
+
firstRowEmitted = true;
|
|
46733
|
+
if (seg.kind === "paste") {
|
|
46734
|
+
const cursorOnIt = isCursorLine && cursorCol >= seg.startOffset && cursorCol <= seg.startOffset + 1;
|
|
46735
|
+
rows.push(
|
|
46736
|
+
/* @__PURE__ */ import_react9.default.createElement(
|
|
46737
|
+
PasteChipRow,
|
|
46738
|
+
{
|
|
46739
|
+
key: `ln-${i}-paste-${segIdx}`,
|
|
46740
|
+
entry: pastesRef.current.get(seg.id),
|
|
46741
|
+
pasteId: seg.id,
|
|
46742
|
+
isFirst,
|
|
46743
|
+
active: cursorOnIt && inputActive,
|
|
46744
|
+
visibleCells,
|
|
46745
|
+
accentColor
|
|
46746
|
+
}
|
|
46747
|
+
)
|
|
46748
|
+
);
|
|
46749
|
+
continue;
|
|
46750
|
+
}
|
|
46751
|
+
const segHasCursor = isCursorLine && cursorCol >= seg.startOffset && cursorCol <= seg.startOffset + seg.text.length;
|
|
46752
|
+
rows.push(
|
|
46753
|
+
/* @__PURE__ */ import_react9.default.createElement(
|
|
46754
|
+
PromptLine,
|
|
46730
46755
|
{
|
|
46731
|
-
key: `ln-${i}-
|
|
46732
|
-
|
|
46733
|
-
pasteId: seg.id,
|
|
46756
|
+
key: `ln-${i}-text-${segIdx}`,
|
|
46757
|
+
line: seg.text,
|
|
46734
46758
|
isFirst,
|
|
46735
|
-
|
|
46759
|
+
isCursorLine: segHasCursor && inputActive,
|
|
46760
|
+
cursorCol: segHasCursor ? cursorCol - seg.startOffset : null,
|
|
46761
|
+
cursorVisible,
|
|
46762
|
+
showPlaceholder: false,
|
|
46763
|
+
placeholderText: "",
|
|
46764
|
+
promptPrefix,
|
|
46765
|
+
continuationIndent,
|
|
46736
46766
|
visibleCells,
|
|
46737
|
-
accentColor
|
|
46767
|
+
accentColor,
|
|
46768
|
+
pastes: pastesRef.current,
|
|
46769
|
+
disabled: disabled === true,
|
|
46770
|
+
steerBusy
|
|
46771
|
+
}
|
|
46772
|
+
)
|
|
46773
|
+
);
|
|
46774
|
+
}
|
|
46775
|
+
if (segs.length === 0) {
|
|
46776
|
+
const isFirst = !firstRowEmitted;
|
|
46777
|
+
firstRowEmitted = true;
|
|
46778
|
+
rows.push(
|
|
46779
|
+
/* @__PURE__ */ import_react9.default.createElement(
|
|
46780
|
+
PromptLine,
|
|
46781
|
+
{
|
|
46782
|
+
key: `ln-${i}-empty`,
|
|
46783
|
+
line: "",
|
|
46784
|
+
isFirst,
|
|
46785
|
+
isCursorLine: isCursorLine && inputActive,
|
|
46786
|
+
cursorCol: isCursorLine ? 0 : null,
|
|
46787
|
+
cursorVisible,
|
|
46788
|
+
showPlaceholder: false,
|
|
46789
|
+
placeholderText: "",
|
|
46790
|
+
promptPrefix,
|
|
46791
|
+
continuationIndent,
|
|
46792
|
+
visibleCells,
|
|
46793
|
+
accentColor,
|
|
46794
|
+
pastes: pastesRef.current,
|
|
46795
|
+
disabled: disabled === true,
|
|
46796
|
+
steerBusy
|
|
46738
46797
|
}
|
|
46739
46798
|
)
|
|
46740
46799
|
);
|
|
46741
|
-
continue;
|
|
46742
46800
|
}
|
|
46743
|
-
const segHasCursor = isCursorLine && cursorCol >= seg.startOffset && cursorCol <= seg.startOffset + seg.text.length;
|
|
46744
|
-
rows.push(
|
|
46745
|
-
/* @__PURE__ */ import_react9.default.createElement(
|
|
46746
|
-
PromptLine,
|
|
46747
|
-
{
|
|
46748
|
-
key: `ln-${i}-text-${segIdx}`,
|
|
46749
|
-
line: seg.text,
|
|
46750
|
-
isFirst,
|
|
46751
|
-
isCursorLine: segHasCursor && inputActive,
|
|
46752
|
-
cursorCol: segHasCursor ? cursorCol - seg.startOffset : null,
|
|
46753
|
-
cursorVisible,
|
|
46754
|
-
showPlaceholder: false,
|
|
46755
|
-
placeholderText: "",
|
|
46756
|
-
promptPrefix,
|
|
46757
|
-
continuationIndent,
|
|
46758
|
-
visibleCells,
|
|
46759
|
-
accentColor,
|
|
46760
|
-
pastes: pastesRef.current,
|
|
46761
|
-
disabled: disabled === true,
|
|
46762
|
-
steerBusy
|
|
46763
|
-
}
|
|
46764
|
-
)
|
|
46765
|
-
);
|
|
46766
|
-
}
|
|
46767
|
-
if (segs.length === 0) {
|
|
46768
|
-
const isFirst = !firstRowEmitted;
|
|
46769
|
-
firstRowEmitted = true;
|
|
46770
|
-
rows.push(
|
|
46771
|
-
/* @__PURE__ */ import_react9.default.createElement(
|
|
46772
|
-
PromptLine,
|
|
46773
|
-
{
|
|
46774
|
-
key: `ln-${i}-empty`,
|
|
46775
|
-
line: "",
|
|
46776
|
-
isFirst,
|
|
46777
|
-
isCursorLine: isCursorLine && inputActive,
|
|
46778
|
-
cursorCol: isCursorLine ? 0 : null,
|
|
46779
|
-
cursorVisible,
|
|
46780
|
-
showPlaceholder: false,
|
|
46781
|
-
placeholderText: "",
|
|
46782
|
-
promptPrefix,
|
|
46783
|
-
continuationIndent,
|
|
46784
|
-
visibleCells,
|
|
46785
|
-
accentColor,
|
|
46786
|
-
pastes: pastesRef.current,
|
|
46787
|
-
disabled: disabled === true,
|
|
46788
|
-
steerBusy
|
|
46789
|
-
}
|
|
46790
|
-
)
|
|
46791
|
-
);
|
|
46792
46801
|
}
|
|
46793
|
-
|
|
46794
|
-
|
|
46795
|
-
|
|
46802
|
+
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)
|
|
46804
|
+
);
|
|
46796
46805
|
}
|
|
46797
46806
|
function splitLineByPastes(line) {
|
|
46798
46807
|
const out = [];
|
|
@@ -46829,9 +46838,9 @@ function PasteChipRow({
|
|
|
46829
46838
|
const leadColor = isFirst ? accentColor : FG.faint;
|
|
46830
46839
|
const labelText = formatChipLabel(entry, pasteId, visibleCells - 6);
|
|
46831
46840
|
if (active2) {
|
|
46832
|
-
return /* @__PURE__ */ import_react9.default.createElement(
|
|
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} `));
|
|
46833
46842
|
}
|
|
46834
|
-
return /* @__PURE__ */ import_react9.default.createElement(
|
|
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"));
|
|
46835
46844
|
}
|
|
46836
46845
|
function formatChipLabel(entry, pasteId, budget2) {
|
|
46837
46846
|
if (!entry) return `\u{1F4CB} paste #${pasteId + 1} \xB7 (missing)`;
|
|
@@ -46877,10 +46886,10 @@ function PromptLine({
|
|
|
46877
46886
|
}) {
|
|
46878
46887
|
const promptActive = !disabled || !!steerBusy;
|
|
46879
46888
|
if (showPlaceholder) {
|
|
46880
|
-
return /* @__PURE__ */ import_react9.default.createElement(
|
|
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));
|
|
46881
46890
|
}
|
|
46882
46891
|
const viewport = buildViewport(line, isCursorLine ? cursorCol : null, visibleCells, pastes);
|
|
46883
|
-
return /* @__PURE__ */ import_react9.default.createElement(
|
|
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(
|
|
46884
46893
|
ViewportContent,
|
|
46885
46894
|
{
|
|
46886
46895
|
segments: viewport.segments,
|
|
@@ -46888,7 +46897,7 @@ function PromptLine({
|
|
|
46888
46897
|
accentColor,
|
|
46889
46898
|
cursorVisible
|
|
46890
46899
|
}
|
|
46891
|
-
), viewport.hiddenRight ? /* @__PURE__ */ import_react9.default.createElement(
|
|
46900
|
+
), viewport.hiddenRight ? /* @__PURE__ */ import_react9.default.createElement(L, { color: FG.faint }, "\u203A") : null);
|
|
46892
46901
|
}
|
|
46893
46902
|
function ViewportContent({
|
|
46894
46903
|
segments,
|
|
@@ -46917,7 +46926,7 @@ function ViewportContent({
|
|
|
46917
46926
|
if (seg.kind === "paste") {
|
|
46918
46927
|
out.push(
|
|
46919
46928
|
/* @__PURE__ */ import_react9.default.createElement(
|
|
46920
|
-
|
|
46929
|
+
L,
|
|
46921
46930
|
{
|
|
46922
46931
|
key: `p-${i}-cursor`,
|
|
46923
46932
|
color: FG.body,
|
|
@@ -46934,26 +46943,26 @@ function ViewportContent({
|
|
|
46934
46943
|
const offsetIntoSeg = cursorCell - cells;
|
|
46935
46944
|
const split = splitTextByCells(seg.text, offsetIntoSeg);
|
|
46936
46945
|
if (split.before.length > 0) {
|
|
46937
|
-
out.push(/* @__PURE__ */ import_react9.default.createElement(
|
|
46946
|
+
out.push(/* @__PURE__ */ import_react9.default.createElement(L, { key: `t-${i}-b` }, split.before));
|
|
46938
46947
|
}
|
|
46939
46948
|
if (split.atCursor.length > 0) {
|
|
46940
46949
|
out.push(
|
|
46941
|
-
/* @__PURE__ */ import_react9.default.createElement(
|
|
46950
|
+
/* @__PURE__ */ import_react9.default.createElement(L, { key: `t-${i}-c`, inverse: cursorVisible, color: accentColor }, split.atCursor)
|
|
46942
46951
|
);
|
|
46943
46952
|
} else {
|
|
46944
46953
|
out.push(
|
|
46945
|
-
/* @__PURE__ */ import_react9.default.createElement(
|
|
46954
|
+
/* @__PURE__ */ import_react9.default.createElement(L, { key: `t-${i}-c-eol`, color: accentColor }, cursorVisible ? "\u258C" : " ")
|
|
46946
46955
|
);
|
|
46947
46956
|
}
|
|
46948
46957
|
if (split.after.length > 0) {
|
|
46949
|
-
out.push(/* @__PURE__ */ import_react9.default.createElement(
|
|
46958
|
+
out.push(/* @__PURE__ */ import_react9.default.createElement(L, { key: `t-${i}-a` }, split.after));
|
|
46950
46959
|
}
|
|
46951
46960
|
placed = true;
|
|
46952
46961
|
cells += segCells;
|
|
46953
46962
|
}
|
|
46954
46963
|
if (!placed) {
|
|
46955
46964
|
out.push(
|
|
46956
|
-
/* @__PURE__ */ import_react9.default.createElement(
|
|
46965
|
+
/* @__PURE__ */ import_react9.default.createElement(L, { key: "cursor-eol", color: accentColor }, cursorVisible ? "\u258C" : " ")
|
|
46957
46966
|
);
|
|
46958
46967
|
}
|
|
46959
46968
|
return /* @__PURE__ */ import_react9.default.createElement(import_react9.default.Fragment, null, out);
|
|
@@ -46996,9 +47005,9 @@ function charCellsForText(ch) {
|
|
|
46996
47005
|
}
|
|
46997
47006
|
function renderSegment(seg, key, _inverse) {
|
|
46998
47007
|
if (seg.kind === "text") {
|
|
46999
|
-
return /* @__PURE__ */ import_react9.default.createElement(
|
|
47008
|
+
return /* @__PURE__ */ import_react9.default.createElement(L, { key: `s-${key}`, color: FG.body }, seg.text);
|
|
47000
47009
|
}
|
|
47001
|
-
return /* @__PURE__ */ import_react9.default.createElement(
|
|
47010
|
+
return /* @__PURE__ */ import_react9.default.createElement(L, { key: `s-${key}`, backgroundColor: SURFACE.bgElev, color: FG.body }, seg.label);
|
|
47002
47011
|
}
|
|
47003
47012
|
var COLLAPSE_THRESHOLD = 20;
|
|
47004
47013
|
var COLLAPSE_HEAD_LINES = 3;
|
|
@@ -47074,7 +47083,7 @@ var SHORTCUT_GROUPS = [
|
|
|
47074
47083
|
];
|
|
47075
47084
|
function ShortcutsHelpModal() {
|
|
47076
47085
|
return /* @__PURE__ */ import_react10.default.createElement(
|
|
47077
|
-
|
|
47086
|
+
W,
|
|
47078
47087
|
{
|
|
47079
47088
|
flexDirection: "column",
|
|
47080
47089
|
borderStyle: "round",
|
|
@@ -47083,16 +47092,16 @@ function ShortcutsHelpModal() {
|
|
|
47083
47092
|
paddingY: 0,
|
|
47084
47093
|
backgroundColor: SURFACE.bg
|
|
47085
47094
|
},
|
|
47086
|
-
/* @__PURE__ */ import_react10.default.createElement(
|
|
47095
|
+
/* @__PURE__ */ import_react10.default.createElement(W, { justifyContent: "center" }, /* @__PURE__ */ import_react10.default.createElement(L, { bold: true, color: "#649ed2" }, ` ${t("shortcutsHelp.title")} `)),
|
|
47087
47096
|
SHORTCUT_GROUPS.map((group, groupIdx) => /* @__PURE__ */ import_react10.default.createElement(
|
|
47088
|
-
|
|
47097
|
+
W,
|
|
47089
47098
|
{
|
|
47090
47099
|
key: group.titleKey,
|
|
47091
47100
|
flexDirection: "column",
|
|
47092
47101
|
marginBottom: groupIdx < SHORTCUT_GROUPS.length - 1 ? 0 : 0
|
|
47093
47102
|
},
|
|
47094
|
-
/* @__PURE__ */ import_react10.default.createElement(
|
|
47095
|
-
group.items.map((item) => /* @__PURE__ */ import_react10.default.createElement(
|
|
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)}`)))
|
|
47096
47105
|
))
|
|
47097
47106
|
);
|
|
47098
47107
|
}
|
|
@@ -47108,13 +47117,23 @@ function SlashArgPicker({
|
|
|
47108
47117
|
pathCandidates
|
|
47109
47118
|
}) {
|
|
47110
47119
|
const color = useColor();
|
|
47111
|
-
const
|
|
47120
|
+
const headerArgsHint = (() => {
|
|
47121
|
+
const argsKey = `slash.${spec.cmd}.argsHint`;
|
|
47122
|
+
const translatedArgs = t(argsKey);
|
|
47123
|
+
return translatedArgs === argsKey ? spec.argsHint ?? "" : translatedArgs;
|
|
47124
|
+
})();
|
|
47125
|
+
const headerSummary = (() => {
|
|
47126
|
+
const descKey = `slash.${spec.cmd}.description`;
|
|
47127
|
+
const translated = t(descKey);
|
|
47128
|
+
return translated === descKey ? spec.summary : translated;
|
|
47129
|
+
})();
|
|
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}`));
|
|
47112
47131
|
if (kind === "hint") {
|
|
47113
|
-
return /* @__PURE__ */ import_react11.default.createElement(
|
|
47132
|
+
return /* @__PURE__ */ import_react11.default.createElement(W, { paddingX: 1, marginTop: 1 }, headerRow);
|
|
47114
47133
|
}
|
|
47115
47134
|
if (matches === null) return null;
|
|
47116
47135
|
if (matches.length === 0) {
|
|
47117
|
-
return /* @__PURE__ */ import_react11.default.createElement(
|
|
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"))));
|
|
47118
47137
|
}
|
|
47119
47138
|
const MAX = 8;
|
|
47120
47139
|
const total = matches.length;
|
|
@@ -47122,11 +47141,11 @@ function SlashArgPicker({
|
|
|
47122
47141
|
const shown = matches.slice(windowStart, windowStart + MAX);
|
|
47123
47142
|
const hiddenAbove = windowStart;
|
|
47124
47143
|
const hiddenBelow = total - windowStart - shown.length;
|
|
47125
|
-
return /* @__PURE__ */ import_react11.default.createElement(
|
|
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) => {
|
|
47126
47145
|
const idx = windowStart + i;
|
|
47127
47146
|
const isDir = pathCandidates?.[idx]?.isDir ?? false;
|
|
47128
47147
|
return /* @__PURE__ */ import_react11.default.createElement(ArgRow, { key: value, value, isSelected: idx === selectedIndex, isDir });
|
|
47129
|
-
}), hiddenBelow > 0 ? /* @__PURE__ */ import_react11.default.createElement(
|
|
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"))));
|
|
47130
47149
|
}
|
|
47131
47150
|
function ArgRow({
|
|
47132
47151
|
value,
|
|
@@ -47134,7 +47153,7 @@ function ArgRow({
|
|
|
47134
47153
|
isDir
|
|
47135
47154
|
}) {
|
|
47136
47155
|
const color = useColor();
|
|
47137
|
-
return /* @__PURE__ */ import_react11.default.createElement(
|
|
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);
|
|
47138
47157
|
}
|
|
47139
47158
|
|
|
47140
47159
|
// src/cli/ui/SlashSuggestions.tsx
|
|
@@ -47154,7 +47173,7 @@ function SlashSuggestions({
|
|
|
47154
47173
|
advancedHidden
|
|
47155
47174
|
}) {
|
|
47156
47175
|
const color = useColor();
|
|
47157
|
-
const { stdout } =
|
|
47176
|
+
const { stdout } = bv();
|
|
47158
47177
|
const cols = stdout?.columns ?? 80;
|
|
47159
47178
|
const [rememberedWindowStart, setRememberedWindowStart] = import_react12.default.useState(0);
|
|
47160
47179
|
const maxRows = groupMode ? GROUP_MODE_MAX_ROWS : SEARCH_MODE_MAX_ROWS;
|
|
@@ -47171,17 +47190,17 @@ function SlashSuggestions({
|
|
|
47171
47190
|
}, [windowStart]);
|
|
47172
47191
|
if (matches === null) return null;
|
|
47173
47192
|
if (matches.length === 0) {
|
|
47174
|
-
return /* @__PURE__ */ import_react12.default.createElement(
|
|
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")));
|
|
47175
47194
|
}
|
|
47176
47195
|
const total = matches.length;
|
|
47177
47196
|
const items = buildVisibleItems(matches, windowStart, maxRows, groupMode);
|
|
47178
47197
|
const shownCommands = items.filter((item) => item.kind === "command");
|
|
47179
47198
|
const hiddenAbove = windowStart;
|
|
47180
47199
|
const hiddenBelow = total - windowStart - shownCommands.length;
|
|
47181
|
-
return /* @__PURE__ */ import_react12.default.createElement(
|
|
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(
|
|
47182
47201
|
total === 1 ? "slashSuggestions.commandCount" : "slashSuggestions.commandCountPlural",
|
|
47183
47202
|
{ count: total }
|
|
47184
|
-
)), hiddenAbove > 0 ? /* @__PURE__ */ import_react12.default.createElement(
|
|
47203
|
+
)), hiddenAbove > 0 ? /* @__PURE__ */ import_react12.default.createElement(L, { dimColor: true }, t("slashSuggestions.aboveLabel", { count: hiddenAbove })) : null), items.map((item) => {
|
|
47185
47204
|
if (item.kind === "group") {
|
|
47186
47205
|
return /* @__PURE__ */ import_react12.default.createElement(GroupHeader, { key: `group:${item.group}:${item.beforeIndex}`, group: item.group });
|
|
47187
47206
|
}
|
|
@@ -47194,7 +47213,7 @@ function SlashSuggestions({
|
|
|
47194
47213
|
columns: cols
|
|
47195
47214
|
}
|
|
47196
47215
|
);
|
|
47197
|
-
}), hiddenBelow > 0 ? /* @__PURE__ */ import_react12.default.createElement(
|
|
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"))));
|
|
47198
47217
|
}
|
|
47199
47218
|
function computeWindowStart(matches, maxRows, selectedIndex, currentWindowStart, groupMode = false) {
|
|
47200
47219
|
if (matches.length <= 0) return 0;
|
|
@@ -47226,7 +47245,7 @@ function shouldShowGroupHeader(matches, idx) {
|
|
|
47226
47245
|
return idx === 0 || matches[idx]?.group !== matches[idx - 1]?.group;
|
|
47227
47246
|
}
|
|
47228
47247
|
function GroupHeader({ group }) {
|
|
47229
|
-
return /* @__PURE__ */ import_react12.default.createElement(
|
|
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)}`));
|
|
47230
47249
|
}
|
|
47231
47250
|
function SuggestionRow({
|
|
47232
47251
|
spec,
|
|
@@ -47244,7 +47263,7 @@ function SuggestionRow({
|
|
|
47244
47263
|
const summaryBudget = Math.max(8, columns - reservedCells);
|
|
47245
47264
|
const summaryText = truncateCells(`${summary}${aliasHint}`, summaryBudget);
|
|
47246
47265
|
return /* @__PURE__ */ import_react12.default.createElement(
|
|
47247
|
-
|
|
47266
|
+
W,
|
|
47248
47267
|
{
|
|
47249
47268
|
flexDirection: "row",
|
|
47250
47269
|
flexWrap: "nowrap",
|
|
@@ -47253,11 +47272,11 @@ function SuggestionRow({
|
|
|
47253
47272
|
minHeight: 1,
|
|
47254
47273
|
backgroundColor: isSelected ? SURFACE.bgElev : void 0
|
|
47255
47274
|
},
|
|
47256
|
-
/* @__PURE__ */ import_react12.default.createElement(
|
|
47257
|
-
/* @__PURE__ */ import_react12.default.createElement(
|
|
47258
|
-
/* @__PURE__ */ import_react12.default.createElement(
|
|
47259
|
-
/* @__PURE__ */ import_react12.default.createElement(
|
|
47260
|
-
/* @__PURE__ */ import_react12.default.createElement(
|
|
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)
|
|
47261
47280
|
);
|
|
47262
47281
|
}
|
|
47263
47282
|
function padOrTrim(value, cells) {
|
|
@@ -47283,20 +47302,9 @@ var import_react13 = __toESM(require_react(), 1);
|
|
|
47283
47302
|
function isLegacyWindowsConsole(env = process.env, platform2 = process.platform) {
|
|
47284
47303
|
return platform2 === "win32" && !env.WT_SESSION && !env.TERM_PROGRAM;
|
|
47285
47304
|
}
|
|
47286
|
-
function prefersReducedTerminalPaint(env = process.env, platform2 = process.platform) {
|
|
47287
|
-
return isLegacyWindowsConsole(env, platform2) || Boolean(env.WT_SESSION) || Boolean(env.WSL_DISTRO_NAME) || Boolean(env.WSL_INTEROP);
|
|
47288
|
-
}
|
|
47289
|
-
function terminalFlushIntervalMs(env = process.env, platform2 = process.platform) {
|
|
47290
|
-
const fallback = prefersReducedTerminalPaint(env, platform2) ? 150 : 50;
|
|
47291
|
-
const raw = env.REASONIX_FLUSH_MS;
|
|
47292
|
-
if (!raw) return fallback;
|
|
47293
|
-
const parsed = Number(raw);
|
|
47294
|
-
if (!Number.isFinite(parsed) || parsed < 16 || parsed > 1e3) return fallback;
|
|
47295
|
-
return Math.round(parsed);
|
|
47296
|
-
}
|
|
47297
47305
|
|
|
47298
47306
|
// src/cli/ui/ticker.tsx
|
|
47299
|
-
var FAST_TICK_MS = isLegacyWindowsConsole() ?
|
|
47307
|
+
var FAST_TICK_MS = isLegacyWindowsConsole() ? 120 : 60;
|
|
47300
47308
|
var SLOW_TICK_MS = 1e3;
|
|
47301
47309
|
var TickerActiveContext = (0, import_react13.createContext)(true);
|
|
47302
47310
|
function TickerProvider({ children, disabled }) {
|
|
@@ -47307,16 +47315,13 @@ function useTickerActive() {
|
|
|
47307
47315
|
}
|
|
47308
47316
|
function useTick() {
|
|
47309
47317
|
const isActive = useTickerActive();
|
|
47310
|
-
|
|
47318
|
+
const [, time] = Wi(isActive ? FAST_TICK_MS : null);
|
|
47319
|
+
return isActive ? Math.floor(time / FAST_TICK_MS) : 0;
|
|
47311
47320
|
}
|
|
47312
47321
|
function useSlowTick() {
|
|
47313
47322
|
const isActive = useTickerActive();
|
|
47314
|
-
|
|
47315
|
-
|
|
47316
|
-
function useElapsedSeconds() {
|
|
47317
|
-
const [start] = (0, import_react13.useState)(() => Date.now());
|
|
47318
|
-
useSlowTick();
|
|
47319
|
-
return Math.floor((Date.now() - start) / 1e3);
|
|
47323
|
+
const [, time] = Wi(isActive ? SLOW_TICK_MS : null);
|
|
47324
|
+
return isActive ? Math.floor(time / SLOW_TICK_MS) : 0;
|
|
47320
47325
|
}
|
|
47321
47326
|
|
|
47322
47327
|
// src/cli/ui/primitives/Countdown.tsx
|
|
@@ -47327,7 +47332,7 @@ function Countdown({
|
|
|
47327
47332
|
}) {
|
|
47328
47333
|
useSlowTick();
|
|
47329
47334
|
const remainingSec = Math.max(0, Math.ceil((endsAt - Date.now()) / 1e3));
|
|
47330
|
-
return /* @__PURE__ */ import_react14.default.createElement(
|
|
47335
|
+
return /* @__PURE__ */ import_react14.default.createElement(L, { bold: true, color, backgroundColor }, String(remainingSec));
|
|
47331
47336
|
}
|
|
47332
47337
|
|
|
47333
47338
|
// src/cli/ui/state/provider.tsx
|
|
@@ -48005,23 +48010,23 @@ var DEFAULT_STATUS_BAR_CONFIG = {
|
|
|
48005
48010
|
};
|
|
48006
48011
|
var BG = SURFACE.bgElev;
|
|
48007
48012
|
function Pill({ children }) {
|
|
48008
|
-
return /* @__PURE__ */ import_react16.default.createElement(
|
|
48013
|
+
return /* @__PURE__ */ import_react16.default.createElement(W, { flexDirection: "row", flexShrink: 0 }, children);
|
|
48009
48014
|
}
|
|
48010
48015
|
function Gap() {
|
|
48011
|
-
return /* @__PURE__ */ import_react16.default.createElement(
|
|
48016
|
+
return /* @__PURE__ */ import_react16.default.createElement(L, null, " ");
|
|
48012
48017
|
}
|
|
48013
48018
|
function StatusRow({
|
|
48014
48019
|
statusBar = DEFAULT_STATUS_BAR_CONFIG
|
|
48015
48020
|
}) {
|
|
48016
48021
|
const status2 = useAgentState((s) => s.status);
|
|
48017
48022
|
const session = useAgentState((s) => s.session);
|
|
48018
|
-
const { stdout } =
|
|
48023
|
+
const { stdout } = bv();
|
|
48019
48024
|
const cols = stdout?.columns ?? 80;
|
|
48020
48025
|
const hasTurn = status2.cost > 0;
|
|
48021
48026
|
const hasSession = status2.sessionCost > 0;
|
|
48022
48027
|
const hasBalance = typeof status2.balance === "number";
|
|
48023
48028
|
const showWallet = cols >= WALLET_MIN_COLS && (hasSession && statusBar.showSessionCost || hasBalance && statusBar.showBalance);
|
|
48024
|
-
return /* @__PURE__ */ import_react16.default.createElement(
|
|
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(
|
|
48025
48030
|
CtxUsagePill,
|
|
48026
48031
|
{
|
|
48027
48032
|
tokens: status2.promptTokens,
|
|
@@ -48037,7 +48042,7 @@ function StatusRow({
|
|
|
48037
48042
|
showSessionCost: statusBar.showSessionCost,
|
|
48038
48043
|
showBalance: statusBar.showBalance
|
|
48039
48044
|
}
|
|
48040
|
-
)))), /* @__PURE__ */ import_react16.default.createElement(
|
|
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"))))));
|
|
48041
48046
|
}
|
|
48042
48047
|
function CtxUsagePill({
|
|
48043
48048
|
tokens,
|
|
@@ -48050,13 +48055,13 @@ function CtxUsagePill({
|
|
|
48050
48055
|
const showTokens = cols >= CTX_TOKENS_MIN_COLS;
|
|
48051
48056
|
const showBar = cols >= CTX_BAR_MIN_COLS;
|
|
48052
48057
|
const filled = Math.round(CTX_BAR_CELLS * ratio);
|
|
48053
|
-
return /* @__PURE__ */ import_react16.default.createElement(import_react16.default.Fragment, null, /* @__PURE__ */ import_react16.default.createElement(
|
|
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)}`));
|
|
48054
48059
|
}
|
|
48055
48060
|
function McpLoadingPill({
|
|
48056
48061
|
ready,
|
|
48057
48062
|
total
|
|
48058
48063
|
}) {
|
|
48059
|
-
return /* @__PURE__ */ import_react16.default.createElement(import_react16.default.Fragment, null, /* @__PURE__ */ import_react16.default.createElement(
|
|
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}`));
|
|
48060
48065
|
}
|
|
48061
48066
|
function WalletPill({
|
|
48062
48067
|
sessionCostUsd,
|
|
@@ -48067,7 +48072,7 @@ function WalletPill({
|
|
|
48067
48072
|
}) {
|
|
48068
48073
|
const showSpent = showSessionCost && sessionCostUsd > 0;
|
|
48069
48074
|
const showBalanceLine = showBalanceCfg && typeof balance === "number";
|
|
48070
|
-
return /* @__PURE__ */ import_react16.default.createElement(import_react16.default.Fragment, null, /* @__PURE__ */ import_react16.default.createElement(
|
|
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 })));
|
|
48071
48076
|
}
|
|
48072
48077
|
function ModePill({
|
|
48073
48078
|
mode: mode2,
|
|
@@ -48077,18 +48082,18 @@ function ModePill({
|
|
|
48077
48082
|
const modeLabel = `${t("statusBar.editsLabel")}${mode2}`;
|
|
48078
48083
|
if (network === "online") {
|
|
48079
48084
|
const pill = modeGlyph(mode2);
|
|
48080
|
-
return /* @__PURE__ */ import_react16.default.createElement(import_react16.default.Fragment, null, /* @__PURE__ */ import_react16.default.createElement(
|
|
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}`));
|
|
48081
48086
|
}
|
|
48082
48087
|
const dot = networkDot(network);
|
|
48083
48088
|
if (network === "slow") {
|
|
48084
48089
|
const tail = detail ? ` \xB7 ${detail}` : "";
|
|
48085
|
-
return /* @__PURE__ */ import_react16.default.createElement(import_react16.default.Fragment, null, /* @__PURE__ */ import_react16.default.createElement(
|
|
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}`));
|
|
48086
48091
|
}
|
|
48087
48092
|
if (network === "disconnected") {
|
|
48088
48093
|
const tail = detail ? ` \xB7 ${detail}` : "";
|
|
48089
|
-
return /* @__PURE__ */ import_react16.default.createElement(import_react16.default.Fragment, null, /* @__PURE__ */ import_react16.default.createElement(
|
|
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}`));
|
|
48090
48095
|
}
|
|
48091
|
-
return /* @__PURE__ */ import_react16.default.createElement(import_react16.default.Fragment, null, /* @__PURE__ */ import_react16.default.createElement(
|
|
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")}`));
|
|
48092
48097
|
}
|
|
48093
48098
|
function CountdownRow({
|
|
48094
48099
|
mode: mode2,
|
|
@@ -48096,11 +48101,11 @@ function CountdownRow({
|
|
|
48096
48101
|
}) {
|
|
48097
48102
|
const pill = modeGlyph(mode2);
|
|
48098
48103
|
const endsAt = Date.now() + secondsLeft * 1e3;
|
|
48099
|
-
return /* @__PURE__ */ import_react16.default.createElement(import_react16.default.Fragment, null, /* @__PURE__ */ import_react16.default.createElement(
|
|
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")));
|
|
48100
48105
|
}
|
|
48101
48106
|
function RecordingPill({ rec }) {
|
|
48102
48107
|
const sizeMb = (rec.sizeBytes / (1024 * 1024)).toFixed(1);
|
|
48103
|
-
return /* @__PURE__ */ import_react16.default.createElement(import_react16.default.Fragment, null, /* @__PURE__ */ import_react16.default.createElement(
|
|
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")}`));
|
|
48104
48109
|
}
|
|
48105
48110
|
function modeGlyph(mode2) {
|
|
48106
48111
|
switch (mode2) {
|
|
@@ -48221,7 +48226,7 @@ var ComposerArea = import_react17.default.memo(
|
|
|
48221
48226
|
slashArgSelected
|
|
48222
48227
|
}) => {
|
|
48223
48228
|
useRenderTrace("ComposerArea");
|
|
48224
|
-
const inputArea = /* @__PURE__ */ import_react17.default.createElement(
|
|
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(
|
|
48225
48230
|
SlashSuggestions,
|
|
48226
48231
|
{
|
|
48227
48232
|
key: `slash-suggestions:${slashGroupMode ? "group" : "search"}`,
|
|
@@ -48265,13 +48270,9 @@ ComposerArea.displayName = "ComposerArea";
|
|
|
48265
48270
|
function LoopStatusRow({
|
|
48266
48271
|
loop: loop2
|
|
48267
48272
|
}) {
|
|
48268
|
-
|
|
48269
|
-
import_react17.default.useEffect(() => {
|
|
48270
|
-
const id = setInterval(() => setTick((t2) => t2 + 1), 1e3);
|
|
48271
|
-
return () => clearInterval(id);
|
|
48272
|
-
}, []);
|
|
48273
|
+
useSlowTick();
|
|
48273
48274
|
const nextFireMs = Math.max(0, loop2.nextFireAt - Date.now());
|
|
48274
|
-
return /* @__PURE__ */ import_react17.default.createElement(
|
|
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`));
|
|
48275
48276
|
}
|
|
48276
48277
|
|
|
48277
48278
|
// src/cli/ui/EditConfirm.tsx
|
|
@@ -48456,7 +48457,7 @@ function DenyContextInput({
|
|
|
48456
48457
|
setValue((v) => v + ev.input);
|
|
48457
48458
|
}
|
|
48458
48459
|
});
|
|
48459
|
-
return /* @__PURE__ */ import_react18.default.createElement(
|
|
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" }, " ")));
|
|
48460
48461
|
}
|
|
48461
48462
|
|
|
48462
48463
|
// src/cli/ui/SplitDiff.tsx
|
|
@@ -48516,11 +48517,11 @@ function wrapToCells(s, maxCells) {
|
|
|
48516
48517
|
|
|
48517
48518
|
// src/cli/ui/SplitDiff.tsx
|
|
48518
48519
|
function SplitDiff({ rows, totalCols }) {
|
|
48519
|
-
const { stdout } =
|
|
48520
|
+
const { stdout } = bv();
|
|
48520
48521
|
const cols = totalCols ?? stdout?.columns ?? 80;
|
|
48521
48522
|
const innerCols = Math.max(40, cols - 6);
|
|
48522
48523
|
const halfCols = Math.floor((innerCols - 3) / 2);
|
|
48523
|
-
return /* @__PURE__ */ import_react19.default.createElement(
|
|
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" }))));
|
|
48524
48525
|
}
|
|
48525
48526
|
function Cell({
|
|
48526
48527
|
side,
|
|
@@ -48539,22 +48540,22 @@ function Cell({
|
|
|
48539
48540
|
const raw = side.text;
|
|
48540
48541
|
const padded = padToCells(clipToCells(raw, inner), inner);
|
|
48541
48542
|
if (side.kind === "del") {
|
|
48542
|
-
return /* @__PURE__ */ import_react19.default.createElement(
|
|
48543
|
+
return /* @__PURE__ */ import_react19.default.createElement(L, { color: "#fbc8c8", backgroundColor: "#2a1212" }, `${numStr} ${sign} ${padded}`);
|
|
48543
48544
|
}
|
|
48544
48545
|
if (side.kind === "add") {
|
|
48545
|
-
return /* @__PURE__ */ import_react19.default.createElement(
|
|
48546
|
+
return /* @__PURE__ */ import_react19.default.createElement(L, { color: "#bef0c8", backgroundColor: "#0c2718" }, `${numStr} ${sign} ${padded}`);
|
|
48546
48547
|
}
|
|
48547
48548
|
if (side.kind === "pad") {
|
|
48548
|
-
return /* @__PURE__ */ import_react19.default.createElement(
|
|
48549
|
+
return /* @__PURE__ */ import_react19.default.createElement(L, { color: COLOR.info, dimColor: true, italic: !!raw }, `${numStr} ${sign} ${padded}`);
|
|
48549
48550
|
}
|
|
48550
|
-
return /* @__PURE__ */ import_react19.default.createElement(
|
|
48551
|
+
return /* @__PURE__ */ import_react19.default.createElement(L, { dimColor: true }, `${numStr} ${sign} ${padded}`);
|
|
48551
48552
|
}
|
|
48552
48553
|
|
|
48553
48554
|
// src/cli/ui/EditConfirm.tsx
|
|
48554
48555
|
var MODAL_OVERHEAD_ROWS = 18;
|
|
48555
48556
|
var MIN_DIFF_ROWS = 8;
|
|
48556
48557
|
function EditConfirm({ block: block2, onChoose }) {
|
|
48557
|
-
const { stdout } =
|
|
48558
|
+
const { stdout } = bv();
|
|
48558
48559
|
const rows = stdout?.rows ?? 40;
|
|
48559
48560
|
const allocated = Math.max(MODAL_OVERHEAD_ROWS + MIN_DIFF_ROWS, rows - 4);
|
|
48560
48561
|
const budget2 = Math.max(MIN_DIFF_ROWS, allocated - MODAL_OVERHEAD_ROWS);
|
|
@@ -48661,12 +48662,12 @@ function EditConfirm({ block: block2, onChoose }) {
|
|
|
48661
48662
|
metaRight: metaParts.join(" \xB7 "),
|
|
48662
48663
|
footerHint: t("editConfirm.footer")
|
|
48663
48664
|
},
|
|
48664
|
-
hiddenAbove > 0 ? /* @__PURE__ */ import_react20.default.createElement(
|
|
48665
|
+
hiddenAbove > 0 ? /* @__PURE__ */ import_react20.default.createElement(L, { dimColor: true }, t(hiddenAbove === 1 ? "editConfirm.linesAbove" : "editConfirm.linesAbovePlural", {
|
|
48665
48666
|
count: hiddenAbove
|
|
48666
48667
|
})) : null,
|
|
48667
48668
|
/* @__PURE__ */ import_react20.default.createElement(SplitDiff, { rows: visibleRows }),
|
|
48668
|
-
/* @__PURE__ */ import_react20.default.createElement(
|
|
48669
|
-
hiddenBelow > 0 ? /* @__PURE__ */ import_react20.default.createElement(
|
|
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", {
|
|
48670
48671
|
count: hiddenBelow
|
|
48671
48672
|
})) : null
|
|
48672
48673
|
);
|
|
@@ -48681,7 +48682,7 @@ function EditPicker({
|
|
|
48681
48682
|
onChoose
|
|
48682
48683
|
}) {
|
|
48683
48684
|
const [focus, setFocus] = (0, import_react21.useState)(Math.max(0, entries.length - 1));
|
|
48684
|
-
const { stdout } =
|
|
48685
|
+
const { stdout } = bv();
|
|
48685
48686
|
const rows = stdout?.rows ?? 40;
|
|
48686
48687
|
const visibleCount = Math.max(3, rows - PAGE_MARGIN2);
|
|
48687
48688
|
const maxFocus = Math.max(0, entries.length - 1);
|
|
@@ -48702,14 +48703,14 @@ function EditPicker({
|
|
|
48702
48703
|
}
|
|
48703
48704
|
});
|
|
48704
48705
|
if (entries.length === 0) {
|
|
48705
|
-
return /* @__PURE__ */ import_react21.default.createElement(
|
|
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")));
|
|
48706
48707
|
}
|
|
48707
48708
|
const start = Math.max(
|
|
48708
48709
|
0,
|
|
48709
48710
|
Math.min(focus - Math.floor(visibleCount / 2), entries.length - visibleCount)
|
|
48710
48711
|
);
|
|
48711
48712
|
const shown = entries.slice(start, start + visibleCount);
|
|
48712
|
-
return /* @__PURE__ */ import_react21.default.createElement(
|
|
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) => {
|
|
48713
48714
|
const globalIdx = start + i;
|
|
48714
48715
|
const focused = globalIdx === focus;
|
|
48715
48716
|
return /* @__PURE__ */ import_react21.default.createElement(Row, { key: entry.cardId, entry, focused });
|
|
@@ -48721,7 +48722,7 @@ function Row({ entry, focused }) {
|
|
|
48721
48722
|
const numLabel = `#${entry.userTurnIndex + 1}`;
|
|
48722
48723
|
const bg = focused ? SURFACE.bgElev : void 0;
|
|
48723
48724
|
const fg = focused ? FG.strong : FG.body;
|
|
48724
|
-
return /* @__PURE__ */ import_react21.default.createElement(
|
|
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));
|
|
48725
48726
|
}
|
|
48726
48727
|
function oneLinePreview(text2, cells) {
|
|
48727
48728
|
const firstLine = text2.split(/\n/, 1)[0] ?? "";
|
|
@@ -48738,36 +48739,20 @@ function oneLinePreview(text2, cells) {
|
|
|
48738
48739
|
}
|
|
48739
48740
|
|
|
48740
48741
|
// src/cli/ui/LiveActivityArea.tsx
|
|
48741
|
-
var
|
|
48742
|
+
var import_react30 = __toESM(require_react(), 1);
|
|
48742
48743
|
|
|
48743
48744
|
// src/cli/ui/layout/LiveRows.tsx
|
|
48744
|
-
var
|
|
48745
|
-
|
|
48746
|
-
// src/cli/ui/char-bar.tsx
|
|
48747
|
-
var import_react22 = __toESM(require_react(), 1);
|
|
48748
|
-
function CharBar({
|
|
48749
|
-
pct,
|
|
48750
|
-
width = 24,
|
|
48751
|
-
color = COLOR.primary,
|
|
48752
|
-
emptyColor,
|
|
48753
|
-
showLabel = true,
|
|
48754
|
-
label
|
|
48755
|
-
}) {
|
|
48756
|
-
const total = Math.max(4, width);
|
|
48757
|
-
const clamped = Math.max(0, Math.min(100, Number.isFinite(pct) ? pct : 0));
|
|
48758
|
-
const filled = Math.round(total * clamped / 100);
|
|
48759
|
-
return /* @__PURE__ */ import_react22.default.createElement(Box_default, null, /* @__PURE__ */ import_react22.default.createElement(Text, { color }, GLYPH.block.repeat(filled)), /* @__PURE__ */ import_react22.default.createElement(Text, { color: emptyColor ?? COLOR.info, dimColor: true }, GLYPH.shade1.repeat(total - filled)), showLabel ? /* @__PURE__ */ import_react22.default.createElement(Text, { dimColor: true }, ` ${label ?? `${Math.round(clamped)}%`}`) : null);
|
|
48760
|
-
}
|
|
48745
|
+
var import_react26 = __toESM(require_react(), 1);
|
|
48761
48746
|
|
|
48762
48747
|
// src/cli/ui/primitives/Card.tsx
|
|
48763
|
-
var
|
|
48764
|
-
var ActiveCardContext =
|
|
48748
|
+
var import_react22 = __toESM(require_react(), 1);
|
|
48749
|
+
var ActiveCardContext = import_react22.default.createContext(true);
|
|
48765
48750
|
function Card({ children }) {
|
|
48766
|
-
return /* @__PURE__ */
|
|
48751
|
+
return /* @__PURE__ */ import_react22.default.createElement(W, { flexDirection: "column", marginTop: 1, width: "100%" }, children);
|
|
48767
48752
|
}
|
|
48768
48753
|
|
|
48769
48754
|
// src/cli/ui/primitives/CardHeader.tsx
|
|
48770
|
-
var
|
|
48755
|
+
var import_react23 = __toESM(require_react(), 1);
|
|
48771
48756
|
function CardHeader({
|
|
48772
48757
|
glyph,
|
|
48773
48758
|
tone,
|
|
@@ -48776,36 +48761,24 @@ function CardHeader({
|
|
|
48776
48761
|
meta,
|
|
48777
48762
|
right
|
|
48778
48763
|
}) {
|
|
48779
|
-
const active2 = (0,
|
|
48764
|
+
const active2 = (0, import_react23.useContext)(ActiveCardContext);
|
|
48780
48765
|
const visibleMeta = active2 ? meta : meta?.filter((item) => typeof item !== "string");
|
|
48781
|
-
return /* @__PURE__ */
|
|
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) => {
|
|
48782
48767
|
const isStr = typeof item === "string";
|
|
48783
48768
|
const text2 = isStr ? item : item.text;
|
|
48784
48769
|
const color = isStr ? FG.faint : item.color;
|
|
48785
48770
|
return (
|
|
48786
48771
|
// biome-ignore lint/suspicious/noArrayIndexKey: meta items are positional
|
|
48787
|
-
/* @__PURE__ */
|
|
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))
|
|
48788
48773
|
);
|
|
48789
48774
|
}), active2 ? right : null);
|
|
48790
48775
|
}
|
|
48791
48776
|
|
|
48792
48777
|
// src/cli/ui/primitives/Pill.tsx
|
|
48793
|
-
var
|
|
48778
|
+
var import_react24 = __toESM(require_react(), 1);
|
|
48794
48779
|
function Pill2({ label, bg, fg, bold = true }) {
|
|
48795
|
-
return /* @__PURE__ */
|
|
48796
|
-
}
|
|
48797
|
-
var PILL_SECTION = {
|
|
48798
|
-
reason: { bg: "#2a1f3d", fg: "#d2a8ff" },
|
|
48799
|
-
output: { bg: "#0d1d2e", fg: "#79c0ff" },
|
|
48800
|
-
tool: { bg: "#0f2230", fg: "#79c0ff" },
|
|
48801
|
-
shell: { bg: "#0f2230", fg: "#79c0ff" },
|
|
48802
|
-
task: { bg: "#0d1d2e", fg: "#79c0ff" },
|
|
48803
|
-
taskDone: { bg: "#102815", fg: "#7ee787" },
|
|
48804
|
-
taskFailed: { bg: "#2c1416", fg: "#ff8b81" },
|
|
48805
|
-
plan: { bg: "#2a1f3d", fg: "#d2a8ff" },
|
|
48806
|
-
user: { bg: "#1a2433", fg: "#79c0ff" },
|
|
48807
|
-
empty: { bg: "#11141a", fg: "#6e7681" }
|
|
48808
|
-
};
|
|
48780
|
+
return /* @__PURE__ */ import_react24.default.createElement(L, { backgroundColor: bg, color: fg, bold }, ` ${label} `);
|
|
48781
|
+
}
|
|
48809
48782
|
var PILL_PATH = { bg: "#11141a", fg: "#8b949e" };
|
|
48810
48783
|
var PILL_MODEL = {
|
|
48811
48784
|
flash: { bg: "#11141a", fg: "#79c0ff" },
|
|
@@ -48822,40 +48795,92 @@ function modelBadgeFor(model2) {
|
|
|
48822
48795
|
return { label: stripped, kind: "unknown" };
|
|
48823
48796
|
}
|
|
48824
48797
|
|
|
48825
|
-
// src/cli/ui/primitives/
|
|
48826
|
-
var
|
|
48827
|
-
var
|
|
48828
|
-
|
|
48829
|
-
|
|
48830
|
-
|
|
48831
|
-
|
|
48832
|
-
|
|
48833
|
-
|
|
48834
|
-
|
|
48835
|
-
|
|
48836
|
-
|
|
48798
|
+
// src/cli/ui/primitives/Pulse.tsx
|
|
48799
|
+
var import_react25 = __toESM(require_react(), 1);
|
|
48800
|
+
var DEFAULT_FRAME_MS = 140;
|
|
48801
|
+
function Pulse({
|
|
48802
|
+
frames,
|
|
48803
|
+
settled,
|
|
48804
|
+
active: active2,
|
|
48805
|
+
color,
|
|
48806
|
+
frameMs = DEFAULT_FRAME_MS
|
|
48807
|
+
}) {
|
|
48808
|
+
const [ref, time] = Wi(active2 ? frameMs : null);
|
|
48809
|
+
const settledGlyph = settled ?? frames[frames.length - 1] ?? "";
|
|
48810
|
+
if (!active2)
|
|
48811
|
+
return /* @__PURE__ */ import_react25.default.createElement(W, { ref }, /* @__PURE__ */ import_react25.default.createElement(L, { color }, settledGlyph));
|
|
48812
|
+
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));
|
|
48814
|
+
}
|
|
48815
|
+
var PULSE_DIAMOND = ["\u25C7", "\u25C8", "\u25C6", "\u25C8"];
|
|
48816
|
+
var PULSE_SQUARE = ["\u25A2", "\u25A3", "\u25A4", "\u25A3"];
|
|
48817
|
+
var PULSE_TRIANGLE = ["\u25B7", "\u25B6", "\u25B7", "\u25B6"];
|
|
48818
|
+
var PULSE_CIRCLE = ["\u25CC", "\u25D0", "\u25D1", "\u25D2", "\u25D3", "\u25CF"];
|
|
48819
|
+
var PULSE_HEX = ["\u2B21", "\u2B22", "\u2B21", "\u2B22"];
|
|
48837
48820
|
|
|
48838
48821
|
// src/cli/ui/layout/LiveRows.tsx
|
|
48839
|
-
|
|
48822
|
+
function useLiveOutputTokens() {
|
|
48823
|
+
const chars = useAgentState((s) => {
|
|
48824
|
+
let lastUserIdx = -1;
|
|
48825
|
+
for (let i = s.cards.length - 1; i >= 0; i--) {
|
|
48826
|
+
if (s.cards[i].kind === "user") {
|
|
48827
|
+
lastUserIdx = i;
|
|
48828
|
+
break;
|
|
48829
|
+
}
|
|
48830
|
+
}
|
|
48831
|
+
if (lastUserIdx < 0) return 0;
|
|
48832
|
+
let n = 0;
|
|
48833
|
+
for (let i = lastUserIdx + 1; i < s.cards.length; i++) {
|
|
48834
|
+
const c = s.cards[i];
|
|
48835
|
+
if (c.kind === "reasoning" || c.kind === "streaming") n += c.text.length;
|
|
48836
|
+
}
|
|
48837
|
+
return n;
|
|
48838
|
+
});
|
|
48839
|
+
const startedAt = useAgentState((s) => {
|
|
48840
|
+
let lastUserIdx = -1;
|
|
48841
|
+
for (let i = s.cards.length - 1; i >= 0; i--) {
|
|
48842
|
+
if (s.cards[i].kind === "user") {
|
|
48843
|
+
lastUserIdx = i;
|
|
48844
|
+
break;
|
|
48845
|
+
}
|
|
48846
|
+
}
|
|
48847
|
+
return lastUserIdx >= 0 ? s.cards[lastUserIdx].ts : 0;
|
|
48848
|
+
});
|
|
48849
|
+
useSlowTick();
|
|
48850
|
+
const tokens = Math.ceil(chars / 4);
|
|
48851
|
+
if (tokens < 4 || startedAt === 0) return { tokens, tps: null };
|
|
48852
|
+
const elapsedSec = (Date.now() - startedAt) / 1e3;
|
|
48853
|
+
if (elapsedSec < 0.5) return { tokens, tps: null };
|
|
48854
|
+
return { tokens, tps: Math.round(tokens / elapsedSec) };
|
|
48855
|
+
}
|
|
48856
|
+
function useElapsedSinceKey(key) {
|
|
48857
|
+
const startRef = (0, import_react26.useRef)({ key, at: Date.now() });
|
|
48858
|
+
if (startRef.current.key !== key) startRef.current = { key, at: Date.now() };
|
|
48859
|
+
useSlowTick();
|
|
48860
|
+
return Math.floor((Date.now() - startRef.current.at) / 1e3);
|
|
48861
|
+
}
|
|
48862
|
+
function formatElapsed(secs) {
|
|
48863
|
+
if (secs < 60) return `${secs}s`;
|
|
48864
|
+
const m = Math.floor(secs / 60);
|
|
48865
|
+
const s = secs % 60;
|
|
48866
|
+
return `${m}m${s.toString().padStart(2, "0")}s`;
|
|
48867
|
+
}
|
|
48840
48868
|
function ThinkingRow({ text: text2 }) {
|
|
48841
|
-
const
|
|
48842
|
-
const {
|
|
48843
|
-
|
|
48869
|
+
const secs = useElapsedSinceKey(text2);
|
|
48870
|
+
const { tokens, tps } = useLiveOutputTokens();
|
|
48871
|
+
const tail = [];
|
|
48872
|
+
if (secs >= 1) tail.push(formatElapsed(secs));
|
|
48873
|
+
if (tokens > 0) tail.push(`\u2193 ${tokens.toLocaleString()} tok`);
|
|
48874
|
+
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);
|
|
48844
48876
|
}
|
|
48845
48877
|
function UndoBanner({
|
|
48846
48878
|
banner
|
|
48847
48879
|
}) {
|
|
48848
|
-
useTick();
|
|
48849
|
-
const totalMs = 5e3;
|
|
48850
48880
|
const paused = banner.pausedRemainingMs !== null;
|
|
48851
|
-
const remainingMs = paused ? banner.pausedRemainingMs ?? 0 : Math.max(0, banner.expiresAt - Date.now());
|
|
48852
|
-
const remainingSec = Math.ceil(remainingMs / 1e3);
|
|
48853
48881
|
const ok = banner.results.filter((r) => r.status === "applied" || r.status === "created").length;
|
|
48854
48882
|
const total = banner.results.length;
|
|
48855
|
-
|
|
48856
|
-
const pct = remainingMs / totalMs * 100;
|
|
48857
|
-
const tone = paused ? TONE.warn : urgent ? TONE.err : TONE.accent;
|
|
48858
|
-
return /* @__PURE__ */ import_react27.default.createElement(Box_default, { marginY: 1, paddingX: 1 }, /* @__PURE__ */ import_react27.default.createElement(Text, { backgroundColor: TONE.accent, color: "black", bold: true }, ` \u2713 AUTO-APPLIED ${ok}/${total} `), /* @__PURE__ */ import_react27.default.createElement(Text, { color: FG.faint }, " press "), /* @__PURE__ */ import_react27.default.createElement(Text, { backgroundColor: TONE.brand, color: "black", bold: true }, " u "), /* @__PURE__ */ import_react27.default.createElement(Text, { color: FG.faint }, paused ? " to undo \xB7 " : " to undo \xB7 "), /* @__PURE__ */ import_react27.default.createElement(Text, { backgroundColor: paused ? TONE.warn : FG.faint, color: "black", bold: true }, " space "), /* @__PURE__ */ import_react27.default.createElement(Text, { color: FG.faint }, paused ? " to resume " : " to pause "), /* @__PURE__ */ import_react27.default.createElement(CharBar, { pct, width: 20, color: tone, showLabel: false }), /* @__PURE__ */ import_react27.default.createElement(Text, { color: FG.faint }, " "), /* @__PURE__ */ import_react27.default.createElement(Text, { color: tone, bold: urgent || paused }, paused ? `${remainingSec}s \xB7 paused` : `${remainingSec}s`));
|
|
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);
|
|
48859
48884
|
}
|
|
48860
48885
|
function subagentPhaseLabel(phase, iter, elapsedMs) {
|
|
48861
48886
|
if (phase === "summarising") return "summarising findings\u2026";
|
|
@@ -48864,24 +48889,23 @@ function subagentPhaseLabel(phase, iter, elapsedMs) {
|
|
|
48864
48889
|
return "working through tools\u2026";
|
|
48865
48890
|
}
|
|
48866
48891
|
function SubagentRow({ activity }) {
|
|
48867
|
-
useTick();
|
|
48868
48892
|
const seconds = (activity.elapsedMs / 1e3).toFixed(1);
|
|
48869
48893
|
const phase = subagentPhaseLabel(activity.phase, activity.iter, activity.elapsedMs);
|
|
48870
48894
|
const last = activity.lastInner;
|
|
48871
48895
|
const subtitle = activity.skillName ?? truncate(activity.task, 48);
|
|
48872
48896
|
const modelBadge = activity.model ? modelBadgeFor(activity.model) : null;
|
|
48873
48897
|
const streamLine = formatStreamLine(activity);
|
|
48874
|
-
return /* @__PURE__ */
|
|
48898
|
+
return /* @__PURE__ */ import_react26.default.createElement(Card, { tone: CARD.subagent.color }, /* @__PURE__ */ import_react26.default.createElement(
|
|
48875
48899
|
CardHeader,
|
|
48876
48900
|
{
|
|
48877
|
-
glyph: "\
|
|
48901
|
+
glyph: /* @__PURE__ */ import_react26.default.createElement(Pulse, { active: true, frames: PULSE_HEX, settled: "\u232C", color: CARD.subagent.color }),
|
|
48878
48902
|
tone: CARD.subagent.color,
|
|
48879
48903
|
title: "subagent",
|
|
48880
48904
|
subtitle,
|
|
48881
48905
|
meta: [`iter ${activity.iter}`, `${seconds}s`],
|
|
48882
|
-
right:
|
|
48906
|
+
right: modelBadge ? /* @__PURE__ */ import_react26.default.createElement(Pill2, { label: modelBadge.label, ...PILL_MODEL[modelBadge.kind], bold: false }) : null
|
|
48883
48907
|
}
|
|
48884
|
-
), /* @__PURE__ */
|
|
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));
|
|
48885
48909
|
}
|
|
48886
48910
|
function formatBytes(n) {
|
|
48887
48911
|
if (n < 1024) return `${n} B`;
|
|
@@ -48908,39 +48932,31 @@ function SubagentLiveStack({
|
|
|
48908
48932
|
activities,
|
|
48909
48933
|
max = 3
|
|
48910
48934
|
}) {
|
|
48911
|
-
const tick = useTick();
|
|
48912
48935
|
if (activities.length === 0) return null;
|
|
48913
|
-
if (activities.length === 1) return /* @__PURE__ */
|
|
48936
|
+
if (activities.length === 1) return /* @__PURE__ */ import_react26.default.createElement(SubagentRow, { activity: activities[0] });
|
|
48914
48937
|
const visible = activities.slice(0, max);
|
|
48915
48938
|
const overflow = activities.length - visible.length;
|
|
48916
48939
|
const summarising = activities.filter((a) => a.phase === "summarising").length;
|
|
48917
48940
|
const metaParts = [`${activities.length} running`];
|
|
48918
48941
|
if (summarising > 0) metaParts.push(`${summarising} summarising`);
|
|
48919
|
-
return /* @__PURE__ */
|
|
48942
|
+
return /* @__PURE__ */ import_react26.default.createElement(Card, { tone: CARD.subagent.color }, /* @__PURE__ */ import_react26.default.createElement(
|
|
48920
48943
|
CardHeader,
|
|
48921
48944
|
{
|
|
48922
|
-
glyph: "\
|
|
48945
|
+
glyph: /* @__PURE__ */ import_react26.default.createElement(Pulse, { active: true, frames: PULSE_HEX, settled: "\u232C", color: CARD.subagent.color }),
|
|
48923
48946
|
tone: CARD.subagent.color,
|
|
48924
48947
|
title: "subagents",
|
|
48925
|
-
subtitle: metaParts.join(" \xB7 ")
|
|
48926
|
-
right: /* @__PURE__ */ import_react27.default.createElement(Spinner, { kind: "braille", color: CARD.subagent.color })
|
|
48948
|
+
subtitle: metaParts.join(" \xB7 ")
|
|
48927
48949
|
}
|
|
48928
|
-
), visible.map((a
|
|
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);
|
|
48929
48951
|
}
|
|
48930
|
-
function CompactSubagentLine({
|
|
48931
|
-
activity,
|
|
48932
|
-
tick,
|
|
48933
|
-
index
|
|
48934
|
-
}) {
|
|
48952
|
+
function CompactSubagentLine({ activity }) {
|
|
48935
48953
|
const summarising = activity.phase === "summarising";
|
|
48936
|
-
const spinnerFrame = SPINNER_FRAMES[(tick + index) % SPINNER_FRAMES.length] ?? "\xB7";
|
|
48937
|
-
const glyph = summarising ? "\u25B6" : spinnerFrame;
|
|
48938
48954
|
const glyphColor = summarising ? TONE.brand : CARD.subagent.color;
|
|
48939
48955
|
const seconds = (activity.elapsedMs / 1e3).toFixed(1).padStart(5);
|
|
48940
48956
|
const title2 = activity.skillName ?? truncate(activity.task, 28);
|
|
48941
48957
|
const titlePadded = title2.padEnd(28);
|
|
48942
48958
|
const last = activity.lastInner;
|
|
48943
|
-
return /* @__PURE__ */
|
|
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")));
|
|
48944
48960
|
}
|
|
48945
48961
|
function truncate(text2, max) {
|
|
48946
48962
|
return text2.length > max ? `${text2.slice(0, max)}\u2026` : text2;
|
|
@@ -48957,13 +48973,18 @@ function OngoingToolRow({
|
|
|
48957
48973
|
progress,
|
|
48958
48974
|
subagentActivities = []
|
|
48959
48975
|
}) {
|
|
48960
|
-
const tick = useTick();
|
|
48961
|
-
const elapsed = useElapsedSeconds();
|
|
48962
48976
|
const summary = summarizeToolArgs(tool.name, tool.args);
|
|
48963
48977
|
const argsBytes = tool.args ? tool.args.length : 0;
|
|
48978
|
+
const secs = useElapsedSinceKey(tool.name);
|
|
48979
|
+
const { tokens, tps } = useLiveOutputTokens();
|
|
48964
48980
|
const subagentBytes = SUBAGENT_WRAPPER_TOOLS.has(tool.name) ? subagentActivities[subagentActivities.length - 1] : void 0;
|
|
48965
48981
|
const subagentBytesLine = subagentBytes ? formatSubagentBytes(subagentBytes) : null;
|
|
48966
|
-
|
|
48982
|
+
const tailParts = [];
|
|
48983
|
+
if (argsBytes > 0) tailParts.push(`args ${formatBytes(argsBytes)}`);
|
|
48984
|
+
if (secs >= 1) tailParts.push(formatElapsed(secs));
|
|
48985
|
+
if (tokens > 0) tailParts.push(`\u2193 ${tokens.toLocaleString()} tok`);
|
|
48986
|
+
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);
|
|
48967
48988
|
}
|
|
48968
48989
|
function renderProgressLine(p) {
|
|
48969
48990
|
const msg = p.message ? ` ${p.message}` : "";
|
|
@@ -49019,7 +49040,7 @@ function summarizeToolArgs(name, args) {
|
|
|
49019
49040
|
}
|
|
49020
49041
|
|
|
49021
49042
|
// src/cli/ui/layout/ToastRail.tsx
|
|
49022
|
-
var
|
|
49043
|
+
var import_react27 = __toESM(require_react(), 1);
|
|
49023
49044
|
var TONE_COLOR = {
|
|
49024
49045
|
ok: TONE.ok,
|
|
49025
49046
|
info: TONE.brand,
|
|
@@ -49041,11 +49062,11 @@ function ToastRail() {
|
|
|
49041
49062
|
const toasts = useAgentState((s) => s.toasts);
|
|
49042
49063
|
const dispatch = useDispatch();
|
|
49043
49064
|
useSlowTick();
|
|
49044
|
-
const { stdout } =
|
|
49065
|
+
const { stdout } = bv();
|
|
49045
49066
|
const cols = stdout?.columns ?? 80;
|
|
49046
49067
|
const rule = "\u2501".repeat(Math.max(20, cols - 4));
|
|
49047
49068
|
const now = Date.now();
|
|
49048
|
-
(0,
|
|
49069
|
+
(0, import_react27.useEffect)(() => {
|
|
49049
49070
|
const timers = [];
|
|
49050
49071
|
for (const t2 of toasts) {
|
|
49051
49072
|
const remaining = Math.max(0, t2.ttlMs - (Date.now() - t2.bornAt));
|
|
@@ -49057,20 +49078,20 @@ function ToastRail() {
|
|
|
49057
49078
|
}, [toasts, dispatch]);
|
|
49058
49079
|
const visible = toasts.filter((t2) => now - t2.bornAt < t2.ttlMs);
|
|
49059
49080
|
if (visible.length === 0) return null;
|
|
49060
|
-
return /* @__PURE__ */
|
|
49081
|
+
return /* @__PURE__ */ import_react27.default.createElement(W, { flexDirection: "column" }, visible.map((t2) => {
|
|
49061
49082
|
const color = TONE_COLOR[t2.tone];
|
|
49062
49083
|
const glyph = TONE_GLYPH[t2.tone];
|
|
49063
49084
|
const body = bodyColor(t2, now);
|
|
49064
49085
|
const remainingSec = Math.max(0, Math.ceil((t2.ttlMs - (now - t2.bornAt)) / 1e3));
|
|
49065
|
-
return /* @__PURE__ */
|
|
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`)));
|
|
49066
49087
|
}));
|
|
49067
49088
|
}
|
|
49068
49089
|
|
|
49069
49090
|
// src/cli/ui/layout/plan-live-row.tsx
|
|
49070
|
-
var
|
|
49091
|
+
var import_react29 = __toESM(require_react(), 1);
|
|
49071
49092
|
|
|
49072
49093
|
// src/cli/ui/cards/PlanCard.tsx
|
|
49073
|
-
var
|
|
49094
|
+
var import_react28 = __toESM(require_react(), 1);
|
|
49074
49095
|
var STATUS_GLYPH = {
|
|
49075
49096
|
queued: "\u25CB",
|
|
49076
49097
|
running: "\u25CF",
|
|
@@ -49096,11 +49117,19 @@ function PlanCard({ card }) {
|
|
|
49096
49117
|
const hasRunning = card.steps.some((s) => s.status === "running");
|
|
49097
49118
|
const cardTone = hasRunning ? toneActive.accent : tone.accent;
|
|
49098
49119
|
const window2 = pickWindow(card.steps);
|
|
49099
|
-
return /* @__PURE__ */
|
|
49120
|
+
return /* @__PURE__ */ import_react28.default.createElement(Card, { tone: cardTone }, /* @__PURE__ */ import_react28.default.createElement(
|
|
49121
|
+
CardHeader,
|
|
49122
|
+
{
|
|
49123
|
+
glyph: hasRunning ? /* @__PURE__ */ import_react28.default.createElement(Pulse, { active: true, frames: PULSE_DIAMOND, settled: "\u25C6", color: cardTone }) : "\u25CF",
|
|
49124
|
+
tone: cardTone,
|
|
49125
|
+
title: card.title,
|
|
49126
|
+
meta: [progress]
|
|
49127
|
+
}
|
|
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) => {
|
|
49100
49129
|
const isActive = step.status === "running";
|
|
49101
49130
|
const titleColor = isActive ? fg.strong : fg.sub;
|
|
49102
|
-
return /* @__PURE__ */
|
|
49103
|
-
}), window2.hiddenAfter > 0 ? /* @__PURE__ */
|
|
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);
|
|
49104
49133
|
}
|
|
49105
49134
|
function pickWindow(steps) {
|
|
49106
49135
|
if (steps.length <= VISIBLE_WINDOW) {
|
|
@@ -49142,11 +49171,11 @@ function PlanLiveRow() {
|
|
|
49142
49171
|
return null;
|
|
49143
49172
|
});
|
|
49144
49173
|
if (!planCard) return null;
|
|
49145
|
-
return /* @__PURE__ */
|
|
49174
|
+
return /* @__PURE__ */ import_react29.default.createElement(PlanCard, { card: planCard });
|
|
49146
49175
|
}
|
|
49147
49176
|
|
|
49148
49177
|
// src/cli/ui/LiveActivityArea.tsx
|
|
49149
|
-
var LiveActivityArea =
|
|
49178
|
+
var LiveActivityArea = import_react30.default.memo(
|
|
49150
49179
|
({
|
|
49151
49180
|
noTakeoverOverlay,
|
|
49152
49181
|
ongoingTool,
|
|
@@ -49160,23 +49189,23 @@ var LiveActivityArea = import_react31.default.memo(
|
|
|
49160
49189
|
hideUndo
|
|
49161
49190
|
}) => {
|
|
49162
49191
|
useRenderTrace("LiveActivityArea");
|
|
49163
|
-
return /* @__PURE__ */
|
|
49192
|
+
return /* @__PURE__ */ import_react30.default.createElement(W, { flexDirection: "column", flexShrink: 0, flexWrap: "nowrap" }, noTakeoverOverlay && ongoingTool ? /* @__PURE__ */ import_react30.default.createElement(
|
|
49164
49193
|
OngoingToolRow,
|
|
49165
49194
|
{
|
|
49166
49195
|
tool: ongoingTool,
|
|
49167
49196
|
progress: toolProgress,
|
|
49168
49197
|
subagentActivities
|
|
49169
49198
|
}
|
|
49170
|
-
) : null, noTakeoverOverlay && subagentActivities.length > 0 ? /* @__PURE__ */
|
|
49199
|
+
) : null, noTakeoverOverlay && subagentActivities.length > 0 ? /* @__PURE__ */ import_react30.default.createElement(SubagentLiveStack, { activities: subagentActivities, max: 3 }) : null, noTakeoverOverlay && !ongoingTool && statusLine ? /* @__PURE__ */ import_react30.default.createElement(ThinkingRow, { text: statusLine }) : null, undoBanner && !hideUndo ? /* @__PURE__ */ import_react30.default.createElement(UndoBanner, { banner: undoBanner }) : null, noTakeoverOverlay && busy && !isStreaming && !ongoingTool && !statusLine ? /* @__PURE__ */ import_react30.default.createElement(ThinkingRow, { text: activityLabel }) : null, noTakeoverOverlay ? /* @__PURE__ */ import_react30.default.createElement(PlanLiveRow, null) : null, /* @__PURE__ */ import_react30.default.createElement(ToastRail, null));
|
|
49171
49200
|
}
|
|
49172
49201
|
);
|
|
49173
49202
|
LiveActivityArea.displayName = "LiveActivityArea";
|
|
49174
49203
|
|
|
49175
49204
|
// src/cli/ui/McpHub.tsx
|
|
49176
|
-
var
|
|
49205
|
+
var import_react33 = __toESM(require_react(), 1);
|
|
49177
49206
|
|
|
49178
49207
|
// src/cli/ui/McpBrowser.tsx
|
|
49179
|
-
var
|
|
49208
|
+
var import_react31 = __toESM(require_react(), 1);
|
|
49180
49209
|
|
|
49181
49210
|
// src/cli/ui/mcp-disable.ts
|
|
49182
49211
|
function toggleMcpDisabled(action, name) {
|
|
@@ -49415,7 +49444,7 @@ function McpBrowser({
|
|
|
49415
49444
|
postInfo,
|
|
49416
49445
|
applyAppend
|
|
49417
49446
|
}) {
|
|
49418
|
-
const [index, setIndex] = (0,
|
|
49447
|
+
const [index, setIndex] = (0, import_react31.useState)(0);
|
|
49419
49448
|
const max = Math.max(0, servers.length - 1);
|
|
49420
49449
|
useKeystroke((ev) => {
|
|
49421
49450
|
if (ev.paste) return;
|
|
@@ -49434,13 +49463,13 @@ function McpBrowser({
|
|
|
49434
49463
|
onClose();
|
|
49435
49464
|
}
|
|
49436
49465
|
});
|
|
49437
|
-
return /* @__PURE__ */
|
|
49438
|
-
|
|
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,
|
|
49439
49468
|
{
|
|
49440
49469
|
dimColor: true
|
|
49441
49470
|
},
|
|
49442
49471
|
` \xB7 ${configPath} \xB7 ${t("mcpBrowser.serverCount", { count: servers.length, s: servers.length === 1 ? "" : "s" })}`
|
|
49443
|
-
)), /* @__PURE__ */
|
|
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"))));
|
|
49444
49473
|
}
|
|
49445
49474
|
function ServerRow({ server, active: active2 }) {
|
|
49446
49475
|
const { label, toolCount, report } = server;
|
|
@@ -49449,7 +49478,7 @@ function ServerRow({ server, active: active2 }) {
|
|
|
49449
49478
|
const elapsed = report.elapsedMs;
|
|
49450
49479
|
const health = healthBadge(elapsed);
|
|
49451
49480
|
const counts = `${toolCount} tools \xB7 ${resourceCount} resources \xB7 ${promptCount} prompts`;
|
|
49452
|
-
return /* @__PURE__ */
|
|
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);
|
|
49453
49482
|
}
|
|
49454
49483
|
function capabilityList(s) {
|
|
49455
49484
|
const caps = ["tools/list", "tools/call"];
|
|
@@ -49459,7 +49488,7 @@ function capabilityList(s) {
|
|
|
49459
49488
|
}
|
|
49460
49489
|
|
|
49461
49490
|
// src/cli/ui/McpMarketplace.tsx
|
|
49462
|
-
var
|
|
49491
|
+
var import_react32 = __toESM(require_react(), 1);
|
|
49463
49492
|
var VISIBLE_ROWS = 10;
|
|
49464
49493
|
function buildMarketplacePickerSnapshot(args) {
|
|
49465
49494
|
return {
|
|
@@ -49504,7 +49533,7 @@ function isInstalled(installedSpecs, entry) {
|
|
|
49504
49533
|
}
|
|
49505
49534
|
}
|
|
49506
49535
|
function McpMarketplace({ onClose, postInfo, reloadMcp, pickerPorts }) {
|
|
49507
|
-
const [state2, setState] = (0,
|
|
49536
|
+
const [state2, setState] = (0, import_react32.useState)({
|
|
49508
49537
|
handle: null,
|
|
49509
49538
|
loading: true,
|
|
49510
49539
|
query: "",
|
|
@@ -49512,7 +49541,7 @@ function McpMarketplace({ onClose, postInfo, reloadMcp, pickerPorts }) {
|
|
|
49512
49541
|
status: t("mcpMarketplace.opening"),
|
|
49513
49542
|
installedSpecs: readInstalledSpecs()
|
|
49514
49543
|
});
|
|
49515
|
-
(0,
|
|
49544
|
+
(0, import_react32.useEffect)(() => {
|
|
49516
49545
|
let cancelled = false;
|
|
49517
49546
|
(async () => {
|
|
49518
49547
|
try {
|
|
@@ -49537,12 +49566,12 @@ function McpMarketplace({ onClose, postInfo, reloadMcp, pickerPorts }) {
|
|
|
49537
49566
|
cancelled = true;
|
|
49538
49567
|
};
|
|
49539
49568
|
}, []);
|
|
49540
|
-
const filtered = (0,
|
|
49569
|
+
const filtered = (0, import_react32.useMemo)(() => {
|
|
49541
49570
|
if (!state2.handle) return [];
|
|
49542
49571
|
return rankAndFilter(state2.handle.cache.entries, state2.query);
|
|
49543
49572
|
}, [state2.handle, state2.query]);
|
|
49544
49573
|
const selected = filtered[state2.selected];
|
|
49545
|
-
const fetchMore = (0,
|
|
49574
|
+
const fetchMore = (0, import_react32.useCallback)(async () => {
|
|
49546
49575
|
if (!state2.handle || state2.loading) return;
|
|
49547
49576
|
if (state2.handle.cache.pagination.nextCursor === null) {
|
|
49548
49577
|
setState((s) => ({ ...s, status: t("mcpMarketplace.allLoaded") }));
|
|
@@ -49560,7 +49589,7 @@ function McpMarketplace({ onClose, postInfo, reloadMcp, pickerPorts }) {
|
|
|
49560
49589
|
setState((s) => ({ ...s, loading: false, status: `error: ${err.message}` }));
|
|
49561
49590
|
}
|
|
49562
49591
|
}, [state2.handle, state2.loading]);
|
|
49563
|
-
const doUninstall = (0,
|
|
49592
|
+
const doUninstall = (0, import_react32.useCallback)(
|
|
49564
49593
|
async (entry, installed) => {
|
|
49565
49594
|
const cfg = readConfig();
|
|
49566
49595
|
const next = (cfg.mcp ?? []).filter((s) => s !== installed);
|
|
@@ -49581,7 +49610,7 @@ function McpMarketplace({ onClose, postInfo, reloadMcp, pickerPorts }) {
|
|
|
49581
49610
|
},
|
|
49582
49611
|
[postInfo, reloadMcp]
|
|
49583
49612
|
);
|
|
49584
|
-
const doInstall = (0,
|
|
49613
|
+
const doInstall = (0, import_react32.useCallback)(
|
|
49585
49614
|
async (entry) => {
|
|
49586
49615
|
let install = entry.install;
|
|
49587
49616
|
if (!install && entry.source === "smithery") {
|
|
@@ -49642,7 +49671,7 @@ function McpMarketplace({ onClose, postInfo, reloadMcp, pickerPorts }) {
|
|
|
49642
49671
|
},
|
|
49643
49672
|
[postInfo, reloadMcp]
|
|
49644
49673
|
);
|
|
49645
|
-
const installOrToggle = (0,
|
|
49674
|
+
const installOrToggle = (0, import_react32.useCallback)(
|
|
49646
49675
|
async (entry) => {
|
|
49647
49676
|
const installed = isInstalled(state2.installedSpecs, entry);
|
|
49648
49677
|
if (installed) await doUninstall(entry, installed);
|
|
@@ -49650,7 +49679,7 @@ function McpMarketplace({ onClose, postInfo, reloadMcp, pickerPorts }) {
|
|
|
49650
49679
|
},
|
|
49651
49680
|
[state2.installedSpecs, doInstall, doUninstall]
|
|
49652
49681
|
);
|
|
49653
|
-
const pickerSnapshot = (0,
|
|
49682
|
+
const pickerSnapshot = (0, import_react32.useMemo)(
|
|
49654
49683
|
() => buildMarketplacePickerSnapshot({
|
|
49655
49684
|
filtered,
|
|
49656
49685
|
installedSpecs: state2.installedSpecs,
|
|
@@ -49730,31 +49759,31 @@ function McpMarketplace({ onClose, postInfo, reloadMcp, pickerPorts }) {
|
|
|
49730
49759
|
setState((s) => ({ ...s, query: s.query + ev.input, selected: 0 }));
|
|
49731
49760
|
}
|
|
49732
49761
|
});
|
|
49733
|
-
const overlay = (0,
|
|
49762
|
+
const overlay = (0, import_react32.useMemo)(() => loadOverlay("zh-CN"), []);
|
|
49734
49763
|
const start = Math.max(
|
|
49735
49764
|
0,
|
|
49736
49765
|
Math.min(state2.selected - Math.floor(VISIBLE_ROWS / 2), filtered.length - VISIBLE_ROWS)
|
|
49737
49766
|
);
|
|
49738
49767
|
const window2 = filtered.slice(Math.max(0, start), Math.max(0, start) + VISIBLE_ROWS);
|
|
49739
|
-
return /* @__PURE__ */
|
|
49740
|
-
|
|
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,
|
|
49741
49770
|
{
|
|
49742
49771
|
dimColor: true
|
|
49743
49772
|
},
|
|
49744
49773
|
` ${t(filtered.length === 1 ? "mcpMarketplace.matchSingular" : "mcpMarketplace.matchPlural", { n: filtered.length })}`
|
|
49745
|
-
)), /* @__PURE__ */
|
|
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) => {
|
|
49746
49775
|
const idx = (start || 0) + i;
|
|
49747
49776
|
const active2 = idx === state2.selected;
|
|
49748
49777
|
const tag2 = e.source === "official" ? "[off]" : e.source === "smithery" ? "[smt]" : "[loc]";
|
|
49749
49778
|
const installedSpec = isInstalled(state2.installedSpecs, e);
|
|
49750
49779
|
const installedBadge = installedSpec ? " \u2713" : "";
|
|
49751
49780
|
const pop = e.popularity !== void 0 ? ` \xB7 ${e.popularity.toLocaleString()}` : "";
|
|
49752
|
-
return /* @__PURE__ */
|
|
49753
|
-
})), selected ? /* @__PURE__ */
|
|
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", {
|
|
49754
49783
|
runtime: selected.install.runtime,
|
|
49755
49784
|
id: selected.install.packageId ?? selected.install.url ?? "\u2014",
|
|
49756
49785
|
transport: selected.install.transport
|
|
49757
|
-
})) : /* @__PURE__ */
|
|
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"))));
|
|
49758
49787
|
}
|
|
49759
49788
|
|
|
49760
49789
|
// src/cli/ui/McpHub.tsx
|
|
@@ -49768,19 +49797,19 @@ function McpHub({
|
|
|
49768
49797
|
reloadMcp,
|
|
49769
49798
|
pickerPorts
|
|
49770
49799
|
}) {
|
|
49771
|
-
const [tab, setTab] = (0,
|
|
49800
|
+
const [tab, setTab] = (0, import_react33.useState)(initialTab);
|
|
49772
49801
|
useKeystroke((ev) => {
|
|
49773
49802
|
if (ev.paste) return;
|
|
49774
49803
|
if (ev.tab) setTab((t2) => t2 === "live" ? "marketplace" : "live");
|
|
49775
49804
|
});
|
|
49776
|
-
return /* @__PURE__ */
|
|
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(
|
|
49777
49806
|
TabPill,
|
|
49778
49807
|
{
|
|
49779
49808
|
label: t("handlers.mcp.liveTab"),
|
|
49780
49809
|
count: liveServers.length,
|
|
49781
49810
|
active: tab === "live"
|
|
49782
49811
|
}
|
|
49783
|
-
), /* @__PURE__ */
|
|
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(
|
|
49784
49813
|
McpBrowser,
|
|
49785
49814
|
{
|
|
49786
49815
|
servers: liveServers,
|
|
@@ -49789,7 +49818,7 @@ function McpHub({
|
|
|
49789
49818
|
postInfo,
|
|
49790
49819
|
applyAppend
|
|
49791
49820
|
}
|
|
49792
|
-
) : /* @__PURE__ */
|
|
49821
|
+
) : /* @__PURE__ */ import_react33.default.createElement(
|
|
49793
49822
|
McpMarketplace,
|
|
49794
49823
|
{
|
|
49795
49824
|
onClose,
|
|
@@ -49802,13 +49831,13 @@ function McpHub({
|
|
|
49802
49831
|
function TabPill({ label, count, active: active2 }) {
|
|
49803
49832
|
const text2 = count !== void 0 ? `${label} (${count})` : label;
|
|
49804
49833
|
if (active2) {
|
|
49805
|
-
return /* @__PURE__ */
|
|
49834
|
+
return /* @__PURE__ */ import_react33.default.createElement(L, { bold: true, color: COLOR.brand }, "[", text2, "]");
|
|
49806
49835
|
}
|
|
49807
|
-
return /* @__PURE__ */
|
|
49836
|
+
return /* @__PURE__ */ import_react33.default.createElement(L, { dimColor: true }, ` ${text2} `);
|
|
49808
49837
|
}
|
|
49809
49838
|
|
|
49810
49839
|
// src/cli/ui/ModelPicker.tsx
|
|
49811
|
-
var
|
|
49840
|
+
var import_react34 = __toESM(require_react(), 1);
|
|
49812
49841
|
var PAGE_MARGIN3 = 8;
|
|
49813
49842
|
function ModelPicker({
|
|
49814
49843
|
models,
|
|
@@ -49827,8 +49856,8 @@ function ModelPicker({
|
|
|
49827
49856
|
const modelRows = modelList.map((id) => ({ kind: "model", id }));
|
|
49828
49857
|
const rows = [...effortRows, ...modelRows];
|
|
49829
49858
|
const initialIndex = effortRows.length + Math.max(0, modelList.indexOf(current));
|
|
49830
|
-
const [focus, setFocus] = (0,
|
|
49831
|
-
const { stdout } =
|
|
49859
|
+
const [focus, setFocus] = (0, import_react34.useState)(initialIndex);
|
|
49860
|
+
const { stdout } = bv();
|
|
49832
49861
|
const termRows = stdout?.rows ?? 40;
|
|
49833
49862
|
const visibleCount = Math.max(6, termRows - PAGE_MARGIN3);
|
|
49834
49863
|
useKeystroke((ev) => {
|
|
@@ -49856,13 +49885,13 @@ function ModelPicker({
|
|
|
49856
49885
|
const loading = models === null;
|
|
49857
49886
|
const empty = models !== null && models.length === 0;
|
|
49858
49887
|
let lastSection = null;
|
|
49859
|
-
return /* @__PURE__ */
|
|
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) => {
|
|
49860
49889
|
const idx = start + i;
|
|
49861
49890
|
const focused = idx === focus;
|
|
49862
49891
|
const showHeader = row2.kind !== lastSection;
|
|
49863
49892
|
lastSection = row2.kind;
|
|
49864
|
-
const header = showHeader ? /* @__PURE__ */
|
|
49865
|
-
const body = row2.kind === "effort" ? /* @__PURE__ */
|
|
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;
|
|
49894
|
+
const body = row2.kind === "effort" ? /* @__PURE__ */ import_react34.default.createElement(
|
|
49866
49895
|
EffortRow,
|
|
49867
49896
|
{
|
|
49868
49897
|
key: `e-${row2.effort}`,
|
|
@@ -49870,7 +49899,7 @@ function ModelPicker({
|
|
|
49870
49899
|
focused,
|
|
49871
49900
|
active: row2.effort === currentEffort
|
|
49872
49901
|
}
|
|
49873
|
-
) : /* @__PURE__ */
|
|
49902
|
+
) : /* @__PURE__ */ import_react34.default.createElement(
|
|
49874
49903
|
ModelRow,
|
|
49875
49904
|
{
|
|
49876
49905
|
key: `m-${row2.id}`,
|
|
@@ -49879,15 +49908,15 @@ function ModelPicker({
|
|
|
49879
49908
|
active: row2.id === current
|
|
49880
49909
|
}
|
|
49881
49910
|
);
|
|
49882
|
-
return /* @__PURE__ */
|
|
49883
|
-
}), hiddenBelow > 0 ? /* @__PURE__ */
|
|
49911
|
+
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"))));
|
|
49884
49913
|
}
|
|
49885
49914
|
function EffortRow({
|
|
49886
49915
|
effort: effort2,
|
|
49887
49916
|
focused,
|
|
49888
49917
|
active: active2
|
|
49889
49918
|
}) {
|
|
49890
|
-
return /* @__PURE__ */
|
|
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);
|
|
49891
49920
|
}
|
|
49892
49921
|
function ModelRow({
|
|
49893
49922
|
id,
|
|
@@ -49895,16 +49924,16 @@ function ModelRow({
|
|
|
49895
49924
|
active: active2
|
|
49896
49925
|
}) {
|
|
49897
49926
|
const badge = modelBadgeFor(id);
|
|
49898
|
-
return /* @__PURE__ */
|
|
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);
|
|
49899
49928
|
}
|
|
49900
49929
|
var FALLBACK_MODELS = ["deepseek-v4-flash", "deepseek-v4-pro"];
|
|
49901
49930
|
|
|
49902
49931
|
// src/cli/ui/PathConfirm.tsx
|
|
49903
|
-
var
|
|
49932
|
+
var import_react35 = __toESM(require_react(), 1);
|
|
49904
49933
|
function PathConfirm({ prompt, onChoose }) {
|
|
49905
|
-
const [phase, setPhase] = (0,
|
|
49934
|
+
const [phase, setPhase] = (0, import_react35.useState)("pick");
|
|
49906
49935
|
if (phase === "deny") {
|
|
49907
|
-
return /* @__PURE__ */
|
|
49936
|
+
return /* @__PURE__ */ import_react35.default.createElement(
|
|
49908
49937
|
ApprovalCard,
|
|
49909
49938
|
{
|
|
49910
49939
|
tone: "error",
|
|
@@ -49913,7 +49942,7 @@ function PathConfirm({ prompt, onChoose }) {
|
|
|
49913
49942
|
metaRight: t("pathConfirm.optional"),
|
|
49914
49943
|
footerHint: t("pathConfirm.denyFooter")
|
|
49915
49944
|
},
|
|
49916
|
-
/* @__PURE__ */
|
|
49945
|
+
/* @__PURE__ */ import_react35.default.createElement(
|
|
49917
49946
|
DenyContextInput,
|
|
49918
49947
|
{
|
|
49919
49948
|
onSubmit: (context2) => onChoose("deny", context2 || void 0),
|
|
@@ -49934,7 +49963,7 @@ function PathConfirm({ prompt, onChoose }) {
|
|
|
49934
49963
|
if (id === "deny") return t("pathConfirm.actionDeny");
|
|
49935
49964
|
return fallback;
|
|
49936
49965
|
};
|
|
49937
|
-
return /* @__PURE__ */
|
|
49966
|
+
return /* @__PURE__ */ import_react35.default.createElement(
|
|
49938
49967
|
ApprovalCard,
|
|
49939
49968
|
{
|
|
49940
49969
|
tone: prompt.tone,
|
|
@@ -49943,9 +49972,9 @@ function PathConfirm({ prompt, onChoose }) {
|
|
|
49943
49972
|
metaRight: t("pathConfirm.awaiting"),
|
|
49944
49973
|
footerHint: t("pathConfirm.pickFooter")
|
|
49945
49974
|
},
|
|
49946
|
-
/* @__PURE__ */
|
|
49947
|
-
/* @__PURE__ */
|
|
49948
|
-
/* @__PURE__ */
|
|
49975
|
+
/* @__PURE__ */ import_react35.default.createElement(W, { marginBottom: 1 }, /* @__PURE__ */ import_react35.default.createElement(L, { color: FG.faint }, prompt.preview ?? "")),
|
|
49976
|
+
/* @__PURE__ */ import_react35.default.createElement(InfoRows, { path, sandboxRoot: prompt.meta?.sandboxRoot, allowPrefix }),
|
|
49977
|
+
/* @__PURE__ */ import_react35.default.createElement(
|
|
49949
49978
|
SingleSelect,
|
|
49950
49979
|
{
|
|
49951
49980
|
initialValue: prompt.actions[0]?.id ?? "run_once",
|
|
@@ -49984,7 +50013,7 @@ function InfoRows({
|
|
|
49984
50013
|
rows.push({ label: t("pathConfirm.allowPrefixLabel"), value: allowPrefix });
|
|
49985
50014
|
}
|
|
49986
50015
|
const labelWidth = Math.max(...rows.map((r) => r.label.length));
|
|
49987
|
-
return /* @__PURE__ */
|
|
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))));
|
|
49988
50017
|
}
|
|
49989
50018
|
|
|
49990
50019
|
// src/cli/ui/PlanCheckpointConfirm.tsx
|
|
@@ -49992,6 +50021,24 @@ var import_react38 = __toESM(require_react(), 1);
|
|
|
49992
50021
|
|
|
49993
50022
|
// src/cli/ui/PlanStepList.tsx
|
|
49994
50023
|
var import_react37 = __toESM(require_react(), 1);
|
|
50024
|
+
|
|
50025
|
+
// src/cli/ui/char-bar.tsx
|
|
50026
|
+
var import_react36 = __toESM(require_react(), 1);
|
|
50027
|
+
function CharBar({
|
|
50028
|
+
pct,
|
|
50029
|
+
width = 24,
|
|
50030
|
+
color = COLOR.primary,
|
|
50031
|
+
emptyColor,
|
|
50032
|
+
showLabel = true,
|
|
50033
|
+
label
|
|
50034
|
+
}) {
|
|
50035
|
+
const total = Math.max(4, width);
|
|
50036
|
+
const clamped = Math.max(0, Math.min(100, Number.isFinite(pct) ? pct : 0));
|
|
50037
|
+
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);
|
|
50039
|
+
}
|
|
50040
|
+
|
|
50041
|
+
// src/cli/ui/PlanStepList.tsx
|
|
49995
50042
|
function getStatus(stepId, statuses) {
|
|
49996
50043
|
if (!statuses) return "pending";
|
|
49997
50044
|
if (statuses instanceof Map) {
|
|
@@ -50018,28 +50065,28 @@ function PlanStepListInner({ steps, statuses, focusStepId }) {
|
|
|
50018
50065
|
const doneCount = statusList.filter((s) => s === "done").length;
|
|
50019
50066
|
const pct = Math.round(doneCount / total * 100);
|
|
50020
50067
|
const showProgress = doneCount > 0;
|
|
50021
|
-
return /* @__PURE__ */ import_react37.default.createElement(
|
|
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(
|
|
50022
50069
|
total === 1 ? "planFlow.stepList.counterDoneSingular" : "planFlow.stepList.counterDone",
|
|
50023
50070
|
{ done: doneCount, total, pct }
|
|
50024
50071
|
) : t(total === 1 ? "planFlow.stepList.counterSingular" : "planFlow.stepList.counter", {
|
|
50025
50072
|
total
|
|
50026
|
-
}))), /* @__PURE__ */ import_react37.default.createElement(
|
|
50073
|
+
}))), /* @__PURE__ */ import_react37.default.createElement(W, { flexDirection: "column" }, steps.map((step, i) => {
|
|
50027
50074
|
const status2 = statusList[i];
|
|
50028
50075
|
const isLast = i === total - 1;
|
|
50029
50076
|
const isCur = focusStepId === step.id;
|
|
50030
50077
|
const sg = statusGlyph(status2, isCur);
|
|
50031
50078
|
const risk = riskLabel(step.risk);
|
|
50032
50079
|
const titleDim = status2 === "done" || status2 === "skipped";
|
|
50033
|
-
return /* @__PURE__ */ import_react37.default.createElement(
|
|
50034
|
-
|
|
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,
|
|
50035
50082
|
{
|
|
50036
50083
|
dimColor: titleDim,
|
|
50037
50084
|
bold: isCur || status2 === "running",
|
|
50038
50085
|
strikethrough: status2 === "done" || status2 === "skipped"
|
|
50039
50086
|
},
|
|
50040
50087
|
`${step.id} \xB7 ${step.title}`
|
|
50041
|
-
), risk ? /* @__PURE__ */ import_react37.default.createElement(import_react37.default.Fragment, null, /* @__PURE__ */ import_react37.default.createElement(
|
|
50042
|
-
})), showProgress ? /* @__PURE__ */ import_react37.default.createElement(
|
|
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);
|
|
50043
50090
|
}
|
|
50044
50091
|
var PlanStepList = import_react37.default.memo(PlanStepListInner);
|
|
50045
50092
|
|
|
@@ -50058,7 +50105,7 @@ function PlanCheckpointConfirmInner({
|
|
|
50058
50105
|
const isLast = total > 0 && completed >= total;
|
|
50059
50106
|
const statuses = buildStatusMap(steps, completedStepIds, stepId, isLast);
|
|
50060
50107
|
const subtitle = counter ? `${counter} \xB7 ${label}` : label;
|
|
50061
|
-
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(
|
|
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(
|
|
50062
50109
|
SingleSelect,
|
|
50063
50110
|
{
|
|
50064
50111
|
initialValue: "continue",
|
|
@@ -52497,28 +52544,28 @@ function MarkdownView({ text: text2 }) {
|
|
|
52497
52544
|
function MarkdownLines({
|
|
52498
52545
|
lines
|
|
52499
52546
|
}) {
|
|
52500
|
-
return /* @__PURE__ */ import_react39.default.createElement(
|
|
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 })));
|
|
52501
52548
|
}
|
|
52502
52549
|
function LineRow({ line }) {
|
|
52503
52550
|
switch (line.kind) {
|
|
52504
52551
|
case "blank":
|
|
52505
|
-
return /* @__PURE__ */ import_react39.default.createElement(
|
|
52552
|
+
return /* @__PURE__ */ import_react39.default.createElement(L, null, " ");
|
|
52506
52553
|
case "hr":
|
|
52507
|
-
return /* @__PURE__ */ import_react39.default.createElement(
|
|
52554
|
+
return /* @__PURE__ */ import_react39.default.createElement(L, { color: FG_FAINT }, "\u2500\u2500\u2500\u2500\u2500\u2500");
|
|
52508
52555
|
case "heading":
|
|
52509
|
-
return /* @__PURE__ */ import_react39.default.createElement(
|
|
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 }));
|
|
52510
52557
|
case "paragraph":
|
|
52511
|
-
return /* @__PURE__ */ import_react39.default.createElement(
|
|
52558
|
+
return /* @__PURE__ */ import_react39.default.createElement(W, null, /* @__PURE__ */ import_react39.default.createElement(Spans, { spans: line.spans }));
|
|
52512
52559
|
case "list": {
|
|
52513
52560
|
const indent = " ".repeat(line.depth * 2);
|
|
52514
52561
|
const marker = line.task === "done" ? "\u2713" : line.task === "todo" ? "\u25CB" : line.ordered ? `${line.index}.` : "\xB7";
|
|
52515
52562
|
const markerColor = line.task === "done" ? TONE_OK : line.task === "todo" ? FG_FAINT : FG_META;
|
|
52516
|
-
return /* @__PURE__ */ import_react39.default.createElement(
|
|
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" }));
|
|
52517
52564
|
}
|
|
52518
52565
|
case "code":
|
|
52519
52566
|
return /* @__PURE__ */ import_react39.default.createElement(CodeBlock, { lang: line.lang, text: line.text });
|
|
52520
52567
|
case "blockquote":
|
|
52521
|
-
return /* @__PURE__ */ import_react39.default.createElement(
|
|
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 }));
|
|
52522
52569
|
}
|
|
52523
52570
|
}
|
|
52524
52571
|
function spanKey(span, i) {
|
|
@@ -52526,13 +52573,13 @@ function spanKey(span, i) {
|
|
|
52526
52573
|
}
|
|
52527
52574
|
function CodeBlock({ lang, text: text2 }) {
|
|
52528
52575
|
const lines = text2.split("\n");
|
|
52529
|
-
return /* @__PURE__ */ import_react39.default.createElement(
|
|
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) => (
|
|
52530
52577
|
// biome-ignore lint/suspicious/noArrayIndexKey: code lines are positional + stable per render
|
|
52531
|
-
/* @__PURE__ */ import_react39.default.createElement(
|
|
52578
|
+
/* @__PURE__ */ import_react39.default.createElement(L, { key: `code-${i}`, backgroundColor: SURFACE_ELEV }, ` ${ln} `)
|
|
52532
52579
|
)));
|
|
52533
52580
|
}
|
|
52534
52581
|
function Spans({ spans, bold, italic, dim, strike, strongColor }) {
|
|
52535
|
-
if (spans.length === 0) return /* @__PURE__ */ import_react39.default.createElement(
|
|
52582
|
+
if (spans.length === 0) return /* @__PURE__ */ import_react39.default.createElement(L, null, " ");
|
|
52536
52583
|
return /* @__PURE__ */ import_react39.default.createElement(import_react39.default.Fragment, null, spans.map((span, i) => /* @__PURE__ */ import_react39.default.createElement(
|
|
52537
52584
|
SpanText,
|
|
52538
52585
|
{
|
|
@@ -52555,11 +52602,11 @@ function SpanText({
|
|
|
52555
52602
|
strongColor
|
|
52556
52603
|
}) {
|
|
52557
52604
|
if (span.code) {
|
|
52558
|
-
return /* @__PURE__ */ import_react39.default.createElement(
|
|
52605
|
+
return /* @__PURE__ */ import_react39.default.createElement(L, { color: FG_STRONG, backgroundColor: SURFACE_ELEV }, ` ${span.text} `);
|
|
52559
52606
|
}
|
|
52560
52607
|
const color = span.fileRef ? TONE_BRAND : span.link ? TONE_BRAND : strongColor ? FG_STRONG : FG_BODY;
|
|
52561
52608
|
const inner = /* @__PURE__ */ import_react39.default.createElement(
|
|
52562
|
-
|
|
52609
|
+
L,
|
|
52563
52610
|
{
|
|
52564
52611
|
color,
|
|
52565
52612
|
bold: !!(span.bold || ambientBold),
|
|
@@ -52572,7 +52619,7 @@ function SpanText({
|
|
|
52572
52619
|
);
|
|
52573
52620
|
const target = linkTarget(span);
|
|
52574
52621
|
if (!target) return inner;
|
|
52575
|
-
return /* @__PURE__ */ import_react39.default.createElement(
|
|
52622
|
+
return /* @__PURE__ */ import_react39.default.createElement(wv, { transform: (text2) => `\x1B]8;;${target}\x1B\\${text2}\x1B]8;;\x1B\\` }, inner);
|
|
52576
52623
|
}
|
|
52577
52624
|
function linkTarget(span) {
|
|
52578
52625
|
if (span.link) return span.link;
|
|
@@ -52618,7 +52665,7 @@ var MIN_DETAIL_LINES = 6;
|
|
|
52618
52665
|
var EXPANDED_MODAL_OVERHEAD_ROWS = 12;
|
|
52619
52666
|
var EXPANDED_DETAIL_CHROME_ROWS = 4;
|
|
52620
52667
|
function PlanConfirmInner({ plan: plan2, steps, summary, onChoose }) {
|
|
52621
|
-
const { stdout } =
|
|
52668
|
+
const { stdout } = bv();
|
|
52622
52669
|
const totalRows = stdout?.rows ?? 40;
|
|
52623
52670
|
const [expanded, setExpanded] = (0, import_react40.useState)(false);
|
|
52624
52671
|
const [detailOffset, setDetailOffset] = (0, import_react40.useState)(0);
|
|
@@ -52687,8 +52734,8 @@ function PlanConfirmInner({ plan: plan2, steps, summary, onChoose }) {
|
|
|
52687
52734
|
metaRight: t("planFlow.approveCardMetaRight"),
|
|
52688
52735
|
metaRightColor: CARD.plan.color
|
|
52689
52736
|
},
|
|
52690
|
-
openQuestions ? /* @__PURE__ */ import_react40.default.createElement(
|
|
52691
|
-
!expanded || plan2.trim().length === 0 ? /* @__PURE__ */ import_react40.default.createElement(
|
|
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,
|
|
52692
52739
|
expanded && plan2.trim().length > 0 ? /* @__PURE__ */ import_react40.default.createElement(
|
|
52693
52740
|
PlanDetailWindow,
|
|
52694
52741
|
{
|
|
@@ -52699,7 +52746,7 @@ function PlanConfirmInner({ plan: plan2, steps, summary, onChoose }) {
|
|
|
52699
52746
|
total: planLines.length
|
|
52700
52747
|
}
|
|
52701
52748
|
) : null,
|
|
52702
|
-
showDetailScrollHint ? /* @__PURE__ */ import_react40.default.createElement(
|
|
52749
|
+
showDetailScrollHint ? /* @__PURE__ */ import_react40.default.createElement(W, { marginBottom: 1 }, /* @__PURE__ */ import_react40.default.createElement(L, { color: FG.faint }, t("planFlow.detailScrollHint"))) : null,
|
|
52703
52750
|
/* @__PURE__ */ import_react40.default.createElement(
|
|
52704
52751
|
SingleSelect,
|
|
52705
52752
|
{
|
|
@@ -52741,7 +52788,7 @@ function PlanDetailWindow({
|
|
|
52741
52788
|
end,
|
|
52742
52789
|
total
|
|
52743
52790
|
}) {
|
|
52744
|
-
return /* @__PURE__ */ import_react40.default.createElement(
|
|
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 : " ")));
|
|
52745
52792
|
}
|
|
52746
52793
|
function summarizePlan(plan2, summary, steps) {
|
|
52747
52794
|
const trimmedSummary = summary?.trim();
|
|
@@ -52808,9 +52855,9 @@ function PlanRefineInput({ mode: mode2, questions, onSubmit, onCancel }) {
|
|
|
52808
52855
|
title: meta.title,
|
|
52809
52856
|
footerHint: t("planFlow.refineFooter")
|
|
52810
52857
|
},
|
|
52811
|
-
showQuestions ? /* @__PURE__ */ import_react41.default.createElement(
|
|
52812
|
-
/* @__PURE__ */ import_react41.default.createElement(
|
|
52813
|
-
/* @__PURE__ */ import_react41.default.createElement(
|
|
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" : " "))
|
|
52814
52861
|
);
|
|
52815
52862
|
}
|
|
52816
52863
|
|
|
@@ -52863,15 +52910,15 @@ function PlanReviseConfirmInner({
|
|
|
52863
52910
|
kept: keptCount
|
|
52864
52911
|
})
|
|
52865
52912
|
},
|
|
52866
|
-
/* @__PURE__ */ import_react42.default.createElement(
|
|
52867
|
-
summary ? /* @__PURE__ */ import_react42.default.createElement(
|
|
52868
|
-
/* @__PURE__ */ import_react42.default.createElement(
|
|
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) => {
|
|
52869
52916
|
const risk = riskDots(row2.step.risk);
|
|
52870
52917
|
const prefix = row2.kind === "removed" ? "\u2212" : row2.kind === "added" ? "+" : " ";
|
|
52871
52918
|
const prefixColor = row2.kind === "removed" ? "#f87171" : row2.kind === "added" ? "#4ade80" : "#94a3b8";
|
|
52872
52919
|
const dim = row2.kind === "kept";
|
|
52873
52920
|
const strike = row2.kind === "removed";
|
|
52874
|
-
return /* @__PURE__ */ import_react42.default.createElement(
|
|
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}`));
|
|
52875
52922
|
})),
|
|
52876
52923
|
/* @__PURE__ */ import_react42.default.createElement(
|
|
52877
52924
|
SingleSelect,
|
|
@@ -52990,8 +53037,8 @@ function ReviseRow({
|
|
|
52990
53037
|
const marker = row2.done ? "[\u2713]" : row2.skipped ? "[s]" : focused ? "[ ]" : "[ ]";
|
|
52991
53038
|
const markerColor = row2.done ? TONE.ok : row2.skipped ? FG.faint : focused ? TONE.brand : FG.faint;
|
|
52992
53039
|
const titleColor = row2.done ? FG.sub : row2.skipped ? FG.faint : focused ? FG.strong : FG.sub;
|
|
52993
|
-
const focusGlyph = focused ? /* @__PURE__ */ import_react43.default.createElement(
|
|
52994
|
-
return /* @__PURE__ */ import_react43.default.createElement(
|
|
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);
|
|
52995
53042
|
}
|
|
52996
53043
|
|
|
52997
53044
|
// src/cli/ui/SessionPicker.tsx
|
|
@@ -53027,7 +53074,7 @@ function SessionPicker({
|
|
|
53027
53074
|
onFocusChange?.(focus);
|
|
53028
53075
|
}, [focus, onFocusChange]);
|
|
53029
53076
|
const [renaming, setRenaming] = (0, import_react44.useState)(null);
|
|
53030
|
-
const { stdout } =
|
|
53077
|
+
const { stdout } = bv();
|
|
53031
53078
|
const rows = stdout?.rows ?? 40;
|
|
53032
53079
|
const visibleCount = Math.max(3, rows - PAGE_MARGIN4);
|
|
53033
53080
|
const snapshot = (0, import_react44.useMemo)(
|
|
@@ -53158,13 +53205,13 @@ function SessionPicker({
|
|
|
53158
53205
|
const end = Math.min(activeSessions.length, start + visibleCount);
|
|
53159
53206
|
const shown = activeSessions.slice(start, end);
|
|
53160
53207
|
const hiddenBelow = activeSessions.length - end;
|
|
53161
|
-
return /* @__PURE__ */ import_react44.default.createElement(
|
|
53162
|
-
|
|
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,
|
|
53163
53210
|
{
|
|
53164
53211
|
color: FG.meta
|
|
53165
53212
|
},
|
|
53166
53213
|
` \xB7 /${query} (${activeSessions.length}/${sessions2.length})`
|
|
53167
|
-
) : null), /* @__PURE__ */ import_react44.default.createElement(
|
|
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(
|
|
53168
53215
|
SessionRow,
|
|
53169
53216
|
{
|
|
53170
53217
|
key: s.name,
|
|
@@ -53172,7 +53219,7 @@ function SessionPicker({
|
|
|
53172
53219
|
focused: start + i === focus,
|
|
53173
53220
|
walletCurrency
|
|
53174
53221
|
}
|
|
53175
|
-
)), hiddenBelow > 0 ? /* @__PURE__ */ import_react44.default.createElement(
|
|
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"))));
|
|
53176
53223
|
}
|
|
53177
53224
|
function SessionRow({
|
|
53178
53225
|
info,
|
|
@@ -53186,7 +53233,7 @@ function SessionRow({
|
|
|
53186
53233
|
const currency = walletCurrency ?? info.meta.balanceCurrency;
|
|
53187
53234
|
const costLabel = info.meta.totalCostUsd !== void 0 ? formatCost(info.meta.totalCostUsd, currency, 2) : "";
|
|
53188
53235
|
const time = relativeTime2(info.mtime);
|
|
53189
|
-
return /* @__PURE__ */ import_react44.default.createElement(
|
|
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);
|
|
53190
53237
|
}
|
|
53191
53238
|
function truncate2(s, max) {
|
|
53192
53239
|
if (s.length <= max) return s;
|
|
@@ -53249,7 +53296,7 @@ function ShellConfirm({ prompt, onChoose }) {
|
|
|
53249
53296
|
metaRight: t("shellConfirm.awaiting"),
|
|
53250
53297
|
footerHint: t("shellConfirm.pickFooter")
|
|
53251
53298
|
},
|
|
53252
|
-
/* @__PURE__ */ import_react45.default.createElement(
|
|
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 ?? ""))),
|
|
53253
53300
|
/* @__PURE__ */ import_react45.default.createElement(InfoRows2, { meta: prompt.meta }),
|
|
53254
53301
|
/* @__PURE__ */ import_react45.default.createElement(
|
|
53255
53302
|
SingleSelect,
|
|
@@ -53287,7 +53334,7 @@ function InfoRows2({ meta }) {
|
|
|
53287
53334
|
value
|
|
53288
53335
|
}));
|
|
53289
53336
|
const labelWidth = Math.max(...rows.map((r) => r.label.length));
|
|
53290
|
-
return /* @__PURE__ */ import_react45.default.createElement(
|
|
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))));
|
|
53291
53338
|
}
|
|
53292
53339
|
|
|
53293
53340
|
// src/cli/ui/ThemePicker.tsx
|
|
@@ -53303,7 +53350,7 @@ function ThemePicker({
|
|
|
53303
53350
|
label: value,
|
|
53304
53351
|
hint: describeTheme(value, currentPreference, activeTheme)
|
|
53305
53352
|
}));
|
|
53306
|
-
return /* @__PURE__ */ import_react46.default.createElement(
|
|
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(
|
|
53307
53354
|
SingleSelect,
|
|
53308
53355
|
{
|
|
53309
53356
|
items,
|
|
@@ -53333,8 +53380,8 @@ function WelcomeBanner({
|
|
|
53333
53380
|
const tagline = inCodeMode ? t("ui.taglineCode") : t("ui.taglineChat");
|
|
53334
53381
|
const taglineSub = t("ui.taglineSub");
|
|
53335
53382
|
const startTextRaw = t("ui.startSessionHint");
|
|
53336
|
-
return /* @__PURE__ */ import_react47.default.createElement(
|
|
53337
|
-
|
|
53383
|
+
return /* @__PURE__ */ import_react47.default.createElement(W, { flexDirection: "column", alignItems: "center", marginY: 1 }, /* @__PURE__ */ import_react47.default.createElement(
|
|
53384
|
+
W,
|
|
53338
53385
|
{
|
|
53339
53386
|
flexDirection: "column",
|
|
53340
53387
|
alignItems: "center",
|
|
@@ -53343,9 +53390,9 @@ function WelcomeBanner({
|
|
|
53343
53390
|
paddingX: 4,
|
|
53344
53391
|
paddingY: 1
|
|
53345
53392
|
},
|
|
53346
|
-
/* @__PURE__ */ import_react47.default.createElement(
|
|
53347
|
-
/* @__PURE__ */ import_react47.default.createElement(
|
|
53348
|
-
), /* @__PURE__ */ import_react47.default.createElement(
|
|
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);
|
|
53349
53396
|
}
|
|
53350
53397
|
|
|
53351
53398
|
// src/cli/ui/WorkspacePicker.tsx
|
|
@@ -53370,7 +53417,7 @@ function WorkspacePicker({
|
|
|
53370
53417
|
(0, import_react48.useEffect)(() => {
|
|
53371
53418
|
setFocus((f) => Math.max(0, Math.min(f, maxFocus)));
|
|
53372
53419
|
}, [maxFocus]);
|
|
53373
|
-
const { stdout } =
|
|
53420
|
+
const { stdout } = bv();
|
|
53374
53421
|
const rows = stdout?.rows ?? 40;
|
|
53375
53422
|
const visibleCount = Math.max(3, rows - PAGE_MARGIN5);
|
|
53376
53423
|
useKeystroke((ev) => {
|
|
@@ -53427,13 +53474,13 @@ function WorkspacePicker({
|
|
|
53427
53474
|
const end = Math.min(activeWorkspaces.length, start + visibleCount);
|
|
53428
53475
|
const shown = activeWorkspaces.slice(start, end);
|
|
53429
53476
|
const hiddenBelow = activeWorkspaces.length - end;
|
|
53430
|
-
return /* @__PURE__ */ import_react48.default.createElement(
|
|
53431
|
-
|
|
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,
|
|
53432
53479
|
{
|
|
53433
53480
|
color: FG.meta
|
|
53434
53481
|
},
|
|
53435
53482
|
` \xB7 /${query} (${activeWorkspaces.length}/${workspaces.length})`
|
|
53436
|
-
) : null), /* @__PURE__ */ import_react48.default.createElement(
|
|
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"))));
|
|
53437
53484
|
}
|
|
53438
53485
|
function WorkspaceRow({
|
|
53439
53486
|
info,
|
|
@@ -53446,7 +53493,7 @@ function WorkspaceRow({
|
|
|
53446
53493
|
count: info.sessions
|
|
53447
53494
|
}
|
|
53448
53495
|
);
|
|
53449
|
-
return /* @__PURE__ */ import_react48.default.createElement(
|
|
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));
|
|
53450
53497
|
}
|
|
53451
53498
|
function oneLine2(s) {
|
|
53452
53499
|
return s.replace(/\s+/g, " ").trim();
|
|
@@ -54590,7 +54637,7 @@ function CompactionCard({ card }) {
|
|
|
54590
54637
|
title: "compacted history",
|
|
54591
54638
|
meta: [`${card.summary.length.toLocaleString()} chars \xB7 ${lines.length} lines`]
|
|
54592
54639
|
}
|
|
54593
|
-
), previewLines.map((line, i) => /* @__PURE__ */ import_react61.default.createElement(
|
|
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);
|
|
54594
54641
|
}
|
|
54595
54642
|
|
|
54596
54643
|
// src/cli/ui/cards/CtxCard.tsx
|
|
@@ -54598,7 +54645,7 @@ var import_react62 = __toESM(require_react(), 1);
|
|
|
54598
54645
|
var BAR_CELLS = 32;
|
|
54599
54646
|
function row(label, tokens, ratio, color) {
|
|
54600
54647
|
const filled = Math.max(0, Math.min(BAR_CELLS, Math.round(ratio * BAR_CELLS)));
|
|
54601
|
-
return /* @__PURE__ */ import_react62.default.createElement(
|
|
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)}%`));
|
|
54602
54649
|
}
|
|
54603
54650
|
function CtxCard({ card }) {
|
|
54604
54651
|
const cap = Math.max(1, card.ctxMax);
|
|
@@ -54612,8 +54659,8 @@ function CtxCard({ card }) {
|
|
|
54612
54659
|
title: t("cardTitles.context"),
|
|
54613
54660
|
meta: [`${used.toLocaleString()} / ${cap.toLocaleString()} (${usedPct.toFixed(1)}%)`]
|
|
54614
54661
|
}
|
|
54615
|
-
), 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(
|
|
54616
|
-
|
|
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,
|
|
54617
54664
|
{
|
|
54618
54665
|
color: FG.faint
|
|
54619
54666
|
},
|
|
@@ -54648,7 +54695,7 @@ function DiffCard({ card }) {
|
|
|
54648
54695
|
{ text: `-${card.stats.del}`, color: TONE.err }
|
|
54649
54696
|
]
|
|
54650
54697
|
}
|
|
54651
|
-
), card.hunks.map((hunk) => /* @__PURE__ */ import_react63.default.createElement(
|
|
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"))));
|
|
54652
54699
|
}
|
|
54653
54700
|
|
|
54654
54701
|
// src/cli/ui/cards/DoctorCard.tsx
|
|
@@ -54688,7 +54735,7 @@ function DoctorCard({ card }) {
|
|
|
54688
54735
|
title: t("cardTitles.doctor"),
|
|
54689
54736
|
meta: [summary]
|
|
54690
54737
|
}
|
|
54691
|
-
), card.checks.map((c) => /* @__PURE__ */ import_react64.default.createElement(
|
|
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)))));
|
|
54692
54739
|
}
|
|
54693
54740
|
|
|
54694
54741
|
// src/cli/ui/cards/ErrorCard.tsx
|
|
@@ -54710,10 +54757,10 @@ function ErrorCard({ card }) {
|
|
|
54710
54757
|
title: card.title || t("cardTitles.error"),
|
|
54711
54758
|
meta: retryNote ? [retryNote] : void 0
|
|
54712
54759
|
}
|
|
54713
|
-
), messageLines.map((line, i) => /* @__PURE__ */ import_react65.default.createElement(
|
|
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(
|
|
54714
54761
|
stackHidden === 1 ? "cardLabels.earlierStackLine" : "cardLabels.earlierStackLines",
|
|
54715
54762
|
{ count: stackHidden }
|
|
54716
|
-
)) : null, stackVisible.map((line, i) => /* @__PURE__ */ import_react65.default.createElement(
|
|
54763
|
+
)) : null, stackVisible.map((line, i) => /* @__PURE__ */ import_react65.default.createElement(L, { key: `${card.id}:stk:${stackHidden + i}`, color: FG.meta }, line || " "))) : null);
|
|
54717
54764
|
}
|
|
54718
54765
|
|
|
54719
54766
|
// src/cli/ui/cards/LiveCard.tsx
|
|
@@ -54728,7 +54775,7 @@ var TONE_TO_COLOR = {
|
|
|
54728
54775
|
ghost: FG.meta
|
|
54729
54776
|
};
|
|
54730
54777
|
var VARIANT_GLYPH = {
|
|
54731
|
-
thinking:
|
|
54778
|
+
thinking: "\u25C6",
|
|
54732
54779
|
undo: "\u21B6",
|
|
54733
54780
|
ctxPressure: "\u26A0",
|
|
54734
54781
|
aborted: "\u2014",
|
|
@@ -54736,12 +54783,15 @@ var VARIANT_GLYPH = {
|
|
|
54736
54783
|
checkpoint: "\u25CF",
|
|
54737
54784
|
stepProgress: "\u2713",
|
|
54738
54785
|
mcpEvent: "\u25CF",
|
|
54739
|
-
sessionOp: "\
|
|
54786
|
+
sessionOp: "\u25CF"
|
|
54740
54787
|
};
|
|
54788
|
+
var PULSING_VARIANTS = /* @__PURE__ */ new Set(["thinking", "retry", "sessionOp"]);
|
|
54741
54789
|
function LiveCard({ card }) {
|
|
54742
54790
|
const color = TONE_TO_COLOR[card.tone];
|
|
54743
|
-
const
|
|
54744
|
-
|
|
54791
|
+
const isPulsing = PULSING_VARIANTS.has(card.variant);
|
|
54792
|
+
const frames = card.variant === "thinking" ? PULSE_DIAMOND : PULSE_CIRCLE;
|
|
54793
|
+
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);
|
|
54745
54795
|
}
|
|
54746
54796
|
|
|
54747
54797
|
// src/cli/ui/cards/MemoryCard.tsx
|
|
@@ -54792,7 +54842,7 @@ function MemoryCard({ card }) {
|
|
|
54792
54842
|
const all = card.entries.filter((e) => e.category === category);
|
|
54793
54843
|
const shown = all.slice(0, 5);
|
|
54794
54844
|
const remaining = all.length - shown.length;
|
|
54795
|
-
return /* @__PURE__ */ import_react67.default.createElement(
|
|
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);
|
|
54796
54846
|
}));
|
|
54797
54847
|
}
|
|
54798
54848
|
function countByCategory(entries) {
|
|
@@ -54812,9 +54862,7 @@ var import_react71 = __toESM(require_react(), 1);
|
|
|
54812
54862
|
// src/cli/ui/primitives/CursorBlock.tsx
|
|
54813
54863
|
var import_react68 = __toESM(require_react(), 1);
|
|
54814
54864
|
function CursorBlock() {
|
|
54815
|
-
|
|
54816
|
-
const on = Math.floor(tick / 4) % 2 === 0;
|
|
54817
|
-
return /* @__PURE__ */ import_react68.default.createElement(Text, { inverse: on, color: CARD.streaming.color }, " ");
|
|
54865
|
+
return /* @__PURE__ */ import_react68.default.createElement(L, { inverse: true, color: CARD.streaming.color }, " ");
|
|
54818
54866
|
}
|
|
54819
54867
|
|
|
54820
54868
|
// src/cli/ui/state/verbose-context.ts
|
|
@@ -54893,7 +54941,7 @@ function ReasoningCard({
|
|
|
54893
54941
|
card,
|
|
54894
54942
|
expanded
|
|
54895
54943
|
}) {
|
|
54896
|
-
const { stdout } =
|
|
54944
|
+
const { stdout } = bv();
|
|
54897
54945
|
const cols = stdout?.columns ?? 80;
|
|
54898
54946
|
const lineCells = Math.max(20, cols - 4);
|
|
54899
54947
|
const verbose = import_react71.default.useContext(VerboseContext);
|
|
@@ -54902,33 +54950,32 @@ function ReasoningCard({
|
|
|
54902
54950
|
const isEmpty = !card.streaming && !card.aborted && card.text.length === 0;
|
|
54903
54951
|
const showBody = expanded && (card.text.length > 0 || card.streaming || isEmpty);
|
|
54904
54952
|
const tone = card.aborted ? TONE.err : card.streaming ? TONE_ACTIVE.accent : TONE.accent;
|
|
54905
|
-
return /* @__PURE__ */ import_react71.default.createElement(Card, { tone }, /* @__PURE__ */ import_react71.default.createElement(ReasoningHeader, { card, isEmpty }), showBody && (isEmpty ? /* @__PURE__ */ import_react71.default.createElement(EmptyHint, null) : card.streaming ? /* @__PURE__ */ import_react71.default.createElement(StreamingPreview, { card, visualLines, lineCells }) : verbose ? /* @__PURE__ */ import_react71.default.createElement(BodyLines, { card, lines: visualLines, lineCells, anchor: true }) : /* @__PURE__ */ import_react71.default.createElement(SettledPreview, { card, visualLines, lineCells })));
|
|
54953
|
+
return /* @__PURE__ */ import_react71.default.createElement(Card, { tone }, /* @__PURE__ */ import_react71.default.createElement(ReasoningHeader, { card, isEmpty, expanded }), showBody && (isEmpty ? /* @__PURE__ */ import_react71.default.createElement(EmptyHint, null) : card.streaming ? /* @__PURE__ */ import_react71.default.createElement(StreamingPreview, { card, visualLines, lineCells }) : verbose ? /* @__PURE__ */ import_react71.default.createElement(BodyLines, { card, lines: visualLines, lineCells, anchor: true }) : /* @__PURE__ */ import_react71.default.createElement(SettledPreview, { card, visualLines, lineCells })));
|
|
54906
54954
|
}
|
|
54907
54955
|
function ReasoningHeader({
|
|
54908
54956
|
card,
|
|
54909
|
-
isEmpty
|
|
54957
|
+
isEmpty,
|
|
54958
|
+
expanded
|
|
54910
54959
|
}) {
|
|
54911
54960
|
const streamingActive = card.streaming && !card.aborted;
|
|
54912
|
-
const
|
|
54913
|
-
const
|
|
54914
|
-
const title2 = streamingActive ? t("cardTitles.reasoningEllipsis") : card.aborted ? t("cardTitles.reasoningAborted") : t("cardTitles.reasoning");
|
|
54915
|
-
const pill = isEmpty ? PILL_SECTION.empty : PILL_SECTION.reason;
|
|
54916
|
-
const meta = [];
|
|
54961
|
+
const baseTitle = card.aborted ? t("cardTitles.reasoningAborted") : streamingActive ? t("cardTitles.reasoningEllipsis") : t("cardTitles.reasoning");
|
|
54962
|
+
const metaParts = [];
|
|
54917
54963
|
const m = headerMeta(card);
|
|
54918
|
-
if (m)
|
|
54964
|
+
if (m) metaParts.push(m);
|
|
54919
54965
|
const duration = headerDuration(card);
|
|
54920
|
-
if (duration)
|
|
54966
|
+
if (duration) metaParts.push(duration);
|
|
54967
|
+
const metaTrail2 = metaParts.length > 0 ? ` \xB7 ${metaParts.join(" \xB7 ")}` : "";
|
|
54968
|
+
const collapsedHint = !expanded && card.text.length > 0 ? " (\u2303o to expand)" : "";
|
|
54921
54969
|
const modelBadge = card.model ? modelBadgeFor(card.model) : null;
|
|
54922
|
-
return /* @__PURE__ */ import_react71.default.createElement(
|
|
54923
|
-
|
|
54970
|
+
return /* @__PURE__ */ import_react71.default.createElement(W, { flexDirection: "row", gap: 1 }, /* @__PURE__ */ import_react71.default.createElement(
|
|
54971
|
+
Pulse,
|
|
54924
54972
|
{
|
|
54925
|
-
|
|
54926
|
-
|
|
54927
|
-
|
|
54928
|
-
|
|
54929
|
-
right: /* @__PURE__ */ import_react71.default.createElement(import_react71.default.Fragment, null, streamingActive ? /* @__PURE__ */ import_react71.default.createElement(Spinner, { kind: "braille", color: TONE_ACTIVE.accent }) : null, modelBadge ? /* @__PURE__ */ import_react71.default.createElement(Pill2, { label: modelBadge.label, ...PILL_MODEL[modelBadge.kind], bold: false }) : null)
|
|
54973
|
+
active: streamingActive,
|
|
54974
|
+
frames: PULSE_DIAMOND,
|
|
54975
|
+
settled: "\u25C6",
|
|
54976
|
+
color: card.aborted ? TONE.err : FG.faint
|
|
54930
54977
|
}
|
|
54931
|
-
);
|
|
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);
|
|
54932
54979
|
}
|
|
54933
54980
|
function headerMeta(card) {
|
|
54934
54981
|
if (card.streaming) {
|
|
@@ -54947,7 +54994,7 @@ function headerDuration(card) {
|
|
|
54947
54994
|
function StreamingPreview({ card, visualLines, lineCells }) {
|
|
54948
54995
|
const visible = visualLines.slice(-STREAMING_PREVIEW_LINES);
|
|
54949
54996
|
const hasOverflow = visualLines.length > visible.length;
|
|
54950
|
-
return /* @__PURE__ */ import_react71.default.createElement(import_react71.default.Fragment, null, hasOverflow ? /* @__PURE__ */ import_react71.default.createElement(
|
|
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(
|
|
54951
54998
|
BodyLines,
|
|
54952
54999
|
{
|
|
54953
55000
|
card,
|
|
@@ -54982,7 +55029,7 @@ function SettledPreview({ card, visualLines, lineCells }) {
|
|
|
54982
55029
|
));
|
|
54983
55030
|
}
|
|
54984
55031
|
function EmptyHint() {
|
|
54985
|
-
return /* @__PURE__ */ import_react71.default.createElement(
|
|
55032
|
+
return /* @__PURE__ */ import_react71.default.createElement(L, { italic: true, color: FG.faint }, "no thinking \u2014 direct answer");
|
|
54986
55033
|
}
|
|
54987
55034
|
function BodyLines({
|
|
54988
55035
|
card,
|
|
@@ -54997,17 +55044,17 @@ function BodyLines({
|
|
|
54997
55044
|
return /* @__PURE__ */ import_react71.default.createElement(import_react71.default.Fragment, null, lines.map((line, i) => {
|
|
54998
55045
|
const isLast = i === lines.length - 1;
|
|
54999
55046
|
const isFirst = i === 0;
|
|
55000
|
-
return /* @__PURE__ */ import_react71.default.createElement(
|
|
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));
|
|
55001
55048
|
}));
|
|
55002
55049
|
}
|
|
55003
55050
|
function MidElisionHint({ droppedLines }) {
|
|
55004
|
-
return /* @__PURE__ */ import_react71.default.createElement(
|
|
55051
|
+
return /* @__PURE__ */ import_react71.default.createElement(L, { color: FG.faint }, `\u22EF ${droppedLines} line${droppedLines === 1 ? "" : "s"} elided`);
|
|
55005
55052
|
}
|
|
55006
55053
|
function ScrollPastHint({ card }) {
|
|
55007
55054
|
const parts = [];
|
|
55008
55055
|
if (card.paragraphs > 0) parts.push(`${card.paragraphs} \xB6`);
|
|
55009
55056
|
if (card.tokens > 0) parts.push(`~${card.tokens.toLocaleString()} tok`);
|
|
55010
|
-
return /* @__PURE__ */ import_react71.default.createElement(
|
|
55057
|
+
return /* @__PURE__ */ import_react71.default.createElement(L, { color: FG.faint }, `\u22EF ${parts.join(" + ")} scrolled past \xB7 /reasoning last`);
|
|
55011
55058
|
}
|
|
55012
55059
|
|
|
55013
55060
|
// src/cli/ui/cards/SearchCard.tsx
|
|
@@ -55029,7 +55076,7 @@ function SearchCard({ card }) {
|
|
|
55029
55076
|
subtitle: `"${card.query}"`,
|
|
55030
55077
|
meta: [stats3, elapsed]
|
|
55031
55078
|
}
|
|
55032
|
-
), grouped.map(([file, hits]) => /* @__PURE__ */ import_react72.default.createElement(
|
|
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(
|
|
55033
55080
|
card.hits.length - 10 === 1 ? "cardLabels.moreHitSingular" : "cardLabels.moreHitsPlural",
|
|
55034
55081
|
{ count: card.hits.length - 10 }
|
|
55035
55082
|
)) : null);
|
|
@@ -55040,9 +55087,9 @@ function HighlightedLine({
|
|
|
55040
55087
|
end
|
|
55041
55088
|
}) {
|
|
55042
55089
|
if (start < 0 || end <= start || end > text2.length) {
|
|
55043
|
-
return /* @__PURE__ */ import_react72.default.createElement(
|
|
55090
|
+
return /* @__PURE__ */ import_react72.default.createElement(L, { color: FG.sub }, text2);
|
|
55044
55091
|
}
|
|
55045
|
-
return /* @__PURE__ */ import_react72.default.createElement(import_react72.default.Fragment, null, /* @__PURE__ */ import_react72.default.createElement(
|
|
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)));
|
|
55046
55093
|
}
|
|
55047
55094
|
function groupByFile(hits) {
|
|
55048
55095
|
const map = /* @__PURE__ */ new Map();
|
|
@@ -55069,13 +55116,13 @@ var MarkdownWidthCtx = import_react74.default.createContext(void 0);
|
|
|
55069
55116
|
function useWidth() {
|
|
55070
55117
|
const ctx = import_react74.default.useContext(MarkdownWidthCtx);
|
|
55071
55118
|
if (ctx !== void 0) return ctx;
|
|
55072
|
-
return (
|
|
55119
|
+
return (bv()?.stdout?.columns ?? process.stdout.columns ?? 80) - BODY_LEFT_CELLS;
|
|
55073
55120
|
}
|
|
55074
55121
|
marked.setOptions({ gfm: true, breaks: false });
|
|
55075
55122
|
function Markdown({ text: text2, width }) {
|
|
55076
55123
|
const tokens = import_react74.default.useMemo(() => marked.lexer(text2), [text2]);
|
|
55077
55124
|
const ctxWidth = width !== void 0 ? Math.max(1, width) : void 0;
|
|
55078
|
-
return /* @__PURE__ */ import_react74.default.createElement(MarkdownWidthCtx.Provider, { value: ctxWidth }, /* @__PURE__ */ import_react74.default.createElement(
|
|
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 }))));
|
|
55079
55126
|
}
|
|
55080
55127
|
function BlockToken({ token }) {
|
|
55081
55128
|
switch (token.type) {
|
|
@@ -55094,21 +55141,21 @@ function BlockToken({ token }) {
|
|
|
55094
55141
|
case "table":
|
|
55095
55142
|
return /* @__PURE__ */ import_react74.default.createElement(Table, { token });
|
|
55096
55143
|
case "html":
|
|
55097
|
-
return /* @__PURE__ */ import_react74.default.createElement(
|
|
55144
|
+
return /* @__PURE__ */ import_react74.default.createElement(L, { color: FG.body }, token.text);
|
|
55098
55145
|
case "space":
|
|
55099
55146
|
return null;
|
|
55100
55147
|
default:
|
|
55101
|
-
return /* @__PURE__ */ import_react74.default.createElement(
|
|
55148
|
+
return /* @__PURE__ */ import_react74.default.createElement(L, { color: FG.body }, token.raw ?? "");
|
|
55102
55149
|
}
|
|
55103
55150
|
}
|
|
55104
55151
|
function Heading({ token }) {
|
|
55105
|
-
return /* @__PURE__ */ import_react74.default.createElement(
|
|
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)} `));
|
|
55106
55153
|
}
|
|
55107
55154
|
function Paragraph({ token }) {
|
|
55108
|
-
return /* @__PURE__ */ import_react74.default.createElement(
|
|
55155
|
+
return /* @__PURE__ */ import_react74.default.createElement(L, { color: FG.body }, /* @__PURE__ */ import_react74.default.createElement(Inline, { tokens: token.tokens ?? [] }));
|
|
55109
55156
|
}
|
|
55110
55157
|
function List({ token, depth }) {
|
|
55111
|
-
return /* @__PURE__ */ import_react74.default.createElement(
|
|
55158
|
+
return /* @__PURE__ */ import_react74.default.createElement(W, { flexDirection: "column" }, token.items.map((item, i) => /* @__PURE__ */ import_react74.default.createElement(
|
|
55112
55159
|
ListItem,
|
|
55113
55160
|
{
|
|
55114
55161
|
key: `${i}-${item.text.slice(0, 24)}`,
|
|
@@ -55129,12 +55176,12 @@ function ListItem({
|
|
|
55129
55176
|
const markerColor = item.task ? item.checked ? TONE.ok : FG.faint : FG.meta;
|
|
55130
55177
|
const dim = item.task && item.checked === true;
|
|
55131
55178
|
const indent = " ".repeat(depth + 1);
|
|
55132
|
-
return /* @__PURE__ */ import_react74.default.createElement(
|
|
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) => {
|
|
55133
55180
|
if (tok.type === "text") {
|
|
55134
55181
|
const inner = tok.tokens;
|
|
55135
55182
|
return (
|
|
55136
55183
|
// biome-ignore lint/suspicious/noArrayIndexKey: list-item children are positional and stable per render
|
|
55137
|
-
/* @__PURE__ */ import_react74.default.createElement(
|
|
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)
|
|
55138
55185
|
);
|
|
55139
55186
|
}
|
|
55140
55187
|
if (tok.type === "list") {
|
|
@@ -55149,9 +55196,9 @@ function CodeBlock2({ token }) {
|
|
|
55149
55196
|
() => highlightCode(decodeHtmlEntities(token.text), lang).split("\n"),
|
|
55150
55197
|
[token.text, lang]
|
|
55151
55198
|
);
|
|
55152
|
-
return /* @__PURE__ */ import_react74.default.createElement(
|
|
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) => (
|
|
55153
55200
|
// biome-ignore lint/suspicious/noArrayIndexKey: code lines are positional and stable per render
|
|
55154
|
-
/* @__PURE__ */ import_react74.default.createElement(
|
|
55201
|
+
/* @__PURE__ */ import_react74.default.createElement(L, { key: `code-${i}`, backgroundColor: SURFACE.bgElev }, ` ${line} `)
|
|
55155
55202
|
))));
|
|
55156
55203
|
}
|
|
55157
55204
|
function highlightCode(source, lang) {
|
|
@@ -55164,12 +55211,12 @@ function highlightCode(source, lang) {
|
|
|
55164
55211
|
}
|
|
55165
55212
|
}
|
|
55166
55213
|
function Blockquote({ token }) {
|
|
55167
|
-
return /* @__PURE__ */ import_react74.default.createElement(
|
|
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 })))));
|
|
55168
55215
|
}
|
|
55169
55216
|
function HorizontalRule() {
|
|
55170
55217
|
const width = useWidth();
|
|
55171
55218
|
const rule = "\u2500".repeat(Math.max(width, 1));
|
|
55172
|
-
return /* @__PURE__ */ import_react74.default.createElement(
|
|
55219
|
+
return /* @__PURE__ */ import_react74.default.createElement(L, { color: FG.faint }, ` ${rule}`);
|
|
55173
55220
|
}
|
|
55174
55221
|
function tableLayout(headerCells, bodyCells, availableWidth) {
|
|
55175
55222
|
const colCount = headerCells.length;
|
|
@@ -55225,14 +55272,14 @@ function ColumnarTable({
|
|
|
55225
55272
|
gap
|
|
55226
55273
|
}) {
|
|
55227
55274
|
const ruleRow = widths.map((w) => "\u2500".repeat(w)).join(gap);
|
|
55228
|
-
return /* @__PURE__ */ import_react74.default.createElement(
|
|
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) => (
|
|
55229
55276
|
// biome-ignore lint/suspicious/noArrayIndexKey: header cells positional
|
|
55230
|
-
/* @__PURE__ */ import_react74.default.createElement(import_react74.default.Fragment, { key: `h-${i}` }, /* @__PURE__ */ import_react74.default.createElement(
|
|
55231
|
-
))), /* @__PURE__ */ import_react74.default.createElement(
|
|
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) => (
|
|
55232
55279
|
// biome-ignore lint/suspicious/noArrayIndexKey: body rows positional
|
|
55233
|
-
/* @__PURE__ */ import_react74.default.createElement(
|
|
55280
|
+
/* @__PURE__ */ import_react74.default.createElement(W, { key: `tr-${ri}` }, /* @__PURE__ */ import_react74.default.createElement(L, null, " "), row2.map((cell, i) => (
|
|
55234
55281
|
// biome-ignore lint/suspicious/noArrayIndexKey: cells positional
|
|
55235
|
-
/* @__PURE__ */ import_react74.default.createElement(import_react74.default.Fragment, { key: `c-${ri}-${i}` }, /* @__PURE__ */ import_react74.default.createElement(
|
|
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)
|
|
55236
55283
|
)))
|
|
55237
55284
|
)));
|
|
55238
55285
|
}
|
|
@@ -55242,14 +55289,14 @@ function FallbackTable({
|
|
|
55242
55289
|
labelPad,
|
|
55243
55290
|
valueCells
|
|
55244
55291
|
}) {
|
|
55245
|
-
return /* @__PURE__ */ import_react74.default.createElement(
|
|
55292
|
+
return /* @__PURE__ */ import_react74.default.createElement(W, { flexDirection: "column" }, bodyCells.map((row2, ri) => (
|
|
55246
55293
|
// biome-ignore lint/suspicious/noArrayIndexKey: body rows positional
|
|
55247
|
-
/* @__PURE__ */ import_react74.default.createElement(
|
|
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) => {
|
|
55248
55295
|
const label = `${padToCells(h, labelPad - 2)}: `;
|
|
55249
55296
|
const lines = wrapToCells(row2[ci] ?? "", valueCells);
|
|
55250
55297
|
return lines.map((line, li) => (
|
|
55251
55298
|
// biome-ignore lint/suspicious/noArrayIndexKey: fallback table lines are positional
|
|
55252
|
-
/* @__PURE__ */ import_react74.default.createElement(
|
|
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))
|
|
55253
55300
|
));
|
|
55254
55301
|
}))
|
|
55255
55302
|
)));
|
|
@@ -55266,10 +55313,10 @@ function looksLikeFileRef(path, hasLine) {
|
|
|
55266
55313
|
return ext.length >= 2;
|
|
55267
55314
|
}
|
|
55268
55315
|
function osc8(children, target, color) {
|
|
55269
|
-
return /* @__PURE__ */ import_react74.default.createElement(
|
|
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));
|
|
55270
55317
|
}
|
|
55271
55318
|
function renderInlineText(raw) {
|
|
55272
|
-
if (!raw) return /* @__PURE__ */ import_react74.default.createElement(
|
|
55319
|
+
if (!raw) return /* @__PURE__ */ import_react74.default.createElement(L, null, raw);
|
|
55273
55320
|
const out = [];
|
|
55274
55321
|
let cursor = 0;
|
|
55275
55322
|
const hits = [];
|
|
@@ -55280,7 +55327,7 @@ function renderInlineText(raw) {
|
|
|
55280
55327
|
hits.push({
|
|
55281
55328
|
start,
|
|
55282
55329
|
end,
|
|
55283
|
-
node: /* @__PURE__ */ import_react74.default.createElement(
|
|
55330
|
+
node: /* @__PURE__ */ import_react74.default.createElement(L, { color: TONE.warn, underline: true }, `@${path}`)
|
|
55284
55331
|
});
|
|
55285
55332
|
}
|
|
55286
55333
|
for (const m of raw.matchAll(FILE_REF_RE2)) {
|
|
@@ -55297,12 +55344,12 @@ function renderInlineText(raw) {
|
|
|
55297
55344
|
let key = 0;
|
|
55298
55345
|
for (const h of hits) {
|
|
55299
55346
|
if (h.start > cursor) {
|
|
55300
|
-
out.push(/* @__PURE__ */ import_react74.default.createElement(
|
|
55347
|
+
out.push(/* @__PURE__ */ import_react74.default.createElement(L, { key: `t-${key++}` }, raw.slice(cursor, h.start)));
|
|
55301
55348
|
}
|
|
55302
55349
|
out.push(/* @__PURE__ */ import_react74.default.createElement(import_react74.default.Fragment, { key: `r-${key++}` }, h.node));
|
|
55303
55350
|
cursor = h.end;
|
|
55304
55351
|
}
|
|
55305
|
-
if (cursor < raw.length) out.push(/* @__PURE__ */ import_react74.default.createElement(
|
|
55352
|
+
if (cursor < raw.length) out.push(/* @__PURE__ */ import_react74.default.createElement(L, { key: `t-${key++}` }, raw.slice(cursor)));
|
|
55306
55353
|
return /* @__PURE__ */ import_react74.default.createElement(import_react74.default.Fragment, null, out);
|
|
55307
55354
|
}
|
|
55308
55355
|
function InlineToken({ token }) {
|
|
@@ -55312,29 +55359,29 @@ function InlineToken({ token }) {
|
|
|
55312
55359
|
return t2.tokens ? /* @__PURE__ */ import_react74.default.createElement(Inline, { tokens: t2.tokens }) : renderInlineText(t2.text);
|
|
55313
55360
|
}
|
|
55314
55361
|
case "strong":
|
|
55315
|
-
return /* @__PURE__ */ import_react74.default.createElement(
|
|
55362
|
+
return /* @__PURE__ */ import_react74.default.createElement(L, { bold: true, color: FG.strong }, /* @__PURE__ */ import_react74.default.createElement(Inline, { tokens: token.tokens }));
|
|
55316
55363
|
case "em":
|
|
55317
|
-
return /* @__PURE__ */ import_react74.default.createElement(
|
|
55364
|
+
return /* @__PURE__ */ import_react74.default.createElement(L, { italic: true }, /* @__PURE__ */ import_react74.default.createElement(Inline, { tokens: token.tokens }));
|
|
55318
55365
|
case "codespan":
|
|
55319
|
-
return /* @__PURE__ */ import_react74.default.createElement(
|
|
55366
|
+
return /* @__PURE__ */ import_react74.default.createElement(L, { color: FG.strong, backgroundColor: SURFACE.bgElev }, ` ${decodeHtmlEntities(token.text)} `);
|
|
55320
55367
|
case "del":
|
|
55321
|
-
return /* @__PURE__ */ import_react74.default.createElement(
|
|
55368
|
+
return /* @__PURE__ */ import_react74.default.createElement(L, { color: TONE.err, strikethrough: true }, /* @__PURE__ */ import_react74.default.createElement(Inline, { tokens: token.tokens }));
|
|
55322
55369
|
case "link": {
|
|
55323
55370
|
const l = token;
|
|
55324
55371
|
return osc8(/* @__PURE__ */ import_react74.default.createElement(Inline, { tokens: l.tokens }), l.href, TONE.brand);
|
|
55325
55372
|
}
|
|
55326
55373
|
case "image": {
|
|
55327
55374
|
const im = token;
|
|
55328
|
-
return /* @__PURE__ */ import_react74.default.createElement(
|
|
55375
|
+
return /* @__PURE__ */ import_react74.default.createElement(L, { color: TONE.brand }, `[image: ${im.text || im.href}]`);
|
|
55329
55376
|
}
|
|
55330
55377
|
case "br":
|
|
55331
|
-
return /* @__PURE__ */ import_react74.default.createElement(
|
|
55378
|
+
return /* @__PURE__ */ import_react74.default.createElement(L, null, "\n");
|
|
55332
55379
|
case "escape":
|
|
55333
|
-
return /* @__PURE__ */ import_react74.default.createElement(
|
|
55380
|
+
return /* @__PURE__ */ import_react74.default.createElement(L, null, token.text);
|
|
55334
55381
|
case "html":
|
|
55335
|
-
return /* @__PURE__ */ import_react74.default.createElement(
|
|
55382
|
+
return /* @__PURE__ */ import_react74.default.createElement(L, null, token.text);
|
|
55336
55383
|
default:
|
|
55337
|
-
return /* @__PURE__ */ import_react74.default.createElement(
|
|
55384
|
+
return /* @__PURE__ */ import_react74.default.createElement(L, null, token.raw ?? "");
|
|
55338
55385
|
}
|
|
55339
55386
|
}
|
|
55340
55387
|
function plainText(tokens) {
|
|
@@ -55415,10 +55462,9 @@ function useLiveTokenRate(card, enabled2) {
|
|
|
55415
55462
|
}
|
|
55416
55463
|
var PILL_RATE = { bg: "#11141a", fg: "#8b949e" };
|
|
55417
55464
|
function StreamingCard({ card }) {
|
|
55418
|
-
const { stdout } =
|
|
55465
|
+
const { stdout } = bv();
|
|
55419
55466
|
const cols = stdout?.columns ?? 80;
|
|
55420
55467
|
const expanded = (0, import_react75.useContext)(LiveExpandContext);
|
|
55421
|
-
useSlowTick();
|
|
55422
55468
|
const liveRate = useLiveTokenRate(card, !card.done && !card.aborted);
|
|
55423
55469
|
const lineCells = Math.max(20, cols - 4);
|
|
55424
55470
|
const visualLines = useIncrementalWrap(card.text, lineCells);
|
|
@@ -55442,7 +55488,7 @@ function StreamingCard({ card }) {
|
|
|
55442
55488
|
const droppedAbove = Math.max(0, visualLines.length - visible.length);
|
|
55443
55489
|
const aborted = !!card.aborted;
|
|
55444
55490
|
const headColor = aborted ? TONE.err : TONE_ACTIVE.brand;
|
|
55445
|
-
const glyph = aborted ? "\u2298" : "\u25CF";
|
|
55491
|
+
const glyph = aborted ? "\u2298" : /* @__PURE__ */ import_react75.default.createElement(Pulse, { active: true, frames: PULSE_CIRCLE, settled: "\u25CF", color: headColor });
|
|
55446
55492
|
const headLabel = aborted ? t("cardLabels.aborted") : t("cardLabels.writing");
|
|
55447
55493
|
const liveRatePill = !aborted && liveRate.tokens >= MIN_TOKENS_FOR_RATE && liveRate.tps !== null ? /* @__PURE__ */ import_react75.default.createElement(Pill2, { label: `${liveRate.tps} t/s`, ...PILL_RATE, bold: false }) : null;
|
|
55448
55494
|
const expandPill = !aborted ? /* @__PURE__ */ import_react75.default.createElement(Pill2, { label: expanded ? "expanded \u2303o" : "preview \u2303o", ...PILL_RATE, bold: false }) : null;
|
|
@@ -55452,11 +55498,11 @@ function StreamingCard({ card }) {
|
|
|
55452
55498
|
glyph,
|
|
55453
55499
|
tone: headColor,
|
|
55454
55500
|
title: headLabel,
|
|
55455
|
-
right: /* @__PURE__ */ import_react75.default.createElement(import_react75.default.Fragment, null, liveRatePill, expandPill,
|
|
55501
|
+
right: /* @__PURE__ */ import_react75.default.createElement(import_react75.default.Fragment, null, liveRatePill, expandPill, modelPill)
|
|
55456
55502
|
}
|
|
55457
|
-
), expanded && droppedAbove > 0 ? /* @__PURE__ */ import_react75.default.createElement(
|
|
55503
|
+
), expanded && droppedAbove > 0 ? /* @__PURE__ */ import_react75.default.createElement(L, { color: FG.faint }, t(droppedAbove === 1 ? "cardLabels.earlierLine" : "cardLabels.earlierLines", {
|
|
55458
55504
|
count: droppedAbove
|
|
55459
|
-
})) : null, visible.map((line, i) => /* @__PURE__ */ import_react75.default.createElement(
|
|
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);
|
|
55460
55506
|
}
|
|
55461
55507
|
|
|
55462
55508
|
// src/cli/ui/cards/SubAgentCard.tsx
|
|
@@ -55477,13 +55523,13 @@ function SubAgentCard({ card }) {
|
|
|
55477
55523
|
return /* @__PURE__ */ import_react76.default.createElement(Card, { tone: headColor }, /* @__PURE__ */ import_react76.default.createElement(
|
|
55478
55524
|
CardHeader,
|
|
55479
55525
|
{
|
|
55480
|
-
glyph: headGlyph,
|
|
55526
|
+
glyph: isRunning ? /* @__PURE__ */ import_react76.default.createElement(Pulse, { active: true, frames: PULSE_HEX, settled: "\u232C", color: headColor }) : headGlyph,
|
|
55481
55527
|
tone: headColor,
|
|
55482
55528
|
title: t("cardTitles.subagent"),
|
|
55483
55529
|
subtitle: card.task,
|
|
55484
55530
|
meta: headerMeta2
|
|
55485
55531
|
}
|
|
55486
|
-
), card.name ? /* @__PURE__ */ import_react76.default.createElement(
|
|
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 }))));
|
|
55487
55533
|
}
|
|
55488
55534
|
function isChildDone(card) {
|
|
55489
55535
|
switch (card.kind) {
|
|
@@ -55500,23 +55546,25 @@ function ChildRow({ card }) {
|
|
|
55500
55546
|
const { fg, tone } = useThemeTokens();
|
|
55501
55547
|
const v = childVisual(card, tone.ok, tone.err, fg.faint);
|
|
55502
55548
|
const isDone = isChildDone(card);
|
|
55503
|
-
return /* @__PURE__ */ import_react76.default.createElement(import_react76.default.Fragment, null, v.statusGlyph, /* @__PURE__ */ import_react76.default.createElement(
|
|
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));
|
|
55504
55550
|
}
|
|
55505
|
-
function runningGlyph(color) {
|
|
55506
|
-
|
|
55551
|
+
function runningGlyph(color, kind) {
|
|
55552
|
+
const frames = kind === "tool" ? PULSE_SQUARE : kind === "streaming" ? PULSE_CIRCLE : PULSE_DIAMOND;
|
|
55553
|
+
const settled = kind === "tool" ? "\u25A3" : kind === "streaming" ? "\u25CF" : "\u25C6";
|
|
55554
|
+
return /* @__PURE__ */ import_react76.default.createElement(Pulse, { active: true, frames, settled, color });
|
|
55507
55555
|
}
|
|
55508
55556
|
function doneGlyph(color) {
|
|
55509
|
-
return /* @__PURE__ */ import_react76.default.createElement(
|
|
55557
|
+
return /* @__PURE__ */ import_react76.default.createElement(L, { color }, "\u2713");
|
|
55510
55558
|
}
|
|
55511
55559
|
function failedGlyph(color) {
|
|
55512
|
-
return /* @__PURE__ */ import_react76.default.createElement(
|
|
55560
|
+
return /* @__PURE__ */ import_react76.default.createElement(L, { color }, "\u2717");
|
|
55513
55561
|
}
|
|
55514
55562
|
function childVisual(card, doneColor, failedColor, fallbackColor) {
|
|
55515
55563
|
switch (card.kind) {
|
|
55516
55564
|
case "reasoning": {
|
|
55517
55565
|
const done = !card.streaming;
|
|
55518
55566
|
return {
|
|
55519
|
-
statusGlyph: done ? doneGlyph(doneColor) : runningGlyph(CARD.reasoning.color),
|
|
55567
|
+
statusGlyph: done ? doneGlyph(doneColor) : runningGlyph(CARD.reasoning.color, "reasoning"),
|
|
55520
55568
|
kindGlyph: "\u25CF",
|
|
55521
55569
|
kindColor: CARD.reasoning.color,
|
|
55522
55570
|
text: t("cardLabels.reasoningLabel", { count: card.paragraphs })
|
|
@@ -55525,7 +55573,7 @@ function childVisual(card, doneColor, failedColor, fallbackColor) {
|
|
|
55525
55573
|
case "tool": {
|
|
55526
55574
|
const elapsed = card.elapsedMs > 0 ? ` \xB7 ${(card.elapsedMs / 1e3).toFixed(2)}s` : "";
|
|
55527
55575
|
return {
|
|
55528
|
-
statusGlyph: card.done ? doneGlyph(doneColor) : runningGlyph(CARD.tool.color),
|
|
55576
|
+
statusGlyph: card.done ? doneGlyph(doneColor) : runningGlyph(CARD.tool.color, "tool"),
|
|
55529
55577
|
kindGlyph: "\u25CF",
|
|
55530
55578
|
kindColor: CARD.tool.color,
|
|
55531
55579
|
text: `${card.name}${elapsed}`
|
|
@@ -55533,7 +55581,7 @@ function childVisual(card, doneColor, failedColor, fallbackColor) {
|
|
|
55533
55581
|
}
|
|
55534
55582
|
case "streaming":
|
|
55535
55583
|
return {
|
|
55536
|
-
statusGlyph: card.done ? doneGlyph(doneColor) : runningGlyph(CARD.streaming.color),
|
|
55584
|
+
statusGlyph: card.done ? doneGlyph(doneColor) : runningGlyph(CARD.streaming.color, "streaming"),
|
|
55537
55585
|
kindGlyph: "\u25CF",
|
|
55538
55586
|
kindColor: CARD.streaming.color,
|
|
55539
55587
|
text: card.done ? t("cardLabels.response") : t("cardLabels.writing")
|
|
@@ -55554,7 +55602,7 @@ function childVisual(card, doneColor, failedColor, fallbackColor) {
|
|
|
55554
55602
|
};
|
|
55555
55603
|
default:
|
|
55556
55604
|
return {
|
|
55557
|
-
statusGlyph: /* @__PURE__ */ import_react76.default.createElement(
|
|
55605
|
+
statusGlyph: /* @__PURE__ */ import_react76.default.createElement(L, { color: fallbackColor }, "\xB7"),
|
|
55558
55606
|
kindGlyph: "\xB7",
|
|
55559
55607
|
kindColor: fallbackColor,
|
|
55560
55608
|
text: card.kind
|
|
@@ -55592,13 +55640,13 @@ function TaskCard({ card }) {
|
|
|
55592
55640
|
return /* @__PURE__ */ import_react77.default.createElement(Card, { tone: taskColor[card.status] }, /* @__PURE__ */ import_react77.default.createElement(
|
|
55593
55641
|
CardHeader,
|
|
55594
55642
|
{
|
|
55595
|
-
glyph: TASK_GLYPH[card.status],
|
|
55643
|
+
glyph: card.status === "running" ? /* @__PURE__ */ import_react77.default.createElement(Pulse, { active: true, frames: PULSE_TRIANGLE, settled: "\u25B6", color: taskColor[card.status] }) : TASK_GLYPH[card.status],
|
|
55596
55644
|
tone: taskColor[card.status],
|
|
55597
55645
|
title: t("cardTitles.task"),
|
|
55598
55646
|
subtitle: `${card.index} / ${card.total} ${card.title}`,
|
|
55599
55647
|
meta: [elapsed, card.status]
|
|
55600
55648
|
}
|
|
55601
|
-
), card.steps.map((step) => /* @__PURE__ */ import_react77.default.createElement(
|
|
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)));
|
|
55602
55650
|
}
|
|
55603
55651
|
|
|
55604
55652
|
// src/cli/ui/cards/TipCard.tsx
|
|
@@ -55609,7 +55657,7 @@ function TipCard({ card }) {
|
|
|
55609
55657
|
(max, sec) => sec.rows.reduce((m, r) => Math.max(m, stringWidth(r.key)), max),
|
|
55610
55658
|
0
|
|
55611
55659
|
);
|
|
55612
|
-
return /* @__PURE__ */ import_react78.default.createElement(
|
|
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(
|
|
55613
55661
|
TipRowRender,
|
|
55614
55662
|
{
|
|
55615
55663
|
key: row2.key,
|
|
@@ -55617,7 +55665,7 @@ function TipCard({ card }) {
|
|
|
55617
55665
|
keyWidth,
|
|
55618
55666
|
indent: section.title ? 2 : 0
|
|
55619
55667
|
}
|
|
55620
|
-
)))), card.footer ? /* @__PURE__ */ import_react78.default.createElement(
|
|
55668
|
+
)))), card.footer ? /* @__PURE__ */ import_react78.default.createElement(W, { marginTop: 1 }, /* @__PURE__ */ import_react78.default.createElement(L, { color: FG.faint }, card.footer)) : null);
|
|
55621
55669
|
}
|
|
55622
55670
|
function TipRowRender({
|
|
55623
55671
|
row: row2,
|
|
@@ -55626,7 +55674,7 @@ function TipRowRender({
|
|
|
55626
55674
|
}) {
|
|
55627
55675
|
const pad = " ".repeat(Math.max(0, keyWidth - stringWidth(row2.key) + KEY_GUTTER));
|
|
55628
55676
|
const lead = indent > 0 ? " ".repeat(indent) : "";
|
|
55629
|
-
return /* @__PURE__ */ import_react78.default.createElement(
|
|
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));
|
|
55630
55678
|
}
|
|
55631
55679
|
|
|
55632
55680
|
// src/cli/ui/cards/ToolCard.tsx
|
|
@@ -55660,7 +55708,7 @@ function tailLinesFor(name) {
|
|
|
55660
55708
|
return /(?:^|_)(read|search|list|tree|get|status|diff|fetch|grep)(_|$)/.test(lower) || lower === "job_output" ? READ_TAIL : OTHER_TAIL;
|
|
55661
55709
|
}
|
|
55662
55710
|
function ToolCard({ card }) {
|
|
55663
|
-
const { stdout } =
|
|
55711
|
+
const { stdout } = bv();
|
|
55664
55712
|
const cols = stdout?.columns ?? 80;
|
|
55665
55713
|
const lineCells = Math.max(20, cols - 4);
|
|
55666
55714
|
const argsLabel = formatArgsSummary(card.args);
|
|
@@ -55691,25 +55739,25 @@ function ToolCard({ card }) {
|
|
|
55691
55739
|
meta.push({ text: t("cardLabels.rejected"), color: TONE.err });
|
|
55692
55740
|
}
|
|
55693
55741
|
for (const part of metaTrail(card)) meta.push(part);
|
|
55742
|
+
const headerGlyph = status2 === "running" ? /* @__PURE__ */ import_react80.default.createElement(Pulse, { active: true, frames: PULSE_SQUARE, settled: "\u25A3", color: headColor }) : statusGlyph2(status2);
|
|
55694
55743
|
return /* @__PURE__ */ import_react80.default.createElement(Card, { tone: headColor }, /* @__PURE__ */ import_react80.default.createElement(
|
|
55695
55744
|
CardHeader,
|
|
55696
55745
|
{
|
|
55697
|
-
glyph:
|
|
55746
|
+
glyph: headerGlyph,
|
|
55698
55747
|
tone: headColor,
|
|
55699
55748
|
title: card.name,
|
|
55700
55749
|
subtitle: argsLabel || void 0,
|
|
55701
|
-
meta: meta.length > 0 ? meta : void 0
|
|
55702
|
-
right: status2 === "running" ? /* @__PURE__ */ import_react80.default.createElement(Spinner, { kind: "braille", color: TONE_ACTIVE.brand, bold: true }) : void 0
|
|
55750
|
+
meta: meta.length > 0 ? meta : void 0
|
|
55703
55751
|
}
|
|
55704
55752
|
), 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(
|
|
55705
|
-
(row2, i) => row2.kind === "hidden" ? /* @__PURE__ */ import_react80.default.createElement(
|
|
55753
|
+
(row2, i) => row2.kind === "hidden" ? /* @__PURE__ */ import_react80.default.createElement(L, { key: `${card.id}:hidden:${i}`, color: FG.faint }, t(
|
|
55706
55754
|
hiddenRowLabelKey({
|
|
55707
55755
|
count: row2.count,
|
|
55708
55756
|
includeShortcut: i === firstHiddenRow
|
|
55709
55757
|
}),
|
|
55710
55758
|
{ count: row2.count }
|
|
55711
55759
|
)) : /* @__PURE__ */ import_react80.default.createElement(
|
|
55712
|
-
|
|
55760
|
+
L,
|
|
55713
55761
|
{
|
|
55714
55762
|
key: `${card.id}:line:${row2.index}`,
|
|
55715
55763
|
color: errColor,
|
|
@@ -55828,7 +55876,7 @@ function compactNum(n) {
|
|
|
55828
55876
|
function bar(ratio, color) {
|
|
55829
55877
|
const filled = Math.max(0, Math.min(BAR_CELLS2, Math.round(ratio * BAR_CELLS2)));
|
|
55830
55878
|
const empty = BAR_CELLS2 - filled;
|
|
55831
|
-
return /* @__PURE__ */ import_react81.default.createElement(import_react81.default.Fragment, null, /* @__PURE__ */ import_react81.default.createElement(
|
|
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)));
|
|
55832
55880
|
}
|
|
55833
55881
|
function UsageCard({ card }) {
|
|
55834
55882
|
const costDisplayCurrency = useAgentState((s) => s.status.costDisplayCurrency);
|
|
@@ -55843,14 +55891,14 @@ function UsageCard({ card }) {
|
|
|
55843
55891
|
formatCost(card.cost, costCur)
|
|
55844
55892
|
];
|
|
55845
55893
|
if (card.elapsedMs !== void 0) headerMeta2.push(`${(card.elapsedMs / 1e3).toFixed(1)}s`);
|
|
55846
|
-
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(
|
|
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));
|
|
55847
55895
|
}
|
|
55848
55896
|
function CompactUsageRow({
|
|
55849
55897
|
card,
|
|
55850
55898
|
displayCurrency
|
|
55851
55899
|
}) {
|
|
55852
55900
|
const elapsed = card.elapsedMs !== void 0 ? ` \xB7 ${(card.elapsedMs / 1e3).toFixed(1)}s` : "";
|
|
55853
|
-
return /* @__PURE__ */ import_react81.default.createElement(
|
|
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);
|
|
55854
55902
|
}
|
|
55855
55903
|
|
|
55856
55904
|
// src/cli/ui/cards/UserCard.tsx
|
|
@@ -55871,7 +55919,7 @@ function formatRelativeTime(ts, now = Date.now()) {
|
|
|
55871
55919
|
|
|
55872
55920
|
// src/cli/ui/cards/UserCard.tsx
|
|
55873
55921
|
function UserCard({ card }) {
|
|
55874
|
-
return /* @__PURE__ */ import_react82.default.createElement(
|
|
55922
|
+
return /* @__PURE__ */ import_react82.default.createElement(W, { flexDirection: "column", width: "100%", paddingX: 1, backgroundColor: MESSAGE_BG.user }, /* @__PURE__ */ import_react82.default.createElement(
|
|
55875
55923
|
CardHeader,
|
|
55876
55924
|
{
|
|
55877
55925
|
glyph: CARD.user.glyph,
|
|
@@ -55879,7 +55927,7 @@ function UserCard({ card }) {
|
|
|
55879
55927
|
title: t("cardTitles.you"),
|
|
55880
55928
|
meta: [formatRelativeTime(card.ts)]
|
|
55881
55929
|
}
|
|
55882
|
-
), /* @__PURE__ */ import_react82.default.createElement(
|
|
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)));
|
|
55883
55931
|
}
|
|
55884
55932
|
|
|
55885
55933
|
// src/cli/ui/cards/WarnCard.tsx
|
|
@@ -55894,14 +55942,14 @@ function WarnCard({ card }) {
|
|
|
55894
55942
|
title: card.title,
|
|
55895
55943
|
meta: card.detail ? [card.detail] : void 0
|
|
55896
55944
|
}
|
|
55897
|
-
), messageLines.map((line, i) => /* @__PURE__ */ import_react83.default.createElement(
|
|
55945
|
+
), messageLines.map((line, i) => /* @__PURE__ */ import_react83.default.createElement(L, { key: `${card.id}:${i}`, color: FG.body }, line || " ")));
|
|
55898
55946
|
}
|
|
55899
55947
|
|
|
55900
55948
|
// src/cli/ui/cards/CardRenderer.tsx
|
|
55901
55949
|
var CardRenderer = import_react84.default.memo(function CardRenderer2({
|
|
55902
55950
|
card
|
|
55903
55951
|
}) {
|
|
55904
|
-
return /* @__PURE__ */ import_react84.default.createElement(
|
|
55952
|
+
return /* @__PURE__ */ import_react84.default.createElement(W, { flexDirection: "column" }, renderCard(card));
|
|
55905
55953
|
});
|
|
55906
55954
|
function renderCard(card) {
|
|
55907
55955
|
switch (card.kind) {
|
|
@@ -55946,7 +55994,7 @@ function renderCard(card) {
|
|
|
55946
55994
|
}
|
|
55947
55995
|
}
|
|
55948
55996
|
function FallbackCard({ card }) {
|
|
55949
|
-
return /* @__PURE__ */ import_react84.default.createElement(
|
|
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`));
|
|
55950
55998
|
}
|
|
55951
55999
|
|
|
55952
56000
|
// src/cli/ui/state/chat-scroll-provider.tsx
|
|
@@ -56143,8 +56191,8 @@ function CardStream({
|
|
|
56143
56191
|
const { setMaxScroll, setCardHeight, pruneCardHeights } = useChatScrollActions();
|
|
56144
56192
|
const outerRef = (0, import_react86.useRef)(null);
|
|
56145
56193
|
const innerRef = (0, import_react86.useRef)(null);
|
|
56146
|
-
const outer =
|
|
56147
|
-
const inner =
|
|
56194
|
+
const outer = Cv(outerRef);
|
|
56195
|
+
const inner = Cv(innerRef);
|
|
56148
56196
|
const maxScroll = Math.max(0, inner.height - outer.height);
|
|
56149
56197
|
(0, import_react86.useEffect)(() => {
|
|
56150
56198
|
setMaxScroll(maxScroll);
|
|
@@ -56160,8 +56208,8 @@ function CardStream({
|
|
|
56160
56208
|
() => computeCardStreamItems(visible, cardHeights, scrollRows, outer.height),
|
|
56161
56209
|
[visible, cardHeights, scrollRows, outer.height]
|
|
56162
56210
|
);
|
|
56163
|
-
return /* @__PURE__ */ import_react86.default.createElement(import_react86.default.Fragment, null, /* @__PURE__ */ import_react86.default.createElement(
|
|
56164
|
-
(item) => item.kind === "spacer" ? /* @__PURE__ */ import_react86.default.createElement(
|
|
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 })
|
|
56165
56213
|
))));
|
|
56166
56214
|
}
|
|
56167
56215
|
function MeasuredCard({
|
|
@@ -56169,7 +56217,7 @@ function MeasuredCard({
|
|
|
56169
56217
|
report
|
|
56170
56218
|
}) {
|
|
56171
56219
|
const ref = (0, import_react86.useRef)(null);
|
|
56172
|
-
const metrics =
|
|
56220
|
+
const metrics = Cv(ref);
|
|
56173
56221
|
const lastReportedRef = (0, import_react86.useRef)(0);
|
|
56174
56222
|
const settled = isFullySettled(card);
|
|
56175
56223
|
(0, import_react86.useEffect)(() => {
|
|
@@ -56179,7 +56227,7 @@ function MeasuredCard({
|
|
|
56179
56227
|
lastReportedRef.current = rows;
|
|
56180
56228
|
report(card.id, rows);
|
|
56181
56229
|
}, [card.id, metrics.height, report, settled]);
|
|
56182
|
-
return /* @__PURE__ */ import_react86.default.createElement(
|
|
56230
|
+
return /* @__PURE__ */ import_react86.default.createElement(W, { ref, flexDirection: "column", flexShrink: 0 }, /* @__PURE__ */ import_react86.default.createElement(CardRenderer, { card }));
|
|
56183
56231
|
}
|
|
56184
56232
|
function ScrollIndicator({
|
|
56185
56233
|
scrollRows,
|
|
@@ -56197,10 +56245,10 @@ function ScrollIndicator({
|
|
|
56197
56245
|
const above = scrollRows === 1 ? t("cardStream.scrollAbove", { scroll: scrollRows, max: maxScroll }) : t("cardStream.scrollAbovePlural", { scroll: scrollRows, max: maxScroll });
|
|
56198
56246
|
const more = remaining > 0 ? t("cardStream.scrollMore", { remaining }) : "";
|
|
56199
56247
|
const text2 = `${above}${more}${t("cardStream.scrollPgUp")}${t("cardStream.scrollCopy")}`;
|
|
56200
|
-
const { stdout } =
|
|
56248
|
+
const { stdout } = bv();
|
|
56201
56249
|
const cols = stdout?.columns ?? 80;
|
|
56202
56250
|
const pad = Math.max(0, cols - stringWidth(text2));
|
|
56203
|
-
return /* @__PURE__ */ import_react86.default.createElement(
|
|
56251
|
+
return /* @__PURE__ */ import_react86.default.createElement(L, { color: hot ? TONE.accent : FG.faint, backgroundColor: SURFACE.bgElev }, text2 + " ".repeat(pad));
|
|
56204
56252
|
}
|
|
56205
56253
|
function isFullySettled(card) {
|
|
56206
56254
|
switch (card.kind) {
|
|
@@ -56234,7 +56282,7 @@ function StaticCardStreamInner({
|
|
|
56234
56282
|
[visibleCards]
|
|
56235
56283
|
);
|
|
56236
56284
|
const visibleDynamic = suppressLive && hasUnsettledDynamic && dynamicItems.length > 0 ? dynamicItems.slice(0, -1) : dynamicItems;
|
|
56237
|
-
return /* @__PURE__ */ import_react87.default.createElement(import_react87.default.Fragment, null, /* @__PURE__ */ import_react87.default.createElement(
|
|
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 })))));
|
|
56238
56286
|
}
|
|
56239
56287
|
function useProgressiveBacklog(cards) {
|
|
56240
56288
|
const backlogRef = (0, import_react87.useRef)(null);
|
|
@@ -56905,6 +56953,24 @@ var dashboard = (args, _loop, ctx) => {
|
|
|
56905
56953
|
};
|
|
56906
56954
|
var handlers3 = { dashboard };
|
|
56907
56955
|
|
|
56956
|
+
// src/cli/ui/undo-context.ts
|
|
56957
|
+
function codeUndoInfo(result) {
|
|
56958
|
+
return typeof result === "string" ? result : result.info;
|
|
56959
|
+
}
|
|
56960
|
+
function formatUndoContextMessage(event) {
|
|
56961
|
+
const paths = event.paths.length === 1 ? event.paths[0] : event.paths.join(", ");
|
|
56962
|
+
return [
|
|
56963
|
+
"[Reasonix local state update: undo]",
|
|
56964
|
+
`The user ran /undo and reverted edit batch #${event.batchId} (${event.source}).`,
|
|
56965
|
+
`Reverted path(s): ${paths}.`,
|
|
56966
|
+
"Treat earlier messages or tool results that described those edits as stale. Re-read the files before relying on their current contents."
|
|
56967
|
+
].join("\n");
|
|
56968
|
+
}
|
|
56969
|
+
function codeUndoContextMessage(result) {
|
|
56970
|
+
if (typeof result === "string" || !result.contextEvent) return void 0;
|
|
56971
|
+
return formatUndoContextMessage(result.contextEvent);
|
|
56972
|
+
}
|
|
56973
|
+
|
|
56908
56974
|
// src/cli/ui/slash/helpers.ts
|
|
56909
56975
|
import { spawnSync } from "child_process";
|
|
56910
56976
|
function resolveMemoryTarget(store, raw) {
|
|
@@ -56982,11 +57048,16 @@ function gitTail(res) {
|
|
|
56982
57048
|
}
|
|
56983
57049
|
|
|
56984
57050
|
// src/cli/ui/slash/handlers/edits.ts
|
|
56985
|
-
var undo = (args,
|
|
57051
|
+
var undo = (args, loop2, ctx) => {
|
|
56986
57052
|
if (!ctx.codeUndo) {
|
|
56987
57053
|
return { info: t("handlers.edits.undoCodeOnly") };
|
|
56988
57054
|
}
|
|
56989
|
-
|
|
57055
|
+
const result = ctx.codeUndo(args);
|
|
57056
|
+
const contextMessage = codeUndoContextMessage(result);
|
|
57057
|
+
if (contextMessage) {
|
|
57058
|
+
loop2.appendAndPersist({ role: "system", content: contextMessage });
|
|
57059
|
+
}
|
|
57060
|
+
return { info: codeUndoInfo(result) };
|
|
56990
57061
|
};
|
|
56991
57062
|
var history = (_args, _loop, ctx) => {
|
|
56992
57063
|
if (!ctx.codeHistory) {
|
|
@@ -59477,12 +59548,14 @@ function useEditHistory(codeMode) {
|
|
|
59477
59548
|
}, []);
|
|
59478
59549
|
const codeUndo = (0, import_react90.useCallback)(
|
|
59479
59550
|
(args = []) => {
|
|
59480
|
-
if (!codeMode) return "not in code mode";
|
|
59551
|
+
if (!codeMode) return { info: "not in code mode" };
|
|
59481
59552
|
const root = codeMode.rootDir;
|
|
59482
59553
|
const revert = (entry2, paths) => {
|
|
59483
59554
|
const subset = entry2.snapshots.filter((s) => paths.includes(s.path));
|
|
59484
59555
|
if (subset.length === 0) {
|
|
59485
|
-
return
|
|
59556
|
+
return {
|
|
59557
|
+
info: `batch #${entry2.id}: nothing to undo (already restored or path not in batch)`
|
|
59558
|
+
};
|
|
59486
59559
|
}
|
|
59487
59560
|
const results = restoreSnapshots(subset, root);
|
|
59488
59561
|
for (const s of subset) entry2.undoneFiles.add(s.path);
|
|
@@ -59497,7 +59570,11 @@ function useEditHistory(codeMode) {
|
|
|
59497
59570
|
const when = new Date(entry2.at).toISOString().replace("T", " ").slice(11, 19);
|
|
59498
59571
|
const scope = subset.length === 1 ? subset[0].path : `${subset.length} file(s)`;
|
|
59499
59572
|
const header = `\u25B8 undo: reverted ${scope} from batch #${entry2.id} (${when})`;
|
|
59500
|
-
|
|
59573
|
+
const revertedPaths = results.filter((r) => r.status === "applied" || r.status === "created").map((r) => r.path);
|
|
59574
|
+
return {
|
|
59575
|
+
info: [header, ...formatUndoRows(results)].join("\n"),
|
|
59576
|
+
contextEvent: revertedPaths.length > 0 ? { batchId: entry2.id, source: entry2.source, paths: revertedPaths } : void 0
|
|
59577
|
+
};
|
|
59501
59578
|
};
|
|
59502
59579
|
const idArg = args[0];
|
|
59503
59580
|
const pathArg = args[1];
|
|
@@ -59508,26 +59585,30 @@ function useEditHistory(codeMode) {
|
|
|
59508
59585
|
const remaining = e.snapshots.map((s) => s.path).filter((p) => !e.undoneFiles.has(p));
|
|
59509
59586
|
return revert(e, remaining);
|
|
59510
59587
|
}
|
|
59511
|
-
return "nothing to undo \u2014 every batch in the session history is already undone";
|
|
59588
|
+
return { info: "nothing to undo \u2014 every batch in the session history is already undone" };
|
|
59512
59589
|
}
|
|
59513
59590
|
const id = Number.parseInt(idArg, 10);
|
|
59514
59591
|
if (!Number.isFinite(id)) {
|
|
59515
|
-
return
|
|
59592
|
+
return {
|
|
59593
|
+
info: "usage: /undo [id] [path] (omit id for newest; id from /history; path from /show <id>)"
|
|
59594
|
+
};
|
|
59516
59595
|
}
|
|
59517
59596
|
const entry = editHistory.current.find((e) => e.id === id);
|
|
59518
|
-
if (!entry) return `no edit #${id} \u2014 run /history to see valid ids
|
|
59597
|
+
if (!entry) return { info: `no edit #${id} \u2014 run /history to see valid ids` };
|
|
59519
59598
|
if (!pathArg) {
|
|
59520
59599
|
const remaining = entry.snapshots.map((s) => s.path).filter((p) => !entry.undoneFiles.has(p));
|
|
59521
|
-
if (remaining.length === 0) return `batch #${id} is already fully undone
|
|
59600
|
+
if (remaining.length === 0) return { info: `batch #${id} is already fully undone` };
|
|
59522
59601
|
return revert(entry, remaining);
|
|
59523
59602
|
}
|
|
59524
59603
|
const snap = entry.snapshots.find((s) => s.path === pathArg);
|
|
59525
59604
|
if (!snap) {
|
|
59526
59605
|
const files = [...new Set(entry.blocks.map((b) => b.path))];
|
|
59527
|
-
return
|
|
59606
|
+
return {
|
|
59607
|
+
info: `batch #${id} doesn't include "${pathArg}" \u2014 files in this batch: ${files.join(", ")}`
|
|
59608
|
+
};
|
|
59528
59609
|
}
|
|
59529
59610
|
if (entry.undoneFiles.has(pathArg)) {
|
|
59530
|
-
return `${pathArg} in batch #${id} is already undone
|
|
59611
|
+
return { info: `${pathArg} in batch #${id} is already undone` };
|
|
59531
59612
|
}
|
|
59532
59613
|
return revert(entry, [pathArg]);
|
|
59533
59614
|
},
|
|
@@ -59874,7 +59955,6 @@ function isBusyPromptCommand(text2) {
|
|
|
59874
59955
|
}
|
|
59875
59956
|
var persistentDashboardHandle = null;
|
|
59876
59957
|
var persistentEventSubscribers = /* @__PURE__ */ new Set();
|
|
59877
|
-
var FLUSH_INTERVAL_MS = terminalFlushIntervalMs();
|
|
59878
59958
|
function completedCountIncludingStep(completedStepIds, stepId, total) {
|
|
59879
59959
|
const completed = completedStepIds.size + (completedStepIds.has(stepId) ? 0 : 1);
|
|
59880
59960
|
return total > 0 ? Math.min(completed, total) : completed;
|
|
@@ -60031,7 +60111,7 @@ function AppInner({
|
|
|
60031
60111
|
setStatusLine,
|
|
60032
60112
|
clear: clearToolProgressDisplay
|
|
60033
60113
|
} = useToolProgressDisplay(progressSink);
|
|
60034
|
-
const { stdout } =
|
|
60114
|
+
const { stdout } = bv();
|
|
60035
60115
|
const walletCurrencyRef = (0, import_react93.useRef)(void 0);
|
|
60036
60116
|
const { activities: subagentActivities, sinkRef: subagentSinkRef } = useSubagent({
|
|
60037
60117
|
session,
|
|
@@ -60126,7 +60206,7 @@ function AppInner({
|
|
|
60126
60206
|
isHistoryMode
|
|
60127
60207
|
} = useInputRecall(setInput);
|
|
60128
60208
|
const chatScroll = useChatScrollActions();
|
|
60129
|
-
const { setRawMode, isRawModeSupported } =
|
|
60209
|
+
const { setRawMode, isRawModeSupported } = An();
|
|
60130
60210
|
const handleOpenExternalEditor = (0, import_react93.useCallback)(async () => {
|
|
60131
60211
|
if (!isRawModeSupported) {
|
|
60132
60212
|
log.pushWarning(t("composer.editorFailed"), t("composer.editorNoRawMode"));
|
|
@@ -60891,7 +60971,9 @@ ${t("mcpLifecycle.failedSetupHint")}`
|
|
|
60891
60971
|
}
|
|
60892
60972
|
if (codeMode && input.length === 0 && (chKey === "u" || chKey === "U") && !pendingShell && !pendingPath && !pendingPlan && !pendingReviseEditor && !pendingSessionsPicker && !pendingCheckpointPicker && !pendingMcpHub && !stagedInput && !pendingEditReview && !walkthroughActive && !pendingChoice && !stagedChoiceCustom && !pendingRevision && undoBanner) {
|
|
60893
60973
|
const out = codeUndo([]);
|
|
60894
|
-
|
|
60974
|
+
const contextMessage = codeUndoContextMessage(out);
|
|
60975
|
+
if (contextMessage) loop2.appendAndPersist({ role: "system", content: contextMessage });
|
|
60976
|
+
log.pushInfo(codeUndoInfo(out));
|
|
60895
60977
|
return;
|
|
60896
60978
|
}
|
|
60897
60979
|
if (codeMode && input.length === 0 && chKey === " " && undoBanner && !pendingShell && !pendingPath && !pendingPlan && !pendingReviseEditor && !pendingSessionsPicker && !pendingCheckpointPicker && !pendingMcpHub && !stagedInput && !pendingEditReview && !walkthroughActive && !pendingChoice && !stagedChoiceCustom && !pendingRevision) {
|
|
@@ -61300,8 +61382,8 @@ ${t("mcpLifecycle.failedSetupHint")}`
|
|
|
61300
61382
|
return persistentDashboardHandle.url;
|
|
61301
61383
|
}
|
|
61302
61384
|
const startup = (async () => {
|
|
61303
|
-
const { startDashboardServer } = await import("./server-
|
|
61304
|
-
const { saveDashboardPort } = await import("./config-
|
|
61385
|
+
const { startDashboardServer } = await import("./server-UHKO2VVM.js");
|
|
61386
|
+
const { saveDashboardPort } = await import("./config-KV7VV5LG.js");
|
|
61305
61387
|
const tryStart = (port) => startDashboardServer(buildCtx(), {
|
|
61306
61388
|
port,
|
|
61307
61389
|
host: dashboardHost,
|
|
@@ -61888,7 +61970,6 @@ ${answer}`, "brand");
|
|
|
61888
61970
|
reasoningBuf.current = "";
|
|
61889
61971
|
toolCallBuildBuf.current = null;
|
|
61890
61972
|
};
|
|
61891
|
-
const timer = setInterval(flush, FLUSH_INTERVAL_MS);
|
|
61892
61973
|
let modelInput = text2;
|
|
61893
61974
|
if (codeMode) {
|
|
61894
61975
|
const expanded = expandAtMentions(text2, currentRootDir);
|
|
@@ -61959,6 +62040,7 @@ ${answer}`, "brand");
|
|
|
61959
62040
|
} else if (ev.role === "assistant_delta") {
|
|
61960
62041
|
if (ev.content) contentBuf.current += ev.content;
|
|
61961
62042
|
if (ev.reasoningDelta) reasoningBuf.current += ev.reasoningDelta;
|
|
62043
|
+
flush();
|
|
61962
62044
|
} else if (ev.role === "tool_call_delta") {
|
|
61963
62045
|
if (ev.toolName) {
|
|
61964
62046
|
toolCallBuildBuf.current = {
|
|
@@ -61967,6 +62049,7 @@ ${answer}`, "brand");
|
|
|
61967
62049
|
index: ev.toolCallIndex,
|
|
61968
62050
|
readyCount: ev.toolCallReadyCount
|
|
61969
62051
|
};
|
|
62052
|
+
flush();
|
|
61970
62053
|
}
|
|
61971
62054
|
} else if (ev.role === "assistant_final") {
|
|
61972
62055
|
lastAssistantText = ev.content || streamRef.text;
|
|
@@ -62086,7 +62169,7 @@ ${answer}`, "brand");
|
|
|
62086
62169
|
}
|
|
62087
62170
|
qq.maybeSendFinalReply(lastAssistantText);
|
|
62088
62171
|
} finally {
|
|
62089
|
-
|
|
62172
|
+
flush();
|
|
62090
62173
|
if (abortedThisTurn.current) {
|
|
62091
62174
|
translator.abort();
|
|
62092
62175
|
}
|
|
@@ -62701,7 +62784,7 @@ ${answer}`, "brand");
|
|
|
62701
62784
|
);
|
|
62702
62785
|
const tickerSuspended = modalOpen || !busy && !isStreaming;
|
|
62703
62786
|
if (!bootReady) return /* @__PURE__ */ import_react93.default.createElement(BootSplash, null);
|
|
62704
|
-
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(
|
|
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(
|
|
62705
62788
|
WelcomeBanner,
|
|
62706
62789
|
{
|
|
62707
62790
|
inCodeMode: !!codeMode,
|
|
@@ -63127,18 +63210,18 @@ function MaskedInput({
|
|
|
63127
63210
|
});
|
|
63128
63211
|
if (value.length === 0) {
|
|
63129
63212
|
if (placeholder.length === 0) {
|
|
63130
|
-
return /* @__PURE__ */ import_react94.default.createElement(
|
|
63213
|
+
return /* @__PURE__ */ import_react94.default.createElement(L, { inverse: true }, " ");
|
|
63131
63214
|
}
|
|
63132
|
-
return /* @__PURE__ */ import_react94.default.createElement(import_react94.default.Fragment, null, /* @__PURE__ */ import_react94.default.createElement(
|
|
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)));
|
|
63133
63216
|
}
|
|
63134
|
-
return /* @__PURE__ */ import_react94.default.createElement(import_react94.default.Fragment, null, /* @__PURE__ */ import_react94.default.createElement(
|
|
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 }, " "));
|
|
63135
63218
|
}
|
|
63136
63219
|
|
|
63137
63220
|
// src/cli/ui/Setup.tsx
|
|
63138
63221
|
function Setup({ onReady }) {
|
|
63139
63222
|
const [value, setValue] = (0, import_react95.useState)("");
|
|
63140
63223
|
const [error, setError] = (0, import_react95.useState)(null);
|
|
63141
|
-
const { exit: exit2 } =
|
|
63224
|
+
const { exit: exit2 } = fc();
|
|
63142
63225
|
const handleSubmit = (raw) => {
|
|
63143
63226
|
const trimmed = raw.trim();
|
|
63144
63227
|
if (trimmed === "/exit" || trimmed === "/quit") {
|
|
@@ -63158,7 +63241,7 @@ function Setup({ onReady }) {
|
|
|
63158
63241
|
}
|
|
63159
63242
|
onReady(trimmed);
|
|
63160
63243
|
};
|
|
63161
|
-
return /* @__PURE__ */ import_react95.default.createElement(
|
|
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(
|
|
63162
63245
|
MaskedInput,
|
|
63163
63246
|
{
|
|
63164
63247
|
value,
|
|
@@ -63167,7 +63250,7 @@ function Setup({ onReady }) {
|
|
|
63167
63250
|
mask: "\u2022",
|
|
63168
63251
|
placeholder: t("wizard.apiKeyPlaceholder")
|
|
63169
63252
|
}
|
|
63170
|
-
)), error ? /* @__PURE__ */ import_react95.default.createElement(
|
|
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"))));
|
|
63171
63254
|
}
|
|
63172
63255
|
|
|
63173
63256
|
// src/cli/ui/drain-tty.ts
|
|
@@ -63470,7 +63553,7 @@ async function chatCommand(opts) {
|
|
|
63470
63553
|
process.exit(143);
|
|
63471
63554
|
});
|
|
63472
63555
|
}
|
|
63473
|
-
const { waitUntilExit } =
|
|
63556
|
+
const { waitUntilExit } = Wo(
|
|
63474
63557
|
/* @__PURE__ */ import_react96.default.createElement(
|
|
63475
63558
|
Root,
|
|
63476
63559
|
{
|
|
@@ -63491,7 +63574,7 @@ async function chatCommand(opts) {
|
|
|
63491
63574
|
qqErrorRef
|
|
63492
63575
|
}
|
|
63493
63576
|
),
|
|
63494
|
-
{ exitOnCtrlC: true }
|
|
63577
|
+
{ exitOnCtrlC: true, incrementalRendering: true }
|
|
63495
63578
|
);
|
|
63496
63579
|
try {
|
|
63497
63580
|
await waitUntilExit();
|
|
@@ -63506,4 +63589,4 @@ async function chatCommand(opts) {
|
|
|
63506
63589
|
export {
|
|
63507
63590
|
chatCommand
|
|
63508
63591
|
};
|
|
63509
|
-
//# sourceMappingURL=chunk-
|
|
63592
|
+
//# sourceMappingURL=chunk-GNRKXRRE.js.map
|