pi-rnd 0.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (63) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +74 -0
  3. package/agents/rnd-builder.md +98 -0
  4. package/agents/rnd-integrator.md +104 -0
  5. package/agents/rnd-planner.md +208 -0
  6. package/agents/rnd-verifier.md +164 -0
  7. package/dist/doctor.js +166 -0
  8. package/dist/doctor.js.map +1 -0
  9. package/dist/gates/bash-discipline.js +27 -0
  10. package/dist/gates/bash-discipline.js.map +1 -0
  11. package/dist/gates/read-evidence-pack.js +23 -0
  12. package/dist/gates/read-evidence-pack.js.map +1 -0
  13. package/dist/gates/registry.js +24 -0
  14. package/dist/gates/registry.js.map +1 -0
  15. package/dist/gates/rnd-dir-required.js +31 -0
  16. package/dist/gates/rnd-dir-required.js.map +1 -0
  17. package/dist/index.js +20 -0
  18. package/dist/index.js.map +1 -0
  19. package/dist/orchestrator/prompts.js +58 -0
  20. package/dist/orchestrator/prompts.js.map +1 -0
  21. package/dist/orchestrator/rnd-dir.js +20 -0
  22. package/dist/orchestrator/rnd-dir.js.map +1 -0
  23. package/dist/orchestrator/spawn.js +67 -0
  24. package/dist/orchestrator/spawn.js.map +1 -0
  25. package/dist/orchestrator/start.js +195 -0
  26. package/dist/orchestrator/start.js.map +1 -0
  27. package/dist/orchestrator/state.js +15 -0
  28. package/dist/orchestrator/state.js.map +1 -0
  29. package/dist/orchestrator/types.js +2 -0
  30. package/dist/orchestrator/types.js.map +1 -0
  31. package/docs/PI-API.md +574 -0
  32. package/docs/PORTING.md +105 -0
  33. package/package.json +57 -0
  34. package/skills/fp-practices/SKILL.md +128 -0
  35. package/skills/fp-practices/bash.md +114 -0
  36. package/skills/fp-practices/duckdb.md +116 -0
  37. package/skills/fp-practices/elixir.md +115 -0
  38. package/skills/fp-practices/javascript.md +119 -0
  39. package/skills/fp-practices/koka.md +120 -0
  40. package/skills/fp-practices/lean.md +120 -0
  41. package/skills/fp-practices/postgresql.md +120 -0
  42. package/skills/fp-practices/python.md +120 -0
  43. package/skills/fp-practices/svelte.md +114 -0
  44. package/skills/kiss-practices/SKILL.md +41 -0
  45. package/skills/kiss-practices/bash.md +70 -0
  46. package/skills/kiss-practices/duckdb.md +30 -0
  47. package/skills/kiss-practices/elixir.md +38 -0
  48. package/skills/kiss-practices/javascript.md +43 -0
  49. package/skills/kiss-practices/koka.md +34 -0
  50. package/skills/kiss-practices/lean.md +45 -0
  51. package/skills/kiss-practices/markdown.md +20 -0
  52. package/skills/kiss-practices/postgresql.md +31 -0
  53. package/skills/kiss-practices/python.md +64 -0
  54. package/skills/kiss-practices/svelte.md +59 -0
  55. package/skills/rnd-building/SKILL.md +256 -0
  56. package/skills/rnd-decomposition/SKILL.md +188 -0
  57. package/skills/rnd-experiments/SKILL.md +197 -0
  58. package/skills/rnd-failure-modes/SKILL.md +222 -0
  59. package/skills/rnd-iteration/SKILL.md +170 -0
  60. package/skills/rnd-orchestration/SKILL.md +314 -0
  61. package/skills/rnd-scaling/SKILL.md +188 -0
  62. package/skills/rnd-verification/SKILL.md +248 -0
  63. package/skills/using-rnd-framework/SKILL.md +65 -0
