dexto 1.1.10 → 1.2.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 (181) hide show
  1. package/README.md +222 -84
  2. package/dist/agents/agent-registry.json +39 -1
  3. package/dist/agents/agent-template.yml +1 -1
  4. package/dist/agents/coding-agent/README.md +188 -0
  5. package/dist/agents/coding-agent/coding-agent.yml +203 -0
  6. package/dist/agents/database-agent/database-agent.yml +44 -2
  7. package/dist/agents/default-agent.yml +137 -13
  8. package/dist/agents/github-agent/github-agent.yml +42 -0
  9. package/dist/agents/image-editor-agent/image-editor-agent.yml +9 -2
  10. package/dist/agents/music-agent/README.md +1 -1
  11. package/dist/agents/music-agent/music-agent.yml +36 -2
  12. package/dist/agents/nano-banana-agent/nano-banana-agent.yml +35 -1
  13. package/dist/agents/podcast-agent/README.md +1 -1
  14. package/dist/agents/podcast-agent/podcast-agent.yml +37 -3
  15. package/dist/agents/product-name-researcher/product-name-researcher.yml +37 -1
  16. package/dist/agents/sora-video-agent/README.md +122 -0
  17. package/dist/agents/sora-video-agent/sora-video-agent.yml +98 -0
  18. package/dist/agents/talk2pdf-agent/talk2pdf-agent.yml +17 -2
  19. package/dist/agents/triage-demo/README.md +6 -6
  20. package/dist/agents/triage-demo/billing-agent.yml +1 -1
  21. package/dist/agents/triage-demo/escalation-agent.yml +1 -1
  22. package/dist/agents/triage-demo/product-info-agent.yml +1 -1
  23. package/dist/agents/triage-demo/technical-support-agent.yml +1 -1
  24. package/dist/agents/triage-demo/triage-agent.yml +16 -1
  25. package/dist/analytics/wrapper.d.ts.map +1 -1
  26. package/dist/analytics/wrapper.js +5 -3
  27. package/dist/api/a2a.d.ts +2 -2
  28. package/dist/api/a2a.d.ts.map +1 -1
  29. package/dist/api/a2a.js +3 -2
  30. package/dist/api/mcp/mcp_handler.d.ts +3 -3
  31. package/dist/api/mcp/mcp_handler.d.ts.map +1 -1
  32. package/dist/api/mcp/mcp_handler.js +7 -4
  33. package/dist/api/mcp/tool-aggregation-handler.d.ts.map +1 -1
  34. package/dist/api/mcp/tool-aggregation-handler.js +34 -42
  35. package/dist/api/memory/memory-handler.d.ts +18 -0
  36. package/dist/api/memory/memory-handler.d.ts.map +1 -0
  37. package/dist/api/memory/memory-handler.js +137 -0
  38. package/dist/api/middleware/errorHandler.d.ts.map +1 -1
  39. package/dist/api/middleware/errorHandler.js +2 -0
  40. package/dist/api/server.d.ts +2 -2
  41. package/dist/api/server.d.ts.map +1 -1
  42. package/dist/api/server.js +1129 -257
  43. package/dist/api/webhook-subscriber.d.ts.map +1 -1
  44. package/dist/api/webhook-subscriber.js +2 -1
  45. package/dist/api/websocket-subscriber.d.ts.map +1 -1
  46. package/dist/api/websocket-subscriber.js +67 -10
  47. package/dist/cli/cli-subscriber.d.ts +2 -1
  48. package/dist/cli/cli-subscriber.d.ts.map +1 -1
  49. package/dist/cli/cli-subscriber.js +11 -3
  50. package/dist/cli/cli.d.ts.map +1 -1
  51. package/dist/cli/cli.js +1 -0
  52. package/dist/cli/commands/install.d.ts +3 -3
  53. package/dist/cli/commands/install.d.ts.map +1 -1
  54. package/dist/cli/commands/install.js +223 -41
  55. package/dist/cli/commands/interactive-commands/model/model-commands.js +2 -2
  56. package/dist/cli/commands/interactive-commands/prompt-commands.d.ts +8 -1
  57. package/dist/cli/commands/interactive-commands/prompt-commands.d.ts.map +1 -1
  58. package/dist/cli/commands/interactive-commands/prompt-commands.js +252 -4
  59. package/dist/cli/commands/list-agents.d.ts.map +1 -1
  60. package/dist/cli/commands/list-agents.js +22 -3
  61. package/dist/cli/commands/setup.d.ts +4 -4
  62. package/dist/cli/commands/uninstall.d.ts +1 -1
  63. package/dist/cli/tool-confirmation/cli-confirmation-handler.d.ts +36 -7
  64. package/dist/cli/tool-confirmation/cli-confirmation-handler.d.ts.map +1 -1
  65. package/dist/cli/tool-confirmation/cli-confirmation-handler.js +314 -34
  66. package/dist/cli/utils/options.js +2 -2
  67. package/dist/index.js +117 -64
  68. package/dist/webui/.next/standalone/.next/static/chunks/419-6d449dcb2b056299.js +1 -0
  69. package/dist/webui/.next/standalone/.next/static/chunks/614-3519f8a6051e0088.js +1 -0
  70. package/dist/webui/.next/standalone/.next/static/chunks/656-5a9f6405badf66a8.js +25 -0
  71. package/dist/webui/.next/standalone/.next/static/chunks/765-755286dc586b1a51.js +1 -0
  72. package/dist/webui/.next/standalone/.next/static/chunks/804-f40df92a3adffcc0.js +1 -0
  73. package/dist/webui/.next/standalone/.next/static/chunks/854-232126f3c77e6c0b.js +1 -0
  74. package/dist/webui/.next/standalone/.next/static/chunks/app/chat/[sessionId]/page-a695b09e6bac5274.js +1 -0
  75. package/dist/webui/.next/standalone/.next/static/chunks/app/layout-f4a6ee5a028899d1.js +1 -0
  76. package/dist/webui/.next/standalone/.next/static/chunks/app/page-d1f127a0cac96246.js +1 -0
  77. package/dist/webui/.next/standalone/.next/static/chunks/app/playground/page-6f8d2abe76e51dfc.js +1 -0
  78. package/dist/webui/.next/standalone/.next/static/chunks/main-7decd42f62688419.js +1 -0
  79. package/dist/webui/.next/standalone/.next/static/chunks/{webpack-7c234e7e7e272295.js → webpack-7229fd0786f0483c.js} +1 -1
  80. package/dist/webui/.next/standalone/.next/static/css/c3c26ec984df1deb.css +1 -0
  81. package/dist/webui/.next/standalone/.next/static/css/de70bee13400563f.css +1 -0
  82. package/dist/webui/.next/standalone/.next/static/uqfH8SY_uhwdc0ZkpMwCO/_buildManifest.js +1 -0
  83. package/dist/webui/.next/standalone/package.json +7 -2
  84. package/dist/webui/.next/standalone/packages/webui/.next/BUILD_ID +1 -1
  85. package/dist/webui/.next/standalone/packages/webui/.next/app-build-manifest.json +30 -15
  86. package/dist/webui/.next/standalone/packages/webui/.next/app-path-routes-manifest.json +1 -0
  87. package/dist/webui/.next/standalone/packages/webui/.next/build-manifest.json +7 -7
  88. package/dist/webui/.next/standalone/packages/webui/.next/prerender-manifest.json +3 -3
  89. package/dist/webui/.next/standalone/packages/webui/.next/required-server-files.json +1 -11
  90. package/dist/webui/.next/standalone/packages/webui/.next/routes-manifest.json +11 -8
  91. package/dist/webui/.next/standalone/packages/webui/.next/server/app/_not-found/page.js +1 -1
  92. package/dist/webui/.next/standalone/packages/webui/.next/server/app/_not-found/page.js.nft.json +1 -1
  93. package/dist/webui/.next/standalone/packages/webui/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  94. package/dist/webui/.next/standalone/packages/webui/.next/server/app/chat/[sessionId]/page.js +2 -0
  95. package/dist/webui/.next/standalone/packages/webui/.next/server/app/chat/[sessionId]/page.js.nft.json +1 -0
  96. package/dist/webui/.next/standalone/packages/webui/.next/server/app/chat/[sessionId]/page_client-reference-manifest.js +1 -0
  97. package/dist/webui/.next/standalone/packages/webui/.next/server/app/page.js +2 -11
  98. package/dist/webui/.next/standalone/packages/webui/.next/server/app/page.js.nft.json +1 -1
  99. package/dist/webui/.next/standalone/packages/webui/.next/server/app/page_client-reference-manifest.js +1 -1
  100. package/dist/webui/.next/standalone/packages/webui/.next/server/app/playground/page.js +4 -8
  101. package/dist/webui/.next/standalone/packages/webui/.next/server/app/playground/page.js.nft.json +1 -1
  102. package/dist/webui/.next/standalone/packages/webui/.next/server/app/playground/page_client-reference-manifest.js +1 -1
  103. package/dist/webui/.next/standalone/packages/webui/.next/server/app-paths-manifest.json +1 -0
  104. package/dist/webui/.next/standalone/packages/webui/.next/server/chunks/1.js +12 -0
  105. package/dist/webui/.next/standalone/packages/webui/.next/server/chunks/102.js +25 -0
  106. package/dist/webui/.next/standalone/packages/webui/.next/server/chunks/383.js +1 -0
  107. package/dist/webui/.next/standalone/packages/webui/.next/server/chunks/{619.js → 426.js} +2 -2
  108. package/dist/webui/.next/standalone/packages/webui/.next/server/chunks/43.js +1 -1
  109. package/dist/webui/.next/standalone/packages/webui/.next/server/chunks/985.js +5 -0
  110. package/dist/webui/.next/standalone/packages/webui/.next/server/middleware-build-manifest.js +1 -1
  111. package/dist/webui/.next/standalone/packages/webui/.next/server/pages/500.html +1 -1
  112. package/dist/webui/.next/standalone/packages/webui/.next/server/server-reference-manifest.json +1 -1
  113. package/dist/webui/.next/standalone/packages/webui/.next/static/chunks/419-6d449dcb2b056299.js +1 -0
  114. package/dist/webui/.next/standalone/packages/webui/.next/static/chunks/614-3519f8a6051e0088.js +1 -0
  115. package/dist/webui/.next/standalone/packages/webui/.next/static/chunks/656-5a9f6405badf66a8.js +25 -0
  116. package/dist/webui/.next/standalone/packages/webui/.next/static/chunks/765-755286dc586b1a51.js +1 -0
  117. package/dist/webui/.next/standalone/packages/webui/.next/static/chunks/804-f40df92a3adffcc0.js +1 -0
  118. package/dist/webui/.next/standalone/packages/webui/.next/static/chunks/854-232126f3c77e6c0b.js +1 -0
  119. package/dist/webui/.next/standalone/packages/webui/.next/static/chunks/app/chat/[sessionId]/page-a695b09e6bac5274.js +1 -0
  120. package/dist/webui/.next/standalone/packages/webui/.next/static/chunks/app/layout-f4a6ee5a028899d1.js +1 -0
  121. package/dist/webui/.next/standalone/packages/webui/.next/static/chunks/app/page-d1f127a0cac96246.js +1 -0
  122. package/dist/webui/.next/standalone/packages/webui/.next/static/chunks/app/playground/page-6f8d2abe76e51dfc.js +1 -0
  123. package/dist/webui/.next/standalone/packages/webui/.next/static/chunks/main-7decd42f62688419.js +1 -0
  124. package/dist/webui/.next/standalone/packages/webui/.next/static/chunks/{webpack-7c234e7e7e272295.js → webpack-7229fd0786f0483c.js} +1 -1
  125. package/dist/webui/.next/standalone/packages/webui/.next/static/css/c3c26ec984df1deb.css +1 -0
  126. package/dist/webui/.next/standalone/packages/webui/.next/static/css/de70bee13400563f.css +1 -0
  127. package/dist/webui/.next/standalone/packages/webui/.next/static/uqfH8SY_uhwdc0ZkpMwCO/_buildManifest.js +1 -0
  128. package/dist/webui/.next/standalone/packages/webui/package.json +11 -4
  129. package/dist/webui/.next/standalone/packages/webui/server.js +1 -1
  130. package/dist/webui/.next/static/chunks/419-6d449dcb2b056299.js +1 -0
  131. package/dist/webui/.next/static/chunks/614-3519f8a6051e0088.js +1 -0
  132. package/dist/webui/.next/static/chunks/656-5a9f6405badf66a8.js +25 -0
  133. package/dist/webui/.next/static/chunks/765-755286dc586b1a51.js +1 -0
  134. package/dist/webui/.next/static/chunks/804-f40df92a3adffcc0.js +1 -0
  135. package/dist/webui/.next/static/chunks/854-232126f3c77e6c0b.js +1 -0
  136. package/dist/webui/.next/static/chunks/app/chat/[sessionId]/page-a695b09e6bac5274.js +1 -0
  137. package/dist/webui/.next/static/chunks/app/layout-f4a6ee5a028899d1.js +1 -0
  138. package/dist/webui/.next/static/chunks/app/page-d1f127a0cac96246.js +1 -0
  139. package/dist/webui/.next/static/chunks/app/playground/page-6f8d2abe76e51dfc.js +1 -0
  140. package/dist/webui/.next/static/chunks/main-7decd42f62688419.js +1 -0
  141. package/dist/webui/.next/static/chunks/{webpack-7c234e7e7e272295.js → webpack-7229fd0786f0483c.js} +1 -1
  142. package/dist/webui/.next/static/css/c3c26ec984df1deb.css +1 -0
  143. package/dist/webui/.next/static/css/de70bee13400563f.css +1 -0
  144. package/dist/webui/.next/static/uqfH8SY_uhwdc0ZkpMwCO/_buildManifest.js +1 -0
  145. package/dist/webui/package.json +11 -4
  146. package/package.json +5 -4
  147. package/dist/webui/.next/standalone/.next/static/PvkEd_BO6ZXxX99T_gUvs/_buildManifest.js +0 -1
  148. package/dist/webui/.next/standalone/.next/static/chunks/179-78abc2eacbc41da9.js +0 -1
  149. package/dist/webui/.next/standalone/.next/static/chunks/442-b1916bec348454b3.js +0 -1
  150. package/dist/webui/.next/standalone/.next/static/chunks/544-c4a8f278ed1a25d7.js +0 -1
  151. package/dist/webui/.next/standalone/.next/static/chunks/854-2a6d5a5297a15d52.js +0 -1
  152. package/dist/webui/.next/standalone/.next/static/chunks/app/layout-dde711766eda096b.js +0 -1
  153. package/dist/webui/.next/standalone/.next/static/chunks/app/page-5e94d5a49dc718d0.js +0 -1
  154. package/dist/webui/.next/standalone/.next/static/chunks/app/playground/page-9ae40e0b219583e3.js +0 -1
  155. package/dist/webui/.next/standalone/.next/static/chunks/main-b65ece3506a2355c.js +0 -1
  156. package/dist/webui/.next/standalone/.next/static/css/045cc65741e38fbd.css +0 -3
  157. package/dist/webui/.next/standalone/packages/webui/.next/server/chunks/549.js +0 -1
  158. package/dist/webui/.next/standalone/packages/webui/.next/server/chunks/950.js +0 -5
  159. package/dist/webui/.next/standalone/packages/webui/.next/static/PvkEd_BO6ZXxX99T_gUvs/_buildManifest.js +0 -1
  160. package/dist/webui/.next/standalone/packages/webui/.next/static/chunks/179-78abc2eacbc41da9.js +0 -1
  161. package/dist/webui/.next/standalone/packages/webui/.next/static/chunks/442-b1916bec348454b3.js +0 -1
  162. package/dist/webui/.next/standalone/packages/webui/.next/static/chunks/544-c4a8f278ed1a25d7.js +0 -1
  163. package/dist/webui/.next/standalone/packages/webui/.next/static/chunks/854-2a6d5a5297a15d52.js +0 -1
  164. package/dist/webui/.next/standalone/packages/webui/.next/static/chunks/app/layout-dde711766eda096b.js +0 -1
  165. package/dist/webui/.next/standalone/packages/webui/.next/static/chunks/app/page-5e94d5a49dc718d0.js +0 -1
  166. package/dist/webui/.next/standalone/packages/webui/.next/static/chunks/app/playground/page-9ae40e0b219583e3.js +0 -1
  167. package/dist/webui/.next/standalone/packages/webui/.next/static/chunks/main-b65ece3506a2355c.js +0 -1
  168. package/dist/webui/.next/standalone/packages/webui/.next/static/css/045cc65741e38fbd.css +0 -3
  169. package/dist/webui/.next/static/PvkEd_BO6ZXxX99T_gUvs/_buildManifest.js +0 -1
  170. package/dist/webui/.next/static/chunks/179-78abc2eacbc41da9.js +0 -1
  171. package/dist/webui/.next/static/chunks/442-b1916bec348454b3.js +0 -1
  172. package/dist/webui/.next/static/chunks/544-c4a8f278ed1a25d7.js +0 -1
  173. package/dist/webui/.next/static/chunks/854-2a6d5a5297a15d52.js +0 -1
  174. package/dist/webui/.next/static/chunks/app/layout-dde711766eda096b.js +0 -1
  175. package/dist/webui/.next/static/chunks/app/page-5e94d5a49dc718d0.js +0 -1
  176. package/dist/webui/.next/static/chunks/app/playground/page-9ae40e0b219583e3.js +0 -1
  177. package/dist/webui/.next/static/chunks/main-b65ece3506a2355c.js +0 -1
  178. package/dist/webui/.next/static/css/045cc65741e38fbd.css +0 -3
  179. /package/dist/webui/.next/standalone/.next/static/{PvkEd_BO6ZXxX99T_gUvs → uqfH8SY_uhwdc0ZkpMwCO}/_ssgManifest.js +0 -0
  180. /package/dist/webui/.next/standalone/packages/webui/.next/static/{PvkEd_BO6ZXxX99T_gUvs → uqfH8SY_uhwdc0ZkpMwCO}/_ssgManifest.js +0 -0
  181. /package/dist/webui/.next/static/{PvkEd_BO6ZXxX99T_gUvs → uqfH8SY_uhwdc0ZkpMwCO}/_ssgManifest.js +0 -0
