@aria-cli/cli 1.0.51 → 1.0.54

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 +569 -569
  2. package/package.json +14 -73
  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 -245
  11. package/dist/commands/definitions.js +0 -176
  12. package/dist/commands/index.js +0 -74
  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 -38
  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 -588
  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 -44
  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,112 +0,0 @@
1
- /**
2
- * ConversationMessage — CLI-specific UI bridge.
3
- *
4
- * Re-exports all core types and functions from @aria-cli/aria,
5
- * and provides the UI-specific bridge function for rendering.
6
- */
7
- // Re-export everything from the aria package
8
- export * from "@aria-cli/aria/history/conversation-message.js";
9
- // ---------------------------------------------------------------------------
10
- // UI Bridge - converts ConversationMessage[] to HistoryMessage[] for rendering
11
- // ---------------------------------------------------------------------------
12
- /**
13
- * Convert ConversationMessage[] to the legacy HistoryMessage[] format
14
- * used by the existing CLI UI components.
15
- *
16
- * This bridges the new unified message format to the old rendering pipeline.
17
- */
18
- export function conversationMessageToHistoryMessages(messages) {
19
- const items = [];
20
- for (const msg of messages) {
21
- for (const block of msg.content) {
22
- switch (block.type) {
23
- case "thinking":
24
- items.push({
25
- id: `thinking-${crypto.randomUUID()}`,
26
- role: "thinking_history",
27
- content: block.content,
28
- wordCount: block.wordCount,
29
- durationSeconds: block.durationMs != null ? block.durationMs / 1000 : undefined,
30
- verb: block.verb,
31
- arionName: msg.arion?.name,
32
- arionEmoji: msg.arion?.emoji,
33
- arionColor: msg.arion?.color,
34
- });
35
- break;
36
- case "tool_use":
37
- items.push({
38
- id: `tool-${crypto.randomUUID()}`,
39
- role: "tool_history",
40
- tool: {
41
- id: block.id,
42
- name: block.name,
43
- args: block.arguments,
44
- status: "pending",
45
- startTime: undefined,
46
- endTime: undefined,
47
- },
48
- });
49
- break;
50
- case "tool_result": {
51
- // Find matching tool_history across ALL messages and update its result/status
52
- let toolItem;
53
- for (let idx = items.length - 1; idx >= 0; idx--) {
54
- const item = items[idx];
55
- if (item.role === "tool_history" &&
56
- item.tool.id === block.toolUseId) {
57
- toolItem = item;
58
- break;
59
- }
60
- }
61
- if (toolItem) {
62
- toolItem.tool.status = block.status === "error" ? "error" : "complete";
63
- if (block.status === "error") {
64
- toolItem.tool.error = block.content;
65
- }
66
- else {
67
- toolItem.tool.result = block.content;
68
- }
69
- if (block.resultData !== undefined) {
70
- toolItem.tool.resultData = block.resultData;
71
- }
72
- if (block.durationMs !== undefined) {
73
- toolItem.tool.durationMs = block.durationMs;
74
- }
75
- if (block.usage !== undefined) {
76
- toolItem.tool.usage = block.usage;
77
- }
78
- }
79
- break;
80
- }
81
- case "handoff":
82
- items.push({
83
- id: `handoff-${crypto.randomUUID()}`,
84
- role: "handoff_history",
85
- target: block.target,
86
- direction: block.direction,
87
- });
88
- break;
89
- case "error":
90
- items.push({
91
- id: `error-${crypto.randomUUID()}`,
92
- role: "error",
93
- content: block.content,
94
- suggestion: block.suggestion,
95
- });
96
- break;
97
- case "text":
98
- items.push({
99
- id: `msg-${crypto.randomUUID()}`,
100
- role: msg.role,
101
- content: block.text,
102
- arion: msg.arion
103
- ? { name: msg.arion.name, emoji: msg.arion.emoji, color: msg.arion.color }
104
- : undefined,
105
- });
106
- break;
107
- }
108
- }
109
- }
110
- return items;
111
- }
112
- //# sourceMappingURL=conversation-message.js.map
@@ -1,8 +0,0 @@
1
- // packages/cli/src/history/index.ts
2
- export { SessionHistory } from "./SessionHistory.js";
3
- export { SessionHistoryClient } from "./SessionHistoryClient.js";
4
- export { repairToolCallPairing } from "./repair-tool-pairing.js";
5
- export { ContentBlockSchema, ArionRefSchema, ConversationMessageSchema, createUserMessage, createSystemMessage, createErrorMessage, createIncomingMessagePair, toModelMessages, fromModelMessages, fromV1Columns, conversationMessageToHistoryMessages, extractTextContent, extractToolCalls, extractThinking, extractToolCallId, } from "./conversation-message.js";
6
- export { TurnAccumulator } from "./turn-accumulator.js";
7
- export { replaySessionFromJsonl, findJsonlForSession, mergeWithJsonlRecovery, } from "./jsonl-replay.js";
8
- //# sourceMappingURL=index.js.map
@@ -1,154 +0,0 @@
1
- /**
2
- * JSONL Replay — reconstructs ConversationMessage[] from a JSONL event log.
3
- *
4
- * The JsonlEventLogger writes every RunEvent to disk as newline-delimited JSON.
5
- * This module reads those logs back and feeds them through a TurnAccumulator
6
- * to reconstruct the conversation messages for crash recovery and session resume.
7
- *
8
- * Each JSONL line has the shape: { ts: string, event: RunEvent }
9
- */
10
- import { readFileSync, existsSync } from "node:fs";
11
- import { TurnAccumulator } from "./turn-accumulator.js";
12
- import { createUserMessage } from "./conversation-message.js";
13
- /**
14
- * Replay a JSONL event log file and reconstruct ConversationMessage[].
15
- *
16
- * Feeds each RunEvent through a fresh TurnAccumulator. On turn boundaries
17
- * (turn_complete events), the accumulator flushes and messages are collected.
18
- * Any remaining pending content is flushed at the end (handles mid-turn crashes).
19
- *
20
- * Returns user + assistant + tool messages. User messages are captured via
21
- * synthetic `user_message` events logged before each LLM call.
22
- */
23
- export function replaySessionFromJsonl(jsonlPath) {
24
- if (!existsSync(jsonlPath))
25
- return [];
26
- const raw = readFileSync(jsonlPath, "utf-8");
27
- const lines = raw.split("\n").filter((line) => line.trim().length > 0);
28
- const accumulator = new TurnAccumulator();
29
- const allMessages = [];
30
- for (const line of lines) {
31
- let entry;
32
- try {
33
- entry = JSON.parse(line);
34
- }
35
- catch {
36
- // Malformed line (truncated on crash) — skip
37
- continue;
38
- }
39
- if (!entry.event || typeof entry.event.type !== "string")
40
- continue;
41
- // User messages are logged as synthetic events — not RunEvents.
42
- // Convert them directly to ConversationMessage without the accumulator.
43
- if (entry.event.type === "user_message") {
44
- // Flush any pending assistant content before the user message
45
- if (accumulator.hasPendingContent()) {
46
- allMessages.push(...accumulator.flush());
47
- }
48
- const content = entry.event.content ?? "";
49
- const id = entry.event.id;
50
- const userMsg = createUserMessage(content);
51
- if (id)
52
- userMsg.id = id;
53
- allMessages.push(userMsg);
54
- continue;
55
- }
56
- // Feed the RunEvent through the accumulator
57
- const signal = accumulator.ingest(entry.event);
58
- if (signal === "flush") {
59
- const turnMessages = accumulator.flush();
60
- allMessages.push(...turnMessages);
61
- }
62
- }
63
- // Flush any remaining pending content (mid-turn crash recovery)
64
- if (accumulator.hasPendingContent()) {
65
- const partial = accumulator.flush();
66
- allMessages.push(...partial);
67
- }
68
- return allMessages;
69
- }
70
- /**
71
- * Find the JSONL log file for a session within an Arion's log directory.
72
- * Returns the file path if found, null otherwise.
73
- *
74
- * JSONL files are named {sessionId}.jsonl under the Arion's logs/ directory.
75
- */
76
- /**
77
- * Extract a content fingerprint from a ConversationMessage for identity-based dedup.
78
- *
79
- * Uses API-assigned identifiers (tool_use IDs, tool_result references) when available —
80
- * these are stable across replays. Falls back to role+content text for messages without
81
- * tool blocks (user text, assistant text), since their UUIDs are regenerated on replay.
82
- */
83
- function extractContentFingerprint(msg) {
84
- for (const block of msg.content) {
85
- if (block.type === "tool_use" && block.id) {
86
- return `tool_use:${block.id}`;
87
- }
88
- if (block.type === "tool_result" && block.toolUseId) {
89
- return `tool_result:${block.toolUseId}`;
90
- }
91
- }
92
- // Text-only messages: fingerprint by role + text content (stable across replays)
93
- const text = msg.content
94
- .filter((b) => b.type === "text")
95
- .map((b) => b.text)
96
- .join("");
97
- return `${msg.role}:${text}`;
98
- }
99
- /**
100
- * Merge SQLite messages with JSONL-replayed messages for crash recovery.
101
- *
102
- * Strategy: SQLite is the primary store; JSONL fills gaps from crash recovery.
103
- * Uses content-based identity (tool_use IDs, tool_result references) to detect
104
- * which JSONL messages are truly missing from SQLite, avoiding the position-based
105
- * counting that breaks when JSONL accumulates events across multiple session runs
106
- * with different message coalescing boundaries.
107
- *
108
- * Returns { messages, backfillMessages } where backfillMessages are the
109
- * messages JSONL had that SQLite was missing (for SQLite index backfill).
110
- */
111
- export function mergeWithJsonlRecovery(sqliteMessages, jsonlPath) {
112
- if (!jsonlPath) {
113
- return { messages: sqliteMessages, backfillMessages: [] };
114
- }
115
- let jsonlMessages;
116
- try {
117
- jsonlMessages = replaySessionFromJsonl(jsonlPath);
118
- }
119
- catch {
120
- return { messages: sqliteMessages, backfillMessages: [] };
121
- }
122
- if (jsonlMessages.length === 0) {
123
- return { messages: sqliteMessages, backfillMessages: [] };
124
- }
125
- // If SQLite already has at least as many messages, it's complete.
126
- if (sqliteMessages.length >= jsonlMessages.length) {
127
- return { messages: sqliteMessages, backfillMessages: [] };
128
- }
129
- // JSONL has more messages than SQLite — crash recovery needed.
130
- // Use content-based identity to find which JSONL messages are truly missing.
131
- // Tool_use IDs and tool_result references are API-assigned and stable across replays.
132
- const sqliteFingerprints = new Set(sqliteMessages.map(extractContentFingerprint));
133
- const backfillMessages = [];
134
- for (const msg of jsonlMessages) {
135
- const fp = extractContentFingerprint(msg);
136
- if (!sqliteFingerprints.has(fp)) {
137
- backfillMessages.push(msg);
138
- }
139
- }
140
- // Combine: SQLite messages (primary, in persisted order) + truly new JSONL messages
141
- const messages = [...sqliteMessages, ...backfillMessages];
142
- return { messages, backfillMessages };
143
- }
144
- export function findJsonlForSession(ariaDir, arionName, sessionId) {
145
- const perArionPath = `${ariaDir}/arions/${arionName}/logs/${sessionId}.jsonl`;
146
- if (existsSync(perArionPath))
147
- return perArionPath;
148
- // Fallback: check legacy global path
149
- const globalPath = `${ariaDir}/logs/${sessionId}.jsonl`;
150
- if (existsSync(globalPath))
151
- return globalPath;
152
- return null;
153
- }
154
- //# sourceMappingURL=jsonl-replay.js.map
@@ -1,84 +0,0 @@
1
- function hasMeaningfulAssistantContent(content) {
2
- return typeof content !== "string" || content.trim().length > 0;
3
- }
4
- function stripToolCalls(msg) {
5
- const { toolCalls, ...rest } = msg;
6
- return rest;
7
- }
8
- function hasToolResultLater(messages, startIdx, toolCallId) {
9
- for (let i = startIdx; i < messages.length; i++) {
10
- const msg = messages[i];
11
- if (msg.role === "tool" && msg.toolCallId === toolCallId) {
12
- return true;
13
- }
14
- }
15
- return false;
16
- }
17
- /**
18
- * Repair tool call/result pairing in a message sequence.
19
- *
20
- * Ensures:
21
- * 1. Every tool result has a matching tool call (removes orphans)
22
- * 2. Every tool call has a matching result (adds synthetic "interrupted" result)
23
- * 3. Synthetic results are placed AFTER real results for the same assistant (R2-C3)
24
- * 4. Tool messages without toolCallId are removed (R2 F-10)
25
- * 5. thoughtSignature is preserved on tool calls (Gemini requirement)
26
- *
27
- * Inspired by Codex's normalize_history() and OpenClaw's repairToolUseResultPairing().
28
- */
29
- export function repairToolCallPairing(messages) {
30
- const result = [];
31
- for (let i = 0; i < messages.length; i++) {
32
- const msg = messages[i];
33
- if (msg.role === "assistant" && msg.toolCalls?.length) {
34
- const toolCallIds = new Set(msg.toolCalls.map((tc) => tc.id));
35
- const immediateResultIds = new Set();
36
- const immediateToolResults = [];
37
- let cursor = i + 1;
38
- while (cursor < messages.length && messages[cursor].role === "tool") {
39
- const toolMsg = messages[cursor];
40
- if (toolMsg.toolCallId &&
41
- toolCallIds.has(toolMsg.toolCallId) &&
42
- !immediateResultIds.has(toolMsg.toolCallId)) {
43
- immediateResultIds.add(toolMsg.toolCallId);
44
- immediateToolResults.push(toolMsg);
45
- }
46
- cursor++;
47
- }
48
- const keptToolCalls = msg.toolCalls.filter((tc) => {
49
- if (immediateResultIds.has(tc.id)) {
50
- return true;
51
- }
52
- return !hasToolResultLater(messages, cursor, tc.id);
53
- });
54
- const syntheticCalls = keptToolCalls.filter((tc) => !immediateResultIds.has(tc.id));
55
- if (keptToolCalls.length === msg.toolCalls.length) {
56
- result.push(msg);
57
- }
58
- else if (keptToolCalls.length > 0) {
59
- result.push({ ...msg, toolCalls: keptToolCalls });
60
- }
61
- else if (hasMeaningfulAssistantContent(msg.content)) {
62
- result.push(stripToolCalls(msg));
63
- }
64
- result.push(...immediateToolResults);
65
- for (const tc of syntheticCalls) {
66
- result.push({
67
- role: "tool",
68
- content: `[Tool execution interrupted — no result for ${tc.name}]`,
69
- toolCallId: tc.id,
70
- });
71
- }
72
- i = cursor - 1;
73
- continue;
74
- }
75
- // Tool messages are only valid when consumed as part of the immediate
76
- // assistant -> tool_result boundary handled above.
77
- if (msg.role === "tool") {
78
- continue;
79
- }
80
- result.push(msg);
81
- }
82
- return result;
83
- }
84
- //# sourceMappingURL=repair-tool-pairing.js.map
@@ -1,11 +0,0 @@
1
- /**
2
- * Bridge between SessionHistory's injectable stall-phase callbacks and
3
- * the CLI's event-loop watchdog.
4
- */
5
- import { setStallPhase, clearStallPhase, getStallPhase } from "../event-loop-watchdog.js";
6
- export const cliStallPhase = {
7
- get: getStallPhase,
8
- set: setStallPhase,
9
- clear: clearStallPhase,
10
- };
11
- //# sourceMappingURL=stall-phase-bridge.js.map