dexto 1.4.0 → 1.5.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 (223) hide show
  1. package/README.md +62 -7
  2. package/dist/agents/agent-template.yml +2 -2
  3. package/dist/agents/coding-agent/coding-agent.yml +22 -16
  4. package/dist/agents/database-agent/database-agent.yml +2 -2
  5. package/dist/agents/default-agent.yml +7 -5
  6. package/dist/agents/github-agent/github-agent.yml +2 -2
  7. package/dist/agents/product-name-researcher/product-name-researcher.yml +2 -2
  8. package/dist/agents/talk2pdf-agent/talk2pdf-agent.yml +2 -2
  9. package/dist/analytics/events.d.ts +13 -6
  10. package/dist/analytics/events.d.ts.map +1 -1
  11. package/dist/analytics/index.d.ts +1 -1
  12. package/dist/analytics/index.d.ts.map +1 -1
  13. package/dist/analytics/index.js +6 -2
  14. package/dist/api/server-hono.d.ts.map +1 -1
  15. package/dist/api/server-hono.js +27 -5
  16. package/dist/cli/cli-subscriber.d.ts +4 -0
  17. package/dist/cli/cli-subscriber.d.ts.map +1 -1
  18. package/dist/cli/cli-subscriber.js +40 -2
  19. package/dist/cli/commands/create-app.d.ts +16 -14
  20. package/dist/cli/commands/create-app.d.ts.map +1 -1
  21. package/dist/cli/commands/create-app.js +626 -102
  22. package/dist/cli/commands/create-image.d.ts +7 -0
  23. package/dist/cli/commands/create-image.d.ts.map +1 -0
  24. package/dist/cli/commands/create-image.js +201 -0
  25. package/dist/cli/commands/helpers/formatters.js +7 -7
  26. package/dist/cli/commands/index.d.ts +2 -1
  27. package/dist/cli/commands/index.d.ts.map +1 -1
  28. package/dist/cli/commands/index.js +2 -1
  29. package/dist/cli/commands/init-app.js +7 -7
  30. package/dist/cli/commands/install.d.ts +0 -3
  31. package/dist/cli/commands/install.d.ts.map +1 -1
  32. package/dist/cli/commands/install.js +10 -35
  33. package/dist/cli/commands/interactive-commands/command-parser.js +7 -7
  34. package/dist/cli/commands/interactive-commands/general-commands.js +1 -1
  35. package/dist/cli/commands/interactive-commands/prompt-commands.js +11 -11
  36. package/dist/cli/commands/interactive-commands/system/system-commands.js +3 -3
  37. package/dist/cli/commands/list-agents.js +2 -2
  38. package/dist/cli/commands/session-commands.js +16 -16
  39. package/dist/cli/commands/setup.d.ts +13 -5
  40. package/dist/cli/commands/setup.d.ts.map +1 -1
  41. package/dist/cli/commands/setup.js +860 -65
  42. package/dist/cli/commands/which.js +1 -1
  43. package/dist/cli/ink-cli/components/ApprovalPrompt.d.ts +2 -0
  44. package/dist/cli/ink-cli/components/ApprovalPrompt.d.ts.map +1 -1
  45. package/dist/cli/ink-cli/components/ApprovalPrompt.js +29 -7
  46. package/dist/cli/ink-cli/components/CustomInput.js +1 -1
  47. package/dist/cli/ink-cli/components/EditableMultiLineInput.js +4 -4
  48. package/dist/cli/ink-cli/components/ElicitationForm.d.ts.map +1 -1
  49. package/dist/cli/ink-cli/components/ElicitationForm.js +6 -6
  50. package/dist/cli/ink-cli/components/ErrorBoundary.d.ts.map +1 -1
  51. package/dist/cli/ink-cli/components/ErrorBoundary.js +1 -1
  52. package/dist/cli/ink-cli/components/Footer.d.ts.map +1 -1
  53. package/dist/cli/ink-cli/components/Footer.js +1 -1
  54. package/dist/cli/ink-cli/components/HistorySearchBar.d.ts.map +1 -1
  55. package/dist/cli/ink-cli/components/HistorySearchBar.js +1 -1
  56. package/dist/cli/ink-cli/components/MultiLineInput.d.ts.map +1 -1
  57. package/dist/cli/ink-cli/components/MultiLineInput.js +3 -3
  58. package/dist/cli/ink-cli/components/ResourceAutocomplete.d.ts.map +1 -1
  59. package/dist/cli/ink-cli/components/ResourceAutocomplete.js +4 -4
  60. package/dist/cli/ink-cli/components/SlashCommandAutocomplete.js +3 -3
  61. package/dist/cli/ink-cli/components/StatusBar.d.ts.map +1 -1
  62. package/dist/cli/ink-cli/components/StatusBar.js +7 -5
  63. package/dist/cli/ink-cli/components/TextBufferInput.d.ts.map +1 -1
  64. package/dist/cli/ink-cli/components/TextBufferInput.js +6 -6
  65. package/dist/cli/ink-cli/components/base/BaseAutocomplete.js +4 -4
  66. package/dist/cli/ink-cli/components/base/BaseSelector.js +2 -2
  67. package/dist/cli/ink-cli/components/chat/Footer.js +1 -1
  68. package/dist/cli/ink-cli/components/chat/Header.d.ts.map +1 -1
  69. package/dist/cli/ink-cli/components/chat/Header.js +2 -4
  70. package/dist/cli/ink-cli/components/chat/MessageItem.d.ts.map +1 -1
  71. package/dist/cli/ink-cli/components/chat/MessageItem.js +5 -5
  72. package/dist/cli/ink-cli/components/chat/MessageList.js +1 -1
  73. package/dist/cli/ink-cli/components/chat/QueuedMessagesDisplay.js +1 -1
  74. package/dist/cli/ink-cli/components/chat/ToolIcon.d.ts +1 -1
  75. package/dist/cli/ink-cli/components/chat/ToolIcon.js +4 -4
  76. package/dist/cli/ink-cli/components/chat/styled-boxes/ConfigBox.js +1 -1
  77. package/dist/cli/ink-cli/components/chat/styled-boxes/HelpBox.js +1 -1
  78. package/dist/cli/ink-cli/components/chat/styled-boxes/LogConfigBox.js +2 -2
  79. package/dist/cli/ink-cli/components/chat/styled-boxes/SessionHistoryBox.js +5 -5
  80. package/dist/cli/ink-cli/components/chat/styled-boxes/SessionListBox.js +2 -2
  81. package/dist/cli/ink-cli/components/chat/styled-boxes/ShortcutsBox.js +1 -1
  82. package/dist/cli/ink-cli/components/chat/styled-boxes/StatsBox.js +1 -1
  83. package/dist/cli/ink-cli/components/chat/styled-boxes/StyledBox.js +2 -2
  84. package/dist/cli/ink-cli/components/modes/AlternateBufferCLI.d.ts.map +1 -1
  85. package/dist/cli/ink-cli/components/modes/AlternateBufferCLI.js +1 -1
  86. package/dist/cli/ink-cli/components/modes/StaticCLI.d.ts.map +1 -1
  87. package/dist/cli/ink-cli/components/modes/StaticCLI.js +1 -1
  88. package/dist/cli/ink-cli/components/overlays/ApiKeyInput.js +1 -1
  89. package/dist/cli/ink-cli/components/overlays/CustomModelWizard.d.ts +10 -2
  90. package/dist/cli/ink-cli/components/overlays/CustomModelWizard.d.ts.map +1 -1
  91. package/dist/cli/ink-cli/components/overlays/CustomModelWizard.js +198 -89
  92. package/dist/cli/ink-cli/components/overlays/LogLevelSelector.d.ts.map +1 -1
  93. package/dist/cli/ink-cli/components/overlays/LogLevelSelector.js +2 -2
  94. package/dist/cli/ink-cli/components/overlays/McpAddChoice.d.ts.map +1 -1
  95. package/dist/cli/ink-cli/components/overlays/McpAddChoice.js +1 -1
  96. package/dist/cli/ink-cli/components/overlays/McpAddSelector.js +1 -1
  97. package/dist/cli/ink-cli/components/overlays/McpCustomTypeSelector.d.ts.map +1 -1
  98. package/dist/cli/ink-cli/components/overlays/McpCustomTypeSelector.js +2 -2
  99. package/dist/cli/ink-cli/components/overlays/McpCustomWizard.js +1 -1
  100. package/dist/cli/ink-cli/components/overlays/McpRemoveSelector.d.ts.map +1 -1
  101. package/dist/cli/ink-cli/components/overlays/McpRemoveSelector.js +1 -1
  102. package/dist/cli/ink-cli/components/overlays/McpSelector.d.ts.map +1 -1
  103. package/dist/cli/ink-cli/components/overlays/McpSelector.js +1 -1
  104. package/dist/cli/ink-cli/components/overlays/McpServerActions.d.ts.map +1 -1
  105. package/dist/cli/ink-cli/components/overlays/McpServerActions.js +2 -2
  106. package/dist/cli/ink-cli/components/overlays/McpServerList.d.ts.map +1 -1
  107. package/dist/cli/ink-cli/components/overlays/McpServerList.js +1 -1
  108. package/dist/cli/ink-cli/components/overlays/ModelSelectorRefactored.d.ts +5 -5
  109. package/dist/cli/ink-cli/components/overlays/ModelSelectorRefactored.d.ts.map +1 -1
  110. package/dist/cli/ink-cli/components/overlays/ModelSelectorRefactored.js +222 -68
  111. package/dist/cli/ink-cli/components/overlays/PromptAddChoice.d.ts.map +1 -1
  112. package/dist/cli/ink-cli/components/overlays/PromptAddChoice.js +2 -2
  113. package/dist/cli/ink-cli/components/overlays/PromptAddWizard.js +1 -1
  114. package/dist/cli/ink-cli/components/overlays/PromptDeleteSelector.d.ts.map +1 -1
  115. package/dist/cli/ink-cli/components/overlays/PromptDeleteSelector.js +2 -2
  116. package/dist/cli/ink-cli/components/overlays/PromptList.d.ts.map +1 -1
  117. package/dist/cli/ink-cli/components/overlays/PromptList.js +2 -2
  118. package/dist/cli/ink-cli/components/overlays/SearchOverlay.d.ts.map +1 -1
  119. package/dist/cli/ink-cli/components/overlays/SearchOverlay.js +4 -4
  120. package/dist/cli/ink-cli/components/overlays/SessionSubcommandSelector.d.ts.map +1 -1
  121. package/dist/cli/ink-cli/components/overlays/SessionSubcommandSelector.js +1 -1
  122. package/dist/cli/ink-cli/components/overlays/StreamSelector.d.ts.map +1 -1
  123. package/dist/cli/ink-cli/components/overlays/StreamSelector.js +1 -1
  124. package/dist/cli/ink-cli/components/overlays/ToolBrowser.js +12 -12
  125. package/dist/cli/ink-cli/components/overlays/custom-model-wizard/LocalModelWizard.d.ts +25 -0
  126. package/dist/cli/ink-cli/components/overlays/custom-model-wizard/LocalModelWizard.d.ts.map +1 -0
  127. package/dist/cli/ink-cli/components/overlays/custom-model-wizard/LocalModelWizard.js +609 -0
  128. package/dist/cli/ink-cli/components/overlays/custom-model-wizard/index.d.ts +15 -0
  129. package/dist/cli/ink-cli/components/overlays/custom-model-wizard/index.d.ts.map +1 -0
  130. package/dist/cli/ink-cli/components/overlays/custom-model-wizard/index.js +14 -0
  131. package/dist/cli/ink-cli/components/overlays/custom-model-wizard/provider-config.d.ts +33 -0
  132. package/dist/cli/ink-cli/components/overlays/custom-model-wizard/provider-config.d.ts.map +1 -0
  133. package/dist/cli/ink-cli/components/overlays/custom-model-wizard/provider-config.js +419 -0
  134. package/dist/cli/ink-cli/components/overlays/custom-model-wizard/shared/ApiKeyStep.d.ts +25 -0
  135. package/dist/cli/ink-cli/components/overlays/custom-model-wizard/shared/ApiKeyStep.d.ts.map +1 -0
  136. package/dist/cli/ink-cli/components/overlays/custom-model-wizard/shared/ApiKeyStep.js +29 -0
  137. package/dist/cli/ink-cli/components/overlays/custom-model-wizard/shared/ProviderSelector.d.ts +17 -0
  138. package/dist/cli/ink-cli/components/overlays/custom-model-wizard/shared/ProviderSelector.d.ts.map +1 -0
  139. package/dist/cli/ink-cli/components/overlays/custom-model-wizard/shared/ProviderSelector.js +11 -0
  140. package/dist/cli/ink-cli/components/overlays/custom-model-wizard/shared/SetupInfoBanner.d.ts +20 -0
  141. package/dist/cli/ink-cli/components/overlays/custom-model-wizard/shared/SetupInfoBanner.d.ts.map +1 -0
  142. package/dist/cli/ink-cli/components/overlays/custom-model-wizard/shared/SetupInfoBanner.js +10 -0
  143. package/dist/cli/ink-cli/components/overlays/custom-model-wizard/shared/WizardStepInput.d.ts +30 -0
  144. package/dist/cli/ink-cli/components/overlays/custom-model-wizard/shared/WizardStepInput.d.ts.map +1 -0
  145. package/dist/cli/ink-cli/components/overlays/custom-model-wizard/shared/WizardStepInput.js +13 -0
  146. package/dist/cli/ink-cli/components/overlays/custom-model-wizard/shared/index.d.ts +8 -0
  147. package/dist/cli/ink-cli/components/overlays/custom-model-wizard/shared/index.d.ts.map +1 -0
  148. package/dist/cli/ink-cli/components/overlays/custom-model-wizard/shared/index.js +7 -0
  149. package/dist/cli/ink-cli/components/overlays/custom-model-wizard/types.d.ts +79 -0
  150. package/dist/cli/ink-cli/components/overlays/custom-model-wizard/types.d.ts.map +1 -0
  151. package/dist/cli/ink-cli/components/overlays/custom-model-wizard/types.js +38 -0
  152. package/dist/cli/ink-cli/components/renderers/DiffRenderer.js +2 -2
  153. package/dist/cli/ink-cli/components/renderers/FilePreviewRenderer.js +1 -1
  154. package/dist/cli/ink-cli/components/renderers/FileRenderer.js +4 -4
  155. package/dist/cli/ink-cli/components/renderers/GenericRenderer.js +2 -2
  156. package/dist/cli/ink-cli/components/renderers/SearchRenderer.js +1 -1
  157. package/dist/cli/ink-cli/components/renderers/ShellRenderer.js +3 -3
  158. package/dist/cli/ink-cli/components/renderers/diff-shared.js +1 -1
  159. package/dist/cli/ink-cli/components/shared/MarkdownText.d.ts.map +1 -1
  160. package/dist/cli/ink-cli/components/shared/MarkdownText.js +8 -6
  161. package/dist/cli/ink-cli/containers/InputContainer.d.ts.map +1 -1
  162. package/dist/cli/ink-cli/containers/InputContainer.js +23 -1
  163. package/dist/cli/ink-cli/containers/OverlayContainer.d.ts.map +1 -1
  164. package/dist/cli/ink-cli/containers/OverlayContainer.js +80 -24
  165. package/dist/cli/ink-cli/hooks/useAgentEvents.d.ts +1 -1
  166. package/dist/cli/ink-cli/hooks/useAgentEvents.d.ts.map +1 -1
  167. package/dist/cli/ink-cli/hooks/useAgentEvents.js +5 -1
  168. package/dist/cli/ink-cli/hooks/useCLIState.d.ts +1 -1
  169. package/dist/cli/ink-cli/hooks/useCLIState.d.ts.map +1 -1
  170. package/dist/cli/ink-cli/hooks/useCLIState.js +4 -2
  171. package/dist/cli/ink-cli/services/processStream.d.ts.map +1 -1
  172. package/dist/cli/ink-cli/services/processStream.js +77 -9
  173. package/dist/cli/ink-cli/state/types.d.ts +3 -2
  174. package/dist/cli/ink-cli/state/types.d.ts.map +1 -1
  175. package/dist/cli/ink-cli/utils/messageFormatting.d.ts +5 -0
  176. package/dist/cli/ink-cli/utils/messageFormatting.d.ts.map +1 -1
  177. package/dist/cli/ink-cli/utils/messageFormatting.js +59 -1
  178. package/dist/cli/ink-cli/utils/toolUtils.d.ts.map +1 -1
  179. package/dist/cli/ink-cli/utils/toolUtils.js +2 -0
  180. package/dist/cli/utils/api-key-setup.d.ts +54 -4
  181. package/dist/cli/utils/api-key-setup.d.ts.map +1 -1
  182. package/dist/cli/utils/api-key-setup.js +433 -107
  183. package/dist/cli/utils/api-key-verification.d.ts +17 -0
  184. package/dist/cli/utils/api-key-verification.d.ts.map +1 -0
  185. package/dist/cli/utils/api-key-verification.js +211 -0
  186. package/dist/cli/utils/config-validation.d.ts +22 -2
  187. package/dist/cli/utils/config-validation.d.ts.map +1 -1
  188. package/dist/cli/utils/config-validation.js +354 -25
  189. package/dist/cli/utils/local-model-setup.d.ts +46 -0
  190. package/dist/cli/utils/local-model-setup.d.ts.map +1 -0
  191. package/dist/cli/utils/local-model-setup.js +662 -0
  192. package/dist/cli/utils/options.js +1 -1
  193. package/dist/cli/utils/prompt-helpers.d.ts +47 -0
  194. package/dist/cli/utils/prompt-helpers.d.ts.map +1 -0
  195. package/dist/cli/utils/prompt-helpers.js +66 -0
  196. package/dist/cli/utils/provider-setup.d.ts +66 -8
  197. package/dist/cli/utils/provider-setup.d.ts.map +1 -1
  198. package/dist/cli/utils/provider-setup.js +324 -84
  199. package/dist/cli/utils/scaffolding-utils.d.ts +76 -0
  200. package/dist/cli/utils/scaffolding-utils.d.ts.map +1 -0
  201. package/dist/cli/utils/scaffolding-utils.js +246 -0
  202. package/dist/cli/utils/setup-utils.d.ts +16 -0
  203. package/dist/cli/utils/setup-utils.d.ts.map +1 -1
  204. package/dist/cli/utils/setup-utils.js +72 -21
  205. package/dist/cli/utils/template-engine.d.ts +65 -0
  206. package/dist/cli/utils/template-engine.d.ts.map +1 -0
  207. package/dist/cli/utils/template-engine.js +1089 -0
  208. package/dist/config/cli-overrides.d.ts +44 -1
  209. package/dist/config/cli-overrides.d.ts.map +1 -1
  210. package/dist/config/cli-overrides.js +102 -0
  211. package/dist/index.js +315 -53
  212. package/dist/webui/assets/index-8j-KMkX1.js +2054 -0
  213. package/dist/webui/assets/index-c_AX24V4.css +1 -0
  214. package/dist/webui/index.html +3 -9
  215. package/dist/webui/logos/aws-color.svg +1 -0
  216. package/dist/webui/logos/dexto/dexto_logo.svg +1 -1
  217. package/dist/webui/logos/dexto/dexto_logo_light.svg +6 -6
  218. package/dist/webui/logos/glama.svg +7 -0
  219. package/dist/webui/logos/litellm.svg +7 -0
  220. package/dist/webui/logos/openrouter.svg +1 -0
  221. package/package.json +8 -7
  222. package/dist/webui/assets/index-BkwPkZpd.css +0 -1
  223. package/dist/webui/assets/index-D9u1XfyH.js +0 -2025
