cpa-agents 0.1.0 → 0.2.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.
- package/dist/adapters/openclaw.d.ts +1 -1
- package/dist/adapters/openclaw.d.ts.map +1 -1
- package/dist/adapters/openclaw.js +70 -15
- package/dist/adapters/openclaw.js.map +1 -1
- package/dist/adapters/pi-harness.js +1 -1
- package/dist/fork-algebra.d.ts +35 -0
- package/dist/fork-algebra.d.ts.map +1 -0
- package/dist/fork-algebra.js +201 -0
- package/dist/fork-algebra.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -0
- package/dist/index.js.map +1 -1
- package/dist/operators.d.ts +44 -0
- package/dist/operators.d.ts.map +1 -0
- package/dist/operators.js +291 -0
- package/dist/operators.js.map +1 -0
- package/package.json +1 -1
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
import { type TraceEvent, type SessionNode } from "../process.js";
|
|
7
7
|
import { type AgentCall } from "../agent.js";
|
|
8
8
|
import { type SchedulerResult } from "../scheduler.js";
|
|
9
|
-
export declare const SKILL_MD = "# cpa-agents \u2014 Concurrent Process Algebra\n\
|
|
9
|
+
export declare const SKILL_MD = "# cpa-agents \u2014 Concurrent Process Algebra\n\nUse process algebra primitives to orchestrate agent workflows in OpenClaw.\nThis skill is useful for parallel execution, branch-fix loops, fan-out\ncomparison, and inspecting workflow state.\n\n## Install\n\n### 1) Install library\n```bash\nnpm install cpa-agents\n```\n\n### 2) Create the skill entrypoint\n```ts\nimport { createOpenClawSkill } from \"cpa-agents/adapters/openclaw\";\n\nexport default createOpenClawSkill();\n```\n\n### 3) Ensure OpenClaw can execute skills\n- OpenClaw Gateway must be running.\n- Your skill runtime must allow async tool execution.\n- Keep this package at version `0.1.0` or newer.\n\n## Commands\n\n### cpa:parallel\nRun independent tasks concurrently.\n\nInput:\n```json\n{ \"tasks\": [\"task one\", \"task two\"], \"timeout\": 300000 }\n```\n\n### cpa:branch-fix\nRun task, detect errors, branch into a fix subprocess, then continue.\n\nInput:\n```json\n{ \"task\": \"implement feature with checks\", \"timeout\": 300000 }\n```\n\n### cpa:fan-out\nRun same task across multiple models and return merged results.\n\nInput:\n```json\n{ \"task\": \"draft API design\", \"models\": [\"model-a\", \"model-b\"], \"timeout\": 300000 }\n```\n\n### cpa:status\nGet current process tree/status for the current session.\n\nInput:\n```json\n{}\n```\n\n## Recommended usage prompts\n\n- \"Run in parallel: analyze bug, propose fix, generate tests\"\n- \"Branch-fix this refactor until no type errors remain\"\n- \"Fan-out this architecture prompt across 2 models and compare\"\n- \"Show cpa status\"\n\n## Troubleshooting\n\n- **Gateway not connected**\n - Start OpenClaw Gateway and retry.\n- **Unknown command**\n - Use one of: `parallel`, `branch-fix`, `fan-out`, `status`.\n- **Timeout errors**\n - Increase `timeout` in command args.\n- **No session events**\n - Confirm session context has `appendEvent` enabled.\n";
|
|
10
10
|
export declare function openclawTool<TInput, TOutput>(opts: {
|
|
11
11
|
name: string;
|
|
12
12
|
tool: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"openclaw.d.ts","sourceRoot":"","sources":["../../src/adapters/openclaw.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EAGL,KAAK,UAAU,EACf,KAAK,WAAW,EAGjB,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,KAAK,SAAS,EAAwB,MAAM,aAAa,CAAC;AACnE,OAAO,EAAa,KAAK,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAIlE,eAAO,MAAM,QAAQ,
|
|
1
|
+
{"version":3,"file":"openclaw.d.ts","sourceRoot":"","sources":["../../src/adapters/openclaw.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EAGL,KAAK,UAAU,EACf,KAAK,WAAW,EAGjB,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,KAAK,SAAS,EAAwB,MAAM,aAAa,CAAC;AACnE,OAAO,EAAa,KAAK,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAIlE,eAAO,MAAM,QAAQ,i3DA4EpB,CAAC;AAIF,wBAAgB,YAAY,CAAC,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE;IAClD,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACtD,WAAW,EAAE,CAAC,GAAG,EAAE,OAAO,KAAK,OAAO,CAAC;CACxC,GAAG,SAAS,CAAC,MAAM,EAAE,OAAO,CAAC,CAU7B;AAED,wBAAgB,cAAc,CAAC,IAAI,EAAE;IACnC,IAAI,EAAE,MAAM,CAAC;IACb,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB,GAAG;IACF,UAAU,EAAE,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACtC,WAAW,EAAE,SAAS,CAAC;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,EAAE,IAAI,CAAC,CAAC;CAC9D,CAkBA;AAID,UAAU,eAAe;IACvB,OAAO,CAAC,EAAE;QACR,EAAE,EAAE,MAAM,CAAC;QACX,WAAW,CAAC,EAAE,CAAC,KAAK,EAAE,UAAU,KAAK,IAAI,CAAC;KAC3C,CAAC;IACF,KAAK,EAAE;QACL,GAAG,EAAE,CACH,IAAI,EAAE,MAAM,EACZ,IAAI,CAAC,EAAE;YAAE,MAAM,CAAC,EAAE,WAAW,CAAC;YAAC,KAAK,CAAC,EAAE,MAAM,CAAA;SAAE,KAC5C,OAAO,CAAC;YAAE,MAAM,EAAE,MAAM,CAAC;YAAC,MAAM,CAAC,EAAE,MAAM,EAAE,CAAA;SAAE,CAAC,CAAC;KACrD,CAAC;CACH;AAED,wBAAgB,mBAAmB;;;;2BASpB,MAAM,QACT,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,eAChB,eAAe,GAC3B,OAAO,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC;EAkHvC;AAID,wBAAgB,qBAAqB,CACnC,KAAK,EAAE,WAAW,EAAE,EACpB,KAAK,SAAI,GACR,MAAM,CAsCR"}
|
|
@@ -9,25 +9,80 @@ import { Scheduler } from "../scheduler.js";
|
|
|
9
9
|
// ─── SKILL.md content ───────────────────────────────────────────
|
|
10
10
|
export const SKILL_MD = `# cpa-agents — Concurrent Process Algebra
|
|
11
11
|
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
12
|
+
Use process algebra primitives to orchestrate agent workflows in OpenClaw.
|
|
13
|
+
This skill is useful for parallel execution, branch-fix loops, fan-out
|
|
14
|
+
comparison, and inspecting workflow state.
|
|
15
|
+
|
|
16
|
+
## Install
|
|
17
|
+
|
|
18
|
+
### 1) Install library
|
|
19
|
+
\`\`\`bash
|
|
20
|
+
npm install cpa-agents
|
|
21
|
+
\`\`\`
|
|
22
|
+
|
|
23
|
+
### 2) Create the skill entrypoint
|
|
24
|
+
\`\`\`ts
|
|
25
|
+
import { createOpenClawSkill } from "cpa-agents/adapters/openclaw";
|
|
26
|
+
|
|
27
|
+
export default createOpenClawSkill();
|
|
28
|
+
\`\`\`
|
|
29
|
+
|
|
30
|
+
### 3) Ensure OpenClaw can execute skills
|
|
31
|
+
- OpenClaw Gateway must be running.
|
|
32
|
+
- Your skill runtime must allow async tool execution.
|
|
33
|
+
- Keep this package at version \`0.1.0\` or newer.
|
|
15
34
|
|
|
16
35
|
## Commands
|
|
17
36
|
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
37
|
+
### cpa:parallel
|
|
38
|
+
Run independent tasks concurrently.
|
|
39
|
+
|
|
40
|
+
Input:
|
|
41
|
+
\`\`\`json
|
|
42
|
+
{ "tasks": ["task one", "task two"], "timeout": 300000 }
|
|
43
|
+
\`\`\`
|
|
44
|
+
|
|
45
|
+
### cpa:branch-fix
|
|
46
|
+
Run task, detect errors, branch into a fix subprocess, then continue.
|
|
47
|
+
|
|
48
|
+
Input:
|
|
49
|
+
\`\`\`json
|
|
50
|
+
{ "task": "implement feature with checks", "timeout": 300000 }
|
|
51
|
+
\`\`\`
|
|
52
|
+
|
|
53
|
+
### cpa:fan-out
|
|
54
|
+
Run same task across multiple models and return merged results.
|
|
55
|
+
|
|
56
|
+
Input:
|
|
57
|
+
\`\`\`json
|
|
58
|
+
{ "task": "draft API design", "models": ["model-a", "model-b"], "timeout": 300000 }
|
|
59
|
+
\`\`\`
|
|
60
|
+
|
|
61
|
+
### cpa:status
|
|
62
|
+
Get current process tree/status for the current session.
|
|
63
|
+
|
|
64
|
+
Input:
|
|
65
|
+
\`\`\`json
|
|
66
|
+
{}
|
|
67
|
+
\`\`\`
|
|
68
|
+
|
|
69
|
+
## Recommended usage prompts
|
|
70
|
+
|
|
71
|
+
- "Run in parallel: analyze bug, propose fix, generate tests"
|
|
72
|
+
- "Branch-fix this refactor until no type errors remain"
|
|
73
|
+
- "Fan-out this architecture prompt across 2 models and compare"
|
|
74
|
+
- "Show cpa status"
|
|
23
75
|
|
|
24
|
-
##
|
|
76
|
+
## Troubleshooting
|
|
25
77
|
|
|
26
|
-
|
|
27
|
-
-
|
|
28
|
-
-
|
|
29
|
-
-
|
|
30
|
-
-
|
|
78
|
+
- **Gateway not connected**
|
|
79
|
+
- Start OpenClaw Gateway and retry.
|
|
80
|
+
- **Unknown command**
|
|
81
|
+
- Use one of: \`parallel\`, \`branch-fix\`, \`fan-out\`, \`status\`.
|
|
82
|
+
- **Timeout errors**
|
|
83
|
+
- Increase \`timeout\` in command args.
|
|
84
|
+
- **No session events**
|
|
85
|
+
- Confirm session context has \`appendEvent\` enabled.
|
|
31
86
|
`;
|
|
32
87
|
// ─── OpenClaw tool wrappers ─────────────────────────────────────
|
|
33
88
|
export function openclawTool(opts) {
|
|
@@ -59,7 +114,7 @@ export function createOpenClawSkill() {
|
|
|
59
114
|
const schedulers = new Map();
|
|
60
115
|
return {
|
|
61
116
|
name: "cpa-agents",
|
|
62
|
-
version: "0.
|
|
117
|
+
version: "0.2.0",
|
|
63
118
|
skillMd: SKILL_MD,
|
|
64
119
|
async handleCommand(command, args, openclawCtx) {
|
|
65
120
|
const scheduler = new Scheduler({
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"openclaw.js","sourceRoot":"","sources":["../../src/adapters/openclaw.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EAKL,GAAG,EACH,SAAS,GACV,MAAM,eAAe,CAAC;AACvB,OAAO,EAAkB,YAAY,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACnE,OAAO,EAAE,SAAS,EAAwB,MAAM,iBAAiB,CAAC;AAElE,mEAAmE;AAEnE,MAAM,CAAC,MAAM,QAAQ,GAAG
|
|
1
|
+
{"version":3,"file":"openclaw.js","sourceRoot":"","sources":["../../src/adapters/openclaw.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Fork Algebra layer for cpa-agents
|
|
3
|
+
*
|
|
4
|
+
* Fork algebras extend relation algebras with a fork operator that pairs
|
|
5
|
+
* two relations:
|
|
6
|
+
*
|
|
7
|
+
* R: A -> B, S: A -> C => R∇S: A -> BxC
|
|
8
|
+
*/
|
|
9
|
+
import { type Process } from "./process.js";
|
|
10
|
+
export type RelationFn<A, B> = (input: A) => Promise<B[]>;
|
|
11
|
+
export interface Relation<A, B> {
|
|
12
|
+
readonly name: string;
|
|
13
|
+
readonly fn: RelationFn<A, B>;
|
|
14
|
+
}
|
|
15
|
+
export declare function rel<A, B>(name: string, fn: RelationFn<A, B>): Relation<A, B>;
|
|
16
|
+
export declare function detRel<A, B>(name: string, fn: (input: A) => Promise<B>): Relation<A, B>;
|
|
17
|
+
export declare function compose<A, B, C>(r: Relation<A, B>, s: Relation<B, C>): Relation<A, C>;
|
|
18
|
+
export declare function fork<A, B, C>(r: Relation<A, B>, s: Relation<A, C>): Relation<A, [B, C]>;
|
|
19
|
+
export declare function forkN<A>(...relations: Relation<A, any>[]): Relation<A, any[]>;
|
|
20
|
+
export declare function converse<A, B>(r: Relation<A, B>, inverseFn: RelationFn<B, A>): Relation<B, A>;
|
|
21
|
+
export declare function meet<A, B>(r: Relation<A, B>, s: Relation<A, B>, eq?: (b1: B, b2: B) => boolean): Relation<A, B>;
|
|
22
|
+
export declare function join<A, B>(r: Relation<A, B>, s: Relation<A, B>, dedup?: (b1: B, b2: B) => boolean): Relation<A, B>;
|
|
23
|
+
export declare function identity<A>(name?: string): Relation<A, A>;
|
|
24
|
+
export declare function empty<A, B>(name?: string): Relation<A, B>;
|
|
25
|
+
export declare function proj1<B, C>(name?: string): Relation<[B, C], B>;
|
|
26
|
+
export declare function proj2<B, C>(name?: string): Relation<[B, C], C>;
|
|
27
|
+
export declare function domRestrict<A, B>(guard: Relation<A, A>, body: Relation<A, B>): Relation<A, B>;
|
|
28
|
+
export declare function ranRestrict<A, B>(body: Relation<A, B>, filter: Relation<B, any>): Relation<A, B>;
|
|
29
|
+
export declare function toProcess<A, B>(relation: Relation<A, B>, input: A, mode?: "first" | "all"): Process<B | B[]>;
|
|
30
|
+
export declare function forkToProcess<A, B, C>(r: Relation<A, B>, s: Relation<A, C>, input: A): Process<[B[], C[]]>;
|
|
31
|
+
export declare function verifyAxioms<A, B, C>(r: Relation<A, B>, s: Relation<A, C>, testInputs: A[], eqB?: (a: B, b: B) => boolean, eqC?: (a: C, b: C) => boolean): Promise<{
|
|
32
|
+
passed: boolean;
|
|
33
|
+
failures: string[];
|
|
34
|
+
}>;
|
|
35
|
+
//# sourceMappingURL=fork-algebra.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fork-algebra.d.ts","sourceRoot":"","sources":["../src/fork-algebra.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,201 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Fork Algebra layer for cpa-agents
|
|
3
|
+
*
|
|
4
|
+
* Fork algebras extend relation algebras with a fork operator that pairs
|
|
5
|
+
* two relations:
|
|
6
|
+
*
|
|
7
|
+
* R: A -> B, S: A -> C => R∇S: A -> BxC
|
|
8
|
+
*/
|
|
9
|
+
import { par } from "./process.js";
|
|
10
|
+
export function rel(name, fn) {
|
|
11
|
+
return { name, fn };
|
|
12
|
+
}
|
|
13
|
+
export function detRel(name, fn) {
|
|
14
|
+
return { name, fn: async (a) => [await fn(a)] };
|
|
15
|
+
}
|
|
16
|
+
export function compose(r, s) {
|
|
17
|
+
return {
|
|
18
|
+
name: `${r.name};${s.name}`,
|
|
19
|
+
fn: async (a) => {
|
|
20
|
+
const bs = await r.fn(a);
|
|
21
|
+
const results = [];
|
|
22
|
+
for (const b of bs) {
|
|
23
|
+
const cs = await s.fn(b);
|
|
24
|
+
results.push(...cs);
|
|
25
|
+
}
|
|
26
|
+
return results;
|
|
27
|
+
},
|
|
28
|
+
};
|
|
29
|
+
}
|
|
30
|
+
export function fork(r, s) {
|
|
31
|
+
return {
|
|
32
|
+
name: `${r.name}∇${s.name}`,
|
|
33
|
+
fn: async (a) => {
|
|
34
|
+
const [bs, cs] = await Promise.all([r.fn(a), s.fn(a)]);
|
|
35
|
+
const pairs = [];
|
|
36
|
+
for (const b of bs) {
|
|
37
|
+
for (const c of cs) {
|
|
38
|
+
pairs.push([b, c]);
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
return pairs;
|
|
42
|
+
},
|
|
43
|
+
};
|
|
44
|
+
}
|
|
45
|
+
export function forkN(...relations) {
|
|
46
|
+
return {
|
|
47
|
+
name: relations.map((r) => r.name).join("∇"),
|
|
48
|
+
fn: async (a) => {
|
|
49
|
+
const allResults = await Promise.all(relations.map((r) => r.fn(a)));
|
|
50
|
+
return cartesian(allResults);
|
|
51
|
+
},
|
|
52
|
+
};
|
|
53
|
+
}
|
|
54
|
+
export function converse(r, inverseFn) {
|
|
55
|
+
return {
|
|
56
|
+
name: `${r.name}⁻¹`,
|
|
57
|
+
fn: inverseFn,
|
|
58
|
+
};
|
|
59
|
+
}
|
|
60
|
+
export function meet(r, s, eq = (a, b) => a === b) {
|
|
61
|
+
return {
|
|
62
|
+
name: `${r.name}∩${s.name}`,
|
|
63
|
+
fn: async (a) => {
|
|
64
|
+
const [rResults, sResults] = await Promise.all([r.fn(a), s.fn(a)]);
|
|
65
|
+
return rResults.filter((rb) => sResults.some((sb) => eq(rb, sb)));
|
|
66
|
+
},
|
|
67
|
+
};
|
|
68
|
+
}
|
|
69
|
+
export function join(r, s, dedup) {
|
|
70
|
+
return {
|
|
71
|
+
name: `${r.name}∪${s.name}`,
|
|
72
|
+
fn: async (a) => {
|
|
73
|
+
const [rResults, sResults] = await Promise.all([r.fn(a), s.fn(a)]);
|
|
74
|
+
const combined = [...rResults, ...sResults];
|
|
75
|
+
if (!dedup)
|
|
76
|
+
return combined;
|
|
77
|
+
return combined.filter((b, i) => combined.findIndex((other) => dedup(b, other)) === i);
|
|
78
|
+
},
|
|
79
|
+
};
|
|
80
|
+
}
|
|
81
|
+
export function identity(name = "id") {
|
|
82
|
+
return { name, fn: async (a) => [a] };
|
|
83
|
+
}
|
|
84
|
+
export function empty(name = "∅") {
|
|
85
|
+
return { name, fn: async () => [] };
|
|
86
|
+
}
|
|
87
|
+
export function proj1(name = "π₁") {
|
|
88
|
+
return { name, fn: async ([b, _c]) => [b] };
|
|
89
|
+
}
|
|
90
|
+
export function proj2(name = "π₂") {
|
|
91
|
+
return { name, fn: async ([_b, c]) => [c] };
|
|
92
|
+
}
|
|
93
|
+
export function domRestrict(guard, body) {
|
|
94
|
+
return {
|
|
95
|
+
name: `${guard.name}◁${body.name}`,
|
|
96
|
+
fn: async (a) => {
|
|
97
|
+
const guardResult = await guard.fn(a);
|
|
98
|
+
if (guardResult.length === 0)
|
|
99
|
+
return [];
|
|
100
|
+
const results = [];
|
|
101
|
+
for (const ga of guardResult) {
|
|
102
|
+
results.push(...(await body.fn(ga)));
|
|
103
|
+
}
|
|
104
|
+
return results;
|
|
105
|
+
},
|
|
106
|
+
};
|
|
107
|
+
}
|
|
108
|
+
export function ranRestrict(body, filter) {
|
|
109
|
+
return {
|
|
110
|
+
name: `${body.name}▷${filter.name}`,
|
|
111
|
+
fn: async (a) => {
|
|
112
|
+
const bs = await body.fn(a);
|
|
113
|
+
const kept = [];
|
|
114
|
+
for (const b of bs) {
|
|
115
|
+
const filterResult = await filter.fn(b);
|
|
116
|
+
if (filterResult.length > 0)
|
|
117
|
+
kept.push(b);
|
|
118
|
+
}
|
|
119
|
+
return kept;
|
|
120
|
+
},
|
|
121
|
+
};
|
|
122
|
+
}
|
|
123
|
+
export function toProcess(relation, input, mode = "first") {
|
|
124
|
+
return async (ctx) => {
|
|
125
|
+
ctx.trace.emit({
|
|
126
|
+
type: "spawn",
|
|
127
|
+
runId: ctx.runId,
|
|
128
|
+
parentId: ctx.parentId,
|
|
129
|
+
name: `rel:${relation.name}`,
|
|
130
|
+
ts: Date.now(),
|
|
131
|
+
});
|
|
132
|
+
const results = await relation.fn(input);
|
|
133
|
+
ctx.trace.emit({
|
|
134
|
+
type: "done",
|
|
135
|
+
runId: ctx.runId,
|
|
136
|
+
ts: Date.now(),
|
|
137
|
+
});
|
|
138
|
+
if (mode === "first") {
|
|
139
|
+
if (results.length === 0) {
|
|
140
|
+
throw new Error(`Relation ${relation.name} produced no results`);
|
|
141
|
+
}
|
|
142
|
+
return results[0];
|
|
143
|
+
}
|
|
144
|
+
return results;
|
|
145
|
+
};
|
|
146
|
+
}
|
|
147
|
+
export function forkToProcess(r, s, input) {
|
|
148
|
+
return par(async (ctx) => {
|
|
149
|
+
ctx.trace.emit({
|
|
150
|
+
type: "spawn",
|
|
151
|
+
runId: ctx.runId,
|
|
152
|
+
parentId: ctx.parentId,
|
|
153
|
+
name: `fork-left:${r.name}`,
|
|
154
|
+
ts: Date.now(),
|
|
155
|
+
});
|
|
156
|
+
const result = await r.fn(input);
|
|
157
|
+
ctx.trace.emit({ type: "done", runId: ctx.runId, ts: Date.now() });
|
|
158
|
+
return result;
|
|
159
|
+
}, async (ctx) => {
|
|
160
|
+
ctx.trace.emit({
|
|
161
|
+
type: "spawn",
|
|
162
|
+
runId: ctx.runId,
|
|
163
|
+
parentId: ctx.parentId,
|
|
164
|
+
name: `fork-right:${s.name}`,
|
|
165
|
+
ts: Date.now(),
|
|
166
|
+
});
|
|
167
|
+
const result = await s.fn(input);
|
|
168
|
+
ctx.trace.emit({ type: "done", runId: ctx.runId, ts: Date.now() });
|
|
169
|
+
return result;
|
|
170
|
+
});
|
|
171
|
+
}
|
|
172
|
+
export async function verifyAxioms(r, s, testInputs, eqB = (a, b) => a === b, eqC = (a, b) => a === b) {
|
|
173
|
+
const failures = [];
|
|
174
|
+
for (const input of testInputs) {
|
|
175
|
+
const forked = fork(r, s);
|
|
176
|
+
const forkedResults = await forked.fn(input);
|
|
177
|
+
const rResults = await r.fn(input);
|
|
178
|
+
const sResults = await s.fn(input);
|
|
179
|
+
const proj1Results = forkedResults.map(([b, _c]) => b);
|
|
180
|
+
for (const p of proj1Results) {
|
|
181
|
+
if (!rResults.some((rb) => eqB(rb, p))) {
|
|
182
|
+
failures.push(`Fork-projection π₁ failed for input ${String(input)}: got ${String(p)} not in R`);
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
const proj2Results = forkedResults.map(([_b, c]) => c);
|
|
186
|
+
for (const p of proj2Results) {
|
|
187
|
+
if (!sResults.some((sc) => eqC(sc, p))) {
|
|
188
|
+
failures.push(`Fork-projection π₂ failed for input ${String(input)}: got ${String(p)} not in S`);
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
return { passed: failures.length === 0, failures };
|
|
193
|
+
}
|
|
194
|
+
function cartesian(arrays) {
|
|
195
|
+
if (arrays.length === 0)
|
|
196
|
+
return [[]];
|
|
197
|
+
const [first, ...rest] = arrays;
|
|
198
|
+
const restProduct = cartesian(rest);
|
|
199
|
+
return first.flatMap((x) => restProduct.map((r) => [x, ...r]));
|
|
200
|
+
}
|
|
201
|
+
//# sourceMappingURL=fork-algebra.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fork-algebra.js","sourceRoot":"","sources":["../src/fork-algebra.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -27,4 +27,6 @@ export { Channel, freshId, select, type ChannelId, type SelectCase } from "./cha
|
|
|
27
27
|
export { type Process, type ProcessContext, type TraceEvent, type SessionNode, TraceCollector, par, seq, choice, branchFix, restrict, replicate, supervisor, } from "./process.js";
|
|
28
28
|
export { type AgentCall, type CheckResult, agentProcess, codeThenFix, fanOut, pipeline, PipelineBuilder, handoff, } from "./agent.js";
|
|
29
29
|
export { Scheduler, type SchedulerOpts, type SchedulerResult } from "./scheduler.js";
|
|
30
|
+
export { type Relation, type RelationFn, rel, detRel, compose, fork, forkN, converse, meet, join, identity, empty, proj1, proj2, domRestrict, ranRestrict, toProcess, forkToProcess, verifyAxioms, } from "./fork-algebra.js";
|
|
31
|
+
export { type Result, type BackgroundHandle, type Invertible, attempt, unwrap, and, or, ifThenElse, pipe, pipeChain, bg, not, waitAll, andChain, orChain, subshell, invertible, runInvertible, saga, guard, guardValue, timeout, retryWithBackoff, } from "./operators.js";
|
|
30
32
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAGH,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,SAAS,EAAE,KAAK,UAAU,EAAE,MAAM,cAAc,CAAC;AAGzF,OAAO,EACL,KAAK,OAAO,EACZ,KAAK,cAAc,EACnB,KAAK,UAAU,EACf,KAAK,WAAW,EAChB,cAAc,EACd,GAAG,EACH,GAAG,EACH,MAAM,EACN,SAAS,EACT,QAAQ,EACR,SAAS,EACT,UAAU,GACX,MAAM,cAAc,CAAC;AAGtB,OAAO,EACL,KAAK,SAAS,EACd,KAAK,WAAW,EAChB,YAAY,EACZ,WAAW,EACX,MAAM,EACN,QAAQ,EACR,eAAe,EACf,OAAO,GACR,MAAM,YAAY,CAAC;AAGpB,OAAO,EAAE,SAAS,EAAE,KAAK,aAAa,EAAE,KAAK,eAAe,EAAE,MAAM,gBAAgB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAGH,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,SAAS,EAAE,KAAK,UAAU,EAAE,MAAM,cAAc,CAAC;AAGzF,OAAO,EACL,KAAK,OAAO,EACZ,KAAK,cAAc,EACnB,KAAK,UAAU,EACf,KAAK,WAAW,EAChB,cAAc,EACd,GAAG,EACH,GAAG,EACH,MAAM,EACN,SAAS,EACT,QAAQ,EACR,SAAS,EACT,UAAU,GACX,MAAM,cAAc,CAAC;AAGtB,OAAO,EACL,KAAK,SAAS,EACd,KAAK,WAAW,EAChB,YAAY,EACZ,WAAW,EACX,MAAM,EACN,QAAQ,EACR,eAAe,EACf,OAAO,GACR,MAAM,YAAY,CAAC;AAGpB,OAAO,EAAE,SAAS,EAAE,KAAK,aAAa,EAAE,KAAK,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAGrF,OAAO,EACL,KAAK,QAAQ,EACb,KAAK,UAAU,EACf,GAAG,EACH,MAAM,EACN,OAAO,EACP,IAAI,EACJ,KAAK,EACL,QAAQ,EACR,IAAI,EACJ,IAAI,EACJ,QAAQ,EACR,KAAK,EACL,KAAK,EACL,KAAK,EACL,WAAW,EACX,WAAW,EACX,SAAS,EACT,aAAa,EACb,YAAY,GACb,MAAM,mBAAmB,CAAC;AAG3B,OAAO,EACL,KAAK,MAAM,EACX,KAAK,gBAAgB,EACrB,KAAK,UAAU,EACf,OAAO,EACP,MAAM,EACN,GAAG,EACH,EAAE,EACF,UAAU,EACV,IAAI,EACJ,SAAS,EACT,EAAE,EACF,GAAG,EACH,OAAO,EACP,QAAQ,EACR,OAAO,EACP,QAAQ,EACR,UAAU,EACV,aAAa,EACb,IAAI,EACJ,KAAK,EACL,UAAU,EACV,OAAO,EACP,gBAAgB,GACjB,MAAM,gBAAgB,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -31,4 +31,8 @@ export { TraceCollector, par, seq, choice, branchFix, restrict, replicate, super
|
|
|
31
31
|
export { agentProcess, codeThenFix, fanOut, pipeline, PipelineBuilder, handoff, } from "./agent.js";
|
|
32
32
|
// Scheduler
|
|
33
33
|
export { Scheduler } from "./scheduler.js";
|
|
34
|
+
// Fork algebra (relational layer)
|
|
35
|
+
export { rel, detRel, compose, fork, forkN, converse, meet, join, identity, empty, proj1, proj2, domRestrict, ranRestrict, toProcess, forkToProcess, verifyAxioms, } from "./fork-algebra.js";
|
|
36
|
+
// Operators (bash-style control flow + inverse/undo)
|
|
37
|
+
export { attempt, unwrap, and, or, ifThenElse, pipe, pipeChain, bg, not, waitAll, andChain, orChain, subshell, invertible, runInvertible, saga, guard, guardValue, timeout, retryWithBackoff, } from "./operators.js";
|
|
34
38
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAEH,kBAAkB;AAClB,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAmC,MAAM,cAAc,CAAC;AAEzF,kBAAkB;AAClB,OAAO,EAKL,cAAc,EACd,GAAG,EACH,GAAG,EACH,MAAM,EACN,SAAS,EACT,QAAQ,EACR,SAAS,EACT,UAAU,GACX,MAAM,cAAc,CAAC;AAEtB,iBAAiB;AACjB,OAAO,EAGL,YAAY,EACZ,WAAW,EACX,MAAM,EACN,QAAQ,EACR,eAAe,EACf,OAAO,GACR,MAAM,YAAY,CAAC;AAEpB,YAAY;AACZ,OAAO,EAAE,SAAS,EAA4C,MAAM,gBAAgB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAEH,kBAAkB;AAClB,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAmC,MAAM,cAAc,CAAC;AAEzF,kBAAkB;AAClB,OAAO,EAKL,cAAc,EACd,GAAG,EACH,GAAG,EACH,MAAM,EACN,SAAS,EACT,QAAQ,EACR,SAAS,EACT,UAAU,GACX,MAAM,cAAc,CAAC;AAEtB,iBAAiB;AACjB,OAAO,EAGL,YAAY,EACZ,WAAW,EACX,MAAM,EACN,QAAQ,EACR,eAAe,EACf,OAAO,GACR,MAAM,YAAY,CAAC;AAEpB,YAAY;AACZ,OAAO,EAAE,SAAS,EAA4C,MAAM,gBAAgB,CAAC;AAErF,kCAAkC;AAClC,OAAO,EAGL,GAAG,EACH,MAAM,EACN,OAAO,EACP,IAAI,EACJ,KAAK,EACL,QAAQ,EACR,IAAI,EACJ,IAAI,EACJ,QAAQ,EACR,KAAK,EACL,KAAK,EACL,KAAK,EACL,WAAW,EACX,WAAW,EACX,SAAS,EACT,aAAa,EACb,YAAY,GACb,MAAM,mBAAmB,CAAC;AAE3B,qDAAqD;AACrD,OAAO,EAIL,OAAO,EACP,MAAM,EACN,GAAG,EACH,EAAE,EACF,UAAU,EACV,IAAI,EACJ,SAAS,EACT,EAAE,EACF,GAAG,EACH,OAAO,EACP,QAAQ,EACR,OAAO,EACP,QAAQ,EACR,UAAU,EACV,aAAa,EACb,IAAI,EACJ,KAAK,EACL,UAAU,EACV,OAAO,EACP,gBAAgB,GACjB,MAAM,gBAAgB,CAAC"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import { type Process, type ProcessContext } from "./process.js";
|
|
2
|
+
export type Result<T> = {
|
|
3
|
+
ok: true;
|
|
4
|
+
value: T;
|
|
5
|
+
} | {
|
|
6
|
+
ok: false;
|
|
7
|
+
error: Error;
|
|
8
|
+
};
|
|
9
|
+
export declare function attempt<T>(process: Process<T>): Process<Result<T>>;
|
|
10
|
+
export declare function unwrap<T>(result: Result<T>): T;
|
|
11
|
+
export declare function and<A, B>(a: Process<A>, b: Process<B>): Process<Result<B>>;
|
|
12
|
+
export declare function or<T>(a: Process<T>, b: Process<T>): Process<Result<T>>;
|
|
13
|
+
export declare function ifThenElse<T>(condition: Process<unknown>, then: Process<T>, otherwise: Process<T>): Process<T>;
|
|
14
|
+
export declare function pipe<A, B>(a: Process<A>, b: (input: A) => Process<B>): Process<B>;
|
|
15
|
+
export declare function pipeChain<T>(first: Process<T>, ...rest: Array<(input: any) => Process<any>>): Process<any>;
|
|
16
|
+
export interface BackgroundHandle<T> {
|
|
17
|
+
wait: () => Promise<Result<T>>;
|
|
18
|
+
abort: () => void;
|
|
19
|
+
}
|
|
20
|
+
export declare function bg<T>(process: Process<T>): Process<BackgroundHandle<T>>;
|
|
21
|
+
export declare function not(process: Process<unknown>): Process<void>;
|
|
22
|
+
export declare function waitAll<T>(handles: BackgroundHandle<T>[]): Promise<Result<T>[]>;
|
|
23
|
+
export declare function andChain(...processes: Process<any>[]): Process<Result<any>>;
|
|
24
|
+
export declare function orChain<T>(...processes: Process<T>[]): Process<Result<T>>;
|
|
25
|
+
export declare function subshell<T>(name: string, process: Process<T>): Process<T>;
|
|
26
|
+
export interface Invertible<T> {
|
|
27
|
+
forward: Process<T>;
|
|
28
|
+
undo: (result: T) => Process<void>;
|
|
29
|
+
}
|
|
30
|
+
export declare function invertible<T>(forward: Process<T>, undo: (result: T) => Process<void>): Invertible<T>;
|
|
31
|
+
export declare function runInvertible<T>(inv: Invertible<T>): Process<T>;
|
|
32
|
+
export declare function saga(steps: Invertible<any>[]): Process<any[]>;
|
|
33
|
+
export declare function guard(name: string, predicate: (ctx: ProcessContext) => Promise<boolean>): Process<void>;
|
|
34
|
+
export declare function guardValue<T>(name: string, extract: (ctx: ProcessContext) => Promise<T | null | undefined>): Process<T>;
|
|
35
|
+
export declare function timeout<T>(ms: number, process: Process<T>): Process<T>;
|
|
36
|
+
export declare function retryWithBackoff<T>(opts: {
|
|
37
|
+
process: Process<T>;
|
|
38
|
+
maxAttempts: number;
|
|
39
|
+
initialDelayMs?: number;
|
|
40
|
+
maxDelayMs?: number;
|
|
41
|
+
backoffFactor?: number;
|
|
42
|
+
retryIf?: (err: Error) => boolean;
|
|
43
|
+
}): Process<T>;
|
|
44
|
+
//# sourceMappingURL=operators.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"operators.d.ts","sourceRoot":"","sources":["../src/operators.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,291 @@
|
|
|
1
|
+
import { freshId } from "./channel.js";
|
|
2
|
+
function ok(value) {
|
|
3
|
+
return { ok: true, value };
|
|
4
|
+
}
|
|
5
|
+
function fail(error) {
|
|
6
|
+
return { ok: false, error };
|
|
7
|
+
}
|
|
8
|
+
export function attempt(process) {
|
|
9
|
+
return async (ctx) => {
|
|
10
|
+
try {
|
|
11
|
+
const value = await process(ctx);
|
|
12
|
+
return ok(value);
|
|
13
|
+
}
|
|
14
|
+
catch (err) {
|
|
15
|
+
return fail(err instanceof Error ? err : new Error(String(err)));
|
|
16
|
+
}
|
|
17
|
+
};
|
|
18
|
+
}
|
|
19
|
+
export function unwrap(result) {
|
|
20
|
+
if (result.ok)
|
|
21
|
+
return result.value;
|
|
22
|
+
throw result.error;
|
|
23
|
+
}
|
|
24
|
+
export function and(a, b) {
|
|
25
|
+
return async (ctx) => {
|
|
26
|
+
const aResult = await attempt(a)(ctx);
|
|
27
|
+
if (!aResult.ok)
|
|
28
|
+
return fail(aResult.error);
|
|
29
|
+
return attempt(b)(ctx);
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
export function or(a, b) {
|
|
33
|
+
return async (ctx) => {
|
|
34
|
+
const aResult = await attempt(a)(ctx);
|
|
35
|
+
if (aResult.ok)
|
|
36
|
+
return aResult;
|
|
37
|
+
ctx.trace.emit({
|
|
38
|
+
type: "branch",
|
|
39
|
+
runId: ctx.runId,
|
|
40
|
+
chosen: "fallback",
|
|
41
|
+
alternatives: ["primary", "fallback"],
|
|
42
|
+
ts: Date.now(),
|
|
43
|
+
});
|
|
44
|
+
return attempt(b)(ctx);
|
|
45
|
+
};
|
|
46
|
+
}
|
|
47
|
+
export function ifThenElse(condition, then, otherwise) {
|
|
48
|
+
return async (ctx) => {
|
|
49
|
+
const condResult = await attempt(condition)(ctx);
|
|
50
|
+
ctx.trace.emit({
|
|
51
|
+
type: "branch",
|
|
52
|
+
runId: ctx.runId,
|
|
53
|
+
chosen: condResult.ok ? "then" : "else",
|
|
54
|
+
alternatives: ["then", "else"],
|
|
55
|
+
ts: Date.now(),
|
|
56
|
+
});
|
|
57
|
+
if (condResult.ok)
|
|
58
|
+
return then(ctx);
|
|
59
|
+
return otherwise(ctx);
|
|
60
|
+
};
|
|
61
|
+
}
|
|
62
|
+
export function pipe(a, b) {
|
|
63
|
+
return async (ctx) => {
|
|
64
|
+
const aResult = await a(ctx);
|
|
65
|
+
return b(aResult)(ctx);
|
|
66
|
+
};
|
|
67
|
+
}
|
|
68
|
+
export function pipeChain(first, ...rest) {
|
|
69
|
+
return async (ctx) => {
|
|
70
|
+
let result = await first(ctx);
|
|
71
|
+
for (const step of rest) {
|
|
72
|
+
result = await step(result)(ctx);
|
|
73
|
+
}
|
|
74
|
+
return result;
|
|
75
|
+
};
|
|
76
|
+
}
|
|
77
|
+
export function bg(process) {
|
|
78
|
+
return async (ctx) => {
|
|
79
|
+
const bgController = new AbortController();
|
|
80
|
+
const mergedSignal = anySignal(ctx.signal, bgController.signal);
|
|
81
|
+
const bgCtx = {
|
|
82
|
+
...ctx,
|
|
83
|
+
runId: freshId("bg"),
|
|
84
|
+
parentId: ctx.runId,
|
|
85
|
+
signal: mergedSignal,
|
|
86
|
+
};
|
|
87
|
+
ctx.trace.emit({
|
|
88
|
+
type: "spawn",
|
|
89
|
+
runId: bgCtx.runId,
|
|
90
|
+
parentId: ctx.runId,
|
|
91
|
+
name: "background",
|
|
92
|
+
ts: Date.now(),
|
|
93
|
+
});
|
|
94
|
+
const promise = attempt(process)(bgCtx).then((result) => {
|
|
95
|
+
ctx.trace.emit({
|
|
96
|
+
type: result.ok ? "done" : "error",
|
|
97
|
+
runId: bgCtx.runId,
|
|
98
|
+
...(result.ok ? {} : { error: result.error.message }),
|
|
99
|
+
ts: Date.now(),
|
|
100
|
+
});
|
|
101
|
+
return result;
|
|
102
|
+
});
|
|
103
|
+
return {
|
|
104
|
+
wait: () => promise,
|
|
105
|
+
abort: () => bgController.abort(),
|
|
106
|
+
};
|
|
107
|
+
};
|
|
108
|
+
}
|
|
109
|
+
export function not(process) {
|
|
110
|
+
return async (ctx) => {
|
|
111
|
+
const result = await attempt(process)(ctx);
|
|
112
|
+
if (result.ok) {
|
|
113
|
+
throw new Error("Process succeeded (not operator inverts this to failure)");
|
|
114
|
+
}
|
|
115
|
+
};
|
|
116
|
+
}
|
|
117
|
+
export async function waitAll(handles) {
|
|
118
|
+
return Promise.all(handles.map((h) => h.wait()));
|
|
119
|
+
}
|
|
120
|
+
export function andChain(...processes) {
|
|
121
|
+
return async (ctx) => {
|
|
122
|
+
let lastResult = ok(undefined);
|
|
123
|
+
for (const p of processes) {
|
|
124
|
+
lastResult = await attempt(p)(ctx);
|
|
125
|
+
if (!lastResult.ok)
|
|
126
|
+
return lastResult;
|
|
127
|
+
}
|
|
128
|
+
return lastResult;
|
|
129
|
+
};
|
|
130
|
+
}
|
|
131
|
+
export function orChain(...processes) {
|
|
132
|
+
return async (ctx) => {
|
|
133
|
+
let lastResult = fail(new Error("No processes in orChain"));
|
|
134
|
+
for (const p of processes) {
|
|
135
|
+
lastResult = await attempt(p)(ctx);
|
|
136
|
+
if (lastResult.ok)
|
|
137
|
+
return lastResult;
|
|
138
|
+
}
|
|
139
|
+
return lastResult;
|
|
140
|
+
};
|
|
141
|
+
}
|
|
142
|
+
export function subshell(name, process) {
|
|
143
|
+
return async (ctx) => {
|
|
144
|
+
const subId = freshId("sub");
|
|
145
|
+
const subCtx = {
|
|
146
|
+
...ctx,
|
|
147
|
+
runId: subId,
|
|
148
|
+
parentId: ctx.runId,
|
|
149
|
+
channels: new Map(ctx.channels),
|
|
150
|
+
};
|
|
151
|
+
ctx.trace.emit({
|
|
152
|
+
type: "spawn",
|
|
153
|
+
runId: subId,
|
|
154
|
+
parentId: ctx.runId,
|
|
155
|
+
name: `(${name})`,
|
|
156
|
+
ts: Date.now(),
|
|
157
|
+
});
|
|
158
|
+
const result = await process(subCtx);
|
|
159
|
+
ctx.trace.emit({
|
|
160
|
+
type: "done",
|
|
161
|
+
runId: subId,
|
|
162
|
+
ts: Date.now(),
|
|
163
|
+
});
|
|
164
|
+
return result;
|
|
165
|
+
};
|
|
166
|
+
}
|
|
167
|
+
export function invertible(forward, undo) {
|
|
168
|
+
return { forward, undo };
|
|
169
|
+
}
|
|
170
|
+
export function runInvertible(inv) {
|
|
171
|
+
return inv.forward;
|
|
172
|
+
}
|
|
173
|
+
export function saga(steps) {
|
|
174
|
+
return async (ctx) => {
|
|
175
|
+
const completed = [];
|
|
176
|
+
for (const step of steps) {
|
|
177
|
+
const result = await attempt(step.forward)(ctx);
|
|
178
|
+
if (!result.ok) {
|
|
179
|
+
ctx.trace.emit({
|
|
180
|
+
type: "fix_start",
|
|
181
|
+
runId: ctx.runId,
|
|
182
|
+
reason: `Saga rollback: ${result.error.message}`,
|
|
183
|
+
ts: Date.now(),
|
|
184
|
+
});
|
|
185
|
+
for (let i = completed.length - 1; i >= 0; i--) {
|
|
186
|
+
const comp = completed[i];
|
|
187
|
+
try {
|
|
188
|
+
await comp.undo(comp.result)(ctx);
|
|
189
|
+
}
|
|
190
|
+
catch (undoErr) {
|
|
191
|
+
ctx.trace.emit({
|
|
192
|
+
type: "error",
|
|
193
|
+
runId: ctx.runId,
|
|
194
|
+
error: `Compensation failed at step ${i}: ${undoErr}`,
|
|
195
|
+
ts: Date.now(),
|
|
196
|
+
});
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
ctx.trace.emit({
|
|
200
|
+
type: "fix_end",
|
|
201
|
+
runId: ctx.runId,
|
|
202
|
+
success: false,
|
|
203
|
+
ts: Date.now(),
|
|
204
|
+
});
|
|
205
|
+
throw result.error;
|
|
206
|
+
}
|
|
207
|
+
completed.push({ result: result.value, undo: step.undo });
|
|
208
|
+
}
|
|
209
|
+
return completed.map((c) => c.result);
|
|
210
|
+
};
|
|
211
|
+
}
|
|
212
|
+
export function guard(name, predicate) {
|
|
213
|
+
return async (ctx) => {
|
|
214
|
+
const passed = await predicate(ctx);
|
|
215
|
+
if (!passed)
|
|
216
|
+
throw new Error(`Guard failed: ${name}`);
|
|
217
|
+
};
|
|
218
|
+
}
|
|
219
|
+
export function guardValue(name, extract) {
|
|
220
|
+
return async (ctx) => {
|
|
221
|
+
const value = await extract(ctx);
|
|
222
|
+
if (value === null || value === undefined) {
|
|
223
|
+
throw new Error(`Guard failed (no value): ${name}`);
|
|
224
|
+
}
|
|
225
|
+
return value;
|
|
226
|
+
};
|
|
227
|
+
}
|
|
228
|
+
export function timeout(ms, process) {
|
|
229
|
+
return async (ctx) => Promise.race([
|
|
230
|
+
process(ctx),
|
|
231
|
+
new Promise((_, reject) => setTimeout(() => reject(new Error(`Timeout after ${ms}ms`)), ms)),
|
|
232
|
+
]);
|
|
233
|
+
}
|
|
234
|
+
export function retryWithBackoff(opts) {
|
|
235
|
+
const { process, maxAttempts, initialDelayMs = 100, maxDelayMs = 30000, backoffFactor = 2, retryIf, } = opts;
|
|
236
|
+
return async (ctx) => {
|
|
237
|
+
let delay = initialDelayMs;
|
|
238
|
+
let lastError;
|
|
239
|
+
for (let attempt = 0; attempt < maxAttempts; attempt++) {
|
|
240
|
+
if (ctx.signal.aborted)
|
|
241
|
+
throw new Error("Aborted");
|
|
242
|
+
const result = await attemptFn(process)(ctx);
|
|
243
|
+
if (result.ok)
|
|
244
|
+
return result.value;
|
|
245
|
+
lastError = result.error;
|
|
246
|
+
if (retryIf && !retryIf(lastError))
|
|
247
|
+
throw lastError;
|
|
248
|
+
if (attempt < maxAttempts - 1) {
|
|
249
|
+
ctx.trace.emit({
|
|
250
|
+
type: "fix_start",
|
|
251
|
+
runId: ctx.runId,
|
|
252
|
+
reason: `Retry ${attempt + 1}/${maxAttempts}: ${lastError.message}`,
|
|
253
|
+
ts: Date.now(),
|
|
254
|
+
});
|
|
255
|
+
await new Promise((r) => setTimeout(r, delay));
|
|
256
|
+
delay = Math.min(delay * backoffFactor, maxDelayMs);
|
|
257
|
+
ctx.trace.emit({
|
|
258
|
+
type: "fix_end",
|
|
259
|
+
runId: ctx.runId,
|
|
260
|
+
success: false,
|
|
261
|
+
ts: Date.now(),
|
|
262
|
+
});
|
|
263
|
+
}
|
|
264
|
+
}
|
|
265
|
+
throw lastError;
|
|
266
|
+
};
|
|
267
|
+
}
|
|
268
|
+
function attemptFn(process) {
|
|
269
|
+
return async (ctx) => {
|
|
270
|
+
try {
|
|
271
|
+
return ok(await process(ctx));
|
|
272
|
+
}
|
|
273
|
+
catch (err) {
|
|
274
|
+
return fail(err instanceof Error ? err : new Error(String(err)));
|
|
275
|
+
}
|
|
276
|
+
};
|
|
277
|
+
}
|
|
278
|
+
function anySignal(...signals) {
|
|
279
|
+
const controller = new AbortController();
|
|
280
|
+
for (const signal of signals) {
|
|
281
|
+
if (signal.aborted) {
|
|
282
|
+
controller.abort(signal.reason);
|
|
283
|
+
return controller.signal;
|
|
284
|
+
}
|
|
285
|
+
signal.addEventListener("abort", () => controller.abort(signal.reason), {
|
|
286
|
+
once: true,
|
|
287
|
+
});
|
|
288
|
+
}
|
|
289
|
+
return controller.signal;
|
|
290
|
+
}
|
|
291
|
+
//# sourceMappingURL=operators.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"operators.js","sourceRoot":"","sources":["../src/operators.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAOvC,SAAS,EAAE,CAAI,KAAQ;IACrB,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;AAC7B,CAAC;AAED,SAAS,IAAI,CAAI,KAAY;IAC3B,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC;AAC9B,CAAC;AAED,MAAM,UAAU,OAAO,CAAI,OAAmB;IAC5C,OAAO,KAAK,EAAE,GAAG,EAAE,EAAE;QACnB,IAAI,CAAC;YACH,MAAM,KAAK,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,CAAC;YACjC,OAAO,EAAE,CAAC,KAAK,CAAC,CAAC;QACnB,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,IAAI,CAAC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QACnE,CAAC;IACH,CAAC,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,MAAM,CAAI,MAAiB;IACzC,IAAI,MAAM,CAAC,EAAE;QAAE,OAAO,MAAM,CAAC,KAAK,CAAC;IACnC,MAAM,MAAM,CAAC,KAAK,CAAC;AACrB,CAAC;AAED,MAAM,UAAU,GAAG,CAAO,CAAa,EAAE,CAAa;IACpD,OAAO,KAAK,EAAE,GAAG,EAAE,EAAE;QACnB,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;QACtC,IAAI,CAAC,OAAO,CAAC,EAAE;YAAE,OAAO,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QAC5C,OAAO,OAAO,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;IACzB,CAAC,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,EAAE,CAAI,CAAa,EAAE,CAAa;IAChD,OAAO,KAAK,EAAE,GAAG,EAAE,EAAE;QACnB,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;QACtC,IAAI,OAAO,CAAC,EAAE;YAAE,OAAO,OAAO,CAAC;QAE/B,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC;YACb,IAAI,EAAE,QAAQ;YACd,KAAK,EAAE,GAAG,CAAC,KAAK;YAChB,MAAM,EAAE,UAAU;YAClB,YAAY,EAAE,CAAC,SAAS,EAAE,UAAU,CAAC;YACrC,EAAE,EAAE,IAAI,CAAC,GAAG,EAAE;SACf,CAAC,CAAC;QAEH,OAAO,OAAO,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;IACzB,CAAC,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,UAAU,CACxB,SAA2B,EAC3B,IAAgB,EAChB,SAAqB;IAErB,OAAO,KAAK,EAAE,GAAG,EAAE,EAAE;QACnB,MAAM,UAAU,GAAG,MAAM,OAAO,CAAC,SAAS,CAAC,CAAC,GAAG,CAAC,CAAC;QAEjD,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC;YACb,IAAI,EAAE,QAAQ;YACd,KAAK,EAAE,GAAG,CAAC,KAAK;YAChB,MAAM,EAAE,UAAU,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM;YACvC,YAAY,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC;YAC9B,EAAE,EAAE,IAAI,CAAC,GAAG,EAAE;SACf,CAAC,CAAC;QAEH,IAAI,UAAU,CAAC,EAAE;YAAE,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC;QACpC,OAAO,SAAS,CAAC,GAAG,CAAC,CAAC;IACxB,CAAC,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,IAAI,CAAO,CAAa,EAAE,CAA2B;IACnE,OAAO,KAAK,EAAE,GAAG,EAAE,EAAE;QACnB,MAAM,OAAO,GAAG,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC;QAC7B,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC;IACzB,CAAC,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,SAAS,CACvB,KAAiB,EACjB,GAAG,IAAyC;IAE5C,OAAO,KAAK,EAAE,GAAG,EAAE,EAAE;QACnB,IAAI,MAAM,GAAQ,MAAM,KAAK,CAAC,GAAG,CAAC,CAAC;QACnC,KAAK,MAAM,IAAI,IAAI,IAAI,EAAE,CAAC;YACxB,MAAM,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC;QACnC,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC,CAAC;AACJ,CAAC;AAOD,MAAM,UAAU,EAAE,CAAI,OAAmB;IACvC,OAAO,KAAK,EAAE,GAAG,EAAE,EAAE;QACnB,MAAM,YAAY,GAAG,IAAI,eAAe,EAAE,CAAC;QAC3C,MAAM,YAAY,GAAG,SAAS,CAAC,GAAG,CAAC,MAAM,EAAE,YAAY,CAAC,MAAM,CAAC,CAAC;QAEhE,MAAM,KAAK,GAAmB;YAC5B,GAAG,GAAG;YACN,KAAK,EAAE,OAAO,CAAC,IAAI,CAAC;YACpB,QAAQ,EAAE,GAAG,CAAC,KAAK;YACnB,MAAM,EAAE,YAAY;SACrB,CAAC;QAEF,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC;YACb,IAAI,EAAE,OAAO;YACb,KAAK,EAAE,KAAK,CAAC,KAAK;YAClB,QAAQ,EAAE,GAAG,CAAC,KAAK;YACnB,IAAI,EAAE,YAAY;YAClB,EAAE,EAAE,IAAI,CAAC,GAAG,EAAE;SACf,CAAC,CAAC;QAEH,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE;YACtD,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC;gBACb,IAAI,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO;gBAClC,KAAK,EAAE,KAAK,CAAC,KAAK;gBAClB,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC;gBACrD,EAAE,EAAE,IAAI,CAAC,GAAG,EAAE;aACR,CAAC,CAAC;YACV,OAAO,MAAM,CAAC;QAChB,CAAC,CAAC,CAAC;QAEH,OAAO;YACL,IAAI,EAAE,GAAG,EAAE,CAAC,OAAO;YACnB,KAAK,EAAE,GAAG,EAAE,CAAC,YAAY,CAAC,KAAK,EAAE;SAClC,CAAC;IACJ,CAAC,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,GAAG,CAAC,OAAyB;IAC3C,OAAO,KAAK,EAAE,GAAG,EAAE,EAAE;QACnB,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC;QAC3C,IAAI,MAAM,CAAC,EAAE,EAAE,CAAC;YACd,MAAM,IAAI,KAAK,CAAC,0DAA0D,CAAC,CAAC;QAC9E,CAAC;IACH,CAAC,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,OAAO,CAC3B,OAA8B;IAE9B,OAAO,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;AACnD,CAAC;AAED,MAAM,UAAU,QAAQ,CAAC,GAAG,SAAyB;IACnD,OAAO,KAAK,EAAE,GAAG,EAAE,EAAE;QACnB,IAAI,UAAU,GAAgB,EAAE,CAAC,SAAS,CAAC,CAAC;QAC5C,KAAK,MAAM,CAAC,IAAI,SAAS,EAAE,CAAC;YAC1B,UAAU,GAAG,MAAM,OAAO,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;YACnC,IAAI,CAAC,UAAU,CAAC,EAAE;gBAAE,OAAO,UAAU,CAAC;QACxC,CAAC;QACD,OAAO,UAAU,CAAC;IACpB,CAAC,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,OAAO,CAAI,GAAG,SAAuB;IACnD,OAAO,KAAK,EAAE,GAAG,EAAE,EAAE;QACnB,IAAI,UAAU,GAAc,IAAI,CAAC,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC,CAAC;QACvE,KAAK,MAAM,CAAC,IAAI,SAAS,EAAE,CAAC;YAC1B,UAAU,GAAG,MAAM,OAAO,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;YACnC,IAAI,UAAU,CAAC,EAAE;gBAAE,OAAO,UAAU,CAAC;QACvC,CAAC;QACD,OAAO,UAAU,CAAC;IACpB,CAAC,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,QAAQ,CAAI,IAAY,EAAE,OAAmB;IAC3D,OAAO,KAAK,EAAE,GAAG,EAAE,EAAE;QACnB,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC;QAC7B,MAAM,MAAM,GAAmB;YAC7B,GAAG,GAAG;YACN,KAAK,EAAE,KAAK;YACZ,QAAQ,EAAE,GAAG,CAAC,KAAK;YACnB,QAAQ,EAAE,IAAI,GAAG,CAAC,GAAG,CAAC,QAAQ,CAAC;SAChC,CAAC;QAEF,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC;YACb,IAAI,EAAE,OAAO;YACb,KAAK,EAAE,KAAK;YACZ,QAAQ,EAAE,GAAG,CAAC,KAAK;YACnB,IAAI,EAAE,IAAI,IAAI,GAAG;YACjB,EAAE,EAAE,IAAI,CAAC,GAAG,EAAE;SACf,CAAC,CAAC;QAEH,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,MAAM,CAAC,CAAC;QAErC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC;YACb,IAAI,EAAE,MAAM;YACZ,KAAK,EAAE,KAAK;YACZ,EAAE,EAAE,IAAI,CAAC,GAAG,EAAE;SACf,CAAC,CAAC;QAEH,OAAO,MAAM,CAAC;IAChB,CAAC,CAAC;AACJ,CAAC;AAOD,MAAM,UAAU,UAAU,CACxB,OAAmB,EACnB,IAAkC;IAElC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;AAC3B,CAAC;AAED,MAAM,UAAU,aAAa,CAAI,GAAkB;IACjD,OAAO,GAAG,CAAC,OAAO,CAAC;AACrB,CAAC;AAED,MAAM,UAAU,IAAI,CAAC,KAAwB;IAC3C,OAAO,KAAK,EAAE,GAAG,EAAE,EAAE;QACnB,MAAM,SAAS,GAAiE,EAAE,CAAC;QAEnF,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC;YAEhD,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC;gBACf,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC;oBACb,IAAI,EAAE,WAAW;oBACjB,KAAK,EAAE,GAAG,CAAC,KAAK;oBAChB,MAAM,EAAE,kBAAkB,MAAM,CAAC,KAAK,CAAC,OAAO,EAAE;oBAChD,EAAE,EAAE,IAAI,CAAC,GAAG,EAAE;iBACf,CAAC,CAAC;gBAEH,KAAK,IAAI,CAAC,GAAG,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;oBAC/C,MAAM,IAAI,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;oBAC1B,IAAI,CAAC;wBACH,MAAM,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC;oBACpC,CAAC;oBAAC,OAAO,OAAO,EAAE,CAAC;wBACjB,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC;4BACb,IAAI,EAAE,OAAO;4BACb,KAAK,EAAE,GAAG,CAAC,KAAK;4BAChB,KAAK,EAAE,+BAA+B,CAAC,KAAK,OAAO,EAAE;4BACrD,EAAE,EAAE,IAAI,CAAC,GAAG,EAAE;yBACf,CAAC,CAAC;oBACL,CAAC;gBACH,CAAC;gBAED,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC;oBACb,IAAI,EAAE,SAAS;oBACf,KAAK,EAAE,GAAG,CAAC,KAAK;oBAChB,OAAO,EAAE,KAAK;oBACd,EAAE,EAAE,IAAI,CAAC,GAAG,EAAE;iBACf,CAAC,CAAC;gBAEH,MAAM,MAAM,CAAC,KAAK,CAAC;YACrB,CAAC;YAED,SAAS,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,KAAK,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;QAC5D,CAAC;QAED,OAAO,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;IACxC,CAAC,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,KAAK,CACnB,IAAY,EACZ,SAAoD;IAEpD,OAAO,KAAK,EAAE,GAAG,EAAE,EAAE;QACnB,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,GAAG,CAAC,CAAC;QACpC,IAAI,CAAC,MAAM;YAAE,MAAM,IAAI,KAAK,CAAC,iBAAiB,IAAI,EAAE,CAAC,CAAC;IACxD,CAAC,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,UAAU,CACxB,IAAY,EACZ,OAA+D;IAE/D,OAAO,KAAK,EAAE,GAAG,EAAE,EAAE;QACnB,MAAM,KAAK,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,CAAC;QACjC,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;YAC1C,MAAM,IAAI,KAAK,CAAC,4BAA4B,IAAI,EAAE,CAAC,CAAC;QACtD,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,OAAO,CAAI,EAAU,EAAE,OAAmB;IACxD,OAAO,KAAK,EAAE,GAAG,EAAE,EAAE,CACnB,OAAO,CAAC,IAAI,CAAC;QACX,OAAO,CAAC,GAAG,CAAC;QACZ,IAAI,OAAO,CAAQ,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,CAC/B,UAAU,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,iBAAiB,EAAE,IAAI,CAAC,CAAC,EAAE,EAAE,CAAC,CACjE;KACF,CAAC,CAAC;AACP,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAI,IAOnC;IACC,MAAM,EACJ,OAAO,EACP,WAAW,EACX,cAAc,GAAG,GAAG,EACpB,UAAU,GAAG,KAAK,EAClB,aAAa,GAAG,CAAC,EACjB,OAAO,GACR,GAAG,IAAI,CAAC;IAET,OAAO,KAAK,EAAE,GAAG,EAAE,EAAE;QACnB,IAAI,KAAK,GAAG,cAAc,CAAC;QAC3B,IAAI,SAA4B,CAAC;QAEjC,KAAK,IAAI,OAAO,GAAG,CAAC,EAAE,OAAO,GAAG,WAAW,EAAE,OAAO,EAAE,EAAE,CAAC;YACvD,IAAI,GAAG,CAAC,MAAM,CAAC,OAAO;gBAAE,MAAM,IAAI,KAAK,CAAC,SAAS,CAAC,CAAC;YAEnD,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC;YAC7C,IAAI,MAAM,CAAC,EAAE;gBAAE,OAAO,MAAM,CAAC,KAAK,CAAC;YACnC,SAAS,GAAG,MAAM,CAAC,KAAK,CAAC;YAEzB,IAAI,OAAO,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC;gBAAE,MAAM,SAAS,CAAC;YAEpD,IAAI,OAAO,GAAG,WAAW,GAAG,CAAC,EAAE,CAAC;gBAC9B,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC;oBACb,IAAI,EAAE,WAAW;oBACjB,KAAK,EAAE,GAAG,CAAC,KAAK;oBAChB,MAAM,EAAE,SAAS,OAAO,GAAG,CAAC,IAAI,WAAW,KAAK,SAAS,CAAC,OAAO,EAAE;oBACnE,EAAE,EAAE,IAAI,CAAC,GAAG,EAAE;iBACf,CAAC,CAAC;gBAEH,MAAM,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC;gBAC/C,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,GAAG,aAAa,EAAE,UAAU,CAAC,CAAC;gBAEpD,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC;oBACb,IAAI,EAAE,SAAS;oBACf,KAAK,EAAE,GAAG,CAAC,KAAK;oBAChB,OAAO,EAAE,KAAK;oBACd,EAAE,EAAE,IAAI,CAAC,GAAG,EAAE;iBACf,CAAC,CAAC;YACL,CAAC;QACH,CAAC;QAED,MAAM,SAAU,CAAC;IACnB,CAAC,CAAC;AACJ,CAAC;AAED,SAAS,SAAS,CAAI,OAAmB;IACvC,OAAO,KAAK,EAAE,GAAG,EAAE,EAAE;QACnB,IAAI,CAAC;YACH,OAAO,EAAE,CAAC,MAAM,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC;QAChC,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,IAAI,CAAC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QACnE,CAAC;IACH,CAAC,CAAC;AACJ,CAAC;AAED,SAAS,SAAS,CAAC,GAAG,OAAsB;IAC1C,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAC;IACzC,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;QAC7B,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;YACnB,UAAU,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;YAChC,OAAO,UAAU,CAAC,MAAM,CAAC;QAC3B,CAAC;QACD,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,UAAU,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE;YACtE,IAAI,EAAE,IAAI;SACX,CAAC,CAAC;IACL,CAAC;IACD,OAAO,UAAU,CAAC,MAAM,CAAC;AAC3B,CAAC"}
|