@dexto/core 1.6.16 → 1.6.18

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 (90) hide show
  1. package/dist/agent/DextoAgent.cjs +84 -11
  2. package/dist/agent/DextoAgent.d.ts +12 -1
  3. package/dist/agent/DextoAgent.d.ts.map +1 -1
  4. package/dist/agent/DextoAgent.js +77 -4
  5. package/dist/agent/runtime-config.d.ts +2 -0
  6. package/dist/agent/runtime-config.d.ts.map +1 -1
  7. package/dist/agent/types.d.ts +7 -0
  8. package/dist/agent/types.d.ts.map +1 -1
  9. package/dist/context/manager.cjs +6 -1
  10. package/dist/context/manager.d.ts +3 -0
  11. package/dist/context/manager.d.ts.map +1 -1
  12. package/dist/context/manager.js +6 -1
  13. package/dist/context/types.d.ts +7 -1
  14. package/dist/context/types.d.ts.map +1 -1
  15. package/dist/events/index.d.ts +19 -17
  16. package/dist/events/index.d.ts.map +1 -1
  17. package/dist/llm/executor/stream-processor.cjs +63 -17
  18. package/dist/llm/executor/stream-processor.d.ts +3 -0
  19. package/dist/llm/executor/stream-processor.d.ts.map +1 -1
  20. package/dist/llm/executor/stream-processor.js +63 -17
  21. package/dist/llm/executor/turn-executor.cjs +3 -0
  22. package/dist/llm/executor/turn-executor.d.ts +1 -0
  23. package/dist/llm/executor/turn-executor.d.ts.map +1 -1
  24. package/dist/llm/executor/turn-executor.js +3 -0
  25. package/dist/llm/index.cjs +6 -0
  26. package/dist/llm/index.d.ts +3 -0
  27. package/dist/llm/index.d.ts.map +1 -1
  28. package/dist/llm/index.js +3 -0
  29. package/dist/llm/registry/index.cjs +18 -6
  30. package/dist/llm/registry/index.d.ts +9 -0
  31. package/dist/llm/registry/index.d.ts.map +1 -1
  32. package/dist/llm/registry/index.js +17 -6
  33. package/dist/llm/services/factory.cjs +3 -1
  34. package/dist/llm/services/factory.d.ts +7 -3
  35. package/dist/llm/services/factory.d.ts.map +1 -1
  36. package/dist/llm/services/factory.js +3 -1
  37. package/dist/llm/services/types.d.ts +2 -0
  38. package/dist/llm/services/types.d.ts.map +1 -1
  39. package/dist/llm/services/vercel.cjs +4 -1
  40. package/dist/llm/services/vercel.d.ts +2 -1
  41. package/dist/llm/services/vercel.d.ts.map +1 -1
  42. package/dist/llm/services/vercel.js +4 -1
  43. package/dist/llm/types.cjs +3 -0
  44. package/dist/llm/types.d.ts +2 -0
  45. package/dist/llm/types.d.ts.map +1 -1
  46. package/dist/llm/types.js +2 -0
  47. package/dist/llm/usage-metadata.cjs +50 -0
  48. package/dist/llm/usage-metadata.d.ts +12 -0
  49. package/dist/llm/usage-metadata.d.ts.map +1 -0
  50. package/dist/llm/usage-metadata.js +26 -0
  51. package/dist/llm/usage-scope.cjs +29 -0
  52. package/dist/llm/usage-scope.d.ts +4 -0
  53. package/dist/llm/usage-scope.d.ts.map +1 -0
  54. package/dist/llm/usage-scope.js +6 -0
  55. package/dist/llm/usage-summary.cjs +112 -0
  56. package/dist/llm/usage-summary.d.ts +28 -0
  57. package/dist/llm/usage-summary.d.ts.map +1 -0
  58. package/dist/llm/usage-summary.js +86 -0
  59. package/dist/mcp/bundled-config.cjs +206 -0
  60. package/dist/mcp/bundled-config.d.ts +10 -0
  61. package/dist/mcp/bundled-config.d.ts.map +1 -0
  62. package/dist/mcp/bundled-config.js +173 -0
  63. package/dist/mcp/index.cjs +43 -15
  64. package/dist/mcp/index.d.ts +11 -7
  65. package/dist/mcp/index.d.ts.map +1 -1
  66. package/dist/mcp/index.js +35 -7
  67. package/dist/prompts/providers/config-prompt-provider.cjs +15 -1
  68. package/dist/prompts/providers/config-prompt-provider.d.ts.map +1 -1
  69. package/dist/prompts/providers/config-prompt-provider.js +15 -1
  70. package/dist/session/chat-session.cjs +30 -19
  71. package/dist/session/chat-session.d.ts +0 -1
  72. package/dist/session/chat-session.d.ts.map +1 -1
  73. package/dist/session/chat-session.js +30 -19
  74. package/dist/session/session-manager.cjs +140 -67
  75. package/dist/session/session-manager.d.ts +8 -1
  76. package/dist/session/session-manager.d.ts.map +1 -1
  77. package/dist/session/session-manager.js +142 -67
  78. package/dist/systemPrompt/manager.cjs +7 -1
  79. package/dist/systemPrompt/manager.d.ts.map +1 -1
  80. package/dist/systemPrompt/manager.js +7 -1
  81. package/dist/systemPrompt/schemas.cjs +7 -0
  82. package/dist/systemPrompt/schemas.d.ts +14 -0
  83. package/dist/systemPrompt/schemas.d.ts.map +1 -1
  84. package/dist/systemPrompt/schemas.js +6 -0
  85. package/dist/systemPrompt/types.d.ts +2 -0
  86. package/dist/systemPrompt/types.d.ts.map +1 -1
  87. package/dist/tools/tool-manager.cjs +20 -1
  88. package/dist/tools/tool-manager.d.ts.map +1 -1
  89. package/dist/tools/tool-manager.js +21 -2
  90. package/package.json +2 -1
@@ -823,12 +823,22 @@ function isReasoningCapableModel(model, provider) {
823
823
  return false;
824
824
  }
