dexto 1.5.6 → 1.5.7

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 (206) hide show
  1. package/README.md +13 -0
  2. package/dist/agents/coding-agent/coding-agent.yml +15 -0
  3. package/dist/agents/coding-agent/skills/code-review.md +46 -0
  4. package/dist/agents/explore-agent/explore-agent.yml +2 -0
  5. package/dist/analytics/events.d.ts +1 -1
  6. package/dist/analytics/events.d.ts.map +1 -1
  7. package/dist/api/server-hono.d.ts.map +1 -1
  8. package/dist/api/server-hono.js +55 -10
  9. package/dist/cli/assets/dexto-logo.svg +31 -0
  10. package/dist/cli/auth/api-client.d.ts +49 -0
  11. package/dist/cli/auth/api-client.d.ts.map +1 -0
  12. package/dist/cli/auth/api-client.js +127 -0
  13. package/dist/cli/auth/constants.d.ts +23 -0
  14. package/dist/cli/auth/constants.d.ts.map +1 -0
  15. package/dist/cli/auth/constants.js +24 -0
  16. package/dist/cli/auth/index.d.ts +5 -0
  17. package/dist/cli/auth/index.d.ts.map +1 -0
  18. package/dist/cli/auth/index.js +6 -0
  19. package/dist/cli/auth/oauth.d.ts +26 -0
  20. package/dist/cli/auth/oauth.d.ts.map +1 -0
  21. package/dist/cli/auth/oauth.js +327 -0
  22. package/dist/cli/auth/service.d.ts +20 -0
  23. package/dist/cli/auth/service.d.ts.map +1 -0
  24. package/dist/cli/auth/service.js +147 -0
  25. package/dist/cli/commands/auth/index.d.ts +4 -0
  26. package/dist/cli/commands/auth/index.d.ts.map +1 -0
  27. package/dist/cli/commands/auth/index.js +4 -0
  28. package/dist/cli/commands/auth/login.d.ts +9 -0
  29. package/dist/cli/commands/auth/login.d.ts.map +1 -0
  30. package/dist/cli/commands/auth/login.js +255 -0
  31. package/dist/cli/commands/auth/logout.d.ts +5 -0
  32. package/dist/cli/commands/auth/logout.d.ts.map +1 -0
  33. package/dist/cli/commands/auth/logout.js +51 -0
  34. package/dist/cli/commands/auth/status.d.ts +2 -0
  35. package/dist/cli/commands/auth/status.d.ts.map +1 -0
  36. package/dist/cli/commands/auth/status.js +22 -0
  37. package/dist/cli/commands/billing/index.d.ts +2 -0
  38. package/dist/cli/commands/billing/index.d.ts.map +1 -0
  39. package/dist/cli/commands/billing/index.js +2 -0
  40. package/dist/cli/commands/billing/status.d.ts +6 -0
  41. package/dist/cli/commands/billing/status.d.ts.map +1 -0
  42. package/dist/cli/commands/billing/status.js +60 -0
  43. package/dist/cli/commands/index.d.ts +3 -0
  44. package/dist/cli/commands/index.d.ts.map +1 -1
  45. package/dist/cli/commands/index.js +8 -0
  46. package/dist/cli/commands/interactive-commands/auth/index.d.ts +12 -0
  47. package/dist/cli/commands/interactive-commands/auth/index.d.ts.map +1 -0
  48. package/dist/cli/commands/interactive-commands/auth/index.js +20 -0
  49. package/dist/cli/commands/interactive-commands/command-parser.d.ts +5 -0
  50. package/dist/cli/commands/interactive-commands/command-parser.d.ts.map +1 -1
  51. package/dist/cli/commands/interactive-commands/command-parser.js +6 -0
  52. package/dist/cli/commands/interactive-commands/commands.d.ts +1 -0
  53. package/dist/cli/commands/interactive-commands/commands.d.ts.map +1 -1
  54. package/dist/cli/commands/interactive-commands/commands.js +8 -0
  55. package/dist/cli/commands/interactive-commands/mcp/index.d.ts +2 -2
  56. package/dist/cli/commands/interactive-commands/mcp/index.d.ts.map +1 -1
  57. package/dist/cli/commands/interactive-commands/mcp/index.js +4 -7
  58. package/dist/cli/commands/interactive-commands/model/index.d.ts +2 -2
  59. package/dist/cli/commands/interactive-commands/model/index.d.ts.map +1 -1
  60. package/dist/cli/commands/interactive-commands/model/index.js +4 -7
  61. package/dist/cli/commands/interactive-commands/plugin/index.d.ts +13 -0
  62. package/dist/cli/commands/interactive-commands/plugin/index.d.ts.map +1 -0
  63. package/dist/cli/commands/interactive-commands/plugin/index.js +18 -0
  64. package/dist/cli/commands/interactive-commands/prompt-commands.d.ts +3 -1
  65. package/dist/cli/commands/interactive-commands/prompt-commands.d.ts.map +1 -1
  66. package/dist/cli/commands/interactive-commands/prompt-commands.js +72 -36
  67. package/dist/cli/commands/plugin.d.ts +161 -0
  68. package/dist/cli/commands/plugin.d.ts.map +1 -0
  69. package/dist/cli/commands/plugin.js +376 -0
  70. package/dist/cli/commands/setup.d.ts +9 -9
  71. package/dist/cli/commands/setup.d.ts.map +1 -1
  72. package/dist/cli/commands/setup.js +228 -19
  73. package/dist/cli/ink-cli/InkCLIRefactored.d.ts.map +1 -1
  74. package/dist/cli/ink-cli/InkCLIRefactored.js +2 -1
  75. package/dist/cli/ink-cli/components/ApprovalPrompt.d.ts +1 -1
  76. package/dist/cli/ink-cli/components/ApprovalPrompt.d.ts.map +1 -1
  77. package/dist/cli/ink-cli/components/ApprovalPrompt.js +80 -12
  78. package/dist/cli/ink-cli/components/Footer.d.ts +2 -1
  79. package/dist/cli/ink-cli/components/Footer.d.ts.map +1 -1
  80. package/dist/cli/ink-cli/components/Footer.js +6 -2
  81. package/dist/cli/ink-cli/components/SlashCommandAutocomplete.d.ts.map +1 -1
  82. package/dist/cli/ink-cli/components/SlashCommandAutocomplete.js +15 -7
  83. package/dist/cli/ink-cli/components/StatusBar.d.ts +5 -1
  84. package/dist/cli/ink-cli/components/StatusBar.d.ts.map +1 -1
  85. package/dist/cli/ink-cli/components/StatusBar.js +2 -2
  86. package/dist/cli/ink-cli/components/chat/MessageItem.d.ts.map +1 -1
  87. package/dist/cli/ink-cli/components/chat/MessageItem.js +14 -1
  88. package/dist/cli/ink-cli/components/modes/AlternateBufferCLI.d.ts.map +1 -1
  89. package/dist/cli/ink-cli/components/modes/AlternateBufferCLI.js +4 -1
  90. package/dist/cli/ink-cli/components/modes/StaticCLI.d.ts.map +1 -1
  91. package/dist/cli/ink-cli/components/modes/StaticCLI.js +4 -1
  92. package/dist/cli/ink-cli/components/overlays/LogLevelSelector.d.ts +1 -0
  93. package/dist/cli/ink-cli/components/overlays/LogLevelSelector.d.ts.map +1 -1
  94. package/dist/cli/ink-cli/components/overlays/LogLevelSelector.js +30 -19
  95. package/dist/cli/ink-cli/components/overlays/MarketplaceAddPrompt.d.ts +20 -0
  96. package/dist/cli/ink-cli/components/overlays/MarketplaceAddPrompt.d.ts.map +1 -0
  97. package/dist/cli/ink-cli/components/overlays/MarketplaceAddPrompt.js +81 -0
  98. package/dist/cli/ink-cli/components/overlays/MarketplaceBrowser.d.ts +31 -0
  99. package/dist/cli/ink-cli/components/overlays/MarketplaceBrowser.d.ts.map +1 -0
  100. package/dist/cli/ink-cli/components/overlays/MarketplaceBrowser.js +297 -0
  101. package/dist/cli/ink-cli/components/overlays/McpRemoveSelector.d.ts.map +1 -1
  102. package/dist/cli/ink-cli/components/overlays/McpRemoveSelector.js +7 -1
  103. package/dist/cli/ink-cli/components/overlays/McpServerActions.d.ts +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 +9 -0
  106. package/dist/cli/ink-cli/components/overlays/McpServerList.d.ts.map +1 -1
  107. package/dist/cli/ink-cli/components/overlays/McpServerList.js +9 -2
  108. package/dist/cli/ink-cli/components/overlays/ModelSelectorRefactored.d.ts.map +1 -1
  109. package/dist/cli/ink-cli/components/overlays/ModelSelectorRefactored.js +15 -2
  110. package/dist/cli/ink-cli/components/overlays/PluginActions.d.ts +27 -0
  111. package/dist/cli/ink-cli/components/overlays/PluginActions.d.ts.map +1 -0
  112. package/dist/cli/ink-cli/components/overlays/PluginActions.js +66 -0
  113. package/dist/cli/ink-cli/components/overlays/PluginList.d.ts +21 -0
  114. package/dist/cli/ink-cli/components/overlays/PluginList.d.ts.map +1 -0
  115. package/dist/cli/ink-cli/components/overlays/PluginList.js +70 -0
  116. package/dist/cli/ink-cli/components/overlays/PluginManager.d.ts +21 -0
  117. package/dist/cli/ink-cli/components/overlays/PluginManager.d.ts.map +1 -0
  118. package/dist/cli/ink-cli/components/overlays/PluginManager.js +63 -0
  119. package/dist/cli/ink-cli/components/overlays/PromptList.d.ts.map +1 -1
  120. package/dist/cli/ink-cli/components/overlays/PromptList.js +4 -1
  121. package/dist/cli/ink-cli/components/overlays/custom-model-wizard/provider-config.d.ts +2 -1
  122. package/dist/cli/ink-cli/components/overlays/custom-model-wizard/provider-config.d.ts.map +1 -1
  123. package/dist/cli/ink-cli/components/overlays/custom-model-wizard/provider-config.js +61 -2
  124. package/dist/cli/ink-cli/components/renderers/FilePreviewRenderer.d.ts +4 -2
  125. package/dist/cli/ink-cli/components/renderers/FilePreviewRenderer.d.ts.map +1 -1
  126. package/dist/cli/ink-cli/components/renderers/FilePreviewRenderer.js +4 -4
  127. package/dist/cli/ink-cli/containers/InputContainer.d.ts.map +1 -1
  128. package/dist/cli/ink-cli/containers/InputContainer.js +30 -3
  129. package/dist/cli/ink-cli/containers/OverlayContainer.d.ts.map +1 -1
  130. package/dist/cli/ink-cli/containers/OverlayContainer.js +256 -11
  131. package/dist/cli/ink-cli/hooks/index.d.ts +1 -0
  132. package/dist/cli/ink-cli/hooks/index.d.ts.map +1 -1
  133. package/dist/cli/ink-cli/hooks/index.js +1 -0
  134. package/dist/cli/ink-cli/hooks/useCLIState.d.ts.map +1 -1
  135. package/dist/cli/ink-cli/hooks/useCLIState.js +2 -0
  136. package/dist/cli/ink-cli/hooks/useGitBranch.d.ts +13 -0
  137. package/dist/cli/ink-cli/hooks/useGitBranch.d.ts.map +1 -0
  138. package/dist/cli/ink-cli/hooks/useGitBranch.js +35 -0
  139. package/dist/cli/ink-cli/hooks/useInputOrchestrator.d.ts.map +1 -1
  140. package/dist/cli/ink-cli/hooks/useInputOrchestrator.js +47 -8
  141. package/dist/cli/ink-cli/services/processStream.d.ts.map +1 -1
  142. package/dist/cli/ink-cli/services/processStream.js +42 -10
  143. package/dist/cli/ink-cli/state/initialState.d.ts.map +1 -1
  144. package/dist/cli/ink-cli/state/initialState.js +2 -0
  145. package/dist/cli/ink-cli/state/types.d.ts +3 -1
  146. package/dist/cli/ink-cli/state/types.d.ts.map +1 -1
  147. package/dist/cli/ink-cli/utils/commandOverlays.d.ts.map +1 -1
  148. package/dist/cli/ink-cli/utils/commandOverlays.js +1 -0
  149. package/dist/cli/ink-cli/utils/messageFormatting.d.ts +14 -1
  150. package/dist/cli/ink-cli/utils/messageFormatting.d.ts.map +1 -1
  151. package/dist/cli/ink-cli/utils/messageFormatting.js +66 -6
  152. package/dist/cli/ink-cli/utils/toolUtils.d.ts +11 -0
  153. package/dist/cli/ink-cli/utils/toolUtils.d.ts.map +1 -1
  154. package/dist/cli/ink-cli/utils/toolUtils.js +17 -0
  155. package/dist/cli/mcp/index.d.ts +8 -0
  156. package/dist/cli/mcp/index.d.ts.map +1 -0
  157. package/dist/cli/mcp/index.js +7 -0
  158. package/dist/cli/mcp/oauth-factory.d.ts +6 -0
  159. package/dist/cli/mcp/oauth-factory.d.ts.map +1 -0
  160. package/dist/cli/mcp/oauth-factory.js +25 -0
  161. package/dist/cli/mcp/oauth-provider.d.ts +10 -0
  162. package/dist/cli/mcp/oauth-provider.d.ts.map +1 -0
  163. package/dist/cli/mcp/oauth-provider.js +77 -0
  164. package/dist/cli/mcp/oauth-redirect.d.ts +3 -0
  165. package/dist/cli/mcp/oauth-redirect.d.ts.map +1 -0
  166. package/dist/cli/mcp/oauth-redirect.js +4 -0
  167. package/dist/cli/mcp/oauth-server.d.ts +2 -0
  168. package/dist/cli/mcp/oauth-server.d.ts.map +1 -0
  169. package/dist/cli/mcp/oauth-server.js +70 -0
  170. package/dist/cli/mcp/oauth-store.d.ts +10 -0
  171. package/dist/cli/mcp/oauth-store.d.ts.map +1 -0
  172. package/dist/cli/mcp/oauth-store.js +27 -0
  173. package/dist/cli/mcp/oauth-ui.d.ts +2 -0
  174. package/dist/cli/mcp/oauth-ui.d.ts.map +1 -0
  175. package/dist/cli/mcp/oauth-ui.js +12 -0
  176. package/dist/cli/mcp/oauth-utils.d.ts +2 -0
  177. package/dist/cli/mcp/oauth-utils.d.ts.map +1 -0
  178. package/dist/cli/mcp/oauth-utils.js +17 -0
  179. package/dist/cli/utils/api-key-verification.d.ts.map +1 -1
  180. package/dist/cli/utils/api-key-verification.js +36 -0
  181. package/dist/cli/utils/config-validation.d.ts +3 -1
  182. package/dist/cli/utils/config-validation.d.ts.map +1 -1
  183. package/dist/cli/utils/config-validation.js +42 -19
  184. package/dist/cli/utils/dexto-auth-check.d.ts +53 -0
  185. package/dist/cli/utils/dexto-auth-check.d.ts.map +1 -0
  186. package/dist/cli/utils/dexto-auth-check.js +104 -0
  187. package/dist/cli/utils/dexto-setup.d.ts +8 -0
  188. package/dist/cli/utils/dexto-setup.d.ts.map +1 -0
  189. package/dist/cli/utils/dexto-setup.js +17 -0
  190. package/dist/cli/utils/options.d.ts.map +1 -1
  191. package/dist/cli/utils/options.js +5 -1
  192. package/dist/cli/utils/provider-setup.d.ts +4 -0
  193. package/dist/cli/utils/provider-setup.d.ts.map +1 -1
  194. package/dist/cli/utils/provider-setup.js +20 -0
  195. package/dist/config/cli-overrides.d.ts +17 -8
  196. package/dist/config/cli-overrides.d.ts.map +1 -1
  197. package/dist/config/cli-overrides.js +36 -22
  198. package/dist/config/effective-llm.d.ts +123 -0
  199. package/dist/config/effective-llm.d.ts.map +1 -0
  200. package/dist/config/effective-llm.js +171 -0
  201. package/dist/index.js +395 -99
  202. package/dist/webui/assets/index-C9JXwpvo.css +1 -0
  203. package/dist/webui/assets/{index-DVQWNLpT.js → index-Dl3mj53P.js} +217 -217
  204. package/dist/webui/index.html +2 -2
  205. package/package.json +9 -8
  206. package/dist/webui/assets/index-BglIVTSG.css +0 -1
