pi-fabric 0.1.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.
Files changed (203) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +635 -0
  3. package/THIRD_PARTY_NOTICES.md +9 -0
  4. package/dist/activity/store.d.ts +27 -0
  5. package/dist/activity/store.d.ts.map +1 -0
  6. package/dist/activity/store.js +474 -0
  7. package/dist/activity/store.js.map +1 -0
  8. package/dist/activity/types.d.ts +101 -0
  9. package/dist/activity/types.d.ts.map +1 -0
  10. package/dist/activity/types.js +2 -0
  11. package/dist/activity/types.js.map +1 -0
  12. package/dist/actors/context.d.ts +13 -0
  13. package/dist/actors/context.d.ts.map +1 -0
  14. package/dist/actors/context.js +155 -0
  15. package/dist/actors/context.js.map +1 -0
  16. package/dist/actors/manager.d.ts +33 -0
  17. package/dist/actors/manager.d.ts.map +1 -0
  18. package/dist/actors/manager.js +751 -0
  19. package/dist/actors/manager.js.map +1 -0
  20. package/dist/actors/types.d.ts +67 -0
  21. package/dist/actors/types.d.ts.map +1 -0
  22. package/dist/actors/types.js +2 -0
  23. package/dist/actors/types.js.map +1 -0
  24. package/dist/capture/catalog.d.ts +23 -0
  25. package/dist/capture/catalog.d.ts.map +1 -0
  26. package/dist/capture/catalog.js +53 -0
  27. package/dist/capture/catalog.js.map +1 -0
  28. package/dist/capture/interceptor.d.ts +13 -0
  29. package/dist/capture/interceptor.d.ts.map +1 -0
  30. package/dist/capture/interceptor.js +130 -0
  31. package/dist/capture/interceptor.js.map +1 -0
  32. package/dist/commands/fabric.d.ts +14 -0
  33. package/dist/commands/fabric.d.ts.map +1 -0
  34. package/dist/commands/fabric.js +237 -0
  35. package/dist/commands/fabric.js.map +1 -0
  36. package/dist/config.d.ts +89 -0
  37. package/dist/config.d.ts.map +1 -0
  38. package/dist/config.js +255 -0
  39. package/dist/config.js.map +1 -0
  40. package/dist/core/action-registry.d.ts +71 -0
  41. package/dist/core/action-registry.d.ts.map +1 -0
  42. package/dist/core/action-registry.js +273 -0
  43. package/dist/core/action-registry.js.map +1 -0
  44. package/dist/core/approval-controller.d.ts +11 -0
  45. package/dist/core/approval-controller.d.ts.map +1 -0
  46. package/dist/core/approval-controller.js +45 -0
  47. package/dist/core/approval-controller.js.map +1 -0
  48. package/dist/core/pi-tools.d.ts +4 -0
  49. package/dist/core/pi-tools.d.ts.map +1 -0
  50. package/dist/core/pi-tools.js +11 -0
  51. package/dist/core/pi-tools.js.map +1 -0
  52. package/dist/core/tool-ownership.d.ts +12 -0
  53. package/dist/core/tool-ownership.d.ts.map +1 -0
  54. package/dist/core/tool-ownership.js +41 -0
  55. package/dist/core/tool-ownership.js.map +1 -0
  56. package/dist/execution-service.d.ts +41 -0
  57. package/dist/execution-service.d.ts.map +1 -0
  58. package/dist/execution-service.js +210 -0
  59. package/dist/execution-service.js.map +1 -0
  60. package/dist/fabric-state.d.ts +38 -0
  61. package/dist/fabric-state.d.ts.map +1 -0
  62. package/dist/fabric-state.js +275 -0
  63. package/dist/fabric-state.js.map +1 -0
  64. package/dist/index.d.ts +4 -0
  65. package/dist/index.d.ts.map +1 -0
  66. package/dist/index.js +491 -0
  67. package/dist/index.js.map +1 -0
  68. package/dist/mesh/store.d.ts +68 -0
  69. package/dist/mesh/store.d.ts.map +1 -0
  70. package/dist/mesh/store.js +387 -0
  71. package/dist/mesh/store.js.map +1 -0
  72. package/dist/protocol.d.ts +62 -0
  73. package/dist/protocol.d.ts.map +1 -0
  74. package/dist/protocol.js +3 -0
  75. package/dist/protocol.js.map +1 -0
  76. package/dist/providers/agents-provider.d.ts +15 -0
  77. package/dist/providers/agents-provider.d.ts.map +1 -0
  78. package/dist/providers/agents-provider.js +393 -0
  79. package/dist/providers/agents-provider.js.map +1 -0
  80. package/dist/providers/captured-tools-provider.d.ts +23 -0
  81. package/dist/providers/captured-tools-provider.d.ts.map +1 -0
  82. package/dist/providers/captured-tools-provider.js +170 -0
  83. package/dist/providers/captured-tools-provider.js.map +1 -0
  84. package/dist/providers/mcp-provider.d.ts +15 -0
  85. package/dist/providers/mcp-provider.d.ts.map +1 -0
  86. package/dist/providers/mcp-provider.js +289 -0
  87. package/dist/providers/mcp-provider.js.map +1 -0
  88. package/dist/providers/mesh-provider.d.ts +13 -0
  89. package/dist/providers/mesh-provider.d.ts.map +1 -0
  90. package/dist/providers/mesh-provider.js +175 -0
  91. package/dist/providers/mesh-provider.js.map +1 -0
  92. package/dist/providers/pi-tools-provider.d.ts +14 -0
  93. package/dist/providers/pi-tools-provider.d.ts.map +1 -0
  94. package/dist/providers/pi-tools-provider.js +200 -0
  95. package/dist/providers/pi-tools-provider.js.map +1 -0
  96. package/dist/runtime/guest-types.d.ts +3 -0
  97. package/dist/runtime/guest-types.d.ts.map +1 -0
  98. package/dist/runtime/guest-types.js +313 -0
  99. package/dist/runtime/guest-types.js.map +1 -0
  100. package/dist/runtime/quickjs-runtime.d.ts +18 -0
  101. package/dist/runtime/quickjs-runtime.d.ts.map +1 -0
  102. package/dist/runtime/quickjs-runtime.js +538 -0
  103. package/dist/runtime/quickjs-runtime.js.map +1 -0
  104. package/dist/runtime/type-checker.d.ts +10 -0
  105. package/dist/runtime/type-checker.d.ts.map +1 -0
  106. package/dist/runtime/type-checker.js +71 -0
  107. package/dist/runtime/type-checker.js.map +1 -0
  108. package/dist/subagents/budget-ledger.d.ts +61 -0
  109. package/dist/subagents/budget-ledger.d.ts.map +1 -0
  110. package/dist/subagents/budget-ledger.js +92 -0
  111. package/dist/subagents/budget-ledger.js.map +1 -0
  112. package/dist/subagents/manager.d.ts +27 -0
  113. package/dist/subagents/manager.d.ts.map +1 -0
  114. package/dist/subagents/manager.js +497 -0
  115. package/dist/subagents/manager.js.map +1 -0
  116. package/dist/subagents/semaphore.d.ts +7 -0
  117. package/dist/subagents/semaphore.d.ts.map +1 -0
  118. package/dist/subagents/semaphore.js +54 -0
  119. package/dist/subagents/semaphore.js.map +1 -0
  120. package/dist/subagents/transports/localterm-transport.d.ts +7 -0
  121. package/dist/subagents/transports/localterm-transport.d.ts.map +1 -0
  122. package/dist/subagents/transports/localterm-transport.js +54 -0
  123. package/dist/subagents/transports/localterm-transport.js.map +1 -0
  124. package/dist/subagents/transports/process-transport.d.ts +7 -0
  125. package/dist/subagents/transports/process-transport.d.ts.map +1 -0
  126. package/dist/subagents/transports/process-transport.js +17 -0
  127. package/dist/subagents/transports/process-transport.js.map +1 -0
  128. package/dist/subagents/transports/process-utils.d.ts +16 -0
  129. package/dist/subagents/transports/process-utils.d.ts.map +1 -0
  130. package/dist/subagents/transports/process-utils.js +57 -0
  131. package/dist/subagents/transports/process-utils.js.map +1 -0
  132. package/dist/subagents/transports/screen-transport.d.ts +7 -0
  133. package/dist/subagents/transports/screen-transport.d.ts.map +1 -0
  134. package/dist/subagents/transports/screen-transport.js +33 -0
  135. package/dist/subagents/transports/screen-transport.js.map +1 -0
  136. package/dist/subagents/transports/tmux-transport.d.ts +7 -0
  137. package/dist/subagents/transports/tmux-transport.d.ts.map +1 -0
  138. package/dist/subagents/transports/tmux-transport.js +41 -0
  139. package/dist/subagents/transports/tmux-transport.js.map +1 -0
  140. package/dist/subagents/types.d.ts +132 -0
  141. package/dist/subagents/types.d.ts.map +1 -0
  142. package/dist/subagents/types.js +2 -0
  143. package/dist/subagents/types.js.map +1 -0
  144. package/dist/subagents/worktree-manager.d.ts +12 -0
  145. package/dist/subagents/worktree-manager.d.ts.map +1 -0
  146. package/dist/subagents/worktree-manager.js +53 -0
  147. package/dist/subagents/worktree-manager.js.map +1 -0
  148. package/dist/ui/controller.d.ts +14 -0
  149. package/dist/ui/controller.d.ts.map +1 -0
  150. package/dist/ui/controller.js +153 -0
  151. package/dist/ui/controller.js.map +1 -0
  152. package/dist/ui/dashboard.d.ts +36 -0
  153. package/dist/ui/dashboard.d.ts.map +1 -0
  154. package/dist/ui/dashboard.js +620 -0
  155. package/dist/ui/dashboard.js.map +1 -0
  156. package/dist/ui/fabric-render.d.ts +28 -0
  157. package/dist/ui/fabric-render.d.ts.map +1 -0
  158. package/dist/ui/fabric-render.js +280 -0
  159. package/dist/ui/fabric-render.js.map +1 -0
  160. package/dist/ui/format.d.ts +7 -0
  161. package/dist/ui/format.d.ts.map +1 -0
  162. package/dist/ui/format.js +57 -0
  163. package/dist/ui/format.js.map +1 -0
  164. package/dist/ui/highlight.d.ts +13 -0
  165. package/dist/ui/highlight.d.ts.map +1 -0
  166. package/dist/ui/highlight.js +337 -0
  167. package/dist/ui/highlight.js.map +1 -0
  168. package/dist/ui/settings.d.ts +21 -0
  169. package/dist/ui/settings.d.ts.map +1 -0
  170. package/dist/ui/settings.js +480 -0
  171. package/dist/ui/settings.js.map +1 -0
  172. package/dist/ui/snapshot.d.ts +5 -0
  173. package/dist/ui/snapshot.d.ts.map +1 -0
  174. package/dist/ui/snapshot.js +120 -0
  175. package/dist/ui/snapshot.js.map +1 -0
  176. package/dist/ui/types.d.ts +57 -0
  177. package/dist/ui/types.d.ts.map +1 -0
  178. package/dist/ui/types.js +11 -0
  179. package/dist/ui/types.js.map +1 -0
  180. package/dist/ui/widget.d.ts +16 -0
  181. package/dist/ui/widget.d.ts.map +1 -0
  182. package/dist/ui/widget.js +199 -0
  183. package/dist/ui/widget.js.map +1 -0
  184. package/dist/util.d.ts +2 -0
  185. package/dist/util.d.ts.map +1 -0
  186. package/dist/util.js +10 -0
  187. package/dist/util.js.map +1 -0
  188. package/dist/worker.d.ts +3 -0
  189. package/dist/worker.d.ts.map +1 -0
  190. package/dist/worker.js +478 -0
  191. package/dist/worker.js.map +1 -0
  192. package/package.json +87 -0
  193. package/skills/fabric-advisor/SKILL.md +53 -0
  194. package/skills/fabric-ambient/SKILL.md +84 -0
  195. package/skills/fabric-council/SKILL.md +37 -0
  196. package/skills/fabric-exec/SKILL.md +39 -0
  197. package/skills/fabric-exec/references/agents.md +78 -0
  198. package/skills/fabric-exec/references/mcp.md +46 -0
  199. package/skills/fabric-exec/references/mesh.md +42 -0
  200. package/skills/fabric-rlm/SKILL.md +84 -0
  201. package/skills/fabric-supervisor/SKILL.md +63 -0
  202. package/skills/fabric-swarm/SKILL.md +85 -0
  203. package/skills/fabric-workflow/SKILL.md +69 -0
