@aria-cli/cli 1.0.50 → 1.0.51

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 +1 -1
  2. package/dist/.tsbuildinfo +1 -0
  3. package/dist/attached-local-control-client.js +826 -0
  4. package/dist/bootstrap-local-control-client.js +2 -0
  5. package/dist/capability-aware-method-proxy.js +42 -0
  6. package/dist/cli-context.js +160 -0
  7. package/dist/commands/arions.js +174 -0
  8. package/dist/commands/auth.js +123 -0
  9. package/dist/commands/daemon.js +245 -0
  10. package/dist/commands/definitions.js +176 -0
  11. package/dist/commands/index.js +74 -0
  12. package/dist/commands/login-handler.js +1108 -0
  13. package/dist/commands/logout-handler.js +92 -0
  14. package/dist/commands/memory-handlers.js +89 -0
  15. package/dist/commands/pairing.js +60 -0
  16. package/dist/commands/runtime-cutover-reset-command.js +12 -0
  17. package/dist/commands/runtime-cutover-reset.js +265 -0
  18. package/dist/commands/terminal-setup.js +84 -0
  19. package/dist/config/aria-config.js +238 -0
  20. package/dist/config/index.js +3 -0
  21. package/dist/config/loader.js +97 -0
  22. package/dist/config.js +142 -0
  23. package/dist/daemon-info.js +10 -0
  24. package/dist/ensure-daemon.js +128 -0
  25. package/dist/entrypoints/command-mode.js +5 -0
  26. package/dist/entrypoints/daemon.js +50 -0
  27. package/dist/entrypoints/headless-stdio.js +25 -0
  28. package/dist/entrypoints/interactive.js +80 -0
  29. package/dist/event-loop-watchdog.js +73 -0
  30. package/dist/headless/auth-orchestrator.js +508 -0
  31. package/dist/headless/auth-service.js +43 -0
  32. package/dist/headless/bootstrap-fast-path.js +112 -0
  33. package/dist/headless/call-command.js +143 -0
  34. package/dist/headless/daemon-service.js +318 -0
  35. package/dist/headless/hook-actions.js +235 -0
  36. package/dist/headless/hook-service.js +42 -0
  37. package/dist/headless/kernel-services.js +216 -0
  38. package/dist/headless/kernel.js +785 -0
  39. package/dist/headless/operations/arion.js +119 -0
  40. package/dist/headless/operations/auth.js +45 -0
  41. package/dist/headless/operations/client.js +31 -0
  42. package/dist/headless/operations/config.js +69 -0
  43. package/dist/headless/operations/daemon.js +47 -0
  44. package/dist/headless/operations/hook.js +56 -0
  45. package/dist/headless/operations/index.js +11 -0
  46. package/dist/headless/operations/memory.js +102 -0
  47. package/dist/headless/operations/message.js +279 -0
  48. package/dist/headless/operations/model.js +100 -0
  49. package/dist/headless/operations/peer.js +56 -0
  50. package/dist/headless/operations/run.js +24 -0
  51. package/dist/headless/operations/session.js +90 -0
  52. package/dist/headless/operations/system.js +19 -0
  53. package/dist/headless/operations/utils.js +35 -0
  54. package/dist/headless/run-orchestrator.js +703 -0
  55. package/dist/headless/stdio-server.js +439 -0
  56. package/dist/history/SessionHistory.js +8 -0
  57. package/dist/history/SessionHistoryClient.js +186 -0
  58. package/dist/history/conversation-message.js +112 -0
  59. package/dist/history/index.js +8 -0
  60. package/dist/history/jsonl-replay.js +154 -0
  61. package/dist/history/repair-tool-pairing.js +84 -0
  62. package/dist/history/stall-phase-bridge.js +11 -0
  63. package/dist/history/turn-accumulator.js +427 -0
  64. package/dist/index.js +7 -0
  65. package/dist/ink-repl.js +4183 -0
  66. package/dist/local-control-bootstrap.js +26 -0
  67. package/dist/local-control-client.js +2 -0
  68. package/dist/local-control-error-reporting.js +34 -0
  69. package/dist/local-control-http-client.js +362 -0
  70. package/dist/local-control-lazy-wrapper.js +363 -0
  71. package/dist/local-control-manager.js +146 -0
  72. package/dist/main.js +38 -0
  73. package/dist/network-security.js +62 -0
  74. package/dist/networking-server.js +38 -0
  75. package/dist/peer-identity.js +23 -0
  76. package/dist/polling-subscription.js +34 -0
  77. package/dist/relaunch.js +588 -0
  78. package/dist/release-notes.js +35 -0
  79. package/dist/repl-cleanup.js +47 -0
  80. package/dist/runtime/configure-bun-sqlite.js +3 -0
  81. package/dist/runtime/crash-handlers.js +111 -0
  82. package/dist/runtime/interactive-invocation.js +39 -0
  83. package/dist/runtime/internal-mode.js +14 -0
  84. package/dist/runtime/launch-spec.js +64 -0
  85. package/dist/runtime/owner-lease.js +44 -0
  86. package/dist/runtime/public-mode.js +20 -0
  87. package/dist/runtime/run-internal-mode.js +18 -0
  88. package/dist/runtime/runtime-kind.js +32 -0
  89. package/dist/runtime/spawn-aria.js +38 -0
  90. package/dist/selectable-client.js +2 -0
  91. package/dist/selectable-peer.js +2 -0
  92. package/dist/session.js +203 -0
  93. package/dist/slash-commands.js +80 -0
  94. package/dist/sounds.js +210 -0
  95. package/dist/ui/App.js +526 -0
  96. package/dist/ui/components/AnthropicMethodPicker.js +6 -0
  97. package/dist/ui/components/ArionPrompt.js +15 -0
  98. package/dist/ui/components/AutocompleteDropdown.js +23 -0
  99. package/dist/ui/components/AutonomySelector.js +55 -0
  100. package/dist/ui/components/Banner.js +98 -0
  101. package/dist/ui/components/ConversationHistory.js +175 -0
  102. package/dist/ui/components/CopilotDeviceLoginFlow.js +88 -0
  103. package/dist/ui/components/CopilotSourcePicker.js +50 -0
  104. package/dist/ui/components/Cost.js +10 -0
  105. package/dist/ui/components/CustomSelect/option-map.js +30 -0
  106. package/dist/ui/components/CustomSelect/select-option.js +13 -0
  107. package/dist/ui/components/CustomSelect/select.js +42 -0
  108. package/dist/ui/components/CustomSelect/use-select-state.js +179 -0
  109. package/dist/ui/components/CustomSelect/use-select.js +15 -0
  110. package/dist/ui/components/ErrorDisplay.js +35 -0
  111. package/dist/ui/components/FallbackToolUseRejectedMessage.js +7 -0
  112. package/dist/ui/components/FileEditToolUpdatedMessage.js +57 -0
  113. package/dist/ui/components/HandoffMarker.js +18 -0
  114. package/dist/ui/components/HighlightedCode.js +21 -0
  115. package/dist/ui/components/InputArea.js +187 -0
  116. package/dist/ui/components/Message.js +25 -0
  117. package/dist/ui/components/OAuthLoginFlow.js +113 -0
  118. package/dist/ui/components/OutputTruncation.js +35 -0
  119. package/dist/ui/components/PermissionPrompt.js +79 -0
  120. package/dist/ui/components/PipelineTimingPanel.js +15 -0
  121. package/dist/ui/components/ProviderMethodPicker.js +61 -0
  122. package/dist/ui/components/ProviderPicker.js +63 -0
  123. package/dist/ui/components/RenderItemView.js +71 -0
  124. package/dist/ui/components/Spinner.js +46 -0
  125. package/dist/ui/components/StatusBar.js +95 -0
  126. package/dist/ui/components/StreamingIndicator.js +55 -0
  127. package/dist/ui/components/StructuredDiff.js +168 -0
  128. package/dist/ui/components/TextInputOverlay.js +43 -0
  129. package/dist/ui/components/ThinkingBlock.js +82 -0
  130. package/dist/ui/components/ToolCost.js +17 -0
  131. package/dist/ui/components/ToolExecution.js +61 -0
  132. package/dist/ui/components/ToolHeader.js +51 -0
  133. package/dist/ui/components/ToolRenderLayoutContext.js +14 -0
  134. package/dist/ui/components/ToolResultWrapper.js +6 -0
  135. package/dist/ui/components/ToolUseLoader.js +35 -0
  136. package/dist/ui/components/TraceWaterfall.js +91 -0
  137. package/dist/ui/components/index.js +33 -0
  138. package/dist/ui/components/messages/AssistantTextMessage.js +25 -0
  139. package/dist/ui/components/messages/UserImageMessage.js +12 -0
  140. package/dist/ui/components/messages/UserTextMessage.js +12 -0
  141. package/dist/ui/components/overlays/ArionSelector.js +68 -0
  142. package/dist/ui/components/overlays/ClientSelector.js +62 -0
  143. package/dist/ui/components/overlays/CommandPalette.js +67 -0
  144. package/dist/ui/components/overlays/DaemonControl.js +87 -0
  145. package/dist/ui/components/overlays/InviteShareOverlay.js +15 -0
  146. package/dist/ui/components/overlays/JoinInviteOverlay.js +32 -0
  147. package/dist/ui/components/overlays/MemoryBrowser.js +100 -0
  148. package/dist/ui/components/overlays/MessageSelector.js +123 -0
  149. package/dist/ui/components/overlays/ModelSelector.js +211 -0
  150. package/dist/ui/components/overlays/PairRequestOverlay.js +42 -0
  151. package/dist/ui/components/overlays/PeerSelector.js +84 -0
  152. package/dist/ui/components/overlays/SessionSelector.js +102 -0
  153. package/dist/ui/components/overlays/SoundSelector.js +86 -0
  154. package/dist/ui/components/overlays/ThemeSelector.js +139 -0
  155. package/dist/ui/components/overlays/index.js +15 -0
  156. package/dist/ui/components/permissions/BashPermissionRequest/BashPermissionRequest.js +53 -0
  157. package/dist/ui/components/permissions/FallbackPermissionRequest.js +56 -0
  158. package/dist/ui/components/permissions/FileEditPermissionRequest/FileEditPermissionRequest.js +76 -0
  159. package/dist/ui/components/permissions/FileEditPermissionRequest/FileEditToolDiff.js +18 -0
  160. package/dist/ui/components/permissions/FileWritePermissionRequest/FileWritePermissionRequest.js +64 -0
  161. package/dist/ui/components/permissions/FileWritePermissionRequest/FileWriteToolDiff.js +26 -0
  162. package/dist/ui/components/permissions/FilesystemPermissionRequest/FilesystemPermissionRequest.js +141 -0
  163. package/dist/ui/components/permissions/PermissionRequest.js +70 -0
  164. package/dist/ui/components/permissions/PermissionRequestTitle.js +41 -0
  165. package/dist/ui/components/permissions/hooks.js +10 -0
  166. package/dist/ui/components/permissions/toolUseOptions.js +68 -0
  167. package/dist/ui/components/permissions/utils.js +10 -0
  168. package/dist/ui/components/text-input/Cursor.js +326 -0
  169. package/dist/ui/components/text-input/TextInput.js +231 -0
  170. package/dist/ui/components/text-input/imagePaste.js +28 -0
  171. package/dist/ui/components/text-input/index.js +6 -0
  172. package/dist/ui/components/text-input/useDoublePress.js +30 -0
  173. package/dist/ui/components/text-input/useTextInput.js +245 -0
  174. package/dist/ui/components/tool-types.js +9 -0
  175. package/dist/ui/constants/figures.js +4 -0
  176. package/dist/ui/constants/index.js +3 -0
  177. package/dist/ui/display-mode.js +93 -0
  178. package/dist/ui/display-policy.js +19 -0
  179. package/dist/ui/hooks/index.js +6 -0
  180. package/dist/ui/hooks/useCommandAutocomplete.js +93 -0
  181. package/dist/ui/hooks/useDoublePress.js +37 -0
  182. package/dist/ui/hooks/useIndicatorState.js +55 -0
  183. package/dist/ui/hooks/useInterval.js +23 -0
  184. package/dist/ui/hooks/useKeyboardShortcuts.js +127 -0
  185. package/dist/ui/hooks/useTerminalSize.js +55 -0
  186. package/dist/ui/hooks/useUnifiedMessages.js +117 -0
  187. package/dist/ui/indicator-state.js +44 -0
  188. package/dist/ui/markdown/highlight.js +44 -0
  189. package/dist/ui/markdown/index.js +1460 -0
  190. package/dist/ui/markdown/tokenizer.js +24 -0
  191. package/dist/ui/render-item.js +5 -0
  192. package/dist/ui/screens/REPL.js +119 -0
  193. package/dist/ui/screens/approval-lifecycle.js +38 -0
  194. package/dist/ui/status-line.js +72 -0
  195. package/dist/ui/theme/index.js +51 -0
  196. package/dist/ui/theme/themes/claude-dark-daltonized.js +51 -0
  197. package/dist/ui/theme/themes/claude-dark.js +50 -0
  198. package/dist/ui/theme/themes/claude-light-daltonized.js +51 -0
  199. package/dist/ui/theme/themes/claude-light.js +50 -0
  200. package/dist/ui/theme/themes/dark-accessible.js +18 -0
  201. package/dist/ui/theme/themes/dark.js +49 -0
  202. package/dist/ui/theme/themes/light-accessible.js +18 -0
  203. package/dist/ui/theme/themes/light.js +49 -0
  204. package/dist/ui/theme/types.js +3 -0
  205. package/dist/ui/theme.js +142 -0
  206. package/dist/ui/to-render-items.js +145 -0
  207. package/dist/ui/tools/AgentTool/index.js +30 -0
  208. package/dist/ui/tools/ArchitectTool/index.js +31 -0
  209. package/dist/ui/tools/AskUserTool/index.js +46 -0
  210. package/dist/ui/tools/BashTool/BashToolResultMessage.js +11 -0
  211. package/dist/ui/tools/BashTool/OutputLine.js +21 -0
  212. package/dist/ui/tools/BashTool/index.js +91 -0
  213. package/dist/ui/tools/BrowseTool/index.js +43 -0
  214. package/dist/ui/tools/BrowserTool/index.js +47 -0
  215. package/dist/ui/tools/CbmTool/index.js +188 -0
  216. package/dist/ui/tools/CheckDelegationTool/index.js +46 -0
  217. package/dist/ui/tools/CheckMessagesTool/index.js +85 -0
  218. package/dist/ui/tools/CreateQuipTool/index.js +30 -0
  219. package/dist/ui/tools/CreateSkillTool/index.js +22 -0
  220. package/dist/ui/tools/CreateToolTool/index.js +31 -0
  221. package/dist/ui/tools/DelegateRemoteTool/index.js +42 -0
  222. package/dist/ui/tools/DeployTool/index.js +47 -0
  223. package/dist/ui/tools/FffTool/index.js +103 -0
  224. package/dist/ui/tools/FileEditTool/index.js +67 -0
  225. package/dist/ui/tools/FileReadTool/index.js +68 -0
  226. package/dist/ui/tools/FileWriteTool/index.js +61 -0
  227. package/dist/ui/tools/ForkTool/index.js +47 -0
  228. package/dist/ui/tools/FrgTool/index.js +96 -0
  229. package/dist/ui/tools/GetThreadTool/index.js +39 -0
  230. package/dist/ui/tools/GlobTool/index.js +50 -0
  231. package/dist/ui/tools/GrepTool/index.js +84 -0
  232. package/dist/ui/tools/HatchArionTool/index.js +36 -0
  233. package/dist/ui/tools/LearnSkillTool/index.js +22 -0
  234. package/dist/ui/tools/LearnTool/index.js +43 -0
  235. package/dist/ui/tools/LearnToolTool/index.js +22 -0
  236. package/dist/ui/tools/ListClientsTool/index.js +39 -0
  237. package/dist/ui/tools/LspTool/index.js +261 -0
  238. package/dist/ui/tools/MCPTool/index.js +33 -0
  239. package/dist/ui/tools/ManageNetworkTool/index.js +53 -0
  240. package/dist/ui/tools/MemoryReadTool/index.js +64 -0
  241. package/dist/ui/tools/MemoryWriteTool/index.js +20 -0
  242. package/dist/ui/tools/NotebookEditTool/index.js +33 -0
  243. package/dist/ui/tools/NotebookReadTool/index.js +25 -0
  244. package/dist/ui/tools/OutlookReadTool/index.js +66 -0
  245. package/dist/ui/tools/OutlookReplyTool/index.js +49 -0
  246. package/dist/ui/tools/OutlookSendTool/index.js +49 -0
  247. package/dist/ui/tools/PauseDelegationTool/index.js +35 -0
  248. package/dist/ui/tools/ProbeTool/index.js +121 -0
  249. package/dist/ui/tools/ProcessTool/index.js +66 -0
  250. package/dist/ui/tools/QuestListTool/index.js +46 -0
  251. package/dist/ui/tools/QuestReportTool/index.js +49 -0
  252. package/dist/ui/tools/QuestUpdateTool/index.js +87 -0
  253. package/dist/ui/tools/QuipCommentTool/index.js +69 -0
  254. package/dist/ui/tools/QuipReadTool/index.js +71 -0
  255. package/dist/ui/tools/RestArionTool/index.js +32 -0
  256. package/dist/ui/tools/RestartTool/index.js +35 -0
  257. package/dist/ui/tools/ResumeDelegationTool/index.js +35 -0
  258. package/dist/ui/tools/RetireArionTool/index.js +32 -0
  259. package/dist/ui/tools/RgTool/index.js +73 -0
  260. package/dist/ui/tools/SearchKnowledgeTool/index.js +43 -0
  261. package/dist/ui/tools/SearchMessagesTool/index.js +43 -0
  262. package/dist/ui/tools/SelfDiagnoseTool/index.js +61 -0
  263. package/dist/ui/tools/SendMessageTool/index.js +45 -0
  264. package/dist/ui/tools/SerenaTool/index.js +124 -0
  265. package/dist/ui/tools/SessionHistoryTool/index.js +52 -0
  266. package/dist/ui/tools/SgTool/index.js +80 -0
  267. package/dist/ui/tools/SlackReactTool/index.js +41 -0
  268. package/dist/ui/tools/SlackReadTool/index.js +48 -0
  269. package/dist/ui/tools/SlackSendTool/index.js +45 -0
  270. package/dist/ui/tools/SpawnWorkerTool/index.js +33 -0
  271. package/dist/ui/tools/StickerRequestTool/index.js +19 -0
  272. package/dist/ui/tools/ThinkTool/index.js +17 -0
  273. package/dist/ui/tools/UgTool/index.js +108 -0
  274. package/dist/ui/tools/UseSkillTool/index.js +22 -0
  275. package/dist/ui/tools/WakeArionTool/index.js +32 -0
  276. package/dist/ui/tools/WebFetchTool/index.js +56 -0
  277. package/dist/ui/tools/WebSearchTool/index.js +44 -0
  278. package/dist/ui/tools/lsTool/index.js +58 -0
  279. package/dist/ui/tools/registry.js +197 -0
  280. package/dist/ui/tools/tool-renderer.js +11 -0
  281. package/dist/ui/tools/truncation.js +35 -0
  282. package/dist/ui/types/anthropic.js +4 -0
  283. package/dist/ui/types/index.js +2 -0
  284. package/dist/ui/types/message.js +3 -0
  285. package/dist/ui/types/tool.js +4 -0
  286. package/dist/ui/utils/array.js +4 -0
  287. package/dist/ui/utils/cursor.js +131 -0
  288. package/dist/ui/utils/diff.js +120 -0
  289. package/dist/ui/utils/format.js +42 -0
  290. package/dist/ui/utils/fuzzy.js +59 -0
  291. package/dist/ui/utils/index.js +11 -0
  292. package/dist/ui/utils/keys.js +8 -0
  293. package/dist/ui/utils/patch.js +17 -0
  294. package/dist/ui/utils/risk.js +114 -0
  295. package/dist/ui/utils/terminal-image.js +70 -0
  296. package/dist/ui/utils/validation.js +48 -0
  297. package/dist/ui/verb-pairs.js +248 -0
  298. package/dist/ui.js +131 -0
  299. package/package.json +73 -14
  300. package/src/entrypoints/command-mode.ts +5 -0
  301. package/src/entrypoints/daemon.ts +54 -0
  302. package/src/entrypoints/headless-stdio.ts +27 -0
  303. package/src/entrypoints/interactive.ts +112 -0
  304. package/src/main.ts +44 -0
  305. package/src/runtime/configure-bun-sqlite.ts +3 -0
  306. package/src/runtime/crash-handlers.ts +128 -0
  307. package/src/runtime/interactive-invocation.test.ts +42 -0
  308. package/src/runtime/interactive-invocation.ts +51 -0
  309. package/src/runtime/internal-mode.test.ts +19 -0
  310. package/src/runtime/internal-mode.ts +24 -0
  311. package/src/runtime/launch-spec.test.ts +26 -0
  312. package/src/runtime/launch-spec.ts +84 -0
  313. package/src/runtime/owner-lease.ts +52 -0
  314. package/src/runtime/public-mode.test.ts +18 -0
  315. package/src/runtime/public-mode.ts +19 -0
  316. package/src/runtime/run-internal-mode.ts +19 -0
  317. package/src/runtime/runtime-kind.test.ts +23 -0
  318. package/src/runtime/runtime-kind.ts +41 -0
  319. package/src/runtime/spawn-aria.ts +62 -0
