convoai 1.0.0
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/LICENSE +21 -0
- package/README.md +862 -0
- package/bin/convoai.ts +3 -0
- package/dist/bin/convoai.d.ts +2 -0
- package/dist/bin/convoai.js +4 -0
- package/dist/bin/convoai.js.map +1 -0
- package/dist/src/api/agents.d.ts +24 -0
- package/dist/src/api/agents.js +51 -0
- package/dist/src/api/agents.js.map +1 -0
- package/dist/src/api/calls.d.ts +53 -0
- package/dist/src/api/calls.js +22 -0
- package/dist/src/api/calls.js.map +1 -0
- package/dist/src/api/client.d.ts +10 -0
- package/dist/src/api/client.js +63 -0
- package/dist/src/api/client.js.map +1 -0
- package/dist/src/api/types.d.ts +207 -0
- package/dist/src/api/types.js +20 -0
- package/dist/src/api/types.js.map +1 -0
- package/dist/src/commands/agent/_helpers.d.ts +7 -0
- package/dist/src/commands/agent/_helpers.js +32 -0
- package/dist/src/commands/agent/_helpers.js.map +1 -0
- package/dist/src/commands/agent/history.d.ts +2 -0
- package/dist/src/commands/agent/history.js +78 -0
- package/dist/src/commands/agent/history.js.map +1 -0
- package/dist/src/commands/agent/interrupt.d.ts +2 -0
- package/dist/src/commands/agent/interrupt.js +32 -0
- package/dist/src/commands/agent/interrupt.js.map +1 -0
- package/dist/src/commands/agent/join.d.ts +2 -0
- package/dist/src/commands/agent/join.js +168 -0
- package/dist/src/commands/agent/join.js.map +1 -0
- package/dist/src/commands/agent/list.d.ts +2 -0
- package/dist/src/commands/agent/list.js +67 -0
- package/dist/src/commands/agent/list.js.map +1 -0
- package/dist/src/commands/agent/speak.d.ts +2 -0
- package/dist/src/commands/agent/speak.js +48 -0
- package/dist/src/commands/agent/speak.js.map +1 -0
- package/dist/src/commands/agent/start.d.ts +2 -0
- package/dist/src/commands/agent/start.js +212 -0
- package/dist/src/commands/agent/start.js.map +1 -0
- package/dist/src/commands/agent/status.d.ts +2 -0
- package/dist/src/commands/agent/status.js +42 -0
- package/dist/src/commands/agent/status.js.map +1 -0
- package/dist/src/commands/agent/stop.d.ts +2 -0
- package/dist/src/commands/agent/stop.js +107 -0
- package/dist/src/commands/agent/stop.js.map +1 -0
- package/dist/src/commands/agent/turns.d.ts +2 -0
- package/dist/src/commands/agent/turns.js +99 -0
- package/dist/src/commands/agent/turns.js.map +1 -0
- package/dist/src/commands/agent/update.d.ts +2 -0
- package/dist/src/commands/agent/update.js +74 -0
- package/dist/src/commands/agent/update.js.map +1 -0
- package/dist/src/commands/agent/watch.d.ts +2 -0
- package/dist/src/commands/agent/watch.js +291 -0
- package/dist/src/commands/agent/watch.js.map +1 -0
- package/dist/src/commands/auth/login.d.ts +2 -0
- package/dist/src/commands/auth/login.js +118 -0
- package/dist/src/commands/auth/login.js.map +1 -0
- package/dist/src/commands/auth/logout.d.ts +2 -0
- package/dist/src/commands/auth/logout.js +84 -0
- package/dist/src/commands/auth/logout.js.map +1 -0
- package/dist/src/commands/auth/status.d.ts +2 -0
- package/dist/src/commands/auth/status.js +114 -0
- package/dist/src/commands/auth/status.js.map +1 -0
- package/dist/src/commands/call/_helpers.d.ts +7 -0
- package/dist/src/commands/call/_helpers.js +32 -0
- package/dist/src/commands/call/_helpers.js.map +1 -0
- package/dist/src/commands/call/hangup.d.ts +2 -0
- package/dist/src/commands/call/hangup.js +29 -0
- package/dist/src/commands/call/hangup.js.map +1 -0
- package/dist/src/commands/call/initiate.d.ts +2 -0
- package/dist/src/commands/call/initiate.js +137 -0
- package/dist/src/commands/call/initiate.js.map +1 -0
- package/dist/src/commands/call/status.d.ts +2 -0
- package/dist/src/commands/call/status.js +50 -0
- package/dist/src/commands/call/status.js.map +1 -0
- package/dist/src/commands/completion.d.ts +2 -0
- package/dist/src/commands/completion.js +542 -0
- package/dist/src/commands/completion.js.map +1 -0
- package/dist/src/commands/config/get.d.ts +2 -0
- package/dist/src/commands/config/get.js +79 -0
- package/dist/src/commands/config/get.js.map +1 -0
- package/dist/src/commands/config/init.d.ts +2 -0
- package/dist/src/commands/config/init.js +176 -0
- package/dist/src/commands/config/init.js.map +1 -0
- package/dist/src/commands/config/path.d.ts +2 -0
- package/dist/src/commands/config/path.js +22 -0
- package/dist/src/commands/config/path.js.map +1 -0
- package/dist/src/commands/config/set.d.ts +2 -0
- package/dist/src/commands/config/set.js +115 -0
- package/dist/src/commands/config/set.js.map +1 -0
- package/dist/src/commands/config/show.d.ts +2 -0
- package/dist/src/commands/config/show.js +147 -0
- package/dist/src/commands/config/show.js.map +1 -0
- package/dist/src/commands/preset/list.d.ts +2 -0
- package/dist/src/commands/preset/list.js +39 -0
- package/dist/src/commands/preset/list.js.map +1 -0
- package/dist/src/commands/preset/use.d.ts +2 -0
- package/dist/src/commands/preset/use.js +89 -0
- package/dist/src/commands/preset/use.js.map +1 -0
- package/dist/src/commands/quickstart.d.ts +2 -0
- package/dist/src/commands/quickstart.js +595 -0
- package/dist/src/commands/quickstart.js.map +1 -0
- package/dist/src/commands/repl.d.ts +2 -0
- package/dist/src/commands/repl.js +391 -0
- package/dist/src/commands/repl.js.map +1 -0
- package/dist/src/commands/template/delete.d.ts +2 -0
- package/dist/src/commands/template/delete.js +54 -0
- package/dist/src/commands/template/delete.js.map +1 -0
- package/dist/src/commands/template/list.d.ts +2 -0
- package/dist/src/commands/template/list.js +48 -0
- package/dist/src/commands/template/list.js.map +1 -0
- package/dist/src/commands/template/save.d.ts +2 -0
- package/dist/src/commands/template/save.js +86 -0
- package/dist/src/commands/template/save.js.map +1 -0
- package/dist/src/commands/template/show.d.ts +2 -0
- package/dist/src/commands/template/show.js +98 -0
- package/dist/src/commands/template/show.js.map +1 -0
- package/dist/src/commands/template/use.d.ts +2 -0
- package/dist/src/commands/template/use.js +109 -0
- package/dist/src/commands/template/use.js.map +1 -0
- package/dist/src/commands/token.d.ts +2 -0
- package/dist/src/commands/token.js +75 -0
- package/dist/src/commands/token.js.map +1 -0
- package/dist/src/config/manager.d.ts +22 -0
- package/dist/src/config/manager.js +130 -0
- package/dist/src/config/manager.js.map +1 -0
- package/dist/src/config/paths.d.ts +9 -0
- package/dist/src/config/paths.js +28 -0
- package/dist/src/config/paths.js.map +1 -0
- package/dist/src/config/schema.d.ts +396 -0
- package/dist/src/config/schema.js +57 -0
- package/dist/src/config/schema.js.map +1 -0
- package/dist/src/index.d.ts +1 -0
- package/dist/src/index.js +157 -0
- package/dist/src/index.js.map +1 -0
- package/dist/src/presets/defaults.d.ts +20 -0
- package/dist/src/presets/defaults.js +195 -0
- package/dist/src/presets/defaults.js.map +1 -0
- package/dist/src/providers/catalog.d.ts +103 -0
- package/dist/src/providers/catalog.js +247 -0
- package/dist/src/providers/catalog.js.map +1 -0
- package/dist/src/templates/manager.d.ts +24 -0
- package/dist/src/templates/manager.js +77 -0
- package/dist/src/templates/manager.js.map +1 -0
- package/dist/src/ui/colors.d.ts +9 -0
- package/dist/src/ui/colors.js +36 -0
- package/dist/src/ui/colors.js.map +1 -0
- package/dist/src/ui/output.d.ts +17 -0
- package/dist/src/ui/output.js +27 -0
- package/dist/src/ui/output.js.map +1 -0
- package/dist/src/ui/spinner.d.ts +5 -0
- package/dist/src/ui/spinner.js +23 -0
- package/dist/src/ui/spinner.js.map +1 -0
- package/dist/src/ui/table.d.ts +8 -0
- package/dist/src/ui/table.js +38 -0
- package/dist/src/ui/table.js.map +1 -0
- package/dist/src/utils/errors.d.ts +11 -0
- package/dist/src/utils/errors.js +38 -0
- package/dist/src/utils/errors.js.map +1 -0
- package/dist/src/utils/format.d.ts +16 -0
- package/dist/src/utils/format.js +87 -0
- package/dist/src/utils/format.js.map +1 -0
- package/dist/src/utils/hints.d.ts +7 -0
- package/dist/src/utils/hints.js +22 -0
- package/dist/src/utils/hints.js.map +1 -0
- package/dist/src/utils/token.d.ts +6 -0
- package/dist/src/utils/token.js +26 -0
- package/dist/src/utils/token.js.map +1 -0
- package/package.json +65 -0
- package/src/web/client.html +136 -0
|
@@ -0,0 +1,542 @@
|
|
|
1
|
+
import { writeFileSync, appendFileSync, mkdirSync, existsSync, readFileSync } from 'node:fs';
|
|
2
|
+
import { homedir } from 'node:os';
|
|
3
|
+
import { join } from 'node:path';
|
|
4
|
+
import { printSuccess, printError, printHint } from '../ui/output.js';
|
|
5
|
+
import { handleError } from '../utils/errors.js';
|
|
6
|
+
// ─── Completion Data ──────────────────────────────────────────────────────
|
|
7
|
+
const TOP_LEVEL_COMMANDS = ['auth', 'agent', 'call', 'config', 'preset', 'template', 'completion', 'repl'];
|
|
8
|
+
const SUBCOMMANDS = {
|
|
9
|
+
agent: ['start', 'stop', 'status', 'list', 'update', 'speak', 'interrupt', 'history', 'turns', 'watch'],
|
|
10
|
+
auth: ['login', 'logout', 'status'],
|
|
11
|
+
call: ['initiate', 'hangup', 'status'],
|
|
12
|
+
config: ['init', 'set', 'get', 'show', 'path'],
|
|
13
|
+
preset: ['list', 'use'],
|
|
14
|
+
template: ['save', 'list', 'show', 'delete', 'use'],
|
|
15
|
+
completion: ['bash', 'zsh', 'fish', 'install'],
|
|
16
|
+
};
|
|
17
|
+
const AGENT_START_FLAGS = [
|
|
18
|
+
'--channel', '--preset', '--model', '--tts', '--asr',
|
|
19
|
+
'--json', '--dry-run', '--profile',
|
|
20
|
+
];
|
|
21
|
+
const PRESET_NAMES = [
|
|
22
|
+
'openai-gpt4o', 'openai-mini', 'anthropic-claude', 'gemini', 'realtime-openai',
|
|
23
|
+
];
|
|
24
|
+
// ─── Bash Completion Script ───────────────────────────────────────────────
|
|
25
|
+
function generateBashScript() {
|
|
26
|
+
return `# convoai bash completion
|
|
27
|
+
# Generated by: convoai completion bash
|
|
28
|
+
_convoai_completions() {
|
|
29
|
+
local cur prev words cword
|
|
30
|
+
_init_completion || return
|
|
31
|
+
|
|
32
|
+
local toplevel="${TOP_LEVEL_COMMANDS.join(' ')}"
|
|
33
|
+
local agent_cmds="${SUBCOMMANDS.agent.join(' ')}"
|
|
34
|
+
local auth_cmds="${SUBCOMMANDS.auth.join(' ')}"
|
|
35
|
+
local call_cmds="${SUBCOMMANDS.call.join(' ')}"
|
|
36
|
+
local config_cmds="${SUBCOMMANDS.config.join(' ')}"
|
|
37
|
+
local preset_cmds="${SUBCOMMANDS.preset.join(' ')}"
|
|
38
|
+
local template_cmds="${SUBCOMMANDS.template.join(' ')}"
|
|
39
|
+
local completion_cmds="${SUBCOMMANDS.completion.join(' ')}"
|
|
40
|
+
local agent_start_flags="${AGENT_START_FLAGS.join(' ')}"
|
|
41
|
+
local preset_names="${PRESET_NAMES.join(' ')}"
|
|
42
|
+
|
|
43
|
+
# Determine position: find the subcommand level
|
|
44
|
+
local cmd=""
|
|
45
|
+
local subcmd=""
|
|
46
|
+
local i
|
|
47
|
+
for (( i=1; i < cword; i++ )); do
|
|
48
|
+
case "\${words[i]}" in
|
|
49
|
+
agent|auth|call|config|preset|template|completion|repl)
|
|
50
|
+
cmd="\${words[i]}"
|
|
51
|
+
;;
|
|
52
|
+
start|stop|status|list|update|speak|interrupt|history|turns|watch|login|logout|initiate|hangup|init|set|get|show|path|use|save|delete|bash|zsh|fish|install)
|
|
53
|
+
if [[ -n "$cmd" ]]; then
|
|
54
|
+
subcmd="\${words[i]}"
|
|
55
|
+
fi
|
|
56
|
+
;;
|
|
57
|
+
esac
|
|
58
|
+
done
|
|
59
|
+
|
|
60
|
+
# Complete flags for specific subcommands
|
|
61
|
+
if [[ "$cur" == -* ]]; then
|
|
62
|
+
if [[ "$cmd" == "agent" && "$subcmd" == "start" ]]; then
|
|
63
|
+
COMPREPLY=( $(compgen -W "$agent_start_flags" -- "$cur") )
|
|
64
|
+
return
|
|
65
|
+
fi
|
|
66
|
+
fi
|
|
67
|
+
|
|
68
|
+
# Complete flag values
|
|
69
|
+
if [[ -n "$prev" ]]; then
|
|
70
|
+
case "$prev" in
|
|
71
|
+
--preset)
|
|
72
|
+
COMPREPLY=( $(compgen -W "$preset_names" -- "$cur") )
|
|
73
|
+
return
|
|
74
|
+
;;
|
|
75
|
+
esac
|
|
76
|
+
fi
|
|
77
|
+
|
|
78
|
+
# Complete subcommands
|
|
79
|
+
if [[ -n "$cmd" && -z "$subcmd" ]]; then
|
|
80
|
+
case "$cmd" in
|
|
81
|
+
agent)
|
|
82
|
+
COMPREPLY=( $(compgen -W "$agent_cmds" -- "$cur") )
|
|
83
|
+
return
|
|
84
|
+
;;
|
|
85
|
+
auth)
|
|
86
|
+
COMPREPLY=( $(compgen -W "$auth_cmds" -- "$cur") )
|
|
87
|
+
return
|
|
88
|
+
;;
|
|
89
|
+
call)
|
|
90
|
+
COMPREPLY=( $(compgen -W "$call_cmds" -- "$cur") )
|
|
91
|
+
return
|
|
92
|
+
;;
|
|
93
|
+
config)
|
|
94
|
+
COMPREPLY=( $(compgen -W "$config_cmds" -- "$cur") )
|
|
95
|
+
return
|
|
96
|
+
;;
|
|
97
|
+
preset)
|
|
98
|
+
COMPREPLY=( $(compgen -W "$preset_cmds" -- "$cur") )
|
|
99
|
+
return
|
|
100
|
+
;;
|
|
101
|
+
template)
|
|
102
|
+
COMPREPLY=( $(compgen -W "$template_cmds" -- "$cur") )
|
|
103
|
+
return
|
|
104
|
+
;;
|
|
105
|
+
completion)
|
|
106
|
+
COMPREPLY=( $(compgen -W "$completion_cmds" -- "$cur") )
|
|
107
|
+
return
|
|
108
|
+
;;
|
|
109
|
+
esac
|
|
110
|
+
fi
|
|
111
|
+
|
|
112
|
+
# Complete top-level commands
|
|
113
|
+
if [[ -z "$cmd" ]]; then
|
|
114
|
+
COMPREPLY=( $(compgen -W "$toplevel" -- "$cur") )
|
|
115
|
+
return
|
|
116
|
+
fi
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
complete -F _convoai_completions convoai
|
|
120
|
+
`;
|
|
121
|
+
}
|
|
122
|
+
// ─── Zsh Completion Script ────────────────────────────────────────────────
|
|
123
|
+
function generateZshScript() {
|
|
124
|
+
return `#compdef convoai
|
|
125
|
+
# convoai zsh completion
|
|
126
|
+
# Generated by: convoai completion zsh
|
|
127
|
+
|
|
128
|
+
_convoai() {
|
|
129
|
+
local -a toplevel_commands
|
|
130
|
+
toplevel_commands=(
|
|
131
|
+
'auth:Manage authentication credentials'
|
|
132
|
+
'agent:Manage ConvoAI agents'
|
|
133
|
+
'call:Manage phone calls (telephony)'
|
|
134
|
+
'config:Manage CLI configuration'
|
|
135
|
+
'preset:Manage agent presets'
|
|
136
|
+
'template:Save and manage agent templates'
|
|
137
|
+
'completion:Generate shell completion scripts'
|
|
138
|
+
'repl:Start interactive shell'
|
|
139
|
+
)
|
|
140
|
+
|
|
141
|
+
local -a agent_commands
|
|
142
|
+
agent_commands=(
|
|
143
|
+
'start:Start a new ConvoAI agent'
|
|
144
|
+
'stop:Stop a running agent'
|
|
145
|
+
'status:Show agent status'
|
|
146
|
+
'list:List running agents'
|
|
147
|
+
'update:Update a running agent'
|
|
148
|
+
'speak:Send text for the agent to speak'
|
|
149
|
+
'interrupt:Interrupt the agent'
|
|
150
|
+
'history:Show conversation history'
|
|
151
|
+
'turns:Show conversation turns'
|
|
152
|
+
'watch:Watch agent status in real time'
|
|
153
|
+
)
|
|
154
|
+
|
|
155
|
+
local -a auth_commands
|
|
156
|
+
auth_commands=(
|
|
157
|
+
'login:Authenticate with the Agora ConvoAI platform'
|
|
158
|
+
'logout:Remove stored credentials'
|
|
159
|
+
'status:Show current authentication status'
|
|
160
|
+
)
|
|
161
|
+
|
|
162
|
+
local -a call_commands
|
|
163
|
+
call_commands=(
|
|
164
|
+
'initiate:Initiate a phone call'
|
|
165
|
+
'hangup:Hang up a phone call'
|
|
166
|
+
'status:Show call status'
|
|
167
|
+
)
|
|
168
|
+
|
|
169
|
+
local -a config_commands
|
|
170
|
+
config_commands=(
|
|
171
|
+
'init:Initialize configuration'
|
|
172
|
+
'set:Set a configuration value'
|
|
173
|
+
'get:Get a configuration value'
|
|
174
|
+
'show:Show full configuration'
|
|
175
|
+
'path:Show config file path'
|
|
176
|
+
)
|
|
177
|
+
|
|
178
|
+
local -a preset_commands
|
|
179
|
+
preset_commands=(
|
|
180
|
+
'list:List available presets'
|
|
181
|
+
'use:Use a preset configuration'
|
|
182
|
+
)
|
|
183
|
+
|
|
184
|
+
local -a template_commands
|
|
185
|
+
template_commands=(
|
|
186
|
+
'save:Save an agent template'
|
|
187
|
+
'list:List saved templates'
|
|
188
|
+
'show:Show template details'
|
|
189
|
+
'delete:Delete a template'
|
|
190
|
+
'use:Use a saved template'
|
|
191
|
+
)
|
|
192
|
+
|
|
193
|
+
local -a completion_commands
|
|
194
|
+
completion_commands=(
|
|
195
|
+
'bash:Generate bash completion script'
|
|
196
|
+
'zsh:Generate zsh completion script'
|
|
197
|
+
'fish:Generate fish completion script'
|
|
198
|
+
'install:Auto-detect shell and install completions'
|
|
199
|
+
)
|
|
200
|
+
|
|
201
|
+
local -a preset_names
|
|
202
|
+
preset_names=(${PRESET_NAMES.map((n) => `'${n}'`).join(' ')})
|
|
203
|
+
|
|
204
|
+
_arguments -C \\
|
|
205
|
+
'(-v --version)'{-v,--version}'[Show version]' \\
|
|
206
|
+
'(-h --help)'{-h,--help}'[Show help]' \\
|
|
207
|
+
'1:command:->command' \\
|
|
208
|
+
'*::arg:->args'
|
|
209
|
+
|
|
210
|
+
case $state in
|
|
211
|
+
command)
|
|
212
|
+
_describe -t commands 'convoai command' toplevel_commands
|
|
213
|
+
;;
|
|
214
|
+
args)
|
|
215
|
+
case $words[1] in
|
|
216
|
+
agent)
|
|
217
|
+
_arguments -C \\
|
|
218
|
+
'1:subcommand:->subcmd' \\
|
|
219
|
+
'*::arg:->subargs'
|
|
220
|
+
case $state in
|
|
221
|
+
subcmd)
|
|
222
|
+
_describe -t commands 'agent subcommand' agent_commands
|
|
223
|
+
;;
|
|
224
|
+
subargs)
|
|
225
|
+
case $words[1] in
|
|
226
|
+
start)
|
|
227
|
+
_arguments \\
|
|
228
|
+
'(-c --channel)'{-c,--channel}'[RTC channel name]:channel name' \\
|
|
229
|
+
'--preset[Use a built-in preset]:preset name:(${PRESET_NAMES.join(' ')})' \\
|
|
230
|
+
'--model[LLM model name]:model name' \\
|
|
231
|
+
'--tts[TTS vendor]:vendor name' \\
|
|
232
|
+
'--asr[ASR vendor]:vendor name' \\
|
|
233
|
+
'--json[Output as JSON]' \\
|
|
234
|
+
'--dry-run[Show request without sending]' \\
|
|
235
|
+
'--profile[Config profile to use]:profile name'
|
|
236
|
+
;;
|
|
237
|
+
esac
|
|
238
|
+
;;
|
|
239
|
+
esac
|
|
240
|
+
;;
|
|
241
|
+
auth)
|
|
242
|
+
_arguments -C \\
|
|
243
|
+
'1:subcommand:->subcmd' \\
|
|
244
|
+
'*::arg:->subargs'
|
|
245
|
+
case $state in
|
|
246
|
+
subcmd)
|
|
247
|
+
_describe -t commands 'auth subcommand' auth_commands
|
|
248
|
+
;;
|
|
249
|
+
esac
|
|
250
|
+
;;
|
|
251
|
+
call)
|
|
252
|
+
_arguments -C \\
|
|
253
|
+
'1:subcommand:->subcmd' \\
|
|
254
|
+
'*::arg:->subargs'
|
|
255
|
+
case $state in
|
|
256
|
+
subcmd)
|
|
257
|
+
_describe -t commands 'call subcommand' call_commands
|
|
258
|
+
;;
|
|
259
|
+
esac
|
|
260
|
+
;;
|
|
261
|
+
config)
|
|
262
|
+
_arguments -C \\
|
|
263
|
+
'1:subcommand:->subcmd' \\
|
|
264
|
+
'*::arg:->subargs'
|
|
265
|
+
case $state in
|
|
266
|
+
subcmd)
|
|
267
|
+
_describe -t commands 'config subcommand' config_commands
|
|
268
|
+
;;
|
|
269
|
+
esac
|
|
270
|
+
;;
|
|
271
|
+
preset)
|
|
272
|
+
_arguments -C \\
|
|
273
|
+
'1:subcommand:->subcmd' \\
|
|
274
|
+
'*::arg:->subargs'
|
|
275
|
+
case $state in
|
|
276
|
+
subcmd)
|
|
277
|
+
_describe -t commands 'preset subcommand' preset_commands
|
|
278
|
+
;;
|
|
279
|
+
subargs)
|
|
280
|
+
case $words[1] in
|
|
281
|
+
use)
|
|
282
|
+
_arguments \\
|
|
283
|
+
'1:preset name:(${PRESET_NAMES.join(' ')})'
|
|
284
|
+
;;
|
|
285
|
+
esac
|
|
286
|
+
;;
|
|
287
|
+
esac
|
|
288
|
+
;;
|
|
289
|
+
template)
|
|
290
|
+
_arguments -C \\
|
|
291
|
+
'1:subcommand:->subcmd' \\
|
|
292
|
+
'*::arg:->subargs'
|
|
293
|
+
case $state in
|
|
294
|
+
subcmd)
|
|
295
|
+
_describe -t commands 'template subcommand' template_commands
|
|
296
|
+
;;
|
|
297
|
+
esac
|
|
298
|
+
;;
|
|
299
|
+
completion)
|
|
300
|
+
_arguments -C \\
|
|
301
|
+
'1:subcommand:->subcmd'
|
|
302
|
+
case $state in
|
|
303
|
+
subcmd)
|
|
304
|
+
_describe -t commands 'completion subcommand' completion_commands
|
|
305
|
+
;;
|
|
306
|
+
esac
|
|
307
|
+
;;
|
|
308
|
+
esac
|
|
309
|
+
;;
|
|
310
|
+
esac
|
|
311
|
+
}
|
|
312
|
+
|
|
313
|
+
_convoai "$@"
|
|
314
|
+
`;
|
|
315
|
+
}
|
|
316
|
+
// ─── Fish Completion Script ───────────────────────────────────────────────
|
|
317
|
+
function generateFishScript() {
|
|
318
|
+
const lines = [
|
|
319
|
+
'# convoai fish completion',
|
|
320
|
+
'# Generated by: convoai completion fish',
|
|
321
|
+
'',
|
|
322
|
+
'# Disable file completions by default',
|
|
323
|
+
'complete -c convoai -f',
|
|
324
|
+
'',
|
|
325
|
+
'# Helper: no subcommand entered yet',
|
|
326
|
+
"function __convoai_no_subcommand",
|
|
327
|
+
" set -l cmd (commandline -opc)",
|
|
328
|
+
' if test (count $cmd) -eq 1',
|
|
329
|
+
' return 0',
|
|
330
|
+
' end',
|
|
331
|
+
' return 1',
|
|
332
|
+
'end',
|
|
333
|
+
'',
|
|
334
|
+
'# Helper: check if current command group matches',
|
|
335
|
+
'function __convoai_using_command',
|
|
336
|
+
' set -l cmd (commandline -opc)',
|
|
337
|
+
' if test (count $cmd) -lt 2',
|
|
338
|
+
' return 1',
|
|
339
|
+
' end',
|
|
340
|
+
' if test "$cmd[2]" = "$argv[1]"',
|
|
341
|
+
' return 0',
|
|
342
|
+
' end',
|
|
343
|
+
' return 1',
|
|
344
|
+
'end',
|
|
345
|
+
'',
|
|
346
|
+
'# Helper: check if current subcommand matches',
|
|
347
|
+
'function __convoai_using_subcommand',
|
|
348
|
+
' set -l cmd (commandline -opc)',
|
|
349
|
+
' if test (count $cmd) -lt 3',
|
|
350
|
+
' return 1',
|
|
351
|
+
' end',
|
|
352
|
+
' if test "$cmd[2]" = "$argv[1]" -a "$cmd[3]" = "$argv[2]"',
|
|
353
|
+
' return 0',
|
|
354
|
+
' end',
|
|
355
|
+
' return 1',
|
|
356
|
+
'end',
|
|
357
|
+
'',
|
|
358
|
+
'# ── Top-level commands ──────────────────────────────────────',
|
|
359
|
+
'complete -c convoai -n __convoai_no_subcommand -a auth -d "Manage authentication credentials"',
|
|
360
|
+
'complete -c convoai -n __convoai_no_subcommand -a agent -d "Manage ConvoAI agents"',
|
|
361
|
+
'complete -c convoai -n __convoai_no_subcommand -a call -d "Manage phone calls (telephony)"',
|
|
362
|
+
'complete -c convoai -n __convoai_no_subcommand -a config -d "Manage CLI configuration"',
|
|
363
|
+
'complete -c convoai -n __convoai_no_subcommand -a preset -d "Manage agent presets"',
|
|
364
|
+
'complete -c convoai -n __convoai_no_subcommand -a template -d "Save and manage agent templates"',
|
|
365
|
+
'complete -c convoai -n __convoai_no_subcommand -a completion -d "Generate shell completion scripts"',
|
|
366
|
+
'complete -c convoai -n __convoai_no_subcommand -a repl -d "Start interactive shell"',
|
|
367
|
+
'',
|
|
368
|
+
'# ── agent subcommands ──────────────────────────────────────',
|
|
369
|
+
'complete -c convoai -n "__convoai_using_command agent" -a start -d "Start a new ConvoAI agent"',
|
|
370
|
+
'complete -c convoai -n "__convoai_using_command agent" -a stop -d "Stop a running agent"',
|
|
371
|
+
'complete -c convoai -n "__convoai_using_command agent" -a status -d "Show agent status"',
|
|
372
|
+
'complete -c convoai -n "__convoai_using_command agent" -a list -d "List running agents"',
|
|
373
|
+
'complete -c convoai -n "__convoai_using_command agent" -a update -d "Update a running agent"',
|
|
374
|
+
'complete -c convoai -n "__convoai_using_command agent" -a speak -d "Send text for the agent to speak"',
|
|
375
|
+
'complete -c convoai -n "__convoai_using_command agent" -a interrupt -d "Interrupt the agent"',
|
|
376
|
+
'complete -c convoai -n "__convoai_using_command agent" -a history -d "Show conversation history"',
|
|
377
|
+
'complete -c convoai -n "__convoai_using_command agent" -a turns -d "Show conversation turns"',
|
|
378
|
+
'complete -c convoai -n "__convoai_using_command agent" -a watch -d "Watch agent status in real time"',
|
|
379
|
+
'',
|
|
380
|
+
'# ── call subcommands ───────────────────────────────────────',
|
|
381
|
+
'complete -c convoai -n "__convoai_using_command call" -a initiate -d "Initiate a phone call"',
|
|
382
|
+
'complete -c convoai -n "__convoai_using_command call" -a hangup -d "Hang up a phone call"',
|
|
383
|
+
'complete -c convoai -n "__convoai_using_command call" -a status -d "Show call status"',
|
|
384
|
+
'',
|
|
385
|
+
'# ── agent start flags ──────────────────────────────────────',
|
|
386
|
+
'complete -c convoai -n "__convoai_using_subcommand agent start" -l channel -s c -d "RTC channel name" -r',
|
|
387
|
+
'complete -c convoai -n "__convoai_using_subcommand agent start" -l preset -d "Use a built-in preset" -r -a "' + PRESET_NAMES.join(' ') + '"',
|
|
388
|
+
'complete -c convoai -n "__convoai_using_subcommand agent start" -l model -d "LLM model name" -r',
|
|
389
|
+
'complete -c convoai -n "__convoai_using_subcommand agent start" -l tts -d "TTS vendor" -r',
|
|
390
|
+
'complete -c convoai -n "__convoai_using_subcommand agent start" -l asr -d "ASR vendor" -r',
|
|
391
|
+
'complete -c convoai -n "__convoai_using_subcommand agent start" -l json -d "Output as JSON"',
|
|
392
|
+
'complete -c convoai -n "__convoai_using_subcommand agent start" -l dry-run -d "Show request without sending"',
|
|
393
|
+
'complete -c convoai -n "__convoai_using_subcommand agent start" -l profile -d "Config profile to use" -r',
|
|
394
|
+
'',
|
|
395
|
+
'# ── auth subcommands ──────────────────────────────────────',
|
|
396
|
+
'complete -c convoai -n "__convoai_using_command auth" -a login -d "Authenticate with the Agora ConvoAI platform"',
|
|
397
|
+
'complete -c convoai -n "__convoai_using_command auth" -a logout -d "Remove stored credentials"',
|
|
398
|
+
'complete -c convoai -n "__convoai_using_command auth" -a status -d "Show current authentication status"',
|
|
399
|
+
'',
|
|
400
|
+
'# ── config subcommands ─────────────────────────────────────',
|
|
401
|
+
'complete -c convoai -n "__convoai_using_command config" -a init -d "Initialize configuration"',
|
|
402
|
+
'complete -c convoai -n "__convoai_using_command config" -a set -d "Set a configuration value"',
|
|
403
|
+
'complete -c convoai -n "__convoai_using_command config" -a get -d "Get a configuration value"',
|
|
404
|
+
'complete -c convoai -n "__convoai_using_command config" -a show -d "Show full configuration"',
|
|
405
|
+
'complete -c convoai -n "__convoai_using_command config" -a path -d "Show config file path"',
|
|
406
|
+
'',
|
|
407
|
+
'# ── template subcommands ───────────────────────────────────',
|
|
408
|
+
'complete -c convoai -n "__convoai_using_command template" -a save -d "Save an agent template"',
|
|
409
|
+
'complete -c convoai -n "__convoai_using_command template" -a list -d "List saved templates"',
|
|
410
|
+
'complete -c convoai -n "__convoai_using_command template" -a show -d "Show template details"',
|
|
411
|
+
'complete -c convoai -n "__convoai_using_command template" -a delete -d "Delete a template"',
|
|
412
|
+
'complete -c convoai -n "__convoai_using_command template" -a use -d "Use a saved template"',
|
|
413
|
+
'',
|
|
414
|
+
'# ── preset subcommands ─────────────────────────────────────',
|
|
415
|
+
'complete -c convoai -n "__convoai_using_command preset" -a list -d "List available presets"',
|
|
416
|
+
'complete -c convoai -n "__convoai_using_command preset" -a use -d "Use a preset configuration"',
|
|
417
|
+
'',
|
|
418
|
+
'# ── preset use: complete preset names ──────────────────────',
|
|
419
|
+
'complete -c convoai -n "__convoai_using_subcommand preset use" -a "' + PRESET_NAMES.join(' ') + '" -d "Preset name"',
|
|
420
|
+
'',
|
|
421
|
+
'# ── completion subcommands ─────────────────────────────────',
|
|
422
|
+
'complete -c convoai -n "__convoai_using_command completion" -a bash -d "Generate bash completion script"',
|
|
423
|
+
'complete -c convoai -n "__convoai_using_command completion" -a zsh -d "Generate zsh completion script"',
|
|
424
|
+
'complete -c convoai -n "__convoai_using_command completion" -a fish -d "Generate fish completion script"',
|
|
425
|
+
'complete -c convoai -n "__convoai_using_command completion" -a install -d "Auto-detect shell and install completions"',
|
|
426
|
+
];
|
|
427
|
+
return lines.join('\n') + '\n';
|
|
428
|
+
}
|
|
429
|
+
// ─── Install Logic ────────────────────────────────────────────────────────
|
|
430
|
+
const COMPLETION_MARKER = '# convoai shell completions';
|
|
431
|
+
function detectShell() {
|
|
432
|
+
const shell = process.env.SHELL ?? '';
|
|
433
|
+
if (shell.endsWith('/zsh'))
|
|
434
|
+
return 'zsh';
|
|
435
|
+
if (shell.endsWith('/bash'))
|
|
436
|
+
return 'bash';
|
|
437
|
+
if (shell.endsWith('/fish'))
|
|
438
|
+
return 'fish';
|
|
439
|
+
return null;
|
|
440
|
+
}
|
|
441
|
+
function installCompletions() {
|
|
442
|
+
const shell = detectShell();
|
|
443
|
+
if (!shell) {
|
|
444
|
+
printError(`Could not detect shell from $SHELL (${process.env.SHELL ?? 'unset'}).`);
|
|
445
|
+
printHint('Run `convoai completion bash`, `convoai completion zsh`, or `convoai completion fish` and install manually.');
|
|
446
|
+
process.exitCode = 1;
|
|
447
|
+
return;
|
|
448
|
+
}
|
|
449
|
+
const home = homedir();
|
|
450
|
+
switch (shell) {
|
|
451
|
+
case 'bash': {
|
|
452
|
+
const rcFile = join(home, '.bashrc');
|
|
453
|
+
const snippet = `\n${COMPLETION_MARKER}\neval "$(convoai completion bash)"\n`;
|
|
454
|
+
if (alreadyInstalled(rcFile)) {
|
|
455
|
+
printSuccess('Bash completions are already installed in ~/.bashrc');
|
|
456
|
+
return;
|
|
457
|
+
}
|
|
458
|
+
appendFileSync(rcFile, snippet, 'utf-8');
|
|
459
|
+
printSuccess('Bash completions installed to ~/.bashrc');
|
|
460
|
+
printHint('Restart your shell or run `source ~/.bashrc` to activate.');
|
|
461
|
+
break;
|
|
462
|
+
}
|
|
463
|
+
case 'zsh': {
|
|
464
|
+
const rcFile = join(home, '.zshrc');
|
|
465
|
+
const snippet = `\n${COMPLETION_MARKER}\neval "$(convoai completion zsh)"\n`;
|
|
466
|
+
if (alreadyInstalled(rcFile)) {
|
|
467
|
+
printSuccess('Zsh completions are already installed in ~/.zshrc');
|
|
468
|
+
return;
|
|
469
|
+
}
|
|
470
|
+
appendFileSync(rcFile, snippet, 'utf-8');
|
|
471
|
+
printSuccess('Zsh completions installed to ~/.zshrc');
|
|
472
|
+
printHint('Restart your shell or run `source ~/.zshrc` to activate.');
|
|
473
|
+
break;
|
|
474
|
+
}
|
|
475
|
+
case 'fish': {
|
|
476
|
+
const fishDir = join(home, '.config', 'fish', 'completions');
|
|
477
|
+
const fishFile = join(fishDir, 'convoai.fish');
|
|
478
|
+
mkdirSync(fishDir, { recursive: true });
|
|
479
|
+
writeFileSync(fishFile, generateFishScript(), 'utf-8');
|
|
480
|
+
printSuccess(`Fish completions installed to ${fishFile}`);
|
|
481
|
+
printHint('Restart your shell to activate. Fish loads completions automatically.');
|
|
482
|
+
break;
|
|
483
|
+
}
|
|
484
|
+
}
|
|
485
|
+
}
|
|
486
|
+
function alreadyInstalled(rcFile) {
|
|
487
|
+
if (!existsSync(rcFile))
|
|
488
|
+
return false;
|
|
489
|
+
const content = readFileSync(rcFile, 'utf-8');
|
|
490
|
+
return content.includes(COMPLETION_MARKER);
|
|
491
|
+
}
|
|
492
|
+
// ─── Command Registration ─────────────────────────────────────────────────
|
|
493
|
+
export function registerCompletion(program) {
|
|
494
|
+
const completion = program
|
|
495
|
+
.command('completion')
|
|
496
|
+
.description('Generate shell completion scripts');
|
|
497
|
+
completion
|
|
498
|
+
.command('bash')
|
|
499
|
+
.description('Output bash completion script')
|
|
500
|
+
.action(() => {
|
|
501
|
+
try {
|
|
502
|
+
process.stdout.write(generateBashScript());
|
|
503
|
+
}
|
|
504
|
+
catch (error) {
|
|
505
|
+
handleError(error);
|
|
506
|
+
}
|
|
507
|
+
});
|
|
508
|
+
completion
|
|
509
|
+
.command('zsh')
|
|
510
|
+
.description('Output zsh completion script')
|
|
511
|
+
.action(() => {
|
|
512
|
+
try {
|
|
513
|
+
process.stdout.write(generateZshScript());
|
|
514
|
+
}
|
|
515
|
+
catch (error) {
|
|
516
|
+
handleError(error);
|
|
517
|
+
}
|
|
518
|
+
});
|
|
519
|
+
completion
|
|
520
|
+
.command('fish')
|
|
521
|
+
.description('Output fish completion script')
|
|
522
|
+
.action(() => {
|
|
523
|
+
try {
|
|
524
|
+
process.stdout.write(generateFishScript());
|
|
525
|
+
}
|
|
526
|
+
catch (error) {
|
|
527
|
+
handleError(error);
|
|
528
|
+
}
|
|
529
|
+
});
|
|
530
|
+
completion
|
|
531
|
+
.command('install')
|
|
532
|
+
.description('Auto-detect shell and install completions to the appropriate rc file')
|
|
533
|
+
.action(() => {
|
|
534
|
+
try {
|
|
535
|
+
installCompletions();
|
|
536
|
+
}
|
|
537
|
+
catch (error) {
|
|
538
|
+
handleError(error);
|
|
539
|
+
}
|
|
540
|
+
});
|
|
541
|
+
}
|
|
542
|
+
//# sourceMappingURL=completion.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"completion.js","sourceRoot":"","sources":["../../../src/commands/completion.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
import { loadConfig, getActiveProfile } from '../../config/manager.js';
|
|
2
|
+
import { printError } from '../../ui/output.js';
|
|
3
|
+
import { handleError } from '../../utils/errors.js';
|
|
4
|
+
// ─── Command Registration ──────────────────────────────────────────────────
|
|
5
|
+
export function registerConfigGet(program) {
|
|
6
|
+
program
|
|
7
|
+
.command('get <key>')
|
|
8
|
+
.description('Get a configuration value (supports dot notation, e.g. llm.model)')
|
|
9
|
+
.option('--profile <name>', 'Read value from a named profile')
|
|
10
|
+
.action(async (key, opts) => {
|
|
11
|
+
try {
|
|
12
|
+
getAction(key, opts);
|
|
13
|
+
}
|
|
14
|
+
catch (error) {
|
|
15
|
+
handleError(error);
|
|
16
|
+
}
|
|
17
|
+
});
|
|
18
|
+
}
|
|
19
|
+
// ─── Helpers ───────────────────────────────────────────────────────────────
|
|
20
|
+
function getNestedValue(obj, keyPath) {
|
|
21
|
+
const parts = keyPath.split('.');
|
|
22
|
+
let current = obj;
|
|
23
|
+
for (const part of parts) {
|
|
24
|
+
if (current === null || current === undefined || typeof current !== 'object') {
|
|
25
|
+
return undefined;
|
|
26
|
+
}
|
|
27
|
+
current = current[part];
|
|
28
|
+
}
|
|
29
|
+
return current;
|
|
30
|
+
}
|
|
31
|
+
// ─── Action ────────────────────────────────────────────────────────────────
|
|
32
|
+
function getAction(key, opts) {
|
|
33
|
+
const config = loadConfig();
|
|
34
|
+
let source;
|
|
35
|
+
if (opts.profile) {
|
|
36
|
+
const profile = config.profiles?.[opts.profile];
|
|
37
|
+
if (!profile) {
|
|
38
|
+
printError(`Profile "${opts.profile}" not found.`);
|
|
39
|
+
process.exit(1);
|
|
40
|
+
}
|
|
41
|
+
source = profile;
|
|
42
|
+
}
|
|
43
|
+
else {
|
|
44
|
+
// For top-level keys, read from root config; for nested keys like llm.*,
|
|
45
|
+
// merge with the active profile so we pick up profile-level settings too.
|
|
46
|
+
source = config;
|
|
47
|
+
// If the key starts with llm/tts/asr, also check active profile
|
|
48
|
+
const topSegment = key.split('.')[0];
|
|
49
|
+
if (['llm', 'tts', 'asr'].includes(topSegment)) {
|
|
50
|
+
try {
|
|
51
|
+
const profile = getActiveProfile();
|
|
52
|
+
const profileValue = getNestedValue(profile, key);
|
|
53
|
+
const rootValue = getNestedValue(source, key);
|
|
54
|
+
if (rootValue === undefined && profileValue !== undefined) {
|
|
55
|
+
outputValue(profileValue);
|
|
56
|
+
return;
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
catch {
|
|
60
|
+
// Credentials not configured — just fall through to root config
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
const value = getNestedValue(source, key);
|
|
65
|
+
if (value === undefined) {
|
|
66
|
+
printError(`Key "${key}" is not set.`);
|
|
67
|
+
process.exit(1);
|
|
68
|
+
}
|
|
69
|
+
outputValue(value);
|
|
70
|
+
}
|
|
71
|
+
function outputValue(value) {
|
|
72
|
+
if (typeof value === 'object' && value !== null) {
|
|
73
|
+
console.log(JSON.stringify(value, null, 2));
|
|
74
|
+
}
|
|
75
|
+
else {
|
|
76
|
+
console.log(String(value));
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
//# sourceMappingURL=get.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"get.js","sourceRoot":"","sources":["../../../../src/commands/config/get.ts"],"names":[],"mappings":"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"}
|