@ddse/acm-runtime 0.5.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 (55) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +393 -0
  3. package/dist/src/checkpoint.d.ts +97 -0
  4. package/dist/src/checkpoint.d.ts.map +1 -0
  5. package/dist/src/checkpoint.js +200 -0
  6. package/dist/src/checkpoint.js.map +1 -0
  7. package/dist/src/execution-transcript.d.ts +30 -0
  8. package/dist/src/execution-transcript.d.ts.map +1 -0
  9. package/dist/src/execution-transcript.js +70 -0
  10. package/dist/src/execution-transcript.js.map +1 -0
  11. package/dist/src/executor.d.ts +49 -0
  12. package/dist/src/executor.d.ts.map +1 -0
  13. package/dist/src/executor.js +390 -0
  14. package/dist/src/executor.js.map +1 -0
  15. package/dist/src/guards.d.ts +7 -0
  16. package/dist/src/guards.d.ts.map +1 -0
  17. package/dist/src/guards.js +13 -0
  18. package/dist/src/guards.js.map +1 -0
  19. package/dist/src/index.d.ts +9 -0
  20. package/dist/src/index.d.ts.map +1 -0
  21. package/dist/src/index.js +10 -0
  22. package/dist/src/index.js.map +1 -0
  23. package/dist/src/ledger.d.ts +12 -0
  24. package/dist/src/ledger.d.ts.map +1 -0
  25. package/dist/src/ledger.js +53 -0
  26. package/dist/src/ledger.js.map +1 -0
  27. package/dist/src/resumable-executor.d.ts +39 -0
  28. package/dist/src/resumable-executor.d.ts.map +1 -0
  29. package/dist/src/resumable-executor.js +354 -0
  30. package/dist/src/resumable-executor.js.map +1 -0
  31. package/dist/src/retry.d.ts +7 -0
  32. package/dist/src/retry.d.ts.map +1 -0
  33. package/dist/src/retry.js +25 -0
  34. package/dist/src/retry.js.map +1 -0
  35. package/dist/src/tool-envelope.d.ts +14 -0
  36. package/dist/src/tool-envelope.d.ts.map +1 -0
  37. package/dist/src/tool-envelope.js +84 -0
  38. package/dist/src/tool-envelope.js.map +1 -0
  39. package/dist/tests/resumable.test.d.ts +2 -0
  40. package/dist/tests/resumable.test.d.ts.map +1 -0
  41. package/dist/tests/resumable.test.js +337 -0
  42. package/dist/tests/resumable.test.js.map +1 -0
  43. package/dist/tsconfig.tsbuildinfo +1 -0
  44. package/package.json +29 -0
  45. package/src/checkpoint.ts +311 -0
  46. package/src/execution-transcript.ts +108 -0
  47. package/src/executor.ts +540 -0
  48. package/src/guards.ts +21 -0
  49. package/src/index.ts +9 -0
  50. package/src/ledger.ts +63 -0
  51. package/src/resumable-executor.ts +471 -0
  52. package/src/retry.ts +37 -0
  53. package/src/tool-envelope.ts +113 -0
  54. package/tests/resumable.test.ts +421 -0
  55. package/tsconfig.json +11 -0
