@duetso/agent 0.1.20

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 (148) hide show
  1. package/LICENSE +189 -0
  2. package/README.md +315 -0
  3. package/dist/package.json +84 -0
  4. package/dist/src/cli.d.ts +23 -0
  5. package/dist/src/cli.d.ts.map +1 -0
  6. package/dist/src/cli.js +754 -0
  7. package/dist/src/cli.js.map +1 -0
  8. package/dist/src/core/serializer.d.ts +3 -0
  9. package/dist/src/core/serializer.d.ts.map +1 -0
  10. package/dist/src/core/serializer.js +22 -0
  11. package/dist/src/core/serializer.js.map +1 -0
  12. package/dist/src/core/structured-output.d.ts +13 -0
  13. package/dist/src/core/structured-output.d.ts.map +1 -0
  14. package/dist/src/core/structured-output.js +41 -0
  15. package/dist/src/core/structured-output.js.map +1 -0
  16. package/dist/src/guardrails/firewall.d.ts +7 -0
  17. package/dist/src/guardrails/firewall.d.ts.map +1 -0
  18. package/dist/src/guardrails/firewall.js +31 -0
  19. package/dist/src/guardrails/firewall.js.map +1 -0
  20. package/dist/src/guardrails/pattern.d.ts +13 -0
  21. package/dist/src/guardrails/pattern.d.ts.map +1 -0
  22. package/dist/src/guardrails/pattern.js +70 -0
  23. package/dist/src/guardrails/pattern.js.map +1 -0
  24. package/dist/src/guardrails/semantic.d.ts +14 -0
  25. package/dist/src/guardrails/semantic.d.ts.map +1 -0
  26. package/dist/src/guardrails/semantic.js +47 -0
  27. package/dist/src/guardrails/semantic.js.map +1 -0
  28. package/dist/src/index.d.ts +20 -0
  29. package/dist/src/index.d.ts.map +1 -0
  30. package/dist/src/index.js +20 -0
  31. package/dist/src/index.js.map +1 -0
  32. package/dist/src/lib/compact-json.d.ts +11 -0
  33. package/dist/src/lib/compact-json.d.ts.map +1 -0
  34. package/dist/src/lib/compact-json.js +36 -0
  35. package/dist/src/lib/compact-json.js.map +1 -0
  36. package/dist/src/lib/xml.d.ts +3 -0
  37. package/dist/src/lib/xml.d.ts.map +1 -0
  38. package/dist/src/lib/xml.js +9 -0
  39. package/dist/src/lib/xml.js.map +1 -0
  40. package/dist/src/memory/observation-groups.d.ts +15 -0
  41. package/dist/src/memory/observation-groups.d.ts.map +1 -0
  42. package/dist/src/memory/observation-groups.js +159 -0
  43. package/dist/src/memory/observation-groups.js.map +1 -0
  44. package/dist/src/memory/observational-prompts.d.ts +27 -0
  45. package/dist/src/memory/observational-prompts.d.ts.map +1 -0
  46. package/dist/src/memory/observational-prompts.js +237 -0
  47. package/dist/src/memory/observational-prompts.js.map +1 -0
  48. package/dist/src/memory/observational.d.ts +63 -0
  49. package/dist/src/memory/observational.d.ts.map +1 -0
  50. package/dist/src/memory/observational.js +605 -0
  51. package/dist/src/memory/observational.js.map +1 -0
  52. package/dist/src/memory/storage.d.ts +3 -0
  53. package/dist/src/memory/storage.d.ts.map +1 -0
  54. package/dist/src/memory/storage.js +127 -0
  55. package/dist/src/memory/storage.js.map +1 -0
  56. package/dist/src/memory/store.d.ts +13 -0
  57. package/dist/src/memory/store.d.ts.map +1 -0
  58. package/dist/src/memory/store.js +106 -0
  59. package/dist/src/memory/store.js.map +1 -0
  60. package/dist/src/model-resolution/duet-gateway.d.ts +35 -0
  61. package/dist/src/model-resolution/duet-gateway.d.ts.map +1 -0
  62. package/dist/src/model-resolution/duet-gateway.js +56 -0
  63. package/dist/src/model-resolution/duet-gateway.js.map +1 -0
  64. package/dist/src/model-resolution/index.d.ts +31 -0
  65. package/dist/src/model-resolution/index.d.ts.map +1 -0
  66. package/dist/src/model-resolution/index.js +129 -0
  67. package/dist/src/model-resolution/index.js.map +1 -0
  68. package/dist/src/session/session-manager.d.ts +45 -0
  69. package/dist/src/session/session-manager.d.ts.map +1 -0
  70. package/dist/src/session/session-manager.js +94 -0
  71. package/dist/src/session/session-manager.js.map +1 -0
  72. package/dist/src/session/session.d.ts +113 -0
  73. package/dist/src/session/session.d.ts.map +1 -0
  74. package/dist/src/session/session.js +308 -0
  75. package/dist/src/session/session.js.map +1 -0
  76. package/dist/src/tui/app.d.ts +60 -0
  77. package/dist/src/tui/app.d.ts.map +1 -0
  78. package/dist/src/tui/app.js +742 -0
  79. package/dist/src/tui/app.js.map +1 -0
  80. package/dist/src/turn-runner/agent-events.d.ts +5 -0
  81. package/dist/src/turn-runner/agent-events.d.ts.map +1 -0
  82. package/dist/src/turn-runner/agent-events.js +59 -0
  83. package/dist/src/turn-runner/agent-events.js.map +1 -0
  84. package/dist/src/turn-runner/prompts.d.ts +13 -0
  85. package/dist/src/turn-runner/prompts.d.ts.map +1 -0
  86. package/dist/src/turn-runner/prompts.js +79 -0
  87. package/dist/src/turn-runner/prompts.js.map +1 -0
  88. package/dist/src/turn-runner/shell-state-handle.d.ts +32 -0
  89. package/dist/src/turn-runner/shell-state-handle.d.ts.map +1 -0
  90. package/dist/src/turn-runner/shell-state-handle.js +168 -0
  91. package/dist/src/turn-runner/shell-state-handle.js.map +1 -0
  92. package/dist/src/turn-runner/skill-context.d.ts +26 -0
  93. package/dist/src/turn-runner/skill-context.d.ts.map +1 -0
  94. package/dist/src/turn-runner/skill-context.js +110 -0
  95. package/dist/src/turn-runner/skill-context.js.map +1 -0
  96. package/dist/src/turn-runner/skills.d.ts +35 -0
  97. package/dist/src/turn-runner/skills.d.ts.map +1 -0
  98. package/dist/src/turn-runner/skills.js +130 -0
  99. package/dist/src/turn-runner/skills.js.map +1 -0
  100. package/dist/src/turn-runner/state-machine-controller.d.ts +90 -0
  101. package/dist/src/turn-runner/state-machine-controller.d.ts.map +1 -0
  102. package/dist/src/turn-runner/state-machine-controller.js +289 -0
  103. package/dist/src/turn-runner/state-machine-controller.js.map +1 -0
  104. package/dist/src/turn-runner/state-machine-session.d.ts +27 -0
  105. package/dist/src/turn-runner/state-machine-session.d.ts.map +1 -0
  106. package/dist/src/turn-runner/state-machine-session.js +189 -0
  107. package/dist/src/turn-runner/state-machine-session.js.map +1 -0
  108. package/dist/src/turn-runner/tools.d.ts +193 -0
  109. package/dist/src/turn-runner/tools.d.ts.map +1 -0
  110. package/dist/src/turn-runner/tools.js +509 -0
  111. package/dist/src/turn-runner/tools.js.map +1 -0
  112. package/dist/src/turn-runner/turn-runner.d.ts +160 -0
  113. package/dist/src/turn-runner/turn-runner.d.ts.map +1 -0
  114. package/dist/src/turn-runner/turn-runner.js +907 -0
  115. package/dist/src/turn-runner/turn-runner.js.map +1 -0
  116. package/dist/src/turn-runner/turn-state.d.ts +6 -0
  117. package/dist/src/turn-runner/turn-state.d.ts.map +1 -0
  118. package/dist/src/turn-runner/turn-state.js +32 -0
  119. package/dist/src/turn-runner/turn-state.js.map +1 -0
  120. package/dist/src/turn-runner/usage-accounting.d.ts +7 -0
  121. package/dist/src/turn-runner/usage-accounting.d.ts.map +1 -0
  122. package/dist/src/turn-runner/usage-accounting.js +49 -0
  123. package/dist/src/turn-runner/usage-accounting.js.map +1 -0
  124. package/dist/src/types/agent.d.ts +15 -0
  125. package/dist/src/types/agent.d.ts.map +1 -0
  126. package/dist/src/types/agent.js +2 -0
  127. package/dist/src/types/agent.js.map +1 -0
  128. package/dist/src/types/config.d.ts +37 -0
  129. package/dist/src/types/config.d.ts.map +1 -0
  130. package/dist/src/types/config.js +2 -0
  131. package/dist/src/types/config.js.map +1 -0
  132. package/dist/src/types/guardrails.d.ts +34 -0
  133. package/dist/src/types/guardrails.d.ts.map +1 -0
  134. package/dist/src/types/guardrails.js +2 -0
  135. package/dist/src/types/guardrails.js.map +1 -0
  136. package/dist/src/types/memory.d.ts +151 -0
  137. package/dist/src/types/memory.d.ts.map +1 -0
  138. package/dist/src/types/memory.js +2 -0
  139. package/dist/src/types/memory.js.map +1 -0
  140. package/dist/src/types/protocol.d.ts +426 -0
  141. package/dist/src/types/protocol.d.ts.map +1 -0
  142. package/dist/src/types/protocol.js +2 -0
  143. package/dist/src/types/protocol.js.map +1 -0
  144. package/dist/src/types/state-machine.d.ts +344 -0
  145. package/dist/src/types/state-machine.d.ts.map +1 -0
  146. package/dist/src/types/state-machine.js +2 -0
  147. package/dist/src/types/state-machine.js.map +1 -0
  148. package/package.json +84 -0
