@anvia/core 1.3.2 → 1.5.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.
Files changed (66) hide show
  1. package/README.md +30 -6
  2. package/dist/agent/agent.js +14 -14
  3. package/dist/agent/index.d.ts +5 -5
  4. package/dist/agent/index.js +17 -17
  5. package/dist/agent/resolve-options.js +5 -5
  6. package/dist/agent/resolved-agent.js +15 -15
  7. package/dist/agent/team/agent-team.js +17 -17
  8. package/dist/agent/team/index.js +17 -17
  9. package/dist/agent/tool-catalog.js +4 -4
  10. package/dist/{agent-D3iyrJQb.d.ts → agent-BUc18r6A.d.ts} +6 -2
  11. package/dist/{chunk-T4UW4SUK.js → chunk-35GMQS3R.js} +3 -3
  12. package/dist/{chunk-A3DGCDGF.js → chunk-AYN34XVW.js} +11 -11
  13. package/dist/{chunk-ZGDUEOSH.js → chunk-DXW37JLZ.js} +4 -4
  14. package/dist/{chunk-4BDSO4PQ.js → chunk-F4BOW76L.js} +2 -2
  15. package/dist/{chunk-GE46NHN4.js → chunk-FGOVEUVK.js} +37 -27
  16. package/dist/chunk-FGOVEUVK.js.map +1 -0
  17. package/dist/{chunk-VKRGWGA4.js → chunk-I7YCEQXT.js} +3 -3
  18. package/dist/{chunk-IYDGPF3C.js → chunk-MTJDYC6T.js} +3 -3
  19. package/dist/{chunk-KRUDSNFN.js → chunk-UEUSJ3UQ.js} +8 -8
  20. package/dist/{chunk-WCWSPU74.js → chunk-UYODZ7OE.js} +3 -3
  21. package/dist/{chunk-K4IBS7VB.js → chunk-WLUWRBQ4.js} +22 -8
  22. package/dist/chunk-WLUWRBQ4.js.map +1 -0
  23. package/dist/{chunk-JWD43K7W.js → chunk-XAVSWLX5.js} +4 -4
  24. package/dist/{chunk-KNZNSNP4.js → chunk-ZQC6M22O.js} +2 -2
  25. package/dist/evals/index.d.ts +2 -2
  26. package/dist/index.d.ts +3 -3
  27. package/dist/index.js +22 -22
  28. package/dist/internal/agent-runtime/agent-run.js +10 -10
  29. package/dist/internal/agent-runtime/memory.js +1 -1
  30. package/dist/internal/agent-runtime/retrieval.js +2 -2
  31. package/dist/internal/agent-runtime/tool-execution.js +4 -4
  32. package/dist/internal/agent.d.ts +3 -3
  33. package/dist/internal/agent.js +15 -15
  34. package/dist/internal/team-runtime/run.js +16 -16
  35. package/dist/memory/index.d.ts +2 -2
  36. package/dist/memory/index.js +1 -1
  37. package/dist/memory/options.js +1 -1
  38. package/dist/{middleware-DORuwSy-.d.ts → middleware-BxzML2hK.d.ts} +1 -1
  39. package/dist/observability/index.d.ts +2 -2
  40. package/dist/pipeline/index.d.ts +3 -3
  41. package/dist/pipeline/index.js +2 -2
  42. package/dist/pipeline/pipeline.js +2 -2
  43. package/dist/redaction/index.d.ts +39 -0
  44. package/dist/redaction/index.js +139 -0
  45. package/dist/redaction/index.js.map +1 -0
  46. package/dist/skills/index.js +4 -4
  47. package/dist/skills/load.js +4 -4
  48. package/dist/skills/tools.js +4 -4
  49. package/dist/tool/dynamic-tools.js +3 -3
  50. package/dist/tool/index.d.ts +2 -2
  51. package/dist/tool/index.js +6 -6
  52. package/dist/{types-DhWxTobb.d.ts → types-B8KBVXuH.d.ts} +20 -5
  53. package/dist/vector-store/index.js +5 -5
  54. package/package.json +5 -1
  55. package/dist/chunk-GE46NHN4.js.map +0 -1
  56. package/dist/chunk-K4IBS7VB.js.map +0 -1
  57. /package/dist/{chunk-T4UW4SUK.js.map → chunk-35GMQS3R.js.map} +0 -0
  58. /package/dist/{chunk-A3DGCDGF.js.map → chunk-AYN34XVW.js.map} +0 -0
  59. /package/dist/{chunk-ZGDUEOSH.js.map → chunk-DXW37JLZ.js.map} +0 -0
  60. /package/dist/{chunk-4BDSO4PQ.js.map → chunk-F4BOW76L.js.map} +0 -0
  61. /package/dist/{chunk-VKRGWGA4.js.map → chunk-I7YCEQXT.js.map} +0 -0
  62. /package/dist/{chunk-IYDGPF3C.js.map → chunk-MTJDYC6T.js.map} +0 -0
  63. /package/dist/{chunk-KRUDSNFN.js.map → chunk-UEUSJ3UQ.js.map} +0 -0
  64. /package/dist/{chunk-WCWSPU74.js.map → chunk-UYODZ7OE.js.map} +0 -0
  65. /package/dist/{chunk-JWD43K7W.js.map → chunk-XAVSWLX5.js.map} +0 -0
  66. /package/dist/{chunk-KNZNSNP4.js.map → chunk-ZQC6M22O.js.map} +0 -0
