@reforma/components 0.1.3 → 0.1.5
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/dist/ToggleButtonGroup/ToggleButtonGroup.module.css +1 -1
- package/dist/chat/ComposerBanner/ComposerBanner.d.ts.map +1 -1
- package/dist/chat/ComposerBanner/ComposerBanner.js +16 -15
- package/dist/chat/ComposerBanner/ComposerBanner.js.map +1 -1
- package/dist/chat/Message/turn/Message.module.css +1 -1
- package/dist/chat/Message/turn/Message.module.css.js +22 -16
- package/dist/chat/Message/turn/Message.module.css.js.map +1 -1
- package/dist/chat/Message/turn/MessageAssistantBody.d.ts +2 -1
- package/dist/chat/Message/turn/MessageAssistantBody.d.ts.map +1 -1
- package/dist/chat/Message/turn/MessageAssistantBody.js +148 -56
- package/dist/chat/Message/turn/MessageAssistantBody.js.map +1 -1
- package/dist/chat/Message/turn/MessageUserBubble.d.ts.map +1 -1
- package/dist/chat/Message/turn/MessageUserBubble.js +52 -53
- package/dist/chat/Message/turn/MessageUserBubble.js.map +1 -1
- package/dist/chat/Message/turn/workedCollapse.d.ts +16 -0
- package/dist/chat/Message/turn/workedCollapse.d.ts.map +1 -0
- package/dist/chat/Message/turn/workedCollapse.js +31 -0
- package/dist/chat/Message/turn/workedCollapse.js.map +1 -0
- package/dist/chat/Tool/agent/AgentTool.d.ts +10 -0
- package/dist/chat/Tool/agent/AgentTool.d.ts.map +1 -1
- package/dist/chat/Tool/agent/AgentTool.js +110 -99
- package/dist/chat/Tool/agent/AgentTool.js.map +1 -1
- package/dist/chat/Tool/index.d.ts +1 -1
- package/dist/chat/Tool/index.d.ts.map +1 -1
- package/dist/chat/Tool/index.js +45 -44
- package/dist/chat/index.js +62 -61
- package/dist/index.js +364 -363
- package/package.json +1 -1
|
@@ -1,39 +1,39 @@
|
|
|
1
|
-
import { Message as
|
|
2
|
-
import { ProgressLoader as
|
|
3
|
-
import { humanizeString as
|
|
4
|
-
import { isToolUIPart as
|
|
5
|
-
import { observer as
|
|
6
|
-
import { Box as
|
|
7
|
-
import { Pressable as
|
|
8
|
-
import { Shimmer as
|
|
1
|
+
import { Message as N } from "@reforma/icons/14";
|
|
2
|
+
import { ProgressLoader as k } from "@reforma/icons/assets";
|
|
3
|
+
import { humanizeString as w, basename as T, plural as F } from "@reforma/lib";
|
|
4
|
+
import { isToolUIPart as U, getToolName as B } from "ai";
|
|
5
|
+
import { observer as G } from "mobx-react-lite";
|
|
6
|
+
import { Box as S } from "../../../Box/Box.js";
|
|
7
|
+
import { Pressable as M } from "react-aria-components";
|
|
8
|
+
import { Shimmer as O } from "../../../Shimmer/Shimmer.js";
|
|
9
9
|
import { Show as f } from "../../../Show/Show.js";
|
|
10
|
-
import { Text as
|
|
11
|
-
import { useChat as
|
|
12
|
-
import { useMessageTurn as
|
|
13
|
-
import { getToolFailureRowState as
|
|
14
|
-
import { ToolShellCard as
|
|
15
|
-
import { useToolProgress as
|
|
16
|
-
import
|
|
10
|
+
import { Text as m } from "../../../Text/Text.js";
|
|
11
|
+
import { useChat as j } from "../../ChatContext.js";
|
|
12
|
+
import { useMessageTurn as W } from "../../Message/turn/messageTurnContext.js";
|
|
13
|
+
import { getToolFailureRowState as _, TOOL_INTERRUPTED_MESSAGE as D } from "../helpers.js";
|
|
14
|
+
import { ToolShellCard as V } from "../shell/ToolShellCard.js";
|
|
15
|
+
import { useToolProgress as z } from "../shell/toolProgress.js";
|
|
16
|
+
import Y from "../shell/ToolShellCard.module.css.js";
|
|
17
17
|
import h from "./AgentTool.module.css.js";
|
|
18
|
-
import { jsx as
|
|
19
|
-
const
|
|
18
|
+
import { jsx as i, jsxs as C } from "react/jsx-runtime";
|
|
19
|
+
const q = {
|
|
20
20
|
research: "Explore",
|
|
21
21
|
shell: "Shell",
|
|
22
22
|
verify: "Verify",
|
|
23
23
|
plan: "Plan"
|
|
24
|
-
},
|
|
24
|
+
}, H = {
|
|
25
25
|
research: "Exploring",
|
|
26
26
|
shell: "Running",
|
|
27
27
|
verify: "Verifying",
|
|
28
28
|
plan: "Planning"
|
|
29
29
|
};
|
|
30
|
-
function
|
|
30
|
+
function J(e) {
|
|
31
31
|
if (e == null || typeof e != "object")
|
|
32
32
|
return;
|
|
33
33
|
const t = e.error;
|
|
34
34
|
return typeof t == "string" && t.trim().length > 0 ? t.trim() : void 0;
|
|
35
35
|
}
|
|
36
|
-
function
|
|
36
|
+
function R(e) {
|
|
37
37
|
for (const t of [e.output, e.input]) {
|
|
38
38
|
if (t == null || typeof t != "object")
|
|
39
39
|
continue;
|
|
@@ -42,14 +42,14 @@ function q(e) {
|
|
|
42
42
|
return r.trim();
|
|
43
43
|
}
|
|
44
44
|
}
|
|
45
|
-
function
|
|
46
|
-
const t = e?.trim() || "research", r =
|
|
45
|
+
function p(e) {
|
|
46
|
+
const t = e?.trim() || "research", r = q[t];
|
|
47
47
|
return r || t.charAt(0).toUpperCase() + t.slice(1);
|
|
48
48
|
}
|
|
49
|
-
function
|
|
50
|
-
const t = e?.trim() || "research", r =
|
|
49
|
+
function L(e) {
|
|
50
|
+
const t = e?.trim() || "research", r = p(e);
|
|
51
51
|
return {
|
|
52
|
-
live:
|
|
52
|
+
live: H[t] ?? `Running ${r}`,
|
|
53
53
|
done: `Ran ${r} agent`
|
|
54
54
|
};
|
|
55
55
|
}
|
|
@@ -59,29 +59,29 @@ function o(e) {
|
|
|
59
59
|
const t = e.trim();
|
|
60
60
|
return t.length > 0 ? t : void 0;
|
|
61
61
|
}
|
|
62
|
-
function
|
|
62
|
+
function K(e) {
|
|
63
63
|
const t = o(e.path);
|
|
64
64
|
if (t)
|
|
65
|
-
return
|
|
65
|
+
return T(t);
|
|
66
66
|
if (!Array.isArray(e.paths))
|
|
67
67
|
return;
|
|
68
|
-
const r = e.paths.filter((
|
|
68
|
+
const r = e.paths.filter((n) => typeof n == "string" && n.trim().length > 0);
|
|
69
69
|
if (r.length === 1)
|
|
70
|
-
return
|
|
70
|
+
return T(r[0]);
|
|
71
71
|
if (r.length > 1)
|
|
72
|
-
return
|
|
72
|
+
return F(r.length, "file", "files");
|
|
73
73
|
}
|
|
74
|
-
function
|
|
75
|
-
return (r) => `${e} ${
|
|
74
|
+
function u(e, t) {
|
|
75
|
+
return (r) => `${e} ${K(r) ?? t}`;
|
|
76
76
|
}
|
|
77
|
-
const
|
|
78
|
-
Read:
|
|
79
|
-
Write:
|
|
80
|
-
Edit:
|
|
81
|
-
ListDirectory:
|
|
82
|
-
CreateDirectory:
|
|
83
|
-
MoveFile:
|
|
84
|
-
RemoveFile:
|
|
77
|
+
const Q = {
|
|
78
|
+
Read: u("Reading", "file"),
|
|
79
|
+
Write: u("Writing", "file"),
|
|
80
|
+
Edit: u("Editing", "file"),
|
|
81
|
+
ListDirectory: u("Listing", "files"),
|
|
82
|
+
CreateDirectory: u("Creating", "folder"),
|
|
83
|
+
MoveFile: u("Moving", "file"),
|
|
84
|
+
RemoveFile: u("Removing", "file"),
|
|
85
85
|
Grep: (e) => `Grepping ${o(e.pattern) ?? "code"}`,
|
|
86
86
|
Glob: (e) => `Finding ${o(e.glob) ?? "files"}`,
|
|
87
87
|
GetBackgroundResult: () => "Background task",
|
|
@@ -104,7 +104,17 @@ const K = {
|
|
|
104
104
|
EditPlan: () => "Editing plan",
|
|
105
105
|
ReadPlan: () => "Reading plan"
|
|
106
106
|
};
|
|
107
|
-
function
|
|
107
|
+
function be(e, t) {
|
|
108
|
+
const r = R(e), n = p(r), a = t?.needsUser === !0, c = $(t), s = L(r).live, d = o(e.output?.childThreadId) ?? o(t?.childThreadId);
|
|
109
|
+
let l = s;
|
|
110
|
+
return a ? l = `${n} · Waiting for you` : c && (l = `${n} · ${c}`), {
|
|
111
|
+
text: l,
|
|
112
|
+
label: n,
|
|
113
|
+
childThreadId: d,
|
|
114
|
+
waiting: a
|
|
115
|
+
};
|
|
116
|
+
}
|
|
117
|
+
function $(e) {
|
|
108
118
|
if (!e)
|
|
109
119
|
return;
|
|
110
120
|
if (e.type === "text")
|
|
@@ -114,8 +124,8 @@ function Q(e) {
|
|
|
114
124
|
const t = o(e.toolName);
|
|
115
125
|
if (!t)
|
|
116
126
|
return;
|
|
117
|
-
const r = e.input,
|
|
118
|
-
return
|
|
127
|
+
const r = e.input, n = r != null && typeof r == "object" && !Array.isArray(r) ? r : {};
|
|
128
|
+
return Q[t]?.(n) ?? `Using ${o(e.title) ?? w(t)}`;
|
|
119
129
|
}
|
|
120
130
|
function X(e) {
|
|
121
131
|
if (!(e.failed || e.stalled)) {
|
|
@@ -129,106 +139,107 @@ function Z({
|
|
|
129
139
|
title: e,
|
|
130
140
|
activity: t,
|
|
131
141
|
errorText: r,
|
|
132
|
-
running:
|
|
133
|
-
stalled:
|
|
134
|
-
onOpen:
|
|
142
|
+
running: n,
|
|
143
|
+
stalled: a,
|
|
144
|
+
onOpen: c
|
|
135
145
|
}) {
|
|
136
|
-
const
|
|
146
|
+
const s = a ? D : e, d = /* @__PURE__ */ C(S, {
|
|
137
147
|
align: "center",
|
|
138
148
|
direction: "row",
|
|
139
149
|
fullWidth: !0,
|
|
140
150
|
gap: "md",
|
|
141
151
|
padding: "md",
|
|
142
|
-
children: [/* @__PURE__ */
|
|
143
|
-
when:
|
|
144
|
-
fallback: /* @__PURE__ */
|
|
152
|
+
children: [/* @__PURE__ */ i(f, {
|
|
153
|
+
when: n,
|
|
154
|
+
fallback: /* @__PURE__ */ i(N, {
|
|
145
155
|
"aria-hidden": !0
|
|
146
156
|
}),
|
|
147
|
-
children: /* @__PURE__ */
|
|
157
|
+
children: /* @__PURE__ */ i(k, {
|
|
148
158
|
"aria-hidden": !0,
|
|
149
159
|
size: 14
|
|
150
160
|
})
|
|
151
|
-
}), /* @__PURE__ */ S
|
|
161
|
+
}), /* @__PURE__ */ C(S, {
|
|
152
162
|
gap: "xxs",
|
|
153
163
|
grow: !0,
|
|
154
|
-
children: [/* @__PURE__ */
|
|
155
|
-
when:
|
|
156
|
-
fallback: /* @__PURE__ */
|
|
164
|
+
children: [/* @__PURE__ */ i(f, {
|
|
165
|
+
when: n,
|
|
166
|
+
fallback: /* @__PURE__ */ i(m, {
|
|
157
167
|
className: h.title,
|
|
158
|
-
color:
|
|
159
|
-
children:
|
|
168
|
+
color: a ? "danger" : void 0,
|
|
169
|
+
children: s
|
|
160
170
|
}),
|
|
161
|
-
children: /* @__PURE__ */
|
|
171
|
+
children: /* @__PURE__ */ i(O, {
|
|
162
172
|
as: "span",
|
|
163
173
|
className: h.title,
|
|
164
174
|
duration: 1,
|
|
165
|
-
children:
|
|
175
|
+
children: s
|
|
166
176
|
})
|
|
167
|
-
}), /* @__PURE__ */
|
|
168
|
-
when:
|
|
169
|
-
children: (
|
|
177
|
+
}), /* @__PURE__ */ i(f, {
|
|
178
|
+
when: n ? t : void 0,
|
|
179
|
+
children: (l) => /* @__PURE__ */ i(m, {
|
|
170
180
|
color: "secondary",
|
|
171
181
|
truncate: !0,
|
|
172
182
|
variant: "sm",
|
|
173
|
-
children:
|
|
183
|
+
children: l
|
|
174
184
|
})
|
|
175
|
-
}), /* @__PURE__ */
|
|
185
|
+
}), /* @__PURE__ */ i(f, {
|
|
176
186
|
when: r,
|
|
177
|
-
children: (
|
|
187
|
+
children: (l) => /* @__PURE__ */ i(m, {
|
|
178
188
|
color: "danger",
|
|
179
189
|
variant: "xs",
|
|
180
|
-
children:
|
|
190
|
+
children: l
|
|
181
191
|
})
|
|
182
192
|
})]
|
|
183
193
|
})]
|
|
184
194
|
});
|
|
185
|
-
return /* @__PURE__ */
|
|
186
|
-
"aria-busy":
|
|
187
|
-
className:
|
|
195
|
+
return /* @__PURE__ */ i(V, {
|
|
196
|
+
"aria-busy": n || void 0,
|
|
197
|
+
className: Y.tool,
|
|
188
198
|
collapsible: !1,
|
|
189
199
|
"data-slot": "agent-tool",
|
|
190
|
-
children: /* @__PURE__ */
|
|
191
|
-
when:
|
|
192
|
-
fallback:
|
|
193
|
-
children: (
|
|
194
|
-
"aria-label": t ? `${
|
|
200
|
+
children: /* @__PURE__ */ i(f, {
|
|
201
|
+
when: c,
|
|
202
|
+
fallback: d,
|
|
203
|
+
children: (l) => /* @__PURE__ */ i(M, {
|
|
204
|
+
"aria-label": t ? `${s}. ${t}` : s,
|
|
195
205
|
className: h.hit,
|
|
196
|
-
onPress:
|
|
197
|
-
children:
|
|
206
|
+
onPress: l,
|
|
207
|
+
children: d
|
|
198
208
|
})
|
|
199
209
|
})
|
|
200
210
|
});
|
|
201
211
|
}
|
|
202
|
-
const
|
|
212
|
+
const Te = G(({
|
|
203
213
|
part: e
|
|
204
214
|
}) => {
|
|
205
|
-
const t =
|
|
215
|
+
const t = W(), {
|
|
206
216
|
onOpenSubagent: r
|
|
207
|
-
} =
|
|
208
|
-
live:
|
|
209
|
-
stalled:
|
|
210
|
-
} =
|
|
211
|
-
if (!
|
|
217
|
+
} = j(), n = t?.getToolMeta?.(e.toolCallId)?.patch, a = n?.needsUser === !0, {
|
|
218
|
+
live: c,
|
|
219
|
+
stalled: s
|
|
220
|
+
} = z(e.state, a);
|
|
221
|
+
if (!U(e) || B(e) !== "Agent")
|
|
212
222
|
return null;
|
|
213
|
-
const
|
|
214
|
-
live:
|
|
215
|
-
failed:
|
|
216
|
-
stalled:
|
|
217
|
-
needsUser:
|
|
218
|
-
activity:
|
|
219
|
-
}),
|
|
220
|
-
return /* @__PURE__ */
|
|
221
|
-
activity:
|
|
222
|
-
errorText:
|
|
223
|
-
onOpen:
|
|
224
|
-
running:
|
|
225
|
-
stalled:
|
|
226
|
-
title:
|
|
223
|
+
const d = _(e), l = e.state === "output-available" ? J(e.output) : void 0, g = d.useFailureLabel || !!l, v = R(e), A = p(v), y = L(v), E = $(n), P = X({
|
|
224
|
+
live: c,
|
|
225
|
+
failed: g,
|
|
226
|
+
stalled: s,
|
|
227
|
+
needsUser: a,
|
|
228
|
+
activity: E
|
|
229
|
+
}), b = o(e.output?.childThreadId) ?? o(n?.childThreadId), I = !!(b && r && !g), x = l ?? d.problemText ?? d.tooltip;
|
|
230
|
+
return /* @__PURE__ */ i(Z, {
|
|
231
|
+
activity: P,
|
|
232
|
+
errorText: x,
|
|
233
|
+
onOpen: I ? () => r?.(b, A) : void 0,
|
|
234
|
+
running: c && !g && !s,
|
|
235
|
+
stalled: s,
|
|
236
|
+
title: c && !g && !s ? y.live : y.done
|
|
227
237
|
});
|
|
228
238
|
});
|
|
229
239
|
export {
|
|
230
|
-
|
|
240
|
+
Te as AgentTool,
|
|
231
241
|
X as agentStatusLine,
|
|
232
|
-
|
|
242
|
+
$ as subagentActivityLabel,
|
|
243
|
+
be as subagentComposerCopy
|
|
233
244
|
};
|
|
234
245
|
//# sourceMappingURL=AgentTool.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AgentTool.js","sources":["../../../../src/chat/Tool/agent/AgentTool.tsx"],"sourcesContent":["import { Message } from '@reforma/icons/14';\nimport { ProgressLoader } from '@reforma/icons/assets';\nimport { basename, humanizeString, plural } from '@reforma/lib';\nimport { getToolName, isToolUIPart } from 'ai';\nimport { observer } from 'mobx-react-lite';\n\nimport { Box } from '../../../Box';\nimport { Pressable } from '../../../Pressable';\nimport { Shimmer } from '../../../Shimmer';\nimport { Show } from '../../../Show';\nimport { Text } from '../../../Text';\nimport { useChat } from '../../ChatContext';\nimport { useMessageTurn } from '../../Message/turn/messageTurnContext';\nimport { getToolFailureRowState, TOOL_INTERRUPTED_MESSAGE } from '../helpers';\nimport { ToolShellCard } from '../shell';\nimport { useToolProgress } from '../shell/toolProgress';\nimport shellStyles from '../shell/ToolShellCard.module.css';\nimport styles from './AgentTool.module.css';\n\nimport type { AgentToolInput, AgentToolOutput } from '@reforma/types/sandbox';\nimport type { ToolRendererProps } from '../types';\n\n/** User-facing labels for known subagent ids (fallback: capitalized id). */\nconst SUBAGENT_LABELS: Record<string, string> = {\n research: 'Explore',\n shell: 'Shell',\n verify: 'Verify',\n plan: 'Plan',\n};\n\nconst SUBAGENT_LIVE: Record<string, string> = {\n research: 'Exploring',\n shell: 'Running',\n verify: 'Verifying',\n plan: 'Planning',\n};\n\nfunction agentErrorFromOutput(output: unknown): string | undefined {\n if (output == null || typeof output !== 'object') {\n return undefined;\n }\n\n const error = (output as AgentToolOutput).error;\n\n return (typeof error === 'string' && error.trim().length > 0) ? error.trim() : undefined;\n}\n\nfunction agentNameFromPart(part: { input?: unknown; output?: unknown }): string | undefined {\n for (const source of [part.output, part.input]) {\n if (source == null || typeof source !== 'object') {\n continue;\n }\n\n const name = (source as AgentToolInput | AgentToolOutput).name;\n\n if (typeof name === 'string' && name.trim().length > 0) {\n return name.trim();\n }\n }\n\n return undefined;\n}\n\nfunction subagentLabel(name: string | undefined): string {\n const id = name?.trim() || 'research';\n const mapped = SUBAGENT_LABELS[id];\n\n if (mapped) {\n return mapped;\n }\n\n return id.charAt(0).toUpperCase() + id.slice(1);\n}\n\nfunction agentPhaseCopy(name: string | undefined): { live: string; done: string } {\n const id = name?.trim() || 'research';\n const label = subagentLabel(name);\n\n return {\n live: SUBAGENT_LIVE[id] ?? `Running ${ label }`,\n done: `Ran ${ label } agent`,\n };\n}\n\nfunction fieldString(value: unknown): string | undefined {\n if (typeof value !== 'string') {\n return undefined;\n }\n\n const trimmed = value.trim();\n\n return trimmed.length > 0 ? trimmed : undefined;\n}\n\nfunction fileLabel(input: Record<string, unknown>): string | undefined {\n const path = fieldString(input.path);\n\n if (path) {\n return basename(path);\n }\n\n if (!Array.isArray(input.paths)) {\n return undefined;\n }\n\n const files = input.paths.filter((item): item is string => typeof item === 'string' && item.trim().length > 0);\n\n if (files.length === 1) {\n return basename(files[0]);\n }\n\n if (files.length > 1) {\n return plural(files.length, 'file', 'files');\n }\n\n return undefined;\n}\n\nfunction fileActivity(verb: string, fallback: string) {\n return (input: Record<string, unknown>) => `${ verb } ${ fileLabel(input) ?? fallback }`;\n}\n\nconst TOOL_ACTIVITY: Record<string, (input: Record<string, unknown>) => string | undefined> = {\n Read: fileActivity('Reading', 'file'),\n Write: fileActivity('Writing', 'file'),\n Edit: fileActivity('Editing', 'file'),\n ListDirectory: fileActivity('Listing', 'files'),\n CreateDirectory: fileActivity('Creating', 'folder'),\n MoveFile: fileActivity('Moving', 'file'),\n RemoveFile: fileActivity('Removing', 'file'),\n Grep: input => `Grepping ${ fieldString(input.pattern) ?? 'code' }`,\n Glob: input => `Finding ${ fieldString(input.glob) ?? 'files' }`,\n GetBackgroundResult: () => 'Background task',\n Bash: (input) => {\n const command = fieldString(input.command);\n\n return command ? `Running ${ command }` : 'Running command';\n },\n Fetch: input => `Fetching ${ fieldString(input.url) ?? 'page' }`,\n Skill: input => `Loading ${ fieldString(input.name) ?? 'skill' }`,\n GetMcpResources: (input) => {\n const uri = fieldString(input.uri);\n\n if (uri) {\n const tail = uri.replace(/\\/+$/, '').split('/').pop()?.trim();\n\n return `Reading ${ tail || uri }`;\n }\n\n return 'Listing MCP resources';\n },\n Preamble: input => fieldString(input.content),\n ReadLints: () => 'Checking lints',\n PageScreenshot: () => 'Capturing screenshot',\n DevServerStatus: () => 'Checking project',\n ImportAsset: () => 'Importing asset',\n CreatePlan: () => 'Creating plan',\n EditPlan: () => 'Editing plan',\n ReadPlan: () => 'Reading plan',\n};\n\n/** Live subtitle for a tool — same copy for Agent rows and the compact rail task. */\nexport function subagentActivityLabel(patch: Record<string, unknown> | undefined): string | undefined {\n if (!patch) {\n return undefined;\n }\n\n if (patch.type === 'text') {\n return 'Finishing reply';\n }\n\n if (patch.type === 'reasoning') {\n return 'Thinking…';\n }\n\n const toolName = fieldString(patch.toolName);\n\n if (!toolName) {\n return undefined;\n }\n\n const rawInput = patch.input;\n const input = (rawInput != null && typeof rawInput === 'object' && !Array.isArray(rawInput))\n ? rawInput as Record<string, unknown>\n : {};\n\n return TOOL_ACTIVITY[toolName]?.(input)\n ?? `Using ${ fieldString(patch.title) ?? humanizeString(toolName) }`;\n}\n\n/** Live/waiting subtitle. Done rows stay quiet — no empty \"Completed\". */\nexport function agentStatusLine(input: {\n live: boolean;\n failed: boolean;\n stalled?: boolean;\n needsUser?: boolean;\n activity?: string;\n}): string | undefined {\n if (input.failed || input.stalled) {\n return undefined;\n }\n\n if (input.needsUser) {\n return 'Waiting for you';\n }\n\n if (!input.live) {\n return undefined;\n }\n\n return input.activity ?? 'Starting…';\n}\n\n/** Subagent card. Running: loader, shimmer title, gray activity. Finished: same frame, quiet title. */\nfunction AgentCard({\n title,\n activity,\n errorText,\n running,\n stalled,\n onOpen,\n}: {\n title: string;\n activity?: string;\n errorText?: string;\n running: boolean;\n stalled: boolean;\n onOpen?: () => void;\n}) {\n const heading = stalled ? TOOL_INTERRUPTED_MESSAGE : title;\n const copy = (\n <Box align=\"center\" direction=\"row\" fullWidth gap=\"md\" padding=\"md\">\n <Show\n when={ running }\n fallback={ <Message aria-hidden /> }\n >\n <ProgressLoader aria-hidden size={ 14 } />\n </Show>\n <Box gap=\"xxs\" grow>\n <Show\n when={ running }\n fallback={ (\n <Text className={ styles.title } color={ stalled ? 'danger' : undefined }>\n { heading }\n </Text>\n ) }\n >\n <Shimmer as=\"span\" className={ styles.title } duration={ 1 }>\n { heading }\n </Shimmer>\n </Show>\n <Show when={ running ? activity : undefined }>\n { line => (\n <Text color=\"secondary\" truncate variant=\"sm\">\n { line }\n </Text>\n ) }\n </Show>\n <Show when={ errorText }>\n { line => (\n <Text color=\"danger\" variant=\"xs\">{ line }</Text>\n ) }\n </Show>\n </Box>\n </Box>\n );\n\n return (\n <ToolShellCard\n aria-busy={ running || undefined }\n className={ shellStyles.tool }\n collapsible={ false }\n data-slot=\"agent-tool\"\n >\n <Show\n when={ onOpen }\n fallback={ copy }\n >\n { open => (\n <Pressable\n aria-label={ activity ? `${ heading }. ${ activity }` : heading }\n className={ styles.hit }\n onPress={ open }\n >\n { copy }\n </Pressable>\n ) }\n </Show>\n </ToolShellCard>\n );\n}\n\n/** Agent subagent card. Opens the child thread. */\nexport const AgentTool = observer(({ part }: ToolRendererProps) => {\n const turn = useMessageTurn();\n const { onOpenSubagent } = useChat();\n const patch = turn?.getToolMeta?.(part.toolCallId)?.patch;\n const needsUser = patch?.needsUser === true;\n const { live, stalled } = useToolProgress(part.state, needsUser);\n\n if (!isToolUIPart(part) || getToolName(part) !== 'Agent') {\n return null;\n }\n\n const failure = getToolFailureRowState(part);\n const logicalError = part.state === 'output-available'\n ? agentErrorFromOutput(part.output)\n : undefined;\n const failed = failure.useFailureLabel || Boolean(logicalError);\n const agentName = agentNameFromPart(part);\n const label = subagentLabel(agentName);\n const phase = agentPhaseCopy(agentName);\n const activity = subagentActivityLabel(patch);\n const statusLine = agentStatusLine({\n live,\n failed,\n stalled,\n needsUser,\n activity,\n });\n const childThreadId = fieldString((part.output as AgentToolOutput | undefined)?.childThreadId)\n ?? fieldString(patch?.childThreadId);\n const canOpen = Boolean(childThreadId && onOpenSubagent && !failed);\n const errorText = logicalError ?? failure.problemText ?? failure.tooltip;\n const openChild = canOpen\n ? () => onOpenSubagent?.(childThreadId!, label)\n : undefined;\n\n return (\n <AgentCard\n activity={ statusLine }\n errorText={ errorText }\n onOpen={ openChild }\n running={ live && !failed && !stalled }\n stalled={ stalled }\n title={ live && !failed && !stalled ? phase.live : phase.done }\n />\n );\n});\n"],"names":["SUBAGENT_LABELS","SUBAGENT_LIVE","agentErrorFromOutput","output","error","agentNameFromPart","part","source","name","subagentLabel","id","mapped","agentPhaseCopy","label","fieldString","value","trimmed","fileLabel","input","path","basename","files","item","plural","fileActivity","verb","fallback","TOOL_ACTIVITY","command","uri","subagentActivityLabel","patch","toolName","rawInput","humanizeString","agentStatusLine","AgentCard","title","activity","errorText","running","stalled","onOpen","heading","TOOL_INTERRUPTED_MESSAGE","copy","Box","_jsx","Show","Message","ProgressLoader","_jsxs","Text","styles","Shimmer","line","ToolShellCard","shellStyles","open","Pressable","AgentTool","observer","turn","useMessageTurn","onOpenSubagent","useChat","needsUser","live","useToolProgress","isToolUIPart","getToolName","failure","getToolFailureRowState","logicalError","failed","agentName","phase","statusLine","childThreadId","canOpen"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"AgentTool.js","sources":["../../../../src/chat/Tool/agent/AgentTool.tsx"],"sourcesContent":["import { Message } from '@reforma/icons/14';\nimport { ProgressLoader } from '@reforma/icons/assets';\nimport { basename, humanizeString, plural } from '@reforma/lib';\nimport { getToolName, isToolUIPart } from 'ai';\nimport { observer } from 'mobx-react-lite';\n\nimport { Box } from '../../../Box';\nimport { Pressable } from '../../../Pressable';\nimport { Shimmer } from '../../../Shimmer';\nimport { Show } from '../../../Show';\nimport { Text } from '../../../Text';\nimport { useChat } from '../../ChatContext';\nimport { useMessageTurn } from '../../Message/turn/messageTurnContext';\nimport { getToolFailureRowState, TOOL_INTERRUPTED_MESSAGE } from '../helpers';\nimport { ToolShellCard } from '../shell';\nimport { useToolProgress } from '../shell/toolProgress';\nimport shellStyles from '../shell/ToolShellCard.module.css';\nimport styles from './AgentTool.module.css';\n\nimport type { AgentToolInput, AgentToolOutput } from '@reforma/types/sandbox';\nimport type { ToolRendererProps } from '../types';\n\n/** User-facing labels for known subagent ids (fallback: capitalized id). */\nconst SUBAGENT_LABELS: Record<string, string> = {\n research: 'Explore',\n shell: 'Shell',\n verify: 'Verify',\n plan: 'Plan',\n};\n\nconst SUBAGENT_LIVE: Record<string, string> = {\n research: 'Exploring',\n shell: 'Running',\n verify: 'Verifying',\n plan: 'Planning',\n};\n\nfunction agentErrorFromOutput(output: unknown): string | undefined {\n if (output == null || typeof output !== 'object') {\n return undefined;\n }\n\n const error = (output as AgentToolOutput).error;\n\n return (typeof error === 'string' && error.trim().length > 0) ? error.trim() : undefined;\n}\n\nfunction agentNameFromPart(part: { input?: unknown; output?: unknown }): string | undefined {\n for (const source of [part.output, part.input]) {\n if (source == null || typeof source !== 'object') {\n continue;\n }\n\n const name = (source as AgentToolInput | AgentToolOutput).name;\n\n if (typeof name === 'string' && name.trim().length > 0) {\n return name.trim();\n }\n }\n\n return undefined;\n}\n\nfunction subagentLabel(name: string | undefined): string {\n const id = name?.trim() || 'research';\n const mapped = SUBAGENT_LABELS[id];\n\n if (mapped) {\n return mapped;\n }\n\n return id.charAt(0).toUpperCase() + id.slice(1);\n}\n\nfunction agentPhaseCopy(name: string | undefined): { live: string; done: string } {\n const id = name?.trim() || 'research';\n const label = subagentLabel(name);\n\n return {\n live: SUBAGENT_LIVE[id] ?? `Running ${ label }`,\n done: `Ran ${ label } agent`,\n };\n}\n\nfunction fieldString(value: unknown): string | undefined {\n if (typeof value !== 'string') {\n return undefined;\n }\n\n const trimmed = value.trim();\n\n return trimmed.length > 0 ? trimmed : undefined;\n}\n\nfunction fileLabel(input: Record<string, unknown>): string | undefined {\n const path = fieldString(input.path);\n\n if (path) {\n return basename(path);\n }\n\n if (!Array.isArray(input.paths)) {\n return undefined;\n }\n\n const files = input.paths.filter((item): item is string => typeof item === 'string' && item.trim().length > 0);\n\n if (files.length === 1) {\n return basename(files[0]);\n }\n\n if (files.length > 1) {\n return plural(files.length, 'file', 'files');\n }\n\n return undefined;\n}\n\nfunction fileActivity(verb: string, fallback: string) {\n return (input: Record<string, unknown>) => `${ verb } ${ fileLabel(input) ?? fallback }`;\n}\n\nconst TOOL_ACTIVITY: Record<string, (input: Record<string, unknown>) => string | undefined> = {\n Read: fileActivity('Reading', 'file'),\n Write: fileActivity('Writing', 'file'),\n Edit: fileActivity('Editing', 'file'),\n ListDirectory: fileActivity('Listing', 'files'),\n CreateDirectory: fileActivity('Creating', 'folder'),\n MoveFile: fileActivity('Moving', 'file'),\n RemoveFile: fileActivity('Removing', 'file'),\n Grep: input => `Grepping ${ fieldString(input.pattern) ?? 'code' }`,\n Glob: input => `Finding ${ fieldString(input.glob) ?? 'files' }`,\n GetBackgroundResult: () => 'Background task',\n Bash: (input) => {\n const command = fieldString(input.command);\n\n return command ? `Running ${ command }` : 'Running command';\n },\n Fetch: input => `Fetching ${ fieldString(input.url) ?? 'page' }`,\n Skill: input => `Loading ${ fieldString(input.name) ?? 'skill' }`,\n GetMcpResources: (input) => {\n const uri = fieldString(input.uri);\n\n if (uri) {\n const tail = uri.replace(/\\/+$/, '').split('/').pop()?.trim();\n\n return `Reading ${ tail || uri }`;\n }\n\n return 'Listing MCP resources';\n },\n Preamble: input => fieldString(input.content),\n ReadLints: () => 'Checking lints',\n PageScreenshot: () => 'Capturing screenshot',\n DevServerStatus: () => 'Checking project',\n ImportAsset: () => 'Importing asset',\n CreatePlan: () => 'Creating plan',\n EditPlan: () => 'Editing plan',\n ReadPlan: () => 'Reading plan',\n};\n\n/** One composer strip: who is running, and the child thread Show opens. */\nexport function subagentComposerCopy(\n part: { input?: unknown; output?: unknown },\n patch: Record<string, unknown> | undefined\n): { text: string; label: string; childThreadId?: string; waiting: boolean } {\n const name = agentNameFromPart(part);\n const label = subagentLabel(name);\n const waiting = patch?.needsUser === true;\n const activity = subagentActivityLabel(patch);\n const live = agentPhaseCopy(name).live;\n const childThreadId = fieldString((part.output as AgentToolOutput | undefined)?.childThreadId)\n ?? fieldString(patch?.childThreadId);\n\n let text = live;\n\n if (waiting) {\n text = `${ label } · Waiting for you`;\n }\n else if (activity) {\n text = `${ label } · ${ activity }`;\n }\n\n return { text, label, childThreadId, waiting };\n}\n\n/** Live subtitle for a tool — same copy for Agent rows and the compact rail task. */\nexport function subagentActivityLabel(patch: Record<string, unknown> | undefined): string | undefined {\n if (!patch) {\n return undefined;\n }\n\n if (patch.type === 'text') {\n return 'Finishing reply';\n }\n\n if (patch.type === 'reasoning') {\n return 'Thinking…';\n }\n\n const toolName = fieldString(patch.toolName);\n\n if (!toolName) {\n return undefined;\n }\n\n const rawInput = patch.input;\n const input = (rawInput != null && typeof rawInput === 'object' && !Array.isArray(rawInput))\n ? rawInput as Record<string, unknown>\n : {};\n\n return TOOL_ACTIVITY[toolName]?.(input)\n ?? `Using ${ fieldString(patch.title) ?? humanizeString(toolName) }`;\n}\n\n/** Live/waiting subtitle. Done rows stay quiet — no empty \"Completed\". */\nexport function agentStatusLine(input: {\n live: boolean;\n failed: boolean;\n stalled?: boolean;\n needsUser?: boolean;\n activity?: string;\n}): string | undefined {\n if (input.failed || input.stalled) {\n return undefined;\n }\n\n if (input.needsUser) {\n return 'Waiting for you';\n }\n\n if (!input.live) {\n return undefined;\n }\n\n return input.activity ?? 'Starting…';\n}\n\n/** Subagent card. Running: loader, shimmer title, gray activity. Finished: same frame, quiet title. */\nfunction AgentCard({\n title,\n activity,\n errorText,\n running,\n stalled,\n onOpen,\n}: {\n title: string;\n activity?: string;\n errorText?: string;\n running: boolean;\n stalled: boolean;\n onOpen?: () => void;\n}) {\n const heading = stalled ? TOOL_INTERRUPTED_MESSAGE : title;\n const copy = (\n <Box align=\"center\" direction=\"row\" fullWidth gap=\"md\" padding=\"md\">\n <Show\n when={ running }\n fallback={ <Message aria-hidden /> }\n >\n <ProgressLoader aria-hidden size={ 14 } />\n </Show>\n <Box gap=\"xxs\" grow>\n <Show\n when={ running }\n fallback={ (\n <Text className={ styles.title } color={ stalled ? 'danger' : undefined }>\n { heading }\n </Text>\n ) }\n >\n <Shimmer as=\"span\" className={ styles.title } duration={ 1 }>\n { heading }\n </Shimmer>\n </Show>\n <Show when={ running ? activity : undefined }>\n { line => (\n <Text color=\"secondary\" truncate variant=\"sm\">\n { line }\n </Text>\n ) }\n </Show>\n <Show when={ errorText }>\n { line => (\n <Text color=\"danger\" variant=\"xs\">{ line }</Text>\n ) }\n </Show>\n </Box>\n </Box>\n );\n\n return (\n <ToolShellCard\n aria-busy={ running || undefined }\n className={ shellStyles.tool }\n collapsible={ false }\n data-slot=\"agent-tool\"\n >\n <Show\n when={ onOpen }\n fallback={ copy }\n >\n { open => (\n <Pressable\n aria-label={ activity ? `${ heading }. ${ activity }` : heading }\n className={ styles.hit }\n onPress={ open }\n >\n { copy }\n </Pressable>\n ) }\n </Show>\n </ToolShellCard>\n );\n}\n\n/** Agent subagent card. Opens the child thread. */\nexport const AgentTool = observer(({ part }: ToolRendererProps) => {\n const turn = useMessageTurn();\n const { onOpenSubagent } = useChat();\n const patch = turn?.getToolMeta?.(part.toolCallId)?.patch;\n const needsUser = patch?.needsUser === true;\n const { live, stalled } = useToolProgress(part.state, needsUser);\n\n if (!isToolUIPart(part) || getToolName(part) !== 'Agent') {\n return null;\n }\n\n const failure = getToolFailureRowState(part);\n const logicalError = part.state === 'output-available'\n ? agentErrorFromOutput(part.output)\n : undefined;\n const failed = failure.useFailureLabel || Boolean(logicalError);\n const agentName = agentNameFromPart(part);\n const label = subagentLabel(agentName);\n const phase = agentPhaseCopy(agentName);\n const activity = subagentActivityLabel(patch);\n const statusLine = agentStatusLine({\n live,\n failed,\n stalled,\n needsUser,\n activity,\n });\n const childThreadId = fieldString((part.output as AgentToolOutput | undefined)?.childThreadId)\n ?? fieldString(patch?.childThreadId);\n const canOpen = Boolean(childThreadId && onOpenSubagent && !failed);\n const errorText = logicalError ?? failure.problemText ?? failure.tooltip;\n const openChild = canOpen\n ? () => onOpenSubagent?.(childThreadId!, label)\n : undefined;\n\n return (\n <AgentCard\n activity={ statusLine }\n errorText={ errorText }\n onOpen={ openChild }\n running={ live && !failed && !stalled }\n stalled={ stalled }\n title={ live && !failed && !stalled ? phase.live : phase.done }\n />\n );\n});\n"],"names":["SUBAGENT_LABELS","SUBAGENT_LIVE","agentErrorFromOutput","output","error","agentNameFromPart","part","source","name","subagentLabel","id","mapped","agentPhaseCopy","label","fieldString","value","trimmed","fileLabel","input","path","basename","files","item","plural","fileActivity","verb","fallback","TOOL_ACTIVITY","command","uri","subagentComposerCopy","patch","waiting","activity","subagentActivityLabel","live","childThreadId","text","toolName","rawInput","humanizeString","agentStatusLine","AgentCard","title","errorText","running","stalled","onOpen","heading","TOOL_INTERRUPTED_MESSAGE","copy","Box","_jsx","Show","Message","ProgressLoader","_jsxs","Text","styles","Shimmer","line","ToolShellCard","shellStyles","open","Pressable","AgentTool","observer","turn","useMessageTurn","onOpenSubagent","useChat","needsUser","useToolProgress","isToolUIPart","getToolName","failure","getToolFailureRowState","logicalError","failed","agentName","phase","statusLine","canOpen"],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export { subagentActivityLabel } from './agent/AgentTool';
|
|
1
|
+
export { subagentActivityLabel, subagentComposerCopy } from './agent/AgentTool';
|
|
2
2
|
export { AskUserQuestionTool } from './ask-user-question';
|
|
3
3
|
export { ChooseDesignDirectionTool } from './choose-design-direction';
|
|
4
4
|
export { DefaultTool } from './default';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/chat/Tool/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/chat/Tool/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AAChF,OAAO,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAC1D,OAAO,EAAE,yBAAyB,EAAE,MAAM,2BAA2B,CAAC;AACtE,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AACxC,OAAO,EAAE,wBAAwB,EAAE,MAAM,4BAA4B,CAAC;AACtE,OAAO,EACH,0BAA0B,EAC1B,uBAAuB,EACvB,wBAAwB,EACxB,mCAAmC,EACnC,6BAA6B,EAC7B,sBAAsB,EACtB,wBAAwB,EACxB,WAAW,EACX,KAAK,qBAAqB,EAC1B,KAAK,eAAe,GACvB,MAAM,WAAW,CAAC;AACnB,OAAO,EAAE,qBAAqB,EAAE,MAAM,0CAA0C,CAAC;AACjF,OAAO,EAAE,aAAa,EAAE,MAAM,QAAQ,CAAC;AACvC,cAAc,SAAS,CAAC;AACxB,cAAc,QAAQ,CAAC;AACvB,YAAY,EAAE,oBAAoB,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAC"}
|
package/dist/chat/Tool/index.js
CHANGED
|
@@ -1,50 +1,51 @@
|
|
|
1
|
-
import { subagentActivityLabel as r } from "./agent/AgentTool.js";
|
|
2
|
-
import { AskUserQuestionTool as
|
|
3
|
-
import { ChooseDesignDirectionTool as
|
|
4
|
-
import { DefaultTool as
|
|
5
|
-
import { fileChangesFromToolParts as
|
|
6
|
-
import { TOOL_INTERRUPTED_MESSAGE as d, isToolInvocationInProgress as
|
|
7
|
-
import { IntegrationActionCard as
|
|
8
|
-
import { ReadFilesTool as
|
|
9
|
-
import { ToolHoverCard as
|
|
10
|
-
import { ToolLineCounts as
|
|
11
|
-
import { ToolPathListHoverCard as
|
|
12
|
-
import { ToolShell as
|
|
13
|
-
import { ToolShellCard as
|
|
14
|
-
import { ToolShellStatusIcon as
|
|
15
|
-
import { ToolSummaryBadges as
|
|
16
|
-
import { Tool as
|
|
1
|
+
import { subagentActivityLabel as r, subagentComposerCopy as l } from "./agent/AgentTool.js";
|
|
2
|
+
import { AskUserQuestionTool as a } from "./ask-user-question/AskUserQuestionTool.js";
|
|
3
|
+
import { ChooseDesignDirectionTool as T } from "./choose-design-direction/ChooseDesignDirectionTool.js";
|
|
4
|
+
import { DefaultTool as m } from "./default/Default.js";
|
|
5
|
+
import { fileChangesFromToolParts as p } from "./fileChangesFromToolParts.js";
|
|
6
|
+
import { TOOL_INTERRUPTED_MESSAGE as d, isToolInvocationInProgress as x, isToolInvocationStalled as C, isToolInvocationTerminal as h, lineCountsByPathFromEditingToolPart as S, lineCountsFromEditingToolPart as P, removeFileLinesRemoved as g, toolPathKey as u } from "./helpers.js";
|
|
7
|
+
import { IntegrationActionCard as c } from "./integration-card/IntegrationActionCard.js";
|
|
8
|
+
import { ReadFilesTool as I } from "./read/ReadFilesTool.js";
|
|
9
|
+
import { ToolHoverCard as L } from "./shell/ToolHoverCard.js";
|
|
10
|
+
import { ToolLineCounts as A } from "./shell/ToolLineCounts.js";
|
|
11
|
+
import { ToolPathListHoverCard as H, ToolPathListPopover as R } from "./shell/ToolPathListHoverCard.js";
|
|
12
|
+
import { ToolShell as B, ToolShellContent as N, ToolShellFooter as O, ToolShellHeader as U } from "./shell/ToolShell.js";
|
|
13
|
+
import { ToolShellCard as k, ToolShellCardContent as G, ToolShellCardFooter as K, ToolShellCardHeader as M } from "./shell/ToolShellCard.js";
|
|
14
|
+
import { ToolShellStatusIcon as j } from "./shell/ToolShellStatusIcon.js";
|
|
15
|
+
import { ToolSummaryBadges as w } from "./shell/ToolSummaryBadge.js";
|
|
16
|
+
import { Tool as J, renderedToolName as V } from "./Tool.js";
|
|
17
17
|
export {
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
18
|
+
a as AskUserQuestionTool,
|
|
19
|
+
T as ChooseDesignDirectionTool,
|
|
20
|
+
m as DefaultTool,
|
|
21
|
+
c as IntegrationActionCard,
|
|
22
|
+
I as ReadFilesTool,
|
|
23
23
|
d as TOOL_INTERRUPTED_MESSAGE,
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
24
|
+
J as Tool,
|
|
25
|
+
L as ToolHoverCard,
|
|
26
|
+
A as ToolLineCounts,
|
|
27
|
+
H as ToolPathListHoverCard,
|
|
28
|
+
R as ToolPathListPopover,
|
|
29
|
+
B as ToolShell,
|
|
30
|
+
k as ToolShellCard,
|
|
31
|
+
G as ToolShellCardContent,
|
|
32
|
+
K as ToolShellCardFooter,
|
|
33
|
+
M as ToolShellCardHeader,
|
|
34
|
+
N as ToolShellContent,
|
|
35
|
+
O as ToolShellFooter,
|
|
36
|
+
U as ToolShellHeader,
|
|
37
|
+
j as ToolShellStatusIcon,
|
|
38
|
+
w as ToolSummaryBadges,
|
|
39
|
+
p as fileChangesFromToolParts,
|
|
40
|
+
x as isToolInvocationInProgress,
|
|
41
|
+
C as isToolInvocationStalled,
|
|
42
42
|
h as isToolInvocationTerminal,
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
43
|
+
S as lineCountsByPathFromEditingToolPart,
|
|
44
|
+
P as lineCountsFromEditingToolPart,
|
|
45
|
+
g as removeFileLinesRemoved,
|
|
46
|
+
V as renderedToolName,
|
|
47
47
|
r as subagentActivityLabel,
|
|
48
|
-
|
|
48
|
+
l as subagentComposerCopy,
|
|
49
|
+
u as toolPathKey
|
|
49
50
|
};
|
|
50
51
|
//# sourceMappingURL=index.js.map
|