convoai 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (170) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +862 -0
  3. package/bin/convoai.ts +3 -0
  4. package/dist/bin/convoai.d.ts +2 -0
  5. package/dist/bin/convoai.js +4 -0
  6. package/dist/bin/convoai.js.map +1 -0
  7. package/dist/src/api/agents.d.ts +24 -0
  8. package/dist/src/api/agents.js +51 -0
  9. package/dist/src/api/agents.js.map +1 -0
  10. package/dist/src/api/calls.d.ts +53 -0
  11. package/dist/src/api/calls.js +22 -0
  12. package/dist/src/api/calls.js.map +1 -0
  13. package/dist/src/api/client.d.ts +10 -0
  14. package/dist/src/api/client.js +63 -0
  15. package/dist/src/api/client.js.map +1 -0
  16. package/dist/src/api/types.d.ts +207 -0
  17. package/dist/src/api/types.js +20 -0
  18. package/dist/src/api/types.js.map +1 -0
  19. package/dist/src/commands/agent/_helpers.d.ts +7 -0
  20. package/dist/src/commands/agent/_helpers.js +32 -0
  21. package/dist/src/commands/agent/_helpers.js.map +1 -0
  22. package/dist/src/commands/agent/history.d.ts +2 -0
  23. package/dist/src/commands/agent/history.js +78 -0
  24. package/dist/src/commands/agent/history.js.map +1 -0
  25. package/dist/src/commands/agent/interrupt.d.ts +2 -0
  26. package/dist/src/commands/agent/interrupt.js +32 -0
  27. package/dist/src/commands/agent/interrupt.js.map +1 -0
  28. package/dist/src/commands/agent/join.d.ts +2 -0
  29. package/dist/src/commands/agent/join.js +168 -0
  30. package/dist/src/commands/agent/join.js.map +1 -0
  31. package/dist/src/commands/agent/list.d.ts +2 -0
  32. package/dist/src/commands/agent/list.js +67 -0
  33. package/dist/src/commands/agent/list.js.map +1 -0
  34. package/dist/src/commands/agent/speak.d.ts +2 -0
  35. package/dist/src/commands/agent/speak.js +48 -0
  36. package/dist/src/commands/agent/speak.js.map +1 -0
  37. package/dist/src/commands/agent/start.d.ts +2 -0
  38. package/dist/src/commands/agent/start.js +212 -0
  39. package/dist/src/commands/agent/start.js.map +1 -0
  40. package/dist/src/commands/agent/status.d.ts +2 -0
  41. package/dist/src/commands/agent/status.js +42 -0
  42. package/dist/src/commands/agent/status.js.map +1 -0
  43. package/dist/src/commands/agent/stop.d.ts +2 -0
  44. package/dist/src/commands/agent/stop.js +107 -0
  45. package/dist/src/commands/agent/stop.js.map +1 -0
  46. package/dist/src/commands/agent/turns.d.ts +2 -0
  47. package/dist/src/commands/agent/turns.js +99 -0
  48. package/dist/src/commands/agent/turns.js.map +1 -0
  49. package/dist/src/commands/agent/update.d.ts +2 -0
  50. package/dist/src/commands/agent/update.js +74 -0
  51. package/dist/src/commands/agent/update.js.map +1 -0
  52. package/dist/src/commands/agent/watch.d.ts +2 -0
  53. package/dist/src/commands/agent/watch.js +291 -0
  54. package/dist/src/commands/agent/watch.js.map +1 -0
  55. package/dist/src/commands/auth/login.d.ts +2 -0
  56. package/dist/src/commands/auth/login.js +118 -0
  57. package/dist/src/commands/auth/login.js.map +1 -0
  58. package/dist/src/commands/auth/logout.d.ts +2 -0
  59. package/dist/src/commands/auth/logout.js +84 -0
  60. package/dist/src/commands/auth/logout.js.map +1 -0
  61. package/dist/src/commands/auth/status.d.ts +2 -0
  62. package/dist/src/commands/auth/status.js +114 -0
  63. package/dist/src/commands/auth/status.js.map +1 -0
  64. package/dist/src/commands/call/_helpers.d.ts +7 -0
  65. package/dist/src/commands/call/_helpers.js +32 -0
  66. package/dist/src/commands/call/_helpers.js.map +1 -0
  67. package/dist/src/commands/call/hangup.d.ts +2 -0
  68. package/dist/src/commands/call/hangup.js +29 -0
  69. package/dist/src/commands/call/hangup.js.map +1 -0
  70. package/dist/src/commands/call/initiate.d.ts +2 -0
  71. package/dist/src/commands/call/initiate.js +137 -0
  72. package/dist/src/commands/call/initiate.js.map +1 -0
  73. package/dist/src/commands/call/status.d.ts +2 -0
  74. package/dist/src/commands/call/status.js +50 -0
  75. package/dist/src/commands/call/status.js.map +1 -0
  76. package/dist/src/commands/completion.d.ts +2 -0
  77. package/dist/src/commands/completion.js +542 -0
  78. package/dist/src/commands/completion.js.map +1 -0
  79. package/dist/src/commands/config/get.d.ts +2 -0
  80. package/dist/src/commands/config/get.js +79 -0
  81. package/dist/src/commands/config/get.js.map +1 -0
  82. package/dist/src/commands/config/init.d.ts +2 -0
  83. package/dist/src/commands/config/init.js +176 -0
  84. package/dist/src/commands/config/init.js.map +1 -0
  85. package/dist/src/commands/config/path.d.ts +2 -0
  86. package/dist/src/commands/config/path.js +22 -0
  87. package/dist/src/commands/config/path.js.map +1 -0
  88. package/dist/src/commands/config/set.d.ts +2 -0
  89. package/dist/src/commands/config/set.js +115 -0
  90. package/dist/src/commands/config/set.js.map +1 -0
  91. package/dist/src/commands/config/show.d.ts +2 -0
  92. package/dist/src/commands/config/show.js +147 -0
  93. package/dist/src/commands/config/show.js.map +1 -0
  94. package/dist/src/commands/preset/list.d.ts +2 -0
  95. package/dist/src/commands/preset/list.js +39 -0
  96. package/dist/src/commands/preset/list.js.map +1 -0
  97. package/dist/src/commands/preset/use.d.ts +2 -0
  98. package/dist/src/commands/preset/use.js +89 -0
  99. package/dist/src/commands/preset/use.js.map +1 -0
  100. package/dist/src/commands/quickstart.d.ts +2 -0
  101. package/dist/src/commands/quickstart.js +595 -0
  102. package/dist/src/commands/quickstart.js.map +1 -0
  103. package/dist/src/commands/repl.d.ts +2 -0
  104. package/dist/src/commands/repl.js +391 -0
  105. package/dist/src/commands/repl.js.map +1 -0
  106. package/dist/src/commands/template/delete.d.ts +2 -0
  107. package/dist/src/commands/template/delete.js +54 -0
  108. package/dist/src/commands/template/delete.js.map +1 -0
  109. package/dist/src/commands/template/list.d.ts +2 -0
  110. package/dist/src/commands/template/list.js +48 -0
  111. package/dist/src/commands/template/list.js.map +1 -0
  112. package/dist/src/commands/template/save.d.ts +2 -0
  113. package/dist/src/commands/template/save.js +86 -0
  114. package/dist/src/commands/template/save.js.map +1 -0
  115. package/dist/src/commands/template/show.d.ts +2 -0
  116. package/dist/src/commands/template/show.js +98 -0
  117. package/dist/src/commands/template/show.js.map +1 -0
  118. package/dist/src/commands/template/use.d.ts +2 -0
  119. package/dist/src/commands/template/use.js +109 -0
  120. package/dist/src/commands/template/use.js.map +1 -0
  121. package/dist/src/commands/token.d.ts +2 -0
  122. package/dist/src/commands/token.js +75 -0
  123. package/dist/src/commands/token.js.map +1 -0
  124. package/dist/src/config/manager.d.ts +22 -0
  125. package/dist/src/config/manager.js +130 -0
  126. package/dist/src/config/manager.js.map +1 -0
  127. package/dist/src/config/paths.d.ts +9 -0
  128. package/dist/src/config/paths.js +28 -0
  129. package/dist/src/config/paths.js.map +1 -0
  130. package/dist/src/config/schema.d.ts +396 -0
  131. package/dist/src/config/schema.js +57 -0
  132. package/dist/src/config/schema.js.map +1 -0
  133. package/dist/src/index.d.ts +1 -0
  134. package/dist/src/index.js +157 -0
  135. package/dist/src/index.js.map +1 -0
  136. package/dist/src/presets/defaults.d.ts +20 -0
  137. package/dist/src/presets/defaults.js +195 -0
  138. package/dist/src/presets/defaults.js.map +1 -0
  139. package/dist/src/providers/catalog.d.ts +103 -0
  140. package/dist/src/providers/catalog.js +247 -0
  141. package/dist/src/providers/catalog.js.map +1 -0
  142. package/dist/src/templates/manager.d.ts +24 -0
  143. package/dist/src/templates/manager.js +77 -0
  144. package/dist/src/templates/manager.js.map +1 -0
  145. package/dist/src/ui/colors.d.ts +9 -0
  146. package/dist/src/ui/colors.js +36 -0
  147. package/dist/src/ui/colors.js.map +1 -0
  148. package/dist/src/ui/output.d.ts +17 -0
  149. package/dist/src/ui/output.js +27 -0
  150. package/dist/src/ui/output.js.map +1 -0
  151. package/dist/src/ui/spinner.d.ts +5 -0
  152. package/dist/src/ui/spinner.js +23 -0
  153. package/dist/src/ui/spinner.js.map +1 -0
  154. package/dist/src/ui/table.d.ts +8 -0
  155. package/dist/src/ui/table.js +38 -0
  156. package/dist/src/ui/table.js.map +1 -0
  157. package/dist/src/utils/errors.d.ts +11 -0
  158. package/dist/src/utils/errors.js +38 -0
  159. package/dist/src/utils/errors.js.map +1 -0
  160. package/dist/src/utils/format.d.ts +16 -0
  161. package/dist/src/utils/format.js +87 -0
  162. package/dist/src/utils/format.js.map +1 -0
  163. package/dist/src/utils/hints.d.ts +7 -0
  164. package/dist/src/utils/hints.js +22 -0
  165. package/dist/src/utils/hints.js.map +1 -0
  166. package/dist/src/utils/token.d.ts +6 -0
  167. package/dist/src/utils/token.js +26 -0
  168. package/dist/src/utils/token.js.map +1 -0
  169. package/package.json +65 -0
  170. package/src/web/client.html +136 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"status.js","sourceRoot":"","sources":["../../../../src/commands/agent/status.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAC7D,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAClD,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAClD,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAEpD,8EAA8E;AAE9E,MAAM,UAAU,mBAAmB,CAAC,OAAgB;IAClD,OAAO;SACJ,OAAO,CAAC,mBAAmB,CAAC;SAC5B,WAAW,CAAC,8BAA8B,CAAC;SAC3C,MAAM,CAAC,kBAAkB,EAAE,uBAAuB,CAAC;SACnD,MAAM,CAAC,QAAQ,EAAE,uBAAuB,CAAC;SACzC,MAAM,CAAC,KAAK,EAAE,OAAe,EAAE,IAAI,EAAE,EAAE;QACtC,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YAEtC,MAAM,MAAM,GAAG,MAAM,WAAW,CAAC,0BAA0B,EAAE,GAAG,EAAE,CAChE,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,CACpB,CAAC;YAEF,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;gBACd,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;gBAC7C,OAAO;YACT,CAAC;YAED,MAAM,KAAK,GAA4B;gBACrC,CAAC,UAAU,EAAE,MAAM,CAAC,QAAQ,CAAC;gBAC7B,CAAC,QAAQ,EAAE,WAAW,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;aACvC,CAAC;YAEF,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;gBACnB,KAAK,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC;YAC1C,CAAC;YAED,KAAK,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,eAAe,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;YAE1D,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;gBACnB,KAAK,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,eAAe,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;YAC3D,CAAC;YAED,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;gBACnB,KAAK,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC;YAC1C,CAAC;YAED,aAAa,CAAC,KAAK,CAAC,CAAC;QACvB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,WAAW,CAAC,KAAK,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;QAC1C,CAAC;IACH,CAAC,CAAC,CAAC;AACP,CAAC"}