@@ -24,7 +24,7 @@ import { ApprovalType as ApprovalTypeEnum, ApprovalStatus } from '@dexto/core';
24
24
  import { generateMessageId } from '../utils/idGenerator.js';
25
25
  import { checkForSplit } from '../utils/streamSplitter.js';
26
26
  import { formatToolHeader } from '../utils/messageFormatting.js';
27
- import { isEditWriteTool } from '../utils/toolUtils.js';
27
+ import { isAutoApprovableInEditMode } from '../utils/toolUtils.js';
28
28
  import { capture } from '../../../analytics/index.js';
29
29
  import chalk from 'chalk';
30
30
  /**
@@ -54,6 +54,9 @@ function buildErrorContent(error, prefix) {
54
54
  export async function processStream(iterator, setters, options) {
55
55
  const { setMessages, setPendingMessages, setDequeuedBuffer, setUi, setSession: _setSession, setQueuedMessages, setApproval, setApprovalQueue, } = setters;
56
56
  const useStreaming = options?.useStreaming ?? true;
57
+ // Link approval IDs to tool call IDs so we can finalize tool UI when an approval
58
+ // is cancelled/denied (otherwise tool messages can remain stuck in "Waiting...").
59
+ const approvalIdToToolCallId = new Map();
57
60
  // Track streaming state (synchronous, not React state)
58
61
  const state = {
59
62
  messageId: null,
@@ -532,6 +535,23 @@ export async function processStream(iterator, setters, options) {
532
535
  ...(toolContent && { toolContent }),
533
536
  });
534
537
  }
538
+ // Handle plan_review tool results - update UI state when plan is approved
539
+ if (event.toolName === 'plan_review' && event.success !== false) {
540
+ try {
541
+ const planReviewResult = event.rawResult;
542
+ if (planReviewResult?.approved) {
543
+ // User approved the plan - disable plan mode
544
+ setUi((prev) => ({
545
+ ...prev,
546
+ planModeActive: false,
547
+ planModeInitialized: false,
548
+ }));
549
+ }
550
+ }
551
+ catch {
552
+ // Silently ignore parsing errors - plan mode state remains unchanged
553
+ }
554
+ }
535
555
  // Track tool result analytics
536
556
  capture('dexto_tool_result', {
537
557
  source: 'cli',
@@ -672,7 +692,7 @@ export async function processStream(iterator, setters, options) {
672
692
  if (autoApproveEdits && event.type === ApprovalTypeEnum.TOOL_CONFIRMATION) {
673
693
  // Type is narrowed - metadata is now ToolConfirmationMetadata
674
694
  const { toolName } = event.metadata;
675
- if (isEditWriteTool(toolName)) {
695
+ if (isAutoApprovableInEditMode(toolName)) {
676
696
  // Auto-approve immediately - emit response and let tool:running handle status
677
697
  eventBus.emit('approval:response', {
678
698
  approvalId: event.approvalId,
@@ -689,6 +709,7 @@ export async function processStream(iterator, setters, options) {
689
709
  ? event.metadata.toolCallId
690
710
  : undefined;
691
711
  if (toolCallId) {
712
+ approvalIdToToolCallId.set(event.approvalId, toolCallId);
692
713
  updatePendingStatus(`tool-${toolCallId}`, 'pending_approval');
693
714
  }
694
715
  // Show approval UI (moved from useAgentEvents for ordering)
@@ -723,15 +744,26 @@ export async function processStream(iterator, setters, options) {
723
744
  break;
724
745
  }
725
746
  case 'approval:response': {
726
- // Handle approval responses - dismisses auto-approved parallel tool calls
727
- //
728
- // When user approves a tool with "remember", other pending parallel requests
729
- // for the same tool are auto-approved. The handler emits approval:response
730
- // for each, and we need to dismiss them from the UI.
747
+ // Handle approval responses.
731
748
  //
732
- // For user-initiated approvals, completeApproval() in OverlayContainer
733
- // already clears the state before emitting, so these are no-ops.
749
+ // 1) Dismiss auto-approved parallel tool calls (existing behavior)
750
+ // 2) Finalize tool UI immediately for denied/cancelled approvals so tool
751
+ // messages don't remain stuck in "Waiting..." (pending_approval).
734
752
  const { approvalId } = event;
753
+ const toolCallId = approvalIdToToolCallId.get(approvalId);
754
+ if (toolCallId) {
755
+ approvalIdToToolCallId.delete(approvalId);
756
+ // If the tool was waiting for approval and gets denied/cancelled,
757
+ // we may not get a corresponding llm:tool-result event (the tool never ran).
758
+ // Finalize it here so the UI reflects the outcome immediately.
759
+ if (event.status !== ApprovalStatus.APPROVED) {
760
+ finalizeMessage(`tool-${toolCallId}`, {
761
+ toolStatus: 'finished',
762
+ toolResult: 'Cancelled',
763
+ isError: true,
764
+ });
765
+ }
766
+ }
735
767
  // Step 1: Remove from queue if present
736
768
  setApprovalQueue((queue) => queue.filter((a) => a.approvalId !== approvalId));
737
769
  // Step 2: If this is the current approval, dismiss and show next
@@ -741,7 +773,7 @@ export async function processStream(iterator, setters, options) {
741
773
  if (currentApproval?.approvalId !== approvalId) {
742
774
  return currentApproval; // Not current, nothing to do
743
775
  }
744
- // Current approval was auto-approved - show next or close
776
+ // Current approval was responded to - show next or close
745
777
  // Note: queue was already filtered in Step 1, so we read updated queue
746
778
  setApprovalQueue((queue) => {
747
779
  if (queue.length > 0) {
@@ -1 +1 @@
1
- {"version":3,"file":"initialState.d.ts","sourceRoot":"","sources":["../../../../src/cli/ink-cli/state/initialState.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAE3C;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,gBAAgB,GAAE,MAAW,GAAG,QAAQ,CA0C1E"}
1
+ {"version":3,"file":"initialState.d.ts","sourceRoot":"","sources":["../../../../src/cli/ink-cli/state/initialState.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAE3C;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,gBAAgB,GAAE,MAAW,GAAG,QAAQ,CA4C1E"}
@@ -40,6 +40,8 @@ export function createInitialState(initialModelName = '') {
40
40
  promptAddWizard: null,
41
41
  autoApproveEdits: false,
42
42
  todoExpanded: true,
43
+ planModeActive: false,
44
+ planModeInitialized: false,
43
45
  },
44
46
  session: {
45
47
  id: null,
@@ -270,7 +270,7 @@ export interface InputState {
270
270
  /**
271
271
  * Available overlay types
272
272
  */
