cpa-agents 0.2.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 +72 -2
- 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/package.json +1 -1
package/README.md
CHANGED
|
@@ -1,14 +1,44 @@
|
|
|
1
1
|
# cpa-agents
|
|
2
2
|
|
|
3
|
-
Concurrent Process Algebra for AI Agents.
|
|
3
|
+
Concurrent Process Algebra for AI Agents.
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
`cpa-agents` combines three layers:
|
|
6
|
+
- process algebra (pi-calculus primitives for concurrency/communication)
|
|
7
|
+
- fork algebra (relational composition and paired derivations)
|
|
8
|
+
- operator algebra (practical control flow: rollback, retries, guards, timeout)
|
|
9
|
+
|
|
10
|
+
Designed for [Pi Harness](https://github.com/badlogic/pi-mono), [OpenClaw](https://github.com/openclaw/openclaw), and standalone TypeScript workflows.
|
|
11
|
+
|
|
12
|
+
## Install
|
|
13
|
+
|
|
14
|
+
```bash
|
|
15
|
+
npm install cpa-agents
|
|
16
|
+
```
|
|
17
|
+
|
|
18
|
+
## Quick start
|
|
19
|
+
|
|
20
|
+
```typescript
|
|
21
|
+
import { Scheduler, par, agentProcess } from "cpa-agents";
|
|
22
|
+
|
|
23
|
+
const scheduler = new Scheduler({ timeout: 60_000 });
|
|
6
24
|
|
|
7
|
-
|
|
25
|
+
const research = par(
|
|
26
|
+
agentProcess(webSearchAgent, "latest React patterns"),
|
|
27
|
+
agentProcess(codeSearchAgent, "auth middleware examples"),
|
|
28
|
+
);
|
|
29
|
+
|
|
30
|
+
const result = await scheduler.run("research", research);
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
## Why
|
|
8
34
|
|
|
9
|
-
|
|
35
|
+
Most agent harnesses implement orchestration with ad-hoc control flow and minimal runtime semantics. This library provides formal, typed primitives for:
|
|
36
|
+
- concurrent task execution
|
|
37
|
+
- explicit synchronization and communication
|
|
38
|
+
- fix-and-resume branching
|
|
39
|
+
- provenance and rollback-aware workflows
|
|
10
40
|
|
|
11
|
-
##
|
|
41
|
+
## Layer 1: Process algebra
|
|
12
42
|
|
|
13
43
|
| π-calculus | cpa-agents | What it does |
|
|
14
44
|
|---|---|---|
|
|
@@ -19,26 +49,28 @@ This library gives you that model. The primitives come from Robin Milner's π-ca
|
|
|
19
49
|
| `ν(x).P` | `restrict(name, body)` | Create a fresh scoped channel |
|
|
20
50
|
| `!P` | `replicate(trigger, handler)` | Spawn new P for each incoming message |
|
|
21
51
|
|
|
22
|
-
|
|
52
|
+
Core runtime exports:
|
|
53
|
+
- `Channel`, `select`
|
|
54
|
+
- `par`, `seq`, `choice`, `branchFix`, `restrict`, `replicate`, `supervisor`
|
|
55
|
+
- `Scheduler`
|
|
23
56
|
|
|
24
|
-
### Branch-fix-continue
|
|
57
|
+
### Branch-fix-continue
|
|
25
58
|
|
|
26
|
-
|
|
59
|
+
Pattern for "run -> detect error -> fix -> resume".
|
|
27
60
|
|
|
28
61
|
```typescript
|
|
29
|
-
import { branchFix, Scheduler } from
|
|
62
|
+
import { branchFix, Scheduler } from "cpa-agents";
|
|
30
63
|
|
|
31
64
|
const workflow = branchFix<string>({
|
|
32
|
-
name:
|
|
65
|
+
name: "implement-feature",
|
|
33
66
|
maxFixes: 3,
|
|
34
67
|
|
|
35
68
|
main: (requestFix) => async (ctx) => {
|
|
36
|
-
const code = await coder.invoke(
|
|
69
|
+
const code = await coder.invoke("add auth middleware", ctx.signal);
|
|
37
70
|
const check = await linter.invoke(code, ctx.signal);
|
|
38
71
|
|
|
39
72
|
if (!check.pass) {
|
|
40
|
-
|
|
41
|
-
await requestFix(check.errors.join('; '));
|
|
73
|
+
await requestFix(check.errors.join("; "));
|
|
42
74
|
}
|
|
43
75
|
|
|
44
76
|
return code;
|
|
@@ -50,96 +82,121 @@ const workflow = branchFix<string>({
|
|
|
50
82
|
});
|
|
51
83
|
|
|
52
84
|
const scheduler = new Scheduler({ timeout: 60_000 });
|
|
53
|
-
const result = await scheduler.run(
|
|
54
|
-
// result.sessionTree shows the full branch history
|
|
85
|
+
const result = await scheduler.run("feature", workflow);
|
|
55
86
|
```
|
|
56
87
|
|
|
57
|
-
|
|
88
|
+
## Layer 2: Fork algebra (relations)
|
|
89
|
+
|
|
90
|
+
Fork algebra models relation composition and paired derivations over the same input.
|
|
58
91
|
|
|
59
92
|
```typescript
|
|
60
|
-
import {
|
|
93
|
+
import { rel, fork, compose, meet, join, toProcess } from "cpa-agents";
|
|
61
94
|
|
|
62
|
-
const
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
);
|
|
95
|
+
const parse = rel("parse", async (input: string) => [input.trim()]);
|
|
96
|
+
const enrich = rel("enrich", async (input: string) => [`${input}:meta`]);
|
|
97
|
+
const validate = rel("validate", async (input: string) => [input.length > 0 ? "ok" : "bad"]);
|
|
98
|
+
|
|
99
|
+
const composed = compose(parse, enrich);
|
|
100
|
+
const paired = fork(enrich, validate);
|
|
67
101
|
|
|
68
|
-
const
|
|
102
|
+
const proc = toProcess(composed, "task payload", "all");
|
|
103
|
+
const run = await scheduler.run("fork-layer", proc);
|
|
69
104
|
```
|
|
70
105
|
|
|
71
|
-
|
|
106
|
+
Key exports:
|
|
107
|
+
- `rel`, `detRel`
|
|
108
|
+
- `compose`, `fork`, `forkN`
|
|
109
|
+
- `converse` (provenance mapping, not rollback)
|
|
110
|
+
- `meet`, `join`, `identity`, `empty`
|
|
111
|
+
- `proj1`, `proj2`, `domRestrict`, `ranRestrict`
|
|
112
|
+
- `toProcess`, `forkToProcess`, `verifyAxioms`
|
|
72
113
|
|
|
73
|
-
|
|
74
|
-
import { Channel, restrict, par } from 'cpa-agents';
|
|
75
|
-
|
|
76
|
-
const workflow = restrict<CodeReview, void>('review-ch', (ch) =>
|
|
77
|
-
par(
|
|
78
|
-
// Agent 1: write code, send for review
|
|
79
|
-
async (ctx) => {
|
|
80
|
-
const code = await coder.invoke(task, ctx.signal);
|
|
81
|
-
await ch.send({ code, file: 'auth.ts' });
|
|
82
|
-
},
|
|
83
|
-
// Agent 2: receive code, review it
|
|
84
|
-
async (ctx) => {
|
|
85
|
-
const review = await ch.receive();
|
|
86
|
-
await reviewer.invoke(review, ctx.signal);
|
|
87
|
-
},
|
|
88
|
-
)
|
|
89
|
-
);
|
|
90
|
-
```
|
|
114
|
+
## Layer 3: Operator algebra (control flow)
|
|
91
115
|
|
|
92
|
-
|
|
116
|
+
Operator layer provides shell-style and reliability-focused control flow.
|
|
93
117
|
|
|
94
118
|
```typescript
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
119
|
+
import {
|
|
120
|
+
and,
|
|
121
|
+
or,
|
|
122
|
+
pipe,
|
|
123
|
+
saga,
|
|
124
|
+
invertible,
|
|
125
|
+
retryWithBackoff,
|
|
126
|
+
timeout,
|
|
127
|
+
} from "cpa-agents";
|
|
128
|
+
|
|
129
|
+
const guardedDeploy = and(buildProcess, deployProcess); // A && B
|
|
130
|
+
const withFallback = or(primaryProcess, fallbackProcess); // A || B
|
|
131
|
+
const piped = pipe(fetchProcess, (data) => transformProcess(data)); // A | B
|
|
132
|
+
|
|
133
|
+
const transactional = saga([
|
|
134
|
+
invertible(createBranch, deleteBranch),
|
|
135
|
+
invertible(writeChanges, revertChanges),
|
|
136
|
+
invertible(runChecks, cleanupChecks),
|
|
137
|
+
]);
|
|
138
|
+
|
|
139
|
+
const resilient = retryWithBackoff({
|
|
140
|
+
process: timeout(30_000, transactional),
|
|
141
|
+
maxAttempts: 3,
|
|
142
|
+
});
|
|
103
143
|
```
|
|
104
144
|
|
|
105
|
-
|
|
145
|
+
Key exports:
|
|
146
|
+
- `attempt`, `unwrap`
|
|
147
|
+
- `and`, `or`, `ifThenElse`, `pipe`, `pipeChain`
|
|
148
|
+
- `bg`, `waitAll`, `not`, `andChain`, `orChain`, `subshell`
|
|
149
|
+
- `invertible`, `runInvertible`, `saga`
|
|
150
|
+
- `guard`, `guardValue`, `timeout`, `retryWithBackoff`
|
|
151
|
+
|
|
152
|
+
## OpenClaw integration
|
|
106
153
|
|
|
107
154
|
```typescript
|
|
108
155
|
// ~/.openclaw/skills/cpa-agents/index.ts
|
|
109
|
-
import { createOpenClawSkill } from
|
|
156
|
+
import { createOpenClawSkill } from "cpa-agents/adapters/openclaw";
|
|
110
157
|
export default createOpenClawSkill();
|
|
158
|
+
```
|
|
159
|
+
|
|
160
|
+
Supported commands:
|
|
161
|
+
- `parallel`
|
|
162
|
+
- `branch-fix`
|
|
163
|
+
- `fan-out`
|
|
164
|
+
- `status`
|
|
111
165
|
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
166
|
+
Skill authoring docs are in `skills/cpa-agents/SKILL.md`.
|
|
167
|
+
|
|
168
|
+
## Pi Harness integration
|
|
169
|
+
|
|
170
|
+
```typescript
|
|
171
|
+
// .pi/extensions/cpa.ts
|
|
172
|
+
import { createPiCpaExtension } from "cpa-agents/adapters/pi";
|
|
173
|
+
export default createPiCpaExtension();
|
|
115
174
|
```
|
|
116
175
|
|
|
117
|
-
## Session tree
|
|
176
|
+
## Session tree and trace
|
|
118
177
|
|
|
119
|
-
Every
|
|
178
|
+
Every scheduler run emits:
|
|
179
|
+
- `sessionTree` (hierarchical execution tree)
|
|
180
|
+
- `trace` (flat event list)
|
|
120
181
|
|
|
121
182
|
```typescript
|
|
122
|
-
const result = await scheduler.run(
|
|
183
|
+
const result = await scheduler.run("workflow", myProcess);
|
|
123
184
|
|
|
124
185
|
for (const node of result.sessionTree) {
|
|
125
186
|
console.log(node.name, node.runId);
|
|
126
187
|
for (const child of node.children) {
|
|
127
|
-
console.log(
|
|
188
|
+
console.log(" └─", child.name);
|
|
128
189
|
}
|
|
129
190
|
}
|
|
130
191
|
```
|
|
131
192
|
|
|
132
|
-
|
|
193
|
+
## Development
|
|
133
194
|
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
**Typed channels**. `Channel<T>` carries values of type T. This catches mismatched agent interfaces at compile time rather than runtime.
|
|
141
|
-
|
|
142
|
-
**Trace-first**. Every operation emits trace events. The session tree isn't reconstructed after the fact — it's built as processes execute, so you can inspect it mid-run.
|
|
195
|
+
```bash
|
|
196
|
+
npm run check
|
|
197
|
+
npm test
|
|
198
|
+
npm run coverage
|
|
199
|
+
```
|
|
143
200
|
|
|
144
201
|
## License
|
|
145
202
|
|
|
@@ -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\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";
|
|
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:retry\nRetry a task with exponential backoff and per-attempt timeout.\n\nInput:\n```json\n{ \"task\": \"fix flaky test\", \"maxAttempts\": 3, \"initialDelayMs\": 250, \"stepTimeout\": 60000 }\n```\n\n### cpa:fallback\nRun fallback task if primary task fails.\n\nInput:\n```json\n{ \"primary\": \"run strict analyzer\", \"fallback\": \"run lightweight analyzer\" }\n```\n\n### cpa:saga\nRun multiple steps with rollback compensation on failure.\n\nInput:\n```json\n{ \"steps\": [\"create branch\", \"apply patch\", \"run validation\"] }\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`, `retry`, `fallback`, `saga`, `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;
|
|
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;AAEnE,OAAO,EAAa,KAAK,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAIlE,eAAO,MAAM,QAAQ,s7EAoGpB,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;EA4LvC;AAID,wBAAgB,qBAAqB,CACnC,KAAK,EAAE,WAAW,EAAE,EACpB,KAAK,SAAI,GACR,MAAM,CAsCR"}
|
|
@@ -5,6 +5,7 @@
|
|
|
5
5
|
*/
|
|
6
6
|
import { par, branchFix, } from "../process.js";
|
|
7
7
|
import { agentProcess, fanOut } from "../agent.js";
|
|
8
|
+
import { invertible, or, retryWithBackoff, saga, timeout } from "../operators.js";
|
|
8
9
|
import { Scheduler } from "../scheduler.js";
|
|
9
10
|
// ─── SKILL.md content ───────────────────────────────────────────
|
|
10
11
|
export const SKILL_MD = `# cpa-agents — Concurrent Process Algebra
|
|
@@ -58,6 +59,30 @@ Input:
|
|
|
58
59
|
{ "task": "draft API design", "models": ["model-a", "model-b"], "timeout": 300000 }
|
|
59
60
|
\`\`\`
|
|
60
61
|
|
|
62
|
+
### cpa:retry
|
|
63
|
+
Retry a task with exponential backoff and per-attempt timeout.
|
|
64
|
+
|
|
65
|
+
Input:
|
|
66
|
+
\`\`\`json
|
|
67
|
+
{ "task": "fix flaky test", "maxAttempts": 3, "initialDelayMs": 250, "stepTimeout": 60000 }
|
|
68
|
+
\`\`\`
|
|
69
|
+
|
|
70
|
+
### cpa:fallback
|
|
71
|
+
Run fallback task if primary task fails.
|
|
72
|
+
|
|
73
|
+
Input:
|
|
74
|
+
\`\`\`json
|
|
75
|
+
{ "primary": "run strict analyzer", "fallback": "run lightweight analyzer" }
|
|
76
|
+
\`\`\`
|
|
77
|
+
|
|
78
|
+
### cpa:saga
|
|
79
|
+
Run multiple steps with rollback compensation on failure.
|
|
80
|
+
|
|
81
|
+
Input:
|
|
82
|
+
\`\`\`json
|
|
83
|
+
{ "steps": ["create branch", "apply patch", "run validation"] }
|
|
84
|
+
\`\`\`
|
|
85
|
+
|
|
61
86
|
### cpa:status
|
|
62
87
|
Get current process tree/status for the current session.
|
|
63
88
|
|
|
@@ -78,7 +103,7 @@ Input:
|
|
|
78
103
|
- **Gateway not connected**
|
|
79
104
|
- Start OpenClaw Gateway and retry.
|
|
80
105
|
- **Unknown command**
|
|
81
|
-
- Use one of: \`parallel\`, \`branch-fix\`, \`fan-out\`, \`status\`.
|
|
106
|
+
- Use one of: \`parallel\`, \`branch-fix\`, \`fan-out\`, \`retry\`, \`fallback\`, \`saga\`, \`status\`.
|
|
82
107
|
- **Timeout errors**
|
|
83
108
|
- Increase \`timeout\` in command args.
|
|
84
109
|
- **No session events**
|
|
@@ -114,7 +139,7 @@ export function createOpenClawSkill() {
|
|
|
114
139
|
const schedulers = new Map();
|
|
115
140
|
return {
|
|
116
141
|
name: "cpa-agents",
|
|
117
|
-
version: "0.2.
|
|
142
|
+
version: "0.2.2",
|
|
118
143
|
skillMd: SKILL_MD,
|
|
119
144
|
async handleCommand(command, args, openclawCtx) {
|
|
120
145
|
const scheduler = new Scheduler({
|
|
@@ -126,6 +151,19 @@ export function createOpenClawSkill() {
|
|
|
126
151
|
const sessionId = openclawCtx.session?.id ?? "unknown";
|
|
127
152
|
schedulers.set(sessionId, scheduler);
|
|
128
153
|
try {
|
|
154
|
+
const runTask = (task, model) => async (ctx) => {
|
|
155
|
+
const result = await openclawCtx.agent.run(task, {
|
|
156
|
+
model,
|
|
157
|
+
signal: ctx.signal,
|
|
158
|
+
});
|
|
159
|
+
if (result.errors?.length) {
|
|
160
|
+
throw new Error(result.errors.join("; "));
|
|
161
|
+
}
|
|
162
|
+
return result.output;
|
|
163
|
+
};
|
|
164
|
+
const runTaskVoid = (task, model) => async (ctx) => {
|
|
165
|
+
await runTask(task, model)(ctx);
|
|
166
|
+
};
|
|
129
167
|
switch (command) {
|
|
130
168
|
case "parallel": {
|
|
131
169
|
const tasks = args.tasks;
|
|
@@ -182,6 +220,38 @@ export function createOpenClawSkill() {
|
|
|
182
220
|
});
|
|
183
221
|
return scheduler.run("fan-out", proc);
|
|
184
222
|
}
|
|
223
|
+
case "retry": {
|
|
224
|
+
const task = args.task;
|
|
225
|
+
const model = args.model;
|
|
226
|
+
const maxAttempts = args.maxAttempts ?? 3;
|
|
227
|
+
const initialDelayMs = args.initialDelayMs ?? 250;
|
|
228
|
+
const stepTimeout = args.stepTimeout ?? 60_000;
|
|
229
|
+
const proc = retryWithBackoff({
|
|
230
|
+
process: timeout(stepTimeout, runTask(task, model)),
|
|
231
|
+
maxAttempts,
|
|
232
|
+
initialDelayMs,
|
|
233
|
+
});
|
|
234
|
+
return scheduler.run("retry", proc);
|
|
235
|
+
}
|
|
236
|
+
case "fallback": {
|
|
237
|
+
const primary = args.primary;
|
|
238
|
+
const fallback = args.fallback;
|
|
239
|
+
const model = args.model;
|
|
240
|
+
const proc = async (ctx) => {
|
|
241
|
+
const result = await or(runTask(primary, model), runTask(fallback, model))(ctx);
|
|
242
|
+
if (!result.ok) {
|
|
243
|
+
throw result.error;
|
|
244
|
+
}
|
|
245
|
+
return result.value;
|
|
246
|
+
};
|
|
247
|
+
return scheduler.run("fallback", proc);
|
|
248
|
+
}
|
|
249
|
+
case "saga": {
|
|
250
|
+
const steps = args.steps ?? [];
|
|
251
|
+
const model = args.model;
|
|
252
|
+
const proc = saga(steps.map((step) => invertible(runTask(step, model), () => runTaskVoid(`Rollback/undo the effects of this step: ${step}`, model))));
|
|
253
|
+
return scheduler.run("saga", proc);
|
|
254
|
+
}
|
|
185
255
|
case "status": {
|
|
186
256
|
const s = schedulers.get(sessionId);
|
|
187
257
|
if (!s) {
|
|
@@ -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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"}
|
|
@@ -33,6 +33,18 @@ export declare function createPiCpaExtension(): {
|
|
|
33
33
|
message: string;
|
|
34
34
|
}>;
|
|
35
35
|
};
|
|
36
|
+
"cpa:retry": {
|
|
37
|
+
description: string;
|
|
38
|
+
handler: (args: string, piCtx: Record<string, any>) => Promise<import("../scheduler.js").SchedulerResult<string>>;
|
|
39
|
+
};
|
|
40
|
+
"cpa:fallback": {
|
|
41
|
+
description: string;
|
|
42
|
+
handler: (args: string, piCtx: Record<string, any>) => Promise<import("../scheduler.js").SchedulerResult<string>>;
|
|
43
|
+
};
|
|
44
|
+
"cpa:saga": {
|
|
45
|
+
description: string;
|
|
46
|
+
handler: (args: string, piCtx: Record<string, any>) => Promise<import("../scheduler.js").SchedulerResult<any[]>>;
|
|
47
|
+
};
|
|
36
48
|
};
|
|
37
49
|
};
|
|
38
50
|
//# sourceMappingURL=pi-harness.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pi-harness.d.ts","sourceRoot":"","sources":["../../src/adapters/pi-harness.ts"],"names":[],"mappings":"AAAA;;GAEG;AAUH,OAAO,EAAE,KAAK,SAAS,EAA6B,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"pi-harness.d.ts","sourceRoot":"","sources":["../../src/adapters/pi-harness.ts"],"names":[],"mappings":"AAAA;;GAEG;AAUH,OAAO,EAAE,KAAK,SAAS,EAA6B,MAAM,aAAa,CAAC;AAIxE,wBAAgB,MAAM,CAAC,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE;IAC5C,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,MAAM,KAAK,OAAO,CAAC;CACvC,GAAG,SAAS,CAAC,MAAM,EAAE,OAAO,CAAC,CAU7B;AAED,wBAAgB,UAAU,CAAC,OAAO,EAAE,IAAI,EAAE;IACxC,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,CAAC,aAAa,EAAE,MAAM,KAAK,OAAO,CAAC;CACjD,GAAG,SAAS,CAAC,IAAI,EAAE,OAAO,CAAC,CAS3B;AAED,wBAAgB,oBAAoB;;;;;;;4BASN,MAAM,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC;;;;4BAwBlC,MAAM,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC;;;;6BA2BjC,MAAM,UAAU,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC;;;;;;4BAOpC,MAAM,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC;;;;4BAyBlC,MAAM,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC;;;;4BAyClC,MAAM,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC;;;EAmC/D"}
|
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
*/
|
|
4
4
|
import { par, } from "../process.js";
|
|
5
5
|
import { agentProcess, codeThenFix } from "../agent.js";
|
|
6
|
+
import { invertible, or, retryWithBackoff, saga, timeout } from "../operators.js";
|
|
6
7
|
import { Scheduler } from "../scheduler.js";
|
|
7
8
|
export function piTool(opts) {
|
|
8
9
|
return {
|
|
@@ -24,7 +25,7 @@ export function piSubAgent(opts) {
|
|
|
24
25
|
export function createPiCpaExtension() {
|
|
25
26
|
return {
|
|
26
27
|
name: "cpa-agents",
|
|
27
|
-
version: "0.2.
|
|
28
|
+
version: "0.2.2",
|
|
28
29
|
description: "Concurrent Process Algebra for AI agent orchestration",
|
|
29
30
|
commands: {
|
|
30
31
|
"cpa:par": {
|
|
@@ -71,6 +72,82 @@ export function createPiCpaExtension() {
|
|
|
71
72
|
return { message: "Session tree display (see trace output)" };
|
|
72
73
|
},
|
|
73
74
|
},
|
|
75
|
+
"cpa:retry": {
|
|
76
|
+
description: "Retry a Pi task with backoff and timeout",
|
|
77
|
+
handler: async (args, piCtx) => {
|
|
78
|
+
const scheduler = new Scheduler({
|
|
79
|
+
onTrace: (e) => piCtx.log?.(`[cpa] ${e.type}: ${e.runId}`),
|
|
80
|
+
});
|
|
81
|
+
const task = args.trim();
|
|
82
|
+
const proc = retryWithBackoff({
|
|
83
|
+
process: timeout(30_000, async (ctx) => {
|
|
84
|
+
const sub = piSubAgent({
|
|
85
|
+
name: task.slice(0, 30) || "retry-task",
|
|
86
|
+
prompt: task,
|
|
87
|
+
parseResult: (out) => out,
|
|
88
|
+
});
|
|
89
|
+
return sub.invoke(undefined, ctx.signal);
|
|
90
|
+
}),
|
|
91
|
+
maxAttempts: 3,
|
|
92
|
+
initialDelayMs: 100,
|
|
93
|
+
});
|
|
94
|
+
return scheduler.run("retry", proc);
|
|
95
|
+
},
|
|
96
|
+
},
|
|
97
|
+
"cpa:fallback": {
|
|
98
|
+
description: "Run fallback Pi task if primary fails",
|
|
99
|
+
handler: async (args, piCtx) => {
|
|
100
|
+
const scheduler = new Scheduler({
|
|
101
|
+
onTrace: (e) => piCtx.log?.(`[cpa] ${e.type}: ${e.runId}`),
|
|
102
|
+
});
|
|
103
|
+
const [primary, fallback] = args
|
|
104
|
+
.split("||")
|
|
105
|
+
.map((part) => part.trim())
|
|
106
|
+
.filter(Boolean);
|
|
107
|
+
const primaryPrompt = primary ?? args.trim();
|
|
108
|
+
const fallbackPrompt = fallback ?? `Fallback for: ${primaryPrompt}`;
|
|
109
|
+
const proc = async (ctx) => {
|
|
110
|
+
const result = await or(async (c) => piSubAgent({
|
|
111
|
+
name: "primary",
|
|
112
|
+
prompt: primaryPrompt,
|
|
113
|
+
parseResult: (out) => out,
|
|
114
|
+
}).invoke(undefined, c.signal), async (c) => piSubAgent({
|
|
115
|
+
name: "fallback",
|
|
116
|
+
prompt: fallbackPrompt,
|
|
117
|
+
parseResult: (out) => out,
|
|
118
|
+
}).invoke(undefined, c.signal))(ctx);
|
|
119
|
+
if (!result.ok) {
|
|
120
|
+
throw result.error;
|
|
121
|
+
}
|
|
122
|
+
return result.value;
|
|
123
|
+
};
|
|
124
|
+
return scheduler.run("fallback", proc);
|
|
125
|
+
},
|
|
126
|
+
},
|
|
127
|
+
"cpa:saga": {
|
|
128
|
+
description: "Run rollback-aware multi-step Pi workflow",
|
|
129
|
+
handler: async (args, piCtx) => {
|
|
130
|
+
const scheduler = new Scheduler({
|
|
131
|
+
onTrace: (e) => piCtx.log?.(`[cpa] ${e.type}: ${e.runId}`),
|
|
132
|
+
});
|
|
133
|
+
const steps = args
|
|
134
|
+
.split("|")
|
|
135
|
+
.map((part) => part.trim())
|
|
136
|
+
.filter(Boolean);
|
|
137
|
+
const proc = saga(steps.map((step) => invertible(async (ctx) => piSubAgent({
|
|
138
|
+
name: step.slice(0, 30) || "saga-step",
|
|
139
|
+
prompt: step,
|
|
140
|
+
parseResult: (out) => out,
|
|
141
|
+
}).invoke(undefined, ctx.signal), () => async (ctx) => {
|
|
142
|
+
await piSubAgent({
|
|
143
|
+
name: "undo",
|
|
144
|
+
prompt: `Undo/rollback this step: ${step}`,
|
|
145
|
+
parseResult: (out) => out,
|
|
146
|
+
}).invoke(undefined, ctx.signal);
|
|
147
|
+
})));
|
|
148
|
+
return scheduler.run("saga", proc);
|
|
149
|
+
},
|
|
150
|
+
},
|
|
74
151
|
},
|
|
75
152
|
};
|
|
76
153
|
}
|
|
@@ -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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"}
|