@j0hanz/cortex-mcp 1.0.0 → 1.1.1
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/README.md +143 -245
- package/dist/engine/config.d.ts +17 -6
- package/dist/engine/config.d.ts.map +1 -1
- package/dist/engine/config.js +1 -14
- package/dist/engine/config.js.map +1 -1
- package/dist/engine/events.d.ts +4 -0
- package/dist/engine/events.d.ts.map +1 -1
- package/dist/engine/events.js.map +1 -1
- package/dist/engine/reasoner.d.ts +1 -0
- package/dist/engine/reasoner.d.ts.map +1 -1
- package/dist/engine/reasoner.js +31 -61
- package/dist/engine/reasoner.js.map +1 -1
- package/dist/engine/session-store.d.ts +26 -3
- package/dist/engine/session-store.d.ts.map +1 -1
- package/dist/engine/session-store.js +267 -26
- package/dist/engine/session-store.js.map +1 -1
- package/dist/instructions.md +33 -13
- package/dist/lib/formatting.d.ts +6 -0
- package/dist/lib/formatting.d.ts.map +1 -0
- package/dist/lib/formatting.js +29 -0
- package/dist/lib/formatting.js.map +1 -0
- package/dist/lib/text.d.ts +1 -6
- package/dist/lib/text.d.ts.map +1 -1
- package/dist/lib/text.js +1 -6
- package/dist/lib/text.js.map +1 -1
- package/dist/lib/types.d.ts +14 -11
- package/dist/lib/types.d.ts.map +1 -1
- package/dist/lib/validators.d.ts +7 -0
- package/dist/lib/validators.d.ts.map +1 -0
- package/dist/lib/validators.js +21 -0
- package/dist/lib/validators.js.map +1 -0
- package/dist/prompts/index.d.ts.map +1 -1
- package/dist/prompts/index.js +32 -9
- package/dist/prompts/index.js.map +1 -1
- package/dist/resources/index.d.ts.map +1 -1
- package/dist/resources/index.js +83 -19
- package/dist/resources/index.js.map +1 -1
- package/dist/schemas/inputs.d.ts +7 -1
- package/dist/schemas/inputs.d.ts.map +1 -1
- package/dist/schemas/inputs.js +42 -1
- package/dist/schemas/inputs.js.map +1 -1
- package/dist/schemas/outputs.d.ts +10 -0
- package/dist/schemas/outputs.d.ts.map +1 -1
- package/dist/schemas/outputs.js +7 -2
- package/dist/schemas/outputs.js.map +1 -1
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +10 -3
- package/dist/server.js.map +1 -1
- package/dist/tools/reasoning-think.d.ts +1 -6
- package/dist/tools/reasoning-think.d.ts.map +1 -1
- package/dist/tools/reasoning-think.js +268 -71
- package/dist/tools/reasoning-think.js.map +1 -1
- package/package.json +10 -1
- package/dist/engine/index.d.ts +0 -6
- package/dist/engine/index.d.ts.map +0 -1
- package/dist/engine/index.js +0 -6
- package/dist/engine/index.js.map +0 -1
package/dist/engine/reasoner.js
CHANGED
|
@@ -1,16 +1,32 @@
|
|
|
1
1
|
import { Buffer } from 'node:buffer';
|
|
2
|
-
import { createSegmenter
|
|
2
|
+
import { createSegmenter } from '../lib/text.js';
|
|
3
3
|
import { assertTargetThoughtsInRange, LEVEL_CONFIGS } from './config.js';
|
|
4
4
|
import { runWithContext } from './context.js';
|
|
5
5
|
import { engineEvents } from './events.js';
|
|
6
6
|
import { SessionStore } from './session-store.js';
|
|
7
|
-
const
|
|
8
|
-
const
|
|
7
|
+
const DEFAULT_SESSION_TTL_MS = 30 * 60 * 1000;
|
|
8
|
+
const DEFAULT_MAX_SESSIONS = 100;
|
|
9
|
+
const DEFAULT_MAX_TOTAL_TOKENS = 500_000;
|
|
10
|
+
function parsePositiveIntEnv(name, fallback, minimum = 1) {
|
|
11
|
+
const raw = process.env[name];
|
|
12
|
+
if (raw === undefined) {
|
|
13
|
+
return fallback;
|
|
14
|
+
}
|
|
15
|
+
const parsed = Number.parseInt(raw, 10);
|
|
16
|
+
if (!Number.isInteger(parsed) || parsed < minimum) {
|
|
17
|
+
return fallback;
|
|
18
|
+
}
|
|
19
|
+
return parsed;
|
|
20
|
+
}
|
|
21
|
+
const sessionStore = new SessionStore(parsePositiveIntEnv('CORTEX_SESSION_TTL_MS', DEFAULT_SESSION_TTL_MS), parsePositiveIntEnv('CORTEX_MAX_SESSIONS', DEFAULT_MAX_SESSIONS), parsePositiveIntEnv('CORTEX_MAX_TOTAL_TOKENS', DEFAULT_MAX_TOTAL_TOKENS));
|
|
9
22
|
const sentenceSegmenter = createSegmenter('sentence');
|
|
10
23
|
const sessionLocks = new Map();
|
|
11
24
|
export { sessionStore };
|
|
12
25
|
export async function reason(query, level, options) {
|
|
13
|
-
|
|
26
|
+
if (!options?.thought) {
|
|
27
|
+
throw new Error('thought is required: provide your reasoning content');
|
|
28
|
+
}
|
|
29
|
+
const { sessionId, targetThoughts, thought, abortSignal, onProgress } = options;
|
|
14
30
|
const config = LEVEL_CONFIGS[level];
|
|
15
31
|
const session = resolveSession(level, sessionId, query, config, targetThoughts);
|
|
16
32
|
const { totalThoughts } = session;
|
|
@@ -31,15 +47,12 @@ export async function reason(query, level, options) {
|
|
|
31
47
|
if (nextIndex >= totalThoughts) {
|
|
32
48
|
return current;
|
|
33
49
|
}
|
|
34
|
-
const stepContent =
|
|
35
|
-
|
|
36
|
-
throw new Error(`Step content missing at index ${String(nextIndex)}/${String(totalThoughts)}`);
|
|
37
|
-
}
|
|
38
|
-
const thought = sessionStore.addThought(session.id, stepContent);
|
|
50
|
+
const stepContent = thought;
|
|
51
|
+
const addedThought = sessionStore.addThought(session.id, stepContent);
|
|
39
52
|
engineEvents.emit('thought:added', {
|
|
40
53
|
sessionId: session.id,
|
|
41
|
-
index:
|
|
42
|
-
content:
|
|
54
|
+
index: addedThought.index,
|
|
55
|
+
content: addedThought.content,
|
|
43
56
|
});
|
|
44
57
|
const updated = getSessionOrThrow(session.id);
|
|
45
58
|
if (updated.tokensUsed >= config.tokenBudget) {
|
|
@@ -47,12 +60,15 @@ export async function reason(query, level, options) {
|
|
|
47
60
|
sessionId: session.id,
|
|
48
61
|
tokensUsed: updated.tokensUsed,
|
|
49
62
|
tokenBudget: config.tokenBudget,
|
|
50
|
-
generatedThoughts:
|
|
63
|
+
generatedThoughts: addedThought.index + 1,
|
|
51
64
|
requestedThoughts: totalThoughts,
|
|
52
65
|
});
|
|
53
66
|
}
|
|
67
|
+
if (updated.thoughts.length >= totalThoughts) {
|
|
68
|
+
sessionStore.markCompleted(session.id);
|
|
69
|
+
}
|
|
54
70
|
if (onProgress) {
|
|
55
|
-
await onProgress(
|
|
71
|
+
await onProgress(addedThought.index + 1, totalThoughts);
|
|
56
72
|
throwIfReasoningAborted(abortSignal);
|
|
57
73
|
}
|
|
58
74
|
return getSessionOrThrow(session.id);
|
|
@@ -123,9 +139,8 @@ function resolveThoughtCount(level, query, config, targetThoughts) {
|
|
|
123
139
|
const queryByteLength = Buffer.byteLength(queryText, 'utf8');
|
|
124
140
|
const lengthScore = Math.min(1, queryByteLength / 400);
|
|
125
141
|
const structureScore = Math.min(0.4, getStructureDensityScore(queryText));
|
|
126
|
-
const
|
|
127
|
-
|
|
128
|
-
: 0;
|
|
142
|
+
const keywords = /\b(compare|analy[sz]e|trade[- ]?off|design|plan|critique|evaluate|review|architecture)\b/i;
|
|
143
|
+
const keywordScore = keywords.test(queryText) ? 0.25 : 0;
|
|
129
144
|
const score = Math.min(1, lengthScore + structureScore + keywordScore);
|
|
130
145
|
return config.minThoughts + Math.round(span * score);
|
|
131
146
|
}
|
|
@@ -160,49 +175,4 @@ function throwIfReasoningAborted(signal) {
|
|
|
160
175
|
throw new Error('Reasoning aborted');
|
|
161
176
|
}
|
|
162
177
|
}
|
|
163
|
-
const OPENING_TEMPLATE = 'Parsing the query and identifying the core problem';
|
|
164
|
-
const MIDDLE_TEMPLATES = [
|
|
165
|
-
'Identifying key components and constraints',
|
|
166
|
-
'Breaking down the problem into sub-problems',
|
|
167
|
-
'Mapping relationships between identified components',
|
|
168
|
-
'Considering edge cases and boundary conditions',
|
|
169
|
-
'Surveying the problem space for hidden assumptions',
|
|
170
|
-
'Clarifying ambiguous terms and scoping the question',
|
|
171
|
-
'Evaluating potential approaches and methodologies',
|
|
172
|
-
'Selecting the most promising approach based on trade-offs',
|
|
173
|
-
'Developing the solution framework step by step',
|
|
174
|
-
'Checking logical consistency of intermediate conclusions',
|
|
175
|
-
'Exploring alternative perspectives on the problem',
|
|
176
|
-
'Assessing confidence levels in preliminary findings',
|
|
177
|
-
'Identifying assumptions that require verification',
|
|
178
|
-
'Weighing trade-offs between competing solutions',
|
|
179
|
-
'Testing preliminary results against known constraints',
|
|
180
|
-
'Examining second-order effects and implications',
|
|
181
|
-
'Synthesizing findings from multiple angles of analysis',
|
|
182
|
-
'Cross-referencing conclusions with initial premises',
|
|
183
|
-
'Refining the analysis with additional considerations',
|
|
184
|
-
'Validating the complete reasoning chain for coherence',
|
|
185
|
-
'Optimizing the reasoning path for gaps or redundancies',
|
|
186
|
-
'Reviewing the logical flow from premises to conclusion',
|
|
187
|
-
'Documenting key insights and decision points',
|
|
188
|
-
];
|
|
189
|
-
const CONCLUSION_TEMPLATE = 'Consolidating the final answer with supporting evidence';
|
|
190
|
-
function generateReasoningStep(query, index, total) {
|
|
191
|
-
if (total <= 0) {
|
|
192
|
-
return '';
|
|
193
|
-
}
|
|
194
|
-
const step = index + 1;
|
|
195
|
-
if (step === 1) {
|
|
196
|
-
const truncatedQuery = truncate(query, 200, graphemeSegmenter);
|
|
197
|
-
return formatStep(step, total, `${OPENING_TEMPLATE}: "${truncatedQuery}"`);
|
|
198
|
-
}
|
|
199
|
-
if (step === total) {
|
|
200
|
-
return formatStep(step, total, CONCLUSION_TEMPLATE);
|
|
201
|
-
}
|
|
202
|
-
const template = MIDDLE_TEMPLATES[(step - 2) % MIDDLE_TEMPLATES.length] ?? '';
|
|
203
|
-
return formatStep(step, total, template);
|
|
204
|
-
}
|
|
205
|
-
function formatStep(step, total, description) {
|
|
206
|
-
return `Step ${String(step)}/${String(total)}: ${description}`;
|
|
207
|
-
}
|
|
208
178
|
//# sourceMappingURL=reasoner.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"reasoner.js","sourceRoot":"","sources":["../../src/engine/reasoner.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAErC,OAAO,EAAE,eAAe,EAAE,
|
|
1
|
+
{"version":3,"file":"reasoner.js","sourceRoot":"","sources":["../../src/engine/reasoner.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,17 +1,40 @@
|
|
|
1
1
|
import type { ReasoningLevel, Session, Thought } from '../lib/types.js';
|
|
2
2
|
export declare class SessionStore {
|
|
3
3
|
private readonly sessions;
|
|
4
|
+
private readonly sessionOrder;
|
|
5
|
+
private oldestSessionId;
|
|
6
|
+
private newestSessionId;
|
|
7
|
+
private sortedSessionIdsCache;
|
|
4
8
|
private readonly cleanupInterval;
|
|
5
9
|
private readonly ttlMs;
|
|
6
|
-
|
|
7
|
-
|
|
10
|
+
private readonly maxSessions;
|
|
11
|
+
private readonly maxTotalTokens;
|
|
12
|
+
private totalTokens;
|
|
13
|
+
constructor(ttlMs?: number, maxSessions?: number, maxTotalTokens?: number);
|
|
14
|
+
create(level: ReasoningLevel, totalThoughts?: number): Readonly<Session>;
|
|
8
15
|
get(id: string): Readonly<Session> | undefined;
|
|
9
|
-
list(): Session[];
|
|
16
|
+
list(): Readonly<Session>[];
|
|
10
17
|
getTtlMs(): number;
|
|
11
18
|
getExpiresAt(sessionId: string): number | undefined;
|
|
19
|
+
getTotalTokensUsed(): number;
|
|
12
20
|
delete(id: string): boolean;
|
|
13
21
|
addThought(sessionId: string, content: string): Thought;
|
|
14
22
|
reviseThought(sessionId: string, thoughtIndex: number, content: string): Thought;
|
|
23
|
+
markCompleted(sessionId: string): void;
|
|
24
|
+
markCancelled(sessionId: string): void;
|
|
25
|
+
private evictIfAtCapacity;
|
|
26
|
+
private evictForTokenHeadroom;
|
|
27
|
+
private findOldestSession;
|
|
15
28
|
private sweep;
|
|
29
|
+
private buildSortedSessionIdsCache;
|
|
30
|
+
private addToOrder;
|
|
31
|
+
private touchOrder;
|
|
32
|
+
private removeFromOrder;
|
|
33
|
+
private deleteSessionInternal;
|
|
34
|
+
private snapshotThought;
|
|
35
|
+
private snapshotSession;
|
|
36
|
+
private emitSessionsListChanged;
|
|
37
|
+
private emitSessionsResourceUpdated;
|
|
38
|
+
private emitSessionResourcesUpdated;
|
|
16
39
|
}
|
|
17
40
|
//# sourceMappingURL=session-store.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session-store.d.ts","sourceRoot":"","sources":["../../src/engine/session-store.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAEV,cAAc,EACd,OAAO,EACP,OAAO,EACR,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"session-store.d.ts","sourceRoot":"","sources":["../../src/engine/session-store.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAEV,cAAc,EACd,OAAO,EACP,OAAO,EACR,MAAM,iBAAiB,CAAC;AA4BzB,qBAAa,YAAY;IACvB,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAqC;IAC9D,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAuC;IACpE,OAAO,CAAC,eAAe,CAAqB;IAC5C,OAAO,CAAC,eAAe,CAAqB;IAC5C,OAAO,CAAC,qBAAqB,CAAyB;IACtD,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAiB;IACjD,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAS;IAC/B,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAS;IACrC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAS;IACxC,OAAO,CAAC,WAAW,CAAK;gBAGtB,KAAK,GAAE,MAAuB,EAC9B,WAAW,GAAE,MAA6B,EAC1C,cAAc,GAAE,MAAiC;IAYnD,MAAM,CAAC,KAAK,EAAE,cAAc,EAAE,aAAa,CAAC,EAAE,MAAM,GAAG,QAAQ,CAAC,OAAO,CAAC;IAuBxE,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,SAAS;IAK9C,IAAI,IAAI,QAAQ,CAAC,OAAO,CAAC,EAAE;IAY3B,QAAQ,IAAI,MAAM;IAIlB,YAAY,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;IAQnD,kBAAkB,IAAI,MAAM;IAI5B,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO;IAW3B,UAAU,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO;IAsBvD,aAAa,CACX,SAAS,EAAE,MAAM,EACjB,YAAY,EAAE,MAAM,EACpB,OAAO,EAAE,MAAM,GACd,OAAO;IAgCV,aAAa,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI;IAWtC,aAAa,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI;IAWtC,OAAO,CAAC,iBAAiB;IAczB,OAAO,CAAC,qBAAqB;IAoB7B,OAAO,CAAC,iBAAiB;IAWzB,OAAO,CAAC,KAAK;IAsBb,OAAO,CAAC,0BAA0B;IAYlC,OAAO,CAAC,UAAU;IAqBlB,OAAO,CAAC,UAAU;IA2ClB,OAAO,CAAC,eAAe;IA4BvB,OAAO,CAAC,qBAAqB;IAa7B,OAAO,CAAC,eAAe;IAQvB,OAAO,CAAC,eAAe;IAgBvB,OAAO,CAAC,uBAAuB;IAI/B,OAAO,CAAC,2BAA2B;IAInC,OAAO,CAAC,2BAA2B;CAMpC"}
|
|
@@ -3,16 +3,27 @@ import { randomUUID } from 'node:crypto';
|
|
|
3
3
|
import { LEVEL_CONFIGS } from './config.js';
|
|
4
4
|
import { engineEvents } from './events.js';
|
|
5
5
|
const DEFAULT_TTL_MS = 30 * 60 * 1000; // 30 minutes
|
|
6
|
+
const DEFAULT_MAX_SESSIONS = 100;
|
|
7
|
+
const DEFAULT_MAX_TOTAL_TOKENS = 500_000;
|
|
6
8
|
function estimateTokens(text) {
|
|
7
9
|
const byteLength = Buffer.byteLength(text, 'utf8');
|
|
8
10
|
return Math.max(1, Math.ceil(byteLength / 4));
|
|
9
11
|
}
|
|
10
12
|
export class SessionStore {
|
|
11
13
|
sessions = new Map();
|
|
14
|
+
sessionOrder = new Map();
|
|
15
|
+
oldestSessionId;
|
|
16
|
+
newestSessionId;
|
|
17
|
+
sortedSessionIdsCache = null;
|
|
12
18
|
cleanupInterval;
|
|
13
19
|
ttlMs;
|
|
14
|
-
|
|
20
|
+
maxSessions;
|
|
21
|
+
maxTotalTokens;
|
|
22
|
+
totalTokens = 0;
|
|
23
|
+
constructor(ttlMs = DEFAULT_TTL_MS, maxSessions = DEFAULT_MAX_SESSIONS, maxTotalTokens = DEFAULT_MAX_TOTAL_TOKENS) {
|
|
15
24
|
this.ttlMs = ttlMs;
|
|
25
|
+
this.maxSessions = maxSessions;
|
|
26
|
+
this.maxTotalTokens = maxTotalTokens;
|
|
16
27
|
const sweepInterval = Math.max(10, Math.min(60_000, ttlMs));
|
|
17
28
|
this.cleanupInterval = setInterval(() => {
|
|
18
29
|
this.sweep();
|
|
@@ -20,27 +31,41 @@ export class SessionStore {
|
|
|
20
31
|
this.cleanupInterval.unref();
|
|
21
32
|
}
|
|
22
33
|
create(level, totalThoughts) {
|
|
34
|
+
this.evictIfAtCapacity();
|
|
23
35
|
const config = LEVEL_CONFIGS[level];
|
|
24
36
|
const now = Date.now();
|
|
25
37
|
const session = {
|
|
26
38
|
id: randomUUID(),
|
|
27
39
|
level,
|
|
40
|
+
status: 'active',
|
|
28
41
|
thoughts: [],
|
|
29
|
-
totalThoughts,
|
|
42
|
+
totalThoughts: totalThoughts ?? config.minThoughts,
|
|
30
43
|
tokenBudget: config.tokenBudget,
|
|
31
44
|
tokensUsed: 0,
|
|
32
45
|
createdAt: now,
|
|
33
46
|
updatedAt: now,
|
|
34
47
|
};
|
|
35
48
|
this.sessions.set(session.id, session);
|
|
36
|
-
|
|
37
|
-
|
|
49
|
+
this.addToOrder(session.id);
|
|
50
|
+
this.sortedSessionIdsCache = null;
|
|
51
|
+
this.emitSessionsListChanged();
|
|
52
|
+
this.emitSessionsResourceUpdated();
|
|
53
|
+
return this.snapshotSession(session);
|
|
38
54
|
}
|
|
39
55
|
get(id) {
|
|
40
|
-
|
|
56
|
+
const session = this.sessions.get(id);
|
|
57
|
+
return session ? this.snapshotSession(session) : undefined;
|
|
41
58
|
}
|
|
42
59
|
list() {
|
|
43
|
-
|
|
60
|
+
this.sortedSessionIdsCache ??= this.buildSortedSessionIdsCache();
|
|
61
|
+
const sessions = [];
|
|
62
|
+
for (const sessionId of this.sortedSessionIdsCache) {
|
|
63
|
+
const session = this.sessions.get(sessionId);
|
|
64
|
+
if (session) {
|
|
65
|
+
sessions.push(this.snapshotSession(session));
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
return sessions;
|
|
44
69
|
}
|
|
45
70
|
getTtlMs() {
|
|
46
71
|
return this.ttlMs;
|
|
@@ -52,31 +77,39 @@ export class SessionStore {
|
|
|
52
77
|
}
|
|
53
78
|
return session.updatedAt + this.ttlMs;
|
|
54
79
|
}
|
|
80
|
+
getTotalTokensUsed() {
|
|
81
|
+
return this.totalTokens;
|
|
82
|
+
}
|
|
55
83
|
delete(id) {
|
|
56
|
-
const
|
|
57
|
-
if (
|
|
58
|
-
|
|
59
|
-
engineEvents.emit('resources:changed', { uri: 'reasoning://sessions' });
|
|
84
|
+
const session = this.deleteSessionInternal(id);
|
|
85
|
+
if (!session) {
|
|
86
|
+
return false;
|
|
60
87
|
}
|
|
61
|
-
|
|
88
|
+
engineEvents.emit('session:deleted', { sessionId: id });
|
|
89
|
+
this.emitSessionsListChanged();
|
|
90
|
+
this.emitSessionsResourceUpdated();
|
|
91
|
+
return true;
|
|
62
92
|
}
|
|
63
93
|
addThought(sessionId, content) {
|
|
64
94
|
const session = this.sessions.get(sessionId);
|
|
65
95
|
if (!session) {
|
|
66
96
|
throw new Error(`Session not found: ${sessionId}`);
|
|
67
97
|
}
|
|
98
|
+
const tokens = estimateTokens(content);
|
|
99
|
+
this.evictForTokenHeadroom(tokens, sessionId);
|
|
68
100
|
const thought = {
|
|
69
101
|
index: session.thoughts.length,
|
|
70
102
|
content,
|
|
71
103
|
revision: 0,
|
|
72
104
|
};
|
|
73
105
|
session.thoughts.push(thought);
|
|
74
|
-
session.tokensUsed +=
|
|
106
|
+
session.tokensUsed += tokens;
|
|
107
|
+
this.totalTokens += tokens;
|
|
75
108
|
session.updatedAt = Date.now();
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
return thought;
|
|
109
|
+
this.touchOrder(session.id);
|
|
110
|
+
this.sortedSessionIdsCache = null;
|
|
111
|
+
this.emitSessionResourcesUpdated(sessionId);
|
|
112
|
+
return this.snapshotThought(thought);
|
|
80
113
|
}
|
|
81
114
|
reviseThought(sessionId, thoughtIndex, content) {
|
|
82
115
|
const session = this.sessions.get(sessionId);
|
|
@@ -88,33 +121,241 @@ export class SessionStore {
|
|
|
88
121
|
throw new Error(`Thought index ${String(thoughtIndex)} not found in session ${sessionId}`);
|
|
89
122
|
}
|
|
90
123
|
const oldTokens = estimateTokens(existing.content);
|
|
124
|
+
const newTokens = estimateTokens(content);
|
|
125
|
+
const delta = newTokens - oldTokens;
|
|
126
|
+
if (delta > 0) {
|
|
127
|
+
this.evictForTokenHeadroom(delta, sessionId);
|
|
128
|
+
}
|
|
91
129
|
const revised = {
|
|
92
130
|
index: thoughtIndex,
|
|
93
131
|
content,
|
|
94
132
|
revision: existing.revision + 1,
|
|
95
133
|
};
|
|
96
134
|
session.thoughts[thoughtIndex] = revised;
|
|
97
|
-
session.tokensUsed =
|
|
98
|
-
|
|
135
|
+
session.tokensUsed = session.tokensUsed - oldTokens + newTokens;
|
|
136
|
+
this.totalTokens += delta;
|
|
99
137
|
session.updatedAt = Date.now();
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
return revised;
|
|
138
|
+
this.touchOrder(session.id);
|
|
139
|
+
this.sortedSessionIdsCache = null;
|
|
140
|
+
this.emitSessionResourcesUpdated(sessionId);
|
|
141
|
+
return this.snapshotThought(revised);
|
|
142
|
+
}
|
|
143
|
+
markCompleted(sessionId) {
|
|
144
|
+
const session = this.sessions.get(sessionId);
|
|
145
|
+
if (session?.status === 'active') {
|
|
146
|
+
session.status = 'completed';
|
|
147
|
+
session.updatedAt = Date.now();
|
|
148
|
+
this.touchOrder(session.id);
|
|
149
|
+
this.sortedSessionIdsCache = null;
|
|
150
|
+
this.emitSessionResourcesUpdated(sessionId);
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
markCancelled(sessionId) {
|
|
154
|
+
const session = this.sessions.get(sessionId);
|
|
155
|
+
if (session?.status === 'active') {
|
|
156
|
+
session.status = 'cancelled';
|
|
157
|
+
session.updatedAt = Date.now();
|
|
158
|
+
this.touchOrder(session.id);
|
|
159
|
+
this.sortedSessionIdsCache = null;
|
|
160
|
+
this.emitSessionResourcesUpdated(sessionId);
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
evictIfAtCapacity() {
|
|
164
|
+
while (this.sessions.size >= this.maxSessions) {
|
|
165
|
+
const oldest = this.findOldestSession();
|
|
166
|
+
if (!oldest)
|
|
167
|
+
break;
|
|
168
|
+
this.deleteSessionInternal(oldest.id);
|
|
169
|
+
engineEvents.emit('session:evicted', {
|
|
170
|
+
sessionId: oldest.id,
|
|
171
|
+
reason: 'max_sessions',
|
|
172
|
+
});
|
|
173
|
+
this.emitSessionsListChanged();
|
|
174
|
+
this.emitSessionsResourceUpdated();
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
evictForTokenHeadroom(neededTokens, protectedSessionId) {
|
|
178
|
+
while (this.totalTokens + neededTokens > this.maxTotalTokens &&
|
|
179
|
+
this.sessions.size > (protectedSessionId ? 1 : 0)) {
|
|
180
|
+
const oldest = this.findOldestSession(protectedSessionId);
|
|
181
|
+
if (!oldest)
|
|
182
|
+
break;
|
|
183
|
+
this.deleteSessionInternal(oldest.id);
|
|
184
|
+
engineEvents.emit('session:evicted', {
|
|
185
|
+
sessionId: oldest.id,
|
|
186
|
+
reason: 'max_total_tokens',
|
|
187
|
+
});
|
|
188
|
+
this.emitSessionsListChanged();
|
|
189
|
+
this.emitSessionsResourceUpdated();
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
findOldestSession(excludeId) {
|
|
193
|
+
let currentId = this.oldestSessionId;
|
|
194
|
+
while (currentId) {
|
|
195
|
+
if (currentId !== excludeId) {
|
|
196
|
+
return this.sessions.get(currentId);
|
|
197
|
+
}
|
|
198
|
+
currentId = this.sessionOrder.get(currentId)?.nextId;
|
|
199
|
+
}
|
|
200
|
+
return undefined;
|
|
104
201
|
}
|
|
105
202
|
sweep() {
|
|
106
203
|
const now = Date.now();
|
|
204
|
+
const expiredSessionIds = [];
|
|
107
205
|
let changed = false;
|
|
108
206
|
for (const session of this.sessions.values()) {
|
|
109
207
|
if (session.updatedAt + this.ttlMs < now) {
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
208
|
+
expiredSessionIds.push(session.id);
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
for (const sessionId of expiredSessionIds) {
|
|
212
|
+
if (!this.deleteSessionInternal(sessionId)) {
|
|
213
|
+
continue;
|
|
113
214
|
}
|
|
215
|
+
engineEvents.emit('session:expired', { sessionId });
|
|
216
|
+
changed = true;
|
|
114
217
|
}
|
|
115
218
|
if (changed) {
|
|
116
|
-
|
|
219
|
+
this.emitSessionsListChanged();
|
|
220
|
+
this.emitSessionsResourceUpdated();
|
|
221
|
+
}
|
|
222
|
+
}
|
|
223
|
+
buildSortedSessionIdsCache() {
|
|
224
|
+
const sortedSessionIds = [];
|
|
225
|
+
let currentId = this.newestSessionId;
|
|
226
|
+
while (currentId) {
|
|
227
|
+
if (this.sessions.has(currentId)) {
|
|
228
|
+
sortedSessionIds.push(currentId);
|
|
229
|
+
}
|
|
230
|
+
currentId = this.sessionOrder.get(currentId)?.prevId;
|
|
231
|
+
}
|
|
232
|
+
return sortedSessionIds;
|
|
233
|
+
}
|
|
234
|
+
addToOrder(sessionId) {
|
|
235
|
+
if (this.sessionOrder.has(sessionId)) {
|
|
236
|
+
this.touchOrder(sessionId);
|
|
237
|
+
return;
|
|
238
|
+
}
|
|
239
|
+
const node = { prevId: undefined, nextId: undefined };
|
|
240
|
+
if (this.newestSessionId) {
|
|
241
|
+
const newest = this.sessionOrder.get(this.newestSessionId);
|
|
242
|
+
if (newest) {
|
|
243
|
+
newest.nextId = sessionId;
|
|
244
|
+
}
|
|
245
|
+
node.prevId = this.newestSessionId;
|
|
246
|
+
}
|
|
247
|
+
else {
|
|
248
|
+
this.oldestSessionId = sessionId;
|
|
117
249
|
}
|
|
250
|
+
this.newestSessionId = sessionId;
|
|
251
|
+
this.sessionOrder.set(sessionId, node);
|
|
252
|
+
}
|
|
253
|
+
touchOrder(sessionId) {
|
|
254
|
+
if (this.newestSessionId === sessionId) {
|
|
255
|
+
return;
|
|
256
|
+
}
|
|
257
|
+
const node = this.sessionOrder.get(sessionId);
|
|
258
|
+
if (!node) {
|
|
259
|
+
this.addToOrder(sessionId);
|
|
260
|
+
return;
|
|
261
|
+
}
|
|
262
|
+
const { prevId, nextId } = node;
|
|
263
|
+
if (prevId) {
|
|
264
|
+
const previous = this.sessionOrder.get(prevId);
|
|
265
|
+
if (previous) {
|
|
266
|
+
previous.nextId = nextId;
|
|
267
|
+
}
|
|
268
|
+
}
|
|
269
|
+
else {
|
|
270
|
+
this.oldestSessionId = nextId;
|
|
271
|
+
}
|
|
272
|
+
if (nextId) {
|
|
273
|
+
const next = this.sessionOrder.get(nextId);
|
|
274
|
+
if (next) {
|
|
275
|
+
next.prevId = prevId;
|
|
276
|
+
}
|
|
277
|
+
}
|
|
278
|
+
node.prevId = this.newestSessionId;
|
|
279
|
+
node.nextId = undefined;
|
|
280
|
+
if (this.newestSessionId) {
|
|
281
|
+
const newest = this.sessionOrder.get(this.newestSessionId);
|
|
282
|
+
if (newest) {
|
|
283
|
+
newest.nextId = sessionId;
|
|
284
|
+
}
|
|
285
|
+
}
|
|
286
|
+
else {
|
|
287
|
+
this.oldestSessionId = sessionId;
|
|
288
|
+
}
|
|
289
|
+
this.newestSessionId = sessionId;
|
|
290
|
+
}
|
|
291
|
+
removeFromOrder(sessionId) {
|
|
292
|
+
const node = this.sessionOrder.get(sessionId);
|
|
293
|
+
if (!node) {
|
|
294
|
+
return;
|
|
295
|
+
}
|
|
296
|
+
const { prevId, nextId } = node;
|
|
297
|
+
if (prevId) {
|
|
298
|
+
const previous = this.sessionOrder.get(prevId);
|
|
299
|
+
if (previous) {
|
|
300
|
+
previous.nextId = nextId;
|
|
301
|
+
}
|
|
302
|
+
}
|
|
303
|
+
else {
|
|
304
|
+
this.oldestSessionId = nextId;
|
|
305
|
+
}
|
|
306
|
+
if (nextId) {
|
|
307
|
+
const next = this.sessionOrder.get(nextId);
|
|
308
|
+
if (next) {
|
|
309
|
+
next.prevId = prevId;
|
|
310
|
+
}
|
|
311
|
+
}
|
|
312
|
+
else {
|
|
313
|
+
this.newestSessionId = prevId;
|
|
314
|
+
}
|
|
315
|
+
this.sessionOrder.delete(sessionId);
|
|
316
|
+
}
|
|
317
|
+
deleteSessionInternal(id) {
|
|
318
|
+
const session = this.sessions.get(id);
|
|
319
|
+
if (!session) {
|
|
320
|
+
return undefined;
|
|
321
|
+
}
|
|
322
|
+
this.totalTokens -= session.tokensUsed;
|
|
323
|
+
this.sessions.delete(id);
|
|
324
|
+
this.removeFromOrder(id);
|
|
325
|
+
this.sortedSessionIdsCache = null;
|
|
326
|
+
return session;
|
|
327
|
+
}
|
|
328
|
+
snapshotThought(thought) {
|
|
329
|
+
return {
|
|
330
|
+
index: thought.index,
|
|
331
|
+
content: thought.content,
|
|
332
|
+
revision: thought.revision,
|
|
333
|
+
};
|
|
334
|
+
}
|
|
335
|
+
snapshotSession(session) {
|
|
336
|
+
return {
|
|
337
|
+
id: session.id,
|
|
338
|
+
level: session.level,
|
|
339
|
+
status: session.status,
|
|
340
|
+
thoughts: session.thoughts.map((thought) => this.snapshotThought(thought)),
|
|
341
|
+
totalThoughts: session.totalThoughts,
|
|
342
|
+
tokenBudget: session.tokenBudget,
|
|
343
|
+
tokensUsed: session.tokensUsed,
|
|
344
|
+
createdAt: session.createdAt,
|
|
345
|
+
updatedAt: session.updatedAt,
|
|
346
|
+
};
|
|
347
|
+
}
|
|
348
|
+
emitSessionsListChanged() {
|
|
349
|
+
engineEvents.emit('resources:changed', { uri: 'reasoning://sessions' });
|
|
350
|
+
}
|
|
351
|
+
emitSessionsResourceUpdated() {
|
|
352
|
+
engineEvents.emit('resource:updated', { uri: 'reasoning://sessions' });
|
|
353
|
+
}
|
|
354
|
+
emitSessionResourcesUpdated(sessionId) {
|
|
355
|
+
engineEvents.emit('resource:updated', {
|
|
356
|
+
uri: `reasoning://sessions/${sessionId}`,
|
|
357
|
+
});
|
|
358
|
+
this.emitSessionsResourceUpdated();
|
|
118
359
|
}
|
|
119
360
|
}
|
|
120
361
|
//# sourceMappingURL=session-store.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session-store.js","sourceRoot":"","sources":["../../src/engine/session-store.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AASzC,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAE3C,MAAM,cAAc,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC,aAAa;AAEpD,SAAS,cAAc,CAAC,IAAY;IAClC,MAAM,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IACnD,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,UAAU,GAAG,CAAC,CAAC,CAAC,CAAC;AAChD,CAAC;AAED,MAAM,OAAO,YAAY;IACN,QAAQ,GAAG,IAAI,GAAG,EAAmB,CAAC;IACtC,eAAe,CAAiB;IAChC,KAAK,CAAS;IAE/B,YAAY,QAAgB,cAAc;QACxC,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,MAAM,aAAa,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC;QAC5D,IAAI,CAAC,eAAe,GAAG,WAAW,CAAC,GAAG,EAAE;YACtC,IAAI,CAAC,KAAK,EAAE,CAAC;QACf,CAAC,EAAE,aAAa,CAAC,CAAC;QAClB,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE,CAAC;IAC/B,CAAC;IAED,MAAM,CAAC,KAAqB,EAAE,aAAqB;QACjD,MAAM,MAAM,GAAgB,aAAa,CAAC,KAAK,CAAC,CAAC;QACjD,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACvB,MAAM,OAAO,GAAY;YACvB,EAAE,EAAE,UAAU,EAAE;YAChB,KAAK;YACL,QAAQ,EAAE,EAAE;YACZ,aAAa;YACb,WAAW,EAAE,MAAM,CAAC,WAAW;YAC/B,UAAU,EAAE,CAAC;YACb,SAAS,EAAE,GAAG;YACd,SAAS,EAAE,GAAG;SACf,CAAC;QACF,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC;QACvC,YAAY,CAAC,IAAI,CAAC,mBAAmB,EAAE,EAAE,GAAG,EAAE,sBAAsB,EAAE,CAAC,CAAC;QACxE,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,GAAG,CAAC,EAAU;QACZ,OAAO,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAC/B,CAAC;IAED,IAAI;QACF,OAAO,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,CACrC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,GAAG,CAAC,CAAC,SAAS,CACpC,CAAC;IACJ,CAAC;IAED,QAAQ;QACN,OAAO,IAAI,CAAC,KAAK,CAAC;IACpB,CAAC;IAED,YAAY,CAAC,SAAiB;QAC5B,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QAC7C,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,OAAO,SAAS,CAAC;QACnB,CAAC;QACD,OAAO,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC;IACxC,CAAC;IAED,MAAM,CAAC,EAAU;QACf,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QACzC,IAAI,OAAO,EAAE,CAAC;YACZ,YAAY,CAAC,IAAI,CAAC,iBAAiB,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE,CAAC,CAAC;YACxD,YAAY,CAAC,IAAI,CAAC,mBAAmB,EAAE,EAAE,GAAG,EAAE,sBAAsB,EAAE,CAAC,CAAC;QAC1E,CAAC;QACD,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,UAAU,CAAC,SAAiB,EAAE,OAAe;QAC3C,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QAC7C,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,MAAM,IAAI,KAAK,CAAC,sBAAsB,SAAS,EAAE,CAAC,CAAC;QACrD,CAAC;QACD,MAAM,OAAO,GAAY;YACvB,KAAK,EAAE,OAAO,CAAC,QAAQ,CAAC,MAAM;YAC9B,OAAO;YACP,QAAQ,EAAE,CAAC;SACZ,CAAC;QACF,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAC/B,OAAO,CAAC,UAAU,IAAI,cAAc,CAAC,OAAO,CAAC,CAAC;QAC9C,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAC/B,YAAY,CAAC,IAAI,CAAC,kBAAkB,EAAE;YACpC,GAAG,EAAE,wBAAwB,SAAS,EAAE;SACzC,CAAC,CAAC;QACH,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,aAAa,CACX,SAAiB,EACjB,YAAoB,EACpB,OAAe;QAEf,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QAC7C,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,MAAM,IAAI,KAAK,CAAC,sBAAsB,SAAS,EAAE,CAAC,CAAC;QACrD,CAAC;QACD,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC;QAChD,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,MAAM,IAAI,KAAK,CACb,iBAAiB,MAAM,CAAC,YAAY,CAAC,yBAAyB,SAAS,EAAE,CAC1E,CAAC;QACJ,CAAC;QACD,MAAM,SAAS,GAAG,cAAc,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;QACnD,MAAM,OAAO,GAAY;YACvB,KAAK,EAAE,YAAY;YACnB,OAAO;YACP,QAAQ,EAAE,QAAQ,CAAC,QAAQ,GAAG,CAAC;SAChC,CAAC;QACF,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAC,GAAG,OAAO,CAAC;QACzC,OAAO,CAAC,UAAU;YAChB,OAAO,CAAC,UAAU,GAAG,SAAS,GAAG,cAAc,CAAC,OAAO,CAAC,CAAC;QAC3D,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAC/B,YAAY,CAAC,IAAI,CAAC,kBAAkB,EAAE;YACpC,GAAG,EAAE,wBAAwB,SAAS,EAAE;SACzC,CAAC,CAAC;QACH,OAAO,OAAO,CAAC;IACjB,CAAC;IAEO,KAAK;QACX,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACvB,IAAI,OAAO,GAAG,KAAK,CAAC;QACpB,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,EAAE,CAAC;YAC7C,IAAI,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC,KAAK,GAAG,GAAG,EAAE,CAAC;gBACzC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;gBACjC,YAAY,CAAC,IAAI,CAAC,iBAAiB,EAAE,EAAE,SAAS,EAAE,OAAO,CAAC,EAAE,EAAE,CAAC,CAAC;gBAChE,OAAO,GAAG,IAAI,CAAC;YACjB,CAAC;QACH,CAAC;QACD,IAAI,OAAO,EAAE,CAAC;YACZ,YAAY,CAAC,IAAI,CAAC,mBAAmB,EAAE,EAAE,GAAG,EAAE,sBAAsB,EAAE,CAAC,CAAC;QAC1E,CAAC;IACH,CAAC;CACF"}
|
|
1
|
+
{"version":3,"file":"session-store.js","sourceRoot":"","sources":["../../src/engine/session-store.ts"],"names":[],"mappings":"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"}
|