@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.
- package/dist/agent/DextoAgent.cjs +63 -9
- package/dist/agent/DextoAgent.d.ts +11 -1
- package/dist/agent/DextoAgent.d.ts.map +1 -1
- package/dist/agent/DextoAgent.js +56 -2
- package/dist/agent/runtime-config.d.ts +2 -0
- package/dist/agent/runtime-config.d.ts.map +1 -1
- package/dist/llm/executor/stream-processor.cjs +2 -2
- package/dist/llm/executor/stream-processor.d.ts +1 -0
- package/dist/llm/executor/stream-processor.d.ts.map +1 -1
- package/dist/llm/executor/stream-processor.js +2 -2
- package/dist/llm/executor/turn-executor.cjs +3 -0
- package/dist/llm/executor/turn-executor.d.ts +1 -0
- package/dist/llm/executor/turn-executor.d.ts.map +1 -1
- package/dist/llm/executor/turn-executor.js +3 -0
- package/dist/llm/services/factory.cjs +3 -1
- package/dist/llm/services/factory.d.ts +7 -3
- package/dist/llm/services/factory.d.ts.map +1 -1
- package/dist/llm/services/factory.js +3 -1
- package/dist/llm/services/vercel.cjs +4 -1
- package/dist/llm/services/vercel.d.ts +2 -1
- package/dist/llm/services/vercel.d.ts.map +1 -1
- package/dist/llm/services/vercel.js +4 -1
- package/dist/llm/usage-scope.cjs +4 -13
- package/dist/llm/usage-scope.d.ts +3 -2
- package/dist/llm/usage-scope.d.ts.map +1 -1
- package/dist/llm/usage-scope.js +3 -11
- package/dist/mcp/bundled-config.cjs +206 -0
- package/dist/mcp/bundled-config.d.ts +10 -0
- package/dist/mcp/bundled-config.d.ts.map +1 -0
- package/dist/mcp/bundled-config.js +173 -0
- package/dist/mcp/index.cjs +43 -15
- package/dist/mcp/index.d.ts +11 -7
- package/dist/mcp/index.d.ts.map +1 -1
- package/dist/mcp/index.js +35 -7
- package/dist/prompts/providers/config-prompt-provider.cjs +15 -1
- package/dist/prompts/providers/config-prompt-provider.d.ts.map +1 -1
- package/dist/prompts/providers/config-prompt-provider.js +15 -1
- package/dist/session/chat-session.cjs +9 -4
- package/dist/session/chat-session.d.ts.map +1 -1
- package/dist/session/chat-session.js +9 -4
- package/dist/session/session-manager.cjs +140 -67
- package/dist/session/session-manager.d.ts +8 -1
- package/dist/session/session-manager.d.ts.map +1 -1
- package/dist/session/session-manager.js +142 -67
- package/dist/systemPrompt/manager.cjs +7 -1
- package/dist/systemPrompt/manager.d.ts.map +1 -1
- package/dist/systemPrompt/manager.js +7 -1
- package/dist/systemPrompt/schemas.cjs +7 -0
- package/dist/systemPrompt/schemas.d.ts +14 -0
- package/dist/systemPrompt/schemas.d.ts.map +1 -1
- package/dist/systemPrompt/schemas.js +6 -0
- package/dist/systemPrompt/types.d.ts +2 -0
- package/dist/systemPrompt/types.d.ts.map +1 -1
- package/dist/tools/tool-manager.cjs +20 -1
- package/dist/tools/tool-manager.d.ts.map +1 -1
- package/dist/tools/tool-manager.js +21 -2
- 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
|
-
|
|
189
|
-
|
|
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
|
-
|
|
488
|
-
|
|
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":"AAGA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAE1D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAClE,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AACtE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAC5D,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAC5D,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AACnE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAC1D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AACvD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAEpD,OAAO,EACH,eAAe,EACf,aAAa,EAIhB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAIpD,OAAO,KAAK,EAAE,eAAe,EAAe,MAAM,qBAAqB,CAAC;AACxE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAC3D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAEtD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,gCAAgC,CAAC;AAGzE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2CG;AACH,qBAAa,WAAW;IA6DhB,OAAO,CAAC,QAAQ;aAYA,EAAE,EAAE,MAAM;IAxE9B;;;;;;;;;;OAUG;IACH,SAAgB,QAAQ,EAAE,eAAe,CAAC;IAE1C;;;OAGG;IACH,OAAO,CAAC,eAAe,CAA+B;IAEtD;;;;;OAKG;IACH,OAAO,CAAC,UAAU,CAAoB;IAEtC;;;OAGG;IACH,OAAO,CAAC,UAAU,CAA6D;IAE/E;;OAEG;IACH,OAAO,CAAC,wBAAwB,CACvB;IAET;;;OAGG;IACH,OAAO,CAAC,oBAAoB,CAAgC;IAE5D,SAAgB,MAAM,EAAE,MAAM,CAAC;IAE/B;;;;;;;;;;;OAWG;gBAES,QAAQ,EAAE;QACd,YAAY,EAAE,iBAAiB,CAAC;QAChC,mBAAmB,EAAE,mBAAmB,CAAC;QACzC,WAAW,EAAE,WAAW,CAAC;QACzB,aAAa,EAAE,aAAa,CAAC;QAC7B,cAAc,EAAE,cAAc,CAAC;QAC/B,eAAe,EAAE,OAAO,uBAAuB,EAAE,eAAe,CAAC;QACjE,WAAW,EAAE,WAAW,CAAC;QACzB,UAAU,EAAE,UAAU,CAAC;QACvB,cAAc,EAAE,OAAO,sBAAsB,EAAE,cAAc,CAAC;QAC9D,kBAAkB,EAAE,kBAAkB,GAAG,IAAI,CAAC;KACjD,EACe,EAAE,EAAE,MAAM,EAC1B,MAAM,EAAE,MAAM;IAalB;;;OAGG;IACU,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAIlC;;;;;;;OAOG;IACH,OAAO,CAAC,oBAAoB;IA4B5B;;;OAGG;IACH,OAAO,CAAC,sBAAsB;IAmD9B;;OAEG;YACW,kBAAkB;
|
|
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
|
-
|
|
170
|
-
|
|
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
|
-
|
|
469
|
-
|
|
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
|
|
58
|
-
|
|
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
|
-
|
|
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
|
-
|
|
464
|
-
|
|
465
|
-
|
|
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.
|
|
469
|
-
|
|
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
|
|
521
|
+
async getSessionSystemPromptContributors(sessionId) {
|
|
512
522
|
await this.ensureInitialized();
|
|
513
523
|
const sessionKey = `session:${sessionId}`;
|
|
514
|
-
const
|
|
515
|
-
|
|
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.
|
|
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
|
-
|
|
550
|
-
|
|
551
|
-
|
|
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.
|
|
554
|
-
|
|
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
|
-
|
|
563
|
-
|
|
564
|
-
|
|
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.
|
|
568
|
-
|
|
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
|
-
|
|
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.
|
|
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
|
-
|
|
683
|
-
|
|
684
|
-
|
|
685
|
-
|
|
686
|
-
|
|
687
|
-
|
|
688
|
-
|
|
689
|
-
|
|
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
|
-
|
|
775
|
-
|
|
776
|
-
|
|
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.
|
|
780
|
-
|
|
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
|
|
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":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AACjE,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AACvD,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAEpD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AACnE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAC5D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAC1D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAEvD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAClD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,gCAAgC,CAAC;
|
|
1
|
+
{"version":3,"file":"session-manager.d.ts","sourceRoot":"","sources":["../../src/session/session-manager.ts"],"names":[],"mappings":"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"}
|