273
- export type OverlayType = 'none' | 'slash-autocomplete' | 'resource-autocomplete' | 'model-selector' | 'custom-model-wizard' | 'session-selector' | 'mcp-server-list' | 'mcp-server-actions' | 'mcp-add-choice' | 'mcp-add-selector' | 'mcp-custom-type-selector' | 'mcp-custom-wizard' | 'log-level-selector' | 'stream-selector' | 'session-subcommand-selector' | 'api-key-input' | 'search' | 'approval' | 'tool-browser' | 'prompt-list' | 'prompt-add-choice' | 'prompt-add-wizard' | 'prompt-delete-selector' | 'session-rename' | 'context-stats' | 'export-wizard';
273
+ export type OverlayType = 'none' | 'slash-autocomplete' | 'resource-autocomplete' | 'model-selector' | 'custom-model-wizard' | 'session-selector' | 'mcp-server-list' | 'mcp-server-actions' | 'mcp-add-choice' | 'mcp-add-selector' | 'mcp-custom-type-selector' | 'mcp-custom-wizard' | 'log-level-selector' | 'stream-selector' | 'session-subcommand-selector' | 'api-key-input' | 'search' | 'approval' | 'tool-browser' | 'prompt-list' | 'prompt-add-choice' | 'prompt-add-wizard' | 'prompt-delete-selector' | 'session-rename' | 'context-stats' | 'export-wizard' | 'plugin-manager' | 'plugin-list' | 'plugin-actions' | 'marketplace-browser' | 'marketplace-add';
274
274
  /**
275
275
  * MCP server type for custom wizard (null = not yet selected)
276
276
  */
