@dexto/tui 1.6.24 → 1.6.26

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 (44) hide show
  1. package/dist/agent-backend.d.ts +1 -1
  2. package/dist/agent-backend.d.ts.map +1 -1
  3. package/dist/components/overlays/InsufficientCreditsOverlay.cjs +264 -0
  4. package/dist/components/overlays/InsufficientCreditsOverlay.d.ts +14 -0
  5. package/dist/components/overlays/InsufficientCreditsOverlay.d.ts.map +1 -0
  6. package/dist/components/overlays/InsufficientCreditsOverlay.js +252 -0
  7. package/dist/components/overlays/ToolBrowser.cjs +15 -6
  8. package/dist/components/overlays/ToolBrowser.d.ts.map +1 -1
  9. package/dist/components/overlays/ToolBrowser.js +15 -6
  10. package/dist/components/overlays/custom-model-wizard/provider-config.cjs +1 -1
  11. package/dist/components/overlays/custom-model-wizard/provider-config.js +1 -1
  12. package/dist/containers/OverlayContainer.cjs +75 -22
  13. package/dist/containers/OverlayContainer.d.ts.map +1 -1
  14. package/dist/containers/OverlayContainer.js +75 -22
  15. package/dist/hooks/useAgentEvents.cjs +5 -2
  16. package/dist/hooks/useAgentEvents.d.ts.map +1 -1
  17. package/dist/hooks/useAgentEvents.js +5 -2
  18. package/dist/hooks/useCLIState.cjs +1 -0
  19. package/dist/hooks/useCLIState.d.ts.map +1 -1
  20. package/dist/hooks/useCLIState.js +1 -0
  21. package/dist/host/index.cjs +16 -0
  22. package/dist/host/index.d.ts +12 -0
  23. package/dist/host/index.d.ts.map +1 -1
  24. package/dist/host/index.js +14 -0
  25. package/dist/index.d.cts +7 -1
  26. package/dist/services/processStream.cjs +48 -2
  27. package/dist/services/processStream.d.ts.map +1 -1
  28. package/dist/services/processStream.js +49 -3
  29. package/dist/services/processStream.test.cjs +32 -0
  30. package/dist/services/processStream.test.js +32 -0
  31. package/dist/state/initialState.cjs +1 -0
  32. package/dist/state/initialState.d.ts.map +1 -1
  33. package/dist/state/initialState.js +1 -0
  34. package/dist/state/types.d.ts +5 -1
  35. package/dist/state/types.d.ts.map +1 -1
  36. package/dist/utils/dexto-auth-refresh.cjs +55 -0
  37. package/dist/utils/dexto-auth-refresh.d.ts +3 -0
  38. package/dist/utils/dexto-auth-refresh.d.ts.map +1 -0
  39. package/dist/utils/dexto-auth-refresh.js +31 -0
  40. package/dist/utils/dexto-auth-refresh.test.cjs +122 -0
  41. package/dist/utils/dexto-auth-refresh.test.d.ts +2 -0
  42. package/dist/utils/dexto-auth-refresh.test.d.ts.map +1 -0
  43. package/dist/utils/dexto-auth-refresh.test.js +121 -0
  44. package/package.json +4 -4