825
825
  function calculateCost(usage, pricing) {
826
- const inputCost = (usage.inputTokens ?? 0) * pricing.inputPerM / 1e6;
827
- const outputCost = (usage.outputTokens ?? 0) * pricing.outputPerM / 1e6;
828
- const cacheReadCost = (usage.cacheReadTokens ?? 0) * (pricing.cacheReadPerM ?? 0) / 1e6;
829
- const cacheWriteCost = (usage.cacheWriteTokens ?? 0) * (pricing.cacheWritePerM ?? 0) / 1e6;
830
- const reasoningCost = (usage.reasoningTokens ?? 0) * pricing.outputPerM / 1e6;
831
- return inputCost + outputCost + cacheReadCost + cacheWriteCost + reasoningCost;
826
+ return calculateCostBreakdown(usage, pricing).totalUsd;
827
+ }
828
+ function calculateCostBreakdown(usage, pricing) {
829
+ const inputUsd = (usage.inputTokens ?? 0) * pricing.inputPerM / 1e6;
830
+ const outputUsd = (usage.outputTokens ?? 0) * pricing.outputPerM / 1e6;
831
+ const cacheReadUsd = (usage.cacheReadTokens ?? 0) * (pricing.cacheReadPerM ?? 0) / 1e6;
832
+ const cacheWriteUsd = (usage.cacheWriteTokens ?? 0) * (pricing.cacheWritePerM ?? 0) / 1e6;
833
+ const reasoningUsd = (usage.reasoningTokens ?? 0) * (pricing.reasoningPerM ?? pricing.outputPerM) / 1e6;
834
+ return {
835
+ inputUsd,
836
+ outputUsd,
837
+ reasoningUsd,
838
+ cacheReadUsd,
839
+ cacheWriteUsd,
840
+ totalUsd: inputUsd + outputUsd + cacheReadUsd + cacheWriteUsd + reasoningUsd
841
+ };
832
842
  }
