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
@@ -0,0 +1,120 @@
1
+ import { safeText } from "./format.js";
2
+ import { activeStatuses, } from "./types.js";
3
+ const isRunRecord = (value) => "startedAt" in value;
4
+ const numberFrom = (value) => typeof value === "number" && Number.isFinite(value) ? value : undefined;
5
+ const stateEntry = (entry) => {
6
+ const value = typeof entry.value === "object" && entry.value !== null && !Array.isArray(entry.value)
7
+ ? entry.value
8
+ : undefined;
9
+ const label = safeText(value?.title ?? value?.label ?? value?.name ?? value?.task ?? entry.key).slice(0, 160);
10
+ const status = safeText(value?.status ?? value?.state ?? "state").toLowerCase() || "state";
11
+ const owner = safeText(value?.owner ?? value?.claimedBy ?? value?.claimed_by);
12
+ const detail = safeText(value?.current ?? value?.activity ?? value?.description ?? value?.summary);
13
+ return {
14
+ key: entry.key,
15
+ label: label || entry.key,
16
+ status,
17
+ value: entry.value,
18
+ version: entry.version,
19
+ updatedAt: entry.updatedAt,
20
+ ...(owner ? { owner } : {}),
21
+ ...(detail ? { detail: detail.slice(0, 500) } : {}),
22
+ };
23
+ };
24
+ export const createDashboardSnapshot = (state, events) => {
25
+ const runs = state.activity.runs();
26
+ const agentRecords = state.subagents.list();
27
+ const agentFromRecord = (record, parentId) => {
28
+ const linked = parentId
29
+ ? undefined
30
+ : runs
31
+ .flatMap((run) => run.calls.map((call) => ({ runId: run.id, call })))
32
+ .find(({ call }) => call.entityId &&
33
+ (record.id.startsWith(call.entityId) || call.entityId.startsWith(record.id)));
34
+ const base = {
35
+ id: record.id,
36
+ name: record.name,
37
+ status: record.status,
38
+ transport: record.transport,
39
+ cwd: record.cwd,
40
+ ...(record.model ? { model: record.model } : {}),
41
+ ...(record.thinking ? { thinking: record.thinking } : {}),
42
+ ...(record.attachCommand ? { attachCommand: record.attachCommand } : {}),
43
+ ...(record.branch ? { branch: record.branch } : {}),
44
+ ...(record.worktree ? { worktree: record.worktree } : {}),
45
+ ...(record.actorId ? { actorId: record.actorId } : {}),
46
+ ...(record.actorName ? { actorName: record.actorName } : {}),
47
+ ...(parentId ? { parentId } : {}),
48
+ ...(linked ? { runId: linked.runId } : {}),
49
+ ...(linked?.call.phaseId ? { phaseId: linked.call.phaseId } : {}),
50
+ };
51
+ if (!isRunRecord(record))
52
+ return base;
53
+ return {
54
+ ...base,
55
+ task: record.task,
56
+ startedAt: record.startedAt,
57
+ updatedAt: record.updatedAt,
58
+ ...(record.finishedAt !== undefined ? { finishedAt: record.finishedAt } : {}),
59
+ ...(record.currentTool ? { currentTool: record.currentTool } : {}),
60
+ turns: record.turns,
61
+ toolCalls: record.toolCalls,
62
+ usage: { ...record.usage },
63
+ ...(record.text ? { text: record.text } : {}),
64
+ ...(record.error ? { error: record.error } : {}),
65
+ };
66
+ };
67
+ const allAgents = [];
68
+ for (const record of agentRecords) {
69
+ allAgents.push(agentFromRecord(record));
70
+ if (isRunRecord(record) && record.nestedAgents) {
71
+ for (const nested of record.nestedAgents) {
72
+ allAgents.push(agentFromRecord(nested, record.id));
73
+ }
74
+ }
75
+ }
76
+ const actors = state.actors.list().map((actor) => {
77
+ const worker = allAgents.find((agent) => agent.actorId === actor.id);
78
+ return {
79
+ ...actor,
80
+ recentMessages: state.actors.messages(actor.id, 12),
81
+ ...(worker ? { worker } : {}),
82
+ };
83
+ });
84
+ const agents = allAgents.filter((agent) => !agent.actorId);
85
+ const meshEntries = state.config.mesh.enabled ? state.mesh.list("", 200) : [];
86
+ const stateEntries = meshEntries
87
+ .filter((entry) => !entry.key.startsWith("actors/"))
88
+ .map(stateEntry)
89
+ .sort((left, right) => {
90
+ const leftActive = activeStatuses.has(left.status) ? 1 : 0;
91
+ const rightActive = activeStatuses.has(right.status) ? 1 : 0;
92
+ return rightActive - leftActive || right.updatedAt - left.updatedAt;
93
+ })
94
+ .slice(0, 120);
95
+ return {
96
+ now: Date.now(),
97
+ runs,
98
+ widgetDismissedAt: state.widgetDismissedAt,
99
+ agents: agents.sort((left, right) => {
100
+ const leftActive = activeStatuses.has(left.status) ? 1 : 0;
101
+ const rightActive = activeStatuses.has(right.status) ? 1 : 0;
102
+ if (rightActive !== leftActive)
103
+ return rightActive - leftActive;
104
+ if (right.parentId === left.id)
105
+ return -1;
106
+ if (left.parentId === right.id)
107
+ return 1;
108
+ return ((numberFrom(right.updatedAt) ?? numberFrom(right.startedAt) ?? 0) -
109
+ (numberFrom(left.updatedAt) ?? numberFrom(left.startedAt) ?? 0));
110
+ }),
111
+ actors: actors.sort((left, right) => {
112
+ const leftActive = activeStatuses.has(left.status) ? 1 : 0;
113
+ const rightActive = activeStatuses.has(right.status) ? 1 : 0;
114
+ return rightActive - leftActive || right.updatedAt - left.updatedAt;
115
+ }),
116
+ state: stateEntries,
117
+ events: events.map((event) => structuredClone(event)),
118
+ };
119
+ };
120
+ //# sourceMappingURL=snapshot.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"snapshot.js","sourceRoot":"","sources":["../../src/ui/snapshot.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,57 @@
1
+ import type { FabricActorInfo, FabricActorMessage } from "../actors/types.js";
2
+ import type { FabricActivityRun } from "../activity/types.js";
3
+ import type { MeshEvent } from "../mesh/store.js";
4
+ import type { SubagentUsage } from "../subagents/types.js";
5
+ export interface FabricUiAgent {
6
+ id: string;
7
+ name: string;
8
+ status: string;
9
+ transport: string;
10
+ cwd: string;
11
+ task?: string;
12
+ model?: string;
13
+ thinking?: string;
14
+ currentTool?: string;
15
+ startedAt?: number;
16
+ updatedAt?: number;
17
+ finishedAt?: number;
18
+ turns?: number;
19
+ toolCalls?: number;
20
+ usage?: SubagentUsage;
21
+ text?: string;
22
+ error?: string;
23
+ attachCommand?: string;
24
+ branch?: string;
25
+ worktree?: string;
26
+ actorId?: string;
27
+ actorName?: string;
28
+ runId?: string;
29
+ phaseId?: string;
30
+ parentId?: string;
31
+ }
32
+ export interface FabricUiActor extends FabricActorInfo {
33
+ recentMessages: FabricActorMessage[];
34
+ worker?: FabricUiAgent;
35
+ }
36
+ export interface FabricUiStateEntry {
37
+ key: string;
38
+ label: string;
39
+ status: string;
40
+ owner?: string;
41
+ detail?: string;
42
+ value: unknown;
43
+ version: number;
44
+ updatedAt: number;
45
+ }
46
+ export interface FabricDashboardSnapshot {
47
+ now: number;
48
+ widgetDismissedAt?: number;
49
+ runs: FabricActivityRun[];
50
+ agents: FabricUiAgent[];
51
+ actors: FabricUiActor[];
52
+ state: FabricUiStateEntry[];
53
+ events: MeshEvent[];
54
+ }
55
+ export declare const activeStatuses: Set<string>;
56
+ export declare const isActiveStatus: (status: string) => boolean;
57
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/ui/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAC9E,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAC9D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAE3D,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,aAAa,CAAC;IACtB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,aAAc,SAAQ,eAAe;IACpD,cAAc,EAAE,kBAAkB,EAAE,CAAC;IACrC,MAAM,CAAC,EAAE,aAAa,CAAC;CACxB;AAED,MAAM,WAAW,kBAAkB;IACjC,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,OAAO,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,uBAAuB;IACtC,GAAG,EAAE,MAAM,CAAC;IACZ,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,IAAI,EAAE,iBAAiB,EAAE,CAAC;IAC1B,MAAM,EAAE,aAAa,EAAE,CAAC;IACxB,MAAM,EAAE,aAAa,EAAE,CAAC;IACxB,KAAK,EAAE,kBAAkB,EAAE,CAAC;IAC5B,MAAM,EAAE,SAAS,EAAE,CAAC;CACrB;AAED,eAAO,MAAM,cAAc,aAQzB,CAAC;AAEH,eAAO,MAAM,cAAc,GAAI,QAAQ,MAAM,KAAG,OAAqC,CAAC"}
@@ -0,0 +1,11 @@
1
+ export const activeStatuses = new Set([
2
+ "queued",
3
+ "pending",
4
+ "ready",
5
+ "claimed",
6
+ "running",
7
+ "in_progress",
8
+ "blocked",
9
+ ]);
10
+ export const isActiveStatus = (status) => activeStatuses.has(status);
11
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/ui/types.ts"],"names":[],"mappings":"AA2DA,MAAM,CAAC,MAAM,cAAc,GAAG,IAAI,GAAG,CAAC;IACpC,QAAQ;IACR,SAAS;IACT,OAAO;IACP,SAAS;IACT,SAAS;IACT,aAAa;IACb,SAAS;CACV,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,MAAc,EAAW,EAAE,CAAC,cAAc,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC"}
@@ -0,0 +1,16 @@
1
+ import type { Component } from "@earendil-works/pi-tui";
2
+ import type { Theme } from "@earendil-works/pi-coding-agent";
3
+ import type { FabricUiWidgetMode } from "../config.js";
4
+ import { type FabricDashboardSnapshot } from "./types.js";
5
+ export declare const shouldShowFabricWidget: (snapshot: FabricDashboardSnapshot, mode: FabricUiWidgetMode) => boolean;
6
+ export declare class FabricWidget implements Component {
7
+ #private;
8
+ readonly theme: Theme;
9
+ readonly snapshot: () => FabricDashboardSnapshot;
10
+ readonly maxRows: number;
11
+ constructor(theme: Theme, snapshot: () => FabricDashboardSnapshot, maxRows: number);
12
+ render(width: number): string[];
13
+ hasChanged(): boolean;
14
+ invalidate(): void;
15
+ }
16
+ //# sourceMappingURL=widget.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"widget.d.ts","sourceRoot":"","sources":["../../src/ui/widget.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AAExD,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,iCAAiC,CAAC;AAC7D,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAGvD,OAAO,EAEL,KAAK,uBAAuB,EAG7B,MAAM,YAAY,CAAC;AA2FpB,eAAO,MAAM,sBAAsB,GACjC,UAAU,uBAAuB,EACjC,MAAM,kBAAkB,KACvB,OAWF,CAAC;AAEF,qBAAa,YAAa,YAAW,SAAS;;IAE1C,QAAQ,CAAC,KAAK,EAAE,KAAK;IACrB,QAAQ,CAAC,QAAQ,EAAE,MAAM,uBAAuB;IAChD,QAAQ,CAAC,OAAO,EAAE,MAAM;gBAFf,KAAK,EAAE,KAAK,EACZ,QAAQ,EAAE,MAAM,uBAAuB,EACvC,OAAO,EAAE,MAAM;IAM1B,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE;IAS/B,UAAU,IAAI,OAAO;IAOrB,UAAU,IAAI,IAAI;CA0FnB"}
@@ -0,0 +1,199 @@
1
+ import { truncateToWidth } from "@earendil-works/pi-tui";
2
+ import { formatDuration, formatTokens, safeText } from "./format.js";
3
+ import { isActiveStatus, } from "./types.js";
4
+ const spinnerFrames = ["◐", "◓", "◑", "◒"];
5
+ const statusGlyph = (status) => {
6
+ if (status === "completed" || status === "done")
7
+ return "✓";
8
+ if (status === "failed" || status === "timed_out")
9
+ return "✗";
10
+ if (status === "blocked")
11
+ return "!";
12
+ if (status === "stopped" || status === "cancelled")
13
+ return "■";
14
+ if (status === "queued" || status === "pending" || status === "ready")
15
+ return "○";
16
+ if (status === "idle" || status === "state")
17
+ return "·";
18
+ return spinnerFrames[Math.floor(Date.now() / 250) % spinnerFrames.length] ?? "●";
19
+ };
20
+ const colorStatus = (theme, status, value) => {
21
+ if (status === "completed" || status === "done")
22
+ return theme.fg("success", value);
23
+ if (status === "failed" || status === "timed_out")
24
+ return theme.fg("error", value);
25
+ if (status === "blocked")
26
+ return theme.fg("warning", value);
27
+ if (status === "running" || status === "in_progress")
28
+ return theme.fg("accent", value);
29
+ return theme.fg("dim", value);
30
+ };
31
+ const phaseProgress = (run, phaseId) => {
32
+ const phase = run.phases.find((candidate) => candidate.id === phaseId);
33
+ const statuses = [
34
+ ...run.calls.filter((call) => call.phaseId === phaseId).map((call) => call.status),
35
+ ...run.items.filter((item) => item.phaseId === phaseId).map((item) => item.status),
36
+ ];
37
+ const completed = statuses.filter((status) => status === "completed").length;
38
+ return { completed, total: Math.max(phase?.total ?? 0, statuses.length) };
39
+ };
40
+ const totalTokens = (snapshot, run) => snapshot.agents
41
+ .filter((agent) => (run ? agent.runId === run.id : isActiveStatus(agent.status)))
42
+ .reduce((sum, agent) => sum + (agent.usage ? agent.usage.input + agent.usage.output : 0), 0);
43
+ const agentLine = (theme, agent, now) => {
44
+ const status = colorStatus(theme, agent.status, statusGlyph(agent.status));
45
+ const activity = agent.currentTool ?? (agent.status === "running" ? "thinking" : agent.status);
46
+ const metrics = [
47
+ agent.toolCalls !== undefined ? `${agent.toolCalls} calls` : undefined,
48
+ agent.usage ? `${formatTokens(agent.usage.input + agent.usage.output)} tok` : undefined,
49
+ agent.startedAt
50
+ ? formatDuration((agent.finishedAt ?? now) - agent.startedAt)
51
+ : undefined,
52
+ ].filter((value) => Boolean(value));
53
+ const indent = agent.parentId ? " " : " ";
54
+ return `${indent}${status} ${safeText(agent.name)} ${theme.fg("muted", safeText(activity))}${metrics.length > 0 ? theme.fg("dim", ` · ${metrics.join(" · ")}`) : ""}`;
55
+ };
56
+ const actorStream = (actor) => {
57
+ const last = actor.recentMessages[actor.recentMessages.length - 1];
58
+ if (!last)
59
+ return "";
60
+ if (last.direction === "out") {
61
+ if (last.error)
62
+ return `← ✗ ${truncateToWidth(safeText(last.error), 48)}`;
63
+ if (last.text)
64
+ return `← ${truncateToWidth(safeText(last.text), 48)}`;
65
+ if (last.action)
66
+ return `← ${last.action}`;
67
+ return "";
68
+ }
69
+ return `→ ${last.source}`;
70
+ };
71
+ const actorLine = (theme, actor) => {
72
+ const effectiveStatus = actor.lastError ? "failed" : actor.status;
73
+ const status = colorStatus(theme, effectiveStatus, statusGlyph(effectiveStatus));
74
+ const workerActivity = actor.worker?.currentTool;
75
+ const activity = workerActivity ?? actor.status;
76
+ const queue = actor.queued > 0 ? ` · q:${actor.queued}` : "";
77
+ const messages = actor.messages > 0 ? ` · ${actor.messages} msg` : "";
78
+ const usage = actor.worker?.usage
79
+ ? ` · ${formatTokens(actor.worker.usage.input + actor.worker.usage.output)} tok`
80
+ : "";
81
+ const stream = actorStream(actor);
82
+ return ` ${status} ${safeText(actor.name)} ${theme.fg("muted", safeText(activity))}${stream ? theme.fg("muted", ` · ${stream}`) : ""}${theme.fg("dim", `${queue}${messages}${usage}`)}`;
83
+ };
84
+ export const shouldShowFabricWidget = (snapshot, mode) => {
85
+ if (mode === "hidden")
86
+ return false;
87
+ if (mode === "always")
88
+ return true;
89
+ if (snapshot.agents.some((agent) => isActiveStatus(agent.status)))
90
+ return true;
91
+ if (snapshot.actors.some((actor) => actor.status !== "stopped"))
92
+ return true;
93
+ if (snapshot.state.some((entry) => isActiveStatus(entry.status)))
94
+ return true;
95
+ const run = snapshot.runs[0];
96
+ if (!run)
97
+ return false;
98
+ if (run.status === "running")
99
+ return true;
100
+ const finishedAt = run.finishedAt ?? run.updatedAt;
101
+ return finishedAt >= (snapshot.widgetDismissedAt ?? 0);
102
+ };
103
+ export class FabricWidget {
104
+ theme;
105
+ snapshot;
106
+ maxRows;
107
+ constructor(theme, snapshot, maxRows) {
108
+ this.theme = theme;
109
+ this.snapshot = snapshot;
110
+ this.maxRows = maxRows;
111
+ }
112
+ #lastWidth;
113
+ #lastLines;
114
+ render(width) {
115
+ if (width <= 0)
116
+ return [];
117
+ const content = this.#buildContent();
118
+ const lines = this.#boundContent(content, width);
119
+ this.#lastWidth = width;
120
+ this.#lastLines = lines;
121
+ return lines;
122
+ }
123
+ hasChanged() {
124
+ if (this.#lastWidth === undefined || this.#lastLines === undefined)
125
+ return true;
126
+ const content = this.#buildContent();
127
+ const lines = this.#boundContent(content, this.#lastWidth);
128
+ return JSON.stringify(lines) !== JSON.stringify(this.#lastLines);
129
+ }
130
+ invalidate() { }
131
+ #buildContent() {
132
+ const snapshot = this.snapshot();
133
+ const candidateRun = snapshot.runs[0];
134
+ const candidateFinishedAt = candidateRun?.finishedAt ?? candidateRun?.updatedAt ?? 0;
135
+ const run = candidateRun &&
136
+ (candidateRun.status === "running" ||
137
+ candidateFinishedAt >= (snapshot.widgetDismissedAt ?? 0))
138
+ ? candidateRun
139
+ : undefined;
140
+ const activeAgents = snapshot.agents.filter((agent) => isActiveStatus(agent.status));
141
+ const visibleActors = snapshot.actors.filter((actor) => actor.status !== "stopped");
142
+ const activeState = snapshot.state.filter((entry) => isActiveStatus(entry.status));
143
+ const nestedCalls = run?.calls.filter((call) => call.kind !== "agent" && call.kind !== "actor") ?? [];
144
+ const runningItems = run?.items.filter((item) => isActiveStatus(item.status)) ?? [];
145
+ const title = run?.name ?? "Fabric session";
146
+ const headerStatus = run?.status ?? (activeAgents.length > 0 ? "running" : "idle");
147
+ const parts = [];
148
+ const callTotal = nestedCalls.length;
149
+ if (callTotal > 1) {
150
+ const callDone = nestedCalls.filter((call) => call.status === "completed" || call.status === "failed").length;
151
+ parts.push(`${callDone}/${callTotal} calls`);
152
+ }
153
+ if (run?.currentPhaseId) {
154
+ const phaseIndex = run.phases.findIndex((phase) => phase.id === run.currentPhaseId);
155
+ const phase = run.phases[phaseIndex];
156
+ if (phase) {
157
+ const progress = phaseProgress(run, phase.id);
158
+ parts.push(`${phaseIndex + 1}/${run.phases.length} ${safeText(phase.name)}${progress.total > 0 ? ` ${progress.completed}/${progress.total}` : ""}`);
159
+ }
160
+ }
161
+ if (activeAgents.length > 0)
162
+ parts.push(`${activeAgents.length} running`);
163
+ if (visibleActors.length > 0)
164
+ parts.push(`${visibleActors.length} actor${visibleActors.length === 1 ? "" : "s"}`);
165
+ const tokens = totalTokens(snapshot, run);
166
+ if (tokens > 0)
167
+ parts.push(`${formatTokens(tokens)} tok`);
168
+ if (run)
169
+ parts.push(formatDuration((run.finishedAt ?? snapshot.now) - run.startedAt));
170
+ const glyph = colorStatus(this.theme, headerStatus, statusGlyph(headerStatus));
171
+ const header = `${glyph} ${this.theme.fg("accent", "Fabric")} ${this.theme.fg("text", safeText(title))}${parts.length > 0 ? this.theme.fg("dim", ` · ${parts.join(" · ")}`) : ""}`;
172
+ const lines = [header];
173
+ for (const agent of activeAgents)
174
+ lines.push(agentLine(this.theme, agent, snapshot.now));
175
+ for (const actor of visibleActors)
176
+ lines.push(actorLine(this.theme, actor));
177
+ for (const item of runningItems) {
178
+ const current = item.current ?? item.detail;
179
+ const progress = item.total !== undefined
180
+ ? ` · ${item.completed ?? 0}/${item.total}`
181
+ : current
182
+ ? ` · ${safeText(current)}`
183
+ : "";
184
+ lines.push(` ${colorStatus(this.theme, item.status, statusGlyph(item.status))} ${safeText(item.label)}${this.theme.fg("dim", progress)}`);
185
+ }
186
+ for (const entry of activeState) {
187
+ lines.push(` ${colorStatus(this.theme, entry.status, statusGlyph(entry.status))} ${safeText(entry.label)}${this.theme.fg("dim", ` · ${entry.owner ?? entry.status}`)}`);
188
+ }
189
+ return lines;
190
+ }
191
+ #boundContent(content, width) {
192
+ const bounded = content.slice(0, Math.max(1, this.maxRows));
193
+ if (content.length > bounded.length && bounded.length > 0) {
194
+ bounded[bounded.length - 1] = `${bounded[bounded.length - 1]} ${this.theme.fg("dim", `+${content.length - bounded.length}`)}`;
195
+ }
196
+ return bounded.map((line) => truncateToWidth(line, width));
197
+ }
198
+ }
199
+ //# sourceMappingURL=widget.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"widget.js","sourceRoot":"","sources":["../../src/ui/widget.ts"],"names":[],"mappings":"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"}
package/dist/util.d.ts ADDED
@@ -0,0 +1,2 @@
1
+ export declare const truncateMiddle: (value: string, maxChars: number) => string;
2
+ //# sourceMappingURL=util.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"util.d.ts","sourceRoot":"","sources":["../src/util.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,cAAc,GAAI,OAAO,MAAM,EAAE,UAAU,MAAM,KAAG,MAOhE,CAAC"}
package/dist/util.js ADDED
@@ -0,0 +1,10 @@
1
+ export const truncateMiddle = (value, maxChars) => {
2
+ if (value.length <= maxChars)
3
+ return value;
4
+ const marker = `\n\n... ${value.length - maxChars} characters omitted by Pi Fabric ...\n\n`;
5
+ const available = Math.max(0, maxChars - marker.length);
6
+ const head = Math.ceil(available / 2);
7
+ const tail = Math.floor(available / 2);
8
+ return `${value.slice(0, head)}${marker}${value.slice(value.length - tail)}`;
9
+ };
10
+ //# sourceMappingURL=util.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"util.js","sourceRoot":"","sources":["../src/util.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,KAAa,EAAE,QAAgB,EAAU,EAAE;IACxE,IAAI,KAAK,CAAC,MAAM,IAAI,QAAQ;QAAE,OAAO,KAAK,CAAC;IAC3C,MAAM,MAAM,GAAG,WAAW,KAAK,CAAC,MAAM,GAAG,QAAQ,0CAA0C,CAAC;IAC5F,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC;IACxD,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC,CAAC;IACtC,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,GAAG,CAAC,CAAC,CAAC;IACvC,OAAO,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,MAAM,GAAG,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC,EAAE,CAAC;AAC/E,CAAC,CAAC"}
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=worker.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"worker.d.ts","sourceRoot":"","sources":["../src/worker.ts"],"names":[],"mappings":""}