@@ -0,0 +1,605 @@
1
+ import { nanoid } from "nanoid";
2
+ import { Type } from "typebox";
3
+ import { generateStructuredOutput } from "../core/structured-output.js";
4
+ import { parseObservationGroups, reconcileObservationGroupsFromReflection, renderObservationGroupsForReflection, stripObservationGroups, wrapInObservationGroup, } from "./observation-groups.js";
5
+ import { OBSERVATION_CONTEXT_INSTRUCTIONS, OBSERVATION_CONTEXT_PROMPT, OBSERVATION_CONTINUATION_HINT, buildObserverPrompt, buildObserverSystemPrompt, buildReflectorPrompt, buildReflectorSystemPrompt, } from "./observational-prompts.js";
6
+ export const OBSERVATIONAL_MEMORY_DEFAULTS = {
7
+ observation: {
8
+ // Observe before the actor window gets tight; prompt caching keeps the exact
9
+ // tail cheap while memory preserves older task state.
10
+ messageTokens: 100_000,
11
+ // Keep observer calls comfortably below the model's practical reasoning
12
+ // ceiling while still batching enough transcript to avoid noisy churn.
13
+ maxTokensPerBatch: 35_000,
14
+ // Retain enough exact history for active tool work after older messages are
15
+ // represented by observations.
16
+ bufferActivation: 30_000,
17
+ },
18
+ reflection: {
19
+ // Reflect before observations become a second large prompt layer.
20
+ observationTokens: 60_000,
21
+ // Target this many observation tokens after reflection so the pass dedupes
22
+ // without aggressively summarizing away useful specifics.
23
+ bufferActivation: 40_000,
24
+ },
25
+ };
26
+ function createMemoryId() {
27
+ return `mem_${nanoid(12)}`;
28
+ }
29
+ const observerResultSchema = Type.Object({
30
+ observations: Type.String({
31
+ description: "New observation log text extracted from the raw message history. Return an empty string if there are no useful new observations.",
32
+ }),
33
+ currentTask: Type.Optional(Type.String({ description: "Current task state distilled for continuity." })),
34
+ suggestedContinuation: Type.Optional(Type.String({ description: "Hint for the actor's next response after context compression." })),
35
+ threadTitle: Type.Optional(Type.String({ description: "Short 2-5 word title when thread title generation is requested." })),
36
+ });
37
+ const observerResultTool = {
38
+ name: "recordObservations",
39
+ description: "Return extracted observational memory fields.",
40
+ parameters: observerResultSchema,
41
+ };
42
+ const reflectorResultSchema = Type.Object({
43
+ observations: Type.String({
44
+ description: "Condensed observation log preserving important facts, dates, preferences, unresolved work, and completion markers.",
45
+ }),
46
+ suggestedContinuation: Type.Optional(Type.String({
47
+ description: "Hint for the actor's next response after reflection rewrites memory.",
48
+ })),
49
+ });
50
+ const reflectorResultTool = {
51
+ name: "reflectObservations",
52
+ description: "Return condensed observational memory fields.",
53
+ parameters: reflectorResultSchema,
54
+ };
55
+ export class ModelByInputTokens {
56
+ thresholds;
57
+ constructor(config) {
58
+ const entries = Object.entries(config.upTo);
59
+ if (entries.length === 0) {
60
+ throw new Error('ModelByInputTokens requires at least one threshold in "upTo"');
61
+ }
62
+ this.thresholds = entries
63
+ .map(([limit, model]) => {
64
+ const parsed = Number(limit);
65
+ if (!Number.isFinite(parsed) || parsed <= 0) {
66
+ throw new Error(`ModelByInputTokens threshold keys must be positive numbers. Got: ${limit}`);
67
+ }
68
+ return { limit: parsed, model };
69
+ })
70
+ .sort((a, b) => a.limit - b.limit);
71
+ }
72
+ resolve(inputTokens) {
73
+ for (const { limit, model } of this.thresholds) {
74
+ if (inputTokens <= limit) {
75
+ return model;
76
+ }
77
+ }
78
+ const maxLimit = this.thresholds[this.thresholds.length - 1].limit;
79
+ throw new Error(`ModelByInputTokens: input token count (${inputTokens}) exceeds the largest configured threshold (${maxLimit}).`);
80
+ }
81
+ getThresholds() {
82
+ return this.thresholds.map((threshold) => threshold.limit);
83
+ }
84
+ }
85
+ export function resolveObservationalMemorySettings(input) {
86
+ const partial = input ?? {};
87
+ return {
88
+ scope: partial.scope ?? "session",
89
+ observation: {
90
+ messageTokens: partial.observation?.messageTokens ??
91
+ OBSERVATIONAL_MEMORY_DEFAULTS.observation.messageTokens,
92
+ maxTokensPerBatch: partial.observation?.maxTokensPerBatch ??
93
+ OBSERVATIONAL_MEMORY_DEFAULTS.observation.maxTokensPerBatch,
94
+ bufferActivation: partial.observation?.bufferActivation ??
95
+ OBSERVATIONAL_MEMORY_DEFAULTS.observation.bufferActivation,
96
+ blockAfter: partial.observation?.blockAfter,
97
+ previousObserverTokens: partial.observation?.previousObserverTokens,
98
+ instruction: partial.observation?.instruction,
99
+ threadTitle: partial.observation?.threadTitle,
100
+ },
101
+ reflection: {
102
+ observationTokens: partial.reflection?.observationTokens ??
103
+ OBSERVATIONAL_MEMORY_DEFAULTS.reflection.observationTokens,
104
+ bufferActivation: partial.reflection?.bufferActivation ??
105
+ OBSERVATIONAL_MEMORY_DEFAULTS.reflection.bufferActivation,
106
+ blockAfter: partial.reflection?.blockAfter,
107
+ instruction: partial.reflection?.instruction,
108
+ },
109
+ retrieval: partial.retrieval ?? false,
110
+ shareTokenBudget: partial.shareTokenBudget ?? false,
111
+ temporalMarkers: partial.temporalMarkers ?? false,
112
+ activateAfterIdle: partial.activateAfterIdle,
113
+ activateOnProviderChange: partial.activateOnProviderChange ?? false,
114
+ };
115
+ }
116
+ export function validateObservationalMemorySettings(settings) {
117
+ if (settings.observation.bufferActivation <= 0) {
118
+ throw new Error(`observation.bufferActivation must be a positive retained-token budget, got ${settings.observation.bufferActivation}`);
119
+ }
120
+ if (settings.observation.bufferActivation >= settings.observation.messageTokens) {
121
+ throw new Error(`observation.bufferActivation (${settings.observation.bufferActivation}) must be lower than observation.messageTokens (${settings.observation.messageTokens})`);
122
+ }
123
+ if (settings.reflection.bufferActivation <= 0) {
124
+ throw new Error(`reflection.bufferActivation must be a positive retained-token budget, got ${settings.reflection.bufferActivation}`);
125
+ }
126
+ if (settings.reflection.bufferActivation >= settings.reflection.observationTokens) {
127
+ throw new Error(`reflection.bufferActivation (${settings.reflection.bufferActivation}) must be lower than reflection.observationTokens (${settings.reflection.observationTokens})`);
128
+ }
129
+ }
130
+ export function createObservationalMemoryTransform(options) {
131
+ const settings = resolveObservationalMemorySettings(options.settings);
132
+ validateObservationalMemorySettings(settings);
133
+ return async (messages, signal) => {
134
+ const rawMessages = agentMessagesToRaw(messages);
135
+ const rawTokens = estimateRawTokens(rawMessages);
136
+ let retainedMessages = messages;
137
+ if (rawTokens >= settings.observation.messageTokens) {
138
+ const snapshot = await options.memory.getSnapshot();
139
+ const unobservedMessages = getUnobservedMessageTail(rawMessages, snapshot.observations);
140
+ if (estimateRawTokens(unobservedMessages) >= settings.observation.messageTokens) {
141
+ emitMemoryActivity(options.onActivity, {
142
+ phase: "observation",
143
+ status: "running",
144
+ message: "Compacting conversation into memory...",
145
+ });
146
+ try {
147
+ await activateObservations(options.memory, unobservedMessages, snapshot.observations, settings, options.actorModel, options.onUsage, signal);
148
+ }
149
+ finally {
150
+ emitMemoryActivity(options.onActivity, {
151
+ phase: "observation",
152
+ status: "completed",
153
+ message: "Memory observation complete.",
154
+ });
155
+ }
156
+ }
157
+ retainedMessages = retainAgentMessageTail(messages, retainRawTail(rawMessages, settings.observation.bufferActivation));
158
+ }
159
+ const snapshot = await options.memory.getSnapshot();
160
+ const observationTokens = snapshot.estimatedTokens.observations;
161
+ if (observationTokens >= settings.reflection.observationTokens) {
162
+ emitMemoryActivity(options.onActivity, {
163
+ phase: "reflection",
164
+ status: "running",
165
+ message: "Reflecting memory observations...",
166
+ });
167
+ try {
168
+ await reflectObservations(options.memory, settings, options.actorModel, options.onUsage, signal);
169
+ }
170
+ finally {
171
+ emitMemoryActivity(options.onActivity, {
172
+ phase: "reflection",
173
+ status: "completed",
174
+ message: "Memory reflection complete.",
175
+ });
176
+ }
177
+ }
178
+ const refreshed = await options.memory.getSnapshot();
179
+ const observations = refreshed.observations
180
+ .map((observation) => observation.content)
181
+ .join("\n\n");
182
+ if (!observations.trim()) {
183
+ return retainedMessages;
184
+ }
185
+ return [
186
+ buildObservationContextMessage(observations),
187
+ buildContinuationMessage(),
188
+ ...retainedMessages,
189
+ ];
190
+ };
191
+ }
192
+ export function optimizeObservationsForContext(observations) {
193
+ let optimized = stripObservationGroups(observations);
194
+ optimized = optimized.replace(/🟡\s*/g, "");
195
+ optimized = optimized.replace(/🟢\s*/g, "");
196
+ optimized = optimized.replace(/\[(?![\d\s]*items collapsed)[^\]]+\]/g, "");
197
+ optimized = optimized.replace(/\s*->\s*/g, " ");
198
+ optimized = optimized.replace(/ +/g, " ");
199
+ optimized = optimized.replace(/\n{3,}/g, "\n\n");
200
+ return optimized.trim();
201
+ }
202
+ function emitMemoryActivity(handler, event) {
203
+ handler?.(event);
204
+ }
205
+ function buildObservationContextMessage(observations) {
206
+ const optimized = optimizeObservationsForContext(observations);
207
+ return {
208
+ role: "user",
209
+ content: `<system-reminder>${OBSERVATION_CONTEXT_PROMPT}\n\n<observations>\n${optimized}\n</observations>\n\n${OBSERVATION_CONTEXT_INSTRUCTIONS}</system-reminder>`,
210
+ timestamp: Date.now(),
211
+ };
212
+ }
213
+ function buildContinuationMessage() {
214
+ return {
215
+ role: "user",
216
+ content: `<system-reminder>${OBSERVATION_CONTINUATION_HINT}</system-reminder>`,
217
+ timestamp: Date.now(),
218
+ };
219
+ }
220
+ async function activateObservations(store, messages, previousObservations, settings, model, onUsage, _signal) {
221
+ const observations = (await observe(messages, previousObservations, settings, model, onUsage, _signal)).observations;
222
+ if (!observations.trim()) {
223
+ return;
224
+ }
225
+ const range = `${messages[0]?.id ?? "unknown"}:${messages[messages.length - 1]?.id ?? "unknown"}`;
226
+ await store.appendObservation({
227
+ observedDate: new Date().toISOString().slice(0, 10),
228
+ timeOfDay: new Date().toISOString().slice(11, 16),
229
+ priority: inferPriority(observations),
230
+ scope: settings.scope,
231
+ source: { kind: "system" },
232
+ content: wrapInObservationGroup(observations, range),
233
+ tags: ["observational-memory"],
234
+ });
235
+ }
236
+ async function reflectObservations(store, settings, model, onUsage, _signal) {
237
+ const snapshot = await store.getSnapshot();
238
+ const source = snapshot.observations.map((observation) => observation.content).join("\n\n");
239
+ const rendered = renderObservationGroupsForReflection(source) ?? source;
240
+ const targetTokens = settings.reflection.bufferActivation;
241
+ const result = await generateStructuredOutput({
242
+ model,
243
+ tool: reflectorResultTool,
244
+ systemPrompt: buildReflectorSystemPrompt(settings.reflection.instruction),
245
+ prompt: buildReflectorPrompt(rendered, targetTokens),
246
+ onUsage,
247
+ });
248
+ const text = await enforceObservationTokenBudget({
249
+ text: result.observations,
250
+ targetTokens,
251
+ retry: async (actualTokens) => {
252
+ const retryResult = await generateStructuredOutput({
253
+ model,
254
+ tool: reflectorResultTool,
255
+ systemPrompt: buildReflectorSystemPrompt(settings.reflection.instruction),
256
+ prompt: buildReflectorPrompt(rendered, targetTokens, { actualTokens }),
257
+ onUsage,
258
+ });
259
+ return retryResult.observations;
260
+ },
261
+ });
262
+ if (!text) {
263
+ return;
264
+ }
265
+ const reconciled = reconcileObservationGroupsFromReflection(text, source) ?? text;
266
+ const reflected = {
267
+ id: createMemoryId(),
268
+ createdAt: Date.now(),
269
+ observedDate: new Date().toISOString().slice(0, 10),
270
+ timeOfDay: new Date().toISOString().slice(11, 16),
271
+ priority: "high",
272
+ scope: settings.scope,
273
+ source: { kind: "system" },
274
+ content: reconciled,
275
+ tags: ["observational-memory", "reflection"],
276
+ };
277
+ await store.replaceObservations([reflected]);
278
+ }
279
+ async function observe(messages, previousObservations, settings, model, onUsage, _signal) {
280
+ const targetTokens = settings.observation.maxTokensPerBatch;
281
+ const result = await generateStructuredOutput({
282
+ model,
283
+ tool: observerResultTool,
284
+ systemPrompt: buildObserverSystemPrompt(settings.observation.instruction, settings.observation.threadTitle),
285
+ prompt: buildObserverPrompt(messages, previousObservations.map((observation) => observation.content).join("\n\n"), targetTokens),
286
+ onUsage,
287
+ });
288
+ const observations = await enforceObservationTokenBudget({
289
+ text: result.observations,
290
+ targetTokens,
291
+ retry: async (actualTokens) => {
292
+ const retryResult = await generateStructuredOutput({
293
+ model,
294
+ tool: observerResultTool,
295
+ systemPrompt: buildObserverSystemPrompt(settings.observation.instruction, settings.observation.threadTitle),
296
+ prompt: buildObserverPrompt(messages, previousObservations.map((observation) => observation.content).join("\n\n"), targetTokens, { actualTokens }),
297
+ onUsage,
298
+ });
299
+ return retryResult.observations;
300
+ },
301
+ });
302
+ return {
303
+ ...result,
304
+ observations,
305
+ };
306
+ }
307
+ export async function enforceObservationTokenBudget(options) {
308
+ const first = sanitizeObservationLines(options.text.trim());
309
+ const firstTokens = estimateTokens(first);
310
+ if (firstTokens <= options.targetTokens) {
311
+ return first;
312
+ }
313
+ const retried = sanitizeObservationLines((await options.retry(firstTokens)).trim());
314
+ const retriedTokens = estimateTokens(retried);
315
+ if (retriedTokens <= options.targetTokens) {
316
+ return retried;
317
+ }
318
+ return trimObservationTextToTokenBudget(retried, options.targetTokens);
319
+ }
320
+ export function trimObservationTextToTokenBudget(text, targetTokens) {
321
+ if (targetTokens <= 0)
322
+ return "";
323
+ if (estimateTokens(text) <= targetTokens)
324
+ return text;
325
+ const targetChars = Math.max(0, targetTokens * 4);
326
+ const marker = "\n… [truncated to fit memory token budget]";
327
+ if (targetChars <= marker.length) {
328
+ return text.slice(0, targetChars).trimEnd();
329
+ }
330
+ const trimmed = text.slice(0, targetChars - marker.length).trimEnd();
331
+ return `${trimmed}${marker}`;
332
+ }
333
+ function retainRawTail(messages, retainTokens) {
334
+ let tokens = 0;
335
+ const retained = [];
336
+ for (let i = messages.length - 1; i >= 0; i--) {
337
+ const message = messages[i];
338
+ tokens += message.estimatedTokens ?? estimateTokens(message.textPreview);
339
+ if (tokens > retainTokens)
340
+ break;
341
+ retained.unshift(message);
342
+ }
343
+ return retained;
344
+ }
345
+ function getUnobservedMessageTail(messages, observations) {
346
+ const lastObservedIndex = getLastObservedMessageIndex(messages, observations);
347
+ if (lastObservedIndex < 0) {
348
+ return messages;
349
+ }
350
+ return messages.slice(lastObservedIndex + 1);
351
+ }
352
+ function getLastObservedMessageIndex(messages, observations) {
353
+ const messageIndexById = new Map(messages.map((message, index) => [message.id, index]));
354
+ let lastObservedIndex = -1;
355
+ for (const observation of observations) {
356
+ const groups = parseObservationGroups(observation.content);
357
+ for (const group of groups) {
358
+ const endId = group.range.split(":").at(-1)?.trim();
359
+ const endIndex = endId ? messageIndexById.get(endId) : undefined;
360
+ if (endIndex !== undefined) {
361
+ lastObservedIndex = Math.max(lastObservedIndex, endIndex);
362
+ }
363
+ }
364
+ }
365
+ return lastObservedIndex;
366
+ }
367
+ function retainAgentMessageTail(messages, retainedRawMessages) {
368
+ if (retainedRawMessages.length === 0) {
369
+ return [];
370
+ }
371
+ const retainedIds = new Set(retainedRawMessages.map((message) => message.id));
372
+ includeToolPairMessages(messages, retainedIds);
373
+ return messages.filter((message) => {
374
+ const raw = agentMessageToRaw(message);
375
+ return raw ? retainedIds.has(raw.id) : false;
376
+ });
377
+ }
378
+ export function includeToolPairMessages(messages, retainedIds) {
379
+ // Provider APIs generally require every tool result to remain paired with the
380
+ // assistant message that emitted its tool call, so compaction retains both.
381
+ const toolCallAssistantIds = new Map();
382
+ const toolResultIds = new Map();
383
+ for (const message of messages) {
384
+ const raw = agentMessageToRaw(message);
385
+ if (!raw)
386
+ continue;
387
+ for (const toolCallId of messageToolCallIds(message)) {
388
+ toolCallAssistantIds.set(toolCallId, raw.id);
389
+ }
390
+ if (message.role === "toolResult" && "toolCallId" in message) {
391
+ toolResultIds.set(String(message.toolCallId), raw.id);
392
+ }
393
+ }
394
+ for (const [toolCallId, assistantId] of toolCallAssistantIds) {
395
+ const resultId = toolResultIds.get(toolCallId);
396
+ if (resultId && retainedIds.has(assistantId)) {
397
+ retainedIds.add(resultId);
398
+ }
399
+ if (resultId && retainedIds.has(resultId)) {
400
+ retainedIds.add(assistantId);
401
+ }
402
+ }
403
+ }
404
+ function messageToolCallIds(message) {
405
+ if (message.role !== "assistant")
406
+ return [];
407
+ const content = message.content;
408
+ if (!Array.isArray(content))
409
+ return [];
410
+ return content
411
+ .filter((part) => Boolean(part) &&
412
+ typeof part === "object" &&
413
+ "type" in part &&
414
+ part.type === "toolCall" &&
415
+ "id" in part &&
416
+ typeof part.id === "string")
417
+ .map((part) => part.id);
418
+ }
419
+ export function agentMessagesToRaw(messages) {
420
+ return messages
421
+ .map((message) => agentMessageToRaw(message))
422
+ .filter((message) => Boolean(message));
423
+ }
424
+ export function agentMessageToRaw(message) {
425
+ const normalized = normalizeMessageContent(message);
426
+ if (normalized.textPreview.trim().length === 0) {
427
+ return undefined;
428
+ }
429
+ return {
430
+ id: stableRawMessageId(message, normalized.textPreview),
431
+ createdAt: "timestamp" in message && typeof message.timestamp === "number"
432
+ ? message.timestamp
433
+ : Date.now(),
434
+ role: normalizeRole(String(message.role)),
435
+ content: normalized.content,
436
+ textPreview: normalized.textPreview,
437
+ estimatedTokens: estimateTokens(normalized.textPreview),
438
+ };
439
+ }
440
+ function stableRawMessageId(message, textPreview = normalizeMessageContent(message).textPreview) {
441
+ if (message.role === "assistant" && "responseId" in message && message.responseId) {
442
+ return `msg_assistant_${message.responseId}`;
443
+ }
444
+ if (message.role === "toolResult" && "toolCallId" in message) {
445
+ return `msg_tool_${message.toolCallId}`;
446
+ }
447
+ const timestamp = "timestamp" in message && typeof message.timestamp === "number" ? message.timestamp : 0;
448
+ return `msg_${String(message.role)}_${timestamp}_${hashText(textPreview)}`;
449
+ }
450
+ function normalizeRole(role) {
451
+ if (role === "system" || role === "user" || role === "assistant" || role === "tool") {
452
+ return role;
453
+ }
454
+ if (role === "toolResult" || role === "toolCall") {
455
+ return "tool";
456
+ }
457
+ return "system";
458
+ }
459
+ function normalizeMessageContent(message) {
460
+ const maybeContent = message.content;
461
+ if (typeof maybeContent === "string") {
462
+ return {
463
+ content: [{ type: "text", text: maybeContent }],
464
+ textPreview: maybeContent,
465
+ };
466
+ }
467
+ if (Array.isArray(maybeContent)) {
468
+ const content = [];
469
+ const previews = [];
470
+ for (const part of maybeContent) {
471
+ if (isTextContent(part)) {
472
+ content.push(part);
473
+ previews.push(part.text);
474
+ continue;
475
+ }
476
+ if (isImageContent(part)) {
477
+ content.push(part);
478
+ previews.push(imageContentPreview(part));
479
+ continue;
480
+ }
481
+ const preview = unsupportedContentPreview(part);
482
+ if (preview)
483
+ previews.push(preview);
484
+ }
485
+ return {
486
+ content,
487
+ textPreview: previews.join("\n"),
488
+ };
489
+ }
490
+ if ("summary" in message && typeof message.summary === "string") {
491
+ return {
492
+ content: [{ type: "text", text: message.summary }],
493
+ textPreview: message.summary,
494
+ };
495
+ }
496
+ return { content: [], textPreview: "" };
497
+ }
498
+ function isTextContent(part) {
499
+ return (part !== null &&
500
+ typeof part === "object" &&
501
+ "type" in part &&
502
+ part.type === "text" &&
503
+ "text" in part &&
504
+ typeof part.text === "string");
505
+ }
506
+ function isImageContent(part) {
507
+ return part !== null && typeof part === "object" && "type" in part && part.type === "image";
508
+ }
509
+ function imageContentPreview(part) {
510
+ const record = part;
511
+ const details = [imageMediaType(record), imageSourcePreview(record)].filter((detail) => Boolean(detail));
512
+ return details.length > 0 ? `[image: ${details.join(" ")}]` : "[image]";
513
+ }
514
+ function imageMediaType(record) {
515
+ return (stringField(record, "mediaType") ??
516
+ stringField(record, "mimeType") ??
517
+ stringField(record, "media_type") ??
518
+ sourceMediaType(record.source));
519
+ }
520
+ function sourceMediaType(source) {
521
+ if (!source || typeof source !== "object")
522
+ return undefined;
523
+ const sourceRecord = source;
524
+ return (stringField(sourceRecord, "mediaType") ??
525
+ stringField(sourceRecord, "mimeType") ??
526
+ stringField(sourceRecord, "media_type"));
527
+ }
528
+ function imageSourcePreview(record) {
529
+ const directUrl = safeImageUrl(stringField(record, "url") ?? stringField(record, "imageUrl"));
530
+ if (directUrl)
531
+ return `url=${directUrl}`;
532
+ if (stringField(record, "data"))
533
+ return "source=data omitted";
534
+ const source = record.source;
535
+ if (!source)
536
+ return undefined;
537
+ if (typeof source === "string") {
538
+ return source.startsWith("data:") ? "source=data omitted" : "source=string";
539
+ }
540
+ if (typeof source !== "object")
541
+ return undefined;
542
+ const sourceRecord = source;
543
+ const sourceType = stringField(sourceRecord, "type");
544
+ const sourceUrl = safeImageUrl(stringField(sourceRecord, "url"));
545
+ if (sourceUrl)
546
+ return `url=${sourceUrl}`;
547
+ if (sourceType)
548
+ return `source=${sourceType} omitted`;
549
+ return "source=object omitted";
550
+ }
551
+ function safeImageUrl(value) {
552
+ if (!value || value.startsWith("data:"))
553
+ return undefined;
554
+ return value;
555
+ }
556
+ function stringField(record, field) {
557
+ const value = record[field];
558
+ return typeof value === "string" && value.length > 0 ? value : undefined;
559
+ }
560
+ function unsupportedContentPreview(part) {
561
+ if (!part || typeof part !== "object" || !("type" in part)) {
562
+ return undefined;
563
+ }
564
+ const record = part;
565
+ const type = typeof record.type === "string" ? record.type : "unknown";
566
+ const id = stringField(record, "id");
567
+ const name = stringField(record, "name");
568
+ return `[${[type, id, name].filter(Boolean).join(": ")}]`;
569
+ }
570
+ const MAX_OBSERVATION_LINE_CHARS = 10_000;
571
+ export function sanitizeObservationLines(observations) {
572
+ if (!observations)
573
+ return observations;
574
+ let changed = false;
575
+ const lines = observations.split("\n");
576
+ for (let i = 0; i < lines.length; i++) {
577
+ if (lines[i].length > MAX_OBSERVATION_LINE_CHARS) {
578
+ lines[i] = lines[i].slice(0, MAX_OBSERVATION_LINE_CHARS) + " … [truncated]";
579
+ changed = true;
580
+ }
581
+ }
582
+ return changed ? lines.join("\n") : observations;
583
+ }
584
+ function inferPriority(observations) {
585
+ if (observations.includes("🔴") || observations.includes("✅"))
586
+ return "high";
587
+ if (observations.includes("🟡"))
588
+ return "medium";
589
+ return "low";
590
+ }
591
+ function estimateRawTokens(messages) {
592
+ return messages.reduce((total, message) => total + (message.estimatedTokens ?? estimateTokens(message.textPreview)), 0);
593
+ }
594
+ function estimateTokens(text) {
595
+ return Math.ceil(text.length / 4);
596
+ }
597
+ function hashText(text) {
598
+ let hash = 2166136261;
599
+ for (let i = 0; i < text.length; i++) {
600
+ hash ^= text.charCodeAt(i);
601
+ hash = Math.imul(hash, 16777619);
602
+ }
603
+ return (hash >>> 0).toString(16);
604
+ }
605
+ //# sourceMappingURL=observational.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"observational.js","sourceRoot":"","sources":["../../../src/memory/observational.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { MemoryStore } from "./store.js";
2
+ export declare function loadStoredMemory(memoryPath: string | false | undefined, cwd: string, store: MemoryStore): Promise<() => Promise<void>>;
3
+ //# sourceMappingURL=storage.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"storage.d.ts","sourceRoot":"","sources":["../../../src/memory/storage.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAI9C,wBAAsB,gBAAgB,CACpC,UAAU,EAAE,MAAM,GAAG,KAAK,GAAG,SAAS,EACtC,GAAG,EAAE,MAAM,EACX,KAAK,EAAE,WAAW,GACjB,OAAO,CAAC,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC,CAqB9B"}