833
843
  export {
834
844
  DEFAULT_MAX_INPUT_TOKENS,
@@ -836,6 +846,7 @@ export {
836
846
  MIME_TYPE_TO_FILE_TYPE,
837
847
  acceptsAnyModel,
838
848
  calculateCost,
849
+ calculateCostBreakdown,
839
850
  getAllModelsForProvider,
840
851
  getAllSupportedModels,
841
852
  getAllowedMimeTypes,
@@ -211,7 +211,8 @@ function createVercelModel(llmConfig, context) {
211
211
  throw import_errors.LLMError.unsupportedProvider(provider);
212
212
  }
213
213
  }
214
- function createLLMService(config, toolManager, systemPromptManager, historyProvider, sessionEventBus, sessionId, resourceManager, logger, compactionStrategy) {
214
+ function createLLMService(config, toolManager, systemPromptManager, historyProvider, sessionEventBus, sessionId, resourceManager, logger, options = {}) {
215
+ const { usageScopeId, compactionStrategy } = options;
215
216
  const model = createVercelModel(config, {
216
217
  sessionId,
217
218
  onCodexRateLimitStatus: (snapshot) => {
@@ -232,6 +233,7 @@ function createLLMService(config, toolManager, systemPromptManager, historyProvi
232
233
  sessionId,
233
234
  resourceManager,
234
235
  logger,
236
+ usageScopeId,
235
237
  compactionStrategy
236
238
  );
237
239
  }
@@ -7,6 +7,7 @@ import type { ConversationHistoryProvider } from '../../session/history/types.js
7
7
  import type { SystemPromptManager } from '../../systemPrompt/manager.js';
8
8
  import type { Logger } from '../../logger/v2/types.js';
9
9
  import { type CodexRateLimitSnapshot } from '../providers/codex-app-server.js';
10
+ import type { CompactionStrategy } from '../../context/compaction/types.js';
10
11
  /**
11
12
  * Context for model creation, including session info for usage tracking.
12
13
  */
@@ -18,6 +19,10 @@ export interface DextoProviderContext {
18
19
  /** Optional callback for ChatGPT Login rate-limit status updates from Codex. */
19
20
  onCodexRateLimitStatus?: (snapshot: CodexRateLimitSnapshot) => void;
20
21
  }
22
+ export interface CreateLLMServiceOptions {
23
+ usageScopeId?: string | undefined;
24
+ compactionStrategy?: CompactionStrategy | null | undefined;
25
+ }
21
26
  /**
22
27
  * Create a Vercel AI SDK LanguageModel from config.
23
28
  *
@@ -41,9 +46,8 @@ export declare function createVercelModel(llmConfig: ValidatedLLMConfig, context
41
46
  * @param sessionId Session ID
42
47
  * @param resourceManager Resource manager for blob storage and resource access
43
48
  * @param logger Logger instance for dependency injection
44
- * @param compactionStrategy Optional compaction strategy for context management
45
- * @param compactionConfig Optional compaction configuration for thresholds
49
+ * @param options Session-scoped runtime options
46
50
  * @returns VercelLLMService instance
47
51
  */
48
- export declare function createLLMService(config: ValidatedLLMConfig, toolManager: ToolManager, systemPromptManager: SystemPromptManager, historyProvider: ConversationHistoryProvider, sessionEventBus: SessionEventBus, sessionId: string, resourceManager: import('../../resources/index.js').ResourceManager, logger: Logger, compactionStrategy?: import('../../context/compaction/types.js').CompactionStrategy | null): VercelLLMService;
52
+ export declare function createLLMService(config: ValidatedLLMConfig, toolManager: ToolManager, systemPromptManager: SystemPromptManager, historyProvider: ConversationHistoryProvider, sessionEventBus: SessionEventBus, sessionId: string, resourceManager: import('../../resources/index.js').ResourceManager, logger: Logger, options?: CreateLLMServiceOptions): VercelLLMService;
49
53
  //# sourceMappingURL=factory.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"factory.d.ts","sourceRoot":"","sources":["../../../src/llm/services/factory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAC;AAC1D,OAAO,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AAYnD,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAC/C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,IAAI,CAAC;AACxC,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAGxD,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,gCAAgC,CAAC;AAClF,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,+BAA+B,CAAC;AACzE,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,0BAA0B,CAAC;AAGvD,OAAO,EAEH,KAAK,sBAAsB,EAC9B,MAAM,kCAAkC,CAAC;AAyB1C;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACjC,oCAAoC;IACpC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,0DAA0D;IAC1D,YAAY,CAAC,EAAE,KAAK,GAAG,KAAK,GAAG,KAAK,CAAC;IACrC,gFAAgF;IAChF,sBAAsB,CAAC,EAAE,CAAC,QAAQ,EAAE,sBAAsB,KAAK,IAAI,CAAC;CACvE;AAED;;;;;;;;;GASG;AACH,wBAAgB,iBAAiB,CAC7B,SAAS,EAAE,kBAAkB,EAC7B,OAAO,CAAC,EAAE,oBAAoB,GAC/B,aAAa,CAwOf;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,gBAAgB,CAC5B,MAAM,EAAE,kBAAkB,EAC1B,WAAW,EAAE,WAAW,EACxB,mBAAmB,EAAE,mBAAmB,EACxC,eAAe,EAAE,2BAA2B,EAC5C,eAAe,EAAE,eAAe,EAChC,SAAS,EAAE,MAAM,EACjB,eAAe,EAAE,OAAO,0BAA0B,EAAE,eAAe,EACnE,MAAM,EAAE,MAAM,EACd,kBAAkB,CAAC,EAAE,OAAO,mCAAmC,EAAE,kBAAkB,GAAG,IAAI,GAC3F,gBAAgB,CAwBlB"}
1
+ {"version":3,"file":"factory.d.ts","sourceRoot":"","sources":["../../../src/llm/services/factory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAC;AAC1D,OAAO,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AAYnD,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAC/C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,IAAI,CAAC;AACxC,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAGxD,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,gCAAgC,CAAC;AAClF,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,+BAA+B,CAAC;AACzE,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,0BAA0B,CAAC;AAGvD,OAAO,EAEH,KAAK,sBAAsB,EAC9B,MAAM,kCAAkC,CAAC;AAO1C,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,mCAAmC,CAAC;AAmB5E;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACjC,oCAAoC;IACpC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,0DAA0D;IAC1D,YAAY,CAAC,EAAE,KAAK,GAAG,KAAK,GAAG,KAAK,CAAC;IACrC,gFAAgF;IAChF,sBAAsB,CAAC,EAAE,CAAC,QAAQ,EAAE,sBAAsB,KAAK,IAAI,CAAC;CACvE;AAED,MAAM,WAAW,uBAAuB;IACpC,YAAY,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAClC,kBAAkB,CAAC,EAAE,kBAAkB,GAAG,IAAI,GAAG,SAAS,CAAC;CAC9D;AAED;;;;;;;;;GASG;AACH,wBAAgB,iBAAiB,CAC7B,SAAS,EAAE,kBAAkB,EAC7B,OAAO,CAAC,EAAE,oBAAoB,GAC/B,aAAa,CAwOf;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,gBAAgB,CAC5B,MAAM,EAAE,kBAAkB,EAC1B,WAAW,EAAE,WAAW,EACxB,mBAAmB,EAAE,mBAAmB,EACxC,eAAe,EAAE,2BAA2B,EAC5C,eAAe,EAAE,eAAe,EAChC,SAAS,EAAE,MAAM,EACjB,eAAe,EAAE,OAAO,0BAA0B,EAAE,eAAe,EACnE,MAAM,EAAE,MAAM,EACd,OAAO,GAAE,uBAA4B,GACtC,gBAAgB,CA2BlB"}
@@ -193,7 +193,8 @@ function createVercelModel(llmConfig, context) {
193
193
  throw LLMError.unsupportedProvider(provider);
194
194
  }
195
195
  }
196
- function createLLMService(config, toolManager, systemPromptManager, historyProvider, sessionEventBus, sessionId, resourceManager, logger, compactionStrategy) {
196
+ function createLLMService(config, toolManager, systemPromptManager, historyProvider, sessionEventBus, sessionId, resourceManager, logger, options = {}) {
197
+ const { usageScopeId, compactionStrategy } = options;
197
198
  const model = createVercelModel(config, {
198
199
  sessionId,
199
200
  onCodexRateLimitStatus: (snapshot) => {
@@ -214,6 +215,7 @@ function createLLMService(config, toolManager, systemPromptManager, historyProvi
214
215
  sessionId,
215
216
  resourceManager,
216
217
  logger,
218
+ usageScopeId,
217
219
  compactionStrategy
218
220
  );
219
221
  }
@@ -17,5 +17,7 @@ export interface LLMTokenUsage {
17
17
  outputTokens: number;
18
18
  reasoningTokens?: number;
19
19
  totalTokens: number;
20
+ cacheReadTokens?: number;
21
+ cacheWriteTokens?: number;
20
22
  }
21
23
  //# sourceMappingURL=types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/llm/services/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,IAAI,CAAC;AACnC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE/C;;GAEG;AACH,MAAM,MAAM,gBAAgB,GAAG;IAC3B,QAAQ,EAAE,WAAW,CAAC;IACtB,KAAK,EAAE,aAAa,CAAC;IACrB,wBAAwB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACzC,mBAAmB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CACvC,CAAC;AAEF;;GAEG;AACH,MAAM,WAAW,aAAa;IAC1B,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,WAAW,EAAE,MAAM,CAAC;CACvB"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/llm/services/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,IAAI,CAAC;AACnC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE/C;;GAEG;AACH,MAAM,MAAM,gBAAgB,GAAG;IAC3B,QAAQ,EAAE,WAAW,CAAC;IACtB,KAAK,EAAE,aAAa,CAAC;IACrB,wBAAwB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACzC,mBAAmB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CACvC,CAAC;AAEF;;GAEG;AACH,MAAM,WAAW,aAAa;IAC1B,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,WAAW,EAAE,MAAM,CAAC;IACpB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC7B"}
@@ -93,13 +93,14 @@ class VercelLLMService {
93
93
  messageQueue;
94
94
  compactionStrategy;
95
95
  modelLimits;
96
+ usageScopeId;
96
97
  /**
97
98
  * Helper to extract model ID from LanguageModel union type (string | LanguageModelV2)
98
99
  */
99
100
  getModelId() {
100
101
  return typeof this.model === "string" ? this.model : this.model.modelId;
101
102
  }
102
- constructor(toolManager, model, systemPromptManager, historyProvider, sessionEventBus, config, sessionId, resourceManager, logger, compactionStrategy) {
103
+ constructor(toolManager, model, systemPromptManager, historyProvider, sessionEventBus, config, sessionId, resourceManager, logger, usageScopeId, compactionStrategy) {
103
104
  this.logger = logger.createChild(import_types2.DextoLogComponent.LLM);
104
105
  this.model = model;
105
106
  this.config = config;
@@ -107,6 +108,7 @@ class VercelLLMService {
107
108
  this.sessionEventBus = sessionEventBus;
108
109
  this.sessionId = sessionId;
109
110
  this.resourceManager = resourceManager;
111
+ this.usageScopeId = usageScopeId;
110
112
  this.compactionStrategy = compactionStrategy ?? null;
111
113
  this.messageQueue = new import_message_queue.MessageQueueService(this.sessionEventBus, this.logger);
112
114
  const formatter = new import_vercel.VercelMessageFormatter(this.logger);
@@ -150,6 +152,7 @@ class VercelLLMService {
150
152
  maxOutputTokens: this.config.maxOutputTokens,
151
153
  temperature: this.config.temperature,
152
154
  baseURL: this.config.baseURL,
155
+ usageScopeId: this.usageScopeId,
153
156
  // Provider-specific options
154
157
  reasoning: this.config.reasoning
155
158
  },
@@ -37,11 +37,12 @@ export declare class VercelLLMService {
37
37
  private messageQueue;
38
38
  private compactionStrategy;
39
39
  private modelLimits?;
40
+ private readonly usageScopeId;
40
41
  /**
41
42
  * Helper to extract model ID from LanguageModel union type (string | LanguageModelV2)
42
43
  */
43
44
  private getModelId;
44
- constructor(toolManager: ToolManager, model: LanguageModel, systemPromptManager: SystemPromptManager, historyProvider: ConversationHistoryProvider, sessionEventBus: SessionEventBus, config: ValidatedLLMConfig, sessionId: string, resourceManager: ResourceManager, logger: Logger, compactionStrategy?: import('../../context/compaction/types.js').CompactionStrategy | null);
45
+ constructor(toolManager: ToolManager, model: LanguageModel, systemPromptManager: SystemPromptManager, historyProvider: ConversationHistoryProvider, sessionEventBus: SessionEventBus, config: ValidatedLLMConfig, sessionId: string, resourceManager: ResourceManager, logger: Logger, usageScopeId?: string, compactionStrategy?: import('../../context/compaction/types.js').CompactionStrategy | null);
45
46
  getAllTools(): Promise<ToolSet>;
46
47
  getEnabledTools(): Promise<ToolSet>;
47
48
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"vercel.d.ts","sourceRoot":"","sources":["../../../src/llm/services/vercel.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAqB,MAAM,IAAI,CAAC;AACtD,OAAO,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAC;AAC1D,OAAO,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAC9C,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,0BAA0B,CAAC;AAEvD,OAAO,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAC/C,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAI1D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAC7D,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,gCAAgC,CAAC;AAClF,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,+BAA+B,CAAC;AAEzE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AAIxD,OAAO,EAAE,mBAAmB,EAAE,MAAM,gCAAgC,CAAC;AACrE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAGhE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAEzD;;;;;;;;;;;;;GAaG;AACH,qBAIa,gBAAgB;IACzB,OAAO,CAAC,KAAK,CAAgB;IAC7B,OAAO,CAAC,MAAM,CAAqB;IACnC,OAAO,CAAC,WAAW,CAAc;IACjC,OAAO,CAAC,cAAc,CAA+B;IACrD,OAAO,CAAC,eAAe,CAAkB;IACzC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;IACnC,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,eAAe,CAAkB;IACzC,OAAO,CAAC,YAAY,CAAsB;IAC1C,OAAO,CAAC,kBAAkB,CAEf;IACX,OAAO,CAAC,WAAW,CAAC,CAAc;IAElC;;OAEG;IACH,OAAO,CAAC,UAAU;gBAKd,WAAW,EAAE,WAAW,EACxB,KAAK,EAAE,aAAa,EACpB,mBAAmB,EAAE,mBAAmB,EACxC,eAAe,EAAE,2BAA2B,EAC5C,eAAe,EAAE,eAAe,EAChC,MAAM,EAAE,kBAAkB,EAC1B,SAAS,EAAE,MAAM,EACjB,eAAe,EAAE,eAAe,EAChC,MAAM,EAAE,MAAM,EACd,kBAAkB,CAAC,EAAE,OAAO,mCAAmC,EAAE,kBAAkB,GAAG,IAAI;IAuC9F,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC;IAI/B,eAAe,IAAI,OAAO,CAAC,OAAO,CAAC;IAMnC;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAyB1B;;OAEG;IACH,OAAc,YAAY,EAAE;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;IAE7C;;;;;;;OAOG;IACG,MAAM,CACR,OAAO,EAAE,YAAY,EACrB,OAAO,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,WAAW,CAAA;KAAE,GACnC,OAAO,CAAC;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;IA0D5B;;;OAGG;IACH,SAAS,IAAI,gBAAgB;IA+B7B;;OAEG;IACH,iBAAiB,IAAI,cAAc,CAAC,OAAO,CAAC;IAI5C;;OAEG;IACH,eAAe,IAAI,mBAAmB;IAItC;;OAEG;IACH,qBAAqB,IAAI,OAAO,mCAAmC,EAAE,kBAAkB,GAAG,IAAI;IAI9F,gBAAgB,IAAI,aAAa;CAGpC"}
1
+ {"version":3,"file":"vercel.d.ts","sourceRoot":"","sources":["../../../src/llm/services/vercel.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAqB,MAAM,IAAI,CAAC;AACtD,OAAO,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAC;AAC1D,OAAO,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAC9C,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,0BAA0B,CAAC;AAEvD,OAAO,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAC/C,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAI1D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAC7D,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,gCAAgC,CAAC;AAClF,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,+BAA+B,CAAC;AAEzE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AAIxD,OAAO,EAAE,mBAAmB,EAAE,MAAM,gCAAgC,CAAC;AACrE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAGhE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAEzD;;;;;;;;;;;;;GAaG;AACH,qBAIa,gBAAgB;IACzB,OAAO,CAAC,KAAK,CAAgB;IAC7B,OAAO,CAAC,MAAM,CAAqB;IACnC,OAAO,CAAC,WAAW,CAAc;IACjC,OAAO,CAAC,cAAc,CAA+B;IACrD,OAAO,CAAC,eAAe,CAAkB;IACzC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;IACnC,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,eAAe,CAAkB;IACzC,OAAO,CAAC,YAAY,CAAsB;IAC1C,OAAO,CAAC,kBAAkB,CAEf;IACX,OAAO,CAAC,WAAW,CAAC,CAAc;IAClC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAqB;IAElD;;OAEG;IACH,OAAO,CAAC,UAAU;gBAKd,WAAW,EAAE,WAAW,EACxB,KAAK,EAAE,aAAa,EACpB,mBAAmB,EAAE,mBAAmB,EACxC,eAAe,EAAE,2BAA2B,EAC5C,eAAe,EAAE,eAAe,EAChC,MAAM,EAAE,kBAAkB,EAC1B,SAAS,EAAE,MAAM,EACjB,eAAe,EAAE,eAAe,EAChC,MAAM,EAAE,MAAM,EACd,YAAY,CAAC,EAAE,MAAM,EACrB,kBAAkB,CAAC,EAAE,OAAO,mCAAmC,EAAE,kBAAkB,GAAG,IAAI;IAwC9F,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC;IAI/B,eAAe,IAAI,OAAO,CAAC,OAAO,CAAC;IAMnC;;OAEG;IACH,OAAO,CAAC,kBAAkB;IA0B1B;;OAEG;IACH,OAAc,YAAY,EAAE;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;IAE7C;;;;;;;OAOG;IACG,MAAM,CACR,OAAO,EAAE,YAAY,EACrB,OAAO,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,WAAW,CAAA;KAAE,GACnC,OAAO,CAAC;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;IA0D5B;;;OAGG;IACH,SAAS,IAAI,gBAAgB;IA+B7B;;OAEG;IACH,iBAAiB,IAAI,cAAc,CAAC,OAAO,CAAC;IAI5C;;OAEG;IACH,eAAe,IAAI,mBAAmB;IAItC;;OAEG;IACH,qBAAqB,IAAI,OAAO,mCAAmC,EAAE,kBAAkB,GAAG,IAAI;IAI9F,gBAAgB,IAAI,aAAa;CAGpC"}
@@ -30,13 +30,14 @@ class VercelLLMService {
30
30
  messageQueue;
31
31
  compactionStrategy;
32
32
  modelLimits;
33
+ usageScopeId;
33
34
  /**
34
35
  * Helper to extract model ID from LanguageModel union type (string | LanguageModelV2)
35
36
  */
36
37
  getModelId() {
37
38
  return typeof this.model === "string" ? this.model : this.model.modelId;
38
39
  }
39
- constructor(toolManager, model, systemPromptManager, historyProvider, sessionEventBus, config, sessionId, resourceManager, logger, compactionStrategy) {
40
+ constructor(toolManager, model, systemPromptManager, historyProvider, sessionEventBus, config, sessionId, resourceManager, logger, usageScopeId, compactionStrategy) {
40
41
  this.logger = logger.createChild(DextoLogComponent.LLM);
41
42
  this.model = model;
42
43
  this.config = config;
@@ -44,6 +45,7 @@ class VercelLLMService {
44
45
  this.sessionEventBus = sessionEventBus;
45
46
  this.sessionId = sessionId;
46
47
  this.resourceManager = resourceManager;
48
+ this.usageScopeId = usageScopeId;
47
49
  this.compactionStrategy = compactionStrategy ?? null;
48
50
  this.messageQueue = new MessageQueueService(this.sessionEventBus, this.logger);
49
51
  const formatter = new VercelMessageFormatter(this.logger);
@@ -87,6 +89,7 @@ class VercelLLMService {
87
89
  maxOutputTokens: this.config.maxOutputTokens,
88
90
  temperature: this.config.temperature,
89
91
  baseURL: this.config.baseURL,
92
+ usageScopeId: this.usageScopeId,
90
93
  // Provider-specific options
91
94
  reasoning: this.config.reasoning
92
95
  },
@@ -18,6 +18,7 @@ var __copyProps = (to, from, except, desc) => {
18
18
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
19
  var types_exports = {};
20
20
  __export(types_exports, {
21
+ LLM_PRICING_STATUSES: () => LLM_PRICING_STATUSES,
21
22
  LLM_PROVIDERS: () => LLM_PROVIDERS,
22
23
  SUPPORTED_FILE_TYPES: () => SUPPORTED_FILE_TYPES
23
24
  });
@@ -44,9 +45,11 @@ const LLM_PROVIDERS = [
44
45
  "dexto-nova"
45
46
  // Dexto gateway - routes through api.dexto.ai/v1 with billing
46
47
  ];
48
+ const LLM_PRICING_STATUSES = ["estimated", "unpriced"];
47
49
  const SUPPORTED_FILE_TYPES = ["pdf", "image", "audio"];
48
50
  // Annotate the CommonJS export names for ESM import in node:
49
51
  0 && (module.exports = {
52
+ LLM_PRICING_STATUSES,
50
53
  LLM_PROVIDERS,
51
54
  SUPPORTED_FILE_TYPES
52
55
  });
@@ -1,5 +1,7 @@
1
1
  export declare const LLM_PROVIDERS: readonly ["openai", "openai-compatible", "anthropic", "google", "groq", "xai", "cohere", "minimax", "glm", "openrouter", "litellm", "glama", "vertex", "bedrock", "local", "ollama", "dexto-nova"];
2
2
  export type LLMProvider = (typeof LLM_PROVIDERS)[number];
3
+ export declare const LLM_PRICING_STATUSES: readonly ["estimated", "unpriced"];
4
+ export type LLMPricingStatus = (typeof LLM_PRICING_STATUSES)[number];
3
5
  export declare const SUPPORTED_FILE_TYPES: readonly ["pdf", "image", "audio"];
4
6
  export type SupportedFileType = (typeof SUPPORTED_FILE_TYPES)[number];
5
7
  export type ReasoningVariant = string;
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/llm/types.ts"],"names":[],"mappings":"AACA,eAAO,MAAM,aAAa,oMAkBhB,CAAC;AACX,MAAM,MAAM,WAAW,GAAG,CAAC,OAAO,aAAa,CAAC,CAAC,MAAM,CAAC,CAAC;AAEzD,eAAO,MAAM,oBAAoB,oCAAqC,CAAC;AACvE,MAAM,MAAM,iBAAiB,GAAG,CAAC,OAAO,oBAAoB,CAAC,CAAC,MAAM,CAAC,CAAC;AAItE,MAAM,MAAM,gBAAgB,GAAG,MAAM,CAAC;AAEtC,MAAM,WAAW,kBAAkB;IAC/B,OAAO,EAAE,gBAAgB,CAAC;IAC1B;;;OAGG;IACH,YAAY,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CACrC;AAED;;;GAGG;AAEH,MAAM,WAAW,UAAU;IACvB,mDAAmD;IACnD,QAAQ,EAAE,WAAW,CAAC;IAEtB,kEAAkE;IAClE,KAAK,EAAE,MAAM,CAAC;CACjB;AAGD,MAAM,WAAW,gBAAgB;IAC7B,QAAQ,CAAC,EAAE,WAAW,CAAC;IACvB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,eAAe,CAAC,EAAE,MAAM,CAAC;CAC5B;AAED,MAAM,WAAW,UAAU;IACvB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC7B"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/llm/types.ts"],"names":[],"mappings":"AACA,eAAO,MAAM,aAAa,oMAkBhB,CAAC;AACX,MAAM,MAAM,WAAW,GAAG,CAAC,OAAO,aAAa,CAAC,CAAC,MAAM,CAAC,CAAC;AAEzD,eAAO,MAAM,oBAAoB,oCAAqC,CAAC;AACvE,MAAM,MAAM,gBAAgB,GAAG,CAAC,OAAO,oBAAoB,CAAC,CAAC,MAAM,CAAC,CAAC;AAErE,eAAO,MAAM,oBAAoB,oCAAqC,CAAC;AACvE,MAAM,MAAM,iBAAiB,GAAG,CAAC,OAAO,oBAAoB,CAAC,CAAC,MAAM,CAAC,CAAC;AAItE,MAAM,MAAM,gBAAgB,GAAG,MAAM,CAAC;AAEtC,MAAM,WAAW,kBAAkB;IAC/B,OAAO,EAAE,gBAAgB,CAAC;IAC1B;;;OAGG;IACH,YAAY,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CACrC;AAED;;;GAGG;AAEH,MAAM,WAAW,UAAU;IACvB,mDAAmD;IACnD,QAAQ,EAAE,WAAW,CAAC;IAEtB,kEAAkE;IAClE,KAAK,EAAE,MAAM,CAAC;CACjB;AAGD,MAAM,WAAW,gBAAgB;IAC7B,QAAQ,CAAC,EAAE,WAAW,CAAC;IACvB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,eAAe,CAAC,EAAE,MAAM,CAAC;CAC5B;AAED,MAAM,WAAW,UAAU;IACvB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC7B"}
package/dist/llm/types.js CHANGED
@@ -21,8 +21,10 @@ const LLM_PROVIDERS = [
21
21
  "dexto-nova"
22
22
  // Dexto gateway - routes through api.dexto.ai/v1 with billing
23
23
  ];
24
+ const LLM_PRICING_STATUSES = ["estimated", "unpriced"];
24
25
  const SUPPORTED_FILE_TYPES = ["pdf", "image", "audio"];
25
26
  export {
27
+ LLM_PRICING_STATUSES,
26
28
  LLM_PROVIDERS,
27
29
  SUPPORTED_FILE_TYPES
28
30
  };
@@ -0,0 +1,50 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+ var usage_metadata_exports = {};
20
+ __export(usage_metadata_exports, {
21
+ getUsagePricingMetadata: () => getUsagePricingMetadata,
22
+ hasMeaningfulTokenUsage: () => hasMeaningfulTokenUsage
23
+ });
24
+ module.exports = __toCommonJS(usage_metadata_exports);
25
+ var import_registry = require("./registry/index.js");
26
+ function hasMeaningfulTokenUsage(tokenUsage) {
27
+ if (!tokenUsage) {
28
+ return false;
29
+ }
30
+ return (tokenUsage.inputTokens ?? 0) > 0 || (tokenUsage.outputTokens ?? 0) > 0 || (tokenUsage.reasoningTokens ?? 0) > 0 || (tokenUsage.cacheReadTokens ?? 0) > 0 || (tokenUsage.cacheWriteTokens ?? 0) > 0 || (tokenUsage.totalTokens ?? 0) > 0;
31
+ }
32
+ function getUsagePricingMetadata(config) {
33
+ const { provider, model, tokenUsage } = config;
34
+ if (!provider || !model || !tokenUsage || !hasMeaningfulTokenUsage(tokenUsage)) {
35
+ return {};
36
+ }
37
+ const pricing = (0, import_registry.getModelPricing)(provider, model);
38
+ if (!pricing) {
39
+ return { pricingStatus: "unpriced" };
40
+ }
41
+ return {
42
+ estimatedCost: (0, import_registry.calculateCost)(tokenUsage, pricing),
43
+ pricingStatus: "estimated"
44
+ };
45
+ }
46
+ // Annotate the CommonJS export names for ESM import in node:
47
+ 0 && (module.exports = {
48
+ getUsagePricingMetadata,
49
+ hasMeaningfulTokenUsage
50
+ });
@@ -0,0 +1,12 @@
1
+ import type { LLMProvider, LLMPricingStatus, TokenUsage } from './types.js';
2
+ export interface LLMUsagePricingMetadata {
3
+ estimatedCost?: number;
4
+ pricingStatus?: LLMPricingStatus;
5
+ }
6
+ export declare function hasMeaningfulTokenUsage(tokenUsage: TokenUsage | undefined): boolean;
7
+ export declare function getUsagePricingMetadata(config: {
8
+ provider?: LLMProvider;
9
+ model?: string;
10
+ tokenUsage?: TokenUsage;
11
+ }): LLMUsagePricingMetadata;
12
+ //# sourceMappingURL=usage-metadata.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"usage-metadata.d.ts","sourceRoot":"","sources":["../../src/llm/usage-metadata.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,gBAAgB,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAE5E,MAAM,WAAW,uBAAuB;IACpC,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,aAAa,CAAC,EAAE,gBAAgB,CAAC;CACpC;AAED,wBAAgB,uBAAuB,CAAC,UAAU,EAAE,UAAU,GAAG,SAAS,GAAG,OAAO,CAanF;AAED,wBAAgB,uBAAuB,CAAC,MAAM,EAAE;IAC5C,QAAQ,CAAC,EAAE,WAAW,CAAC;IACvB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,UAAU,CAAC;CAC3B,GAAG,uBAAuB,CAmB1B"}
@@ -0,0 +1,26 @@
1
+ import "../chunk-PTJYTZNU.js";
2
+ import { calculateCost, getModelPricing } from "./registry/index.js";
3
+ function hasMeaningfulTokenUsage(tokenUsage) {
4
+ if (!tokenUsage) {
5
+ return false;
6
+ }
7
+ return (tokenUsage.inputTokens ?? 0) > 0 || (tokenUsage.outputTokens ?? 0) > 0 || (tokenUsage.reasoningTokens ?? 0) > 0 || (tokenUsage.cacheReadTokens ?? 0) > 0 || (tokenUsage.cacheWriteTokens ?? 0) > 0 || (tokenUsage.totalTokens ?? 0) > 0;
8
+ }
9
+ function getUsagePricingMetadata(config) {
10
+ const { provider, model, tokenUsage } = config;
11
+ if (!provider || !model || !tokenUsage || !hasMeaningfulTokenUsage(tokenUsage)) {
12
+ return {};
13
+ }
14
+ const pricing = getModelPricing(provider, model);
15
+ if (!pricing) {
16
+ return { pricingStatus: "unpriced" };
17
+ }
18
+ return {
19
+ estimatedCost: calculateCost(tokenUsage, pricing),
20
+ pricingStatus: "estimated"
21
+ };
22
+ }
23
+ export {
24
+ getUsagePricingMetadata,
25
+ hasMeaningfulTokenUsage
26
+ };
@@ -0,0 +1,29 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+ var usage_scope_exports = {};
20
+ __export(usage_scope_exports, {
21
+ UsageScopeIdSchema: () => UsageScopeIdSchema
22
+ });
23
+ module.exports = __toCommonJS(usage_scope_exports);
24
+ var import_zod = require("zod");
25
+ const UsageScopeIdSchema = import_zod.z.string().trim().min(1);
26
+ // Annotate the CommonJS export names for ESM import in node:
27
+ 0 && (module.exports = {
28
+ UsageScopeIdSchema
29
+ });
@@ -0,0 +1,4 @@
1
+ import { z } from 'zod';
2
+ export declare const UsageScopeIdSchema: z.ZodString;
3
+ export type UsageScopeId = z.output<typeof UsageScopeIdSchema>;
4
+ //# sourceMappingURL=usage-scope.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"usage-scope.d.ts","sourceRoot":"","sources":["../../src/llm/usage-scope.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,eAAO,MAAM,kBAAkB,aAA2B,CAAC;AAE3D,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,kBAAkB,CAAC,CAAC"}
@@ -0,0 +1,6 @@
1
+ import "../chunk-PTJYTZNU.js";
2
+ import { z } from "zod";
3
+ const UsageScopeIdSchema = z.string().trim().min(1);
4
+ export {
5
+ UsageScopeIdSchema
6
+ };
@@ -0,0 +1,112 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+ var usage_summary_exports = {};
20
+ __export(usage_summary_exports, {
21
+ accumulateTokenUsage: () => accumulateTokenUsage,
22
+ createEmptyAssistantUsageSummary: () => createEmptyAssistantUsageSummary,
23
+ createEmptyCumulativeTokenUsage: () => createEmptyCumulativeTokenUsage,
24
+ summarizeAssistantUsage: () => summarizeAssistantUsage
25
+ });
26
+ module.exports = __toCommonJS(usage_summary_exports);
27
+ var import_types = require("../context/types.js");
28
+ function createEmptyCumulativeTokenUsage() {
29
+ return {
30
+ inputTokens: 0,
31
+ outputTokens: 0,
32
+ reasoningTokens: 0,
33
+ cacheReadTokens: 0,
34
+ cacheWriteTokens: 0,
35
+ totalTokens: 0
36
+ };
37
+ }
38
+ function createEmptyAssistantUsageSummary() {
39
+ return {
40
+ tokenUsage: createEmptyCumulativeTokenUsage(),
41
+ estimatedCost: 0,
42
+ hasUnpricedResponses: false
43
+ };
44
+ }
45
+ function hasUnpricedTokenUsage(usage) {
46
+ if (!usage) {
47
+ return false;
48
+ }
49
+ return (usage.inputTokens ?? 0) > 0 || (usage.outputTokens ?? 0) > 0 || (usage.reasoningTokens ?? 0) > 0 || (usage.cacheReadTokens ?? 0) > 0 || (usage.cacheWriteTokens ?? 0) > 0 || (usage.totalTokens ?? 0) > 0;
50
+ }
51
+ function accumulateTokenUsage(target, usage) {
52
+ if (!usage) {
53
+ return;
54
+ }
55
+ target.inputTokens += usage.inputTokens ?? 0;
56
+ target.outputTokens += usage.outputTokens ?? 0;
57
+ target.reasoningTokens += usage.reasoningTokens ?? 0;
58
+ target.cacheReadTokens += usage.cacheReadTokens ?? 0;
59
+ target.cacheWriteTokens += usage.cacheWriteTokens ?? 0;
60
+ target.totalTokens += usage.totalTokens ?? 0;
61
+ }
62
+ function summarizeAssistantUsage(messages, usageScopeId) {
63
+ const summary = createEmptyAssistantUsageSummary();
64
+ const modelStats = /* @__PURE__ */ new Map();
65
+ for (const message of messages) {
66
+ if (!(0, import_types.isAssistantMessage)(message)) {
67
+ continue;
68
+ }
69
+ if (usageScopeId && message.usageScopeId !== usageScopeId) {
70
+ continue;
71
+ }
72
+ accumulateTokenUsage(summary.tokenUsage, message.tokenUsage);
73
+ if (message.estimatedCost !== void 0) {
74
+ summary.estimatedCost += message.estimatedCost;
75
+ }
76
+ if (message.pricingStatus === "unpriced" || hasUnpricedTokenUsage(message.tokenUsage) && message.estimatedCost === void 0 && message.pricingStatus === void 0) {
77
+ summary.hasUnpricedResponses = true;
78
+ }
79
+ if (!message.provider || !message.model) {
80
+ continue;
81
+ }
82
+ const modelKey = `${message.provider}:${message.model}`;
83
+ const existingModelStat = modelStats.get(modelKey);
84
+ const modelStat = existingModelStat ?? (() => {
85
+ const newModelStat = {
86
+ provider: message.provider,
87
+ model: message.model,
88
+ messageCount: 0,
89
+ tokenUsage: createEmptyCumulativeTokenUsage(),
90
+ estimatedCost: 0
91
+ };
92
+ modelStats.set(modelKey, newModelStat);
93
+ return newModelStat;
94
+ })();
95
+ modelStat.messageCount += 1;
96
+ accumulateTokenUsage(modelStat.tokenUsage, message.tokenUsage);
97
+ if (message.estimatedCost !== void 0) {
98
+ modelStat.estimatedCost += message.estimatedCost;
99
+ }
100
+ }
101
+ if (modelStats.size > 0) {
102
+ summary.modelStats = [...modelStats.values()];
103
+ }
104
+ return summary;
105
+ }
106
+ // Annotate the CommonJS export names for ESM import in node:
107
+ 0 && (module.exports = {
108
+ accumulateTokenUsage,
109
+ createEmptyAssistantUsageSummary,
110
+ createEmptyCumulativeTokenUsage,
111
+ summarizeAssistantUsage
112
+ });
@@ -0,0 +1,28 @@
1
+ import { type InternalMessage } from '../context/types.js';
2
+ import type { TokenUsage } from './types.js';
3
+ export interface CumulativeTokenUsage {
4
+ inputTokens: number;
5
+ outputTokens: number;
6
+ reasoningTokens: number;
7
+ cacheReadTokens: number;
8
+ cacheWriteTokens: number;
9
+ totalTokens: number;
10
+ }
11
+ export interface AssistantUsageSummary {
12
+ tokenUsage: CumulativeTokenUsage;
13
+ estimatedCost: number;
14
+ hasUnpricedResponses: boolean;
15
+ modelStats?: AssistantUsageModelStatistics[];
16
+ }
17
+ export interface AssistantUsageModelStatistics {
18
+ provider: string;
19
+ model: string;
20
+ messageCount: number;
21
+ tokenUsage: CumulativeTokenUsage;
22
+ estimatedCost: number;
23
+ }
24
+ export declare function createEmptyCumulativeTokenUsage(): CumulativeTokenUsage;
25
+ export declare function createEmptyAssistantUsageSummary(): AssistantUsageSummary;
26
+ export declare function accumulateTokenUsage(target: CumulativeTokenUsage, usage: TokenUsage | undefined): void;
27
+ export declare function summarizeAssistantUsage(messages: readonly InternalMessage[], usageScopeId?: string): AssistantUsageSummary;
28
+ //# sourceMappingURL=usage-summary.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"usage-summary.d.ts","sourceRoot":"","sources":["../../src/llm/usage-summary.ts"],"names":[],"mappings":"AAAA,OAAO,EAAsB,KAAK,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAC/E,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAE7C,MAAM,WAAW,oBAAoB;IACjC,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,eAAe,EAAE,MAAM,CAAC;IACxB,eAAe,EAAE,MAAM,CAAC;IACxB,gBAAgB,EAAE,MAAM,CAAC;IACzB,WAAW,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,qBAAqB;IAClC,UAAU,EAAE,oBAAoB,CAAC;IACjC,aAAa,EAAE,MAAM,CAAC;IACtB,oBAAoB,EAAE,OAAO,CAAC;IAC9B,UAAU,CAAC,EAAE,6BAA6B,EAAE,CAAC;CAChD;AAED,MAAM,WAAW,6BAA6B;IAC1C,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,oBAAoB,CAAC;IACjC,aAAa,EAAE,MAAM,CAAC;CACzB;AAED,wBAAgB,+BAA+B,IAAI,oBAAoB,CAStE;AAED,wBAAgB,gCAAgC,IAAI,qBAAqB,CAMxE;AAiBD,wBAAgB,oBAAoB,CAChC,MAAM,EAAE,oBAAoB,EAC5B,KAAK,EAAE,UAAU,GAAG,SAAS,GAC9B,IAAI,CAYN;AAED,wBAAgB,uBAAuB,CACnC,QAAQ,EAAE,SAAS,eAAe,EAAE,EACpC,YAAY,CAAC,EAAE,MAAM,GACtB,qBAAqB,CA4DvB"}
@@ -0,0 +1,86 @@
1
+ import "../chunk-PTJYTZNU.js";
2
+ import { isAssistantMessage } from "../context/types.js";
3
+ function createEmptyCumulativeTokenUsage() {
4
+ return {
5
+ inputTokens: 0,
6
+ outputTokens: 0,
7
+ reasoningTokens: 0,
8
+ cacheReadTokens: 0,
9
+ cacheWriteTokens: 0,
10
+ totalTokens: 0
11
+ };
12
+ }
13
+ function createEmptyAssistantUsageSummary() {
14
+ return {
15
+ tokenUsage: createEmptyCumulativeTokenUsage(),
16
+ estimatedCost: 0,
17
+ hasUnpricedResponses: false
18
+ };
19
+ }
20
+ function hasUnpricedTokenUsage(usage) {
21
+ if (!usage) {
22
+ return false;
23
+ }
24
+ return (usage.inputTokens ?? 0) > 0 || (usage.outputTokens ?? 0) > 0 || (usage.reasoningTokens ?? 0) > 0 || (usage.cacheReadTokens ?? 0) > 0 || (usage.cacheWriteTokens ?? 0) > 0 || (usage.totalTokens ?? 0) > 0;
25
+ }
26
+ function accumulateTokenUsage(target, usage) {
27
+ if (!usage) {
28
+ return;
29
+ }
30
+ target.inputTokens += usage.inputTokens ?? 0;
31
+ target.outputTokens += usage.outputTokens ?? 0;
32
+ target.reasoningTokens += usage.reasoningTokens ?? 0;
33
+ target.cacheReadTokens += usage.cacheReadTokens ?? 0;
34
+ target.cacheWriteTokens += usage.cacheWriteTokens ?? 0;
35
+ target.totalTokens += usage.totalTokens ?? 0;
36
+ }
37
+ function summarizeAssistantUsage(messages, usageScopeId) {
38
+ const summary = createEmptyAssistantUsageSummary();
39
+ const modelStats = /* @__PURE__ */ new Map();
40
+ for (const message of messages) {
41
+ if (!isAssistantMessage(message)) {
42
+ continue;
43
+ }
44
+ if (usageScopeId && message.usageScopeId !== usageScopeId) {
45
+ continue;
46
+ }
47
+ accumulateTokenUsage(summary.tokenUsage, message.tokenUsage);
48
+ if (message.estimatedCost !== void 0) {
49
+ summary.estimatedCost += message.estimatedCost;
50
+ }
51
+ if (message.pricingStatus === "unpriced" || hasUnpricedTokenUsage(message.tokenUsage) && message.estimatedCost === void 0 && message.pricingStatus === void 0) {
52
+ summary.hasUnpricedResponses = true;
53
+ }
54
+ if (!message.provider || !message.model) {
55
+ continue;
56
+ }
57
+ const modelKey = `${message.provider}:${message.model}`;
58
+ const existingModelStat = modelStats.get(modelKey);
59
+ const modelStat = existingModelStat ?? (() => {
60
+ const newModelStat = {
61
+ provider: message.provider,
62
+ model: message.model,
63
+ messageCount: 0,
64
+ tokenUsage: createEmptyCumulativeTokenUsage(),
65
+ estimatedCost: 0
66
+ };
67
+ modelStats.set(modelKey, newModelStat);
68
+ return newModelStat;
69
+ })();
70
+ modelStat.messageCount += 1;
71
+ accumulateTokenUsage(modelStat.tokenUsage, message.tokenUsage);
72
+ if (message.estimatedCost !== void 0) {
73
+ modelStat.estimatedCost += message.estimatedCost;
74
+ }
75
+ }
76
+ if (modelStats.size > 0) {
77
+ summary.modelStats = [...modelStats.values()];
78
+ }
79
+ return summary;
80
+ }
81
+ export {
82
+ accumulateTokenUsage,
83
+ createEmptyAssistantUsageSummary,
84
+ createEmptyCumulativeTokenUsage,
85
+ summarizeAssistantUsage
86
+ };