@n8n/agents 0.6.0 → 0.8.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 (148) hide show
  1. package/dist/build.tsbuildinfo +1 -1
  2. package/dist/index.d.ts +18 -11
  3. package/dist/index.js +37 -10
  4. package/dist/index.js.map +1 -1
  5. package/dist/integrations/langsmith.d.ts +2 -0
  6. package/dist/integrations/langsmith.js +117 -2
  7. package/dist/integrations/langsmith.js.map +1 -1
  8. package/dist/runtime/agent-runtime.d.ts +30 -19
  9. package/dist/runtime/agent-runtime.js +616 -280
  10. package/dist/runtime/agent-runtime.js.map +1 -1
  11. package/dist/runtime/background-task-tracker.d.ts +6 -0
  12. package/dist/runtime/background-task-tracker.js +26 -0
  13. package/dist/runtime/background-task-tracker.js.map +1 -0
  14. package/dist/runtime/deferred-tool-manager.d.ts +28 -0
  15. package/dist/runtime/deferred-tool-manager.js +205 -0
  16. package/dist/runtime/deferred-tool-manager.js.map +1 -0
  17. package/dist/runtime/event-bus.d.ts +1 -0
  18. package/dist/runtime/event-bus.js +3 -0
  19. package/dist/runtime/event-bus.js.map +1 -1
  20. package/dist/runtime/json-value.d.ts +2 -0
  21. package/dist/runtime/json-value.js +43 -0
  22. package/dist/runtime/json-value.js.map +1 -0
  23. package/dist/runtime/memory-store.d.ts +34 -11
  24. package/dist/runtime/memory-store.js +210 -8
  25. package/dist/runtime/memory-store.js.map +1 -1
  26. package/dist/runtime/message-list.d.ts +6 -7
  27. package/dist/runtime/message-list.js +50 -6
  28. package/dist/runtime/message-list.js.map +1 -1
  29. package/dist/runtime/messages.d.ts +0 -2
  30. package/dist/runtime/messages.js +127 -101
  31. package/dist/runtime/messages.js.map +1 -1
  32. package/dist/runtime/model-factory.js +117 -34
  33. package/dist/runtime/model-factory.js.map +1 -1
  34. package/dist/runtime/observation-log-defaults.d.ts +20 -0
  35. package/dist/runtime/observation-log-defaults.js +523 -0
  36. package/dist/runtime/observation-log-defaults.js.map +1 -0
  37. package/dist/runtime/observation-log-observer.d.ts +64 -0
  38. package/dist/runtime/observation-log-observer.js +235 -0
  39. package/dist/runtime/observation-log-observer.js.map +1 -0
  40. package/dist/runtime/observation-log-reflector.d.ts +36 -0
  41. package/dist/runtime/observation-log-reflector.js +292 -0
  42. package/dist/runtime/observation-log-reflector.js.map +1 -0
  43. package/dist/runtime/observation-log-renderer.d.ts +6 -0
  44. package/dist/runtime/observation-log-renderer.js +73 -0
  45. package/dist/runtime/observation-log-renderer.js.map +1 -0
  46. package/dist/runtime/observation-log-store.d.ts +3 -0
  47. package/dist/runtime/observation-log-store.js +26 -0
  48. package/dist/runtime/observation-log-store.js.map +1 -0
  49. package/dist/runtime/provider-credentials.d.ts +167 -0
  50. package/dist/runtime/provider-credentials.js +34 -0
  51. package/dist/runtime/provider-credentials.js.map +1 -0
  52. package/dist/runtime/runtime-helpers.d.ts +3 -4
  53. package/dist/runtime/runtime-helpers.js +6 -32
  54. package/dist/runtime/runtime-helpers.js.map +1 -1
  55. package/dist/runtime/scoped-memory-task-runner.d.ts +79 -0
  56. package/dist/runtime/scoped-memory-task-runner.js +134 -0
  57. package/dist/runtime/scoped-memory-task-runner.js.map +1 -0
  58. package/dist/runtime/stream.js +25 -43
  59. package/dist/runtime/stream.js.map +1 -1
  60. package/dist/runtime/strip-orphaned-tool-messages.js +1 -25
  61. package/dist/runtime/strip-orphaned-tool-messages.js.map +1 -1
  62. package/dist/runtime/title-generation.d.ts +12 -3
  63. package/dist/runtime/title-generation.js +72 -3
  64. package/dist/runtime/title-generation.js.map +1 -1
  65. package/dist/runtime/tool-adapter.d.ts +1 -1
  66. package/dist/runtime/tool-adapter.js +3 -2
  67. package/dist/runtime/tool-adapter.js.map +1 -1
  68. package/dist/sdk/agent.d.ts +35 -22
  69. package/dist/sdk/agent.js +106 -331
  70. package/dist/sdk/agent.js.map +1 -1
  71. package/dist/sdk/catalog.d.ts +1 -0
  72. package/dist/sdk/catalog.js +1 -0
  73. package/dist/sdk/catalog.js.map +1 -1
  74. package/dist/sdk/eval.d.ts +0 -3
  75. package/dist/sdk/eval.js +4 -9
  76. package/dist/sdk/eval.js.map +1 -1
  77. package/dist/sdk/memory.d.ts +12 -12
  78. package/dist/sdk/memory.js +71 -51
  79. package/dist/sdk/memory.js.map +1 -1
  80. package/dist/sdk/provider-capabilities.js +4 -2
  81. package/dist/sdk/provider-capabilities.js.map +1 -1
  82. package/dist/sdk/provider-tools.d.ts +17 -2
  83. package/dist/sdk/provider-tools.js +19 -0
  84. package/dist/sdk/provider-tools.js.map +1 -1
  85. package/dist/sdk/telemetry.d.ts +2 -0
  86. package/dist/sdk/telemetry.js +6 -0
  87. package/dist/sdk/telemetry.js.map +1 -1
  88. package/dist/sdk/tool.d.ts +17 -10
  89. package/dist/sdk/tool.js +34 -0
  90. package/dist/sdk/tool.js.map +1 -1
  91. package/dist/sdk/verify.js +1 -4
  92. package/dist/sdk/verify.js.map +1 -1
  93. package/dist/storage/base-memory.d.ts +54 -0
  94. package/dist/storage/base-memory.js +48 -0
  95. package/dist/storage/base-memory.js.map +1 -0
  96. package/dist/types/index.d.ts +6 -3
  97. package/dist/types/index.js +7 -1
  98. package/dist/types/index.js.map +1 -1
  99. package/dist/types/runtime/event.d.ts +4 -9
  100. package/dist/types/runtime/event.js.map +1 -1
  101. package/dist/types/sdk/agent-builder.d.ts +5 -3
  102. package/dist/types/sdk/agent.d.ts +70 -27
  103. package/dist/types/sdk/credential-provider.d.ts +2 -3
  104. package/dist/types/sdk/memory.d.ts +33 -20
  105. package/dist/types/sdk/message.d.ts +11 -10
  106. package/dist/types/sdk/observation-log.d.ts +99 -0
  107. package/dist/types/sdk/observation-log.js +17 -0
  108. package/dist/types/sdk/observation-log.js.map +1 -0
  109. package/dist/types/sdk/observation.d.ts +9 -0
  110. package/dist/types/sdk/{schema.js → observation.js} +1 -1
  111. package/dist/types/sdk/observation.js.map +1 -0
  112. package/dist/types/sdk/provider.d.ts +5 -2
  113. package/dist/types/sdk/tool-descriptor.d.ts +13 -0
  114. package/dist/types/sdk/tool-descriptor.js +3 -0
  115. package/dist/types/sdk/tool-descriptor.js.map +1 -0
  116. package/dist/types/sdk/tool.d.ts +8 -3
  117. package/dist/types/telemetry.d.ts +1 -0
  118. package/dist/utils/parse.d.ts +10 -0
  119. package/dist/utils/parse.js +26 -0
  120. package/dist/utils/parse.js.map +1 -0
  121. package/dist/utils/zod.d.ts +1 -1
  122. package/dist/utils/zod.js.map +1 -1
  123. package/dist/workspace/tools/batch-str-replace-file.d.ts +3 -0
  124. package/dist/workspace/tools/batch-str-replace-file.js +67 -0
  125. package/dist/workspace/tools/batch-str-replace-file.js.map +1 -0
  126. package/dist/workspace/tools/str-replace-file.d.ts +3 -0
  127. package/dist/workspace/tools/str-replace-file.js +51 -0
  128. package/dist/workspace/tools/str-replace-file.js.map +1 -0
  129. package/dist/workspace/tools/workspace-tools.js +4 -0
  130. package/dist/workspace/tools/workspace-tools.js.map +1 -1
  131. package/package.json +16 -11
  132. package/dist/codegen/generate-agent-code.d.ts +0 -2
  133. package/dist/codegen/generate-agent-code.js +0 -197
  134. package/dist/codegen/generate-agent-code.js.map +0 -1
  135. package/dist/runtime/working-memory.d.ts +0 -14
  136. package/dist/runtime/working-memory.js +0 -69
  137. package/dist/runtime/working-memory.js.map +0 -1
  138. package/dist/sdk/from-schema.d.ts +0 -15
  139. package/dist/sdk/from-schema.js +0 -218
  140. package/dist/sdk/from-schema.js.map +0 -1
  141. package/dist/storage/postgres-memory.d.ts +0 -79
  142. package/dist/storage/postgres-memory.js +0 -410
  143. package/dist/storage/postgres-memory.js.map +0 -1
  144. package/dist/storage/sqlite-memory.d.ts +0 -60
  145. package/dist/storage/sqlite-memory.js +0 -348
  146. package/dist/storage/sqlite-memory.js.map +0 -1
  147. package/dist/types/sdk/schema.d.ts +0 -99
  148. package/dist/types/sdk/schema.js.map +0 -1
