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.
Files changed (145) hide show
  1. package/.env.example +14 -0
  2. package/README.md +146 -4
  3. package/dist/agents/automation-planner.agent.d.ts +103 -0
  4. package/dist/agents/automation-planner.agent.d.ts.map +1 -0
  5. package/dist/agents/automation-planner.agent.js +28 -0
  6. package/dist/agents/automation-planner.agent.js.map +1 -0
  7. package/dist/agents/chat.agent.d.ts +8 -0
  8. package/dist/agents/chat.agent.d.ts.map +1 -1
  9. package/dist/agents/chat.agent.js +5 -2
  10. package/dist/agents/chat.agent.js.map +1 -1
  11. package/dist/agents/developer-helper.agent.d.ts +94 -0
  12. package/dist/agents/developer-helper.agent.d.ts.map +1 -0
  13. package/dist/agents/developer-helper.agent.js +34 -0
  14. package/dist/agents/developer-helper.agent.js.map +1 -0
  15. package/dist/agents/docs-research.agent.d.ts +8 -0
  16. package/dist/agents/docs-research.agent.d.ts.map +1 -1
  17. package/dist/agents/docs-research.agent.js +5 -2
  18. package/dist/agents/docs-research.agent.js.map +1 -1
  19. package/dist/agents/image.agent.d.ts.map +1 -1
  20. package/dist/agents/image.agent.js +2 -1
  21. package/dist/agents/image.agent.js.map +1 -1
  22. package/dist/agents/manager.d.ts +36 -0
  23. package/dist/agents/manager.d.ts.map +1 -1
  24. package/dist/agents/manager.js +39 -1
  25. package/dist/agents/manager.js.map +1 -1
  26. package/dist/agents/personal-assistant.agent.d.ts +30 -0
  27. package/dist/agents/personal-assistant.agent.d.ts.map +1 -0
  28. package/dist/agents/personal-assistant.agent.js +25 -0
  29. package/dist/agents/personal-assistant.agent.js.map +1 -0
  30. package/dist/agents/post.agent.d.ts.map +1 -1
  31. package/dist/agents/post.agent.js +2 -1
  32. package/dist/agents/post.agent.js.map +1 -1
  33. package/dist/agents/quick-help.agent.d.ts +8 -0
  34. package/dist/agents/quick-help.agent.d.ts.map +1 -1
  35. package/dist/agents/quick-help.agent.js +5 -2
  36. package/dist/agents/quick-help.agent.js.map +1 -1
  37. package/dist/cli/apps.d.ts +16 -0
  38. package/dist/cli/apps.d.ts.map +1 -0
  39. package/dist/cli/apps.js +19 -0
  40. package/dist/cli/apps.js.map +1 -0
  41. package/dist/cli/confirm.d.ts.map +1 -1
  42. package/dist/cli/confirm.js +20 -2
  43. package/dist/cli/confirm.js.map +1 -1
  44. package/dist/cli/doctor.d.ts +12 -0
  45. package/dist/cli/doctor.d.ts.map +1 -1
  46. package/dist/cli/doctor.js +35 -1
  47. package/dist/cli/doctor.js.map +1 -1
  48. package/dist/cli/format.d.ts +5 -0
  49. package/dist/cli/format.d.ts.map +1 -1
  50. package/dist/cli/format.js +96 -0
  51. package/dist/cli/format.js.map +1 -1
  52. package/dist/cli/health.d.ts +3 -0
  53. package/dist/cli/health.d.ts.map +1 -0
  54. package/dist/cli/health.js +25 -0
  55. package/dist/cli/health.js.map +1 -0
  56. package/dist/cli/interactive.d.ts.map +1 -1
  57. package/dist/cli/interactive.js +33 -6
  58. package/dist/cli/interactive.js.map +1 -1
  59. package/dist/cli/jobs.d.ts +19 -0
  60. package/dist/cli/jobs.d.ts.map +1 -0
  61. package/dist/cli/jobs.js +68 -0
  62. package/dist/cli/jobs.js.map +1 -0
  63. package/dist/cli/memory.d.ts +3 -0
  64. package/dist/cli/memory.d.ts.map +1 -0
  65. package/dist/cli/memory.js +14 -0
  66. package/dist/cli/memory.js.map +1 -0
  67. package/dist/cli/menu.d.ts +3 -0
  68. package/dist/cli/menu.d.ts.map +1 -0
  69. package/dist/cli/menu.js +129 -0
  70. package/dist/cli/menu.js.map +1 -0
  71. package/dist/cli/setup.d.ts +12 -0
  72. package/dist/cli/setup.d.ts.map +1 -1
  73. package/dist/cli/setup.js +263 -11
  74. package/dist/cli/setup.js.map +1 -1
  75. package/dist/cli/triggers.d.ts.map +1 -1
  76. package/dist/cli/triggers.js +11 -0
  77. package/dist/cli/triggers.js.map +1 -1
  78. package/dist/cli/update.d.ts +8 -0
  79. package/dist/cli/update.d.ts.map +1 -0
  80. package/dist/cli/update.js +94 -0
  81. package/dist/cli/update.js.map +1 -0
  82. package/dist/cli/voice.d.ts +5 -0
  83. package/dist/cli/voice.d.ts.map +1 -0
  84. package/dist/cli/voice.js +58 -0
  85. package/dist/cli/voice.js.map +1 -0
  86. package/dist/cli/welcome.d.ts +2 -0
  87. package/dist/cli/welcome.d.ts.map +1 -0
  88. package/dist/cli/welcome.js +42 -0
  89. package/dist/cli/welcome.js.map +1 -0
  90. package/dist/config/env.d.ts +17 -0
  91. package/dist/config/env.d.ts.map +1 -1
  92. package/dist/config/env.js +26 -0
  93. package/dist/config/env.js.map +1 -1
  94. package/dist/index.js +335 -19
  95. package/dist/index.js.map +1 -1
  96. package/dist/jobs/qstash.d.ts +3 -0
  97. package/dist/jobs/qstash.d.ts.map +1 -0
  98. package/dist/jobs/qstash.js +37 -0
  99. package/dist/jobs/qstash.js.map +1 -0
  100. package/dist/jobs/runner.d.ts +14 -0
  101. package/dist/jobs/runner.d.ts.map +1 -0
  102. package/dist/jobs/runner.js +101 -0
  103. package/dist/jobs/runner.js.map +1 -0
  104. package/dist/jobs/schedule.d.ts +5 -0
  105. package/dist/jobs/schedule.d.ts.map +1 -0
  106. package/dist/jobs/schedule.js +72 -0
  107. package/dist/jobs/schedule.js.map +1 -0
  108. package/dist/jobs/store.d.ts +9 -0
  109. package/dist/jobs/store.d.ts.map +1 -0
  110. package/dist/jobs/store.js +133 -0
  111. package/dist/jobs/store.js.map +1 -0
  112. package/dist/jobs/types.d.ts +54 -0
  113. package/dist/jobs/types.d.ts.map +1 -0
  114. package/dist/jobs/types.js +2 -0
  115. package/dist/jobs/types.js.map +1 -0
  116. package/dist/jobs/workflows.d.ts +4 -0
  117. package/dist/jobs/workflows.d.ts.map +1 -0
  118. package/dist/jobs/workflows.js +50 -0
  119. package/dist/jobs/workflows.js.map +1 -0
  120. package/dist/safety/limits.js +2 -2
  121. package/dist/safety/limits.js.map +1 -1
  122. package/dist/server.d.ts +17 -0
  123. package/dist/server.d.ts.map +1 -1
  124. package/dist/server.js +23 -0
  125. package/dist/server.js.map +1 -1
  126. package/dist/tools/composio.tool.d.ts.map +1 -1
  127. package/dist/tools/composio.tool.js +21 -5
  128. package/dist/tools/composio.tool.js.map +1 -1
  129. package/dist/tools/jobs.tool.d.ts +22 -0
  130. package/dist/tools/jobs.tool.d.ts.map +1 -0
  131. package/dist/tools/jobs.tool.js +105 -0
  132. package/dist/tools/jobs.tool.js.map +1 -0
  133. package/dist/tools/time.tool.d.ts +11 -0
  134. package/dist/tools/time.tool.d.ts.map +1 -0
  135. package/dist/tools/time.tool.js +35 -0
  136. package/dist/tools/time.tool.js.map +1 -0
  137. package/dist/voice/deepgram.d.ts +29 -0
  138. package/dist/voice/deepgram.d.ts.map +1 -0
  139. package/dist/voice/deepgram.js +207 -0
  140. package/dist/voice/deepgram.js.map +1 -0
  141. package/dist/voice/types.d.ts +43 -0
  142. package/dist/voice/types.d.ts.map +1 -0
  143. package/dist/voice/types.js +2 -0
  144. package/dist/voice/types.js.map +1 -0
  145. 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,2 @@
1
+ export declare function printWelcomeScreen(): Promise<void>;
2
+ //# sourceMappingURL=welcome.d.ts.map
@@ -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"}
@@ -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
@@ -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,GAejB,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"}
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"}
@@ -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
@@ -1 +1 @@
1
- {"version":3,"file":"env.js","sourceRoot":"","sources":["../../src/config/env.ts"],"names":[],"mappings":"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"}
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.0.0');
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
- printJson(await listMemories());
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
- printJson(status);
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
- program.parseAsync(process.argv).catch((error) => {
449
- printError(friendlyError(error));
450
- process.exitCode = 1;
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