@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,508 +0,0 @@
|
|
|
1
|
-
import { randomUUID } from "node:crypto";
|
|
2
|
-
import { buildAuthorizeUrl, completeGitHubCopilotDeviceFlow, exchangeCodeForTokens, generatePkce, generateState, getOAuthConfig, requestGitHubCopilotDeviceCode, upsertAuthProfile, } from "@aria-cli/auth";
|
|
3
|
-
function failureFrame(requestId, op, code, message, details) {
|
|
4
|
-
return {
|
|
5
|
-
kind: "result",
|
|
6
|
-
requestId,
|
|
7
|
-
op,
|
|
8
|
-
ok: false,
|
|
9
|
-
error: {
|
|
10
|
-
code,
|
|
11
|
-
message,
|
|
12
|
-
...(details ? { details } : {}),
|
|
13
|
-
},
|
|
14
|
-
};
|
|
15
|
-
}
|
|
16
|
-
function successFrame(requestId, op, result) {
|
|
17
|
-
return {
|
|
18
|
-
kind: "result",
|
|
19
|
-
requestId,
|
|
20
|
-
op,
|
|
21
|
-
ok: true,
|
|
22
|
-
result,
|
|
23
|
-
};
|
|
24
|
-
}
|
|
25
|
-
function providerSelectionOptions(providers) {
|
|
26
|
-
return providers.map((provider) => ({
|
|
27
|
-
id: provider.id,
|
|
28
|
-
label: provider.label,
|
|
29
|
-
...(provider.email || provider.status
|
|
30
|
-
? { description: [provider.status, provider.email].filter(Boolean).join(" · ") }
|
|
31
|
-
: {}),
|
|
32
|
-
}));
|
|
33
|
-
}
|
|
34
|
-
function methodSelectionOptions(options) {
|
|
35
|
-
return options.map((option) => ({
|
|
36
|
-
id: option.id,
|
|
37
|
-
label: option.label,
|
|
38
|
-
...(option.description || option.status
|
|
39
|
-
? { description: [option.description, option.status].filter(Boolean).join(" · ") }
|
|
40
|
-
: {}),
|
|
41
|
-
}));
|
|
42
|
-
}
|
|
43
|
-
function interactionDetails(frame) {
|
|
44
|
-
return {
|
|
45
|
-
interactionId: frame.interactionId,
|
|
46
|
-
source: frame.source,
|
|
47
|
-
interaction: frame.interaction,
|
|
48
|
-
};
|
|
49
|
-
}
|
|
50
|
-
function interactionRecordPrompt(interaction, pending) {
|
|
51
|
-
return {
|
|
52
|
-
...interaction,
|
|
53
|
-
__authPending: pending,
|
|
54
|
-
};
|
|
55
|
-
}
|
|
56
|
-
function pendingFromPrompt(prompt) {
|
|
57
|
-
const candidate = prompt.__authPending;
|
|
58
|
-
if (!candidate || typeof candidate !== "object") {
|
|
59
|
-
return null;
|
|
60
|
-
}
|
|
61
|
-
return candidate;
|
|
62
|
-
}
|
|
63
|
-
export class HeadlessAuthOrchestrator {
|
|
64
|
-
auth;
|
|
65
|
-
sessionLedger;
|
|
66
|
-
getActiveArionName;
|
|
67
|
-
constructor(auth, sessionLedger, getActiveArionName) {
|
|
68
|
-
this.auth = auth;
|
|
69
|
-
this.sessionLedger = sessionLedger;
|
|
70
|
-
this.getActiveArionName = getActiveArionName;
|
|
71
|
-
}
|
|
72
|
-
async *login(requestId, input, context) {
|
|
73
|
-
if (!this.auth?.login || !this.auth.status) {
|
|
74
|
-
yield failureFrame(requestId, "auth.login", "MISSING_SERVICE", "Kernel service auth is not configured for auth.login.");
|
|
75
|
-
return;
|
|
76
|
-
}
|
|
77
|
-
const result = (await this.auth.login(input));
|
|
78
|
-
yield* this.framesForInitialLoginResult(requestId, "auth.login", result, context);
|
|
79
|
-
}
|
|
80
|
-
async *logout(requestId, input) {
|
|
81
|
-
if (!this.auth?.logout) {
|
|
82
|
-
yield failureFrame(requestId, "auth.logout", "MISSING_SERVICE", "Kernel service auth is not configured for auth.logout.");
|
|
83
|
-
return;
|
|
84
|
-
}
|
|
85
|
-
const result = (await this.auth.logout(input));
|
|
86
|
-
if (result.mode === "direct") {
|
|
87
|
-
if (result.result.success) {
|
|
88
|
-
yield successFrame(requestId, "auth.logout", result.result);
|
|
89
|
-
return;
|
|
90
|
-
}
|
|
91
|
-
yield failureFrame(requestId, "auth.logout", "AUTH_LOGOUT_FAILED", result.result.message);
|
|
92
|
-
return;
|
|
93
|
-
}
|
|
94
|
-
const interaction = await this.persistNewInteraction(requestId, {
|
|
95
|
-
pending: { type: "logout-provider" },
|
|
96
|
-
interaction: {
|
|
97
|
-
kind: "selection",
|
|
98
|
-
prompt: "Choose a provider to disconnect.",
|
|
99
|
-
options: providerSelectionOptions(result.providers),
|
|
100
|
-
},
|
|
101
|
-
});
|
|
102
|
-
yield interaction;
|
|
103
|
-
yield failureFrame(requestId, "auth.logout", "INTERACTION_REQUIRED", "auth.logout requires additional interaction before it can continue.", interactionDetails(interaction));
|
|
104
|
-
}
|
|
105
|
-
async *respond(response, context) {
|
|
106
|
-
const interactionRecord = this.sessionLedger.getInteraction(response.interactionId);
|
|
107
|
-
if (!interactionRecord || interactionRecord.source !== "auth") {
|
|
108
|
-
yield failureFrame(response.requestId, "interaction.respond", "INTERACTION_NOT_FOUND", `Unknown interaction ${response.interactionId}`);
|
|
109
|
-
return;
|
|
110
|
-
}
|
|
111
|
-
const pending = pendingFromPrompt(interactionRecord.prompt);
|
|
112
|
-
if (!pending) {
|
|
113
|
-
yield failureFrame(response.requestId, "interaction.respond", "INVALID_INTERACTION_STATE", `Interaction ${response.interactionId} is missing auth resume state.`);
|
|
114
|
-
return;
|
|
115
|
-
}
|
|
116
|
-
const ownerId = `auth:${response.requestId}`;
|
|
117
|
-
const claimed = this.sessionLedger.claimSessionForMutation(interactionRecord.sessionId, ownerId, 30_000);
|
|
118
|
-
let released = false;
|
|
119
|
-
const release = () => {
|
|
120
|
-
if (released) {
|
|
121
|
-
return;
|
|
122
|
-
}
|
|
123
|
-
released = true;
|
|
124
|
-
this.sessionLedger.releaseSessionClaim(interactionRecord.sessionId, ownerId);
|
|
125
|
-
};
|
|
126
|
-
try {
|
|
127
|
-
if (response.response.kind === "cancel") {
|
|
128
|
-
this.sessionLedger.cancelInteraction(interactionRecord.sessionId, interactionRecord.interactionId, {
|
|
129
|
-
ownerId,
|
|
130
|
-
expectedRevision: claimed.revision,
|
|
131
|
-
});
|
|
132
|
-
release();
|
|
133
|
-
yield failureFrame(response.requestId, "interaction.respond", "INTERACTION_CANCELED", "Interaction canceled.");
|
|
134
|
-
return;
|
|
135
|
-
}
|
|
136
|
-
switch (pending.type) {
|
|
137
|
-
case "login-provider": {
|
|
138
|
-
if (response.response.kind !== "selection") {
|
|
139
|
-
release();
|
|
140
|
-
yield failureFrame(response.requestId, "interaction.respond", "INVALID_INTERACTION_RESPONSE", "Provider selection requires a selection response.");
|
|
141
|
-
return;
|
|
142
|
-
}
|
|
143
|
-
const result = (await this.auth?.login?.({
|
|
144
|
-
args: response.response.selected,
|
|
145
|
-
}));
|
|
146
|
-
this.sessionLedger.recordInteractionResponse(interactionRecord.sessionId, interactionRecord.interactionId, response.response, {
|
|
147
|
-
ownerId,
|
|
148
|
-
expectedRevision: claimed.revision,
|
|
149
|
-
});
|
|
150
|
-
yield* this.framesForContinuedLoginResult(response.requestId, result, interactionRecord.sessionId, ownerId, claimed.revision + 1, context);
|
|
151
|
-
return;
|
|
152
|
-
}
|
|
153
|
-
case "logout-provider": {
|
|
154
|
-
if (response.response.kind !== "selection") {
|
|
155
|
-
release();
|
|
156
|
-
yield failureFrame(response.requestId, "interaction.respond", "INVALID_INTERACTION_RESPONSE", "Provider selection requires a selection response.");
|
|
157
|
-
return;
|
|
158
|
-
}
|
|
159
|
-
const result = (await this.auth?.logout?.({
|
|
160
|
-
args: response.response.selected,
|
|
161
|
-
}));
|
|
162
|
-
this.sessionLedger.recordInteractionResponse(interactionRecord.sessionId, interactionRecord.interactionId, response.response, {
|
|
163
|
-
ownerId,
|
|
164
|
-
expectedRevision: claimed.revision,
|
|
165
|
-
});
|
|
166
|
-
this.sessionLedger.completeRun(interactionRecord.sessionId, {
|
|
167
|
-
success: result.mode === "direct" ? result.result.success : false,
|
|
168
|
-
message: result.mode === "direct"
|
|
169
|
-
? result.result.message
|
|
170
|
-
: "auth.logout requires additional interaction.",
|
|
171
|
-
}, {
|
|
172
|
-
ownerId,
|
|
173
|
-
expectedRevision: claimed.revision + 1,
|
|
174
|
-
});
|
|
175
|
-
release();
|
|
176
|
-
if (result.mode === "direct" && result.result.success) {
|
|
177
|
-
yield successFrame(response.requestId, "interaction.respond", result.result);
|
|
178
|
-
return;
|
|
179
|
-
}
|
|
180
|
-
yield failureFrame(response.requestId, "interaction.respond", "AUTH_LOGOUT_FAILED", result.mode === "direct" ? result.result.message : "auth.logout requires interaction.");
|
|
181
|
-
return;
|
|
182
|
-
}
|
|
183
|
-
case "login-method": {
|
|
184
|
-
if (response.response.kind !== "selection") {
|
|
185
|
-
release();
|
|
186
|
-
yield failureFrame(response.requestId, "interaction.respond", "INVALID_INTERACTION_RESPONSE", "Method selection requires a selection response.");
|
|
187
|
-
return;
|
|
188
|
-
}
|
|
189
|
-
const result = (await this.auth?.login?.({
|
|
190
|
-
args: `${pending.provider} --method ${response.response.selected}`,
|
|
191
|
-
}));
|
|
192
|
-
this.sessionLedger.recordInteractionResponse(interactionRecord.sessionId, interactionRecord.interactionId, response.response, {
|
|
193
|
-
ownerId,
|
|
194
|
-
expectedRevision: claimed.revision,
|
|
195
|
-
});
|
|
196
|
-
yield* this.framesForContinuedLoginResult(response.requestId, result, interactionRecord.sessionId, ownerId, claimed.revision + 1, context);
|
|
197
|
-
return;
|
|
198
|
-
}
|
|
199
|
-
case "copilot-source": {
|
|
200
|
-
if (response.response.kind !== "selection") {
|
|
201
|
-
release();
|
|
202
|
-
yield failureFrame(response.requestId, "interaction.respond", "INVALID_INTERACTION_RESPONSE", "GitHub Copilot source selection requires a selection response.");
|
|
203
|
-
return;
|
|
204
|
-
}
|
|
205
|
-
const result = (await this.auth?.login?.({
|
|
206
|
-
args: `github-copilot --from ${response.response.selected}`,
|
|
207
|
-
}));
|
|
208
|
-
this.sessionLedger.recordInteractionResponse(interactionRecord.sessionId, interactionRecord.interactionId, response.response, {
|
|
209
|
-
ownerId,
|
|
210
|
-
expectedRevision: claimed.revision,
|
|
211
|
-
});
|
|
212
|
-
yield* this.framesForContinuedLoginResult(response.requestId, result, interactionRecord.sessionId, ownerId, claimed.revision + 1, context);
|
|
213
|
-
return;
|
|
214
|
-
}
|
|
215
|
-
case "credential-input": {
|
|
216
|
-
if (response.response.kind !== "credential_input") {
|
|
217
|
-
release();
|
|
218
|
-
yield failureFrame(response.requestId, "interaction.respond", "INVALID_INTERACTION_RESPONSE", "Credential input requires a credential_input response.");
|
|
219
|
-
return;
|
|
220
|
-
}
|
|
221
|
-
const value = response.response.values[pending.fieldKey];
|
|
222
|
-
if (typeof value !== "string" || value.trim().length === 0) {
|
|
223
|
-
release();
|
|
224
|
-
yield failureFrame(response.requestId, "interaction.respond", "INVALID_INTERACTION_RESPONSE", `Missing credential field ${pending.fieldKey}.`);
|
|
225
|
-
return;
|
|
226
|
-
}
|
|
227
|
-
const result = (await this.auth?.login?.({
|
|
228
|
-
args: `${pending.commandPrefix} ${value.trim()}`.trim(),
|
|
229
|
-
}));
|
|
230
|
-
this.sessionLedger.recordInteractionResponse(interactionRecord.sessionId, interactionRecord.interactionId, response.response, {
|
|
231
|
-
ownerId,
|
|
232
|
-
expectedRevision: claimed.revision,
|
|
233
|
-
});
|
|
234
|
-
yield* this.framesForContinuedLoginResult(response.requestId, result, interactionRecord.sessionId, ownerId, claimed.revision + 1, context);
|
|
235
|
-
return;
|
|
236
|
-
}
|
|
237
|
-
case "oauth-code": {
|
|
238
|
-
if (response.response.kind !== "credential_input") {
|
|
239
|
-
release();
|
|
240
|
-
yield failureFrame(response.requestId, "interaction.respond", "INVALID_INTERACTION_RESPONSE", "OAuth code entry requires a credential_input response.");
|
|
241
|
-
return;
|
|
242
|
-
}
|
|
243
|
-
const code = response.response.values[pending.fieldKey];
|
|
244
|
-
if (typeof code !== "string" || code.trim().length === 0) {
|
|
245
|
-
release();
|
|
246
|
-
yield failureFrame(response.requestId, "interaction.respond", "INVALID_INTERACTION_RESPONSE", `Missing credential field ${pending.fieldKey}.`);
|
|
247
|
-
return;
|
|
248
|
-
}
|
|
249
|
-
this.sessionLedger.recordInteractionResponse(interactionRecord.sessionId, interactionRecord.interactionId, response.response, {
|
|
250
|
-
ownerId,
|
|
251
|
-
expectedRevision: claimed.revision,
|
|
252
|
-
});
|
|
253
|
-
const exchanged = await exchangeCodeForTokens(pending.provider, code.trim(), pending.codeVerifier);
|
|
254
|
-
upsertAuthProfile({
|
|
255
|
-
profileId: `${pending.provider}:oauth`,
|
|
256
|
-
credential: {
|
|
257
|
-
type: "oauth",
|
|
258
|
-
provider: pending.provider,
|
|
259
|
-
access: exchanged.access,
|
|
260
|
-
refresh: exchanged.refresh,
|
|
261
|
-
expires: exchanged.expires,
|
|
262
|
-
},
|
|
263
|
-
});
|
|
264
|
-
this.sessionLedger.completeRun(interactionRecord.sessionId, { success: true, message: `Logged in to ${pending.provider} successfully` }, {
|
|
265
|
-
ownerId,
|
|
266
|
-
expectedRevision: claimed.revision + 1,
|
|
267
|
-
});
|
|
268
|
-
release();
|
|
269
|
-
yield successFrame(response.requestId, "interaction.respond", {
|
|
270
|
-
success: true,
|
|
271
|
-
message: `Logged in to ${pending.provider} successfully`,
|
|
272
|
-
});
|
|
273
|
-
return;
|
|
274
|
-
}
|
|
275
|
-
case "copilot-device": {
|
|
276
|
-
if (response.response.kind !== "oauth_device") {
|
|
277
|
-
release();
|
|
278
|
-
yield failureFrame(response.requestId, "interaction.respond", "INVALID_INTERACTION_RESPONSE", "GitHub Copilot device flow requires an oauth_device response.");
|
|
279
|
-
return;
|
|
280
|
-
}
|
|
281
|
-
this.sessionLedger.recordInteractionResponse(interactionRecord.sessionId, interactionRecord.interactionId, response.response, {
|
|
282
|
-
ownerId,
|
|
283
|
-
expectedRevision: claimed.revision,
|
|
284
|
-
});
|
|
285
|
-
const result = await completeGitHubCopilotDeviceFlow({
|
|
286
|
-
deviceCode: pending.deviceCode,
|
|
287
|
-
profileLabel: pending.profileLabel,
|
|
288
|
-
signal: context?.signal,
|
|
289
|
-
});
|
|
290
|
-
this.sessionLedger.completeRun(interactionRecord.sessionId, result, {
|
|
291
|
-
ownerId,
|
|
292
|
-
expectedRevision: claimed.revision + 1,
|
|
293
|
-
});
|
|
294
|
-
release();
|
|
295
|
-
if (result.success) {
|
|
296
|
-
yield successFrame(response.requestId, "interaction.respond", result);
|
|
297
|
-
return;
|
|
298
|
-
}
|
|
299
|
-
yield failureFrame(response.requestId, "interaction.respond", "AUTH_LOGIN_FAILED", result.message);
|
|
300
|
-
return;
|
|
301
|
-
}
|
|
302
|
-
}
|
|
303
|
-
}
|
|
304
|
-
catch (error) {
|
|
305
|
-
release();
|
|
306
|
-
yield failureFrame(response.requestId, "interaction.respond", "AUTH_INTERACTION_FAILED", error instanceof Error ? error.message : String(error));
|
|
307
|
-
}
|
|
308
|
-
}
|
|
309
|
-
async *framesForInitialLoginResult(requestId, op, result, context) {
|
|
310
|
-
if (result.mode === "direct") {
|
|
311
|
-
if (result.result.success) {
|
|
312
|
-
yield successFrame(requestId, op, result.result);
|
|
313
|
-
return;
|
|
314
|
-
}
|
|
315
|
-
yield failureFrame(requestId, op, "AUTH_LOGIN_FAILED", result.result.message);
|
|
316
|
-
return;
|
|
317
|
-
}
|
|
318
|
-
const spec = await this.buildLoginInteractionSpec(result, context);
|
|
319
|
-
const interaction = await this.persistNewInteraction(requestId, spec);
|
|
320
|
-
yield interaction;
|
|
321
|
-
yield failureFrame(requestId, op, "INTERACTION_REQUIRED", "auth.login requires additional interaction before it can continue.", interactionDetails(interaction));
|
|
322
|
-
}
|
|
323
|
-
async *framesForContinuedLoginResult(requestId, result, sessionId, ownerId, expectedRevision, context) {
|
|
324
|
-
if (result.mode === "direct") {
|
|
325
|
-
this.sessionLedger.completeRun(sessionId, result.result, {
|
|
326
|
-
ownerId,
|
|
327
|
-
expectedRevision,
|
|
328
|
-
});
|
|
329
|
-
this.sessionLedger.releaseSessionClaim(sessionId, ownerId);
|
|
330
|
-
if (result.result.success) {
|
|
331
|
-
yield successFrame(requestId, "interaction.respond", result.result);
|
|
332
|
-
return;
|
|
333
|
-
}
|
|
334
|
-
yield failureFrame(requestId, "interaction.respond", "AUTH_LOGIN_FAILED", result.result.message);
|
|
335
|
-
return;
|
|
336
|
-
}
|
|
337
|
-
const spec = await this.buildLoginInteractionSpec(result, context);
|
|
338
|
-
const interaction = this.persistContinuedInteraction(requestId, spec, sessionId, ownerId, expectedRevision);
|
|
339
|
-
yield interaction;
|
|
340
|
-
yield failureFrame(requestId, "interaction.respond", "INTERACTION_REQUIRED", "auth.login requires additional interaction before it can continue.", interactionDetails(interaction));
|
|
341
|
-
}
|
|
342
|
-
async buildLoginInteractionSpec(result, context) {
|
|
343
|
-
switch (result.mode) {
|
|
344
|
-
case "picker":
|
|
345
|
-
return {
|
|
346
|
-
pending: { type: "login-provider" },
|
|
347
|
-
interaction: {
|
|
348
|
-
kind: "selection",
|
|
349
|
-
prompt: "Choose a provider to sign in with.",
|
|
350
|
-
options: providerSelectionOptions(result.providers),
|
|
351
|
-
},
|
|
352
|
-
};
|
|
353
|
-
case "anthropic_method_picker":
|
|
354
|
-
case "openai_method_picker":
|
|
355
|
-
case "google_method_picker":
|
|
356
|
-
return {
|
|
357
|
-
pending: { type: "login-method", provider: result.provider },
|
|
358
|
-
interaction: {
|
|
359
|
-
kind: "selection",
|
|
360
|
-
prompt: `Choose how to sign in to ${result.provider}.`,
|
|
361
|
-
options: methodSelectionOptions(result.options),
|
|
362
|
-
},
|
|
363
|
-
};
|
|
364
|
-
case "copilot_source_picker":
|
|
365
|
-
return {
|
|
366
|
-
pending: { type: "copilot-source" },
|
|
367
|
-
interaction: {
|
|
368
|
-
kind: "selection",
|
|
369
|
-
prompt: "Choose a GitHub Copilot credential source.",
|
|
370
|
-
options: methodSelectionOptions(result.options),
|
|
371
|
-
},
|
|
372
|
-
};
|
|
373
|
-
case "anthropic_key_input":
|
|
374
|
-
case "openai_key_input":
|
|
375
|
-
case "google_key_input":
|
|
376
|
-
return {
|
|
377
|
-
pending: {
|
|
378
|
-
type: "credential-input",
|
|
379
|
-
commandPrefix: result.provider,
|
|
380
|
-
fieldKey: "apiKey",
|
|
381
|
-
},
|
|
382
|
-
interaction: {
|
|
383
|
-
kind: "credential_input",
|
|
384
|
-
prompt: `Enter the API key for ${result.provider}.`,
|
|
385
|
-
provider: result.provider,
|
|
386
|
-
fields: [this.secretField("apiKey", `${result.provider} API key`)],
|
|
387
|
-
},
|
|
388
|
-
};
|
|
389
|
-
case "anthropic_setup_token":
|
|
390
|
-
return {
|
|
391
|
-
pending: {
|
|
392
|
-
type: "credential-input",
|
|
393
|
-
commandPrefix: "anthropic --setup-token",
|
|
394
|
-
fieldKey: "setupToken",
|
|
395
|
-
},
|
|
396
|
-
interaction: {
|
|
397
|
-
kind: "credential_input",
|
|
398
|
-
prompt: "Enter the Anthropic setup token.",
|
|
399
|
-
provider: "anthropic",
|
|
400
|
-
fields: [this.secretField("setupToken", "Anthropic setup token")],
|
|
401
|
-
},
|
|
402
|
-
};
|
|
403
|
-
case "oauth": {
|
|
404
|
-
const { codeVerifier, codeChallenge } = generatePkce();
|
|
405
|
-
const config = getOAuthConfig(result.provider);
|
|
406
|
-
const state = config.redirectUri.startsWith("http://127.0.0.1")
|
|
407
|
-
? generateState()
|
|
408
|
-
: codeVerifier;
|
|
409
|
-
const authorizeUrl = buildAuthorizeUrl(result.provider, codeChallenge, state);
|
|
410
|
-
return {
|
|
411
|
-
pending: {
|
|
412
|
-
type: "oauth-code",
|
|
413
|
-
provider: result.provider,
|
|
414
|
-
fieldKey: "authorizationCode",
|
|
415
|
-
codeVerifier,
|
|
416
|
-
},
|
|
417
|
-
interaction: {
|
|
418
|
-
kind: "credential_input",
|
|
419
|
-
prompt: `Sign in to ${result.provider} to continue.`,
|
|
420
|
-
provider: result.provider,
|
|
421
|
-
mode: "oauth_authorization_code",
|
|
422
|
-
authorizeUrl,
|
|
423
|
-
callbackMode: config.redirectUri.startsWith("http://127.0.0.1")
|
|
424
|
-
? "local_callback"
|
|
425
|
-
: "manual_code",
|
|
426
|
-
...(config.redirectUri.startsWith("http://127.0.0.1") ? { expectedState: state } : {}),
|
|
427
|
-
fields: [
|
|
428
|
-
{
|
|
429
|
-
key: "authorizationCode",
|
|
430
|
-
label: "Authorization code",
|
|
431
|
-
},
|
|
432
|
-
],
|
|
433
|
-
},
|
|
434
|
-
};
|
|
435
|
-
}
|
|
436
|
-
case "copilot_device": {
|
|
437
|
-
const deviceCode = await requestGitHubCopilotDeviceCode({
|
|
438
|
-
signal: context?.signal,
|
|
439
|
-
});
|
|
440
|
-
return {
|
|
441
|
-
pending: {
|
|
442
|
-
type: "copilot-device",
|
|
443
|
-
profileLabel: result.profileLabel,
|
|
444
|
-
deviceCode,
|
|
445
|
-
},
|
|
446
|
-
interaction: {
|
|
447
|
-
kind: "oauth_device",
|
|
448
|
-
prompt: result.message ??
|
|
449
|
-
"Open the verification URL, enter the device code, then confirm to continue.",
|
|
450
|
-
provider: "github-copilot",
|
|
451
|
-
...(result.profileLabel ? { profileLabel: result.profileLabel } : {}),
|
|
452
|
-
verificationUri: deviceCode.verificationUri,
|
|
453
|
-
userCode: deviceCode.userCode,
|
|
454
|
-
expiresAt: new Date(deviceCode.expiresAt).toISOString(),
|
|
455
|
-
intervalSeconds: Math.ceil(deviceCode.intervalMs / 1000),
|
|
456
|
-
},
|
|
457
|
-
};
|
|
458
|
-
}
|
|
459
|
-
}
|
|
460
|
-
}
|
|
461
|
-
async persistNewInteraction(requestId, spec) {
|
|
462
|
-
const sessionId = `auth:${randomUUID()}`;
|
|
463
|
-
if (!this.sessionLedger.loadSession(sessionId)) {
|
|
464
|
-
this.sessionLedger.createSession(await this.getActiveArionName(), "auth", sessionId);
|
|
465
|
-
}
|
|
466
|
-
const ownerId = `auth:${requestId}`;
|
|
467
|
-
const claimed = this.sessionLedger.claimSessionForMutation(sessionId, ownerId, 30_000);
|
|
468
|
-
try {
|
|
469
|
-
return this.persistInteractionRecord(requestId, sessionId, ownerId, claimed.revision, spec.pending, spec.interaction);
|
|
470
|
-
}
|
|
471
|
-
finally {
|
|
472
|
-
this.sessionLedger.releaseSessionClaim(sessionId, ownerId);
|
|
473
|
-
}
|
|
474
|
-
}
|
|
475
|
-
persistContinuedInteraction(requestId, spec, sessionId, ownerId, expectedRevision) {
|
|
476
|
-
const frame = this.persistInteractionRecord(requestId, sessionId, ownerId, expectedRevision, spec.pending, spec.interaction);
|
|
477
|
-
this.sessionLedger.releaseSessionClaim(sessionId, ownerId);
|
|
478
|
-
return frame;
|
|
479
|
-
}
|
|
480
|
-
persistInteractionRecord(requestId, sessionId, ownerId, expectedRevision, pending, interaction) {
|
|
481
|
-
const interactionId = `auth:${randomUUID()}`;
|
|
482
|
-
this.sessionLedger.recordPausedRun(sessionId, `auth:${sessionId}`, { kind: "auth" }, { kind: "auth" }, {
|
|
483
|
-
interactionId,
|
|
484
|
-
requestId,
|
|
485
|
-
source: "auth",
|
|
486
|
-
kind: interaction.kind,
|
|
487
|
-
prompt: interactionRecordPrompt(interaction, pending),
|
|
488
|
-
}, {
|
|
489
|
-
ownerId,
|
|
490
|
-
expectedRevision,
|
|
491
|
-
});
|
|
492
|
-
return {
|
|
493
|
-
kind: "interaction.required",
|
|
494
|
-
requestId,
|
|
495
|
-
interactionId,
|
|
496
|
-
source: "auth",
|
|
497
|
-
interaction,
|
|
498
|
-
};
|
|
499
|
-
}
|
|
500
|
-
secretField(key, label) {
|
|
501
|
-
return {
|
|
502
|
-
key,
|
|
503
|
-
label,
|
|
504
|
-
secret: true,
|
|
505
|
-
};
|
|
506
|
-
}
|
|
507
|
-
}
|
|
508
|
-
//# sourceMappingURL=auth-orchestrator.js.map
|
|
@@ -1,43 +0,0 @@
|
|
|
1
|
-
import { getProviderOptions, handleLoginCommand, } from "../commands/login-handler.js";
|
|
2
|
-
import { handleLogoutCommand } from "../commands/logout-handler.js";
|
|
3
|
-
export function getHeadlessAuthProviders() {
|
|
4
|
-
return getProviderOptions();
|
|
5
|
-
}
|
|
6
|
-
export async function runHeadlessLogin(args) {
|
|
7
|
-
return handleLoginCommand(args);
|
|
8
|
-
}
|
|
9
|
-
export function runHeadlessLogout(args) {
|
|
10
|
-
return handleLogoutCommand(args);
|
|
11
|
-
}
|
|
12
|
-
export function buildStructuredLoginArgs(input) {
|
|
13
|
-
if (typeof input.args === "string" && input.args.trim().length > 0) {
|
|
14
|
-
return input.args.trim();
|
|
15
|
-
}
|
|
16
|
-
const args = [];
|
|
17
|
-
if (typeof input.provider === "string" && input.provider.trim().length > 0) {
|
|
18
|
-
args.push(input.provider.trim());
|
|
19
|
-
}
|
|
20
|
-
if (typeof input.method === "string" && input.method.trim().length > 0) {
|
|
21
|
-
args.push(input.method.trim());
|
|
22
|
-
}
|
|
23
|
-
if (typeof input.source === "string" && input.source.trim().length > 0) {
|
|
24
|
-
args.push("--source", input.source.trim());
|
|
25
|
-
}
|
|
26
|
-
if (typeof input.profileLabel === "string" && input.profileLabel.trim().length > 0) {
|
|
27
|
-
args.push("--profile", input.profileLabel.trim());
|
|
28
|
-
}
|
|
29
|
-
if (typeof input.credential === "string" && input.credential.trim().length > 0) {
|
|
30
|
-
args.push(input.credential.trim());
|
|
31
|
-
}
|
|
32
|
-
return args.join(" ");
|
|
33
|
-
}
|
|
34
|
-
export function buildStructuredLogoutArgs(input) {
|
|
35
|
-
if (typeof input.args === "string" && input.args.trim().length > 0) {
|
|
36
|
-
return input.args.trim();
|
|
37
|
-
}
|
|
38
|
-
if (typeof input.provider === "string" && input.provider.trim().length > 0) {
|
|
39
|
-
return input.provider.trim();
|
|
40
|
-
}
|
|
41
|
-
return "";
|
|
42
|
-
}
|
|
43
|
-
//# sourceMappingURL=auth-service.js.map
|
|
@@ -1,112 +0,0 @@
|
|
|
1
|
-
import { existsSync, readFileSync, readdirSync } from "node:fs";
|
|
2
|
-
import { homedir } from "node:os";
|
|
3
|
-
import path from "node:path";
|
|
4
|
-
import { buildSessionListResult, buildSessionLoadResult, buildSessionReadResult, } from "./operations/session.js";
|
|
5
|
-
import { SessionHistory } from "../history/index.js";
|
|
6
|
-
import { cliStallPhase } from "../history/stall-phase-bridge.js";
|
|
7
|
-
function missingResult(requestId, operation) {
|
|
8
|
-
return {
|
|
9
|
-
kind: "result",
|
|
10
|
-
requestId,
|
|
11
|
-
op: operation,
|
|
12
|
-
ok: false,
|
|
13
|
-
error: {
|
|
14
|
-
code: "NO_RESULT",
|
|
15
|
-
message: `Operation ${operation} produced no result frame`,
|
|
16
|
-
},
|
|
17
|
-
};
|
|
18
|
-
}
|
|
19
|
-
export function resolveAriaHome(override) {
|
|
20
|
-
if (override?.trim()) {
|
|
21
|
-
return override.trim();
|
|
22
|
-
}
|
|
23
|
-
if (process.env.ARIA_HOME) {
|
|
24
|
-
return process.env.ARIA_HOME;
|
|
25
|
-
}
|
|
26
|
-
return path.join(process.env.HOME || homedir(), ".aria");
|
|
27
|
-
}
|
|
28
|
-
export function resolveBootstrapArionName(options = {}) {
|
|
29
|
-
const ariaHome = resolveAriaHome(options.ariaHome);
|
|
30
|
-
const requestedName = options.arionName?.trim();
|
|
31
|
-
if (requestedName) {
|
|
32
|
-
return resolveCanonicalArionName(ariaHome, requestedName);
|
|
33
|
-
}
|
|
34
|
-
const configPath = path.join(ariaHome, "config.json");
|
|
35
|
-
if (!existsSync(configPath)) {
|
|
36
|
-
return "ARIA";
|
|
37
|
-
}
|
|
38
|
-
try {
|
|
39
|
-
const raw = JSON.parse(readFileSync(configPath, "utf8"));
|
|
40
|
-
if (typeof raw.activeArion === "string" && raw.activeArion.trim().length > 0) {
|
|
41
|
-
return resolveCanonicalArionName(ariaHome, raw.activeArion.trim());
|
|
42
|
-
}
|
|
43
|
-
}
|
|
44
|
-
catch {
|
|
45
|
-
// Fall back to the default Arion name when config is unreadable.
|
|
46
|
-
}
|
|
47
|
-
return "ARIA";
|
|
48
|
-
}
|
|
49
|
-
export function resolveCanonicalArionName(ariaHome, requestedName) {
|
|
50
|
-
const trimmed = requestedName.trim();
|
|
51
|
-
if (!trimmed) {
|
|
52
|
-
return "ARIA";
|
|
53
|
-
}
|
|
54
|
-
const arionsDir = path.join(ariaHome, "arions");
|
|
55
|
-
if (!existsSync(arionsDir)) {
|
|
56
|
-
return trimmed;
|
|
57
|
-
}
|
|
58
|
-
try {
|
|
59
|
-
const target = trimmed.toLowerCase();
|
|
60
|
-
for (const entry of readdirSync(arionsDir, { withFileTypes: true })) {
|
|
61
|
-
if (entry.isDirectory() && entry.name.toLowerCase() === target) {
|
|
62
|
-
return entry.name;
|
|
63
|
-
}
|
|
64
|
-
}
|
|
65
|
-
}
|
|
66
|
-
catch {
|
|
67
|
-
// Fall back to the caller-provided spelling when discovery fails.
|
|
68
|
-
}
|
|
69
|
-
return trimmed;
|
|
70
|
-
}
|
|
71
|
-
export function runBootstrapSessionOperation(requestId, operation, input, options = {}) {
|
|
72
|
-
const ariaHome = resolveAriaHome(options.ariaHome);
|
|
73
|
-
const arionName = resolveBootstrapArionName({
|
|
74
|
-
ariaHome,
|
|
75
|
-
arionName: options.arionName,
|
|
76
|
-
});
|
|
77
|
-
const sessionLedger = new SessionHistory(SessionHistory.resolvePerArionPath(ariaHome, arionName), {
|
|
78
|
-
stallPhase: cliStallPhase,
|
|
79
|
-
});
|
|
80
|
-
try {
|
|
81
|
-
switch (operation) {
|
|
82
|
-
case "session.list":
|
|
83
|
-
return buildSessionListResult(requestId, sessionLedger, input);
|
|
84
|
-
case "session.read":
|
|
85
|
-
return buildSessionReadResult(requestId, sessionLedger, input);
|
|
86
|
-
case "session.load":
|
|
87
|
-
return buildSessionLoadResult(requestId, sessionLedger, input);
|
|
88
|
-
default:
|
|
89
|
-
return missingResult(requestId, operation);
|
|
90
|
-
}
|
|
91
|
-
}
|
|
92
|
-
finally {
|
|
93
|
-
sessionLedger.close();
|
|
94
|
-
}
|
|
95
|
-
}
|
|
96
|
-
export function runBootstrapSystemRestart(requestId, input) {
|
|
97
|
-
const reason = typeof input.reason === "string" &&
|
|
98
|
-
input.reason.trim().length > 0
|
|
99
|
-
? input.reason.trim()
|
|
100
|
-
: "Restart requested";
|
|
101
|
-
return {
|
|
102
|
-
kind: "result",
|
|
103
|
-
requestId,
|
|
104
|
-
op: "system.restart",
|
|
105
|
-
ok: true,
|
|
106
|
-
result: {
|
|
107
|
-
accepted: true,
|
|
108
|
-
reason,
|
|
109
|
-
},
|
|
110
|
-
};
|
|
111
|
-
}
|
|
112
|
-
//# sourceMappingURL=bootstrap-fast-path.js.map
|