@@ -5,18 +5,21 @@
5
5
  * These commands provide functionality for viewing and managing system prompts.
6
6
  *
7
7
  * Available Prompt Commands:
8
- * - /prompt - Display the current system prompt
8
+ * - /sysprompt - Display the current system prompt
9
+ * - /prompts - List all available prompts (MCP + internal)
10
+ * - /<prompt-name> [args] - Direct prompt execution (auto-generated for each prompt)
9
11
  */
10
12
  import chalk from 'chalk';
11
- import { logger } from '@dexto/core';
13
+ import { logger, flattenPromptResult } from '@dexto/core';
14
+ // Avoid depending on core types to keep CLI typecheck independent of build
12
15
  /**
13
16
  * Prompt management commands
14
17
  */
15
18
  export const promptCommands = [
16
19
  {
17
- name: 'prompt',
20
+ name: 'sysprompt',
18
21
  description: 'Display the current system prompt',
19
- usage: '/prompt',
22
+ usage: '/sysprompt',
20
23
  category: 'Prompt Management',
21
24
  handler: async (args, agent) => {
22
25
  try {
@@ -33,4 +36,249 @@ export const promptCommands = [
33
36
  return true;
34
37
  },
35
38
  },
39
+ {
40
+ name: 'prompts',
41
+ description: 'List all available prompts (MCP + internal)',
42
+ usage: '/prompts',
43
+ category: 'Prompt Management',
44
+ handler: async (_args, agent) => {
45
+ try {
46
+ const prompts = await agent.listPrompts();
47
+ const promptNames = Object.keys(prompts || {});
48
+ if (promptNames.length === 0) {
49
+ console.log(chalk.yellow('\n⚠️ No prompts available'));
50
+ return true;
51
+ }
52
+ console.log(chalk.bold.green('\n📝 Available Prompts:\n'));
53
+ // Group by source
54
+ const mcpPrompts = [];
55
+ const filePrompts = [];
56
+ const starterPrompts = [];
57
+ const customPrompts = [];
58
+ for (const [name, info] of Object.entries(prompts)) {
59
+ if (info.source === 'mcp') {
60
+ mcpPrompts.push(name);
61
+ }
62
+ else if (info.source === 'file') {
63
+ filePrompts.push(name);
64
+ }
65
+ else if (info.source === 'starter') {
66
+ starterPrompts.push(name);
67
+ }
68
+ else if (info.source === 'custom') {
69
+ customPrompts.push(name);
70
+ }
71
+ }
72
+ if (mcpPrompts.length > 0) {
73
+ console.log(chalk.cyan('🔗 MCP Prompts:'));
74
+ mcpPrompts.forEach((name) => {
75
+ const info = prompts[name];
76
+ if (info) {
77
+ // Only show title if it's different from name
78
+ const title = info.title && info.title !== name ? ` (${info.title})` : '';
79
+ const desc = info.description ? ` - ${info.description}` : '';
80
+ const args = info.arguments && info.arguments.length > 0
81
+ ? ` [args: ${info.arguments
82
+ .map((a) => `${a.name}${a.required ? '*' : ''}`)
83
+ .join(', ')}]`
84
+ : '';
85
+ console.log(` ${chalk.blue(name)}${chalk.yellow(title)}${chalk.dim(desc)}${chalk.gray(args)}`);
86
+ }
87
+ });
88
+ console.log();
89
+ }
90
+ if (filePrompts.length > 0) {
91
+ console.log(chalk.magenta('📁 File Prompts:'));
92
+ filePrompts.forEach((name) => {
93
+ const info = prompts[name];
94
+ if (info) {
95
+ // Only show title if it's different from name
96
+ const title = info.title && info.title !== name ? ` (${info.title})` : '';
97
+ const desc = info.description ? ` - ${info.description}` : '';
98
+ console.log(` ${chalk.blue(name)}${chalk.yellow(title)}${chalk.dim(desc)}`);
99
+ }
100
+ });
101
+ console.log();
102
+ }
103
+ if (starterPrompts.length > 0) {
104
+ console.log(chalk.green('⭐ Starter Prompts:'));
105
+ starterPrompts.forEach((name) => {
106
+ const info = prompts[name];
107
+ if (info) {
108
+ // Only show title if it's different from name
109
+ const title = info.title && info.title !== name ? ` (${info.title})` : '';
110
+ const desc = info.description ? ` - ${info.description}` : '';
111
+ console.log(` ${chalk.blue(name)}${chalk.yellow(title)}${chalk.dim(desc)}`);
112
+ }
113
+ });
114
+ console.log();
115
+ }
116
+ if (customPrompts.length > 0) {
117
+ console.log(chalk.greenBright('✨ Custom Prompts:'));
118
+ customPrompts.forEach((name) => {
119
+ const info = prompts[name];
120
+ if (info) {
121
+ // Only show title if it's different from name
122
+ const title = info.title && info.title !== name ? ` (${info.title})` : '';
123
+ const desc = info.description ? ` - ${info.description}` : '';
124
+ console.log(` ${chalk.blue(name)}${chalk.yellow(title)}${chalk.dim(desc)}`);
125
+ }
126
+ });
127
+ console.log();
128
+ }
129
+ console.log(chalk.dim(`Total: ${promptNames.length} prompts`));
130
+ return true;
131
+ }
132
+ catch (error) {
133
+ console.error(chalk.red(`Error listing prompts: ${error instanceof Error ? error.message : String(error)}`));
134
+ return false;
135
+ }
136
+ },
137
+ },
138
+ {
139
+ // TODO: (355) USER TO CHECK: Nit: rename to 'use prompt'?
140
+ // https://github.com/truffle-ai/dexto/pull/355#discussion_r2412938399
141
+ name: 'use',
142
+ description: 'Use a specific prompt with optional arguments',
143
+ usage: '/<prompt-name> [args]',
144
+ category: 'Prompt Management',
145
+ handler: async (args, agent) => {
146
+ try {
147
+ if (args.length === 0) {
148
+ console.log(chalk.red('❌ Please specify a prompt name'));
149
+ console.log(chalk.dim('Usage: /<prompt-name> [args]'));
150
+ console.log(chalk.dim('Example: /code-review language=javascript code="console.log(\'hello\')"'));
151
+ return true;
152
+ }
153
+ const promptName = args[0];
154
+ const promptArgs = args.slice(1);
155
+ // Check if prompt exists
156
+ if (!promptName || !(await agent.hasPrompt(promptName))) {
157
+ console.log(chalk.red(`❌ Prompt '${promptName}' not found`));
158
+ console.log(chalk.dim('Use /prompts to see available prompts'));
159
+ return true;
160
+ }
161
+ const { argMap, context } = splitPromptArguments(promptArgs);
162
+ console.log(chalk.cyan(`🤖 Using prompt: ${promptName}`));
163
+ if (Object.keys(argMap).length > 0) {
164
+ console.log(chalk.dim(`Arguments: ${JSON.stringify(argMap)}`));
165
+ }
166
+ if (context) {
167
+ console.log(chalk.dim(`Context: ${context}`));
168
+ }
169
+ const result = await agent.getPrompt(promptName, argMap);
170
+ const flattened = flattenPromptResult(result);
171
+ if (flattened.resourceUris.length > 0) {
172
+ console.log(chalk.dim(`Resources: ${flattened.resourceUris.map((uri) => `@<${uri}>`).join(', ')}`));
173
+ }
174
+ const finalText = appendContext(flattened.text, context);
175
+ if (finalText.trim()) {
176
+ await agent.run(finalText.trim());
177
+ }
178
+ else {
179
+ console.log(chalk.yellow(`⚠️ Prompt '${promptName}' returned no content`));
180
+ }
181
+ return true;
182
+ }
183
+ catch (error) {
184
+ const errorMessage = error instanceof Error ? error.message : String(error);
185
+ logger.error(`Failed to use prompt: ${errorMessage}`);
186
+ if (errorMessage.includes('not found')) {
187
+ console.log(chalk.red(`❌ Prompt not found. Try running /prompts to see available prompts.`));
188
+ }
189
+ else {
190
+ console.log(chalk.red(`❌ Error: ${errorMessage}`));
191
+ }
192
+ return true;
193
+ }
194
+ },
195
+ },
36
196
  ];
197
+ /**
198
+ * Create a dynamic command definition from a prompt
199
+ */
200
+ function createPromptCommand(promptInfo) {
201
+ return {
202
+ name: promptInfo.name,
203
+ description: promptInfo.description || `Execute ${promptInfo.name} prompt`,
204
+ usage: `/${promptInfo.name} [context]`,
205
+ category: 'Dynamic Prompts',
206
+ handler: async (args, agent) => {
207
+ try {
208
+ const { argMap, context: contextString } = splitPromptArguments(args);
209
+ if (Object.keys(argMap).length > 0) {
210
+ console.log(chalk.cyan(`🤖 Executing prompt: ${promptInfo.name}`));
211
+ console.log(chalk.dim(`Explicit arguments: ${JSON.stringify(argMap)}`));
212
+ }
213
+ else if (contextString) {
214
+ console.log(chalk.cyan(`🤖 Executing prompt: ${promptInfo.name}`));
215
+ console.log(chalk.dim(`Context: ${contextString} (LLM will extrapolate template variables)`));
216
+ }
217
+ else {
218
+ console.log(chalk.cyan(`🤖 Executing prompt: ${promptInfo.name}`));
219
+ console.log(chalk.dim('No arguments provided - LLM will extrapolate from context'));
220
+ }
221
+ const result = await agent.getPrompt(promptInfo.name, argMap);
222
+ const flattened = flattenPromptResult(result);
223
+ if (flattened.resourceUris.length > 0) {
224
+ console.log(chalk.dim(`Resources: ${flattened.resourceUris.map((uri) => `@<${uri}>`).join(', ')}`));
225
+ }
226
+ const finalText = appendContext(flattened.text, contextString);
227
+ if (finalText.trim()) {
228
+ await agent.run(finalText.trim());
229
+ }
230
+ else {
231
+ console.log(chalk.yellow(`⚠️ Prompt '${promptInfo.name}' returned no content`));
232
+ }
233
+ return true;
234
+ }
235
+ catch (error) {
236
+ const errorMessage = error instanceof Error ? error.message : String(error);
237
+ logger.error(`Failed to execute prompt command '${promptInfo.name}': ${errorMessage}`);
238
+ console.log(chalk.red(`❌ Error executing prompt '${promptInfo.name}': ${errorMessage}`));
239
+ return true;
240
+ }
241
+ },
242
+ };
243
+ }
244
+ /**
245
+ * Get all dynamic prompt commands based on available prompts
246
+ */
247
+ export async function getDynamicPromptCommands(agent) {
248
+ try {
249
+ const prompts = await agent.listPrompts();
250
+ return Object.values(prompts).map(createPromptCommand);
251
+ }
252
+ catch (error) {
253
+ logger.error(`Failed to get dynamic prompt commands: ${error instanceof Error ? error.message : String(error)}`);
254
+ return [];
255
+ }
256
+ }
257
+ function splitPromptArguments(args) {
258
+ const map = {};
259
+ const contextParts = [];
260
+ for (const arg of args) {
261
+ const equalsIndex = arg.indexOf('=');
262
+ if (equalsIndex > 0) {
263
+ const key = arg.slice(0, equalsIndex).trim();
264
+ const value = arg.slice(equalsIndex + 1);
265
+ if (key.length > 0) {
266
+ map[key] = value;
267
+ }
268
+ }
269
+ else if (arg.trim().length > 0) {
270
+ contextParts.push(arg);
271
+ }
272
+ }
273
+ const context = contextParts.length > 0 ? contextParts.join(' ') : undefined;
274
+ return { argMap: map, context };
275
+ }
276
+ function appendContext(text, context) {
277
+ if (!context || context.trim().length === 0) {
278
+ return text ?? '';
279
+ }
280
+ if (!text || text.trim().length === 0) {
281
+ return context;
282
+ }
283
+ return `${text.trim()}\n\n${context}`;
284
+ }
@@ -1 +1 @@
1
- {"version":3,"file":"list-agents.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/list-agents.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AASxB,QAAA,MAAM,uBAAuB;;;;;;;;;;;;EAMhB,CAAC;AAEd,MAAM,MAAM,wBAAwB,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,uBAAuB,CAAC,CAAC;AAChF,MAAM,MAAM,6BAA6B,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,uBAAuB,CAAC,CAAC;AAwHpF;;GAEG;AACH,wBAAsB,uBAAuB,CACzC,OAAO,EAAE,6BAA6B,GACvC,OAAO,CAAC,IAAI,CAAC,CA6Gf"}
1
+ {"version":3,"file":"list-agents.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/list-agents.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AASxB,QAAA,MAAM,uBAAuB;;;;;;;;;;;;EAMhB,CAAC;AAEd,MAAM,MAAM,wBAAwB,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,uBAAuB,CAAC,CAAC;AAChF,MAAM,MAAM,6BAA6B,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,uBAAuB,CAAC,CAAC;AA0HpF;;GAEG;AACH,wBAAsB,uBAAuB,CACzC,OAAO,EAAE,6BAA6B,GACvC,OAAO,CAAC,IAAI,CAAC,CAiIf"}
@@ -93,6 +93,7 @@ function getAvailableAgents() {
93
93
  description: data.description,
94
94
  author: data.author,
95
95
  tags: data.tags,
96
+ type: data.type,
96
97
  }))
