@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.
Files changed (319) hide show
  1. package/bin/aria.mjs +799 -668
  2. package/package.json +17 -76
  3. package/dist/.tsbuildinfo +0 -1
  4. package/dist/attached-local-control-client.js +0 -826
  5. package/dist/bootstrap-local-control-client.js +0 -2
  6. package/dist/capability-aware-method-proxy.js +0 -42
  7. package/dist/cli-context.js +0 -160
  8. package/dist/commands/arions.js +0 -174
  9. package/dist/commands/auth.js +0 -123
  10. package/dist/commands/daemon.js +0 -367
  11. package/dist/commands/definitions.js +0 -176
  12. package/dist/commands/index.js +0 -80
  13. package/dist/commands/login-handler.js +0 -1108
  14. package/dist/commands/logout-handler.js +0 -92
  15. package/dist/commands/memory-handlers.js +0 -89
  16. package/dist/commands/pairing.js +0 -60
  17. package/dist/commands/runtime-cutover-reset-command.js +0 -12
  18. package/dist/commands/runtime-cutover-reset.js +0 -265
  19. package/dist/commands/terminal-setup.js +0 -84
  20. package/dist/config/aria-config.js +0 -238
  21. package/dist/config/index.js +0 -3
  22. package/dist/config/loader.js +0 -97
  23. package/dist/config.js +0 -142
  24. package/dist/daemon-info.js +0 -10
  25. package/dist/ensure-daemon.js +0 -128
  26. package/dist/entrypoints/command-mode.js +0 -5
  27. package/dist/entrypoints/daemon.js +0 -50
  28. package/dist/entrypoints/headless-stdio.js +0 -25
  29. package/dist/entrypoints/interactive.js +0 -80
  30. package/dist/event-loop-watchdog.js +0 -73
  31. package/dist/headless/auth-orchestrator.js +0 -508
  32. package/dist/headless/auth-service.js +0 -43
  33. package/dist/headless/bootstrap-fast-path.js +0 -112
  34. package/dist/headless/call-command.js +0 -143
  35. package/dist/headless/daemon-service.js +0 -318
  36. package/dist/headless/hook-actions.js +0 -235
  37. package/dist/headless/hook-service.js +0 -42
  38. package/dist/headless/kernel-services.js +0 -216
  39. package/dist/headless/kernel.js +0 -785
  40. package/dist/headless/operations/arion.js +0 -119
  41. package/dist/headless/operations/auth.js +0 -45
  42. package/dist/headless/operations/client.js +0 -31
  43. package/dist/headless/operations/config.js +0 -69
  44. package/dist/headless/operations/daemon.js +0 -47
  45. package/dist/headless/operations/hook.js +0 -56
  46. package/dist/headless/operations/index.js +0 -11
  47. package/dist/headless/operations/memory.js +0 -102
  48. package/dist/headless/operations/message.js +0 -279
  49. package/dist/headless/operations/model.js +0 -100
  50. package/dist/headless/operations/peer.js +0 -56
  51. package/dist/headless/operations/run.js +0 -24
  52. package/dist/headless/operations/session.js +0 -90
  53. package/dist/headless/operations/system.js +0 -19
  54. package/dist/headless/operations/utils.js +0 -35
  55. package/dist/headless/run-orchestrator.js +0 -703
  56. package/dist/headless/stdio-server.js +0 -439
  57. package/dist/history/SessionHistory.js +0 -8
  58. package/dist/history/SessionHistoryClient.js +0 -186
  59. package/dist/history/conversation-message.js +0 -112
  60. package/dist/history/index.js +0 -8
  61. package/dist/history/jsonl-replay.js +0 -154
  62. package/dist/history/repair-tool-pairing.js +0 -84
  63. package/dist/history/stall-phase-bridge.js +0 -11
  64. package/dist/history/turn-accumulator.js +0 -427
  65. package/dist/index.js +0 -7
  66. package/dist/ink-repl.js +0 -4183
  67. package/dist/local-control-bootstrap.js +0 -26
  68. package/dist/local-control-client.js +0 -2
  69. package/dist/local-control-error-reporting.js +0 -34
  70. package/dist/local-control-http-client.js +0 -362
  71. package/dist/local-control-lazy-wrapper.js +0 -363
  72. package/dist/local-control-manager.js +0 -146
  73. package/dist/main.js +0 -62
  74. package/dist/network-security.js +0 -62
  75. package/dist/networking-server.js +0 -38
  76. package/dist/peer-identity.js +0 -23
  77. package/dist/polling-subscription.js +0 -34
  78. package/dist/relaunch.js +0 -617
  79. package/dist/release-notes.js +0 -35
  80. package/dist/repl-cleanup.js +0 -47
  81. package/dist/runtime/configure-bun-sqlite.js +0 -3
  82. package/dist/runtime/crash-handlers.js +0 -111
  83. package/dist/runtime/interactive-invocation.js +0 -39
  84. package/dist/runtime/internal-mode.js +0 -14
  85. package/dist/runtime/launch-spec.js +0 -64
  86. package/dist/runtime/owner-lease.js +0 -44
  87. package/dist/runtime/public-mode.js +0 -20
  88. package/dist/runtime/run-internal-mode.js +0 -18
  89. package/dist/runtime/runtime-kind.js +0 -32
  90. package/dist/runtime/spawn-aria.js +0 -38
  91. package/dist/selectable-client.js +0 -2
  92. package/dist/selectable-peer.js +0 -2
  93. package/dist/session.js +0 -203
  94. package/dist/slash-commands.js +0 -80
  95. package/dist/sounds.js +0 -210
  96. package/dist/ui/App.js +0 -526
  97. package/dist/ui/components/AnthropicMethodPicker.js +0 -6
  98. package/dist/ui/components/ArionPrompt.js +0 -15
  99. package/dist/ui/components/AutocompleteDropdown.js +0 -23
  100. package/dist/ui/components/AutonomySelector.js +0 -55
  101. package/dist/ui/components/Banner.js +0 -98
  102. package/dist/ui/components/ConversationHistory.js +0 -175
  103. package/dist/ui/components/CopilotDeviceLoginFlow.js +0 -88
  104. package/dist/ui/components/CopilotSourcePicker.js +0 -50
  105. package/dist/ui/components/Cost.js +0 -10
  106. package/dist/ui/components/CustomSelect/option-map.js +0 -30
  107. package/dist/ui/components/CustomSelect/select-option.js +0 -13
  108. package/dist/ui/components/CustomSelect/select.js +0 -42
  109. package/dist/ui/components/CustomSelect/use-select-state.js +0 -179
  110. package/dist/ui/components/CustomSelect/use-select.js +0 -15
  111. package/dist/ui/components/ErrorDisplay.js +0 -35
  112. package/dist/ui/components/FallbackToolUseRejectedMessage.js +0 -7
  113. package/dist/ui/components/FileEditToolUpdatedMessage.js +0 -57
  114. package/dist/ui/components/HandoffMarker.js +0 -18
  115. package/dist/ui/components/HighlightedCode.js +0 -21
  116. package/dist/ui/components/InputArea.js +0 -187
  117. package/dist/ui/components/Message.js +0 -25
  118. package/dist/ui/components/OAuthLoginFlow.js +0 -113
  119. package/dist/ui/components/OutputTruncation.js +0 -35
  120. package/dist/ui/components/PermissionPrompt.js +0 -79
  121. package/dist/ui/components/PipelineTimingPanel.js +0 -15
  122. package/dist/ui/components/ProviderMethodPicker.js +0 -61
  123. package/dist/ui/components/ProviderPicker.js +0 -63
  124. package/dist/ui/components/RenderItemView.js +0 -71
  125. package/dist/ui/components/Spinner.js +0 -46
  126. package/dist/ui/components/StatusBar.js +0 -95
  127. package/dist/ui/components/StreamingIndicator.js +0 -55
  128. package/dist/ui/components/StructuredDiff.js +0 -168
  129. package/dist/ui/components/TextInputOverlay.js +0 -43
  130. package/dist/ui/components/ThinkingBlock.js +0 -82
  131. package/dist/ui/components/ToolCost.js +0 -17
  132. package/dist/ui/components/ToolExecution.js +0 -61
  133. package/dist/ui/components/ToolHeader.js +0 -51
  134. package/dist/ui/components/ToolRenderLayoutContext.js +0 -14
  135. package/dist/ui/components/ToolResultWrapper.js +0 -6
  136. package/dist/ui/components/ToolUseLoader.js +0 -35
  137. package/dist/ui/components/TraceWaterfall.js +0 -91
  138. package/dist/ui/components/index.js +0 -33
  139. package/dist/ui/components/messages/AssistantTextMessage.js +0 -25
  140. package/dist/ui/components/messages/UserImageMessage.js +0 -12
  141. package/dist/ui/components/messages/UserTextMessage.js +0 -12
  142. package/dist/ui/components/overlays/ArionSelector.js +0 -68
  143. package/dist/ui/components/overlays/ClientSelector.js +0 -62
  144. package/dist/ui/components/overlays/CommandPalette.js +0 -67
  145. package/dist/ui/components/overlays/DaemonControl.js +0 -87
  146. package/dist/ui/components/overlays/InviteShareOverlay.js +0 -15
  147. package/dist/ui/components/overlays/JoinInviteOverlay.js +0 -32
  148. package/dist/ui/components/overlays/MemoryBrowser.js +0 -100
  149. package/dist/ui/components/overlays/MessageSelector.js +0 -123
  150. package/dist/ui/components/overlays/ModelSelector.js +0 -211
  151. package/dist/ui/components/overlays/PairRequestOverlay.js +0 -42
  152. package/dist/ui/components/overlays/PeerSelector.js +0 -84
  153. package/dist/ui/components/overlays/SessionSelector.js +0 -102
  154. package/dist/ui/components/overlays/SoundSelector.js +0 -86
  155. package/dist/ui/components/overlays/ThemeSelector.js +0 -139
  156. package/dist/ui/components/overlays/index.js +0 -15
  157. package/dist/ui/components/permissions/BashPermissionRequest/BashPermissionRequest.js +0 -53
  158. package/dist/ui/components/permissions/FallbackPermissionRequest.js +0 -56
  159. package/dist/ui/components/permissions/FileEditPermissionRequest/FileEditPermissionRequest.js +0 -76
  160. package/dist/ui/components/permissions/FileEditPermissionRequest/FileEditToolDiff.js +0 -18
  161. package/dist/ui/components/permissions/FileWritePermissionRequest/FileWritePermissionRequest.js +0 -64
  162. package/dist/ui/components/permissions/FileWritePermissionRequest/FileWriteToolDiff.js +0 -26
  163. package/dist/ui/components/permissions/FilesystemPermissionRequest/FilesystemPermissionRequest.js +0 -141
  164. package/dist/ui/components/permissions/PermissionRequest.js +0 -70
  165. package/dist/ui/components/permissions/PermissionRequestTitle.js +0 -41
  166. package/dist/ui/components/permissions/hooks.js +0 -10
  167. package/dist/ui/components/permissions/toolUseOptions.js +0 -68
  168. package/dist/ui/components/permissions/utils.js +0 -10
  169. package/dist/ui/components/text-input/Cursor.js +0 -326
  170. package/dist/ui/components/text-input/TextInput.js +0 -231
  171. package/dist/ui/components/text-input/imagePaste.js +0 -28
  172. package/dist/ui/components/text-input/index.js +0 -6
  173. package/dist/ui/components/text-input/useDoublePress.js +0 -30
  174. package/dist/ui/components/text-input/useTextInput.js +0 -245
  175. package/dist/ui/components/tool-types.js +0 -9
  176. package/dist/ui/constants/figures.js +0 -4
  177. package/dist/ui/constants/index.js +0 -3
  178. package/dist/ui/display-mode.js +0 -93
  179. package/dist/ui/display-policy.js +0 -19
  180. package/dist/ui/hooks/index.js +0 -6
  181. package/dist/ui/hooks/useCommandAutocomplete.js +0 -93
  182. package/dist/ui/hooks/useDoublePress.js +0 -37
  183. package/dist/ui/hooks/useIndicatorState.js +0 -55
  184. package/dist/ui/hooks/useInterval.js +0 -23
  185. package/dist/ui/hooks/useKeyboardShortcuts.js +0 -127
  186. package/dist/ui/hooks/useTerminalSize.js +0 -55
  187. package/dist/ui/hooks/useUnifiedMessages.js +0 -117
  188. package/dist/ui/indicator-state.js +0 -44
  189. package/dist/ui/markdown/highlight.js +0 -44
  190. package/dist/ui/markdown/index.js +0 -1460
  191. package/dist/ui/markdown/tokenizer.js +0 -24
  192. package/dist/ui/render-item.js +0 -5
  193. package/dist/ui/screens/REPL.js +0 -119
  194. package/dist/ui/screens/approval-lifecycle.js +0 -38
  195. package/dist/ui/status-line.js +0 -72
  196. package/dist/ui/theme/index.js +0 -51
  197. package/dist/ui/theme/themes/claude-dark-daltonized.js +0 -51
  198. package/dist/ui/theme/themes/claude-dark.js +0 -50
  199. package/dist/ui/theme/themes/claude-light-daltonized.js +0 -51
  200. package/dist/ui/theme/themes/claude-light.js +0 -50
  201. package/dist/ui/theme/themes/dark-accessible.js +0 -18
  202. package/dist/ui/theme/themes/dark.js +0 -49
  203. package/dist/ui/theme/themes/light-accessible.js +0 -18
  204. package/dist/ui/theme/themes/light.js +0 -49
  205. package/dist/ui/theme/types.js +0 -3
  206. package/dist/ui/theme.js +0 -142
  207. package/dist/ui/to-render-items.js +0 -145
  208. package/dist/ui/tools/AgentTool/index.js +0 -30
  209. package/dist/ui/tools/ArchitectTool/index.js +0 -31
  210. package/dist/ui/tools/AskUserTool/index.js +0 -46
  211. package/dist/ui/tools/BashTool/BashToolResultMessage.js +0 -11
  212. package/dist/ui/tools/BashTool/OutputLine.js +0 -21
  213. package/dist/ui/tools/BashTool/index.js +0 -91
  214. package/dist/ui/tools/BrowseTool/index.js +0 -43
  215. package/dist/ui/tools/BrowserTool/index.js +0 -47
  216. package/dist/ui/tools/CbmTool/index.js +0 -188
  217. package/dist/ui/tools/CheckDelegationTool/index.js +0 -46
  218. package/dist/ui/tools/CheckMessagesTool/index.js +0 -85
  219. package/dist/ui/tools/CreateQuipTool/index.js +0 -30
  220. package/dist/ui/tools/CreateSkillTool/index.js +0 -22
  221. package/dist/ui/tools/CreateToolTool/index.js +0 -31
  222. package/dist/ui/tools/DelegateRemoteTool/index.js +0 -42
  223. package/dist/ui/tools/DeployTool/index.js +0 -47
  224. package/dist/ui/tools/FffTool/index.js +0 -103
  225. package/dist/ui/tools/FileEditTool/index.js +0 -67
  226. package/dist/ui/tools/FileReadTool/index.js +0 -68
  227. package/dist/ui/tools/FileWriteTool/index.js +0 -61
  228. package/dist/ui/tools/ForkTool/index.js +0 -47
  229. package/dist/ui/tools/FrgTool/index.js +0 -96
  230. package/dist/ui/tools/GetThreadTool/index.js +0 -39
  231. package/dist/ui/tools/GlobTool/index.js +0 -50
  232. package/dist/ui/tools/GrepTool/index.js +0 -84
  233. package/dist/ui/tools/HatchArionTool/index.js +0 -36
  234. package/dist/ui/tools/LearnSkillTool/index.js +0 -22
  235. package/dist/ui/tools/LearnTool/index.js +0 -43
  236. package/dist/ui/tools/LearnToolTool/index.js +0 -22
  237. package/dist/ui/tools/ListClientsTool/index.js +0 -39
  238. package/dist/ui/tools/LspTool/index.js +0 -261
  239. package/dist/ui/tools/MCPTool/index.js +0 -33
  240. package/dist/ui/tools/ManageNetworkTool/index.js +0 -53
  241. package/dist/ui/tools/MemoryReadTool/index.js +0 -64
  242. package/dist/ui/tools/MemoryWriteTool/index.js +0 -20
  243. package/dist/ui/tools/NotebookEditTool/index.js +0 -33
  244. package/dist/ui/tools/NotebookReadTool/index.js +0 -25
  245. package/dist/ui/tools/OutlookReadTool/index.js +0 -66
  246. package/dist/ui/tools/OutlookReplyTool/index.js +0 -49
  247. package/dist/ui/tools/OutlookSendTool/index.js +0 -49
  248. package/dist/ui/tools/PauseDelegationTool/index.js +0 -35
  249. package/dist/ui/tools/ProbeTool/index.js +0 -121
  250. package/dist/ui/tools/ProcessTool/index.js +0 -66
  251. package/dist/ui/tools/QuestListTool/index.js +0 -46
  252. package/dist/ui/tools/QuestReportTool/index.js +0 -49
  253. package/dist/ui/tools/QuestUpdateTool/index.js +0 -87
  254. package/dist/ui/tools/QuipCommentTool/index.js +0 -69
  255. package/dist/ui/tools/QuipReadTool/index.js +0 -71
  256. package/dist/ui/tools/RestArionTool/index.js +0 -32
  257. package/dist/ui/tools/RestartTool/index.js +0 -35
  258. package/dist/ui/tools/ResumeDelegationTool/index.js +0 -35
  259. package/dist/ui/tools/RetireArionTool/index.js +0 -32
  260. package/dist/ui/tools/RgTool/index.js +0 -73
  261. package/dist/ui/tools/SearchKnowledgeTool/index.js +0 -43
  262. package/dist/ui/tools/SearchMessagesTool/index.js +0 -43
  263. package/dist/ui/tools/SelfDiagnoseTool/index.js +0 -61
  264. package/dist/ui/tools/SendMessageTool/index.js +0 -45
  265. package/dist/ui/tools/SerenaTool/index.js +0 -124
  266. package/dist/ui/tools/SessionHistoryTool/index.js +0 -52
  267. package/dist/ui/tools/SgTool/index.js +0 -80
  268. package/dist/ui/tools/SlackReactTool/index.js +0 -41
  269. package/dist/ui/tools/SlackReadTool/index.js +0 -48
  270. package/dist/ui/tools/SlackSendTool/index.js +0 -45
  271. package/dist/ui/tools/SpawnWorkerTool/index.js +0 -33
  272. package/dist/ui/tools/StickerRequestTool/index.js +0 -19
  273. package/dist/ui/tools/ThinkTool/index.js +0 -17
  274. package/dist/ui/tools/UgTool/index.js +0 -108
  275. package/dist/ui/tools/UseSkillTool/index.js +0 -22
  276. package/dist/ui/tools/WakeArionTool/index.js +0 -32
  277. package/dist/ui/tools/WebFetchTool/index.js +0 -56
  278. package/dist/ui/tools/WebSearchTool/index.js +0 -44
  279. package/dist/ui/tools/lsTool/index.js +0 -58
  280. package/dist/ui/tools/registry.js +0 -197
  281. package/dist/ui/tools/tool-renderer.js +0 -11
  282. package/dist/ui/tools/truncation.js +0 -35
  283. package/dist/ui/types/anthropic.js +0 -4
  284. package/dist/ui/types/index.js +0 -2
  285. package/dist/ui/types/message.js +0 -3
  286. package/dist/ui/types/tool.js +0 -4
  287. package/dist/ui/utils/array.js +0 -4
  288. package/dist/ui/utils/cursor.js +0 -131
  289. package/dist/ui/utils/diff.js +0 -120
  290. package/dist/ui/utils/format.js +0 -42
  291. package/dist/ui/utils/fuzzy.js +0 -59
  292. package/dist/ui/utils/index.js +0 -11
  293. package/dist/ui/utils/keys.js +0 -8
  294. package/dist/ui/utils/patch.js +0 -17
  295. package/dist/ui/utils/risk.js +0 -114
  296. package/dist/ui/utils/terminal-image.js +0 -70
  297. package/dist/ui/utils/validation.js +0 -48
  298. package/dist/ui/verb-pairs.js +0 -248
  299. package/dist/ui.js +0 -131
  300. package/src/entrypoints/command-mode.ts +0 -5
  301. package/src/entrypoints/daemon.ts +0 -54
  302. package/src/entrypoints/headless-stdio.ts +0 -27
  303. package/src/entrypoints/interactive.ts +0 -112
  304. package/src/main.ts +0 -72
  305. package/src/runtime/configure-bun-sqlite.ts +0 -3
  306. package/src/runtime/crash-handlers.ts +0 -128
  307. package/src/runtime/interactive-invocation.test.ts +0 -42
  308. package/src/runtime/interactive-invocation.ts +0 -51
  309. package/src/runtime/internal-mode.test.ts +0 -19
  310. package/src/runtime/internal-mode.ts +0 -24
  311. package/src/runtime/launch-spec.test.ts +0 -26
  312. package/src/runtime/launch-spec.ts +0 -84
  313. package/src/runtime/owner-lease.ts +0 -52
  314. package/src/runtime/public-mode.test.ts +0 -18
  315. package/src/runtime/public-mode.ts +0 -19
  316. package/src/runtime/run-internal-mode.ts +0 -19
  317. package/src/runtime/runtime-kind.test.ts +0 -23
  318. package/src/runtime/runtime-kind.ts +0 -41
  319. package/src/runtime/spawn-aria.ts +0 -62
@@ -1,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