@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,80 +0,0 @@
1
- /**
2
- * Slash command parsing utilities.
3
- *
4
- * Pure functions for extracting command names and arguments from
5
- * user input like "/remember my note" or "/help".
6
- *
7
- * These are intentionally kept separate from React components
8
- * so they can be easily tested and reused.
9
- */
10
- function normalizeCommandName(command) {
11
- return command.trim().toLowerCase();
12
- }
13
- /**
14
- * Parse a slash command from user input.
15
- * Returns null if the input is not a slash command.
16
- *
17
- * Examples:
18
- * "/remember my note" -> { command: "remember", args: "my note" }
19
- * "/help" -> { command: "help", args: "" }
20
- * "hello world" -> null
21
- * "" -> null
22
- */
23
- export function parseSlashCommand(input) {
24
- const trimmed = input.trim();
25
- if (!trimmed.startsWith("/"))
26
- return null;
27
- const spaceIndex = trimmed.indexOf(" ");
28
- if (spaceIndex === -1) {
29
- const rawCommand = trimmed.slice(1);
30
- const canonical = canonicalizeBuiltinCommand(rawCommand);
31
- return { command: canonical ?? normalizeCommandName(rawCommand), args: "" };
32
- }
33
- const rawCommand = trimmed.slice(1, spaceIndex);
34
- const canonical = canonicalizeBuiltinCommand(rawCommand);
35
- return {
36
- command: canonical ?? normalizeCommandName(rawCommand),
37
- args: trimmed.slice(spaceIndex + 1).trim(),
38
- };
39
- }
40
- /** List of built-in slash commands recognized by handleCommand */
41
- export const BUILTIN_COMMANDS = [
42
- "help",
43
- "arions",
44
- "exit",
45
- "hatch",
46
- "remember",
47
- "recall",
48
- "recall_knowledge",
49
- "send",
50
- "model",
51
- "become",
52
- "rest",
53
- "wake",
54
- "memories",
55
- "forget",
56
- "clear",
57
- "autonomy",
58
- "resume",
59
- "fork",
60
- "daemon",
61
- "sound",
62
- "login",
63
- "logout",
64
- "terminal-setup",
65
- "theme",
66
- "invite",
67
- "join",
68
- ];
69
- const BUILTIN_COMMAND_MAP = new Map(BUILTIN_COMMANDS.map((command) => [command.toLowerCase(), command]));
70
- export function canonicalizeBuiltinCommand(command) {
71
- const canonical = BUILTIN_COMMAND_MAP.get(normalizeCommandName(command));
72
- return canonical ?? null;
73
- }
74
- /**
75
- * Check whether a parsed command name is a known built-in command.
76
- */
77
- export function isBuiltinCommand(command) {
78
- return canonicalizeBuiltinCommand(command) !== null;
79
- }
80
- //# sourceMappingURL=slash-commands.js.map
package/dist/sounds.js DELETED
@@ -1,210 +0,0 @@
1
- /**
2
- * Warcraft II sound notifications for ARIA.
3
- *
4
- * Maps RunEvent lifecycle events to thematic Warcraft II sounds.
5
- * User-configurable via /sound and persisted in config.
6
- *
7
- * Sound files live in `.comms/sounds/wav/` (repo root).
8
- * Playback currently uses macOS `afplay` when available.
9
- */
10
- import { execFile } from "node:child_process";
11
- import { existsSync, readdirSync } from "node:fs";
12
- import { dirname, join, resolve } from "node:path";
13
- import { fileURLToPath } from "node:url";
14
- const MODULE_DIR = dirname(fileURLToPath(import.meta.url));
15
- // ---------------------------------------------------------------------------
16
- // Sound file resolution
17
- // ---------------------------------------------------------------------------
18
- function findWavDir() {
19
- // Walk up from this file to find .comms/sounds/wav/
20
- let dir = MODULE_DIR;
21
- for (let i = 0; i < 10; i++) {
22
- const candidate = join(dir, ".comms", "sounds", "wav");
23
- if (existsSync(candidate))
24
- return candidate;
25
- const parent = resolve(dir, "..");
26
- if (parent === dir)
27
- break;
28
- dir = parent;
29
- }
30
- return null;
31
- }
32
- const WAV_DIR = findWavDir();
33
- function wavFiles(pattern) {
34
- if (!WAV_DIR)
35
- return [];
36
- try {
37
- return readdirSync(WAV_DIR)
38
- .filter((f) => new RegExp(pattern).test(f))
39
- .map((f) => join(WAV_DIR, f));
40
- }
41
- catch {
42
- return [];
43
- }
44
- }
45
- function clonedFiles(pattern) {
46
- if (!WAV_DIR)
47
- return [];
48
- const clonedDir = join(WAV_DIR, "cloned");
49
- try {
50
- return readdirSync(clonedDir)
51
- .filter((f) => new RegExp(pattern).test(f))
52
- .map((f) => join(clonedDir, f));
53
- }
54
- catch {
55
- return [];
56
- }
57
- }
58
- function pickRandom(files) {
59
- if (files.length === 0)
60
- return null;
61
- return files[Math.floor(Math.random() * files.length)];
62
- }
63
- // ---------------------------------------------------------------------------
64
- // Enable/disable toggle (persisted in config)
65
- // ---------------------------------------------------------------------------
66
- let enabled = true;
67
- let playbackChecked = false;
68
- let playbackSupported = false;
69
- export function setEnabled(value) {
70
- enabled = value;
71
- }
72
- export function isEnabled() {
73
- return enabled;
74
- }
75
- export function getPlaybackEngineLabel() {
76
- if (process.platform !== "darwin")
77
- return "unsupported on this platform";
78
- return isPlaybackSupported() ? "afplay (macOS)" : "afplay unavailable";
79
- }
80
- export function isPlaybackSupported() {
81
- if (playbackChecked)
82
- return playbackSupported;
83
- playbackChecked = true;
84
- playbackSupported = process.platform === "darwin" && existsSync("/usr/bin/afplay");
85
- return playbackSupported;
86
- }
87
- function play(file) {
88
- if (!enabled || !file || !existsSync(file) || !isPlaybackSupported())
89
- return false;
90
- try {
91
- execFile("afplay", [file], () => { });
92
- return true;
93
- }
94
- catch {
95
- return false;
96
- }
97
- }
98
- // ---------------------------------------------------------------------------
99
- // Sound pools (cached at module load)
100
- // ---------------------------------------------------------------------------
101
- const POOLS = {
102
- acknowledge: () => wavFiles("^(peasant|orc|human|dwarf|elf|troll)_acknowledge"),
103
- annoyed: () => wavFiles("^(peasant|orc|goblin_sapper|human|troll|ogre)_selected"),
104
- grumpy: () => wavFiles("^(goblin_sapper|ogre|ogre_mage)_selected"),
105
- dark: () => [
106
- ...wavFiles("^ogre_mage_selected"),
107
- ...wavFiles("^ogre_selected"),
108
- ...wavFiles("^troll_selected"),
109
- ],
110
- defeat: () => clonedFiles("^defeat_"),
111
- error: () => clonedFiles("^error_"),
112
- readyToWork: () => [
113
- ...wavFiles("^peasant_selected"),
114
- ...wavFiles("^orc_selected"),
115
- ...wavFiles("^human_selected"),
116
- ...wavFiles("^dwarf_selected"),
117
- ],
118
- fleetUp: () => [
119
- ...wavFiles("^orc_acknowledge"),
120
- ...wavFiles("^troll_acknowledge"),
121
- ...wavFiles("^ogre_acknowledge"),
122
- ...wavFiles("^human_acknowledge"),
123
- ...wavFiles("^knight_acknowledge"),
124
- ],
125
- fleetDown: () => [
126
- ...wavFiles("^ogre_mage_acknowledge"),
127
- ...wavFiles("^ship_acknowledge"),
128
- ...wavFiles("^horde_ship_acknowledge"),
129
- ],
130
- questDone: () => [
131
- ...wavFiles("^jobs_done"),
132
- ...wavFiles("^orc_work_completed"),
133
- ...wavFiles("^peasant_selected"),
134
- ...wavFiles("^orc_selected"),
135
- ...wavFiles("^human_selected"),
136
- ...wavFiles("^peasant_acknowledge"),
137
- ...wavFiles("^orc_acknowledge"),
138
- ],
139
- };
140
- // ---------------------------------------------------------------------------
141
- // Annoyance escalation
142
- // ---------------------------------------------------------------------------
143
- let lastPromptTime = 0;
144
- let annoyanceLevel = 0;
145
- const ANNOYANCE_COOLDOWN_MS = 15_000;
146
- function playAnnoyance() {
147
- const now = Date.now();
148
- if (now - lastPromptTime > ANNOYANCE_COOLDOWN_MS) {
149
- annoyanceLevel = 1;
150
- }
151
- else {
152
- annoyanceLevel++;
153
- }
154
- lastPromptTime = now;
155
- if (annoyanceLevel <= 1) {
156
- play(pickRandom(POOLS.acknowledge()));
157
- }
158
- else if (annoyanceLevel === 2) {
159
- play(pickRandom(POOLS.annoyed()));
160
- }
161
- else if (annoyanceLevel === 3) {
162
- play(pickRandom(POOLS.grumpy()));
163
- }
164
- else {
165
- play(pickRandom(POOLS.dark()));
166
- }
167
- }
168
- // ---------------------------------------------------------------------------
169
- // Public API
170
- // ---------------------------------------------------------------------------
171
- /** Call once when the CLI session starts. "Ready to work!" */
172
- export function onSessionStart() {
173
- play(pickRandom(POOLS.readyToWork()));
174
- }
175
- /** Call once when the CLI session ends. */
176
- export function onSessionEnd() {
177
- play(pickRandom(POOLS.fleetDown()));
178
- }
179
- /** Call when the user submits a prompt. Plays annoyance escalation. */
180
- export function onPromptSubmit() {
181
- playAnnoyance();
182
- }
183
- /** Call when the runner finishes responding. Plays completion sound. */
184
- export function onResponseComplete() {
185
- play(pickRandom(POOLS.questDone()));
186
- }
187
- /** Call for every RunEvent during streaming. Handles tool sounds. */
188
- export function onRunEvent(event) {
189
- switch (event.type) {
190
- case "error":
191
- play(pickRandom(POOLS.error()));
192
- break;
193
- case "guardrail_rejected":
194
- play(pickRandom(POOLS.defeat()));
195
- break;
196
- }
197
- }
198
- /** Check if sound assets and playback are available. */
199
- export function isSoundAvailable() {
200
- return WAV_DIR !== null && isPlaybackSupported();
201
- }
202
- /** Check if sound assets exist, even if playback is unsupported on this host. */
203
- export function hasSoundAssets() {
204
- return WAV_DIR !== null;
205
- }
206
- /** Play a representative preview sound. Returns true if playback was attempted. */
207
- export function previewSound() {
208
- return play(pickRandom(POOLS.readyToWork()));
209
- }
210
- //# sourceMappingURL=sounds.js.map