@aria-cli/cli 1.0.51 → 1.0.54
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bin/aria.mjs +569 -569
- package/package.json +14 -73
- package/dist/.tsbuildinfo +0 -1
- package/dist/attached-local-control-client.js +0 -826
- package/dist/bootstrap-local-control-client.js +0 -2
- package/dist/capability-aware-method-proxy.js +0 -42
- package/dist/cli-context.js +0 -160
- package/dist/commands/arions.js +0 -174
- package/dist/commands/auth.js +0 -123
- package/dist/commands/daemon.js +0 -245
- package/dist/commands/definitions.js +0 -176
- package/dist/commands/index.js +0 -74
- package/dist/commands/login-handler.js +0 -1108
- package/dist/commands/logout-handler.js +0 -92
- package/dist/commands/memory-handlers.js +0 -89
- package/dist/commands/pairing.js +0 -60
- package/dist/commands/runtime-cutover-reset-command.js +0 -12
- package/dist/commands/runtime-cutover-reset.js +0 -265
- package/dist/commands/terminal-setup.js +0 -84
- package/dist/config/aria-config.js +0 -238
- package/dist/config/index.js +0 -3
- package/dist/config/loader.js +0 -97
- package/dist/config.js +0 -142
- package/dist/daemon-info.js +0 -10
- package/dist/ensure-daemon.js +0 -128
- package/dist/entrypoints/command-mode.js +0 -5
- package/dist/entrypoints/daemon.js +0 -50
- package/dist/entrypoints/headless-stdio.js +0 -25
- package/dist/entrypoints/interactive.js +0 -80
- package/dist/event-loop-watchdog.js +0 -73
- package/dist/headless/auth-orchestrator.js +0 -508
- package/dist/headless/auth-service.js +0 -43
- package/dist/headless/bootstrap-fast-path.js +0 -112
- package/dist/headless/call-command.js +0 -143
- package/dist/headless/daemon-service.js +0 -318
- package/dist/headless/hook-actions.js +0 -235
- package/dist/headless/hook-service.js +0 -42
- package/dist/headless/kernel-services.js +0 -216
- package/dist/headless/kernel.js +0 -785
- package/dist/headless/operations/arion.js +0 -119
- package/dist/headless/operations/auth.js +0 -45
- package/dist/headless/operations/client.js +0 -31
- package/dist/headless/operations/config.js +0 -69
- package/dist/headless/operations/daemon.js +0 -47
- package/dist/headless/operations/hook.js +0 -56
- package/dist/headless/operations/index.js +0 -11
- package/dist/headless/operations/memory.js +0 -102
- package/dist/headless/operations/message.js +0 -279
- package/dist/headless/operations/model.js +0 -100
- package/dist/headless/operations/peer.js +0 -56
- package/dist/headless/operations/run.js +0 -24
- package/dist/headless/operations/session.js +0 -90
- package/dist/headless/operations/system.js +0 -19
- package/dist/headless/operations/utils.js +0 -35
- package/dist/headless/run-orchestrator.js +0 -703
- package/dist/headless/stdio-server.js +0 -439
- package/dist/history/SessionHistory.js +0 -8
- package/dist/history/SessionHistoryClient.js +0 -186
- package/dist/history/conversation-message.js +0 -112
- package/dist/history/index.js +0 -8
- package/dist/history/jsonl-replay.js +0 -154
- package/dist/history/repair-tool-pairing.js +0 -84
- package/dist/history/stall-phase-bridge.js +0 -11
- package/dist/history/turn-accumulator.js +0 -427
- package/dist/index.js +0 -7
- package/dist/ink-repl.js +0 -4183
- package/dist/local-control-bootstrap.js +0 -26
- package/dist/local-control-client.js +0 -2
- package/dist/local-control-error-reporting.js +0 -34
- package/dist/local-control-http-client.js +0 -362
- package/dist/local-control-lazy-wrapper.js +0 -363
- package/dist/local-control-manager.js +0 -146
- package/dist/main.js +0 -38
- package/dist/network-security.js +0 -62
- package/dist/networking-server.js +0 -38
- package/dist/peer-identity.js +0 -23
- package/dist/polling-subscription.js +0 -34
- package/dist/relaunch.js +0 -588
- package/dist/release-notes.js +0 -35
- package/dist/repl-cleanup.js +0 -47
- package/dist/runtime/configure-bun-sqlite.js +0 -3
- package/dist/runtime/crash-handlers.js +0 -111
- package/dist/runtime/interactive-invocation.js +0 -39
- package/dist/runtime/internal-mode.js +0 -14
- package/dist/runtime/launch-spec.js +0 -64
- package/dist/runtime/owner-lease.js +0 -44
- package/dist/runtime/public-mode.js +0 -20
- package/dist/runtime/run-internal-mode.js +0 -18
- package/dist/runtime/runtime-kind.js +0 -32
- package/dist/runtime/spawn-aria.js +0 -38
- package/dist/selectable-client.js +0 -2
- package/dist/selectable-peer.js +0 -2
- package/dist/session.js +0 -203
- package/dist/slash-commands.js +0 -80
- package/dist/sounds.js +0 -210
- package/dist/ui/App.js +0 -526
- package/dist/ui/components/AnthropicMethodPicker.js +0 -6
- package/dist/ui/components/ArionPrompt.js +0 -15
- package/dist/ui/components/AutocompleteDropdown.js +0 -23
- package/dist/ui/components/AutonomySelector.js +0 -55
- package/dist/ui/components/Banner.js +0 -98
- package/dist/ui/components/ConversationHistory.js +0 -175
- package/dist/ui/components/CopilotDeviceLoginFlow.js +0 -88
- package/dist/ui/components/CopilotSourcePicker.js +0 -50
- package/dist/ui/components/Cost.js +0 -10
- package/dist/ui/components/CustomSelect/option-map.js +0 -30
- package/dist/ui/components/CustomSelect/select-option.js +0 -13
- package/dist/ui/components/CustomSelect/select.js +0 -42
- package/dist/ui/components/CustomSelect/use-select-state.js +0 -179
- package/dist/ui/components/CustomSelect/use-select.js +0 -15
- package/dist/ui/components/ErrorDisplay.js +0 -35
- package/dist/ui/components/FallbackToolUseRejectedMessage.js +0 -7
- package/dist/ui/components/FileEditToolUpdatedMessage.js +0 -57
- package/dist/ui/components/HandoffMarker.js +0 -18
- package/dist/ui/components/HighlightedCode.js +0 -21
- package/dist/ui/components/InputArea.js +0 -187
- package/dist/ui/components/Message.js +0 -25
- package/dist/ui/components/OAuthLoginFlow.js +0 -113
- package/dist/ui/components/OutputTruncation.js +0 -35
- package/dist/ui/components/PermissionPrompt.js +0 -79
- package/dist/ui/components/PipelineTimingPanel.js +0 -15
- package/dist/ui/components/ProviderMethodPicker.js +0 -61
- package/dist/ui/components/ProviderPicker.js +0 -63
- package/dist/ui/components/RenderItemView.js +0 -71
- package/dist/ui/components/Spinner.js +0 -46
- package/dist/ui/components/StatusBar.js +0 -95
- package/dist/ui/components/StreamingIndicator.js +0 -55
- package/dist/ui/components/StructuredDiff.js +0 -168
- package/dist/ui/components/TextInputOverlay.js +0 -43
- package/dist/ui/components/ThinkingBlock.js +0 -82
- package/dist/ui/components/ToolCost.js +0 -17
- package/dist/ui/components/ToolExecution.js +0 -61
- package/dist/ui/components/ToolHeader.js +0 -51
- package/dist/ui/components/ToolRenderLayoutContext.js +0 -14
- package/dist/ui/components/ToolResultWrapper.js +0 -6
- package/dist/ui/components/ToolUseLoader.js +0 -35
- package/dist/ui/components/TraceWaterfall.js +0 -91
- package/dist/ui/components/index.js +0 -33
- package/dist/ui/components/messages/AssistantTextMessage.js +0 -25
- package/dist/ui/components/messages/UserImageMessage.js +0 -12
- package/dist/ui/components/messages/UserTextMessage.js +0 -12
- package/dist/ui/components/overlays/ArionSelector.js +0 -68
- package/dist/ui/components/overlays/ClientSelector.js +0 -62
- package/dist/ui/components/overlays/CommandPalette.js +0 -67
- package/dist/ui/components/overlays/DaemonControl.js +0 -87
- package/dist/ui/components/overlays/InviteShareOverlay.js +0 -15
- package/dist/ui/components/overlays/JoinInviteOverlay.js +0 -32
- package/dist/ui/components/overlays/MemoryBrowser.js +0 -100
- package/dist/ui/components/overlays/MessageSelector.js +0 -123
- package/dist/ui/components/overlays/ModelSelector.js +0 -211
- package/dist/ui/components/overlays/PairRequestOverlay.js +0 -42
- package/dist/ui/components/overlays/PeerSelector.js +0 -84
- package/dist/ui/components/overlays/SessionSelector.js +0 -102
- package/dist/ui/components/overlays/SoundSelector.js +0 -86
- package/dist/ui/components/overlays/ThemeSelector.js +0 -139
- package/dist/ui/components/overlays/index.js +0 -15
- package/dist/ui/components/permissions/BashPermissionRequest/BashPermissionRequest.js +0 -53
- package/dist/ui/components/permissions/FallbackPermissionRequest.js +0 -56
- package/dist/ui/components/permissions/FileEditPermissionRequest/FileEditPermissionRequest.js +0 -76
- package/dist/ui/components/permissions/FileEditPermissionRequest/FileEditToolDiff.js +0 -18
- package/dist/ui/components/permissions/FileWritePermissionRequest/FileWritePermissionRequest.js +0 -64
- package/dist/ui/components/permissions/FileWritePermissionRequest/FileWriteToolDiff.js +0 -26
- package/dist/ui/components/permissions/FilesystemPermissionRequest/FilesystemPermissionRequest.js +0 -141
- package/dist/ui/components/permissions/PermissionRequest.js +0 -70
- package/dist/ui/components/permissions/PermissionRequestTitle.js +0 -41
- package/dist/ui/components/permissions/hooks.js +0 -10
- package/dist/ui/components/permissions/toolUseOptions.js +0 -68
- package/dist/ui/components/permissions/utils.js +0 -10
- package/dist/ui/components/text-input/Cursor.js +0 -326
- package/dist/ui/components/text-input/TextInput.js +0 -231
- package/dist/ui/components/text-input/imagePaste.js +0 -28
- package/dist/ui/components/text-input/index.js +0 -6
- package/dist/ui/components/text-input/useDoublePress.js +0 -30
- package/dist/ui/components/text-input/useTextInput.js +0 -245
- package/dist/ui/components/tool-types.js +0 -9
- package/dist/ui/constants/figures.js +0 -4
- package/dist/ui/constants/index.js +0 -3
- package/dist/ui/display-mode.js +0 -93
- package/dist/ui/display-policy.js +0 -19
- package/dist/ui/hooks/index.js +0 -6
- package/dist/ui/hooks/useCommandAutocomplete.js +0 -93
- package/dist/ui/hooks/useDoublePress.js +0 -37
- package/dist/ui/hooks/useIndicatorState.js +0 -55
- package/dist/ui/hooks/useInterval.js +0 -23
- package/dist/ui/hooks/useKeyboardShortcuts.js +0 -127
- package/dist/ui/hooks/useTerminalSize.js +0 -55
- package/dist/ui/hooks/useUnifiedMessages.js +0 -117
- package/dist/ui/indicator-state.js +0 -44
- package/dist/ui/markdown/highlight.js +0 -44
- package/dist/ui/markdown/index.js +0 -1460
- package/dist/ui/markdown/tokenizer.js +0 -24
- package/dist/ui/render-item.js +0 -5
- package/dist/ui/screens/REPL.js +0 -119
- package/dist/ui/screens/approval-lifecycle.js +0 -38
- package/dist/ui/status-line.js +0 -72
- package/dist/ui/theme/index.js +0 -51
- package/dist/ui/theme/themes/claude-dark-daltonized.js +0 -51
- package/dist/ui/theme/themes/claude-dark.js +0 -50
- package/dist/ui/theme/themes/claude-light-daltonized.js +0 -51
- package/dist/ui/theme/themes/claude-light.js +0 -50
- package/dist/ui/theme/themes/dark-accessible.js +0 -18
- package/dist/ui/theme/themes/dark.js +0 -49
- package/dist/ui/theme/themes/light-accessible.js +0 -18
- package/dist/ui/theme/themes/light.js +0 -49
- package/dist/ui/theme/types.js +0 -3
- package/dist/ui/theme.js +0 -142
- package/dist/ui/to-render-items.js +0 -145
- package/dist/ui/tools/AgentTool/index.js +0 -30
- package/dist/ui/tools/ArchitectTool/index.js +0 -31
- package/dist/ui/tools/AskUserTool/index.js +0 -46
- package/dist/ui/tools/BashTool/BashToolResultMessage.js +0 -11
- package/dist/ui/tools/BashTool/OutputLine.js +0 -21
- package/dist/ui/tools/BashTool/index.js +0 -91
- package/dist/ui/tools/BrowseTool/index.js +0 -43
- package/dist/ui/tools/BrowserTool/index.js +0 -47
- package/dist/ui/tools/CbmTool/index.js +0 -188
- package/dist/ui/tools/CheckDelegationTool/index.js +0 -46
- package/dist/ui/tools/CheckMessagesTool/index.js +0 -85
- package/dist/ui/tools/CreateQuipTool/index.js +0 -30
- package/dist/ui/tools/CreateSkillTool/index.js +0 -22
- package/dist/ui/tools/CreateToolTool/index.js +0 -31
- package/dist/ui/tools/DelegateRemoteTool/index.js +0 -42
- package/dist/ui/tools/DeployTool/index.js +0 -47
- package/dist/ui/tools/FffTool/index.js +0 -103
- package/dist/ui/tools/FileEditTool/index.js +0 -67
- package/dist/ui/tools/FileReadTool/index.js +0 -68
- package/dist/ui/tools/FileWriteTool/index.js +0 -61
- package/dist/ui/tools/ForkTool/index.js +0 -47
- package/dist/ui/tools/FrgTool/index.js +0 -96
- package/dist/ui/tools/GetThreadTool/index.js +0 -39
- package/dist/ui/tools/GlobTool/index.js +0 -50
- package/dist/ui/tools/GrepTool/index.js +0 -84
- package/dist/ui/tools/HatchArionTool/index.js +0 -36
- package/dist/ui/tools/LearnSkillTool/index.js +0 -22
- package/dist/ui/tools/LearnTool/index.js +0 -43
- package/dist/ui/tools/LearnToolTool/index.js +0 -22
- package/dist/ui/tools/ListClientsTool/index.js +0 -39
- package/dist/ui/tools/LspTool/index.js +0 -261
- package/dist/ui/tools/MCPTool/index.js +0 -33
- package/dist/ui/tools/ManageNetworkTool/index.js +0 -53
- package/dist/ui/tools/MemoryReadTool/index.js +0 -64
- package/dist/ui/tools/MemoryWriteTool/index.js +0 -20
- package/dist/ui/tools/NotebookEditTool/index.js +0 -33
- package/dist/ui/tools/NotebookReadTool/index.js +0 -25
- package/dist/ui/tools/OutlookReadTool/index.js +0 -66
- package/dist/ui/tools/OutlookReplyTool/index.js +0 -49
- package/dist/ui/tools/OutlookSendTool/index.js +0 -49
- package/dist/ui/tools/PauseDelegationTool/index.js +0 -35
- package/dist/ui/tools/ProbeTool/index.js +0 -121
- package/dist/ui/tools/ProcessTool/index.js +0 -66
- package/dist/ui/tools/QuestListTool/index.js +0 -46
- package/dist/ui/tools/QuestReportTool/index.js +0 -49
- package/dist/ui/tools/QuestUpdateTool/index.js +0 -87
- package/dist/ui/tools/QuipCommentTool/index.js +0 -69
- package/dist/ui/tools/QuipReadTool/index.js +0 -71
- package/dist/ui/tools/RestArionTool/index.js +0 -32
- package/dist/ui/tools/RestartTool/index.js +0 -35
- package/dist/ui/tools/ResumeDelegationTool/index.js +0 -35
- package/dist/ui/tools/RetireArionTool/index.js +0 -32
- package/dist/ui/tools/RgTool/index.js +0 -73
- package/dist/ui/tools/SearchKnowledgeTool/index.js +0 -43
- package/dist/ui/tools/SearchMessagesTool/index.js +0 -43
- package/dist/ui/tools/SelfDiagnoseTool/index.js +0 -61
- package/dist/ui/tools/SendMessageTool/index.js +0 -45
- package/dist/ui/tools/SerenaTool/index.js +0 -124
- package/dist/ui/tools/SessionHistoryTool/index.js +0 -52
- package/dist/ui/tools/SgTool/index.js +0 -80
- package/dist/ui/tools/SlackReactTool/index.js +0 -41
- package/dist/ui/tools/SlackReadTool/index.js +0 -48
- package/dist/ui/tools/SlackSendTool/index.js +0 -45
- package/dist/ui/tools/SpawnWorkerTool/index.js +0 -33
- package/dist/ui/tools/StickerRequestTool/index.js +0 -19
- package/dist/ui/tools/ThinkTool/index.js +0 -17
- package/dist/ui/tools/UgTool/index.js +0 -108
- package/dist/ui/tools/UseSkillTool/index.js +0 -22
- package/dist/ui/tools/WakeArionTool/index.js +0 -32
- package/dist/ui/tools/WebFetchTool/index.js +0 -56
- package/dist/ui/tools/WebSearchTool/index.js +0 -44
- package/dist/ui/tools/lsTool/index.js +0 -58
- package/dist/ui/tools/registry.js +0 -197
- package/dist/ui/tools/tool-renderer.js +0 -11
- package/dist/ui/tools/truncation.js +0 -35
- package/dist/ui/types/anthropic.js +0 -4
- package/dist/ui/types/index.js +0 -2
- package/dist/ui/types/message.js +0 -3
- package/dist/ui/types/tool.js +0 -4
- package/dist/ui/utils/array.js +0 -4
- package/dist/ui/utils/cursor.js +0 -131
- package/dist/ui/utils/diff.js +0 -120
- package/dist/ui/utils/format.js +0 -42
- package/dist/ui/utils/fuzzy.js +0 -59
- package/dist/ui/utils/index.js +0 -11
- package/dist/ui/utils/keys.js +0 -8
- package/dist/ui/utils/patch.js +0 -17
- package/dist/ui/utils/risk.js +0 -114
- package/dist/ui/utils/terminal-image.js +0 -70
- package/dist/ui/utils/validation.js +0 -48
- package/dist/ui/verb-pairs.js +0 -248
- package/dist/ui.js +0 -131
- package/src/entrypoints/command-mode.ts +0 -5
- package/src/entrypoints/daemon.ts +0 -54
- package/src/entrypoints/headless-stdio.ts +0 -27
- package/src/entrypoints/interactive.ts +0 -112
- package/src/main.ts +0 -44
- package/src/runtime/configure-bun-sqlite.ts +0 -3
- package/src/runtime/crash-handlers.ts +0 -128
- package/src/runtime/interactive-invocation.test.ts +0 -42
- package/src/runtime/interactive-invocation.ts +0 -51
- package/src/runtime/internal-mode.test.ts +0 -19
- package/src/runtime/internal-mode.ts +0 -24
- package/src/runtime/launch-spec.test.ts +0 -26
- package/src/runtime/launch-spec.ts +0 -84
- package/src/runtime/owner-lease.ts +0 -52
- package/src/runtime/public-mode.test.ts +0 -18
- package/src/runtime/public-mode.ts +0 -19
- package/src/runtime/run-internal-mode.ts +0 -19
- package/src/runtime/runtime-kind.test.ts +0 -23
- package/src/runtime/runtime-kind.ts +0 -41
- package/src/runtime/spawn-aria.ts +0 -62
package/dist/slash-commands.js
DELETED
|
@@ -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
|