@bowenqt/qiniu-ai-sdk 0.15.0 → 0.16.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 (68) hide show
  1. package/dist/ai/agent-graph.d.ts +5 -0
  2. package/dist/ai/agent-graph.d.ts.map +1 -1
  3. package/dist/ai/agent-graph.js +21 -2
  4. package/dist/ai/agent-graph.js.map +1 -1
  5. package/dist/ai/agent-graph.mjs +21 -2
  6. package/dist/ai/create-agent.d.ts +3 -0
  7. package/dist/ai/create-agent.d.ts.map +1 -1
  8. package/dist/ai/create-agent.js +6 -5
  9. package/dist/ai/create-agent.js.map +1 -1
  10. package/dist/ai/create-agent.mjs +6 -5
  11. package/dist/ai/generate-object.d.ts.map +1 -1
  12. package/dist/ai/generate-object.js +7 -1
  13. package/dist/ai/generate-object.js.map +1 -1
  14. package/dist/ai/generate-object.mjs +7 -1
  15. package/dist/ai/generate-text.d.ts +4 -1
  16. package/dist/ai/generate-text.d.ts.map +1 -1
  17. package/dist/ai/generate-text.js +10 -2
  18. package/dist/ai/generate-text.js.map +1 -1
  19. package/dist/ai/generate-text.mjs +10 -2
  20. package/dist/ai/internal-types.d.ts +11 -0
  21. package/dist/ai/internal-types.d.ts.map +1 -1
  22. package/dist/ai/internal-types.js +15 -0
  23. package/dist/ai/internal-types.js.map +1 -1
  24. package/dist/ai/internal-types.mjs +13 -0
  25. package/dist/ai/memory/index.d.ts +147 -0
  26. package/dist/ai/memory/index.d.ts.map +1 -0
  27. package/dist/ai/memory/index.js +240 -0
  28. package/dist/ai/memory/index.js.map +1 -0
  29. package/dist/ai/memory/index.mjs +234 -0
  30. package/dist/ai/nodes/memory-node.d.ts.map +1 -1
  31. package/dist/ai/nodes/memory-node.js +14 -16
  32. package/dist/ai/nodes/memory-node.js.map +1 -1
  33. package/dist/ai/nodes/memory-node.mjs +15 -17
  34. package/dist/ai/stream-object.d.ts +109 -0
  35. package/dist/ai/stream-object.d.ts.map +1 -0
  36. package/dist/ai/stream-object.js +383 -0
  37. package/dist/ai/stream-object.js.map +1 -0
  38. package/dist/ai/stream-object.mjs +347 -0
  39. package/dist/index.d.ts +8 -2
  40. package/dist/index.d.ts.map +1 -1
  41. package/dist/index.js +16 -2
  42. package/dist/index.js.map +1 -1
  43. package/dist/index.mjs +7 -1
  44. package/dist/lib/capability-cache.d.ts +72 -0
  45. package/dist/lib/capability-cache.d.ts.map +1 -0
  46. package/dist/lib/capability-cache.js +117 -0
  47. package/dist/lib/capability-cache.js.map +1 -0
  48. package/dist/lib/capability-cache.mjs +113 -0
  49. package/dist/lib/content-converter.d.ts +33 -0
  50. package/dist/lib/content-converter.d.ts.map +1 -0
  51. package/dist/lib/content-converter.js +166 -0
  52. package/dist/lib/content-converter.js.map +1 -0
  53. package/dist/lib/content-converter.mjs +161 -0
  54. package/dist/lib/messages.js +4 -3
  55. package/dist/lib/messages.js.map +1 -1
  56. package/dist/lib/messages.mjs +4 -3
  57. package/dist/lib/partial-json-parser.d.ts +63 -0
  58. package/dist/lib/partial-json-parser.d.ts.map +1 -0
  59. package/dist/lib/partial-json-parser.js +142 -0
  60. package/dist/lib/partial-json-parser.js.map +1 -0
  61. package/dist/lib/partial-json-parser.mjs +137 -0
  62. package/dist/lib/token-estimator.d.ts.map +1 -1
  63. package/dist/lib/token-estimator.js +3 -2
  64. package/dist/lib/token-estimator.js.map +1 -1
  65. package/dist/lib/token-estimator.mjs +3 -2
  66. package/dist/lib/types.d.ts +20 -4
  67. package/dist/lib/types.d.ts.map +1 -1
  68. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"internal-types.d.ts","sourceRoot":"","sources":["../../src/ai/internal-types.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AAC1D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAE3D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAEtD;;;GAGG;AACH,MAAM,WAAW,WAAW;IACxB,2CAA2C;IAC3C,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,4DAA4D;IAC5D,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,8CAA8C;IAC9C,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,gEAAgE;IAChE,QAAQ,CAAC,EAAE,MAAM,CAAC;CACrB;AAED;;;GAGG;AACH,MAAM,WAAW,eAAgB,SAAQ,WAAW;IAChD,KAAK,CAAC,EAAE,WAAW,CAAC;CACvB;AAED;;GAEG;AACH,MAAM,WAAW,UAAU;IACvB,uCAAuC;IACvC,QAAQ,EAAE,eAAe,EAAE,CAAC;IAC5B,oCAAoC;IACpC,MAAM,EAAE,aAAa,EAAE,CAAC;IACxB,sBAAsB;IACtB,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;IACnC,yBAAyB;IACzB,SAAS,EAAE,MAAM,CAAC;IAClB,4BAA4B;IAC5B,QAAQ,EAAE,MAAM,CAAC;IACjB,oCAAoC;IACpC,IAAI,EAAE,OAAO,CAAC;IACd,wBAAwB;IACxB,MAAM,EAAE,MAAM,CAAC;IACf,4BAA4B;IAC5B,SAAS,EAAE,MAAM,CAAC;IAClB,yCAAyC;IACzC,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,kBAAkB;IAClB,KAAK,CAAC,EAAE;QACJ,aAAa,EAAE,MAAM,CAAC;QACtB,iBAAiB,EAAE,MAAM,CAAC;QAC1B,YAAY,EAAE,MAAM,CAAC;KACxB,CAAC;IACF,oCAAoC;IACpC,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,gDAAgD;IAChD,cAAc,CAAC,EAAE,cAAc,CAAC;CACnC;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC1B,iBAAiB;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,mDAAmD;IACnD,QAAQ,EAAE,MAAM,CAAC;IACjB,sCAAsC;IACtC,YAAY,EAAE,MAAM,CAAC;IACrB,4BAA4B;IAC5B,UAAU,EAAE,MAAM,CAAC;CACtB;AAED;;GAEG;AACH,MAAM,WAAW,UAAU;IACvB,IAAI,EAAE,MAAM,GAAG,WAAW,GAAG,aAAa,CAAC;IAC3C,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,QAAQ,EAAE,CAAC;IACvB,WAAW,CAAC,EAAE;QAAE,UAAU,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;CAC1D;AAED;;;GAGG;AACH,MAAM,WAAW,gBAAgB;IAC7B,mCAAmC;IACnC,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,UAAU,KAAK,IAAI,CAAC;IAC1C,kCAAkC;IAClC,WAAW,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAC;IACzC,iCAAiC;IACjC,UAAU,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAC;CAC3C;AAED;;GAEG;AACH,wBAAgB,SAAS,CAAC,QAAQ,EAAE,eAAe,EAAE,GAAG,WAAW,EAAE,CAEpE;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,OAAO,EAAE,eAAe,GAAG,OAAO,CAE7D;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,OAAO,EAAE,eAAe,GAAG,MAAM,GAAG,SAAS,CAEvE"}
