@aria-cli/cli 1.0.57 → 1.0.58

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (319) hide show
  1. package/bin/aria.mjs +2 -2
  2. package/package.json +17 -76
  3. package/dist/.tsbuildinfo +0 -1
  4. package/dist/attached-local-control-client.js +0 -826
  5. package/dist/bootstrap-local-control-client.js +0 -2
  6. package/dist/capability-aware-method-proxy.js +0 -42
  7. package/dist/cli-context.js +0 -160
  8. package/dist/commands/arions.js +0 -174
  9. package/dist/commands/auth.js +0 -123
  10. package/dist/commands/daemon.js +0 -367
  11. package/dist/commands/definitions.js +0 -176
  12. package/dist/commands/index.js +0 -80
  13. package/dist/commands/login-handler.js +0 -1108
  14. package/dist/commands/logout-handler.js +0 -92
  15. package/dist/commands/memory-handlers.js +0 -89
  16. package/dist/commands/pairing.js +0 -60
  17. package/dist/commands/runtime-cutover-reset-command.js +0 -12
  18. package/dist/commands/runtime-cutover-reset.js +0 -265
  19. package/dist/commands/terminal-setup.js +0 -84
  20. package/dist/config/aria-config.js +0 -238
  21. package/dist/config/index.js +0 -3
  22. package/dist/config/loader.js +0 -97
  23. package/dist/config.js +0 -142
  24. package/dist/daemon-info.js +0 -10
  25. package/dist/ensure-daemon.js +0 -128
  26. package/dist/entrypoints/command-mode.js +0 -5
  27. package/dist/entrypoints/daemon.js +0 -50
  28. package/dist/entrypoints/headless-stdio.js +0 -25
  29. package/dist/entrypoints/interactive.js +0 -80
  30. package/dist/event-loop-watchdog.js +0 -73
  31. package/dist/headless/auth-orchestrator.js +0 -508
  32. package/dist/headless/auth-service.js +0 -43
  33. package/dist/headless/bootstrap-fast-path.js +0 -112
  34. package/dist/headless/call-command.js +0 -143
  35. package/dist/headless/daemon-service.js +0 -318
  36. package/dist/headless/hook-actions.js +0 -235
  37. package/dist/headless/hook-service.js +0 -42
  38. package/dist/headless/kernel-services.js +0 -216
  39. package/dist/headless/kernel.js +0 -785
  40. package/dist/headless/operations/arion.js +0 -119
  41. package/dist/headless/operations/auth.js +0 -45
  42. package/dist/headless/operations/client.js +0 -31
  43. package/dist/headless/operations/config.js +0 -69
  44. package/dist/headless/operations/daemon.js +0 -47
  45. package/dist/headless/operations/hook.js +0 -56
  46. package/dist/headless/operations/index.js +0 -11
  47. package/dist/headless/operations/memory.js +0 -102
  48. package/dist/headless/operations/message.js +0 -279
  49. package/dist/headless/operations/model.js +0 -100
  50. package/dist/headless/operations/peer.js +0 -56
  51. package/dist/headless/operations/run.js +0 -24
  52. package/dist/headless/operations/session.js +0 -90
  53. package/dist/headless/operations/system.js +0 -19
  54. package/dist/headless/operations/utils.js +0 -35
  55. package/dist/headless/run-orchestrator.js +0 -703
  56. package/dist/headless/stdio-server.js +0 -439
  57. package/dist/history/SessionHistory.js +0 -8
  58. package/dist/history/SessionHistoryClient.js +0 -186
  59. package/dist/history/conversation-message.js +0 -112
  60. package/dist/history/index.js +0 -8
  61. package/dist/history/jsonl-replay.js +0 -154
  62. package/dist/history/repair-tool-pairing.js +0 -84
  63. package/dist/history/stall-phase-bridge.js +0 -11
  64. package/dist/history/turn-accumulator.js +0 -427
  65. package/dist/index.js +0 -7
  66. package/dist/ink-repl.js +0 -4183
  67. package/dist/local-control-bootstrap.js +0 -26
  68. package/dist/local-control-client.js +0 -2
  69. package/dist/local-control-error-reporting.js +0 -34
  70. package/dist/local-control-http-client.js +0 -362
  71. package/dist/local-control-lazy-wrapper.js +0 -363
  72. package/dist/local-control-manager.js +0 -146
  73. package/dist/main.js +0 -62
  74. package/dist/network-security.js +0 -62
  75. package/dist/networking-server.js +0 -38
  76. package/dist/peer-identity.js +0 -23
  77. package/dist/polling-subscription.js +0 -34
  78. package/dist/relaunch.js +0 -617
  79. package/dist/release-notes.js +0 -35
  80. package/dist/repl-cleanup.js +0 -47
  81. package/dist/runtime/configure-bun-sqlite.js +0 -3
  82. package/dist/runtime/crash-handlers.js +0 -111
  83. package/dist/runtime/interactive-invocation.js +0 -39
  84. package/dist/runtime/internal-mode.js +0 -14
  85. package/dist/runtime/launch-spec.js +0 -64
  86. package/dist/runtime/owner-lease.js +0 -44
  87. package/dist/runtime/public-mode.js +0 -20
  88. package/dist/runtime/run-internal-mode.js +0 -18
  89. package/dist/runtime/runtime-kind.js +0 -32
  90. package/dist/runtime/spawn-aria.js +0 -38
  91. package/dist/selectable-client.js +0 -2
  92. package/dist/selectable-peer.js +0 -2
  93. package/dist/session.js +0 -203
  94. package/dist/slash-commands.js +0 -80
  95. package/dist/sounds.js +0 -210
  96. package/dist/ui/App.js +0 -526
  97. package/dist/ui/components/AnthropicMethodPicker.js +0 -6
  98. package/dist/ui/components/ArionPrompt.js +0 -15
  99. package/dist/ui/components/AutocompleteDropdown.js +0 -23
  100. package/dist/ui/components/AutonomySelector.js +0 -55
  101. package/dist/ui/components/Banner.js +0 -98
  102. package/dist/ui/components/ConversationHistory.js +0 -175
  103. package/dist/ui/components/CopilotDeviceLoginFlow.js +0 -88
  104. package/dist/ui/components/CopilotSourcePicker.js +0 -50
  105. package/dist/ui/components/Cost.js +0 -10
  106. package/dist/ui/components/CustomSelect/option-map.js +0 -30
  107. package/dist/ui/components/CustomSelect/select-option.js +0 -13
  108. package/dist/ui/components/CustomSelect/select.js +0 -42
  109. package/dist/ui/components/CustomSelect/use-select-state.js +0 -179
  110. package/dist/ui/components/CustomSelect/use-select.js +0 -15
  111. package/dist/ui/components/ErrorDisplay.js +0 -35
  112. package/dist/ui/components/FallbackToolUseRejectedMessage.js +0 -7
  113. package/dist/ui/components/FileEditToolUpdatedMessage.js +0 -57
  114. package/dist/ui/components/HandoffMarker.js +0 -18
  115. package/dist/ui/components/HighlightedCode.js +0 -21
  116. package/dist/ui/components/InputArea.js +0 -187
  117. package/dist/ui/components/Message.js +0 -25
  118. package/dist/ui/components/OAuthLoginFlow.js +0 -113
  119. package/dist/ui/components/OutputTruncation.js +0 -35
  120. package/dist/ui/components/PermissionPrompt.js +0 -79
  121. package/dist/ui/components/PipelineTimingPanel.js +0 -15
  122. package/dist/ui/components/ProviderMethodPicker.js +0 -61
  123. package/dist/ui/components/ProviderPicker.js +0 -63
  124. package/dist/ui/components/RenderItemView.js +0 -71
  125. package/dist/ui/components/Spinner.js +0 -46
  126. package/dist/ui/components/StatusBar.js +0 -95
  127. package/dist/ui/components/StreamingIndicator.js +0 -55
  128. package/dist/ui/components/StructuredDiff.js +0 -168
  129. package/dist/ui/components/TextInputOverlay.js +0 -43
  130. package/dist/ui/components/ThinkingBlock.js +0 -82
  131. package/dist/ui/components/ToolCost.js +0 -17
  132. package/dist/ui/components/ToolExecution.js +0 -61
  133. package/dist/ui/components/ToolHeader.js +0 -51
  134. package/dist/ui/components/ToolRenderLayoutContext.js +0 -14
  135. package/dist/ui/components/ToolResultWrapper.js +0 -6
  136. package/dist/ui/components/ToolUseLoader.js +0 -35
  137. package/dist/ui/components/TraceWaterfall.js +0 -91
  138. package/dist/ui/components/index.js +0 -33
  139. package/dist/ui/components/messages/AssistantTextMessage.js +0 -25
  140. package/dist/ui/components/messages/UserImageMessage.js +0 -12
  141. package/dist/ui/components/messages/UserTextMessage.js +0 -12
  142. package/dist/ui/components/overlays/ArionSelector.js +0 -68
  143. package/dist/ui/components/overlays/ClientSelector.js +0 -62
  144. package/dist/ui/components/overlays/CommandPalette.js +0 -67
  145. package/dist/ui/components/overlays/DaemonControl.js +0 -87
  146. package/dist/ui/components/overlays/InviteShareOverlay.js +0 -15
  147. package/dist/ui/components/overlays/JoinInviteOverlay.js +0 -32
  148. package/dist/ui/components/overlays/MemoryBrowser.js +0 -100
  149. package/dist/ui/components/overlays/MessageSelector.js +0 -123
  150. package/dist/ui/components/overlays/ModelSelector.js +0 -211
  151. package/dist/ui/components/overlays/PairRequestOverlay.js +0 -42
  152. package/dist/ui/components/overlays/PeerSelector.js +0 -84
  153. package/dist/ui/components/overlays/SessionSelector.js +0 -102
  154. package/dist/ui/components/overlays/SoundSelector.js +0 -86
  155. package/dist/ui/components/overlays/ThemeSelector.js +0 -139
  156. package/dist/ui/components/overlays/index.js +0 -15
  157. package/dist/ui/components/permissions/BashPermissionRequest/BashPermissionRequest.js +0 -53
  158. package/dist/ui/components/permissions/FallbackPermissionRequest.js +0 -56
  159. package/dist/ui/components/permissions/FileEditPermissionRequest/FileEditPermissionRequest.js +0 -76
  160. package/dist/ui/components/permissions/FileEditPermissionRequest/FileEditToolDiff.js +0 -18
  161. package/dist/ui/components/permissions/FileWritePermissionRequest/FileWritePermissionRequest.js +0 -64
  162. package/dist/ui/components/permissions/FileWritePermissionRequest/FileWriteToolDiff.js +0 -26
  163. package/dist/ui/components/permissions/FilesystemPermissionRequest/FilesystemPermissionRequest.js +0 -141
  164. package/dist/ui/components/permissions/PermissionRequest.js +0 -70
  165. package/dist/ui/components/permissions/PermissionRequestTitle.js +0 -41
  166. package/dist/ui/components/permissions/hooks.js +0 -10
  167. package/dist/ui/components/permissions/toolUseOptions.js +0 -68
  168. package/dist/ui/components/permissions/utils.js +0 -10
  169. package/dist/ui/components/text-input/Cursor.js +0 -326
  170. package/dist/ui/components/text-input/TextInput.js +0 -231
  171. package/dist/ui/components/text-input/imagePaste.js +0 -28
  172. package/dist/ui/components/text-input/index.js +0 -6
  173. package/dist/ui/components/text-input/useDoublePress.js +0 -30
  174. package/dist/ui/components/text-input/useTextInput.js +0 -245
  175. package/dist/ui/components/tool-types.js +0 -9
  176. package/dist/ui/constants/figures.js +0 -4
  177. package/dist/ui/constants/index.js +0 -3
  178. package/dist/ui/display-mode.js +0 -93
  179. package/dist/ui/display-policy.js +0 -19
  180. package/dist/ui/hooks/index.js +0 -6
  181. package/dist/ui/hooks/useCommandAutocomplete.js +0 -93
  182. package/dist/ui/hooks/useDoublePress.js +0 -37
  183. package/dist/ui/hooks/useIndicatorState.js +0 -55
  184. package/dist/ui/hooks/useInterval.js +0 -23
  185. package/dist/ui/hooks/useKeyboardShortcuts.js +0 -127
  186. package/dist/ui/hooks/useTerminalSize.js +0 -55
  187. package/dist/ui/hooks/useUnifiedMessages.js +0 -117
  188. package/dist/ui/indicator-state.js +0 -44
  189. package/dist/ui/markdown/highlight.js +0 -44
  190. package/dist/ui/markdown/index.js +0 -1460
  191. package/dist/ui/markdown/tokenizer.js +0 -24
  192. package/dist/ui/render-item.js +0 -5
  193. package/dist/ui/screens/REPL.js +0 -119
  194. package/dist/ui/screens/approval-lifecycle.js +0 -38
  195. package/dist/ui/status-line.js +0 -72
  196. package/dist/ui/theme/index.js +0 -51
  197. package/dist/ui/theme/themes/claude-dark-daltonized.js +0 -51
  198. package/dist/ui/theme/themes/claude-dark.js +0 -50
  199. package/dist/ui/theme/themes/claude-light-daltonized.js +0 -51
  200. package/dist/ui/theme/themes/claude-light.js +0 -50
  201. package/dist/ui/theme/themes/dark-accessible.js +0 -18
  202. package/dist/ui/theme/themes/dark.js +0 -49
  203. package/dist/ui/theme/themes/light-accessible.js +0 -18
  204. package/dist/ui/theme/themes/light.js +0 -49
  205. package/dist/ui/theme/types.js +0 -3
  206. package/dist/ui/theme.js +0 -142
  207. package/dist/ui/to-render-items.js +0 -145
  208. package/dist/ui/tools/AgentTool/index.js +0 -30
  209. package/dist/ui/tools/ArchitectTool/index.js +0 -31
  210. package/dist/ui/tools/AskUserTool/index.js +0 -46
  211. package/dist/ui/tools/BashTool/BashToolResultMessage.js +0 -11
  212. package/dist/ui/tools/BashTool/OutputLine.js +0 -21
  213. package/dist/ui/tools/BashTool/index.js +0 -91
  214. package/dist/ui/tools/BrowseTool/index.js +0 -43
  215. package/dist/ui/tools/BrowserTool/index.js +0 -47
  216. package/dist/ui/tools/CbmTool/index.js +0 -188
  217. package/dist/ui/tools/CheckDelegationTool/index.js +0 -46
  218. package/dist/ui/tools/CheckMessagesTool/index.js +0 -85
  219. package/dist/ui/tools/CreateQuipTool/index.js +0 -30
  220. package/dist/ui/tools/CreateSkillTool/index.js +0 -22
  221. package/dist/ui/tools/CreateToolTool/index.js +0 -31
  222. package/dist/ui/tools/DelegateRemoteTool/index.js +0 -42
  223. package/dist/ui/tools/DeployTool/index.js +0 -47
  224. package/dist/ui/tools/FffTool/index.js +0 -103
  225. package/dist/ui/tools/FileEditTool/index.js +0 -67
  226. package/dist/ui/tools/FileReadTool/index.js +0 -68
  227. package/dist/ui/tools/FileWriteTool/index.js +0 -61
  228. package/dist/ui/tools/ForkTool/index.js +0 -47
  229. package/dist/ui/tools/FrgTool/index.js +0 -96
  230. package/dist/ui/tools/GetThreadTool/index.js +0 -39
  231. package/dist/ui/tools/GlobTool/index.js +0 -50
  232. package/dist/ui/tools/GrepTool/index.js +0 -84
  233. package/dist/ui/tools/HatchArionTool/index.js +0 -36
  234. package/dist/ui/tools/LearnSkillTool/index.js +0 -22
  235. package/dist/ui/tools/LearnTool/index.js +0 -43
  236. package/dist/ui/tools/LearnToolTool/index.js +0 -22
  237. package/dist/ui/tools/ListClientsTool/index.js +0 -39
  238. package/dist/ui/tools/LspTool/index.js +0 -261
  239. package/dist/ui/tools/MCPTool/index.js +0 -33
  240. package/dist/ui/tools/ManageNetworkTool/index.js +0 -53
  241. package/dist/ui/tools/MemoryReadTool/index.js +0 -64
  242. package/dist/ui/tools/MemoryWriteTool/index.js +0 -20
  243. package/dist/ui/tools/NotebookEditTool/index.js +0 -33
  244. package/dist/ui/tools/NotebookReadTool/index.js +0 -25
  245. package/dist/ui/tools/OutlookReadTool/index.js +0 -66
  246. package/dist/ui/tools/OutlookReplyTool/index.js +0 -49
  247. package/dist/ui/tools/OutlookSendTool/index.js +0 -49
  248. package/dist/ui/tools/PauseDelegationTool/index.js +0 -35
  249. package/dist/ui/tools/ProbeTool/index.js +0 -121
  250. package/dist/ui/tools/ProcessTool/index.js +0 -66
  251. package/dist/ui/tools/QuestListTool/index.js +0 -46
  252. package/dist/ui/tools/QuestReportTool/index.js +0 -49
  253. package/dist/ui/tools/QuestUpdateTool/index.js +0 -87
  254. package/dist/ui/tools/QuipCommentTool/index.js +0 -69
  255. package/dist/ui/tools/QuipReadTool/index.js +0 -71
  256. package/dist/ui/tools/RestArionTool/index.js +0 -32
  257. package/dist/ui/tools/RestartTool/index.js +0 -35
  258. package/dist/ui/tools/ResumeDelegationTool/index.js +0 -35
  259. package/dist/ui/tools/RetireArionTool/index.js +0 -32
  260. package/dist/ui/tools/RgTool/index.js +0 -73
  261. package/dist/ui/tools/SearchKnowledgeTool/index.js +0 -43
  262. package/dist/ui/tools/SearchMessagesTool/index.js +0 -43
  263. package/dist/ui/tools/SelfDiagnoseTool/index.js +0 -61
  264. package/dist/ui/tools/SendMessageTool/index.js +0 -45
  265. package/dist/ui/tools/SerenaTool/index.js +0 -124
  266. package/dist/ui/tools/SessionHistoryTool/index.js +0 -52
  267. package/dist/ui/tools/SgTool/index.js +0 -80
  268. package/dist/ui/tools/SlackReactTool/index.js +0 -41
  269. package/dist/ui/tools/SlackReadTool/index.js +0 -48
  270. package/dist/ui/tools/SlackSendTool/index.js +0 -45
  271. package/dist/ui/tools/SpawnWorkerTool/index.js +0 -33
  272. package/dist/ui/tools/StickerRequestTool/index.js +0 -19
  273. package/dist/ui/tools/ThinkTool/index.js +0 -17
  274. package/dist/ui/tools/UgTool/index.js +0 -108
  275. package/dist/ui/tools/UseSkillTool/index.js +0 -22
  276. package/dist/ui/tools/WakeArionTool/index.js +0 -32
  277. package/dist/ui/tools/WebFetchTool/index.js +0 -56
  278. package/dist/ui/tools/WebSearchTool/index.js +0 -44
  279. package/dist/ui/tools/lsTool/index.js +0 -58
  280. package/dist/ui/tools/registry.js +0 -197
  281. package/dist/ui/tools/tool-renderer.js +0 -11
  282. package/dist/ui/tools/truncation.js +0 -35
  283. package/dist/ui/types/anthropic.js +0 -4
  284. package/dist/ui/types/index.js +0 -2
  285. package/dist/ui/types/message.js +0 -3
  286. package/dist/ui/types/tool.js +0 -4
  287. package/dist/ui/utils/array.js +0 -4
  288. package/dist/ui/utils/cursor.js +0 -131
  289. package/dist/ui/utils/diff.js +0 -120
  290. package/dist/ui/utils/format.js +0 -42
  291. package/dist/ui/utils/fuzzy.js +0 -59
  292. package/dist/ui/utils/index.js +0 -11
  293. package/dist/ui/utils/keys.js +0 -8
  294. package/dist/ui/utils/patch.js +0 -17
  295. package/dist/ui/utils/risk.js +0 -114
  296. package/dist/ui/utils/terminal-image.js +0 -70
  297. package/dist/ui/utils/validation.js +0 -48
  298. package/dist/ui/verb-pairs.js +0 -248
  299. package/dist/ui.js +0 -131
  300. package/src/entrypoints/command-mode.ts +0 -5
  301. package/src/entrypoints/daemon.ts +0 -54
  302. package/src/entrypoints/headless-stdio.ts +0 -27
  303. package/src/entrypoints/interactive.ts +0 -112
  304. package/src/main.ts +0 -72
  305. package/src/runtime/configure-bun-sqlite.ts +0 -3
  306. package/src/runtime/crash-handlers.ts +0 -128
  307. package/src/runtime/interactive-invocation.test.ts +0 -42
  308. package/src/runtime/interactive-invocation.ts +0 -51
  309. package/src/runtime/internal-mode.test.ts +0 -19
  310. package/src/runtime/internal-mode.ts +0 -24
  311. package/src/runtime/launch-spec.test.ts +0 -26
  312. package/src/runtime/launch-spec.ts +0 -84
  313. package/src/runtime/owner-lease.ts +0 -52
  314. package/src/runtime/public-mode.test.ts +0 -18
  315. package/src/runtime/public-mode.ts +0 -19
  316. package/src/runtime/run-internal-mode.ts +0 -19
  317. package/src/runtime/runtime-kind.test.ts +0 -23
  318. package/src/runtime/runtime-kind.ts +0 -41
  319. package/src/runtime/spawn-aria.ts +0 -62
