@aria-cli/cli 1.0.51 → 1.0.54

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (319) hide show
  1. package/bin/aria.mjs +569 -569
  2. package/package.json +14 -73
  3. package/dist/.tsbuildinfo +0 -1
  4. package/dist/attached-local-control-client.js +0 -826
  5. package/dist/bootstrap-local-control-client.js +0 -2
  6. package/dist/capability-aware-method-proxy.js +0 -42
  7. package/dist/cli-context.js +0 -160
  8. package/dist/commands/arions.js +0 -174
  9. package/dist/commands/auth.js +0 -123
  10. package/dist/commands/daemon.js +0 -245
  11. package/dist/commands/definitions.js +0 -176
  12. package/dist/commands/index.js +0 -74
  13. package/dist/commands/login-handler.js +0 -1108
  14. package/dist/commands/logout-handler.js +0 -92
  15. package/dist/commands/memory-handlers.js +0 -89
  16. package/dist/commands/pairing.js +0 -60
  17. package/dist/commands/runtime-cutover-reset-command.js +0 -12
  18. package/dist/commands/runtime-cutover-reset.js +0 -265
  19. package/dist/commands/terminal-setup.js +0 -84
  20. package/dist/config/aria-config.js +0 -238
  21. package/dist/config/index.js +0 -3
  22. package/dist/config/loader.js +0 -97
  23. package/dist/config.js +0 -142
  24. package/dist/daemon-info.js +0 -10
  25. package/dist/ensure-daemon.js +0 -128
  26. package/dist/entrypoints/command-mode.js +0 -5
  27. package/dist/entrypoints/daemon.js +0 -50
  28. package/dist/entrypoints/headless-stdio.js +0 -25
  29. package/dist/entrypoints/interactive.js +0 -80
  30. package/dist/event-loop-watchdog.js +0 -73
  31. package/dist/headless/auth-orchestrator.js +0 -508
  32. package/dist/headless/auth-service.js +0 -43
  33. package/dist/headless/bootstrap-fast-path.js +0 -112
  34. package/dist/headless/call-command.js +0 -143
  35. package/dist/headless/daemon-service.js +0 -318
  36. package/dist/headless/hook-actions.js +0 -235
  37. package/dist/headless/hook-service.js +0 -42
  38. package/dist/headless/kernel-services.js +0 -216
  39. package/dist/headless/kernel.js +0 -785
  40. package/dist/headless/operations/arion.js +0 -119
  41. package/dist/headless/operations/auth.js +0 -45
  42. package/dist/headless/operations/client.js +0 -31
  43. package/dist/headless/operations/config.js +0 -69
  44. package/dist/headless/operations/daemon.js +0 -47
  45. package/dist/headless/operations/hook.js +0 -56
  46. package/dist/headless/operations/index.js +0 -11
  47. package/dist/headless/operations/memory.js +0 -102
  48. package/dist/headless/operations/message.js +0 -279
  49. package/dist/headless/operations/model.js +0 -100
  50. package/dist/headless/operations/peer.js +0 -56
  51. package/dist/headless/operations/run.js +0 -24
  52. package/dist/headless/operations/session.js +0 -90
  53. package/dist/headless/operations/system.js +0 -19
  54. package/dist/headless/operations/utils.js +0 -35
  55. package/dist/headless/run-orchestrator.js +0 -703
  56. package/dist/headless/stdio-server.js +0 -439
  57. package/dist/history/SessionHistory.js +0 -8
  58. package/dist/history/SessionHistoryClient.js +0 -186
  59. package/dist/history/conversation-message.js +0 -112
  60. package/dist/history/index.js +0 -8
  61. package/dist/history/jsonl-replay.js +0 -154
  62. package/dist/history/repair-tool-pairing.js +0 -84
  63. package/dist/history/stall-phase-bridge.js +0 -11
  64. package/dist/history/turn-accumulator.js +0 -427
  65. package/dist/index.js +0 -7
  66. package/dist/ink-repl.js +0 -4183
  67. package/dist/local-control-bootstrap.js +0 -26
  68. package/dist/local-control-client.js +0 -2
  69. package/dist/local-control-error-reporting.js +0 -34
  70. package/dist/local-control-http-client.js +0 -362
  71. package/dist/local-control-lazy-wrapper.js +0 -363
  72. package/dist/local-control-manager.js +0 -146
  73. package/dist/main.js +0 -38
  74. package/dist/network-security.js +0 -62
  75. package/dist/networking-server.js +0 -38
  76. package/dist/peer-identity.js +0 -23
  77. package/dist/polling-subscription.js +0 -34
  78. package/dist/relaunch.js +0 -588
  79. package/dist/release-notes.js +0 -35
  80. package/dist/repl-cleanup.js +0 -47
  81. package/dist/runtime/configure-bun-sqlite.js +0 -3
  82. package/dist/runtime/crash-handlers.js +0 -111
  83. package/dist/runtime/interactive-invocation.js +0 -39
  84. package/dist/runtime/internal-mode.js +0 -14
  85. package/dist/runtime/launch-spec.js +0 -64
  86. package/dist/runtime/owner-lease.js +0 -44
  87. package/dist/runtime/public-mode.js +0 -20
  88. package/dist/runtime/run-internal-mode.js +0 -18
  89. package/dist/runtime/runtime-kind.js +0 -32
  90. package/dist/runtime/spawn-aria.js +0 -38
  91. package/dist/selectable-client.js +0 -2
  92. package/dist/selectable-peer.js +0 -2
  93. package/dist/session.js +0 -203
  94. package/dist/slash-commands.js +0 -80
  95. package/dist/sounds.js +0 -210
  96. package/dist/ui/App.js +0 -526
  97. package/dist/ui/components/AnthropicMethodPicker.js +0 -6
  98. package/dist/ui/components/ArionPrompt.js +0 -15
  99. package/dist/ui/components/AutocompleteDropdown.js +0 -23
  100. package/dist/ui/components/AutonomySelector.js +0 -55
  101. package/dist/ui/components/Banner.js +0 -98
  102. package/dist/ui/components/ConversationHistory.js +0 -175
  103. package/dist/ui/components/CopilotDeviceLoginFlow.js +0 -88
  104. package/dist/ui/components/CopilotSourcePicker.js +0 -50
  105. package/dist/ui/components/Cost.js +0 -10
  106. package/dist/ui/components/CustomSelect/option-map.js +0 -30
  107. package/dist/ui/components/CustomSelect/select-option.js +0 -13
  108. package/dist/ui/components/CustomSelect/select.js +0 -42
  109. package/dist/ui/components/CustomSelect/use-select-state.js +0 -179
  110. package/dist/ui/components/CustomSelect/use-select.js +0 -15
  111. package/dist/ui/components/ErrorDisplay.js +0 -35
  112. package/dist/ui/components/FallbackToolUseRejectedMessage.js +0 -7
  113. package/dist/ui/components/FileEditToolUpdatedMessage.js +0 -57
  114. package/dist/ui/components/HandoffMarker.js +0 -18
  115. package/dist/ui/components/HighlightedCode.js +0 -21
  116. package/dist/ui/components/InputArea.js +0 -187
  117. package/dist/ui/components/Message.js +0 -25
  118. package/dist/ui/components/OAuthLoginFlow.js +0 -113
  119. package/dist/ui/components/OutputTruncation.js +0 -35
  120. package/dist/ui/components/PermissionPrompt.js +0 -79
  121. package/dist/ui/components/PipelineTimingPanel.js +0 -15
  122. package/dist/ui/components/ProviderMethodPicker.js +0 -61
  123. package/dist/ui/components/ProviderPicker.js +0 -63
  124. package/dist/ui/components/RenderItemView.js +0 -71
  125. package/dist/ui/components/Spinner.js +0 -46
  126. package/dist/ui/components/StatusBar.js +0 -95
  127. package/dist/ui/components/StreamingIndicator.js +0 -55
  128. package/dist/ui/components/StructuredDiff.js +0 -168
  129. package/dist/ui/components/TextInputOverlay.js +0 -43
  130. package/dist/ui/components/ThinkingBlock.js +0 -82
  131. package/dist/ui/components/ToolCost.js +0 -17
  132. package/dist/ui/components/ToolExecution.js +0 -61
  133. package/dist/ui/components/ToolHeader.js +0 -51
  134. package/dist/ui/components/ToolRenderLayoutContext.js +0 -14
  135. package/dist/ui/components/ToolResultWrapper.js +0 -6
  136. package/dist/ui/components/ToolUseLoader.js +0 -35
  137. package/dist/ui/components/TraceWaterfall.js +0 -91
  138. package/dist/ui/components/index.js +0 -33
  139. package/dist/ui/components/messages/AssistantTextMessage.js +0 -25
  140. package/dist/ui/components/messages/UserImageMessage.js +0 -12
  141. package/dist/ui/components/messages/UserTextMessage.js +0 -12
  142. package/dist/ui/components/overlays/ArionSelector.js +0 -68
  143. package/dist/ui/components/overlays/ClientSelector.js +0 -62
  144. package/dist/ui/components/overlays/CommandPalette.js +0 -67
  145. package/dist/ui/components/overlays/DaemonControl.js +0 -87
  146. package/dist/ui/components/overlays/InviteShareOverlay.js +0 -15
  147. package/dist/ui/components/overlays/JoinInviteOverlay.js +0 -32
  148. package/dist/ui/components/overlays/MemoryBrowser.js +0 -100
  149. package/dist/ui/components/overlays/MessageSelector.js +0 -123
  150. package/dist/ui/components/overlays/ModelSelector.js +0 -211
  151. package/dist/ui/components/overlays/PairRequestOverlay.js +0 -42
  152. package/dist/ui/components/overlays/PeerSelector.js +0 -84
  153. package/dist/ui/components/overlays/SessionSelector.js +0 -102
  154. package/dist/ui/components/overlays/SoundSelector.js +0 -86
  155. package/dist/ui/components/overlays/ThemeSelector.js +0 -139
  156. package/dist/ui/components/overlays/index.js +0 -15
  157. package/dist/ui/components/permissions/BashPermissionRequest/BashPermissionRequest.js +0 -53
  158. package/dist/ui/components/permissions/FallbackPermissionRequest.js +0 -56
  159. package/dist/ui/components/permissions/FileEditPermissionRequest/FileEditPermissionRequest.js +0 -76
  160. package/dist/ui/components/permissions/FileEditPermissionRequest/FileEditToolDiff.js +0 -18
  161. package/dist/ui/components/permissions/FileWritePermissionRequest/FileWritePermissionRequest.js +0 -64
  162. package/dist/ui/components/permissions/FileWritePermissionRequest/FileWriteToolDiff.js +0 -26
  163. package/dist/ui/components/permissions/FilesystemPermissionRequest/FilesystemPermissionRequest.js +0 -141
  164. package/dist/ui/components/permissions/PermissionRequest.js +0 -70
  165. package/dist/ui/components/permissions/PermissionRequestTitle.js +0 -41
  166. package/dist/ui/components/permissions/hooks.js +0 -10
  167. package/dist/ui/components/permissions/toolUseOptions.js +0 -68
  168. package/dist/ui/components/permissions/utils.js +0 -10
  169. package/dist/ui/components/text-input/Cursor.js +0 -326
  170. package/dist/ui/components/text-input/TextInput.js +0 -231
  171. package/dist/ui/components/text-input/imagePaste.js +0 -28
  172. package/dist/ui/components/text-input/index.js +0 -6
  173. package/dist/ui/components/text-input/useDoublePress.js +0 -30
  174. package/dist/ui/components/text-input/useTextInput.js +0 -245
  175. package/dist/ui/components/tool-types.js +0 -9
  176. package/dist/ui/constants/figures.js +0 -4
  177. package/dist/ui/constants/index.js +0 -3
  178. package/dist/ui/display-mode.js +0 -93
  179. package/dist/ui/display-policy.js +0 -19
  180. package/dist/ui/hooks/index.js +0 -6
  181. package/dist/ui/hooks/useCommandAutocomplete.js +0 -93
  182. package/dist/ui/hooks/useDoublePress.js +0 -37
  183. package/dist/ui/hooks/useIndicatorState.js +0 -55
  184. package/dist/ui/hooks/useInterval.js +0 -23
  185. package/dist/ui/hooks/useKeyboardShortcuts.js +0 -127
  186. package/dist/ui/hooks/useTerminalSize.js +0 -55
  187. package/dist/ui/hooks/useUnifiedMessages.js +0 -117
  188. package/dist/ui/indicator-state.js +0 -44
  189. package/dist/ui/markdown/highlight.js +0 -44
  190. package/dist/ui/markdown/index.js +0 -1460
  191. package/dist/ui/markdown/tokenizer.js +0 -24
  192. package/dist/ui/render-item.js +0 -5
  193. package/dist/ui/screens/REPL.js +0 -119
  194. package/dist/ui/screens/approval-lifecycle.js +0 -38
  195. package/dist/ui/status-line.js +0 -72
  196. package/dist/ui/theme/index.js +0 -51
  197. package/dist/ui/theme/themes/claude-dark-daltonized.js +0 -51
  198. package/dist/ui/theme/themes/claude-dark.js +0 -50
  199. package/dist/ui/theme/themes/claude-light-daltonized.js +0 -51
  200. package/dist/ui/theme/themes/claude-light.js +0 -50
  201. package/dist/ui/theme/themes/dark-accessible.js +0 -18
  202. package/dist/ui/theme/themes/dark.js +0 -49
  203. package/dist/ui/theme/themes/light-accessible.js +0 -18
  204. package/dist/ui/theme/themes/light.js +0 -49
  205. package/dist/ui/theme/types.js +0 -3
  206. package/dist/ui/theme.js +0 -142
  207. package/dist/ui/to-render-items.js +0 -145
  208. package/dist/ui/tools/AgentTool/index.js +0 -30
  209. package/dist/ui/tools/ArchitectTool/index.js +0 -31
  210. package/dist/ui/tools/AskUserTool/index.js +0 -46
  211. package/dist/ui/tools/BashTool/BashToolResultMessage.js +0 -11
  212. package/dist/ui/tools/BashTool/OutputLine.js +0 -21
  213. package/dist/ui/tools/BashTool/index.js +0 -91
  214. package/dist/ui/tools/BrowseTool/index.js +0 -43
  215. package/dist/ui/tools/BrowserTool/index.js +0 -47
  216. package/dist/ui/tools/CbmTool/index.js +0 -188
  217. package/dist/ui/tools/CheckDelegationTool/index.js +0 -46
  218. package/dist/ui/tools/CheckMessagesTool/index.js +0 -85
  219. package/dist/ui/tools/CreateQuipTool/index.js +0 -30
  220. package/dist/ui/tools/CreateSkillTool/index.js +0 -22
  221. package/dist/ui/tools/CreateToolTool/index.js +0 -31
  222. package/dist/ui/tools/DelegateRemoteTool/index.js +0 -42
  223. package/dist/ui/tools/DeployTool/index.js +0 -47
  224. package/dist/ui/tools/FffTool/index.js +0 -103
  225. package/dist/ui/tools/FileEditTool/index.js +0 -67
  226. package/dist/ui/tools/FileReadTool/index.js +0 -68
  227. package/dist/ui/tools/FileWriteTool/index.js +0 -61
  228. package/dist/ui/tools/ForkTool/index.js +0 -47
  229. package/dist/ui/tools/FrgTool/index.js +0 -96
  230. package/dist/ui/tools/GetThreadTool/index.js +0 -39
  231. package/dist/ui/tools/GlobTool/index.js +0 -50
  232. package/dist/ui/tools/GrepTool/index.js +0 -84
  233. package/dist/ui/tools/HatchArionTool/index.js +0 -36
  234. package/dist/ui/tools/LearnSkillTool/index.js +0 -22
  235. package/dist/ui/tools/LearnTool/index.js +0 -43
  236. package/dist/ui/tools/LearnToolTool/index.js +0 -22
  237. package/dist/ui/tools/ListClientsTool/index.js +0 -39
  238. package/dist/ui/tools/LspTool/index.js +0 -261
  239. package/dist/ui/tools/MCPTool/index.js +0 -33
  240. package/dist/ui/tools/ManageNetworkTool/index.js +0 -53
  241. package/dist/ui/tools/MemoryReadTool/index.js +0 -64
  242. package/dist/ui/tools/MemoryWriteTool/index.js +0 -20
  243. package/dist/ui/tools/NotebookEditTool/index.js +0 -33
  244. package/dist/ui/tools/NotebookReadTool/index.js +0 -25
  245. package/dist/ui/tools/OutlookReadTool/index.js +0 -66
  246. package/dist/ui/tools/OutlookReplyTool/index.js +0 -49
  247. package/dist/ui/tools/OutlookSendTool/index.js +0 -49
  248. package/dist/ui/tools/PauseDelegationTool/index.js +0 -35
  249. package/dist/ui/tools/ProbeTool/index.js +0 -121
  250. package/dist/ui/tools/ProcessTool/index.js +0 -66
  251. package/dist/ui/tools/QuestListTool/index.js +0 -46
  252. package/dist/ui/tools/QuestReportTool/index.js +0 -49
  253. package/dist/ui/tools/QuestUpdateTool/index.js +0 -87
  254. package/dist/ui/tools/QuipCommentTool/index.js +0 -69
  255. package/dist/ui/tools/QuipReadTool/index.js +0 -71
  256. package/dist/ui/tools/RestArionTool/index.js +0 -32
  257. package/dist/ui/tools/RestartTool/index.js +0 -35
  258. package/dist/ui/tools/ResumeDelegationTool/index.js +0 -35
  259. package/dist/ui/tools/RetireArionTool/index.js +0 -32
  260. package/dist/ui/tools/RgTool/index.js +0 -73
  261. package/dist/ui/tools/SearchKnowledgeTool/index.js +0 -43
  262. package/dist/ui/tools/SearchMessagesTool/index.js +0 -43
  263. package/dist/ui/tools/SelfDiagnoseTool/index.js +0 -61
  264. package/dist/ui/tools/SendMessageTool/index.js +0 -45
  265. package/dist/ui/tools/SerenaTool/index.js +0 -124
  266. package/dist/ui/tools/SessionHistoryTool/index.js +0 -52
  267. package/dist/ui/tools/SgTool/index.js +0 -80
  268. package/dist/ui/tools/SlackReactTool/index.js +0 -41
  269. package/dist/ui/tools/SlackReadTool/index.js +0 -48
  270. package/dist/ui/tools/SlackSendTool/index.js +0 -45
  271. package/dist/ui/tools/SpawnWorkerTool/index.js +0 -33
  272. package/dist/ui/tools/StickerRequestTool/index.js +0 -19
  273. package/dist/ui/tools/ThinkTool/index.js +0 -17
  274. package/dist/ui/tools/UgTool/index.js +0 -108
  275. package/dist/ui/tools/UseSkillTool/index.js +0 -22
  276. package/dist/ui/tools/WakeArionTool/index.js +0 -32
  277. package/dist/ui/tools/WebFetchTool/index.js +0 -56
  278. package/dist/ui/tools/WebSearchTool/index.js +0 -44
  279. package/dist/ui/tools/lsTool/index.js +0 -58
  280. package/dist/ui/tools/registry.js +0 -197
  281. package/dist/ui/tools/tool-renderer.js +0 -11
  282. package/dist/ui/tools/truncation.js +0 -35
  283. package/dist/ui/types/anthropic.js +0 -4
  284. package/dist/ui/types/index.js +0 -2
  285. package/dist/ui/types/message.js +0 -3
  286. package/dist/ui/types/tool.js +0 -4
  287. package/dist/ui/utils/array.js +0 -4
  288. package/dist/ui/utils/cursor.js +0 -131
  289. package/dist/ui/utils/diff.js +0 -120
  290. package/dist/ui/utils/format.js +0 -42
  291. package/dist/ui/utils/fuzzy.js +0 -59
  292. package/dist/ui/utils/index.js +0 -11
  293. package/dist/ui/utils/keys.js +0 -8
  294. package/dist/ui/utils/patch.js +0 -17
  295. package/dist/ui/utils/risk.js +0 -114
  296. package/dist/ui/utils/terminal-image.js +0 -70
  297. package/dist/ui/utils/validation.js +0 -48
  298. package/dist/ui/verb-pairs.js +0 -248
  299. package/dist/ui.js +0 -131
  300. package/src/entrypoints/command-mode.ts +0 -5
  301. package/src/entrypoints/daemon.ts +0 -54
  302. package/src/entrypoints/headless-stdio.ts +0 -27
  303. package/src/entrypoints/interactive.ts +0 -112
  304. package/src/main.ts +0 -44
  305. package/src/runtime/configure-bun-sqlite.ts +0 -3
  306. package/src/runtime/crash-handlers.ts +0 -128
  307. package/src/runtime/interactive-invocation.test.ts +0 -42
  308. package/src/runtime/interactive-invocation.ts +0 -51
  309. package/src/runtime/internal-mode.test.ts +0 -19
  310. package/src/runtime/internal-mode.ts +0 -24
  311. package/src/runtime/launch-spec.test.ts +0 -26
  312. package/src/runtime/launch-spec.ts +0 -84
  313. package/src/runtime/owner-lease.ts +0 -52
  314. package/src/runtime/public-mode.test.ts +0 -18
  315. package/src/runtime/public-mode.ts +0 -19
  316. package/src/runtime/run-internal-mode.ts +0 -19
  317. package/src/runtime/runtime-kind.test.ts +0 -23
  318. package/src/runtime/runtime-kind.ts +0 -41
  319. package/src/runtime/spawn-aria.ts +0 -62