@@ -333,6 +333,8 @@ export interface UIState {
333
333
  promptAddWizard: PromptAddWizardState | null;
334
334
  autoApproveEdits: boolean;
335
335
  todoExpanded: boolean;
336
+ planModeActive: boolean;
337
+ planModeInitialized: boolean;
336
338
  }
337
339
  /**
338
340
  * Session state management
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/cli/ink-cli/state/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/cli/ink-cli/state/types.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"commandOverlays.d.ts","sourceRoot":"","sources":["../../../../src/cli/ink-cli/utils/commandOverlays.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAgCrD;;;;;;;GAOG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,WAAW,GAAG,IAAI,CAYrF;AAED;;;;;;;;;GASG;AACH,wBAAgB,0BAA0B,CAAC,OAAO,EAAE,MAAM,GAAG,WAAW,GAAG,IAAI,CAU9E;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAE7D"}
1
+ {"version":3,"file":"commandOverlays.d.ts","sourceRoot":"","sources":["../../../../src/cli/ink-cli/utils/commandOverlays.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAiCrD;;;;;;;GAOG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,WAAW,GAAG,IAAI,CAYrF;AAED;;;;;;;;;GASG;AACH,wBAAgB,0BAA0B,CAAC,OAAO,EAAE,MAAM,GAAG,WAAW,GAAG,IAAI,CAU9E;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAE7D"}
@@ -22,6 +22,7 @@ const ALWAYS_OVERLAY = {
22
22
  ctx: 'context-stats', // alias
23
23
  tokens: 'context-stats', // alias
24
24
  export: 'export-wizard',
25
+ plugin: 'plugin-manager',
25
26
  };
26
27
  /**
27
28
  * Commands that show an overlay ONLY when invoked without arguments.
@@ -4,6 +4,19 @@
4
4
  */