@@ -1,41 +0,0 @@
1
- import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
- import { Box, Text } from "ink";
3
- import { FallbackToolUseRejectedMessage } from "../../components/FallbackToolUseRejectedMessage.js";
4
- import { getTheme } from "../../theme/index.js";
5
- export const SlackReactToolRenderers = {
6
- displayName() {
7
- return "Slack React";
8
- },
9
- renderInput(input, { verbose } = {}) {
10
- const emoji = String(input?.name ?? input?.emoji ?? "");
11
- const channel = String(input?.channel ?? "");
12
- const emojiFormatted = emoji.startsWith(":") ? emoji : `:${emoji}:`;
13
- const parts = [emojiFormatted];
14
- if (channel) {
15
- parts.push(`#${channel.replace(/^#/, "")}`);
16
- }
17
- return parts.join(" in ") || "Add reaction";
18
- },
19
- renderRejection() {
20
- return _jsx(FallbackToolUseRejectedMessage, {});
21
- },
22
- renderOutput(output, { verbose } = {}) {
23
- const theme = getTheme();
24
- if (output == null) {
25
- return (_jsx(Box, { flexDirection: "column", children: _jsx(Text, { color: theme.colors.error, children: "Failed to add reaction" }) }));
26
- }
27
- const obj = (output ?? {});
28
- // Check for success/failure
29
- const success = obj.success !== false && obj.success !== null;
30
- const errorMessage = String(obj.message ?? obj.error ?? "");
31
- // Extract emoji from output.data or input context
32
- const data = (obj.data ?? obj);
33
- const emoji = String(data.emoji ?? data.name ?? data.reaction ?? "");
34
- if (!success) {
35
- return (_jsx(Box, { flexDirection: "column", children: _jsxs(Text, { color: theme.colors.error, children: ["Failed to add reaction", errorMessage ? `: ${errorMessage}` : ""] }) }));
36
- }
37
- const emojiFormatted = emoji.startsWith(":") ? emoji : `:${emoji}:`;
38
- return (_jsx(Box, { flexDirection: "column", children: _jsxs(Text, { color: theme.colors.success, children: ["\u2713 Added ", emojiFormatted] }) }));
39
- },
40
- };
41
- //# sourceMappingURL=index.js.map
@@ -1,48 +0,0 @@
1
- import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
- import { Box, Text } from "ink";
3
- import { FallbackToolUseRejectedMessage } from "../../components/FallbackToolUseRejectedMessage.js";
4
- import { getTheme } from "../../theme/index.js";
5
- export const SlackReadToolRenderers = {
6
- displayName() {
7
- return "Slack Read";
8
- },
9
- renderInput(input, { verbose } = {}) {
10
- const channel = input?.channel ?? "";
11
- const limit = input?.limit ?? input?.max_messages ?? "";
12
- const parts = [];
13
- if (channel) {
14
- parts.push(`#${String(channel).replace(/^#/, "")}`);
15
- }
16
- if (limit) {
17
- parts.push(`limit:${limit}`);
18
- }
19
- return parts.join(", ") || "Slack messages";
20
- },
21
- renderRejection() {
22
- return _jsx(FallbackToolUseRejectedMessage, {});
23
- },
24
- renderOutput(output, { verbose } = {}) {
25
- const theme = getTheme();
26
- if (output == null) {
27
- return (_jsx(Box, { flexDirection: "column", children: _jsx(Text, { color: theme.colors.textMuted, children: "No messages" }) }));
28
- }
29
- const obj = (output ?? {});
30
- // Extract messages and channel from output.data
31
- const data = (obj.data ?? obj);
32
- const messages = Array.isArray(data.messages) ? data.messages : [];
33
- const channelId = String(data.channelId ?? data.channel_id ?? data.channel ?? "");
34
- if (!messages.length) {
35
- return (_jsx(Box, { flexDirection: "column", children: _jsx(Text, { color: theme.colors.textMuted, children: "No messages" }) }));
36
- }
37
- const channelName = channelId ? `#${channelId.replace(/^#/, "")}` : "channel";
38
- const messageCount = messages.length;
39
- return (_jsxs(Box, { flexDirection: "column", children: [_jsxs(Box, { marginBottom: 1, children: [_jsxs(Text, { bold: true, children: [messageCount, " "] }), _jsxs(Text, { children: ["message", messageCount === 1 ? "" : "s", " from ", channelName] })] }), messages.slice(0, 3).map((msg, i) => {
40
- const m = (msg ?? {});
41
- const user = String(m.user ?? m.username ?? "unknown");
42
- const text = String(m.text ?? m.message ?? "");
43
- const truncatedText = text.length > 60 ? text.substring(0, 60) + "…" : text;
44
- return (_jsx(Box, { flexDirection: "column", paddingLeft: 2, marginBottom: i < 2 ? 1 : 0, children: _jsxs(Box, { children: [_jsxs(Text, { bold: true, children: [user, ": "] }), _jsx(Text, { dimColor: true, children: truncatedText })] }) }, i));
45
- }), messages.length > 3 && (_jsx(Box, { paddingLeft: 2, marginTop: 1, children: _jsxs(Text, { color: theme.colors.textMuted, children: ["+", messages.length - 3, " more message", messages.length - 3 === 1 ? "" : "s"] }) }))] }));
46
- },
47
- };
48
- //# sourceMappingURL=index.js.map
@@ -1,45 +0,0 @@
1
- import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
- import { Box, Text } from "ink";
3
- import { FallbackToolUseRejectedMessage } from "../../components/FallbackToolUseRejectedMessage.js";
4
- import { getTheme } from "../../theme/index.js";
5
- export const SlackSendToolRenderers = {
6
- displayName() {
7
- return "Slack Send";
8
- },
9
- renderInput(input, { verbose } = {}) {
10
- const channel = input?.channel ?? "";
11
- const text = String(input?.text ?? "");
12
- const truncatedText = text.length > 40 ? text.substring(0, 40) + "…" : text;
13
- const parts = [];
14
- if (channel) {
15
- parts.push(`#${String(channel).replace(/^#/, "")}`);
16
- }
17
- if (truncatedText) {
18
- parts.push(`"${truncatedText}"`);
19
- }
20
- return parts.join(" → ") || "Send message";
21
- },
22
- renderRejection() {
23
- return _jsx(FallbackToolUseRejectedMessage, {});
24
- },
25
- renderOutput(output, { verbose } = {}) {
26
- const theme = getTheme();
27
- if (output == null) {
28
- return (_jsx(Box, { flexDirection: "column", children: _jsx(Text, { color: theme.colors.error, children: "Failed to send message" }) }));
29
- }
30
- const obj = (output ?? {});
31
- // Check for success/failure
32
- const success = obj.success !== false && obj.success !== null;
33
- const errorMessage = String(obj.message ?? obj.error ?? "");
34
- // Extract channel from output.data
35
- const data = (obj.data ?? obj);
36
- const channelId = String(data.channelId ?? data.channel_id ?? data.channel ?? "");
37
- const ts = String(data.ts ?? data.timestamp ?? "");
38
- if (!success) {
39
- return (_jsx(Box, { flexDirection: "column", children: _jsxs(Text, { color: theme.colors.error, children: ["Failed to send message", errorMessage ? `: ${errorMessage}` : ""] }) }));
40
- }
41
- const channelName = channelId ? `#${channelId.replace(/^#/, "")}` : "channel";
42
- return (_jsxs(Box, { flexDirection: "column", children: [_jsxs(Box, { children: [_jsx(Text, { color: theme.colors.success, children: "\u2713 Sent to " }), _jsx(Text, { bold: true, color: theme.colors.success, children: channelName })] }), ts && verbose && (_jsx(Box, { marginTop: 1, paddingLeft: 2, children: _jsxs(Text, { color: theme.colors.textMuted, children: ["timestamp: ", ts] }) }))] }));
43
- },
44
- };
45
- //# sourceMappingURL=index.js.map
@@ -1,33 +0,0 @@
1
- import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
- import { Box, Text } from "ink";
3
- import { FallbackToolUseRejectedMessage } from "../../components/FallbackToolUseRejectedMessage.js";
4
- import { getTheme } from "../../theme/index.js";
5
- import { safeFallbackText } from "../truncation.js";
6
- export const SpawnWorkerToolRenderers = {
7
- displayName() {
8
- return "Spawn Worker";
9
- },
10
- renderInput(input, _opts) {
11
- if (input.task) {
12
- return `${input.task}`;
13
- }
14
- return Object.entries(input)
15
- .map(([key, value]) => `${key}: ${JSON.stringify(value)}`)
16
- .join(", ");
17
- },
18
- renderRejection() {
19
- return _jsx(FallbackToolUseRejectedMessage, {});
20
- },
21
- renderOutput(output, _opts) {
22
- const theme = getTheme();
23
- if (!output) {
24
- return (_jsx(Box, { justifyContent: "space-between", overflowX: "hidden", width: "100%", children: _jsx(Box, { flexDirection: "row", children: _jsx(Text, { color: theme.colors.textMuted, children: "(No content)" }) }) }));
25
- }
26
- if (typeof output === "string") {
27
- return (_jsx(Box, { justifyContent: "space-between", overflowX: "hidden", width: "100%", children: _jsx(Box, { flexDirection: "row", children: _jsx(Text, { children: safeFallbackText(output) }) }) }));
28
- }
29
- const id = output.id || "unknown";
30
- return (_jsx(Box, { justifyContent: "space-between", overflowX: "hidden", width: "100%", children: _jsxs(Box, { flexDirection: "row", children: [_jsx(Text, { children: "Spawned worker " }), _jsx(Text, { bold: true, children: id })] }) }));
31
- },
32
- };
33
- //# sourceMappingURL=index.js.map
@@ -1,19 +0,0 @@
1
- import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
- import { Text } from "ink";
3
- import { getTheme } from "../../theme/index.js";
4
- export const StickerRequestToolRenderers = {
5
- displayName: () => "Stickers",
6
- renderInput(input) {
7
- if (typeof input.prompt === "string") {
8
- return input.prompt.length > 50 ? input.prompt.slice(0, 50) + "…" : input.prompt;
9
- }
10
- return "";
11
- },
12
- renderRejection() {
13
- return (_jsxs(Text, { children: ["\u00A0\u00A0\u23BF \u00A0", _jsx(Text, { color: getTheme().colors.error, children: "No (Sticker request cancelled)" })] }));
14
- },
15
- renderOutput() {
16
- return null;
17
- },
18
- };
19
- //# sourceMappingURL=index.js.map
@@ -1,17 +0,0 @@
1
- import { jsxs as _jsxs, jsx as _jsx } from "react/jsx-runtime";
2
- import { Box, Text } from "ink";
3
- import { getTheme } from "../../theme/index.js";
4
- export const ThinkToolRenderers = {
5
- displayName: () => "Think",
6
- // This is never called -- it's special-cased in AssistantToolUseMessage
7
- renderInput(input) {
8
- return input.thought;
9
- },
10
- renderRejection() {
11
- return (_jsxs(Box, { flexDirection: "row", height: 1, overflow: "hidden", children: [_jsxs(Text, { children: [" ", "\u23BF \u00A0"] }), _jsx(Text, { color: getTheme().colors.error, children: "Thought cancelled" })] }));
12
- },
13
- renderOutput() {
14
- return null;
15
- },
16
- };
17
- //# sourceMappingURL=index.js.map
@@ -1,108 +0,0 @@
1
- import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
- import { Box, Text } from "ink";
3
- import { relative } from "path";
4
- import { FallbackToolUseRejectedMessage } from "../../components/FallbackToolUseRejectedMessage.js";
5
- import { getTheme } from "../../theme/index.js";
6
- function isCountOutput(output) {
7
- return "counts" in output && Array.isArray(output.counts);
8
- }
9
- function buildCommandPreview(input) {
10
- const parts = [];
11
- // Add pattern in quotes
12
- parts.push(`"${input.pattern}"`);
13
- // Add fuzzy if present
14
- if (input.fuzzy !== undefined && input.fuzzy !== false) {
15
- if (typeof input.fuzzy === "number") {
16
- parts.push(`fuzzy:${input.fuzzy}`);
17
- }
18
- else {
19
- parts.push("fuzzy");
20
- }
21
- }
22
- // Add bool if present
23
- if (input.bool) {
24
- parts.push("bool");
25
- }
26
- // Add file_type if present
27
- if (input.file_type) {
28
- parts.push(`-t ${input.file_type}`);
29
- }
30
- // Add path if present (only if not ".")
31
- if (input.path && input.path !== ".") {
32
- parts.push(input.path);
33
- }
34
- return parts.join(" ");
35
- }
36
- export const UgToolRenderers = {
37
- displayName() {
38
- return "Ugrep";
39
- },
40
- renderInput(input, { verbose } = {}) {
41
- const commandPreview = buildCommandPreview(input);
42
- const flags = [];
43
- if (verbose) {
44
- if (input.ignore_case)
45
- flags.push("-i");
46
- if (input.smart_case)
47
- flags.push("-j");
48
- if (input.fixed_strings)
49
- flags.push("-F");
50
- if (input.word_regexp)
51
- flags.push("-w");
52
- if (input.files_only)
53
- flags.push("-l");
54
- if (input.count)
55
- flags.push("-c");
56
- if (input.context !== undefined)
57
- flags.push(`-C ${input.context}`);
58
- if (input.neg_pattern)
59
- flags.push(`-N "${input.neg_pattern}"`);
60
- if (input.decompress)
61
- flags.push("-z");
62
- if (input.glob)
63
- flags.push(`-g "${input.glob}"`);
64
- if (input.extra_args && input.extra_args.length > 0)
65
- flags.push(`[${input.extra_args.join(" ")}]`);
66
- }
67
- return flags.length > 0 ? `${commandPreview} ${flags.join(" ")}` : commandPreview;
68
- },
69
- renderRejection() {
70
- return _jsx(FallbackToolUseRejectedMessage, {});
71
- },
72
- renderOutput(output) {
73
- const theme = getTheme();
74
- // Guard: handle unexpected output shapes gracefully
75
- if (!output || typeof output !== "object") {
76
- return _jsx(Text, { color: theme.colors.textMuted, children: String(output ?? "No result") });
77
- }
78
- if (!("counts" in output) && !("matches" in output)) {
79
- const msg = output.message;
80
- return (_jsx(Text, { color: theme.colors.textMuted, children: typeof msg === "string" ? msg : "Search complete" }));
81
- }
82
- // Handle count mode
83
- if (isCountOutput(output)) {
84
- const { counts, total } = output;
85
- const displayCount = Math.min(5, counts.length);
86
- const remaining = counts.length - displayCount;
87
- return (_jsxs(Box, { flexDirection: "column", children: [_jsxs(Box, { flexDirection: "row", children: [_jsx(Text, { bold: true, children: total }), _jsx(Text, { children: " matches across " }), _jsx(Text, { bold: true, children: counts.length }), _jsx(Text, { children: " files" })] }), counts.slice(0, displayCount).map((result, i) => (_jsx(Box, { paddingLeft: 2, children: _jsxs(Text, { color: theme.colors.textMuted, children: [relative(process.cwd(), result.file), ": ", result.count] }) }, i))), remaining > 0 && (_jsx(Box, { paddingLeft: 2, children: _jsxs(Text, { color: theme.colors.textMuted, children: ["+", remaining, " more files"] }) }))] }));
88
- }
89
- // Handle normal mode
90
- const { matches } = output;
91
- if (matches.length === 0) {
92
- return (_jsx(Box, { children: _jsx(Text, { color: theme.colors.textMuted, children: "No matches found" }) }));
93
- }
94
- // Group matches by file
95
- const fileMap = new Map();
96
- for (const match of matches) {
97
- if (!fileMap.has(match.file)) {
98
- fileMap.set(match.file, []);
99
- }
100
- fileMap.get(match.file).push(match);
101
- }
102
- const filesWithMatches = Array.from(fileMap.entries());
103
- const displayFileCount = Math.min(3, filesWithMatches.length);
104
- const remainingFiles = filesWithMatches.length - displayFileCount;
105
- return (_jsxs(Box, { flexDirection: "column", children: [_jsxs(Box, { flexDirection: "row", children: [_jsx(Text, { bold: true, children: matches.length }), _jsx(Text, { children: " matches in " }), _jsx(Text, { bold: true, children: filesWithMatches.length }), _jsx(Text, { children: " files" })] }), filesWithMatches.slice(0, displayFileCount).map(([file, fileMatches], i) => (_jsx(Box, { paddingLeft: 2, children: _jsxs(Text, { color: theme.colors.textMuted, children: [relative(process.cwd(), file), ": ", fileMatches.length] }) }, i))), remainingFiles > 0 && (_jsx(Box, { paddingLeft: 2, children: _jsxs(Text, { color: theme.colors.textMuted, children: ["+", remainingFiles, " more files"] }) }))] }));
106
- },
107
- };
108
- //# sourceMappingURL=index.js.map
@@ -1,22 +0,0 @@
1
- import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
- import { Box, Text } from "ink";
3
- import { FallbackToolUseRejectedMessage } from "../../components/FallbackToolUseRejectedMessage.js";
4
- export const UseSkillToolRenderers = {
5
- displayName() {
6
- return "Use Skill";
7
- },
8
- renderInput(input, _opts) {
9
- return input.name ?? "skill";
10
- },
11
- renderRejection() {
12
- return _jsx(FallbackToolUseRejectedMessage, {});
13
- },
14
- renderOutput(output) {
15
- if (!output || typeof output !== "object") {
16
- return (_jsx(Box, { justifyContent: "space-between", overflowX: "hidden", width: "100%", children: _jsx(Box, { flexDirection: "row", children: _jsx(Text, { children: "(No content)" }) }) }));
17
- }
18
- const name = output.skill?.name ?? "unknown";
19
- return (_jsx(Box, { justifyContent: "space-between", overflowX: "hidden", width: "100%", children: _jsx(Box, { flexDirection: "row", children: _jsxs(Text, { children: ["Loaded skill ", name] }) }) }));
20
- },
21
- };
22
- //# sourceMappingURL=index.js.map
@@ -1,32 +0,0 @@
1
- import { jsx as _jsx } from "react/jsx-runtime";
2
- import { Box, Text } from "ink";
3
- import { FallbackToolUseRejectedMessage } from "../../components/FallbackToolUseRejectedMessage.js";
4
- import { getTheme } from "../../theme/index.js";
5
- export const WakeArionToolRenderers = {
6
- displayName() {
7
- return "Wake Arion";
8
- },
9
- renderInput(input, _opts) {
10
- if (input.name) {
11
- return `${input.name}`;
12
- }
13
- return Object.entries(input)
14
- .map(([key, value]) => `${key}: ${JSON.stringify(value)}`)
15
- .join(", ");
16
- },
17
- renderRejection() {
18
- return _jsx(FallbackToolUseRejectedMessage, {});
19
- },
20
- renderOutput(output, _opts) {
21
- const theme = getTheme();
22
- // Handle undefined/null output (ARIA may return undefined)
23
- if (output == null) {
24
- return (_jsx(Box, { justifyContent: "space-between", overflowX: "hidden", width: "100%", children: _jsx(Box, { flexDirection: "row", children: _jsx(Text, { color: theme.colors.success, children: "Arion is now awake" }) }) }));
25
- }
26
- const message = typeof output === "string"
27
- ? output
28
- : output.message || `${output.name || "Arion"} is now awake`;
29
- return (_jsx(Box, { justifyContent: "space-between", overflowX: "hidden", width: "100%", children: _jsx(Box, { flexDirection: "row", children: _jsx(Text, { color: theme.colors.success, children: message }) }) }));
30
- },
31
- };
32
- //# sourceMappingURL=index.js.map
@@ -1,56 +0,0 @@
1
- import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
- import { Box, Text } from "ink";
3
- import { FallbackToolUseRejectedMessage } from "../../components/FallbackToolUseRejectedMessage.js";
4
- import { useToolRenderLayout } from "../../components/ToolRenderLayoutContext.js";
5
- import { getTheme } from "../../theme/index.js";
6
- import { applyMarkdown } from "../../markdown/index.js";
7
- function truncateUrl(url, maxLen = 80) {
8
- return url.length > maxLen ? url.slice(0, maxLen - 1) + "\u2026" : url;
9
- }
10
- function formatBytes(bytes) {
11
- if (bytes < 1024)
12
- return `${bytes}B`;
13
- if (bytes < 1024 * 1024)
14
- return `${(bytes / 1024).toFixed(1)}KB`;
15
- return `${(bytes / (1024 * 1024)).toFixed(1)}MB`;
16
- }
17
- function WebFetchPreview({ preview }) {
18
- const { contentWidth } = useToolRenderLayout();
19
- const previewWidth = Math.max(contentWidth - 4, 1);
20
- return (_jsx(Text, { color: getTheme().colors.textMuted, dimColor: true, children: applyMarkdown(preview, { width: previewWidth }) }));
21
- }
22
- export const WebFetchToolRenderers = {
23
- displayName() {
24
- return "Fetch";
25
- },
26
- renderInput(input) {
27
- if (input.url) {
28
- return truncateUrl(String(input.url));
29
- }
30
- return Object.entries(input)
31
- .map(([key, value]) => `${key}: ${JSON.stringify(value)}`)
32
- .join(", ");
33
- },
34
- renderRejection() {
35
- return _jsx(FallbackToolUseRejectedMessage, {});
36
- },
37
- renderOutput(output) {
38
- if (!output || typeof output === "string") {
39
- const text = typeof output === "string" ? output : "(No content)";
40
- return (_jsx(Box, { justifyContent: "space-between", overflowX: "hidden", width: "100%", children: _jsx(Box, { flexDirection: "row", children: _jsx(Text, { color: getTheme().colors.textMuted, children: text }) }) }));
41
- }
42
- const theme = getTheme();
43
- const url = output.finalUrl || "";
44
- const status = output.status;
45
- const statusColor = status && status >= 200 && status < 300
46
- ? theme.colors.success
47
- : status && status >= 400
48
- ? theme.colors.error
49
- : theme.colors.warning;
50
- const preview = output.content ? output.content.slice(0, 200).split("\n")[0] : "";
51
- const sizeStr = output.contentBytes ? formatBytes(output.contentBytes) : "";
52
- const cacheStr = output.fromCache ? " (cached)" : "";
53
- return (_jsxs(Box, { flexDirection: "column", children: [_jsxs(Box, { flexDirection: "row", children: [status != null && (_jsxs(Text, { color: statusColor, bold: true, children: [status, " "] })), url && _jsx(Text, { color: theme.colors.textMuted, children: truncateUrl(url, 60) }), sizeStr && (_jsxs(Text, { color: theme.colors.textMuted, children: [" ", "(", sizeStr, cacheStr, ")"] })), output.truncated && _jsx(Text, { color: theme.colors.warning, children: " [truncated]" })] }), preview && (_jsx(Box, { flexDirection: "row", paddingLeft: 4, children: _jsx(WebFetchPreview, { preview: preview }) }))] }));
54
- },
55
- };
56
- //# sourceMappingURL=index.js.map
@@ -1,44 +0,0 @@
1
- import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
- import { Box, Text } from "ink";
3
- import { FallbackToolUseRejectedMessage } from "../../components/FallbackToolUseRejectedMessage.js";
4
- import { getTheme } from "../../theme/index.js";
5
- /** Extract display-friendly domain from a URL. Handles redirect URLs. */
6
- function extractDomain(url) {
7
- try {
8
- const parsed = new URL(url);
9
- return parsed.hostname.replace(/^www\./, "");
10
- }
11
- catch {
12
- // Truncate raw URL to 50 chars
13
- return url.length > 50 ? url.slice(0, 47) + "…" : url;
14
- }
15
- }
16
- export const WebSearchToolRenderers = {
17
- displayName() {
18
- return "Search";
19
- },
20
- renderInput(input) {
21
- if (input.query) {
22
- return `"${input.query}"`;
23
- }
24
- return Object.entries(input)
25
- .map(([key, value]) => `${key}: ${JSON.stringify(value)}`)
26
- .join(", ");
27
- },
28
- renderRejection() {
29
- return _jsx(FallbackToolUseRejectedMessage, {});
30
- },
31
- renderOutput(output) {
32
- if (!output || typeof output === "string") {
33
- const text = typeof output === "string" ? output : "(No results)";
34
- return (_jsx(Box, { justifyContent: "space-between", overflowX: "hidden", width: "100%", children: _jsx(Box, { flexDirection: "row", children: _jsx(Text, { color: getTheme().colors.textMuted, children: text }) }) }));
35
- }
36
- const theme = getTheme();
37
- const results = output.results || [];
38
- const query = output.query || "";
39
- const maxResults = 2;
40
- const displayResults = results.slice(0, maxResults);
41
- return (_jsxs(Box, { flexDirection: "column", children: [_jsxs(Box, { flexDirection: "row", children: [_jsx(Text, { children: "Found " }), _jsxs(Text, { bold: true, children: [results.length, " "] }), _jsx(Text, { children: results.length === 1 ? "result" : "results" }), query && _jsxs(Text, { color: theme.colors.textMuted, children: [" for '", query, "'"] })] }), displayResults.map((result, i) => (_jsxs(Box, { flexDirection: "row", paddingLeft: 4, children: [_jsx(Text, { bold: true, children: result.title.length > 60 ? result.title.slice(0, 57) + "…" : result.title }), _jsxs(Text, { color: theme.colors.textMuted, children: [" (", extractDomain(result.url), ")"] })] }, i))), results.length > maxResults && (_jsx(Box, { flexDirection: "row", paddingLeft: 4, children: _jsxs(Text, { color: theme.colors.textMuted, children: ["+", results.length - maxResults, " more"] }) }))] }));
42
- },
43
- };
44
- //# sourceMappingURL=index.js.map
@@ -1,58 +0,0 @@
1
- import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
- import { Box, Text } from "ink";
3
- import { isAbsolute, relative, resolve } from "path";
4
- import { FallbackToolUseRejectedMessage } from "../../components/FallbackToolUseRejectedMessage.js";
5
- import { getTheme } from "../../theme/index.js";
6
- import { capLine } from "../truncation.js";
7
- const MAX_LINES = 3;
8
- const MAX_FILES = 1000;
9
- const TRUNCATED_MESSAGE = `There are more than ${MAX_FILES} files in the repository. Use the LS tool (passing a specific path), Bash tool, and other tools to explore nested directories. The first ${MAX_FILES} files and directories are included below:\n\n`;
10
- export const LsToolRenderers = {
11
- displayName() {
12
- return "List";
13
- },
14
- renderInput({ path }, { verbose }) {
15
- const absolutePath = path
16
- ? isAbsolute(path)
17
- ? path
18
- : resolve(process.cwd(), path)
19
- : undefined;
20
- const relativePath = absolutePath ? relative(process.cwd(), absolutePath) : ".";
21
- return `path: "${verbose ? path : relativePath}"`;
22
- },
23
- renderRejection() {
24
- return _jsx(FallbackToolUseRejectedMessage, {});
25
- },
26
- renderOutput(content, { verbose }) {
27
- // Legacy shape: string (directory listing)
28
- if (typeof content === "string") {
29
- const result = content.replace(TRUNCATED_MESSAGE, "");
30
- if (!result) {
31
- return null;
32
- }
33
- const lines = result.split("\n").filter((_) => _.trim() !== "");
34
- return (_jsx(Box, { justifyContent: "space-between", width: "100%", children: _jsx(Box, { children: _jsxs(Box, { flexDirection: "column", paddingLeft: 0, children: [lines.slice(0, verbose ? undefined : MAX_LINES).map((_, i) => (_jsx(Text, { children: verbose ? _ : capLine(_) }, i))), !verbose && lines.length > MAX_LINES && (_jsxs(Text, { color: getTheme().colors.textMuted, children: ["... (+", lines.length - MAX_LINES, " items)"] }))] }) }) }));
35
- }
36
- // ARIA shape: { path, entries: ListDirEntry[], truncated, total }
37
- if (content != null && typeof content === "object" && !Array.isArray(content)) {
38
- const obj = content;
39
- const entries = Array.isArray(obj.entries) ? obj.entries : [];
40
- const total = typeof obj.total === "number" ? obj.total : entries.length;
41
- if (entries.length === 0) {
42
- return _jsx(Text, { children: "(empty directory)" });
43
- }
44
- const lines = entries.map((e) => {
45
- const suffix = e.type === "dir" || e.type === "directory" ? "/" : "";
46
- return `${e.name}${suffix}`;
47
- });
48
- return (_jsx(Box, { justifyContent: "space-between", width: "100%", children: _jsx(Box, { children: _jsxs(Box, { flexDirection: "column", paddingLeft: 0, children: [lines.slice(0, verbose ? undefined : MAX_LINES).map((line, i) => (_jsx(Text, { children: verbose ? line : capLine(line) }, i))), !verbose && total > MAX_LINES && (_jsxs(Text, { color: getTheme().colors.textMuted, children: ["... (+", total - MAX_LINES, " items)"] }))] }) }) }));
49
- }
50
- // Array shape (e.g., string[] of filenames)
51
- if (Array.isArray(content)) {
52
- const lines = content.map(String);
53
- return (_jsx(Box, { justifyContent: "space-between", width: "100%", children: _jsx(Box, { children: _jsxs(Box, { flexDirection: "column", paddingLeft: 0, children: [lines.slice(0, verbose ? undefined : MAX_LINES).map((line, i) => (_jsx(Text, { children: verbose ? line : capLine(line) }, i))), !verbose && lines.length > MAX_LINES && (_jsxs(Text, { color: getTheme().colors.textMuted, children: ["... (+", lines.length - MAX_LINES, " items)"] }))] }) }) }));
54
- }
55
- return null;
56
- },
57
- };
58
- //# sourceMappingURL=index.js.map