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.
Files changed (170) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +862 -0
  3. package/bin/convoai.ts +3 -0
  4. package/dist/bin/convoai.d.ts +2 -0
  5. package/dist/bin/convoai.js +4 -0
  6. package/dist/bin/convoai.js.map +1 -0
  7. package/dist/src/api/agents.d.ts +24 -0
  8. package/dist/src/api/agents.js +51 -0
  9. package/dist/src/api/agents.js.map +1 -0
  10. package/dist/src/api/calls.d.ts +53 -0
  11. package/dist/src/api/calls.js +22 -0
  12. package/dist/src/api/calls.js.map +1 -0
  13. package/dist/src/api/client.d.ts +10 -0
  14. package/dist/src/api/client.js +63 -0
  15. package/dist/src/api/client.js.map +1 -0
  16. package/dist/src/api/types.d.ts +207 -0
  17. package/dist/src/api/types.js +20 -0
  18. package/dist/src/api/types.js.map +1 -0
  19. package/dist/src/commands/agent/_helpers.d.ts +7 -0
  20. package/dist/src/commands/agent/_helpers.js +32 -0
  21. package/dist/src/commands/agent/_helpers.js.map +1 -0
  22. package/dist/src/commands/agent/history.d.ts +2 -0
  23. package/dist/src/commands/agent/history.js +78 -0
  24. package/dist/src/commands/agent/history.js.map +1 -0
  25. package/dist/src/commands/agent/interrupt.d.ts +2 -0
  26. package/dist/src/commands/agent/interrupt.js +32 -0
  27. package/dist/src/commands/agent/interrupt.js.map +1 -0
  28. package/dist/src/commands/agent/join.d.ts +2 -0
  29. package/dist/src/commands/agent/join.js +168 -0
  30. package/dist/src/commands/agent/join.js.map +1 -0
  31. package/dist/src/commands/agent/list.d.ts +2 -0
  32. package/dist/src/commands/agent/list.js +67 -0
  33. package/dist/src/commands/agent/list.js.map +1 -0
  34. package/dist/src/commands/agent/speak.d.ts +2 -0
  35. package/dist/src/commands/agent/speak.js +48 -0
  36. package/dist/src/commands/agent/speak.js.map +1 -0
  37. package/dist/src/commands/agent/start.d.ts +2 -0
  38. package/dist/src/commands/agent/start.js +212 -0
  39. package/dist/src/commands/agent/start.js.map +1 -0
  40. package/dist/src/commands/agent/status.d.ts +2 -0
  41. package/dist/src/commands/agent/status.js +42 -0
  42. package/dist/src/commands/agent/status.js.map +1 -0
  43. package/dist/src/commands/agent/stop.d.ts +2 -0
  44. package/dist/src/commands/agent/stop.js +107 -0
  45. package/dist/src/commands/agent/stop.js.map +1 -0
  46. package/dist/src/commands/agent/turns.d.ts +2 -0
  47. package/dist/src/commands/agent/turns.js +99 -0
  48. package/dist/src/commands/agent/turns.js.map +1 -0
  49. package/dist/src/commands/agent/update.d.ts +2 -0
  50. package/dist/src/commands/agent/update.js +74 -0
  51. package/dist/src/commands/agent/update.js.map +1 -0
  52. package/dist/src/commands/agent/watch.d.ts +2 -0
  53. package/dist/src/commands/agent/watch.js +291 -0
  54. package/dist/src/commands/agent/watch.js.map +1 -0
  55. package/dist/src/commands/auth/login.d.ts +2 -0
  56. package/dist/src/commands/auth/login.js +118 -0
  57. package/dist/src/commands/auth/login.js.map +1 -0
  58. package/dist/src/commands/auth/logout.d.ts +2 -0
  59. package/dist/src/commands/auth/logout.js +84 -0
  60. package/dist/src/commands/auth/logout.js.map +1 -0
  61. package/dist/src/commands/auth/status.d.ts +2 -0
  62. package/dist/src/commands/auth/status.js +114 -0
  63. package/dist/src/commands/auth/status.js.map +1 -0
  64. package/dist/src/commands/call/_helpers.d.ts +7 -0
  65. package/dist/src/commands/call/_helpers.js +32 -0
  66. package/dist/src/commands/call/_helpers.js.map +1 -0
  67. package/dist/src/commands/call/hangup.d.ts +2 -0
  68. package/dist/src/commands/call/hangup.js +29 -0
  69. package/dist/src/commands/call/hangup.js.map +1 -0
  70. package/dist/src/commands/call/initiate.d.ts +2 -0
  71. package/dist/src/commands/call/initiate.js +137 -0
  72. package/dist/src/commands/call/initiate.js.map +1 -0
  73. package/dist/src/commands/call/status.d.ts +2 -0
  74. package/dist/src/commands/call/status.js +50 -0
  75. package/dist/src/commands/call/status.js.map +1 -0
  76. package/dist/src/commands/completion.d.ts +2 -0
  77. package/dist/src/commands/completion.js +542 -0
  78. package/dist/src/commands/completion.js.map +1 -0
  79. package/dist/src/commands/config/get.d.ts +2 -0
  80. package/dist/src/commands/config/get.js +79 -0
  81. package/dist/src/commands/config/get.js.map +1 -0
  82. package/dist/src/commands/config/init.d.ts +2 -0
  83. package/dist/src/commands/config/init.js +176 -0
  84. package/dist/src/commands/config/init.js.map +1 -0
  85. package/dist/src/commands/config/path.d.ts +2 -0
  86. package/dist/src/commands/config/path.js +22 -0
  87. package/dist/src/commands/config/path.js.map +1 -0
  88. package/dist/src/commands/config/set.d.ts +2 -0
  89. package/dist/src/commands/config/set.js +115 -0
  90. package/dist/src/commands/config/set.js.map +1 -0
  91. package/dist/src/commands/config/show.d.ts +2 -0
  92. package/dist/src/commands/config/show.js +147 -0
  93. package/dist/src/commands/config/show.js.map +1 -0
  94. package/dist/src/commands/preset/list.d.ts +2 -0
  95. package/dist/src/commands/preset/list.js +39 -0
  96. package/dist/src/commands/preset/list.js.map +1 -0
  97. package/dist/src/commands/preset/use.d.ts +2 -0
  98. package/dist/src/commands/preset/use.js +89 -0
  99. package/dist/src/commands/preset/use.js.map +1 -0
  100. package/dist/src/commands/quickstart.d.ts +2 -0
  101. package/dist/src/commands/quickstart.js +595 -0
  102. package/dist/src/commands/quickstart.js.map +1 -0
  103. package/dist/src/commands/repl.d.ts +2 -0
  104. package/dist/src/commands/repl.js +391 -0
  105. package/dist/src/commands/repl.js.map +1 -0
  106. package/dist/src/commands/template/delete.d.ts +2 -0
  107. package/dist/src/commands/template/delete.js +54 -0
  108. package/dist/src/commands/template/delete.js.map +1 -0
  109. package/dist/src/commands/template/list.d.ts +2 -0
  110. package/dist/src/commands/template/list.js +48 -0
  111. package/dist/src/commands/template/list.js.map +1 -0
  112. package/dist/src/commands/template/save.d.ts +2 -0
  113. package/dist/src/commands/template/save.js +86 -0
  114. package/dist/src/commands/template/save.js.map +1 -0
  115. package/dist/src/commands/template/show.d.ts +2 -0
  116. package/dist/src/commands/template/show.js +98 -0
  117. package/dist/src/commands/template/show.js.map +1 -0
  118. package/dist/src/commands/template/use.d.ts +2 -0
  119. package/dist/src/commands/template/use.js +109 -0
  120. package/dist/src/commands/template/use.js.map +1 -0
  121. package/dist/src/commands/token.d.ts +2 -0
  122. package/dist/src/commands/token.js +75 -0
  123. package/dist/src/commands/token.js.map +1 -0
  124. package/dist/src/config/manager.d.ts +22 -0
  125. package/dist/src/config/manager.js +130 -0
  126. package/dist/src/config/manager.js.map +1 -0
  127. package/dist/src/config/paths.d.ts +9 -0
  128. package/dist/src/config/paths.js +28 -0
  129. package/dist/src/config/paths.js.map +1 -0
  130. package/dist/src/config/schema.d.ts +396 -0
  131. package/dist/src/config/schema.js +57 -0
  132. package/dist/src/config/schema.js.map +1 -0
  133. package/dist/src/index.d.ts +1 -0
  134. package/dist/src/index.js +157 -0
  135. package/dist/src/index.js.map +1 -0
  136. package/dist/src/presets/defaults.d.ts +20 -0
  137. package/dist/src/presets/defaults.js +195 -0
  138. package/dist/src/presets/defaults.js.map +1 -0
  139. package/dist/src/providers/catalog.d.ts +103 -0
  140. package/dist/src/providers/catalog.js +247 -0
  141. package/dist/src/providers/catalog.js.map +1 -0
  142. package/dist/src/templates/manager.d.ts +24 -0
  143. package/dist/src/templates/manager.js +77 -0
  144. package/dist/src/templates/manager.js.map +1 -0
  145. package/dist/src/ui/colors.d.ts +9 -0
  146. package/dist/src/ui/colors.js +36 -0
  147. package/dist/src/ui/colors.js.map +1 -0
  148. package/dist/src/ui/output.d.ts +17 -0
  149. package/dist/src/ui/output.js +27 -0
  150. package/dist/src/ui/output.js.map +1 -0
  151. package/dist/src/ui/spinner.d.ts +5 -0
  152. package/dist/src/ui/spinner.js +23 -0
  153. package/dist/src/ui/spinner.js.map +1 -0
  154. package/dist/src/ui/table.d.ts +8 -0
  155. package/dist/src/ui/table.js +38 -0
  156. package/dist/src/ui/table.js.map +1 -0
  157. package/dist/src/utils/errors.d.ts +11 -0
  158. package/dist/src/utils/errors.js +38 -0
  159. package/dist/src/utils/errors.js.map +1 -0
  160. package/dist/src/utils/format.d.ts +16 -0
  161. package/dist/src/utils/format.js +87 -0
  162. package/dist/src/utils/format.js.map +1 -0
  163. package/dist/src/utils/hints.d.ts +7 -0
  164. package/dist/src/utils/hints.js +22 -0
  165. package/dist/src/utils/hints.js.map +1 -0
  166. package/dist/src/utils/token.d.ts +6 -0
  167. package/dist/src/utils/token.js +26 -0
  168. package/dist/src/utils/token.js.map +1 -0
  169. package/package.json +65 -0
  170. package/src/web/client.html +136 -0