97
98
  .sort((a, b) => a.name.localeCompare(b.name));
98
99
  }
@@ -150,9 +151,27 @@ export async function handleListAgentsCommand(options) {
150
151
  // Show available agents (not installed)
151
152
  if (showAvailable) {
152
153
  const availableNotInstalled = availableAgents.filter((available) => !installedAgents.some((installed) => installed.name === available.name));
153
- if (availableNotInstalled.length > 0) {
154
- console.log(chalk.blue('📋 Available to Install:'));
155
- for (const agent of availableNotInstalled) {
154
+ const builtinAgents = availableNotInstalled.filter((a) => a.type === 'builtin');
155
+ const customAgents = availableNotInstalled.filter((a) => a.type === 'custom');
156
+ if (builtinAgents.length > 0) {
157
+ console.log(chalk.blue('📋 Builtin Agents Available to Install:'));
158
+ for (const agent of builtinAgents) {
159
+ if (validated.verbose) {
160
+ console.log(` ${chalk.bold(agent.name)}`);
161
+ console.log(` ${chalk.gray(agent.description)}`);
162
+ console.log(` ${chalk.gray('Author:')} ${agent.author}`);
163
+ console.log(` ${chalk.gray('Tags:')} ${agent.tags.join(', ')}`);
164
+ console.log();
165
+ }
166
+ else {
167
+ console.log(` • ${chalk.bold(agent.name)} - ${agent.description}`);
168
+ }
169
+ }
170
+ console.log();
171
+ }
172
+ if (customAgents.length > 0) {
173
+ console.log(chalk.magenta('🔧 Custom Agents Available:'));
174
+ for (const agent of customAgents) {
156
175
  if (validated.verbose) {
157
176
  console.log(` ${chalk.bold(agent.name)}`);
158
177
  console.log(` ${chalk.gray(agent.description)}`);
@@ -7,28 +7,28 @@ declare const SetupCommandSchema: z.ZodEffects<z.ZodObject<{
7
7
  force: z.ZodDefault<z.ZodBoolean>;
8
8
  }, "strict", z.ZodTypeAny, {
9
9
  interactive: boolean;
10
- defaultAgent: string;
11
10
  force: boolean;
11
+ defaultAgent: string;
12
12
  model?: string | undefined;
13
13
  provider?: "openai" | "openai-compatible" | "anthropic" | "google" | "groq" | "xai" | "cohere" | undefined;
14
14
  }, {
15
15
  interactive?: boolean | undefined;
16
16
  model?: string | undefined;
17
17
  provider?: "openai" | "openai-compatible" | "anthropic" | "google" | "groq" | "xai" | "cohere" | undefined;
18
- defaultAgent?: string | undefined;
19
18
  force?: boolean | undefined;
19
+ defaultAgent?: string | undefined;
20
20
  }>, {
21
21
  interactive: boolean;
22
- defaultAgent: string;
23
22
  force: boolean;
23
+ defaultAgent: string;
24
24
  model?: string | undefined;
25
25
  provider?: "openai" | "openai-compatible" | "anthropic" | "google" | "groq" | "xai" | "cohere" | undefined;
26
26
  }, {
27
27
  interactive?: boolean | undefined;
28
28
  model?: string | undefined;
29
29
  provider?: "openai" | "openai-compatible" | "anthropic" | "google" | "groq" | "xai" | "cohere" | undefined;
30
- defaultAgent?: string | undefined;
31
30
  force?: boolean | undefined;
31
+ defaultAgent?: string | undefined;
32
32
  }>;
33
33
  export type CLISetupOptions = z.output<typeof SetupCommandSchema>;
34
34
  export type CLISetupOptionsInput = z.input<typeof SetupCommandSchema>;
@@ -4,8 +4,8 @@ declare const UninstallCommandSchema: z.ZodObject<{
4
4
  all: z.ZodDefault<z.ZodBoolean>;
5
5
  force: z.ZodDefault<z.ZodBoolean>;
6
6
  }, "strict", z.ZodTypeAny, {
7
- agents: string[];
8
7
  force: boolean;
8
+ agents: string[];
9
9
  all: boolean;
10
10
  }, {
11
11
  agents: string[];
@@ -1,24 +1,53 @@
1
1
  import { AgentEventBus } from '@dexto/core';
2
2
  import { EventSubscriber } from '../../api/types.js';
3
3
  /**
4
- * CLI-specific subscriber for tool confirmation events
5
- * Implements EventSubscriber pattern to listen to AgentEventBus for tool confirmation requests
4
+ * CLI-specific subscriber for approval events
5
+ * Implements EventSubscriber pattern to listen to AgentEventBus for approval requests
6
6
  */
7
7
  export declare class CLIToolConfirmationSubscriber implements EventSubscriber {
8
8
  private agentEventBus?;
9
9
  constructor();
10
10
  /**
11
- * Subscribe to tool confirmation events on the AgentEventBus
11
+ * Subscribe to approval events on the AgentEventBus
12
12
  */
13
13
  subscribe(eventBus: AgentEventBus): void;
14
14
  /**
15
- * Handle tool confirmation request events from the AgentEventBus
15
+ * Handle approval request events from the AgentEventBus
16
16
  */
17
- private handleConfirmationRequest;
17
+ private handleApprovalRequest;
18
18
  /**
19
- * Send confirmation response via AgentEventBus
19
+ * Handle tool confirmation approval
20
20
  */
21
- private sendConfirmationResponse;
21
+ private handleToolConfirmation;
22
+ /**
23
+ * Handle elicitation approval (form-based input from MCP servers)
24
+ */
25
+ private handleElicitation;
26
+ /**
27
+ * Collect form data based on JSON Schema
28
+ * Returns null if user cancels
29
+ */
30
+ private collectFormData;
31
+ /**
32
+ * Collect string input from user
33
+ */
34
+ private collectStringInput;
35
+ /**
36
+ * Collect boolean input from user (yes/no)
37
+ */
38
+ private collectBooleanInput;
39
+ /**
40
+ * Collect number input from user
41
+ */
42
+ private collectNumberInput;
43
+ /**
44
+ * Collect enum input from user (select from list)
45
+ */
46
+ private collectEnumInput;
47
+ /**
48
+ * Send approval response via AgentEventBus
49
+ */
50
+ private sendApprovalResponse;
22
51
  /**
23
52
  * Collect user input with arrow key navigation
24
53
  * @returns Promise resolving to boolean (true for approve, false for deny)
@@ -1 +1 @@
1
- {"version":3,"file":"cli-confirmation-handler.d.ts","sourceRoot":"","sources":["../../../src/cli/tool-confirmation/cli-confirmation-handler.ts"],"names":[],"mappings":"AAIA,OAAO,EAGH,aAAa,EAChB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAErD;;;GAGG;AACH,qBAAa,6BAA8B,YAAW,eAAe;IACjE,OAAO,CAAC,aAAa,CAAC,CAAgB;;IAMtC;;OAEG;IACH,SAAS,CAAC,QAAQ,EAAE,aAAa,GAAG,IAAI;IAQxC;;OAEG;YACW,yBAAyB;IAoCvC;;OAEG;IACH,OAAO,CAAC,wBAAwB;IAWhC;;;OAGG;IACH,OAAO,CAAC,oBAAoB;IA2F5B;;;OAGG;IACH,OAAO,CAAC,eAAe;IAevB;;OAEG;IACH,OAAO,IAAI,IAAI;CAKlB"}
1
+ {"version":3,"file":"cli-confirmation-handler.d.ts","sourceRoot":"","sources":["../../../src/cli/tool-confirmation/cli-confirmation-handler.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAErD;;;GAGG;AACH,qBAAa,6BAA8B,YAAW,eAAe;IACjE,OAAO,CAAC,aAAa,CAAC,CAAgB;;IAMtC;;OAEG;IACH,SAAS,CAAC,QAAQ,EAAE,aAAa,GAAG,IAAI;IAKxC;;OAEG;YACW,qBAAqB;IAoCnC;;OAEG;YACW,sBAAsB;IA+CpC;;OAEG;YACW,iBAAiB;IAwE/B;;;OAGG;YACW,eAAe;IAuD7B;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAuC1B;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAgD3B;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAsD1B;;OAEG;IACH,OAAO,CAAC,gBAAgB;IA4DxB;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAgB5B;;;OAGG;IACH,OAAO,CAAC,oBAAoB;IA2F5B;;;OAGG;IACH,OAAO,CAAC,eAAe;IAevB;;OAEG;IACH,OAAO,IAAI,IAAI;CAKlB"}