pi-fabric 0.24.0 → 0.24.2

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 (56) hide show
  1. package/dist/fabric-exec-tool.d.ts +6 -0
  2. package/dist/fabric-exec-tool.d.ts.map +1 -0
  3. package/dist/fabric-exec-tool.js +583 -0
  4. package/dist/fabric-exec-tool.js.map +1 -0
  5. package/dist/index.d.ts +1 -1
  6. package/dist/index.d.ts.map +1 -1
  7. package/dist/index.js +8 -584
  8. package/dist/index.js.map +1 -1
  9. package/dist/runtime/guest-types.d.ts +1 -1
  10. package/dist/runtime/guest-types.d.ts.map +1 -1
  11. package/dist/runtime/guest-types.js +1 -0
  12. package/dist/runtime/guest-types.js.map +1 -1
  13. package/dist/runtime/quickjs-runtime.d.ts +1 -1
  14. package/dist/runtime/quickjs-runtime.d.ts.map +1 -1
  15. package/dist/runtime/quickjs-runtime.js +11 -2
  16. package/dist/runtime/quickjs-runtime.js.map +1 -1
  17. package/dist/state/evidence-runner.d.ts +17 -0
  18. package/dist/state/evidence-runner.d.ts.map +1 -0
  19. package/dist/state/evidence-runner.js +182 -0
  20. package/dist/state/evidence-runner.js.map +1 -0
  21. package/dist/state/store.d.ts +2 -162
  22. package/dist/state/store.d.ts.map +1 -1
  23. package/dist/state/store.js +1 -169
  24. package/dist/state/store.js.map +1 -1
  25. package/dist/state/types.d.ts +165 -0
  26. package/dist/state/types.d.ts.map +1 -0
  27. package/dist/state/types.js +2 -0
  28. package/dist/state/types.js.map +1 -0
  29. package/dist/ui/transcript-parser.d.ts +18 -0
  30. package/dist/ui/transcript-parser.d.ts.map +1 -0
  31. package/dist/ui/transcript-parser.js +538 -0
  32. package/dist/ui/transcript-parser.js.map +1 -0
  33. package/dist/ui/transcript-reader.d.ts +10 -0
  34. package/dist/ui/transcript-reader.d.ts.map +1 -0
  35. package/dist/ui/transcript-reader.js +295 -0
  36. package/dist/ui/transcript-reader.js.map +1 -0
  37. package/dist/ui/transcript-sanitization.d.ts +14 -0
  38. package/dist/ui/transcript-sanitization.d.ts.map +1 -0
  39. package/dist/ui/transcript-sanitization.js +150 -0
  40. package/dist/ui/transcript-sanitization.js.map +1 -0
  41. package/dist/ui/transcript.d.ts +2 -9
  42. package/dist/ui/transcript.d.ts.map +1 -1
  43. package/dist/ui/transcript.js +4 -977
  44. package/dist/ui/transcript.js.map +1 -1
  45. package/dist/worker/options.d.ts +3 -0
  46. package/dist/worker/options.d.ts.map +1 -0
  47. package/dist/worker/options.js +83 -0
  48. package/dist/worker/options.js.map +1 -0
  49. package/dist/worker/run-record.d.ts +9 -0
  50. package/dist/worker/run-record.d.ts.map +1 -0
  51. package/dist/worker/run-record.js +77 -0
  52. package/dist/worker/run-record.js.map +1 -0
  53. package/dist/worker.js +29 -159
  54. package/dist/worker.js.map +1 -1
  55. package/package.json +2 -2
  56. package/skills/fabric-exec/SKILL.md +1 -1
