@auxiora/sessions 1.0.0 → 1.3.0

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.
@@ -0,0 +1,12 @@
1
+ import type { Message } from './types.js';
2
+ /** Injected function that summarizes text using an AI provider. */
3
+ export type SummarizeFn = (prompt: string) => Promise<string>;
4
+ /**
5
+ * Summarize a list of messages using AI with progressive fallback.
6
+ *
7
+ * 1. Try summarizing all messages in one call.
8
+ * 2. If too large, chunk into groups and summarize each, then merge.
9
+ * 3. If all calls fail, return a size-only description.
10
+ */
11
+ export declare function summarizeMessages(messages: Message[], summarize: SummarizeFn): Promise<string>;
12
+ //# sourceMappingURL=compaction-summarizer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"compaction-summarizer.d.ts","sourceRoot":"","sources":["../src/compaction-summarizer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAE1C,mEAAmE;AACnE,MAAM,MAAM,WAAW,GAAG,CAAC,MAAM,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;AAK9D;;;;;;GAMG;AACH,wBAAsB,iBAAiB,CACrC,QAAQ,EAAE,OAAO,EAAE,EACnB,SAAS,EAAE,WAAW,GACrB,OAAO,CAAC,MAAM,CAAC,CAsBjB"}
@@ -0,0 +1,81 @@
1
+ /** Max chars to include in a single summarization prompt. */
2
+ const MAX_PROMPT_CHARS = 50_000;
3
+ /**
4
+ * Summarize a list of messages using AI with progressive fallback.
5
+ *
6
+ * 1. Try summarizing all messages in one call.
7
+ * 2. If too large, chunk into groups and summarize each, then merge.
8
+ * 3. If all calls fail, return a size-only description.
9
+ */
10
+ export async function summarizeMessages(messages, summarize) {
11
+ if (messages.length === 0) {
12
+ return '[0 messages — nothing to summarize]';
13
+ }
14
+ const formatted = formatMessages(messages);
15
+ // Tier 1: Try single-call summarization
16
+ if (formatted.length <= MAX_PROMPT_CHARS) {
17
+ try {
18
+ return await summarize(buildPrompt(formatted));
19
+ }
20
+ catch {
21
+ return sizeOnlyDescription(messages);
22
+ }
23
+ }
24
+ // Tier 2: Chunk and summarize
25
+ try {
26
+ return await chunkAndSummarize(messages, summarize);
27
+ }
28
+ catch {
29
+ return sizeOnlyDescription(messages);
30
+ }
31
+ }
32
+ function formatMessages(messages) {
33
+ return messages
34
+ .map((m) => `[${m.role}] ${m.content}`)
35
+ .join('\n');
36
+ }
37
+ function buildPrompt(formatted) {
38
+ return ('Summarize the following conversation concisely. ' +
39
+ 'Preserve key decisions, user preferences, established facts, and action items. ' +
40
+ 'Be factual and brief.\n\n' +
41
+ formatted);
42
+ }
43
+ async function chunkAndSummarize(messages, summarize) {
44
+ const chunks = [];
45
+ let current = [];
46
+ let currentLength = 0;
47
+ for (const msg of messages) {
48
+ const msgLength = msg.content.length + msg.role.length + 10;
49
+ if (currentLength + msgLength > MAX_PROMPT_CHARS && current.length > 0) {
50
+ chunks.push(current);
51
+ current = [];
52
+ currentLength = 0;
53
+ }
54
+ current.push(msg);
55
+ currentLength += msgLength;
56
+ }
57
+ if (current.length > 0)
58
+ chunks.push(current);
59
+ // Summarize each chunk
60
+ const chunkSummaries = [];
61
+ for (const chunk of chunks) {
62
+ const formatted = formatMessages(chunk);
63
+ const summary = await summarize(buildPrompt(formatted));
64
+ chunkSummaries.push(summary);
65
+ }
66
+ // Merge summaries
67
+ if (chunkSummaries.length === 1)
68
+ return chunkSummaries[0];
69
+ const mergePrompt = 'Merge these conversation summaries into one cohesive summary. ' +
70
+ 'Preserve key decisions, preferences, and facts.\n\n' +
71
+ chunkSummaries.map((s, i) => `Part ${i + 1}:\n${s}`).join('\n\n');
72
+ return await summarize(mergePrompt);
73
+ }
74
+ function sizeOnlyDescription(messages) {
75
+ const first = messages[0];
76
+ const last = messages[messages.length - 1];
77
+ const from = first ? new Date(first.timestamp).toISOString() : 'unknown';
78
+ const to = last ? new Date(last.timestamp).toISOString() : 'unknown';
79
+ return `[${messages.length} messages from ${from} to ${to} — summarization failed]`;
80
+ }
81
+ //# sourceMappingURL=compaction-summarizer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"compaction-summarizer.js","sourceRoot":"","sources":["../src/compaction-summarizer.ts"],"names":[],"mappings":"AAKA,6DAA6D;AAC7D,MAAM,gBAAgB,GAAG,MAAM,CAAC;AAEhC;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACrC,QAAmB,EACnB,SAAsB;IAEtB,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC1B,OAAO,qCAAqC,CAAC;IAC/C,CAAC;IAED,MAAM,SAAS,GAAG,cAAc,CAAC,QAAQ,CAAC,CAAC;IAE3C,wCAAwC;IACxC,IAAI,SAAS,CAAC,MAAM,IAAI,gBAAgB,EAAE,CAAC;QACzC,IAAI,CAAC;YACH,OAAO,MAAM,SAAS,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC,CAAC;QACjD,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,mBAAmB,CAAC,QAAQ,CAAC,CAAC;QACvC,CAAC;IACH,CAAC;IAED,8BAA8B;IAC9B,IAAI,CAAC;QACH,OAAO,MAAM,iBAAiB,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;IACtD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,mBAAmB,CAAC,QAAQ,CAAC,CAAC;IACvC,CAAC;AACH,CAAC;AAED,SAAS,cAAc,CAAC,QAAmB;IACzC,OAAO,QAAQ;SACZ,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,OAAO,EAAE,CAAC;SACtC,IAAI,CAAC,IAAI,CAAC,CAAC;AAChB,CAAC;AAED,SAAS,WAAW,CAAC,SAAiB;IACpC,OAAO,CACL,kDAAkD;QAClD,iFAAiF;QACjF,2BAA2B;QAC3B,SAAS,CACV,CAAC;AACJ,CAAC;AAED,KAAK,UAAU,iBAAiB,CAC9B,QAAmB,EACnB,SAAsB;IAEtB,MAAM,MAAM,GAAgB,EAAE,CAAC;IAC/B,IAAI,OAAO,GAAc,EAAE,CAAC;IAC5B,IAAI,aAAa,GAAG,CAAC,CAAC;IAEtB,KAAK,MAAM,GAAG,IAAI,QAAQ,EAAE,CAAC;QAC3B,MAAM,SAAS,GAAG,GAAG,CAAC,OAAO,CAAC,MAAM,GAAG,GAAG,CAAC,IAAI,CAAC,MAAM,GAAG,EAAE,CAAC;QAC5D,IAAI,aAAa,GAAG,SAAS,GAAG,gBAAgB,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACvE,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YACrB,OAAO,GAAG,EAAE,CAAC;YACb,aAAa,GAAG,CAAC,CAAC;QACpB,CAAC;QACD,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAClB,aAAa,IAAI,SAAS,CAAC;IAC7B,CAAC;IACD,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC;QAAE,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAE7C,uBAAuB;IACvB,MAAM,cAAc,GAAa,EAAE,CAAC;IACpC,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,MAAM,SAAS,GAAG,cAAc,CAAC,KAAK,CAAC,CAAC;QACxC,MAAM,OAAO,GAAG,MAAM,SAAS,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC,CAAC;QACxD,cAAc,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAC/B,CAAC;IAED,kBAAkB;IAClB,IAAI,cAAc,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,cAAc,CAAC,CAAC,CAAE,CAAC;IAE3D,MAAM,WAAW,GACf,gEAAgE;QAChE,qDAAqD;QACrD,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAEpE,OAAO,MAAM,SAAS,CAAC,WAAW,CAAC,CAAC;AACtC,CAAC;AAED,SAAS,mBAAmB,CAAC,QAAmB;IAC9C,MAAM,KAAK,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;IAC1B,MAAM,IAAI,GAAG,QAAQ,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IAC3C,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;IACzE,MAAM,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;IACrE,OAAO,IAAI,QAAQ,CAAC,MAAM,kBAAkB,IAAI,OAAO,EAAE,0BAA0B,CAAC;AACtF,CAAC"}
@@ -0,0 +1,19 @@
1
+ import type { Message } from './types.js';
2
+ /**
3
+ * Create a synthetic system message indicating omitted history.
4
+ * Returns undefined if no messages were omitted.
5
+ */
6
+ export declare function insertOmissionMarker(allCount: number, selectedCount: number): Message | undefined;
7
+ /**
8
+ * Truncate a message's content if it exceeds maxChars.
9
+ * Keeps the first 40% and last 40%, with a marker in between.
10
+ */
11
+ export declare function truncateLargeMessage(content: string, maxChars: number): string;
12
+ /**
13
+ * Apply progressive degradation to context messages.
14
+ *
15
+ * Tier 1: Insert omission marker if messages were dropped.
16
+ * Tier 2: Truncate individual messages exceeding maxMessageChars.
17
+ */
18
+ export declare function degradeContext(allMessages: Message[], selectedMessages: Message[], budget: number, maxMessageChars?: number): Message[];
19
+ //# sourceMappingURL=context-degradation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context-degradation.d.ts","sourceRoot":"","sources":["../src/context-degradation.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAE1C;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,GAAG,OAAO,GAAG,SAAS,CAWjG;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAQ9E;AAED;;;;;GAKG;AACH,wBAAgB,cAAc,CAC5B,WAAW,EAAE,OAAO,EAAE,EACtB,gBAAgB,EAAE,OAAO,EAAE,EAC3B,MAAM,EAAE,MAAM,EACd,eAAe,GAAE,MAAa,GAC7B,OAAO,EAAE,CAqBX"}
@@ -0,0 +1,56 @@
1
+ /**
2
+ * Create a synthetic system message indicating omitted history.
3
+ * Returns undefined if no messages were omitted.
4
+ */
5
+ export function insertOmissionMarker(allCount, selectedCount) {
6
+ const omitted = allCount - selectedCount;
7
+ if (omitted <= 0)
8
+ return undefined;
9
+ const plural = omitted === 1 ? 'message' : 'messages';
10
+ return {
11
+ id: `_omission_marker_${Date.now()}`,
12
+ role: 'system',
13
+ content: `[...${omitted} earlier ${plural} omitted...]`,
14
+ timestamp: Date.now(),
15
+ };
16
+ }
17
+ /**
18
+ * Truncate a message's content if it exceeds maxChars.
19
+ * Keeps the first 40% and last 40%, with a marker in between.
20
+ */
21
+ export function truncateLargeMessage(content, maxChars) {
22
+ if (content.length <= maxChars)
23
+ return content;
24
+ const headSize = Math.floor(maxChars * 0.4);
25
+ const tailSize = Math.floor(maxChars * 0.4);
26
+ const omitted = content.length - headSize - tailSize;
27
+ return `${content.slice(0, headSize)}\n[...truncated ${omitted} chars...]\n${content.slice(-tailSize)}`;
28
+ }
29
+ /**
30
+ * Apply progressive degradation to context messages.
31
+ *
32
+ * Tier 1: Insert omission marker if messages were dropped.
33
+ * Tier 2: Truncate individual messages exceeding maxMessageChars.
34
+ */
35
+ export function degradeContext(allMessages, selectedMessages, budget, maxMessageChars = 8000) {
36
+ // Tier 2: Truncate oversized messages
37
+ const truncated = selectedMessages.map((msg) => {
38
+ const newContent = truncateLargeMessage(msg.content, maxMessageChars);
39
+ if (newContent === msg.content)
40
+ return msg;
41
+ return { ...msg, content: newContent };
42
+ });
43
+ // Tier 1: Insert omission marker if messages were dropped
44
+ const marker = insertOmissionMarker(allMessages.length, selectedMessages.length);
45
+ if (!marker)
46
+ return truncated;
47
+ if (truncated.length === 0)
48
+ return [marker];
49
+ // Keep first 2 messages (context anchors), insert marker, then rest
50
+ // Ensure at least one message remains after the marker
51
+ const anchorCount = Math.min(2, Math.max(1, truncated.length - 1));
52
+ const anchors = truncated.slice(0, anchorCount);
53
+ const rest = truncated.slice(anchorCount);
54
+ return [...anchors, marker, ...rest];
55
+ }
56
+ //# sourceMappingURL=context-degradation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context-degradation.js","sourceRoot":"","sources":["../src/context-degradation.ts"],"names":[],"mappings":"AAEA;;;GAGG;AACH,MAAM,UAAU,oBAAoB,CAAC,QAAgB,EAAE,aAAqB;IAC1E,MAAM,OAAO,GAAG,QAAQ,GAAG,aAAa,CAAC;IACzC,IAAI,OAAO,IAAI,CAAC;QAAE,OAAO,SAAS,CAAC;IAEnC,MAAM,MAAM,GAAG,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,UAAU,CAAC;IACtD,OAAO;QACL,EAAE,EAAE,oBAAoB,IAAI,CAAC,GAAG,EAAE,EAAE;QACpC,IAAI,EAAE,QAAQ;QACd,OAAO,EAAE,OAAO,OAAO,YAAY,MAAM,cAAc;QACvD,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;KACtB,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,oBAAoB,CAAC,OAAe,EAAE,QAAgB;IACpE,IAAI,OAAO,CAAC,MAAM,IAAI,QAAQ;QAAE,OAAO,OAAO,CAAC;IAE/C,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,GAAG,GAAG,CAAC,CAAC;IAC5C,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,GAAG,GAAG,CAAC,CAAC;IAC5C,MAAM,OAAO,GAAG,OAAO,CAAC,MAAM,GAAG,QAAQ,GAAG,QAAQ,CAAC;IAErD,OAAO,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,QAAQ,CAAC,mBAAmB,OAAO,eAAe,OAAO,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC;AAC1G,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,cAAc,CAC5B,WAAsB,EACtB,gBAA2B,EAC3B,MAAc,EACd,kBAA0B,IAAI;IAE9B,sCAAsC;IACtC,MAAM,SAAS,GAAG,gBAAgB,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE;QAC7C,MAAM,UAAU,GAAG,oBAAoB,CAAC,GAAG,CAAC,OAAO,EAAE,eAAe,CAAC,CAAC;QACtE,IAAI,UAAU,KAAK,GAAG,CAAC,OAAO;YAAE,OAAO,GAAG,CAAC;QAC3C,OAAO,EAAE,GAAG,GAAG,EAAE,OAAO,EAAE,UAAU,EAAE,CAAC;IACzC,CAAC,CAAC,CAAC;IAEH,0DAA0D;IAC1D,MAAM,MAAM,GAAG,oBAAoB,CAAC,WAAW,CAAC,MAAM,EAAE,gBAAgB,CAAC,MAAM,CAAC,CAAC;IACjF,IAAI,CAAC,MAAM;QAAE,OAAO,SAAS,CAAC;IAE9B,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,CAAC,MAAM,CAAC,CAAC;IAE5C,oEAAoE;IACpE,uDAAuD;IACvD,MAAM,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC;IACnE,MAAM,OAAO,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,WAAW,CAAC,CAAC;IAChD,MAAM,IAAI,GAAG,SAAS,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;IAE1C,OAAO,CAAC,GAAG,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC,CAAC;AACvC,CAAC"}
package/dist/db.d.ts CHANGED
@@ -8,6 +8,7 @@ export declare class SessionDatabase {
8
8
  listChats(options?: ListChatsOptions): Chat[];
9
9
  renameChat(id: string, title: string): void;
10
10
  archiveChat(id: string): void;
11
+ updateChatMetadata(id: string, metadata: Record<string, unknown>): void;
11
12
  deleteChat(id: string): void;
12
13
  addMessage(chatId: string, msgId: string, role: string, content: string, timestamp: number, tokensIn?: number, tokensOut?: number): void;
13
14
  getMessages(chatId: string): Message[];
package/dist/db.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"db.d.ts","sourceRoot":"","sources":["../src/db.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAMlE,qBAAa,eAAe;IAC1B,OAAO,CAAC,EAAE,CAAe;gBAEb,MAAM,EAAE,MAAM;IAO1B,OAAO,CAAC,OAAO;IA+Bf,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI;IASnE,OAAO,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS;IAKrC,SAAS,CAAC,OAAO,CAAC,EAAE,gBAAgB,GAAG,IAAI,EAAE;IAS7C,UAAU,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI;IAI3C,WAAW,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI;IAI7B,UAAU,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI;IAM5B,UAAU,CACR,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,MAAM,EACf,SAAS,EAAE,MAAM,EACjB,QAAQ,CAAC,EAAE,MAAM,EACjB,SAAS,CAAC,EAAE,MAAM,GACjB,IAAI;IAOP,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,EAAE;IAItC,kBAAkB,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,EAAE;IAchE,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAOnC,sBAAsB,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI;IAW/D,gBAAgB,CACd,EAAE,EAAE,MAAM,EACV,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,MAAM,EACf,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM,EACjB,QAAQ,CAAC,EAAE,MAAM,GAChB,IAAI;IAQP,OAAO,CAAC,SAAS;IAYjB,OAAO,CAAC,YAAY;IAYpB,KAAK,IAAI,IAAI;CAGd"}
1
+ {"version":3,"file":"db.d.ts","sourceRoot":"","sources":["../src/db.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAMlE,qBAAa,eAAe;IAC1B,OAAO,CAAC,EAAE,CAAe;gBAEb,MAAM,EAAE,MAAM;IAO1B,OAAO,CAAC,OAAO;IA+Bf,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI;IASnE,OAAO,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS;IAKrC,SAAS,CAAC,OAAO,CAAC,EAAE,gBAAgB,GAAG,IAAI,EAAE;IAS7C,UAAU,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI;IAI3C,WAAW,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI;IAI7B,kBAAkB,CAAC,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;IAKvE,UAAU,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI;IAM5B,UAAU,CACR,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,MAAM,EACf,SAAS,EAAE,MAAM,EACjB,QAAQ,CAAC,EAAE,MAAM,EACjB,SAAS,CAAC,EAAE,MAAM,GACjB,IAAI;IAOP,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,EAAE;IAItC,kBAAkB,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,EAAE;IAchE,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAOnC,sBAAsB,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI;IAW/D,gBAAgB,CACd,EAAE,EAAE,MAAM,EACV,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,MAAM,EACf,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM,EACjB,QAAQ,CAAC,EAAE,MAAM,GAChB,IAAI;IAQP,OAAO,CAAC,SAAS;IAYjB,OAAO,CAAC,YAAY;IAYpB,KAAK,IAAI,IAAI;CAGd"}
package/dist/db.js CHANGED
@@ -1,5 +1,6 @@
1
1
  import { DatabaseSync } from 'node:sqlite';
2
2
  import * as crypto from 'node:crypto';
3
+ import { estimateTokens } from './token-estimator.js';
3
4
  function generateId() {
4
5
  return crypto.randomUUID();
5
6
  }
@@ -64,6 +65,10 @@ export class SessionDatabase {
64
65
  archiveChat(id) {
65
66
  this.db.prepare('UPDATE chats SET archived = 1, updated_at = ? WHERE id = ?').run(Date.now(), id);
66
67
  }
68
+ updateChatMetadata(id, metadata) {
69
+ this.db.prepare('UPDATE chats SET metadata = ?, updated_at = ? WHERE id = ?')
70
+ .run(JSON.stringify(metadata), Date.now(), id);
71
+ }
67
72
  deleteChat(id) {
68
73
  this.db.prepare('DELETE FROM chats WHERE id = ?').run(id);
69
74
  }
@@ -81,7 +86,7 @@ export class SessionDatabase {
81
86
  let tokenCount = 0;
82
87
  for (const row of rows) {
83
88
  const msg = this.rowToMessage(row);
84
- const msgTokens = Math.ceil(msg.content.length / 4);
89
+ const msgTokens = estimateTokens(msg.content);
85
90
  if (tokenCount + msgTokens > maxTokens)
86
91
  break;
87
92
  messages.unshift(msg);
package/dist/db.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"db.js","sourceRoot":"","sources":["../src/db.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"db.js","sourceRoot":"","sources":["../src/db.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -1,4 +1,8 @@
1
1
  export { SessionManager } from './manager.js';
2
2
  export { SessionDatabase } from './db.js';
3
+ export { estimateTokens } from './token-estimator.js';
3
4
  export type { Session, SessionConfig, SessionMetadata, Message, MessageRole, Chat, ListChatsOptions, } from './types.js';
5
+ export { sanitizeTranscript } from './sanitize-transcript.js';
6
+ export { degradeContext, insertOmissionMarker, truncateLargeMessage } from './context-degradation.js';
7
+ export { summarizeMessages, type SummarizeFn } from './compaction-summarizer.js';
4
8
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAC1C,YAAY,EACV,OAAO,EACP,aAAa,EACb,eAAe,EACf,OAAO,EACP,WAAW,EACX,IAAI,EACJ,gBAAgB,GACjB,MAAM,YAAY,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAC1C,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,YAAY,EACV,OAAO,EACP,aAAa,EACb,eAAe,EACf,OAAO,EACP,WAAW,EACX,IAAI,EACJ,gBAAgB,GACjB,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAC9D,OAAO,EAAE,cAAc,EAAE,oBAAoB,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AACtG,OAAO,EAAE,iBAAiB,EAAE,KAAK,WAAW,EAAE,MAAM,4BAA4B,CAAC"}
package/dist/index.js CHANGED
@@ -1,3 +1,7 @@
1
1
  export { SessionManager } from './manager.js';
2
2
  export { SessionDatabase } from './db.js';
3
+ export { estimateTokens } from './token-estimator.js';
4
+ export { sanitizeTranscript } from './sanitize-transcript.js';
5
+ export { degradeContext, insertOmissionMarker, truncateLargeMessage } from './context-degradation.js';
6
+ export { summarizeMessages } from './compaction-summarizer.js';
3
7
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAC1C,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAUtD,OAAO,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAC9D,OAAO,EAAE,cAAc,EAAE,oBAAoB,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AACtG,OAAO,EAAE,iBAAiB,EAAoB,MAAM,4BAA4B,CAAC"}
package/dist/manager.d.ts CHANGED
@@ -1,6 +1,21 @@
1
+ import type { SummarizeFn } from './compaction-summarizer.js';
1
2
  import type { Session, SessionConfig, Message, MessageRole, SessionMetadata, Chat, ListChatsOptions } from './types.js';
2
3
  export declare class SessionManager {
4
+ /** Fixed 20% safety margin for estimation inaccuracy. */
5
+ private static readonly SAFETY_MARGIN;
6
+ /** Reserved tokens for system prompt, tool definitions, etc. */
7
+ private static readonly SYSTEM_RESERVE;
8
+ /** Default output token reserve when not specified. */
9
+ private static readonly DEFAULT_OUTPUT_RESERVE;
10
+ /** Minimum effective budget before warning. */
11
+ private static readonly MIN_BUDGET_WARNING;
12
+ /** Minimum fraction of messages that must be dropped to trigger compaction. */
13
+ private static readonly COMPACTION_THRESHOLD;
14
+ /** Minimum cooldown between compaction attempts per session (ms). */
15
+ private static readonly COMPACTION_COOLDOWN_MS;
3
16
  private sessions;
17
+ private summarizer;
18
+ private compactionCooldowns;
4
19
  private config;
5
20
  private db;
6
21
  private sessionsDir;
@@ -19,7 +34,7 @@ export declare class SessionManager {
19
34
  output?: number;
20
35
  }): Promise<Message>;
21
36
  getMessages(sessionId: string): Message[];
22
- getContextMessages(sessionId: string, maxTokens?: number): Message[];
37
+ getContextMessages(sessionId: string, maxTokens?: number, outputReserve?: number): Message[];
23
38
  setSystemPrompt(sessionId: string, prompt: string): Promise<void>;
24
39
  save(_sessionId: string): Promise<void>;
25
40
  delete(sessionId: string): Promise<boolean>;
@@ -27,12 +42,16 @@ export declare class SessionManager {
27
42
  compact(sessionId: string, summary: string): Promise<void>;
28
43
  private cleanupExpired;
29
44
  getActiveSessions(): Session[];
45
+ getChat(chatId: string): Chat | undefined;
30
46
  createChat(title?: string): Chat;
31
47
  listChats(options?: ListChatsOptions): Chat[];
32
48
  renameChat(chatId: string, title: string): void;
33
49
  archiveChat(chatId: string): void;
50
+ updateChatMetadata(chatId: string, metadata: Record<string, unknown>): void;
34
51
  deleteChat(chatId: string): void;
35
52
  getChatMessages(chatId: string): Message[];
53
+ setSummarizer(fn: SummarizeFn): void;
54
+ private maybeAutoCompact;
36
55
  destroy(): void;
37
56
  }
38
57
  //# sourceMappingURL=manager.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"manager.d.ts","sourceRoot":"","sources":["../src/manager.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,OAAO,EAAE,aAAa,EAAE,OAAO,EAAE,WAAW,EAAE,eAAe,EAAE,IAAI,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAQxH,qBAAa,cAAc;IACzB,OAAO,CAAC,QAAQ,CAAmC;IACnD,OAAO,CAAC,MAAM,CAAgB;IAC9B,OAAO,CAAC,EAAE,CAAkB;IAC5B,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,eAAe,CAA+C;gBAE1D,MAAM,EAAE,aAAa;IAW3B,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAsD3B,MAAM,CAAC,QAAQ,EAAE,OAAO,CAAC,eAAe,CAAC,GAAG;QAAE,WAAW,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,OAAO,CAAC;IAsBtF,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC;IA2BxC,WAAW,CACf,GAAG,EAAE,MAAM,EACX,QAAQ,EAAE,OAAO,CAAC,eAAe,CAAC,GAAG;QAAE,WAAW,EAAE,MAAM,CAAA;KAAE,GAC3D,OAAO,CAAC,OAAO,CAAC;IAyCb,UAAU,CACd,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,WAAW,EACjB,OAAO,EAAE,MAAM,EACf,MAAM,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,GAC3C,OAAO,CAAC,OAAO,CAAC;IAuBnB,WAAW,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,EAAE;IAQzC,kBAAkB,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,EAAE;IAsB9D,eAAe,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAQjE,IAAI,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAIvC,MAAM,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAU3C,KAAK,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IASvC,OAAO,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAqBhE,OAAO,CAAC,cAAc;IAatB,iBAAiB,IAAI,OAAO,EAAE;IAM9B,UAAU,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI;IAIhC,SAAS,CAAC,OAAO,CAAC,EAAE,gBAAgB,GAAG,IAAI,EAAE;IAI7C,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI;IAI/C,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAKjC,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAKhC,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,EAAE;IAI1C,OAAO,IAAI,IAAI;CAQhB"}
1
+ {"version":3,"file":"manager.d.ts","sourceRoot":"","sources":["../src/manager.ts"],"names":[],"mappings":"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"}
package/dist/manager.js CHANGED
@@ -4,13 +4,30 @@ import * as crypto from 'node:crypto';
4
4
  import { getSessionsDir } from '@auxiora/core';
5
5
  import { audit } from '@auxiora/audit';
6
6
  import { SessionDatabase } from './db.js';
7
+ import { estimateTokens } from './token-estimator.js';
8
+ import { degradeContext } from './context-degradation.js';
9
+ import { summarizeMessages } from './compaction-summarizer.js';
7
10
  function generateMessageId() {
8
11
  const timestamp = Date.now().toString(36);
9
12
  const random = crypto.randomBytes(4).toString('hex');
10
13
  return `${timestamp}-${random}`;
11
14
  }
12
15
  export class SessionManager {
16
+ /** Fixed 20% safety margin for estimation inaccuracy. */
17
+ static SAFETY_MARGIN = 0.80;
18
+ /** Reserved tokens for system prompt, tool definitions, etc. */
19
+ static SYSTEM_RESERVE = 2000;
20
+ /** Default output token reserve when not specified. */
21
+ static DEFAULT_OUTPUT_RESERVE = 4096;
22
+ /** Minimum effective budget before warning. */
23
+ static MIN_BUDGET_WARNING = 4000;
24
+ /** Minimum fraction of messages that must be dropped to trigger compaction. */
25
+ static COMPACTION_THRESHOLD = 0.40;
26
+ /** Minimum cooldown between compaction attempts per session (ms). */
27
+ static COMPACTION_COOLDOWN_MS = 5 * 60 * 1000;
13
28
  sessions = new Map();
29
+ summarizer = null;
30
+ compactionCooldowns = new Map();
14
31
  config;
15
32
  db;
16
33
  sessionsDir;
@@ -158,25 +175,34 @@ export class SessionManager {
158
175
  // Fall back to DB
159
176
  return this.db.getMessages(sessionId);
160
177
  }
161
- getContextMessages(sessionId, maxTokens) {
162
- const limit = maxTokens || this.config.maxContextTokens;
178
+ getContextMessages(sessionId, maxTokens, outputReserve) {
179
+ const rawLimit = maxTokens || this.config.maxContextTokens;
180
+ const reserve = outputReserve ?? SessionManager.DEFAULT_OUTPUT_RESERVE;
181
+ const effectiveBudget = Math.max(rawLimit * SessionManager.SAFETY_MARGIN - reserve - SessionManager.SYSTEM_RESERVE, 0);
182
+ if (effectiveBudget < SessionManager.MIN_BUDGET_WARNING) {
183
+ console.warn(`[auxiora] Context budget very low (${Math.round(effectiveBudget)} tokens). ` +
184
+ `Consider increasing maxContextTokens (current: ${rawLimit}).`);
185
+ }
163
186
  // Try in-memory first
164
187
  const session = this.sessions.get(sessionId);
165
188
  if (session) {
166
- const messages = [];
189
+ const selected = [];
167
190
  let tokenCount = 0;
168
191
  for (let i = session.messages.length - 1; i >= 0; i--) {
169
192
  const msg = session.messages[i];
170
- const msgTokens = Math.ceil(msg.content.length / 4);
171
- if (tokenCount + msgTokens > limit)
193
+ const msgTokens = estimateTokens(msg.content);
194
+ if (tokenCount + msgTokens > effectiveBudget)
172
195
  break;
173
- messages.unshift(msg);
196
+ selected.unshift(msg);
174
197
  tokenCount += msgTokens;
175
198
  }
176
- return messages;
199
+ const degraded = degradeContext(session.messages, selected, effectiveBudget);
200
+ // Auto-compaction: fire-and-forget when too many messages dropped
201
+ this.maybeAutoCompact(sessionId, session.messages, selected);
202
+ return degraded;
177
203
  }
178
204
  // Fall back to DB
179
- return this.db.getContextMessages(sessionId, limit);
205
+ return this.db.getContextMessages(sessionId, effectiveBudget);
180
206
  }
181
207
  async setSystemPrompt(sessionId, prompt) {
182
208
  const session = await this.get(sessionId);
@@ -237,6 +263,9 @@ export class SessionManager {
237
263
  return Array.from(this.sessions.values());
238
264
  }
239
265
  // ── Chat management ──
266
+ getChat(chatId) {
267
+ return this.db.getChat(chatId);
268
+ }
240
269
  createChat(title) {
241
270
  return this.db.createChat(title ?? 'New Chat', 'webchat');
242
271
  }
@@ -250,6 +279,9 @@ export class SessionManager {
250
279
  this.db.archiveChat(chatId);
251
280
  this.sessions.delete(chatId);
252
281
  }
282
+ updateChatMetadata(chatId, metadata) {
283
+ this.db.updateChatMetadata(chatId, metadata);
284
+ }
253
285
  deleteChat(chatId) {
254
286
  this.db.deleteChat(chatId);
255
287
  this.sessions.delete(chatId);
@@ -257,6 +289,28 @@ export class SessionManager {
257
289
  getChatMessages(chatId) {
258
290
  return this.db.getMessages(chatId);
259
291
  }
292
+ setSummarizer(fn) {
293
+ this.summarizer = fn;
294
+ }
295
+ maybeAutoCompact(sessionId, allMessages, selected) {
296
+ if (!this.summarizer || !this.config.compactionEnabled)
297
+ return;
298
+ if (allMessages.length === 0)
299
+ return;
300
+ const droppedFraction = 1 - selected.length / allMessages.length;
301
+ if (droppedFraction < SessionManager.COMPACTION_THRESHOLD)
302
+ return;
303
+ // Debounce per session
304
+ const lastCompaction = this.compactionCooldowns.get(sessionId) ?? 0;
305
+ if (Date.now() - lastCompaction < SessionManager.COMPACTION_COOLDOWN_MS)
306
+ return;
307
+ this.compactionCooldowns.set(sessionId, Date.now());
308
+ const droppedMessages = allMessages.slice(0, allMessages.length - selected.length);
309
+ const summarizer = this.summarizer;
310
+ summarizeMessages(droppedMessages, summarizer)
311
+ .then((summary) => this.compact(sessionId, summary))
312
+ .catch(() => { });
313
+ }
260
314
  destroy() {
261
315
  if (this.cleanupInterval) {
262
316
  clearInterval(this.cleanupInterval);
@@ -1 +1 @@
1
- {"version":3,"file":"manager.js","sourceRoot":"","sources":["../src/manager.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"manager.js","sourceRoot":"","sources":["../src/manager.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,MAAM,MAAM,aAAa,CAAC;AACtC,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAC/C,OAAO,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAC;AACvC,OAAO,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAC1C,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAC1D,OAAO,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAC;AAI/D,SAAS,iBAAiB;IACxB,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;IAC1C,MAAM,MAAM,GAAG,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IACrD,OAAO,GAAG,SAAS,IAAI,MAAM,EAAE,CAAC;AAClC,CAAC;AAED,MAAM,OAAO,cAAc;IACzB,yDAAyD;IACjD,MAAM,CAAU,aAAa,GAAG,IAAI,CAAC;IAE7C,gEAAgE;IACxD,MAAM,CAAU,cAAc,GAAG,IAAI,CAAC;IAE9C,uDAAuD;IAC/C,MAAM,CAAU,sBAAsB,GAAG,IAAI,CAAC;IAEtD,+CAA+C;IACvC,MAAM,CAAU,kBAAkB,GAAG,IAAI,CAAC;IAElD,+EAA+E;IACvE,MAAM,CAAU,oBAAoB,GAAG,IAAI,CAAC;IAEpD,qEAAqE;IAC7D,MAAM,CAAU,sBAAsB,GAAG,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC;IAEvD,QAAQ,GAAyB,IAAI,GAAG,EAAE,CAAC;IAC3C,UAAU,GAAuB,IAAI,CAAC;IACtC,mBAAmB,GAAwB,IAAI,GAAG,EAAE,CAAC;IACrD,MAAM,CAAgB;IACtB,EAAE,CAAkB;IACpB,WAAW,CAAS;IACpB,eAAe,GAA0C,IAAI,CAAC;IAEtE,YAAY,MAAqB;QAC/B,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,WAAW,GAAG,MAAM,CAAC,WAAW,IAAI,cAAc,EAAE,CAAC;QAC1D,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,aAAa,CAAC,CAAC;QAC3E,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QACxD,IAAI,CAAC,EAAE,GAAG,IAAI,eAAe,CAAC,MAAM,CAAC,CAAC;QAEtC,uEAAuE;QACvE,IAAI,CAAC,eAAe,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,cAAc,EAAE,EAAE,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC;IACjF,CAAC;IAED,KAAK,CAAC,UAAU;QACd,8CAA8C;QAC9C,IAAI,KAAe,CAAC;QACpB,IAAI,CAAC;YACH,KAAK,GAAG,EAAE,CAAC,WAAW,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC;QAC5E,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,CAAC,0CAA0C;QACpD,CAAC;QAED,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO;QAE/B,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,UAAU,CAAC,CAAC;QAC5D,EAAE,CAAC,SAAS,CAAC,WAAW,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAE/C,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC;YACnD,IAAI,CAAC;gBACH,MAAM,GAAG,GAAG,EAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;gBAC/C,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAI1B,CAAC;gBAEF,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,WAAW,KAAK,SAAS,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,WAAW,UAAU,CAAC;gBAC5G,IAAI,CAAC,EAAE,CAAC,gBAAgB,CACtB,IAAI,CAAC,EAAE,EACP,KAAK,EACL,IAAI,CAAC,QAAQ,CAAC,WAAW,EACzB,IAAI,CAAC,QAAQ,CAAC,SAAS,EACvB,IAAI,CAAC,QAAQ,CAAC,YAAY,EAC1B,IAAI,CAAC,QAAQ,CAAC,QAAQ,CACvB,CAAC;gBAEF,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;oBAChC,IAAI,CAAC,EAAE,CAAC,UAAU,CAChB,IAAI,CAAC,EAAE,EACP,GAAG,CAAC,EAAE,EACN,GAAG,CAAC,IAAI,EACR,GAAG,CAAC,OAAO,EACX,GAAG,CAAC,SAAS,EACb,GAAG,CAAC,MAAM,EAAE,KAAK,EACjB,GAAG,CAAC,MAAM,EAAE,MAAM,CACnB,CAAC;gBACJ,CAAC;gBAED,6BAA6B;gBAC7B,EAAE,CAAC,UAAU,CAAC,QAAQ,EAAE,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC,CAAC;YACxD,CAAC;YAAC,MAAM,CAAC;gBACP,2CAA2C;YAC7C,CAAC;QACH,CAAC;IACH,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,QAA4D;QACvE,MAAM,KAAK,GAAG,QAAQ,CAAC,WAAW,KAAK,SAAS,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,WAAW,UAAU,CAAC;QAClG,MAAM,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,KAAK,EAAE,QAAQ,CAAC,WAAW,EAAE,QAAQ,CAAC,QAAQ,CAAC,CAAC;QAEhF,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACvB,MAAM,OAAO,GAAY;YACvB,EAAE,EAAE,IAAI,CAAC,EAAE;YACX,QAAQ,EAAE,EAAE;YACZ,QAAQ,EAAE;gBACR,WAAW,EAAE,QAAQ,CAAC,WAAW;gBACjC,QAAQ,EAAE,QAAQ,CAAC,QAAQ;gBAC3B,QAAQ,EAAE,QAAQ,CAAC,QAAQ;gBAC3B,SAAS,EAAE,GAAG;gBACd,YAAY,EAAE,GAAG;aAClB;SACF,CAAC;QAEF,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC;QACpC,MAAM,KAAK,CAAC,iBAAiB,EAAE,EAAE,SAAS,EAAE,IAAI,CAAC,EAAE,EAAE,WAAW,EAAE,QAAQ,CAAC,WAAW,EAAE,CAAC,CAAC;QAC1F,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,KAAK,CAAC,GAAG,CAAC,EAAU;QAClB,wBAAwB;QACxB,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC;YAC1B,OAAO,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAE,CAAC;QAChC,CAAC;QAED,WAAW;QACX,MAAM,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QACjC,IAAI,CAAC,IAAI;YAAE,OAAO,IAAI,CAAC;QAEvB,MAAM,QAAQ,GAAG,IAAI,CAAC,EAAE,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;QACzC,MAAM,OAAO,GAAY;YACvB,EAAE,EAAE,IAAI,CAAC,EAAE;YACX,QAAQ;YACR,QAAQ,EAAE;gBACR,WAAW,EAAE,IAAI,CAAC,OAAO;gBACzB,QAAQ,EAAG,IAAI,CAAC,QAAQ,EAAE,QAA+B;gBACzD,QAAQ,EAAG,IAAI,CAAC,QAAQ,EAAE,QAA+B;gBACzD,SAAS,EAAE,IAAI,CAAC,SAAS;gBACzB,YAAY,EAAE,IAAI,CAAC,SAAS;aAC7B;SACF,CAAC;QAEF,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC;QAC/B,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,KAAK,CAAC,WAAW,CACf,GAAW,EACX,QAA4D;QAE5D,8BAA8B;QAC9B,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,EAAE,CAAC;YAC7C,IACE,OAAO,CAAC,QAAQ,CAAC,QAAQ,KAAK,QAAQ,CAAC,QAAQ;gBAC/C,OAAO,CAAC,QAAQ,CAAC,WAAW,KAAK,QAAQ,CAAC,WAAW,EACrD,CAAC;gBACD,OAAO,CAAC,QAAQ,CAAC,YAAY,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;gBAC3C,OAAO,OAAO,CAAC;YACjB,CAAC;QACH,CAAC;QAED,WAAW;QACX,IAAI,QAAQ,CAAC,QAAQ,EAAE,CAAC;YACtB,MAAM,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC,sBAAsB,CAAC,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC,WAAW,CAAC,CAAC;YACrF,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAC5C,IAAI,QAAQ,EAAE,CAAC;gBACb,QAAQ,CAAC,QAAQ,CAAC,YAAY,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;gBAC5C,OAAO,QAAQ,CAAC;YAClB,CAAC;YAED,MAAM,QAAQ,GAAG,IAAI,CAAC,EAAE,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAC9C,MAAM,OAAO,GAAY;gBACvB,EAAE,EAAE,IAAI,CAAC,EAAE;gBACX,QAAQ;gBACR,QAAQ,EAAE;oBACR,WAAW,EAAE,QAAQ,CAAC,WAAW;oBACjC,QAAQ,EAAE,QAAQ,CAAC,QAAQ;oBAC3B,QAAQ,EAAE,QAAQ,CAAC,QAAQ;oBAC3B,SAAS,EAAE,IAAI,CAAC,SAAS;oBACzB,YAAY,EAAE,IAAI,CAAC,GAAG,EAAE;iBACzB;aACF,CAAC;YACF,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC;YACpC,OAAO,OAAO,CAAC;QACjB,CAAC;QAED,2BAA2B;QAC3B,OAAO,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IAC/B,CAAC;IAED,KAAK,CAAC,UAAU,CACd,SAAiB,EACjB,IAAiB,EACjB,OAAe,EACf,MAA4C;QAE5C,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QAC1C,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,MAAM,IAAI,KAAK,CAAC,sBAAsB,SAAS,EAAE,CAAC,CAAC;QACrD,CAAC;QAED,MAAM,OAAO,GAAY;YACvB,EAAE,EAAE,iBAAiB,EAAE;YACvB,IAAI;YACJ,OAAO;YACP,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;YACrB,MAAM;SACP,CAAC;QAEF,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAC/B,OAAO,CAAC,QAAQ,CAAC,YAAY,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAE3C,gBAAgB;QAChB,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,SAAS,EAAE,OAAO,CAAC,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;QAE3G,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,WAAW,CAAC,SAAiB;QAC3B,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QAC7C,IAAI,OAAO;YAAE,OAAO,OAAO,CAAC,QAAQ,CAAC;QAErC,kBAAkB;QAClB,OAAO,IAAI,CAAC,EAAE,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC;IACxC,CAAC;IAED,kBAAkB,CAAC,SAAiB,EAAE,SAAkB,EAAE,aAAsB;QAC9E,MAAM,QAAQ,GAAG,SAAS,IAAI,IAAI,CAAC,MAAM,CAAC,gBAAgB,CAAC;QAC3D,MAAM,OAAO,GAAG,aAAa,IAAI,cAAc,CAAC,sBAAsB,CAAC;QACvE,MAAM,eAAe,GAAG,IAAI,CAAC,GAAG,CAC9B,QAAQ,GAAG,cAAc,CAAC,aAAa,GAAG,OAAO,GAAG,cAAc,CAAC,cAAc,EACjF,CAAC,CACF,CAAC;QAEF,IAAI,eAAe,GAAG,cAAc,CAAC,kBAAkB,EAAE,CAAC;YACxD,OAAO,CAAC,IAAI,CACV,sCAAsC,IAAI,CAAC,KAAK,CAAC,eAAe,CAAC,YAAY;gBAC7E,kDAAkD,QAAQ,IAAI,CAC/D,CAAC;QACJ,CAAC;QAED,sBAAsB;QACtB,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QAC7C,IAAI,OAAO,EAAE,CAAC;YACZ,MAAM,QAAQ,GAAc,EAAE,CAAC;YAC/B,IAAI,UAAU,GAAG,CAAC,CAAC;YACnB,KAAK,IAAI,CAAC,GAAG,OAAO,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;gBACtD,MAAM,GAAG,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;gBAChC,MAAM,SAAS,GAAG,cAAc,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;gBAC9C,IAAI,UAAU,GAAG,SAAS,GAAG,eAAe;oBAAE,MAAM;gBACpD,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;gBACtB,UAAU,IAAI,SAAS,CAAC;YAC1B,CAAC;YACD,MAAM,QAAQ,GAAG,cAAc,CAAC,OAAO,CAAC,QAAQ,EAAE,QAAQ,EAAE,eAAe,CAAC,CAAC;YAE7E,kEAAkE;YAClE,IAAI,CAAC,gBAAgB,CAAC,SAAS,EAAE,OAAO,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;YAE7D,OAAO,QAAQ,CAAC;QAClB,CAAC;QAED,kBAAkB;QAClB,OAAO,IAAI,CAAC,EAAE,CAAC,kBAAkB,CAAC,SAAS,EAAE,eAAe,CAAC,CAAC;IAChE,CAAC;IAED,KAAK,CAAC,eAAe,CAAC,SAAiB,EAAE,MAAc;QACrD,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QAC1C,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,MAAM,IAAI,KAAK,CAAC,sBAAsB,SAAS,EAAE,CAAC,CAAC;QACrD,CAAC;QACD,OAAO,CAAC,YAAY,GAAG,MAAM,CAAC;IAChC,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,UAAkB;QAC3B,2CAA2C;IAC7C,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,SAAiB;QAC5B,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;QAChD,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;QAE9B,IAAI,OAAO,EAAE,CAAC;YACZ,MAAM,KAAK,CAAC,mBAAmB,EAAE,EAAE,SAAS,EAAE,CAAC,CAAC;QAClD,CAAC;QACD,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,KAAK,CAAC,KAAK,CAAC,SAAiB;QAC3B,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QAC1C,IAAI,CAAC,OAAO;YAAE,OAAO;QAErB,OAAO,CAAC,QAAQ,GAAG,EAAE,CAAC;QACtB,OAAO,CAAC,QAAQ,CAAC,YAAY,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAC3C,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC;IACnC,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,SAAiB,EAAE,OAAe;QAC9C,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QAC1C,IAAI,CAAC,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,iBAAiB;YAAE,OAAO;QAEvD,MAAM,aAAa,GAAG,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC;QAC9C,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC;QAEjC,MAAM,cAAc,GAAY;YAC9B,EAAE,EAAE,iBAAiB,EAAE;YACvB,IAAI,EAAE,QAAQ;YACd,OAAO,EAAE,oCAAoC,OAAO,EAAE;YACtD,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;SACtB,CAAC;QAEF,OAAO,CAAC,QAAQ,GAAG,CAAC,cAAc,CAAC,CAAC;QACpC,OAAO,CAAC,QAAQ,CAAC,YAAY,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAC3C,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,SAAS,EAAE,cAAc,CAAC,EAAE,EAAE,QAAQ,EAAE,cAAc,CAAC,OAAO,EAAE,cAAc,CAAC,SAAS,CAAC,CAAC;QAE7G,MAAM,KAAK,CAAC,mBAAmB,EAAE,EAAE,SAAS,EAAE,aAAa,EAAE,CAAC,CAAC;IACjE,CAAC;IAEO,cAAc;QACpB,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACvB,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,UAAU,GAAG,EAAE,GAAG,IAAI,CAAC;QAEjD,KAAK,MAAM,CAAC,EAAE,EAAE,OAAO,CAAC,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YAC1C,+CAA+C;YAC/C,IAAI,OAAO,CAAC,QAAQ,CAAC,WAAW,KAAK,SAAS;gBAAE,SAAS;YACzD,IAAI,GAAG,GAAG,OAAO,CAAC,QAAQ,CAAC,YAAY,GAAG,KAAK,EAAE,CAAC;gBAChD,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;YAC3B,CAAC;QACH,CAAC;IACH,CAAC;IAED,iBAAiB;QACf,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;IAC5C,CAAC;IAED,wBAAwB;IAExB,OAAO,CAAC,MAAc;QACpB,OAAO,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IACjC,CAAC;IAED,UAAU,CAAC,KAAc;QACvB,OAAO,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,KAAK,IAAI,UAAU,EAAE,SAAS,CAAC,CAAC;IAC5D,CAAC;IAED,SAAS,CAAC,OAA0B;QAClC,OAAO,IAAI,CAAC,EAAE,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;IACpC,CAAC;IAED,UAAU,CAAC,MAAc,EAAE,KAAa;QACtC,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;IACpC,CAAC;IAED,WAAW,CAAC,MAAc;QACxB,IAAI,CAAC,EAAE,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;QAC5B,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IAC/B,CAAC;IAED,kBAAkB,CAAC,MAAc,EAAE,QAAiC;QAClE,IAAI,CAAC,EAAE,CAAC,kBAAkB,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;IAC/C,CAAC;IAED,UAAU,CAAC,MAAc;QACvB,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;QAC3B,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IAC/B,CAAC;IAED,eAAe,CAAC,MAAc;QAC5B,OAAO,IAAI,CAAC,EAAE,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;IACrC,CAAC;IAED,aAAa,CAAC,EAAe;QAC3B,IAAI,CAAC,UAAU,GAAG,EAAE,CAAC;IACvB,CAAC;IAEO,gBAAgB,CAAC,SAAiB,EAAE,WAAsB,EAAE,QAAmB;QACrF,IAAI,CAAC,IAAI,CAAC,UAAU,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,iBAAiB;YAAE,OAAO;QAC/D,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO;QAErC,MAAM,eAAe,GAAG,CAAC,GAAG,QAAQ,CAAC,MAAM,GAAG,WAAW,CAAC,MAAM,CAAC;QACjE,IAAI,eAAe,GAAG,cAAc,CAAC,oBAAoB;YAAE,OAAO;QAElE,uBAAuB;QACvB,MAAM,cAAc,GAAG,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;QACpE,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,cAAc,GAAG,cAAc,CAAC,sBAAsB;YAAE,OAAO;QAChF,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;QAEpD,MAAM,eAAe,GAAG,WAAW,CAAC,KAAK,CAAC,CAAC,EAAE,WAAW,CAAC,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC;QACnF,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC;QAEnC,iBAAiB,CAAC,eAAe,EAAE,UAAU,CAAC;aAC3C,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;aACnD,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;IACrB,CAAC;IAED,OAAO;QACL,IAAI,IAAI,CAAC,eAAe,EAAE,CAAC;YACzB,aAAa,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;YACpC,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC;QAC9B,CAAC;QACD,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC;QACtB,IAAI,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC;IAClB,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { Message } from './types.js';
2
+ export declare function sanitizeTranscript(messages: Message[]): Message[];
3
+ //# sourceMappingURL=sanitize-transcript.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sanitize-transcript.d.ts","sourceRoot":"","sources":["../src/sanitize-transcript.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAuD1C,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,OAAO,EAAE,GAAG,OAAO,EAAE,CAKjE"}
@@ -0,0 +1,50 @@
1
+ const TOOL_RESULTS_PREFIX = '[Tool Results]';
2
+ const TOOL_ANNOUNCE_PATTERN = /I'll use \S+/;
3
+ function dropEmpty(messages) {
4
+ return messages.filter((m) => m.content.trim().length > 0);
5
+ }
6
+ function dropTrailingOrphans(messages) {
7
+ const result = [...messages];
8
+ let changed = true;
9
+ while (changed && result.length > 0) {
10
+ changed = false;
11
+ const last = result[result.length - 1];
12
+ if (last.role === 'user' && last.content.startsWith(TOOL_RESULTS_PREFIX)) {
13
+ result.pop();
14
+ changed = true;
15
+ continue;
16
+ }
17
+ if (last.role === 'assistant' && TOOL_ANNOUNCE_PATTERN.test(last.content)) {
18
+ result.pop();
19
+ changed = true;
20
+ continue;
21
+ }
22
+ }
23
+ return result;
24
+ }
25
+ function mergeSameRole(messages) {
26
+ if (messages.length === 0)
27
+ return [];
28
+ const result = [messages[0]];
29
+ for (let i = 1; i < messages.length; i++) {
30
+ const prev = result[result.length - 1];
31
+ const curr = messages[i];
32
+ if (curr.role === prev.role) {
33
+ result[result.length - 1] = {
34
+ ...prev,
35
+ content: prev.content + '\n\n' + curr.content,
36
+ };
37
+ }
38
+ else {
39
+ result.push(curr);
40
+ }
41
+ }
42
+ return result;
43
+ }
44
+ export function sanitizeTranscript(messages) {
45
+ let result = dropEmpty(messages);
46
+ result = dropTrailingOrphans(result);
47
+ result = mergeSameRole(result);
48
+ return result;
49
+ }
50
+ //# sourceMappingURL=sanitize-transcript.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sanitize-transcript.js","sourceRoot":"","sources":["../src/sanitize-transcript.ts"],"names":[],"mappings":"AAEA,MAAM,mBAAmB,GAAG,gBAAgB,CAAC;AAC7C,MAAM,qBAAqB,GAAG,cAAc,CAAC;AAE7C,SAAS,SAAS,CAAC,QAAmB;IACpC,OAAO,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;AAC7D,CAAC;AAED,SAAS,mBAAmB,CAAC,QAAmB;IAC9C,MAAM,MAAM,GAAG,CAAC,GAAG,QAAQ,CAAC,CAAC;IAC7B,IAAI,OAAO,GAAG,IAAI,CAAC;IAEnB,OAAO,OAAO,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACpC,OAAO,GAAG,KAAK,CAAC;QAChB,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QAEvC,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM,IAAI,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,mBAAmB,CAAC,EAAE,CAAC;YACzE,MAAM,CAAC,GAAG,EAAE,CAAC;YACb,OAAO,GAAG,IAAI,CAAC;YACf,SAAS;QACX,CAAC;QAED,IAAI,IAAI,CAAC,IAAI,KAAK,WAAW,IAAI,qBAAqB,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;YAC1E,MAAM,CAAC,GAAG,EAAE,CAAC;YACb,OAAO,GAAG,IAAI,CAAC;YACf,SAAS;QACX,CAAC;IACH,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,aAAa,CAAC,QAAmB;IACxC,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IAErC,MAAM,MAAM,GAAc,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;IAExC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACzC,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QACvC,MAAM,IAAI,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;QAEzB,IAAI,IAAI,CAAC,IAAI,KAAK,IAAI,CAAC,IAAI,EAAE,CAAC;YAC5B,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG;gBAC1B,GAAG,IAAI;gBACP,OAAO,EAAE,IAAI,CAAC,OAAO,GAAG,MAAM,GAAG,IAAI,CAAC,OAAO;aAC9C,CAAC;QACJ,CAAC;aAAM,CAAC;YACN,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACpB,CAAC;IACH,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,QAAmB;IACpD,IAAI,MAAM,GAAG,SAAS,CAAC,QAAQ,CAAC,CAAC;IACjC,MAAM,GAAG,mBAAmB,CAAC,MAAM,CAAC,CAAC;IACrC,MAAM,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC;IAC/B,OAAO,MAAM,CAAC;AAChB,CAAC"}
@@ -0,0 +1,16 @@
1
+ /**
2
+ * Content-aware token estimation.
3
+ *
4
+ * Replaces the naive `content.length / 4` heuristic with content-type
5
+ * detection that applies tuned ratios for code, CJK text, and prose.
6
+ */
7
+ /**
8
+ * Estimate the number of tokens in a string using content-aware heuristics.
9
+ *
10
+ * Detects the proportion of CJK characters and code syntax characters,
11
+ * then applies a weighted blend of per-type ratios.
12
+ *
13
+ * @returns Estimated token count (minimum 1).
14
+ */
15
+ export declare function estimateTokens(content: string): number;
16
+ //# sourceMappingURL=token-estimator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"token-estimator.d.ts","sourceRoot":"","sources":["../src/token-estimator.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAuCH;;;;;;;GAOG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CA8BtD"}