@@ -0,0 +1,2 @@
1
+ import { Command } from 'commander';
2
+ export declare function registerAgentStop(program: Command): void;
@@ -0,0 +1,107 @@
1
+ import { getAgentAPI } from './_helpers.js';
2
+ import { withSpinner } from '../../ui/spinner.js';
3
+ import { printSuccess, printError, printHint } from '../../ui/output.js';
4
+ import { handleError } from '../../utils/errors.js';
5
+ import { hintAfterStop, shortId } from '../../utils/hints.js';
6
+ // ─── Confirmation Prompt ───────────────────────────────────────────────────
7
+ async function confirmStopAll(count) {
8
+ const { default: inquirer } = await import('inquirer');
9
+ const { confirmed } = await inquirer.prompt([
10
+ {
11
+ type: 'confirm',
12
+ name: 'confirmed',
13
+ message: `Stop all ${count} running agent(s)?`,
14
+ default: false,
15
+ },
16
+ ]);
17
+ return confirmed;
18
+ }
19
+ // ─── Stop All Running Agents ───────────────────────────────────────────────
20
+ async function stopAllAgents(opts) {
21
+ const api = getAgentAPI(opts.profile);
22
+ // List running agents (state=2 means RUNNING)
23
+ const response = await withSpinner('Fetching running agents...', () => api.list({ state: 2, limit: 100 }));
24
+ const agents = response.data.list;
25
+ if (agents.length === 0) {
26
+ if (opts.json) {
27
+ console.log(JSON.stringify({ stopped: [] }));
28
+ }
29
+ else {
30
+ printSuccess('No running agents to stop.');
31
+ }
32
+ return;
33
+ }
34
+ // Confirm unless --force
35
+ if (!opts.force) {
36
+ const confirmed = await confirmStopAll(agents.length);
37
+ if (!confirmed) {
38
+ printHint('Aborted. No agents were stopped.');
39
+ return;
40
+ }
41
+ }
42
+ const stopped = [];
43
+ const failed = [];
44
+ for (const agent of agents) {
45
+ try {
46
+ await withSpinner(`Stopping ${shortId(agent.agent_id)}...`, () => api.stop(agent.agent_id));
47
+ stopped.push(agent.agent_id);
48
+ }
49
+ catch (err) {
50
+ const message = err instanceof Error ? err.message : String(err);
51
+ failed.push({ agent_id: agent.agent_id, error: message });
52
+ }
53
+ }
54
+ if (opts.json) {
55
+ console.log(JSON.stringify({ stopped, failed }, null, 2));
56
+ return;
57
+ }
58
+ if (stopped.length > 0) {
59
+ printSuccess(`Stopped ${stopped.length} agent(s).`);
60
+ }
61
+ if (failed.length > 0) {
62
+ for (const f of failed) {
63
+ printError(`Failed to stop ${shortId(f.agent_id)}: ${f.error}`);
64
+ }
65
+ }
66
+ printHint(hintAfterStop());
67
+ }
68
+ // ─── Command Registration ──────────────────────────────────────────────────
69
+ export function registerAgentStop(program) {
70
+ program
71
+ .command('stop [agent-id]')
72
+ .description('Stop a running agent')
73
+ .option('-a, --all', 'Stop all running agents')
74
+ .option('-f, --force', 'Skip confirmation when using --all')
75
+ .option('--profile <name>', 'Config profile to use')
76
+ .option('--json', 'Output result as JSON')
77
+ .action(async (agentId, opts) => {
78
+ try {
79
+ // --all mode: stop every running agent
80
+ if (opts.all) {
81
+ await stopAllAgents({
82
+ force: opts.force,
83
+ profile: opts.profile,
84
+ json: opts.json,
85
+ });
86
+ return;
87
+ }
88
+ // Single agent mode: agent-id is required
89
+ if (!agentId) {
90
+ printError('Agent ID is required. Usage: convoai agent stop <agent-id>');
91
+ process.exit(1);
92
+ }
93
+ const api = getAgentAPI(opts.profile);
94
+ await withSpinner(`Stopping agent ${shortId(agentId)}...`, () => api.stop(agentId));
95
+ if (opts.json) {
96
+ console.log(JSON.stringify({ agent_id: agentId, status: 'STOPPED' }, null, 2));
97
+ return;
98
+ }
99
+ printSuccess(`Agent ${shortId(agentId)} stopped.`);
100
+ printHint(hintAfterStop());
101
+ }
102
+ catch (error) {
103
+ handleError(error, { json: opts.json });
104
+ }
105
+ });
106
+ }
107
+ //# sourceMappingURL=stop.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stop.js","sourceRoot":"","sources":["../../../../src/commands/agent/stop.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ import { Command } from 'commander';
2
+ export declare function registerAgentTurns(program: Command): void;
@@ -0,0 +1,99 @@
1
+ import chalk from 'chalk';
2
+ import { getAgentAPI } from './_helpers.js';
3
+ import { withSpinner } from '../../ui/spinner.js';
4
+ import { printTable } from '../../ui/table.js';
5
+ import { dim } from '../../ui/colors.js';
6
+ import { handleError } from '../../utils/errors.js';
7
+ import { shortId } from '../../utils/hints.js';
8
+ // ─── Command Registration ──────────────────────────────────────────────────
9
+ export function registerAgentTurns(program) {
10
+ program
11
+ .command('turns <agent-id>')
12
+ .description('View turn-level latency analytics for an agent')
13
+ .option('--profile <name>', 'Use a named config profile')
14
+ .option('--json', 'Output result as JSON')
15
+ .option('--limit <n>', 'Number of turns to show (default: 20)', parseInt)
16
+ .action(async (agentId, opts) => {
17
+ try {
18
+ await turnsAction(agentId, opts);
19
+ }
20
+ catch (error) {
21
+ handleError(error, { json: opts.json });
22
+ }
23
+ });
24
+ }
25
+ // ─── Action ────────────────────────────────────────────────────────────────
26
+ async function turnsAction(agentId, opts) {
27
+ const api = getAgentAPI(opts.profile);
28
+ const data = await withSpinner('Fetching turns...', () => api.turns(agentId));
29
+ const limit = opts.limit ?? 20;
30
+ const allTurns = data.turns ?? [];
31
+ const turns = allTurns.slice(-limit);
32
+ if (opts.json) {
33
+ console.log(JSON.stringify({ ...data, turns }, null, 2));
34
+ return;
35
+ }
36
+ if (turns.length === 0) {
37
+ console.log(dim('No turns recorded yet.'));
38
+ return;
39
+ }
40
+ // ── Table ───────────────────────────────────────────────────────────────
41
+ const headers = ['TURN_ID', 'TYPE', 'END_REASON', 'E2E_LATENCY', 'ASR', 'LLM', 'TTS'];
42
+ const rows = turns.map((turn) => [
43
+ shortId(turn.turn_id),
44
+ turn.type,
45
+ turn.end_reason,
46
+ formatLatency(turn.e2e_latency_ms),
47
+ formatLatency(turn.segmented_latency_ms?.asr_ms),
48
+ formatLatency(turn.segmented_latency_ms?.llm_ms),
49
+ formatLatency(turn.segmented_latency_ms?.tts_ms),
50
+ ]);
51
+ printTable(headers, rows);
52
+ // ── Summary ─────────────────────────────────────────────────────────────
53
+ console.log();
54
+ printAverages(turns);
55
+ const totalCount = allTurns.length;
56
+ if (totalCount > turns.length) {
57
+ console.log(dim(`\nShowing ${turns.length} of ${totalCount} turns.`));
58
+ }
59
+ }
60
+ // ─── Latency Formatting ───────────────────────────────────────────────────
61
+ function formatLatency(ms) {
62
+ if (ms === undefined || ms === null)
63
+ return dim('—');
64
+ return colorLatency(ms);
65
+ }
66
+ function colorLatency(ms) {
67
+ const text = `${ms}ms`;
68
+ if (ms < 1000)
69
+ return chalk.green(text);
70
+ if (ms <= 2000)
71
+ return chalk.yellow(text);
72
+ return chalk.red(text);
73
+ }
74
+ // ─── Averages ──────────────────────────────────────────────────────────────
75
+ function printAverages(turns) {
76
+ const avgE2E = averageOf(turns.map((t) => t.e2e_latency_ms));
77
+ const avgASR = averageOf(turns.map((t) => t.segmented_latency_ms?.asr_ms));
78
+ const avgLLM = averageOf(turns.map((t) => t.segmented_latency_ms?.llm_ms));
79
+ const avgTTS = averageOf(turns.map((t) => t.segmented_latency_ms?.tts_ms));
80
+ const parts = [];
81
+ if (avgE2E !== null)
82
+ parts.push(`E2E: ${colorLatency(avgE2E)}`);
83
+ if (avgASR !== null)
84
+ parts.push(`ASR: ${colorLatency(avgASR)}`);
85
+ if (avgLLM !== null)
86
+ parts.push(`LLM: ${colorLatency(avgLLM)}`);
87
+ if (avgTTS !== null)
88
+ parts.push(`TTS: ${colorLatency(avgTTS)}`);
89
+ if (parts.length > 0) {
90
+ console.log(`${dim('Avg latency:')} ${parts.join(dim(' | '))}`);
91
+ }
92
+ }
93
+ function averageOf(values) {
94
+ const valid = values.filter((v) => v !== undefined && v !== null);
95
+ if (valid.length === 0)
96
+ return null;
97
+ return Math.round(valid.reduce((sum, v) => sum + v, 0) / valid.length);
98
+ }
99
+ //# sourceMappingURL=turns.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"turns.js","sourceRoot":"","sources":["../../../../src/commands/agent/turns.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ import { Command } from 'commander';
2
+ export declare function registerAgentUpdate(program: Command): void;
@@ -0,0 +1,74 @@
1
+ import { getAgentAPI, formatTimestamp } from './_helpers.js';
2
+ import { withSpinner } from '../../ui/spinner.js';
3
+ import { printKeyValue } from '../../ui/table.js';
4
+ import { printSuccess, printError } from '../../ui/output.js';
5
+ import { handleError } from '../../utils/errors.js';
6
+ import { shortId } from '../../utils/hints.js';
7
+ // ─── Command Registration ──────────────────────────────────────────────────
8
+ export function registerAgentUpdate(program) {
9
+ program
10
+ .command('update <agent-id>')
11
+ .description('Update a running agent\'s configuration')
12
+ .option('--system-message <msg>', 'Update the system prompt')
13
+ .option('--model <model>', 'Update the LLM model')
14
+ .option('--max-tokens <n>', 'Update max tokens')
15
+ .option('--temperature <n>', 'Update temperature')
16
+ .option('--token <token>', 'Update the RTC token')
17
+ .option('--profile <name>', 'Config profile to use')
18
+ .option('--json', 'Output result as JSON')
19
+ .action(async (agentId, opts) => {
20
+ try {
21
+ // Build the update request from provided flags
22
+ const llm = {};
23
+ let hasLlmUpdate = false;
24
+ if (opts.systemMessage) {
25
+ llm.system_messages = [{ role: 'system', content: opts.systemMessage }];
26
+ hasLlmUpdate = true;
27
+ }
28
+ if (opts.model) {
29
+ llm.model = opts.model;
30
+ hasLlmUpdate = true;
31
+ }
32
+ if (opts.maxTokens !== undefined || opts.temperature !== undefined) {
33
+ llm.params = {};
34
+ if (opts.maxTokens !== undefined) {
35
+ llm.params.max_tokens = parseInt(opts.maxTokens, 10);
36
+ }
37
+ if (opts.temperature !== undefined) {
38
+ llm.params.temperature = parseFloat(opts.temperature);
39
+ }
40
+ hasLlmUpdate = true;
41
+ }
42
+ const request = {
43
+ properties: {},
44
+ };
45
+ if (hasLlmUpdate) {
46
+ request.properties.llm = llm;
47
+ }
48
+ if (opts.token) {
49
+ request.properties.token = opts.token;
50
+ }
51
+ // Ensure at least one field is being updated
52
+ if (!hasLlmUpdate && !opts.token) {
53
+ printError('Nothing to update. Provide at least one of: --system-message, --model, --max-tokens, --temperature, --token');
54
+ process.exit(1);
55
+ }
56
+ const api = getAgentAPI(opts.profile);
57
+ const result = await withSpinner(`Updating agent ${shortId(agentId)}...`, () => api.update(agentId, request));
58
+ if (opts.json) {
59
+ console.log(JSON.stringify(result, null, 2));
60
+ return;
61
+ }
62
+ printSuccess(`Agent ${shortId(agentId)} updated.`);
63
+ printKeyValue([
64
+ ['Agent ID', result.agent_id],
65
+ ['Status', result.status],
66
+ ['Created', formatTimestamp(result.create_ts)],
67
+ ]);
68
+ }
69
+ catch (error) {
70
+ handleError(error, { json: opts.json });
71
+ }
72
+ });
73
+ }
74
+ //# sourceMappingURL=update.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"update.js","sourceRoot":"","sources":["../../../../src/commands/agent/update.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ import { Command } from 'commander';
2
+ export declare function registerAgentWatch(program: Command): void;
@@ -0,0 +1,291 @@
1
+ import chalk from 'chalk';
2
+ import { getAgentAPI, formatTimestamp, relativeTime } from './_helpers.js';
3
+ import { colorStatus } from '../../ui/colors.js';
4
+ import { handleError } from '../../utils/errors.js';
5
+ import { shortId } from '../../utils/hints.js';
6
+ // ─── Command Registration ──────────────────────────────────────────────────
7
+ export function registerAgentWatch(program) {
8
+ program
9
+ .command('watch [agent-id]')
10
+ .description('Real-time agent monitoring dashboard')
11
+ .option('--interval <seconds>', 'Polling interval in seconds', '2')
12
+ .option('--profile <name>', 'Config profile to use')
13
+ .option('--no-clear', 'Do not clear screen between refreshes')
14
+ .action(async (agentId, opts) => {
15
+ try {
16
+ const interval = parseInterval(opts.interval);
17
+ const api = getAgentAPI(opts.profile);
18
+ if (agentId) {
19
+ await watchSingleAgent(api, agentId, interval, opts.clear);
20
+ }
21
+ else {
22
+ await watchAllAgents(api, interval, opts.clear);
23
+ }
24
+ }
25
+ catch (error) {
26
+ handleError(error);
27
+ }
28
+ });
29
+ }
30
+ // ─── Single Agent Watch ────────────────────────────────────────────────────
31
+ async function watchSingleAgent(api, agentId, intervalSec, clearScreen) {
32
+ let timer = null;
33
+ const cleanup = (message) => {
34
+ if (timer) {
35
+ clearInterval(timer);
36
+ timer = null;
37
+ }
38
+ process.stdout.write('\n');
39
+ console.log(chalk.dim(message));
40
+ process.exit(0);
41
+ };
42
+ process.on('SIGINT', () => cleanup('Stopped watching. Goodbye.'));
43
+ const tick = async () => {
44
+ try {
45
+ const [statusData, historyData, turnsData] = await Promise.all([
46
+ api.status(agentId),
47
+ api.history(agentId).catch(() => null),
48
+ api.turns(agentId).catch(() => null),
49
+ ]);
50
+ if (clearScreen) {
51
+ clearTerminal();
52
+ }
53
+ renderAgentDashboard(statusData, historyData?.contents, turnsData?.turns);
54
+ // Auto-stop on terminal states
55
+ if (statusData.status === 'STOPPED' || statusData.status === 'FAILED') {
56
+ console.log();
57
+ console.log(chalk.dim(`Agent reached ${statusData.status} state. Watch ended.`));
58
+ return false;
59
+ }
60
+ return true;
61
+ }
62
+ catch (error) {
63
+ if (clearScreen) {
64
+ clearTerminal();
65
+ }
66
+ console.error(chalk.red(`Error polling agent: ${formatError(error)}`));
67
+ console.log(chalk.dim('Retrying on next tick...'));
68
+ return true;
69
+ }
70
+ };
71
+ // Initial tick
72
+ const shouldContinue = await tick();
73
+ if (!shouldContinue) {
74
+ process.exit(0);
75
+ }
76
+ // Subsequent ticks
77
+ await new Promise((resolve) => {
78
+ timer = setInterval(async () => {
79
+ const cont = await tick();
80
+ if (!cont) {
81
+ if (timer)
82
+ clearInterval(timer);
83
+ resolve();
84
+ }
85
+ }, intervalSec * 1000);
86
+ });
87
+ process.exit(0);
88
+ }
89
+ // ─── All Agents Watch ──────────────────────────────────────────────────────
90
+ async function watchAllAgents(api, intervalSec, clearScreen) {
91
+ // Default to a slightly longer interval for the list view
92
+ const effectiveInterval = intervalSec === 2 ? 3 : intervalSec;
93
+ let timer = null;
94
+ const cleanup = (message) => {
95
+ if (timer) {
96
+ clearInterval(timer);
97
+ timer = null;
98
+ }
99
+ process.stdout.write('\n');
100
+ console.log(chalk.dim(message));
101
+ process.exit(0);
102
+ };
103
+ process.on('SIGINT', () => cleanup('Stopped watching. Goodbye.'));
104
+ const tick = async () => {
105
+ try {
106
+ const response = await api.list({ limit: 50 });
107
+ const agents = response.data.list;
108
+ const total = response.meta.total ?? response.data.count;
109
+ if (clearScreen) {
110
+ clearTerminal();
111
+ }
112
+ renderAgentTable(agents, total);
113
+ }
114
+ catch (error) {
115
+ if (clearScreen) {
116
+ clearTerminal();
117
+ }
118
+ console.error(chalk.red(`Error polling agents: ${formatError(error)}`));
119
+ console.log(chalk.dim('Retrying on next tick...'));
120
+ }
121
+ };
122
+ // Initial tick
123
+ await tick();
124
+ // Subsequent ticks
125
+ timer = setInterval(tick, effectiveInterval * 1000);
126
+ // Keep the process alive until SIGINT
127
+ await new Promise(() => { });
128
+ }
129
+ // ─── Rendering: Single Agent Dashboard ─────────────────────────────────────
130
+ function renderAgentDashboard(agent, history, turns) {
131
+ const lines = [];
132
+ // ── Header ─────────────────────────────────────────────────────────────
133
+ lines.push(chalk.bold.underline('Agent Dashboard'));
134
+ lines.push('');
135
+ // ── Agent Info ──────────────────────────────────────────────────────────
136
+ const uptime = agent.start_ts ? relativeTime(agent.start_ts) : '—';
137
+ const kvPairs = [
138
+ ['Agent ID', agent.agent_id],
139
+ ['Status', colorStatus(agent.status)],
140
+ ['Uptime', uptime],
141
+ ];
142
+ if (agent.channel) {
143
+ kvPairs.push(['Channel', agent.channel]);
144
+ }
145
+ if (agent.start_ts) {
146
+ kvPairs.push(['Started', formatTimestamp(agent.start_ts)]);
147
+ }
148
+ if (agent.stop_ts) {
149
+ kvPairs.push(['Stopped', formatTimestamp(agent.stop_ts)]);
150
+ }
151
+ if (agent.message) {
152
+ kvPairs.push(['Message', agent.message]);
153
+ }
154
+ const maxKeyLen = Math.max(...kvPairs.map(([k]) => k.length));
155
+ for (const [key, value] of kvPairs) {
156
+ lines.push(` ${chalk.dim(key.padEnd(maxKeyLen))} ${value}`);
157
+ }
158
+ // ── History ────────────────────────────────────────────────────────────
159
+ lines.push('');
160
+ lines.push(chalk.bold('Recent Conversation'));
161
+ if (!history || history.length === 0) {
162
+ lines.push(chalk.dim(' No conversation history yet.'));
163
+ }
164
+ else {
165
+ const recent = history.slice(-5);
166
+ for (const entry of recent) {
167
+ const roleTag = formatRole(entry.role);
168
+ const content = entry.content || chalk.dim('(empty)');
169
+ // Truncate very long messages for the dashboard
170
+ const truncated = content.length > 120 ? content.slice(0, 117) + '...' : content;
171
+ lines.push(` ${roleTag} ${truncated}`);
172
+ }
173
+ if (history.length > 5) {
174
+ lines.push(chalk.dim(` ... ${history.length - 5} earlier entries`));
175
+ }
176
+ }
177
+ // ── Turn Latency ───────────────────────────────────────────────────────
178
+ lines.push('');
179
+ lines.push(chalk.bold('Latest Turn Latency'));
180
+ if (!turns || turns.length === 0) {
181
+ lines.push(chalk.dim(' No turns recorded yet.'));
182
+ }
183
+ else {
184
+ const latest = turns[turns.length - 1];
185
+ const latencyParts = [];
186
+ if (latest.e2e_latency_ms !== undefined) {
187
+ latencyParts.push(`E2E: ${colorLatency(latest.e2e_latency_ms)}`);
188
+ }
189
+ if (latest.segmented_latency_ms?.asr_ms !== undefined) {
190
+ latencyParts.push(`ASR: ${colorLatency(latest.segmented_latency_ms.asr_ms)}`);
191
+ }
192
+ if (latest.segmented_latency_ms?.llm_ms !== undefined) {
193
+ latencyParts.push(`LLM: ${colorLatency(latest.segmented_latency_ms.llm_ms)}`);
194
+ }
195
+ if (latest.segmented_latency_ms?.tts_ms !== undefined) {
196
+ latencyParts.push(`TTS: ${colorLatency(latest.segmented_latency_ms.tts_ms)}`);
197
+ }
198
+ if (latencyParts.length > 0) {
199
+ lines.push(` ${latencyParts.join(chalk.dim(' | '))}`);
200
+ }
201
+ else {
202
+ lines.push(chalk.dim(' No latency data for latest turn.'));
203
+ }
204
+ lines.push(chalk.dim(` Turn: ${shortId(latest.turn_id)} | Type: ${latest.type} | Result: ${latest.end_reason}`));
205
+ // Show averages across all turns
206
+ if (turns.length > 1) {
207
+ const avgE2E = averageOf(turns.map((t) => t.e2e_latency_ms));
208
+ if (avgE2E !== null) {
209
+ lines.push(chalk.dim(` Avg E2E across ${turns.length} turns: `) +
210
+ colorLatency(avgE2E));
211
+ }
212
+ }
213
+ }
214
+ // ── Footer ─────────────────────────────────────────────────────────────
215
+ lines.push('');
216
+ lines.push(chalk.dim(`Last refresh: ${new Date().toLocaleTimeString()} | Watching... (Ctrl+C to stop)`));
217
+ process.stdout.write(lines.join('\n') + '\n');
218
+ }
219
+ // ─── Rendering: All Agents Table ───────────────────────────────────────────
220
+ function renderAgentTable(agents, total) {
221
+ const lines = [];
222
+ lines.push(chalk.bold.underline('Agent Watch'));
223
+ lines.push('');
224
+ if (agents.length === 0) {
225
+ lines.push(chalk.dim(' No agents found.'));
226
+ }
227
+ else {
228
+ // Table header
229
+ const colId = 'AGENT_ID'.padEnd(14);
230
+ const colStatus = 'STATUS'.padEnd(12);
231
+ const colChannel = 'CHANNEL'.padEnd(20);
232
+ const colStarted = 'STARTED';
233
+ lines.push(` ${chalk.bold(colId)} ${chalk.bold(colStatus)} ${chalk.bold(colChannel)} ${chalk.bold(colStarted)}`);
234
+ lines.push(chalk.dim(` ${'─'.repeat(14)} ${'─'.repeat(12)} ${'─'.repeat(20)} ${'─'.repeat(10)}`));
235
+ for (const agent of agents) {
236
+ const id = shortId(agent.agent_id).padEnd(14);
237
+ const status = colorStatus(agent.status).padEnd(12 + ansiPadding(agent.status));
238
+ const channel = (agent.channel ?? '—').padEnd(20);
239
+ const started = relativeTime(agent.start_ts);
240
+ lines.push(` ${id} ${status} ${channel} ${started}`);
241
+ }
242
+ }
243
+ lines.push('');
244
+ lines.push(chalk.dim(`${agents.length} of ${total} agents | Last refresh: ${new Date().toLocaleTimeString()} | Watching... (Ctrl+C to stop)`));
245
+ process.stdout.write(lines.join('\n') + '\n');
246
+ }
247
+ // ─── Terminal Helpers ──────────────────────────────────────────────────────
248
+ function clearTerminal() {
249
+ // Move cursor to top-left and clear entire screen
250
+ process.stdout.write('\x1b[2J\x1b[H');
251
+ }
252
+ // ─── Formatting Helpers ────────────────────────────────────────────────────
253
+ function formatRole(role) {
254
+ const padded = `[${role}]`.padEnd(13);
255
+ return role === 'user' ? chalk.cyan(padded) : chalk.green(padded);
256
+ }
257
+ function colorLatency(ms) {
258
+ const text = `${ms}ms`;
259
+ if (ms < 1000)
260
+ return chalk.green(text);
261
+ if (ms <= 2000)
262
+ return chalk.yellow(text);
263
+ return chalk.red(text);
264
+ }
265
+ function averageOf(values) {
266
+ const valid = values.filter((v) => v !== undefined && v !== null);
267
+ if (valid.length === 0)
268
+ return null;
269
+ return Math.round(valid.reduce((sum, v) => sum + v, 0) / valid.length);
270
+ }
271
+ /**
272
+ * Calculate the number of extra bytes ANSI color codes add to a status string,
273
+ * so padEnd can account for non-printable characters.
274
+ */
275
+ function ansiPadding(status) {
276
+ return colorStatus(status).length - status.length;
277
+ }
278
+ function formatError(error) {
279
+ if (error instanceof Error)
280
+ return error.message;
281
+ return String(error);
282
+ }
283
+ // ─── Validation ────────────────────────────────────────────────────────────
284
+ function parseInterval(value) {
285
+ const seconds = parseFloat(value);
286
+ if (Number.isNaN(seconds) || seconds < 0.5) {
287
+ throw new Error('Interval must be a number >= 0.5 seconds');
288
+ }
289
+ return seconds;
290
+ }
291
+ //# sourceMappingURL=watch.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"watch.js","sourceRoot":"","sources":["../../../../src/commands/agent/watch.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ import { Command } from 'commander';
2
+ export declare function registerAuthLogin(program: Command): void;