@@ -0,0 +1,6 @@
1
+ import { type ToolDefinition } from "@earendil-works/pi-coding-agent";
2
+ import { type CodePreviewSettings } from "pi-code-previews";
3
+ import type { FabricState } from "./fabric-state.js";
4
+ import type { PendingFabricHandoff } from "./prewalk/handoff.js";
5
+ export declare const createFabricExecTool: (state: FabricState, codePreviewSettings: CodePreviewSettings, pendingHandoffs: Map<string, PendingFabricHandoff>) => ToolDefinition<any, any, any>;
6
+ //# sourceMappingURL=fabric-exec-tool.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fabric-exec-tool.d.ts","sourceRoot":"","sources":["../src/fabric-exec-tool.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,cAAc,EACpB,MAAM,iCAAiC,CAAC;AAEzC,OAAO,EACL,KAAK,mBAAmB,EAEzB,MAAM,kBAAkB,CAAC;AAO1B,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AA+DjE,eAAO,MAAM,oBAAoB,GAC/B,OAAO,WAAW,EAClB,qBAAqB,mBAAmB,EACxC,iBAAiB,GAAG,CAAC,MAAM,EAAE,oBAAoB,CAAC,KACjD,cAAc,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAwrB9B,CAAC"}
@@ -0,0 +1,583 @@
1
+ import { defineTool, } from "@earendil-works/pi-coding-agent";
2
+ import { Container, Text } from "@earendil-works/pi-tui";
3
+ import { withCodePreviewShell, } from "pi-code-previews";
4
+ import { Type } from "typebox";
5
+ import { createFabricPersistedExecutionDetails, readFabricExecutionRenderDetails, } from "./audit/index.js";
6
+ import { DEFAULT_FABRIC_CONFIG } from "./config.js";
7
+ import { captureFabricAgentPreviews, captureFabricCallHeadlinePreviews, captureFabricCoreToolPreviews, captureFabricWritePreviews, expandHint, fabricMulticallCallLimit, fabricWriteBindings, inheritComponentBackground, modelReadHint, nestedCallBody, nestedCallTitle, renderBoundedLines, renderFabricMulticallPartial, renderFabricWriteArgumentPreview, renderNestedAgentToolLines, restoreFabricAgentPreviews, restoreFabricCallHeadlinePreviews, restoreFabricCoreToolPreviews, restoreFabricWritePreviews, restoreLegacyBashCommands, safeTerminalText, singleCallProgressLine, } from "./ui/fabric-render.js";
8
+ import { coreToolPreviewEnabled, coreToolRendererEnabled, isCoreToolAudit, renderCoreToolBody, } from "./ui/core-tool-render.js";
9
+ import { highlightCode } from "./ui/highlight.js";
10
+ import { HiddenRowBorrowingComponent, observeResultRows, } from "./ui/row-balance.js";
11
+ import { formatFabricValue } from "./ui/structured.js";
12
+ import { countNewlines, truncateMiddle } from "./util.js";
13
+ const RESULT_FORMATS = ["auto", "yaml", "json", "text"];
14
+ const MAX_FABRIC_CODE_TRANSFER_LINES = 12;
15
+ const countLabel = (count, singular) => `${count} ${count === 1 ? singular : `${singular}s`}`;
16
+ export const createFabricExecTool = (state, codePreviewSettings, pendingHandoffs) => withCodePreviewShell(defineTool({
17
+ name: "fabric_exec",
18
+ label: "Fabric",
19
+ description: "Execute type-checked TypeScript through Fabric's configured executor for Pi core tools, MCP, Fabric providers, discovery, and extensions. QuickJS is isolated by default; the optional Node process is an unsafe trusted-code escape hatch. In full code mode, and always in Schema enforce mode, this is the exclusive model tool path.",
20
+ promptSnippet: "Pi core tools, MCP, Fabric providers, discovery, and extensions",
21
+ promptGuidelines: [
22
+ "Batch independent operations in one `fabric_exec` program (`Promise.all` for parallel, sequential `await` for ordered), not one call per tool; keep dependent/conditional steps sequential. Return only the compact final value; intermediate results stay in the sandbox.",
23
+ ],
24
+ // The model-facing schema is intentionally flat: one large `code` string
25
+ // plus scalar/optional params. Do not add nested arrays-of-objects with
26
+ // escaped content here. SOTA models are post-trained on one dominant
27
+ // harness's flat tool shapes and can invent trailing keys at the
28
+ // highest-entropy point of a nested escaped-JSON field, which a strict
29
+ // schema hard-rejects. Keep this surface string/scalar-heavy; the only
30
+ // nested field (display) ignores unknown keys. See
31
+ // lucumr.pocoo.org/2026/7/4/better-models-worse-tools/ and pi-tool-repair.
32
+ parameters: Type.Object({
33
+ code: Type.String({
34
+ description: "TypeScript function body. Top-level await and return are supported. Globals include `tools`, `mcp`, `memory`, `state`, `schema`, `compact`, `agents`, `mesh`, `print`, and `π`; full-code mode adds `pi` and `extensions`. See session guidance / `fabric-exec` skill for exact signatures.",
35
+ }),
36
+ strings: Type.Optional(Type.Record(Type.String(), Type.String(), {
37
+ description: "Named strings exposed as π.key, useful for content that is awkward to quote",
38
+ })),
39
+ resultFormat: Type.Optional(Type.Union(RESULT_FORMATS.map((value) => Type.Literal(value)))),
40
+ tokenBudget: Type.Optional(Type.Number({
41
+ minimum: 1,
42
+ description: "Optional token budget observed by workflow.agent() calls",
43
+ })),
44
+ agentBudget: Type.Optional(Type.Number({
45
+ minimum: 1,
46
+ description: "Optional agent-call cap, bounded by Fabric configuration",
47
+ })),
48
+ display: Type.Optional(Type.Object({
49
+ name: Type.Optional(Type.String({ description: "Human-readable name for the Fabric activity panel" })),
50
+ description: Type.Optional(Type.String({ description: "Compact objective shown in the Fabric dashboard" })),
51
+ })),
52
+ }),
53
+ renderCall(params, theme, context) {
54
+ const code = Array.isArray(params.code) ? params.code.join("\n") : params.code;
55
+ const rendererState = context.state;
56
+ const rowBalance = rendererState.fabricResultRowBalance ??= {};
57
+ if (rendererState.fabricWriteBindingsCode !== code) {
58
+ rendererState.fabricWriteBindingsCode = code;
59
+ rendererState.fabricWriteBindings = fabricWriteBindings(code);
60
+ }
61
+ const writePreview = context.executionStarted
62
+ ? null
63
+ : renderFabricWriteArgumentPreview({
64
+ bindings: rendererState.fabricWriteBindings ?? [],
65
+ strings: params.strings,
66
+ expanded: context.expanded,
67
+ cwd: context.cwd,
68
+ settings: codePreviewSettings,
69
+ }, theme, context.invalidate);
70
+ const lines = safeTerminalText(code).split("\n");
71
+ const displayName = params.display?.name ? safeTerminalText(params.display.name) : "";
72
+ const title = `${theme.fg("toolTitle", theme.bold("fabric"))}${displayName ? ` ${theme.fg("accent", displayName)}` : ""} ${theme.fg("dim", `TypeScript · ${countLabel(lines.length, "line")}`)}`;
73
+ const baseLimit = context.expanded ? lines.length : Math.min(lines.length, 8);
74
+ const maxLimit = context.expanded
75
+ ? lines.length
76
+ : Math.min(lines.length, baseLimit + MAX_FABRIC_CODE_TRANSFER_LINES);
77
+ const renderCodePreview = (limit, width) => {
78
+ const shown = lines.slice(0, limit);
79
+ const lineNumberWidth = String(Math.max(1, shown.length)).length;
80
+ const preview = shown
81
+ .map((line, index) => `${theme.fg("dim", String(index + 1).padStart(lineNumberWidth, " "))} ${theme.fg("muted", line || " ")}`)
82
+ .join("\n");
83
+ const hidden = lines.length - shown.length;
84
+ const hiddenHint = hidden > 0
85
+ ? `\n${theme.fg("dim", `… ${countLabel(hidden, "line")} hidden · `)}${expandHint(theme)}`
86
+ : "";
87
+ return new Text(`${title}${preview ? `\n${preview}` : ""}${hiddenHint}`, 0, 0).render(width);
88
+ };
89
+ const codePreview = new HiddenRowBorrowingComponent(baseLimit, maxLimit, renderCodePreview, rowBalance);
90
+ if (!writePreview)
91
+ return codePreview;
92
+ const composite = new Container();
93
+ composite.addChild(codePreview);
94
+ composite.addChild(new Text("\n", 0, 0));
95
+ composite.addChild(writePreview);
96
+ return composite;
97
+ },
98
+ renderResult(result, { expanded, isPartial }, theme, context) {
99
+ const details = readFabricExecutionRenderDetails(result.details);
100
+ let audits = restoreLegacyBashCommands(details.audits, context.args);
101
+ const rendererState = context.state;
102
+ const rowBalance = rendererState.fabricResultRowBalance ??= {};
103
+ const trackRows = (component) => observeResultRows(inheritComponentBackground(component), rowBalance, { expanded, isPartial });
104
+ if (isPartial) {
105
+ rendererState.fabricCoreToolPreviews = captureFabricCoreToolPreviews(audits, rendererState.fabricCoreToolPreviews);
106
+ rendererState.fabricAgentPreviews = captureFabricAgentPreviews(audits, rendererState.fabricAgentPreviews);
107
+ const headlinePreviews = captureFabricCallHeadlinePreviews(audits);
108
+ if (headlinePreviews.length > 0) {
109
+ rendererState.fabricCallHeadlinePreviews = headlinePreviews;
110
+ }
111
+ const writePreviews = captureFabricWritePreviews(audits);
112
+ if (writePreviews.length > 0)
113
+ rendererState.fabricWritePreviews = writePreviews;
114
+ }
115
+ else {
116
+ if (rendererState.fabricCoreToolPreviews) {
117
+ audits = restoreFabricCoreToolPreviews(audits, rendererState.fabricCoreToolPreviews);
118
+ }
119
+ if (rendererState.fabricAgentPreviews) {
120
+ audits = restoreFabricAgentPreviews(audits, rendererState.fabricAgentPreviews);
121
+ }
122
+ if (rendererState.fabricCallHeadlinePreviews) {
123
+ audits = restoreFabricCallHeadlinePreviews(audits, rendererState.fabricCallHeadlinePreviews);
124
+ }
125
+ if (rendererState.fabricWritePreviews) {
126
+ audits = restoreFabricWritePreviews(audits, rendererState.fabricWritePreviews);
127
+ }
128
+ }
129
+ const phases = details.phases;
130
+ const nl = "\n";
131
+ const allRowIndexes = (lines, enabled) => enabled ? new Set(lines.map((_line, index) => index)) : undefined;
132
+ const corePreviewContext = { cwd: context.cwd, settings: codePreviewSettings };
133
+ const showNestedToolCalls = state.initialized
134
+ ? state.config.ui.showNestedToolCalls
135
+ : DEFAULT_FABRIC_CONFIG.ui.showNestedToolCalls;
136
+ const renderBody = (audit, limit) => {
137
+ const core = renderCoreToolBody(audit, theme, {
138
+ cwd: context.cwd,
139
+ settings: codePreviewSettings,
140
+ expanded,
141
+ maxLines: limit,
142
+ ...(context?.invalidate ? { invalidate: context.invalidate } : {}),
143
+ });
144
+ if (core)
145
+ return { body: core.lines.join(nl), hidden: core.hidden };
146
+ if (coreToolRendererEnabled(audit, codePreviewSettings))
147
+ return null;
148
+ const body = nestedCallBody(audit);
149
+ if (!body)
150
+ return null;
151
+ const bodyLines = safeTerminalText(body).split(nl);
152
+ while (bodyLines.length > 0) {
153
+ const last = bodyLines[bodyLines.length - 1];
154
+ if (last === undefined || last.trim() === "")
155
+ bodyLines.pop();
156
+ else
157
+ break;
158
+ }
159
+ if (bodyLines.length === 0)
160
+ return null;
161
+ const shown = bodyLines.slice(0, limit);
162
+ return {
163
+ body: shown.map((line) => theme.fg("toolOutput", line || " ")).join(nl),
164
+ hidden: bodyLines.length - shown.length,
165
+ };
166
+ };
167
+ if (isPartial) {
168
+ const progress = details.progress;
169
+ if (audits.length === 0) {
170
+ return trackRows(new Text(theme.fg("warning", `◆ ${safeTerminalText(progress ?? "Running Fabric program…")}`), 0, 0));
171
+ }
172
+ if (audits.length === 1) {
173
+ const audit = audits[0];
174
+ const glyph = audit.success === undefined
175
+ ? theme.fg("warning", "◐")
176
+ : audit.success === false
177
+ ? theme.fg("error", "✗")
178
+ : theme.fg("dim", "›");
179
+ let text = `${glyph} ${nestedCallTitle(audit, theme, context?.invalidate, corePreviewContext)}`;
180
+ const nested = renderNestedAgentToolLines(audit, theme, {
181
+ expanded,
182
+ showTools: showNestedToolCalls,
183
+ core: corePreviewContext,
184
+ ...(context?.invalidate ? { invalidate: context.invalidate } : {}),
185
+ });
186
+ const progressLine = singleCallProgressLine(progress, nested);
187
+ if (audit.success === false && audit.error) {
188
+ text += nl + ` ${theme.fg("error", safeTerminalText(audit.error))}`;
189
+ }
190
+ else {
191
+ const rendered = renderBody(audit, expanded || coreToolRendererEnabled(audit, codePreviewSettings) ? 200 : 10);
192
+ if (rendered) {
193
+ text += nl + rendered.body;
194
+ if (rendered.hidden > 0) {
195
+ text += nl + theme.fg("dim", `… ${countLabel(rendered.hidden, "line")}`);
196
+ if (!expanded)
197
+ text += theme.fg("dim", " · ") + expandHint(theme);
198
+ }
199
+ }
200
+ else if (isCoreToolAudit(audit) &&
201
+ !expanded &&
202
+ !coreToolPreviewEnabled(audit, codePreviewSettings)) {
203
+ text += nl + theme.fg("muted", "╰─ ") + expandHint(theme);
204
+ }
205
+ else if (progressLine) {
206
+ text += nl + theme.fg("dim", progressLine);
207
+ }
208
+ }
209
+ if (audit.success !== false && nested[0]) {
210
+ const firstBreak = text.indexOf(nl);
211
+ if (firstBreak < 0)
212
+ text += ` ${nested[0]}`;
213
+ else
214
+ text = `${text.slice(0, firstBreak)} ${nested[0]}${text.slice(firstBreak)}`;
215
+ if (nested.length > 1)
216
+ text += nl + nested.slice(1).join(nl);
217
+ }
218
+ const textLines = text.split(nl);
219
+ return trackRows(renderBoundedLines(textLines, theme, codePreviewSettings.diffIntensity, allRowIndexes(textLines, nested.length > 0)));
220
+ }
221
+ let preview;
222
+ for (let index = audits.length - 1; index >= 0; index--) {
223
+ const audit = audits[index];
224
+ if (audit.tool !== "write" || audit.success === false)
225
+ continue;
226
+ const rendered = renderBody(audit, expanded ? 20 : 10);
227
+ if (rendered) {
228
+ preview = { auditIndex: index, ...rendered };
229
+ break;
230
+ }
231
+ }
232
+ return trackRows(renderFabricMulticallPartial({
233
+ audits,
234
+ phases,
235
+ progress,
236
+ expanded,
237
+ preview,
238
+ core: corePreviewContext,
239
+ showNestedToolCalls,
240
+ }, theme, context?.invalidate));
241
+ }
242
+ const output = result.content
243
+ .filter((part) => part.type === "text")
244
+ .map((part) => part.text)
245
+ .join(nl);
246
+ const styleOutputLines = (lines) => {
247
+ if (!details.outputFormat || lines.length === 0) {
248
+ return lines.map((line) => theme.fg("toolOutput", line || " "));
249
+ }
250
+ const highlightedStart = Math.min(lines.length, details.outputFormatStartLine ?? 0);
251
+ const highlightedCount = Math.min(lines.length - highlightedStart, details.outputFormatLines ?? lines.length);
252
+ const highlightedSource = lines.slice(highlightedStart, highlightedStart + highlightedCount);
253
+ const highlighted = highlightedSource.length > 0
254
+ ? highlightCode(highlightedSource.join(nl), details.outputFormat, context?.invalidate)
255
+ : [];
256
+ const styledPrefix = highlighted?.map((line) => line || " ")
257
+ ?? highlightedSource.map((line) => theme.fg("toolOutput", line || " "));
258
+ return [
259
+ ...lines.slice(0, highlightedStart).map((line) => theme.fg("toolOutput", line || " ")),
260
+ ...styledPrefix,
261
+ ...lines
262
+ .slice(highlightedStart + highlightedCount)
263
+ .map((line) => theme.fg("toolOutput", line || " ")),
264
+ ];
265
+ };
266
+ const failed = details.success === false;
267
+ if (audits.length === 0) {
268
+ if (failed && details.error) {
269
+ return trackRows(new Text(theme.fg("error", `✗ ${safeTerminalText(details.error)}`), 0, 0));
270
+ }
271
+ if (!output)
272
+ return trackRows(new Text(theme.fg("dim", "✓ Fabric"), 0, 0));
273
+ const lines = safeTerminalText(output).split(nl);
274
+ const limit = expanded ? Math.min(lines.length, 200) : 12;
275
+ const shown = lines.slice(0, limit);
276
+ let text = styleOutputLines(shown).join(nl);
277
+ if (lines.length > shown.length) {
278
+ text += nl + theme.fg("dim", `… ${countLabel(lines.length - shown.length, "line")}`);
279
+ if (!expanded)
280
+ text += theme.fg("dim", " · ") + expandHint(theme);
281
+ }
282
+ return trackRows(renderBoundedLines(text.split(nl), theme, codePreviewSettings.diffIntensity));
283
+ }
284
+ if (audits.length === 1) {
285
+ const audit = audits[0];
286
+ let text = nestedCallTitle(audit, theme, context?.invalidate, corePreviewContext);
287
+ const nested = renderNestedAgentToolLines(audit, theme, {
288
+ expanded,
289
+ showTools: showNestedToolCalls,
290
+ core: corePreviewContext,
291
+ ...(context?.invalidate ? { invalidate: context.invalidate } : {}),
292
+ });
293
+ if (audit.success === false) {
294
+ if (audit.error) {
295
+ text += nl + theme.fg("error", safeTerminalText(audit.error));
296
+ }
297
+ return trackRows(new Text(text, 0, 0));
298
+ }
299
+ if (nested[0]) {
300
+ text += ` ${nested[0]}`;
301
+ if (nested.length > 1)
302
+ text += nl + nested.slice(1).join(nl);
303
+ }
304
+ const limit = expanded || coreToolRendererEnabled(audit, codePreviewSettings) ? 200 : 12;
305
+ const rendered = nested.length > 0 ? null : renderBody(audit, limit);
306
+ if (rendered) {
307
+ text += nl + rendered.body;
308
+ if (rendered.hidden > 0) {
309
+ text += nl + theme.fg("dim", `… ${countLabel(rendered.hidden, "line")}`);
310
+ if (!expanded)
311
+ text += theme.fg("dim", " · ") + expandHint(theme);
312
+ }
313
+ const readHint = modelReadHint(audits, output, theme);
314
+ if (readHint)
315
+ text += nl + readHint;
316
+ }
317
+ else if (isCoreToolAudit(audit) &&
318
+ !expanded &&
319
+ !coreToolPreviewEnabled(audit, codePreviewSettings)) {
320
+ text += nl + theme.fg("muted", "╰─ ") + expandHint(theme);
321
+ }
322
+ else if (nested.length === 0 && output && !isCoreToolAudit(audit)) {
323
+ const lines = safeTerminalText(output).split(nl);
324
+ const outLimit = expanded ? Math.min(lines.length, 200) : 12;
325
+ const outShown = lines.slice(0, outLimit);
326
+ text += nl + styleOutputLines(outShown).join(nl);
327
+ if (lines.length > outShown.length) {
328
+ text += nl + theme.fg("dim", `… ${countLabel(lines.length - outShown.length, "line")}`);
329
+ if (!expanded)
330
+ text += theme.fg("dim", " · ") + expandHint(theme);
331
+ }
332
+ }
333
+ const textLines = text.split(nl);
334
+ return trackRows(renderBoundedLines(textLines, theme, codePreviewSettings.diffIntensity, allRowIndexes(textLines, nested.length > 0)));
335
+ }
336
+ const failedCalls = audits.filter((audit) => audit.success === false).length;
337
+ const status = failed ? "failed" : "complete";
338
+ const statusColor = failed ? "error" : "success";
339
+ const metadata = [
340
+ countLabel(audits.length, "nested call"),
341
+ failedCalls > 0 ? `${failedCalls} failed` : undefined,
342
+ phases.length > 0 ? countLabel(phases.length, "phase") : undefined,
343
+ ].filter((value) => Boolean(value));
344
+ let text = theme.fg(statusColor, `${failed ? "✗" : "✓"} Fabric ${status}`);
345
+ if (metadata.length > 0)
346
+ text += theme.fg("dim", ` · ${metadata.join(" · ")}`);
347
+ if (phases.length > 0)
348
+ text += nl + theme.fg("dim", phases.map((phase) => `◆ ${phase}`).join(" "));
349
+ const callLimit = fabricMulticallCallLimit(expanded);
350
+ const callsShown = audits.slice(0, callLimit);
351
+ const callsHidden = audits.length - callsShown.length;
352
+ let collapsedPreview;
353
+ if (!expanded) {
354
+ for (let index = callsShown.length - 1; index >= 0; index--) {
355
+ const audit = callsShown[index];
356
+ if (audit.tool !== "write" || audit.success === false)
357
+ continue;
358
+ const rendered = renderBody(audit, 10);
359
+ if (rendered) {
360
+ collapsedPreview = { auditIndex: index, ...rendered };
361
+ break;
362
+ }
363
+ }
364
+ }
365
+ let firstNested = true;
366
+ const textRows = text.split(nl);
367
+ const agentWrapLineIndexes = new Set();
368
+ for (let index = 0; index < callsShown.length; index++) {
369
+ const audit = callsShown[index];
370
+ if (expanded && !firstNested)
371
+ textRows.push("");
372
+ firstNested = false;
373
+ const glyph = audit.success === false ? theme.fg("error", "✗") : theme.fg("dim", "›");
374
+ const nested = renderNestedAgentToolLines(audit, theme, {
375
+ expanded,
376
+ compact: !expanded,
377
+ showTools: showNestedToolCalls,
378
+ core: corePreviewContext,
379
+ ...(context?.invalidate ? { invalidate: context.invalidate } : {}),
380
+ });
381
+ let callRow = `${glyph} ${nestedCallTitle(audit, theme, context?.invalidate, corePreviewContext)}`;
382
+ if (nested[0] && audit.success !== false) {
383
+ callRow += ` ${nested[0]}`;
384
+ if (expanded)
385
+ agentWrapLineIndexes.add(textRows.length);
386
+ }
387
+ textRows.push(callRow);
388
+ if (audit.success === false && audit.error) {
389
+ textRows.push(` ${theme.fg("error", safeTerminalText(audit.error))}`);
390
+ }
391
+ else {
392
+ if (nested.length > 1) {
393
+ for (const line of nested.slice(1)) {
394
+ agentWrapLineIndexes.add(textRows.length);
395
+ textRows.push(line);
396
+ }
397
+ }
398
+ const rendered = nested.length === 0 && expanded ? renderBody(audit, 40) : null;
399
+ if (rendered) {
400
+ textRows.push(...rendered.body.split(nl));
401
+ if (rendered.hidden > 0) {
402
+ textRows.push(theme.fg("dim", `… ${countLabel(rendered.hidden, "line")}`));
403
+ }
404
+ }
405
+ else if (nested.length === 0 && collapsedPreview?.auditIndex === index) {
406
+ textRows.push(...collapsedPreview.body.split(nl).map((line) => ` ${line}`));
407
+ if (collapsedPreview.hidden > 0) {
408
+ textRows.push(theme.fg("dim", ` … ${countLabel(collapsedPreview.hidden, "line")}`));
409
+ }
410
+ }
411
+ }
412
+ }
413
+ text = textRows.join(nl);
414
+ if (callsHidden > 0) {
415
+ text += nl + theme.fg("dim", `… ${countLabel(callsHidden, "nested call")} hidden`);
416
+ if (!expanded)
417
+ text += theme.fg("dim", " · ") + expandHint(theme);
418
+ }
419
+ const readHint = modelReadHint(audits, output, theme);
420
+ if (readHint)
421
+ text += nl + readHint;
422
+ const showOutput = failed || expanded;
423
+ if (showOutput && output) {
424
+ const lines = safeTerminalText(output).split(nl);
425
+ const limit = expanded ? Math.min(lines.length, 200) : 6;
426
+ const shown = lines.slice(0, limit);
427
+ if (shown.length > 0) {
428
+ if (expanded)
429
+ text += nl + theme.fg("dim", "↩ return");
430
+ text += nl + styleOutputLines(shown).join(nl);
431
+ if (lines.length > shown.length) {
432
+ text += nl + theme.fg("dim", `… ${countLabel(lines.length - shown.length, "line")} hidden`);
433
+ if (!expanded)
434
+ text += theme.fg("dim", " · ") + expandHint(theme);
435
+ }
436
+ }
437
+ }
438
+ return trackRows(renderBoundedLines(text.split(nl), theme, codePreviewSettings.diffIntensity, agentWrapLineIndexes));
439
+ },
440
+ async execute(toolCallId, params, signal, onUpdate, context) {
441
+ await state.ensure(context);
442
+ // Defensive: a non-strict provider may deliver code as an array of lines;
443
+ // join before type-checking so the program runs instead of failing on a
444
+ // non-string code param. Strict providers reject an array upstream
445
+ // against the Type.String schema, so this branch is a no-op there.
446
+ const code = Array.isArray(params.code) ? params.code.join("\n") : params.code;
447
+ const result = await state.execution.execute({
448
+ code,
449
+ ...(params.strings ? { strings: params.strings } : {}),
450
+ signal,
451
+ parentToolCallId: toolCallId,
452
+ context,
453
+ ...(params.tokenBudget !== undefined ? { tokenBudget: params.tokenBudget } : {}),
454
+ ...(params.agentBudget !== undefined ? { maxAgentCalls: params.agentBudget } : {}),
455
+ ...(params.display
456
+ ? {
457
+ display: {
458
+ ...(params.display.name !== undefined && { name: params.display.name }),
459
+ ...(params.display.description !== undefined && { description: params.display.description }),
460
+ },
461
+ }
462
+ : {}),
463
+ onPartial(snapshot) {
464
+ onUpdate?.({
465
+ content: [{ type: "text", text: snapshot.progress ?? "" }],
466
+ details: {
467
+ progress: snapshot.progress,
468
+ audits: snapshot.audits,
469
+ phases: snapshot.phases,
470
+ },
471
+ });
472
+ },
473
+ });
474
+ const selectedResultFormat = params.resultFormat ?? state.config.executor.resultFormat;
475
+ const pendingHandoff = state.claimHandoff(result, context.sessionManager.getSessionId(), selectedResultFormat);
476
+ if (pendingHandoff) {
477
+ pendingHandoffs.set(toolCallId, pendingHandoff);
478
+ context.ui.setStatus("fabric-prewalk", `waiting for fabric_exec boundary → ${String(pendingHandoff.args.model ?? "executor")}`);
479
+ }
480
+ const formattedValue = formatFabricValue(result.value, selectedResultFormat);
481
+ const sections = [...result.logs];
482
+ const logPrefix = result.logs.join("\n\n");
483
+ if (formattedValue.text)
484
+ sections.push(formattedValue.text);
485
+ if (result.error)
486
+ sections.push(`Runtime error: ${result.error}`);
487
+ const rawOutput = sections.join("\n\n");
488
+ const outputWillTruncate = rawOutput.length > state.config.executor.maxOutputChars;
489
+ const outputFormat = formattedValue.language &&
490
+ formattedValue.text &&
491
+ (result.logs.length === 0 || !outputWillTruncate)
492
+ ? formattedValue.language
493
+ : undefined;
494
+ const outputFormatStartLine = result.logs.length > 0
495
+ ? countNewlines(logPrefix) + 2
496
+ : 0;
497
+ const persistedDetails = createFabricPersistedExecutionDetails({
498
+ ...result,
499
+ ...(outputFormat ? { outputFormat, outputFormatStartLine } : {}),
500
+ ...(outputFormat
501
+ ? {
502
+ outputFormatLines: formattedValue.highlightedLineCount
503
+ ?? countNewlines(formattedValue.text) + 1,
504
+ }
505
+ : {}),
506
+ });
507
+ if (result.typeErrors) {
508
+ const text = result.typeErrors
509
+ .map((error) => error.line > 0
510
+ ? `Line ${error.line}:${error.column} — ${error.message}`
511
+ : error.message)
512
+ .join("\n");
513
+ return {
514
+ content: [{ type: "text", text: `Type errors; code was not executed:\n${text}` }],
515
+ details: persistedDetails,
516
+ isError: true,
517
+ };
518
+ }
519
+ const output = truncateMiddle(rawOutput || "(no output)", state.config.executor.maxOutputChars);
520
+ const terminate = pendingHandoff !== undefined ||
521
+ (result.success &&
522
+ typeof result.value === "object" &&
523
+ result.value !== null &&
524
+ "terminate" in result.value &&
525
+ result.value.terminate === true);
526
+ // A nested `pi.read` of an image returns image content blocks that
527
+ // normalizeResult stripped (the sandbox holds text only). The provider
528
+ // handed them out-of-band to each call audit; re-attach them here so
529
+ // pi core's ToolExecutionComponent renders a kitty image preview — the
530
+ // same path a native `read` takes — for single-call AND multitool
531
+ // reads. pi-vision-handoff keeps the image in the nested tool_result
532
+ // (its `context` hook swaps image→description on the LLM-bound
533
+ // fabric_exec clone), so every read audit carries its image here.
534
+ const mediaBlocks = [];
535
+ for (const audit of result.audits) {
536
+ if (audit.media)
537
+ mediaBlocks.push(...audit.media);
538
+ }
539
+ const singleAudit = result.audits.length === 1 ? result.audits[0] : undefined;
540
+ // The read tool's own text note (e.g. "Read image file [image/png]"),
541
+ // captured after the handoff stripped pi's non-vision note. Used as
542
+ // the single-call body + content text so the preview shows the kitty
543
+ // image + the clean note (like pi core) instead of the handoff's
544
+ // verbose description. Multitool renders each read's note as its own
545
+ // call body, so the joined program return suffices as the content text
546
+ // there.
547
+ const mediaNote = singleAudit?.mediaNote;
548
+ // The base64 payload now lives in the result content; discard the
549
+ // duplicate in-memory audit copies before returning.
550
+ for (const audit of result.audits) {
551
+ delete audit.media;
552
+ delete audit.mediaNote;
553
+ }
554
+ const content = [];
555
+ if (mediaBlocks.length > 0) {
556
+ // Mirror a native `read`: keep the image block(s) for pi core's kitty
557
+ // render alongside the short note. The handoff's `context` hook
558
+ // swaps each image for its description on the LLM-bound clone, so the
559
+ // text-only model still receives the description while the terminal
560
+ // shows the kitty image.
561
+ const textOutput = singleAudit && mediaNote
562
+ ? mediaNote
563
+ : (output === "(no output)" ? "" : output);
564
+ if (textOutput)
565
+ content.push({ type: "text", text: textOutput });
566
+ for (const block of mediaBlocks)
567
+ content.push(block);
568
+ if (singleAudit && mediaNote) {
569
+ singleAudit.result = mediaNote;
570
+ }
571
+ }
572
+ else {
573
+ content.push({ type: "text", text: output });
574
+ }
575
+ return {
576
+ content,
577
+ details: persistedDetails,
578
+ ...(terminate ? { terminate: true } : {}),
579
+ ...(result.success ? {} : { isError: true }),
580
+ };
581
+ },
582
+ }), { mode: codePreviewSettings.toolCallBackground });
583
+ //# sourceMappingURL=fabric-exec-tool.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fabric-exec-tool.js","sourceRoot":"","sources":["../src/fabric-exec-tool.ts"],"names":[],"mappings":"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"}