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.
- package/LICENSE +21 -0
- package/README.md +635 -0
- package/THIRD_PARTY_NOTICES.md +9 -0
- package/dist/activity/store.d.ts +27 -0
- package/dist/activity/store.d.ts.map +1 -0
- package/dist/activity/store.js +474 -0
- package/dist/activity/store.js.map +1 -0
- package/dist/activity/types.d.ts +101 -0
- package/dist/activity/types.d.ts.map +1 -0
- package/dist/activity/types.js +2 -0
- package/dist/activity/types.js.map +1 -0
- package/dist/actors/context.d.ts +13 -0
- package/dist/actors/context.d.ts.map +1 -0
- package/dist/actors/context.js +155 -0
- package/dist/actors/context.js.map +1 -0
- package/dist/actors/manager.d.ts +33 -0
- package/dist/actors/manager.d.ts.map +1 -0
- package/dist/actors/manager.js +751 -0
- package/dist/actors/manager.js.map +1 -0
- package/dist/actors/types.d.ts +67 -0
- package/dist/actors/types.d.ts.map +1 -0
- package/dist/actors/types.js +2 -0
- package/dist/actors/types.js.map +1 -0
- package/dist/capture/catalog.d.ts +23 -0
- package/dist/capture/catalog.d.ts.map +1 -0
- package/dist/capture/catalog.js +53 -0
- package/dist/capture/catalog.js.map +1 -0
- package/dist/capture/interceptor.d.ts +13 -0
- package/dist/capture/interceptor.d.ts.map +1 -0
- package/dist/capture/interceptor.js +130 -0
- package/dist/capture/interceptor.js.map +1 -0
- package/dist/commands/fabric.d.ts +14 -0
- package/dist/commands/fabric.d.ts.map +1 -0
- package/dist/commands/fabric.js +237 -0
- package/dist/commands/fabric.js.map +1 -0
- package/dist/config.d.ts +89 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +255 -0
- package/dist/config.js.map +1 -0
- package/dist/core/action-registry.d.ts +71 -0
- package/dist/core/action-registry.d.ts.map +1 -0
- package/dist/core/action-registry.js +273 -0
- package/dist/core/action-registry.js.map +1 -0
- package/dist/core/approval-controller.d.ts +11 -0
- package/dist/core/approval-controller.d.ts.map +1 -0
- package/dist/core/approval-controller.js +45 -0
- package/dist/core/approval-controller.js.map +1 -0
- package/dist/core/pi-tools.d.ts +4 -0
- package/dist/core/pi-tools.d.ts.map +1 -0
- package/dist/core/pi-tools.js +11 -0
- package/dist/core/pi-tools.js.map +1 -0
- package/dist/core/tool-ownership.d.ts +12 -0
- package/dist/core/tool-ownership.d.ts.map +1 -0
- package/dist/core/tool-ownership.js +41 -0
- package/dist/core/tool-ownership.js.map +1 -0
- package/dist/execution-service.d.ts +41 -0
- package/dist/execution-service.d.ts.map +1 -0
- package/dist/execution-service.js +210 -0
- package/dist/execution-service.js.map +1 -0
- package/dist/fabric-state.d.ts +38 -0
- package/dist/fabric-state.d.ts.map +1 -0
- package/dist/fabric-state.js +275 -0
- package/dist/fabric-state.js.map +1 -0
- package/dist/index.d.ts +4 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +491 -0
- package/dist/index.js.map +1 -0
- package/dist/mesh/store.d.ts +68 -0
- package/dist/mesh/store.d.ts.map +1 -0
- package/dist/mesh/store.js +387 -0
- package/dist/mesh/store.js.map +1 -0
- package/dist/protocol.d.ts +62 -0
- package/dist/protocol.d.ts.map +1 -0
- package/dist/protocol.js +3 -0
- package/dist/protocol.js.map +1 -0
- package/dist/providers/agents-provider.d.ts +15 -0
- package/dist/providers/agents-provider.d.ts.map +1 -0
- package/dist/providers/agents-provider.js +393 -0
- package/dist/providers/agents-provider.js.map +1 -0
- package/dist/providers/captured-tools-provider.d.ts +23 -0
- package/dist/providers/captured-tools-provider.d.ts.map +1 -0
- package/dist/providers/captured-tools-provider.js +170 -0
- package/dist/providers/captured-tools-provider.js.map +1 -0
- package/dist/providers/mcp-provider.d.ts +15 -0
- package/dist/providers/mcp-provider.d.ts.map +1 -0
- package/dist/providers/mcp-provider.js +289 -0
- package/dist/providers/mcp-provider.js.map +1 -0
- package/dist/providers/mesh-provider.d.ts +13 -0
- package/dist/providers/mesh-provider.d.ts.map +1 -0
- package/dist/providers/mesh-provider.js +175 -0
- package/dist/providers/mesh-provider.js.map +1 -0
- package/dist/providers/pi-tools-provider.d.ts +14 -0
- package/dist/providers/pi-tools-provider.d.ts.map +1 -0
- package/dist/providers/pi-tools-provider.js +200 -0
- package/dist/providers/pi-tools-provider.js.map +1 -0
- package/dist/runtime/guest-types.d.ts +3 -0
- package/dist/runtime/guest-types.d.ts.map +1 -0
- package/dist/runtime/guest-types.js +313 -0
- package/dist/runtime/guest-types.js.map +1 -0
- package/dist/runtime/quickjs-runtime.d.ts +18 -0
- package/dist/runtime/quickjs-runtime.d.ts.map +1 -0
- package/dist/runtime/quickjs-runtime.js +538 -0
- package/dist/runtime/quickjs-runtime.js.map +1 -0
- package/dist/runtime/type-checker.d.ts +10 -0
- package/dist/runtime/type-checker.d.ts.map +1 -0
- package/dist/runtime/type-checker.js +71 -0
- package/dist/runtime/type-checker.js.map +1 -0
- package/dist/subagents/budget-ledger.d.ts +61 -0
- package/dist/subagents/budget-ledger.d.ts.map +1 -0
- package/dist/subagents/budget-ledger.js +92 -0
- package/dist/subagents/budget-ledger.js.map +1 -0
- package/dist/subagents/manager.d.ts +27 -0
- package/dist/subagents/manager.d.ts.map +1 -0
- package/dist/subagents/manager.js +497 -0
- package/dist/subagents/manager.js.map +1 -0
- package/dist/subagents/semaphore.d.ts +7 -0
- package/dist/subagents/semaphore.d.ts.map +1 -0
- package/dist/subagents/semaphore.js +54 -0
- package/dist/subagents/semaphore.js.map +1 -0
- package/dist/subagents/transports/localterm-transport.d.ts +7 -0
- package/dist/subagents/transports/localterm-transport.d.ts.map +1 -0
- package/dist/subagents/transports/localterm-transport.js +54 -0
- package/dist/subagents/transports/localterm-transport.js.map +1 -0
- package/dist/subagents/transports/process-transport.d.ts +7 -0
- package/dist/subagents/transports/process-transport.d.ts.map +1 -0
- package/dist/subagents/transports/process-transport.js +17 -0
- package/dist/subagents/transports/process-transport.js.map +1 -0
- package/dist/subagents/transports/process-utils.d.ts +16 -0
- package/dist/subagents/transports/process-utils.d.ts.map +1 -0
- package/dist/subagents/transports/process-utils.js +57 -0
- package/dist/subagents/transports/process-utils.js.map +1 -0
- package/dist/subagents/transports/screen-transport.d.ts +7 -0
- package/dist/subagents/transports/screen-transport.d.ts.map +1 -0
- package/dist/subagents/transports/screen-transport.js +33 -0
- package/dist/subagents/transports/screen-transport.js.map +1 -0
- package/dist/subagents/transports/tmux-transport.d.ts +7 -0
- package/dist/subagents/transports/tmux-transport.d.ts.map +1 -0
- package/dist/subagents/transports/tmux-transport.js +41 -0
- package/dist/subagents/transports/tmux-transport.js.map +1 -0
- package/dist/subagents/types.d.ts +132 -0
- package/dist/subagents/types.d.ts.map +1 -0
- package/dist/subagents/types.js +2 -0
- package/dist/subagents/types.js.map +1 -0
- package/dist/subagents/worktree-manager.d.ts +12 -0
- package/dist/subagents/worktree-manager.d.ts.map +1 -0
- package/dist/subagents/worktree-manager.js +53 -0
- package/dist/subagents/worktree-manager.js.map +1 -0
- package/dist/ui/controller.d.ts +14 -0
- package/dist/ui/controller.d.ts.map +1 -0
- package/dist/ui/controller.js +153 -0
- package/dist/ui/controller.js.map +1 -0
- package/dist/ui/dashboard.d.ts +36 -0
- package/dist/ui/dashboard.d.ts.map +1 -0
- package/dist/ui/dashboard.js +620 -0
- package/dist/ui/dashboard.js.map +1 -0
- package/dist/ui/fabric-render.d.ts +28 -0
- package/dist/ui/fabric-render.d.ts.map +1 -0
- package/dist/ui/fabric-render.js +280 -0
- package/dist/ui/fabric-render.js.map +1 -0
- package/dist/ui/format.d.ts +7 -0
- package/dist/ui/format.d.ts.map +1 -0
- package/dist/ui/format.js +57 -0
- package/dist/ui/format.js.map +1 -0
- package/dist/ui/highlight.d.ts +13 -0
- package/dist/ui/highlight.d.ts.map +1 -0
- package/dist/ui/highlight.js +337 -0
- package/dist/ui/highlight.js.map +1 -0
- package/dist/ui/settings.d.ts +21 -0
- package/dist/ui/settings.d.ts.map +1 -0
- package/dist/ui/settings.js +480 -0
- package/dist/ui/settings.js.map +1 -0
- package/dist/ui/snapshot.d.ts +5 -0
- package/dist/ui/snapshot.d.ts.map +1 -0
- package/dist/ui/snapshot.js +120 -0
- package/dist/ui/snapshot.js.map +1 -0
- package/dist/ui/types.d.ts +57 -0
- package/dist/ui/types.d.ts.map +1 -0
- package/dist/ui/types.js +11 -0
- package/dist/ui/types.js.map +1 -0
- package/dist/ui/widget.d.ts +16 -0
- package/dist/ui/widget.d.ts.map +1 -0
- package/dist/ui/widget.js +199 -0
- package/dist/ui/widget.js.map +1 -0
- package/dist/util.d.ts +2 -0
- package/dist/util.d.ts.map +1 -0
- package/dist/util.js +10 -0
- package/dist/util.js.map +1 -0
- package/dist/worker.d.ts +3 -0
- package/dist/worker.d.ts.map +1 -0
- package/dist/worker.js +478 -0
- package/dist/worker.js.map +1 -0
- package/package.json +87 -0
- package/skills/fabric-advisor/SKILL.md +53 -0
- package/skills/fabric-ambient/SKILL.md +84 -0
- package/skills/fabric-council/SKILL.md +37 -0
- package/skills/fabric-exec/SKILL.md +39 -0
- package/skills/fabric-exec/references/agents.md +78 -0
- package/skills/fabric-exec/references/mcp.md +46 -0
- package/skills/fabric-exec/references/mesh.md +42 -0
- package/skills/fabric-rlm/SKILL.md +84 -0
- package/skills/fabric-supervisor/SKILL.md +63 -0
- package/skills/fabric-swarm/SKILL.md +85 -0
- package/skills/fabric-workflow/SKILL.md +69 -0
|
@@ -0,0 +1,480 @@
|
|
|
1
|
+
import { DynamicBorder, getAgentDir, } from "@earendil-works/pi-coding-agent";
|
|
2
|
+
import { Container, SelectList, SettingsList, Spacer, Text, } from "@earendil-works/pi-tui";
|
|
3
|
+
import { saveFabricConfig } from "../config.js";
|
|
4
|
+
const SUBMENU_LAYOUT = {
|
|
5
|
+
minPrimaryColumnWidth: 12,
|
|
6
|
+
maxPrimaryColumnWidth: 32,
|
|
7
|
+
};
|
|
8
|
+
const BOOLEANS = ["true", "false"];
|
|
9
|
+
const APPROVAL_MODES = ["allow", "ask", "deny"];
|
|
10
|
+
const TRANSPORTS = ["auto", "process", "tmux", "screen", "localterm"];
|
|
11
|
+
const WIDGET_MODES = ["auto", "always", "hidden"];
|
|
12
|
+
const RISKS = ["read", "write", "execute", "network", "agent"];
|
|
13
|
+
const CORE_RISK_TOOLS = ["read", "grep", "find", "edit", "write", "bash"];
|
|
14
|
+
const CORE_DEFAULT_TOOL_CANDIDATES = ["read", "bash", "edit", "write", "grep", "find", "ls"];
|
|
15
|
+
const BUDGET_VALUES = [0, 0.05, 0.1, 0.25, 0.5, 1, 2, 5, 10];
|
|
16
|
+
const ROOT_ITEM_IDS = [
|
|
17
|
+
"fullCodeMode",
|
|
18
|
+
"executor",
|
|
19
|
+
"approvals",
|
|
20
|
+
"mcp",
|
|
21
|
+
"subagents",
|
|
22
|
+
"capture",
|
|
23
|
+
"ui",
|
|
24
|
+
"mesh",
|
|
25
|
+
];
|
|
26
|
+
const RELOAD_SECTIONS = new Set(["mesh", "subagents", "mcp"]);
|
|
27
|
+
const unique = (values) => [...new Set(values)];
|
|
28
|
+
const settingsListTheme = (theme) => ({
|
|
29
|
+
label: (text, selected) => (selected ? theme.fg("accent", text) : text),
|
|
30
|
+
value: (text, selected) => (selected ? theme.fg("accent", text) : theme.fg("muted", text)),
|
|
31
|
+
description: (text) => theme.fg("dim", text),
|
|
32
|
+
cursor: theme.fg("accent", "→ "),
|
|
33
|
+
hint: (text) => theme.fg("dim", text),
|
|
34
|
+
});
|
|
35
|
+
const selectListTheme = (theme) => ({
|
|
36
|
+
selectedPrefix: (text) => theme.fg("accent", text),
|
|
37
|
+
selectedText: (text) => theme.fg("accent", text),
|
|
38
|
+
description: (text) => theme.fg("muted", text),
|
|
39
|
+
scrollInfo: (text) => theme.fg("muted", text),
|
|
40
|
+
noMatch: (text) => theme.fg("muted", text),
|
|
41
|
+
});
|
|
42
|
+
const formatMs = (ms) => ms < 60_000
|
|
43
|
+
? `${Math.round(ms / 1_000)}s`
|
|
44
|
+
: ms < 3_600_000
|
|
45
|
+
? `${ms / 60_000}m`
|
|
46
|
+
: `${ms / 3_600_000}h`;
|
|
47
|
+
const formatBytes = (bytes) => bytes >= 1024 * 1024 ? `${bytes / (1024 * 1024)} MB` : `${bytes / 1024} KB`;
|
|
48
|
+
const formatUsd = (value) => value <= 0 ? "Off" : `$${value.toFixed(2)}`;
|
|
49
|
+
const formatToolCount = (count) => `${count} ${count === 1 ? "tool" : "tools"}`;
|
|
50
|
+
const numericOptions = (values, format, currentValue) => {
|
|
51
|
+
const options = values.map((value) => ({
|
|
52
|
+
value: String(value),
|
|
53
|
+
label: format(value),
|
|
54
|
+
}));
|
|
55
|
+
if (!options.some((option) => option.value === currentValue)) {
|
|
56
|
+
options.unshift({ value: currentValue, label: currentValue });
|
|
57
|
+
}
|
|
58
|
+
return options;
|
|
59
|
+
};
|
|
60
|
+
const getPath = (config, id) => {
|
|
61
|
+
const segments = id.split(".");
|
|
62
|
+
let current = config;
|
|
63
|
+
for (const segment of segments) {
|
|
64
|
+
if (typeof current !== "object" || current === null)
|
|
65
|
+
return undefined;
|
|
66
|
+
current = current[segment];
|
|
67
|
+
}
|
|
68
|
+
return current;
|
|
69
|
+
};
|
|
70
|
+
export const parseBudgetValue = (value) => {
|
|
71
|
+
if (value === "Off")
|
|
72
|
+
return 0;
|
|
73
|
+
const digits = Number.parseFloat(value.replace(/[^0-9.]/g, ""));
|
|
74
|
+
return Number.isFinite(digits) ? digits : 0;
|
|
75
|
+
};
|
|
76
|
+
const coerceValue = (id, value, config) => {
|
|
77
|
+
const current = getPath(config, id);
|
|
78
|
+
if (typeof current === "boolean")
|
|
79
|
+
return value === "true";
|
|
80
|
+
if (typeof current === "number") {
|
|
81
|
+
// budgetUsd is the only currency field; its submenu values are formatted
|
|
82
|
+
// as "$0.10" / "Off", so strip the currency formatting before coercing.
|
|
83
|
+
if (id === "subagents.budgetUsd")
|
|
84
|
+
return parseBudgetValue(value);
|
|
85
|
+
return Number(value);
|
|
86
|
+
}
|
|
87
|
+
return value;
|
|
88
|
+
};
|
|
89
|
+
const buildPartial = (id, value) => {
|
|
90
|
+
const segments = id.split(".");
|
|
91
|
+
const root = {};
|
|
92
|
+
let current = root;
|
|
93
|
+
for (let index = 0; index < segments.length - 1; index++) {
|
|
94
|
+
const segment = segments[index];
|
|
95
|
+
if (segment === undefined)
|
|
96
|
+
break;
|
|
97
|
+
const next = {};
|
|
98
|
+
current[segment] = next;
|
|
99
|
+
current = next;
|
|
100
|
+
}
|
|
101
|
+
const last = segments[segments.length - 1];
|
|
102
|
+
if (last !== undefined)
|
|
103
|
+
current[last] = value;
|
|
104
|
+
return root;
|
|
105
|
+
};
|
|
106
|
+
const summaryFor = (id, config) => {
|
|
107
|
+
switch (id) {
|
|
108
|
+
case "fullCodeMode":
|
|
109
|
+
return config.fullCodeMode ? "true" : "false";
|
|
110
|
+
case "executor":
|
|
111
|
+
return formatMs(config.executor.timeoutMs);
|
|
112
|
+
case "approvals":
|
|
113
|
+
return config.approvals.execute;
|
|
114
|
+
case "mcp":
|
|
115
|
+
return config.mcp.enabled ? "enabled" : "disabled";
|
|
116
|
+
case "subagents":
|
|
117
|
+
return config.subagents.transport;
|
|
118
|
+
case "capture":
|
|
119
|
+
return config.capture.enabled ? "enabled" : "disabled";
|
|
120
|
+
case "ui":
|
|
121
|
+
return config.ui.widget;
|
|
122
|
+
case "mesh":
|
|
123
|
+
return config.mesh.enabled ? "enabled" : "disabled";
|
|
124
|
+
default:
|
|
125
|
+
return "";
|
|
126
|
+
}
|
|
127
|
+
};
|
|
128
|
+
const setting = (id, label, currentValue, rest = {}) => {
|
|
129
|
+
const item = { id, label, currentValue };
|
|
130
|
+
if (rest.description !== undefined)
|
|
131
|
+
item.description = rest.description;
|
|
132
|
+
if (rest.values !== undefined)
|
|
133
|
+
item.values = [...rest.values];
|
|
134
|
+
if (rest.submenu !== undefined)
|
|
135
|
+
item.submenu = rest.submenu;
|
|
136
|
+
return item;
|
|
137
|
+
};
|
|
138
|
+
const numericSubmenu = (theme, values, format, title, description) => (currentValue, done) => {
|
|
139
|
+
const options = numericOptions(values, format, currentValue);
|
|
140
|
+
return new SelectSubmenu(theme, title, description, options, currentValue, (value) => done(value), () => done());
|
|
141
|
+
};
|
|
142
|
+
const listSubmenu = (theme, id, title, description, candidates, currentList, onCommit) => {
|
|
143
|
+
const prefix = `${id}.`;
|
|
144
|
+
return (_currentValue, done) => {
|
|
145
|
+
const items = unique([...candidates, ...currentList]).map((name) => setting(`${id}.${name}`, name, currentList.includes(name) ? "true" : "false", {
|
|
146
|
+
description: `Toggle ${name}.`,
|
|
147
|
+
values: BOOLEANS,
|
|
148
|
+
}));
|
|
149
|
+
const onChange = (_itemId, _newValue) => {
|
|
150
|
+
const selected = items
|
|
151
|
+
.filter((item) => item.currentValue === "true")
|
|
152
|
+
.map((item) => item.id.slice(prefix.length));
|
|
153
|
+
onCommit(selected);
|
|
154
|
+
};
|
|
155
|
+
return new SectionSubmenu(theme, title, description, items, onChange, () => done(), true);
|
|
156
|
+
};
|
|
157
|
+
};
|
|
158
|
+
const sectionSubmenu = (theme, title, description, items, persist) => (_currentValue, done) => new SectionSubmenu(theme, title, description, items, persist, () => done());
|
|
159
|
+
class SelectSubmenu extends Container {
|
|
160
|
+
selectList;
|
|
161
|
+
constructor(theme, title, description, options, currentValue, onSelect, onCancel) {
|
|
162
|
+
super();
|
|
163
|
+
this.addChild(new Text(theme.bold(theme.fg("accent", title)), 0, 0));
|
|
164
|
+
if (description) {
|
|
165
|
+
this.addChild(new Spacer(1));
|
|
166
|
+
this.addChild(new Text(theme.fg("muted", description), 0, 0));
|
|
167
|
+
}
|
|
168
|
+
this.addChild(new Spacer(1));
|
|
169
|
+
this.selectList = new SelectList(options, Math.min(options.length, 10), selectListTheme(theme), SUBMENU_LAYOUT);
|
|
170
|
+
const index = options.findIndex((option) => option.value === currentValue);
|
|
171
|
+
if (index !== -1)
|
|
172
|
+
this.selectList.setSelectedIndex(index);
|
|
173
|
+
this.selectList.onSelect = (item) => onSelect(item.value);
|
|
174
|
+
this.selectList.onCancel = onCancel;
|
|
175
|
+
this.addChild(this.selectList);
|
|
176
|
+
this.addChild(new Spacer(1));
|
|
177
|
+
this.addChild(new Text(theme.fg("dim", " Enter to select · Esc to go back"), 0, 0));
|
|
178
|
+
}
|
|
179
|
+
handleInput(data) {
|
|
180
|
+
this.selectList.handleInput(data);
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
class SectionSubmenu extends Container {
|
|
184
|
+
settingsList;
|
|
185
|
+
constructor(theme, title, description, items, onChange, onCancel, enableSearch = false) {
|
|
186
|
+
super();
|
|
187
|
+
this.addChild(new Text(theme.bold(theme.fg("accent", title)), 0, 0));
|
|
188
|
+
if (description) {
|
|
189
|
+
this.addChild(new Spacer(1));
|
|
190
|
+
this.addChild(new Text(theme.fg("muted", description), 0, 0));
|
|
191
|
+
}
|
|
192
|
+
this.addChild(new Spacer(1));
|
|
193
|
+
this.settingsList = new SettingsList(items, Math.min(items.length, 10), settingsListTheme(theme), onChange, onCancel, { enableSearch });
|
|
194
|
+
this.addChild(this.settingsList);
|
|
195
|
+
}
|
|
196
|
+
handleInput(data) {
|
|
197
|
+
this.settingsList.handleInput(data);
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
export class FabricSettingsComponent extends Container {
|
|
201
|
+
settingsList;
|
|
202
|
+
constructor(theme, items, onChange, onCancel) {
|
|
203
|
+
super();
|
|
204
|
+
this.addChild(new DynamicBorder((text) => theme.fg("border", text)));
|
|
205
|
+
this.settingsList = new SettingsList(items, 10, settingsListTheme(theme), onChange, onCancel, {
|
|
206
|
+
enableSearch: true,
|
|
207
|
+
});
|
|
208
|
+
this.addChild(this.settingsList);
|
|
209
|
+
this.addChild(new DynamicBorder((text) => theme.fg("border", text)));
|
|
210
|
+
}
|
|
211
|
+
handleInput(data) {
|
|
212
|
+
this.settingsList.handleInput(data);
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
export const buildFabricSettingsItems = (theme, config, apply, options) => {
|
|
216
|
+
const persist = (id, newValue) => apply(id, coerceValue(id, newValue, config));
|
|
217
|
+
const envFullCode = process.env.PI_FABRIC_FULL_CODE_MODE;
|
|
218
|
+
const fullCodeDescription = envFullCode
|
|
219
|
+
? "Fabric owns Pi core tools (read, bash, edit, write, grep, find, ls) via fabric_exec. Currently overridden by the PI_FABRIC_FULL_CODE_MODE environment variable."
|
|
220
|
+
: "Fabric owns Pi core tools (read, bash, edit, write, grep, find, ls) via fabric_exec. Disable to keep native tools model-facing (orchestration-only mode).";
|
|
221
|
+
const defaultToolsItem = setting("subagents.defaultTools", "Default tools", formatToolCount(config.subagents.defaultTools.length), { description: "Pi core tools exposed to spawned subagents by default." });
|
|
222
|
+
defaultToolsItem.submenu = listSubmenu(theme, "subagents.defaultTools", "Default tools", "Pi core tools exposed to spawned subagents by default.", CORE_DEFAULT_TOOL_CANDIDATES, config.subagents.defaultTools, (selected) => {
|
|
223
|
+
apply("subagents.defaultTools", selected);
|
|
224
|
+
defaultToolsItem.currentValue = formatToolCount(selected.length);
|
|
225
|
+
});
|
|
226
|
+
const keepVisibleItem = setting("capture.keepVisible", "Keep visible", formatToolCount(config.capture.keepVisible.length), { description: "Captured tool names that stay model-visible despite hideFromModel." });
|
|
227
|
+
keepVisibleItem.submenu = listSubmenu(theme, "capture.keepVisible", "Keep visible", "Captured tool names that stay model-visible despite hideFromModel.", options.keepVisibleCandidates, config.capture.keepVisible, (selected) => {
|
|
228
|
+
apply("capture.keepVisible", selected);
|
|
229
|
+
keepVisibleItem.currentValue = formatToolCount(selected.length);
|
|
230
|
+
});
|
|
231
|
+
return [
|
|
232
|
+
setting("fullCodeMode", "Full code mode", config.fullCodeMode ? "true" : "false", {
|
|
233
|
+
description: fullCodeDescription,
|
|
234
|
+
values: BOOLEANS,
|
|
235
|
+
}),
|
|
236
|
+
setting("executor", "Executor", summaryFor("executor", config), {
|
|
237
|
+
description: "QuickJS sandbox resource limits for fabric_exec programs.",
|
|
238
|
+
submenu: sectionSubmenu(theme, "Executor", "QuickJS sandbox resource limits for fabric_exec programs.", [
|
|
239
|
+
setting("executor.timeoutMs", "Timeout", formatMs(config.executor.timeoutMs), {
|
|
240
|
+
description: "Maximum wall-clock time for a single fabric_exec program.",
|
|
241
|
+
submenu: numericSubmenu(theme, [15_000, 30_000, 60_000, 120_000, 300_000, 600_000], formatMs, "Executor timeout", "Maximum wall-clock time for a single fabric_exec program."),
|
|
242
|
+
}),
|
|
243
|
+
setting("executor.memoryLimitBytes", "Memory limit", formatBytes(config.executor.memoryLimitBytes), {
|
|
244
|
+
description: "Maximum QuickJS heap size for a single fabric_exec program.",
|
|
245
|
+
submenu: numericSubmenu(theme, [16 * 1024 * 1024, 32 * 1024 * 1024, 64 * 1024 * 1024, 128 * 1024 * 1024, 256 * 1024 * 1024], formatBytes, "Executor memory limit", "Maximum QuickJS heap size for a single fabric_exec program."),
|
|
246
|
+
}),
|
|
247
|
+
setting("executor.maxOutputChars", "Max output chars", String(config.executor.maxOutputChars), {
|
|
248
|
+
description: "Character cap applied to the final fabric_exec return value shown to the model.",
|
|
249
|
+
submenu: numericSubmenu(theme, [20_000, 50_000, 100_000, 200_000, 500_000], (n) => n.toLocaleString(), "Max output chars", "Character cap applied to the final fabric_exec return value shown to the model."),
|
|
250
|
+
}),
|
|
251
|
+
setting("executor.maxNestedResultChars", "Max nested result chars", String(config.executor.maxNestedResultChars), {
|
|
252
|
+
description: "Character cap applied to results returned by nested tool calls inside the sandbox.",
|
|
253
|
+
submenu: numericSubmenu(theme, [500_000, 1_000_000, 2_000_000, 5_000_000, 10_000_000], (n) => n.toLocaleString(), "Max nested result chars", "Character cap applied to results returned by nested tool calls inside the sandbox."),
|
|
254
|
+
}),
|
|
255
|
+
], persist),
|
|
256
|
+
}),
|
|
257
|
+
setting("approvals", "Approvals", summaryFor("approvals", config), {
|
|
258
|
+
description: "Per-action approval policy for tools invoked from inside fabric_exec.",
|
|
259
|
+
submenu: sectionSubmenu(theme, "Approvals", "Per-action approval policy for tools invoked from inside fabric_exec.", [
|
|
260
|
+
setting("approvals.read", "Read", config.approvals.read, {
|
|
261
|
+
description: "Approval policy for read operations.",
|
|
262
|
+
values: APPROVAL_MODES,
|
|
263
|
+
}),
|
|
264
|
+
setting("approvals.write", "Write", config.approvals.write, {
|
|
265
|
+
description: "Approval policy for write and edit operations.",
|
|
266
|
+
values: APPROVAL_MODES,
|
|
267
|
+
}),
|
|
268
|
+
setting("approvals.execute", "Execute", config.approvals.execute, {
|
|
269
|
+
description: "Approval policy for shell execution.",
|
|
270
|
+
values: APPROVAL_MODES,
|
|
271
|
+
}),
|
|
272
|
+
setting("approvals.network", "Network", config.approvals.network, {
|
|
273
|
+
description: "Approval policy for network operations.",
|
|
274
|
+
values: APPROVAL_MODES,
|
|
275
|
+
}),
|
|
276
|
+
setting("approvals.agent", "Agent", config.approvals.agent, {
|
|
277
|
+
description: "Approval policy for subagent and actor operations.",
|
|
278
|
+
values: APPROVAL_MODES,
|
|
279
|
+
}),
|
|
280
|
+
], persist),
|
|
281
|
+
}),
|
|
282
|
+
setting("mcp", "MCP", summaryFor("mcp", config), {
|
|
283
|
+
description: "Model Context Protocol provider discovery and invocation.",
|
|
284
|
+
submenu: sectionSubmenu(theme, "MCP", "Model Context Protocol provider discovery and invocation.", [
|
|
285
|
+
setting("mcp.enabled", "Enabled", config.mcp.enabled ? "true" : "false", {
|
|
286
|
+
description: "Enable the MCP provider inside fabric_exec.",
|
|
287
|
+
values: BOOLEANS,
|
|
288
|
+
}),
|
|
289
|
+
setting("mcp.disableOAuth", "Disable OAuth", config.mcp.disableOAuth ? "true" : "false", {
|
|
290
|
+
description: "Skip MCP OAuth flows.",
|
|
291
|
+
values: BOOLEANS,
|
|
292
|
+
}),
|
|
293
|
+
setting("mcp.allowDynamicServers", "Dynamic servers", config.mcp.allowDynamicServers ? "true" : "false", {
|
|
294
|
+
description: "Allow servers to be added at runtime via the MCP protocol.",
|
|
295
|
+
values: BOOLEANS,
|
|
296
|
+
}),
|
|
297
|
+
setting("mcp.callTimeoutMs", "Call timeout", formatMs(config.mcp.callTimeoutMs), {
|
|
298
|
+
description: "Timeout for individual MCP tool calls.",
|
|
299
|
+
submenu: numericSubmenu(theme, [15_000, 30_000, 60_000, 120_000, 300_000], formatMs, "MCP call timeout", "Timeout for individual MCP tool calls."),
|
|
300
|
+
}),
|
|
301
|
+
], persist),
|
|
302
|
+
}),
|
|
303
|
+
setting("subagents", "Subagents", summaryFor("subagents", config), {
|
|
304
|
+
description: "One-shot child agents spawned from inside fabric_exec.",
|
|
305
|
+
submenu: sectionSubmenu(theme, "Subagents", "One-shot child agents spawned from inside fabric_exec.", [
|
|
306
|
+
setting("subagents.enabled", "Enabled", config.subagents.enabled ? "true" : "false", {
|
|
307
|
+
description: "Enable subagent spawning via workflow.agent() and agents.run().",
|
|
308
|
+
values: BOOLEANS,
|
|
309
|
+
}),
|
|
310
|
+
setting("subagents.transport", "Transport", config.subagents.transport, {
|
|
311
|
+
description: "Preferred transport for spawned subagents.",
|
|
312
|
+
values: TRANSPORTS,
|
|
313
|
+
}),
|
|
314
|
+
setting("subagents.maxConcurrent", "Max concurrent", String(config.subagents.maxConcurrent), {
|
|
315
|
+
description: "Maximum number of subagents that may run at the same time.",
|
|
316
|
+
submenu: numericSubmenu(theme, [1, 2, 4, 8, 16, 32], String, "Subagent concurrency", "Maximum number of subagents that may run at the same time."),
|
|
317
|
+
}),
|
|
318
|
+
setting("subagents.maxPerExecution", "Max per execution", String(config.subagents.maxPerExecution), {
|
|
319
|
+
description: "Maximum number of subagent calls allowed within a single fabric_exec program.",
|
|
320
|
+
submenu: numericSubmenu(theme, [10, 25, 50, 100, 200, 500], String, "Subagents per execution", "Maximum number of subagent calls allowed within a single fabric_exec program."),
|
|
321
|
+
}),
|
|
322
|
+
setting("subagents.maxDepth", "Max depth", String(config.subagents.maxDepth), {
|
|
323
|
+
description: "Maximum nesting depth for recursive subagent calls.",
|
|
324
|
+
submenu: numericSubmenu(theme, [0, 1, 2, 3, 4, 6], String, "Subagent depth", "Maximum nesting depth for recursive subagent calls."),
|
|
325
|
+
}),
|
|
326
|
+
setting("subagents.budgetUsd", "Recursion budget", formatUsd(config.subagents.budgetUsd), {
|
|
327
|
+
description: "Maximum USD spend for subagent work across the whole recursion tree. 0 disables the budget.",
|
|
328
|
+
submenu: numericSubmenu(theme, BUDGET_VALUES, formatUsd, "Recursion budget", "Maximum USD spend for subagent work across the whole recursion tree. 0 disables the budget."),
|
|
329
|
+
}),
|
|
330
|
+
setting("subagents.timeoutMs", "Timeout", formatMs(config.subagents.timeoutMs), {
|
|
331
|
+
description: "Wall-clock timeout for a single subagent run.",
|
|
332
|
+
submenu: numericSubmenu(theme, [60_000, 120_000, 300_000, 600_000, 1_800_000, 3_600_000], formatMs, "Subagent timeout", "Wall-clock timeout for a single subagent run."),
|
|
333
|
+
}),
|
|
334
|
+
setting("subagents.extensions", "Extensions", config.subagents.extensions ? "true" : "false", {
|
|
335
|
+
description: "Allow subagents to load registered extensions.",
|
|
336
|
+
values: BOOLEANS,
|
|
337
|
+
}),
|
|
338
|
+
defaultToolsItem,
|
|
339
|
+
setting("subagents.retainRuns", "Retain runs", config.subagents.retainRuns ? "true" : "false", {
|
|
340
|
+
description: "Keep completed subagent run artifacts for later inspection.",
|
|
341
|
+
values: BOOLEANS,
|
|
342
|
+
}),
|
|
343
|
+
setting("subagents.notifyOnComplete", "Notify on complete", config.subagents.notifyOnComplete ? "true" : "false", {
|
|
344
|
+
description: "Post a message when a background subagent completes.",
|
|
345
|
+
values: BOOLEANS,
|
|
346
|
+
}),
|
|
347
|
+
], persist),
|
|
348
|
+
}),
|
|
349
|
+
setting("capture", "Capture", summaryFor("capture", config), {
|
|
350
|
+
description: "Registered tool capture and model visibility policy.",
|
|
351
|
+
submenu: sectionSubmenu(theme, "Capture", "Registered tool capture and model visibility policy.", [
|
|
352
|
+
setting("capture.enabled", "Enabled", config.capture.enabled ? "true" : "false", {
|
|
353
|
+
description: "Capture registered extension tools so they are callable from fabric_exec.",
|
|
354
|
+
values: BOOLEANS,
|
|
355
|
+
}),
|
|
356
|
+
setting("capture.hideFromModel", "Hide from model", config.capture.hideFromModel ? "true" : "false", {
|
|
357
|
+
description: "Hide captured tools from the parent model's tool schema.",
|
|
358
|
+
values: BOOLEANS,
|
|
359
|
+
}),
|
|
360
|
+
setting("capture.defaultRisk", "Default risk", config.capture.defaultRisk, {
|
|
361
|
+
description: "Approval risk level applied to captured tools without an explicit override.",
|
|
362
|
+
values: RISKS,
|
|
363
|
+
}),
|
|
364
|
+
keepVisibleItem,
|
|
365
|
+
...CORE_RISK_TOOLS.map((tool) => setting(`capture.risks.${tool}`, `${tool} risk`, config.capture.risks[tool] ?? config.capture.defaultRisk, {
|
|
366
|
+
description: `Approval risk level for the ${tool} tool when captured.`,
|
|
367
|
+
values: RISKS,
|
|
368
|
+
})),
|
|
369
|
+
], persist),
|
|
370
|
+
}),
|
|
371
|
+
setting("ui", "UI", summaryFor("ui", config), {
|
|
372
|
+
description: "Fabric activity widget and dashboard.",
|
|
373
|
+
submenu: sectionSubmenu(theme, "UI", "Fabric activity widget and dashboard.", [
|
|
374
|
+
setting("ui.enabled", "Enabled", config.ui.enabled ? "true" : "false", {
|
|
375
|
+
description: "Show the Fabric activity widget and dashboard.",
|
|
376
|
+
values: BOOLEANS,
|
|
377
|
+
}),
|
|
378
|
+
setting("ui.widget", "Widget", config.ui.widget, {
|
|
379
|
+
description: "When to show the activity widget above the editor.",
|
|
380
|
+
values: WIDGET_MODES,
|
|
381
|
+
}),
|
|
382
|
+
setting("ui.maxRows", "Max rows", String(config.ui.maxRows), {
|
|
383
|
+
description: "Maximum rows rendered by the activity widget.",
|
|
384
|
+
submenu: numericSubmenu(theme, [1, 2, 3, 5, 6, 8, 10, 15, 20], String, "Widget max rows", "Maximum rows rendered by the activity widget."),
|
|
385
|
+
}),
|
|
386
|
+
setting("ui.refreshMs", "Refresh interval", formatMs(config.ui.refreshMs), {
|
|
387
|
+
description: "Refresh interval for the activity widget.",
|
|
388
|
+
submenu: numericSubmenu(theme, [100, 250, 500, 1000, 2000], formatMs, "Widget refresh interval", "Refresh interval for the activity widget."),
|
|
389
|
+
}),
|
|
390
|
+
setting("ui.eventHistory", "Event history", String(config.ui.eventHistory), {
|
|
391
|
+
description: "Number of mesh events kept in the dashboard history.",
|
|
392
|
+
submenu: numericSubmenu(theme, [20, 40, 80, 120, 200, 500], String, "Event history", "Number of mesh events kept in the dashboard history."),
|
|
393
|
+
}),
|
|
394
|
+
], persist),
|
|
395
|
+
}),
|
|
396
|
+
setting("mesh", "Mesh", summaryFor("mesh", config), {
|
|
397
|
+
description: "Durable mesh coordination store and actors.",
|
|
398
|
+
submenu: sectionSubmenu(theme, "Mesh", "Durable mesh coordination store and actors.", [
|
|
399
|
+
setting("mesh.enabled", "Enabled", config.mesh.enabled ? "true" : "false", {
|
|
400
|
+
description: "Enable the durable mesh store and actor providers.",
|
|
401
|
+
values: BOOLEANS,
|
|
402
|
+
}),
|
|
403
|
+
setting("mesh.maxReadEvents", "Max read events", String(config.mesh.maxReadEvents), {
|
|
404
|
+
description: "Maximum events returned by a single mesh read.",
|
|
405
|
+
submenu: numericSubmenu(theme, [100, 200, 500, 1000, 5000], String, "Max read events", "Maximum events returned by a single mesh read."),
|
|
406
|
+
}),
|
|
407
|
+
setting("mesh.actorPollMs", "Actor poll interval", formatMs(config.mesh.actorPollMs), {
|
|
408
|
+
description: "Polling interval for actor mailbox checks.",
|
|
409
|
+
submenu: numericSubmenu(theme, [50, 100, 250, 500, 1000], formatMs, "Actor poll interval", "Polling interval for actor mailbox checks."),
|
|
410
|
+
}),
|
|
411
|
+
setting("mesh.actorQueueLimit", "Actor queue limit", String(config.mesh.actorQueueLimit), {
|
|
412
|
+
description: "Maximum messages queued per actor mailbox.",
|
|
413
|
+
submenu: numericSubmenu(theme, [4, 8, 16, 32, 64, 128], String, "Actor queue limit", "Maximum messages queued per actor mailbox."),
|
|
414
|
+
}),
|
|
415
|
+
setting("mesh.actorContextEntries", "Actor context entries", String(config.mesh.actorContextEntries), {
|
|
416
|
+
description: "Transcript entries forwarded to actors as context.",
|
|
417
|
+
submenu: numericSubmenu(theme, [3, 5, 10, 14, 20, 50], String, "Actor context entries", "Transcript entries forwarded to actors as context."),
|
|
418
|
+
}),
|
|
419
|
+
setting("mesh.eventContextChars", "Event context chars", String(config.mesh.eventContextChars), {
|
|
420
|
+
description: "Character cap applied to host events dispatched to actors.",
|
|
421
|
+
submenu: numericSubmenu(theme, [10_000, 20_000, 40_000, 80_000, 160_000], (n) => n.toLocaleString(), "Event context chars", "Character cap applied to host events dispatched to actors."),
|
|
422
|
+
}),
|
|
423
|
+
], persist),
|
|
424
|
+
}),
|
|
425
|
+
];
|
|
426
|
+
};
|
|
427
|
+
export async function openFabricSettings(context, deps) {
|
|
428
|
+
if (context.mode !== "tui") {
|
|
429
|
+
context.ui.notify("Fabric settings are available in TUI mode", "warning");
|
|
430
|
+
return;
|
|
431
|
+
}
|
|
432
|
+
await deps.state.ensure(context);
|
|
433
|
+
const agentDir = getAgentDir();
|
|
434
|
+
let rootList;
|
|
435
|
+
const changedSections = new Set();
|
|
436
|
+
let dirty = false;
|
|
437
|
+
const apply = (id, value) => {
|
|
438
|
+
const partial = buildPartial(id, value);
|
|
439
|
+
try {
|
|
440
|
+
saveFabricConfig({ cwd: context.cwd, agentDir, projectTrusted: context.isProjectTrusted() }, partial);
|
|
441
|
+
}
|
|
442
|
+
catch (error) {
|
|
443
|
+
context.ui.notify(`Failed to save Fabric settings: ${error instanceof Error ? error.message : String(error)}`, "error");
|
|
444
|
+
return;
|
|
445
|
+
}
|
|
446
|
+
deps.state.reloadConfig(context);
|
|
447
|
+
dirty = true;
|
|
448
|
+
changedSections.add(id.split(".")[0] ?? id);
|
|
449
|
+
const list = rootList;
|
|
450
|
+
if (list) {
|
|
451
|
+
for (const rootId of ROOT_ITEM_IDS) {
|
|
452
|
+
list.updateValue(rootId, summaryFor(rootId, deps.state.config));
|
|
453
|
+
}
|
|
454
|
+
}
|
|
455
|
+
};
|
|
456
|
+
const persist = (id, newValue) => apply(id, coerceValue(id, newValue, deps.state.config));
|
|
457
|
+
const keepVisibleCandidates = unique([
|
|
458
|
+
"fabric_exec",
|
|
459
|
+
...deps.capturedTools.list().map((tool) => tool.name),
|
|
460
|
+
]);
|
|
461
|
+
await context.ui.custom((_tui, theme, _keybindings, done) => {
|
|
462
|
+
const items = buildFabricSettingsItems(theme, deps.state.config, apply, {
|
|
463
|
+
keepVisibleCandidates,
|
|
464
|
+
});
|
|
465
|
+
const component = new FabricSettingsComponent(theme, items, persist, () => done());
|
|
466
|
+
rootList = component.settingsList;
|
|
467
|
+
return component;
|
|
468
|
+
});
|
|
469
|
+
if (dirty) {
|
|
470
|
+
deps.applyFabricMode();
|
|
471
|
+
const needsReload = [...changedSections].some((section) => RELOAD_SECTIONS.has(section));
|
|
472
|
+
if (needsReload) {
|
|
473
|
+
context.ui.notify("Fabric settings saved. Run /fabric reload to apply mesh, subagent, and MCP changes.", "info");
|
|
474
|
+
}
|
|
475
|
+
else {
|
|
476
|
+
context.ui.notify("Fabric settings saved.", "info");
|
|
477
|
+
}
|
|
478
|
+
}
|
|
479
|
+
}
|
|
480
|
+
//# sourceMappingURL=settings.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"settings.js","sourceRoot":"","sources":["../../src/ui/settings.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { FabricState } from "../fabric-state.js";
|
|
2
|
+
import type { MeshEvent } from "../mesh/store.js";
|
|
3
|
+
import { type FabricDashboardSnapshot } from "./types.js";
|
|
4
|
+
export declare const createDashboardSnapshot: (state: FabricState, events: MeshEvent[]) => FabricDashboardSnapshot;
|
|
5
|
+
//# sourceMappingURL=snapshot.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"snapshot.d.ts","sourceRoot":"","sources":["../../src/ui/snapshot.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,KAAK,EAAE,SAAS,EAAkB,MAAM,kBAAkB,CAAC;AAGlE,OAAO,EAEL,KAAK,uBAAuB,EAG7B,MAAM,YAAY,CAAC;AAkCpB,eAAO,MAAM,uBAAuB,GAClC,OAAO,WAAW,EAClB,QAAQ,SAAS,EAAE,KAClB,uBAsGF,CAAC"}
|