zilmate 1.0.1 → 1.1.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 (49) hide show
  1. package/.env.example +9 -0
  2. package/README.md +65 -1
  3. package/dist/cli/doctor.d.ts +4 -0
  4. package/dist/cli/doctor.d.ts.map +1 -1
  5. package/dist/cli/doctor.js +12 -1
  6. package/dist/cli/doctor.js.map +1 -1
  7. package/dist/cli/health.js +2 -0
  8. package/dist/cli/health.js.map +1 -1
  9. package/dist/cli/interactive.d.ts.map +1 -1
  10. package/dist/cli/interactive.js +31 -4
  11. package/dist/cli/interactive.js.map +1 -1
  12. package/dist/cli/menu.d.ts +1 -0
  13. package/dist/cli/menu.d.ts.map +1 -1
  14. package/dist/cli/menu.js +54 -0
  15. package/dist/cli/menu.js.map +1 -1
  16. package/dist/cli/setup.d.ts +7 -0
  17. package/dist/cli/setup.d.ts.map +1 -1
  18. package/dist/cli/setup.js +177 -10
  19. package/dist/cli/setup.js.map +1 -1
  20. package/dist/cli/update.d.ts +8 -0
  21. package/dist/cli/update.d.ts.map +1 -0
  22. package/dist/cli/update.js +94 -0
  23. package/dist/cli/update.js.map +1 -0
  24. package/dist/cli/voice.d.ts +5 -0
  25. package/dist/cli/voice.d.ts.map +1 -0
  26. package/dist/cli/voice.js +58 -0
  27. package/dist/cli/voice.js.map +1 -0
  28. package/dist/cli/welcome.d.ts.map +1 -1
  29. package/dist/cli/welcome.js +18 -0
  30. package/dist/cli/welcome.js.map +1 -1
  31. package/dist/config/env.d.ts +11 -0
  32. package/dist/config/env.d.ts.map +1 -1
  33. package/dist/config/env.js +18 -0
  34. package/dist/config/env.js.map +1 -1
  35. package/dist/index.js +158 -4
  36. package/dist/index.js.map +1 -1
  37. package/dist/server.d.ts +4 -0
  38. package/dist/server.d.ts.map +1 -1
  39. package/dist/server.js +12 -0
  40. package/dist/server.js.map +1 -1
  41. package/dist/voice/deepgram.d.ts +29 -0
  42. package/dist/voice/deepgram.d.ts.map +1 -0
  43. package/dist/voice/deepgram.js +207 -0
  44. package/dist/voice/deepgram.js.map +1 -0
  45. package/dist/voice/types.d.ts +43 -0
  46. package/dist/voice/types.d.ts.map +1 -0
  47. package/dist/voice/types.js +2 -0
  48. package/dist/voice/types.js.map +1 -0
  49. package/package.json +3 -1
