@narumitw/pi-subagents 2.0.1 → 2.0.3
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/README.md +20 -7
- package/dist/chunks/auto-transport-SY2VHUFH.ts +109 -0
- package/dist/chunks/auto-transport-SY2VHUFH.ts.map +7 -0
- package/dist/chunks/capability-grant-CGEWOEKE.ts +19 -0
- package/dist/chunks/capability-grant-CGEWOEKE.ts.map +7 -0
- package/dist/chunks/chunk-434NII74.ts +282 -0
- package/dist/chunks/chunk-434NII74.ts.map +7 -0
- package/dist/chunks/chunk-47SK2QYC.ts +56 -0
- package/dist/chunks/chunk-47SK2QYC.ts.map +7 -0
- package/dist/chunks/chunk-6KJ34M6S.ts +159 -0
- package/dist/chunks/chunk-6KJ34M6S.ts.map +7 -0
- package/dist/chunks/chunk-7OBINKFM.ts +80 -0
- package/dist/chunks/chunk-7OBINKFM.ts.map +7 -0
- package/dist/chunks/chunk-7QPPBBXZ.ts +335 -0
- package/dist/chunks/chunk-7QPPBBXZ.ts.map +7 -0
- package/dist/chunks/chunk-AEUYS7JC.ts +73 -0
- package/dist/chunks/chunk-AEUYS7JC.ts.map +7 -0
- package/dist/chunks/chunk-BFK2Z4ZF.ts +189 -0
- package/dist/chunks/chunk-BFK2Z4ZF.ts.map +7 -0
- package/dist/chunks/chunk-BOAXY55Y.ts +153 -0
- package/dist/chunks/chunk-BOAXY55Y.ts.map +7 -0
- package/dist/chunks/chunk-C4L6P266.ts +22 -0
- package/dist/chunks/chunk-C4L6P266.ts.map +7 -0
- package/dist/chunks/chunk-DPPVEQAM.ts +29 -0
- package/dist/chunks/chunk-DPPVEQAM.ts.map +7 -0
- package/dist/chunks/chunk-DQMN4OYM.ts +913 -0
- package/dist/chunks/chunk-DQMN4OYM.ts.map +7 -0
- package/dist/chunks/chunk-DSOOH73Y.ts +238 -0
- package/dist/chunks/chunk-DSOOH73Y.ts.map +7 -0
- package/dist/chunks/chunk-EFBPISNT.ts +421 -0
- package/dist/chunks/chunk-EFBPISNT.ts.map +7 -0
- package/dist/chunks/chunk-EWWXFU7N.ts +150 -0
- package/dist/chunks/chunk-EWWXFU7N.ts.map +7 -0
- package/dist/chunks/chunk-F4L2UVSK.ts +380 -0
- package/dist/chunks/chunk-F4L2UVSK.ts.map +7 -0
- package/dist/chunks/chunk-F5YWVHQX.ts +1543 -0
- package/dist/chunks/chunk-F5YWVHQX.ts.map +7 -0
- package/dist/chunks/chunk-G3RSMSXJ.ts +63 -0
- package/dist/chunks/chunk-G3RSMSXJ.ts.map +7 -0
- package/dist/chunks/chunk-G6VZTCFH.ts +70 -0
- package/dist/chunks/chunk-G6VZTCFH.ts.map +7 -0
- package/dist/chunks/chunk-H3FP6DLR.ts +160 -0
- package/dist/chunks/chunk-H3FP6DLR.ts.map +7 -0
- package/dist/chunks/chunk-HA36LPCO.ts +130 -0
- package/dist/chunks/chunk-HA36LPCO.ts.map +7 -0
- package/dist/chunks/chunk-HKC4ES4B.ts +65 -0
- package/dist/chunks/chunk-HKC4ES4B.ts.map +7 -0
- package/dist/chunks/chunk-HOP5FXDT.ts +27 -0
- package/dist/chunks/chunk-HOP5FXDT.ts.map +7 -0
- package/dist/chunks/chunk-I2FAK44T.ts +324 -0
- package/dist/chunks/chunk-I2FAK44T.ts.map +7 -0
- package/dist/chunks/chunk-IGAMVWFN.ts +139 -0
- package/dist/chunks/chunk-IGAMVWFN.ts.map +7 -0
- package/dist/chunks/chunk-KMGKCEO4.ts +38 -0
- package/dist/chunks/chunk-KMGKCEO4.ts.map +7 -0
- package/dist/chunks/chunk-N7BLVXKK.ts +73 -0
- package/dist/chunks/chunk-N7BLVXKK.ts.map +7 -0
- package/dist/chunks/chunk-NIF42QMF.ts +297 -0
- package/dist/chunks/chunk-NIF42QMF.ts.map +7 -0
- package/dist/chunks/chunk-O4VO6JUJ.ts +52 -0
- package/dist/chunks/chunk-O4VO6JUJ.ts.map +7 -0
- package/dist/chunks/chunk-ONDTY4EL.ts +91 -0
- package/dist/chunks/chunk-ONDTY4EL.ts.map +7 -0
- package/dist/chunks/chunk-OVPHFGKO.ts +1769 -0
- package/dist/chunks/chunk-OVPHFGKO.ts.map +7 -0
- package/dist/chunks/chunk-P7OH4XMF.ts +60 -0
- package/dist/chunks/chunk-P7OH4XMF.ts.map +7 -0
- package/dist/chunks/chunk-PSK43Y6A.ts +339 -0
- package/dist/chunks/chunk-PSK43Y6A.ts.map +7 -0
- package/dist/chunks/chunk-QBORTI4W.ts +468 -0
- package/dist/chunks/chunk-QBORTI4W.ts.map +7 -0
- package/dist/chunks/chunk-QDVGH2X7.ts +171 -0
- package/dist/chunks/chunk-QDVGH2X7.ts.map +7 -0
- package/dist/chunks/chunk-RHRQMT7Q.ts +490 -0
- package/dist/chunks/chunk-RHRQMT7Q.ts.map +7 -0
- package/dist/chunks/chunk-RRR66UWR.ts +28 -0
- package/dist/chunks/chunk-RRR66UWR.ts.map +7 -0
- package/dist/chunks/chunk-RSUXZD6S.ts +275 -0
- package/dist/chunks/chunk-RSUXZD6S.ts.map +7 -0
- package/dist/chunks/chunk-RTCVYIZA.ts +221 -0
- package/dist/chunks/chunk-RTCVYIZA.ts.map +7 -0
- package/dist/chunks/chunk-S2IWVK3J.ts +44 -0
- package/dist/chunks/chunk-S2IWVK3J.ts.map +7 -0
- package/dist/chunks/chunk-SCZ33MYW.ts +52 -0
- package/dist/chunks/chunk-SCZ33MYW.ts.map +7 -0
- package/dist/chunks/chunk-SWGQLFSD.ts +60 -0
- package/dist/chunks/chunk-SWGQLFSD.ts.map +7 -0
- package/dist/chunks/chunk-UMBPMVJW.ts +22 -0
- package/dist/chunks/chunk-UMBPMVJW.ts.map +7 -0
- package/dist/chunks/chunk-UVFVHIOP.ts +735 -0
- package/dist/chunks/chunk-UVFVHIOP.ts.map +7 -0
- package/dist/chunks/completion-delivery-YPOWSSV3.ts +16 -0
- package/dist/chunks/completion-delivery-YPOWSSV3.ts.map +7 -0
- package/dist/chunks/config-status-J4GPWP46.ts +34 -0
- package/dist/chunks/config-status-J4GPWP46.ts.map +7 -0
- package/dist/chunks/config-ui-3IBMHTQB.ts +1146 -0
- package/dist/chunks/config-ui-3IBMHTQB.ts.map +7 -0
- package/dist/chunks/consult-NYXVDN5G.ts +518 -0
- package/dist/chunks/consult-NYXVDN5G.ts.map +7 -0
- package/dist/chunks/context-QDKLVQXE.ts +11 -0
- package/dist/chunks/context-QDKLVQXE.ts.map +7 -0
- package/dist/chunks/create-stateful-transport-4WKZHRSI.ts +130 -0
- package/dist/chunks/create-stateful-transport-4WKZHRSI.ts.map +7 -0
- package/dist/chunks/cwd-policy-NB6XZ5GF.ts +17 -0
- package/dist/chunks/cwd-policy-NB6XZ5GF.ts.map +7 -0
- package/dist/chunks/delegation-contract-WJPT4FVS.ts +24 -0
- package/dist/chunks/delegation-contract-WJPT4FVS.ts.map +7 -0
- package/dist/chunks/discovery-K25T3SH4.ts +12 -0
- package/dist/chunks/discovery-K25T3SH4.ts.map +7 -0
- package/dist/chunks/execution-DS2DEIQZ.ts +4034 -0
- package/dist/chunks/execution-DS2DEIQZ.ts.map +7 -0
- package/dist/chunks/in-process-transport-TEYAWSEC.ts +38 -0
- package/dist/chunks/in-process-transport-TEYAWSEC.ts.map +7 -0
- package/dist/chunks/inspect-UOQQ3KNL.ts +619 -0
- package/dist/chunks/inspect-UOQQ3KNL.ts.map +7 -0
- package/dist/chunks/peer-communication-KL36Z6CO.ts +294 -0
- package/dist/chunks/peer-communication-KL36Z6CO.ts.map +7 -0
- package/dist/chunks/persistence-VSGXAW4P.ts +344 -0
- package/dist/chunks/persistence-VSGXAW4P.ts.map +7 -0
- package/dist/chunks/registry-E6XPJB7L.ts +1324 -0
- package/dist/chunks/registry-E6XPJB7L.ts.map +7 -0
- package/dist/chunks/retained-semantic-state-7WXSGRJU.ts +81 -0
- package/dist/chunks/retained-semantic-state-7WXSGRJU.ts.map +7 -0
- package/dist/chunks/rpc-transport-Y6LA5BOP.ts +1154 -0
- package/dist/chunks/rpc-transport-Y6LA5BOP.ts.map +7 -0
- package/dist/chunks/runtime-policy-5YELCOVC.ts +15 -0
- package/dist/chunks/runtime-policy-5YELCOVC.ts.map +7 -0
- package/dist/chunks/semantic-snapshot-WPJ3UAFW.ts +19 -0
- package/dist/chunks/semantic-snapshot-WPJ3UAFW.ts.map +7 -0
- package/dist/chunks/spawn-idempotency-QGHO2WKC.ts +13 -0
- package/dist/chunks/spawn-idempotency-QGHO2WKC.ts.map +7 -0
- package/dist/chunks/stateful-lifecycle-JAR6K55H.ts +15 -0
- package/dist/chunks/stateful-lifecycle-JAR6K55H.ts.map +7 -0
- package/dist/chunks/subprocess-transport-C2XVR25R.ts +158 -0
- package/dist/chunks/subprocess-transport-C2XVR25R.ts.map +7 -0
- package/dist/chunks/workspace-WDKLN72J.ts +11 -0
- package/dist/chunks/workspace-WDKLN72J.ts.map +7 -0
- package/dist/index.ts +1057 -0
- package/dist/index.ts.map +7 -0
- package/package.json +9 -5
- package/src/index.ts +1 -1
- package/src/settings-reader.ts +208 -0
- package/src/settings.ts +22 -187
- package/src/stateful-registration.ts +1230 -0
- package/src/stateful-safety.ts +1 -1
- package/src/stateful.ts +2 -1234
- package/src/subagents-extension.ts +307 -0
- package/src/subagents.ts +1 -308
|
@@ -0,0 +1,171 @@
|
|
|
1
|
+
// @generated by scripts/build-runtime.mjs; do not edit.
|
|
2
|
+
// @ts-nocheck -- generated JavaScript uses a .ts extension for Pi's Jiti loader.
|
|
3
|
+
import {
|
|
4
|
+
COLLAPSED_LIST_LIMIT,
|
|
5
|
+
expansionHint,
|
|
6
|
+
recordList,
|
|
7
|
+
recordValue,
|
|
8
|
+
safeBlock,
|
|
9
|
+
safeLine,
|
|
10
|
+
statusBadge
|
|
11
|
+
} from "./chunk-BFK2Z4ZF.ts";
|
|
12
|
+
import {
|
|
13
|
+
MAX_TOOL_MESSAGE_BYTES
|
|
14
|
+
} from "./chunk-H3FP6DLR.ts";
|
|
15
|
+
|
|
16
|
+
// src/completion-render.ts
|
|
17
|
+
import { Box, Spacer, sliceByColumn, visibleWidth } from "@earendil-works/pi-tui";
|
|
18
|
+
var SUBAGENT_COMPLETION_MESSAGE_TYPE = "pi-subagent-completion";
|
|
19
|
+
var renderCompletionMessage = (message, options, theme) => {
|
|
20
|
+
const box = new Box(options.outputPad, 1, (text) => theme.bg("customMessageBg", text));
|
|
21
|
+
if (options.expanded) {
|
|
22
|
+
box.addChild(
|
|
23
|
+
new ExactText(
|
|
24
|
+
theme.fg("customMessageLabel", theme.bold(`[${SUBAGENT_COMPLETION_MESSAGE_TYPE}]`))
|
|
25
|
+
)
|
|
26
|
+
);
|
|
27
|
+
box.addChild(new Spacer(1));
|
|
28
|
+
box.addChild(
|
|
29
|
+
new ExactText(
|
|
30
|
+
safeBlock(messageText(message.content), "(no completion content)", MAX_TOOL_MESSAGE_BYTES),
|
|
31
|
+
(text) => theme.fg("customMessageText", text)
|
|
32
|
+
)
|
|
33
|
+
);
|
|
34
|
+
return box;
|
|
35
|
+
}
|
|
36
|
+
box.addChild(new ExactText(collapsedCompletion(message.content, message.details, theme)));
|
|
37
|
+
return box;
|
|
38
|
+
};
|
|
39
|
+
function collapsedCompletion(contentValue, detailsValue, theme) {
|
|
40
|
+
const content = safeBlock(messageText(contentValue), "", MAX_TOOL_MESSAGE_BYTES);
|
|
41
|
+
const details = recordValue(detailsValue) ?? {};
|
|
42
|
+
const completions = recordList(details.completions);
|
|
43
|
+
if (completions.length > 0 || details.completionCount !== void 0) {
|
|
44
|
+
return collapsedBatch(details, completions, theme);
|
|
45
|
+
}
|
|
46
|
+
return collapsedSingle(content, details, theme);
|
|
47
|
+
}
|
|
48
|
+
function collapsedSingle(content, details, theme) {
|
|
49
|
+
const agent = optionalLine(details.agent) || extractedField(content, "Agent") || "subagent";
|
|
50
|
+
const state = optionalLine(details.state) || extractedField(content, "State") || "completed";
|
|
51
|
+
const task = optionalLine(details.task) || extractedField(content, "Task");
|
|
52
|
+
const payload = payloadPreview(content);
|
|
53
|
+
const lines = [
|
|
54
|
+
`${statusBadge(theme, renderStatus(state))}${theme.fg("muted", " \xB7 ")}${theme.fg("customMessageLabel", theme.bold(agent))}`
|
|
55
|
+
];
|
|
56
|
+
if (task) lines.push(`${theme.fg("muted", "Task: ")}${theme.fg("customMessageText", task)}`);
|
|
57
|
+
if (payload) {
|
|
58
|
+
lines.push(`${theme.fg("muted", "Payload: ")}${theme.fg("customMessageText", payload)}`);
|
|
59
|
+
}
|
|
60
|
+
lines.push(expansionHint());
|
|
61
|
+
return lines.join("\n");
|
|
62
|
+
}
|
|
63
|
+
function collapsedBatch(details, completions, theme) {
|
|
64
|
+
const declaredCount = typeof details.completionCount === "number" && Number.isFinite(details.completionCount) ? Math.max(0, Math.floor(details.completionCount)) : completions.length;
|
|
65
|
+
const count = Math.max(declaredCount, completions.length);
|
|
66
|
+
const statuses = completions.map((completion) => renderStatus(optionalLine(completion.state)));
|
|
67
|
+
const icon = statuses.includes("failed") ? theme.fg("error", "\u2717") : statuses.some((status) => status !== "completed" && status !== "closed") ? theme.fg("warning", "\u25D0") : theme.fg("success", "\u2713");
|
|
68
|
+
const lines = [
|
|
69
|
+
`${icon} ${theme.fg("customMessageLabel", theme.bold(`${count} subagent completions`))}`
|
|
70
|
+
];
|
|
71
|
+
for (const completion of completions.slice(0, COLLAPSED_LIST_LIMIT)) {
|
|
72
|
+
const agent = optionalLine(completion.agent) || "subagent";
|
|
73
|
+
const state = optionalLine(completion.state) || "completed";
|
|
74
|
+
const task = optionalLine(completion.task);
|
|
75
|
+
lines.push(
|
|
76
|
+
`${theme.fg("muted", "\u2022 ")}${theme.fg("accent", agent)} \xB7 ${statusBadge(theme, renderStatus(state))}${task ? theme.fg("dim", ` \u2014 ${task}`) : ""}`
|
|
77
|
+
);
|
|
78
|
+
}
|
|
79
|
+
const visibleCount = Math.min(completions.length, COLLAPSED_LIST_LIMIT);
|
|
80
|
+
if (count > visibleCount) {
|
|
81
|
+
lines.push(theme.fg("muted", `\u2026 ${count - visibleCount} more`));
|
|
82
|
+
}
|
|
83
|
+
lines.push(expansionHint());
|
|
84
|
+
return lines.join("\n");
|
|
85
|
+
}
|
|
86
|
+
function messageText(value) {
|
|
87
|
+
if (typeof value === "string") return value;
|
|
88
|
+
if (!Array.isArray(value)) return "";
|
|
89
|
+
return value.flatMap((part) => {
|
|
90
|
+
const record = recordValue(part);
|
|
91
|
+
return record?.type === "text" && typeof record.text === "string" ? [record.text] : [];
|
|
92
|
+
}).join("\n");
|
|
93
|
+
}
|
|
94
|
+
function extractedField(content, label) {
|
|
95
|
+
const prefix = `${label}:`;
|
|
96
|
+
const line = content.split("\n").find((candidate) => candidate.startsWith(prefix));
|
|
97
|
+
return line ? safeLine(line.slice(prefix.length), "", 512) : "";
|
|
98
|
+
}
|
|
99
|
+
function payloadPreview(content) {
|
|
100
|
+
const marker = "\nPayload:\n";
|
|
101
|
+
const start = content.indexOf(marker);
|
|
102
|
+
if (start < 0) return "";
|
|
103
|
+
for (const line of content.slice(start + marker.length).split("\n")) {
|
|
104
|
+
const preview = safeLine(line, "", 1024);
|
|
105
|
+
if (preview) return preview;
|
|
106
|
+
}
|
|
107
|
+
return "";
|
|
108
|
+
}
|
|
109
|
+
function optionalLine(value) {
|
|
110
|
+
return typeof value === "string" ? safeLine(value, "", 512) : "";
|
|
111
|
+
}
|
|
112
|
+
function renderStatus(state) {
|
|
113
|
+
switch (state) {
|
|
114
|
+
case "failed":
|
|
115
|
+
return "failed";
|
|
116
|
+
case "cancelled":
|
|
117
|
+
return "cancelled";
|
|
118
|
+
case "interrupted":
|
|
119
|
+
return "interrupted";
|
|
120
|
+
case "closed":
|
|
121
|
+
return "closed";
|
|
122
|
+
case "blocked":
|
|
123
|
+
case "needs-input":
|
|
124
|
+
case "abstained":
|
|
125
|
+
case "stale":
|
|
126
|
+
return "warning";
|
|
127
|
+
default:
|
|
128
|
+
return "completed";
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
var ExactText = class {
|
|
132
|
+
constructor(value, style = (text) => text) {
|
|
133
|
+
this.value = value;
|
|
134
|
+
this.style = style;
|
|
135
|
+
}
|
|
136
|
+
value;
|
|
137
|
+
style;
|
|
138
|
+
render(width) {
|
|
139
|
+
const safeWidth = Math.max(1, width);
|
|
140
|
+
return this.value.split("\n").flatMap((line) => hardWrapExact(line, safeWidth)).map(this.style);
|
|
141
|
+
}
|
|
142
|
+
invalidate() {
|
|
143
|
+
}
|
|
144
|
+
};
|
|
145
|
+
function hardWrapExact(value, width) {
|
|
146
|
+
if (value.length === 0) return [""];
|
|
147
|
+
const columns = visibleWidth(value);
|
|
148
|
+
if (columns === 0) return [value];
|
|
149
|
+
const lines = [];
|
|
150
|
+
let column = 0;
|
|
151
|
+
while (column < columns) {
|
|
152
|
+
const chunk = sliceByColumn(value, column, width, true);
|
|
153
|
+
const chunkWidth = visibleWidth(chunk);
|
|
154
|
+
if (chunkWidth > 0) {
|
|
155
|
+
lines.push(chunk);
|
|
156
|
+
column += chunkWidth;
|
|
157
|
+
continue;
|
|
158
|
+
}
|
|
159
|
+
const oversized = sliceByColumn(value, column, width, false);
|
|
160
|
+
const oversizedWidth = visibleWidth(oversized);
|
|
161
|
+
lines.push("?".repeat(width));
|
|
162
|
+
column += Math.max(1, oversizedWidth);
|
|
163
|
+
}
|
|
164
|
+
return lines;
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
export {
|
|
168
|
+
SUBAGENT_COMPLETION_MESSAGE_TYPE,
|
|
169
|
+
renderCompletionMessage
|
|
170
|
+
};
|
|
171
|
+
//# sourceMappingURL=chunk-QDVGH2X7.ts.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../src/completion-render.ts"],
|
|
4
|
+
"sourcesContent": ["import type { MessageRenderer, Theme } from \"@earendil-works/pi-coding-agent\";\nimport { Box, type Component, Spacer, sliceByColumn, visibleWidth } from \"@earendil-works/pi-tui\";\nimport { MAX_TOOL_MESSAGE_BYTES } from \"./limits.js\";\nimport {\n\tCOLLAPSED_LIST_LIMIT,\n\texpansionHint,\n\ttype RenderStatus,\n\trecordList,\n\trecordValue,\n\tsafeBlock,\n\tsafeLine,\n\tstatusBadge,\n} from \"./render-common.js\";\n\nexport const SUBAGENT_COMPLETION_MESSAGE_TYPE = \"pi-subagent-completion\";\n\nexport const renderCompletionMessage: MessageRenderer = (message, options, theme) => {\n\tconst box = new Box(options.outputPad, 1, (text) => theme.bg(\"customMessageBg\", text));\n\tif (options.expanded) {\n\t\tbox.addChild(\n\t\t\tnew ExactText(\n\t\t\t\ttheme.fg(\"customMessageLabel\", theme.bold(`[${SUBAGENT_COMPLETION_MESSAGE_TYPE}]`)),\n\t\t\t),\n\t\t);\n\t\tbox.addChild(new Spacer(1));\n\t\tbox.addChild(\n\t\t\tnew ExactText(\n\t\t\t\tsafeBlock(messageText(message.content), \"(no completion content)\", MAX_TOOL_MESSAGE_BYTES),\n\t\t\t\t(text) => theme.fg(\"customMessageText\", text),\n\t\t\t),\n\t\t);\n\t\treturn box;\n\t}\n\n\tbox.addChild(new ExactText(collapsedCompletion(message.content, message.details, theme)));\n\treturn box;\n};\n\nfunction collapsedCompletion(contentValue: unknown, detailsValue: unknown, theme: Theme): string {\n\tconst content = safeBlock(messageText(contentValue), \"\", MAX_TOOL_MESSAGE_BYTES);\n\tconst details = recordValue(detailsValue) ?? {};\n\tconst completions = recordList(details.completions);\n\tif (completions.length > 0 || details.completionCount !== undefined) {\n\t\treturn collapsedBatch(details, completions, theme);\n\t}\n\treturn collapsedSingle(content, details, theme);\n}\n\nfunction collapsedSingle(content: string, details: Record<string, unknown>, theme: Theme): string {\n\tconst agent = optionalLine(details.agent) || extractedField(content, \"Agent\") || \"subagent\";\n\tconst state = optionalLine(details.state) || extractedField(content, \"State\") || \"completed\";\n\tconst task = optionalLine(details.task) || extractedField(content, \"Task\");\n\tconst payload = payloadPreview(content);\n\tconst lines = [\n\t\t`${statusBadge(theme, renderStatus(state))}${theme.fg(\"muted\", \" \u00B7 \")}${theme.fg(\"customMessageLabel\", theme.bold(agent))}`,\n\t];\n\tif (task) lines.push(`${theme.fg(\"muted\", \"Task: \")}${theme.fg(\"customMessageText\", task)}`);\n\tif (payload) {\n\t\tlines.push(`${theme.fg(\"muted\", \"Payload: \")}${theme.fg(\"customMessageText\", payload)}`);\n\t}\n\tlines.push(expansionHint());\n\treturn lines.join(\"\\n\");\n}\n\nfunction collapsedBatch(\n\tdetails: Record<string, unknown>,\n\tcompletions: Record<string, unknown>[],\n\ttheme: Theme,\n): string {\n\tconst declaredCount =\n\t\ttypeof details.completionCount === \"number\" && Number.isFinite(details.completionCount)\n\t\t\t? Math.max(0, Math.floor(details.completionCount))\n\t\t\t: completions.length;\n\tconst count = Math.max(declaredCount, completions.length);\n\tconst statuses = completions.map((completion) => renderStatus(optionalLine(completion.state)));\n\tconst icon = statuses.includes(\"failed\")\n\t\t? theme.fg(\"error\", \"\u2717\")\n\t\t: statuses.some((status) => status !== \"completed\" && status !== \"closed\")\n\t\t\t? theme.fg(\"warning\", \"\u25D0\")\n\t\t\t: theme.fg(\"success\", \"\u2713\");\n\tconst lines = [\n\t\t`${icon} ${theme.fg(\"customMessageLabel\", theme.bold(`${count} subagent completions`))}`,\n\t];\n\tfor (const completion of completions.slice(0, COLLAPSED_LIST_LIMIT)) {\n\t\tconst agent = optionalLine(completion.agent) || \"subagent\";\n\t\tconst state = optionalLine(completion.state) || \"completed\";\n\t\tconst task = optionalLine(completion.task);\n\t\tlines.push(\n\t\t\t`${theme.fg(\"muted\", \"\u2022 \")}${theme.fg(\"accent\", agent)} \u00B7 ${statusBadge(theme, renderStatus(state))}${task ? theme.fg(\"dim\", ` \u2014 ${task}`) : \"\"}`,\n\t\t);\n\t}\n\tconst visibleCount = Math.min(completions.length, COLLAPSED_LIST_LIMIT);\n\tif (count > visibleCount) {\n\t\tlines.push(theme.fg(\"muted\", `\u2026 ${count - visibleCount} more`));\n\t}\n\tlines.push(expansionHint());\n\treturn lines.join(\"\\n\");\n}\n\nfunction messageText(value: unknown): string {\n\tif (typeof value === \"string\") return value;\n\tif (!Array.isArray(value)) return \"\";\n\treturn value\n\t\t.flatMap((part) => {\n\t\t\tconst record = recordValue(part);\n\t\t\treturn record?.type === \"text\" && typeof record.text === \"string\" ? [record.text] : [];\n\t\t})\n\t\t.join(\"\\n\");\n}\n\nfunction extractedField(content: string, label: string): string {\n\tconst prefix = `${label}:`;\n\tconst line = content.split(\"\\n\").find((candidate) => candidate.startsWith(prefix));\n\treturn line ? safeLine(line.slice(prefix.length), \"\", 512) : \"\";\n}\n\nfunction payloadPreview(content: string): string {\n\tconst marker = \"\\nPayload:\\n\";\n\tconst start = content.indexOf(marker);\n\tif (start < 0) return \"\";\n\tfor (const line of content.slice(start + marker.length).split(\"\\n\")) {\n\t\tconst preview = safeLine(line, \"\", 1024);\n\t\tif (preview) return preview;\n\t}\n\treturn \"\";\n}\n\nfunction optionalLine(value: unknown): string {\n\treturn typeof value === \"string\" ? safeLine(value, \"\", 512) : \"\";\n}\n\nfunction renderStatus(state: string): RenderStatus {\n\tswitch (state) {\n\t\tcase \"failed\":\n\t\t\treturn \"failed\";\n\t\tcase \"cancelled\":\n\t\t\treturn \"cancelled\";\n\t\tcase \"interrupted\":\n\t\t\treturn \"interrupted\";\n\t\tcase \"closed\":\n\t\t\treturn \"closed\";\n\t\tcase \"blocked\":\n\t\tcase \"needs-input\":\n\t\tcase \"abstained\":\n\t\tcase \"stale\":\n\t\t\treturn \"warning\";\n\t\tdefault:\n\t\t\treturn \"completed\";\n\t}\n}\n\nclass ExactText implements Component {\n\tconstructor(\n\t\tprivate readonly value: string,\n\t\tprivate readonly style: (text: string) => string = (text) => text,\n\t) {}\n\n\trender(width: number): string[] {\n\t\tconst safeWidth = Math.max(1, width);\n\t\treturn this.value\n\t\t\t.split(\"\\n\")\n\t\t\t.flatMap((line) => hardWrapExact(line, safeWidth))\n\t\t\t.map(this.style);\n\t}\n\n\tinvalidate(): void {}\n}\n\nfunction hardWrapExact(value: string, width: number): string[] {\n\tif (value.length === 0) return [\"\"];\n\tconst columns = visibleWidth(value);\n\tif (columns === 0) return [value];\n\tconst lines: string[] = [];\n\tlet column = 0;\n\twhile (column < columns) {\n\t\tconst chunk = sliceByColumn(value, column, width, true);\n\t\tconst chunkWidth = visibleWidth(chunk);\n\t\tif (chunkWidth > 0) {\n\t\t\tlines.push(chunk);\n\t\t\tcolumn += chunkWidth;\n\t\t\tcontinue;\n\t\t}\n\t\tconst oversized = sliceByColumn(value, column, width, false);\n\t\tconst oversizedWidth = visibleWidth(oversized);\n\t\tlines.push(\"?\".repeat(width));\n\t\tcolumn += Math.max(1, oversizedWidth);\n\t}\n\treturn lines;\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|