package/dist/worker.js ADDED
@@ -0,0 +1,478 @@
1
+ #!/usr/bin/env node
2
+ import fs from "node:fs";
3
+ import path from "node:path";
4
+ import { spawn } from "node:child_process";
5
+ import { Value } from "typebox/value";
6
+ const MAX_STDERR_CHARS = 20_000;
7
+ const MAX_TEXT_CHARS = 100_000;
8
+ const KILL_GRACE_MS = 5_000;
9
+ const argumentMap = () => {
10
+ const result = new Map();
11
+ for (let index = 2; index < process.argv.length; index += 2) {
12
+ const key = process.argv[index];
13
+ const value = process.argv[index + 1];
14
+ if (!key?.startsWith("--") || value === undefined) {
15
+ throw new Error(`Invalid worker argument near ${key ?? "<end>"}`);
16
+ }
17
+ result.set(key.slice(2), value);
18
+ }
19
+ return result;
20
+ };
21
+ const required = (args, name) => {
22
+ const value = args.get(name);
23
+ if (!value)
24
+ throw new Error(`Missing worker argument: --${name}`);
25
+ return value;
26
+ };
27
+ const optional = (args, name) => args.get(name) || undefined;
28
+ const parseOptions = () => {
29
+ const args = argumentMap();
30
+ const model = optional(args, "model");
31
+ const thinking = optional(args, "thinking");
32
+ const fabricExtensionPath = optional(args, "fabric-extension");
33
+ const schemaFile = optional(args, "schema-file");
34
+ const systemPrompt = optional(args, "system-prompt");
35
+ const sessionFile = optional(args, "session-file");
36
+ const actorId = optional(args, "actor-id");
37
+ const actorName = optional(args, "actor-name");
38
+ const meshRoot = optional(args, "mesh-root");
39
+ const runRoot = optional(args, "run-root");
40
+ const branch = optional(args, "branch");
41
+ const worktree = optional(args, "worktree");
42
+ return {
43
+ id: required(args, "id"),
44
+ name: required(args, "name"),
45
+ taskFile: required(args, "task-file"),
46
+ statusFile: required(args, "status-file"),
47
+ logFile: required(args, "log-file"),
48
+ ...(schemaFile ? { schemaFile } : {}),
49
+ cwd: required(args, "cwd"),
50
+ piBinary: required(args, "pi-binary"),
51
+ timeoutMs: Number(required(args, "timeout-ms")),
52
+ depth: Number(required(args, "depth")),
53
+ fullCodeMode: required(args, "full-code-mode") === "true",
54
+ extensions: required(args, "extensions") === "true",
55
+ tools: JSON.parse(required(args, "tools")),
56
+ grantedRisks: JSON.parse(required(args, "granted-risks")),
57
+ transport: required(args, "transport"),
58
+ ...(fabricExtensionPath ? { fabricExtensionPath } : {}),
59
+ ...(model ? { model } : {}),
60
+ ...(thinking ? { thinking } : {}),
61
+ ...(systemPrompt ? { systemPrompt } : {}),
62
+ ...(sessionFile ? { sessionFile } : {}),
63
+ ...(actorId ? { actorId } : {}),
64
+ ...(actorName ? { actorName } : {}),
65
+ ...(meshRoot ? { meshRoot } : {}),
66
+ ...(runRoot ? { runRoot } : {}),
67
+ ...(branch ? { branch } : {}),
68
+ ...(worktree ? { worktree } : {}),
69
+ };
70
+ };
71
+ const emptyUsage = () => ({
72
+ input: 0,
73
+ output: 0,
74
+ cacheRead: 0,
75
+ cacheWrite: 0,
76
+ cost: 0,
77
+ });
78
+ const atomicWrite = (filePath, value) => {
79
+ fs.mkdirSync(path.dirname(filePath), { recursive: true });
80
+ const temporaryPath = `${filePath}.${process.pid}.tmp`;
81
+ fs.writeFileSync(temporaryPath, JSON.stringify(value, null, 2), {
82
+ encoding: "utf8",
83
+ mode: 0o600,
84
+ });
85
+ fs.renameSync(temporaryPath, filePath);
86
+ };
87
+ const extractText = (message) => {
88
+ const content = message.content;
89
+ if (typeof content === "string")
90
+ return content;
91
+ if (!Array.isArray(content))
92
+ return "";
93
+ return content
94
+ .filter((part) => typeof part === "object" &&
95
+ part !== null &&
96
+ part.type === "text" &&
97
+ typeof part.text === "string")
98
+ .map((part) => part.text)
99
+ .join("");
100
+ };
101
+ const numberField = (value) => (typeof value === "number" ? value : 0);
102
+ const applyUsage = (record, message) => {
103
+ const usage = message.usage;
104
+ if (typeof usage !== "object" || usage === null)
105
+ return;
106
+ const values = usage;
107
+ record.usage.input += numberField(values.input);
108
+ record.usage.output += numberField(values.output);
109
+ record.usage.cacheRead += numberField(values.cacheRead);
110
+ record.usage.cacheWrite += numberField(values.cacheWrite);
111
+ const cost = values.cost;
112
+ if (typeof cost === "number")
113
+ record.usage.cost += cost;
114
+ if (typeof cost === "object" && cost !== null) {
115
+ record.usage.cost += numberField(cost.total);
116
+ }
117
+ };
118
+ const stringField = (value) => typeof value === "string" && value.trim() ? value.trim() : undefined;
119
+ const assistantError = (message) => {
120
+ const details = [];
121
+ const direct = stringField(message.errorMessage) ?? stringField(message.error);
122
+ if (direct)
123
+ details.push(direct);
124
+ if (Array.isArray(message.diagnostics)) {
125
+ for (const diagnostic of message.diagnostics) {
126
+ if (typeof diagnostic !== "object" || diagnostic === null || Array.isArray(diagnostic))
127
+ continue;
128
+ const record = diagnostic;
129
+ const nested = typeof record.error === "object" && record.error !== null && !Array.isArray(record.error)
130
+ ? record.error
131
+ : undefined;
132
+ const detail = stringField(nested?.message) ?? stringField(record.message);
133
+ if (detail)
134
+ details.push(detail);
135
+ }
136
+ }
137
+ const unique = [...new Set(details)];
138
+ const provider = stringField(message.provider);
139
+ const model = stringField(message.model);
140
+ const source = [provider, model].filter((value) => Boolean(value)).join("/");
141
+ const summary = unique.join(" · ") || "Pi agent reported an error";
142
+ return `${source ? `${source}: ` : ""}${summary}`.slice(0, MAX_STDERR_CHARS);
143
+ };
144
+ const terminateChild = (child, signal) => {
145
+ if (!child.pid)
146
+ return;
147
+ try {
148
+ process.kill(process.platform === "win32" ? child.pid : -child.pid, signal);
149
+ }
150
+ catch { /* child process group already exited */ }
151
+ };
152
+ const extractBalancedJson = (text, start) => {
153
+ const open = text[start];
154
+ if (open !== "{" && open !== "[")
155
+ return null;
156
+ const close = open === "{" ? "}" : "]";
157
+ let depth = 0;
158
+ let inString = false;
159
+ let escaped = false;
160
+ for (let i = start; i < text.length; i++) {
161
+ const ch = text[i];
162
+ if (inString) {
163
+ if (escaped)
164
+ escaped = false;
165
+ else if (ch === "\\")
166
+ escaped = true;
167
+ else if (ch === '"')
168
+ inString = false;
169
+ continue;
170
+ }
171
+ if (ch === '"')
172
+ inString = true;
173
+ else if (ch === open)
174
+ depth++;
175
+ else if (ch === close) {
176
+ depth--;
177
+ if (depth === 0)
178
+ return text.slice(start, i + 1);
179
+ }
180
+ }
181
+ return null;
182
+ };
183
+ const parseStructuredValue = (text) => {
184
+ const trimmed = text.trim();
185
+ try {
186
+ return JSON.parse(trimmed);
187
+ }
188
+ catch {
189
+ // Whole text is not JSON; try extraction below.
190
+ }
191
+ const fenced = trimmed.match(/```(?:json)?\s*\n([\s\S]*?)\n```/i);
192
+ if (fenced?.[1]) {
193
+ try {
194
+ return JSON.parse(fenced[1].trim());
195
+ }
196
+ catch {
197
+ // Fenced block is not JSON; try balanced extraction below.
198
+ }
199
+ }
200
+ const start = trimmed.search(/[{\[]/);
201
+ if (start >= 0) {
202
+ const balanced = extractBalancedJson(trimmed, start);
203
+ if (balanced)
204
+ return JSON.parse(balanced);
205
+ }
206
+ return JSON.parse(trimmed);
207
+ };
208
+ const main = async () => {
209
+ const options = parseOptions();
210
+ const thinking = options.thinking === "off" ||
211
+ options.thinking === "minimal" ||
212
+ options.thinking === "low" ||
213
+ options.thinking === "medium" ||
214
+ options.thinking === "high" ||
215
+ options.thinking === "xhigh" ||
216
+ options.thinking === "max"
217
+ ? options.thinking
218
+ : undefined;
219
+ const task = fs.readFileSync(options.taskFile, "utf8");
220
+ const startedAt = Date.now();
221
+ const record = {
222
+ id: options.id,
223
+ name: options.name,
224
+ task,
225
+ status: "running",
226
+ transport: options.transport,
227
+ cwd: options.cwd,
228
+ ...(options.model ? { model: options.model } : {}),
229
+ ...(thinking ? { thinking } : {}),
230
+ ...(options.actorId ? { actorId: options.actorId } : {}),
231
+ ...(options.actorName ? { actorName: options.actorName } : {}),
232
+ startedAt,
233
+ updatedAt: startedAt,
234
+ turns: 0,
235
+ toolCalls: 0,
236
+ text: "",
237
+ usage: emptyUsage(),
238
+ logFile: options.logFile,
239
+ ...(options.branch ? { branch: options.branch } : {}),
240
+ ...(options.worktree ? { worktree: options.worktree } : {}),
241
+ };
242
+ atomicWrite(options.statusFile, record);
243
+ process.stdout.write(`[pi-fabric] ${options.name}\n${task}\n\n`);
244
+ fs.mkdirSync(path.dirname(options.logFile), { recursive: true });
245
+ const logStream = fs.createWriteStream(options.logFile, { flags: "a", mode: 0o600 });
246
+ const piArguments = ["--mode", "rpc"];
247
+ if (options.sessionFile)
248
+ piArguments.push("--session", options.sessionFile);
249
+ else
250
+ piArguments.push("--no-session");
251
+ if (!options.extensions)
252
+ piArguments.push("--no-extensions");
253
+ if (options.fabricExtensionPath)
254
+ piArguments.push("-e", options.fabricExtensionPath);
255
+ if (options.tools.length > 0)
256
+ piArguments.push("--tools", options.tools.join(","));
257
+ if (options.model)
258
+ piArguments.push("--model", options.model);
259
+ if (options.thinking)
260
+ piArguments.push("--thinking", options.thinking);
261
+ if (options.systemPrompt)
262
+ piArguments.push("--append-system-prompt", options.systemPrompt);
263
+ if (options.schemaFile) {
264
+ const schema = fs.readFileSync(options.schemaFile, "utf8");
265
+ piArguments.push("--append-system-prompt", `Your final response must contain only JSON matching this schema, without Markdown fences:\n${schema}`);
266
+ }
267
+ const child = spawn(options.piBinary, piArguments, {
268
+ cwd: options.cwd,
269
+ detached: process.platform !== "win32",
270
+ env: {
271
+ ...process.env,
272
+ PI_FABRIC_DEPTH: String(options.depth),
273
+ PI_FABRIC_PARENT_RUN: options.id,
274
+ PI_FABRIC_GRANTED_RISKS: options.grantedRisks.join(","),
275
+ PI_FABRIC_FULL_CODE_MODE: String(options.fullCodeMode),
276
+ ...(options.actorId ? { PI_FABRIC_ACTOR_ID: options.actorId } : {}),
277
+ ...(options.actorName ? { PI_FABRIC_ACTOR_NAME: options.actorName } : {}),
278
+ ...(options.meshRoot ? { PI_FABRIC_MESH_ROOT: options.meshRoot } : {}),
279
+ ...(options.runRoot ? { PI_FABRIC_RUN_ROOT: options.runRoot } : {}),
280
+ },
281
+ stdio: ["pipe", "pipe", "pipe"],
282
+ });
283
+ let stderr = "";
284
+ let outputBuffer = "";
285
+ let terminalStatus;
286
+ let terminalError;
287
+ let sawAgentError = false;
288
+ let retryPending = false;
289
+ const update = () => {
290
+ record.updatedAt = Date.now();
291
+ atomicWrite(options.statusFile, record);
292
+ };
293
+ const processEvent = (line) => {
294
+ if (!line.trim())
295
+ return;
296
+ logStream.write(`${line}\n`);
297
+ let event;
298
+ try {
299
+ const parsed = JSON.parse(line);
300
+ if (typeof parsed !== "object" || parsed === null || Array.isArray(parsed))
301
+ return;
302
+ event = parsed;
303
+ }
304
+ catch {
305
+ return;
306
+ }
307
+ if (event.type === "agent_start") {
308
+ retryPending = false;
309
+ sawAgentError = false;
310
+ terminalError = undefined;
311
+ return;
312
+ }
313
+ if (event.type === "response" && event.command === "prompt" && event.success === false) {
314
+ sawAgentError = true;
315
+ terminalError = typeof event.error === "string" ? event.error : "Pi rejected the prompt";
316
+ child.stdin?.end();
317
+ return;
318
+ }
319
+ if (event.type === "extension_ui_request") {
320
+ const method = event.method;
321
+ if (typeof event.id === "string" &&
322
+ (method === "select" || method === "confirm" || method === "input" || method === "editor")) {
323
+ child.stdin?.write(`${JSON.stringify({ type: "extension_ui_response", id: event.id, cancelled: true })}\n`);
324
+ }
325
+ return;
326
+ }
327
+ if (event.type === "tool_execution_start") {
328
+ record.toolCalls++;
329
+ if (typeof event.toolName === "string") {
330
+ record.currentTool = event.toolName;
331
+ process.stdout.write(`→ ${event.toolName}\n`);
332
+ }
333
+ update();
334
+ return;
335
+ }
336
+ if (event.type === "tool_execution_end") {
337
+ delete record.currentTool;
338
+ update();
339
+ return;
340
+ }
341
+ if (event.type === "turn_end") {
342
+ record.turns++;
343
+ update();
344
+ return;
345
+ }
346
+ if (event.type === "message_end") {
347
+ const message = event.message;
348
+ if (typeof message !== "object" || message === null || Array.isArray(message))
349
+ return;
350
+ const messageRecord = message;
351
+ if (messageRecord.role !== "assistant")
352
+ return;
353
+ const text = extractText(messageRecord);
354
+ if (text) {
355
+ record.text = text.slice(-MAX_TEXT_CHARS);
356
+ process.stdout.write(`\n${text}\n`);
357
+ }
358
+ applyUsage(record, messageRecord);
359
+ if (messageRecord.stopReason === "error") {
360
+ sawAgentError = true;
361
+ terminalError = assistantError(messageRecord);
362
+ }
363
+ else {
364
+ sawAgentError = false;
365
+ terminalError = undefined;
366
+ }
367
+ update();
368
+ return;
369
+ }
370
+ if (event.type === "agent_end") {
371
+ retryPending = event.willRetry === true;
372
+ return;
373
+ }
374
+ if (event.type === "agent_settled") {
375
+ if (!retryPending)
376
+ child.stdin?.end();
377
+ return;
378
+ }
379
+ if (event.type === "extension_error") {
380
+ const error = typeof event.error === "string" ? event.error : "Extension error";
381
+ stderr = `${stderr}\n${error}`.trim().slice(-MAX_STDERR_CHARS);
382
+ update();
383
+ }
384
+ };
385
+ child.stdin?.on("error", () => { });
386
+ child.stdin?.write(`${JSON.stringify({ type: "prompt", message: task })}\n`);
387
+ child.stdout?.on("data", (chunk) => {
388
+ outputBuffer += chunk.toString("utf8");
389
+ while (true) {
390
+ const newline = outputBuffer.indexOf("\n");
391
+ if (newline < 0)
392
+ break;
393
+ const line = outputBuffer.slice(0, newline).replace(/\r$/, "");
394
+ outputBuffer = outputBuffer.slice(newline + 1);
395
+ processEvent(line);
396
+ }
397
+ });
398
+ child.stderr?.on("data", (chunk) => {
399
+ const text = chunk.toString("utf8");
400
+ logStream.write(text);
401
+ process.stderr.write(text);
402
+ stderr = `${stderr}${text}`.slice(-MAX_STDERR_CHARS);
403
+ });
404
+ const timeout = setTimeout(() => {
405
+ terminalStatus = "timed_out";
406
+ terminalError = `Subagent timed out after ${options.timeoutMs}ms`;
407
+ terminateChild(child, "SIGTERM");
408
+ setTimeout(() => terminateChild(child, "SIGKILL"), KILL_GRACE_MS).unref();
409
+ }, options.timeoutMs);
410
+ timeout.unref();
411
+ const stop = () => {
412
+ if (terminalStatus)
413
+ return;
414
+ terminalStatus = "stopped";
415
+ terminalError = "Subagent stopped";
416
+ terminateChild(child, "SIGTERM");
417
+ setTimeout(() => terminateChild(child, "SIGKILL"), KILL_GRACE_MS).unref();
418
+ };
419
+ process.once("SIGTERM", stop);
420
+ process.once("SIGINT", stop);
421
+ process.once("SIGHUP", stop);
422
+ const exitCode = await new Promise((resolve) => {
423
+ child.once("error", (error) => {
424
+ terminalStatus = "failed";
425
+ terminalError = error.message;
426
+ resolve(null);
427
+ });
428
+ child.once("close", (code) => resolve(code));
429
+ });
430
+ clearTimeout(timeout);
431
+ if (outputBuffer.trim())
432
+ processEvent(outputBuffer);
433
+ record.exitCode = exitCode;
434
+ record.stderr = stderr.slice(-MAX_STDERR_CHARS);
435
+ record.finishedAt = Date.now();
436
+ record.updatedAt = record.finishedAt;
437
+ record.status = terminalStatus ?? (exitCode === 0 && !sawAgentError ? "completed" : "failed");
438
+ if (terminalError)
439
+ record.error = terminalError;
440
+ if (record.status === "failed" && !record.error) {
441
+ record.error =
442
+ stderr.trim() ||
443
+ (exitCode === 0
444
+ ? "Pi agent reported an error before exiting"
445
+ : `Pi exited with code ${exitCode ?? "unknown"}`);
446
+ }
447
+ if (record.status === "completed" && options.schemaFile) {
448
+ try {
449
+ const schema = JSON.parse(fs.readFileSync(options.schemaFile, "utf8"));
450
+ const value = parseStructuredValue(record.text);
451
+ if (!Value.Check(schema, value)) {
452
+ const errors = [...Value.Errors(schema, value)]
453
+ .slice(0, 5)
454
+ .map((error) => error.message)
455
+ .join("; ");
456
+ throw new Error(errors || "value does not match schema");
457
+ }
458
+ record.value = value;
459
+ }
460
+ catch (error) {
461
+ record.status = "failed";
462
+ const reason = error instanceof Error ? error.message : String(error);
463
+ const output = record.text.trim();
464
+ const snippet = output.slice(0, 200);
465
+ record.error = `Structured agent output was invalid: ${reason}${snippet ? ` (output: ${snippet}${output.length > 200 ? "…" : ""})` : ""}`;
466
+ }
467
+ }
468
+ delete record.currentTool;
469
+ atomicWrite(options.statusFile, record);
470
+ process.stdout.write(`\n[pi-fabric] ${record.status}\n`);
471
+ await new Promise((resolve) => logStream.end(resolve));
472
+ process.exitCode = record.status === "completed" ? 0 : 1;
473
+ };
474
+ main().catch((error) => {
475
+ console.error(error instanceof Error ? (error.stack ?? error.message) : String(error));
476
+ process.exitCode = 1;
477
+ });
478
+ //# sourceMappingURL=worker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"worker.js","sourceRoot":"","sources":["../src/worker.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,87 @@
1
+ {
2
+ "name": "pi-fabric",
3
+ "version": "0.1.0",
4
+ "description": "A programmable tool and agent runtime for Pi",
5
+ "type": "module",
6
+ "main": "./dist/index.js",
7
+ "types": "./dist/index.d.ts",
8
+ "exports": {
9
+ ".": {
10
+ "types": "./dist/index.d.ts",
11
+ "import": "./dist/index.js"
12
+ },
13
+ "./protocol": {
14
+ "types": "./dist/protocol.d.ts",
15
+ "import": "./dist/protocol.js"
16
+ }
17
+ },
18
+ "files": [
19
+ "dist/",
20
+ "skills/",
21
+ "README.md",
22
+ "LICENSE",
23
+ "THIRD_PARTY_NOTICES.md"
24
+ ],
25
+ "keywords": [
26
+ "pi-package",
27
+ "pi-extension",
28
+ "codemode",
29
+ "mcp",
30
+ "subagents",
31
+ "actors",
32
+ "swarm",
33
+ "workflows",
34
+ "rlm",
35
+ "orchestration"
36
+ ],
37
+ "license": "MIT",
38
+ "author": "monotykamary",
39
+ "repository": {
40
+ "type": "git",
41
+ "url": "git+https://github.com/monotykamary/pi-fabric.git"
42
+ },
43
+ "homepage": "https://github.com/monotykamary/pi-fabric#readme",
44
+ "bugs": {
45
+ "url": "https://github.com/monotykamary/pi-fabric/issues"
46
+ },
47
+ "engines": {
48
+ "node": ">=24"
49
+ },
50
+ "pi": {
51
+ "extensions": [
52
+ "./dist/index.js"
53
+ ],
54
+ "skills": [
55
+ "./skills"
56
+ ],
57
+ "image": "https://raw.githubusercontent.com/monotykamary/pi-fabric/main/media/cover.jpg"
58
+ },
59
+ "dependencies": {
60
+ "@jitl/quickjs-singlefile-mjs-release-sync": "^0.32.0",
61
+ "mcporter": "^0.12.3",
62
+ "pi-code-previews": "^0.1.35",
63
+ "quickjs-emscripten-core": "^0.32.0",
64
+ "shiki": "^4.3.1",
65
+ "typescript": "^6.0.3"
66
+ },
67
+ "peerDependencies": {
68
+ "@earendil-works/pi-coding-agent": ">=0.80.6",
69
+ "@earendil-works/pi-tui": ">=0.80.6",
70
+ "typebox": ">=1.1.38"
71
+ },
72
+ "devDependencies": {
73
+ "@earendil-works/pi-coding-agent": "0.80.6",
74
+ "@earendil-works/pi-tui": "0.80.6",
75
+ "@types/node": "^25.0.0",
76
+ "knip": "^6.26.0",
77
+ "typebox": "1.1.38",
78
+ "vitest": "^4.1.0"
79
+ },
80
+ "scripts": {
81
+ "build": "tsc -p tsconfig.build.json",
82
+ "typecheck": "tsc --noEmit",
83
+ "test": "vitest run",
84
+ "lint:dead": "knip --no-gitignore",
85
+ "check": "pnpm run typecheck && pnpm run test && pnpm run lint:dead && pnpm run build"
86
+ }
87
+ }
@@ -0,0 +1,53 @@
1
+ ---
2
+ name: fabric-advisor
3
+ description: Starts a persistent Pi Fabric peer advisor that reviews the main agent at decision points (idle and tool errors) and surfaces only concrete, material advice. Use for ambient correctness review without another extension.
4
+ disable-model-invocation: true
5
+ ---
6
+
7
+ # Fabric Advisor
8
+
9
+ Start an emergent advisor using `fabric_exec`; never install or invoke an external advisor extension.
10
+
11
+ Treat skill arguments as an optional review focus. Put the completed advisor prompt in `strings.instructions` and the stable name `advisor` in `strings.name`, then call `fabric_exec` once with:
12
+
13
+ ```ts
14
+ await workflow.configure({
15
+ name: `Advisor · ${π.name}`,
16
+ description: "Persistent ambient peer review",
17
+ });
18
+ await phase("Start actor", { total: 1 });
19
+ const current = await agents.actors();
20
+ const existing = current.find((actor) => actor.name === π.name && actor.status !== "stopped");
21
+ if (existing) return { reused: true, actor: existing };
22
+
23
+ const actor = await agents.create({
24
+ name: π.name,
25
+ instructions: π.instructions,
26
+ events: ["agent_settled", "tool_error"],
27
+ responseMode: "directive",
28
+ delivery: "steer",
29
+ triggerTurn: false,
30
+ coalesce: true,
31
+ tools: ["read", "grep", "find", "ls"],
32
+ });
33
+ return {
34
+ started: true,
35
+ actor,
36
+ inspect: `/fabric messages ${actor.id.slice(0, 8)}`,
37
+ stop: `/fabric stop ${actor.id.slice(0, 8)}`,
38
+ };
39
+ ```
40
+
41
+ Use this prompt and append the requested focus when one was supplied:
42
+
43
+ ```text
44
+ You are an ambient peer advisor for the main coding agent. You review at decision points: when the agent settles (goes idle) and when a tool errors. Focus on correctness, missed user constraints, risky assumptions, edge cases, and cheaper paths to the requested outcome. You are not a second executor. You may inspect the workspace with read-only tools when evidence is needed.
45
+
46
+ Prefer silence. Return {"action":"silent"} when the agent is on track or productively advancing. Return {"action":"message","message":"..."} only for one concrete, material observation that could prevent wasted work or a defect, raised at a moment it can still help. Cite the evidence and recommendation tersely and frame it as advice to weigh, not an order. Do not repeat advice already visible in the recent transcript. Ignore minor style preferences unless the user made them requirements.
47
+ ```
48
+
49
+ ## Heuristic: review on good signals, not every turn
50
+
51
+ The advisor subscribes to `agent_settled` and `tool_error`, not `turn_end`. It runs at decision points (idle and on failures) and stays silent otherwise, so it does not invoke a model review on every turn. Intervene only on a concrete, high-confidence signal: a material correctness gap, a missed constraint, a risky assumption, or a tool error worth surfacing.
52
+
53
+ After creation, report the focus, actor short ID, and inspect/stop commands. Do not wait for it. `triggerTurn: false` is intentional: delivered advice joins the main loop without forcing a new turn (advice to weigh, not an order).