@@ -0,0 +1,235 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.parseObservationLogMarkdown = parseObservationLogMarkdown;
4
+ exports.renderObserverTranscript = renderObserverTranscript;
5
+ exports.runObservationLogObserver = runObservationLogObserver;
6
+ const observation_log_renderer_1 = require("./observation-log-renderer");
7
+ const observation_log_1 = require("../types/sdk/observation-log");
8
+ const MARKER_BY_TOKEN = {
9
+ CRITICAL: 'critical',
10
+ IMPORTANT: 'important',
11
+ INFO: 'info',
12
+ COMPLETION: 'completion',
13
+ };
14
+ const BULLET_PATTERN = /^(\s*)[*-]\s+(CRITICAL|IMPORTANT|INFO|COMPLETION)(?:\s+\(\d{2}:\d{2}\))?\s+(.+)$/iu;
15
+ const DEFAULT_MAX_SERIALIZED_CHARS = 2_000;
16
+ const DEFAULT_MAX_STRING_CHARS = 500;
17
+ const DEFAULT_MAX_ARRAY_ITEMS = 20;
18
+ const DEFAULT_MAX_OBJECT_KEYS = 40;
19
+ const REDACTED_VALUE = '[redacted]';
20
+ const SENSITIVE_KEY_PATTERN = /(?:^|[_-])(?:api[-_]?key|authorization|credential|password|secret|token|access[-_]?token|refresh[-_]?token|private[-_]?key|client[-_]?secret|session[-_]?cookie)(?:$|[_-])/i;
21
+ const INLINE_AUTHORIZATION_PATTERN = /\b(authorization\s*[:=]\s*)(?:[a-z][\w.-]*\s+)?[^\s"',&;]+/gi;
22
+ const INLINE_SECRET_ASSIGNMENT_PATTERN = /\b((?:api[-_]?key|password|secret|token|access[-_]?token|refresh[-_]?token|client[-_]?secret)\s*[:=]\s*)[^\s"',&;]+/gi;
23
+ function parseObservationLogMarkdown(markdown) {
24
+ const entries = [];
25
+ const skippedLines = [];
26
+ let currentParentIndex = null;
27
+ for (const rawLine of markdown.split(/\r?\n/)) {
28
+ const trimmed = rawLine.trim();
29
+ if (!trimmed)
30
+ continue;
31
+ const match = BULLET_PATTERN.exec(rawLine);
32
+ if (!match) {
33
+ skippedLines.push(rawLine);
34
+ continue;
35
+ }
36
+ const [, indentation, markerToken, text] = match;
37
+ const marker = MARKER_BY_TOKEN[markerToken.toUpperCase()];
38
+ const isChild = indentation.length > 0;
39
+ if (isChild && currentParentIndex === null) {
40
+ skippedLines.push(rawLine);
41
+ continue;
42
+ }
43
+ const parentIndex = isChild ? currentParentIndex : null;
44
+ entries.push({ marker, text: text.trim(), parentIndex });
45
+ if (!isChild) {
46
+ currentParentIndex = entries.length - 1;
47
+ }
48
+ }
49
+ return { entries, skippedLines };
50
+ }
51
+ function renderObserverTranscript(messages, options = {}) {
52
+ const lines = [];
53
+ for (const message of messages) {
54
+ if (!isLlmMessage(message))
55
+ continue;
56
+ const timestamp = message.createdAt.toISOString();
57
+ const text = message.content
58
+ .filter((content) => content.type === 'text')
59
+ .map((content) => content.text)
60
+ .join('\n');
61
+ if (text) {
62
+ lines.push(`[${timestamp}] ${message.role}:`);
63
+ lines.push(text);
64
+ }
65
+ for (const toolCall of message.content.filter(isToolCallContent)) {
66
+ lines.push(`[${timestamp}] tool_call ${toolCall.toolName} input=${serializeForObserver(toolCall.input, options)}`);
67
+ if (toolCall.state === 'resolved') {
68
+ lines.push(`[${timestamp}] tool_result ${toolCall.toolName} output=${serializeForObserver(toolCall.output, options)}`);
69
+ }
70
+ else if (toolCall.state === 'rejected') {
71
+ lines.push(`[${timestamp}] tool_result ${toolCall.toolName} error=${serializeErrorForObserver(toolCall.error, options)}`);
72
+ }
73
+ }
74
+ }
75
+ return lines.join('\n');
76
+ }
77
+ async function runObservationLogObserver(opts) {
78
+ const { memory, scopeKind, scopeId } = opts;
79
+ const cursor = await memory.getCursor(scopeKind, scopeId);
80
+ const messageScopeKind = opts.messageSource ? 'thread' : scopeKind;
81
+ const messageScopeId = opts.messageSource?.threadId ?? scopeId;
82
+ const deltaMessages = await memory.getMessagesForScope(messageScopeKind, messageScopeId, cursor
83
+ ? {
84
+ ...(opts.messageSource?.resourceId !== undefined && {
85
+ resourceId: opts.messageSource.resourceId,
86
+ }),
87
+ since: {
88
+ sinceCreatedAt: cursor.lastObservedAt,
89
+ sinceMessageId: cursor.lastObservedMessageId,
90
+ },
91
+ }
92
+ : opts.messageSource?.resourceId !== undefined
93
+ ? { resourceId: opts.messageSource.resourceId }
94
+ : undefined);
95
+ if (deltaMessages.length === 0)
96
+ return { status: 'skipped', reason: 'no-delta' };
97
+ const tokenCounter = opts.tokenCounter ?? observation_log_1.estimateObservationTokens;
98
+ const transcript = renderObserverTranscript(deltaMessages);
99
+ const tokenCount = tokenCounter(transcript);
100
+ if (tokenCount < opts.observerThresholdTokens) {
101
+ return { status: 'skipped', reason: 'below-threshold', tokenCount };
102
+ }
103
+ const observationLogTail = (await memory.getActiveObservationLog({
104
+ scopeKind,
105
+ scopeId,
106
+ limit: opts.observationLogTailLimit,
107
+ order: 'desc',
108
+ })).reverse();
109
+ const now = opts.now ?? new Date();
110
+ const renderedObservationLogTail = (0, observation_log_renderer_1.renderObservationLog)(observationLogTail);
111
+ const markdown = await opts.observe({
112
+ scopeKind,
113
+ scopeId,
114
+ now,
115
+ deltaMessages,
116
+ transcript,
117
+ transcriptTokenCount: tokenCount,
118
+ observationLogTail,
119
+ renderedObservationLogTail,
120
+ });
121
+ const parsed = parseObservationLogMarkdown(markdown);
122
+ for (const line of parsed.skippedLines) {
123
+ opts.onMalformedLine?.(line);
124
+ }
125
+ const inserted = [];
126
+ for (const entry of parsed.entries) {
127
+ const parentId = entry.parentIndex === null ? null : (inserted[entry.parentIndex]?.id ?? null);
128
+ const [row] = await memory.appendObservationLogEntries([
129
+ {
130
+ scopeKind,
131
+ scopeId,
132
+ marker: entry.marker,
133
+ text: entry.text,
134
+ parentId,
135
+ createdAt: new Date(now.getTime() + inserted.length),
136
+ },
137
+ ]);
138
+ inserted.push(row);
139
+ }
140
+ await advanceObserverCursor(memory, scopeKind, scopeId, deltaMessages[deltaMessages.length - 1], now);
141
+ return {
142
+ status: 'ran',
143
+ observationsWritten: inserted.length,
144
+ tokenCount,
145
+ skippedLines: parsed.skippedLines,
146
+ };
147
+ }
148
+ function isLlmMessage(message) {
149
+ return 'role' in message && Array.isArray(message.content);
150
+ }
151
+ function isToolCallContent(content) {
152
+ return content.type === 'tool-call';
153
+ }
154
+ function serializeForObserver(value, options) {
155
+ const compacted = compactForObserver(value, options);
156
+ const serialized = safeJsonStringify(compacted);
157
+ return truncateString(serialized, options.maxSerializedChars ?? DEFAULT_MAX_SERIALIZED_CHARS, 'serialized');
158
+ }
159
+ function serializeErrorForObserver(error, options) {
160
+ return truncateString(redactSensitiveString(error), options.maxStringChars ?? DEFAULT_MAX_STRING_CHARS, 'string');
161
+ }
162
+ function compactForObserver(value, options) {
163
+ const maxStringChars = options.maxStringChars ?? DEFAULT_MAX_STRING_CHARS;
164
+ const maxArrayItems = options.maxArrayItems ?? DEFAULT_MAX_ARRAY_ITEMS;
165
+ const maxObjectKeys = options.maxObjectKeys ?? DEFAULT_MAX_OBJECT_KEYS;
166
+ if (typeof value === 'string') {
167
+ return truncateString(redactSensitiveString(value), maxStringChars, 'string');
168
+ }
169
+ if (value === null || typeof value !== 'object')
170
+ return value;
171
+ if (Array.isArray(value)) {
172
+ const compacted = value
173
+ .slice(0, maxArrayItems)
174
+ .map((item) => compactForObserver(item, options));
175
+ if (value.length > maxArrayItems) {
176
+ compacted.push({ __truncatedItems: value.length - maxArrayItems });
177
+ }
178
+ return compacted;
179
+ }
180
+ const result = {};
181
+ const entries = Object.entries(value);
182
+ for (const [key, entryValue] of entries.slice(0, maxObjectKeys)) {
183
+ if (isSensitiveKey(key)) {
184
+ result[key] = REDACTED_VALUE;
185
+ }
186
+ else if (shouldStripBlob(key, entryValue)) {
187
+ result[key] = '[omitted large blob]';
188
+ }
189
+ else {
190
+ result[key] = compactForObserver(entryValue, options);
191
+ }
192
+ }
193
+ if (entries.length > maxObjectKeys) {
194
+ result.__truncatedKeys = entries.length - maxObjectKeys;
195
+ }
196
+ return result;
197
+ }
198
+ function isSensitiveKey(key) {
199
+ return SENSITIVE_KEY_PATTERN.test(key);
200
+ }
201
+ function redactSensitiveString(value) {
202
+ return value
203
+ .replace(INLINE_AUTHORIZATION_PATTERN, (_match, prefix) => `${prefix}${REDACTED_VALUE}`)
204
+ .replace(INLINE_SECRET_ASSIGNMENT_PATTERN, (_match, prefix) => `${prefix}${REDACTED_VALUE}`);
205
+ }
206
+ function shouldStripBlob(key, value) {
207
+ if (typeof value !== 'string')
208
+ return false;
209
+ if (value.length <= DEFAULT_MAX_STRING_CHARS)
210
+ return false;
211
+ return /blob|base64|data|file|image/i.test(key);
212
+ }
213
+ function truncateString(value, maxChars, label) {
214
+ if (value.length <= maxChars)
215
+ return value;
216
+ return `${value.slice(0, maxChars)}...[truncated ${value.length - maxChars} ${label} chars]`;
217
+ }
218
+ function safeJsonStringify(value) {
219
+ try {
220
+ return JSON.stringify(value);
221
+ }
222
+ catch {
223
+ return JSON.stringify('[unserializable]');
224
+ }
225
+ }
226
+ async function advanceObserverCursor(memory, scopeKind, scopeId, lastMessage, now) {
227
+ await memory.setCursor({
228
+ scopeKind,
229
+ scopeId,
230
+ lastObservedMessageId: lastMessage.id,
231
+ lastObservedAt: lastMessage.createdAt,
232
+ updatedAt: now,
233
+ });
234
+ }
235
+ //# sourceMappingURL=observation-log-observer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"observation-log-observer.js","sourceRoot":"","sources":["../../src/runtime/observation-log-observer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,36 @@
1
+ import type { BuiltObservationLogStore, ObservationLogEntry, ObservationLogReflectFn, ObservationLogReflectorInput, ObservationLogReflection, ObservationLogReflectionResult, ObservationLogScopeKind, TokenCounter } from '../types/sdk/observation-log';
2
+ export type { ObservationLogReflectFn, ObservationLogReflectorInput };
3
+ export type ObservationLogReflectorMemory = BuiltObservationLogStore;
4
+ export interface ObservationLogReflectorWarning {
5
+ message: string;
6
+ scopeKind: ObservationLogScopeKind;
7
+ scopeId: string;
8
+ tokenCount: number;
9
+ tokenBudget: number;
10
+ }
11
+ export interface RunObservationLogReflectorOpts {
12
+ memory: ObservationLogReflectorMemory;
13
+ scopeKind: ObservationLogScopeKind;
14
+ scopeId: string;
15
+ reflectorThresholdTokens: number;
16
+ reflect: ObservationLogReflectFn;
17
+ tokenCounter?: TokenCounter;
18
+ now?: Date;
19
+ onWarning?: (warning: ObservationLogReflectorWarning) => void;
20
+ }
21
+ export type RunObservationLogReflectorResult = {
22
+ status: 'skipped';
23
+ reason: 'below-threshold';
24
+ tokenCount: number;
25
+ } | {
26
+ status: 'ran';
27
+ tokenCount: number;
28
+ remainingTokenCount: number;
29
+ overBudgetAfterReflection: boolean;
30
+ reflection: ObservationLogReflection;
31
+ result: ObservationLogReflectionResult;
32
+ };
33
+ export declare function parseObservationLogReflectionJson(output: string): ObservationLogReflection;
34
+ export declare function renderObservationLogForReflection(entries: ObservationLogEntry[]): string;
35
+ export declare function normalizeObservationLogReflection(activeObservationLog: ObservationLogEntry[], reflection: ObservationLogReflection): ObservationLogReflection;
36
+ export declare function runObservationLogReflector(opts: RunObservationLogReflectorOpts): Promise<RunObservationLogReflectorResult>;
@@ -0,0 +1,292 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.parseObservationLogReflectionJson = parseObservationLogReflectionJson;
4
+ exports.renderObservationLogForReflection = renderObservationLogForReflection;
5
+ exports.normalizeObservationLogReflection = normalizeObservationLogReflection;
6
+ exports.runObservationLogReflector = runObservationLogReflector;
7
+ const observation_log_1 = require("../types/sdk/observation-log");
8
+ const MARKER_LABELS = {
9
+ critical: 'CRITICAL',
10
+ important: 'IMPORTANT',
11
+ info: 'INFO',
12
+ completion: 'COMPLETION',
13
+ };
14
+ const REFLECTOR_OVER_BUDGET_WARNING = 'Observation log remains over reflector budget after reflection';
15
+ function parseObservationLogReflectionJson(output) {
16
+ let parsed;
17
+ try {
18
+ parsed = JSON.parse(extractJsonObject(output));
19
+ }
20
+ catch {
21
+ throw new Error('Reflector output must be valid JSON');
22
+ }
23
+ if (!isRecord(parsed))
24
+ throw new Error('Reflector output must be a JSON object');
25
+ return {
26
+ drop: readStringArray(parsed.drop ?? [], 'drop'),
27
+ merge: readMergeArray(parsed.merge ?? []),
28
+ };
29
+ }
30
+ function renderObservationLogForReflection(entries) {
31
+ const activeEntries = entries.filter((entry) => entry.status === 'active').sort(compareEntries);
32
+ const activeIds = new Set(activeEntries.map((entry) => entry.id));
33
+ const childrenByParent = new Map();
34
+ const roots = [];
35
+ for (const entry of activeEntries) {
36
+ if (entry.parentId && activeIds.has(entry.parentId)) {
37
+ const children = childrenByParent.get(entry.parentId) ?? [];
38
+ children.push(entry);
39
+ childrenByParent.set(entry.parentId, children);
40
+ }
41
+ else {
42
+ roots.push(entry);
43
+ }
44
+ }
45
+ const lines = [];
46
+ for (const root of roots) {
47
+ lines.push(renderReflectionBullet(root));
48
+ for (const child of childrenByParent.get(root.id) ?? []) {
49
+ lines.push(renderReflectionBullet(child, ' '));
50
+ }
51
+ }
52
+ return lines.join('\n');
53
+ }
54
+ function normalizeObservationLogReflection(activeObservationLog, reflection) {
55
+ const activeEntries = activeObservationLog.filter((entry) => entry.status === 'active');
56
+ const activeById = new Map(activeEntries.map((entry) => [entry.id, entry]));
57
+ const childrenByParent = new Map();
58
+ for (const entry of activeEntries) {
59
+ if (!entry.parentId)
60
+ continue;
61
+ const children = childrenByParent.get(entry.parentId) ?? [];
62
+ children.push(entry);
63
+ childrenByParent.set(entry.parentId, children);
64
+ }
65
+ const dropSeeds = new Set(reflection.drop.filter((id) => activeById.has(id)));
66
+ const allMergeSeeds = new Set(reflection.merge.flatMap((merge) => merge.supersedes).filter((id) => activeById.has(id)));
67
+ const claimedMergeIds = new Set();
68
+ const merge = reflection.merge
69
+ .map((entry) => {
70
+ const ownSeeds = new Set(entry.supersedes.filter((id) => activeById.has(id)));
71
+ const supersedes = uniqueObservationIds(entry.supersedes
72
+ .filter((id) => activeById.has(id))
73
+ .filter((id) => !isChildOnlyRemoval(id, ownSeeds, allMergeSeeds, dropSeeds, activeById))
74
+ .flatMap((id) => [id, ...descendantIds(id, childrenByParent)])).filter((id) => !claimedMergeIds.has(id));
75
+ for (const id of supersedes)
76
+ claimedMergeIds.add(id);
77
+ if (supersedes.length === 0)
78
+ return null;
79
+ return {
80
+ ...entry,
81
+ supersedes,
82
+ };
83
+ })
84
+ .filter((entry) => entry !== null);
85
+ const droppedIds = new Set();
86
+ for (const id of reflection.drop) {
87
+ if (!activeById.has(id) || claimedMergeIds.has(id))
88
+ continue;
89
+ if (hasAncestorIn(id, dropSeeds, activeById))
90
+ continue;
91
+ if (isChildOnlyRemoval(id, dropSeeds, dropSeeds, claimedMergeIds, activeById))
92
+ continue;
93
+ for (const candidateId of [id, ...descendantIds(id, childrenByParent)]) {
94
+ if (!claimedMergeIds.has(candidateId))
95
+ droppedIds.add(candidateId);
96
+ }
97
+ }
98
+ const removedIds = new Set([...droppedIds, ...claimedMergeIds]);
99
+ return {
100
+ drop: [...droppedIds],
101
+ merge: merge.map((entry) => ({
102
+ ...entry,
103
+ parentId: normalizeReplacementParentId(entry.parentId, activeById, removedIds),
104
+ })),
105
+ };
106
+ }
107
+ async function runObservationLogReflector(opts) {
108
+ const { memory, scopeKind, scopeId, reflectorThresholdTokens } = opts;
109
+ const tokenCounter = opts.tokenCounter ?? observation_log_1.estimateObservationTokens;
110
+ const activeObservationLog = await memory.getActiveObservationLog({
111
+ scopeKind,
112
+ scopeId,
113
+ order: 'asc',
114
+ });
115
+ const tokenCount = countObservationTokens(activeObservationLog, tokenCounter);
116
+ if (tokenCount <= reflectorThresholdTokens) {
117
+ return { status: 'skipped', reason: 'below-threshold', tokenCount };
118
+ }
119
+ const now = opts.now ?? new Date();
120
+ const renderedObservationLog = renderObservationLogForReflection(activeObservationLog);
121
+ const output = await opts.reflect({
122
+ scopeKind,
123
+ scopeId,
124
+ now,
125
+ activeObservationLog,
126
+ renderedObservationLog,
127
+ tokenCount,
128
+ tokenBudget: reflectorThresholdTokens,
129
+ });
130
+ const reflection = normalizeObservationLogReflection(activeObservationLog, withCreatedAt(parseObservationLogReflectionJson(output), now));
131
+ const result = await memory.applyObservationLogReflection({ scopeKind, scopeId }, reflection);
132
+ const remainingTokenCount = countObservationTokens(await memory.getActiveObservationLog({ scopeKind, scopeId }), tokenCounter);
133
+ const overBudgetAfterReflection = remainingTokenCount > reflectorThresholdTokens;
134
+ if (overBudgetAfterReflection) {
135
+ opts.onWarning?.({
136
+ message: REFLECTOR_OVER_BUDGET_WARNING,
137
+ scopeKind,
138
+ scopeId,
139
+ tokenCount: remainingTokenCount,
140
+ tokenBudget: reflectorThresholdTokens,
141
+ });
142
+ }
143
+ return {
144
+ status: 'ran',
145
+ tokenCount,
146
+ remainingTokenCount,
147
+ overBudgetAfterReflection,
148
+ reflection,
149
+ result,
150
+ };
151
+ }
152
+ function uniqueObservationIds(ids) {
153
+ const seen = new Set();
154
+ const unique = [];
155
+ for (const id of ids) {
156
+ if (seen.has(id))
157
+ continue;
158
+ seen.add(id);
159
+ unique.push(id);
160
+ }
161
+ return unique;
162
+ }
163
+ function descendantIds(id, childrenByParent) {
164
+ const descendants = [];
165
+ const visit = (parentId) => {
166
+ for (const child of childrenByParent.get(parentId) ?? []) {
167
+ descendants.push(child.id);
168
+ visit(child.id);
169
+ }
170
+ };
171
+ visit(id);
172
+ return descendants;
173
+ }
174
+ function hasAncestorIn(id, ids, activeById) {
175
+ let parentId = activeById.get(id)?.parentId ?? null;
176
+ while (parentId) {
177
+ if (ids.has(parentId))
178
+ return true;
179
+ parentId = activeById.get(parentId)?.parentId ?? null;
180
+ }
181
+ return false;
182
+ }
183
+ function isChildOnlyRemoval(id, ownActionIds, allSameKindActionIds, otherRemovalIds, activeById) {
184
+ const parentId = activeById.get(id)?.parentId;
185
+ if (!parentId)
186
+ return false;
187
+ if (hasAncestorIn(id, ownActionIds, activeById))
188
+ return false;
189
+ if (hasAncestorIn(id, allSameKindActionIds, activeById))
190
+ return true;
191
+ return !hasAncestorIn(id, otherRemovalIds, activeById);
192
+ }
193
+ function normalizeReplacementParentId(parentId, activeById, removedIds) {
194
+ if (parentId === undefined || parentId === null)
195
+ return parentId;
196
+ return activeById.has(parentId) && !removedIds.has(parentId) ? parentId : null;
197
+ }
198
+ function extractJsonObject(output) {
199
+ const start = output.indexOf('{');
200
+ const end = output.lastIndexOf('}');
201
+ if (start === -1 || end === -1 || end < start) {
202
+ throw new Error('Reflector output did not contain a JSON object');
203
+ }
204
+ return output.slice(start, end + 1);
205
+ }
206
+ function readStringArray(value, fieldName) {
207
+ if (!Array.isArray(value))
208
+ throw new Error(`Reflector field "${fieldName}" must be an array`);
209
+ const strings = [];
210
+ for (const item of value) {
211
+ if (typeof item !== 'string') {
212
+ throw new Error(`Reflector field "${fieldName}" must contain only strings`);
213
+ }
214
+ strings.push(item);
215
+ }
216
+ return strings;
217
+ }
218
+ function readMergeArray(value) {
219
+ if (!Array.isArray(value))
220
+ throw new Error('Reflector field "merge" must be an array');
221
+ return value.map(readMerge);
222
+ }
223
+ function readMerge(value, index) {
224
+ if (!isRecord(value))
225
+ throw new Error(`Reflector merge[${index}] must be an object`);
226
+ const supersedes = readStringArray(value.supersedes, `merge[${index}].supersedes`);
227
+ const marker = readMarker(value.marker, index);
228
+ if (typeof value.text !== 'string') {
229
+ throw new Error(`Reflector merge[${index}].text must be a string`);
230
+ }
231
+ const parentId = readOptionalParentId(value.parentId, index);
232
+ return {
233
+ supersedes,
234
+ marker,
235
+ text: value.text,
236
+ ...(parentId !== undefined && { parentId }),
237
+ };
238
+ }
239
+ function readMarker(value, index) {
240
+ if (typeof value !== 'string') {
241
+ throw new Error(`Reflector merge[${index}].marker must be a known observation marker`);
242
+ }
243
+ switch (value.toUpperCase()) {
244
+ case 'CRITICAL':
245
+ return 'critical';
246
+ case 'IMPORTANT':
247
+ return 'important';
248
+ case 'INFO':
249
+ return 'info';
250
+ case 'COMPLETION':
251
+ return 'completion';
252
+ default:
253
+ throw new Error(`Reflector merge[${index}].marker must be a known observation marker`);
254
+ }
255
+ }
256
+ function readOptionalParentId(value, index) {
257
+ if (value === undefined)
258
+ return undefined;
259
+ if (value === null || typeof value === 'string')
260
+ return value;
261
+ throw new Error(`Reflector merge[${index}].parentId must be a string or null`);
262
+ }
263
+ function withCreatedAt(reflection, now) {
264
+ return {
265
+ drop: reflection.drop,
266
+ merge: reflection.merge.map((merge, index) => ({
267
+ ...merge,
268
+ createdAt: merge.createdAt ?? new Date(now.getTime() + index),
269
+ })),
270
+ };
271
+ }
272
+ function countObservationTokens(entries, tokenCounter) {
273
+ return entries.reduce((total, entry) => total + observationTokenCount(entry, tokenCounter), 0);
274
+ }
275
+ function observationTokenCount(entry, tokenCounter) {
276
+ if (Number.isFinite(entry.tokenCount) && entry.tokenCount > 0)
277
+ return entry.tokenCount;
278
+ return tokenCounter(entry.text);
279
+ }
280
+ function compareEntries(a, b) {
281
+ const timeDiff = a.createdAt.getTime() - b.createdAt.getTime();
282
+ if (timeDiff !== 0)
283
+ return timeDiff;
284
+ return a.id.localeCompare(b.id);
285
+ }
286
+ function renderReflectionBullet(entry, indent = '') {
287
+ return `${indent}* [${entry.id}] ${MARKER_LABELS[entry.marker]} ${entry.createdAt.toISOString()} ${entry.text}`;
288
+ }
289
+ function isRecord(value) {
290
+ return typeof value === 'object' && value !== null && !Array.isArray(value);
291
+ }
292
+ //# sourceMappingURL=observation-log-reflector.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"observation-log-reflector.js","sourceRoot":"","sources":["../../src/runtime/observation-log-reflector.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ import type { ObservationLogEntry, TokenCounter } from '../types/sdk/observation-log';
2
+ export interface RenderObservationLogOptions {
3
+ renderTokenBudget?: number;
4
+ tokenCounter?: TokenCounter;
5
+ }
6
+ export declare function renderObservationLog(entries: ObservationLogEntry[], options?: RenderObservationLogOptions): string | null;