@@ -207,11 +207,11 @@ const ToolBrowser = forwardRef(function ToolBrowser2({ isVisible, onClose, agent
207
207
  setSelectedTool(updatedSelected);
208
208
  const autoApprovedTools = updatedTools.filter((tool) => tool.isAutoApproved).map((tool) => tool.name);
209
209
  if (sessionId) {
210
- agent.setSessionAutoApproveTools(sessionId, autoApprovedTools);
210
+ await agent.setSessionAutoApproveTools(sessionId, autoApprovedTools);
211
211
  }
212
212
  const disabledTools = updatedTools.filter((tool) => !tool.isEnabled).map((tool) => tool.name);
213
213
  if (effectiveTarget === "session" && sessionId) {
214
- agent.setSessionDisabledTools(sessionId, disabledTools);
214
+ await agent.setSessionDisabledTools(sessionId, disabledTools);
215
215
  } else if (effectiveTarget === "global") {
216
216
  try {
217
217
  const { updateAgentPreferences, saveAgentPreferences, agentPreferencesExist } = await import("@dexto/agent-management");
@@ -227,7 +227,7 @@ const ToolBrowser = forwardRef(function ToolBrowser2({ isVisible, onClose, agent
227
227
  agent.setGlobalDisabledTools(disabledTools);
228
228
  } catch (_error) {
229
229
  if (sessionId) {
230
- agent.setSessionDisabledTools(sessionId, disabledTools);
230
+ await agent.setSessionDisabledTools(sessionId, disabledTools);
231
231
  } else {
232
232
  setTools(previousTools);
233
233
  setSelectedTool(
@@ -238,8 +238,10 @@ const ToolBrowser = forwardRef(function ToolBrowser2({ isVisible, onClose, agent
238
238
  }
239
239
  closeScopePrompt();
240
240
  };
241
- const toggleAutoApprove = () => {
241
+ const toggleAutoApprove = async () => {
242
242
  if (!sessionId) return;
243
+ const previousTools = toolsRef.current;
244
+ const previousSelectedToolName = selectedToolRef.current?.name;
243
245
  const updatedTools = toolsRef.current.map(
244
246
  (tool) => tool.name === selectedToolRef.current?.name ? { ...tool, isAutoApproved: !tool.isAutoApproved } : tool
245
247
  );
@@ -249,7 +251,14 @@ const ToolBrowser = forwardRef(function ToolBrowser2({ isVisible, onClose, agent
249
251
  setTools(updatedTools);
250
252
  setSelectedTool(updatedSelected ?? null);
251
253
  const autoApprovedTools = updatedTools.filter((tool) => tool.isAutoApproved).map((tool) => tool.name);
252
- agent.setSessionAutoApproveTools(sessionId, autoApprovedTools);
254
+ try {
255
+ await agent.setSessionAutoApproveTools(sessionId, autoApprovedTools);
256
+ } catch (_error) {
257
+ setTools(previousTools);
258
+ setSelectedTool(
259
+ previousTools.find((tool) => tool.name === previousSelectedToolName) ?? null
260
+ );
261
+ }
253
262
  };
254
263
  const closeConfigMenu = () => {
255
264
  setViewMode("list-actions");
@@ -315,7 +324,7 @@ const ToolBrowser = forwardRef(function ToolBrowser2({ isVisible, onClose, agent
315
324
  openScopePrompt(tool);
316
325
  } else if (configIndexRef.current === 1) {
317
326
  if (sessionId && tool.isEnabled) {
318
- toggleAutoApprove();
327
+ void toggleAutoApprove();
319
328
  }
320
329
  } else {
321
330
  closeConfigMenu();
@@ -499,7 +499,7 @@ const PROVIDER_CONFIGS = {
499
499
  },
500
500
  setupInfo: {
501
501
  title: "Dexto Nova Setup",
502
- description: "Add OpenRouter-format models that use your Dexto Nova credits. Requires login: run `dexto login` first.",
502
+ description: "Add OpenRouter-format models that use your Dexto Nova credits. Requires login: run `/login` first.",
503
503
  docsUrl: "https://openrouter.ai/models"
504
504
  }
505
505
  }
@@ -467,7 +467,7 @@ const PROVIDER_CONFIGS = {
467
467
  },
468
468
  setupInfo: {
469
469
  title: "Dexto Nova Setup",
470
- description: "Add OpenRouter-format models that use your Dexto Nova credits. Requires login: run `dexto login` first.",
470
+ description: "Add OpenRouter-format models that use your Dexto Nova credits. Requires login: run `/login` first.",
471
471
  docsUrl: "https://openrouter.ai/models"
472
472
  }
473
473
  }
@@ -56,6 +56,7 @@ var import_McpCustomTypeSelector = __toESM(require("../components/overlays/McpCu
56
56
  var import_McpCustomWizard = __toESM(require("../components/overlays/McpCustomWizard.js"), 1);
57
57
  var import_CustomModelWizard = __toESM(require("../components/overlays/CustomModelWizard.js"), 1);
58
58
  var import_ChatGPTUsageCapOverlay = __toESM(require("../components/overlays/ChatGPTUsageCapOverlay.js"), 1);
59
+ var import_InsufficientCreditsOverlay = __toESM(require("../components/overlays/InsufficientCreditsOverlay.js"), 1);
59
60
  var import_llm_provider_display = require("../utils/llm-provider-display.js");
60
61
  var import_chatgpt_rate_limit = require("../utils/chatgpt-rate-limit.js");
61
62
  var import_agent_management = require("@dexto/agent-management");
@@ -81,6 +82,7 @@ var import_idGenerator = require("../utils/idGenerator.js");
81
82
  var import_host = require("../host/index.js");
82
83
  var import_FocusOverlayFrame = require("../components/shared/FocusOverlayFrame.js");
83
84
  var import_overlayPresentation = require("../utils/overlayPresentation.js");
85
+ var import_dexto_auth_refresh = require("../utils/dexto-auth-refresh.js");
84
86
  function isLLMProvider(value) {
85
87
  if (typeof value !== "string") return false;
86
88
  for (const provider of import_core2.LLM_PROVIDERS) {
@@ -142,6 +144,7 @@ const OverlayContainer = (0, import_react.forwardRef)(
142
144
  const customModelWizardRef = (0, import_react.useRef)(null);
143
145
  const sessionSubcommandSelectorRef = (0, import_react.useRef)(null);
144
146
  const chatGPTUsageCapRef = (0, import_react.useRef)(null);
147
+ const insufficientCreditsRef = (0, import_react.useRef)(null);
145
148
  const apiKeyInputRef = (0, import_react.useRef)(null);
146
149
  const loginOverlayRef = (0, import_react.useRef)(null);
147
150
  const logoutOverlayRef = (0, import_react.useRef)(null);
@@ -223,6 +226,8 @@ const OverlayContainer = (0, import_react.forwardRef)(
223
226
  return sessionSubcommandSelectorRef.current?.handleInput(inputStr, key) ?? false;
224
227
  case "chatgpt-usage-cap":
225
228
  return chatGPTUsageCapRef.current?.handleInput(inputStr, key) ?? false;
229
+ case "insufficient-credits":
230
+ return insufficientCreditsRef.current?.handleInput(inputStr, key) ?? false;
226
231
  case "api-key-input":
227
232
  return apiKeyInputRef.current?.handleInput(inputStr, key) ?? false;
228
233
  case "login":
@@ -639,6 +644,29 @@ const OverlayContainer = (0, import_react.forwardRef)(
639
644
  activeOverlay: "none"
640
645
  }));
641
646
  }, [setUi]);
647
+ const handleInsufficientCreditsClose = (0, import_react.useCallback)(() => {
648
+ setUi((prev) => ({
649
+ ...prev,
650
+ activeOverlay: "none",
651
+ insufficientCredits: null
652
+ }));
653
+ }, [setUi]);
654
+ const handleInsufficientCreditsResolved = (0, import_react.useCallback)(() => {
655
+ setUi((prev) => ({
656
+ ...prev,
657
+ activeOverlay: "none",
658
+ insufficientCredits: null
659
+ }));
660
+ setMessages((prev) => [
661
+ ...prev,
662
+ {
663
+ id: (0, import_idGenerator.generateMessageId)("system"),
664
+ role: "system",
665
+ content: "Billing opened in your browser. Retry your request when ready.",
666
+ timestamp: /* @__PURE__ */ new Date()
667
+ }
668
+ ]);
669
+ }, [setMessages, setUi]);
642
670
  const handleChatGPTUsageCapConfirm = (0, import_react.useCallback)(async () => {
643
671
  const currentLLMConfig2 = session.id ? agent.getCurrentLLMConfig(session.id) : agent.getCurrentLLMConfig();
644
672
  const fallbackTarget = (0, import_chatgpt_rate_limit.resolveChatGPTFallbackModel)(currentLLMConfig2.model);
@@ -1086,41 +1114,56 @@ ${result.context}`,
1086
1114
  ...prev,
1087
1115
  activeOverlay: "none",
1088
1116
  mcpWizardServerType: null,
1089
- commandOutput: null
1117
+ commandOutput: null,
1118
+ insufficientCredits: null
1090
1119
  }));
1091
1120
  }, [setUi]);
1092
1121
  const handleLoginDone = (0, import_react.useCallback)(
1093
1122
  (outcome) => {
1094
- handleClose();
1095
- if (outcome.outcome === "closed") {
1096
- return;
1097
- }
1098
- if (outcome.outcome === "cancelled") {
1123
+ void (async () => {
1124
+ handleClose();
1125
+ if (outcome.outcome === "closed") {
1126
+ return;
1127
+ }
1128
+ if (outcome.outcome === "cancelled") {
1129
+ setMessages((prev) => [
1130
+ ...prev,
1131
+ {
1132
+ id: (0, import_idGenerator.generateMessageId)("system"),
1133
+ role: "system",
1134
+ content: "Login cancelled.",
1135
+ timestamp: /* @__PURE__ */ new Date()
1136
+ }
1137
+ ]);
1138
+ return;
1139
+ }
1140
+ let refreshWarning = null;
1141
+ if (outcome.hasDextoApiKey) {
1142
+ try {
1143
+ await (0, import_dexto_auth_refresh.refreshDextoNovaAuthAfterLogin)(agent, session.id || void 0);
1144
+ } catch (error) {
1145
+ refreshWarning = `Logged in, but failed to refresh the active Dexto Nova session: ${error instanceof Error ? error.message : String(error)}`;
1146
+ }
1147
+ }
1148
+ const userLabel = outcome.email ? ` as ${outcome.email}` : "";
1149
+ const keyLine = outcome.hasDextoApiKey ? `\u{1F511} DEXTO_API_KEY ready${outcome.keyId ? ` (Key ID: ${outcome.keyId})` : ""}` : "\u26A0\uFE0F Failed to provision DEXTO_API_KEY (you can still use your own API keys)";
1150
+ const content = [
1151
+ `\u2705 Logged in${userLabel}`,
1152
+ keyLine,
1153
+ ...refreshWarning ? [`\u26A0\uFE0F ${refreshWarning}`] : []
1154
+ ].join("\n");
1099
1155
  setMessages((prev) => [
1100
1156
  ...prev,
1101
1157
  {
1102
1158
  id: (0, import_idGenerator.generateMessageId)("system"),
1103
1159
  role: "system",
1104
- content: "Login cancelled.",
1160
+ content,
1105
1161
  timestamp: /* @__PURE__ */ new Date()
1106
1162
  }
1107
1163
  ]);
1108
- return;
1109
- }
1110
- const userLabel = outcome.email ? ` as ${outcome.email}` : "";
1111
- const keyLine = outcome.hasDextoApiKey ? `\u{1F511} DEXTO_API_KEY ready${outcome.keyId ? ` (Key ID: ${outcome.keyId})` : ""}` : "\u26A0\uFE0F Failed to provision DEXTO_API_KEY (you can still use your own API keys)";
1112
- setMessages((prev) => [
1113
- ...prev,
1114
- {
1115
- id: (0, import_idGenerator.generateMessageId)("system"),
1116
- role: "system",
1117
- content: `\u2705 Logged in${userLabel}
1118
- ${keyLine}`,
1119
- timestamp: /* @__PURE__ */ new Date()
1120
- }
1121
- ]);
1164
+ })();
1122
1165
  },
1123
- [handleClose, setMessages]
1166
+ [agent, handleClose, session.id, setMessages]
1124
1167
  );
1125
1168
  const handleLogoutDone = (0, import_react.useCallback)(
1126
1169
  (outcome) => {
@@ -2379,6 +2422,16 @@ Use /${data.name} to run it.`,
2379
2422
  onClose: handleChatGPTUsageCapClose
2380
2423
  }
2381
2424
  ) }),
2425
+ ui.activeOverlay === "insufficient-credits" && ui.insufficientCredits && /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_ink.Box, { marginTop: 1, children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
2426
+ import_InsufficientCreditsOverlay.default,
2427
+ {
2428
+ ref: insufficientCreditsRef,
2429
+ isVisible: true,
2430
+ initialBalanceUsd: ui.insufficientCredits.balanceUsd,
2431
+ onResolved: handleInsufficientCreditsResolved,
2432
+ onClose: handleInsufficientCreditsClose
2433
+ }
2434
+ ) }),
2382
2435
  ui.activeOverlay === "login" && /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_ink.Box, { marginTop: 1, children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
2383
2436
  import_LoginOverlay.default,
2384
2437
  {
@@ -1 +1 @@
1
- {"version":3,"file":"OverlayContainer.d.ts","sourceRoot":"","sources":["../../src/containers/OverlayContainer.tsx"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAyE,MAAM,OAAO,CAAC;AAI9F,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,qCAAqC,CAAC;AACtE,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,kCAAkC,CAAC;AAE5D,OAAO,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACpF,OAAO,EAGH,KAAK,eAAe,EACvB,MAAM,iCAAiC,CAAC;AAgGzC,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AA6C3D,OAAO,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAsC3D,MAAM,WAAW,sBAAsB;IACnC,WAAW,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,GAAG,KAAK,OAAO,CAAC;CACrD;AAED,UAAU,qBAAqB;IAC3B,EAAE,EAAE,OAAO,CAAC;IACZ,KAAK,EAAE,UAAU,CAAC;IAClB,OAAO,EAAE,YAAY,CAAC;IACtB,QAAQ,EAAE,eAAe,GAAG,IAAI,CAAC;IACjC,QAAQ,EAAE,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC,CAAC;IAC3D,KAAK,EAAE,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC,CAAC;IACrD,UAAU,EAAE,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,cAAc,CAAC,YAAY,CAAC,CAAC,CAAC;IAC/D,WAAW,EAAE,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,cAAc,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;IAC7D,WAAW,EAAE,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,cAAc,CAAC,eAAe,GAAG,IAAI,CAAC,CAAC,CAAC;IAC1E,gBAAgB,EAAE,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,cAAc,CAAC,eAAe,EAAE,CAAC,CAAC,CAAC;IAC1E,KAAK,EAAE,eAAe,CAAC;IACvB,YAAY,EAAE,YAAY,CAAC;IAC3B,MAAM,EAAE,UAAU,CAAC;IACnB,mDAAmD;IACnD,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,8EAA8E;IAC9E,aAAa,CAAC,EAAE,MAAM,IAAI,CAAC;IAC3B,4EAA4E;IAC5E,qBAAqB,CAAC,EAAE,CAAC,WAAW,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CAClE;AAED;;;GAGG;AACH,eAAO,MAAM,gBAAgB,sGAy2F5B,CAAC"}
1
+ {"version":3,"file":"OverlayContainer.d.ts","sourceRoot":"","sources":["../../src/containers/OverlayContainer.tsx"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAyE,MAAM,OAAO,CAAC;AAI9F,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,qCAAqC,CAAC;AACtE,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,kCAAkC,CAAC;AAE5D,OAAO,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACpF,OAAO,EAGH,KAAK,eAAe,EACvB,MAAM,iCAAiC,CAAC;AAmGzC,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AA6C3D,OAAO,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAuC3D,MAAM,WAAW,sBAAsB;IACnC,WAAW,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,GAAG,KAAK,OAAO,CAAC;CACrD;AAED,UAAU,qBAAqB;IAC3B,EAAE,EAAE,OAAO,CAAC;IACZ,KAAK,EAAE,UAAU,CAAC;IAClB,OAAO,EAAE,YAAY,CAAC;IACtB,QAAQ,EAAE,eAAe,GAAG,IAAI,CAAC;IACjC,QAAQ,EAAE,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC,CAAC;IAC3D,KAAK,EAAE,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC,CAAC;IACrD,UAAU,EAAE,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,cAAc,CAAC,YAAY,CAAC,CAAC,CAAC;IAC/D,WAAW,EAAE,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,cAAc,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;IAC7D,WAAW,EAAE,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,cAAc,CAAC,eAAe,GAAG,IAAI,CAAC,CAAC,CAAC;IAC1E,gBAAgB,EAAE,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,cAAc,CAAC,eAAe,EAAE,CAAC,CAAC,CAAC;IAC1E,KAAK,EAAE,eAAe,CAAC;IACvB,YAAY,EAAE,YAAY,CAAC;IAC3B,MAAM,EAAE,UAAU,CAAC;IACnB,mDAAmD;IACnD,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,8EAA8E;IAC9E,aAAa,CAAC,EAAE,MAAM,IAAI,CAAC;IAC3B,4EAA4E;IAC5E,qBAAqB,CAAC,EAAE,CAAC,WAAW,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CAClE;AAED;;;GAGG;AACH,eAAO,MAAM,gBAAgB,sGAu6F5B,CAAC"}
@@ -31,6 +31,7 @@ import McpCustomTypeSelector from "../components/overlays/McpCustomTypeSelector.
31
31
  import McpCustomWizard from "../components/overlays/McpCustomWizard.js";
32
32
  import CustomModelWizard from "../components/overlays/CustomModelWizard.js";
33
33
  import ChatGPTUsageCapOverlay from "../components/overlays/ChatGPTUsageCapOverlay.js";
34
+ import InsufficientCreditsOverlay from "../components/overlays/InsufficientCreditsOverlay.js";
34
35
  import { getLLMProviderDisplayName } from "../utils/llm-provider-display.js";
35
36
  import { resolveChatGPTFallbackModel } from "../utils/chatgpt-rate-limit.js";
36
37
  import {
@@ -67,6 +68,7 @@ import { generateMessageId } from "../utils/idGenerator.js";
67
68
  import { canUseDextoProvider, captureAnalytics } from "../host/index.js";
68
69
  import { FocusOverlayFrame } from "../components/shared/FocusOverlayFrame.js";
69
70
  import { shouldHideCliChrome } from "../utils/overlayPresentation.js";
71
+ import { refreshDextoNovaAuthAfterLogin } from "../utils/dexto-auth-refresh.js";
70
72
  function isLLMProvider(value) {
71
73
  if (typeof value !== "string") return false;
72
74
  for (const provider of LLM_PROVIDERS) {
@@ -128,6 +130,7 @@ const OverlayContainer = forwardRef(
128
130
  const customModelWizardRef = useRef(null);
129
131
  const sessionSubcommandSelectorRef = useRef(null);
130
132
  const chatGPTUsageCapRef = useRef(null);
133
+ const insufficientCreditsRef = useRef(null);
131
134
  const apiKeyInputRef = useRef(null);
132
135
  const loginOverlayRef = useRef(null);
133
136
  const logoutOverlayRef = useRef(null);
@@ -209,6 +212,8 @@ const OverlayContainer = forwardRef(
209
212
  return sessionSubcommandSelectorRef.current?.handleInput(inputStr, key) ?? false;
210
213
  case "chatgpt-usage-cap":
211
214
  return chatGPTUsageCapRef.current?.handleInput(inputStr, key) ?? false;
215
+ case "insufficient-credits":
216
+ return insufficientCreditsRef.current?.handleInput(inputStr, key) ?? false;
212
217
  case "api-key-input":
213
218
  return apiKeyInputRef.current?.handleInput(inputStr, key) ?? false;
214
219
  case "login":
@@ -625,6 +630,29 @@ const OverlayContainer = forwardRef(
625
630
  activeOverlay: "none"
626
631
  }));
627
632
  }, [setUi]);
633
+ const handleInsufficientCreditsClose = useCallback(() => {
634
+ setUi((prev) => ({
635
+ ...prev,
636
+ activeOverlay: "none",
637
+ insufficientCredits: null
638
+ }));
639
+ }, [setUi]);
640
+ const handleInsufficientCreditsResolved = useCallback(() => {
641
+ setUi((prev) => ({
642
+ ...prev,
643
+ activeOverlay: "none",
644
+ insufficientCredits: null
645
+ }));
646
+ setMessages((prev) => [
647
+ ...prev,
648
+ {
649
+ id: generateMessageId("system"),
650
+ role: "system",
651
+ content: "Billing opened in your browser. Retry your request when ready.",
652
+ timestamp: /* @__PURE__ */ new Date()
653
+ }
654
+ ]);
655
+ }, [setMessages, setUi]);
628
656
  const handleChatGPTUsageCapConfirm = useCallback(async () => {
629
657
  const currentLLMConfig2 = session.id ? agent.getCurrentLLMConfig(session.id) : agent.getCurrentLLMConfig();
630
658
  const fallbackTarget = resolveChatGPTFallbackModel(currentLLMConfig2.model);
@@ -1072,41 +1100,56 @@ ${result.context}`,
1072
1100
  ...prev,
1073
1101
  activeOverlay: "none",
1074
1102
  mcpWizardServerType: null,
1075
- commandOutput: null
1103
+ commandOutput: null,
1104
+ insufficientCredits: null
1076
1105
  }));
1077
1106
  }, [setUi]);
1078
1107
  const handleLoginDone = useCallback(
1079
1108
  (outcome) => {
1080
- handleClose();
1081
- if (outcome.outcome === "closed") {
1082
- return;
1083
- }
1084
- if (outcome.outcome === "cancelled") {
1109
+ void (async () => {
1110
+ handleClose();
1111
+ if (outcome.outcome === "closed") {
1112
+ return;
1113
+ }
1114
+ if (outcome.outcome === "cancelled") {
1115
+ setMessages((prev) => [
1116
+ ...prev,
1117
+ {
1118
+ id: generateMessageId("system"),
1119
+ role: "system",
1120
+ content: "Login cancelled.",
1121
+ timestamp: /* @__PURE__ */ new Date()
1122
+ }
1123
+ ]);
1124
+ return;
1125
+ }
1126
+ let refreshWarning = null;
1127
+ if (outcome.hasDextoApiKey) {
1128
+ try {
1129
+ await refreshDextoNovaAuthAfterLogin(agent, session.id || void 0);
1130
+ } catch (error) {
1131
+ refreshWarning = `Logged in, but failed to refresh the active Dexto Nova session: ${error instanceof Error ? error.message : String(error)}`;
1132
+ }
1133
+ }
1134
+ const userLabel = outcome.email ? ` as ${outcome.email}` : "";
1135
+ const keyLine = outcome.hasDextoApiKey ? `\u{1F511} DEXTO_API_KEY ready${outcome.keyId ? ` (Key ID: ${outcome.keyId})` : ""}` : "\u26A0\uFE0F Failed to provision DEXTO_API_KEY (you can still use your own API keys)";
1136
+ const content = [
1137
+ `\u2705 Logged in${userLabel}`,
1138
+ keyLine,
1139
+ ...refreshWarning ? [`\u26A0\uFE0F ${refreshWarning}`] : []
1140
+ ].join("\n");
1085
1141
  setMessages((prev) => [
1086
1142
  ...prev,
1087
1143
  {
1088
1144
  id: generateMessageId("system"),
1089
1145
  role: "system",
1090
- content: "Login cancelled.",
1146
+ content,
1091
1147
  timestamp: /* @__PURE__ */ new Date()
1092
1148
  }
1093
1149
  ]);
1094
- return;
1095
- }
1096
- const userLabel = outcome.email ? ` as ${outcome.email}` : "";
1097
- const keyLine = outcome.hasDextoApiKey ? `\u{1F511} DEXTO_API_KEY ready${outcome.keyId ? ` (Key ID: ${outcome.keyId})` : ""}` : "\u26A0\uFE0F Failed to provision DEXTO_API_KEY (you can still use your own API keys)";
1098
- setMessages((prev) => [
1099
- ...prev,
1100
- {
1101
- id: generateMessageId("system"),
1102
- role: "system",
1103
- content: `\u2705 Logged in${userLabel}
1104
- ${keyLine}`,
1105
- timestamp: /* @__PURE__ */ new Date()
1106
- }
1107
- ]);
1150
+ })();
1108
1151
  },
1109
- [handleClose, setMessages]
1152
+ [agent, handleClose, session.id, setMessages]
1110
1153
  );
1111
1154
  const handleLogoutDone = useCallback(
1112
1155
  (outcome) => {
@@ -2365,6 +2408,16 @@ Use /${data.name} to run it.`,
2365
2408
  onClose: handleChatGPTUsageCapClose
2366
2409
  }
2367
2410
  ) }),
2411
+ ui.activeOverlay === "insufficient-credits" && ui.insufficientCredits && /* @__PURE__ */ jsx(Box, { marginTop: 1, children: /* @__PURE__ */ jsx(
2412
+ InsufficientCreditsOverlay,
2413
+ {
2414
+ ref: insufficientCreditsRef,
2415
+ isVisible: true,
2416
+ initialBalanceUsd: ui.insufficientCredits.balanceUsd,
2417
+ onResolved: handleInsufficientCreditsResolved,
2418
+ onClose: handleInsufficientCreditsClose
2419
+ }
2420
+ ) }),
2368
2421
  ui.activeOverlay === "login" && /* @__PURE__ */ jsx(Box, { marginTop: 1, children: /* @__PURE__ */ jsx(
2369
2422
  LoginOverlay,
2370
2423
  {
@@ -167,7 +167,8 @@ function useAgentEvents({
167
167
  setUi((prev) => ({
168
168
  ...prev,
169
169
  activeOverlay: "none",
170
- chatgptRateLimitStatus: null
170
+ chatgptRateLimitStatus: null,
171
+ insufficientCredits: null
171
172
  }));
172
173
  },
173
174
  { signal }
@@ -208,6 +209,7 @@ function useAgentEvents({
208
209
  ...prev,
209
210
  activeOverlay: "none",
210
211
  chatgptRateLimitStatus: null,
212
+ insufficientCredits: null,
211
213
  historySearch: {
212
214
  isActive: false,
213
215
  query: "",
@@ -229,7 +231,8 @@ function useAgentEvents({
229
231
  setUi((prev) => ({
230
232
  ...prev,
231
233
  activeOverlay: "none",
232
- chatgptRateLimitStatus: null
234
+ chatgptRateLimitStatus: null,
235
+ insufficientCredits: null
233
236
  }));
234
237
  },
235
238
  { signal }
@@ -1 +1 @@
1
- {"version":3,"file":"useAgentEvents.d.ts","sourceRoot":"","sources":["../../src/hooks/useAgentEvents.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAG/B,OAAO,EAGH,KAAK,aAAa,EAErB,MAAM,aAAa,CAAC;AACrB,OAAO,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AACpF,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,iCAAiC,CAAC;AAEvE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,qCAAqC,CAAC;AACtE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAE3D,UAAU,mBAAmB;IACzB,KAAK,EAAE,eAAe,CAAC;IACvB,WAAW,EAAE,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,cAAc,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;IAC7D,kBAAkB,EAAE,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,cAAc,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;IACpE,KAAK,EAAE,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC,CAAC;IACrD,UAAU,EAAE,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,cAAc,CAAC,YAAY,CAAC,CAAC,CAAC;IAC/D,QAAQ,EAAE,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC,CAAC;IAC3D,WAAW,EAAE,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,cAAc,CAAC,eAAe,GAAG,IAAI,CAAC,CAAC,CAAC;IAC1E,gBAAgB,EAAE,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,cAAc,CAAC,eAAe,EAAE,CAAC,CAAC,CAAC;IAC1E,iBAAiB,EAAE,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,cAAc,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC;IACzE,8CAA8C;IAC9C,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,iFAAiF;IACjF,MAAM,EAAE,UAAU,CAAC;CACtB;AAYD;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,EAC3B,KAAK,EACL,WAAW,EACX,kBAAkB,EAClB,KAAK,EACL,UAAU,EACV,QAAQ,EACR,WAAW,EACX,gBAAgB,EAChB,iBAAiB,EACjB,gBAAgB,EAChB,MAAM,GACT,EAAE,mBAAmB,GAAG,IAAI,CAsgB5B"}
1
+ {"version":3,"file":"useAgentEvents.d.ts","sourceRoot":"","sources":["../../src/hooks/useAgentEvents.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAG/B,OAAO,EAGH,KAAK,aAAa,EAErB,MAAM,aAAa,CAAC;AACrB,OAAO,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AACpF,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,iCAAiC,CAAC;AAEvE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,qCAAqC,CAAC;AACtE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAE3D,UAAU,mBAAmB;IACzB,KAAK,EAAE,eAAe,CAAC;IACvB,WAAW,EAAE,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,cAAc,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;IAC7D,kBAAkB,EAAE,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,cAAc,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;IACpE,KAAK,EAAE,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC,CAAC;IACrD,UAAU,EAAE,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,cAAc,CAAC,YAAY,CAAC,CAAC,CAAC;IAC/D,QAAQ,EAAE,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC,CAAC;IAC3D,WAAW,EAAE,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,cAAc,CAAC,eAAe,GAAG,IAAI,CAAC,CAAC,CAAC;IAC1E,gBAAgB,EAAE,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,cAAc,CAAC,eAAe,EAAE,CAAC,CAAC,CAAC;IAC1E,iBAAiB,EAAE,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,cAAc,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC;IACzE,8CAA8C;IAC9C,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,iFAAiF;IACjF,MAAM,EAAE,UAAU,CAAC;CACtB;AAYD;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,EAC3B,KAAK,EACL,WAAW,EACX,kBAAkB,EAClB,KAAK,EACL,UAAU,EACV,QAAQ,EACR,WAAW,EACX,gBAAgB,EAChB,iBAAiB,EACjB,gBAAgB,EAChB,MAAM,GACT,EAAE,mBAAmB,GAAG,IAAI,CAygB5B"}
@@ -147,7 +147,8 @@ function useAgentEvents({
147
147
  setUi((prev) => ({
148
148
  ...prev,
149
149
  activeOverlay: "none",
150
- chatgptRateLimitStatus: null
150
+ chatgptRateLimitStatus: null,
151
+ insufficientCredits: null
151
152
  }));
152
153
  },
153
154
  { signal }
@@ -188,6 +189,7 @@ function useAgentEvents({
188
189
  ...prev,
189
190
  activeOverlay: "none",
190
191
  chatgptRateLimitStatus: null,
192
+ insufficientCredits: null,
191
193
  historySearch: {
192
194
  isActive: false,
193
195
  query: "",
@@ -209,7 +211,8 @@ function useAgentEvents({
209
211
  setUi((prev) => ({
210
212
  ...prev,
211
213
  activeOverlay: "none",
212
- chatgptRateLimitStatus: null
214
+ chatgptRateLimitStatus: null,
215
+ insufficientCredits: null
213
216
  }));
214
217
  },
215
218
  { signal }
@@ -70,6 +70,7 @@ function useCLIState({
70
70
  backgroundTasksExpanded: false,
71
71
  backgroundTasks: [],
72
72
  chatgptRateLimitStatus: null,
73
+ insufficientCredits: null,
73
74
  planModeActive: false,
74
75
  planModeInitialized: false,
75
76
  commandOutput: null
@@ -1 +1 @@
1
- {"version":3,"file":"useCLIState.d.ts","sourceRoot":"","sources":["../../src/hooks/useCLIState.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"useCLIState.d.ts","sourceRoot":"","sources":["../../src/hooks/useCLIState.ts"],"names":[],"mappings":"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"}
@@ -47,6 +47,7 @@ function useCLIState({
47
47
  backgroundTasksExpanded: false,
48
48
  backgroundTasks: [],
49
49
  chatgptRateLimitStatus: null,
50
+ insufficientCredits: null,
50
51
  planModeActive: false,
51
52
  planModeInitialized: false,
52
53
  commandOutput: null
@@ -19,6 +19,7 @@ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: tru
19
19
  var host_exports = {};
20
20
  __export(host_exports, {
21
21
  applyLayeredEnvironmentLoading: () => applyLayeredEnvironmentLoading,
22
+ buildDextoBillingUrl: () => buildDextoBillingUrl,
22
23
  canUseDextoProvider: () => canUseDextoProvider,
23
24
  captureAnalytics: () => captureAnalytics,
24
25
  ensureDextoApiKeyForAuthToken: () => ensureDextoApiKeyForAuthToken,
@@ -28,6 +29,7 @@ __export(host_exports, {
28
29
  isUsingDextoCredits: () => isUsingDextoCredits,
29
30
  isValidApiKeyFormat: () => isValidApiKeyFormat,
30
31
  loadAuth: () => loadAuth,
32
+ openDextoBillingPage: () => openDextoBillingPage,
31
33
  performDeviceCodeLogin: () => performDeviceCodeLogin,
32
34
  persistOAuthLoginResult: () => persistOAuthLoginResult,
33
35
  registerGracefulShutdown: () => registerGracefulShutdown,
@@ -121,9 +123,22 @@ async function canUseDextoProvider() {
121
123
  }
122
124
  return runtimeServices.canUseDextoProvider();
123
125
  }
126
+ function buildDextoBillingUrl(options) {
127
+ if (!runtimeServices.buildDextoBillingUrl) {
128
+ throw missingHostMethod("buildDextoBillingUrl");
129
+ }
130
+ return runtimeServices.buildDextoBillingUrl(options);
131
+ }
132
+ async function openDextoBillingPage(options) {
133
+ if (!runtimeServices.openDextoBillingPage) {
134
+ throw missingHostMethod("openDextoBillingPage");
135
+ }
136
+ return runtimeServices.openDextoBillingPage(options);
137
+ }
124
138
  // Annotate the CommonJS export names for ESM import in node:
125
139
  0 && (module.exports = {
126
140
  applyLayeredEnvironmentLoading,
141
+ buildDextoBillingUrl,
127
142
  canUseDextoProvider,
128
143
  captureAnalytics,
129
144
  ensureDextoApiKeyForAuthToken,
@@ -133,6 +148,7 @@ async function canUseDextoProvider() {
133
148
  isUsingDextoCredits,
134
149
  isValidApiKeyFormat,
135
150
  loadAuth,
151
+ openDextoBillingPage,
136
152
  performDeviceCodeLogin,
137
153
  persistOAuthLoginResult,
138
154
  registerGracefulShutdown,
@@ -78,6 +78,12 @@ export interface TuiRuntimeServices {
78
78
  }>;
79
79
  isUsingDextoCredits?: () => Promise<boolean>;
80
80
  canUseDextoProvider?: () => Promise<boolean>;
81
+ buildDextoBillingUrl?: (options: {
82
+ creditsUsd: number;
83
+ }) => string;
84
+ openDextoBillingPage?: (options: {
85
+ url?: string | undefined;
86
+ }) => Promise<void>;
81
87
  }
82
88
  export declare function setTuiRuntimeServices(adapter: TuiRuntimeServices): void;
83
89
  export declare function getTuiRuntimeServices(): TuiRuntimeServices;
@@ -117,4 +123,10 @@ export declare function removeDextoApiKeyFromEnv(options?: {
117
123
  }>;
118
124
  export declare function isUsingDextoCredits(): Promise<boolean>;
119
125
  export declare function canUseDextoProvider(): Promise<boolean>;
126
+ export declare function buildDextoBillingUrl(options: {
127
+ creditsUsd: number;
128
+ }): string;
129
+ export declare function openDextoBillingPage(options: {
130
+ url?: string | undefined;
131
+ }): Promise<void>;
120
132
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/host/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/host/index.ts"],"names":[],"mappings":"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"}
@@ -82,8 +82,21 @@ async function canUseDextoProvider() {
82
82
  }
83
83
  return runtimeServices.canUseDextoProvider();
84
84
  }
85
+ function buildDextoBillingUrl(options) {
86
+ if (!runtimeServices.buildDextoBillingUrl) {
87
+ throw missingHostMethod("buildDextoBillingUrl");
88
+ }
89
+ return runtimeServices.buildDextoBillingUrl(options);
90
+ }
91
+ async function openDextoBillingPage(options) {
92
+ if (!runtimeServices.openDextoBillingPage) {
93
+ throw missingHostMethod("openDextoBillingPage");
94
+ }
95
+ return runtimeServices.openDextoBillingPage(options);
96
+ }
85
97
  export {
86
98
  applyLayeredEnvironmentLoading,
99
+ buildDextoBillingUrl,
87
100
  canUseDextoProvider,
88
101
  captureAnalytics,
89
102
  ensureDextoApiKeyForAuthToken,
@@ -93,6 +106,7 @@ export {
93
106
  isUsingDextoCredits,
94
107
  isValidApiKeyFormat,
95
108
  loadAuth,
109
+ openDextoBillingPage,
96
110
  performDeviceCodeLogin,
97
111
  persistOAuthLoginResult,
98
112
  registerGracefulShutdown,