@@ -0,0 +1,390 @@
1
+ // Main execution engine
2
+ import { InternalContextScopeImpl, } from '@ddse/acm-sdk';
3
+ import { evaluateGuard } from './guards.js';
4
+ import { MemoryLedger } from './ledger.js';
5
+ import { withRetry } from './retry.js';
6
+ import { createInstrumentedToolGetter } from './tool-envelope.js';
7
+ export async function executePlan(options) {
8
+ const { goal, context, plan, capabilityRegistry, toolRegistry, policy, verify, stream, nucleusFactory, nucleusConfig, contextProvider, } = options;
9
+ const ledger = options.ledger ?? new MemoryLedger();
10
+ const outputs = {};
11
+ const executionRecords = {};
12
+ const policyContext = {};
13
+ const metrics = { costUsd: 0, elapsedSec: 0 };
14
+ const startTime = Date.now();
15
+ // Log plan selection
16
+ ledger.append('PLAN_SELECTED', {
17
+ planId: plan.id,
18
+ contextRef: plan.contextRef,
19
+ capabilityMapVersion: plan.capabilityMapVersion,
20
+ });
21
+ // Build execution order based on edges
22
+ const executed = new Set();
23
+ const pending = [...plan.tasks];
24
+ while (pending.length > 0) {
25
+ const readyTasks = pending.filter(taskSpec => {
26
+ // Check if all dependencies are satisfied
27
+ const incomingEdges = plan.edges.filter(e => e.to === taskSpec.id);
28
+ if (incomingEdges.length === 0) {
29
+ return true; // No dependencies
30
+ }
31
+ return incomingEdges.every(edge => {
32
+ if (!executed.has(edge.from)) {
33
+ return false;
34
+ }
35
+ // Evaluate guard if present
36
+ if (edge.guard) {
37
+ const guardResult = evaluateGuard(edge.guard, {
38
+ context,
39
+ outputs,
40
+ policy: policyContext,
41
+ });
42
+ ledger.append('GUARD_EVAL', {
43
+ edge: `${edge.from}->${edge.to}`,
44
+ guard: edge.guard,
45
+ result: guardResult,
46
+ });
47
+ return guardResult;
48
+ }
49
+ return true;
50
+ });
51
+ });
52
+ if (readyTasks.length === 0) {
53
+ break; // No more tasks can be executed
54
+ }
55
+ // Execute ready tasks
56
+ for (const taskSpec of readyTasks) {
57
+ pending.splice(pending.indexOf(taskSpec), 1);
58
+ const capabilityName = taskSpec.capabilityRef || taskSpec.capability;
59
+ if (!capabilityName) {
60
+ throw new Error(`Task ${taskSpec.id} missing capability reference`);
61
+ }
62
+ const task = capabilityRegistry.resolve(capabilityName);
63
+ if (!task) {
64
+ throw new Error(`Task not found for capability: ${capabilityName}`);
65
+ }
66
+ const nucleusAllowedTools = new Set(nucleusConfig.allowedTools ?? []);
67
+ for (const tool of taskSpec.tools ?? []) {
68
+ nucleusAllowedTools.add(tool.name);
69
+ }
70
+ const nucleus = nucleusFactory({
71
+ goalId: goal.id,
72
+ goalIntent: goal.intent,
73
+ planId: plan.id,
74
+ taskId: taskSpec.id,
75
+ contextRef: plan.contextRef,
76
+ context,
77
+ llmCall: nucleusConfig.llmCall,
78
+ hooks: nucleusConfig.hooks,
79
+ allowedTools: Array.from(nucleusAllowedTools),
80
+ });
81
+ const internalScope = new InternalContextScopeImpl(entry => {
82
+ ledger.append(entry.type, entry.details);
83
+ });
84
+ nucleus.setInternalContext(internalScope);
85
+ const getTool = createInstrumentedToolGetter({
86
+ taskId: taskSpec.id,
87
+ capability: capabilityName,
88
+ toolRegistry,
89
+ ledger,
90
+ });
91
+ // Build run context
92
+ const runContext = {
93
+ goal,
94
+ context,
95
+ outputs,
96
+ metrics,
97
+ getTool,
98
+ getCapabilityRegistry: () => capabilityRegistry,
99
+ stream,
100
+ nucleus,
101
+ internalContext: internalScope,
102
+ };
103
+ let preflight = await nucleus.preflight();
104
+ if (preflight.status === 'NEEDS_CONTEXT') {
105
+ const requestedDirectives = preflight.retrievalDirectives;
106
+ ledger.append('CONTEXT_INTERNALIZED', {
107
+ taskId: taskSpec.id,
108
+ directives: requestedDirectives,
109
+ status: contextProvider ? 'requested' : 'unhandled',
110
+ });
111
+ if (!contextProvider) {
112
+ throw new Error(`Task ${taskSpec.id} requires additional context retrieval: ${preflight.retrievalDirectives.join(', ')}`);
113
+ }
114
+ await contextProvider.fulfill({
115
+ directives: requestedDirectives,
116
+ scope: internalScope,
117
+ runContext,
118
+ nucleus,
119
+ });
120
+ preflight = await nucleus.preflight();
121
+ if (preflight.status === 'NEEDS_CONTEXT') {
122
+ throw new Error(`Task ${taskSpec.id} still requires additional context after adapter execution: ${preflight.retrievalDirectives.join(', ')}`);
123
+ }
124
+ ledger.append('CONTEXT_INTERNALIZED', {
125
+ taskId: taskSpec.id,
126
+ directives: requestedDirectives,
127
+ status: 'resolved',
128
+ });
129
+ }
130
+ // Policy pre-check
131
+ if (policy) {
132
+ const policyInput = task.policyInput?.(runContext, taskSpec.input) ?? {};
133
+ const decision = await policy.evaluate('task.pre', {
134
+ taskId: taskSpec.id,
135
+ capability: taskSpec.capability,
136
+ ...policyInput,
137
+ });
138
+ ledger.append('POLICY_PRE', {
139
+ taskId: taskSpec.id,
140
+ decision,
141
+ });
142
+ if (!decision.allow) {
143
+ throw new Error(`Policy denied task ${taskSpec.id}: ${decision.reason}`);
144
+ }
145
+ policyContext[taskSpec.id] = decision;
146
+ }
147
+ // Execute task with retry
148
+ const ledgerBaseline = ledger.getEntries().length;
149
+ ledger.append('TASK_START', {
150
+ taskId: taskSpec.id,
151
+ capability: capabilityName,
152
+ input: taskSpec.input,
153
+ });
154
+ stream?.emit('task', { taskId: taskSpec.id, status: 'running' });
155
+ try {
156
+ const executeTask = async () => task.execute(runContext, taskSpec.input);
157
+ const retryConfig = taskSpec.retry || (taskSpec.retryPolicy
158
+ ? {
159
+ attempts: taskSpec.retryPolicy.maxAttempts || 3,
160
+ backoff: 'exp',
161
+ }
162
+ : undefined);
163
+ const output = retryConfig ? await withRetry(executeTask, retryConfig) : await executeTask();
164
+ outputs[taskSpec.id] = output;
165
+ // Policy post-check
166
+ if (policy) {
167
+ const decision = await policy.evaluate('task.post', {
168
+ taskId: taskSpec.id,
169
+ output,
170
+ });
171
+ ledger.append('POLICY_POST', {
172
+ taskId: taskSpec.id,
173
+ decision,
174
+ });
175
+ }
176
+ // Verification
177
+ if (verify && taskSpec.verification && taskSpec.verification.length > 0) {
178
+ const verified = await verify(taskSpec.id, output, taskSpec.verification);
179
+ ledger.append('VERIFICATION', {
180
+ taskId: taskSpec.id,
181
+ expressions: taskSpec.verification,
182
+ result: verified,
183
+ });
184
+ if (!verified) {
185
+ throw new Error(`Verification failed for task ${taskSpec.id}`);
186
+ }
187
+ }
188
+ const postcheck = await nucleus.postcheck(output);
189
+ if (postcheck.status === 'NEEDS_COMPENSATION') {
190
+ ledger.append('ERROR', {
191
+ taskId: taskSpec.id,
192
+ stage: 'NUCLEUS_POSTCHECK',
193
+ message: postcheck.reason,
194
+ });
195
+ throw new Error(`Task ${taskSpec.id} requires compensation: ${postcheck.reason}`);
196
+ }
197
+ if (postcheck.status === 'ESCALATE') {
198
+ ledger.append('ERROR', {
199
+ taskId: taskSpec.id,
200
+ stage: 'NUCLEUS_POSTCHECK',
201
+ message: postcheck.reason,
202
+ });
203
+ throw new Error(`Task ${taskSpec.id} escalated: ${postcheck.reason}`);
204
+ }
205
+ const narrative = buildTaskNarrative(ledger, ledgerBaseline, taskSpec.id, postcheck);
206
+ executionRecords[taskSpec.id] = {
207
+ output,
208
+ narrative,
209
+ };
210
+ ledger.append('TASK_END', {
211
+ taskId: taskSpec.id,
212
+ output,
213
+ narrative,
214
+ });
215
+ stream?.emit('task', { taskId: taskSpec.id, status: 'completed', output, narrative });
216
+ executed.add(taskSpec.id);
217
+ }
218
+ catch (error) {
219
+ ledger.append('ERROR', {
220
+ taskId: taskSpec.id,
221
+ capability: capabilityName,
222
+ message: error.message || 'Unknown error',
223
+ });
224
+ stream?.emit('task', {
225
+ taskId: taskSpec.id,
226
+ status: 'failed',
227
+ error: error.message || error.toString(),
228
+ });
229
+ throw error;
230
+ }
231
+ }
232
+ }
233
+ const goalSummary = await synthesizeGoalSummary({
234
+ goal,
235
+ plan,
236
+ executionRecords,
237
+ context,
238
+ nucleusFactory,
239
+ nucleusConfig,
240
+ ledger,
241
+ stream,
242
+ });
243
+ metrics.elapsedSec = (Date.now() - startTime) / 1000;
244
+ return {
245
+ outputsByTask: executionRecords,
246
+ ledger: ledger.getEntries(),
247
+ goalSummary,
248
+ };
249
+ }
250
+ export function buildTaskNarrative(ledger, baselineIndex, taskId, postcheck) {
251
+ const entries = ledger.getEntries().slice(baselineIndex);
252
+ const reasonings = entries
253
+ .filter(entry => entry.type === 'NUCLEUS_INFERENCE')
254
+ .filter(entry => entry.details?.nucleus?.taskId === taskId)
255
+ .map(entry => (typeof entry.details?.reasoning === 'string' ? entry.details.reasoning.trim() : undefined))
256
+ .filter((text) => Boolean(text && text.length > 0));
257
+ const narrative = {};
258
+ if (reasonings.length > 0) {
259
+ narrative.reasoning = reasonings;
260
+ }
261
+ narrative.postcheck = {
262
+ status: postcheck.status,
263
+ ...(postcheck.status !== 'COMPLETE' && 'reason' in postcheck
264
+ ? { reason: postcheck.reason }
265
+ : {}),
266
+ };
267
+ if (!narrative.reasoning && !narrative.postcheck?.reason && narrative.postcheck?.status === 'COMPLETE') {
268
+ // Return undefined if narrative is completely empty beyond a routine COMPLETE status
269
+ return undefined;
270
+ }
271
+ return narrative;
272
+ }
273
+ export async function synthesizeGoalSummary(options) {
274
+ const { goal, plan, executionRecords, context, nucleusFactory, nucleusConfig, ledger, stream } = options;
275
+ if (plan.tasks.length === 0 || Object.keys(executionRecords).length === 0) {
276
+ return undefined;
277
+ }
278
+ try {
279
+ const allowedTools = Array.from(new Set(nucleusConfig.allowedTools ?? []));
280
+ const nucleus = nucleusFactory({
281
+ goalId: goal.id,
282
+ goalIntent: goal.intent,
283
+ planId: plan.id,
284
+ taskId: 'goal-summary',
285
+ contextRef: plan.contextRef,
286
+ context,
287
+ llmCall: nucleusConfig.llmCall,
288
+ hooks: nucleusConfig.hooks,
289
+ allowedTools,
290
+ });
291
+ const prompt = buildGoalSummaryPrompt(goal, plan, executionRecords, context);
292
+ const result = await nucleus.invoke({ prompt, tools: [] });
293
+ const summary = result.reasoning?.trim() ?? '';
294
+ const normalizedSummary = summary.length > 0 ? summary : undefined;
295
+ ledger.append('GOAL_SUMMARY', {
296
+ goalId: goal.id,
297
+ planId: plan.id,
298
+ summary: normalizedSummary,
299
+ tasks: plan.tasks.map(task => {
300
+ const record = executionRecords[task.id];
301
+ return {
302
+ id: task.id,
303
+ title: task.title,
304
+ objective: task.objective,
305
+ successCriteria: task.successCriteria,
306
+ outputPreview: record ? previewForSummary(record.output) : undefined,
307
+ postcheck: record?.narrative?.postcheck,
308
+ };
309
+ }),
310
+ });
311
+ if (normalizedSummary) {
312
+ stream?.emit('summary', {
313
+ goalId: goal.id,
314
+ planId: plan.id,
315
+ summary: normalizedSummary,
316
+ });
317
+ }
318
+ return normalizedSummary;
319
+ }
320
+ catch (error) {
321
+ ledger.append('ERROR', {
322
+ stage: 'GOAL_SUMMARY',
323
+ message: error?.message ?? 'Failed to synthesize goal summary',
324
+ });
325
+ return undefined;
326
+ }
327
+ }
328
+ function buildGoalSummaryPrompt(goal, plan, executionRecords, context) {
329
+ const goalIntent = goal.intent ?? goal.id;
330
+ const contextFacts = context?.facts ? JSON.stringify(context.facts, null, 2) : '{}';
331
+ const contextAssumptions = context?.assumptions?.length
332
+ ? `Assumptions:\n- ${context.assumptions.join('\n- ')}`
333
+ : 'Assumptions: none provided';
334
+ const taskSections = plan.tasks.map(task => {
335
+ const record = executionRecords[task.id];
336
+ const label = task.title || task.capabilityRef || task.capability || task.id;
337
+ const pieces = [
338
+ `Task ${task.id}: ${label}`,
339
+ task.objective ? `Objective: ${task.objective}` : undefined,
340
+ task.successCriteria && task.successCriteria.length > 0
341
+ ? `Success Criteria: ${task.successCriteria.join('; ')}`
342
+ : undefined,
343
+ record ? `Outcome: ${previewForSummary(record.output)}` : 'Outcome: not captured.',
344
+ record?.narrative?.reasoning?.length
345
+ ? `Narrative: ${record.narrative.reasoning.join(' ')}`
346
+ : undefined,
347
+ record?.narrative?.postcheck
348
+ ? `Postcheck: ${record.narrative.postcheck.status}${record.narrative.postcheck.reason ? ` (${record.narrative.postcheck.reason})` : ''}`
349
+ : undefined,
350
+ ].filter(Boolean);
351
+ return pieces.join('\n');
352
+ });
353
+ return `You are composing the wrap-up for an ACM execution run.
354
+ Goal intent: ${goalIntent}
355
+ Context reference: ${plan.contextRef}
356
+
357
+ Context facts:
358
+ ${contextFacts}
359
+ ${contextAssumptions}
360
+
361
+ Summarize the outcome in 2-3 sentences for the operator. Highlight what happened, any remaining risks or follow-up, and reference task achievements when relevant.
362
+
363
+ Task outcomes:
364
+ ${taskSections.join('\n\n')}`;
365
+ }
366
+ function previewForSummary(value, maxLength = 240) {
367
+ if (value === null || value === undefined) {
368
+ return 'No output provided.';
369
+ }
370
+ let text;
371
+ if (typeof value === 'string') {
372
+ text = value.trim();
373
+ }
374
+ else if (typeof value === 'number' || typeof value === 'boolean') {
375
+ text = String(value);
376
+ }
377
+ else {
378
+ try {
379
+ text = JSON.stringify(value);
380
+ }
381
+ catch {
382
+ text = String(value);
383
+ }
384
+ }
385
+ if (text.length <= maxLength) {
386
+ return text;
387
+ }
388
+ return `${text.slice(0, maxLength - 1)}…`;
389
+ }
390
+ //# sourceMappingURL=executor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"executor.js","sourceRoot":"","sources":["../../src/executor.ts"],"names":[],"mappings":"AAAA,wBAAwB;AACxB,OAAO,EACL,wBAAwB,GAczB,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AACvC,OAAO,EAAE,4BAA4B,EAAE,MAAM,oBAAoB,CAAC;AAwClE,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,OAA2B;IAC3D,MAAM,EACJ,IAAI,EACJ,OAAO,EACP,IAAI,EACJ,kBAAkB,EAClB,YAAY,EACZ,MAAM,EACN,MAAM,EACN,MAAM,EACN,cAAc,EACd,aAAa,EACb,eAAe,GAChB,GAAG,OAAO,CAAC;IAEZ,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,IAAI,YAAY,EAAE,CAAC;IACpD,MAAM,OAAO,GAAwB,EAAE,CAAC;IACxC,MAAM,gBAAgB,GAAwC,EAAE,CAAC;IACjE,MAAM,aAAa,GAAwB,EAAE,CAAC;IAC9C,MAAM,OAAO,GAAG,EAAE,OAAO,EAAE,CAAC,EAAE,UAAU,EAAE,CAAC,EAAE,CAAC;IAC9C,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAE7B,qBAAqB;IACrB,MAAM,CAAC,MAAM,CAAC,eAAe,EAAE;QAC7B,MAAM,EAAE,IAAI,CAAC,EAAE;QACf,UAAU,EAAE,IAAI,CAAC,UAAU;QAC3B,oBAAoB,EAAE,IAAI,CAAC,oBAAoB;KAChD,CAAC,CAAC;IAEH,uCAAuC;IACvC,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAU,CAAC;IACnC,MAAM,OAAO,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC;IAEhC,OAAO,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC1B,MAAM,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE;YAC3C,0CAA0C;YAC1C,MAAM,aAAa,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,QAAQ,CAAC,EAAE,CAAC,CAAC;YACnE,IAAI,aAAa,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBAC/B,OAAO,IAAI,CAAC,CAAC,kBAAkB;YACjC,CAAC;YAED,OAAO,aAAa,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE;gBAChC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;oBAC7B,OAAO,KAAK,CAAC;gBACf,CAAC;gBAED,4BAA4B;gBAC5B,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;oBACf,MAAM,WAAW,GAAG,aAAa,CAAC,IAAI,CAAC,KAAK,EAAE;wBAC5C,OAAO;wBACP,OAAO;wBACP,MAAM,EAAE,aAAa;qBACtB,CAAC,CAAC;oBAEH,MAAM,CAAC,MAAM,CAAC,YAAY,EAAE;wBAC1B,IAAI,EAAE,GAAG,IAAI,CAAC,IAAI,KAAK,IAAI,CAAC,EAAE,EAAE;wBAChC,KAAK,EAAE,IAAI,CAAC,KAAK;wBACjB,MAAM,EAAE,WAAW;qBACpB,CAAC,CAAC;oBAEH,OAAO,WAAW,CAAC;gBACrB,CAAC;gBAED,OAAO,IAAI,CAAC;YACd,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC5B,MAAM,CAAC,gCAAgC;QACzC,CAAC;QAED,sBAAsB;QACtB,KAAK,MAAM,QAAQ,IAAI,UAAU,EAAE,CAAC;YAClC,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC;YAE7C,MAAM,cAAc,GAAG,QAAQ,CAAC,aAAa,IAAI,QAAQ,CAAC,UAAU,CAAC;YACrE,IAAI,CAAC,cAAc,EAAE,CAAC;gBACpB,MAAM,IAAI,KAAK,CAAC,QAAQ,QAAQ,CAAC,EAAE,+BAA+B,CAAC,CAAC;YACtE,CAAC;YAED,MAAM,IAAI,GAAG,kBAAkB,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC;YACxD,IAAI,CAAC,IAAI,EAAE,CAAC;gBACV,MAAM,IAAI,KAAK,CAAC,kCAAkC,cAAc,EAAE,CAAC,CAAC;YACtE,CAAC;YAED,MAAM,mBAAmB,GAAG,IAAI,GAAG,CAAS,aAAa,CAAC,YAAY,IAAI,EAAE,CAAC,CAAC;YAC9E,KAAK,MAAM,IAAI,IAAI,QAAQ,CAAC,KAAK,IAAI,EAAE,EAAE,CAAC;gBACxC,mBAAmB,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACrC,CAAC;YAED,MAAM,OAAO,GAAG,cAAc,CAAC;gBAC7B,MAAM,EAAE,IAAI,CAAC,EAAE;gBACf,UAAU,EAAE,IAAI,CAAC,MAAM;gBACvB,MAAM,EAAE,IAAI,CAAC,EAAE;gBACf,MAAM,EAAE,QAAQ,CAAC,EAAE;gBACnB,UAAU,EAAE,IAAI,CAAC,UAAU;gBAC3B,OAAO;gBACP,OAAO,EAAE,aAAa,CAAC,OAAO;gBAC9B,KAAK,EAAE,aAAa,CAAC,KAAK;gBAC1B,YAAY,EAAE,KAAK,CAAC,IAAI,CAAC,mBAAmB,CAAC;aAC9C,CAAC,CAAC;YAEH,MAAM,aAAa,GAAG,IAAI,wBAAwB,CAAC,KAAK,CAAC,EAAE;gBACzD,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;YAC3C,CAAC,CAAC,CAAC;YACH,OAAO,CAAC,kBAAkB,CAAC,aAAa,CAAC,CAAC;YAE1C,MAAM,OAAO,GAAG,4BAA4B,CAAC;gBAC3C,MAAM,EAAE,QAAQ,CAAC,EAAE;gBACnB,UAAU,EAAE,cAAc;gBAC1B,YAAY;gBACZ,MAAM;aACP,CAAC,CAAC;YAEH,oBAAoB;YACpB,MAAM,UAAU,GAAe;gBAC7B,IAAI;gBACJ,OAAO;gBACP,OAAO;gBACP,OAAO;gBACP,OAAO;gBACP,qBAAqB,EAAE,GAAG,EAAE,CAAC,kBAAkB;gBAC/C,MAAM;gBACN,OAAO;gBACP,eAAe,EAAE,aAAa;aAC/B,CAAC;YAEF,IAAI,SAAS,GAAG,MAAM,OAAO,CAAC,SAAS,EAAE,CAAC;YAC1C,IAAI,SAAS,CAAC,MAAM,KAAK,eAAe,EAAE,CAAC;gBACzC,MAAM,mBAAmB,GAAG,SAAS,CAAC,mBAAmB,CAAC;gBAE1D,MAAM,CAAC,MAAM,CAAC,sBAAsB,EAAE;oBACpC,MAAM,EAAE,QAAQ,CAAC,EAAE;oBACnB,UAAU,EAAE,mBAAmB;oBAC/B,MAAM,EAAE,eAAe,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,WAAW;iBACpD,CAAC,CAAC;gBAEH,IAAI,CAAC,eAAe,EAAE,CAAC;oBACrB,MAAM,IAAI,KAAK,CACb,QAAQ,QAAQ,CAAC,EAAE,2CAA2C,SAAS,CAAC,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CACzG,CAAC;gBACJ,CAAC;gBAED,MAAM,eAAe,CAAC,OAAO,CAAC;oBAC5B,UAAU,EAAE,mBAAmB;oBAC/B,KAAK,EAAE,aAAa;oBACpB,UAAU;oBACV,OAAO;iBACR,CAAC,CAAC;gBAEH,SAAS,GAAG,MAAM,OAAO,CAAC,SAAS,EAAE,CAAC;gBACtC,IAAI,SAAS,CAAC,MAAM,KAAK,eAAe,EAAE,CAAC;oBACzC,MAAM,IAAI,KAAK,CACb,QAAQ,QAAQ,CAAC,EAAE,+DAA+D,SAAS,CAAC,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAC7H,CAAC;gBACJ,CAAC;gBAED,MAAM,CAAC,MAAM,CAAC,sBAAsB,EAAE;oBACpC,MAAM,EAAE,QAAQ,CAAC,EAAE;oBACnB,UAAU,EAAE,mBAAmB;oBAC/B,MAAM,EAAE,UAAU;iBACnB,CAAC,CAAC;YACL,CAAC;YAED,mBAAmB;YACnB,IAAI,MAAM,EAAE,CAAC;gBACX,MAAM,WAAW,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC,UAAU,EAAE,QAAQ,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;gBACzE,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,QAAQ,CAAC,UAAU,EAAE;oBACjD,MAAM,EAAE,QAAQ,CAAC,EAAE;oBACnB,UAAU,EAAE,QAAQ,CAAC,UAAU;oBAC/B,GAAG,WAAW;iBACf,CAAC,CAAC;gBAEH,MAAM,CAAC,MAAM,CAAC,YAAY,EAAE;oBAC1B,MAAM,EAAE,QAAQ,CAAC,EAAE;oBACnB,QAAQ;iBACT,CAAC,CAAC;gBAEH,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC;oBACpB,MAAM,IAAI,KAAK,CAAC,sBAAsB,QAAQ,CAAC,EAAE,KAAK,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;gBAC3E,CAAC;gBAED,aAAa,CAAC,QAAQ,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC;YACxC,CAAC;YAED,0BAA0B;YAC1B,MAAM,cAAc,GAAG,MAAM,CAAC,UAAU,EAAE,CAAC,MAAM,CAAC;YAElD,MAAM,CAAC,MAAM,CAAC,YAAY,EAAE;gBAC1B,MAAM,EAAE,QAAQ,CAAC,EAAE;gBACnB,UAAU,EAAE,cAAc;gBAC1B,KAAK,EAAE,QAAQ,CAAC,KAAK;aACtB,CAAC,CAAC;YAEH,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC,CAAC;YAEjE,IAAI,CAAC;gBACH,MAAM,WAAW,GAAG,KAAK,IAAI,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC;gBACzE,MAAM,WAAW,GAAG,QAAQ,CAAC,KAAK,IAAI,CAAC,QAAQ,CAAC,WAAW;oBACzD,CAAC,CAAC;wBACE,QAAQ,EAAE,QAAQ,CAAC,WAAW,CAAC,WAAW,IAAI,CAAC;wBAC/C,OAAO,EAAE,KAAc;qBACxB;oBACH,CAAC,CAAC,SAAS,CAAC,CAAC;gBAEf,MAAM,MAAM,GAAG,WAAW,CAAC,CAAC,CAAC,MAAM,SAAS,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC,MAAM,WAAW,EAAE,CAAC;gBAC7F,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC;gBAE9B,oBAAoB;gBACpB,IAAI,MAAM,EAAE,CAAC;oBACX,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,QAAQ,CAAC,WAAW,EAAE;wBAClD,MAAM,EAAE,QAAQ,CAAC,EAAE;wBACnB,MAAM;qBACP,CAAC,CAAC;oBAEH,MAAM,CAAC,MAAM,CAAC,aAAa,EAAE;wBAC3B,MAAM,EAAE,QAAQ,CAAC,EAAE;wBACnB,QAAQ;qBACT,CAAC,CAAC;gBACL,CAAC;gBAED,eAAe;gBACf,IAAI,MAAM,IAAI,QAAQ,CAAC,YAAY,IAAI,QAAQ,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBACxE,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,QAAQ,CAAC,EAAE,EAAE,MAAM,EAAE,QAAQ,CAAC,YAAY,CAAC,CAAC;oBAE1E,MAAM,CAAC,MAAM,CAAC,cAAc,EAAE;wBAC5B,MAAM,EAAE,QAAQ,CAAC,EAAE;wBACnB,WAAW,EAAE,QAAQ,CAAC,YAAY;wBAClC,MAAM,EAAE,QAAQ;qBACjB,CAAC,CAAC;oBAEH,IAAI,CAAC,QAAQ,EAAE,CAAC;wBACd,MAAM,IAAI,KAAK,CAAC,gCAAgC,QAAQ,CAAC,EAAE,EAAE,CAAC,CAAC;oBACjE,CAAC;gBACH,CAAC;gBAEP,MAAM,SAAS,GAAG,MAAM,OAAO,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;gBAC5C,IAAI,SAAS,CAAC,MAAM,KAAK,oBAAoB,EAAE,CAAC;oBAC9C,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE;wBACrB,MAAM,EAAE,QAAQ,CAAC,EAAE;wBACnB,KAAK,EAAE,mBAAmB;wBAC1B,OAAO,EAAE,SAAS,CAAC,MAAM;qBAC1B,CAAC,CAAC;oBACH,MAAM,IAAI,KAAK,CAAC,QAAQ,QAAQ,CAAC,EAAE,2BAA2B,SAAS,CAAC,MAAM,EAAE,CAAC,CAAC;gBACpF,CAAC;gBACD,IAAI,SAAS,CAAC,MAAM,KAAK,UAAU,EAAE,CAAC;oBACpC,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE;wBACrB,MAAM,EAAE,QAAQ,CAAC,EAAE;wBACnB,KAAK,EAAE,mBAAmB;wBAC1B,OAAO,EAAE,SAAS,CAAC,MAAM;qBAC1B,CAAC,CAAC;oBACH,MAAM,IAAI,KAAK,CAAC,QAAQ,QAAQ,CAAC,EAAE,eAAe,SAAS,CAAC,MAAM,EAAE,CAAC,CAAC;gBACxE,CAAC;gBAED,MAAM,SAAS,GAAG,kBAAkB,CAAC,MAAM,EAAE,cAAc,EAAE,QAAQ,CAAC,EAAE,EAAE,SAAS,CAAC,CAAC;gBACrF,gBAAgB,CAAC,QAAQ,CAAC,EAAE,CAAC,GAAG;oBAC9B,MAAM;oBACN,SAAS;iBACV,CAAC;gBAEF,MAAM,CAAC,MAAM,CAAC,UAAU,EAAE;oBACxB,MAAM,EAAE,QAAQ,CAAC,EAAE;oBACnB,MAAM;oBACN,SAAS;iBACV,CAAC,CAAC;gBAEH,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC,CAAC;gBAEtF,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;YAC5B,CAAC;YAAC,OAAO,KAAU,EAAE,CAAC;gBACpB,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE;oBACrB,MAAM,EAAE,QAAQ,CAAC,EAAE;oBACnB,UAAU,EAAE,cAAc;oBAC1B,OAAO,EAAE,KAAK,CAAC,OAAO,IAAI,eAAe;iBAC1C,CAAC,CAAC;gBAEH,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE;oBACnB,MAAM,EAAE,QAAQ,CAAC,EAAE;oBACnB,MAAM,EAAE,QAAQ;oBAChB,KAAK,EAAE,KAAK,CAAC,OAAO,IAAI,KAAK,CAAC,QAAQ,EAAE;iBACzC,CAAC,CAAC;gBAEH,MAAM,KAAK,CAAC;YACd,CAAC;QACH,CAAC;IACH,CAAC;IAED,MAAM,WAAW,GAAG,MAAM,qBAAqB,CAAC;QAC9C,IAAI;QACJ,IAAI;QACJ,gBAAgB;QAChB,OAAO;QACP,cAAc;QACd,aAAa;QACb,MAAM;QACN,MAAM;KACP,CAAC,CAAC;IAEH,OAAO,CAAC,UAAU,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC,GAAG,IAAI,CAAC;IAErD,OAAO;QACL,aAAa,EAAE,gBAAgB;QAC/B,MAAM,EAAE,MAAM,CAAC,UAAU,EAAE;QAC3B,WAAW;KACZ,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,kBAAkB,CAChC,MAAoB,EACpB,aAAqB,EACrB,MAAc,EACd,SAA0B;IAE1B,MAAM,OAAO,GAAG,MAAM,CAAC,UAAU,EAAE,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;IACzD,MAAM,UAAU,GAAG,OAAO;SACvB,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,KAAK,mBAAmB,CAAC;SACnD,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,OAAO,EAAE,OAAO,EAAE,MAAM,KAAK,MAAM,CAAC;SAC1D,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,OAAO,KAAK,CAAC,OAAO,EAAE,SAAS,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;SACzG,MAAM,CAAC,CAAC,IAAI,EAAkB,EAAE,CAAC,OAAO,CAAC,IAAI,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC;IAEtE,MAAM,SAAS,GAAkB,EAAE,CAAC;IACpC,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC1B,SAAS,CAAC,SAAS,GAAG,UAAU,CAAC;IACnC,CAAC;IAED,SAAS,CAAC,SAAS,GAAG;QACpB,MAAM,EAAE,SAAS,CAAC,MAAM;QACxB,GAAG,CAAC,SAAS,CAAC,MAAM,KAAK,UAAU,IAAI,QAAQ,IAAI,SAAS;YAC1D,CAAC,CAAC,EAAE,MAAM,EAAG,SAA0D,CAAC,MAAM,EAAE;YAChF,CAAC,CAAC,EAAE,CAAC;KACsB,CAAC;IAEhC,IAAI,CAAC,SAAS,CAAC,SAAS,IAAI,CAAC,SAAS,CAAC,SAAS,EAAE,MAAM,IAAI,SAAS,CAAC,SAAS,EAAE,MAAM,KAAK,UAAU,EAAE,CAAC;QACvG,qFAAqF;QACrF,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,qBAAqB,CAAC,OAS3C;IACC,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,gBAAgB,EAAE,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC;IAEzG,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC1E,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,IAAI,CAAC;QACH,MAAM,YAAY,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,aAAa,CAAC,YAAY,IAAI,EAAE,CAAC,CAAC,CAAC;QAC3E,MAAM,OAAO,GAAG,cAAc,CAAC;YAC7B,MAAM,EAAE,IAAI,CAAC,EAAE;YACf,UAAU,EAAE,IAAI,CAAC,MAAM;YACvB,MAAM,EAAE,IAAI,CAAC,EAAE;YACf,MAAM,EAAE,cAAc;YACtB,UAAU,EAAE,IAAI,CAAC,UAAU;YAC3B,OAAO;YACP,OAAO,EAAE,aAAa,CAAC,OAAO;YAC9B,KAAK,EAAE,aAAa,CAAC,KAAK;YAC1B,YAAY;SACb,CAAC,CAAC;QAEH,MAAM,MAAM,GAAG,sBAAsB,CAAC,IAAI,EAAE,IAAI,EAAE,gBAAgB,EAAE,OAAO,CAAC,CAAC;QAC7E,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,CAAC;QAC3D,MAAM,OAAO,GAAG,MAAM,CAAC,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;QAC/C,MAAM,iBAAiB,GAAG,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC;QAEnE,MAAM,CAAC,MAAM,CAAC,cAAc,EAAE;YAC5B,MAAM,EAAE,IAAI,CAAC,EAAE;YACf,MAAM,EAAE,IAAI,CAAC,EAAE;YACf,OAAO,EAAE,iBAAiB;YAC1B,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;gBAC3B,MAAM,MAAM,GAAG,gBAAgB,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;gBACzC,OAAO;oBACL,EAAE,EAAE,IAAI,CAAC,EAAE;oBACX,KAAK,EAAE,IAAI,CAAC,KAAK;oBACjB,SAAS,EAAE,IAAI,CAAC,SAAS;oBACzB,eAAe,EAAE,IAAI,CAAC,eAAe;oBACrC,aAAa,EAAE,MAAM,CAAC,CAAC,CAAC,iBAAiB,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS;oBACpE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,SAAS;iBACxC,CAAC;YACJ,CAAC,CAAC;SACH,CAAC,CAAC;QAEH,IAAI,iBAAiB,EAAE,CAAC;YACtB,MAAM,EAAE,IAAI,CAAC,SAAS,EAAE;gBACtB,MAAM,EAAE,IAAI,CAAC,EAAE;gBACf,MAAM,EAAE,IAAI,CAAC,EAAE;gBACf,OAAO,EAAE,iBAAiB;aAC3B,CAAC,CAAC;QACL,CAAC;QAED,OAAO,iBAAiB,CAAC;IAC3B,CAAC;IAAC,OAAO,KAAU,EAAE,CAAC;QACpB,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE;YACrB,KAAK,EAAE,cAAc;YACrB,OAAO,EAAE,KAAK,EAAE,OAAO,IAAI,mCAAmC;SAC/D,CAAC,CAAC;QACH,OAAO,SAAS,CAAC;IACnB,CAAC;AACH,CAAC;AAED,SAAS,sBAAsB,CAC7B,IAAU,EACV,IAAU,EACV,gBAAqD,EACrD,OAAgB;IAEhB,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,EAAE,CAAC;IAC1C,MAAM,YAAY,GAAG,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IACpF,MAAM,kBAAkB,GAAG,OAAO,EAAE,WAAW,EAAE,MAAM;QACrD,CAAC,CAAC,mBAAmB,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE;QACvD,CAAC,CAAC,4BAA4B,CAAC;IAEjC,MAAM,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;QACzC,MAAM,MAAM,GAAG,gBAAgB,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACzC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,aAAa,IAAI,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,EAAE,CAAC;QAC7E,MAAM,MAAM,GAAG;YACb,QAAQ,IAAI,CAAC,EAAE,KAAK,KAAK,EAAE;YAC3B,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,cAAc,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,SAAS;YAC3D,IAAI,CAAC,eAAe,IAAI,IAAI,CAAC,eAAe,CAAC,MAAM,GAAG,CAAC;gBACrD,CAAC,CAAC,qBAAqB,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;gBACxD,CAAC,CAAC,SAAS;YACb,MAAM,CAAC,CAAC,CAAC,YAAY,iBAAiB,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,wBAAwB;YAClF,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM;gBAClC,CAAC,CAAC,cAAc,MAAM,CAAC,SAAS,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE;gBACtD,CAAC,CAAC,SAAS;YACb,MAAM,EAAE,SAAS,EAAE,SAAS;gBAC1B,CAAC,CAAC,cAAc,MAAM,CAAC,SAAS,CAAC,SAAS,CAAC,MAAM,GAAG,MAAM,CAAC,SAAS,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,MAAM,CAAC,SAAS,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;gBACxI,CAAC,CAAC,SAAS;SACd,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QAElB,OAAO,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC3B,CAAC,CAAC,CAAC;IAEH,OAAO;eACM,UAAU;qBACJ,IAAI,CAAC,UAAU;;;EAGlC,YAAY;EACZ,kBAAkB;;;;;EAKlB,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;AAC9B,CAAC;AAED,SAAS,iBAAiB,CAAC,KAAU,EAAE,SAAS,GAAG,GAAG;IACpD,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;QAC1C,OAAO,qBAAqB,CAAC;IAC/B,CAAC;IAED,IAAI,IAAY,CAAC;IACjB,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,IAAI,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;IACtB,CAAC;SAAM,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,OAAO,KAAK,KAAK,SAAS,EAAE,CAAC;QACnE,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;IACvB,CAAC;SAAM,CAAC;QACN,IAAI,CAAC;YACH,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;QAC/B,CAAC;QAAC,MAAM,CAAC;YACP,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;QACvB,CAAC;IACH,CAAC;IAED,IAAI,IAAI,CAAC,MAAM,IAAI,SAAS,EAAE,CAAC;QAC7B,OAAO,IAAI,CAAC;IACd,CAAC;IACD,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,SAAS,GAAG,CAAC,CAAC,GAAG,CAAC;AAC5C,CAAC"}
@@ -0,0 +1,7 @@
1
+ import type { GuardExpr, Context } from '@ddse/acm-sdk';
2
+ export declare function evaluateGuard(expr: GuardExpr, context: {
3
+ context: Context;
4
+ outputs: Record<string, any>;
5
+ policy: Record<string, any>;
6
+ }): boolean;
7
+ //# sourceMappingURL=guards.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"guards.d.ts","sourceRoot":"","sources":["../../src/guards.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAExD,wBAAgB,aAAa,CAC3B,IAAI,EAAE,SAAS,EACf,OAAO,EAAE;IACP,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC7B,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;CAC7B,GACA,OAAO,CAUT"}
@@ -0,0 +1,13 @@
1
+ export function evaluateGuard(expr, context) {
2
+ try {
3
+ // Simple expression evaluation
4
+ // Support basic comparisons and logical operators
5
+ const func = new Function('context', 'outputs', 'policy', `return ${expr};`);
6
+ return func(context.context, context.outputs, context.policy);
7
+ }
8
+ catch (err) {
9
+ console.error(`Guard evaluation failed: ${expr}`, err);
10
+ return false;
11
+ }
12
+ }
13
+ //# sourceMappingURL=guards.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"guards.js","sourceRoot":"","sources":["../../src/guards.ts"],"names":[],"mappings":"AAGA,MAAM,UAAU,aAAa,CAC3B,IAAe,EACf,OAIC;IAED,IAAI,CAAC;QACH,+BAA+B;QAC/B,kDAAkD;QAClD,MAAM,IAAI,GAAG,IAAI,QAAQ,CAAC,SAAS,EAAE,SAAS,EAAE,QAAQ,EAAE,UAAU,IAAI,GAAG,CAAC,CAAC;QAC7E,OAAO,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;IAChE,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,CAAC,KAAK,CAAC,4BAA4B,IAAI,EAAE,EAAE,GAAG,CAAC,CAAC;QACvD,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC"}
@@ -0,0 +1,9 @@
1
+ export * from './executor.js';
2
+ export * from './guards.js';
3
+ export * from './ledger.js';
4
+ export * from './retry.js';
5
+ export * from './checkpoint.js';
6
+ export * from './resumable-executor.js';
7
+ export * from './tool-envelope.js';
8
+ export * from './execution-transcript.js';
9
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AACA,cAAc,eAAe,CAAC;AAC9B,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,YAAY,CAAC;AAC3B,cAAc,iBAAiB,CAAC;AAChC,cAAc,yBAAyB,CAAC;AACxC,cAAc,oBAAoB,CAAC;AACnC,cAAc,2BAA2B,CAAC"}
@@ -0,0 +1,10 @@
1
+ // Runtime exports
2
+ export * from './executor.js';
3
+ export * from './guards.js';
4
+ export * from './ledger.js';
5
+ export * from './retry.js';
6
+ export * from './checkpoint.js';
7
+ export * from './resumable-executor.js';
8
+ export * from './tool-envelope.js';
9
+ export * from './execution-transcript.js';
10
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,kBAAkB;AAClB,cAAc,eAAe,CAAC;AAC9B,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,YAAY,CAAC;AAC3B,cAAc,iBAAiB,CAAC;AAChC,cAAc,yBAAyB,CAAC;AACxC,cAAc,oBAAoB,CAAC;AACnC,cAAc,2BAA2B,CAAC"}
@@ -0,0 +1,12 @@
1
+ import type { LedgerEntry } from '@ddse/acm-sdk';
2
+ export declare class MemoryLedger {
3
+ private entries;
4
+ private nextId;
5
+ append(type: LedgerEntry['type'], details: Record<string, any>, computeDigest?: boolean): LedgerEntry;
6
+ getEntries(): readonly LedgerEntry[];
7
+ getEntriesByType(type: LedgerEntry['type']): readonly LedgerEntry[];
8
+ clear(): void;
9
+ validate(): boolean;
10
+ private computeDigest;
11
+ }
12
+ //# sourceMappingURL=ledger.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ledger.d.ts","sourceRoot":"","sources":["../../src/ledger.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAGjD,qBAAa,YAAY;IACvB,OAAO,CAAC,OAAO,CAAqB;IACpC,OAAO,CAAC,MAAM,CAAK;IAEnB,MAAM,CAAC,IAAI,EAAE,WAAW,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,aAAa,UAAO,GAAG,WAAW;IAiBlG,UAAU,IAAI,SAAS,WAAW,EAAE;IAIpC,gBAAgB,CAAC,IAAI,EAAE,WAAW,CAAC,MAAM,CAAC,GAAG,SAAS,WAAW,EAAE;IAInE,KAAK,IAAI,IAAI;IAKb,QAAQ,IAAI,OAAO;IAanB,OAAO,CAAC,aAAa;CAWtB"}
@@ -0,0 +1,53 @@
1
+ import { createHash } from 'crypto';
2
+ export class MemoryLedger {
3
+ entries = [];
4
+ nextId = 1;
5
+ append(type, details, computeDigest = true) {
6
+ const entry = {
7
+ id: `ledger-${this.nextId++}`,
8
+ ts: Date.now(),
9
+ type,
10
+ details,
11
+ };
12
+ // Compute digest for tamper detection if requested
13
+ if (computeDigest) {
14
+ entry.digest = this.computeDigest(entry);
15
+ }
16
+ this.entries.push(entry);
17
+ return entry;
18
+ }
19
+ getEntries() {
20
+ return [...this.entries];
21
+ }
22
+ getEntriesByType(type) {
23
+ return this.entries.filter(e => e.type === type);
24
+ }
25
+ clear() {
26
+ this.entries = [];
27
+ }
28
+ // Validate ledger integrity
29
+ validate() {
30
+ for (const entry of this.entries) {
31
+ if (entry.digest) {
32
+ const computed = this.computeDigest(entry);
33
+ if (computed !== entry.digest) {
34
+ console.error(`Ledger entry ${entry.id} failed integrity check`);
35
+ return false;
36
+ }
37
+ }
38
+ }
39
+ return true;
40
+ }
41
+ computeDigest(entry) {
42
+ const normalized = JSON.stringify({
43
+ id: entry.id,
44
+ ts: entry.ts,
45
+ type: entry.type,
46
+ details: entry.details,
47
+ });
48
+ const hash = createHash('sha256');
49
+ hash.update(normalized);
50
+ return hash.digest('hex').substring(0, 32);
51
+ }
52
+ }
53
+ //# sourceMappingURL=ledger.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ledger.js","sourceRoot":"","sources":["../../src/ledger.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AAEpC,MAAM,OAAO,YAAY;IACf,OAAO,GAAkB,EAAE,CAAC;IAC5B,MAAM,GAAG,CAAC,CAAC;IAEnB,MAAM,CAAC,IAAyB,EAAE,OAA4B,EAAE,aAAa,GAAG,IAAI;QAClF,MAAM,KAAK,GAAgB;YACzB,EAAE,EAAE,UAAU,IAAI,CAAC,MAAM,EAAE,EAAE;YAC7B,EAAE,EAAE,IAAI,CAAC,GAAG,EAAE;YACd,IAAI;YACJ,OAAO;SACR,CAAC;QAEF,mDAAmD;QACnD,IAAI,aAAa,EAAE,CAAC;YAClB,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;QAC3C,CAAC;QAED,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACzB,OAAO,KAAK,CAAC;IACf,CAAC;IAED,UAAU;QACR,OAAO,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC;IAC3B,CAAC;IAED,gBAAgB,CAAC,IAAyB;QACxC,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC;IACnD,CAAC;IAED,KAAK;QACH,IAAI,CAAC,OAAO,GAAG,EAAE,CAAC;IACpB,CAAC;IAED,4BAA4B;IAC5B,QAAQ;QACN,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YACjC,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC;gBACjB,MAAM,QAAQ,GAAG,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;gBAC3C,IAAI,QAAQ,KAAK,KAAK,CAAC,MAAM,EAAE,CAAC;oBAC9B,OAAO,CAAC,KAAK,CAAC,gBAAgB,KAAK,CAAC,EAAE,yBAAyB,CAAC,CAAC;oBACjE,OAAO,KAAK,CAAC;gBACf,CAAC;YACH,CAAC;QACH,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAEO,aAAa,CAAC,KAAkB;QACtC,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC;YAChC,EAAE,EAAE,KAAK,CAAC,EAAE;YACZ,EAAE,EAAE,KAAK,CAAC,EAAE;YACZ,IAAI,EAAE,KAAK,CAAC,IAAI;YAChB,OAAO,EAAE,KAAK,CAAC,OAAO;SACvB,CAAC,CAAC;QACH,MAAM,IAAI,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC;QAClC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;QACxB,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IAC7C,CAAC;CACF"}
@@ -0,0 +1,39 @@
1
+ import { type Checkpoint, type CheckpointStore } from './checkpoint.js';
2
+ import type { ExecutePlanOptions, ExecutePlanResult } from './executor.js';
3
+ /**
4
+ * Extended options for resumable execution
5
+ */
6
+ export interface ResumableExecutePlanOptions extends ExecutePlanOptions {
7
+ resumeFrom?: string;
8
+ checkpointInterval?: number;
9
+ checkpointStore?: CheckpointStore;
10
+ runId?: string;
11
+ }
12
+ /**
13
+ * Execute a plan with checkpoint and resume support
14
+ */
15
+ export declare function executeResumablePlan(options: ResumableExecutePlanOptions): Promise<ExecutePlanResult>;
16
+ /**
17
+ * ResumableExecutor class for managing resumable executions
18
+ */
19
+ export declare class ResumableExecutor {
20
+ private checkpointStore;
21
+ constructor(checkpointStore?: CheckpointStore);
22
+ /**
23
+ * Execute a plan with checkpointing enabled
24
+ */
25
+ execute(options: ResumableExecutePlanOptions): Promise<ExecutePlanResult>;
26
+ /**
27
+ * List available checkpoints for a run
28
+ */
29
+ listCheckpoints(runId: string): Promise<import("./checkpoint.js").CheckpointMetadata[]>;
30
+ /**
31
+ * Get a specific checkpoint
32
+ */
33
+ getCheckpoint(runId: string, checkpointId?: string): Promise<Checkpoint | null>;
34
+ /**
35
+ * Prune old checkpoints
36
+ */
37
+ pruneCheckpoints(runId: string, keepLast?: number): Promise<void>;
38
+ }
39
+ //# sourceMappingURL=resumable-executor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resumable-executor.d.ts","sourceRoot":"","sources":["../../src/resumable-executor.ts"],"names":[],"mappings":"AAgBA,OAAO,EAIL,KAAK,UAAU,EACf,KAAK,eAAe,EAErB,MAAM,iBAAiB,CAAC;AACzB,OAAO,KAAK,EAAE,kBAAkB,EAAE,iBAAiB,EAAuB,MAAM,eAAe,CAAC;AAIhG;;GAEG;AACH,MAAM,WAAW,2BAA4B,SAAQ,kBAAkB;IACrE,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,eAAe,CAAC,EAAE,eAAe,CAAC;IAClC,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;GAEG;AACH,wBAAsB,oBAAoB,CACxC,OAAO,EAAE,2BAA2B,GACnC,OAAO,CAAC,iBAAiB,CAAC,CAmY5B;AAED;;GAEG;AACH,qBAAa,iBAAiB;IAE1B,OAAO,CAAC,eAAe;gBAAf,eAAe,GAAE,eAA6C;IAGxE;;OAEG;IACG,OAAO,CAAC,OAAO,EAAE,2BAA2B,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAO/E;;OAEG;IACG,eAAe,CAAC,KAAK,EAAE,MAAM;IAInC;;OAEG;IACG,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC;IAIrF;;OAEG;IACG,gBAAgB,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,GAAE,MAAU,GAAG,OAAO,CAAC,IAAI,CAAC;CAG3E"}