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