@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.
- package/bin/aria.mjs +569 -569
- package/package.json +14 -73
- package/dist/.tsbuildinfo +0 -1
- package/dist/attached-local-control-client.js +0 -826
- package/dist/bootstrap-local-control-client.js +0 -2
- package/dist/capability-aware-method-proxy.js +0 -42
- package/dist/cli-context.js +0 -160
- package/dist/commands/arions.js +0 -174
- package/dist/commands/auth.js +0 -123
- package/dist/commands/daemon.js +0 -245
- package/dist/commands/definitions.js +0 -176
- package/dist/commands/index.js +0 -74
- package/dist/commands/login-handler.js +0 -1108
- package/dist/commands/logout-handler.js +0 -92
- package/dist/commands/memory-handlers.js +0 -89
- package/dist/commands/pairing.js +0 -60
- package/dist/commands/runtime-cutover-reset-command.js +0 -12
- package/dist/commands/runtime-cutover-reset.js +0 -265
- package/dist/commands/terminal-setup.js +0 -84
- package/dist/config/aria-config.js +0 -238
- package/dist/config/index.js +0 -3
- package/dist/config/loader.js +0 -97
- package/dist/config.js +0 -142
- package/dist/daemon-info.js +0 -10
- package/dist/ensure-daemon.js +0 -128
- package/dist/entrypoints/command-mode.js +0 -5
- package/dist/entrypoints/daemon.js +0 -50
- package/dist/entrypoints/headless-stdio.js +0 -25
- package/dist/entrypoints/interactive.js +0 -80
- package/dist/event-loop-watchdog.js +0 -73
- package/dist/headless/auth-orchestrator.js +0 -508
- package/dist/headless/auth-service.js +0 -43
- package/dist/headless/bootstrap-fast-path.js +0 -112
- package/dist/headless/call-command.js +0 -143
- package/dist/headless/daemon-service.js +0 -318
- package/dist/headless/hook-actions.js +0 -235
- package/dist/headless/hook-service.js +0 -42
- package/dist/headless/kernel-services.js +0 -216
- package/dist/headless/kernel.js +0 -785
- package/dist/headless/operations/arion.js +0 -119
- package/dist/headless/operations/auth.js +0 -45
- package/dist/headless/operations/client.js +0 -31
- package/dist/headless/operations/config.js +0 -69
- package/dist/headless/operations/daemon.js +0 -47
- package/dist/headless/operations/hook.js +0 -56
- package/dist/headless/operations/index.js +0 -11
- package/dist/headless/operations/memory.js +0 -102
- package/dist/headless/operations/message.js +0 -279
- package/dist/headless/operations/model.js +0 -100
- package/dist/headless/operations/peer.js +0 -56
- package/dist/headless/operations/run.js +0 -24
- package/dist/headless/operations/session.js +0 -90
- package/dist/headless/operations/system.js +0 -19
- package/dist/headless/operations/utils.js +0 -35
- package/dist/headless/run-orchestrator.js +0 -703
- package/dist/headless/stdio-server.js +0 -439
- package/dist/history/SessionHistory.js +0 -8
- package/dist/history/SessionHistoryClient.js +0 -186
- package/dist/history/conversation-message.js +0 -112
- package/dist/history/index.js +0 -8
- package/dist/history/jsonl-replay.js +0 -154
- package/dist/history/repair-tool-pairing.js +0 -84
- package/dist/history/stall-phase-bridge.js +0 -11
- package/dist/history/turn-accumulator.js +0 -427
- package/dist/index.js +0 -7
- package/dist/ink-repl.js +0 -4183
- package/dist/local-control-bootstrap.js +0 -26
- package/dist/local-control-client.js +0 -2
- package/dist/local-control-error-reporting.js +0 -34
- package/dist/local-control-http-client.js +0 -362
- package/dist/local-control-lazy-wrapper.js +0 -363
- package/dist/local-control-manager.js +0 -146
- package/dist/main.js +0 -38
- package/dist/network-security.js +0 -62
- package/dist/networking-server.js +0 -38
- package/dist/peer-identity.js +0 -23
- package/dist/polling-subscription.js +0 -34
- package/dist/relaunch.js +0 -588
- package/dist/release-notes.js +0 -35
- package/dist/repl-cleanup.js +0 -47
- package/dist/runtime/configure-bun-sqlite.js +0 -3
- package/dist/runtime/crash-handlers.js +0 -111
- package/dist/runtime/interactive-invocation.js +0 -39
- package/dist/runtime/internal-mode.js +0 -14
- package/dist/runtime/launch-spec.js +0 -64
- package/dist/runtime/owner-lease.js +0 -44
- package/dist/runtime/public-mode.js +0 -20
- package/dist/runtime/run-internal-mode.js +0 -18
- package/dist/runtime/runtime-kind.js +0 -32
- package/dist/runtime/spawn-aria.js +0 -38
- package/dist/selectable-client.js +0 -2
- package/dist/selectable-peer.js +0 -2
- package/dist/session.js +0 -203
- package/dist/slash-commands.js +0 -80
- package/dist/sounds.js +0 -210
- package/dist/ui/App.js +0 -526
- package/dist/ui/components/AnthropicMethodPicker.js +0 -6
- package/dist/ui/components/ArionPrompt.js +0 -15
- package/dist/ui/components/AutocompleteDropdown.js +0 -23
- package/dist/ui/components/AutonomySelector.js +0 -55
- package/dist/ui/components/Banner.js +0 -98
- package/dist/ui/components/ConversationHistory.js +0 -175
- package/dist/ui/components/CopilotDeviceLoginFlow.js +0 -88
- package/dist/ui/components/CopilotSourcePicker.js +0 -50
- package/dist/ui/components/Cost.js +0 -10
- package/dist/ui/components/CustomSelect/option-map.js +0 -30
- package/dist/ui/components/CustomSelect/select-option.js +0 -13
- package/dist/ui/components/CustomSelect/select.js +0 -42
- package/dist/ui/components/CustomSelect/use-select-state.js +0 -179
- package/dist/ui/components/CustomSelect/use-select.js +0 -15
- package/dist/ui/components/ErrorDisplay.js +0 -35
- package/dist/ui/components/FallbackToolUseRejectedMessage.js +0 -7
- package/dist/ui/components/FileEditToolUpdatedMessage.js +0 -57
- package/dist/ui/components/HandoffMarker.js +0 -18
- package/dist/ui/components/HighlightedCode.js +0 -21
- package/dist/ui/components/InputArea.js +0 -187
- package/dist/ui/components/Message.js +0 -25
- package/dist/ui/components/OAuthLoginFlow.js +0 -113
- package/dist/ui/components/OutputTruncation.js +0 -35
- package/dist/ui/components/PermissionPrompt.js +0 -79
- package/dist/ui/components/PipelineTimingPanel.js +0 -15
- package/dist/ui/components/ProviderMethodPicker.js +0 -61
- package/dist/ui/components/ProviderPicker.js +0 -63
- package/dist/ui/components/RenderItemView.js +0 -71
- package/dist/ui/components/Spinner.js +0 -46
- package/dist/ui/components/StatusBar.js +0 -95
- package/dist/ui/components/StreamingIndicator.js +0 -55
- package/dist/ui/components/StructuredDiff.js +0 -168
- package/dist/ui/components/TextInputOverlay.js +0 -43
- package/dist/ui/components/ThinkingBlock.js +0 -82
- package/dist/ui/components/ToolCost.js +0 -17
- package/dist/ui/components/ToolExecution.js +0 -61
- package/dist/ui/components/ToolHeader.js +0 -51
- package/dist/ui/components/ToolRenderLayoutContext.js +0 -14
- package/dist/ui/components/ToolResultWrapper.js +0 -6
- package/dist/ui/components/ToolUseLoader.js +0 -35
- package/dist/ui/components/TraceWaterfall.js +0 -91
- package/dist/ui/components/index.js +0 -33
- package/dist/ui/components/messages/AssistantTextMessage.js +0 -25
- package/dist/ui/components/messages/UserImageMessage.js +0 -12
- package/dist/ui/components/messages/UserTextMessage.js +0 -12
- package/dist/ui/components/overlays/ArionSelector.js +0 -68
- package/dist/ui/components/overlays/ClientSelector.js +0 -62
- package/dist/ui/components/overlays/CommandPalette.js +0 -67
- package/dist/ui/components/overlays/DaemonControl.js +0 -87
- package/dist/ui/components/overlays/InviteShareOverlay.js +0 -15
- package/dist/ui/components/overlays/JoinInviteOverlay.js +0 -32
- package/dist/ui/components/overlays/MemoryBrowser.js +0 -100
- package/dist/ui/components/overlays/MessageSelector.js +0 -123
- package/dist/ui/components/overlays/ModelSelector.js +0 -211
- package/dist/ui/components/overlays/PairRequestOverlay.js +0 -42
- package/dist/ui/components/overlays/PeerSelector.js +0 -84
- package/dist/ui/components/overlays/SessionSelector.js +0 -102
- package/dist/ui/components/overlays/SoundSelector.js +0 -86
- package/dist/ui/components/overlays/ThemeSelector.js +0 -139
- package/dist/ui/components/overlays/index.js +0 -15
- package/dist/ui/components/permissions/BashPermissionRequest/BashPermissionRequest.js +0 -53
- package/dist/ui/components/permissions/FallbackPermissionRequest.js +0 -56
- package/dist/ui/components/permissions/FileEditPermissionRequest/FileEditPermissionRequest.js +0 -76
- package/dist/ui/components/permissions/FileEditPermissionRequest/FileEditToolDiff.js +0 -18
- package/dist/ui/components/permissions/FileWritePermissionRequest/FileWritePermissionRequest.js +0 -64
- package/dist/ui/components/permissions/FileWritePermissionRequest/FileWriteToolDiff.js +0 -26
- package/dist/ui/components/permissions/FilesystemPermissionRequest/FilesystemPermissionRequest.js +0 -141
- package/dist/ui/components/permissions/PermissionRequest.js +0 -70
- package/dist/ui/components/permissions/PermissionRequestTitle.js +0 -41
- package/dist/ui/components/permissions/hooks.js +0 -10
- package/dist/ui/components/permissions/toolUseOptions.js +0 -68
- package/dist/ui/components/permissions/utils.js +0 -10
- package/dist/ui/components/text-input/Cursor.js +0 -326
- package/dist/ui/components/text-input/TextInput.js +0 -231
- package/dist/ui/components/text-input/imagePaste.js +0 -28
- package/dist/ui/components/text-input/index.js +0 -6
- package/dist/ui/components/text-input/useDoublePress.js +0 -30
- package/dist/ui/components/text-input/useTextInput.js +0 -245
- package/dist/ui/components/tool-types.js +0 -9
- package/dist/ui/constants/figures.js +0 -4
- package/dist/ui/constants/index.js +0 -3
- package/dist/ui/display-mode.js +0 -93
- package/dist/ui/display-policy.js +0 -19
- package/dist/ui/hooks/index.js +0 -6
- package/dist/ui/hooks/useCommandAutocomplete.js +0 -93
- package/dist/ui/hooks/useDoublePress.js +0 -37
- package/dist/ui/hooks/useIndicatorState.js +0 -55
- package/dist/ui/hooks/useInterval.js +0 -23
- package/dist/ui/hooks/useKeyboardShortcuts.js +0 -127
- package/dist/ui/hooks/useTerminalSize.js +0 -55
- package/dist/ui/hooks/useUnifiedMessages.js +0 -117
- package/dist/ui/indicator-state.js +0 -44
- package/dist/ui/markdown/highlight.js +0 -44
- package/dist/ui/markdown/index.js +0 -1460
- package/dist/ui/markdown/tokenizer.js +0 -24
- package/dist/ui/render-item.js +0 -5
- package/dist/ui/screens/REPL.js +0 -119
- package/dist/ui/screens/approval-lifecycle.js +0 -38
- package/dist/ui/status-line.js +0 -72
- package/dist/ui/theme/index.js +0 -51
- package/dist/ui/theme/themes/claude-dark-daltonized.js +0 -51
- package/dist/ui/theme/themes/claude-dark.js +0 -50
- package/dist/ui/theme/themes/claude-light-daltonized.js +0 -51
- package/dist/ui/theme/themes/claude-light.js +0 -50
- package/dist/ui/theme/themes/dark-accessible.js +0 -18
- package/dist/ui/theme/themes/dark.js +0 -49
- package/dist/ui/theme/themes/light-accessible.js +0 -18
- package/dist/ui/theme/themes/light.js +0 -49
- package/dist/ui/theme/types.js +0 -3
- package/dist/ui/theme.js +0 -142
- package/dist/ui/to-render-items.js +0 -145
- package/dist/ui/tools/AgentTool/index.js +0 -30
- package/dist/ui/tools/ArchitectTool/index.js +0 -31
- package/dist/ui/tools/AskUserTool/index.js +0 -46
- package/dist/ui/tools/BashTool/BashToolResultMessage.js +0 -11
- package/dist/ui/tools/BashTool/OutputLine.js +0 -21
- package/dist/ui/tools/BashTool/index.js +0 -91
- package/dist/ui/tools/BrowseTool/index.js +0 -43
- package/dist/ui/tools/BrowserTool/index.js +0 -47
- package/dist/ui/tools/CbmTool/index.js +0 -188
- package/dist/ui/tools/CheckDelegationTool/index.js +0 -46
- package/dist/ui/tools/CheckMessagesTool/index.js +0 -85
- package/dist/ui/tools/CreateQuipTool/index.js +0 -30
- package/dist/ui/tools/CreateSkillTool/index.js +0 -22
- package/dist/ui/tools/CreateToolTool/index.js +0 -31
- package/dist/ui/tools/DelegateRemoteTool/index.js +0 -42
- package/dist/ui/tools/DeployTool/index.js +0 -47
- package/dist/ui/tools/FffTool/index.js +0 -103
- package/dist/ui/tools/FileEditTool/index.js +0 -67
- package/dist/ui/tools/FileReadTool/index.js +0 -68
- package/dist/ui/tools/FileWriteTool/index.js +0 -61
- package/dist/ui/tools/ForkTool/index.js +0 -47
- package/dist/ui/tools/FrgTool/index.js +0 -96
- package/dist/ui/tools/GetThreadTool/index.js +0 -39
- package/dist/ui/tools/GlobTool/index.js +0 -50
- package/dist/ui/tools/GrepTool/index.js +0 -84
- package/dist/ui/tools/HatchArionTool/index.js +0 -36
- package/dist/ui/tools/LearnSkillTool/index.js +0 -22
- package/dist/ui/tools/LearnTool/index.js +0 -43
- package/dist/ui/tools/LearnToolTool/index.js +0 -22
- package/dist/ui/tools/ListClientsTool/index.js +0 -39
- package/dist/ui/tools/LspTool/index.js +0 -261
- package/dist/ui/tools/MCPTool/index.js +0 -33
- package/dist/ui/tools/ManageNetworkTool/index.js +0 -53
- package/dist/ui/tools/MemoryReadTool/index.js +0 -64
- package/dist/ui/tools/MemoryWriteTool/index.js +0 -20
- package/dist/ui/tools/NotebookEditTool/index.js +0 -33
- package/dist/ui/tools/NotebookReadTool/index.js +0 -25
- package/dist/ui/tools/OutlookReadTool/index.js +0 -66
- package/dist/ui/tools/OutlookReplyTool/index.js +0 -49
- package/dist/ui/tools/OutlookSendTool/index.js +0 -49
- package/dist/ui/tools/PauseDelegationTool/index.js +0 -35
- package/dist/ui/tools/ProbeTool/index.js +0 -121
- package/dist/ui/tools/ProcessTool/index.js +0 -66
- package/dist/ui/tools/QuestListTool/index.js +0 -46
- package/dist/ui/tools/QuestReportTool/index.js +0 -49
- package/dist/ui/tools/QuestUpdateTool/index.js +0 -87
- package/dist/ui/tools/QuipCommentTool/index.js +0 -69
- package/dist/ui/tools/QuipReadTool/index.js +0 -71
- package/dist/ui/tools/RestArionTool/index.js +0 -32
- package/dist/ui/tools/RestartTool/index.js +0 -35
- package/dist/ui/tools/ResumeDelegationTool/index.js +0 -35
- package/dist/ui/tools/RetireArionTool/index.js +0 -32
- package/dist/ui/tools/RgTool/index.js +0 -73
- package/dist/ui/tools/SearchKnowledgeTool/index.js +0 -43
- package/dist/ui/tools/SearchMessagesTool/index.js +0 -43
- package/dist/ui/tools/SelfDiagnoseTool/index.js +0 -61
- package/dist/ui/tools/SendMessageTool/index.js +0 -45
- package/dist/ui/tools/SerenaTool/index.js +0 -124
- package/dist/ui/tools/SessionHistoryTool/index.js +0 -52
- package/dist/ui/tools/SgTool/index.js +0 -80
- package/dist/ui/tools/SlackReactTool/index.js +0 -41
- package/dist/ui/tools/SlackReadTool/index.js +0 -48
- package/dist/ui/tools/SlackSendTool/index.js +0 -45
- package/dist/ui/tools/SpawnWorkerTool/index.js +0 -33
- package/dist/ui/tools/StickerRequestTool/index.js +0 -19
- package/dist/ui/tools/ThinkTool/index.js +0 -17
- package/dist/ui/tools/UgTool/index.js +0 -108
- package/dist/ui/tools/UseSkillTool/index.js +0 -22
- package/dist/ui/tools/WakeArionTool/index.js +0 -32
- package/dist/ui/tools/WebFetchTool/index.js +0 -56
- package/dist/ui/tools/WebSearchTool/index.js +0 -44
- package/dist/ui/tools/lsTool/index.js +0 -58
- package/dist/ui/tools/registry.js +0 -197
- package/dist/ui/tools/tool-renderer.js +0 -11
- package/dist/ui/tools/truncation.js +0 -35
- package/dist/ui/types/anthropic.js +0 -4
- package/dist/ui/types/index.js +0 -2
- package/dist/ui/types/message.js +0 -3
- package/dist/ui/types/tool.js +0 -4
- package/dist/ui/utils/array.js +0 -4
- package/dist/ui/utils/cursor.js +0 -131
- package/dist/ui/utils/diff.js +0 -120
- package/dist/ui/utils/format.js +0 -42
- package/dist/ui/utils/fuzzy.js +0 -59
- package/dist/ui/utils/index.js +0 -11
- package/dist/ui/utils/keys.js +0 -8
- package/dist/ui/utils/patch.js +0 -17
- package/dist/ui/utils/risk.js +0 -114
- package/dist/ui/utils/terminal-image.js +0 -70
- package/dist/ui/utils/validation.js +0 -48
- package/dist/ui/verb-pairs.js +0 -248
- package/dist/ui.js +0 -131
- package/src/entrypoints/command-mode.ts +0 -5
- package/src/entrypoints/daemon.ts +0 -54
- package/src/entrypoints/headless-stdio.ts +0 -27
- package/src/entrypoints/interactive.ts +0 -112
- package/src/main.ts +0 -44
- package/src/runtime/configure-bun-sqlite.ts +0 -3
- package/src/runtime/crash-handlers.ts +0 -128
- package/src/runtime/interactive-invocation.test.ts +0 -42
- package/src/runtime/interactive-invocation.ts +0 -51
- package/src/runtime/internal-mode.test.ts +0 -19
- package/src/runtime/internal-mode.ts +0 -24
- package/src/runtime/launch-spec.test.ts +0 -26
- package/src/runtime/launch-spec.ts +0 -84
- package/src/runtime/owner-lease.ts +0 -52
- package/src/runtime/public-mode.test.ts +0 -18
- package/src/runtime/public-mode.ts +0 -19
- package/src/runtime/run-internal-mode.ts +0 -19
- package/src/runtime/runtime-kind.test.ts +0 -23
- package/src/runtime/runtime-kind.ts +0 -41
- 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
|
package/dist/history/index.js
DELETED
|
@@ -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
|