@@ -0,0 +1,245 @@
1
+ /**
2
+ * Daemon command - monitor-style projection over the shared daemon service.
3
+ *
4
+ * The CLI wrapper only parses options, starts/stops the daemon via the
5
+ * canonical `daemon.*` service, prints human status lines, and stays resident
6
+ * until interrupted. It must not own runtime bootstrap semantics directly.
7
+ */
8
+ import { createCliContext } from "../cli-context.js";
9
+ import { loadConfig } from "../config.js";
10
+ import { createDaemonService } from "../headless/daemon-service.js";
11
+ function formatStorageDiagnostics(storage) {
12
+ if (!storage || typeof storage !== "object") {
13
+ return [];
14
+ }
15
+ const lines = [];
16
+ const storageRecord = storage;
17
+ for (const [label, raw] of Object.entries(storageRecord)) {
18
+ if (!raw || typeof raw !== "object")
19
+ continue;
20
+ const value = raw;
21
+ const parts = [
22
+ `backend=${String(value.backend ?? "unknown")}`,
23
+ `extensions=${String(value.loadableExtensions ?? false)}`,
24
+ `customSQLite=${String(value.customSQLiteConfigured ?? false)}`,
25
+ ];
26
+ if (typeof value.sqliteVec === "boolean") {
27
+ parts.push(`sqliteVec=${String(value.sqliteVec)}`);
28
+ }
29
+ if (typeof value.vectorSearchMode === "string") {
30
+ parts.push(`vectorMode=${value.vectorSearchMode}`);
31
+ }
32
+ if (typeof value.customSQLitePath === "string") {
33
+ parts.push(`sqlitePath=${value.customSQLitePath}`);
34
+ }
35
+ lines.push(`[daemon] storage.${label} ${parts.join(" · ")}`);
36
+ }
37
+ return lines;
38
+ }
39
+ function parsePositiveInt(raw, field, fallback) {
40
+ if (raw === undefined || raw.trim() === "")
41
+ return fallback;
42
+ const value = Number.parseInt(raw, 10);
43
+ if (!Number.isFinite(value) || value <= 0) {
44
+ throw new Error(`${field} must be a positive integer`);
45
+ }
46
+ return value;
47
+ }
48
+ function parseCsv(raw) {
49
+ if (!raw)
50
+ return undefined;
51
+ const values = raw
52
+ .split(",")
53
+ .map((entry) => entry.trim())
54
+ .filter((entry) => entry.length > 0);
55
+ return values.length > 0 ? values : undefined;
56
+ }
57
+ function parsePort(raw, fallback) {
58
+ if (raw === undefined || raw.trim() === "")
59
+ return fallback;
60
+ const value = Number.parseInt(raw, 10);
61
+ if (!Number.isFinite(value) || value < 0) {
62
+ throw new Error("port must be a non-negative integer (0 = OS-assigned)");
63
+ }
64
+ return value;
65
+ }
66
+ function parseDaemonOptions(options) {
67
+ return {
68
+ arion: options.arion,
69
+ port: parsePort(options.port, 0),
70
+ intervalMs: parsePositiveInt(options.intervalMs, "intervalMs", 60_000),
71
+ allowedToolCategories: parseCsv(options.allowedToolCategories),
72
+ allowedShellCommands: parseCsv(options.allowedShellCommands),
73
+ maxWriteOpsPerMinute: options.maxWriteOpsPerMinute !== undefined
74
+ ? parsePositiveInt(options.maxWriteOpsPerMinute, "maxWriteOpsPerMinute", 30)
75
+ : undefined,
76
+ maxGitPushesPerHour: options.maxGitPushesPerHour !== undefined
77
+ ? parsePositiveInt(options.maxGitPushesPerHour, "maxGitPushesPerHour", 5)
78
+ : undefined,
79
+ foreground: options.foreground === true,
80
+ };
81
+ }
82
+ function waitForAbort(signal) {
83
+ if (signal.aborted)
84
+ return Promise.resolve();
85
+ return new Promise((resolve) => {
86
+ signal.addEventListener("abort", () => resolve(), { once: true });
87
+ });
88
+ }
89
+ function toDaemonInput(options) {
90
+ return {
91
+ ...(options.arion ? { arion: options.arion } : {}),
92
+ ...(options.port >= 0 ? { port: options.port } : {}),
93
+ intervalMs: options.intervalMs,
94
+ ...(options.allowedToolCategories
95
+ ? { allowedToolCategories: options.allowedToolCategories }
96
+ : {}),
97
+ ...(options.allowedShellCommands ? { allowedShellCommands: options.allowedShellCommands } : {}),
98
+ ...(typeof options.maxWriteOpsPerMinute === "number"
99
+ ? { maxWriteOpsPerMinute: options.maxWriteOpsPerMinute }
100
+ : {}),
101
+ ...(typeof options.maxGitPushesPerHour === "number"
102
+ ? { maxGitPushesPerHour: options.maxGitPushesPerHour }
103
+ : {}),
104
+ };
105
+ }
106
+ export function buildSafetyPolicy(options) {
107
+ const policy = {};
108
+ if (options.allowedToolCategories) {
109
+ policy.allowedToolCategories = options.allowedToolCategories;
110
+ }
111
+ if (options.allowedShellCommands) {
112
+ policy.allowedShellCommands = options.allowedShellCommands;
113
+ }
114
+ if (typeof options.maxWriteOpsPerMinute === "number") {
115
+ policy.maxWriteOpsPerMinute = options.maxWriteOpsPerMinute;
116
+ }
117
+ if (typeof options.maxGitPushesPerHour === "number") {
118
+ policy.maxGitPushesPerHour = options.maxGitPushesPerHour;
119
+ }
120
+ return policy;
121
+ }
122
+ export async function runDaemonFromCli(options = {}) {
123
+ const parsed = parseDaemonOptions(options);
124
+ await runDaemon(parsed);
125
+ }
126
+ export async function stopDaemonFromCli() {
127
+ const { resolveRuntimeRootDirectory, findRuntimeOwnerRecordByAriaHome, removeRuntimeOwnerRecord, } = await import("@aria-cli/server");
128
+ const { getAriaDir } = await import("../config.js");
129
+ const ariaHome = getAriaDir();
130
+ const runtimeRoot = resolveRuntimeRootDirectory();
131
+ const owner = findRuntimeOwnerRecordByAriaHome(runtimeRoot, ariaHome);
132
+ if (!owner) {
133
+ console.log("[daemon] no running daemon found");
134
+ return;
135
+ }
136
+ try {
137
+ process.kill(owner.runtimePid, "SIGINT");
138
+ console.log(`[daemon] sent SIGINT to pid ${owner.runtimePid}`);
139
+ // Wait for process to exit
140
+ const deadline = Date.now() + 5_000;
141
+ while (Date.now() < deadline) {
142
+ try {
143
+ process.kill(owner.runtimePid, 0);
144
+ await new Promise((r) => setTimeout(r, 200));
145
+ }
146
+ catch {
147
+ break; // Process exited
148
+ }
149
+ }
150
+ // Force kill if still alive
151
+ try {
152
+ process.kill(owner.runtimePid, 0);
153
+ process.kill(owner.runtimePid, "SIGKILL");
154
+ console.log(`[daemon] force-killed pid ${owner.runtimePid}`);
155
+ }
156
+ catch {
157
+ // Already dead — good
158
+ }
159
+ }
160
+ catch {
161
+ // PID doesn't exist — stale record
162
+ }
163
+ removeRuntimeOwnerRecord(runtimeRoot, owner.nodeId);
164
+ console.log("[daemon] stopped");
165
+ }
166
+ export async function restartDaemonFromCli(options = {}) {
167
+ await stopDaemonFromCli();
168
+ await new Promise((r) => setTimeout(r, 500));
169
+ const { ensureDaemon } = await import("../ensure-daemon.js");
170
+ const cliContext = await createCliContext();
171
+ const conn = await ensureDaemon(cliContext);
172
+ const peers = await conn.control.listPeers();
173
+ console.log(`[daemon] restarted (${peers.length} peers connected)`);
174
+ await cliContext.pool?.closeAll?.();
175
+ }
176
+ async function runDaemon(options) {
177
+ const config = loadConfig();
178
+ const arionName = options.arion?.trim() || config.activeArion?.trim() || "ARIA";
179
+ const cliContext = await createCliContext({ startupMode: "daemon" });
180
+ const daemonService = createDaemonService({
181
+ cli: cliContext,
182
+ cwd: process.cwd(),
183
+ arionName,
184
+ });
185
+ try {
186
+ const status = await daemonService.start(toDaemonInput(options));
187
+ console.log(`[daemon] runtime node ${String(status.nodeId ?? "unknown")}`);
188
+ console.log(`[daemon] runtime ${String(status.runtimeId ?? "unknown")} listening on port ${String(status.port ?? "unknown")}`);
189
+ console.log(`[daemon] running arion "${arionName}" (interval ${options.intervalMs}ms)`);
190
+ for (const line of formatStorageDiagnostics(status.storage)) {
191
+ console.log(line);
192
+ }
193
+ }
194
+ catch (err) {
195
+ console.error(`[daemon] Runtime startup failed: ${err instanceof Error ? err.message : String(err)}`);
196
+ process.exitCode = 1;
197
+ await cliContext.pool.closeAll().catch(() => { });
198
+ return;
199
+ }
200
+ // ── Default mode: print status and exit ──────────────────────────
201
+ // The detached daemon child is self-sufficient. The CLI wrapper does
202
+ // not need to stay resident. Use --foreground to keep a monitor alive.
203
+ if (!options.foreground) {
204
+ console.log("[daemon] started (use --foreground to keep this process as a monitor)");
205
+ await cliContext.pool.closeAll().catch(() => { });
206
+ return;
207
+ }
208
+ // ── Foreground monitor mode ──────────────────────────────────────
209
+ // Stay resident and poll status. Ctrl-C stops both this monitor and
210
+ // the daemon (via shouldStopOnShutdown).
211
+ console.log("[daemon] foreground monitor active (Ctrl-C to stop daemon)");
212
+ const controller = new AbortController();
213
+ const onSigint = () => controller.abort();
214
+ const onSigterm = () => controller.abort();
215
+ const onSighup = () => {
216
+ // Attached-client terminal hangups must not stop the runtime by themselves.
217
+ };
218
+ process.on("SIGINT", onSigint);
219
+ process.on("SIGTERM", onSigterm);
220
+ process.on("SIGHUP", onSighup);
221
+ const statusPoll = setInterval(() => {
222
+ void daemonService.status({}).catch(() => { });
223
+ }, Math.min(Math.max(options.intervalMs, 1_000), 5_000));
224
+ try {
225
+ await waitForAbort(controller.signal);
226
+ }
227
+ finally {
228
+ clearInterval(statusPoll);
229
+ try {
230
+ if (controller.signal.aborted && daemonService.shouldStopOnShutdown?.()) {
231
+ await daemonService.stop?.(toDaemonInput(options));
232
+ }
233
+ }
234
+ catch {
235
+ // Stop is best-effort during shutdown.
236
+ }
237
+ await daemonService.releaseAll?.();
238
+ await cliContext.pool.closeAll().catch(() => { });
239
+ process.removeListener("SIGINT", onSigint);
240
+ process.removeListener("SIGTERM", onSigterm);
241
+ process.removeListener("SIGHUP", onSighup);
242
+ console.log("[daemon] stopped");
243
+ }
244
+ }
245
+ //# sourceMappingURL=daemon.js.map
@@ -0,0 +1,176 @@
1
+ /**
2
+ * Command definitions for the CLI
3
+ */
4
+ export const COMMANDS = [
5
+ // Arion commands
6
+ {
7
+ name: "become",
8
+ description: "Switch to another arion",
9
+ usage: "/become <name>",
10
+ args: ["<name>"],
11
+ requiresArgs: true,
12
+ },
13
+ { name: "arions", description: "List all arions", args: [] },
14
+ {
15
+ name: "hatch",
16
+ description: "Create a new arion",
17
+ usage: "/hatch <name> [description]",
18
+ args: ["<name>", "[description]"],
19
+ requiresArgs: true,
20
+ },
21
+ {
22
+ name: "rest",
23
+ description: "Put an arion to rest",
24
+ usage: "/rest <name>",
25
+ args: ["<name>"],
26
+ requiresArgs: true,
27
+ },
28
+ {
29
+ name: "wake",
30
+ description: "Wake a resting arion",
31
+ usage: "/wake <name>",
32
+ args: ["<name>"],
33
+ requiresArgs: true,
34
+ },
35
+ // Model commands
36
+ {
37
+ name: "model",
38
+ description: "Change or view current AI model",
39
+ usage: "/model [name|list|refresh] [--provider <name>] [--use-env]",
40
+ args: ["[name|list|refresh]", "[--provider <name>]", "[--use-env]"],
41
+ },
42
+ // Safety commands
43
+ {
44
+ name: "autonomy",
45
+ description: "Change permission approval policy",
46
+ usage: "/autonomy [level]",
47
+ args: ["[level]"],
48
+ },
49
+ // Sound commands
50
+ {
51
+ name: "sound",
52
+ description: "Open sound preferences or toggle notifications",
53
+ usage: "/sound [on|off]",
54
+ args: ["[on|off]"],
55
+ },
56
+ // Memory commands
57
+ {
58
+ name: "remember",
59
+ description: "Store a memory",
60
+ usage: "/remember <text>",
61
+ args: ["<text>"],
62
+ requiresArgs: true,
63
+ },
64
+ {
65
+ name: "recall",
66
+ description: "Search memories",
67
+ usage: "/recall <query>",
68
+ args: ["<query>"],
69
+ requiresArgs: true,
70
+ },
71
+ {
72
+ name: "recall_knowledge",
73
+ description: "Search learned tools (skills, procedures, techniques)",
74
+ usage: "/recall_knowledge <topic>",
75
+ args: ["<topic>"],
76
+ requiresArgs: true,
77
+ },
78
+ {
79
+ name: "send",
80
+ description: "Send a peer or same-home client message through the runtime transport",
81
+ usage: "/send <peer-name|node-id|client-id> <message>",
82
+ args: ["<peer-name|node-id|client-id>", "<message>"],
83
+ requiresArgs: true,
84
+ },
85
+ {
86
+ name: "forget",
87
+ description: "Delete a memory",
88
+ usage: "/forget <id>",
89
+ args: ["<id>"],
90
+ requiresArgs: true,
91
+ },
92
+ { name: "memories", description: "Browse all memories", args: [] },
93
+ // Session commands
94
+ {
95
+ name: "resume",
96
+ description: "Resume a previous session",
97
+ args: ["[session-id]"],
98
+ },
99
+ {
100
+ name: "fork",
101
+ description: "Fork the current session into a new branch",
102
+ usage: "/fork [session-id] [message-count] [--stay]",
103
+ args: ["[session-id]", "[message-count]", "[--stay]"],
104
+ },
105
+ { name: "clear", description: "Clear the screen", args: [] },
106
+ // Auth commands
107
+ {
108
+ name: "login",
109
+ description: "Authenticate with provider (bedrock, anthropic, openai, google, copilot)",
110
+ usage: "/login [provider] [api-key|--profile <label>|--source <gh|device>]",
111
+ args: ["[provider]", "[api-key|flags]"],
112
+ },
113
+ {
114
+ name: "logout",
115
+ description: "Disconnect a provider or clear all credentials",
116
+ usage: "/logout [provider|all]",
117
+ args: ["[provider|all]"],
118
+ },
119
+ {
120
+ name: "auth",
121
+ description: "Auth utilities such as importing env credentials into session scope",
122
+ usage: "/auth import-env [provider ...] | /auth clear-session | /auth status-session",
123
+ args: ["import-env|clear-session|status-session", "[provider ...]"],
124
+ },
125
+ // System commands
126
+ { name: "help", description: "Show available commands", args: [] },
127
+ {
128
+ name: "daemon",
129
+ description: "Open daemon control panel or run start/stop/restart",
130
+ usage: "/daemon [start|stop|restart]",
131
+ args: ["[start|stop|restart]"],
132
+ },
133
+ {
134
+ name: "terminal-setup",
135
+ description: "Install Shift+Enter newline key binding for supported terminals",
136
+ usage: "/terminal-setup",
137
+ args: [],
138
+ },
139
+ // Display commands
140
+ {
141
+ name: "theme",
142
+ description: "View or change the color theme",
143
+ usage: "/theme [name]",
144
+ args: ["[name]"],
145
+ },
146
+ // Peer discovery commands
147
+ {
148
+ name: "invite",
149
+ description: "Create an internet invite token",
150
+ usage: "/invite [label]",
151
+ args: ["[label]"],
152
+ },
153
+ {
154
+ name: "join",
155
+ description: "Accept an internet invite token",
156
+ usage: "/join [token]",
157
+ args: ["[token]"],
158
+ },
159
+ { name: "peers", description: "Show nearby peers and connect", args: [] },
160
+ { name: "clients", description: "Show same-home attached clients", args: [] },
161
+ { name: "exit", description: "Exit ARIA", args: [] },
162
+ ];
163
+ /**
164
+ * Get a command by name
165
+ */
166
+ export function getCommand(name) {
167
+ return COMMANDS.find((c) => c.name === name);
168
+ }
169
+ /**
170
+ * Filter commands by prefix
171
+ */
172
+ export function filterCommands(prefix) {
173
+ const lower = prefix.toLowerCase();
174
+ return COMMANDS.filter((c) => c.name.toLowerCase().startsWith(lower));
175
+ }
176
+ //# sourceMappingURL=definitions.js.map
@@ -0,0 +1,74 @@
1
+ /**
2
+ * ARIA CLI Commands - Command infrastructure using Commander.js
3
+ */
4
+ import { Command } from "commander";
5
+ import { createArionsCommand } from "./arions.js";
6
+ import { createAuthCommand } from "./auth.js";
7
+ import { runDaemonFromCli, stopDaemonFromCli, restartDaemonFromCli } from "./daemon.js";
8
+ import { createHeadlessCallCommand } from "../headless/call-command.js";
9
+ import { createPairingCommand } from "./pairing.js";
10
+ import { createRuntimeCutoverResetCommand } from "./runtime-cutover-reset-command.js";
11
+ import { startHeadlessStdioServer } from "../headless/stdio-server.js";
12
+ // Create the main program
13
+ export const program = new Command();
14
+ import { CLI_VERSION } from "../release-notes.js";
15
+ program
16
+ .name("aria")
17
+ .description("ARIA - Adaptive Reasoning Intelligence Agent")
18
+ .version(CLI_VERSION);
19
+ // Arions command - Manage Arion personas
20
+ program.addCommand(createArionsCommand());
21
+ // Auth command - Manage API keys
22
+ program.addCommand(createAuthCommand());
23
+ // Pairing command - End-user internet invite/join
24
+ program.addCommand(createPairingCommand());
25
+ program
26
+ .command("headless")
27
+ .description("Run the persistent headless stdio control server")
28
+ .option("--arion <name>", "Arion name for per-Arion session context")
29
+ .action(async (options) => {
30
+ await startHeadlessStdioServer({
31
+ cwd: process.cwd(),
32
+ arionName: options.arion,
33
+ });
34
+ });
35
+ program.addCommand(createHeadlessCallCommand());
36
+ // Daemon command group
37
+ const daemonCmd = program.command("daemon").description("Manage the ARIA daemon");
38
+ daemonCmd
39
+ .command("start", { isDefault: true })
40
+ .description("Start the daemon (default: launch and exit; use --foreground to stay resident)")
41
+ .option("--arion <name>", "Run daemon for a specific Arion")
42
+ .option("--port <port>", "Server port (default: 0 = OS-assigned)")
43
+ .option("--interval-ms <ms>", "Wake loop interval in milliseconds (default: 60000)")
44
+ .option("--foreground", "Stay resident as a monitor (Ctrl-C stops the daemon)")
45
+ .option("--allowed-tool-categories <list>", "Comma-separated tool category allowlist")
46
+ .option("--allowed-shell-commands <list>", "Comma-separated shell command prefix allowlist")
47
+ .option("--max-write-ops-per-minute <count>", "Rate limit for write operations per minute")
48
+ .option("--max-git-pushes-per-hour <count>", "Rate limit for git pushes per hour")
49
+ .action(async (options) => {
50
+ await runDaemonFromCli(options);
51
+ });
52
+ daemonCmd
53
+ .command("stop")
54
+ .description("Stop the running daemon")
55
+ .action(async () => {
56
+ await stopDaemonFromCli();
57
+ });
58
+ daemonCmd
59
+ .command("restart")
60
+ .description("Stop the daemon and start a fresh one")
61
+ .action(async () => {
62
+ await restartDaemonFromCli();
63
+ });
64
+ program.addCommand(createRuntimeCutoverResetCommand());
65
+ // Export for use in bin/aria.js
66
+ export { createArionsCommand } from "./arions.js";
67
+ export { createAuthCommand } from "./auth.js";
68
+ export { createHeadlessCallCommand } from "../headless/call-command.js";
69
+ export { runDaemonFromCli } from "./daemon.js";
70
+ export { createPairingCommand } from "./pairing.js";
71
+ export { createRuntimeCutoverResetCommand } from "./runtime-cutover-reset-command.js";
72
+ export { startHeadlessStdioServer } from "../headless/stdio-server.js";
73
+ export { runtimeCutoverResetCommand } from "./runtime-cutover-reset.js";
74
+ //# sourceMappingURL=index.js.map