@aria-cli/cli 1.0.57 → 1.0.59
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 +799 -668
- package/package.json +17 -76
- 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 -367
- package/dist/commands/definitions.js +0 -176
- package/dist/commands/index.js +0 -80
- 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 -62
- 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 -617
- 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 -72
- 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,439 +0,0 @@
|
|
|
1
|
-
import { HEADLESS_OPERATION_SCHEMAS, HeadlessInteractionResponseSchema, HeadlessRequestIdSchema, } from "@aria-cli/tools";
|
|
2
|
-
import { createHeadlessKernelRuntime } from "./kernel.js";
|
|
3
|
-
const DISPATCH_ITERATOR_CLEANUP_TIMEOUT_MS = 200;
|
|
4
|
-
const RUNTIME_RELEASE_CLEANUP_GRACE_MS = 500;
|
|
5
|
-
function createFrameWriter(stream = process.stdout) {
|
|
6
|
-
let outputFailed = false;
|
|
7
|
-
const handleStreamError = () => {
|
|
8
|
-
outputFailed = true;
|
|
9
|
-
};
|
|
10
|
-
stream.on?.("error", handleStreamError);
|
|
11
|
-
const writer = ((frame) => {
|
|
12
|
-
if (outputFailed) {
|
|
13
|
-
return false;
|
|
14
|
-
}
|
|
15
|
-
try {
|
|
16
|
-
stream.write(`${JSON.stringify(frame)}\n`);
|
|
17
|
-
return true;
|
|
18
|
-
}
|
|
19
|
-
catch {
|
|
20
|
-
outputFailed = true;
|
|
21
|
-
return false;
|
|
22
|
-
}
|
|
23
|
-
});
|
|
24
|
-
writer.close = () => {
|
|
25
|
-
stream.off?.("error", handleStreamError);
|
|
26
|
-
};
|
|
27
|
-
return writer;
|
|
28
|
-
}
|
|
29
|
-
function parseClientFrame(line, parseErrorSeq, writeFrame) {
|
|
30
|
-
let raw;
|
|
31
|
-
try {
|
|
32
|
-
raw = JSON.parse(line);
|
|
33
|
-
}
|
|
34
|
-
catch {
|
|
35
|
-
writeFrame({
|
|
36
|
-
kind: "result",
|
|
37
|
-
requestId: `parse-error-${parseErrorSeq}`,
|
|
38
|
-
op: "unknown",
|
|
39
|
-
ok: false,
|
|
40
|
-
error: {
|
|
41
|
-
code: "PARSE_ERROR",
|
|
42
|
-
message: "Malformed JSON input",
|
|
43
|
-
},
|
|
44
|
-
});
|
|
45
|
-
return null;
|
|
46
|
-
}
|
|
47
|
-
if (!raw || typeof raw !== "object") {
|
|
48
|
-
writeFrame({
|
|
49
|
-
kind: "result",
|
|
50
|
-
requestId: `parse-error-${parseErrorSeq}`,
|
|
51
|
-
op: "unknown",
|
|
52
|
-
ok: false,
|
|
53
|
-
error: {
|
|
54
|
-
code: "PARSE_ERROR",
|
|
55
|
-
message: "Input must be a JSON object",
|
|
56
|
-
},
|
|
57
|
-
});
|
|
58
|
-
return null;
|
|
59
|
-
}
|
|
60
|
-
const record = raw;
|
|
61
|
-
if (record.kind === "interaction.respond" &&
|
|
62
|
-
HeadlessRequestIdSchema.safeParse(record.requestId).success &&
|
|
63
|
-
typeof record.interactionId === "string") {
|
|
64
|
-
return record;
|
|
65
|
-
}
|
|
66
|
-
if (record.kind === "request" &&
|
|
67
|
-
HeadlessRequestIdSchema.safeParse(record.requestId).success &&
|
|
68
|
-
typeof record.op === "string") {
|
|
69
|
-
return record;
|
|
70
|
-
}
|
|
71
|
-
writeFrame({
|
|
72
|
-
kind: "result",
|
|
73
|
-
requestId: `parse-error-${parseErrorSeq}`,
|
|
74
|
-
op: "unknown",
|
|
75
|
-
ok: false,
|
|
76
|
-
error: {
|
|
77
|
-
code: "PARSE_ERROR",
|
|
78
|
-
message: "Missing required kind/requestId/op fields",
|
|
79
|
-
},
|
|
80
|
-
});
|
|
81
|
-
return null;
|
|
82
|
-
}
|
|
83
|
-
export async function startHeadlessStdioServer(options) {
|
|
84
|
-
const writeFrame = createFrameWriter();
|
|
85
|
-
let runtimePromise = null;
|
|
86
|
-
let runtime = null;
|
|
87
|
-
let runtimeReleasePromise = null;
|
|
88
|
-
const inFlight = new Set();
|
|
89
|
-
const seenRequestIds = new Set();
|
|
90
|
-
const pendingIteratorCleanup = new Set();
|
|
91
|
-
const active = new Map();
|
|
92
|
-
let parseErrorSeq = 0;
|
|
93
|
-
let shutdownPromise = null;
|
|
94
|
-
let inputBuffer = "";
|
|
95
|
-
let inputClosed = false;
|
|
96
|
-
let serverDoneResolved = false;
|
|
97
|
-
let resolveServerDone = null;
|
|
98
|
-
const serverDone = new Promise((resolve) => {
|
|
99
|
-
resolveServerDone = () => {
|
|
100
|
-
if (serverDoneResolved) {
|
|
101
|
-
return;
|
|
102
|
-
}
|
|
103
|
-
serverDoneResolved = true;
|
|
104
|
-
resolve();
|
|
105
|
-
};
|
|
106
|
-
});
|
|
107
|
-
const ensureRuntime = () => {
|
|
108
|
-
runtimePromise ??= createHeadlessKernelRuntime(options).then((created) => {
|
|
109
|
-
runtime = created;
|
|
110
|
-
return created;
|
|
111
|
-
});
|
|
112
|
-
return runtimePromise;
|
|
113
|
-
};
|
|
114
|
-
const releaseRuntime = () => {
|
|
115
|
-
runtimeReleasePromise ??= (async () => {
|
|
116
|
-
if (runtime) {
|
|
117
|
-
await runtime.release();
|
|
118
|
-
return;
|
|
119
|
-
}
|
|
120
|
-
if (!runtimePromise) {
|
|
121
|
-
return;
|
|
122
|
-
}
|
|
123
|
-
try {
|
|
124
|
-
const created = await runtimePromise;
|
|
125
|
-
runtime = created;
|
|
126
|
-
await created.release();
|
|
127
|
-
}
|
|
128
|
-
catch {
|
|
129
|
-
// createHeadlessKernelRuntime is responsible for rolling back partial bootstrap state.
|
|
130
|
-
}
|
|
131
|
-
})();
|
|
132
|
-
return runtimeReleasePromise;
|
|
133
|
-
};
|
|
134
|
-
const isKnownOperation = (op) => Object.prototype.hasOwnProperty.call(HEADLESS_OPERATION_SCHEMAS, op);
|
|
135
|
-
const raceWithAbort = async (signal, task) => {
|
|
136
|
-
if (signal.aborted) {
|
|
137
|
-
return { kind: "aborted" };
|
|
138
|
-
}
|
|
139
|
-
return new Promise((resolve, reject) => {
|
|
140
|
-
let settled = false;
|
|
141
|
-
const onAbort = () => {
|
|
142
|
-
if (settled) {
|
|
143
|
-
return;
|
|
144
|
-
}
|
|
145
|
-
settled = true;
|
|
146
|
-
signal.removeEventListener("abort", onAbort);
|
|
147
|
-
resolve({ kind: "aborted" });
|
|
148
|
-
};
|
|
149
|
-
signal.addEventListener("abort", onAbort);
|
|
150
|
-
task.then((value) => {
|
|
151
|
-
if (settled) {
|
|
152
|
-
return;
|
|
153
|
-
}
|
|
154
|
-
settled = true;
|
|
155
|
-
signal.removeEventListener("abort", onAbort);
|
|
156
|
-
resolve({ kind: "value", value });
|
|
157
|
-
}, (error) => {
|
|
158
|
-
if (settled) {
|
|
159
|
-
return;
|
|
160
|
-
}
|
|
161
|
-
settled = true;
|
|
162
|
-
signal.removeEventListener("abort", onAbort);
|
|
163
|
-
reject(error);
|
|
164
|
-
});
|
|
165
|
-
});
|
|
166
|
-
};
|
|
167
|
-
const detachDispatchIterator = async (iterator) => {
|
|
168
|
-
if (typeof iterator.return !== "function") {
|
|
169
|
-
return true;
|
|
170
|
-
}
|
|
171
|
-
try {
|
|
172
|
-
const cleanupPromise = iterator.return().then(() => undefined, () => undefined);
|
|
173
|
-
const trackedCleanup = cleanupPromise.finally(() => {
|
|
174
|
-
pendingIteratorCleanup.delete(trackedCleanup);
|
|
175
|
-
});
|
|
176
|
-
const result = await Promise.race([
|
|
177
|
-
trackedCleanup.then(() => true),
|
|
178
|
-
new Promise((resolve) => setTimeout(() => resolve(false), DISPATCH_ITERATOR_CLEANUP_TIMEOUT_MS)),
|
|
179
|
-
]);
|
|
180
|
-
if (!result) {
|
|
181
|
-
pendingIteratorCleanup.add(trackedCleanup);
|
|
182
|
-
}
|
|
183
|
-
return result;
|
|
184
|
-
}
|
|
185
|
-
catch {
|
|
186
|
-
// Best-effort shutdown: iterator cleanup failure should not block runtime release.
|
|
187
|
-
return false;
|
|
188
|
-
}
|
|
189
|
-
};
|
|
190
|
-
const writeConnectionClosedResult = (requestId, op) => writeFrame({
|
|
191
|
-
kind: "result",
|
|
192
|
-
requestId,
|
|
193
|
-
op,
|
|
194
|
-
ok: false,
|
|
195
|
-
error: {
|
|
196
|
-
code: "CONNECTION_CLOSED",
|
|
197
|
-
message: "Connection closed before request completed",
|
|
198
|
-
},
|
|
199
|
-
});
|
|
200
|
-
const shutdown = () => {
|
|
201
|
-
shutdownPromise ??= (async () => {
|
|
202
|
-
for (const [requestId, state] of active) {
|
|
203
|
-
state.controller.abort();
|
|
204
|
-
if (state.completed || state.connectionClosedEmitted) {
|
|
205
|
-
continue;
|
|
206
|
-
}
|
|
207
|
-
state.connectionClosedEmitted = true;
|
|
208
|
-
writeConnectionClosedResult(requestId, state.op);
|
|
209
|
-
}
|
|
210
|
-
await Promise.allSettled([...active.values()].map((state) => state.promise));
|
|
211
|
-
if (pendingIteratorCleanup.size > 0) {
|
|
212
|
-
await Promise.race([
|
|
213
|
-
Promise.allSettled([...pendingIteratorCleanup]),
|
|
214
|
-
new Promise((resolve) => setTimeout(() => resolve(), RUNTIME_RELEASE_CLEANUP_GRACE_MS)),
|
|
215
|
-
]);
|
|
216
|
-
}
|
|
217
|
-
await releaseRuntime();
|
|
218
|
-
writeFrame.close();
|
|
219
|
-
process.stdin.removeListener("data", handleData);
|
|
220
|
-
process.stdin.removeListener("end", handleInputClosed);
|
|
221
|
-
process.stdin.removeListener("close", handleInputClosed);
|
|
222
|
-
process.removeListener("SIGTERM", handleSigterm);
|
|
223
|
-
})();
|
|
224
|
-
return shutdownPromise;
|
|
225
|
-
};
|
|
226
|
-
const handleSigterm = () => {
|
|
227
|
-
process.stdin.pause();
|
|
228
|
-
void shutdown().finally(() => resolveServerDone?.());
|
|
229
|
-
};
|
|
230
|
-
process.once("SIGTERM", handleSigterm);
|
|
231
|
-
const dispatchLine = (line) => {
|
|
232
|
-
parseErrorSeq += 1;
|
|
233
|
-
const parsed = parseClientFrame(line, parseErrorSeq, writeFrame);
|
|
234
|
-
if (parsed) {
|
|
235
|
-
launch(parsed);
|
|
236
|
-
}
|
|
237
|
-
};
|
|
238
|
-
const flushBufferedLines = () => {
|
|
239
|
-
while (true) {
|
|
240
|
-
const newlineIndex = inputBuffer.indexOf("\n");
|
|
241
|
-
if (newlineIndex < 0) {
|
|
242
|
-
return;
|
|
243
|
-
}
|
|
244
|
-
let line = inputBuffer.slice(0, newlineIndex);
|
|
245
|
-
if (line.endsWith("\r")) {
|
|
246
|
-
line = line.slice(0, -1);
|
|
247
|
-
}
|
|
248
|
-
inputBuffer = inputBuffer.slice(newlineIndex + 1);
|
|
249
|
-
dispatchLine(line);
|
|
250
|
-
}
|
|
251
|
-
};
|
|
252
|
-
const handleData = (chunk) => {
|
|
253
|
-
inputBuffer += typeof chunk === "string" ? chunk : chunk.toString("utf8");
|
|
254
|
-
flushBufferedLines();
|
|
255
|
-
};
|
|
256
|
-
const handleInputClosed = () => {
|
|
257
|
-
if (inputClosed) {
|
|
258
|
-
return;
|
|
259
|
-
}
|
|
260
|
-
inputClosed = true;
|
|
261
|
-
let trailing = inputBuffer;
|
|
262
|
-
if (trailing.endsWith("\r")) {
|
|
263
|
-
trailing = trailing.slice(0, -1);
|
|
264
|
-
}
|
|
265
|
-
inputBuffer = "";
|
|
266
|
-
if (trailing.trim().length > 0) {
|
|
267
|
-
dispatchLine(trailing);
|
|
268
|
-
}
|
|
269
|
-
void shutdown().finally(() => resolveServerDone?.());
|
|
270
|
-
};
|
|
271
|
-
const launch = (frame) => {
|
|
272
|
-
const op = frame.kind === "request" ? frame.op : "interaction.respond";
|
|
273
|
-
const scopeSwitchInFlight = [...active.values()].some((state) => state.op === "arion.become");
|
|
274
|
-
if (frame.kind === "request" &&
|
|
275
|
-
((frame.op === "arion.become" && inFlight.size > 0) ||
|
|
276
|
-
(frame.op !== "arion.become" && scopeSwitchInFlight))) {
|
|
277
|
-
writeFrame({
|
|
278
|
-
kind: "result",
|
|
279
|
-
requestId: frame.requestId,
|
|
280
|
-
op,
|
|
281
|
-
ok: false,
|
|
282
|
-
error: {
|
|
283
|
-
code: "ARION_SCOPE_BUSY",
|
|
284
|
-
message: frame.op === "arion.become"
|
|
285
|
-
? "arion.become requires an idle headless connection"
|
|
286
|
-
: "Headless scope is switching arions; wait for arion.become to finish",
|
|
287
|
-
},
|
|
288
|
-
});
|
|
289
|
-
seenRequestIds.add(frame.requestId);
|
|
290
|
-
return;
|
|
291
|
-
}
|
|
292
|
-
if (inFlight.has(frame.requestId)) {
|
|
293
|
-
writeFrame({
|
|
294
|
-
kind: "result",
|
|
295
|
-
requestId: frame.requestId,
|
|
296
|
-
op,
|
|
297
|
-
ok: false,
|
|
298
|
-
error: {
|
|
299
|
-
code: "DUPLICATE_REQUEST_ID",
|
|
300
|
-
message: `Request ${frame.requestId} is already in flight`,
|
|
301
|
-
},
|
|
302
|
-
});
|
|
303
|
-
return;
|
|
304
|
-
}
|
|
305
|
-
if (seenRequestIds.has(frame.requestId)) {
|
|
306
|
-
writeFrame({
|
|
307
|
-
kind: "result",
|
|
308
|
-
requestId: frame.requestId,
|
|
309
|
-
op: frame.kind === "request" ? frame.op : "interaction.respond",
|
|
310
|
-
ok: false,
|
|
311
|
-
error: {
|
|
312
|
-
code: "DUPLICATE_REQUEST_ID",
|
|
313
|
-
message: `Request ${frame.requestId} has already been used on this connection`,
|
|
314
|
-
},
|
|
315
|
-
});
|
|
316
|
-
return;
|
|
317
|
-
}
|
|
318
|
-
if (frame.kind === "request") {
|
|
319
|
-
if (!isKnownOperation(frame.op)) {
|
|
320
|
-
writeFrame({
|
|
321
|
-
kind: "result",
|
|
322
|
-
requestId: frame.requestId,
|
|
323
|
-
op: frame.op,
|
|
324
|
-
ok: false,
|
|
325
|
-
error: {
|
|
326
|
-
code: "UNKNOWN_OPERATION",
|
|
327
|
-
message: `Unknown operation ${frame.op}`,
|
|
328
|
-
},
|
|
329
|
-
});
|
|
330
|
-
seenRequestIds.add(frame.requestId);
|
|
331
|
-
return;
|
|
332
|
-
}
|
|
333
|
-
const schema = HEADLESS_OPERATION_SCHEMAS[frame.op].input;
|
|
334
|
-
if (!schema.safeParse(frame.input).success) {
|
|
335
|
-
writeFrame({
|
|
336
|
-
kind: "result",
|
|
337
|
-
requestId: frame.requestId,
|
|
338
|
-
op: frame.op,
|
|
339
|
-
ok: false,
|
|
340
|
-
error: {
|
|
341
|
-
code: "INVALID_INPUT",
|
|
342
|
-
message: `Invalid input for ${frame.op}`,
|
|
343
|
-
},
|
|
344
|
-
});
|
|
345
|
-
seenRequestIds.add(frame.requestId);
|
|
346
|
-
return;
|
|
347
|
-
}
|
|
348
|
-
}
|
|
349
|
-
else if (!HeadlessInteractionResponseSchema.safeParse(frame).success) {
|
|
350
|
-
writeFrame({
|
|
351
|
-
kind: "result",
|
|
352
|
-
requestId: frame.requestId,
|
|
353
|
-
op: "interaction.respond",
|
|
354
|
-
ok: false,
|
|
355
|
-
error: {
|
|
356
|
-
code: "INVALID_INPUT",
|
|
357
|
-
message: "Invalid input for interaction.respond",
|
|
358
|
-
},
|
|
359
|
-
});
|
|
360
|
-
seenRequestIds.add(frame.requestId);
|
|
361
|
-
return;
|
|
362
|
-
}
|
|
363
|
-
inFlight.add(frame.requestId);
|
|
364
|
-
seenRequestIds.add(frame.requestId);
|
|
365
|
-
const controller = new AbortController();
|
|
366
|
-
let promise = null;
|
|
367
|
-
promise = (async () => {
|
|
368
|
-
try {
|
|
369
|
-
const runtimeOrAbort = await raceWithAbort(controller.signal, ensureRuntime().then((created) => ({
|
|
370
|
-
runtime: created,
|
|
371
|
-
})));
|
|
372
|
-
if (runtimeOrAbort.kind !== "value") {
|
|
373
|
-
return;
|
|
374
|
-
}
|
|
375
|
-
const iterator = runtimeOrAbort.value.runtime.kernel
|
|
376
|
-
.dispatch(frame, {
|
|
377
|
-
signal: controller.signal,
|
|
378
|
-
})[Symbol.asyncIterator]();
|
|
379
|
-
while (true) {
|
|
380
|
-
const nextOrAbort = await raceWithAbort(controller.signal, iterator.next().then((result) => ({ result })));
|
|
381
|
-
if (nextOrAbort.kind === "aborted") {
|
|
382
|
-
await detachDispatchIterator(iterator);
|
|
383
|
-
return;
|
|
384
|
-
}
|
|
385
|
-
if (nextOrAbort.value.result.done) {
|
|
386
|
-
return;
|
|
387
|
-
}
|
|
388
|
-
const outFrame = nextOrAbort.value.result.value;
|
|
389
|
-
const state = active.get(frame.requestId);
|
|
390
|
-
if (controller.signal.aborted || state?.connectionClosedEmitted) {
|
|
391
|
-
continue;
|
|
392
|
-
}
|
|
393
|
-
writeFrame(outFrame);
|
|
394
|
-
if (outFrame.kind === "result") {
|
|
395
|
-
if (state) {
|
|
396
|
-
state.completed = true;
|
|
397
|
-
}
|
|
398
|
-
}
|
|
399
|
-
}
|
|
400
|
-
}
|
|
401
|
-
catch (error) {
|
|
402
|
-
const state = active.get(frame.requestId);
|
|
403
|
-
if (controller.signal.aborted || state?.connectionClosedEmitted) {
|
|
404
|
-
return;
|
|
405
|
-
}
|
|
406
|
-
writeFrame({
|
|
407
|
-
kind: "result",
|
|
408
|
-
requestId: frame.requestId,
|
|
409
|
-
op,
|
|
410
|
-
ok: false,
|
|
411
|
-
error: {
|
|
412
|
-
code: "INTERNAL_ERROR",
|
|
413
|
-
message: error instanceof Error ? error.message : String(error),
|
|
414
|
-
},
|
|
415
|
-
});
|
|
416
|
-
if (state) {
|
|
417
|
-
state.completed = true;
|
|
418
|
-
}
|
|
419
|
-
}
|
|
420
|
-
finally {
|
|
421
|
-
inFlight.delete(frame.requestId);
|
|
422
|
-
active.delete(frame.requestId);
|
|
423
|
-
}
|
|
424
|
-
})();
|
|
425
|
-
active.set(frame.requestId, {
|
|
426
|
-
op,
|
|
427
|
-
controller,
|
|
428
|
-
completed: false,
|
|
429
|
-
connectionClosedEmitted: false,
|
|
430
|
-
promise,
|
|
431
|
-
});
|
|
432
|
-
};
|
|
433
|
-
process.stdin.setEncoding("utf8");
|
|
434
|
-
process.stdin.on("data", handleData);
|
|
435
|
-
process.stdin.once("end", handleInputClosed);
|
|
436
|
-
process.stdin.once("close", handleInputClosed);
|
|
437
|
-
await serverDone;
|
|
438
|
-
}
|
|
439
|
-
//# sourceMappingURL=stdio-server.js.map
|
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* SessionHistory — re-exported from @aria-cli/aria.
|
|
3
|
-
*
|
|
4
|
-
* The canonical implementation lives in packages/aria/src/history/SessionHistory.ts.
|
|
5
|
-
* This re-export keeps all existing CLI imports working unchanged.
|
|
6
|
-
*/
|
|
7
|
-
export * from "@aria-cli/aria/history/SessionHistory.js";
|
|
8
|
-
//# sourceMappingURL=SessionHistory.js.map
|
|
@@ -1,186 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* IPC-backed session history client for the REPL.
|
|
3
|
-
*
|
|
4
|
-
* Bulk writes (appendMessages, replaceMessages, markCompleted) are dispatched
|
|
5
|
-
* to the daemon over the existing LocalControl IPC socket — fire-and-forget,
|
|
6
|
-
* never blocking the event loop. Small writes (completeRun, claimSession,
|
|
7
|
-
* etc.) run locally with a short busy_timeout (100ms via lowContentionMode).
|
|
8
|
-
* Reads are served locally from the same WAL connection (instant).
|
|
9
|
-
*
|
|
10
|
-
* The daemon owns the canonical single-writer connection and serializes all
|
|
11
|
-
* IPC writes. On IPC failure, writes fall back to the local connection.
|
|
12
|
-
*/
|
|
13
|
-
import { log } from "@aria-cli/types";
|
|
14
|
-
import { clearStallPhase, setStallPhase } from "../event-loop-watchdog.js";
|
|
15
|
-
/**
|
|
16
|
-
* Fire-and-forget IPC write. Logs on failure, never throws.
|
|
17
|
-
* Falls back to a local sync write if provided.
|
|
18
|
-
*/
|
|
19
|
-
/** Errors that are expected during normal teardown and should not be logged. */
|
|
20
|
-
function isTeardownError(err) {
|
|
21
|
-
if (!(err instanceof Error))
|
|
22
|
-
return false;
|
|
23
|
-
const msg = err.message;
|
|
24
|
-
return msg.includes("has been released") || msg.includes("aborted");
|
|
25
|
-
}
|
|
26
|
-
function fireAndForget(label, ipcCall, fallback) {
|
|
27
|
-
if (!ipcCall) {
|
|
28
|
-
fallback?.();
|
|
29
|
-
return;
|
|
30
|
-
}
|
|
31
|
-
ipcCall.catch((err) => {
|
|
32
|
-
// Silently fall back during normal teardown (client released / aborted).
|
|
33
|
-
if (!isTeardownError(err)) {
|
|
34
|
-
log.warn(`[SessionHistoryClient] ${label} IPC failed:`, err?.message ?? err);
|
|
35
|
-
}
|
|
36
|
-
if (fallback) {
|
|
37
|
-
try {
|
|
38
|
-
fallback();
|
|
39
|
-
}
|
|
40
|
-
catch (localErr) {
|
|
41
|
-
log.warn(`[SessionHistoryClient] ${label} local fallback also failed:`, localErr?.message ?? localErr);
|
|
42
|
-
}
|
|
43
|
-
}
|
|
44
|
-
});
|
|
45
|
-
}
|
|
46
|
-
export class SessionHistoryClient {
|
|
47
|
-
readDb;
|
|
48
|
-
ipc;
|
|
49
|
-
constructor(
|
|
50
|
-
/** Local SessionHistory for reads + local fallback writes. */
|
|
51
|
-
readDb,
|
|
52
|
-
/** IPC handle to the daemon's localControl API. */
|
|
53
|
-
ipc) {
|
|
54
|
-
this.readDb = readDb;
|
|
55
|
-
this.ipc = ipc;
|
|
56
|
-
// The daemon owns the main writer. This local connection only does tiny
|
|
57
|
-
// writes (createSession, claimSession) so reduce busy_timeout from 5s to
|
|
58
|
-
// 100ms to avoid blocking the event loop.
|
|
59
|
-
readDb.enableLowContentionMode();
|
|
60
|
-
}
|
|
61
|
-
// ---------------------------------------------------------------------------
|
|
62
|
-
// Reads — local, instant, zero contention. Proxy every read method so the
|
|
63
|
-
// client is a full drop-in replacement for SessionHistory.
|
|
64
|
-
// ---------------------------------------------------------------------------
|
|
65
|
-
withPhase(label, fn) {
|
|
66
|
-
setStallPhase(label);
|
|
67
|
-
try {
|
|
68
|
-
return fn();
|
|
69
|
-
}
|
|
70
|
-
finally {
|
|
71
|
-
clearStallPhase();
|
|
72
|
-
}
|
|
73
|
-
}
|
|
74
|
-
listSessions(...args) {
|
|
75
|
-
return this.withPhase("session-history:listSessions", () => this.readDb.listSessions(...args));
|
|
76
|
-
}
|
|
77
|
-
loadSessionMessages(...args) {
|
|
78
|
-
return this.withPhase("session-history:loadSessionMessages", () => this.readDb.loadSessionMessages(...args));
|
|
79
|
-
}
|
|
80
|
-
loadSession(...args) {
|
|
81
|
-
return this.withPhase("session-history:loadSession", () => this.readDb.loadSession(...args));
|
|
82
|
-
}
|
|
83
|
-
searchSessionsFts(...args) {
|
|
84
|
-
return this.withPhase("session-history:searchSessionsFts", () => this.readDb.searchSessionsFts(...args));
|
|
85
|
-
}
|
|
86
|
-
searchSessionSummaries(...args) {
|
|
87
|
-
return this.withPhase("session-history:searchSessionSummaries", () => this.readDb.searchSessionSummaries(...args));
|
|
88
|
-
}
|
|
89
|
-
findSessionByPrefix(...args) {
|
|
90
|
-
return this.readDb.findSessionByPrefix(...args);
|
|
91
|
-
}
|
|
92
|
-
getSessionRuntimeState(...args) {
|
|
93
|
-
return this.readDb.getSessionRuntimeState(...args);
|
|
94
|
-
}
|
|
95
|
-
getInteraction(...args) {
|
|
96
|
-
return this.readDb.getInteraction(...args);
|
|
97
|
-
}
|
|
98
|
-
getIncompleteSessions(...args) {
|
|
99
|
-
return this.readDb.getIncompleteSessions(...args);
|
|
100
|
-
}
|
|
101
|
-
getInputHistory(...args) {
|
|
102
|
-
return this.withPhase("session-history:getInputHistory", () => this.readDb.getInputHistory(...args));
|
|
103
|
-
}
|
|
104
|
-
addInputHistory(...args) {
|
|
105
|
-
return this.withPhase("session-history:addInputHistory", () => this.readDb.addInputHistory(...args));
|
|
106
|
-
}
|
|
107
|
-
getSessionCount(...args) {
|
|
108
|
-
return this.readDb.getSessionCount(...args);
|
|
109
|
-
}
|
|
110
|
-
markStaleSessionsCompleted(...args) {
|
|
111
|
-
return this.withPhase("session-history:markStaleSessionsCompleted", () => this.readDb.markStaleSessionsCompleted(...args));
|
|
112
|
-
}
|
|
113
|
-
getSession(...args) {
|
|
114
|
-
return this.readDb.getSession(...args);
|
|
115
|
-
}
|
|
116
|
-
// ---------------------------------------------------------------------------
|
|
117
|
-
// createSession — local write so it's immediately readable
|
|
118
|
-
// ---------------------------------------------------------------------------
|
|
119
|
-
createSession(...args) {
|
|
120
|
-
return this.readDb.createSession(...args);
|
|
121
|
-
}
|
|
122
|
-
// ---------------------------------------------------------------------------
|
|
123
|
-
// Writes — fire-and-forget via IPC to daemon
|
|
124
|
-
// ---------------------------------------------------------------------------
|
|
125
|
-
persistMessagesNonBlocking(sessionId, msgs) {
|
|
126
|
-
if (msgs.length === 0)
|
|
127
|
-
return;
|
|
128
|
-
// Mark session as incremental BEFORE the IPC call so that the orchestrator's
|
|
129
|
-
// deferred replaceConversationMessages sees it and short-circuits (no-op).
|
|
130
|
-
this.readDb.markSessionIncremental(sessionId);
|
|
131
|
-
fireAndForget("appendSessionMessages", this.ipc.appendSessionMessages?.(sessionId, msgs), () => this.readDb.addConversationMessages(sessionId, msgs));
|
|
132
|
-
}
|
|
133
|
-
/** Batched sync write — used by addConversationMessages callers. Routes to IPC. */
|
|
134
|
-
addConversationMessages(sessionId, msgs) {
|
|
135
|
-
this.persistMessagesNonBlocking(sessionId, msgs);
|
|
136
|
-
}
|
|
137
|
-
/** Single message write — routes to batched path. */
|
|
138
|
-
addConversationMessage(sessionId, msg) {
|
|
139
|
-
this.persistMessagesNonBlocking(sessionId, [msg]);
|
|
140
|
-
}
|
|
141
|
-
markCompleted(sessionId) {
|
|
142
|
-
fireAndForget("markSessionCompleted", this.ipc.markSessionCompleted?.(sessionId), () => this.readDb.markCompleted(sessionId));
|
|
143
|
-
}
|
|
144
|
-
replaceConversationMessages(sessionId, msgs) {
|
|
145
|
-
fireAndForget("replaceSessionMessages", this.ipc.replaceSessionMessages?.(sessionId, msgs), () => this.readDb.replaceConversationMessages(sessionId, msgs));
|
|
146
|
-
}
|
|
147
|
-
// ---------------------------------------------------------------------------
|
|
148
|
-
// Small writes — local only (fast single-row ops, not worth IPC overhead).
|
|
149
|
-
// With lowContentionMode (100ms busy_timeout), these never block the event
|
|
150
|
-
// loop meaningfully. The daemon sees them through WAL visibility.
|
|
151
|
-
// ---------------------------------------------------------------------------
|
|
152
|
-
completeRun(...args) {
|
|
153
|
-
return this.readDb.completeRun(...args);
|
|
154
|
-
}
|
|
155
|
-
claimSessionForMutation(...args) {
|
|
156
|
-
return this.readDb.claimSessionForMutation(...args);
|
|
157
|
-
}
|
|
158
|
-
releaseSessionClaim(...args) {
|
|
159
|
-
return this.readDb.releaseSessionClaim(...args);
|
|
160
|
-
}
|
|
161
|
-
recordPausedRun(...args) {
|
|
162
|
-
return this.readDb.recordPausedRun(...args);
|
|
163
|
-
}
|
|
164
|
-
deleteSession(...args) {
|
|
165
|
-
return this.readDb.deleteSession(...args);
|
|
166
|
-
}
|
|
167
|
-
forkSession(...args) {
|
|
168
|
-
return this.readDb.forkSession(...args);
|
|
169
|
-
}
|
|
170
|
-
cancelInteraction(...args) {
|
|
171
|
-
return this.readDb.cancelInteraction(...args);
|
|
172
|
-
}
|
|
173
|
-
setSessionTitle(...args) {
|
|
174
|
-
return this.readDb.setSessionTitle(...args);
|
|
175
|
-
}
|
|
176
|
-
recordInteractionResponse(...args) {
|
|
177
|
-
return this.readDb.recordInteractionResponse(...args);
|
|
178
|
-
}
|
|
179
|
-
// ---------------------------------------------------------------------------
|
|
180
|
-
// Passthrough
|
|
181
|
-
// ---------------------------------------------------------------------------
|
|
182
|
-
close() {
|
|
183
|
-
this.readDb.close();
|
|
184
|
-
}
|
|
185
|
-
}
|
|
186
|
-
//# sourceMappingURL=SessionHistoryClient.js.map
|