@llblab/pi-actors 0.23.0 → 0.24.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/AGENTS.md +125 -60
- package/BACKLOG.md +93 -188
- package/CHANGELOG.md +22 -0
- package/README.md +13 -0
- package/dist/fixtures/protocol/actor-message-branch.json +13 -0
- package/dist/fixtures/protocol/artifact-manifest.json +9 -0
- package/dist/fixtures/protocol/mailbox-contract.json +15 -0
- package/dist/fixtures/protocol/recipe-summary.json +16 -0
- package/dist/fixtures/protocol/room-message.json +11 -0
- package/dist/fixtures/protocol/room-roster.json +11 -0
- package/dist/fixtures/protocol/run-inbox-message.json +9 -0
- package/dist/fixtures/protocol/run-outbox-event.json +9 -0
- package/dist/fixtures/protocol/run-state.json +10 -0
- package/dist/index.js +3 -2
- package/dist/lib/actor-inspector-tui.js +5 -32
- package/dist/lib/actor-rooms.d.ts +8 -0
- package/dist/lib/actor-rooms.js +64 -20
- package/dist/lib/actor-worker.d.ts +13 -0
- package/dist/lib/actor-worker.js +86 -0
- package/dist/lib/async-runner.d.ts +5 -0
- package/dist/lib/async-runner.js +134 -0
- package/dist/lib/async-runs.js +9 -28
- package/dist/lib/build-dist.d.ts +5 -0
- package/dist/lib/build-dist.js +24 -0
- package/dist/lib/conformance.d.ts +12 -0
- package/dist/lib/conformance.js +28 -0
- package/dist/lib/coordinator.d.ts +5 -0
- package/dist/lib/coordinator.js +557 -0
- package/dist/lib/locker.d.ts +5 -0
- package/dist/lib/locker.js +310 -0
- package/dist/lib/mailbox-loop.d.ts +41 -0
- package/dist/lib/mailbox-loop.js +62 -0
- package/dist/lib/observability.d.ts +2 -2
- package/dist/lib/observability.js +51 -53
- package/dist/lib/prompts.d.ts +1 -1
- package/dist/lib/prompts.js +1 -1
- package/dist/lib/recipe-references.js +25 -2
- package/dist/lib/recipe-utils.d.ts +5 -0
- package/dist/lib/recipe-utils.js +385 -0
- package/dist/lib/runtime-notifier.js +3 -7
- package/dist/lib/state-readers.d.ts +21 -0
- package/dist/lib/state-readers.js +74 -0
- package/dist/lib/tools.js +1 -1
- package/dist/lib/validate-recipe.d.ts +6 -0
- package/dist/lib/validate-recipe.js +104 -0
- package/dist/recipes/actor-worker.json +35 -0
- package/dist/recipes/coordinator-locker.json +45 -0
- package/dist/recipes/lens-swarm.json +66 -0
- package/dist/recipes/locker.json +45 -0
- package/dist/recipes/music-player.json +38 -0
- package/dist/recipes/pipeline-architect-coordinator.json +95 -0
- package/dist/recipes/pipeline-artifact-bundle.json +100 -0
- package/dist/recipes/pipeline-artifact-report.json +58 -0
- package/dist/recipes/pipeline-artifact-write.json +72 -0
- package/dist/recipes/pipeline-async-run-ops.json +70 -0
- package/dist/recipes/pipeline-checkpoint-continuation.json +67 -0
- package/dist/recipes/pipeline-development-tasking.json +81 -0
- package/dist/recipes/pipeline-docs-maintenance.json +80 -0
- package/dist/recipes/pipeline-media-library.json +59 -0
- package/dist/recipes/pipeline-quorum-review.json +79 -0
- package/dist/recipes/pipeline-release-readiness.json +110 -0
- package/dist/recipes/pipeline-release-summary.json +88 -0
- package/dist/recipes/pipeline-repo-health.json +89 -0
- package/dist/recipes/pipeline-research-synthesis.json +94 -0
- package/dist/recipes/pipeline-review-readiness.json +54 -0
- package/dist/recipes/pipeline-room-swarm.json +50 -0
- package/dist/recipes/subagent-artifact.json +32 -0
- package/dist/recipes/subagent-checkpoint.json +33 -0
- package/dist/recipes/subagent-conflict-report.json +32 -0
- package/dist/recipes/subagent-contradiction-map.json +33 -0
- package/dist/recipes/subagent-critic.json +35 -0
- package/dist/recipes/subagent-evidence-map.json +33 -0
- package/dist/recipes/subagent-followup.json +33 -0
- package/dist/recipes/subagent-judge.json +33 -0
- package/dist/recipes/subagent-merge.json +33 -0
- package/dist/recipes/subagent-message.json +34 -0
- package/dist/recipes/subagent-normalize.json +31 -0
- package/dist/recipes/subagent-plan.json +33 -0
- package/dist/recipes/subagent-prompt.json +28 -0
- package/dist/recipes/subagent-quorum.json +43 -0
- package/dist/recipes/subagent-review-coordinator.json +114 -0
- package/dist/recipes/subagent-review.json +37 -0
- package/dist/recipes/subagent-task-card.json +35 -0
- package/dist/recipes/subagent-tools.json +27 -0
- package/dist/recipes/subagent-verify.json +34 -0
- package/dist/recipes/subagents-prompts.json +51 -0
- package/dist/recipes/utility-actor-message.json +23 -0
- package/dist/recipes/utility-artifact-manifest.json +16 -0
- package/dist/recipes/utility-artifact-write.json +16 -0
- package/dist/recipes/utility-changelog-head.json +11 -0
- package/dist/recipes/utility-changelog-section.json +13 -0
- package/dist/recipes/utility-coordinator-lock-snapshot.json +13 -0
- package/dist/recipes/utility-git-log.json +11 -0
- package/dist/recipes/utility-git-status.json +9 -0
- package/dist/recipes/utility-jsonl-tail.json +10 -0
- package/dist/recipes/utility-markdown-index.json +14 -0
- package/dist/recipes/utility-package-summary.json +11 -0
- package/dist/recipes/utility-playlist-build.json +17 -0
- package/dist/recipes/utility-playlist-scan.json +11 -0
- package/dist/recipes/utility-run-ops-snapshot.json +17 -0
- package/dist/recipes/utility-run-state-files.json +13 -0
- package/dist/recipes/utility-run-summary.json +11 -0
- package/dist/recipes/utility-skill-summary.json +13 -0
- package/dist/recipes/utility-validate-recipe.json +13 -0
- package/dist/recipes/utility-validation-wrapper.json +13 -0
- package/dist/scripts/actor-worker.mjs +31 -0
- package/dist/scripts/async-runner.mjs +31 -0
- package/dist/scripts/build-dist.mjs +25 -0
- package/dist/scripts/conformance.mjs +33 -0
- package/dist/scripts/coordinator.mjs +31 -0
- package/dist/scripts/locker.mjs +33 -0
- package/dist/scripts/music-player.mjs +964 -0
- package/dist/scripts/recipe-utils.mjs +31 -0
- package/dist/scripts/validate-recipe.mjs +34 -0
- package/dist/skills/actors/SKILL.md +375 -0
- package/dist/skills/swarm/SKILL.md +467 -0
- package/dist/skills/swarm/references/development-swarm.md +596 -0
- package/docs/actor-messages.md +2 -2
- package/docs/async-runs.md +11 -0
- package/docs/template-recipes.md +1 -1
- package/fixtures/protocol/actor-message-branch.json +13 -0
- package/fixtures/protocol/artifact-manifest.json +9 -0
- package/fixtures/protocol/mailbox-contract.json +15 -0
- package/fixtures/protocol/recipe-summary.json +16 -0
- package/fixtures/protocol/room-message.json +11 -0
- package/fixtures/protocol/room-roster.json +11 -0
- package/fixtures/protocol/run-inbox-message.json +9 -0
- package/fixtures/protocol/run-outbox-event.json +9 -0
- package/fixtures/protocol/run-state.json +10 -0
- package/index.ts +3 -0
- package/lib/actor-inspector-tui.ts +11 -34
- package/lib/actor-rooms.ts +88 -18
- package/lib/actor-worker.ts +118 -0
- package/lib/async-runner.ts +173 -0
- package/lib/async-runs.ts +12 -22
- package/lib/build-dist.ts +30 -0
- package/lib/conformance.ts +46 -0
- package/lib/coordinator.ts +649 -0
- package/lib/locker.ts +340 -0
- package/lib/mailbox-loop.ts +148 -0
- package/lib/observability.ts +24 -19
- package/lib/prompts.ts +1 -1
- package/lib/recipe-references.ts +37 -2
- package/lib/recipe-utils.ts +486 -0
- package/lib/runtime-notifier.ts +4 -6
- package/lib/state-readers.ts +93 -0
- package/lib/tools.ts +1 -1
- package/lib/validate-recipe.ts +110 -0
- package/package.json +10 -2
- package/recipes/actor-worker.json +35 -0
- package/recipes/pipeline-quorum-review.json +12 -7
- package/scripts/actor-worker.mjs +31 -0
- package/scripts/async-runner.mjs +11 -201
- package/scripts/build-dist.mjs +25 -0
- package/scripts/conformance.mjs +21 -35
- package/scripts/coordinator.mjs +15 -625
- package/scripts/locker.mjs +20 -332
- package/scripts/recipe-utils.mjs +17 -477
- package/scripts/validate-recipe.mjs +18 -121
- package/skills/actors/SKILL.md +5 -2
- package/skills/swarm/SKILL.md +3 -1
package/dist/lib/async-runs.js
CHANGED
|
@@ -12,6 +12,7 @@ import { basename, dirname, extname, join, resolve } from "node:path";
|
|
|
12
12
|
import { fileURLToPath } from "node:url";
|
|
13
13
|
import { substituteCommandTemplateToken } from "./command-templates.js";
|
|
14
14
|
import { writeJsonAtomic } from "./file-state.js";
|
|
15
|
+
import { readJsonFileResilient, readJsonlFileResilient } from "./state-readers.js";
|
|
15
16
|
import * as Paths from "./paths.js";
|
|
16
17
|
import * as RecipeReferences from "./recipe-references.js";
|
|
17
18
|
import * as RecipeUsage from "./recipe-usage.js";
|
|
@@ -189,12 +190,7 @@ function resolveStartParams(params) {
|
|
|
189
190
|
};
|
|
190
191
|
}
|
|
191
192
|
function readJson(path) {
|
|
192
|
-
|
|
193
|
-
return JSON.parse(readFileSync(path, "utf8"));
|
|
194
|
-
}
|
|
195
|
-
catch {
|
|
196
|
-
return undefined;
|
|
197
|
-
}
|
|
193
|
+
return readJsonFileResilient(path, undefined).value;
|
|
198
194
|
}
|
|
199
195
|
function isAlive(pid) {
|
|
200
196
|
try {
|
|
@@ -232,20 +228,12 @@ function tailLines(path, lines) {
|
|
|
232
228
|
return content ? content.split("\n") : [];
|
|
233
229
|
}
|
|
234
230
|
function getInterruptedRunStatus(stateDir) {
|
|
235
|
-
const events =
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
if (event.event === "run.kill")
|
|
242
|
-
return "killed";
|
|
243
|
-
if (event.event === "run.cancel")
|
|
244
|
-
return "cancelled";
|
|
245
|
-
}
|
|
246
|
-
catch {
|
|
247
|
-
// Ignore malformed event lines.
|
|
248
|
-
}
|
|
231
|
+
const events = readJsonlFileResilient(join(stateDir, "events.jsonl")).records.slice(-200);
|
|
232
|
+
for (const event of events.reverse()) {
|
|
233
|
+
if (event.event === "run.kill")
|
|
234
|
+
return "killed";
|
|
235
|
+
if (event.event === "run.cancel")
|
|
236
|
+
return "cancelled";
|
|
249
237
|
}
|
|
250
238
|
return undefined;
|
|
251
239
|
}
|
|
@@ -655,14 +643,7 @@ function parseRunInboxLine(line) {
|
|
|
655
643
|
}
|
|
656
644
|
}
|
|
657
645
|
function readRunInboxMessagesFromStateDir(stateDir) {
|
|
658
|
-
|
|
659
|
-
if (!existsSync(file))
|
|
660
|
-
return [];
|
|
661
|
-
return readFileSync(file, "utf8")
|
|
662
|
-
.split("\n")
|
|
663
|
-
.filter((line) => line.trim())
|
|
664
|
-
.map(parseRunInboxLine)
|
|
665
|
-
.filter((message) => Boolean(message));
|
|
646
|
+
return readJsonlFileResilient(runInboxFile(stateDir)).records;
|
|
666
647
|
}
|
|
667
648
|
function writeRunInboxMessages(stateDir, messages) {
|
|
668
649
|
writeFileSync(runInboxFile(stateDir), messages.length
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Dist build pipeline entrypoint logic.
|
|
3
|
+
* Zones: packaging, JavaScript-only distributive tree
|
|
4
|
+
*/
|
|
5
|
+
import { spawnSync } from "node:child_process";
|
|
6
|
+
import { cpSync, mkdirSync, readdirSync, rmSync } from "node:fs";
|
|
7
|
+
import { join } from "node:path";
|
|
8
|
+
function run(command, args) {
|
|
9
|
+
const result = spawnSync(command, args, { stdio: "inherit" });
|
|
10
|
+
if (result.status !== 0)
|
|
11
|
+
process.exit(result.status ?? 1);
|
|
12
|
+
}
|
|
13
|
+
export function buildDist() {
|
|
14
|
+
rmSync("dist", { recursive: true, force: true });
|
|
15
|
+
mkdirSync("dist", { recursive: true });
|
|
16
|
+
run("tsc", ["-p", "tsconfig.build.json"]);
|
|
17
|
+
for (const dir of ["scripts", "recipes", "fixtures", "skills"]) {
|
|
18
|
+
cpSync(dir, join("dist", dir), { recursive: true });
|
|
19
|
+
}
|
|
20
|
+
const builtScripts = readdirSync(join("dist", "scripts"))
|
|
21
|
+
.filter((name) => name.endsWith(".mjs"))
|
|
22
|
+
.map((name) => join("dist", "scripts", name));
|
|
23
|
+
run(process.execPath, ["--check", ...builtScripts]);
|
|
24
|
+
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Internal conformance runner logic.
|
|
3
|
+
* Zones: CI/release validation, protocol regression suite selection
|
|
4
|
+
*/
|
|
5
|
+
export declare const conformanceSuites: string[];
|
|
6
|
+
export interface ConformanceReport {
|
|
7
|
+
code: number;
|
|
8
|
+
output: string;
|
|
9
|
+
summary: string;
|
|
10
|
+
suites: number;
|
|
11
|
+
}
|
|
12
|
+
export declare function runConformance(cwd?: URL): ConformanceReport;
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Internal conformance runner logic.
|
|
3
|
+
* Zones: CI/release validation, protocol regression suite selection
|
|
4
|
+
*/
|
|
5
|
+
import { spawnSync } from "node:child_process";
|
|
6
|
+
export const conformanceSuites = [
|
|
7
|
+
"tests/protocol-examples.test.ts",
|
|
8
|
+
"tests/recipe-discovery.test.ts",
|
|
9
|
+
"tests/registry.test.ts",
|
|
10
|
+
"tests/runtime-registry.test.ts",
|
|
11
|
+
"tests/async-runs.test.ts",
|
|
12
|
+
"tests/actor-rooms.test.ts",
|
|
13
|
+
"tests/tools.test.ts",
|
|
14
|
+
];
|
|
15
|
+
export function runConformance(cwd = new URL("..", import.meta.url)) {
|
|
16
|
+
const result = spawnSync(process.execPath, ["--experimental-strip-types", "--test", ...conformanceSuites], { cwd, encoding: "utf8", stdio: "pipe" });
|
|
17
|
+
const output = `${result.stdout ?? ""}${result.stderr ?? ""}`;
|
|
18
|
+
const summary = output
|
|
19
|
+
.split("\n")
|
|
20
|
+
.filter((line) => /^ℹ (tests|pass|fail|cancelled|skipped|todo|duration_ms) /.test(line))
|
|
21
|
+
.join("\n");
|
|
22
|
+
return {
|
|
23
|
+
code: result.status ?? 1,
|
|
24
|
+
output,
|
|
25
|
+
summary,
|
|
26
|
+
suites: conformanceSuites.length,
|
|
27
|
+
};
|
|
28
|
+
}
|