package/README.md CHANGED
@@ -309,14 +309,31 @@ systemPrompt: |
309
309
 
310
310
  Switch between providers instantly—no code changes required.
311
311
 
312
+ #### Built-in Providers
313
+
314
+ | Provider | Models | Setup |
315
+ |----------|--------|-------|
316
+ | **OpenAI** | `gpt-5.1-chat-latest`, `gpt-5.1`, `gpt-5.1-codex`, `gpt-5-mini`, `gpt-4.1`, `gpt-4o`, `o4-mini`, `o3`, `o1` | API key |
317
+ | **Anthropic** | `claude-sonnet-4-5-20250929`, `claude-opus-4-5-20251101`, `claude-haiku-4-5-20251001`, `claude-3-7-sonnet-20250219` | API key |
318
+ | **Google** | `gemini-3-pro-preview`, `gemini-3-pro-image-preview`, `gemini-3-flash-preview`, `gemini-2.5-pro`, `gemini-2.5-flash`, `gemini-2.0-flash` | API key |
319
+ | **Groq** | `llama-3.3-70b-versatile`, `gemma-2-9b-it`, `openai/gpt-oss-20b`, `openai/gpt-oss-120b`, `moonshotai/kimi-k2-instruct`, `meta-llama/llama-4-scout-17b-16e-instruct`, `meta-llama/llama-4-maverick-17b-128e-instruct`, `deepseek-r1-distill-llama-70b`, `qwen/qwen3-32b` | API key |
320
+ | **xAI** | `grok-4`, `grok-3`, `grok-3-mini`, `grok-code-fast-1` | API key |
321
+ | **Cohere** | `command-a-03-2025`, `command-r-plus`, `command-r`, `command-r7b` | API key |
322
+
323
+ #### Cloud Platforms
324
+
325
+ | Provider | Models | Setup |
326
+ |----------|--------|-------|
327
+ | **Vertex AI** | Gemini, Claude | GCP credentials ([docs](https://docs.dexto.ai/docs/guides/supported-llm-providers#google-cloud-vertex-ai)) |
328
+ | **AWS Bedrock** | Claude, Nova, Llama, Mistral | AWS credentials ([docs](https://docs.dexto.ai/docs/guides/supported-llm-providers#amazon-bedrock)) |
329
+
330
+ #### Gateway Providers
331
+
312
332
  | Provider | Models | Setup |
313
333
  |----------|--------|-------|
314
- | **OpenAI** | `gpt-5.1-chat-latest`, `gpt-5.1`, `gpt-5.1-codex`, `gpt-5.1-codex-mini`, `gpt-5`, `gpt-5-mini`, `gpt-5-nano`, `gpt-5-pro`, `gpt-5-codex`, `gpt-4.1`, `gpt-4.1-mini`, `gpt-4.1-nano`, `gpt-4o`, `gpt-4o-mini`, `gpt-4o-audio-preview`, `o4-mini`, `o3`, `o3-mini`, `o1` | `change model in UI and add api key` |
315
- | **Anthropic** | `claude-haiku-4-5-20251001`, `claude-sonnet-4-5-20250929`, `claude-opus-4-5-20251101`, `claude-opus-4-1-20250805`, `claude-4-opus-20250514`, `claude-4-sonnet-20250514`, `claude-3-7-sonnet-20250219`, `claude-3-5-sonnet-20240620`, `claude-3-5-haiku-20241022` | `change model in UI and add api key` |
316
- | **Google** | `gemini-3-pro-preview`, `gemini-3-pro-image-preview`, `gemini-2.5-pro`, `gemini-2.5-flash`, `gemini-2.5-flash-lite`, `gemini-2.0-flash`, `gemini-2.0-flash-lite` | `change model in UI and add api key` |
317
- | **Groq** | `llama-3.3-70b-versatile`, `meta-llama/llama-4-scout-17b-16e-instruct`, `meta-llama/llama-4-maverick-17b-128e-instruct`, `qwen/qwen3-32b`, `gemma-2-9b-it`, `openai/gpt-oss-20b`, `openai/gpt-oss-120b`, `moonshotai/kimi-k2-instruct`, `deepseek-r1-distill-llama-70b` | `change model in UI and add api key` |
318
- | **xAI** | `grok-4`, `grok-3`, `grok-3-mini`, `grok-code-fast-1` | `change model in UI and add api key` |
319
- | **Cohere** | `command-a-03-2025`, `command-r-plus`, `command-r`, `command-r7b` | `change model in UI and add api key` |
334
+ | **OpenRouter** | 100+ models via `provider/model` format | API key |
335
+ | **Glama** | Multi-provider access via `provider/model` format | API key |
336
+ | **LiteLLM** | Self-hosted proxy for any provider | API key + baseURL |
320
337
 
321
338
  ```bash
322
339
  # Switch models via CLI
@@ -326,7 +343,9 @@ dexto -m gemini-2.5-pro
326
343
 
327
344
  You can configure things like LLM, system prompt, MCP servers, storage, sessions, human-in-the loop, telemetry and more!
328
345
 
329
- See our [Configuration Guide](https://docs.dexto.ai/docs/category/agent-configuration-guide) for complete setup instructions.
346
+ You can also switch within the interactive CLI (/model) and in the web UI easily without needing to set up configuration.
347
+
348
+ See our [Configuration Guide](https://docs.dexto.ai/docs/category/agent-configuration-guide) and [Supported LLM Providers](https://docs.dexto.ai/docs/guides/supported-llm-providers) for complete setup instructions.
330
349
 
331
350
 
332
351
  ## Dexto Agent SDK
@@ -381,6 +400,42 @@ See our [Dexto Agent SDK docs](https://docs.dexto.ai/docs/guides/dexto-sdk) for
381
400
 
382
401
  ## Advanced Usage
383
402
 
403
+ ### Starting a Server
404
+
405
+ Start a Dexto server programmatically to expose REST and SSE streaming APIs to interact and manage your agent backend.
406
+
407
+ ```typescript
408
+ import { DextoAgent } from '@dexto/core';
409
+ import { startHonoApiServer } from 'dexto';
410
+
411
+ // Create and configure agent
412
+ const agent = new DextoAgent({
413
+ llm: {
414
+ provider: 'openai',
415
+ model: 'gpt-5-mini',
416
+ apiKey: process.env.OPENAI_API_KEY
417
+ },
418
+ mcpServers: {
419
+ filesystem: {
420
+ type: 'stdio',
421
+ command: 'npx',
422
+ args: ['-y', '@modelcontextprotocol/server-filesystem', '.']
423
+ }
424
+ }
425
+ });
426
+
427
+ // Start server on port 3001
428
+ const { server } = await startHonoApiServer(agent, 3001);
429
+
430
+ console.log('Dexto server running at http://localhost:3001');
431
+ // Server provides REST API and SSE streaming endpoints
432
+ // POST /api/message - Send messages
433
+ // GET /api/sessions - List sessions
434
+ // See docs.dexto.ai/api/rest/ for all endpoints
435
+ ```
436
+
437
+ This starts an HTTP server with full REST and SSE APIs, enabling integration with web frontends, webhooks, and other services. See the [REST API Documentation](https://docs.dexto.ai/api/rest/) for available endpoints.
438
+
384
439
  ### Session Management
385
440
 
386
441
  Create and manage multiple conversation sessions with persistent storage.
@@ -26,10 +26,10 @@ systemPrompt:
26
26
  Use these tools when appropriate to answer user queries.
27
27
  You can use multiple tools in sequence to solve complex problems.
28
28
  After each tool result, determine if you need more information or can provide a final answer.
29
- - id: dateTime
29
+ - id: date
30
30
  type: dynamic
31
31
  priority: 10
32
- source: dateTime
32
+ source: date
33
33
  enabled: true
34
34
 
35
35
  # LLM configuration - describes the language model to use
@@ -1,6 +1,10 @@
1
1
  # Coding Agent Configuration
2
2
  # Optimized for software development with internal coding tools
3
3
 
4
+ # Image: Specifies the provider bundle for this agent
5
+ # This agent requires local development tools (filesystem, process)
6
+ image: '@dexto/image-local'
7
+
4
8
  # System prompt configuration - defines the agent's behavior as a coding assistant
5
9
  systemPrompt:
6
10
  contributors:
@@ -44,7 +48,7 @@ greeting: "👨‍💻 Ready to code! What are we building today?"
44
48
  # LLM configuration - using a powerful model for coding tasks
45
49
  llm:
46
50
  provider: anthropic
47
- model: claude-haiku-4-5-20251001 # More powerful model for complex coding tasks
51
+ model: claude-sonnet-4-5-20250929
48
52
  apiKey: $ANTHROPIC_API_KEY
49
53
 
50
54
  storage:
@@ -68,33 +72,35 @@ toolConfirmation:
68
72
  # Tools that never require approval (safe, read-only operations)
69
73
  alwaysAllow:
70
74
  - internal--ask_user
71
- - internal--read_file # Read files without approval
72
- - internal--glob_files # Search for files without approval
73
- - internal--grep_content # Search within files without approval
74
- - internal--bash_output # Check background process output
75
- - internal--kill_process # Kill processes without approval
75
+ - custom--filesystem-tools--read_file # Read files without approval
76
+ - custom--filesystem-tools--glob_files # Search for files without approval
77
+ - custom--filesystem-tools--grep_content # Search within files without approval
78
+ - custom--process-tools--bash_output # Check background process output
79
+ - custom--process-tools--kill_process # Kill processes without approval
76
80
 
77
81
  # Tools that are always denied (dangerous operations)
78
82
  # Uncomment to restrict certain operations
79
83
  # alwaysDeny:
80
- # - internal--bash_exec--rm -rf* # Prevent recursive deletion
84
+ # - custom--process-tools--bash_exec--rm -rf* # Prevent recursive deletion
81
85
 
82
86
  # Elicitation configuration - required for ask_user tool
83
87
  elicitation:
84
88
  enabled: true
85
89
  timeout: 120000
86
90
 
87
- # Internal tools - all coding tools enabled
91
+ # Internal tools - core tools that are always available
88
92
  internalTools:
89
93
  - ask_user # Ask questions and collect input
90
- - read_file # Read file contents with pagination support
91
- - glob_files # Find files using glob patterns (e.g., "**/*.ts")
92
- - grep_content # Search file contents using regex patterns
93
- - write_file # Write content to files (requires approval)
94
- - edit_file # Edit files by replacing text (requires approval)
95
- - bash_exec # Execute shell commands (requires approval)
96
- - bash_output # Retrieve output from background processes
97
- - kill_process # Terminate background processes
94
+
95
+ # Custom tools - filesystem and process tools from image-local
96
+ customTools:
97
+ - type: filesystem-tools
98
+ allowedPaths: ["."]
99
+ blockedPaths: [".git", "node_modules/.bin", ".env"]
100
+ blockedExtensions: [".exe", ".dll", ".so"]
101
+ enableBackups: false
102
+ - type: process-tools
103
+ securityLevel: moderate
98
104
 
99
105
  # Internal resources configuration - expanded for coding projects
100
106
  internalResources:
@@ -105,10 +105,10 @@ systemPrompt:
105
105
  Remember: You're demonstrating intelligent database interaction through
106
106
  natural conversation and data analysis.
107
107
 
108
- - id: dateTime
108
+ - id: date
109
109
  type: dynamic
110
110
  priority: 10
111
- source: dateTime
111
+ source: date
112
112
  enabled: true
113
113
 
114
114
  # Storage configuration
@@ -25,10 +25,10 @@ systemPrompt:
25
25
  Use these tools when appropriate to answer user queries.
26
26
  You can use multiple tools in sequence to solve complex problems.
27
27
  After each tool result, determine if you need more information or can provide a final answer.
28
- - id: dateTime
28
+ - id: date
29
29
  type: dynamic
30
30
  priority: 10
31
- source: dateTime
31
+ source: date
32
32
  enabled: true
33
33
 
34
34
  # Memory configuration - controls how memories are included in system prompt
@@ -77,11 +77,11 @@ storage:
77
77
  type: sqlite
78
78
  # path: ./data/dexto.db # Optional: customize database location
79
79
  blob:
80
- type: local # 'local', 's3', 'gcs', 'azure' (s3, gcs, azure coming in future Phases)
80
+ type: local # CLI provides storePath automatically
81
+ # storePath: ./data/blobs # Optional: customize blob storage location (defaults to agent-specific path)
81
82
  maxBlobSize: 52428800 # 50MB per blob
82
83
  maxTotalSize: 1073741824 # 1GB total storage
83
- cleanupAfterDays: 30 # Auto-cleanup blobs older than 30 days
84
- # storePath: (automatically provided by CLI as ~/.dexto/blobs/<agent-id>)
84
+ cleanupAfterDays: 30
85
85
 
86
86
  toolConfirmation:
87
87
  mode: manual
@@ -113,6 +113,8 @@ elicitation:
113
113
  internalTools:
114
114
  - ask_user # Allows the agent to ask you questions and collect structured input
115
115
  - delegate_to_url
116
+ - list_resources
117
+ - get_resource
116
118
 
117
119
  # Internal resources configuration - manages file system access and blob storage
118
120
  # NOTE: Blob storage capacity and backend settings are in the 'storage.blob' section above
@@ -47,10 +47,10 @@ systemPrompt:
47
47
  - After each tool interaction, decide whether additional context is needed or if you can deliver a confident answer
48
48
 
49
49
  Stay practical, keep responses focused on the user’s goal, and highlight any assumptions or risks you notice.
50
- - id: dateTime
50
+ - id: date
51
51
  type: dynamic
52
52
  priority: 10
53
- source: dateTime
53
+ source: date
54
54
  enabled: true
55
55
 
56
56
  # Storage configuration
@@ -139,10 +139,10 @@ systemPrompt:
139
139
 
140
140
  Use these tools strategically to provide comprehensive product name validation that combines technical availability with market intelligence.
141
141
 
142
- - id: dateTime
142
+ - id: date
143
143
  type: dynamic
144
144
  priority: 10
145
- source: dateTime
145
+ source: date
146
146
  enabled: true
147
147
 
148
148
  # LLM configuration
@@ -33,10 +33,10 @@ systemPrompt:
33
33
  - "Extract all content containing 'invoice' from /path/to/file.pdf and explain what you found."
34
34
 
35
35
  Always ask for the file path if not provided. If a file is not a PDF or does not exist, inform the user.
36
- - id: dateTime
36
+ - id: date
37
37
  type: dynamic
38
38
  priority: 10
39
- source: dateTime
39
+ source: date
40
40
  enabled: true
41
41
 
42
42
  # Storage configuration
@@ -1,4 +1,5 @@
1
1
  import type { ExecutionContext } from '@dexto/agent-management';
2
+ import type { SharedAnalyticsEventMap } from '@dexto/analytics';
2
3
  export interface BaseEventContext {
3
4
  app?: 'dexto';
4
5
  app_version?: string;
@@ -44,8 +45,6 @@ export interface CliCommandTimeoutEvent extends CliCommandBaseEvent {
44
45
  timeoutMs: number;
45
46
  }
46
47
  export type CliCommandEvent = CliCommandStartEvent | CliCommandEndEvent | CliCommandTimeoutEvent;
47
- export interface SessionStartEvent {
48
- }
49
48
  export interface PromptEvent {
50
49
  mode: 'cli' | 'headless';
51
50
  provider: string;
@@ -54,14 +53,17 @@ export interface PromptEvent {
54
53
  export interface SetupEvent {
55
54
  provider: string;
56
55
  model: string;
57
- hadApiKeyBefore: boolean;
56
+ hadApiKeyBefore?: boolean;
58
57
  setupMode: 'interactive' | 'non-interactive';
58
+ setupVariant?: 'quick-start' | 'custom';
59
+ defaultMode?: string;
60
+ hasBaseURL?: boolean;
61
+ apiKeySkipped?: boolean;
59
62
  }
60
63
  export interface InstallAgentEvent {
61
64
  agent: string;
62
65
  status: 'installed' | 'skipped' | 'failed';
63
66
  force: boolean;
64
- injectPreferences: boolean;
65
67
  reason?: string;
66
68
  error_message?: string;
67
69
  }
@@ -94,8 +96,13 @@ export interface InitProjectEvent {
94
96
  provider: string;
95
97
  providedKey: boolean;
96
98
  }
97
- export interface DextoAnalyticsEventMap {
98
- dexto_session_start: SessionStartEvent;
99
+ /**
100
+ * CLI analytics event map extending shared events with CLI-specific events.
101
+ *
102
+ * IMPORTANT: If an event is also tracked by WebUI, move it to SharedAnalyticsEventMap
103
+ * in @dexto/analytics to avoid duplication.
104
+ */
105
+ export interface DextoAnalyticsEventMap extends SharedAnalyticsEventMap {
99
106
  dexto_cli_command: CliCommandEvent;
100
107
  dexto_prompt: PromptEvent;
101
108
  dexto_setup: SetupEvent;
@@ -1 +1 @@
1
- {"version":3,"file":"events.d.ts","sourceRoot":"","sources":["../../src/analytics/events.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"events.d.ts","sourceRoot":"","sources":["../../src/analytics/events.ts"],"names":[],"mappings":"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"}
@@ -7,7 +7,7 @@ interface InitOptions {
7
7
  *
8
8
  * - Respects DEXTO_ANALYTICS_DISABLED.
9
9
  * - Creates/loads the anonymous distinctId and a per-process session_id.
10
- * - Emits a dexto_session_start event for each process run.
10
+ * - Emits a dexto_session_created event for each process run.
11
11
  */
12
12
  export declare function initAnalytics(opts: InitOptions): Promise<void>;
13
13
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/analytics/index.ts"],"names":[],"mappings":"AAcA,OAAO,EACH,kBAAkB,EAClB,qBAAqB,EAErB,kBAAkB,EAClB,oBAAoB,EACvB,MAAM,aAAa,CAAC;AAErB,UAAU,WAAW;IACjB,UAAU,EAAE,MAAM,CAAC;CACtB;AAqBD;;;;;;GAMG;AACH,wBAAsB,aAAa,CAAC,IAAI,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAkCpE;AAED;;;GAGG;AACH,wBAAgB,OAAO,CAAC,IAAI,SAAS,kBAAkB,EACnD,KAAK,EAAE,IAAI,EACX,UAAU,GAAE,qBAAqB,CAAC,IAAI,CAAqC,GAC5E,IAAI,CAWN;AAED;;GAEG;AACH,wBAAsB,iBAAiB,IAAI,OAAO,CAAC,IAAI,CAAC,CAQvD;AAMD;;;GAGG;AACH,wBAAsB,cAAc,CAChC,IAAI,EAAE,MAAM,EACZ,KAAK,GAAE,OAAO,CAAC,IAAI,CAAC,oBAAoB,EAAE,MAAM,GAAG,OAAO,CAAC,CAAM,GAClE,OAAO,CAAC,IAAI,CAAC,CAYf;AAED;;;GAGG;AACH,wBAAsB,YAAY,CAC9B,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,OAAO,EAChB,KAAK,GAAE,OAAO,CAAC,IAAI,CAAC,kBAAkB,EAAE,MAAM,GAAG,OAAO,GAAG,SAAS,GAAG,YAAY,CAAC,CAAM,GAC3F,OAAO,CAAC,IAAI,CAAC,CAoBf;AAED;;GAEG;AACH,wBAAgB,UAAU,IAAI,OAAO,CAEpC;AAED;;;GAGG;AACH,wBAAsB,uBAAuB,IAAI,OAAO,CAAC;IACrD,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;CACtB,GAAG,IAAI,CAAC,CAiBR"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/analytics/index.ts"],"names":[],"mappings":"AAcA,OAAO,EACH,kBAAkB,EAClB,qBAAqB,EAErB,kBAAkB,EAClB,oBAAoB,EACvB,MAAM,aAAa,CAAC;AAErB,UAAU,WAAW;IACjB,UAAU,EAAE,MAAM,CAAC;CACtB;AAqBD;;;;;;GAMG;AACH,wBAAsB,aAAa,CAAC,IAAI,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAsCpE;AAED;;;GAGG;AACH,wBAAgB,OAAO,CAAC,IAAI,SAAS,kBAAkB,EACnD,KAAK,EAAE,IAAI,EACX,UAAU,GAAE,qBAAqB,CAAC,IAAI,CAAqC,GAC5E,IAAI,CAWN;AAED;;GAEG;AACH,wBAAsB,iBAAiB,IAAI,OAAO,CAAC,IAAI,CAAC,CAQvD;AAMD;;;GAGG;AACH,wBAAsB,cAAc,CAChC,IAAI,EAAE,MAAM,EACZ,KAAK,GAAE,OAAO,CAAC,IAAI,CAAC,oBAAoB,EAAE,MAAM,GAAG,OAAO,CAAC,CAAM,GAClE,OAAO,CAAC,IAAI,CAAC,CAYf;AAED;;;GAGG;AACH,wBAAsB,YAAY,CAC9B,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,OAAO,EAChB,KAAK,GAAE,OAAO,CAAC,IAAI,CAAC,kBAAkB,EAAE,MAAM,GAAG,OAAO,GAAG,SAAS,GAAG,YAAY,CAAC,CAAM,GAC3F,OAAO,CAAC,IAAI,CAAC,CAoBf;AAED;;GAEG;AACH,wBAAgB,UAAU,IAAI,OAAO,CAEpC;AAED;;;GAGG;AACH,wBAAsB,uBAAuB,IAAI,OAAO,CAAC;IACrD,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;CACtB,GAAG,IAAI,CAAC,CAiBR"}
@@ -26,7 +26,7 @@ function baseProps() {
26
26
  *
27
27
  * - Respects DEXTO_ANALYTICS_DISABLED.
28
28
  * - Creates/loads the anonymous distinctId and a per-process session_id.
29
- * - Emits a dexto_session_start event for each process run.
29
+ * - Emits a dexto_session_created event for each process run.
30
30
  */
31
31
  export async function initAnalytics(opts) {
32
32
  if (enabled || client)
@@ -60,7 +60,11 @@ export async function initAnalytics(opts) {
60
60
  // Ignore flush errors: analytics should never block process exit.
61
61
  }
62
62
  });
63
- capture('dexto_session_start', {});
63
+ capture('dexto_session_created', {
64
+ source: 'cli',
65
+ sessionId: sessionId || 'unknown',
66
+ trigger: 'manual',
67
+ });
64
68
  }
65
69
  /**
66
70
  * Capture a single analytics event with optional properties.
@@ -1 +1 @@
1
- {"version":3,"file":"server-hono.d.ts","sourceRoot":"","sources":["../../src/api/server-hono.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,EAAuC,UAAU,EAAE,MAAM,aAAa,CAAC;AAQ9E,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,+CAA+C,CAAC;AAC/E,OAAO,EACH,cAAc,EACd,gBAAgB,EAShB,KAAK,kBAAkB,EAC1B,MAAM,eAAe,CAAC;AAwEvB,MAAM,MAAM,wBAAwB,GAAG;IACnC,GAAG,EAAE,UAAU,CAAC,OAAO,cAAc,CAAC,CAAC;IACvC,MAAM,EAAE,UAAU,CAAC,OAAO,gBAAgB,CAAC,CAAC,QAAQ,CAAC,CAAC;IACtD,iBAAiB,CAAC,EAAE,WAAW,CAAC,UAAU,CAAC,OAAO,gBAAgB,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC;IAC1F,SAAS,EAAE,SAAS,CAAC;IACrB,YAAY,CAAC,EAAE,SAAS,CAAC;IACzB,eAAe,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC5E,iBAAiB,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC/E,gBAAgB,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC7E,oBAAoB,EAAE,MAAM,IAAI,CAAC;IACjC,gBAAgB,EAAE,MAAM,MAAM,GAAG,SAAS,CAAC;CAC9C,CAAC;AAGF,wBAAsB,iBAAiB,CACnC,KAAK,EAAE,UAAU,EACjB,iBAAiB,CAAC,EAAE,OAAO,CAAC,SAAS,CAAC,EACtC,UAAU,CAAC,EAAE,MAAM,EACnB,OAAO,CAAC,EAAE,MAAM,EAChB,OAAO,CAAC,EAAE,MAAM,EAChB,WAAW,CAAC,EAAE,kBAAkB,GACjC,OAAO,CAAC,wBAAwB,CAAC,CA6VnC;AAED,wBAAsB,kBAAkB,CACpC,KAAK,EAAE,UAAU,EACjB,IAAI,SAAO,EACX,iBAAiB,CAAC,EAAE,OAAO,CAAC,SAAS,CAAC,EACtC,OAAO,CAAC,EAAE,MAAM,EAChB,OAAO,CAAC,EAAE,MAAM,EAChB,WAAW,CAAC,EAAE,kBAAkB,GACjC,OAAO,CAAC;IACP,MAAM,EAAE,UAAU,CAAC,OAAO,gBAAgB,CAAC,CAAC,QAAQ,CAAC,CAAC;IACtD,iBAAiB,CAAC,EAAE,WAAW,CAAC,UAAU,CAAC,OAAO,gBAAgB,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC;CAC7F,CAAC,CAgCD"}
1
+ {"version":3,"file":"server-hono.d.ts","sourceRoot":"","sources":["../../src/api/server-hono.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,EAAE,UAAU,EAAuC,MAAM,aAAa,CAAC;AAQ9E,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,+CAA+C,CAAC;AAC/E,OAAO,EACH,cAAc,EACd,gBAAgB,EAShB,KAAK,kBAAkB,EAC1B,MAAM,eAAe,CAAC;AA6FvB,MAAM,MAAM,wBAAwB,GAAG;IACnC,GAAG,EAAE,UAAU,CAAC,OAAO,cAAc,CAAC,CAAC;IACvC,MAAM,EAAE,UAAU,CAAC,OAAO,gBAAgB,CAAC,CAAC,QAAQ,CAAC,CAAC;IACtD,iBAAiB,CAAC,EAAE,WAAW,CAAC,UAAU,CAAC,OAAO,gBAAgB,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC;IAC1F,SAAS,EAAE,SAAS,CAAC;IACrB,YAAY,CAAC,EAAE,SAAS,CAAC;IACzB,eAAe,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC5E,iBAAiB,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC/E,gBAAgB,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC7E,oBAAoB,EAAE,MAAM,IAAI,CAAC;IACjC,gBAAgB,EAAE,MAAM,MAAM,GAAG,SAAS,CAAC;CAC9C,CAAC;AAGF,wBAAsB,iBAAiB,CACnC,KAAK,EAAE,UAAU,EACjB,iBAAiB,CAAC,EAAE,OAAO,CAAC,SAAS,CAAC,EACtC,UAAU,CAAC,EAAE,MAAM,EACnB,OAAO,CAAC,EAAE,MAAM,EAChB,OAAO,CAAC,EAAE,MAAM,EAChB,WAAW,CAAC,EAAE,kBAAkB,GACjC,OAAO,CAAC,wBAAwB,CAAC,CAiWnC;AAED,wBAAsB,kBAAkB,CACpC,KAAK,EAAE,UAAU,EACjB,IAAI,SAAO,EACX,iBAAiB,CAAC,EAAE,OAAO,CAAC,SAAS,CAAC,EACtC,OAAO,CAAC,EAAE,MAAM,EAChB,OAAO,CAAC,EAAE,MAAM,EAChB,WAAW,CAAC,EAAE,kBAAkB,GACjC,OAAO,CAAC;IACP,MAAM,EAAE,UAAU,CAAC,OAAO,gBAAgB,CAAC,CAAC,QAAQ,CAAC,CAAC;IACtD,iBAAiB,CAAC,EAAE,WAAW,CAAC,UAAU,CAAC,OAAO,gBAAgB,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC;CAC7F,CAAC,CAgCD"}
@@ -1,9 +1,26 @@
1
1
  import os from 'node:os';
2
- import { createAgentCard, logger, AgentError, DextoAgent } from '@dexto/core';
2
+ import { DextoAgent, createAgentCard, logger, AgentError } from '@dexto/core';
3
3
  import { loadAgentConfig, enrichAgentConfig, deriveDisplayName, getAgentRegistry, AgentFactory, } from '@dexto/agent-management';
4
4
  import { createDextoApp, createNodeServer, createMcpTransport as createServerMcpTransport, createMcpHttpHandlers, initializeMcpServer as initializeServerMcpServer, createManualApprovalHandler, WebhookEventSubscriber, A2ASseEventSubscriber, ApprovalCoordinator, } from '@dexto/server';
5
5
  import { registerGracefulShutdown } from '../utils/graceful-shutdown.js';
6
6
  const DEFAULT_AGENT_VERSION = '1.0.0';
7
+ /**
8
+ * Load image dynamically based on config and environment
9
+ * Priority: Config image field > Environment variable > Default
10
+ * Images are optional, but default to image-local for convenience
11
+ */
12
+ async function loadImageForConfig(config) {
13
+ const imageName = config.image || process.env.DEXTO_IMAGE || '@dexto/image-local';
14
+ try {
15
+ await import(imageName);
16
+ logger.debug(`Loaded image: ${imageName}`);
17
+ }
18
+ catch (err) {
19
+ const errorMsg = `Failed to load image '${imageName}': ${err instanceof Error ? err.message : String(err)}`;
20
+ logger.error(errorMsg);
21
+ throw new Error(errorMsg);
22
+ }
23
+ }
7
24
  /**
8
25
  * List all agents (installed and available)
9
26
  * Replacement for old Dexto.listAgents()
@@ -23,12 +40,14 @@ async function createAgentFromId(agentId) {
23
40
  try {
24
41
  // Use registry to resolve agent path (auto-installs if not present)
25
42
  const registry = getAgentRegistry();
26
- const agentPath = await registry.resolveAgent(agentId, true, true);
43
+ const agentPath = await registry.resolveAgent(agentId, true);
27
44
  // Load and enrich agent config
28
45
  const config = await loadAgentConfig(agentPath);
29
46
  const enrichedConfig = enrichAgentConfig(config, agentPath, {
30
47
  logLevel: 'info', // Server uses info-level logging for visibility
31
48
  });
49
+ // Load image dynamically based on config
50
+ await loadImageForConfig(enrichedConfig);
32
51
  // Create agent instance
33
52
  logger.info(`Creating agent: ${agentId} from ${agentPath}`);
34
53
  return new DextoAgent(enrichedConfig, agentPath);
@@ -51,7 +70,7 @@ function resolveBaseUrl(port) {
51
70
  export async function initializeHonoApi(agent, agentCardOverride, listenPort, agentId, webRoot, webUIConfig) {
52
71
  // Declare before registering shutdown hook to avoid TDZ on signals
53
72
  let activeAgent = agent;
54
- let activeAgentId = agentId || 'default-agent';
73
+ let activeAgentId = agentId || 'coding-agent';
55
74
  let isSwitchingAgent = false;
56
75
  registerGracefulShutdown(() => activeAgent);
57
76
  const resolvedPort = resolvePort(listenPort);
@@ -205,6 +224,8 @@ export async function initializeHonoApi(agent, agentCardOverride, listenPort, ag
205
224
  const enrichedConfig = enrichAgentConfig(config, filePath, {
206
225
  logLevel: 'info', // Server uses info-level logging for visibility
207
226
  });
227
+ // 3.5. Load image dynamically based on config
228
+ await loadImageForConfig(enrichedConfig);
208
229
  // 4. Create new agent instance directly (will initialize fresh telemetry in createAgentServices)
209
230
  newAgent = new DextoAgent(enrichedConfig, filePath);
210
231
  // 5. Use enriched agentId (derived from config or filename during enrichment)
@@ -232,7 +253,8 @@ export async function initializeHonoApi(agent, agentCardOverride, listenPort, ag
232
253
  }
233
254
  // Getter functions for routes (always use current agent)
234
255
  // getAgent automatically ensures agent is available before returning it
235
- const getAgent = () => {
256
+ // Accepts Context parameter for compatibility with GetAgentFn type
257
+ const getAgent = (_ctx) => {
236
258
  // CRITICAL: Check agent availability before every access to prevent race conditions
237
259
  // during agent switching, stopping, or startup failures
238
260
  ensureAgentAvailable();
@@ -279,7 +301,7 @@ export async function initializeHonoApi(agent, agentCardOverride, listenPort, ag
279
301
  }
280
302
  // Create bridge with app
281
303
  bridgeRef = createNodeServer(app, {
282
- getAgent,
304
+ getAgent: () => activeAgent,
283
305
  mcpHandlers: mcpTransport ? createMcpHttpHandlers(mcpTransport) : null,
284
306
  });
285
307
  // Register webhook subscriber for LLM streaming events
@@ -30,6 +30,10 @@ export declare class CLISubscriber implements EventSubscriber {
30
30
  onResponse(text: string): void;
31
31
  onError(error: Error): void;
32
32
  onConversationReset(): void;
33
+ /**
34
+ * Capture LLM token usage analytics
35
+ */
36
+ private captureTokenUsage;
33
37
  /**
34
38
  * Run agent in headless mode and wait for completion
35
39
  * Returns a promise that resolves when the response is complete
@@ -1 +1 @@
1
- {"version":3,"file":"cli-subscriber.d.ts","sourceRoot":"","sources":["../../src/cli/cli-subscriber.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAU,UAAU,EAAE,MAAM,aAAa,CAAC;AACjD,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAEvD;;;GAGG;AACH,qBAAa,aAAc,YAAW,eAAe;IACjD,OAAO,CAAC,gBAAgB,CAAc;IACtC,OAAO,CAAC,iBAAiB,CAAC,CAAa;IACvC,OAAO,CAAC,gBAAgB,CAAC,CAAyB;IAElD,SAAS,CAAC,QAAQ,EAAE,aAAa,GAAG,IAAI;IA0BxC;;;OAGG;IACH,OAAO,IAAI,IAAI;IAcf,UAAU,IAAI,IAAI;IAIlB,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAM3B,UAAU,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,GAAG,IAAI;IAK9C,YAAY,CACR,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,mBAAmB,EAC9B,SAAS,CAAC,EAAE,OAAO,EACnB,OAAO,CAAC,EAAE,OAAO,GAClB,IAAI;IAMP,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IA0B9B,OAAO,CAAC,KAAK,EAAE,KAAK,GAAG,IAAI;IA0B3B,mBAAmB,IAAI,IAAI;IAM3B;;;OAGG;IACG,UAAU,CAAC,KAAK,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAsBxF"}
1
+ {"version":3,"file":"cli-subscriber.d.ts","sourceRoot":"","sources":["../../src/cli/cli-subscriber.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAU,UAAU,EAAE,MAAM,aAAa,CAAC;AACjD,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,KAAK,EAAE,mBAAmB,EAAiB,MAAM,aAAa,CAAC;AAGtE;;;GAGG;AACH,qBAAa,aAAc,YAAW,eAAe;IACjD,OAAO,CAAC,gBAAgB,CAAc;IACtC,OAAO,CAAC,iBAAiB,CAAC,CAAa;IACvC,OAAO,CAAC,gBAAgB,CAAC,CAAyB;IAElD,SAAS,CAAC,QAAQ,EAAE,aAAa,GAAG,IAAI;IA6BxC;;;OAGG;IACH,OAAO,IAAI,IAAI;IAcf,UAAU,IAAI,IAAI;IAIlB,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAM3B,UAAU,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,GAAG,IAAI;IAK9C,YAAY,CACR,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,mBAAmB,EAC9B,SAAS,CAAC,EAAE,OAAO,EACnB,OAAO,CAAC,EAAE,OAAO,GAClB,IAAI;IAMP,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IA0B9B,OAAO,CAAC,KAAK,EAAE,KAAK,GAAG,IAAI;IAyC3B,mBAAmB,IAAI,IAAI;IAM3B;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAoBzB;;;OAGG;IACG,UAAU,CAAC,KAAK,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAsBxF"}
@@ -6,6 +6,7 @@
6
6
  * No TUI, no boxes - just clean text output
7
7
  */
8
8
  import { logger } from '@dexto/core';
9
+ import { capture } from '../analytics/index.js';
9
10
  /**
10
11
  * Event subscriber for CLI headless mode
11
12
  * Implements the standard EventSubscriber pattern used throughout the codebase
@@ -30,7 +31,10 @@ export class CLISubscriber {
30
31
  }
31
32
  // For error case (success=false), the error is handled via llm:error event
32
33
  });
33
- eventBus.on('llm:response', (payload) => this.onResponse(payload.content));
34
+ eventBus.on('llm:response', (payload) => {
35
+ this.onResponse(payload.content);
36
+ this.captureTokenUsage(payload);
37
+ });
34
38
  eventBus.on('llm:error', (payload) => this.onError(payload.error));
35
39
  eventBus.on('session:reset', this.onConversationReset.bind(this));
36
40
  }
@@ -93,9 +97,21 @@ export class CLISubscriber {
93
97
  onError(error) {
94
98
  // Clear any partial response state
95
99
  this.streamingContent = '';
96
- // Show error to stderr for immediate user feedback (with stack for debugging)
100
+ // Show error to stderr for immediate user feedback
97
101
  console.error(`❌ Error: ${error.message}`);
102
+ // Show recovery guidance if available (for DextoRuntimeError)
103
+ if ('recovery' in error && error.recovery) {
104
+ const recoveryMessages = Array.isArray(error.recovery)
105
+ ? error.recovery
106
+ : [error.recovery];
107
+ console.error('');
108
+ recoveryMessages.forEach((msg) => {
109
+ console.error(`💡 ${msg}`);
110
+ });
111
+ }
112
+ // Show stack for debugging if available
98
113
  if (error.stack) {
114
+ console.error('');
99
115
  console.error(error.stack);
100
116
  }
101
117
  // Log details to file
@@ -103,6 +119,7 @@ export class CLISubscriber {
103
119
  stack: error.stack,
104
120
  name: error.name,
105
121
  cause: error.cause,
122
+ recovery: 'recovery' in error ? error.recovery : undefined,
106
123
  });
107
124
  // Reject completion promise if waiting
108
125
  if (this.completionReject) {
@@ -117,6 +134,27 @@ export class CLISubscriber {
117
134
  this.streamingContent = '';
118
135
  logger.info('🔄 Conversation history cleared.', null, 'blue');
119
136
  }
137
+ /**
138
+ * Capture LLM token usage analytics
139
+ */
140
+ captureTokenUsage(payload) {
141
+ const { tokenUsage, provider, model, sessionId } = payload;
142
+ if (!tokenUsage || (!tokenUsage.inputTokens && !tokenUsage.outputTokens)) {
143
+ return;
144
+ }
145
+ capture('dexto_llm_tokens_consumed', {
146
+ source: 'cli',
147
+ sessionId,
148
+ provider,
149
+ model,
150
+ inputTokens: tokenUsage.inputTokens,
151
+ outputTokens: tokenUsage.outputTokens,
152
+ reasoningTokens: tokenUsage.reasoningTokens,
153
+ totalTokens: tokenUsage.totalTokens,
154
+ cacheReadTokens: tokenUsage.cacheReadTokens,
155
+ cacheWriteTokens: tokenUsage.cacheWriteTokens,
156
+ });
157
+ }
120
158
  /**
121
159
  * Run agent in headless mode and wait for completion
122
160
  * Returns a promise that resolves when the response is complete
@@ -1,18 +1,20 @@
1
+ type AppType = 'script' | 'webapp';
2
+ export interface CreateAppOptions {
3
+ fromImage?: string;
4
+ fromCore?: boolean;
5
+ type?: AppType;
6
+ }
1
7
  /**
2
- * Creates basic scaffolding for a Dexto project
3
- * sets up git and gitignore, and sets up initial dependencies
4
- * Does not add scripts to package.json or create tsconfig.json which require the directory name
5
- * @param name - The name of the project
8
+ * Creates a Dexto application with two possible modes:
9
+ * - from-image: Use existing image (recommended)
10
+ * - from-core: Build from @dexto/core with custom providers (advanced)
11
+ *
12
+ * Note: To create a new image that extends another image, use `dexto create-image` instead.
13
+ *
14
+ * @param name - Optional name of the app project
15
+ * @param options - Optional flags to specify mode and base image
6
16
  * @returns The absolute path to the created project directory
7
17
  */
8
- export declare function createDextoProject(name?: string): Promise<string>;
9
- /**
10
- * Adds the dexto scripts to the package.json. Assumes the package.json already exists and is accessible
11
- * @param directory - The directory of the project
12
- */
13
- export declare function addDextoScriptsToPackageJson(directory: string, projectPath: string): Promise<void>;
14
- /** Creates a tsconfig.json file in the project directory */
15
- export declare function createTsconfigJson(projectPath: string, directory: string): Promise<void>;
16
- /** Adds notes for users to get started with their new initialized Dexto project */
17
- export declare function postCreateDexto(projectPath: string, directory: string): Promise<void>;
18
+ export declare function createDextoProject(name?: string, options?: CreateAppOptions): Promise<string>;
19
+ export {};
18
20
  //# sourceMappingURL=create-app.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"create-app.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/create-app.ts"],"names":[],"mappings":"AAYA;;;;;;GAMG;AACH,wBAAsB,kBAAkB,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAkGvE;AAED;;;GAGG;AACH,wBAAsB,4BAA4B,CAAC,SAAS,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,iBAQxF;AAED,4DAA4D;AAC5D,wBAAsB,kBAAkB,CAAC,WAAW,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,iBAoB9E;AAED,mFAAmF;AACnF,wBAAsB,eAAe,CAAC,WAAW,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,iBAW3E"}
1
+ {"version":3,"file":"create-app.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/create-app.ts"],"names":[],"mappings":"AA8BA,KAAK,OAAO,GAAG,QAAQ,GAAG,QAAQ,CAAC;AAEnC,MAAM,WAAW,gBAAgB;IAC7B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,IAAI,CAAC,EAAE,OAAO,CAAC;CAClB;AAED;;;;;;;;;;GAUG;AACH,wBAAsB,kBAAkB,CACpC,IAAI,CAAC,EAAE,MAAM,EACb,OAAO,CAAC,EAAE,gBAAgB,GAC3B,OAAO,CAAC,MAAM,CAAC,CA0JjB"}