cpa-agents 0.1.0 → 0.2.2
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/README.md +127 -70
- package/dist/adapters/openclaw.d.ts +1 -1
- package/dist/adapters/openclaw.d.ts.map +1 -1
- package/dist/adapters/openclaw.js +140 -15
- package/dist/adapters/openclaw.js.map +1 -1
- package/dist/adapters/pi-harness.d.ts +12 -0
- package/dist/adapters/pi-harness.d.ts.map +1 -1
- package/dist/adapters/pi-harness.js +78 -1
- package/dist/adapters/pi-harness.js.map +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
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pi-harness.js","sourceRoot":"","sources":["../../src/adapters/pi-harness.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"pi-harness.js","sourceRoot":"","sources":["../../src/adapters/pi-harness.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
|