@@ -0,0 +1,195 @@
1
+ // ─── Built-In Presets ───────────────────────────────────────────────────────
2
+ export const PRESETS = {
3
+ 'openai-gpt4o': {
4
+ description: 'OpenAI GPT-4o with Microsoft TTS and Deepgram ASR',
5
+ llm: 'OpenAI GPT-4o',
6
+ tts: 'Microsoft TTS',
7
+ asr: 'Deepgram',
8
+ properties: {
9
+ llm: {
10
+ vendor: 'openai',
11
+ model: 'gpt-4o',
12
+ style: 'openai',
13
+ system_messages: [
14
+ {
15
+ role: 'system',
16
+ content: 'You are a helpful voice assistant. Keep responses concise and conversational.',
17
+ },
18
+ ],
19
+ max_history: 20,
20
+ params: {
21
+ temperature: 0.7,
22
+ max_tokens: 512,
23
+ },
24
+ },
25
+ tts: {
26
+ vendor: 'microsoft',
27
+ params: {
28
+ voice_name: 'en-US-AndrewMultilingualNeural',
29
+ speed: 1.0,
30
+ },
31
+ },
32
+ asr: {
33
+ vendor: 'deepgram',
34
+ language: 'en-US',
35
+ params: {
36
+ model: 'nova-2',
37
+ },
38
+ },
39
+ },
40
+ },
41
+ 'openai-mini': {
42
+ description: 'OpenAI GPT-4o-mini with Microsoft TTS and Deepgram ASR',
43
+ llm: 'OpenAI GPT-4o-mini',
44
+ tts: 'Microsoft TTS',
45
+ asr: 'Deepgram',
46
+ properties: {
47
+ llm: {
48
+ vendor: 'openai',
49
+ model: 'gpt-4o-mini',
50
+ style: 'openai',
51
+ system_messages: [
52
+ {
53
+ role: 'system',
54
+ content: 'You are a helpful voice assistant. Keep responses concise and conversational.',
55
+ },
56
+ ],
57
+ max_history: 20,
58
+ params: {
59
+ temperature: 0.7,
60
+ max_tokens: 512,
61
+ },
62
+ },
63
+ tts: {
64
+ vendor: 'microsoft',
65
+ params: {
66
+ voice_name: 'en-US-AndrewMultilingualNeural',
67
+ speed: 1.0,
68
+ },
69
+ },
70
+ asr: {
71
+ vendor: 'deepgram',
72
+ language: 'en-US',
73
+ params: {
74
+ model: 'nova-2',
75
+ },
76
+ },
77
+ },
78
+ },
79
+ 'anthropic-claude': {
80
+ description: 'Anthropic Claude with Microsoft TTS and Deepgram ASR',
81
+ llm: 'Anthropic Claude',
82
+ tts: 'Microsoft TTS',
83
+ asr: 'Deepgram',
84
+ properties: {
85
+ llm: {
86
+ vendor: 'anthropic',
87
+ model: 'claude-sonnet-4-20250514',
88
+ style: 'anthropic',
89
+ system_messages: [
90
+ {
91
+ role: 'system',
92
+ content: 'You are a helpful voice assistant. Keep responses concise and conversational.',
93
+ },
94
+ ],
95
+ max_history: 20,
96
+ params: {
97
+ temperature: 0.7,
98
+ max_tokens: 512,
99
+ },
100
+ },
101
+ tts: {
102
+ vendor: 'microsoft',
103
+ params: {
104
+ voice_name: 'en-US-AndrewMultilingualNeural',
105
+ speed: 1.0,
106
+ },
107
+ },
108
+ asr: {
109
+ vendor: 'deepgram',
110
+ language: 'en-US',
111
+ params: {
112
+ model: 'nova-2',
113
+ },
114
+ },
115
+ },
116
+ },
117
+ gemini: {
118
+ description: 'Google Gemini with Microsoft TTS and Deepgram ASR',
119
+ llm: 'Google Gemini',
120
+ tts: 'Microsoft TTS',
121
+ asr: 'Deepgram',
122
+ properties: {
123
+ llm: {
124
+ vendor: 'google',
125
+ model: 'gemini-2.0-flash',
126
+ style: 'gemini',
127
+ system_messages: [
128
+ {
129
+ role: 'system',
130
+ content: 'You are a helpful voice assistant. Keep responses concise and conversational.',
131
+ },
132
+ ],
133
+ max_history: 20,
134
+ params: {
135
+ temperature: 0.7,
136
+ max_tokens: 512,
137
+ },
138
+ },
139
+ tts: {
140
+ vendor: 'microsoft',
141
+ params: {
142
+ voice_name: 'en-US-AndrewMultilingualNeural',
143
+ speed: 1.0,
144
+ },
145
+ },
146
+ asr: {
147
+ vendor: 'deepgram',
148
+ language: 'en-US',
149
+ params: {
150
+ model: 'nova-2',
151
+ },
152
+ },
153
+ },
154
+ },
155
+ 'realtime-openai': {
156
+ description: 'OpenAI Realtime API (multimodal LLM mode)',
157
+ llm: 'OpenAI Realtime',
158
+ tts: 'Built-in (MLLM)',
159
+ asr: 'Built-in (MLLM)',
160
+ properties: {
161
+ llm: {
162
+ vendor: 'openai',
163
+ model: 'gpt-4o-realtime-preview',
164
+ style: 'openai',
165
+ input_modalities: ['text', 'audio'],
166
+ output_modalities: ['text', 'audio'],
167
+ system_messages: [
168
+ {
169
+ role: 'system',
170
+ content: 'You are a helpful voice assistant. Keep responses concise and conversational.',
171
+ },
172
+ ],
173
+ },
174
+ advanced_features: {
175
+ enable_mllm: true,
176
+ },
177
+ },
178
+ },
179
+ };
180
+ // ─── Public Helpers ─────────────────────────────────────────────────────────
181
+ /** Look up a preset by name. Returns undefined if not found. */
182
+ export function getPreset(name) {
183
+ return PRESETS[name]?.properties;
184
+ }
185
+ /** List all available presets with their metadata. */
186
+ export function listPresets() {
187
+ return Object.entries(PRESETS).map(([name, info]) => ({
188
+ name,
189
+ description: info.description,
190
+ llm: info.llm,
191
+ tts: info.tts,
192
+ asr: info.asr,
193
+ }));
194
+ }
195
+ //# sourceMappingURL=defaults.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"defaults.js","sourceRoot":"","sources":["../../../src/presets/defaults.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,103 @@
1
+ export interface LLMProvider {
2
+ name: string;
3
+ value: string;
4
+ url: string;
5
+ defaultModel: string;
6
+ models: string[];
7
+ style?: 'anthropic' | 'gemini';
8
+ headers?: string;
9
+ urlHasKey?: boolean;
10
+ note?: string;
11
+ }
12
+ export declare const LLM_PROVIDERS: LLMProvider[];
13
+ export interface TTSProvider {
14
+ name: string;
15
+ vendor: string;
16
+ requiresKey: boolean;
17
+ requiresRegion?: boolean;
18
+ defaultVoice?: string;
19
+ beta?: boolean;
20
+ note?: string;
21
+ }
22
+ export declare const TTS_PROVIDERS: TTSProvider[];
23
+ export interface ASRProvider {
24
+ name: string;
25
+ vendor: string;
26
+ requiresKey: boolean;
27
+ beta?: boolean;
28
+ note?: string;
29
+ }
30
+ export declare const ASR_PROVIDERS: ASRProvider[];
31
+ export declare const ASR_LANGUAGES: readonly [{
32
+ readonly name: "Chinese (中文)";
33
+ readonly value: "zh-CN";
34
+ }, {
35
+ readonly name: "English (US)";
36
+ readonly value: "en-US";
37
+ }, {
38
+ readonly name: "Japanese (日本語)";
39
+ readonly value: "ja-JP";
40
+ }, {
41
+ readonly name: "Korean (한국어)";
42
+ readonly value: "ko-KR";
43
+ }, {
44
+ readonly name: "French";
45
+ readonly value: "fr-FR";
46
+ }, {
47
+ readonly name: "German";
48
+ readonly value: "de-DE";
49
+ }, {
50
+ readonly name: "Spanish";
51
+ readonly value: "es-ES";
52
+ }, {
53
+ readonly name: "Russian";
54
+ readonly value: "ru-RU";
55
+ }, {
56
+ readonly name: "Hindi";
57
+ readonly value: "hi-IN";
58
+ }, {
59
+ readonly name: "Arabic";
60
+ readonly value: "ar-SA";
61
+ }, {
62
+ readonly name: "Portuguese";
63
+ readonly value: "pt-PT";
64
+ }, {
65
+ readonly name: "Italian";
66
+ readonly value: "it-IT";
67
+ }, {
68
+ readonly name: "Thai";
69
+ readonly value: "th-TH";
70
+ }, {
71
+ readonly name: "Turkish";
72
+ readonly value: "tr-TR";
73
+ }, {
74
+ readonly name: "Vietnamese";
75
+ readonly value: "vi-VN";
76
+ }, {
77
+ readonly name: "Indonesian";
78
+ readonly value: "id-ID";
79
+ }, {
80
+ readonly name: "Malay";
81
+ readonly value: "ms-MY";
82
+ }, {
83
+ readonly name: "Dutch";
84
+ readonly value: "nl-NL";
85
+ }, {
86
+ readonly name: "Filipino";
87
+ readonly value: "fil-PH";
88
+ }, {
89
+ readonly name: "Chinese (Hong Kong)";
90
+ readonly value: "zh-HK";
91
+ }, {
92
+ readonly name: "Chinese (Taiwan)";
93
+ readonly value: "zh-TW";
94
+ }, {
95
+ readonly name: "English (India)";
96
+ readonly value: "en-IN";
97
+ }, {
98
+ readonly name: "Persian";
99
+ readonly value: "fa-IR";
100
+ }, {
101
+ readonly name: "Hebrew";
102
+ readonly value: "he-IL";
103
+ }];
@@ -0,0 +1,247 @@
1
+ // Provider catalog — single source of truth for all supported providers.
2
+ export const LLM_PROVIDERS = [
3
+ {
4
+ name: 'Alibaba Qwen',
5
+ value: 'dashscope',
6
+ url: 'https://dashscope.aliyuncs.com/compatible-mode/v1/chat/completions',
7
+ defaultModel: 'qwen-plus',
8
+ models: ['qwen-plus', 'qwen-turbo', 'qwen-max', 'qwen-long'],
9
+ note: 'China-optimized, no proxy needed',
10
+ },
11
+ {
12
+ name: 'DeepSeek',
13
+ value: 'deepseek',
14
+ url: 'https://api.deepseek.com/v1/chat/completions',
15
+ defaultModel: 'deepseek-chat',
16
+ models: ['deepseek-chat', 'deepseek-reasoner'],
17
+ note: 'China-optimized, great price-performance',
18
+ },
19
+ {
20
+ name: 'OpenAI',
21
+ value: 'openai',
22
+ url: 'https://api.openai.com/v1/chat/completions',
23
+ defaultModel: 'gpt-4o-mini',
24
+ models: ['gpt-4o-mini', 'gpt-4o', 'gpt-4.1-mini', 'gpt-4.1'],
25
+ note: 'Requires proxy in China',
26
+ },
27
+ {
28
+ name: 'Groq',
29
+ value: 'groq',
30
+ url: 'https://api.groq.com/openai/v1/chat/completions',
31
+ defaultModel: 'llama-3.3-70b-versatile',
32
+ models: [
33
+ 'llama-3.3-70b-versatile',
34
+ 'llama-3.1-8b-instant',
35
+ 'mixtral-8x7b-32768',
36
+ ],
37
+ note: 'Fast inference, free tier available',
38
+ },
39
+ {
40
+ name: 'Anthropic Claude',
41
+ value: 'anthropic',
42
+ url: 'https://api.anthropic.com/v1/messages',
43
+ defaultModel: 'claude-3-5-haiku-latest',
44
+ models: ['claude-3-5-haiku-latest', 'claude-sonnet-4-20250514'],
45
+ style: 'anthropic',
46
+ headers: '{"anthropic-version":"2023-06-01"}',
47
+ },
48
+ {
49
+ name: 'Google Gemini',
50
+ value: 'gemini',
51
+ url: 'https://generativelanguage.googleapis.com/v1beta/models/{model}:streamGenerateContent?alt=sse&key={api_key}',
52
+ defaultModel: 'gemini-2.0-flash',
53
+ models: ['gemini-2.0-flash', 'gemini-2.5-flash', 'gemini-2.5-pro'],
54
+ style: 'gemini',
55
+ urlHasKey: true,
56
+ },
57
+ {
58
+ name: 'Azure OpenAI',
59
+ value: 'azure',
60
+ url: '',
61
+ defaultModel: 'gpt-4o-mini',
62
+ models: ['gpt-4o-mini', 'gpt-4o'],
63
+ note: 'Enter your Azure endpoint URL',
64
+ },
65
+ {
66
+ name: 'Amazon Bedrock',
67
+ value: 'bedrock',
68
+ url: '',
69
+ defaultModel: '',
70
+ models: [],
71
+ note: 'Enter your Bedrock endpoint URL',
72
+ },
73
+ {
74
+ name: 'Dify',
75
+ value: 'dify',
76
+ url: '',
77
+ defaultModel: '',
78
+ models: [],
79
+ note: 'Enter your Dify endpoint URL',
80
+ },
81
+ {
82
+ name: 'Custom',
83
+ value: 'custom',
84
+ url: '',
85
+ defaultModel: '',
86
+ models: [],
87
+ note: 'Any service with OpenAI-compatible API',
88
+ },
89
+ ];
90
+ export const TTS_PROVIDERS = [
91
+ {
92
+ name: 'ElevenLabs',
93
+ vendor: 'elevenlabs',
94
+ requiresKey: true,
95
+ note: 'High quality, multilingual',
96
+ },
97
+ {
98
+ name: 'Microsoft Azure',
99
+ vendor: 'microsoft',
100
+ requiresKey: true,
101
+ requiresRegion: true,
102
+ defaultVoice: 'en-US-AndrewMultilingualNeural',
103
+ note: 'Wide language support',
104
+ },
105
+ {
106
+ name: 'MiniMax',
107
+ vendor: 'minimax',
108
+ requiresKey: true,
109
+ },
110
+ {
111
+ name: 'OpenAI TTS',
112
+ vendor: 'openai',
113
+ requiresKey: true,
114
+ beta: true,
115
+ },
116
+ {
117
+ name: 'Cartesia',
118
+ vendor: 'cartesia',
119
+ requiresKey: true,
120
+ beta: true,
121
+ },
122
+ {
123
+ name: 'Hume AI',
124
+ vendor: 'humeai',
125
+ requiresKey: true,
126
+ beta: true,
127
+ },
128
+ {
129
+ name: 'Rime',
130
+ vendor: 'rime',
131
+ requiresKey: true,
132
+ beta: true,
133
+ },
134
+ {
135
+ name: 'Fish Audio',
136
+ vendor: 'fishaudio',
137
+ requiresKey: true,
138
+ beta: true,
139
+ },
140
+ {
141
+ name: 'Google TTS',
142
+ vendor: 'google',
143
+ requiresKey: true,
144
+ beta: true,
145
+ },
146
+ {
147
+ name: 'Amazon Polly',
148
+ vendor: 'amazon',
149
+ requiresKey: true,
150
+ beta: true,
151
+ },
152
+ {
153
+ name: 'Murf',
154
+ vendor: 'murf',
155
+ requiresKey: true,
156
+ beta: true,
157
+ },
158
+ {
159
+ name: 'Sarvam',
160
+ vendor: 'sarvam',
161
+ requiresKey: true,
162
+ beta: true,
163
+ },
164
+ ];
165
+ export const ASR_PROVIDERS = [
166
+ {
167
+ name: 'ARES',
168
+ vendor: 'ares',
169
+ requiresKey: false,
170
+ note: 'Agora built-in, no extra API key needed',
171
+ },
172
+ {
173
+ name: 'Microsoft Azure',
174
+ vendor: 'microsoft',
175
+ requiresKey: true,
176
+ },
177
+ {
178
+ name: 'Deepgram',
179
+ vendor: 'deepgram',
180
+ requiresKey: true,
181
+ },
182
+ {
183
+ name: 'OpenAI Whisper',
184
+ vendor: 'openai',
185
+ requiresKey: true,
186
+ beta: true,
187
+ },
188
+ {
189
+ name: 'Speechmatics',
190
+ vendor: 'speechmatics',
191
+ requiresKey: true,
192
+ },
193
+ {
194
+ name: 'AssemblyAI',
195
+ vendor: 'assemblyai',
196
+ requiresKey: true,
197
+ beta: true,
198
+ },
199
+ {
200
+ name: 'Amazon Transcribe',
201
+ vendor: 'amazon',
202
+ requiresKey: true,
203
+ beta: true,
204
+ },
205
+ {
206
+ name: 'Google STT',
207
+ vendor: 'google',
208
+ requiresKey: true,
209
+ beta: true,
210
+ },
211
+ {
212
+ name: 'Sarvam',
213
+ vendor: 'sarvam',
214
+ requiresKey: true,
215
+ beta: true,
216
+ },
217
+ ];
218
+ // ---------------------------------------------------------------------------
219
+ // ASR Languages (ARES supported)
220
+ // ---------------------------------------------------------------------------
221
+ export const ASR_LANGUAGES = [
222
+ { name: 'Chinese (\u4e2d\u6587)', value: 'zh-CN' },
223
+ { name: 'English (US)', value: 'en-US' },
224
+ { name: 'Japanese (\u65e5\u672c\u8a9e)', value: 'ja-JP' },
225
+ { name: 'Korean (\ud55c\uad6d\uc5b4)', value: 'ko-KR' },
226
+ { name: 'French', value: 'fr-FR' },
227
+ { name: 'German', value: 'de-DE' },
228
+ { name: 'Spanish', value: 'es-ES' },
229
+ { name: 'Russian', value: 'ru-RU' },
230
+ { name: 'Hindi', value: 'hi-IN' },
231
+ { name: 'Arabic', value: 'ar-SA' },
232
+ { name: 'Portuguese', value: 'pt-PT' },
233
+ { name: 'Italian', value: 'it-IT' },
234
+ { name: 'Thai', value: 'th-TH' },
235
+ { name: 'Turkish', value: 'tr-TR' },
236
+ { name: 'Vietnamese', value: 'vi-VN' },
237
+ { name: 'Indonesian', value: 'id-ID' },
238
+ { name: 'Malay', value: 'ms-MY' },
239
+ { name: 'Dutch', value: 'nl-NL' },
240
+ { name: 'Filipino', value: 'fil-PH' },
241
+ { name: 'Chinese (Hong Kong)', value: 'zh-HK' },
242
+ { name: 'Chinese (Taiwan)', value: 'zh-TW' },
243
+ { name: 'English (India)', value: 'en-IN' },
244
+ { name: 'Persian', value: 'fa-IR' },
245
+ { name: 'Hebrew', value: 'he-IL' },
246
+ ];
247
+ //# sourceMappingURL=catalog.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"catalog.js","sourceRoot":"","sources":["../../../src/providers/catalog.ts"],"names":[],"mappings":"AAAA,yEAAyE;AAkBzE,MAAM,CAAC,MAAM,aAAa,GAAkB;IAC1C;QACE,IAAI,EAAE,cAAc;QACpB,KAAK,EAAE,WAAW;QAClB,GAAG,EAAE,oEAAoE;QACzE,YAAY,EAAE,WAAW;QACzB,MAAM,EAAE,CAAC,WAAW,EAAE,YAAY,EAAE,UAAU,EAAE,WAAW,CAAC;QAC5D,IAAI,EAAE,kCAAkC;KACzC;IACD;QACE,IAAI,EAAE,UAAU;QAChB,KAAK,EAAE,UAAU;QACjB,GAAG,EAAE,8CAA8C;QACnD,YAAY,EAAE,eAAe;QAC7B,MAAM,EAAE,CAAC,eAAe,EAAE,mBAAmB,CAAC;QAC9C,IAAI,EAAE,0CAA0C;KACjD;IACD;QACE,IAAI,EAAE,QAAQ;QACd,KAAK,EAAE,QAAQ;QACf,GAAG,EAAE,4CAA4C;QACjD,YAAY,EAAE,aAAa;QAC3B,MAAM,EAAE,CAAC,aAAa,EAAE,QAAQ,EAAE,cAAc,EAAE,SAAS,CAAC;QAC5D,IAAI,EAAE,yBAAyB;KAChC;IACD;QACE,IAAI,EAAE,MAAM;QACZ,KAAK,EAAE,MAAM;QACb,GAAG,EAAE,iDAAiD;QACtD,YAAY,EAAE,yBAAyB;QACvC,MAAM,EAAE;YACN,yBAAyB;YACzB,sBAAsB;YACtB,oBAAoB;SACrB;QACD,IAAI,EAAE,qCAAqC;KAC5C;IACD;QACE,IAAI,EAAE,kBAAkB;QACxB,KAAK,EAAE,WAAW;QAClB,GAAG,EAAE,uCAAuC;QAC5C,YAAY,EAAE,yBAAyB;QACvC,MAAM,EAAE,CAAC,yBAAyB,EAAE,0BAA0B,CAAC;QAC/D,KAAK,EAAE,WAAW;QAClB,OAAO,EAAE,oCAAoC;KAC9C;IACD;QACE,IAAI,EAAE,eAAe;QACrB,KAAK,EAAE,QAAQ;QACf,GAAG,EAAE,6GAA6G;QAClH,YAAY,EAAE,kBAAkB;QAChC,MAAM,EAAE,CAAC,kBAAkB,EAAE,kBAAkB,EAAE,gBAAgB,CAAC;QAClE,KAAK,EAAE,QAAQ;QACf,SAAS,EAAE,IAAI;KAChB;IACD;QACE,IAAI,EAAE,cAAc;QACpB,KAAK,EAAE,OAAO;QACd,GAAG,EAAE,EAAE;QACP,YAAY,EAAE,aAAa;QAC3B,MAAM,EAAE,CAAC,aAAa,EAAE,QAAQ,CAAC;QACjC,IAAI,EAAE,+BAA+B;KACtC;IACD;QACE,IAAI,EAAE,gBAAgB;QACtB,KAAK,EAAE,SAAS;QAChB,GAAG,EAAE,EAAE;QACP,YAAY,EAAE,EAAE;QAChB,MAAM,EAAE,EAAE;QACV,IAAI,EAAE,iCAAiC;KACxC;IACD;QACE,IAAI,EAAE,MAAM;QACZ,KAAK,EAAE,MAAM;QACb,GAAG,EAAE,EAAE;QACP,YAAY,EAAE,EAAE;QAChB,MAAM,EAAE,EAAE;QACV,IAAI,EAAE,8BAA8B;KACrC;IACD;QACE,IAAI,EAAE,QAAQ;QACd,KAAK,EAAE,QAAQ;QACf,GAAG,EAAE,EAAE;QACP,YAAY,EAAE,EAAE;QAChB,MAAM,EAAE,EAAE;QACV,IAAI,EAAE,wCAAwC;KAC/C;CACF,CAAC;AAgBF,MAAM,CAAC,MAAM,aAAa,GAAkB;IAC1C;QACE,IAAI,EAAE,YAAY;QAClB,MAAM,EAAE,YAAY;QACpB,WAAW,EAAE,IAAI;QACjB,IAAI,EAAE,4BAA4B;KACnC;IACD;QACE,IAAI,EAAE,iBAAiB;QACvB,MAAM,EAAE,WAAW;QACnB,WAAW,EAAE,IAAI;QACjB,cAAc,EAAE,IAAI;QACpB,YAAY,EAAE,gCAAgC;QAC9C,IAAI,EAAE,uBAAuB;KAC9B;IACD;QACE,IAAI,EAAE,SAAS;QACf,MAAM,EAAE,SAAS;QACjB,WAAW,EAAE,IAAI;KAClB;IACD;QACE,IAAI,EAAE,YAAY;QAClB,MAAM,EAAE,QAAQ;QAChB,WAAW,EAAE,IAAI;QACjB,IAAI,EAAE,IAAI;KACX;IACD;QACE,IAAI,EAAE,UAAU;QAChB,MAAM,EAAE,UAAU;QAClB,WAAW,EAAE,IAAI;QACjB,IAAI,EAAE,IAAI;KACX;IACD;QACE,IAAI,EAAE,SAAS;QACf,MAAM,EAAE,QAAQ;QAChB,WAAW,EAAE,IAAI;QACjB,IAAI,EAAE,IAAI;KACX;IACD;QACE,IAAI,EAAE,MAAM;QACZ,MAAM,EAAE,MAAM;QACd,WAAW,EAAE,IAAI;QACjB,IAAI,EAAE,IAAI;KACX;IACD;QACE,IAAI,EAAE,YAAY;QAClB,MAAM,EAAE,WAAW;QACnB,WAAW,EAAE,IAAI;QACjB,IAAI,EAAE,IAAI;KACX;IACD;QACE,IAAI,EAAE,YAAY;QAClB,MAAM,EAAE,QAAQ;QAChB,WAAW,EAAE,IAAI;QACjB,IAAI,EAAE,IAAI;KACX;IACD;QACE,IAAI,EAAE,cAAc;QACpB,MAAM,EAAE,QAAQ;QAChB,WAAW,EAAE,IAAI;QACjB,IAAI,EAAE,IAAI;KACX;IACD;QACE,IAAI,EAAE,MAAM;QACZ,MAAM,EAAE,MAAM;QACd,WAAW,EAAE,IAAI;QACjB,IAAI,EAAE,IAAI;KACX;IACD;QACE,IAAI,EAAE,QAAQ;QACd,MAAM,EAAE,QAAQ;QAChB,WAAW,EAAE,IAAI;QACjB,IAAI,EAAE,IAAI;KACX;CACF,CAAC;AAcF,MAAM,CAAC,MAAM,aAAa,GAAkB;IAC1C;QACE,IAAI,EAAE,MAAM;QACZ,MAAM,EAAE,MAAM;QACd,WAAW,EAAE,KAAK;QAClB,IAAI,EAAE,yCAAyC;KAChD;IACD;QACE,IAAI,EAAE,iBAAiB;QACvB,MAAM,EAAE,WAAW;QACnB,WAAW,EAAE,IAAI;KAClB;IACD;QACE,IAAI,EAAE,UAAU;QAChB,MAAM,EAAE,UAAU;QAClB,WAAW,EAAE,IAAI;KAClB;IACD;QACE,IAAI,EAAE,gBAAgB;QACtB,MAAM,EAAE,QAAQ;QAChB,WAAW,EAAE,IAAI;QACjB,IAAI,EAAE,IAAI;KACX;IACD;QACE,IAAI,EAAE,cAAc;QACpB,MAAM,EAAE,cAAc;QACtB,WAAW,EAAE,IAAI;KAClB;IACD;QACE,IAAI,EAAE,YAAY;QAClB,MAAM,EAAE,YAAY;QACpB,WAAW,EAAE,IAAI;QACjB,IAAI,EAAE,IAAI;KACX;IACD;QACE,IAAI,EAAE,mBAAmB;QACzB,MAAM,EAAE,QAAQ;QAChB,WAAW,EAAE,IAAI;QACjB,IAAI,EAAE,IAAI;KACX;IACD;QACE,IAAI,EAAE,YAAY;QAClB,MAAM,EAAE,QAAQ;QAChB,WAAW,EAAE,IAAI;QACjB,IAAI,EAAE,IAAI;KACX;IACD;QACE,IAAI,EAAE,QAAQ;QACd,MAAM,EAAE,QAAQ;QAChB,WAAW,EAAE,IAAI;QACjB,IAAI,EAAE,IAAI;KACX;CACF,CAAC;AAEF,8EAA8E;AAC9E,iCAAiC;AACjC,8EAA8E;AAE9E,MAAM,CAAC,MAAM,aAAa,GAAG;IAC3B,EAAE,IAAI,EAAE,wBAAwB,EAAE,KAAK,EAAE,OAAO,EAAE;IAClD,EAAE,IAAI,EAAE,cAAc,EAAE,KAAK,EAAE,OAAO,EAAE;IACxC,EAAE,IAAI,EAAE,+BAA+B,EAAE,KAAK,EAAE,OAAO,EAAE;IACzD,EAAE,IAAI,EAAE,6BAA6B,EAAE,KAAK,EAAE,OAAO,EAAE;IACvD,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,OAAO,EAAE;IAClC,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,OAAO,EAAE;IAClC,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,OAAO,EAAE;IACnC,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,OAAO,EAAE;IACnC,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE;IACjC,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,OAAO,EAAE;IAClC,EAAE,IAAI,EAAE,YAAY,EAAE,KAAK,EAAE,OAAO,EAAE;IACtC,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,OAAO,EAAE;IACnC,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE;IAChC,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,OAAO,EAAE;IACnC,EAAE,IAAI,EAAE,YAAY,EAAE,KAAK,EAAE,OAAO,EAAE;IACtC,EAAE,IAAI,EAAE,YAAY,EAAE,KAAK,EAAE,OAAO,EAAE;IACtC,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE;IACjC,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE;IACjC,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,QAAQ,EAAE;IACrC,EAAE,IAAI,EAAE,qBAAqB,EAAE,KAAK,EAAE,OAAO,EAAE;IAC/C,EAAE,IAAI,EAAE,kBAAkB,EAAE,KAAK,EAAE,OAAO,EAAE;IAC5C,EAAE,IAAI,EAAE,iBAAiB,EAAE,KAAK,EAAE,OAAO,EAAE;IAC3C,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,OAAO,EAAE;IACnC,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,OAAO,EAAE;CAC1B,CAAC"}
@@ -0,0 +1,24 @@
1
+ import type { AgentProperties } from '../api/types.js';
2
+ export declare const SAFE_NAME_PATTERN: RegExp;
3
+ export interface AgentTemplate {
4
+ name: string;
5
+ description?: string;
6
+ created_at: string;
7
+ updated_at: string;
8
+ properties: Partial<AgentProperties>;
9
+ }
10
+ /**
11
+ * Returns the templates directory path and ensures it exists.
12
+ * Templates are stored at ~/.config/convoai/templates/
13
+ */
14
+ export declare function getTemplatesDir(): string;
15
+ /** List all saved templates, sorted by name. */
16
+ export declare function listTemplates(): AgentTemplate[];
17
+ /** Load a template by name. Returns null if not found or unreadable. */
18
+ export declare function loadTemplate(name: string): AgentTemplate | null;
19
+ /** Save a template to disk. Overwrites any existing file with the same name. */
20
+ export declare function saveTemplate(template: AgentTemplate): void;
21
+ /** Delete a template by name. Returns true if the file was deleted, false if it did not exist. */
22
+ export declare function deleteTemplate(name: string): boolean;
23
+ /** Check whether a template with the given name exists on disk. */
24
+ export declare function templateExists(name: string): boolean;
@@ -0,0 +1,77 @@
1
+ import { readFileSync, writeFileSync, existsSync, mkdirSync, readdirSync, unlinkSync } from 'node:fs';
2
+ import { join } from 'node:path';
3
+ import { getConfigDir } from '../config/paths.js';
4
+ // ─── Validation ─────────────────────────────────────────────────────────────
5
+ export const SAFE_NAME_PATTERN = /^[a-zA-Z0-9][a-zA-Z0-9_-]*$/;
6
+ function validateTemplateName(name) {
7
+ if (!SAFE_NAME_PATTERN.test(name) || name.includes('..')) {
8
+ throw new Error(`Invalid template name "${name}". Use only letters, numbers, hyphens, and underscores.`);
9
+ }
10
+ }
11
+ // ─── Directory ──────────────────────────────────────────────────────────────
12
+ const TEMPLATES_DIR_NAME = 'templates';
13
+ /**
14
+ * Returns the templates directory path and ensures it exists.
15
+ * Templates are stored at ~/.config/convoai/templates/
16
+ */
17
+ export function getTemplatesDir() {
18
+ const dir = join(getConfigDir(), TEMPLATES_DIR_NAME);
19
+ mkdirSync(dir, { recursive: true });
20
+ return dir;
21
+ }
22
+ // ─── CRUD Operations ────────────────────────────────────────────────────────
23
+ /** List all saved templates, sorted by name. */
24
+ export function listTemplates() {
25
+ const dir = getTemplatesDir();
26
+ const files = readdirSync(dir).filter((f) => f.endsWith('.json'));
27
+ const templates = [];
28
+ for (const file of files) {
29
+ try {
30
+ const raw = readFileSync(join(dir, file), 'utf-8');
31
+ const template = JSON.parse(raw);
32
+ templates.push(template);
33
+ }
34
+ catch {
35
+ // Skip malformed template files
36
+ }
37
+ }
38
+ return templates.sort((a, b) => a.name.localeCompare(b.name));
39
+ }
40
+ /** Load a template by name. Returns null if not found or unreadable. */
41
+ export function loadTemplate(name) {
42
+ validateTemplateName(name);
43
+ const filePath = join(getTemplatesDir(), `${name}.json`);
44
+ if (!existsSync(filePath)) {
45
+ return null;
46
+ }
47
+ try {
48
+ const raw = readFileSync(filePath, 'utf-8');
49
+ return JSON.parse(raw);
50
+ }
51
+ catch {
52
+ return null;
53
+ }
54
+ }
55
+ /** Save a template to disk. Overwrites any existing file with the same name. */
56
+ export function saveTemplate(template) {
57
+ validateTemplateName(template.name);
58
+ const filePath = join(getTemplatesDir(), `${template.name}.json`);
59
+ writeFileSync(filePath, JSON.stringify(template, null, 2) + '\n', 'utf-8');
60
+ }
61
+ /** Delete a template by name. Returns true if the file was deleted, false if it did not exist. */
62
+ export function deleteTemplate(name) {
63
+ validateTemplateName(name);
64
+ const filePath = join(getTemplatesDir(), `${name}.json`);
65
+ if (!existsSync(filePath)) {
66
+ return false;
67
+ }
68
+ unlinkSync(filePath);
69
+ return true;
70
+ }
71
+ /** Check whether a template with the given name exists on disk. */
72
+ export function templateExists(name) {
73
+ validateTemplateName(name);
74
+ const filePath = join(getTemplatesDir(), `${name}.json`);
75
+ return existsSync(filePath);
76
+ }
77
+ //# sourceMappingURL=manager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"manager.js","sourceRoot":"","sources":["../../../src/templates/manager.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ import type { AgentStatus } from '../api/types.js';
2
+ /** Colorize an agent status string for terminal display. */
3
+ export declare function colorStatus(status: AgentStatus): string;
4
+ export declare function dim(text: string): string;
5
+ export declare function bold(text: string): string;
6
+ export declare function success(text: string): string;
7
+ export declare function error(text: string): string;
8
+ export declare function warn(text: string): string;
9
+ export declare function info(text: string): string;