@dexto/core 1.6.17 → 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 (57) hide show
  1. package/dist/agent/DextoAgent.cjs +63 -9
  2. package/dist/agent/DextoAgent.d.ts +11 -1
  3. package/dist/agent/DextoAgent.d.ts.map +1 -1
  4. package/dist/agent/DextoAgent.js +56 -2
  5. package/dist/agent/runtime-config.d.ts +2 -0
  6. package/dist/agent/runtime-config.d.ts.map +1 -1
  7. package/dist/llm/executor/stream-processor.cjs +2 -2
  8. package/dist/llm/executor/stream-processor.d.ts +1 -0
  9. package/dist/llm/executor/stream-processor.d.ts.map +1 -1
  10. package/dist/llm/executor/stream-processor.js +2 -2
  11. package/dist/llm/executor/turn-executor.cjs +3 -0
  12. package/dist/llm/executor/turn-executor.d.ts +1 -0
  13. package/dist/llm/executor/turn-executor.d.ts.map +1 -1
  14. package/dist/llm/executor/turn-executor.js +3 -0
  15. package/dist/llm/services/factory.cjs +3 -1
  16. package/dist/llm/services/factory.d.ts +7 -3
  17. package/dist/llm/services/factory.d.ts.map +1 -1
  18. package/dist/llm/services/factory.js +3 -1
  19. package/dist/llm/services/vercel.cjs +4 -1
  20. package/dist/llm/services/vercel.d.ts +2 -1
  21. package/dist/llm/services/vercel.d.ts.map +1 -1
  22. package/dist/llm/services/vercel.js +4 -1
  23. package/dist/llm/usage-scope.cjs +4 -13
  24. package/dist/llm/usage-scope.d.ts +3 -2
  25. package/dist/llm/usage-scope.d.ts.map +1 -1
  26. package/dist/llm/usage-scope.js +3 -11
  27. package/dist/mcp/bundled-config.cjs +206 -0
  28. package/dist/mcp/bundled-config.d.ts +10 -0
  29. package/dist/mcp/bundled-config.d.ts.map +1 -0
  30. package/dist/mcp/bundled-config.js +173 -0
  31. package/dist/mcp/index.cjs +43 -15
  32. package/dist/mcp/index.d.ts +11 -7
  33. package/dist/mcp/index.d.ts.map +1 -1
  34. package/dist/mcp/index.js +35 -7
  35. package/dist/prompts/providers/config-prompt-provider.cjs +15 -1
  36. package/dist/prompts/providers/config-prompt-provider.d.ts.map +1 -1
  37. package/dist/prompts/providers/config-prompt-provider.js +15 -1
  38. package/dist/session/chat-session.cjs +9 -4
  39. package/dist/session/chat-session.d.ts.map +1 -1
  40. package/dist/session/chat-session.js +9 -4
  41. package/dist/session/session-manager.cjs +140 -67
  42. package/dist/session/session-manager.d.ts +8 -1
  43. package/dist/session/session-manager.d.ts.map +1 -1
  44. package/dist/session/session-manager.js +142 -67
  45. package/dist/systemPrompt/manager.cjs +7 -1
  46. package/dist/systemPrompt/manager.d.ts.map +1 -1
  47. package/dist/systemPrompt/manager.js +7 -1
  48. package/dist/systemPrompt/schemas.cjs +7 -0
  49. package/dist/systemPrompt/schemas.d.ts +14 -0
  50. package/dist/systemPrompt/schemas.d.ts.map +1 -1
  51. package/dist/systemPrompt/schemas.js +6 -0
  52. package/dist/systemPrompt/types.d.ts +2 -0
  53. package/dist/systemPrompt/types.d.ts.map +1 -1
  54. package/dist/tools/tool-manager.cjs +20 -1
  55. package/dist/tools/tool-manager.d.ts.map +1 -1
  56. package/dist/tools/tool-manager.js +21 -2
  57. package/package.json +2 -1
@@ -185,8 +185,10 @@ class ChatSession {
185
185
  // Pass ResourceManager for blob storage
186
186
  this.logger,
187
187
  // Pass logger for dependency injection
188
- compactionStrategy
189
- // Pass compaction strategy
188
+ {
189
+ usageScopeId: runtimeConfig.usageScopeId,
190
+ compactionStrategy
191
+ }
190
192
  );