@@ -0,0 +1,207 @@
1
+ import { randomUUID } from 'node:crypto';
2
+ import { env, requireDeepgram } from '../config/env.js';
3
+ const dynamicImport = new Function('specifier', 'return import(specifier)');
4
+ function now() {
5
+ return new Date().toISOString();
6
+ }
7
+ function normalizeVoiceMode(value) {
8
+ return value === 'agent' ? 'agent' : 'agent';
9
+ }
10
+ export function getVoiceConfig() {
11
+ return {
12
+ enabled: env.zilmateVoiceEnabled,
13
+ mode: normalizeVoiceMode(env.zilmateVoiceMode),
14
+ listenModel: env.zilmateVoiceListenModel,
15
+ listenVersion: env.zilmateVoiceListenVersion,
16
+ ttsModel: env.zilmateVoiceTtsModel,
17
+ language: env.zilmateVoiceLanguage,
18
+ languageHints: env.zilmateVoiceLanguageHints,
19
+ bargeIn: env.zilmateVoiceBargeIn,
20
+ configured: Boolean(env.deepgramApiKey),
21
+ };
22
+ }
23
+ export async function loadDeepgramClient() {
24
+ const module = await dynamicImport('@deepgram/sdk');
25
+ return new module.DeepgramClient({ apiKey: requireDeepgram() });
26
+ }
27
+ export async function checkVoiceRuntime() {
28
+ const checks = [
29
+ {
30
+ name: 'Deepgram key',
31
+ ok: Boolean(env.deepgramApiKey),
32
+ detail: env.deepgramApiKey ? 'DEEPGRAM_API_KEY is configured' : 'Missing DEEPGRAM_API_KEY',
33
+ },
34
+ {
35
+ name: 'Voice enabled',
36
+ ok: env.zilmateVoiceEnabled,
37
+ detail: env.zilmateVoiceEnabled ? 'Realtime voice mode is enabled' : 'ZILMATE_VOICE_ENABLED=false',
38
+ },
39
+ {
40
+ name: 'Listen model',
41
+ ok: env.zilmateVoiceListenVersion === 'v2' || env.zilmateVoiceListenModel.startsWith('nova-'),
42
+ detail: `${env.zilmateVoiceListenModel} (${env.zilmateVoiceListenVersion})`,
43
+ },
44
+ {
45
+ name: 'TTS model',
46
+ ok: Boolean(env.zilmateVoiceTtsModel),
47
+ detail: env.zilmateVoiceTtsModel,
48
+ },
49
+ ];
50
+ try {
51
+ await dynamicImport('@deepgram/sdk');
52
+ checks.push({ name: 'Deepgram SDK', ok: true, detail: '@deepgram/sdk is installed' });
53
+ }
54
+ catch {
55
+ checks.push({ name: 'Deepgram SDK', ok: false, detail: 'Install dependencies after updating package.json' });
56
+ }
57
+ return checks;
58
+ }
59
+ function voiceSettings() {
60
+ const config = getVoiceConfig();
61
+ const listenProvider = {
62
+ type: 'deepgram',
63
+ model: config.listenModel,
64
+ };
65
+ if (config.listenVersion)
66
+ listenProvider.version = config.listenVersion;
67
+ if (config.listenModel === 'flux-general-multi' && config.languageHints.length > 0) {
68
+ listenProvider.language_hints = config.languageHints;
69
+ }
70
+ else if (!config.listenModel.startsWith('flux-')) {
71
+ listenProvider.language = config.language;
72
+ listenProvider.smart_format = true;
73
+ }
74
+ return {
75
+ type: 'Settings',
76
+ audio: {
77
+ input: {
78
+ encoding: 'linear16',
79
+ sample_rate: 16000,
80
+ },
81
+ output: {
82
+ encoding: 'linear16',
83
+ sample_rate: 24000,
84
+ container: 'none',
85
+ },
86
+ },
87
+ agent: {
88
+ language: config.language,
89
+ listen: {
90
+ provider: listenProvider,
91
+ },
92
+ think: {
93
+ provider: {
94
+ type: 'open_ai',
95
+ model: 'gpt-4o-mini',
96
+ },
97
+ prompt: 'You are ZilMate voice transport. Keep replies short and conversational.',
98
+ },
99
+ speak: {
100
+ provider: {
101
+ type: 'deepgram',
102
+ model: config.ttsModel,
103
+ },
104
+ },
105
+ greeting: 'ZilMate is listening.',
106
+ },
107
+ };
108
+ }
109
+ function emit(events, options, event) {
110
+ events.push(event);
111
+ options.onEvent?.(event);
112
+ }
113
+ function conversationEvent(data) {
114
+ const text = typeof data.content === 'string'
115
+ ? data.content
116
+ : typeof data.text === 'string'
117
+ ? data.text
118
+ : typeof data.transcript === 'string'
119
+ ? data.transcript
120
+ : '';
121
+ if (!text)
122
+ return null;
123
+ const role = data.role === 'user' || data.role === 'assistant' ? data.role : 'unknown';
124
+ return {
125
+ type: 'transcript',
126
+ role,
127
+ text,
128
+ final: data.final === true || data.is_final === true,
129
+ timestamp: now(),
130
+ };
131
+ }
132
+ export async function startDeepgramVoiceAgentSession(options = {}) {
133
+ if (!env.zilmateVoiceEnabled) {
134
+ throw new Error('Realtime voice is disabled. Run `zilmate setup` or set ZILMATE_VOICE_ENABLED=true.');
135
+ }
136
+ const sessionId = options.sessionId || `voice_${randomUUID()}`;
137
+ const events = [];
138
+ const deepgram = await loadDeepgramClient();
139
+ const connection = await deepgram.agent.v1.connect();
140
+ connection.on('message', async (data) => {
141
+ if (data && typeof data === 'object' && 'type' in data) {
142
+ const record = data;
143
+ if (record.type === 'Welcome') {
144
+ emit(events, options, { type: 'status', label: 'Deepgram connected', timestamp: now() });
145
+ connection.sendSettings(voiceSettings());
146
+ return;
147
+ }
148
+ if (record.type === 'ConversationText') {
149
+ const event = conversationEvent(record);
150
+ if (event)
151
+ emit(events, options, event);
152
+ return;
153
+ }
154
+ if (record.type === 'UserStartedSpeaking') {
155
+ emit(events, options, {
156
+ type: 'status',
157
+ label: 'User started speaking',
158
+ ...(env.zilmateVoiceBargeIn ? { detail: 'barge-in enabled' } : {}),
159
+ timestamp: now(),
160
+ });
161
+ return;
162
+ }
163
+ if (record.type === 'AgentAudioDone') {
164
+ emit(events, options, { type: 'status', label: 'Agent audio done', timestamp: now() });
165
+ return;
166
+ }
167
+ emit(events, options, { type: 'status', label: String(record.type), timestamp: now() });
168
+ return;
169
+ }
170
+ if (data instanceof Uint8Array) {
171
+ emit(events, options, { type: 'audio', bytes: data.byteLength, timestamp: now() });
172
+ }
173
+ });
174
+ connection.on('open', () => {
175
+ emit(events, options, { type: 'status', label: 'Voice socket opened', timestamp: now() });
176
+ });
177
+ connection.on('close', () => {
178
+ emit(events, options, { type: 'status', label: 'Voice socket closed', timestamp: now() });
179
+ });
180
+ connection.on('error', (error) => {
181
+ emit(events, options, { type: 'error', message: error instanceof Error ? error.message : String(error), timestamp: now() });
182
+ });
183
+ connection.connect();
184
+ await connection.waitForOpen();
185
+ const keepAlive = setInterval(() => connection.sendKeepAlive({ type: 'KeepAlive' }), 5000);
186
+ try {
187
+ if (options.audio) {
188
+ for await (const chunk of options.audio) {
189
+ connection.sendMedia(chunk);
190
+ }
191
+ connection.finish?.();
192
+ }
193
+ else {
194
+ emit(events, options, {
195
+ type: 'status',
196
+ label: 'No audio stream attached',
197
+ detail: 'Use the SDK with a live PCM stream, or use browser voice where getUserMedia supplies audio.',
198
+ timestamp: now(),
199
+ });
200
+ }
201
+ }
202
+ finally {
203
+ clearInterval(keepAlive);
204
+ }
205
+ return { sessionId, events };
206
+ }
207
+ //# sourceMappingURL=deepgram.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"deepgram.js","sourceRoot":"","sources":["../../src/voice/deepgram.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,43 @@
1
+ import type { ProgressEvent } from '../runtime/progress.js';
2
+ export type ZilMateVoiceEvent = {
3
+ type: 'status';
4
+ label: string;
5
+ detail?: string;
6
+ timestamp: string;
7
+ } | {
8
+ type: 'transcript';
9
+ role: 'user' | 'assistant' | 'unknown';
10
+ text: string;
11
+ final?: boolean;
12
+ timestamp: string;
13
+ } | {
14
+ type: 'audio';
15
+ bytes: number;
16
+ timestamp: string;
17
+ } | {
18
+ type: 'error';
19
+ message: string;
20
+ timestamp: string;
21
+ };
22
+ export type ZilMateVoiceConfig = {
23
+ enabled: boolean;
24
+ mode: 'agent';
25
+ listenModel: string;
26
+ listenVersion: string;
27
+ ttsModel: string;
28
+ language: string;
29
+ languageHints: string[];
30
+ bargeIn: boolean;
31
+ configured: boolean;
32
+ };
33
+ export type ZilMateVoiceSessionOptions = {
34
+ sessionId?: string;
35
+ audio?: AsyncIterable<Buffer | Uint8Array>;
36
+ onEvent?: (event: ZilMateVoiceEvent) => void;
37
+ onProgress?: (event: ProgressEvent) => void;
38
+ };
39
+ export type ZilMateVoiceSessionResult = {
40
+ sessionId: string;
41
+ events: ZilMateVoiceEvent[];
42
+ };
43
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/voice/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAE5D,MAAM,MAAM,iBAAiB,GACzB;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,GACrE;IAAE,IAAI,EAAE,YAAY,CAAC;IAAC,IAAI,EAAE,MAAM,GAAG,WAAW,GAAG,SAAS,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,OAAO,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,GAChH;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,GACnD;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,CAAC;AAE1D,MAAM,MAAM,kBAAkB,GAAG;IAC/B,OAAO,EAAE,OAAO,CAAC;IACjB,IAAI,EAAE,OAAO,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,MAAM,CAAC;IACtB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,OAAO,EAAE,OAAO,CAAC;IACjB,UAAU,EAAE,OAAO,CAAC;CACrB,CAAC;AAEF,MAAM,MAAM,0BAA0B,GAAG;IACvC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,aAAa,CAAC,MAAM,GAAG,UAAU,CAAC,CAAC;IAC3C,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,iBAAiB,KAAK,IAAI,CAAC;IAC7C,UAAU,CAAC,EAAE,CAAC,KAAK,EAAE,aAAa,KAAK,IAAI,CAAC;CAC7C,CAAC;AAEF,MAAM,MAAM,yBAAyB,GAAG;IACtC,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,iBAAiB,EAAE,CAAC;CAC7B,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/voice/types.ts"],"names":[],"mappings":""}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "zilmate",
3
- "version": "1.0.1",
3
+ "version": "1.1.0",
4
4
  "description": "ZilMate CLI multi-agent assistant for ZiloShift workflows.",
5
5
  "type": "module",
6
6
  "main": "dist/server.js",
@@ -50,11 +50,13 @@
50
50
  "dependencies": {
51
51
  "@composio/core": "^0.10.0",
52
52
  "@composio/vercel": "^0.9.2",
53
+ "@deepgram/sdk": "^4.11.2",
53
54
  "@tavily/core": "^0.7.5",
54
55
  "@upstash/redis": "^1.38.0",
55
56
  "ai": "^6.0.198",
56
57
  "chalk": "^5.6.2",
57
58
  "commander": "^15.0.0",
59
+ "cross-fetch": "^4.1.0",
58
60
  "dotenv": "^17.4.2",
59
61
  "marked": "^15.0.12",
60
62
  "marked-terminal": "^7.3.0",