indusagi 0.12.13 → 0.12.15

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 (142) hide show
  1. package/dist/agent/tools/registry.d.ts +1 -1
  2. package/dist/agent/tools/registry.d.ts.map +1 -1
  3. package/dist/agent/types.d.ts +1 -0
  4. package/dist/agent/types.d.ts.map +1 -1
  5. package/dist/agent/types.js.map +1 -1
  6. package/dist/ai/models.generated.d.ts +621 -53
  7. package/dist/ai/models.generated.d.ts.map +1 -1
  8. package/dist/ai/models.generated.js +548 -0
  9. package/dist/ai/models.generated.js.map +1 -1
  10. package/dist/index.d.ts +1 -0
  11. package/dist/index.d.ts.map +1 -1
  12. package/dist/index.js +1 -0
  13. package/dist/index.js.map +1 -1
  14. package/dist/mcp/client-pool.d.ts +106 -0
  15. package/dist/mcp/client-pool.d.ts.map +1 -0
  16. package/dist/mcp/client-pool.js +233 -0
  17. package/dist/mcp/client-pool.js.map +1 -0
  18. package/dist/mcp/client.d.ts +158 -0
  19. package/dist/mcp/client.d.ts.map +1 -0
  20. package/dist/mcp/client.js +586 -0
  21. package/dist/mcp/client.js.map +1 -0
  22. package/dist/mcp/config.d.ts +61 -0
  23. package/dist/mcp/config.d.ts.map +1 -0
  24. package/dist/mcp/config.js +250 -0
  25. package/dist/mcp/config.js.map +1 -0
  26. package/dist/mcp/errors.d.ts +104 -0
  27. package/dist/mcp/errors.d.ts.map +1 -0
  28. package/dist/mcp/errors.js +138 -0
  29. package/dist/mcp/errors.js.map +1 -0
  30. package/dist/mcp/index.d.ts +56 -0
  31. package/dist/mcp/index.d.ts.map +1 -0
  32. package/dist/mcp/index.js +83 -0
  33. package/dist/mcp/index.js.map +1 -0
  34. package/dist/mcp/schema-converter.d.ts +68 -0
  35. package/dist/mcp/schema-converter.d.ts.map +1 -0
  36. package/dist/mcp/schema-converter.js +230 -0
  37. package/dist/mcp/schema-converter.js.map +1 -0
  38. package/dist/mcp/server.d.ts +111 -0
  39. package/dist/mcp/server.d.ts.map +1 -0
  40. package/dist/mcp/server.js +300 -0
  41. package/dist/mcp/server.js.map +1 -0
  42. package/dist/mcp/tool-factory.d.ts +63 -0
  43. package/dist/mcp/tool-factory.d.ts.map +1 -0
  44. package/dist/mcp/tool-factory.js +228 -0
  45. package/dist/mcp/tool-factory.js.map +1 -0
  46. package/dist/mcp/types.d.ts +289 -0
  47. package/dist/mcp/types.d.ts.map +1 -0
  48. package/dist/mcp/types.js +8 -0
  49. package/dist/mcp/types.js.map +1 -0
  50. package/dist/mcp.d.ts +6 -0
  51. package/dist/mcp.d.ts.map +1 -0
  52. package/dist/mcp.js +6 -0
  53. package/dist/mcp.js.map +1 -0
  54. package/dist/memory/embedder/base.d.ts +41 -0
  55. package/dist/memory/embedder/base.d.ts.map +1 -0
  56. package/dist/memory/embedder/base.js +10 -0
  57. package/dist/memory/embedder/base.js.map +1 -0
  58. package/dist/memory/embedder/index.d.ts +8 -0
  59. package/dist/memory/embedder/index.d.ts.map +1 -0
  60. package/dist/memory/embedder/index.js +6 -0
  61. package/dist/memory/embedder/index.js.map +1 -0
  62. package/dist/memory/embedder/openai.d.ts +35 -0
  63. package/dist/memory/embedder/openai.d.ts.map +1 -0
  64. package/dist/memory/embedder/openai.js +103 -0
  65. package/dist/memory/embedder/openai.js.map +1 -0
  66. package/dist/memory/index.d.ts +33 -0
  67. package/dist/memory/index.d.ts.map +1 -0
  68. package/dist/memory/index.js +31 -0
  69. package/dist/memory/index.js.map +1 -0
  70. package/dist/memory/memory.d.ts +126 -0
  71. package/dist/memory/memory.d.ts.map +1 -0
  72. package/dist/memory/memory.js +280 -0
  73. package/dist/memory/memory.js.map +1 -0
  74. package/dist/memory/processors/base.d.ts +42 -0
  75. package/dist/memory/processors/base.d.ts.map +1 -0
  76. package/dist/memory/processors/base.js +6 -0
  77. package/dist/memory/processors/base.js.map +1 -0
  78. package/dist/memory/processors/index.d.ts +16 -0
  79. package/dist/memory/processors/index.d.ts.map +1 -0
  80. package/dist/memory/processors/index.js +18 -0
  81. package/dist/memory/processors/index.js.map +1 -0
  82. package/dist/memory/processors/message-history.d.ts +35 -0
  83. package/dist/memory/processors/message-history.d.ts.map +1 -0
  84. package/dist/memory/processors/message-history.js +51 -0
  85. package/dist/memory/processors/message-history.js.map +1 -0
  86. package/dist/memory/processors/observational-memory/index.d.ts +82 -0
  87. package/dist/memory/processors/observational-memory/index.d.ts.map +1 -0
  88. package/dist/memory/processors/observational-memory/index.js +234 -0
  89. package/dist/memory/processors/observational-memory/index.js.map +1 -0
  90. package/dist/memory/processors/observational-memory/observer-agent.d.ts +64 -0
  91. package/dist/memory/processors/observational-memory/observer-agent.d.ts.map +1 -0
  92. package/dist/memory/processors/observational-memory/observer-agent.js +362 -0
  93. package/dist/memory/processors/observational-memory/observer-agent.js.map +1 -0
  94. package/dist/memory/processors/observational-memory/reflector-agent.d.ts +38 -0
  95. package/dist/memory/processors/observational-memory/reflector-agent.d.ts.map +1 -0
  96. package/dist/memory/processors/observational-memory/reflector-agent.js +213 -0
  97. package/dist/memory/processors/observational-memory/reflector-agent.js.map +1 -0
  98. package/dist/memory/processors/observational-memory/token-counter.d.ts +35 -0
  99. package/dist/memory/processors/observational-memory/token-counter.d.ts.map +1 -0
  100. package/dist/memory/processors/observational-memory/token-counter.js +90 -0
  101. package/dist/memory/processors/observational-memory/token-counter.js.map +1 -0
  102. package/dist/memory/processors/semantic-recall.d.ts +55 -0
  103. package/dist/memory/processors/semantic-recall.d.ts.map +1 -0
  104. package/dist/memory/processors/semantic-recall.js +143 -0
  105. package/dist/memory/processors/semantic-recall.js.map +1 -0
  106. package/dist/memory/processors/working-memory.d.ts +41 -0
  107. package/dist/memory/processors/working-memory.d.ts.map +1 -0
  108. package/dist/memory/processors/working-memory.js +82 -0
  109. package/dist/memory/processors/working-memory.js.map +1 -0
  110. package/dist/memory/storage/base.d.ts +288 -0
  111. package/dist/memory/storage/base.d.ts.map +1 -0
  112. package/dist/memory/storage/base.js +211 -0
  113. package/dist/memory/storage/base.js.map +1 -0
  114. package/dist/memory/storage/index.d.ts +9 -0
  115. package/dist/memory/storage/index.d.ts.map +1 -0
  116. package/dist/memory/storage/index.js +7 -0
  117. package/dist/memory/storage/index.js.map +1 -0
  118. package/dist/memory/storage/inmemory.d.ts +93 -0
  119. package/dist/memory/storage/inmemory.d.ts.map +1 -0
  120. package/dist/memory/storage/inmemory.js +646 -0
  121. package/dist/memory/storage/inmemory.js.map +1 -0
  122. package/dist/memory/tools/working-memory.d.ts +100 -0
  123. package/dist/memory/tools/working-memory.d.ts.map +1 -0
  124. package/dist/memory/tools/working-memory.js +237 -0
  125. package/dist/memory/tools/working-memory.js.map +1 -0
  126. package/dist/memory/types.d.ts +386 -0
  127. package/dist/memory/types.d.ts.map +1 -0
  128. package/dist/memory/types.js +58 -0
  129. package/dist/memory/types.js.map +1 -0
  130. package/dist/memory/vector/base.d.ts +145 -0
  131. package/dist/memory/vector/base.d.ts.map +1 -0
  132. package/dist/memory/vector/base.js +83 -0
  133. package/dist/memory/vector/base.js.map +1 -0
  134. package/dist/memory/vector/index.d.ts +8 -0
  135. package/dist/memory/vector/index.d.ts.map +1 -0
  136. package/dist/memory/vector/index.js +7 -0
  137. package/dist/memory/vector/index.js.map +1 -0
  138. package/dist/memory/vector/inmemory.d.ts +47 -0
  139. package/dist/memory/vector/inmemory.d.ts.map +1 -0
  140. package/dist/memory/vector/inmemory.js +234 -0
  141. package/dist/memory/vector/inmemory.js.map +1 -0
  142. package/package.json +32 -2
