digital-workers 2.0.2 → 2.1.3
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.
- package/.turbo/turbo-build.log +4 -5
- package/CHANGELOG.md +31 -0
- package/LICENSE +21 -0
- package/README.md +134 -180
- package/dist/actions.d.ts.map +1 -1
- package/dist/actions.js +1 -0
- package/dist/actions.js.map +1 -1
- package/dist/agent-comms.d.ts +438 -0
- package/dist/agent-comms.d.ts.map +1 -0
- package/dist/agent-comms.js +666 -0
- package/dist/agent-comms.js.map +1 -0
- package/dist/capability-tiers.d.ts +230 -0
- package/dist/capability-tiers.d.ts.map +1 -0
- package/dist/capability-tiers.js +388 -0
- package/dist/capability-tiers.js.map +1 -0
- package/dist/cascade-context.d.ts +523 -0
- package/dist/cascade-context.d.ts.map +1 -0
- package/dist/cascade-context.js +494 -0
- package/dist/cascade-context.js.map +1 -0
- package/dist/error-escalation.d.ts +416 -0
- package/dist/error-escalation.d.ts.map +1 -0
- package/dist/error-escalation.js +656 -0
- package/dist/error-escalation.js.map +1 -0
- package/dist/index.d.ts +10 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +34 -0
- package/dist/index.js.map +1 -1
- package/dist/load-balancing.d.ts +395 -0
- package/dist/load-balancing.d.ts.map +1 -0
- package/dist/load-balancing.js +905 -0
- package/dist/load-balancing.js.map +1 -0
- package/dist/types.d.ts +8 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +1 -0
- package/dist/types.js.map +1 -1
- package/package.json +14 -14
- package/src/actions.js +436 -0
- package/src/actions.ts +9 -8
- package/src/agent-comms.ts +1238 -0
- package/src/approve.js +234 -0
- package/src/ask.js +226 -0
- package/src/capability-tiers.ts +545 -0
- package/src/cascade-context.ts +648 -0
- package/src/decide.js +244 -0
- package/src/do.js +227 -0
- package/src/error-escalation.ts +1135 -0
- package/src/generate.js +298 -0
- package/src/goals.js +205 -0
- package/src/index.js +68 -0
- package/src/index.ts +223 -0
- package/src/is.js +317 -0
- package/src/kpis.js +270 -0
- package/src/load-balancing.ts +1381 -0
- package/src/notify.js +219 -0
- package/src/role.js +110 -0
- package/src/team.js +130 -0
- package/src/transports.js +357 -0
- package/src/types.js +71 -0
- package/src/types.ts +8 -0
- package/test/actions.test.js +401 -0
- package/test/agent-comms.test.ts +1397 -0
- package/test/capability-tiers.test.ts +631 -0
- package/test/cascade-context.test.ts +692 -0
- package/test/error-escalation.test.ts +1205 -0
- package/test/load-balancing-thread-safety.test.ts +464 -0
- package/test/load-balancing.test.ts +1145 -0
- package/test/standalone.test.js +250 -0
- package/test/types.test.js +371 -0
- package/test/types.test.ts +35 -0
|
@@ -0,0 +1,494 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Type-safe cascade context schema for agent coordination
|
|
3
|
+
*
|
|
4
|
+
* Provides structured data flow and coordination between agents in multi-agent
|
|
5
|
+
* workflows. Enables type-safe context propagation, validation, enrichment,
|
|
6
|
+
* and serialization for distributed agent systems.
|
|
7
|
+
*
|
|
8
|
+
* @packageDocumentation
|
|
9
|
+
*/
|
|
10
|
+
import { z } from 'zod';
|
|
11
|
+
// ============================================================================
|
|
12
|
+
// Agent Tier Schema and Type
|
|
13
|
+
// ============================================================================
|
|
14
|
+
/**
|
|
15
|
+
* Agent tier levels for cascade hierarchies
|
|
16
|
+
*
|
|
17
|
+
* - coordinator: Orchestrates multiple agents, highest level
|
|
18
|
+
* - supervisor: Manages worker agents, handles escalation
|
|
19
|
+
* - worker: Executes standard tasks
|
|
20
|
+
* - specialist: Handles domain-specific tasks
|
|
21
|
+
* - executor: Low-level task execution
|
|
22
|
+
*/
|
|
23
|
+
export const AgentTierSchema = z.enum([
|
|
24
|
+
'coordinator',
|
|
25
|
+
'supervisor',
|
|
26
|
+
'worker',
|
|
27
|
+
'specialist',
|
|
28
|
+
'executor',
|
|
29
|
+
]);
|
|
30
|
+
// ============================================================================
|
|
31
|
+
// Context Version Schema and Type
|
|
32
|
+
// ============================================================================
|
|
33
|
+
/**
|
|
34
|
+
* Version tracking for context evolution and debugging
|
|
35
|
+
*/
|
|
36
|
+
export const ContextVersionSchema = z.object({
|
|
37
|
+
major: z.number().int().nonnegative(),
|
|
38
|
+
minor: z.number().int().nonnegative(),
|
|
39
|
+
patch: z.number().int().nonnegative(),
|
|
40
|
+
timestamp: z.date(),
|
|
41
|
+
hash: z.string().optional(),
|
|
42
|
+
});
|
|
43
|
+
// ============================================================================
|
|
44
|
+
// Agent Reference Schema
|
|
45
|
+
// ============================================================================
|
|
46
|
+
/**
|
|
47
|
+
* Reference to an agent with tier information
|
|
48
|
+
*/
|
|
49
|
+
export const AgentRefSchema = z.object({
|
|
50
|
+
id: z.string().min(1),
|
|
51
|
+
tier: AgentTierSchema,
|
|
52
|
+
name: z.string().optional(),
|
|
53
|
+
capabilities: z.array(z.string()).optional(),
|
|
54
|
+
});
|
|
55
|
+
// ============================================================================
|
|
56
|
+
// Task Priority Schema
|
|
57
|
+
// ============================================================================
|
|
58
|
+
export const TaskPrioritySchema = z.enum(['critical', 'high', 'normal', 'low']);
|
|
59
|
+
// ============================================================================
|
|
60
|
+
// Task Schema
|
|
61
|
+
// ============================================================================
|
|
62
|
+
export const TaskInfoSchema = z.object({
|
|
63
|
+
id: z.string().min(1),
|
|
64
|
+
type: z.string().min(1),
|
|
65
|
+
priority: TaskPrioritySchema,
|
|
66
|
+
description: z.string(),
|
|
67
|
+
deadline: z.date().optional(),
|
|
68
|
+
parentTaskId: z.string().optional(),
|
|
69
|
+
});
|
|
70
|
+
// ============================================================================
|
|
71
|
+
// Execution Phase Schema
|
|
72
|
+
// ============================================================================
|
|
73
|
+
export const ExecutionPhaseSchema = z.enum([
|
|
74
|
+
'planning',
|
|
75
|
+
'execution',
|
|
76
|
+
'validation',
|
|
77
|
+
'escalation',
|
|
78
|
+
'completed',
|
|
79
|
+
'failed',
|
|
80
|
+
]);
|
|
81
|
+
// ============================================================================
|
|
82
|
+
// Execution State Schema
|
|
83
|
+
// ============================================================================
|
|
84
|
+
export const ExecutionStateSchema = z.object({
|
|
85
|
+
phase: ExecutionPhaseSchema,
|
|
86
|
+
startedAt: z.date(),
|
|
87
|
+
completedAt: z.date().optional(),
|
|
88
|
+
attempts: z.number().int().nonnegative(),
|
|
89
|
+
lastError: z.string().optional(),
|
|
90
|
+
escalatedFrom: z.string().optional(),
|
|
91
|
+
});
|
|
92
|
+
// ============================================================================
|
|
93
|
+
// Trace Entry Schema
|
|
94
|
+
// ============================================================================
|
|
95
|
+
export const TraceEntrySchema = z.object({
|
|
96
|
+
agentId: z.string(),
|
|
97
|
+
tier: AgentTierSchema,
|
|
98
|
+
timestamp: z.date(),
|
|
99
|
+
action: z.string(),
|
|
100
|
+
input: z.unknown().optional(),
|
|
101
|
+
output: z.unknown().optional(),
|
|
102
|
+
duration: z.number().optional(),
|
|
103
|
+
error: z.string().optional(),
|
|
104
|
+
});
|
|
105
|
+
// ============================================================================
|
|
106
|
+
// AgentCascadeContext Schema
|
|
107
|
+
// ============================================================================
|
|
108
|
+
/**
|
|
109
|
+
* Main cascade context schema for agent coordination
|
|
110
|
+
*
|
|
111
|
+
* Contains all information needed for agents to coordinate in a cascade:
|
|
112
|
+
* - Identity: Context ID and version
|
|
113
|
+
* - Agents: Origin and current agent references
|
|
114
|
+
* - Task: Task information and priority
|
|
115
|
+
* - State: Current execution state
|
|
116
|
+
* - Data: Task-specific payload
|
|
117
|
+
* - Trace: Execution history for debugging
|
|
118
|
+
* - Metadata: Extension point for custom data
|
|
119
|
+
*/
|
|
120
|
+
export const AgentCascadeContextSchema = z.object({
|
|
121
|
+
id: z.string().min(1),
|
|
122
|
+
version: ContextVersionSchema,
|
|
123
|
+
originAgent: AgentRefSchema,
|
|
124
|
+
currentAgent: AgentRefSchema,
|
|
125
|
+
task: TaskInfoSchema,
|
|
126
|
+
state: ExecutionStateSchema,
|
|
127
|
+
data: z.record(z.unknown()).optional(),
|
|
128
|
+
trace: z.array(TraceEntrySchema),
|
|
129
|
+
metadata: z.record(z.unknown()).optional(),
|
|
130
|
+
});
|
|
131
|
+
// ============================================================================
|
|
132
|
+
// Validation Functions
|
|
133
|
+
// ============================================================================
|
|
134
|
+
/**
|
|
135
|
+
* Validate a cascade context against the schema
|
|
136
|
+
*
|
|
137
|
+
* @param context - The context to validate
|
|
138
|
+
* @returns Validation result with success flag and errors if any
|
|
139
|
+
*
|
|
140
|
+
* @example
|
|
141
|
+
* ```ts
|
|
142
|
+
* const result = validateContext(context)
|
|
143
|
+
* if (!result.success) {
|
|
144
|
+
* console.error('Invalid context:', result.errors)
|
|
145
|
+
* }
|
|
146
|
+
* ```
|
|
147
|
+
*/
|
|
148
|
+
export function validateContext(context) {
|
|
149
|
+
const result = AgentCascadeContextSchema.safeParse(context);
|
|
150
|
+
if (result.success) {
|
|
151
|
+
return { success: true, data: result.data };
|
|
152
|
+
}
|
|
153
|
+
return {
|
|
154
|
+
success: false,
|
|
155
|
+
errors: result.error.issues.map(issue => ({
|
|
156
|
+
path: issue.path,
|
|
157
|
+
message: issue.message,
|
|
158
|
+
code: issue.code,
|
|
159
|
+
})),
|
|
160
|
+
};
|
|
161
|
+
}
|
|
162
|
+
// ============================================================================
|
|
163
|
+
// Context Version Functions
|
|
164
|
+
// ============================================================================
|
|
165
|
+
/**
|
|
166
|
+
* Create a new context version
|
|
167
|
+
*
|
|
168
|
+
* @param options - Optional version numbers
|
|
169
|
+
* @returns A new ContextVersion
|
|
170
|
+
*/
|
|
171
|
+
export function createContextVersion(options) {
|
|
172
|
+
return {
|
|
173
|
+
major: options?.major ?? 1,
|
|
174
|
+
minor: options?.minor ?? 0,
|
|
175
|
+
patch: options?.patch ?? 0,
|
|
176
|
+
timestamp: new Date(),
|
|
177
|
+
};
|
|
178
|
+
}
|
|
179
|
+
/**
|
|
180
|
+
* Increment version patch number
|
|
181
|
+
*/
|
|
182
|
+
function incrementPatch(version) {
|
|
183
|
+
return {
|
|
184
|
+
...version,
|
|
185
|
+
patch: version.patch + 1,
|
|
186
|
+
timestamp: new Date(),
|
|
187
|
+
};
|
|
188
|
+
}
|
|
189
|
+
// ============================================================================
|
|
190
|
+
// Context Factory Functions
|
|
191
|
+
// ============================================================================
|
|
192
|
+
/**
|
|
193
|
+
* Generate a unique context ID
|
|
194
|
+
*/
|
|
195
|
+
function generateContextId() {
|
|
196
|
+
const timestamp = Date.now().toString(36);
|
|
197
|
+
const random = Math.random().toString(36).substring(2, 10);
|
|
198
|
+
return `ctx_${timestamp}_${random}`;
|
|
199
|
+
}
|
|
200
|
+
/**
|
|
201
|
+
* Create a new cascade context
|
|
202
|
+
*
|
|
203
|
+
* @param options - Context creation options
|
|
204
|
+
* @returns A new AgentCascadeContext
|
|
205
|
+
*
|
|
206
|
+
* @example
|
|
207
|
+
* ```ts
|
|
208
|
+
* const context = createCascadeContext({
|
|
209
|
+
* originAgent: { id: 'coordinator', tier: 'coordinator', name: 'Main' },
|
|
210
|
+
* task: { id: 'task_1', type: 'analysis', priority: 'normal', description: 'Analyze data' },
|
|
211
|
+
* })
|
|
212
|
+
* ```
|
|
213
|
+
*/
|
|
214
|
+
export function createCascadeContext(options) {
|
|
215
|
+
return {
|
|
216
|
+
id: generateContextId(),
|
|
217
|
+
version: createContextVersion(),
|
|
218
|
+
originAgent: options.originAgent,
|
|
219
|
+
currentAgent: { ...options.originAgent },
|
|
220
|
+
task: options.task,
|
|
221
|
+
state: {
|
|
222
|
+
phase: 'planning',
|
|
223
|
+
startedAt: new Date(),
|
|
224
|
+
attempts: 0,
|
|
225
|
+
},
|
|
226
|
+
data: options.data,
|
|
227
|
+
trace: [],
|
|
228
|
+
metadata: options.metadata,
|
|
229
|
+
};
|
|
230
|
+
}
|
|
231
|
+
// ============================================================================
|
|
232
|
+
// Context Enrichment Functions
|
|
233
|
+
// ============================================================================
|
|
234
|
+
/**
|
|
235
|
+
* Enrich a context with data from an agent
|
|
236
|
+
*
|
|
237
|
+
* Creates a new context with:
|
|
238
|
+
* - Merged data from the enrichment
|
|
239
|
+
* - Updated currentAgent to the enriching agent
|
|
240
|
+
* - Incremented version patch
|
|
241
|
+
* - Added trace entry
|
|
242
|
+
*
|
|
243
|
+
* @param context - The original context
|
|
244
|
+
* @param enrichment - The enrichment data
|
|
245
|
+
* @returns A new enriched context (original is unchanged)
|
|
246
|
+
*
|
|
247
|
+
* @example
|
|
248
|
+
* ```ts
|
|
249
|
+
* const enriched = enrichContext(context, {
|
|
250
|
+
* agentId: 'worker_1',
|
|
251
|
+
* tier: 'worker',
|
|
252
|
+
* timestamp: new Date(),
|
|
253
|
+
* data: { analysisResult: 'approved' },
|
|
254
|
+
* })
|
|
255
|
+
* ```
|
|
256
|
+
*/
|
|
257
|
+
export function enrichContext(context, enrichment) {
|
|
258
|
+
// Create trace entry
|
|
259
|
+
const traceEntry = {
|
|
260
|
+
agentId: enrichment.agentId,
|
|
261
|
+
tier: enrichment.tier,
|
|
262
|
+
timestamp: enrichment.timestamp,
|
|
263
|
+
action: enrichment.action ?? 'enrich',
|
|
264
|
+
};
|
|
265
|
+
// Merge data deeply
|
|
266
|
+
const mergedData = deepMerge(context.data ?? {}, enrichment.data);
|
|
267
|
+
return {
|
|
268
|
+
...context,
|
|
269
|
+
version: incrementPatch(context.version),
|
|
270
|
+
currentAgent: {
|
|
271
|
+
id: enrichment.agentId,
|
|
272
|
+
tier: enrichment.tier,
|
|
273
|
+
name: context.currentAgent.name,
|
|
274
|
+
},
|
|
275
|
+
data: mergedData,
|
|
276
|
+
trace: [...context.trace, traceEntry],
|
|
277
|
+
};
|
|
278
|
+
}
|
|
279
|
+
// ============================================================================
|
|
280
|
+
// Serialization Functions
|
|
281
|
+
// ============================================================================
|
|
282
|
+
/**
|
|
283
|
+
* Custom replacer for JSON.stringify that handles Date objects
|
|
284
|
+
*/
|
|
285
|
+
function dateReplacer(_key, value) {
|
|
286
|
+
if (value instanceof Date) {
|
|
287
|
+
return value.toISOString();
|
|
288
|
+
}
|
|
289
|
+
return value;
|
|
290
|
+
}
|
|
291
|
+
/**
|
|
292
|
+
* Serialize a cascade context to JSON string
|
|
293
|
+
*
|
|
294
|
+
* Handles Date objects by converting them to ISO strings.
|
|
295
|
+
*
|
|
296
|
+
* @param context - The context to serialize
|
|
297
|
+
* @returns JSON string representation
|
|
298
|
+
*/
|
|
299
|
+
export function serializeContext(context) {
|
|
300
|
+
return JSON.stringify(context, dateReplacer);
|
|
301
|
+
}
|
|
302
|
+
/**
|
|
303
|
+
* Deserialize a JSON string to a cascade context
|
|
304
|
+
*
|
|
305
|
+
* Validates the deserialized data and restores Date objects.
|
|
306
|
+
*
|
|
307
|
+
* @param json - JSON string to deserialize
|
|
308
|
+
* @returns The deserialized and validated context
|
|
309
|
+
* @throws Error if JSON is invalid or context validation fails
|
|
310
|
+
*/
|
|
311
|
+
export function deserializeContext(json) {
|
|
312
|
+
let parsed;
|
|
313
|
+
try {
|
|
314
|
+
parsed = JSON.parse(json);
|
|
315
|
+
}
|
|
316
|
+
catch {
|
|
317
|
+
throw new Error('Invalid JSON string');
|
|
318
|
+
}
|
|
319
|
+
// Restore Date objects
|
|
320
|
+
if (typeof parsed === 'object' && parsed !== null) {
|
|
321
|
+
restoreDates(parsed);
|
|
322
|
+
}
|
|
323
|
+
// Validate the parsed context
|
|
324
|
+
const result = validateContext(parsed);
|
|
325
|
+
if (!result.success) {
|
|
326
|
+
throw new Error(`Invalid context structure: ${result.errors?.map(e => e.message).join(', ')}`);
|
|
327
|
+
}
|
|
328
|
+
return result.data;
|
|
329
|
+
}
|
|
330
|
+
/**
|
|
331
|
+
* Recursively restore ISO date strings to Date objects
|
|
332
|
+
*/
|
|
333
|
+
function restoreDates(obj) {
|
|
334
|
+
const isoDateRegex = /^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}(\.\d{3})?Z$/;
|
|
335
|
+
for (const key of Object.keys(obj)) {
|
|
336
|
+
const value = obj[key];
|
|
337
|
+
if (typeof value === 'string' && isoDateRegex.test(value)) {
|
|
338
|
+
obj[key] = new Date(value);
|
|
339
|
+
}
|
|
340
|
+
else if (typeof value === 'object' && value !== null) {
|
|
341
|
+
if (Array.isArray(value)) {
|
|
342
|
+
for (const item of value) {
|
|
343
|
+
if (typeof item === 'object' && item !== null) {
|
|
344
|
+
restoreDates(item);
|
|
345
|
+
}
|
|
346
|
+
}
|
|
347
|
+
}
|
|
348
|
+
else {
|
|
349
|
+
restoreDates(value);
|
|
350
|
+
}
|
|
351
|
+
}
|
|
352
|
+
}
|
|
353
|
+
}
|
|
354
|
+
// ============================================================================
|
|
355
|
+
// Context Merge/Diff Functions
|
|
356
|
+
// ============================================================================
|
|
357
|
+
/**
|
|
358
|
+
* Deep merge two objects
|
|
359
|
+
*/
|
|
360
|
+
function deepMerge(target, source) {
|
|
361
|
+
const result = { ...target };
|
|
362
|
+
for (const key of Object.keys(source)) {
|
|
363
|
+
const sourceValue = source[key];
|
|
364
|
+
const targetValue = result[key];
|
|
365
|
+
if (typeof sourceValue === 'object' &&
|
|
366
|
+
sourceValue !== null &&
|
|
367
|
+
!Array.isArray(sourceValue) &&
|
|
368
|
+
typeof targetValue === 'object' &&
|
|
369
|
+
targetValue !== null &&
|
|
370
|
+
!Array.isArray(targetValue)) {
|
|
371
|
+
result[key] = deepMerge(targetValue, sourceValue);
|
|
372
|
+
}
|
|
373
|
+
else {
|
|
374
|
+
result[key] = sourceValue;
|
|
375
|
+
}
|
|
376
|
+
}
|
|
377
|
+
return result;
|
|
378
|
+
}
|
|
379
|
+
/**
|
|
380
|
+
* Merge two cascade contexts
|
|
381
|
+
*
|
|
382
|
+
* Combines contexts preferring the newer version:
|
|
383
|
+
* - Takes version, state from the newer context
|
|
384
|
+
* - Deep merges data objects
|
|
385
|
+
* - Concatenates trace arrays
|
|
386
|
+
* - Merges metadata
|
|
387
|
+
*
|
|
388
|
+
* @param ctx1 - First context
|
|
389
|
+
* @param ctx2 - Second context
|
|
390
|
+
* @returns Merged context
|
|
391
|
+
*/
|
|
392
|
+
export function mergeContexts(ctx1, ctx2) {
|
|
393
|
+
// Determine which is newer based on version
|
|
394
|
+
const ctx1Version = ctx1.version.major * 10000 + ctx1.version.minor * 100 + ctx1.version.patch;
|
|
395
|
+
const ctx2Version = ctx2.version.major * 10000 + ctx2.version.minor * 100 + ctx2.version.patch;
|
|
396
|
+
const [older, newer] = ctx1Version <= ctx2Version ? [ctx1, ctx2] : [ctx2, ctx1];
|
|
397
|
+
// Merge data deeply
|
|
398
|
+
const mergedData = deepMerge(older.data ?? {}, newer.data ?? {});
|
|
399
|
+
// Combine traces (deduplicate by timestamp + agentId)
|
|
400
|
+
const seenTraces = new Set();
|
|
401
|
+
const combinedTrace = [];
|
|
402
|
+
for (const entry of [...older.trace, ...newer.trace]) {
|
|
403
|
+
const key = `${entry.agentId}-${entry.timestamp.getTime()}`;
|
|
404
|
+
if (!seenTraces.has(key)) {
|
|
405
|
+
seenTraces.add(key);
|
|
406
|
+
combinedTrace.push(entry);
|
|
407
|
+
}
|
|
408
|
+
}
|
|
409
|
+
// Merge metadata
|
|
410
|
+
const mergedMetadata = deepMerge(older.metadata ?? {}, newer.metadata ?? {});
|
|
411
|
+
return {
|
|
412
|
+
...newer,
|
|
413
|
+
data: mergedData,
|
|
414
|
+
trace: combinedTrace,
|
|
415
|
+
metadata: mergedMetadata,
|
|
416
|
+
};
|
|
417
|
+
}
|
|
418
|
+
/**
|
|
419
|
+
* Compare two contexts and return the differences
|
|
420
|
+
*
|
|
421
|
+
* @param ctx1 - Original context
|
|
422
|
+
* @param ctx2 - Modified context
|
|
423
|
+
* @returns Diff object with list of changes
|
|
424
|
+
*/
|
|
425
|
+
export function diffContexts(ctx1, ctx2) {
|
|
426
|
+
const changes = [];
|
|
427
|
+
// Helper to compare values recursively
|
|
428
|
+
function compareValues(path, val1, val2) {
|
|
429
|
+
// Handle undefined/null
|
|
430
|
+
if (val1 === undefined && val2 !== undefined) {
|
|
431
|
+
changes.push({ path, oldValue: val1, newValue: val2, type: 'added' });
|
|
432
|
+
return;
|
|
433
|
+
}
|
|
434
|
+
if (val1 !== undefined && val2 === undefined) {
|
|
435
|
+
changes.push({ path, oldValue: val1, newValue: val2, type: 'removed' });
|
|
436
|
+
return;
|
|
437
|
+
}
|
|
438
|
+
// Handle Date objects
|
|
439
|
+
if (val1 instanceof Date && val2 instanceof Date) {
|
|
440
|
+
if (val1.getTime() !== val2.getTime()) {
|
|
441
|
+
changes.push({ path, oldValue: val1, newValue: val2, type: 'modified' });
|
|
442
|
+
}
|
|
443
|
+
return;
|
|
444
|
+
}
|
|
445
|
+
// Handle primitives
|
|
446
|
+
if (typeof val1 !== 'object' || typeof val2 !== 'object') {
|
|
447
|
+
if (val1 !== val2) {
|
|
448
|
+
changes.push({ path, oldValue: val1, newValue: val2, type: 'modified' });
|
|
449
|
+
}
|
|
450
|
+
return;
|
|
451
|
+
}
|
|
452
|
+
// Handle null
|
|
453
|
+
if (val1 === null || val2 === null) {
|
|
454
|
+
if (val1 !== val2) {
|
|
455
|
+
changes.push({ path, oldValue: val1, newValue: val2, type: 'modified' });
|
|
456
|
+
}
|
|
457
|
+
return;
|
|
458
|
+
}
|
|
459
|
+
// Handle arrays
|
|
460
|
+
if (Array.isArray(val1) && Array.isArray(val2)) {
|
|
461
|
+
if (JSON.stringify(val1) !== JSON.stringify(val2)) {
|
|
462
|
+
changes.push({ path, oldValue: val1, newValue: val2, type: 'modified' });
|
|
463
|
+
}
|
|
464
|
+
return;
|
|
465
|
+
}
|
|
466
|
+
// Handle objects
|
|
467
|
+
const obj1 = val1;
|
|
468
|
+
const obj2 = val2;
|
|
469
|
+
const allKeys = Array.from(new Set([...Object.keys(obj1), ...Object.keys(obj2)]));
|
|
470
|
+
for (const key of allKeys) {
|
|
471
|
+
compareValues([...path, key], obj1[key], obj2[key]);
|
|
472
|
+
}
|
|
473
|
+
}
|
|
474
|
+
// Compare top-level fields (excluding trace which is handled specially)
|
|
475
|
+
const fieldsToCompare = [
|
|
476
|
+
'id',
|
|
477
|
+
'version',
|
|
478
|
+
'originAgent',
|
|
479
|
+
'currentAgent',
|
|
480
|
+
'task',
|
|
481
|
+
'state',
|
|
482
|
+
'data',
|
|
483
|
+
'metadata',
|
|
484
|
+
];
|
|
485
|
+
for (const field of fieldsToCompare) {
|
|
486
|
+
compareValues([field], ctx1[field], ctx2[field]);
|
|
487
|
+
}
|
|
488
|
+
return {
|
|
489
|
+
changes,
|
|
490
|
+
fromVersion: ctx1.version,
|
|
491
|
+
toVersion: ctx2.version,
|
|
492
|
+
};
|
|
493
|
+
}
|
|
494
|
+
//# sourceMappingURL=cascade-context.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cascade-context.js","sourceRoot":"","sources":["../src/cascade-context.ts"],"names":[],"mappings":"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"}
|