5
5
  import type { DextoAgent, InternalMessage } from '@dexto/core';
6
6
  import type { Message } from '../state/types.js';
7
+ /**
8
+ * Formats a skill invocation message for clean display.
9
+ * Converts verbose <skill-invocation> blocks to clean /skill-name format.
10
+ * Works for both fork skills (just the tag) and inline skills (tag + content).
11
+ *
12
+ * @param content - The message content to check and format
13
+ * @returns Formatted content if it's a skill invocation, original content otherwise
14
+ */
15
+ export declare function formatSkillInvocationMessage(content: string): string;
16
+ /**
17
+ * Checks if a message content is a skill invocation.
18
+ */
19
+ export declare function isSkillInvocationMessage(content: string): boolean;
7
20
  /**
8
21
  * Convert absolute path to display-friendly relative path.
9
22
  * Strategy:
@@ -111,7 +124,7 @@ export declare function convertHistoryToUIMessages(history: InternalMessage[], s
111
124
  /**
112
125
  * Collects startup information for display in header
113
126
  */
114
- export declare function getStartupInfo(agent: DextoAgent): Promise<{
127
+ export declare function getStartupInfo(agent: DextoAgent, sessionId: string | null): Promise<{
115
128
  connectedServers: {
116
129
  count: number;
117
130
  names: string[];
@@ -1 +1 @@
1
- {"version":3,"file":"messageFormatting.d.ts","sourceRoot":"","sources":["../../../../src/cli/ink-cli/utils/messageFormatting.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,OAAO,KAAK,EAAE,UAAU,EAAE,eAAe,EAAyB,MAAM,aAAa,CAAC;AAEtF,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAGjD;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAAC,YAAY,EAAE,MAAM,EAAE,GAAG,GAAE,MAAsB,GAAG,MAAM,CAmB1F;AAED;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAChC,YAAY,EAAE,MAAM,EACpB,QAAQ,GAAE,MAAW,EACrB,GAAG,GAAE,MAAsB,GAC5B,MAAM,CAWR;AAED;;;;;;;;GAQG;AACH,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAiC7E;AA8ED;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CA6B3D;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CA8BzD;AAED;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAChC,2DAA2D;IAC3D,WAAW,EAAE,MAAM,CAAC;IACpB,4EAA4E;IAC5E,aAAa,EAAE,MAAM,CAAC;IACtB,kEAAkE;IAClE,KAAK,EAAE,MAAM,CAAC;IACd,oEAAoE;IACpE,MAAM,EAAE,MAAM,CAAC;CAClB;AAED;;;;;;;;;GASG;AACH,wBAAgB,gBAAgB,CAC5B,QAAQ,EAAE,MAAM,EAChB,IAAI,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM,GACnC,mBAAmB,CA8BrB;AA8BD;;;;;;;;GAQG;AACH,wBAAgB,wBAAwB,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CA0EhG;AAED;;;GAGG;AACH,wBAAgB,qBAAqB,CACjC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC7B,SAAS,GAAE,MAAW,GACvB,MAAM,CAeR;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAO1D;AAED;;GAEG;AACH,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,GAAG,OAAO,CASvF;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAO5D;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,KAAK,GAAG,MAAM,GAAG,OAAO,CAQjE;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAO3D;AAED;;GAEG;AACH,wBAAgB,sBAAsB,IAAI,OAAO,CAQhD;AAqCD;;GAEG;AACH,wBAAgB,0BAA0B,CACtC,OAAO,EAAE,eAAe,EAAE,EAC1B,SAAS,EAAE,MAAM,GAClB,OAAO,EAAE,CAgGX;AAED;;GAEG;AACH,wBAAsB,cAAc,CAAC,KAAK,EAAE,UAAU;;;;;;;;GAiBrD"}
1
+ {"version":3,"file":"messageFormatting.d.ts","sourceRoot":"","sources":["../../../../src/cli/ink-cli/utils/messageFormatting.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,OAAO,KAAK,EAAE,UAAU,EAAE,eAAe,EAAyB,MAAM,aAAa,CAAC;AAEtF,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAWjD;;;;;;;GAOG;AACH,wBAAgB,4BAA4B,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAYpE;AAED;;GAEG;AACH,wBAAgB,wBAAwB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAEjE;AAED;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAAC,YAAY,EAAE,MAAM,EAAE,GAAG,GAAE,MAAsB,GAAG,MAAM,CAmB1F;AAED;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAChC,YAAY,EAAE,MAAM,EACpB,QAAQ,GAAE,MAAW,EACrB,GAAG,GAAE,MAAsB,GAC5B,MAAM,CAWR;AAED;;;;;;;;GAQG;AACH,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAiC7E;AAsFD;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CA6B3D;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CA8BzD;AAED;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAChC,2DAA2D;IAC3D,WAAW,EAAE,MAAM,CAAC;IACpB,4EAA4E;IAC5E,aAAa,EAAE,MAAM,CAAC;IACtB,kEAAkE;IAClE,KAAK,EAAE,MAAM,CAAC;IACd,oEAAoE;IACpE,MAAM,EAAE,MAAM,CAAC;CAClB;AAED;;;;;;;;;GASG;AACH,wBAAgB,gBAAgB,CAC5B,QAAQ,EAAE,MAAM,EAChB,IAAI,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM,GACnC,mBAAmB,CA+CrB;AA8BD;;;;;;;;GAQG;AACH,wBAAgB,wBAAwB,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CA0EhG;AAED;;;GAGG;AACH,wBAAgB,qBAAqB,CACjC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC7B,SAAS,GAAE,MAAW,GACvB,MAAM,CAeR;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAO1D;AAED;;GAEG;AACH,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,GAAG,OAAO,CASvF;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAO5D;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,KAAK,GAAG,MAAM,GAAG,OAAO,CAQjE;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAO3D;AAED;;GAEG;AACH,wBAAgB,sBAAsB,IAAI,OAAO,CAQhD;AAqCD;;GAEG;AACH,wBAAgB,0BAA0B,CACtC,OAAO,EAAE,eAAe,EAAE,EAC1B,SAAS,EAAE,MAAM,GAClB,OAAO,EAAE,CAqGX;AAED;;GAEG;AACH,wBAAsB,cAAc,CAAC,KAAK,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI;;;;;;;;GAmB/E"}
@@ -6,6 +6,39 @@ import path from 'path';
6
6
  import os from 'os';
7
7
  import { isTextPart, isAssistantMessage, isToolMessage } from '@dexto/core';
8
8
  import { generateMessageId } from './idGenerator.js';
9
+ /**
10
+ * Regex to detect skill invocation messages.
11
+ * Matches: <skill-invocation>...skill: "config:skill-name"...</skill-invocation>
12
+ * Works for both fork and inline skills.
13
+ */
14
+ const SKILL_INVOCATION_REGEX = /<skill-invocation>[\s\S]*?skill:\s*"(?:config:)?([^"]+)"[\s\S]*?<\/skill-invocation>/;
15
+ /**
16
+ * Formats a skill invocation message for clean display.
17
+ * Converts verbose <skill-invocation> blocks to clean /skill-name format.
18
+ * Works for both fork skills (just the tag) and inline skills (tag + content).
19
+ *
20
+ * @param content - The message content to check and format
21
+ * @returns Formatted content if it's a skill invocation, original content otherwise
22
+ */
23
+ export function formatSkillInvocationMessage(content) {
24
+ const match = content.match(SKILL_INVOCATION_REGEX);
25
+ if (match) {
26
+ const skillName = match[1];
27
+ // Extract task context if present
28
+ const contextMatch = content.match(/Task context:\s*(.+?)(?:\n|$)/);
29
+ if (contextMatch) {
30
+ return `/${skillName} ${contextMatch[1]}`;
31
+ }
32
+ return `/${skillName}`;
33
+ }
34
+ return content;
35
+ }
36
+ /**
37
+ * Checks if a message content is a skill invocation.
38
+ */
39
+ export function isSkillInvocationMessage(content) {
40
+ return SKILL_INVOCATION_REGEX.test(content);
41
+ }
9
42
  /**
10
43
  * Convert absolute path to display-friendly relative path.
11
44
  * Strategy:
@@ -111,8 +144,14 @@ const TOOL_CONFIGS = {
111
144
  kill_process: { displayName: 'Kill', argsToShow: ['process_id'], primaryArg: 'process_id' },
112
145
  // User interaction
113
146
  ask_user: { displayName: 'Ask', argsToShow: ['question'], primaryArg: 'question' },
114
- // Agent spawning - handled specially in getToolDisplayName for dynamic agentId
147
+ // Agent spawning - handled specially in formatToolHeader for dynamic agentId
115
148
  spawn_agent: { displayName: 'Agent', argsToShow: ['task'], primaryArg: 'task' },
149
+ // Skill invocation - handled specially in formatToolHeader to show clean skill name
150
+ invoke_skill: { displayName: 'Skill', argsToShow: ['skill'], primaryArg: 'skill' },
151
+ plan_create: { displayName: 'Plan', argsToShow: [] },
152
+ plan_read: { displayName: 'Plan', argsToShow: [] },
153
+ plan_update: { displayName: 'Plan', argsToShow: [] },
154
+ plan_review: { displayName: 'Plan', argsToShow: [] },
116
155
  todo_write: { displayName: 'UpdateTasks', argsToShow: [] },
117
156
  };
118
157
  /**
@@ -217,15 +256,30 @@ export function formatToolHeader(toolName, args = {}) {
217
256
  let displayName = getToolDisplayName(toolName);
218
257
  const argsFormatted = formatToolArgsForDisplay(toolName, args);
219
258
  const badge = getToolTypeBadge(toolName);
220
- // Special handling for spawn_agent: use agentId as display name
221
259
  // Normalize tool name to handle all prefixes (internal--, custom--)
222
260
  const normalizedToolName = toolName.replace(/^(?:internal--|custom--)/, '');
261
+ // Special handling for spawn_agent: use agentId as display name
223
262
  const isSpawnAgent = normalizedToolName === 'spawn_agent';
224
263
  if (isSpawnAgent && args.agentId) {
225
264
  const agentId = String(args.agentId);
226
265
  const agentLabel = agentId.replace(/-agent$/, '');
227
266
  displayName = agentLabel.charAt(0).toUpperCase() + agentLabel.slice(1);
228
267
  }
268
+ // Special handling for invoke_skill: show skill as /skill-name
269
+ const isInvokeSkill = normalizedToolName === 'invoke_skill';
270
+ if (isInvokeSkill && args.skill) {
271
+ const skillName = String(args.skill);
272
+ // Extract display name from skill identifier (e.g., "config:test-fork" -> "test-fork")
273
+ const colonIndex = skillName.indexOf(':');
274
+ const displaySkillName = colonIndex >= 0 ? skillName.slice(colonIndex + 1) : skillName;
275
+ // Override args display to show clean slash command format
276
+ return {
277
+ displayName: 'Skill',
278
+ argsFormatted: `/${displaySkillName}`,
279
+ badge,
280
+ header: `Skill(/${displaySkillName})`,
281
+ };
282
+ }
229
283
  // Only show badge for MCP tools (external tools worth distinguishing)
230
284
  const isMcpTool = badge.startsWith('MCP');
231
285
  const badgeSuffix = isMcpTool ? ` [${badge}]` : '';
@@ -541,10 +595,14 @@ export function convertHistoryToUIMessages(history, sessionId) {
541
595
  return;
542
596
  }
543
597
  // Handle other messages (user, system)
544
- const textContent = extractTextContent(msg.content);
598
+ let textContent = extractTextContent(msg.content);
545
599
  // Skip empty messages
546
600
  if (!textContent)
547
601
  return;
602
+ // Format skill invocation messages for cleaner display
603
+ if (msg.role === 'user') {
604
+ textContent = formatSkillInvocationMessage(textContent);
605
+ }
548
606
  uiMessages.push({
549
607
  id: `session-${sessionId}-${index}`,
550
608
  role: msg.role,
@@ -557,13 +615,15 @@ export function convertHistoryToUIMessages(history, sessionId) {
557
615
  /**
558
616
  * Collects startup information for display in header
559
617
  */
560
- export async function getStartupInfo(agent) {
618
+ export async function getStartupInfo(agent, sessionId) {
561
619
  const connectedServers = agent.mcpManager.getClients();
562
620
  const failedConnections = agent.mcpManager.getFailedConnections();
563
621
  const tools = await agent.getAllTools();
564
622
  const toolCount = Object.keys(tools).length;
565
- // Use agent's logger which has the correct per-agent log path from enriched config
566
- const logFile = agent.logger.getLogFilePath();
623
+ // File logging is session-scoped. If a session already exists, show its log file.
624
+ const logFile = sessionId
625
+ ? ((await agent.getSession(sessionId))?.logger.getLogFilePath() ?? null)
626
+ : null;
567
627
  return {
568
628
  connectedServers: {
569
629
  count: connectedServers.size,
@@ -6,4 +6,15 @@
6
6
  * Used for "accept all edits" mode which auto-approves these tools.
7
7
  */
8
8
  export declare function isEditWriteTool(toolName: string | undefined): boolean;
9
+ /**
10
+ * Check if a tool is a plan update tool.
11
+ * Used for "accept all edits" mode which also auto-approves plan updates
12
+ * (typically marking tasks as complete during implementation).
13
+ */
14
+ export declare function isPlanUpdateTool(toolName: string | undefined): boolean;
15
+ /**
16
+ * Check if a tool should be auto-approved in "accept all edits" mode.
17
+ * Includes file edit/write tools and plan update tools.
18
+ */
19
+ export declare function isAutoApprovableInEditMode(toolName: string | undefined): boolean;
9
20
  //# sourceMappingURL=toolUtils.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"toolUtils.d.ts","sourceRoot":"","sources":["../../../../src/cli/ink-cli/utils/toolUtils.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;;GAGG;AACH,wBAAgB,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,CASrE"}
1
+ {"version":3,"file":"toolUtils.d.ts","sourceRoot":"","sources":["../../../../src/cli/ink-cli/utils/toolUtils.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;;GAGG;AACH,wBAAgB,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,CASrE;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,CAMtE;AAED;;;GAGG;AACH,wBAAgB,0BAA0B,CAAC,QAAQ,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,CAEhF"}
@@ -13,3 +13,20 @@ export function isEditWriteTool(toolName) {
13
13
  toolName === 'edit_file' ||
14
14
  toolName === 'write_file');
15
15
  }
16
+ /**
17
+ * Check if a tool is a plan update tool.
18
+ * Used for "accept all edits" mode which also auto-approves plan updates
19
+ * (typically marking tasks as complete during implementation).
20
+ */
21
+ export function isPlanUpdateTool(toolName) {
22
+ return (toolName === 'plan_update' ||
23
+ toolName === 'custom--plan_update' ||
24
+ toolName === 'internal--plan_update');
25
+ }
26
+ /**
27
+ * Check if a tool should be auto-approved in "accept all edits" mode.
28
+ * Includes file edit/write tools and plan update tools.
29
+ */
30
+ export function isAutoApprovableInEditMode(toolName) {
31
+ return isEditWriteTool(toolName) || isPlanUpdateTool(toolName);
32
+ }
@@ -0,0 +1,8 @@
1
+ export * from './oauth-factory.js';
2
+ export * from './oauth-provider.js';
3
+ export * from './oauth-redirect.js';
4
+ export * from './oauth-store.js';
5
+ export * from './oauth-ui.js';
6
+ export * from './oauth-utils.js';
7
+ export * from './oauth-server.js';
8
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/cli/mcp/index.ts"],"names":[],"mappings":"AAAA,cAAc,oBAAoB,CAAC;AACnC,cAAc,qBAAqB,CAAC;AACpC,cAAc,qBAAqB,CAAC;AACpC,cAAc,kBAAkB,CAAC;AACjC,cAAc,eAAe,CAAC;AAC9B,cAAc,kBAAkB,CAAC;AACjC,cAAc,mBAAmB,CAAC"}
@@ -0,0 +1,7 @@
1
+ export * from './oauth-factory.js';
2
+ export * from './oauth-provider.js';
3
+ export * from './oauth-redirect.js';
4
+ export * from './oauth-store.js';
5
+ export * from './oauth-ui.js';
6
+ export * from './oauth-utils.js';
7
+ export * from './oauth-server.js';
@@ -0,0 +1,6 @@
1
+ import type { McpAuthProviderFactory } from '@dexto/core';
2
+ import { logger as coreLogger } from '@dexto/core';
3
+ export declare function createMcpAuthProviderFactory(_options: {
4
+ logger?: typeof coreLogger;
5
+ }): McpAuthProviderFactory;
6
+ //# sourceMappingURL=oauth-factory.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"oauth-factory.d.ts","sourceRoot":"","sources":["../../../src/cli/mcp/oauth-factory.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,sBAAsB,EAA4B,MAAM,aAAa,CAAC;AAGpF,OAAO,EAAE,MAAM,IAAI,UAAU,EAAE,MAAM,aAAa,CAAC;AAUnD,wBAAgB,4BAA4B,CAAC,QAAQ,EAAE;IACnD,MAAM,CAAC,EAAE,OAAO,UAAU,CAAC;CAC9B,GAAG,sBAAsB,CAgBzB"}
@@ -0,0 +1,25 @@
1
+ import { createMcpOAuthProvider } from './oauth-provider.js';
2
+ import { getMcpRedirectUrl } from './oauth-redirect.js';
3
+ const DEFAULT_CLIENT_METADATA = {
4
+ client_name: 'Dexto MCP Client',
5
+ redirect_uris: [getMcpRedirectUrl()],
6
+ grant_types: ['authorization_code', 'refresh_token'],
7
+ response_types: ['code'],
8
+ token_endpoint_auth_method: 'none',
9
+ };
10
+ export function createMcpAuthProviderFactory(_options) {
11
+ return (serverName, config) => {
12
+ if (config.type !== 'http' && config.type !== 'sse') {
13
+ return undefined;
14
+ }
15
+ const redirectUrl = getMcpRedirectUrl();
16
+ return createMcpOAuthProvider({
17
+ serverId: serverName,
18
+ redirectUrl,
19
+ clientMetadata: {
20
+ ...DEFAULT_CLIENT_METADATA,
21
+ redirect_uris: [redirectUrl],
22
+ },
23
+ });
24
+ };
25
+ }
@@ -0,0 +1,10 @@
1
+ import type { OAuthClientMetadata } from '@modelcontextprotocol/sdk/shared/auth.js';
2
+ import type { McpAuthProvider } from '@dexto/core';
3
+ export type McpOAuthClientConfig = {
4
+ serverId: string;
5
+ redirectUrl: string;
6
+ clientMetadata: OAuthClientMetadata;
7
+ clientMetadataUrl?: string | undefined;
8
+ };
9
+ export declare function createMcpOAuthProvider(config: McpOAuthClientConfig): McpAuthProvider;
10
+ //# sourceMappingURL=oauth-provider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"oauth-provider.d.ts","sourceRoot":"","sources":["../../../src/cli/mcp/oauth-provider.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACR,mBAAmB,EAGtB,MAAM,0CAA0C,CAAC;AAClD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAKnD,MAAM,MAAM,oBAAoB,GAAG;IAC/B,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,EAAE,mBAAmB,CAAC;IACpC,iBAAiB,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CAC1C,CAAC;AAEF,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,oBAAoB,GAAG,eAAe,CA6EpF"}
@@ -0,0 +1,77 @@
1
+ import { loadMcpAuthStore, saveMcpAuthStore } from './oauth-store.js';
2
+ import { createMcpCallbackServer } from './oauth-server.js';
3
+ import { openAuthUrl } from './oauth-ui.js';
4
+ export function createMcpOAuthProvider(config) {
5
+ let authorizationCode;
6
+ return {
7
+ get redirectUrl() {
8
+ return config.redirectUrl;
9
+ },
10
+ ...(config.clientMetadataUrl ? { clientMetadataUrl: config.clientMetadataUrl } : {}),
11
+ get clientMetadata() {
12
+ return config.clientMetadata;
13
+ },
14
+ async clientInformation() {
15
+ const store = await loadMcpAuthStore(config.serverId);
16
+ return store.clientInformation;
17
+ },
18
+ async saveClientInformation(clientInformation) {
19
+ const store = await loadMcpAuthStore(config.serverId);
20
+ await saveMcpAuthStore(config.serverId, {
21
+ ...store,
22
+ clientInformation,
23
+ });
24
+ },
25
+ async tokens() {
26
+ const store = await loadMcpAuthStore(config.serverId);
27
+ return store.tokens;
28
+ },
29
+ async saveTokens(tokens) {
30
+ const store = await loadMcpAuthStore(config.serverId);
31
+ await saveMcpAuthStore(config.serverId, {
32
+ ...store,
33
+ tokens,
34
+ });
35
+ },
36
+ async redirectToAuthorization(authorizationUrl) {
37
+ await openAuthUrl(authorizationUrl.toString());
38
+ },
39
+ async saveCodeVerifier(codeVerifier) {
40
+ const store = await loadMcpAuthStore(config.serverId);
41
+ await saveMcpAuthStore(config.serverId, {
42
+ ...store,
43
+ codeVerifier,
44
+ });
45
+ },
46
+ async codeVerifier() {
47
+ const store = await loadMcpAuthStore(config.serverId);
48
+ if (!store.codeVerifier) {
49
+ throw new Error('No code verifier saved');
50
+ }
51
+ return store.codeVerifier;
52
+ },
53
+ async waitForAuthorizationCode() {
54
+ if (authorizationCode) {
55
+ return authorizationCode;
56
+ }
57
+ const result = await createMcpCallbackServer(config.redirectUrl);
58
+ authorizationCode = result;
59
+ return result;
60
+ },
61
+ async invalidateCredentials(scope) {
62
+ const store = await loadMcpAuthStore(config.serverId);
63
+ const updated = { ...store };
64
+ authorizationCode = undefined;
65
+ if (scope === 'all' || scope === 'tokens') {
66
+ updated.tokens = undefined;
67
+ }
68
+ if (scope === 'all' || scope === 'client') {
69
+ updated.clientInformation = undefined;
70
+ }
71
+ if (scope === 'all' || scope === 'verifier') {
72
+ updated.codeVerifier = undefined;
73
+ }
74
+ await saveMcpAuthStore(config.serverId, updated);
75
+ },
76
+ };
77
+ }
@@ -0,0 +1,3 @@
1
+ export declare const DEFAULT_MCP_REDIRECT_URL = "http://localhost:48910/callback";
2
+ export declare function getMcpRedirectUrl(): string;
3
+ //# sourceMappingURL=oauth-redirect.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"oauth-redirect.d.ts","sourceRoot":"","sources":["../../../src/cli/mcp/oauth-redirect.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,wBAAwB,oCAAoC,CAAC;AAE1E,wBAAgB,iBAAiB,IAAI,MAAM,CAE1C"}
@@ -0,0 +1,4 @@
1
+ export const DEFAULT_MCP_REDIRECT_URL = 'http://localhost:48910/callback';
2
+ export function getMcpRedirectUrl() {
3
+ return process.env.DEXTO_MCP_REDIRECT_URL ?? DEFAULT_MCP_REDIRECT_URL;
4
+ }
@@ -0,0 +1,2 @@
1
+ export declare function createMcpCallbackServer(redirectUrl: string): Promise<string>;
2
+ //# sourceMappingURL=oauth-server.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"oauth-server.d.ts","sourceRoot":"","sources":["../../../src/cli/mcp/oauth-server.ts"],"names":[],"mappings":"AAaA,wBAAsB,uBAAuB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAuElF"}