zilmate 1.0.0 → 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.
- package/.env.example +14 -0
- package/README.md +146 -4
- package/dist/agents/automation-planner.agent.d.ts +103 -0
- package/dist/agents/automation-planner.agent.d.ts.map +1 -0
- package/dist/agents/automation-planner.agent.js +28 -0
- package/dist/agents/automation-planner.agent.js.map +1 -0
- package/dist/agents/chat.agent.d.ts +8 -0
- package/dist/agents/chat.agent.d.ts.map +1 -1
- package/dist/agents/chat.agent.js +5 -2
- package/dist/agents/chat.agent.js.map +1 -1
- package/dist/agents/developer-helper.agent.d.ts +94 -0
- package/dist/agents/developer-helper.agent.d.ts.map +1 -0
- package/dist/agents/developer-helper.agent.js +34 -0
- package/dist/agents/developer-helper.agent.js.map +1 -0
- package/dist/agents/docs-research.agent.d.ts +8 -0
- package/dist/agents/docs-research.agent.d.ts.map +1 -1
- package/dist/agents/docs-research.agent.js +5 -2
- package/dist/agents/docs-research.agent.js.map +1 -1
- package/dist/agents/image.agent.d.ts.map +1 -1
- package/dist/agents/image.agent.js +2 -1
- package/dist/agents/image.agent.js.map +1 -1
- package/dist/agents/manager.d.ts +36 -0
- package/dist/agents/manager.d.ts.map +1 -1
- package/dist/agents/manager.js +39 -1
- package/dist/agents/manager.js.map +1 -1
- package/dist/agents/personal-assistant.agent.d.ts +30 -0
- package/dist/agents/personal-assistant.agent.d.ts.map +1 -0
- package/dist/agents/personal-assistant.agent.js +25 -0
- package/dist/agents/personal-assistant.agent.js.map +1 -0
- package/dist/agents/post.agent.d.ts.map +1 -1
- package/dist/agents/post.agent.js +2 -1
- package/dist/agents/post.agent.js.map +1 -1
- package/dist/agents/quick-help.agent.d.ts +8 -0
- package/dist/agents/quick-help.agent.d.ts.map +1 -1
- package/dist/agents/quick-help.agent.js +5 -2
- package/dist/agents/quick-help.agent.js.map +1 -1
- package/dist/cli/apps.d.ts +16 -0
- package/dist/cli/apps.d.ts.map +1 -0
- package/dist/cli/apps.js +19 -0
- package/dist/cli/apps.js.map +1 -0
- package/dist/cli/confirm.d.ts.map +1 -1
- package/dist/cli/confirm.js +20 -2
- package/dist/cli/confirm.js.map +1 -1
- package/dist/cli/doctor.d.ts +12 -0
- package/dist/cli/doctor.d.ts.map +1 -1
- package/dist/cli/doctor.js +35 -1
- package/dist/cli/doctor.js.map +1 -1
- package/dist/cli/format.d.ts +5 -0
- package/dist/cli/format.d.ts.map +1 -1
- package/dist/cli/format.js +96 -0
- package/dist/cli/format.js.map +1 -1
- package/dist/cli/health.d.ts +3 -0
- package/dist/cli/health.d.ts.map +1 -0
- package/dist/cli/health.js +25 -0
- package/dist/cli/health.js.map +1 -0
- package/dist/cli/interactive.d.ts.map +1 -1
- package/dist/cli/interactive.js +33 -6
- package/dist/cli/interactive.js.map +1 -1
- package/dist/cli/jobs.d.ts +19 -0
- package/dist/cli/jobs.d.ts.map +1 -0
- package/dist/cli/jobs.js +68 -0
- package/dist/cli/jobs.js.map +1 -0
- package/dist/cli/memory.d.ts +3 -0
- package/dist/cli/memory.d.ts.map +1 -0
- package/dist/cli/memory.js +14 -0
- package/dist/cli/memory.js.map +1 -0
- package/dist/cli/menu.d.ts +3 -0
- package/dist/cli/menu.d.ts.map +1 -0
- package/dist/cli/menu.js +129 -0
- package/dist/cli/menu.js.map +1 -0
- package/dist/cli/setup.d.ts +12 -0
- package/dist/cli/setup.d.ts.map +1 -1
- package/dist/cli/setup.js +263 -11
- package/dist/cli/setup.js.map +1 -1
- package/dist/cli/triggers.d.ts.map +1 -1
- package/dist/cli/triggers.js +11 -0
- package/dist/cli/triggers.js.map +1 -1
- package/dist/cli/update.d.ts +8 -0
- package/dist/cli/update.d.ts.map +1 -0
- package/dist/cli/update.js +94 -0
- package/dist/cli/update.js.map +1 -0
- package/dist/cli/voice.d.ts +5 -0
- package/dist/cli/voice.d.ts.map +1 -0
- package/dist/cli/voice.js +58 -0
- package/dist/cli/voice.js.map +1 -0
- package/dist/cli/welcome.d.ts +2 -0
- package/dist/cli/welcome.d.ts.map +1 -0
- package/dist/cli/welcome.js +42 -0
- package/dist/cli/welcome.js.map +1 -0
- package/dist/config/env.d.ts +17 -0
- package/dist/config/env.d.ts.map +1 -1
- package/dist/config/env.js +26 -0
- package/dist/config/env.js.map +1 -1
- package/dist/index.js +335 -19
- package/dist/index.js.map +1 -1
- package/dist/jobs/qstash.d.ts +3 -0
- package/dist/jobs/qstash.d.ts.map +1 -0
- package/dist/jobs/qstash.js +37 -0
- package/dist/jobs/qstash.js.map +1 -0
- package/dist/jobs/runner.d.ts +14 -0
- package/dist/jobs/runner.d.ts.map +1 -0
- package/dist/jobs/runner.js +101 -0
- package/dist/jobs/runner.js.map +1 -0
- package/dist/jobs/schedule.d.ts +5 -0
- package/dist/jobs/schedule.d.ts.map +1 -0
- package/dist/jobs/schedule.js +72 -0
- package/dist/jobs/schedule.js.map +1 -0
- package/dist/jobs/store.d.ts +9 -0
- package/dist/jobs/store.d.ts.map +1 -0
- package/dist/jobs/store.js +133 -0
- package/dist/jobs/store.js.map +1 -0
- package/dist/jobs/types.d.ts +54 -0
- package/dist/jobs/types.d.ts.map +1 -0
- package/dist/jobs/types.js +2 -0
- package/dist/jobs/types.js.map +1 -0
- package/dist/jobs/workflows.d.ts +4 -0
- package/dist/jobs/workflows.d.ts.map +1 -0
- package/dist/jobs/workflows.js +50 -0
- package/dist/jobs/workflows.js.map +1 -0
- package/dist/safety/limits.js +2 -2
- package/dist/safety/limits.js.map +1 -1
- package/dist/server.d.ts +17 -0
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +23 -0
- package/dist/server.js.map +1 -1
- package/dist/tools/composio.tool.d.ts.map +1 -1
- package/dist/tools/composio.tool.js +21 -5
- package/dist/tools/composio.tool.js.map +1 -1
- package/dist/tools/jobs.tool.d.ts +22 -0
- package/dist/tools/jobs.tool.d.ts.map +1 -0
- package/dist/tools/jobs.tool.js +105 -0
- package/dist/tools/jobs.tool.js.map +1 -0
- package/dist/tools/time.tool.d.ts +11 -0
- package/dist/tools/time.tool.d.ts.map +1 -0
- package/dist/tools/time.tool.js +35 -0
- package/dist/tools/time.tool.js.map +1 -0
- package/dist/voice/deepgram.d.ts +29 -0
- package/dist/voice/deepgram.d.ts.map +1 -0
- package/dist/voice/deepgram.js +207 -0
- package/dist/voice/deepgram.js.map +1 -0
- package/dist/voice/types.d.ts +43 -0
- package/dist/voice/types.d.ts.map +1 -0
- package/dist/voice/types.js +2 -0
- package/dist/voice/types.js.map +1 -0
- package/package.json +6 -2
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import chalk from 'chalk';
|
|
2
|
+
import { runManager } from '../agents/manager.js';
|
|
3
|
+
import { printPanel, printProgress, printTable } from './format.js';
|
|
4
|
+
import { checkVoiceRuntime, getVoiceConfig, startDeepgramVoiceAgentSession } from '../voice/deepgram.js';
|
|
5
|
+
function yesNo(value) {
|
|
6
|
+
return value ? 'yes' : 'no';
|
|
7
|
+
}
|
|
8
|
+
export function printVoiceConfig() {
|
|
9
|
+
const config = getVoiceConfig();
|
|
10
|
+
printPanel('Realtime voice', [
|
|
11
|
+
['Enabled', yesNo(config.enabled)],
|
|
12
|
+
['Configured', yesNo(config.configured)],
|
|
13
|
+
['Mode', config.mode],
|
|
14
|
+
['Listen model', `${config.listenModel} (${config.listenVersion})`],
|
|
15
|
+
['TTS model', config.ttsModel],
|
|
16
|
+
['Language', config.language],
|
|
17
|
+
['Language hints', config.languageHints.join(', ') || '-'],
|
|
18
|
+
['Barge-in', yesNo(config.bargeIn)],
|
|
19
|
+
]);
|
|
20
|
+
}
|
|
21
|
+
export async function runVoiceDoctor() {
|
|
22
|
+
const checks = await checkVoiceRuntime();
|
|
23
|
+
printTable(['Check', 'Status', 'Detail'], checks.map((check) => [
|
|
24
|
+
check.name,
|
|
25
|
+
check.ok ? 'pass' : 'warn',
|
|
26
|
+
check.detail,
|
|
27
|
+
]));
|
|
28
|
+
}
|
|
29
|
+
export async function runVoiceTurn(message, sessionId = 'voice-default') {
|
|
30
|
+
printProgress({ type: 'thinking', label: 'Voice brain turn', detail: 'Routing transcript through ZilMate manager' });
|
|
31
|
+
const text = await runManager(message, { sessionId, progress: printProgress });
|
|
32
|
+
console.log(chalk.bold.cyan('\nZilMate voice reply'));
|
|
33
|
+
console.log(text);
|
|
34
|
+
}
|
|
35
|
+
export async function runVoiceAgentProbe() {
|
|
36
|
+
const events = [];
|
|
37
|
+
await startDeepgramVoiceAgentSession({
|
|
38
|
+
onEvent: (event) => {
|
|
39
|
+
events.push(event);
|
|
40
|
+
if (event.type === 'error') {
|
|
41
|
+
console.log(chalk.red(`! ${event.message}`));
|
|
42
|
+
}
|
|
43
|
+
else if (event.type === 'status') {
|
|
44
|
+
console.log(chalk.gray(`${event.label}${event.detail ? ` — ${event.detail}` : ''}`));
|
|
45
|
+
}
|
|
46
|
+
else if (event.type === 'transcript') {
|
|
47
|
+
console.log(`${chalk.cyan(event.role)} ${event.text}`);
|
|
48
|
+
}
|
|
49
|
+
else {
|
|
50
|
+
console.log(chalk.gray(`audio ${event.bytes} bytes`));
|
|
51
|
+
}
|
|
52
|
+
},
|
|
53
|
+
});
|
|
54
|
+
if (events.length === 0) {
|
|
55
|
+
console.log(chalk.yellow('No voice events received.'));
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
//# sourceMappingURL=voice.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"voice.js","sourceRoot":"","sources":["../../src/cli/voice.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"welcome.d.ts","sourceRoot":"","sources":["../../src/cli/welcome.ts"],"names":[],"mappings":"AAIA,wBAAsB,kBAAkB,kBAqCvC"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { getResolvedConfigSummary } from './doctor.js';
|
|
2
|
+
import { printPanel, printTable, printZilMateBanner, statusText } from './format.js';
|
|
3
|
+
import { compareVersions, latestNpmVersion } from './update.js';
|
|
4
|
+
export async function printWelcomeScreen() {
|
|
5
|
+
const config = await getResolvedConfigSummary();
|
|
6
|
+
printZilMateBanner(`v${config.version ?? 'unknown'}`);
|
|
7
|
+
try {
|
|
8
|
+
const latest = await latestNpmVersion();
|
|
9
|
+
if (config.version && compareVersions(config.version, latest) < 0) {
|
|
10
|
+
printPanel('Update available', [
|
|
11
|
+
['Current', config.version],
|
|
12
|
+
['Latest', latest],
|
|
13
|
+
['Run', 'zilmate update'],
|
|
14
|
+
]);
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
catch {
|
|
18
|
+
// The launcher should stay useful offline or when npm is blocked.
|
|
19
|
+
}
|
|
20
|
+
printPanel('Configured Features', [
|
|
21
|
+
['Gateway', statusText(config.auth.aiGateway, 'ready')],
|
|
22
|
+
['Composio', statusText(config.auth.composio && config.auth.zilmateUserId, 'ready')],
|
|
23
|
+
['Tavily', statusText(config.auth.tavily, 'ready')],
|
|
24
|
+
['Redis', statusText(config.auth.redisUrl && config.auth.redisToken, 'ready')],
|
|
25
|
+
['Jobs', statusText(config.auth.jobs, 'enabled')],
|
|
26
|
+
['QStash', statusText(config.auth.qstash && config.auth.jobWebhookUrl, 'ready')],
|
|
27
|
+
['Trigger workflows', statusText(config.auth.triggerWorkflows, 'enabled')],
|
|
28
|
+
['Voice', statusText(config.auth.voice && config.auth.deepgram, 'ready')],
|
|
29
|
+
]);
|
|
30
|
+
printTable(['Command', 'What it does'], [
|
|
31
|
+
['zilmate talk', 'Start the interactive assistant'],
|
|
32
|
+
['zilmate menu', 'Open the guided main menu'],
|
|
33
|
+
['zilmate', 'Open status plus the guided launcher'],
|
|
34
|
+
['zilmate update', 'Update CLI and SDK from npm'],
|
|
35
|
+
['zilmate setup', 'Configure required and optional features'],
|
|
36
|
+
['zilmate doctor', 'Check health and missing config'],
|
|
37
|
+
['zilmate jobs', 'View the job dashboard'],
|
|
38
|
+
['zilmate voice doctor', 'Check realtime voice readiness'],
|
|
39
|
+
['zilmate apps status', 'Check Composio app connections'],
|
|
40
|
+
]);
|
|
41
|
+
}
|
|
42
|
+
//# sourceMappingURL=welcome.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"welcome.js","sourceRoot":"","sources":["../../src/cli/welcome.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,wBAAwB,EAAE,MAAM,aAAa,CAAC;AACvD,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,kBAAkB,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACrF,OAAO,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAEhE,MAAM,CAAC,KAAK,UAAU,kBAAkB;IACtC,MAAM,MAAM,GAAG,MAAM,wBAAwB,EAAE,CAAC;IAChD,kBAAkB,CAAC,IAAI,MAAM,CAAC,OAAO,IAAI,SAAS,EAAE,CAAC,CAAC;IACtD,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,gBAAgB,EAAE,CAAC;QACxC,IAAI,MAAM,CAAC,OAAO,IAAI,eAAe,CAAC,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC;YAClE,UAAU,CAAC,kBAAkB,EAAE;gBAC7B,CAAC,SAAS,EAAE,MAAM,CAAC,OAAO,CAAC;gBAC3B,CAAC,QAAQ,EAAE,MAAM,CAAC;gBAClB,CAAC,KAAK,EAAE,gBAAgB,CAAC;aAC1B,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,kEAAkE;IACpE,CAAC;IACD,UAAU,CAAC,qBAAqB,EAAE;QAChC,CAAC,SAAS,EAAE,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;QACvD,CAAC,UAAU,EAAE,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,IAAI,MAAM,CAAC,IAAI,CAAC,aAAa,EAAE,OAAO,CAAC,CAAC;QACpF,CAAC,QAAQ,EAAE,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QACnD,CAAC,OAAO,EAAE,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,IAAI,MAAM,CAAC,IAAI,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;QAC9E,CAAC,MAAM,EAAE,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;QACjD,CAAC,QAAQ,EAAE,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,IAAI,CAAC,aAAa,EAAE,OAAO,CAAC,CAAC;QAChF,CAAC,mBAAmB,EAAE,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,gBAAgB,EAAE,SAAS,CAAC,CAAC;QAC1E,CAAC,OAAO,EAAE,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,IAAI,MAAM,CAAC,IAAI,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;KAC1E,CAAC,CAAC;IAEH,UAAU,CAAC,CAAC,SAAS,EAAE,cAAc,CAAC,EAAE;QACtC,CAAC,cAAc,EAAE,iCAAiC,CAAC;QACnD,CAAC,cAAc,EAAE,2BAA2B,CAAC;QAC7C,CAAC,SAAS,EAAE,sCAAsC,CAAC;QACnD,CAAC,gBAAgB,EAAE,6BAA6B,CAAC;QACjD,CAAC,eAAe,EAAE,0CAA0C,CAAC;QAC7D,CAAC,gBAAgB,EAAE,iCAAiC,CAAC;QACrD,CAAC,cAAc,EAAE,wBAAwB,CAAC;QAC1C,CAAC,sBAAsB,EAAE,gCAAgC,CAAC;QAC1D,CAAC,qBAAqB,EAAE,gCAAgC,CAAC;KAC1D,CAAC,CAAC;AACL,CAAC"}
|
package/dist/config/env.d.ts
CHANGED
|
@@ -8,6 +8,20 @@ export type Env = {
|
|
|
8
8
|
zilmateUserId: string | undefined;
|
|
9
9
|
upstashRedisRestUrl: string | undefined;
|
|
10
10
|
upstashRedisRestToken: string | undefined;
|
|
11
|
+
zilmateJobsEnabled: boolean;
|
|
12
|
+
upstashQstashToken: string | undefined;
|
|
13
|
+
zilmatePublicJobWebhookUrl: string | undefined;
|
|
14
|
+
zilmateJobWebhookSecret: string | undefined;
|
|
15
|
+
zilmateTriggerWorkflowsEnabled: boolean;
|
|
16
|
+
deepgramApiKey: string | undefined;
|
|
17
|
+
zilmateVoiceEnabled: boolean;
|
|
18
|
+
zilmateVoiceMode: string;
|
|
19
|
+
zilmateVoiceListenModel: string;
|
|
20
|
+
zilmateVoiceListenVersion: string;
|
|
21
|
+
zilmateVoiceTtsModel: string;
|
|
22
|
+
zilmateVoiceLanguage: string;
|
|
23
|
+
zilmateVoiceLanguageHints: string[];
|
|
24
|
+
zilmateVoiceBargeIn: boolean;
|
|
11
25
|
managerModel: string;
|
|
12
26
|
helpModel: string | undefined;
|
|
13
27
|
postModel: string | undefined;
|
|
@@ -23,4 +37,7 @@ export declare function requireTavily(): string;
|
|
|
23
37
|
export declare function hasComposio(): boolean;
|
|
24
38
|
export declare function requireComposio(): void;
|
|
25
39
|
export declare function hasRedis(): boolean;
|
|
40
|
+
export declare function hasQStash(): boolean;
|
|
41
|
+
export declare function hasDeepgram(): boolean;
|
|
42
|
+
export declare function requireDeepgram(): string;
|
|
26
43
|
//# sourceMappingURL=env.d.ts.map
|
package/dist/config/env.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"env.d.ts","sourceRoot":"","sources":["../../src/config/env.ts"],"names":[],"mappings":"AAAA,OAAO,eAAe,CAAC;AAQvB,MAAM,MAAM,aAAa,GAAG,QAAQ,GAAG,QAAQ,CAAC;AAShD,MAAM,MAAM,GAAG,GAAG;IAChB,eAAe,EAAE,MAAM,GAAG,SAAS,CAAC;IACpC,eAAe,EAAE,MAAM,GAAG,SAAS,CAAC;IACpC,YAAY,EAAE,MAAM,GAAG,SAAS,CAAC;IACjC,cAAc,EAAE,MAAM,GAAG,SAAS,CAAC;IACnC,aAAa,EAAE,MAAM,GAAG,SAAS,CAAC;IAClC,mBAAmB,EAAE,MAAM,GAAG,SAAS,CAAC;IACxC,qBAAqB,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1C,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,GAAG,SAAS,CAAC;IAC9B,SAAS,EAAE,MAAM,GAAG,SAAS,CAAC;IAC9B,oBAAoB,EAAE,aAAa,CAAC;IACpC,gBAAgB,EAAE,MAAM,CAAC;IACzB,gBAAgB,EAAE,MAAM,CAAC;IACzB,UAAU,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF,eAAO,MAAM,GAAG,EAAE,
|
|
1
|
+
{"version":3,"file":"env.d.ts","sourceRoot":"","sources":["../../src/config/env.ts"],"names":[],"mappings":"AAAA,OAAO,eAAe,CAAC;AAQvB,MAAM,MAAM,aAAa,GAAG,QAAQ,GAAG,QAAQ,CAAC;AAShD,MAAM,MAAM,GAAG,GAAG;IAChB,eAAe,EAAE,MAAM,GAAG,SAAS,CAAC;IACpC,eAAe,EAAE,MAAM,GAAG,SAAS,CAAC;IACpC,YAAY,EAAE,MAAM,GAAG,SAAS,CAAC;IACjC,cAAc,EAAE,MAAM,GAAG,SAAS,CAAC;IACnC,aAAa,EAAE,MAAM,GAAG,SAAS,CAAC;IAClC,mBAAmB,EAAE,MAAM,GAAG,SAAS,CAAC;IACxC,qBAAqB,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1C,kBAAkB,EAAE,OAAO,CAAC;IAC5B,kBAAkB,EAAE,MAAM,GAAG,SAAS,CAAC;IACvC,0BAA0B,EAAE,MAAM,GAAG,SAAS,CAAC;IAC/C,uBAAuB,EAAE,MAAM,GAAG,SAAS,CAAC;IAC5C,8BAA8B,EAAE,OAAO,CAAC;IACxC,cAAc,EAAE,MAAM,GAAG,SAAS,CAAC;IACnC,mBAAmB,EAAE,OAAO,CAAC;IAC7B,gBAAgB,EAAE,MAAM,CAAC;IACzB,uBAAuB,EAAE,MAAM,CAAC;IAChC,yBAAyB,EAAE,MAAM,CAAC;IAClC,oBAAoB,EAAE,MAAM,CAAC;IAC7B,oBAAoB,EAAE,MAAM,CAAC;IAC7B,yBAAyB,EAAE,MAAM,EAAE,CAAC;IACpC,mBAAmB,EAAE,OAAO,CAAC;IAC7B,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,GAAG,SAAS,CAAC;IAC9B,SAAS,EAAE,MAAM,GAAG,SAAS,CAAC;IAC9B,oBAAoB,EAAE,aAAa,CAAC;IACpC,gBAAgB,EAAE,MAAM,CAAC;IACzB,gBAAgB,EAAE,MAAM,CAAC;IACzB,UAAU,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF,eAAO,MAAM,GAAG,EAAE,GA6BjB,CAAC;AAEF,wBAAgB,cAAc,YAE7B;AAED,wBAAgB,kBAAkB,SAIjC;AAED,wBAAgB,aAAa,WAK5B;AAED,wBAAgB,WAAW,YAE1B;AAED,wBAAgB,eAAe,SAO9B;AAED,wBAAgB,QAAQ,YAEvB;AAED,wBAAgB,SAAS,YAExB;AAED,wBAAgB,WAAW,YAE1B;AAED,wBAAgB,eAAe,WAK9B"}
|
package/dist/config/env.js
CHANGED
|
@@ -20,6 +20,20 @@ export const env = {
|
|
|
20
20
|
zilmateUserId: process.env.ZILMATE_USER_ID,
|
|
21
21
|
upstashRedisRestUrl: process.env.UPSTASH_REDIS_REST_URL,
|
|
22
22
|
upstashRedisRestToken: process.env.UPSTASH_REDIS_REST_TOKEN,
|
|
23
|
+
zilmateJobsEnabled: process.env.ZILMATE_JOBS_ENABLED === 'true',
|
|
24
|
+
upstashQstashToken: process.env.UPSTASH_QSTASH_TOKEN,
|
|
25
|
+
zilmatePublicJobWebhookUrl: process.env.ZILMATE_PUBLIC_JOB_WEBHOOK_URL,
|
|
26
|
+
zilmateJobWebhookSecret: process.env.ZILMATE_JOB_WEBHOOK_SECRET,
|
|
27
|
+
zilmateTriggerWorkflowsEnabled: process.env.ZILMATE_TRIGGER_WORKFLOWS_ENABLED === 'true',
|
|
28
|
+
deepgramApiKey: process.env.DEEPGRAM_API_KEY,
|
|
29
|
+
zilmateVoiceEnabled: process.env.ZILMATE_VOICE_ENABLED === 'true',
|
|
30
|
+
zilmateVoiceMode: process.env.ZILMATE_VOICE_MODE || 'agent',
|
|
31
|
+
zilmateVoiceListenModel: process.env.ZILMATE_VOICE_LISTEN_MODEL || 'flux-general-en',
|
|
32
|
+
zilmateVoiceListenVersion: process.env.ZILMATE_VOICE_LISTEN_VERSION || 'v2',
|
|
33
|
+
zilmateVoiceTtsModel: process.env.ZILMATE_VOICE_TTS_MODEL || 'aura-2-thalia-en',
|
|
34
|
+
zilmateVoiceLanguage: process.env.ZILMATE_VOICE_LANGUAGE || 'en',
|
|
35
|
+
zilmateVoiceLanguageHints: (process.env.ZILMATE_VOICE_LANGUAGE_HINTS || '').split(',').map((item) => item.trim()).filter(Boolean),
|
|
36
|
+
zilmateVoiceBargeIn: process.env.ZILMATE_VOICE_BARGE_IN !== 'false',
|
|
23
37
|
managerModel: process.env.ZILO_MANAGER_MODEL || 'minimax/minimax-m3',
|
|
24
38
|
helpModel: process.env.ZILO_HELP_MODEL || undefined,
|
|
25
39
|
postModel: process.env.ZILO_POST_MODEL || undefined,
|
|
@@ -56,4 +70,16 @@ export function requireComposio() {
|
|
|
56
70
|
export function hasRedis() {
|
|
57
71
|
return Boolean(env.upstashRedisRestUrl && env.upstashRedisRestToken);
|
|
58
72
|
}
|
|
73
|
+
export function hasQStash() {
|
|
74
|
+
return Boolean(env.upstashQstashToken && env.zilmatePublicJobWebhookUrl);
|
|
75
|
+
}
|
|
76
|
+
export function hasDeepgram() {
|
|
77
|
+
return Boolean(env.deepgramApiKey);
|
|
78
|
+
}
|
|
79
|
+
export function requireDeepgram() {
|
|
80
|
+
if (!env.deepgramApiKey) {
|
|
81
|
+
throw new Error('Missing DEEPGRAM_API_KEY. Run `zilmate setup` to enable realtime voice mode.');
|
|
82
|
+
}
|
|
83
|
+
return env.deepgramApiKey;
|
|
84
|
+
}
|
|
59
85
|
//# sourceMappingURL=env.js.map
|
package/dist/config/env.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"env.js","sourceRoot":"","sources":["../../src/config/env.ts"],"names":[],"mappings":"AAAA,OAAO,eAAe,CAAC;AACvB,OAAO,EAAE,MAAM,IAAI,UAAU,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAErC,IAAI,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;IAC7B,UAAU,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,CAAC;AACtD,CAAC;AAID,SAAS,sBAAsB,CAAC,KAAyB;IACvD,MAAM,QAAQ,GAAG,CAAC,KAAK,IAAI,QAAQ,CAAC,CAAC,WAAW,EAAE,CAAC,IAAI,EAAE,CAAC;IAC1D,IAAI,QAAQ,KAAK,SAAS,IAAI,QAAQ,KAAK,WAAW,IAAI,QAAQ,KAAK,aAAa;QAAE,OAAO,QAAQ,CAAC;IACtG,IAAI,QAAQ,KAAK,QAAQ,IAAI,QAAQ,KAAK,aAAa,IAAI,QAAQ,KAAK,QAAQ;QAAE,OAAO,QAAQ,CAAC;IAClG,OAAO,QAAQ,CAAC;AAClB,CAAC;
|
|
1
|
+
{"version":3,"file":"env.js","sourceRoot":"","sources":["../../src/config/env.ts"],"names":[],"mappings":"AAAA,OAAO,eAAe,CAAC;AACvB,OAAO,EAAE,MAAM,IAAI,UAAU,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAErC,IAAI,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;IAC7B,UAAU,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,CAAC;AACtD,CAAC;AAID,SAAS,sBAAsB,CAAC,KAAyB;IACvD,MAAM,QAAQ,GAAG,CAAC,KAAK,IAAI,QAAQ,CAAC,CAAC,WAAW,EAAE,CAAC,IAAI,EAAE,CAAC;IAC1D,IAAI,QAAQ,KAAK,SAAS,IAAI,QAAQ,KAAK,WAAW,IAAI,QAAQ,KAAK,aAAa;QAAE,OAAO,QAAQ,CAAC;IACtG,IAAI,QAAQ,KAAK,QAAQ,IAAI,QAAQ,KAAK,aAAa,IAAI,QAAQ,KAAK,QAAQ;QAAE,OAAO,QAAQ,CAAC;IAClG,OAAO,QAAQ,CAAC;AAClB,CAAC;AAiCD,MAAM,CAAC,MAAM,GAAG,GAAQ;IACtB,eAAe,EAAE,OAAO,CAAC,GAAG,CAAC,kBAAkB;IAC/C,eAAe,EAAE,OAAO,CAAC,GAAG,CAAC,iBAAiB;IAC9C,YAAY,EAAE,OAAO,CAAC,GAAG,CAAC,cAAc;IACxC,cAAc,EAAE,OAAO,CAAC,GAAG,CAAC,gBAAgB;IAC5C,aAAa,EAAE,OAAO,CAAC,GAAG,CAAC,eAAe;IAC1C,mBAAmB,EAAE,OAAO,CAAC,GAAG,CAAC,sBAAsB;IACvD,qBAAqB,EAAE,OAAO,CAAC,GAAG,CAAC,wBAAwB;IAC3D,kBAAkB,EAAE,OAAO,CAAC,GAAG,CAAC,oBAAoB,KAAK,MAAM;IAC/D,kBAAkB,EAAE,OAAO,CAAC,GAAG,CAAC,oBAAoB;IACpD,0BAA0B,EAAE,OAAO,CAAC,GAAG,CAAC,8BAA8B;IACtE,uBAAuB,EAAE,OAAO,CAAC,GAAG,CAAC,0BAA0B;IAC/D,8BAA8B,EAAE,OAAO,CAAC,GAAG,CAAC,iCAAiC,KAAK,MAAM;IACxF,cAAc,EAAE,OAAO,CAAC,GAAG,CAAC,gBAAgB;IAC5C,mBAAmB,EAAE,OAAO,CAAC,GAAG,CAAC,qBAAqB,KAAK,MAAM;IACjE,gBAAgB,EAAE,OAAO,CAAC,GAAG,CAAC,kBAAkB,IAAI,OAAO;IAC3D,uBAAuB,EAAE,OAAO,CAAC,GAAG,CAAC,0BAA0B,IAAI,iBAAiB;IACpF,yBAAyB,EAAE,OAAO,CAAC,GAAG,CAAC,4BAA4B,IAAI,IAAI;IAC3E,oBAAoB,EAAE,OAAO,CAAC,GAAG,CAAC,uBAAuB,IAAI,kBAAkB;IAC/E,oBAAoB,EAAE,OAAO,CAAC,GAAG,CAAC,sBAAsB,IAAI,IAAI;IAChE,yBAAyB,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,4BAA4B,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC;IACjI,mBAAmB,EAAE,OAAO,CAAC,GAAG,CAAC,sBAAsB,KAAK,OAAO;IACnE,YAAY,EAAE,OAAO,CAAC,GAAG,CAAC,kBAAkB,IAAI,oBAAoB;IACpE,SAAS,EAAE,OAAO,CAAC,GAAG,CAAC,eAAe,IAAI,SAAS;IACnD,SAAS,EAAE,OAAO,CAAC,GAAG,CAAC,eAAe,IAAI,SAAS;IACnD,oBAAoB,EAAE,sBAAsB,CAAC,OAAO,CAAC,GAAG,CAAC,2BAA2B,CAAC;IACrF,gBAAgB,EAAE,OAAO,CAAC,GAAG,CAAC,uBAAuB,IAAI,oBAAoB;IAC7E,gBAAgB,EAAE,OAAO,CAAC,GAAG,CAAC,uBAAuB,IAAI,OAAO,CAAC,GAAG,CAAC,gBAAgB,IAAI,2BAA2B;IACpH,UAAU,EAAE,OAAO,CAAC,GAAG,CAAC,gBAAgB,IAAI,2BAA2B;CACxE,CAAC;AAEF,MAAM,UAAU,cAAc;IAC5B,OAAO,OAAO,CAAC,GAAG,CAAC,eAAe,IAAI,GAAG,CAAC,eAAe,CAAC,CAAC;AAC7D,CAAC;AAED,MAAM,UAAU,kBAAkB;IAChC,IAAI,CAAC,cAAc,EAAE,EAAE,CAAC;QACtB,MAAM,IAAI,KAAK,CAAC,8GAA8G,CAAC,CAAC;IAClI,CAAC;AACH,CAAC;AAED,MAAM,UAAU,aAAa;IAC3B,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,CAAC;QACtB,MAAM,IAAI,KAAK,CAAC,uFAAuF,CAAC,CAAC;IAC3G,CAAC;IACD,OAAO,GAAG,CAAC,YAAY,CAAC;AAC1B,CAAC;AAED,MAAM,UAAU,WAAW;IACzB,OAAO,OAAO,CAAC,GAAG,CAAC,cAAc,IAAI,GAAG,CAAC,aAAa,CAAC,CAAC;AAC1D,CAAC;AAED,MAAM,UAAU,eAAe;IAC7B,IAAI,CAAC,GAAG,CAAC,cAAc,EAAE,CAAC;QACxB,MAAM,IAAI,KAAK,CAAC,6EAA6E,CAAC,CAAC;IACjG,CAAC;IACD,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;QACvB,MAAM,IAAI,KAAK,CAAC,kFAAkF,CAAC,CAAC;IACtG,CAAC;AACH,CAAC;AAED,MAAM,UAAU,QAAQ;IACtB,OAAO,OAAO,CAAC,GAAG,CAAC,mBAAmB,IAAI,GAAG,CAAC,qBAAqB,CAAC,CAAC;AACvE,CAAC;AAED,MAAM,UAAU,SAAS;IACvB,OAAO,OAAO,CAAC,GAAG,CAAC,kBAAkB,IAAI,GAAG,CAAC,0BAA0B,CAAC,CAAC;AAC3E,CAAC;AAED,MAAM,UAAU,WAAW;IACzB,OAAO,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;AACrC,CAAC;AAED,MAAM,UAAU,eAAe;IAC7B,IAAI,CAAC,GAAG,CAAC,cAAc,EAAE,CAAC;QACxB,MAAM,IAAI,KAAK,CAAC,8EAA8E,CAAC,CAAC;IAClG,CAAC;IACD,OAAO,GAAG,CAAC,cAAc,CAAC;AAC5B,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -10,7 +10,7 @@ import { createPostAgent } from './agents/post.agent.js';
|
|
|
10
10
|
import { createDocsResearchAgent } from './agents/docs-research.agent.js';
|
|
11
11
|
import { generateImageAsset, isImageSize } from './tools/image-generate.tool.js';
|
|
12
12
|
import { startInteractiveChat } from './cli/interactive.js';
|
|
13
|
-
import { runSetup } from './cli/setup.js';
|
|
13
|
+
import { runSetup, runVoiceSetup, setVoiceEnabled } from './cli/setup.js';
|
|
14
14
|
import { memoryBackendName } from './memory/redis.js';
|
|
15
15
|
import { printError, printJson, printMarkdown, printProgress } from './cli/format.js';
|
|
16
16
|
import { createTerminalConfirmation } from './cli/confirm.js';
|
|
@@ -18,6 +18,14 @@ import { getComposioStatus } from './tools/composio.tool.js';
|
|
|
18
18
|
import { getResolvedConfigSummary, runDoctor } from './cli/doctor.js';
|
|
19
19
|
import { clearMemories, forget, listMemories, recall, remember } from './memory/long-term.js';
|
|
20
20
|
import { createTrigger, listenToTriggers, listTriggers, listTriggerTypes, showTriggerType } from './cli/triggers.js';
|
|
21
|
+
import { cancelCliJob, createCliJob, listCliJobs, runCliJob, showCliJob, showCliJobLogs, startCliJobWorker } from './cli/jobs.js';
|
|
22
|
+
import { printWelcomeScreen } from './cli/welcome.js';
|
|
23
|
+
import { startDefaultLauncher, startMainMenu } from './cli/menu.js';
|
|
24
|
+
import { printDoctorChecks } from './cli/health.js';
|
|
25
|
+
import { printAppsStatus } from './cli/apps.js';
|
|
26
|
+
import { printMemoryTable } from './cli/memory.js';
|
|
27
|
+
import { printVoiceConfig, runVoiceAgentProbe, runVoiceDoctor, runVoiceTurn } from './cli/voice.js';
|
|
28
|
+
import { printVersionStatus, runSelfUpdate } from './cli/update.js';
|
|
21
29
|
async function printResult(value) {
|
|
22
30
|
if (typeof value === 'string') {
|
|
23
31
|
printMarkdown(value);
|
|
@@ -31,12 +39,6 @@ async function runAgentText(agentFactory, prompt) {
|
|
|
31
39
|
const result = await agentFactory().generate({ prompt });
|
|
32
40
|
await printResult(result.text);
|
|
33
41
|
}
|
|
34
|
-
function printDoctorChecks(checks) {
|
|
35
|
-
for (const check of checks) {
|
|
36
|
-
const label = check.status.toUpperCase().padEnd(4);
|
|
37
|
-
console.log(`${label} ${check.name}: ${check.detail}`);
|
|
38
|
-
}
|
|
39
|
-
}
|
|
40
42
|
function friendlyError(error) {
|
|
41
43
|
const message = error instanceof Error ? error.message : String(error);
|
|
42
44
|
if (/AI_GATEWAY_API_KEY|VERCEL_OIDC_TOKEN|TAVILY_API_KEY|COMPOSIO_API_KEY|ZILMATE_USER_ID/.test(message))
|
|
@@ -47,7 +49,60 @@ const program = new Command();
|
|
|
47
49
|
program
|
|
48
50
|
.name('zilmate')
|
|
49
51
|
.description('ZilMate CLI agent for ZiloShift workflows')
|
|
50
|
-
.version('1.
|
|
52
|
+
.version('1.1.0');
|
|
53
|
+
program
|
|
54
|
+
.command('welcome')
|
|
55
|
+
.description('Show the ZilMate welcome dashboard')
|
|
56
|
+
.action(async () => {
|
|
57
|
+
try {
|
|
58
|
+
await printWelcomeScreen();
|
|
59
|
+
}
|
|
60
|
+
catch (error) {
|
|
61
|
+
printError(friendlyError(error));
|
|
62
|
+
process.exitCode = 1;
|
|
63
|
+
}
|
|
64
|
+
});
|
|
65
|
+
program
|
|
66
|
+
.command('version')
|
|
67
|
+
.description('Show current ZilMate version and check npm for updates')
|
|
68
|
+
.action(async () => {
|
|
69
|
+
try {
|
|
70
|
+
await printVersionStatus(program.version() || 'unknown');
|
|
71
|
+
}
|
|
72
|
+
catch (error) {
|
|
73
|
+
printError(friendlyError(error));
|
|
74
|
+
process.exitCode = 1;
|
|
75
|
+
}
|
|
76
|
+
});
|
|
77
|
+
program
|
|
78
|
+
.command('update')
|
|
79
|
+
.option('--tag <tag>', 'npm dist-tag or version to install', 'latest')
|
|
80
|
+
.option('--dry-run', 'show the update command without running it')
|
|
81
|
+
.description('Update the global ZilMate CLI/SDK from npm')
|
|
82
|
+
.action(async (options) => {
|
|
83
|
+
try {
|
|
84
|
+
await runSelfUpdate({
|
|
85
|
+
...(options.tag !== undefined ? { tag: options.tag } : {}),
|
|
86
|
+
dryRun: Boolean(options.dryRun),
|
|
87
|
+
});
|
|
88
|
+
}
|
|
89
|
+
catch (error) {
|
|
90
|
+
printError(friendlyError(error));
|
|
91
|
+
process.exitCode = 1;
|
|
92
|
+
}
|
|
93
|
+
});
|
|
94
|
+
program
|
|
95
|
+
.command('menu')
|
|
96
|
+
.description('Open the guided ZilMate main menu')
|
|
97
|
+
.action(async () => {
|
|
98
|
+
try {
|
|
99
|
+
await startMainMenu();
|
|
100
|
+
}
|
|
101
|
+
catch (error) {
|
|
102
|
+
printError(friendlyError(error));
|
|
103
|
+
process.exitCode = 1;
|
|
104
|
+
}
|
|
105
|
+
});
|
|
51
106
|
program
|
|
52
107
|
.command('setup')
|
|
53
108
|
.option('-p, --path <file>', 'environment file to create or update', '.env')
|
|
@@ -59,6 +114,16 @@ program
|
|
|
59
114
|
.option('--tavily-key <key>', 'optional Tavily API key for web research')
|
|
60
115
|
.option('--redis-url <url>', 'optional Upstash Redis REST URL')
|
|
61
116
|
.option('--redis-token <token>', 'optional Upstash Redis REST token')
|
|
117
|
+
.option('--jobs-enabled <true|false>', 'enable or disable background jobs')
|
|
118
|
+
.option('--qstash-token <token>', 'optional Upstash QStash token for hosted schedules')
|
|
119
|
+
.option('--job-webhook-url <url>', 'public job webhook URL for QStash callbacks')
|
|
120
|
+
.option('--job-webhook-secret <secret>', 'shared secret expected by hosted job webhook')
|
|
121
|
+
.option('--trigger-workflows-enabled <true|false>', 'enable or disable Composio trigger-to-job workflows')
|
|
122
|
+
.option('--deepgram-key <key>', 'optional Deepgram API key for realtime voice')
|
|
123
|
+
.option('--voice-enabled <true|false>', 'enable or disable realtime voice')
|
|
124
|
+
.option('--voice-listen-model <model>', 'Deepgram listen model, e.g. flux-general-en or flux-general-multi')
|
|
125
|
+
.option('--voice-tts-model <model>', 'Deepgram Aura TTS model, e.g. aura-2-thalia-en')
|
|
126
|
+
.option('--voice-language <language>', 'voice language, e.g. en or en-US')
|
|
62
127
|
.description('Create or update a local .env file for ZilMate')
|
|
63
128
|
.action(async (options) => {
|
|
64
129
|
try {
|
|
@@ -72,6 +137,53 @@ program
|
|
|
72
137
|
...(options.tavilyKey !== undefined ? { tavilyKey: options.tavilyKey } : {}),
|
|
73
138
|
...(options.redisUrl !== undefined ? { redisUrl: options.redisUrl } : {}),
|
|
74
139
|
...(options.redisToken !== undefined ? { redisToken: options.redisToken } : {}),
|
|
140
|
+
...(options.jobsEnabled !== undefined ? { jobsEnabled: options.jobsEnabled } : {}),
|
|
141
|
+
...(options.qstashToken !== undefined ? { qstashToken: options.qstashToken } : {}),
|
|
142
|
+
...(options.jobWebhookUrl !== undefined ? { publicJobWebhookUrl: options.jobWebhookUrl } : {}),
|
|
143
|
+
...(options.jobWebhookSecret !== undefined ? { jobWebhookSecret: options.jobWebhookSecret } : {}),
|
|
144
|
+
...(options.triggerWorkflowsEnabled !== undefined ? { triggerWorkflowsEnabled: options.triggerWorkflowsEnabled } : {}),
|
|
145
|
+
...(options.deepgramKey !== undefined ? { deepgramApiKey: options.deepgramKey } : {}),
|
|
146
|
+
...(options.voiceEnabled !== undefined ? { voiceEnabled: options.voiceEnabled } : {}),
|
|
147
|
+
...(options.voiceListenModel !== undefined ? { voiceListenModel: options.voiceListenModel } : {}),
|
|
148
|
+
...(options.voiceTtsModel !== undefined ? { voiceTtsModel: options.voiceTtsModel } : {}),
|
|
149
|
+
...(options.voiceLanguage !== undefined ? { voiceLanguage: options.voiceLanguage } : {}),
|
|
150
|
+
});
|
|
151
|
+
}
|
|
152
|
+
catch (error) {
|
|
153
|
+
printError(friendlyError(error));
|
|
154
|
+
process.exitCode = 1;
|
|
155
|
+
}
|
|
156
|
+
});
|
|
157
|
+
const voice = program
|
|
158
|
+
.command('voice')
|
|
159
|
+
.description('Configure and run realtime ZilMate voice mode')
|
|
160
|
+
.action(async () => {
|
|
161
|
+
try {
|
|
162
|
+
printVoiceConfig();
|
|
163
|
+
}
|
|
164
|
+
catch (error) {
|
|
165
|
+
printError(friendlyError(error));
|
|
166
|
+
process.exitCode = 1;
|
|
167
|
+
}
|
|
168
|
+
});
|
|
169
|
+
voice
|
|
170
|
+
.command('setup')
|
|
171
|
+
.option('-p, --path <file>', 'environment file to create or update', '.env')
|
|
172
|
+
.option('-f, --force', 'skip the first update confirmation when the env file exists')
|
|
173
|
+
.option('--deepgram-key <key>', 'Deepgram API key for realtime voice')
|
|
174
|
+
.option('--voice-listen-model <model>', 'Deepgram listen model, e.g. flux-general-en or flux-general-multi')
|
|
175
|
+
.option('--voice-tts-model <model>', 'Deepgram Aura TTS model, e.g. aura-2-thalia-en')
|
|
176
|
+
.option('--voice-language <language>', 'voice language, e.g. en or en-US')
|
|
177
|
+
.description('Turn on realtime voice with a focused guided setup')
|
|
178
|
+
.action(async (options) => {
|
|
179
|
+
try {
|
|
180
|
+
await runVoiceSetup({
|
|
181
|
+
path: options.path,
|
|
182
|
+
force: Boolean(options.force),
|
|
183
|
+
...(options.deepgramKey !== undefined ? { deepgramApiKey: options.deepgramKey } : {}),
|
|
184
|
+
...(options.voiceListenModel !== undefined ? { voiceListenModel: options.voiceListenModel } : {}),
|
|
185
|
+
...(options.voiceTtsModel !== undefined ? { voiceTtsModel: options.voiceTtsModel } : {}),
|
|
186
|
+
...(options.voiceLanguage !== undefined ? { voiceLanguage: options.voiceLanguage } : {}),
|
|
75
187
|
});
|
|
76
188
|
}
|
|
77
189
|
catch (error) {
|
|
@@ -79,6 +191,190 @@ program
|
|
|
79
191
|
process.exitCode = 1;
|
|
80
192
|
}
|
|
81
193
|
});
|
|
194
|
+
voice
|
|
195
|
+
.command('enable')
|
|
196
|
+
.option('-p, --path <file>', 'environment file to update', '.env')
|
|
197
|
+
.description('Enable realtime voice without opening .env')
|
|
198
|
+
.action(async (options) => {
|
|
199
|
+
try {
|
|
200
|
+
await setVoiceEnabled(true, { path: options.path });
|
|
201
|
+
}
|
|
202
|
+
catch (error) {
|
|
203
|
+
printError(friendlyError(error));
|
|
204
|
+
process.exitCode = 1;
|
|
205
|
+
}
|
|
206
|
+
});
|
|
207
|
+
voice
|
|
208
|
+
.command('disable')
|
|
209
|
+
.option('-p, --path <file>', 'environment file to update', '.env')
|
|
210
|
+
.description('Disable realtime voice without opening .env')
|
|
211
|
+
.action(async (options) => {
|
|
212
|
+
try {
|
|
213
|
+
await setVoiceEnabled(false, { path: options.path });
|
|
214
|
+
}
|
|
215
|
+
catch (error) {
|
|
216
|
+
printError(friendlyError(error));
|
|
217
|
+
process.exitCode = 1;
|
|
218
|
+
}
|
|
219
|
+
});
|
|
220
|
+
voice
|
|
221
|
+
.command('doctor')
|
|
222
|
+
.description('Check Deepgram realtime voice readiness')
|
|
223
|
+
.action(async () => {
|
|
224
|
+
try {
|
|
225
|
+
await runVoiceDoctor();
|
|
226
|
+
}
|
|
227
|
+
catch (error) {
|
|
228
|
+
printError(friendlyError(error));
|
|
229
|
+
process.exitCode = 1;
|
|
230
|
+
}
|
|
231
|
+
});
|
|
232
|
+
voice
|
|
233
|
+
.command('config')
|
|
234
|
+
.description('Show realtime voice configuration')
|
|
235
|
+
.action(() => {
|
|
236
|
+
try {
|
|
237
|
+
printVoiceConfig();
|
|
238
|
+
}
|
|
239
|
+
catch (error) {
|
|
240
|
+
printError(friendlyError(error));
|
|
241
|
+
process.exitCode = 1;
|
|
242
|
+
}
|
|
243
|
+
});
|
|
244
|
+
voice
|
|
245
|
+
.command('turn')
|
|
246
|
+
.argument('<transcript...>', 'spoken user text to route through the ZilMate voice brain')
|
|
247
|
+
.option('-s, --session <id>', 'persistent voice session id', 'voice-default')
|
|
248
|
+
.description('Test the ZilMate voice brain with a transcript')
|
|
249
|
+
.action(async (transcript, options) => {
|
|
250
|
+
try {
|
|
251
|
+
await runVoiceTurn(transcript.join(' '), options.session);
|
|
252
|
+
}
|
|
253
|
+
catch (error) {
|
|
254
|
+
printError(friendlyError(error));
|
|
255
|
+
process.exitCode = 1;
|
|
256
|
+
}
|
|
257
|
+
});
|
|
258
|
+
voice
|
|
259
|
+
.command('agent-probe')
|
|
260
|
+
.description('Open a Deepgram Voice Agent session without attaching microphone audio')
|
|
261
|
+
.action(async () => {
|
|
262
|
+
try {
|
|
263
|
+
await runVoiceAgentProbe();
|
|
264
|
+
}
|
|
265
|
+
catch (error) {
|
|
266
|
+
printError(friendlyError(error));
|
|
267
|
+
process.exitCode = 1;
|
|
268
|
+
}
|
|
269
|
+
});
|
|
270
|
+
const jobs = program
|
|
271
|
+
.command('jobs')
|
|
272
|
+
.description('Manage ZilMate background jobs, schedules, and worker processing')
|
|
273
|
+
.action(async () => {
|
|
274
|
+
try {
|
|
275
|
+
await listCliJobs({});
|
|
276
|
+
}
|
|
277
|
+
catch (error) {
|
|
278
|
+
printError(friendlyError(error));
|
|
279
|
+
process.exitCode = 1;
|
|
280
|
+
}
|
|
281
|
+
});
|
|
282
|
+
jobs
|
|
283
|
+
.command('create')
|
|
284
|
+
.argument('<task...>', 'job task to queue')
|
|
285
|
+
.option('--schedule <schedule>', 'optional schedule, e.g. hourly, daily, every 15 minutes, cron:0 9 * * *')
|
|
286
|
+
.option('--run-at <date>', 'optional first run date/time')
|
|
287
|
+
.description('Queue a ZilMate background job')
|
|
288
|
+
.action(async (task, options) => {
|
|
289
|
+
try {
|
|
290
|
+
await createCliJob(task.join(' '), options);
|
|
291
|
+
}
|
|
292
|
+
catch (error) {
|
|
293
|
+
printError(friendlyError(error));
|
|
294
|
+
process.exitCode = 1;
|
|
295
|
+
}
|
|
296
|
+
});
|
|
297
|
+
jobs
|
|
298
|
+
.command('list')
|
|
299
|
+
.option('--status <status>', 'filter by queued, running, succeeded, failed, or cancelled')
|
|
300
|
+
.option('-l, --limit <number>', 'maximum jobs to return', '25')
|
|
301
|
+
.description('List ZilMate jobs')
|
|
302
|
+
.action(async (options) => {
|
|
303
|
+
try {
|
|
304
|
+
await listCliJobs(options);
|
|
305
|
+
}
|
|
306
|
+
catch (error) {
|
|
307
|
+
printError(friendlyError(error));
|
|
308
|
+
process.exitCode = 1;
|
|
309
|
+
}
|
|
310
|
+
});
|
|
311
|
+
jobs
|
|
312
|
+
.command('status')
|
|
313
|
+
.argument('<id>', 'job id')
|
|
314
|
+
.description('Show one ZilMate job')
|
|
315
|
+
.action(async (id) => {
|
|
316
|
+
try {
|
|
317
|
+
await showCliJob(id);
|
|
318
|
+
}
|
|
319
|
+
catch (error) {
|
|
320
|
+
printError(friendlyError(error));
|
|
321
|
+
process.exitCode = 1;
|
|
322
|
+
}
|
|
323
|
+
});
|
|
324
|
+
jobs
|
|
325
|
+
.command('logs')
|
|
326
|
+
.argument('<id>', 'job id')
|
|
327
|
+
.description('Show logs for one ZilMate job')
|
|
328
|
+
.action(async (id) => {
|
|
329
|
+
try {
|
|
330
|
+
await showCliJobLogs(id);
|
|
331
|
+
}
|
|
332
|
+
catch (error) {
|
|
333
|
+
printError(friendlyError(error));
|
|
334
|
+
process.exitCode = 1;
|
|
335
|
+
}
|
|
336
|
+
});
|
|
337
|
+
jobs
|
|
338
|
+
.command('run')
|
|
339
|
+
.argument('<id>', 'job id')
|
|
340
|
+
.description('Run one ZilMate job now')
|
|
341
|
+
.action(async (id) => {
|
|
342
|
+
try {
|
|
343
|
+
await runCliJob(id);
|
|
344
|
+
}
|
|
345
|
+
catch (error) {
|
|
346
|
+
printError(friendlyError(error));
|
|
347
|
+
process.exitCode = 1;
|
|
348
|
+
}
|
|
349
|
+
});
|
|
350
|
+
jobs
|
|
351
|
+
.command('worker')
|
|
352
|
+
.option('-i, --interval <seconds>', 'poll interval in seconds', '10')
|
|
353
|
+
.option('--once', 'process due jobs once and exit')
|
|
354
|
+
.option('--quiet', 'suppress worker status messages')
|
|
355
|
+
.description('Start the local ZilMate job worker')
|
|
356
|
+
.action(async (options) => {
|
|
357
|
+
try {
|
|
358
|
+
await startCliJobWorker(options);
|
|
359
|
+
}
|
|
360
|
+
catch (error) {
|
|
361
|
+
printError(friendlyError(error));
|
|
362
|
+
process.exitCode = 1;
|
|
363
|
+
}
|
|
364
|
+
});
|
|
365
|
+
jobs
|
|
366
|
+
.command('cancel')
|
|
367
|
+
.argument('<id>', 'job id')
|
|
368
|
+
.description('Cancel one ZilMate job')
|
|
369
|
+
.action(async (id) => {
|
|
370
|
+
try {
|
|
371
|
+
await cancelCliJob(id);
|
|
372
|
+
}
|
|
373
|
+
catch (error) {
|
|
374
|
+
printError(friendlyError(error));
|
|
375
|
+
process.exitCode = 1;
|
|
376
|
+
}
|
|
377
|
+
});
|
|
82
378
|
program
|
|
83
379
|
.command('doctor')
|
|
84
380
|
.option('--live', 'also run live Gateway and Composio checks')
|
|
@@ -189,13 +485,22 @@ program
|
|
|
189
485
|
});
|
|
190
486
|
const memoryCommand = program
|
|
191
487
|
.command('memory')
|
|
192
|
-
.description('Manage durable long-term ZilMate memory')
|
|
488
|
+
.description('Manage durable long-term ZilMate memory')
|
|
489
|
+
.action(async () => {
|
|
490
|
+
try {
|
|
491
|
+
printMemoryTable(await listMemories());
|
|
492
|
+
}
|
|
493
|
+
catch (error) {
|
|
494
|
+
printError(friendlyError(error));
|
|
495
|
+
process.exitCode = 1;
|
|
496
|
+
}
|
|
497
|
+
});
|
|
193
498
|
memoryCommand
|
|
194
499
|
.command('list')
|
|
195
500
|
.description('List all durable long-term memories')
|
|
196
501
|
.action(async () => {
|
|
197
502
|
try {
|
|
198
|
-
|
|
503
|
+
printMemoryTable(await listMemories());
|
|
199
504
|
}
|
|
200
505
|
catch (error) {
|
|
201
506
|
printError(friendlyError(error));
|
|
@@ -204,7 +509,16 @@ memoryCommand
|
|
|
204
509
|
});
|
|
205
510
|
const apps = program
|
|
206
511
|
.command('apps')
|
|
207
|
-
.description('Manage external app tooling through Composio')
|
|
512
|
+
.description('Manage external app tooling through Composio')
|
|
513
|
+
.action(async () => {
|
|
514
|
+
try {
|
|
515
|
+
printAppsStatus(await getComposioStatus());
|
|
516
|
+
}
|
|
517
|
+
catch (error) {
|
|
518
|
+
printError(friendlyError(error));
|
|
519
|
+
process.exitCode = 1;
|
|
520
|
+
}
|
|
521
|
+
});
|
|
208
522
|
apps
|
|
209
523
|
.command('status')
|
|
210
524
|
.option('-s, --session <id>', 'ZilMate chat session id', 'default')
|
|
@@ -212,10 +526,7 @@ apps
|
|
|
212
526
|
.action(async (options) => {
|
|
213
527
|
try {
|
|
214
528
|
const status = await getComposioStatus(options.session);
|
|
215
|
-
|
|
216
|
-
if (!status.configured) {
|
|
217
|
-
console.log('Composio is not configured. Run `zilmate setup` and add `COMPOSIO_API_KEY` to enable GitHub/Gmail/Slack/Stripe/Supabase-style external app tools.');
|
|
218
|
-
}
|
|
529
|
+
printAppsStatus(status);
|
|
219
530
|
}
|
|
220
531
|
catch (error) {
|
|
221
532
|
printError(friendlyError(error));
|
|
@@ -445,8 +756,13 @@ program
|
|
|
445
756
|
process.exitCode = 1;
|
|
446
757
|
}
|
|
447
758
|
});
|
|
448
|
-
|
|
449
|
-
|
|
450
|
-
|
|
451
|
-
|
|
759
|
+
if (process.argv.length <= 2) {
|
|
760
|
+
await startDefaultLauncher();
|
|
761
|
+
}
|
|
762
|
+
else {
|
|
763
|
+
await program.parseAsync(process.argv).catch((error) => {
|
|
764
|
+
printError(friendlyError(error));
|
|
765
|
+
process.exitCode = 1;
|
|
766
|
+
});
|
|
767
|
+
}
|
|
452
768
|
//# sourceMappingURL=index.js.map
|