@@ -0,0 +1,82 @@
1
+ /**
2
+ * Observational Memory Processor
3
+ * Based on Mastra ObservationalMemory
4
+ */
5
+ import type { MemoryProcessor, ProcessorContext } from "../base.js";
6
+ import type { CoreMessage, ObservationalMemoryOptions } from "../../types.js";
7
+ import type { MemoryStorage } from "../../storage/base.js";
8
+ /**
9
+ * Default observational memory configuration
10
+ */
11
+ export declare const OBSERVATIONAL_MEMORY_DEFAULTS: {
12
+ readonly observation: {
13
+ readonly model: "google/gemini-2.5-flash";
14
+ readonly messageTokens: 30000;
15
+ readonly modelSettings: {
16
+ readonly temperature: 0.3;
17
+ readonly maxOutputTokens: 100000;
18
+ };
19
+ readonly maxTokensPerBatch: 10000;
20
+ readonly bufferTokens: 0.2;
21
+ readonly bufferActivation: 0.8;
22
+ };
23
+ readonly reflection: {
24
+ readonly model: "google/gemini-2.5-flash";
25
+ readonly observationTokens: 40000;
26
+ readonly modelSettings: {
27
+ readonly temperature: 0;
28
+ readonly maxOutputTokens: 100000;
29
+ };
30
+ readonly bufferActivation: 0.5;
31
+ };
32
+ };
33
+ /**
34
+ * Continuation hint for observation batches
35
+ */
36
+ export declare const OBSERVATION_CONTINUATION_HINT = "This message is not from the user...";
37
+ /**
38
+ * Observational memory processor configuration
39
+ */
40
+ export interface ObservationalMemoryProcessorConfig {
41
+ storage: MemoryStorage;
42
+ config: ObservationalMemoryOptions;
43
+ model?: string;
44
+ callLLM?: (params: {
45
+ systemPrompt: string;
46
+ userPrompt: string;
47
+ model?: string;
48
+ modelSettings?: Record<string, unknown>;
49
+ }) => Promise<string>;
50
+ }
51
+ /**
52
+ * Observational Memory Processor
53
+ *
54
+ * Implements a three-tier memory system:
55
+ * 1. Observer: Extracts observations from messages
56
+ * 2. Reflector: Consolidates observations when they grow too large
57
+ * 3. Actor: Uses observations as context for responses
58
+ */
59
+ export declare class ObservationalMemory implements MemoryProcessor {
60
+ readonly id = "observational-memory";
61
+ readonly name = "Observational Memory Processor";
62
+ private storage;
63
+ private config;
64
+ private model?;
65
+ private callLLM?;
66
+ private tokenCounter;
67
+ constructor(config: ObservationalMemoryProcessorConfig);
68
+ processInputStep(args: {
69
+ messages: CoreMessage[];
70
+ context: ProcessorContext;
71
+ }): Promise<CoreMessage[]>;
72
+ processOutputResult(args: {
73
+ messages: CoreMessage[];
74
+ context: ProcessorContext;
75
+ }): Promise<CoreMessage[]>;
76
+ private runObservation;
77
+ private runReflection;
78
+ private getOrCreateRecord;
79
+ private getObservationConfig;
80
+ private getReflectionConfig;
81
+ }
82
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/memory/processors/observational-memory/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AACpE,OAAO,KAAK,EAAE,WAAW,EAAE,0BAA0B,EAAuC,MAAM,gBAAgB,CAAC;AACnH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AA0B3D;;GAEG;AACH,eAAO,MAAM,6BAA6B;;;;;;;;;;;;;;;;;;;;;CAehC,CAAC;AAEX;;GAEG;AACH,eAAO,MAAM,6BAA6B,yCAAyC,CAAC;AAEpF;;GAEG;AACH,MAAM,WAAW,kCAAkC;IACjD,OAAO,EAAE,aAAa,CAAC;IACvB,MAAM,EAAE,0BAA0B,CAAC;IACnC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,CAAC,MAAM,EAAE;QACjB,YAAY,EAAE,MAAM,CAAC;QACrB,UAAU,EAAE,MAAM,CAAC;QACnB,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,aAAa,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;KACzC,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;CACvB;AAED;;;;;;;GAOG;AACH,qBAAa,mBAAoB,YAAW,eAAe;IACzD,QAAQ,CAAC,EAAE,0BAA0B;IACrC,QAAQ,CAAC,IAAI,oCAAoC;IAEjD,OAAO,CAAC,OAAO,CAAgB;IAC/B,OAAO,CAAC,MAAM,CAA6B;IAC3C,OAAO,CAAC,KAAK,CAAC,CAAS;IACvB,OAAO,CAAC,OAAO,CAAC,CAAgD;IAChE,OAAO,CAAC,YAAY,CAAe;gBAEvB,MAAM,EAAE,kCAAkC;IAYhD,gBAAgB,CAAC,IAAI,EAAE;QAC3B,QAAQ,EAAE,WAAW,EAAE,CAAC;QACxB,OAAO,EAAE,gBAAgB,CAAC;KAC3B,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;IAsCpB,mBAAmB,CAAC,IAAI,EAAE;QAC9B,QAAQ,EAAE,WAAW,EAAE,CAAC;QACxB,OAAO,EAAE,gBAAgB,CAAC;KAC3B,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;YA+BZ,cAAc;YAoEd,aAAa;YAgEb,iBAAiB;IAoB/B,OAAO,CAAC,oBAAoB;IAO5B,OAAO,CAAC,mBAAmB;CAM5B"}
@@ -0,0 +1,234 @@
1
+ /**
2
+ * Observational Memory Processor
3
+ * Based on Mastra ObservationalMemory
4
+ */
5
+ import { TokenCounter } from "./token-counter.js";
6
+ import { buildObserverSystemPrompt, buildObserverPrompt, parseObserverOutput, } from "./observer-agent.js";
7
+ import { buildReflectorSystemPrompt, buildReflectorPrompt, parseReflectorOutput, validateCompression, } from "./reflector-agent.js";
8
+ /**
9
+ * Default observational memory configuration
10
+ */
11
+ export const OBSERVATIONAL_MEMORY_DEFAULTS = {
12
+ observation: {
13
+ model: "google/gemini-2.5-flash",
14
+ messageTokens: 30_000,
15
+ modelSettings: { temperature: 0.3, maxOutputTokens: 100_000 },
16
+ maxTokensPerBatch: 10_000,
17
+ bufferTokens: 0.2,
18
+ bufferActivation: 0.8,
19
+ },
20
+ reflection: {
21
+ model: "google/gemini-2.5-flash",
22
+ observationTokens: 40_000,
23
+ modelSettings: { temperature: 0, maxOutputTokens: 100_000 },
24
+ bufferActivation: 0.5,
25
+ },
26
+ };
27
+ /**
28
+ * Continuation hint for observation batches
29
+ */
30
+ export const OBSERVATION_CONTINUATION_HINT = `This message is not from the user...`;
31
+ /**
32
+ * Observational Memory Processor
33
+ *
34
+ * Implements a three-tier memory system:
35
+ * 1. Observer: Extracts observations from messages
36
+ * 2. Reflector: Consolidates observations when they grow too large
37
+ * 3. Actor: Uses observations as context for responses
38
+ */
39
+ export class ObservationalMemory {
40
+ constructor(config) {
41
+ this.id = "observational-memory";
42
+ this.name = "Observational Memory Processor";
43
+ this.storage = config.storage;
44
+ this.config = config.config;
45
+ this.model = config.model;
46
+ this.callLLM = config.callLLM;
47
+ this.tokenCounter = new TokenCounter();
48
+ }
49
+ // ========================================================================
50
+ // Input Processing
51
+ // ========================================================================
52
+ async processInputStep(args) {
53
+ const { messages, context } = args;
54
+ // Get or initialize observational memory record
55
+ const record = await this.getOrCreateRecord(context);
56
+ // Build context with observations
57
+ const contextMessages = [];
58
+ // Add observations if available
59
+ if (record.activeObservations) {
60
+ const observationsMessage = {
61
+ id: `observations-${Date.now()}`,
62
+ role: "system",
63
+ content: `<observational_memory>\n${record.activeObservations}\n</observational_memory>`,
64
+ createdAt: new Date(),
65
+ };
66
+ contextMessages.push(observationsMessage);
67
+ }
68
+ // Get recent messages from storage
69
+ const { messages: storedMessages } = await this.storage.listMessages({
70
+ threadId: context.threadId,
71
+ perPage: 50,
72
+ orderBy: { field: "createdAt", direction: "DESC" },
73
+ });
74
+ // Reverse to get chronological order
75
+ const chronologicalMessages = storedMessages.reverse();
76
+ // Combine: observations + stored messages + new messages
77
+ return [...contextMessages, ...chronologicalMessages, ...messages];
78
+ }
79
+ // ========================================================================
80
+ // Output Processing
81
+ // ========================================================================
82
+ async processOutputResult(args) {
83
+ const { messages, context } = args;
84
+ // Check if read-only
85
+ if (context.memoryConfig?.readOnly) {
86
+ return messages;
87
+ }
88
+ // Save new messages
89
+ await this.storage.saveMessages({ messages });
90
+ // Check if observation is needed
91
+ const record = await this.getOrCreateRecord(context);
92
+ const newTokens = this.tokenCounter.countMessages(messages);
93
+ const totalPendingTokens = record.pendingMessageTokens + newTokens;
94
+ const observationConfig = this.getObservationConfig();
95
+ const threshold = observationConfig.messageTokens ?? 30_000;
96
+ if (totalPendingTokens >= threshold) {
97
+ // Trigger observation
98
+ await this.runObservation(context, record, totalPendingTokens);
99
+ }
100
+ return messages;
101
+ }
102
+ // ========================================================================
103
+ // Observation
104
+ // ========================================================================
105
+ async runObservation(context, record, pendingTokens) {
106
+ const observationConfig = this.getObservationConfig();
107
+ // Get unobserved messages
108
+ const { messages } = await this.storage.listMessages({
109
+ threadId: context.threadId,
110
+ perPage: 100,
111
+ });
112
+ // Build prompt
113
+ const systemPrompt = buildObserverSystemPrompt(false, observationConfig.instruction);
114
+ const userPrompt = buildObserverPrompt(record.activeObservations || undefined, messages);
115
+ // Call LLM
116
+ if (!this.callLLM) {
117
+ console.warn("ObservationalMemory: No LLM call function provided, skipping observation");
118
+ return;
119
+ }
120
+ try {
121
+ const output = await this.callLLM({
122
+ systemPrompt,
123
+ userPrompt,
124
+ model: observationConfig.model ?? this.model,
125
+ modelSettings: observationConfig.modelSettings,
126
+ });
127
+ const result = parseObserverOutput(output);
128
+ if (result.degenerate) {
129
+ console.warn("ObservationalMemory: Degenerate output detected, skipping");
130
+ return;
131
+ }
132
+ // Update record with new observations
133
+ const newObservations = record.activeObservations
134
+ ? `${record.activeObservations}\n\n${result.observations}`
135
+ : result.observations;
136
+ const newTokenCount = this.tokenCounter.countObservations(newObservations);
137
+ await this.storage.updateActiveObservations({
138
+ id: record.id,
139
+ observations: newObservations,
140
+ tokenCount: newTokenCount,
141
+ lastObservedAt: new Date(),
142
+ });
143
+ // Check if reflection is needed
144
+ const reflectionConfig = this.getReflectionConfig();
145
+ const reflectionThreshold = reflectionConfig.observationTokens ?? 40_000;
146
+ if (newTokenCount >= reflectionThreshold) {
147
+ await this.runReflection(context, newObservations);
148
+ }
149
+ }
150
+ catch (error) {
151
+ console.error("ObservationalMemory: Observation failed:", error);
152
+ }
153
+ }
154
+ // ========================================================================
155
+ // Reflection
156
+ // ========================================================================
157
+ async runReflection(context, observations) {
158
+ const reflectionConfig = this.getReflectionConfig();
159
+ if (!this.callLLM) {
160
+ return;
161
+ }
162
+ const systemPrompt = buildReflectorSystemPrompt(reflectionConfig.instruction);
163
+ const userPrompt = buildReflectorPrompt(observations);
164
+ try {
165
+ let output = await this.callLLM({
166
+ systemPrompt,
167
+ userPrompt,
168
+ model: reflectionConfig.model ?? this.model,
169
+ modelSettings: reflectionConfig.modelSettings,
170
+ });
171
+ let result = parseReflectorOutput(output);
172
+ // Try compression if needed
173
+ const targetThreshold = reflectionConfig.observationTokens ?? 40_000;
174
+ let compressionLevel = 0;
175
+ while (!result.degenerate &&
176
+ compressionLevel < 3 &&
177
+ !validateCompression(this.tokenCounter.countObservations(result.observations), targetThreshold)) {
178
+ compressionLevel = Math.min(3, compressionLevel + 1);
179
+ const retryPrompt = buildReflectorPrompt(observations, undefined, compressionLevel);
180
+ output = await this.callLLM({
181
+ systemPrompt,
182
+ userPrompt: retryPrompt,
183
+ model: reflectionConfig.model ?? this.model,
184
+ modelSettings: reflectionConfig.modelSettings,
185
+ });
186
+ result = parseReflectorOutput(output);
187
+ }
188
+ if (result.degenerate) {
189
+ console.warn("ObservationalMemory: Degenerate reflection output, keeping original observations");
190
+ return;
191
+ }
192
+ // Create new generation with reflected observations
193
+ const record = await this.getOrCreateRecord(context);
194
+ await this.storage.createReflectionGeneration({
195
+ currentRecord: record,
196
+ reflection: result.observations,
197
+ tokenCount: this.tokenCounter.countObservations(result.observations),
198
+ });
199
+ }
200
+ catch (error) {
201
+ console.error("ObservationalMemory: Reflection failed:", error);
202
+ }
203
+ }
204
+ // ========================================================================
205
+ // Helpers
206
+ // ========================================================================
207
+ async getOrCreateRecord(context) {
208
+ const scope = this.config.scope ?? "thread";
209
+ const threadId = scope === "thread" ? context.threadId : null;
210
+ let record = await this.storage.getObservationalMemory(threadId, context.resourceId);
211
+ if (!record) {
212
+ record = await this.storage.initializeObservationalMemory({
213
+ threadId,
214
+ resourceId: context.resourceId,
215
+ scope,
216
+ config: this.config,
217
+ });
218
+ }
219
+ return record;
220
+ }
221
+ getObservationConfig() {
222
+ return {
223
+ ...OBSERVATIONAL_MEMORY_DEFAULTS.observation,
224
+ ...this.config.observation,
225
+ };
226
+ }
227
+ getReflectionConfig() {
228
+ return {
229
+ ...OBSERVATIONAL_MEMORY_DEFAULTS.reflection,
230
+ ...this.config.reflection,
231
+ };
232
+ }
233
+ }
234
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/memory/processors/observational-memory/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,64 @@
1
+ /**
2
+ * Observer Agent - Prompts and Parsing
3
+ * Based on Mastra ObserverAgent
4
+ */
5
+ import type { CoreMessage } from "../../types.js";
6
+ /**
7
+ * Core extraction instructions for the Observer
8
+ */
9
+ export declare const OBSERVER_EXTRACTION_INSTRUCTIONS = "CRITICAL: DISTINGUISH USER ASSERTIONS FROM QUESTIONS\n\nWhen the user TELLS you something about themselves, mark it as an assertion:\n- \"I have two kids\" \u2192 \uD83D\uDD34 (14:30) User stated has two kids\n- \"I work at Acme Corp\" \u2192 \uD83D\uDD34 (14:31) User stated works at Acme Corp\n\nWhen the user ASKS about something, mark it as a question/request:\n- \"Can you help me with X?\" \u2192 \uD83D\uDD34 (15:00) User asked help with X\n- \"What's the best way to do Y?\" \u2192 \uD83D\uDD34 (15:01) User asked best way to do Y\n\nSTATE CHANGES AND UPDATES:\nWhen a user indicates they are changing something, frame it as a state change:\n- \"I'm going to start doing X instead of Y\" \u2192 \"User will start doing X (changing from Y)\"\n- \"I'm switching from A to B\" \u2192 \"User is switching from A to B\"\n\nTEMPORAL ANCHORING:\nEach observation has TWO potential timestamps:\n1. BEGINNING: The time the statement was made - ALWAYS include this\n2. END: The time being REFERENCED, if different - ONLY when there's a relative time reference\n\nFORMAT:\n- With time reference: (TIME) [observation]. (meaning/estimated DATE)\n- Without time reference: (TIME) [observation].\n\nCONVERSATION CONTEXT:\n- What the user is working on or asking about\n- Previous topics and their outcomes\n- User preferences (likes, dislikes, etc.)\n- Any specifically formatted text that needs to be reproduced later\n- When who/what/where/when is mentioned, note all details\n\nUSER MESSAGE CAPTURE:\n- Short and medium-length user messages should be captured nearly verbatim\n- For very long user messages, summarize but quote key phrases\n\nAVOIDING REPETITIVE OBSERVATIONS:\n- Do NOT repeat the same observation across multiple turns\n- Group repeated similar actions into a single parent observation";
10
+ /**
11
+ * Output format for Observer
12
+ */
13
+ export declare const OBSERVER_OUTPUT_FORMAT_BASE = "Use priority levels:\n- \uD83D\uDD34 High: explicit user facts, preferences, goals achieved, critical context\n- \uD83D\uDFE1 Medium: project details, learned information, tool results\n- \uD83D\uDFE2 Low: minor details, uncertain observations\n\nGroup related observations by indenting:\n* \uD83D\uDD34 (14:33) Agent debugging auth issue\n * -> ran git status, found 3 modified files\n * -> viewed auth.ts, found missing null check\n\nGroup observations by date, then list each with 24-hour time.\n\n<observations>\nDate: Dec 4, 2025\n* \uD83D\uDD34 (14:30) User prefers direct answers\n* \uD83D\uDD34 (14:31) Working on feature X\n* \uD83D\uDFE1 (14:32) User might prefer dark mode\n\nDate: Dec 5, 2025\n* \uD83D\uDD34 (09:15) Continued work on feature X\n</observations>\n\n<current-task>\nState the current task(s) explicitly.\n</current-task>\n\n<suggested-response>\nHint for the agent's immediate next message.\n</suggested-response>";
14
+ /**
15
+ * Observer guidelines
16
+ */
17
+ export declare const OBSERVER_GUIDELINES = "- Be specific enough for the assistant to act on\n- Add 1 to 5 observations per exchange\n- Use terse language to save tokens\n- Do not add repetitive observations\n- If the agent calls tools, observe what was called and what was learned\n- Make sure you start each observation with a priority emoji (\uD83D\uDD34, \uD83D\uDFE1, \uD83D\uDFE2)\n- User messages are always \uD83D\uDD34 priority";
18
+ /**
19
+ * Result from Observer agent
20
+ */
21
+ export interface ObserverResult {
22
+ observations: string;
23
+ currentTask?: string;
24
+ suggestedContinuation?: string;
25
+ rawOutput?: string;
26
+ degenerate?: boolean;
27
+ }
28
+ /**
29
+ * Build the Observer system prompt
30
+ */
31
+ export declare function buildObserverSystemPrompt(multiThread?: boolean, instruction?: string): string;
32
+ /**
33
+ * Default Observer system prompt
34
+ */
35
+ export declare const OBSERVER_SYSTEM_PROMPT: string;
36
+ /**
37
+ * Format messages for Observer input
38
+ */
39
+ export declare function formatMessagesForObserver(messages: CoreMessage[], options?: {
40
+ maxPartLength?: number;
41
+ }): string;
42
+ /**
43
+ * Build the Observer prompt
44
+ */
45
+ export declare function buildObserverPrompt(existingObservations: string | undefined, messagesToObserve: CoreMessage[], options?: {
46
+ skipContinuationHints?: boolean;
47
+ }): string;
48
+ /**
49
+ * Parse Observer output
50
+ */
51
+ export declare function parseObserverOutput(output: string): ObserverResult;
52
+ /**
53
+ * Truncate observation lines that exceed max length
54
+ */
55
+ export declare function sanitizeObservationLines(observations: string): string;
56
+ /**
57
+ * Detect degenerate repetition in output
58
+ */
59
+ export declare function detectDegenerateRepetition(text: string): boolean;
60
+ /**
61
+ * Optimize observations for token efficiency
62
+ */
63
+ export declare function optimizeObservationsForContext(observations: string): string;
64
+ //# sourceMappingURL=observer-agent.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"observer-agent.d.ts","sourceRoot":"","sources":["../../../../src/memory/processors/observational-memory/observer-agent.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAoB,MAAM,gBAAgB,CAAC;AAEpE;;GAEG;AACH,eAAO,MAAM,gCAAgC,4wDAqCqB,CAAC;AAEnE;;GAEG;AACH,eAAO,MAAM,2BAA2B,m7BA4BlB,CAAC;AAEvB;;GAEG;AACH,eAAO,MAAM,mBAAmB,6YAMO,CAAC;AAExC;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AAED;;GAEG;AACH,wBAAgB,yBAAyB,CAAC,WAAW,GAAE,OAAe,EAAE,WAAW,CAAC,EAAE,MAAM,GAAG,MAAM,CA0DpG;AAED;;GAEG;AACH,eAAO,MAAM,sBAAsB,QAA8B,CAAC;AAElE;;GAEG;AACH,wBAAgB,yBAAyB,CAAC,QAAQ,EAAE,WAAW,EAAE,EAAE,OAAO,CAAC,EAAE;IAAE,aAAa,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,MAAM,CA8C/G;AAUD;;GAEG;AACH,wBAAgB,mBAAmB,CACjC,oBAAoB,EAAE,MAAM,GAAG,SAAS,EACxC,iBAAiB,EAAE,WAAW,EAAE,EAChC,OAAO,CAAC,EAAE;IAAE,qBAAqB,CAAC,EAAE,OAAO,CAAA;CAAE,GAC5C,MAAM,CAoBR;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,MAAM,GAAG,cAAc,CAmBlE;AAqED;;GAEG;AACH,wBAAgB,wBAAwB,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM,CAWrE;AAED;;GAEG;AACH,wBAAgB,0BAA0B,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CA4BhE;AAED;;GAEG;AACH,wBAAgB,8BAA8B,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM,CAoB3E"}