@@ -167,16 +167,31 @@ type CreateSummaryMemoryCompactorOptions = {
167
167
  type MemoryCompactionConflictRetryOptions = {
168
168
  maxAttempts: number;
169
169
  };
170
+ type MemoryCompactionRetention = {
171
+ /**
172
+ * Number of complete, user-led turns to keep unsummarized. A `user` message starts a turn;
173
+ * following assistant, tool, and system messages stay with it until the next user message.
174
+ *
175
+ * @default 1
176
+ */
177
+ recentTurns?: number | undefined;
178
+ recentTokens?: never;
179
+ } | {
180
+ /**
181
+ * Messages within this token budget of the end stay unsummarized.
182
+ *
183
+ * @deprecated Use `recentTurns`. Token retention remains available for compatibility.
184
+ */
185
+ recentTokens: number;
186
+ recentTurns?: never;
187
+ };
170
188
  /** When and how session memory is compacted. */
171
189
  type MemoryCompactionOptions = {
172
190
  trigger: {
173
191
  /** Compaction runs when the projected context exceeds this token count. */
174
192
  afterTokens: number;
175
193
  };
176
- retention?: {
177
- /** Messages within this token budget of the end stay unsummarized. */
178
- recentTokens?: number | undefined;
179
- };
194
+ retention?: MemoryCompactionRetention | undefined;
180
195
  /** Overrides the default approximate counter; use a model counter for exact budgets. */
181
196
  tokenCounter?: MemoryTokenCounter | undefined;
182
197
  compactor: MemoryCompactor;
@@ -211,4 +226,4 @@ type MemoryCompactionResult = ({
211
226
  originalTokenCount: number;
212
227
  };
213
228
 
214
- export type { MemoryScope as A, MemoryScopeKeyOptions as B, CreateMemoryScopeKeyOptions as C, MemoryScopeKeyResolver as D, MemoryStore as E, MemoryTokenCounter as F, MemoryAppendOptions as M, CreateSummaryMemoryCompactorOptions as a, MemoryClearOptions as b, MemoryCompactionCapability as c, MemoryCompactionConflictRetryOptions as d, MemoryCompactionInfo as e, MemoryCompactionMessage as f, MemoryCompactionMetadata as g, MemoryCompactionOptions as h, MemoryCompactionReplacePrefixOptions as i, MemoryCompactionReplacePrefixResult as j, MemoryCompactionResult as k, MemoryCompactionSnapshot as l, MemoryCompactionSnapshotOptions as m, MemoryCompactor as n, MemoryCompactorInput as o, MemoryCompactorResult as p, MemoryConversation as q, MemoryConversationGetOptions as r, MemoryConversationListOptions as s, MemoryConversationMessage as t, MemoryConversationSummary as u, MemoryErrorOptions as v, MemoryInspector as w, MemoryLoadOptions as x, MemoryOptions as y, MemorySavePolicy as z };
229
+ export type { MemorySavePolicy as A, MemoryScope as B, CreateMemoryScopeKeyOptions as C, MemoryScopeKeyOptions as D, MemoryScopeKeyResolver as E, MemoryStore as F, MemoryTokenCounter as G, MemoryAppendOptions as M, CreateSummaryMemoryCompactorOptions as a, MemoryClearOptions as b, MemoryCompactionCapability as c, MemoryCompactionConflictRetryOptions as d, MemoryCompactionInfo as e, MemoryCompactionMessage as f, MemoryCompactionMetadata as g, MemoryCompactionOptions as h, MemoryCompactionReplacePrefixOptions as i, MemoryCompactionReplacePrefixResult as j, MemoryCompactionResult as k, MemoryCompactionRetention as l, MemoryCompactionSnapshot as m, MemoryCompactionSnapshotOptions as n, MemoryCompactor as o, MemoryCompactorInput as p, MemoryCompactorResult as q, MemoryConversation as r, MemoryConversationGetOptions as s, MemoryConversationListOptions as t, MemoryConversationMessage as u, MemoryConversationSummary as v, MemoryErrorOptions as w, MemoryInspector as x, MemoryLoadOptions as y, MemoryOptions as z };
@@ -1,7 +1,11 @@
1
1
  import {
2
2
  InMemoryVectorStore,
3
3
  createVectorSearchTool
4
- } from "../chunk-JWD43K7W.js";
4
+ } from "../chunk-XAVSWLX5.js";
5
+ import {
6
+ matchesVectorFilter,
7
+ vectorFilter
8
+ } from "../chunk-5WLIHNNJ.js";
5
9
  import {
6
10
  ingestVectorDocuments,
7
11
  ingestVectorText
@@ -10,10 +14,6 @@ import "../chunk-ESOFEAYK.js";
10
14
  import {
11
15
  retrieveDocuments
12
16
  } from "../chunk-HAAGSIZH.js";
13
- import {
14
- matchesVectorFilter,
15
- vectorFilter
16
- } from "../chunk-5WLIHNNJ.js";
17
17
  import "../chunk-ERN7P6Q4.js";
18
18
  import "../chunk-7F53DOML.js";
19
19
  import "../chunk-HHMLE3TZ.js";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@anvia/core",
3
- "version": "1.3.2",
3
+ "version": "1.5.0",
4
4
  "description": "Core runtime primitives for context-aware Anvia agents.",
5
5
  "author": "anvia",
6
6
  "license": "MIT",
@@ -84,6 +84,10 @@
84
84
  "types": "./dist/pipeline/index.d.ts",
85
85
  "import": "./dist/pipeline/index.js"
86
86
  },
87
+ "./redaction": {
88
+ "types": "./dist/redaction/index.d.ts",
89
+ "import": "./dist/redaction/index.js"
90
+ },
87
91
  "./skills": {
88
92
  "types": "./dist/skills/index.d.ts",
89
93
  "import": "./dist/skills/index.js"
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/internal/agent-runtime/memory.ts"],"sourcesContent":["import type { Agent } from \"../../agent/agent\";\nimport type { AgentMemory } from \"../../agent/types\";\nimport { type Message as MessageType, Usage } from \"../../completion/index\";\nimport {\n createMemoryCompactionSummary,\n cumulativeCompactedMessageCount,\n} from \"../../memory/compaction\";\nimport { MemoryCompactionConflictError, MemoryCompactionError } from \"../../memory/errors\";\nimport type {\n MemoryCompactionInfo,\n MemoryCompactionResult,\n MemorySavePolicy,\n MemoryScope,\n MemoryTokenCounter,\n} from \"../../memory/types\";\nimport { throwIfAborted } from \"../abort\";\n\nexport type MemoryPreparation = {\n history: MessageType[];\n usage: ReturnType<typeof Usage.empty>;\n compaction?: MemoryCompactionInfo | undefined;\n originalTokenCount?: number | undefined;\n};\n\ntype MemoryAgent = Pick<Agent, \"memory\">;\n\nexport class AgentRunMemory {\n constructor(\n private readonly agent: MemoryAgent,\n private readonly memoryScope: MemoryScope | undefined,\n private readonly initialHistory: MessageType[],\n ) {}\n\n memoryPolicy(): MemorySavePolicy | undefined {\n return this.memory()?.savePolicy;\n }\n\n pendingTurnMessages(newMessages: MessageType[]): MessageType[] {\n return this.memoryPolicy() === \"turn\" ? [...newMessages] : [];\n }\n\n async prepareHistory(\n runId: string,\n incomingMessages: readonly MessageType[],\n abortSignal?: AbortSignal | undefined,\n ): Promise<MemoryPreparation> {\n const memory = this.memory();\n if (memory === undefined || this.memoryScope === undefined) {\n return {\n history: this.initialHistory,\n usage: Usage.empty(),\n };\n }\n\n const preparation = await this.prepareStoredHistory(\n memory,\n runId,\n incomingMessages,\n abortSignal,\n );\n const memoryHistory = preparation.history;\n const chatHistory = [...memoryHistory, ...this.initialHistory];\n return {\n ...preparation,\n history: chatHistory,\n };\n }\n\n async compact(\n runId: string,\n abortSignal?: AbortSignal | undefined,\n ): Promise<MemoryCompactionResult> {\n const memory = this.memory();\n const scope = this.memoryScope;\n if (memory === undefined || scope === undefined) {\n throw new TypeError(\"Manual memory compaction requires an Agent with configured memory.\");\n }\n if (memory.compaction === undefined || memory.store.compaction === undefined) {\n throw new TypeError(\"Manual memory compaction requires a configured compaction policy.\");\n }\n const preparation = await this.prepareStoredHistory(memory, runId, [], abortSignal, true);\n if (preparation.compaction !== undefined) {\n return { type: \"compacted\", ...preparation.compaction };\n }\n return {\n type: \"skipped\",\n reason: \"nothing_to_compact\",\n originalMessageCount: preparation.history.length,\n originalTokenCount:\n preparation.originalTokenCount ??\n (await countTokens(memory.compaction.tokenCounter, preparation.history)),\n };\n }\n\n async commitAcceptedInput(runId: string, messages: MessageType[]): Promise<void> {\n const memory = this.memory();\n if (\n memory === undefined ||\n this.memoryScope === undefined ||\n memory.savePolicy !== \"message\" ||\n messages.length === 0\n ) {\n return;\n }\n\n await memory.store.append({\n scope: this.memoryScope,\n runId,\n turn: 1,\n messages,\n });\n }\n\n async commitMessages(\n runId: string,\n turn: number,\n messages: MessageType[],\n pendingTurnMessages: MessageType[],\n ): Promise<void> {\n const memory = this.memory();\n if (memory === undefined || this.memoryScope === undefined || messages.length === 0) {\n return;\n }\n if (memory.savePolicy === \"message\") {\n await memory.store.append({\n scope: this.memoryScope,\n runId,\n turn,\n messages,\n });\n } else if (memory.savePolicy === \"turn\") {\n pendingTurnMessages.push(...messages);\n }\n }\n\n async commitCompletedTurn(\n runId: string,\n turn: number,\n pendingTurnMessages: MessageType[],\n ): Promise<void> {\n const memory = this.memory();\n if (\n memory === undefined ||\n this.memoryScope === undefined ||\n memory.savePolicy !== \"turn\" ||\n pendingTurnMessages.length === 0\n ) {\n return;\n }\n await memory.store.append({\n scope: this.memoryScope,\n runId,\n turn,\n messages: [...pendingTurnMessages],\n });\n pendingTurnMessages.length = 0;\n }\n\n async commitCompletedRun(\n runId: string,\n turn: number,\n newMessages: MessageType[],\n pendingTurnMessages: MessageType[],\n ): Promise<void> {\n await this.commitCompletedTurn(runId, turn, pendingTurnMessages);\n const memory = this.memory();\n if (memory === undefined || this.memoryScope === undefined || memory.savePolicy !== \"run\") {\n return;\n }\n await memory.store.append({\n scope: this.memoryScope,\n runId,\n turn,\n messages: [...newMessages],\n });\n }\n\n async recordError(runId: string, error: unknown, newMessages: MessageType[]): Promise<void> {\n const memory = this.memory();\n if (memory === undefined || this.memoryScope === undefined) {\n return;\n }\n await memory.store.recordError?.({\n scope: this.memoryScope,\n runId,\n error,\n messages: [...newMessages],\n });\n }\n\n private memory(): AgentMemory | undefined {\n return this.memoryScope === undefined ? undefined : this.agent.memory;\n }\n\n private async prepareStoredHistory(\n memory: AgentMemory,\n runId: string,\n incomingMessages: readonly MessageType[],\n abortSignal?: AbortSignal | undefined,\n force = false,\n ): Promise<MemoryPreparation> {\n const scope = this.memoryScope;\n if (scope === undefined) {\n return { history: [], usage: Usage.empty() };\n }\n const options = memory.compaction;\n const capability = memory.store.compaction;\n if (options === undefined || capability === undefined) {\n return {\n history: await memory.store.load({ scope }),\n usage: Usage.empty(),\n };\n }\n\n let usage = Usage.empty();\n const maxAttempts = options.conflictRetries === false ? 1 : options.conflictRetries.maxAttempts;\n for (let attempt = 1; attempt <= maxAttempts; attempt += 1) {\n throwIfAborted(abortSignal);\n const snapshot = await capability.snapshot({ scope });\n throwIfAborted(abortSignal);\n const selection = await selectCompactionPrefix(\n snapshot.messages,\n incomingMessages,\n options.trigger.afterTokens,\n options.retention.recentTokens,\n options.tokenCounter,\n force,\n );\n throwIfAborted(abortSignal);\n const compactedMessageCount = selection.compactedMessageCount;\n if (compactedMessageCount === 0) {\n return {\n history: snapshot.messages,\n usage,\n originalTokenCount: selection.originalTokenCount,\n };\n }\n\n const prefix = snapshot.messages.slice(0, compactedMessageCount);\n let result: Awaited<ReturnType<typeof options.compactor>>;\n try {\n result = await options.compactor({\n scope,\n messages: prefix,\n abortSignal,\n });\n } catch (error) {\n throw remappedCompactorError(error, usage);\n }\n if (result.usage !== undefined) {\n usage = Usage.add(usage, result.usage);\n }\n if (typeof result?.summary !== \"string\") {\n throw new MemoryCompactionError(\"Memory compactor must return a summary string.\", {\n usage,\n });\n }\n const summaryText = result.summary.trim();\n if (summaryText.length === 0) {\n throw new MemoryCompactionError(\"Memory compactor returned an empty summary.\", {\n usage,\n });\n }\n const summary = createMemoryCompactionSummary(\n summaryText,\n cumulativeCompactedMessageCount(prefix),\n );\n const retained = snapshot.messages.slice(compactedMessageCount);\n let resultTokenCount: number;\n try {\n resultTokenCount = await countTokens(options.tokenCounter, [summary, ...retained]);\n } catch (error) {\n throw remappedCompactorError(error, usage);\n }\n throwIfAborted(abortSignal);\n let replacement: Awaited<ReturnType<typeof capability.replacePrefix>>;\n try {\n replacement = await capability.replacePrefix({\n scope,\n revision: snapshot.revision,\n messageCount: compactedMessageCount,\n replacement: summary,\n runId: `memory-compaction:${runId}:${attempt}`,\n });\n } catch (error) {\n throw new MemoryCompactionError(\"Memory compaction prefix replacement failed.\", {\n cause: error,\n usage,\n });\n }\n if (replacement.status === \"committed\") {\n return {\n history: [summary, ...retained],\n usage,\n compaction: {\n originalMessageCount: snapshot.messages.length,\n compactedMessageCount,\n retainedMessageCount: retained.length,\n originalTokenCount: selection.originalTokenCount,\n compactedTokenCount: selection.compactedTokenCount,\n retainedTokenCount: selection.retainedTokenCount,\n resultTokenCount,\n attempts: attempt,\n usage,\n },\n };\n }\n throwIfAborted(abortSignal);\n }\n\n throw new MemoryCompactionConflictError(maxAttempts, usage);\n }\n}\n\ntype CompactionSelection = {\n compactedMessageCount: number;\n originalTokenCount: number;\n compactedTokenCount: number;\n retainedTokenCount: number;\n};\n\nasync function selectCompactionPrefix(\n messages: readonly MessageType[],\n incomingMessages: readonly MessageType[],\n afterTokens: number,\n recentTokens: number,\n tokenCounter: MemoryTokenCounter,\n force: boolean,\n): Promise<CompactionSelection> {\n const originalTokenCount = await countTokens(tokenCounter, messages);\n const incomingTokenCount =\n incomingMessages.length === 0 ? 0 : await countTokens(tokenCounter, incomingMessages);\n const none = {\n compactedMessageCount: 0,\n originalTokenCount,\n compactedTokenCount: 0,\n retainedTokenCount: originalTokenCount,\n };\n if (!force && originalTokenCount + incomingTokenCount <= afterTokens) {\n return none;\n }\n const userMessageIndexes = messages.flatMap((message, index) =>\n message.role === \"user\" ? [index] : [],\n );\n if (userMessageIndexes.length <= 1) {\n return none;\n }\n\n // Retain complete user-led turns. The newest turn is always kept even when it alone exceeds the\n // retention budget. Find the earliest newer turn whose tail fits with logarithmic counter calls.\n const tailTokenCounts = new Map<number, number>();\n const countTail = async (messageIndex: number): Promise<number> => {\n const cached = tailTokenCounts.get(messageIndex);\n if (cached !== undefined) return cached;\n const count = await countTokens(tokenCounter, messages.slice(messageIndex));\n tailTokenCounts.set(messageIndex, count);\n return count;\n };\n let lower = 0;\n let upper = userMessageIndexes.length - 1;\n let retainedBoundary = upper;\n while (lower <= upper) {\n const middle = Math.floor((lower + upper) / 2);\n const candidate = userMessageIndexes[middle] ?? 0;\n if ((await countTail(candidate)) <= recentTokens) {\n retainedBoundary = middle;\n upper = middle - 1;\n } else {\n lower = middle + 1;\n }\n }\n const compactedMessageCount = userMessageIndexes[retainedBoundary] ?? 0;\n if (compactedMessageCount === 0) {\n return none;\n }\n const compactedTokenCount = await countTokens(\n tokenCounter,\n messages.slice(0, compactedMessageCount),\n );\n const retainedTokenCount =\n tailTokenCounts.get(compactedMessageCount) ??\n (await countTokens(tokenCounter, messages.slice(compactedMessageCount)));\n return {\n compactedMessageCount,\n originalTokenCount,\n compactedTokenCount,\n retainedTokenCount,\n };\n}\n\nasync function countTokens(\n tokenCounter: MemoryTokenCounter,\n messages: readonly MessageType[],\n): Promise<number> {\n let count: number;\n try {\n count = await tokenCounter(messages);\n } catch (error) {\n throw new MemoryCompactionError(\"Memory token counter failed.\", { cause: error });\n }\n if (!Number.isSafeInteger(count) || count < 0) {\n throw new MemoryCompactionError(\"Memory token counter must return a nonnegative safe integer.\");\n }\n return count;\n}\n\nfunction remappedCompactorError(error: unknown, usage: ReturnType<typeof Usage.empty>): Error {\n if (error instanceof MemoryCompactionError) {\n const mergedUsage =\n error.usage === undefined\n ? usage\n : isEmptyUsage(usage)\n ? error.usage\n : Usage.add(usage, error.usage);\n if (mergedUsage === error.usage || (error.usage === undefined && isEmptyUsage(usage))) {\n return error;\n }\n return new MemoryCompactionError(error.message, {\n cause: error,\n usage: mergedUsage,\n });\n }\n return new MemoryCompactionError(\"Memory compactor failed.\", {\n cause: error,\n usage,\n });\n}\n\nfunction isEmptyUsage(usage: ReturnType<typeof Usage.empty>): boolean {\n return (\n usage.inputTokens === 0 &&\n usage.outputTokens === 0 &&\n usage.totalTokens === 0 &&\n usage.cachedInputTokens === 0 &&\n usage.cacheCreationInputTokens === 0\n );\n}\n"],"mappings":";;;;;;;;;;;;;;;;AA0BO,IAAM,iBAAN,MAAqB;AAAA,EAC1B,YACmB,OACA,aACA,gBACjB;AAHiB;AACA;AACA;AAAA,EAChB;AAAA,EAHgB;AAAA,EACA;AAAA,EACA;AAAA,EAGnB,eAA6C;AAC3C,WAAO,KAAK,OAAO,GAAG;AAAA,EACxB;AAAA,EAEA,oBAAoB,aAA2C;AAC7D,WAAO,KAAK,aAAa,MAAM,SAAS,CAAC,GAAG,WAAW,IAAI,CAAC;AAAA,EAC9D;AAAA,EAEA,MAAM,eACJ,OACA,kBACA,aAC4B;AAC5B,UAAM,SAAS,KAAK,OAAO;AAC3B,QAAI,WAAW,UAAa,KAAK,gBAAgB,QAAW;AAC1D,aAAO;AAAA,QACL,SAAS,KAAK;AAAA,QACd,OAAO,MAAM,MAAM;AAAA,MACrB;AAAA,IACF;AAEA,UAAM,cAAc,MAAM,KAAK;AAAA,MAC7B;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AACA,UAAM,gBAAgB,YAAY;AAClC,UAAM,cAAc,CAAC,GAAG,eAAe,GAAG,KAAK,cAAc;AAC7D,WAAO;AAAA,MACL,GAAG;AAAA,MACH,SAAS;AAAA,IACX;AAAA,EACF;AAAA,EAEA,MAAM,QACJ,OACA,aACiC;AACjC,UAAM,SAAS,KAAK,OAAO;AAC3B,UAAM,QAAQ,KAAK;AACnB,QAAI,WAAW,UAAa,UAAU,QAAW;AAC/C,YAAM,IAAI,UAAU,oEAAoE;AAAA,IAC1F;AACA,QAAI,OAAO,eAAe,UAAa,OAAO,MAAM,eAAe,QAAW;AAC5E,YAAM,IAAI,UAAU,mEAAmE;AAAA,IACzF;AACA,UAAM,cAAc,MAAM,KAAK,qBAAqB,QAAQ,OAAO,CAAC,GAAG,aAAa,IAAI;AACxF,QAAI,YAAY,eAAe,QAAW;AACxC,aAAO,EAAE,MAAM,aAAa,GAAG,YAAY,WAAW;AAAA,IACxD;AACA,WAAO;AAAA,MACL,MAAM;AAAA,MACN,QAAQ;AAAA,MACR,sBAAsB,YAAY,QAAQ;AAAA,MAC1C,oBACE,YAAY,sBACX,MAAM,YAAY,OAAO,WAAW,cAAc,YAAY,OAAO;AAAA,IAC1E;AAAA,EACF;AAAA,EAEA,MAAM,oBAAoB,OAAe,UAAwC;AAC/E,UAAM,SAAS,KAAK,OAAO;AAC3B,QACE,WAAW,UACX,KAAK,gBAAgB,UACrB,OAAO,eAAe,aACtB,SAAS,WAAW,GACpB;AACA;AAAA,IACF;AAEA,UAAM,OAAO,MAAM,OAAO;AAAA,MACxB,OAAO,KAAK;AAAA,MACZ;AAAA,MACA,MAAM;AAAA,MACN;AAAA,IACF,CAAC;AAAA,EACH;AAAA,EAEA,MAAM,eACJ,OACA,MACA,UACA,qBACe;AACf,UAAM,SAAS,KAAK,OAAO;AAC3B,QAAI,WAAW,UAAa,KAAK,gBAAgB,UAAa,SAAS,WAAW,GAAG;AACnF;AAAA,IACF;AACA,QAAI,OAAO,eAAe,WAAW;AACnC,YAAM,OAAO,MAAM,OAAO;AAAA,QACxB,OAAO,KAAK;AAAA,QACZ;AAAA,QACA;AAAA,QACA;AAAA,MACF,CAAC;AAAA,IACH,WAAW,OAAO,eAAe,QAAQ;AACvC,0BAAoB,KAAK,GAAG,QAAQ;AAAA,IACtC;AAAA,EACF;AAAA,EAEA,MAAM,oBACJ,OACA,MACA,qBACe;AACf,UAAM,SAAS,KAAK,OAAO;AAC3B,QACE,WAAW,UACX,KAAK,gBAAgB,UACrB,OAAO,eAAe,UACtB,oBAAoB,WAAW,GAC/B;AACA;AAAA,IACF;AACA,UAAM,OAAO,MAAM,OAAO;AAAA,MACxB,OAAO,KAAK;AAAA,MACZ;AAAA,MACA;AAAA,MACA,UAAU,CAAC,GAAG,mBAAmB;AAAA,IACnC,CAAC;AACD,wBAAoB,SAAS;AAAA,EAC/B;AAAA,EAEA,MAAM,mBACJ,OACA,MACA,aACA,qBACe;AACf,UAAM,KAAK,oBAAoB,OAAO,MAAM,mBAAmB;AAC/D,UAAM,SAAS,KAAK,OAAO;AAC3B,QAAI,WAAW,UAAa,KAAK,gBAAgB,UAAa,OAAO,eAAe,OAAO;AACzF;AAAA,IACF;AACA,UAAM,OAAO,MAAM,OAAO;AAAA,MACxB,OAAO,KAAK;AAAA,MACZ;AAAA,MACA;AAAA,MACA,UAAU,CAAC,GAAG,WAAW;AAAA,IAC3B,CAAC;AAAA,EACH;AAAA,EAEA,MAAM,YAAY,OAAe,OAAgB,aAA2C;AAC1F,UAAM,SAAS,KAAK,OAAO;AAC3B,QAAI,WAAW,UAAa,KAAK,gBAAgB,QAAW;AAC1D;AAAA,IACF;AACA,UAAM,OAAO,MAAM,cAAc;AAAA,MAC/B,OAAO,KAAK;AAAA,MACZ;AAAA,MACA;AAAA,MACA,UAAU,CAAC,GAAG,WAAW;AAAA,IAC3B,CAAC;AAAA,EACH;AAAA,EAEQ,SAAkC;AACxC,WAAO,KAAK,gBAAgB,SAAY,SAAY,KAAK,MAAM;AAAA,EACjE;AAAA,EAEA,MAAc,qBACZ,QACA,OACA,kBACA,aACA,QAAQ,OACoB;AAC5B,UAAM,QAAQ,KAAK;AACnB,QAAI,UAAU,QAAW;AACvB,aAAO,EAAE,SAAS,CAAC,GAAG,OAAO,MAAM,MAAM,EAAE;AAAA,IAC7C;AACA,UAAM,UAAU,OAAO;AACvB,UAAM,aAAa,OAAO,MAAM;AAChC,QAAI,YAAY,UAAa,eAAe,QAAW;AACrD,aAAO;AAAA,QACL,SAAS,MAAM,OAAO,MAAM,KAAK,EAAE,MAAM,CAAC;AAAA,QAC1C,OAAO,MAAM,MAAM;AAAA,MACrB;AAAA,IACF;AAEA,QAAI,QAAQ,MAAM,MAAM;AACxB,UAAM,cAAc,QAAQ,oBAAoB,QAAQ,IAAI,QAAQ,gBAAgB;AACpF,aAAS,UAAU,GAAG,WAAW,aAAa,WAAW,GAAG;AAC1D,qBAAe,WAAW;AAC1B,YAAM,WAAW,MAAM,WAAW,SAAS,EAAE,MAAM,CAAC;AACpD,qBAAe,WAAW;AAC1B,YAAM,YAAY,MAAM;AAAA,QACtB,SAAS;AAAA,QACT;AAAA,QACA,QAAQ,QAAQ;AAAA,QAChB,QAAQ,UAAU;AAAA,QAClB,QAAQ;AAAA,QACR;AAAA,MACF;AACA,qBAAe,WAAW;AAC1B,YAAM,wBAAwB,UAAU;AACxC,UAAI,0BAA0B,GAAG;AAC/B,eAAO;AAAA,UACL,SAAS,SAAS;AAAA,UAClB;AAAA,UACA,oBAAoB,UAAU;AAAA,QAChC;AAAA,MACF;AAEA,YAAM,SAAS,SAAS,SAAS,MAAM,GAAG,qBAAqB;AAC/D,UAAI;AACJ,UAAI;AACF,iBAAS,MAAM,QAAQ,UAAU;AAAA,UAC/B;AAAA,UACA,UAAU;AAAA,UACV;AAAA,QACF,CAAC;AAAA,MACH,SAAS,OAAO;AACd,cAAM,uBAAuB,OAAO,KAAK;AAAA,MAC3C;AACA,UAAI,OAAO,UAAU,QAAW;AAC9B,gBAAQ,MAAM,IAAI,OAAO,OAAO,KAAK;AAAA,MACvC;AACA,UAAI,OAAO,QAAQ,YAAY,UAAU;AACvC,cAAM,IAAI,sBAAsB,kDAAkD;AAAA,UAChF;AAAA,QACF,CAAC;AAAA,MACH;AACA,YAAM,cAAc,OAAO,QAAQ,KAAK;AACxC,UAAI,YAAY,WAAW,GAAG;AAC5B,cAAM,IAAI,sBAAsB,+CAA+C;AAAA,UAC7E;AAAA,QACF,CAAC;AAAA,MACH;AACA,YAAM,UAAU;AAAA,QACd;AAAA,QACA,gCAAgC,MAAM;AAAA,MACxC;AACA,YAAM,WAAW,SAAS,SAAS,MAAM,qBAAqB;AAC9D,UAAI;AACJ,UAAI;AACF,2BAAmB,MAAM,YAAY,QAAQ,cAAc,CAAC,SAAS,GAAG,QAAQ,CAAC;AAAA,MACnF,SAAS,OAAO;AACd,cAAM,uBAAuB,OAAO,KAAK;AAAA,MAC3C;AACA,qBAAe,WAAW;AAC1B,UAAI;AACJ,UAAI;AACF,sBAAc,MAAM,WAAW,cAAc;AAAA,UAC3C;AAAA,UACA,UAAU,SAAS;AAAA,UACnB,cAAc;AAAA,UACd,aAAa;AAAA,UACb,OAAO,qBAAqB,KAAK,IAAI,OAAO;AAAA,QAC9C,CAAC;AAAA,MACH,SAAS,OAAO;AACd,cAAM,IAAI,sBAAsB,gDAAgD;AAAA,UAC9E,OAAO;AAAA,UACP;AAAA,QACF,CAAC;AAAA,MACH;AACA,UAAI,YAAY,WAAW,aAAa;AACtC,eAAO;AAAA,UACL,SAAS,CAAC,SAAS,GAAG,QAAQ;AAAA,UAC9B;AAAA,UACA,YAAY;AAAA,YACV,sBAAsB,SAAS,SAAS;AAAA,YACxC;AAAA,YACA,sBAAsB,SAAS;AAAA,YAC/B,oBAAoB,UAAU;AAAA,YAC9B,qBAAqB,UAAU;AAAA,YAC/B,oBAAoB,UAAU;AAAA,YAC9B;AAAA,YACA,UAAU;AAAA,YACV;AAAA,UACF;AAAA,QACF;AAAA,MACF;AACA,qBAAe,WAAW;AAAA,IAC5B;AAEA,UAAM,IAAI,8BAA8B,aAAa,KAAK;AAAA,EAC5D;AACF;AASA,eAAe,uBACb,UACA,kBACA,aACA,cACA,cACA,OAC8B;AAC9B,QAAM,qBAAqB,MAAM,YAAY,cAAc,QAAQ;AACnE,QAAM,qBACJ,iBAAiB,WAAW,IAAI,IAAI,MAAM,YAAY,cAAc,gBAAgB;AACtF,QAAM,OAAO;AAAA,IACX,uBAAuB;AAAA,IACvB;AAAA,IACA,qBAAqB;AAAA,IACrB,oBAAoB;AAAA,EACtB;AACA,MAAI,CAAC,SAAS,qBAAqB,sBAAsB,aAAa;AACpE,WAAO;AAAA,EACT;AACA,QAAM,qBAAqB,SAAS;AAAA,IAAQ,CAAC,SAAS,UACpD,QAAQ,SAAS,SAAS,CAAC,KAAK,IAAI,CAAC;AAAA,EACvC;AACA,MAAI,mBAAmB,UAAU,GAAG;AAClC,WAAO;AAAA,EACT;AAIA,QAAM,kBAAkB,oBAAI,IAAoB;AAChD,QAAM,YAAY,OAAO,iBAA0C;AACjE,UAAM,SAAS,gBAAgB,IAAI,YAAY;AAC/C,QAAI,WAAW,OAAW,QAAO;AACjC,UAAM,QAAQ,MAAM,YAAY,cAAc,SAAS,MAAM,YAAY,CAAC;AAC1E,oBAAgB,IAAI,cAAc,KAAK;AACvC,WAAO;AAAA,EACT;AACA,MAAI,QAAQ;AACZ,MAAI,QAAQ,mBAAmB,SAAS;AACxC,MAAI,mBAAmB;AACvB,SAAO,SAAS,OAAO;AACrB,UAAM,SAAS,KAAK,OAAO,QAAQ,SAAS,CAAC;AAC7C,UAAM,YAAY,mBAAmB,MAAM,KAAK;AAChD,QAAK,MAAM,UAAU,SAAS,KAAM,cAAc;AAChD,yBAAmB;AACnB,cAAQ,SAAS;AAAA,IACnB,OAAO;AACL,cAAQ,SAAS;AAAA,IACnB;AAAA,EACF;AACA,QAAM,wBAAwB,mBAAmB,gBAAgB,KAAK;AACtE,MAAI,0BAA0B,GAAG;AAC/B,WAAO;AAAA,EACT;AACA,QAAM,sBAAsB,MAAM;AAAA,IAChC;AAAA,IACA,SAAS,MAAM,GAAG,qBAAqB;AAAA,EACzC;AACA,QAAM,qBACJ,gBAAgB,IAAI,qBAAqB,KACxC,MAAM,YAAY,cAAc,SAAS,MAAM,qBAAqB,CAAC;AACxE,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACF;AAEA,eAAe,YACb,cACA,UACiB;AACjB,MAAI;AACJ,MAAI;AACF,YAAQ,MAAM,aAAa,QAAQ;AAAA,EACrC,SAAS,OAAO;AACd,UAAM,IAAI,sBAAsB,gCAAgC,EAAE,OAAO,MAAM,CAAC;AAAA,EAClF;AACA,MAAI,CAAC,OAAO,cAAc,KAAK,KAAK,QAAQ,GAAG;AAC7C,UAAM,IAAI,sBAAsB,8DAA8D;AAAA,EAChG;AACA,SAAO;AACT;AAEA,SAAS,uBAAuB,OAAgB,OAA8C;AAC5F,MAAI,iBAAiB,uBAAuB;AAC1C,UAAM,cACJ,MAAM,UAAU,SACZ,QACA,aAAa,KAAK,IAChB,MAAM,QACN,MAAM,IAAI,OAAO,MAAM,KAAK;AACpC,QAAI,gBAAgB,MAAM,SAAU,MAAM,UAAU,UAAa,aAAa,KAAK,GAAI;AACrF,aAAO;AAAA,IACT;AACA,WAAO,IAAI,sBAAsB,MAAM,SAAS;AAAA,MAC9C,OAAO;AAAA,MACP,OAAO;AAAA,IACT,CAAC;AAAA,EACH;AACA,SAAO,IAAI,sBAAsB,4BAA4B;AAAA,IAC3D,OAAO;AAAA,IACP;AAAA,EACF,CAAC;AACH;AAEA,SAAS,aAAa,OAAgD;AACpE,SACE,MAAM,gBAAgB,KACtB,MAAM,iBAAiB,KACvB,MAAM,gBAAgB,KACtB,MAAM,sBAAsB,KAC5B,MAAM,6BAA6B;AAEvC;","names":[]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/memory/options.ts"],"sourcesContent":["import type { Message } from \"../completion/types\";\nimport { assertPositiveInteger } from \"./assert\";\nimport type {\n MemoryCompactionConflictRetryOptions,\n MemoryCompactor,\n MemoryOptions,\n MemorySavePolicy,\n MemoryTokenCounter,\n} from \"./types\";\n\ntype ResolvedMemoryOptions = {\n savePolicy: MemorySavePolicy;\n compaction?:\n | {\n trigger: { afterTokens: number };\n retention: { recentTokens: number };\n tokenCounter: MemoryTokenCounter;\n compactor: MemoryCompactor;\n conflictRetries: false | MemoryCompactionConflictRetryOptions;\n }\n | undefined;\n};\n\nexport function resolveMemoryOptions(options: MemoryOptions = {}): ResolvedMemoryOptions {\n const resolved: ResolvedMemoryOptions = {\n savePolicy: options.savePolicy ?? \"message\",\n };\n if (options.compaction !== undefined) {\n const afterTokens = options.compaction.trigger.afterTokens;\n assertPositiveInteger(afterTokens, \"compaction.trigger.afterTokens\");\n const recentTokens = options.compaction.retention?.recentTokens ?? Math.floor(afterTokens / 4);\n assertPositiveInteger(recentTokens, \"compaction.retention.recentTokens\");\n if (recentTokens >= afterTokens) {\n throw new RangeError(\"compaction.retention.recentTokens must be less than afterTokens.\");\n }\n const tokenCounter = options.compaction.tokenCounter ?? estimateMemoryTokens;\n if (typeof tokenCounter !== \"function\") {\n throw new TypeError(\"compaction.tokenCounter must be a function.\");\n }\n if (typeof options.compaction.compactor !== \"function\") {\n throw new TypeError(\"compaction.compactor must be a function.\");\n }\n const conflictRetries = options.compaction.conflictRetries ?? false;\n if (conflictRetries !== false) {\n assertPositiveInteger(conflictRetries.maxAttempts, \"compaction.conflictRetries.maxAttempts\");\n }\n resolved.compaction = {\n trigger: {\n afterTokens,\n },\n retention: {\n recentTokens,\n },\n tokenCounter,\n compactor: options.compaction.compactor,\n conflictRetries,\n };\n }\n return resolved;\n}\n\n/** Lightweight provider-neutral estimate used when no model-specific counter is supplied. */\nexport function estimateMemoryTokens(messages: readonly Message[]): number {\n const characters = messages.reduce(\n (total, message) =>\n total + JSON.stringify({ role: message.role, content: message.content }).length,\n 0,\n );\n return messages.length === 0 ? 0 : Math.max(messages.length, Math.ceil(characters / 4));\n}\n"],"mappings":";;;;;AAuBO,SAAS,qBAAqB,UAAyB,CAAC,GAA0B;AACvF,QAAM,WAAkC;AAAA,IACtC,YAAY,QAAQ,cAAc;AAAA,EACpC;AACA,MAAI,QAAQ,eAAe,QAAW;AACpC,UAAM,cAAc,QAAQ,WAAW,QAAQ;AAC/C,0BAAsB,aAAa,gCAAgC;AACnE,UAAM,eAAe,QAAQ,WAAW,WAAW,gBAAgB,KAAK,MAAM,cAAc,CAAC;AAC7F,0BAAsB,cAAc,mCAAmC;AACvE,QAAI,gBAAgB,aAAa;AAC/B,YAAM,IAAI,WAAW,kEAAkE;AAAA,IACzF;AACA,UAAM,eAAe,QAAQ,WAAW,gBAAgB;AACxD,QAAI,OAAO,iBAAiB,YAAY;AACtC,YAAM,IAAI,UAAU,6CAA6C;AAAA,IACnE;AACA,QAAI,OAAO,QAAQ,WAAW,cAAc,YAAY;AACtD,YAAM,IAAI,UAAU,0CAA0C;AAAA,IAChE;AACA,UAAM,kBAAkB,QAAQ,WAAW,mBAAmB;AAC9D,QAAI,oBAAoB,OAAO;AAC7B,4BAAsB,gBAAgB,aAAa,wCAAwC;AAAA,IAC7F;AACA,aAAS,aAAa;AAAA,MACpB,SAAS;AAAA,QACP;AAAA,MACF;AAAA,MACA,WAAW;AAAA,QACT;AAAA,MACF;AAAA,MACA;AAAA,MACA,WAAW,QAAQ,WAAW;AAAA,MAC9B;AAAA,IACF;AAAA,EACF;AACA,SAAO;AACT;AAGO,SAAS,qBAAqB,UAAsC;AACzE,QAAM,aAAa,SAAS;AAAA,IAC1B,CAAC,OAAO,YACN,QAAQ,KAAK,UAAU,EAAE,MAAM,QAAQ,MAAM,SAAS,QAAQ,QAAQ,CAAC,EAAE;AAAA,IAC3E;AAAA,EACF;AACA,SAAO,SAAS,WAAW,IAAI,IAAI,KAAK,IAAI,SAAS,QAAQ,KAAK,KAAK,aAAa,CAAC,CAAC;AACxF;","names":[]}