@@ -0,0 +1,67 @@
1
+ import { randomUUID } from "node:crypto";
2
+ import { readFile } from "node:fs/promises";
3
+ const DEFAULT_SPAWN_TIMEOUT_MS = 10_000;
4
+ const DEFAULT_COMPLETION_TIMEOUT_MS = 600_000;
5
+ export function rpcSpawn(pi, type, prompt, options, timeoutMs = DEFAULT_SPAWN_TIMEOUT_MS) {
6
+ const requestId = randomUUID();
7
+ const replyChannel = `subagents:rpc:spawn:reply:${requestId}`;
8
+ return new Promise((resolve) => {
9
+ let settled = false;
10
+ const unsub = pi.events.on(replyChannel, (data) => {
11
+ if (settled)
12
+ return;
13
+ settled = true;
14
+ unsub();
15
+ resolve(data);
16
+ });
17
+ setTimeout(() => {
18
+ if (settled)
19
+ return;
20
+ settled = true;
21
+ unsub();
22
+ resolve(null);
23
+ }, timeoutMs);
24
+ pi.events.emit("subagents:rpc:spawn", { requestId, type, prompt, options });
25
+ });
26
+ }
27
+ export function waitForCompletion(pi, agentId, timeoutMs = DEFAULT_COMPLETION_TIMEOUT_MS) {
28
+ return new Promise((resolve) => {
29
+ let settled = false;
30
+ const finish = (data) => {
31
+ const e = data;
32
+ if (e?.id !== agentId || settled)
33
+ return;
34
+ settled = true;
35
+ unsubDone();
36
+ unsubFail();
37
+ resolve({
38
+ status: e.status ?? "unknown",
39
+ durationMs: e.durationMs ?? 0,
40
+ result: e.result,
41
+ error: e.error,
42
+ });
43
+ };
44
+ const unsubDone = pi.events.on("subagents:completed", finish);
45
+ const unsubFail = pi.events.on("subagents:failed", finish);
46
+ setTimeout(() => {
47
+ if (settled)
48
+ return;
49
+ settled = true;
50
+ unsubDone();
51
+ unsubFail();
52
+ resolve(null);
53
+ }, timeoutMs);
54
+ });
55
+ }
56
+ export async function readTranscript(agentId, sessionId, cwd) {
57
+ const uid = process.getuid?.() ?? 0;
58
+ const cwdEncoded = cwd.replace(/\//g, "-").replace(/^-/, "");
59
+ const path = `/tmp/pi-subagents-${uid}/${cwdEncoded}/${sessionId}/tasks/${agentId}.output`;
60
+ try {
61
+ return await readFile(path, "utf8");
62
+ }
63
+ catch {
64
+ return null;
65
+ }
66
+ }
67
+ //# sourceMappingURL=spawn.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"spawn.js","sourceRoot":"","sources":["../../src/orchestrator/spawn.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,195 @@
1
+ import { access, readFile, writeFile } from "node:fs/promises";
2
+ import { homedir } from "node:os";
3
+ import { join } from "node:path";
4
+ import { rpcSpawn, waitForCompletion } from "./spawn.js";
5
+ import { recordPhase, recordVerdict, recordWave } from "./state.js";
6
+ import { computeRndDir, ensureRndDir } from "./rnd-dir.js";
7
+ import { buildPromptFor, integratorPromptFor, plannerPromptFor, verifierPromptFor, } from "./prompts.js";
8
+ // --- pure helpers ---
9
+ export function verdictFromStatus(status) {
10
+ if (status === "completed")
11
+ return "PASS";
12
+ if (status === "error" || status === "aborted")
13
+ return "FAIL";
14
+ return "ITERATE";
15
+ }
16
+ export function parseWavePlan(planMd) {
17
+ // Split on h2 headings, find the Execution Schedule section
18
+ const sections = planMd.split(/^## /m);
19
+ const schedulePart = sections.find((s) => s.startsWith("Execution Schedule"));
20
+ if (!schedulePart)
21
+ return [];
22
+ const body = schedulePart.replace(/^Execution Schedule[^\n]*\n/, "");
23
+ const waves = [];
24
+ const waveBlocks = body.split(/^Wave (\d+):/m).slice(1);
25
+ for (let i = 0; i < waveBlocks.length; i += 2) {
26
+ const waveNum = parseInt(waveBlocks[i] ?? "0", 10);
27
+ const block = waveBlocks[i + 1] ?? "";
28
+ const taskIds = Array.from(block.matchAll(/^- (T[^:\s]+)/gm)).map((m) => m[1] ?? "").filter(Boolean);
29
+ if (taskIds.length > 0) {
30
+ waves.push({ wave: waveNum, taskIds });
31
+ }
32
+ }
33
+ return waves;
34
+ }
35
+ export async function agentInstalled(name) {
36
+ const cwd = process.cwd();
37
+ const projectPath = join(cwd, ".pi", "agents", `${name}.md`);
38
+ const globalPath = join(homedir(), ".pi", "agent", "agents", `${name}.md`);
39
+ for (const path of [projectPath, globalPath]) {
40
+ try {
41
+ await access(path);
42
+ return true;
43
+ }
44
+ catch {
45
+ // not found at this path
46
+ }
47
+ }
48
+ return false;
49
+ }
50
+ // --- wave execution ---
51
+ async function buildWave(pi, ctx, wave, rndDir) {
52
+ recordWave(pi, wave.wave, wave.taskIds);
53
+ recordPhase(pi, "build");
54
+ ctx.ui.notify(`Wave ${wave.wave}: building ${wave.taskIds.join(", ")}…`, "info");
55
+ const buildResults = await Promise.all(wave.taskIds.map(async (taskId) => {
56
+ const reply = await rpcSpawn(pi, "rnd-builder", buildPromptFor(taskId, rndDir), { description: `build ${taskId}`, run_in_background: true });
57
+ if (!reply?.success || !reply.data?.id) {
58
+ return { taskId, status: "error" };
59
+ }
60
+ const completion = await waitForCompletion(pi, reply.data.id);
61
+ return { taskId, status: completion?.status ?? "error" };
62
+ }));
63
+ let allPassed = true;
64
+ for (const { taskId, status } of buildResults) {
65
+ const verdict = verdictFromStatus(status);
66
+ recordVerdict(pi, taskId, verdict);
67
+ if (verdict !== "PASS") {
68
+ allPassed = false;
69
+ ctx.ui.notify(`Wave ${wave.wave}: build FAIL for ${taskId}`, "error");
70
+ }
71
+ }
72
+ return allPassed;
73
+ }
74
+ async function verifyWave(pi, ctx, wave, rndDir) {
75
+ recordPhase(pi, "verify");
76
+ ctx.ui.notify(`Wave ${wave.wave}: verifying…`, "info");
77
+ const reply = await rpcSpawn(pi, "rnd-verifier", verifierPromptFor(wave, rndDir), { description: `verify wave ${wave.wave}`, run_in_background: true }, 10_000);
78
+ if (!reply?.success || !reply.data?.id) {
79
+ ctx.ui.notify(`Wave ${wave.wave}: verifier spawn failed`, "error");
80
+ recordVerdict(pi, `wave-${wave.wave}-verify`, "FAIL");
81
+ return false;
82
+ }
83
+ const completion = await waitForCompletion(pi, reply.data.id);
84
+ const verdict = verdictFromStatus(completion?.status ?? "error");
85
+ recordVerdict(pi, `wave-${wave.wave}-verify`, verdict);
86
+ if (verdict !== "PASS") {
87
+ const taskList = wave.taskIds.join(", ");
88
+ ctx.ui.notify(`Wave ${wave.wave}: verification FAIL (tasks: ${taskList}). Check ${rndDir}/verifications/wave-${wave.wave}-report.md`, "error");
89
+ return false;
90
+ }
91
+ return true;
92
+ }
93
+ // --- main handler ---
94
+ async function rndStartHandler(args, ctx, pi) {
95
+ const task = args.trim();
96
+ if (!task) {
97
+ ctx.ui.notify("usage: /rnd-start <task>", "warning");
98
+ return;
99
+ }
100
+ const rndDir = computeRndDir(process.cwd());
101
+ await ensureRndDir(rndDir);
102
+ recordPhase(pi, "plan");
103
+ const plannerFound = await agentInstalled("rnd-planner");
104
+ if (!plannerFound) {
105
+ ctx.ui.notify("rnd-planner agent not found in .pi/agents/ or ~/.pi/agent/agents/. Install pi-rnd agents first.", "error");
106
+ return;
107
+ }
108
+ ctx.ui.notify("Spawning planner…", "info");
109
+ const plannerReply = await rpcSpawn(pi, "rnd-planner", plannerPromptFor(task, rndDir), { description: "rnd plan", run_in_background: true });
110
+ if (!plannerReply?.success || !plannerReply.data?.id) {
111
+ const err = plannerReply?.success === false ? plannerReply.error : "spawn timeout";
112
+ ctx.ui.notify(`Planner spawn failed: ${err}`, "error");
113
+ return;
114
+ }
115
+ const plannerCompletion = await waitForCompletion(pi, plannerReply.data.id, 600_000);
116
+ if (!plannerCompletion || plannerCompletion.status !== "completed") {
117
+ const st = plannerCompletion?.status ?? "timeout";
118
+ ctx.ui.notify(`Planner did not complete successfully (status: ${st})`, "error");
119
+ recordVerdict(pi, "T-plan", "FAIL");
120
+ return;
121
+ }
122
+ recordVerdict(pi, "T-plan", verdictFromStatus(plannerCompletion.status));
123
+ const planPath = `${rndDir}/plan.md`;
124
+ let planMd;
125
+ try {
126
+ planMd = await readFile(planPath, "utf8");
127
+ }
128
+ catch {
129
+ ctx.ui.notify(`Could not read plan at ${planPath}`, "error");
130
+ return;
131
+ }
132
+ const waves = parseWavePlan(planMd);
133
+ if (waves.length === 0) {
134
+ ctx.ui.notify("Plan produced no waves. Check plan.md for a valid '## Execution Schedule' section.", "warning");
135
+ return;
136
+ }
137
+ const waveOutcomes = [];
138
+ for (const wave of waves) {
139
+ const buildOk = await buildWave(pi, ctx, wave, rndDir);
140
+ if (!buildOk) {
141
+ await writeIterationLog(rndDir, wave, "build");
142
+ waveOutcomes.push(`Wave ${wave.wave}: BUILD FAIL`);
143
+ ctx.ui.notify(buildSummary(waveOutcomes, "NO-SHIP"), "warning");
144
+ return;
145
+ }
146
+ const verifyOk = await verifyWave(pi, ctx, wave, rndDir);
147
+ if (!verifyOk) {
148
+ await writeIterationLog(rndDir, wave, "verify");
149
+ waveOutcomes.push(`Wave ${wave.wave}: VERIFY FAIL`);
150
+ ctx.ui.notify(buildSummary(waveOutcomes, "NO-SHIP"), "warning");
151
+ return;
152
+ }
153
+ waveOutcomes.push(`Wave ${wave.wave}: PASS`);
154
+ }
155
+ recordPhase(pi, "integrate");
156
+ ctx.ui.notify("All waves passed. Spawning integrator…", "info");
157
+ const integratorReply = await rpcSpawn(pi, "rnd-integrator", integratorPromptFor(rndDir), { description: "rnd integrate", run_in_background: true });
158
+ if (integratorReply?.success && integratorReply.data?.id) {
159
+ const intCompletion = await waitForCompletion(pi, integratorReply.data.id);
160
+ recordVerdict(pi, "integrate", verdictFromStatus(intCompletion?.status ?? "error"));
161
+ }
162
+ else {
163
+ recordVerdict(pi, "integrate", "FAIL");
164
+ }
165
+ ctx.ui.notify(buildSummary(waveOutcomes, "SHIP"), "info");
166
+ }
167
+ // --- small helpers ---
168
+ function buildSummary(waveOutcomes, verdict) {
169
+ return [`pi-rnd run complete — ${verdict}`, ...waveOutcomes].join("\n");
170
+ }
171
+ async function writeIterationLog(rndDir, wave, phase) {
172
+ const content = [
173
+ `## Wave ${wave.wave} iteration log`,
174
+ "",
175
+ `Phase failed: ${phase}`,
176
+ `Tasks: ${wave.taskIds.join(", ")}`,
177
+ `Timestamp: ${new Date().toISOString()}`,
178
+ "",
179
+ "Iteration loop not implemented in v0.2. Fix and re-run /rnd-start.",
180
+ ].join("\n");
181
+ try {
182
+ await writeFile(`${rndDir}/iteration-log.md`, content, "utf8");
183
+ }
184
+ catch {
185
+ // non-fatal
186
+ }
187
+ }
188
+ // --- registration ---
189
+ export function registerRndStart(pi) {
190
+ pi.registerCommand("rnd-start", {
191
+ description: "Run the full rnd plan→build→verify→integrate loop for a task",
192
+ handler: (args, ctx) => rndStartHandler(args, ctx, pi),
193
+ });
194
+ }
195
+ //# sourceMappingURL=start.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"start.js","sourceRoot":"","sources":["../../src/orchestrator/start.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ export function recordPhase(pi, phase) {
2
+ pi.appendEntry("rnd:phase", { phase, ts: new Date().toISOString() });
3
+ }
4
+ export function recordWave(pi, wave, taskIds) {
5
+ pi.appendEntry("rnd:wave", { wave, taskIds, ts: new Date().toISOString() });
6
+ }
7
+ export function recordVerdict(pi, taskId, verdict, evidence) {
8
+ pi.appendEntry("rnd:verdict", {
9
+ taskId,
10
+ verdict,
11
+ evidence: evidence ?? [],
12
+ ts: new Date().toISOString(),
13
+ });
14
+ }
15
+ //# sourceMappingURL=state.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"state.js","sourceRoot":"","sources":["../../src/orchestrator/state.ts"],"names":[],"mappings":"AAIA,MAAM,UAAU,WAAW,CAAC,EAAgB,EAAE,KAAY;IACxD,EAAE,CAAC,WAAW,CAAC,WAAW,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC;AACvE,CAAC;AAED,MAAM,UAAU,UAAU,CACxB,EAAgB,EAChB,IAAY,EACZ,OAAiB;IAEjB,EAAE,CAAC,WAAW,CAAC,UAAU,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC;AAC9E,CAAC;AAED,MAAM,UAAU,aAAa,CAC3B,EAAgB,EAChB,MAAc,EACd,OAAqB,EACrB,QAAmB;IAEnB,EAAE,CAAC,WAAW,CAAC,aAAa,EAAE;QAC5B,MAAM;QACN,OAAO;QACP,QAAQ,EAAE,QAAQ,IAAI,EAAE;QACxB,EAAE,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;KAC7B,CAAC,CAAC;AACL,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/orchestrator/types.ts"],"names":[],"mappings":""}