191
193
  this.logger.debug(`ChatSession ${this.id}: Services initialized with storage`);
192
194
  }
@@ -472,6 +474,7 @@ class ChatSession {
472
474
  */
473
475
  async switchLLM(newLLMConfig) {
474
476
  try {
477
+ const runtimeConfig = this.services.stateManager.getRuntimeConfig(this.id);
475
478
  const compactionStrategy = this.services.compactionStrategy;
476
479
  const newLLMService = (0, import_factory2.createLLMService)(
477
480
  newLLMConfig,
@@ -484,8 +487,10 @@ class ChatSession {
484
487
  this.id,
485
488
  this.services.resourceManager,
486
489
  this.logger,
487
- compactionStrategy
488
- // Pass compaction strategy
490
+ {
491
+ usageScopeId: runtimeConfig.usageScopeId,
492
+ compactionStrategy
493
+ }
489
494
  );
490
495
  this.llmService = newLLMService;
491
496
  this.logger.info(
@@ -1 +1 @@
1
- {"version":3,"file":"chat-session.d.ts","sourceRoot":"","sources":["../../src/session/chat-session.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"chat-session.d.ts","sourceRoot":"","sources":["../../src/session/chat-session.ts"],"names":[],"mappings":"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"}
@@ -166,8 +166,10 @@ class ChatSession {
166
166
  // Pass ResourceManager for blob storage
167
167
  this.logger,
168
168
  // Pass logger for dependency injection
169
- compactionStrategy
170
- // Pass compaction strategy
169
+ {
170
+ usageScopeId: runtimeConfig.usageScopeId,
171
+ compactionStrategy
172
+ }
171
173
  );
172
174
  this.logger.debug(`ChatSession ${this.id}: Services initialized with storage`);
173
175
  }
@@ -453,6 +455,7 @@ class ChatSession {
453
455
  */
454
456
  async switchLLM(newLLMConfig) {
455
457
  try {
458
+ const runtimeConfig = this.services.stateManager.getRuntimeConfig(this.id);
456
459
  const compactionStrategy = this.services.compactionStrategy;
457
460
  const newLLMService = createLLMService(
458
461
  newLLMConfig,
@@ -465,8 +468,10 @@ class ChatSession {
465
468
  this.id,
466
469
  this.services.resourceManager,
467
470
  this.logger,
468
- compactionStrategy
469
- // Pass compaction strategy
471
+ {
472
+ usageScopeId: runtimeConfig.usageScopeId,
473
+ compactionStrategy
474
+ }
470
475
  );
471
476
  this.llmService = newLLMService;
472
477
  this.logger.info(
@@ -35,6 +35,8 @@ var import_crypto = require("crypto");
35
35
  var import_chat_session = require("./chat-session.js");
36
36
  var import_types = require("../logger/v2/types.js");
37
37
  var import_errors = require("./errors.js");
38
+ var import_zod = require("zod");
39
+ var import_schemas = require("../systemPrompt/schemas.js");
38
40
  function defaultSessionLoggerFactory(options) {
39
41
  return options.baseLogger.createChild(import_types.DextoLogComponent.SESSION);
40
42
  }
@@ -54,8 +56,8 @@ class SessionManager {
54
56
  initializationPromise;
55
57
  // Add a Map to track ongoing session creation operations to prevent race conditions
56
58
  pendingCreations = /* @__PURE__ */ new Map();
57
- // Per-session mutex for token usage updates to prevent lost updates from concurrent calls
58
- tokenUsageLocks = /* @__PURE__ */ new Map();
59
+ // Per-session mutex for any SessionData read-modify-write path.
60
+ sessionDataLocks = /* @__PURE__ */ new Map();
59
61
  logger;
60
62
  static FORK_HISTORY_BATCH_SIZE = 500;
61
63
  static FORK_ID_GENERATION_MAX_ATTEMPTS = 5;
@@ -183,8 +185,15 @@ class SessionManager {
183
185
  lastActivity: now,
184
186
  messageCount: parentSessionData.messageCount,
185
187
  parentSessionId,
186
- metadata: {
187
- title: childTitle
188
+ ...parentSessionData.metadata !== void 0 ? {
189
+ metadata: {
190
+ ...parentSessionData.metadata,
191
+ title: childTitle
192
+ }
193
+ } : {
194
+ metadata: {
195
+ title: childTitle
196
+ }
188
197
  },
189
198
  ...parentSessionData.workspaceId !== void 0 && {
190
199
  workspaceId: parentSessionData.workspaceId
@@ -460,14 +469,15 @@ class SessionManager {
460
469
  throw import_errors.SessionError.notFound(sessionId);
461
470
  }
462
471
  await session.reset();
463
- const sessionKey = `session:${sessionId}`;
464
- const sessionData = await this.services.storageManager.getDatabase().get(sessionKey);
465
- if (sessionData) {
472
+ await this.runWithSessionDataLock(sessionId, async (sessionKey) => {
473
+ const sessionData = await this.services.storageManager.getDatabase().get(sessionKey);
474
+ if (!sessionData) {
475
+ return;
476
+ }
466
477
  sessionData.messageCount = 0;
467
478
  sessionData.lastActivity = Date.now();
468
- await this.services.storageManager.getDatabase().set(sessionKey, sessionData);
469
- await this.services.storageManager.getCache().set(sessionKey, sessionData, this.sessionTTL / 1e3);
470
- }
479
+ await this.persistSessionData(sessionKey, sessionData);
480
+ });
471
481
  this.logger.debug(`Reset session conversation: ${sessionId}`);
472
482
  }
473
483
  /**
@@ -508,11 +518,69 @@ class SessionManager {
508
518
  ...sessionData.usageTracking && { usageTracking: sessionData.usageTracking }
509
519
  };
510
520
  }
511
- async markUntrackedChatGPTLoginUsage(sessionId) {
521
+ async getSessionSystemPromptContributors(sessionId) {
512
522
  await this.ensureInitialized();
513
523
  const sessionKey = `session:${sessionId}`;
514
- const previousLock = this.tokenUsageLocks.get(sessionKey) ?? Promise.resolve();
515
- const currentLock = previousLock.then(async () => {
524
+ const sessionData = await this.services.storageManager.getDatabase().get(sessionKey);
525
+ if (!sessionData) {
526
+ throw import_errors.SessionError.notFound(sessionId);
527
+ }
528
+ return this.parseSessionPromptContributors(sessionId, sessionData);
529
+ }
530
+ async upsertSessionSystemPromptContributor(sessionId, contributor) {
531
+ await this.ensureInitialized();
532
+ return await this.runWithSessionDataLock(sessionId, async (sessionKey) => {
533
+ const sessionData = await this.services.storageManager.getDatabase().get(sessionKey);
534
+ if (!sessionData) {
535
+ throw import_errors.SessionError.notFound(sessionId);
536
+ }
537
+ const existing = this.parseSessionPromptContributors(sessionId, sessionData);
538
+ const next = existing.filter((entry) => entry.id !== contributor.id);
539
+ const replaced = next.length !== existing.length;
540
+ next.push(contributor);
541
+ next.sort((left, right) => left.priority - right.priority);
542
+ sessionData.metadata = sessionData.metadata || {};
543
+ sessionData.metadata.systemPromptContributors = next;
544
+ sessionData.lastActivity = Date.now();
545
+ await this.persistSessionData(sessionKey, sessionData);
546
+ return replaced;
547
+ });
548
+ }
549
+ async removeSessionSystemPromptContributor(sessionId, contributorId) {
550
+ await this.ensureInitialized();
551
+ return await this.runWithSessionDataLock(sessionId, async (sessionKey) => {
552
+ const sessionData = await this.services.storageManager.getDatabase().get(sessionKey);
553
+ if (!sessionData) {
554
+ throw import_errors.SessionError.notFound(sessionId);
555
+ }
556
+ const existing = this.parseSessionPromptContributors(sessionId, sessionData);
557
+ const next = existing.filter((entry) => entry.id !== contributorId);
558
+ const removed = next.length !== existing.length;
559
+ if (!removed) {
560
+ return false;
561
+ }
562
+ sessionData.metadata = sessionData.metadata || {};
563
+ sessionData.metadata.systemPromptContributors = next;
564
+ sessionData.lastActivity = Date.now();
565
+ await this.persistSessionData(sessionKey, sessionData);
566
+ return true;
567
+ });
568
+ }
569
+ parseSessionPromptContributors(sessionId, sessionData) {
570
+ try {
571
+ return import_schemas.SessionPromptContributorSchema.array().parse(
572
+ sessionData.metadata?.systemPromptContributors ?? []
573
+ );
574
+ } catch (error) {
575
+ if (error instanceof import_zod.ZodError) {
576
+ throw import_errors.SessionError.storageFailed(sessionId, "read", error.message);
577
+ }
578
+ throw error;
579
+ }
580
+ }
581
+ async markUntrackedChatGPTLoginUsage(sessionId) {
582
+ await this.ensureInitialized();
583
+ await this.runWithSessionDataLock(sessionId, async (sessionKey) => {
516
584
  const sessionData = await this.services.storageManager.getDatabase().get(sessionKey);
517
585
  if (!sessionData || sessionData.usageTracking?.hasUntrackedChatGPTLoginUsage) {
518
586
  return;
@@ -521,17 +589,8 @@ class SessionManager {
521
589
  ...sessionData.usageTracking ?? {},
522
590
  hasUntrackedChatGPTLoginUsage: true
523
591
  };
524
- await this.services.storageManager.getDatabase().set(sessionKey, sessionData);
525
- await this.services.storageManager.getCache().set(sessionKey, sessionData, this.sessionTTL / 1e3);
592
+ await this.persistSessionData(sessionKey, sessionData);
526
593
  });
527
- this.tokenUsageLocks.set(sessionKey, currentLock);
528
- try {
529
- await currentLock;
530
- } finally {
531
- if (this.tokenUsageLocks.get(sessionKey) === currentLock) {
532
- this.tokenUsageLocks.delete(sessionKey);
533
- }
534
- }
535
594
  }
536
595
  /**
537
596
  * Get the global session manager configuration.
@@ -546,27 +605,29 @@ class SessionManager {
546
605
  * Updates the last activity timestamp for a session.
547
606
  */
548
607
  async updateSessionActivity(sessionId) {
549
- const sessionKey = `session:${sessionId}`;
550
- const sessionData = await this.services.storageManager.getDatabase().get(sessionKey);
551
- if (sessionData) {
608
+ await this.runWithSessionDataLock(sessionId, async (sessionKey) => {
609
+ const sessionData = await this.services.storageManager.getDatabase().get(sessionKey);
610
+ if (!sessionData) {
611
+ return;
612
+ }
552
613
  sessionData.lastActivity = Date.now();
553
- await this.services.storageManager.getDatabase().set(sessionKey, sessionData);
554
- await this.services.storageManager.getCache().set(sessionKey, sessionData, this.sessionTTL / 1e3);
555
- }
614
+ await this.persistSessionData(sessionKey, sessionData);
615
+ });
556
616
  }
557
617
  /**
558
618
  * Increments the message count for a session.
559
619
  */
560
620
  async incrementMessageCount(sessionId) {
561
621
  await this.ensureInitialized();
562
- const sessionKey = `session:${sessionId}`;
563
- const sessionData = await this.services.storageManager.getDatabase().get(sessionKey);
564
- if (sessionData) {
622
+ await this.runWithSessionDataLock(sessionId, async (sessionKey) => {
623
+ const sessionData = await this.services.storageManager.getDatabase().get(sessionKey);
624
+ if (!sessionData) {
625
+ return;
626
+ }
565
627
  sessionData.messageCount++;
566
628
  sessionData.lastActivity = Date.now();
567
- await this.services.storageManager.getDatabase().set(sessionKey, sessionData);
568
- await this.services.storageManager.getCache().set(sessionKey, sessionData, this.sessionTTL / 1e3);
569
- }
629
+ await this.persistSessionData(sessionKey, sessionData);
630
+ });
570
631
  }
571
632
  /**
572
633
  * Accumulates token usage for a session.
@@ -581,9 +642,7 @@ class SessionManager {
581
642
  */
582
643
  async accumulateTokenUsage(sessionId, usage, cost, modelInfo) {
583
644
  await this.ensureInitialized();
584
- const sessionKey = `session:${sessionId}`;
585
- const previousLock = this.tokenUsageLocks.get(sessionKey) ?? Promise.resolve();
586
- const currentLock = previousLock.then(async () => {
645
+ await this.runWithSessionDataLock(sessionId, async (sessionKey) => {
587
646
  const sessionData = await this.services.storageManager.getDatabase().get(sessionKey);
588
647
  if (!sessionData) return;
589
648
  if (modelInfo) {
@@ -604,17 +663,8 @@ class SessionManager {
604
663
  sessionData.estimatedCost = (sessionData.estimatedCost ?? 0) + cost;
605
664
  }
606
665
  sessionData.lastActivity = Date.now();
607
- await this.services.storageManager.getDatabase().set(sessionKey, sessionData);
608
- await this.services.storageManager.getCache().set(sessionKey, sessionData, this.sessionTTL / 1e3);
666
+ await this.persistSessionData(sessionKey, sessionData);
609
667
  });
610
- this.tokenUsageLocks.set(sessionKey, currentLock);
611
- try {
612
- await currentLock;
613
- } finally {
614
- if (this.tokenUsageLocks.get(sessionKey) === currentLock) {
615
- this.tokenUsageLocks.delete(sessionKey);
616
- }
617
- }
618
668
  }
619
669
  /**
620
670
  * Helper to accumulate token usage into a target SessionTokenUsage object.
@@ -673,20 +723,20 @@ class SessionManager {
673
723
  */
674
724
  async setSessionTitle(sessionId, title, opts = {}) {
675
725
  await this.ensureInitialized();
676
- const sessionKey = `session:${sessionId}`;
677
- const sessionData = await this.services.storageManager.getDatabase().get(sessionKey);
678
- if (!sessionData) {
679
- throw import_errors.SessionError.notFound(sessionId);
680
- }
681
726
  const normalized = title.trim().slice(0, 80);
682
- if (opts.ifUnsetOnly && sessionData.metadata?.title) {
683
- return;
684
- }
685
- sessionData.metadata = sessionData.metadata || {};
686
- sessionData.metadata.title = normalized;
687
- sessionData.lastActivity = Date.now();
688
- await this.services.storageManager.getDatabase().set(sessionKey, sessionData);
689
- await this.services.storageManager.getCache().set(sessionKey, sessionData, this.sessionTTL / 1e3);
727
+ await this.runWithSessionDataLock(sessionId, async (sessionKey) => {
728
+ const sessionData = await this.services.storageManager.getDatabase().get(sessionKey);
729
+ if (!sessionData) {
730
+ throw import_errors.SessionError.notFound(sessionId);
731
+ }
732
+ if (opts.ifUnsetOnly && sessionData.metadata?.title) {
733
+ return;
734
+ }
735
+ sessionData.metadata = sessionData.metadata || {};
736
+ sessionData.metadata.title = normalized;
737
+ sessionData.lastActivity = Date.now();
738
+ await this.persistSessionData(sessionKey, sessionData);
739
+ });
690
740
  }
691
741
  /**
692
742
  * Gets the stored title for a session, if any.
@@ -771,14 +821,15 @@ class SessionManager {
771
821
  throw import_errors.SessionError.notFound(sessionId);
772
822
  }
773
823
  await session.switchLLM(newLLMConfig);
774
- const sessionKey = `session:${sessionId}`;
775
- const sessionData = await this.services.storageManager.getDatabase().get(sessionKey);
776
- if (sessionData) {
824
+ await this.runWithSessionDataLock(sessionId, async (sessionKey) => {
825
+ const sessionData = await this.services.storageManager.getDatabase().get(sessionKey);
826
+ if (!sessionData) {
827
+ return;
828
+ }
777
829
  const { apiKey: _apiKey, ...configWithoutApiKey } = newLLMConfig;
778
830
  sessionData.llmOverride = configWithoutApiKey;
779
- await this.services.storageManager.getDatabase().set(sessionKey, sessionData);
780
- await this.services.storageManager.getCache().set(sessionKey, sessionData, this.sessionTTL / 1e3);
781
- }
831
+ await this.persistSessionData(sessionKey, sessionData);
832
+ });
782
833
  this.services.agentEventBus.emit("llm:switched", {
783
834
  newConfig: newLLMConfig,
784
835
  historyRetained: true,
@@ -787,6 +838,28 @@ class SessionManager {
787
838
  const message = `Successfully switched to ${newLLMConfig.provider}/${newLLMConfig.model} for session ${sessionId}`;
788
839
  return { message, warnings: [] };
789
840
  }
841
+ async runWithSessionDataLock(sessionId, fn) {
842
+ const sessionKey = `session:${sessionId}`;
843
+ const previousLock = this.sessionDataLocks.get(sessionKey) ?? Promise.resolve();
844
+ const currentResult = previousLock.catch(() => {
845
+ }).then(() => fn(sessionKey));
846
+ const currentLock = currentResult.then(
847
+ () => void 0,
848
+ () => void 0
849
+ );
850
+ this.sessionDataLocks.set(sessionKey, currentLock);
851
+ try {
852
+ return await currentResult;
853
+ } finally {
854
+ if (this.sessionDataLocks.get(sessionKey) === currentLock) {
855
+ this.sessionDataLocks.delete(sessionKey);
856
+ }
857
+ }
858
+ }
859
+ async persistSessionData(sessionKey, sessionData) {
860
+ await this.services.storageManager.getDatabase().set(sessionKey, sessionData);
861
+ await this.services.storageManager.getCache().set(sessionKey, sessionData, this.sessionTTL / 1e3);
862
+ }
790
863
  /**
791
864
  * Get session statistics for monitoring and debugging.
792
865
  */
@@ -9,6 +9,7 @@ import type { StorageManager } from '../storage/index.js';
9
9
  import type { HookManager } from '../hooks/manager.js';
10
10
  import type { TokenUsage } from '../llm/types.js';
11
11
  import type { CompactionStrategy } from '../context/compaction/types.js';
12
+ import { type SessionPromptContributor } from '../systemPrompt/schemas.js';
12
13
  export type SessionLoggerFactory = (options: {
13
14
  baseLogger: Logger;
14
15
  agentId: string;
@@ -94,7 +95,7 @@ export declare class SessionManager {
94
95
  private cleanupInterval?;
95
96
  private initializationPromise;
96
97
  private readonly pendingCreations;
97
- private readonly tokenUsageLocks;
98
+ private readonly sessionDataLocks;
98
99
  private logger;
99
100
  private static readonly FORK_HISTORY_BATCH_SIZE;
100
101
  private static readonly FORK_ID_GENERATION_MAX_ATTEMPTS;
@@ -196,6 +197,10 @@ export declare class SessionManager {
196
197
  * @returns Session metadata if found, undefined otherwise
197
198
  */
198
199
  getSessionMetadata(sessionId: string): Promise<SessionMetadata | undefined>;
200
+ getSessionSystemPromptContributors(sessionId: string): Promise<SessionPromptContributor[]>;
201
+ upsertSessionSystemPromptContributor(sessionId: string, contributor: SessionPromptContributor): Promise<boolean>;
202
+ removeSessionSystemPromptContributor(sessionId: string, contributorId: string): Promise<boolean>;
203
+ private parseSessionPromptContributors;
199
204
  markUntrackedChatGPTLoginUsage(sessionId: string): Promise<void>;
200
205
  /**
201
206
  * Get the global session manager configuration.
@@ -271,6 +276,8 @@ export declare class SessionManager {
271
276
  message: string;
272
277
  warnings: string[];
273
278
  }>;
279
+ private runWithSessionDataLock;
280
+ private persistSessionData;
274
281
  /**
275
282
  * Get session statistics for monitoring and debugging.
276
283
  */
@@ -1 +1 @@
1
- {"version":3,"file":"session-manager.d.ts","sourceRoot":"","sources":["../../src/session/session-manager.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"session-manager.d.ts","sourceRoot":"","sources":["../../src/session/session-manager.ts"],"names":[],"mappings":"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"}