@@ -1,92 +0,0 @@
1
- /**
2
- * Slash command handler for /logout -- disconnect providers and clear credentials.
3
- *
4
- * Supports two result modes:
5
- * - PickerResult: `/logout` with no args -> list connected/expired providers
6
- * - DirectResult: `/logout <provider>` or `/logout all` -> immediate disconnect
7
- */
8
- import { ensureAuthProfileStore, listProfilesForProvider, updateAuthProfileStoreWithLockSync, } from "@aria-cli/auth";
9
- import { getProviderOptions } from "./login-handler.js";
10
- // ---------------------------------------------------------------------------
11
- // disconnectProvider -- remove all profiles for a given provider
12
- // ---------------------------------------------------------------------------
13
- function disconnectProvider(provider) {
14
- const store = ensureAuthProfileStore();
15
- const profileIds = listProfilesForProvider(store, provider);
16
- if (profileIds.length === 0) {
17
- return {
18
- success: false,
19
- message: `No credentials found for "${provider}"`,
20
- };
21
- }
22
- updateAuthProfileStoreWithLockSync({
23
- updater: (freshStore) => {
24
- for (const id of profileIds) {
25
- const providerKey = freshStore.profiles[id]?.provider;
26
- delete freshStore.profiles[id];
27
- if (providerKey && freshStore.lastGood) {
28
- delete freshStore.lastGood[providerKey];
29
- }
30
- }
31
- if (freshStore.usageStats) {
32
- for (const id of profileIds) {
33
- delete freshStore.usageStats[id];
34
- }
35
- }
36
- return true;
37
- },
38
- });
39
- const plural = profileIds.length === 1 ? "profile" : "profiles";
40
- return {
41
- success: true,
42
- message: `Disconnected ${provider} (removed ${profileIds.length} ${plural})`,
43
- };
44
- }
45
- // ---------------------------------------------------------------------------
46
- // disconnectAll -- clear every profile in the store
47
- // ---------------------------------------------------------------------------
48
- function disconnectAll() {
49
- const store = ensureAuthProfileStore();
50
- const count = Object.keys(store.profiles).length;
51
- if (count === 0) {
52
- return { success: false, message: "No providers connected" };
53
- }
54
- updateAuthProfileStoreWithLockSync({
55
- updater: (freshStore) => {
56
- freshStore.profiles = {};
57
- freshStore.lastGood = undefined;
58
- freshStore.usageStats = undefined;
59
- return true;
60
- },
61
- });
62
- const plural = count === 1 ? "profile" : "profiles";
63
- return {
64
- success: true,
65
- message: `Cleared all credentials (${count} ${plural} removed)`,
66
- };
67
- }
68
- // ---------------------------------------------------------------------------
69
- // handleLogoutCommand -- entry point from REPL command dispatch
70
- // ---------------------------------------------------------------------------
71
- export function handleLogoutCommand(args) {
72
- const trimmed = args.trim().toLowerCase();
73
- // /logout all -> clear everything
74
- if (trimmed === "all") {
75
- return { mode: "direct", result: disconnectAll() };
76
- }
77
- // /logout <provider> -> disconnect specific provider
78
- if (trimmed) {
79
- return { mode: "direct", result: disconnectProvider(trimmed) };
80
- }
81
- // /logout (no args) -> show connected/expired providers
82
- const allProviders = getProviderOptions();
83
- const connected = allProviders.filter((p) => p.status !== "none");
84
- if (connected.length === 0) {
85
- return {
86
- mode: "direct",
87
- result: { success: true, message: "No providers connected" },
88
- };
89
- }
90
- return { mode: "picker", providers: connected };
91
- }
92
- //# sourceMappingURL=logout-handler.js.map
@@ -1,89 +0,0 @@
1
- /**
2
- * Slash command handlers for memory operations.
3
- *
4
- * Thin wrappers around Memoria API for testable command dispatch.
5
- * Used by the REPL command pipeline and E2E tests.
6
- */
7
- export async function handleRememberCommand(args, memoria) {
8
- const content = args.trim();
9
- if (!content) {
10
- return { success: false, message: "Usage: /remember <text to remember>" };
11
- }
12
- try {
13
- const memory = await memoria.remember(content);
14
- if (!memory || !memory.id) {
15
- return {
16
- success: false,
17
- message: "Failed to store memory (system closed or degraded)",
18
- };
19
- }
20
- const count = await memoria.count();
21
- const preview = content.length > 50 ? content.slice(0, 50) + "..." : content;
22
- return {
23
- success: true,
24
- message: `Remembered: "${preview}"`,
25
- data: { id: memory.id, count },
26
- };
27
- }
28
- catch (error) {
29
- return {
30
- success: false,
31
- message: `Error remembering: ${error instanceof Error ? error.message : String(error)}`,
32
- };
33
- }
34
- }
35
- export async function handleRecallCommand(args, memoria) {
36
- const query = args.trim();
37
- if (!query) {
38
- return { success: false, message: "Usage: /recall <query>" };
39
- }
40
- try {
41
- const results = await memoria.recall(query);
42
- if (results.memories.length === 0) {
43
- return {
44
- success: true,
45
- message: "No memories found matching your query.",
46
- data: { count: 0, memories: [] },
47
- };
48
- }
49
- return {
50
- success: true,
51
- message: `Found ${results.memories.length} memories:`,
52
- data: { count: results.memories.length, memories: results.memories },
53
- };
54
- }
55
- catch (error) {
56
- return {
57
- success: false,
58
- message: `Error recalling: ${error instanceof Error ? error.message : String(error)}`,
59
- };
60
- }
61
- }
62
- export async function handleForgetCommand(args, memoria) {
63
- const id = args.trim();
64
- if (!id) {
65
- return { success: false, message: "Usage: /forget <memory-id>" };
66
- }
67
- try {
68
- const deleted = await memoria.deleteMemory(id);
69
- if (deleted) {
70
- return {
71
- success: true,
72
- message: `Deleted memory ${id}.`,
73
- data: { deleted: true },
74
- };
75
- }
76
- return {
77
- success: true,
78
- message: `Memory ${id} not found or already deleted.`,
79
- data: { deleted: false },
80
- };
81
- }
82
- catch (error) {
83
- return {
84
- success: false,
85
- message: `Error forgetting: ${error instanceof Error ? error.message : String(error)}`,
86
- };
87
- }
88
- }
89
- //# sourceMappingURL=memory-handlers.js.map
@@ -1,60 +0,0 @@
1
- import { Command } from "commander";
2
- import { createCliContext } from "../cli-context.js";
3
- import { ensureDaemon } from "../ensure-daemon.js";
4
- function parseDurationMs(rawValue) {
5
- const parsed = Number.parseInt(rawValue, 10);
6
- if (!Number.isFinite(parsed) || parsed < 0) {
7
- throw new Error(`Invalid --duration-ms value: ${rawValue}`);
8
- }
9
- return parsed;
10
- }
11
- export function createPairingCommand() {
12
- const pairing = new Command("pairing").description("Invite and join peers over the internet");
13
- pairing
14
- .command("invite")
15
- .description("Create an end-user internet pairing invite")
16
- .argument("[label]", "Optional local label for the invite")
17
- .option("--duration-ms <ms>", "Invite lifetime in milliseconds", parseDurationMs)
18
- .action(async (label, options) => {
19
- const ctx = await createCliContext();
20
- try {
21
- const { control } = await ensureDaemon(ctx);
22
- const result = await control.createInvite({
23
- ...(label?.trim() ? { inviteLabel: label.trim() } : {}),
24
- ...(typeof options?.durationMs === "number" ? { durationMs: options.durationMs } : {}),
25
- });
26
- console.log("Invite token:");
27
- console.log(result.inviteToken);
28
- console.log("");
29
- console.log(`Join with: aria pairing join ${result.inviteToken}`);
30
- }
31
- catch (error) {
32
- console.error(`Failed to create invite: ${error.message}`);
33
- process.exit(1);
34
- }
35
- finally {
36
- await ctx.pool?.closeAll?.();
37
- }
38
- });
39
- pairing
40
- .command("join")
41
- .description("Accept an internet pairing invite token")
42
- .argument("<token>", "Invite token to accept")
43
- .action(async (token) => {
44
- const ctx = await createCliContext();
45
- try {
46
- const { control } = await ensureDaemon(ctx);
47
- const result = await control.acceptInviteToken({ inviteToken: token.trim() });
48
- console.log(`Paired with ${result.displayNameSnapshot ?? result.nodeId}`);
49
- }
50
- catch (error) {
51
- console.error(`Failed to accept invite: ${error.message}`);
52
- process.exit(1);
53
- }
54
- finally {
55
- await ctx.pool?.closeAll?.();
56
- }
57
- });
58
- return pairing;
59
- }
60
- //# sourceMappingURL=pairing.js.map
@@ -1,12 +0,0 @@
1
- import { Command } from "commander";
2
- export function createRuntimeCutoverResetCommand() {
3
- return new Command("runtime-cutover-reset")
4
- .description("Destructively clear stale runtime state while preserving local node identity by default")
5
- .option("--full-reset", "Also remove local node identity material")
6
- .option("--json", "Emit the reset report as JSON")
7
- .action(async (options) => {
8
- const { runtimeCutoverResetCommand } = await import("./runtime-cutover-reset.js");
9
- await runtimeCutoverResetCommand(options);
10
- });
11
- }
12
- //# sourceMappingURL=runtime-cutover-reset-command.js.map
@@ -1,265 +0,0 @@
1
- import * as fs from "node:fs";
2
- import * as path from "node:path";
3
- import { resolveRuntimeRootDirectory, runtimeSocketsDirectory } from "@aria-cli/server";
4
- import { openCompatSqliteDatabase } from "@aria-cli/tools";
5
- import { getAriaDir } from "../config.js";
6
- function canonicalizeAriaHome(ariaHome) {
7
- const resolved = path.resolve(ariaHome);
8
- try {
9
- return fs.realpathSync.native(resolved);
10
- }
11
- catch {
12
- return resolved;
13
- }
14
- }
15
- function resolveMachineDirectory() {
16
- return path.join(process.env.HOME ?? "/tmp", ".aria");
17
- }
18
- function nodeStorePathForAriaHome(ariaHome) {
19
- return path.join(ariaHome, "node", "node-state.db");
20
- }
21
- function nodeStoreLockPathForAriaHome(ariaHome) {
22
- return `${nodeStorePathForAriaHome(ariaHome)}.lock`;
23
- }
24
- function runtimeCutoverReportPath(ariaHome) {
25
- return path.join(ariaHome, "node", "runtime-cutover-last-report.json");
26
- }
27
- function isPidAlive(pid) {
28
- if (!Number.isFinite(pid) || pid <= 0)
29
- return false;
30
- try {
31
- process.kill(pid, 0);
32
- return true;
33
- }
34
- catch {
35
- return false;
36
- }
37
- }
38
- function removeIfExists(targetPath, report) {
39
- if (!fs.existsSync(targetPath)) {
40
- report.skippedPaths.push(targetPath);
41
- return;
42
- }
43
- fs.rmSync(targetPath, { recursive: true, force: true });
44
- report.removedPaths.push(targetPath);
45
- }
46
- function removeDatabaseFamily(dbPath, report) {
47
- for (const candidate of [dbPath, `${dbPath}-wal`, `${dbPath}-shm`]) {
48
- removeIfExists(candidate, report);
49
- }
50
- }
51
- function listArionDirectories(ariaHome) {
52
- const arionsDir = path.join(ariaHome, "arions");
53
- if (!fs.existsSync(arionsDir)) {
54
- return [];
55
- }
56
- return fs
57
- .readdirSync(arionsDir, { withFileTypes: true })
58
- .filter((entry) => entry.isDirectory())
59
- .map((entry) => path.join(arionsDir, entry.name));
60
- }
61
- function collectLiveOwnerProjectionPids(runtimeRoot) {
62
- const ownersDir = path.join(runtimeRoot, "owners");
63
- if (!fs.existsSync(ownersDir)) {
64
- return [];
65
- }
66
- const pids = new Set();
67
- for (const entry of fs.readdirSync(ownersDir)) {
68
- if (!entry.endsWith(".json"))
69
- continue;
70
- try {
71
- const raw = fs.readFileSync(path.join(ownersDir, entry), "utf8");
72
- const parsed = JSON.parse(raw);
73
- if (typeof parsed.runtimePid === "number" && isPidAlive(parsed.runtimePid)) {
74
- pids.add(parsed.runtimePid);
75
- }
76
- }
77
- catch {
78
- // Ignore malformed stale projections — reset will remove them later.
79
- }
80
- }
81
- return [...pids];
82
- }
83
- function collectLiveJsonPidFiles(root, matcher, pidExtractor) {
84
- if (!fs.existsSync(root)) {
85
- return [];
86
- }
87
- const pids = new Set();
88
- for (const entry of fs.readdirSync(root)) {
89
- if (!matcher(entry))
90
- continue;
91
- try {
92
- const parsed = JSON.parse(fs.readFileSync(path.join(root, entry), "utf8"));
93
- const pid = pidExtractor(parsed);
94
- if (pid !== null && isPidAlive(pid)) {
95
- pids.add(pid);
96
- }
97
- }
98
- catch {
99
- // Ignore malformed or stale artifacts; reset will remove them later.
100
- }
101
- }
102
- return [...pids];
103
- }
104
- function collectLivePresencePids(machineDir) {
105
- return collectLiveJsonPidFiles(machineDir, (entry) => entry.startsWith("presence-") && entry.endsWith(".json"), (parsed) => {
106
- if (typeof parsed === "object" &&
107
- parsed !== null &&
108
- "pid" in parsed &&
109
- typeof parsed.pid === "number") {
110
- return parsed.pid;
111
- }
112
- return null;
113
- });
114
- }
115
- function collectLiveNodeStoreOwnerPids(ariaHome) {
116
- const dbPath = nodeStorePathForAriaHome(ariaHome);
117
- if (!fs.existsSync(dbPath)) {
118
- return [];
119
- }
120
- const db = openCompatSqliteDatabase({ path: dbPath });
121
- try {
122
- const rows = db
123
- .prepare(`SELECT runtime_pid
124
- FROM runtime_owner_records`)
125
- .all();
126
- return rows
127
- .map((row) => row.runtime_pid)
128
- .filter((pid) => Number.isFinite(pid) && isPidAlive(pid));
129
- }
130
- catch {
131
- return [];
132
- }
133
- finally {
134
- db.close();
135
- }
136
- }
137
- function assertNoLiveRuntimeArtifacts(ariaHome, runtimeRoot) {
138
- const machineDir = resolveMachineDirectory();
139
- const presencePids = collectLivePresencePids(machineDir);
140
- const ownerPids = collectLiveOwnerProjectionPids(runtimeRoot);
141
- const nodeStoreOwnerPids = collectLiveNodeStoreOwnerPids(ariaHome);
142
- const livePids = [...new Set([...presencePids, ...ownerPids, ...nodeStoreOwnerPids])];
143
- if (livePids.length > 0) {
144
- throw new Error(`[runtime-cutover-reset] refuse live runtime mutation while runtime is live (pids: ${livePids.join(", ")}). Stop all ARIA daemons/clients first.`);
145
- }
146
- }
147
- function clearNodeStoreRuntimeState(ariaHome, report) {
148
- const dbPath = nodeStorePathForAriaHome(ariaHome);
149
- if (!fs.existsSync(dbPath)) {
150
- return { runtimeOwnerRecords: 0, runtimeEvents: 0 };
151
- }
152
- const db = openCompatSqliteDatabase({ path: dbPath });
153
- try {
154
- const runtimeOwnerRecords = db.prepare(`DELETE FROM runtime_owner_records`).run().changes;
155
- const runtimeEvents = db.prepare(`DELETE FROM runtime_events`).run().changes;
156
- report.preservedPaths.push(dbPath);
157
- return { runtimeOwnerRecords, runtimeEvents };
158
- }
159
- finally {
160
- db.close();
161
- }
162
- }
163
- function removeMachineArtifacts(ariaHome, report) {
164
- const machineDir = resolveMachineDirectory();
165
- removeIfExists(path.join(machineDir, "mesh-events.db"), report);
166
- removeIfExists(path.join(machineDir, "mesh-events.db-wal"), report);
167
- removeIfExists(path.join(machineDir, "mesh-events.db-shm"), report);
168
- removeIfExists(path.join(machineDir, "event_queue"), report);
169
- removeIfExists(path.join(machineDir, "event_queue.db"), report);
170
- removeIfExists(path.join(machineDir, "event_queue.db-wal"), report);
171
- removeIfExists(path.join(machineDir, "event_queue.db-shm"), report);
172
- removeIfExists(path.join(resolveRuntimeRootDirectory(), "host-supervisor.sock"), report);
173
- const cleanupRoots = [...new Set([machineDir, ariaHome])];
174
- for (const root of cleanupRoots) {
175
- if (!fs.existsSync(root)) {
176
- continue;
177
- }
178
- for (const entry of fs.readdirSync(root)) {
179
- const isDaemonInfo = entry.startsWith("daemon-info-") &&
180
- (entry.endsWith(".json") || entry.endsWith(".json.lock"));
181
- const isPresence = root === machineDir && entry.startsWith("presence-") && entry.endsWith(".json");
182
- if (isDaemonInfo || isPresence) {
183
- removeIfExists(path.join(root, entry), report);
184
- }
185
- }
186
- }
187
- }
188
- function removeAriaHomeArtifacts(ariaHome, runtimeRoot, fullReset, report) {
189
- removeDatabaseFamily(path.join(ariaHome, "network", "state.db"), report);
190
- removeIfExists(path.join(ariaHome, "network", "trusted-cas"), report);
191
- removeIfExists(path.join(ariaHome, "server-session-history.json"), report);
192
- removeIfExists(path.join(ariaHome, "sessions"), report);
193
- removeDatabaseFamily(path.join(ariaHome, "history.db"), report);
194
- for (const arionDir of listArionDirectories(ariaHome)) {
195
- removeDatabaseFamily(path.join(arionDir, "memory.db"), report);
196
- removeDatabaseFamily(path.join(arionDir, "history.db"), report);
197
- removeIfExists(path.join(arionDir, "daemon"), report);
198
- removeIfExists(path.join(arionDir, "logs"), report);
199
- }
200
- removeIfExists(path.join(runtimeRoot, "owners"), report);
201
- removeIfExists(runtimeSocketsDirectory(runtimeRoot), report);
202
- if (fullReset) {
203
- removeDatabaseFamily(nodeStorePathForAriaHome(ariaHome), report);
204
- removeIfExists(nodeStoreLockPathForAriaHome(ariaHome), report);
205
- removeIfExists(path.join(ariaHome, "network", "config.json"), report);
206
- removeIfExists(path.join(ariaHome, "network", "tls"), report);
207
- return { runtimeOwnerRecords: 0, runtimeEvents: 0 };
208
- }
209
- report.preservedPaths.push(path.join(ariaHome, "network", "config.json"));
210
- report.preservedPaths.push(path.join(ariaHome, "network", "tls"));
211
- return clearNodeStoreRuntimeState(ariaHome, report);
212
- }
213
- function writeReport(report) {
214
- fs.mkdirSync(path.dirname(report.reportPath), { recursive: true });
215
- fs.writeFileSync(report.reportPath, `${JSON.stringify(report, null, 2)}\n`, "utf8");
216
- return report;
217
- }
218
- function printHumanReport(report) {
219
- console.log("[runtime-cutover-reset] completed");
220
- console.log(` ariaHome: ${report.ariaHome}`);
221
- console.log(` fullReset: ${report.fullReset ? "yes" : "no"}`);
222
- console.log(` preserveLocalNodeIdentity: ${report.preserveLocalNodeIdentity ? "yes" : "no"}`);
223
- console.log(` deleted: ${report.deletedPaths.length}`);
224
- console.log(` preserved: ${report.preservedPaths.length}`);
225
- console.log(` cleared runtime owner records: ${report.cleared.runtimeOwnerRecords}`);
226
- console.log(` cleared runtime journal events: ${report.cleared.runtimeEvents}`);
227
- console.log(` report: ${report.reportPath}`);
228
- }
229
- export async function runRuntimeCutoverReset(options = {}) {
230
- const ariaHome = canonicalizeAriaHome(options.ariaHome ?? getAriaDir());
231
- const runtimeRoot = resolveRuntimeRootDirectory();
232
- const fullNodeReset = options.fullNodeReset ?? options.fullReset ?? false;
233
- const preserveLocalNodeIdentity = options.preserveLocalNodeIdentity ?? !fullNodeReset;
234
- assertNoLiveRuntimeArtifacts(ariaHome, runtimeRoot);
235
- const report = {
236
- ariaHome,
237
- runtimeRoot,
238
- generatedAt: new Date().toISOString(),
239
- fullReset: fullNodeReset,
240
- fullNodeReset,
241
- preserveLocalNodeIdentity,
242
- reportPath: runtimeCutoverReportPath(ariaHome),
243
- removedPaths: [],
244
- deletedPaths: [],
245
- preservedPaths: [],
246
- skippedPaths: [],
247
- cleared: {
248
- runtimeOwnerRecords: 0,
249
- runtimeEvents: 0,
250
- },
251
- };
252
- removeMachineArtifacts(ariaHome, report);
253
- report.cleared = removeAriaHomeArtifacts(ariaHome, runtimeRoot, fullNodeReset, report);
254
- report.deletedPaths = [...report.removedPaths];
255
- return writeReport(report);
256
- }
257
- export async function runtimeCutoverResetCommand(options = {}) {
258
- const report = await runRuntimeCutoverReset(options);
259
- if (options.json) {
260
- console.log(JSON.stringify(report, null, 2));
261
- return;
262
- }
263
- printHumanReport(report);
264
- }
265
- //# sourceMappingURL=runtime-cutover-reset.js.map
@@ -1,84 +0,0 @@
1
- import { EOL, homedir, platform } from "os";
2
- import { readFileSync, writeFileSync } from "fs";
3
- import { join } from "path";
4
- import { spawnSync } from "node:child_process";
5
- import { loadConfig, saveConfig } from "../config.js";
6
- export function isShiftEnterKeyBindingInstalled() {
7
- return loadConfig().shiftEnterKeyBindingInstalled === true;
8
- }
9
- export function isTerminalSetupSupported() {
10
- const term = (process.env.TERM_PROGRAM ?? "").toLowerCase();
11
- return (platform() === "darwin" && term === "iterm.app") || term === "vscode";
12
- }
13
- function installBindingsForITerm2() {
14
- // Keep implementation shell-free for safety/parity with existing CLI code style.
15
- // iTerm2 reads this defaults key for GlobalKeyMap.
16
- const result = spawnSync("defaults", [
17
- "write",
18
- "com.googlecode.iterm2",
19
- "GlobalKeyMap",
20
- "-dict-add",
21
- "0xd-0x20000-0x24",
22
- `<dict>
23
- <key>Text</key>
24
- <string>\\n</string>
25
- <key>Action</key>
26
- <integer>12</integer>
27
- <key>Version</key>
28
- <integer>1</integer>
29
- <key>Keycode</key>
30
- <integer>13</integer>
31
- <key>Modifiers</key>
32
- <integer>131072</integer>
33
- </dict>`,
34
- ]);
35
- if (result.status !== 0) {
36
- throw new Error("Failed to install iTerm2 Shift+Enter key binding");
37
- }
38
- return `Installed iTerm2 Shift+Enter key binding${EOL}See iTerm2 → Preferences → Keys${EOL}`;
39
- }
40
- function installBindingsForVSCodeTerminal() {
41
- const vscodeKeybindingsPath = join(homedir(), platform() === "win32"
42
- ? join("AppData", "Roaming", "Code", "User")
43
- : platform() === "darwin"
44
- ? join("Library", "Application Support", "Code", "User")
45
- : join(".config", "Code", "User"), "keybindings.json");
46
- let keybindings = [];
47
- try {
48
- const content = readFileSync(vscodeKeybindingsPath, "utf-8").trim();
49
- keybindings = content ? JSON.parse(content) : [];
50
- if (!Array.isArray(keybindings)) {
51
- keybindings = [];
52
- }
53
- }
54
- catch {
55
- // If file doesn't exist or parse fails, start with empty array.
56
- keybindings = [];
57
- }
58
- const existingBinding = keybindings.find((binding) => binding.key === "shift+enter" &&
59
- binding.command === "workbench.action.terminal.sendSequence" &&
60
- binding.when === "terminalFocus");
61
- if (existingBinding) {
62
- return `Found existing VSCode terminal Shift+Enter key binding. Remove it to continue.${EOL}See ${vscodeKeybindingsPath}${EOL}`;
63
- }
64
- keybindings.push({
65
- key: "shift+enter",
66
- command: "workbench.action.terminal.sendSequence",
67
- args: { text: "\\\r\n" },
68
- when: "terminalFocus",
69
- });
70
- writeFileSync(vscodeKeybindingsPath, JSON.stringify(keybindings, null, 2), "utf-8");
71
- return `Installed VSCode terminal Shift+Enter key binding${EOL}See ${vscodeKeybindingsPath}${EOL}`;
72
- }
73
- export function runTerminalSetup() {
74
- if (!isTerminalSetupSupported()) {
75
- throw new Error("terminal-setup is supported only in iTerm2 (macOS) and VSCode terminal");
76
- }
77
- const term = (process.env.TERM_PROGRAM ?? "").toLowerCase();
78
- const result = term === "vscode" ? installBindingsForVSCodeTerminal() : installBindingsForITerm2();
79
- const config = loadConfig();
80
- config.shiftEnterKeyBindingInstalled = true;
81
- saveConfig(config);
82
- return result;
83
- }
84
- //# sourceMappingURL=terminal-setup.js.map