1
+ {"version":3,"file":"internal-types.d.ts","sourceRoot":"","sources":["../../src/ai/internal-types.ts"],"names":[],"mappings":"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"}
@@ -7,6 +7,8 @@ Object.defineProperty(exports, "__esModule", { value: true });
7
7
  exports.stripMeta = stripMeta;
8
8
  exports.isDroppable = isDroppable;
9
9
  exports.getSkillId = getSkillId;
10
+ exports.getSummaryId = getSummaryId;
11
+ exports.getDroppableId = getDroppableId;
10
12
  /**
11
13
  * Strip internal metadata from messages before API call.
12
14
  */
@@ -25,4 +27,17 @@ function isDroppable(message) {
25
27
  function getSkillId(message) {
26
28
  return message._meta?.skillId;
27
29
  }
30
+ /**
31
+ * Get summary ID from message.
32
+ */
33
+ function getSummaryId(message) {
34
+ return message._meta?.summaryId;
35
+ }
36
+ /**
37
+ * Check if a message can be compacted (has skill or summary ID).
38
+ * Used by memory-node to determine which droppable messages to remove.
39
+ */
40
+ function getDroppableId(message) {
41
+ return message._meta?.skillId ?? message._meta?.summaryId;
42
+ }
28
43
  //# sourceMappingURL=internal-types.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"internal-types.js","sourceRoot":"","sources":["../../src/ai/internal-types.ts"],"names":[],"mappings":";AAAA;;;GAGG;;AAyGH,8BAEC;AAKD,kCAEC;AAKD,gCAEC;AAnBD;;GAEG;AACH,SAAgB,SAAS,CAAC,QAA2B;IACjD,OAAO,QAAQ,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,EAAE,GAAG,GAAG,EAAE,EAAE,EAAE,CAAC,GAAkB,CAAC,CAAC;AACnE,CAAC;AAED;;GAEG;AACH,SAAgB,WAAW,CAAC,OAAwB;IAChD,OAAO,OAAO,CAAC,KAAK,EAAE,SAAS,KAAK,IAAI,CAAC;AAC7C,CAAC;AAED;;GAEG;AACH,SAAgB,UAAU,CAAC,OAAwB;IAC/C,OAAO,OAAO,CAAC,KAAK,EAAE,OAAO,CAAC;AAClC,CAAC"}
1
+ {"version":3,"file":"internal-types.js","sourceRoot":"","sources":["../../src/ai/internal-types.ts"],"names":[],"mappings":";AAAA;;;GAGG;;AA2GH,8BAEC;AAKD,kCAEC;AAKD,gCAEC;AAKD,oCAEC;AAMD,wCAEC;AAlCD;;GAEG;AACH,SAAgB,SAAS,CAAC,QAA2B;IACjD,OAAO,QAAQ,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,EAAE,GAAG,GAAG,EAAE,EAAE,EAAE,CAAC,GAAkB,CAAC,CAAC;AACnE,CAAC;AAED;;GAEG;AACH,SAAgB,WAAW,CAAC,OAAwB;IAChD,OAAO,OAAO,CAAC,KAAK,EAAE,SAAS,KAAK,IAAI,CAAC;AAC7C,CAAC;AAED;;GAEG;AACH,SAAgB,UAAU,CAAC,OAAwB;IAC/C,OAAO,OAAO,CAAC,KAAK,EAAE,OAAO,CAAC;AAClC,CAAC;AAED;;GAEG;AACH,SAAgB,YAAY,CAAC,OAAwB;IACjD,OAAO,OAAO,CAAC,KAAK,EAAE,SAAS,CAAC;AACpC,CAAC;AAED;;;GAGG;AACH,SAAgB,cAAc,CAAC,OAAwB;IACnD,OAAO,OAAO,CAAC,KAAK,EAAE,OAAO,IAAI,OAAO,CAAC,KAAK,EAAE,SAAS,CAAC;AAC9D,CAAC"}
@@ -20,4 +20,17 @@ export function isDroppable(message) {
20
20
  export function getSkillId(message) {
21
21
  return message._meta?.skillId;
22
22
  }
23
+ /**
24
+ * Get summary ID from message.
25
+ */
26
+ export function getSummaryId(message) {
27
+ return message._meta?.summaryId;
28
+ }
29
+ /**
30
+ * Check if a message can be compacted (has skill or summary ID).
31
+ * Used by memory-node to determine which droppable messages to remove.
32
+ */
33
+ export function getDroppableId(message) {
34
+ return message._meta?.skillId ?? message._meta?.summaryId;
35
+ }
23
36
  //# sourceMappingURL=internal-types.js.map
@@ -0,0 +1,147 @@
1
+ /**
2
+ * Memory Manager for Agent conversations.
3
+ * Provides short-term and long-term memory management with automatic summarization.
4
+ *
5
+ * @example
6
+ * ```typescript
7
+ * import { MemoryManager, InMemoryVectorStore } from '@bowenqt/qiniu-ai-sdk';
8
+ *
9
+ * const memory = new MemoryManager({
10
+ * shortTerm: { maxMessages: 20 },
11
+ * summarizer: {
12
+ * enabled: true,
13
+ * threshold: 50,
14
+ * client,
15
+ * model: 'gemini-2.5-flash',
16
+ * },
17
+ * });
18
+ *
19
+ * // Apply memory to messages before sending to LLM
20
+ * const processedMessages = await memory.process(messages, options);
21
+ * ```
22
+ */
23
+ import type { InternalMessage, MessageMeta } from '../internal-types';
24
+ /** Short-term memory configuration */
25
+ export interface ShortTermMemoryConfig {
26
+ /** Maximum number of recent messages to keep */
27
+ maxMessages?: number;
28
+ }
29
+ /** Summarizer configuration */
30
+ export interface SummarizerConfig {
31
+ /** Enable automatic summarization */
32
+ enabled: boolean;
33
+ /** Message count threshold to trigger summarization */
34
+ threshold?: number;
35
+ /** System prompt for summarization */
36
+ systemPrompt?: string;
37
+ }
38
+ /** Vector store interface for long-term memory */
39
+ export interface VectorStore {
40
+ /** Add documents to the store */
41
+ add(documents: VectorDocument[]): Promise<void>;
42
+ /** Search for similar documents */
43
+ search(query: string, limit?: number): Promise<VectorDocument[]>;
44
+ /** Clear all documents */
45
+ clear(): Promise<void>;
46
+ }
47
+ /** Document for vector storage */
48
+ export interface VectorDocument {
49
+ id: string;
50
+ content: string;
51
+ metadata?: Record<string, unknown>;
52
+ embedding?: number[];
53
+ }
54
+ /** Long-term memory configuration */
55
+ export interface LongTermMemoryConfig {
56
+ /** Vector store implementation */
57
+ store: VectorStore;
58
+ /** Number of documents to retrieve */
59
+ retrieveLimit?: number;
60
+ }
61
+ /** Memory manager configuration */
62
+ export interface MemoryConfig {
63
+ /** Short-term memory (sliding window) */
64
+ shortTerm?: ShortTermMemoryConfig;
65
+ /** Long-term memory (vector store) */
66
+ longTerm?: LongTermMemoryConfig;
67
+ /** Automatic summarization */
68
+ summarizer?: SummarizerConfig;
69
+ }
70
+ /** Memory processing options */
71
+ export interface MemoryProcessOptions {
72
+ /** Thread ID for memory isolation */
73
+ threadId?: string;
74
+ /** Whether to generate summary if threshold exceeded */
75
+ generateSummary?: boolean;
76
+ }
77
+ /** Memory processing result */
78
+ export interface MemoryProcessResult {
79
+ /** Processed messages ready for LLM */
80
+ messages: InternalMessage[];
81
+ /** Whether summarization was triggered */
82
+ summarized: boolean;
83
+ /** Generated summary (if any) */
84
+ summary?: string;
85
+ /** Number of messages dropped */
86
+ droppedCount: number;
87
+ }
88
+ /** Summary message metadata */
89
+ export interface SummaryMeta extends MessageMeta {
90
+ summaryId: string;
91
+ droppable: true;
92
+ }
93
+ /**
94
+ * Simple in-memory vector store for testing and small-scale use.
95
+ * Uses cosine similarity for search (requires embeddings).
96
+ */
97
+ export declare class InMemoryVectorStore implements VectorStore {
98
+ private documents;
99
+ add(documents: VectorDocument[]): Promise<void>;
100
+ search(query: string, limit?: number): Promise<VectorDocument[]>;
101
+ clear(): Promise<void>;
102
+ private textSimilarity;
103
+ }
104
+ /**
105
+ * Memory manager for agent conversations.
106
+ * Handles short-term (sliding window) and long-term (vector) memory.
107
+ */
108
+ export declare class MemoryManager {
109
+ private config;
110
+ private summaries;
111
+ constructor(config?: MemoryConfig);
112
+ /**
113
+ * Process messages with memory management.
114
+ * Applies summarization, trimming, and long-term retrieval.
115
+ */
116
+ process(messages: InternalMessage[], options?: MemoryProcessOptions): Promise<MemoryProcessResult>;
117
+ /**
118
+ * Generate summary from messages.
119
+ * Override this method for custom summarization logic.
120
+ */
121
+ protected generateSummary(messages: InternalMessage[], _threadId: string): Promise<string>;
122
+ /**
123
+ * Store messages to long-term memory.
124
+ */
125
+ persist(messages: InternalMessage[], threadId: string): Promise<void>;
126
+ /**
127
+ * Clear memory for a thread.
128
+ */
129
+ clearThread(threadId: string): void;
130
+ /**
131
+ * Clear all memory.
132
+ */
133
+ clearAll(): Promise<void>;
134
+ /**
135
+ * Get current summary for a thread.
136
+ */
137
+ getSummary(threadId: string): string | undefined;
138
+ /**
139
+ * Set summary for a thread (manual override).
140
+ */
141
+ setSummary(threadId: string, summary: string): void;
142
+ }
143
+ /**
144
+ * Check if a message is droppable (skill or summary).
145
+ */
146
+ export declare function isDroppable(message: InternalMessage): boolean;
147
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/ai/memory/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,240 @@
1
+ "use strict";
2
+ /**
3
+ * Memory Manager for Agent conversations.
4
+ * Provides short-term and long-term memory management with automatic summarization.
5
+ *
6
+ * @example
7
+ * ```typescript
8
+ * import { MemoryManager, InMemoryVectorStore } from '@bowenqt/qiniu-ai-sdk';
9
+ *
10
+ * const memory = new MemoryManager({
11
+ * shortTerm: { maxMessages: 20 },
12
+ * summarizer: {
13
+ * enabled: true,
14
+ * threshold: 50,
15
+ * client,
16
+ * model: 'gemini-2.5-flash',
17
+ * },
18
+ * });
19
+ *
20
+ * // Apply memory to messages before sending to LLM
21
+ * const processedMessages = await memory.process(messages, options);
22
+ * ```
23
+ */
24
+ Object.defineProperty(exports, "__esModule", { value: true });
25
+ exports.MemoryManager = exports.InMemoryVectorStore = void 0;
26
+ exports.isDroppable = isDroppable;
27
+ // ============================================================================
28
+ // In-Memory Vector Store (Simple Implementation)
29
+ // ============================================================================
30
+ /**
31
+ * Simple in-memory vector store for testing and small-scale use.
32
+ * Uses cosine similarity for search (requires embeddings).
33
+ */
34
+ class InMemoryVectorStore {
35
+ constructor() {
36
+ this.documents = [];
37
+ }
38
+ async add(documents) {
39
+ this.documents.push(...documents);
40
+ }
41
+ async search(query, limit = 5) {
42
+ // Simple text search (no embeddings)
43
+ // In production, use proper embeddings and vector similarity
44
+ const queryLower = query.toLowerCase();
45
+ const scored = this.documents.map(doc => ({
46
+ doc,
47
+ score: this.textSimilarity(queryLower, doc.content.toLowerCase()),
48
+ }));
49
+ return scored
50
+ .sort((a, b) => b.score - a.score)
51
+ .slice(0, limit)
52
+ .map(s => s.doc);
53
+ }
54
+ async clear() {
55
+ this.documents = [];
56
+ }
57
+ textSimilarity(a, b) {
58
+ // Simple word overlap score
59
+ const wordsA = new Set(a.split(/\s+/));
60
+ const wordsB = new Set(b.split(/\s+/));
61
+ let overlap = 0;
62
+ for (const word of wordsA) {
63
+ if (wordsB.has(word))
64
+ overlap++;
65
+ }
66
+ return overlap / Math.max(wordsA.size, wordsB.size, 1);
67
+ }
68
+ }
69
+ exports.InMemoryVectorStore = InMemoryVectorStore;
70
+ // ============================================================================
71
+ // Memory Manager
72
+ // ============================================================================
73
+ /**
74
+ * Memory manager for agent conversations.
75
+ * Handles short-term (sliding window) and long-term (vector) memory.
76
+ */
77
+ class MemoryManager {
78
+ constructor(config = {}) {
79
+ this.summaries = new Map(); // threadId -> summary
80
+ this.config = {
81
+ shortTerm: { maxMessages: 50, ...config.shortTerm },
82
+ ...config,
83
+ };
84
+ }
85
+ /**
86
+ * Process messages with memory management.
87
+ * Applies summarization, trimming, and long-term retrieval.
88
+ */
89
+ async process(messages, options = {}) {
90
+ const { threadId = 'default', generateSummary = true } = options;
91
+ let processedMessages = [...messages];
92
+ let summarized = false;
93
+ let summary;
94
+ let droppedCount = 0;
95
+ // 1. Check if summarization is needed
96
+ const threshold = this.config.summarizer?.threshold ?? 50;
97
+ if (this.config.summarizer?.enabled &&
98
+ generateSummary &&
99
+ messages.length > threshold) {
100
+ // Generate summary from older messages
101
+ const messagesToSummarize = messages.slice(0, messages.length - Math.floor(threshold / 2));
102
+ summary = await this.generateSummary(messagesToSummarize, threadId);
103
+ this.summaries.set(threadId, summary);
104
+ summarized = true;
105
+ }
106
+ // 2. Apply short-term memory (sliding window)
107
+ const maxMessages = this.config.shortTerm?.maxMessages ?? 50;
108
+ if (processedMessages.length > maxMessages) {
109
+ droppedCount = processedMessages.length - maxMessages;
110
+ processedMessages = processedMessages.slice(-maxMessages);
111
+ }
112
+ // 3. Inject summary if available
113
+ const existingSummary = this.summaries.get(threadId);
114
+ if (existingSummary) {
115
+ const summaryMessage = {
116
+ role: 'system',
117
+ content: `[CONVERSATION SUMMARY]\n${existingSummary}`,
118
+ _meta: {
119
+ summaryId: `summary_${threadId}`,
120
+ droppable: true,
121
+ priority: 100, // Low priority (drop first)
122
+ },
123
+ };
124
+ // Insert after first system message
125
+ const firstSystemIdx = processedMessages.findIndex(m => m.role === 'system');
126
+ if (firstSystemIdx >= 0) {
127
+ processedMessages.splice(firstSystemIdx + 1, 0, summaryMessage);
128
+ }
129
+ else {
130
+ processedMessages.unshift(summaryMessage);
131
+ }
132
+ }
133
+ // 4. Long-term retrieval (if configured)
134
+ if (this.config.longTerm) {
135
+ const lastUserMessage = [...messages].reverse().find(m => m.role === 'user');
136
+ if (lastUserMessage && typeof lastUserMessage.content === 'string') {
137
+ const retrieved = await this.config.longTerm.store.search(lastUserMessage.content, this.config.longTerm.retrieveLimit ?? 3);
138
+ if (retrieved.length > 0) {
139
+ const contextMessage = {
140
+ role: 'system',
141
+ content: `[RELEVANT CONTEXT]\n${retrieved.map(d => d.content).join('\n---\n')}`,
142
+ _meta: {
143
+ summaryId: `context_${threadId}`,
144
+ droppable: true,
145
+ priority: 90,
146
+ },
147
+ };
148
+ // Insert after summary (or first system)
149
+ const insertIdx = processedMessages.findIndex(m => m._meta?.summaryId?.startsWith('summary_'));
150
+ if (insertIdx >= 0) {
151
+ processedMessages.splice(insertIdx + 1, 0, contextMessage);
152
+ }
153
+ else {
154
+ const firstSystemIdx = processedMessages.findIndex(m => m.role === 'system');
155
+ processedMessages.splice(firstSystemIdx + 1, 0, contextMessage);
156
+ }
157
+ }
158
+ }
159
+ }
160
+ return {
161
+ messages: processedMessages,
162
+ summarized,
163
+ summary,
164
+ droppedCount,
165
+ };
166
+ }
167
+ /**
168
+ * Generate summary from messages.
169
+ * Override this method for custom summarization logic.
170
+ */
171
+ async generateSummary(messages, _threadId) {
172
+ // Default: Simple concatenation (override for LLM-based summarization)
173
+ const userMessages = messages
174
+ .filter(m => m.role === 'user' && typeof m.content === 'string')
175
+ .map(m => m.content);
176
+ const assistantMessages = messages
177
+ .filter(m => m.role === 'assistant' && typeof m.content === 'string')
178
+ .map(m => m.content);
179
+ return [
180
+ `User discussed: ${userMessages.slice(0, 3).join(', ').slice(0, 200)}...`,
181
+ `Assistant covered: ${assistantMessages.slice(0, 3).join(', ').slice(0, 200)}...`,
182
+ ].join('\n');
183
+ }
184
+ /**
185
+ * Store messages to long-term memory.
186
+ */
187
+ async persist(messages, threadId) {
188
+ if (!this.config.longTerm)
189
+ return;
190
+ const documents = messages
191
+ .filter(m => typeof m.content === 'string' && m.content.length > 20)
192
+ .map((m, i) => ({
193
+ id: `${threadId}_${Date.now()}_${i}`,
194
+ content: m.content,
195
+ metadata: { role: m.role, threadId },
196
+ }));
197
+ await this.config.longTerm.store.add(documents);
198
+ }
199
+ /**
200
+ * Clear memory for a thread.
201
+ */
202
+ clearThread(threadId) {
203
+ this.summaries.delete(threadId);
204
+ }
205
+ /**
206
+ * Clear all memory.
207
+ */
208
+ async clearAll() {
209
+ this.summaries.clear();
210
+ if (this.config.longTerm) {
211
+ await this.config.longTerm.store.clear();
212
+ }
213
+ }
214
+ /**
215
+ * Get current summary for a thread.
216
+ */
217
+ getSummary(threadId) {
218
+ return this.summaries.get(threadId);
219
+ }
220
+ /**
221
+ * Set summary for a thread (manual override).
222
+ */
223
+ setSummary(threadId, summary) {
224
+ this.summaries.set(threadId, summary);
225
+ }
226
+ }
227
+ exports.MemoryManager = MemoryManager;
228
+ // ============================================================================
229
+ // Helper: Check if message is droppable
230
+ // ============================================================================
231
+ /**
232
+ * Check if a message is droppable (skill or summary).
233
+ */
234
+ function isDroppable(message) {
235
+ const meta = message._meta;
236
+ if (!meta?.droppable)
237
+ return false;
238
+ return meta.skillId != null || meta.summaryId != null;
239
+ }
240
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/ai/memory/index.ts"],"names":[],"mappings":"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"}