@nexface/tools 0.1.0 → 0.1.1-alpha.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (59) hide show
  1. package/dist/browser/toolset.js +1 -0
  2. package/dist/browser/toolset.js.map +1 -1
  3. package/dist/definition.d.ts +1 -0
  4. package/dist/definition.js +13 -1
  5. package/dist/definition.js.map +1 -1
  6. package/dist/index.d.ts +8 -4
  7. package/dist/index.js +3 -1
  8. package/dist/index.js.map +1 -1
  9. package/dist/internal-react.d.ts +1 -0
  10. package/dist/internal-react.js +2 -1
  11. package/dist/internal-react.js.map +1 -1
  12. package/dist/internal-types.d.ts +4 -0
  13. package/dist/navigation.d.ts +32 -0
  14. package/dist/navigation.js +40 -0
  15. package/dist/navigation.js.map +1 -0
  16. package/dist/operation-host.d.ts +17 -0
  17. package/dist/operation-host.js +9 -0
  18. package/dist/operation-host.js.map +1 -0
  19. package/dist/operation-surface.d.ts +7 -0
  20. package/dist/operation-surface.js +82 -0
  21. package/dist/operation-surface.js.map +1 -0
  22. package/dist/operation-types.d.ts +17 -0
  23. package/dist/operation-types.js +2 -0
  24. package/dist/operation-types.js.map +1 -0
  25. package/dist/operation-view.d.ts +14 -0
  26. package/dist/operation-view.js +376 -0
  27. package/dist/operation-view.js.map +1 -0
  28. package/dist/react.d.ts +42 -3
  29. package/dist/react.js +115 -6
  30. package/dist/react.js.map +1 -1
  31. package/dist/runtime.d.ts +47 -6
  32. package/dist/runtime.js +129 -20
  33. package/dist/runtime.js.map +1 -1
  34. package/dist/styles.css +189 -0
  35. package/dist/types.d.ts +2 -0
  36. package/dist/webmcp.js +11 -10
  37. package/dist/webmcp.js.map +1 -1
  38. package/package.json +23 -2
  39. package/src/browser/controller.ts +0 -984
  40. package/src/browser/dom.ts +0 -507
  41. package/src/browser/feedback.ts +0 -5
  42. package/src/browser/locator.ts +0 -383
  43. package/src/browser/prompt.generated.ts +0 -50
  44. package/src/browser/prompt.ts +0 -10
  45. package/src/browser/snapshot.ts +0 -542
  46. package/src/browser/toolset.ts +0 -522
  47. package/src/browser/types.ts +0 -172
  48. package/src/browser/worker-runner.ts +0 -468
  49. package/src/definition.ts +0 -115
  50. package/src/index.ts +0 -35
  51. package/src/internal-react.tsx +0 -62
  52. package/src/internal-types.ts +0 -12
  53. package/src/internal.ts +0 -36
  54. package/src/react.tsx +0 -397
  55. package/src/runtime.ts +0 -722
  56. package/src/schema.ts +0 -52
  57. package/src/types.ts +0 -123
  58. package/src/webmcp.ts +0 -102
  59. package/tsconfig.json +0 -8
@@ -0,0 +1,376 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { CursorIcon as Cursor } from "@phosphor-icons/react/Cursor";
3
+ import { SparkleIcon as Sparkle } from "@phosphor-icons/react/Sparkle";
4
+ import { useEffect, useId, useRef, useState } from "react";
5
+ import { createPortal } from "react-dom";
6
+ const BROWSER_TOOL_NAMES = new Set(["getSnapshot", "executeCode"]);
7
+ const POINTER_EXIT_DURATION_MS = 120;
8
+ const POINTER_CLICK_FEEDBACK_DURATION_MS = 720;
9
+ const CONTROLLER_EXIT_DURATION_MS = 300;
10
+ function operationProgressLabel(operation) {
11
+ const progressLabel = operation.progressLabel?.trim().replace(/\s+/g, " ");
12
+ if (progressLabel)
13
+ return progressLabel.slice(0, 48);
14
+ return BROWSER_TOOL_NAMES.has(operation.name)
15
+ ? "正在浏览网页"
16
+ : "正在处理你的请求";
17
+ }
18
+ function operationEffect(operation) {
19
+ return operation.effect ?? "action";
20
+ }
21
+ function normalizedLabel(label) {
22
+ const normalized = label?.trim().replace(/\s+/g, " ");
23
+ return normalized || undefined;
24
+ }
25
+ function operationTargetLabel(operation, target) {
26
+ const label = target?.label;
27
+ if (!label || label === operation.name)
28
+ return undefined;
29
+ const rawNamePrefix = `${operation.name} · `;
30
+ return label.startsWith(rawNamePrefix) ? label.slice(rawNamePrefix.length) : label;
31
+ }
32
+ function pointerMoveDuration(from, to) {
33
+ const distance = Math.hypot(to.left - from.left, to.top - from.top);
34
+ if (distance < 2)
35
+ return 0;
36
+ return Math.round(Math.min(360, Math.max(180, 180 + distance * 0.18)));
37
+ }
38
+ function pointerReachedTarget(element, target) {
39
+ const rect = element.getBoundingClientRect();
40
+ return Math.hypot(rect.left - target.left, rect.top - target.top) < 2;
41
+ }
42
+ function AgentPointer({ active, initialPosition, label, labelActive, operation, targetElement, targetPosition, visible }) {
43
+ const pointerRef = useRef(null);
44
+ const activeOperationRef = useRef(undefined);
45
+ const activeTargetRef = useRef(undefined);
46
+ const exitTimerRef = useRef(undefined);
47
+ const feedbackTimerRef = useRef(undefined);
48
+ const motionRevisionRef = useRef(0);
49
+ const latestActiveRef = useRef(active);
50
+ const latestOperationRef = useRef(operation);
51
+ const [motion, setMotion] = useState();
52
+ latestActiveRef.current = active;
53
+ latestOperationRef.current = operation;
54
+ const clearExitTimer = () => {
55
+ if (!exitTimerRef.current)
56
+ return;
57
+ clearTimeout(exitTimerRef.current);
58
+ exitTimerRef.current = undefined;
59
+ };
60
+ const clearFeedbackTimer = () => {
61
+ if (!feedbackTimerRef.current)
62
+ return;
63
+ clearTimeout(feedbackTimerRef.current);
64
+ feedbackTimerRef.current = undefined;
65
+ };
66
+ const scheduleResting = (revision, durationMs) => {
67
+ clearFeedbackTimer();
68
+ feedbackTimerRef.current = setTimeout(() => {
69
+ if (motionRevisionRef.current !== revision)
70
+ return;
71
+ setMotion((current) => current?.revision === revision
72
+ ? { ...current, feedback: undefined, phase: "resting" }
73
+ : current);
74
+ }, durationMs);
75
+ };
76
+ const beginFeedback = (revision, toolCallId) => {
77
+ const latestOperation = latestOperationRef.current;
78
+ if (!latestActiveRef.current
79
+ || motionRevisionRef.current !== revision
80
+ || latestOperation.toolCallId !== toolCallId)
81
+ return;
82
+ const feedback = operationEffect(latestOperation) === "action"
83
+ && latestOperation.status !== "failed"
84
+ && latestOperation.status !== "cancelled"
85
+ ? "click"
86
+ : undefined;
87
+ if (!feedback) {
88
+ setMotion((current) => current?.revision === revision
89
+ ? { ...current, feedback: undefined, phase: "resting" }
90
+ : current);
91
+ return;
92
+ }
93
+ setMotion((current) => current?.revision === revision
94
+ ? { ...current, feedback, phase: "arrived" }
95
+ : current);
96
+ scheduleResting(revision, POINTER_CLICK_FEEDBACK_DURATION_MS);
97
+ };
98
+ useEffect(() => () => {
99
+ clearExitTimer();
100
+ clearFeedbackTimer();
101
+ }, []);
102
+ useEffect(() => {
103
+ if (!visible || !initialPosition) {
104
+ if (!motion || motion.phase === "hidden")
105
+ return;
106
+ activeOperationRef.current = undefined;
107
+ activeTargetRef.current = undefined;
108
+ clearFeedbackTimer();
109
+ const revision = ++motionRevisionRef.current;
110
+ setMotion((current) => current
111
+ ? { ...current, durationMs: POINTER_EXIT_DURATION_MS, feedback: undefined, phase: "hidden", revision }
112
+ : current);
113
+ clearExitTimer();
114
+ exitTimerRef.current = setTimeout(() => {
115
+ if (motionRevisionRef.current === revision)
116
+ setMotion(undefined);
117
+ }, POINTER_EXIT_DURATION_MS);
118
+ return;
119
+ }
120
+ clearExitTimer();
121
+ if (!motion) {
122
+ activeOperationRef.current = operation.toolCallId;
123
+ activeTargetRef.current = undefined;
124
+ const revision = ++motionRevisionRef.current;
125
+ setMotion({
126
+ durationMs: 0,
127
+ feedback: undefined,
128
+ phase: "resting",
129
+ position: initialPosition,
130
+ revision,
131
+ toolCallId: operation.toolCallId,
132
+ });
133
+ return;
134
+ }
135
+ if (!active) {
136
+ activeOperationRef.current = undefined;
137
+ activeTargetRef.current = undefined;
138
+ clearFeedbackTimer();
139
+ if (motion.phase !== "resting" || motion.feedback) {
140
+ const revision = ++motionRevisionRef.current;
141
+ setMotion((current) => current
142
+ ? { ...current, feedback: undefined, phase: "resting", revision }
143
+ : current);
144
+ }
145
+ return;
146
+ }
147
+ const operationChanged = activeOperationRef.current !== operation.toolCallId;
148
+ if (operationChanged) {
149
+ activeOperationRef.current = operation.toolCallId;
150
+ activeTargetRef.current = undefined;
151
+ clearFeedbackTimer();
152
+ }
153
+ else if (motion.phase === "hidden") {
154
+ setMotion((current) => current
155
+ ? { ...current, durationMs: 0, phase: "resting" }
156
+ : current);
157
+ }
158
+ if (!targetElement || !targetPosition) {
159
+ if (operationChanged || activeTargetRef.current) {
160
+ activeTargetRef.current = undefined;
161
+ clearFeedbackTimer();
162
+ const revision = ++motionRevisionRef.current;
163
+ const pointerRect = pointerRef.current?.getBoundingClientRect();
164
+ setMotion((current) => current
165
+ ? {
166
+ ...current,
167
+ durationMs: 0,
168
+ feedback: undefined,
169
+ phase: "resting",
170
+ position: pointerRect
171
+ ? { left: pointerRect.left, top: pointerRect.top }
172
+ : current.position,
173
+ revision,
174
+ toolCallId: operation.toolCallId,
175
+ }
176
+ : current);
177
+ }
178
+ return;
179
+ }
180
+ const targetChanged = operationChanged || activeTargetRef.current !== targetElement;
181
+ if (!targetChanged) {
182
+ if (motion.position.left === targetPosition.left && motion.position.top === targetPosition.top)
183
+ return;
184
+ setMotion((current) => current
185
+ ? { ...current, durationMs: 180, position: targetPosition }
186
+ : current);
187
+ return;
188
+ }
189
+ activeTargetRef.current = targetElement;
190
+ clearFeedbackTimer();
191
+ const revision = ++motionRevisionRef.current;
192
+ const pointerRect = pointerRef.current?.getBoundingClientRect();
193
+ const currentPosition = pointerRect
194
+ ? { left: pointerRect.left, top: pointerRect.top }
195
+ : motion.position;
196
+ const prefersReducedMotion = window.matchMedia?.("(prefers-reduced-motion: reduce)").matches ?? false;
197
+ const durationMs = prefersReducedMotion ? 0 : pointerMoveDuration(currentPosition, targetPosition);
198
+ setMotion((current) => current
199
+ ? {
200
+ ...current,
201
+ durationMs,
202
+ feedback: undefined,
203
+ phase: "moving",
204
+ position: targetPosition,
205
+ revision,
206
+ toolCallId: operation.toolCallId,
207
+ }
208
+ : current);
209
+ if (durationMs === 0)
210
+ beginFeedback(revision, operation.toolCallId);
211
+ }, [
212
+ active,
213
+ initialPosition?.left,
214
+ initialPosition?.top,
215
+ motion,
216
+ operation.toolCallId,
217
+ targetElement,
218
+ targetPosition?.left,
219
+ targetPosition?.top,
220
+ visible,
221
+ ]);
222
+ if (!motion)
223
+ return null;
224
+ const effect = operationEffect(operation);
225
+ const activeEffect = active ? effect : undefined;
226
+ return (_jsxs("div", { "aria-hidden": true, className: "agent-operation__pointer-effect", "data-active": active ? "true" : "false", "data-feedback": motion.feedback, "data-operation-effect": activeEffect, "data-phase": motion.phase, onTransitionEnd: (event) => {
227
+ if (event.currentTarget !== event.target
228
+ || event.propertyName !== "transform"
229
+ || motion.phase !== "moving"
230
+ || !pointerReachedTarget(event.currentTarget, motion.position))
231
+ return;
232
+ beginFeedback(motion.revision, motion.toolCallId);
233
+ }, ref: pointerRef, style: {
234
+ "--agent-operation-pointer-duration": `${motion.durationMs}ms`,
235
+ "--agent-operation-pointer-x": `${motion.position.left}px`,
236
+ "--agent-operation-pointer-y": `${motion.position.top}px`,
237
+ "--agent-operation-ripple-duration": `${POINTER_CLICK_FEEDBACK_DURATION_MS}ms`,
238
+ }, children: [motion.phase === "arrived" && motion.feedback ? (_jsx("span", { className: "agent-operation__pointer-ripple agent-operation__pointer-ripple--primary" }, `primary-${motion.revision}`)) : null, _jsx("span", { className: "agent-operation__pointer-cursor", children: visible && effect === "action" ? (_jsx(Cursor, { className: "agent-operation__pointer", size: 24, weight: "fill" })) : null }), active && motion.phase !== "hidden" && (labelActive || effect !== "action") ? (_jsxs("span", { className: labelActive ? "agent-operation__pointer-label" : "agent-operation__pointer-indicator", "data-operation-effect": activeEffect, title: labelActive ? label : undefined, children: [activeEffect === "read" ? (_jsxs("span", { className: "agent-operation__pointer-read-scan", children: [_jsx("i", {}), _jsx("i", {}), _jsx("i", {}), _jsx("i", {}), _jsx("i", {})] })) : null, activeEffect === "navigate" ? _jsx("span", { className: "agent-operation__pointer-navigation-trail" }) : null, labelActive ? _jsx("span", { className: "agent-operation__pointer-label-text", children: label }) : null] })) : null] }));
239
+ }
240
+ export function OperationOverlayView({ operation, progressHistory = [], running, feedbackActive = running, labelActive = feedbackActive, humanHasControl = false, taskLabel, onCancel, resolveSurface, resolveTarget }) {
241
+ const [, setGeometry] = useState("");
242
+ const [historyOpen, setHistoryOpen] = useState(false);
243
+ const historyId = useId();
244
+ const clearTimerRef = useRef(undefined);
245
+ const controllerTimerRef = useRef(undefined);
246
+ const [visibleOperation, setVisibleOperation] = useState(operation);
247
+ const [controllerMounted, setControllerMounted] = useState(Boolean(operation
248
+ && operation.status !== "cancelled"
249
+ && (running || humanHasControl || operation.status === "failed")));
250
+ const [controllerExiting, setControllerExiting] = useState(false);
251
+ useEffect(() => {
252
+ if (clearTimerRef.current)
253
+ clearTimeout(clearTimerRef.current);
254
+ if (operation)
255
+ setVisibleOperation(operation);
256
+ if (operation?.status === "cancelled") {
257
+ clearTimerRef.current = setTimeout(() => setVisibleOperation(undefined), 600);
258
+ }
259
+ return () => { if (clearTimerRef.current)
260
+ clearTimeout(clearTimerRef.current); };
261
+ }, [operation, running]);
262
+ useEffect(() => {
263
+ if ((!running && !feedbackActive && !humanHasControl) || !visibleOperation || visibleOperation.status === "cancelled")
264
+ return;
265
+ let frame = requestAnimationFrame(function update() {
266
+ const surface = resolveSurface?.();
267
+ const target = resolveTarget?.(visibleOperation)?.element;
268
+ const geometry = [surface, target].map((element) => {
269
+ if (!element?.isConnected)
270
+ return "";
271
+ const rect = element.getBoundingClientRect();
272
+ return [rect.left, rect.top, rect.width, rect.height].join(",");
273
+ }).join(";");
274
+ setGeometry(geometry);
275
+ frame = requestAnimationFrame(update);
276
+ });
277
+ return () => cancelAnimationFrame(frame);
278
+ }, [visibleOperation?.toolCallId, visibleOperation?.status, running, feedbackActive, humanHasControl, resolveSurface, resolveTarget]);
279
+ useEffect(() => {
280
+ if (progressHistory.length === 0)
281
+ setHistoryOpen(false);
282
+ }, [progressHistory.length]);
283
+ const controllerShouldBeVisible = Boolean(visibleOperation
284
+ && visibleOperation.status !== "cancelled"
285
+ && (running || humanHasControl || visibleOperation.status === "failed"));
286
+ useEffect(() => {
287
+ if (controllerTimerRef.current)
288
+ clearTimeout(controllerTimerRef.current);
289
+ if (controllerShouldBeVisible) {
290
+ setControllerMounted(true);
291
+ setControllerExiting(false);
292
+ return;
293
+ }
294
+ if (!controllerMounted) {
295
+ setControllerExiting(false);
296
+ return;
297
+ }
298
+ setHistoryOpen(false);
299
+ setControllerExiting(true);
300
+ controllerTimerRef.current = setTimeout(() => {
301
+ setControllerMounted(false);
302
+ setControllerExiting(false);
303
+ }, CONTROLLER_EXIT_DURATION_MS);
304
+ return () => {
305
+ if (controllerTimerRef.current)
306
+ clearTimeout(controllerTimerRef.current);
307
+ };
308
+ }, [controllerMounted, controllerShouldBeVisible]);
309
+ useEffect(() => {
310
+ if (typeof document === "undefined")
311
+ return;
312
+ const surface = resolveSurface?.();
313
+ if (!surface)
314
+ return;
315
+ const previousInert = surface.inert;
316
+ const previousBusy = surface.getAttribute("aria-busy");
317
+ const locked = running && !humanHasControl;
318
+ surface.inert = locked;
319
+ if (locked)
320
+ surface.setAttribute("aria-busy", "true");
321
+ else
322
+ surface.removeAttribute("aria-busy");
323
+ return () => {
324
+ surface.inert = previousInert;
325
+ if (previousBusy === null)
326
+ surface.removeAttribute("aria-busy");
327
+ else
328
+ surface.setAttribute("aria-busy", previousBusy);
329
+ };
330
+ }, [humanHasControl, resolveSurface, running]);
331
+ if (!visibleOperation || typeof document === "undefined")
332
+ return null;
333
+ const resolvedTarget = resolveTarget?.(visibleOperation);
334
+ const surfaceElement = resolveSurface?.();
335
+ const target = resolvedTarget && (!surfaceElement || surfaceElement.contains(resolvedTarget.element))
336
+ ? resolvedTarget
337
+ : undefined;
338
+ const progressLabel = operationProgressLabel(visibleOperation);
339
+ const effect = operationEffect(visibleOperation);
340
+ const targetLabel = operationTargetLabel(visibleOperation, target);
341
+ const pointerLabel = normalizedLabel(visibleOperation.progressLabel) ?? targetLabel ?? progressLabel;
342
+ const normalizedTaskLabel = normalizedLabel(taskLabel);
343
+ const controllerLabel = normalizedTaskLabel ?? (humanHasControl ? undefined : progressLabel);
344
+ const statusLabel = humanHasControl ? "等待你完成操作" : {
345
+ running: "Agent 正在控制",
346
+ completed: running ? "Agent 正在控制" : "操作已完成",
347
+ failed: running ? "Agent 正在处理错误" : "操作失败",
348
+ cancelled: "任务已终止",
349
+ }[visibleOperation.status];
350
+ const compactStatusLabel = humanHasControl
351
+ ? "等待你完成操作"
352
+ : normalizedTaskLabel ?? progressLabel;
353
+ const rect = target?.element.isConnected ? target.element.getBoundingClientRect() : undefined;
354
+ const highlightedRect = effect === "navigate" ? undefined : rect;
355
+ const surfaceRect = surfaceElement?.isConnected ? surfaceElement.getBoundingClientRect() : undefined;
356
+ const agentControlsSurface = running && !humanHasControl;
357
+ const operationFeedbackActive = feedbackActive && !humanHasControl && visibleOperation.status !== "cancelled";
358
+ const pointerVisible = Boolean(surfaceRect) && feedbackActive && !humanHasControl && visibleOperation.status !== "cancelled";
359
+ const pointerPosition = rect ? {
360
+ left: rect.left + rect.width / 2,
361
+ top: rect.top + rect.height / 2,
362
+ } : undefined;
363
+ const cancel = onCancel ? () => {
364
+ onCancel();
365
+ } : undefined;
366
+ return createPortal(_jsxs("div", { className: "agent-operation", "data-feedback-active": feedbackActive, "data-human-control": humanHasControl, "data-operation-effect": effect, "data-run-active": running, "data-status": visibleOperation.status, children: [agentControlsSurface && surfaceRect ? _jsx("div", { "aria-hidden": true, className: "agent-operation__surface", style: {
367
+ ...(highlightedRect ? {
368
+ "--agent-operation-cutout-height": `${highlightedRect.height}px`,
369
+ "--agent-operation-cutout-left": `${highlightedRect.left - surfaceRect.left}px`,
370
+ "--agent-operation-cutout-top": `${highlightedRect.top - surfaceRect.top}px`,
371
+ "--agent-operation-cutout-width": `${highlightedRect.width}px`,
372
+ } : {}),
373
+ height: surfaceRect.height, left: surfaceRect.left, top: surfaceRect.top, width: surfaceRect.width,
374
+ } }) : null, operationFeedbackActive && highlightedRect ? _jsx("div", { "aria-hidden": true, className: "agent-operation__target", "data-operation-effect": effect, style: { height: highlightedRect.height, left: highlightedRect.left, top: highlightedRect.top, width: highlightedRect.width } }) : null, _jsx(AgentPointer, { active: operationFeedbackActive, initialPosition: surfaceRect ? { left: surfaceRect.left + surfaceRect.width / 2, top: surfaceRect.top + surfaceRect.height / 2 } : undefined, label: pointerLabel, labelActive: labelActive, operation: visibleOperation, targetElement: target?.element, targetPosition: pointerPosition, visible: pointerVisible }), controllerMounted ? _jsxs("section", { "aria-live": "polite", className: "agent-operation__controller", "data-visibility": controllerExiting ? "exiting" : "visible", style: surfaceRect ? { left: surfaceRect.left + surfaceRect.width / 2, right: "auto", "--agent-operation-controller-x": "-50%", maxWidth: Math.max(0, surfaceRect.width - 32) } : undefined, children: [historyOpen ? _jsxs("aside", { "aria-label": "\u672C\u6B21\u8FD0\u884C\u7684\u64CD\u4F5C\u8BB0\u5F55", className: "agent-operation__history", id: historyId, children: [_jsxs("header", { children: [_jsx("strong", { children: "\u64CD\u4F5C\u8BB0\u5F55" }), _jsx("span", { children: progressHistory.length })] }), _jsx("ol", { children: progressHistory.map(({ progressLabel: label, toolCallId }, index) => _jsxs("li", { children: [_jsx("span", { "aria-hidden": true, children: index + 1 }), _jsx("p", { children: label })] }, toolCallId)) })] }) : null, _jsx("span", { "aria-hidden": true, className: "agent-operation__edge-flow" }), _jsxs("span", { "aria-hidden": true, className: "agent-operation__pause-mark", children: [_jsx("i", {}), _jsx("i", {})] }), _jsxs("button", { "aria-controls": historyId, "aria-expanded": historyOpen, "aria-label": "\u67E5\u770B\u672C\u6B21\u8FD0\u884C\u7684\u64CD\u4F5C\u8BB0\u5F55", className: "agent-operation__activity", "data-open": historyOpen ? "true" : "false", disabled: progressHistory.length === 0, onClick: () => setHistoryOpen((current) => !current), title: progressHistory.length === 0 ? "暂无操作记录" : "查看本次运行的操作记录", type: "button", children: [_jsx(Sparkle, { className: "agent-operation__activity-icon", size: 16, weight: "fill" }), _jsx("i", {}), _jsx("b", { children: "\u2726" })] }), _jsxs("div", { children: [_jsx("span", { className: "agent-operation__heading", children: _jsx("strong", { children: controllerLabel }) }), statusLabel ? _jsx("small", { className: "agent-operation__description", children: _jsx("span", { className: "agent-operation__status", children: statusLabel }) }) : null] }), (running || humanHasControl) && visibleOperation.status !== "cancelled" ? _jsx("span", { className: "agent-operation__compact-status", title: compactStatusLabel, children: compactStatusLabel }) : null, cancel && running && visibleOperation.status !== "cancelled" ? _jsx("button", { className: "agent-operation__stop", type: "button", onClick: cancel, children: "\u7EC8\u6B62\u4EFB\u52A1" }) : null] }) : null] }), document.body);
375
+ }
376
+ //# sourceMappingURL=operation-view.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"operation-view.js","sourceRoot":"","sources":["../src/operation-view.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,UAAU,IAAI,MAAM,EAAE,MAAM,8BAA8B,CAAC;AACpE,OAAO,EAAE,WAAW,IAAI,OAAO,EAAE,MAAM,+BAA+B,CAAC;AACvE,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAsB,MAAM,OAAO,CAAC;AAC/E,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AAGzC,MAAM,kBAAkB,GAAG,IAAI,GAAG,CAAC,CAAC,aAAa,EAAE,aAAa,CAAC,CAAC,CAAC;AACnE,MAAM,wBAAwB,GAAG,GAAG,CAAC;AACrC,MAAM,kCAAkC,GAAG,GAAG,CAAC;AAC/C,MAAM,2BAA2B,GAAG,GAAG,CAAC;AAmBxC,SAAS,sBAAsB,CAAC,SAAyB;IACvD,MAAM,aAAa,GAAG,SAAS,CAAC,aAAa,EAAE,IAAI,EAAE,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC3E,IAAI,aAAa;QAAE,OAAO,aAAa,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IACrD,OAAO,kBAAkB,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC;QAC3C,CAAC,CAAC,QAAQ;QACV,CAAC,CAAC,UAAU,CAAC;AACjB,CAAC;AAED,SAAS,eAAe,CAAC,SAAyB;IAChD,OAAO,SAAS,CAAC,MAAM,IAAI,QAAQ,CAAC;AACtC,CAAC;AAED,SAAS,eAAe,CAAC,KAAyB;IAChD,MAAM,UAAU,GAAG,KAAK,EAAE,IAAI,EAAE,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IACtD,OAAO,UAAU,IAAI,SAAS,CAAC;AACjC,CAAC;AAED,SAAS,oBAAoB,CAC3B,SAAyB,EACzB,MAAwC;IAExC,MAAM,KAAK,GAAG,MAAM,EAAE,KAAK,CAAC;IAC5B,IAAI,CAAC,KAAK,IAAI,KAAK,KAAK,SAAS,CAAC,IAAI;QAAE,OAAO,SAAS,CAAC;IACzD,MAAM,aAAa,GAAG,GAAG,SAAS,CAAC,IAAI,KAAK,CAAC;IAC7C,OAAO,KAAK,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;AACrF,CAAC;AAED,SAAS,mBAAmB,CAAC,IAAqB,EAAE,EAAmB;IACrE,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC;IACpE,IAAI,QAAQ,GAAG,CAAC;QAAE,OAAO,CAAC,CAAC;IAC3B,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,GAAG,QAAQ,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;AACzE,CAAC;AAED,SAAS,oBAAoB,CAAC,OAAoB,EAAE,MAAuB;IACzE,MAAM,IAAI,GAAG,OAAO,CAAC,qBAAqB,EAAE,CAAC;IAC7C,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,GAAG,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AACxE,CAAC;AAaD,SAAS,YAAY,CAAC,EAAE,MAAM,EAAE,eAAe,EAAE,KAAK,EAAE,WAAW,EAAE,SAAS,EAAE,aAAa,EAAE,cAAc,EAAE,OAAO,EAAqB;IACzI,MAAM,UAAU,GAAG,MAAM,CAAiB,IAAI,CAAC,CAAC;IAChD,MAAM,kBAAkB,GAAG,MAAM,CAAqB,SAAS,CAAC,CAAC;IACjE,MAAM,eAAe,GAAG,MAAM,CAA0B,SAAS,CAAC,CAAC;IACnE,MAAM,YAAY,GAAG,MAAM,CAA4C,SAAS,CAAC,CAAC;IAClF,MAAM,gBAAgB,GAAG,MAAM,CAA4C,SAAS,CAAC,CAAC;IACtF,MAAM,iBAAiB,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;IACpC,MAAM,eAAe,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC;IACvC,MAAM,kBAAkB,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC;IAC7C,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,QAAQ,EAAiB,CAAC;IACtD,eAAe,CAAC,OAAO,GAAG,MAAM,CAAC;IACjC,kBAAkB,CAAC,OAAO,GAAG,SAAS,CAAC;IAEvC,MAAM,cAAc,GAAG,GAAG,EAAE;QAC1B,IAAI,CAAC,YAAY,CAAC,OAAO;YAAE,OAAO;QAClC,YAAY,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;QACnC,YAAY,CAAC,OAAO,GAAG,SAAS,CAAC;IACnC,CAAC,CAAC;IACF,MAAM,kBAAkB,GAAG,GAAG,EAAE;QAC9B,IAAI,CAAC,gBAAgB,CAAC,OAAO;YAAE,OAAO;QACtC,YAAY,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC;QACvC,gBAAgB,CAAC,OAAO,GAAG,SAAS,CAAC;IACvC,CAAC,CAAC;IACF,MAAM,eAAe,GAAG,CAAC,QAAgB,EAAE,UAAkB,EAAE,EAAE;QAC/D,kBAAkB,EAAE,CAAC;QACrB,gBAAgB,CAAC,OAAO,GAAG,UAAU,CAAC,GAAG,EAAE;YACzC,IAAI,iBAAiB,CAAC,OAAO,KAAK,QAAQ;gBAAE,OAAO;YACnD,SAAS,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,EAAE,QAAQ,KAAK,QAAQ;gBACnD,CAAC,CAAC,EAAE,GAAG,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,EAAE;gBACvD,CAAC,CAAC,OAAO,CAAC,CAAC;QACf,CAAC,EAAE,UAAU,CAAC,CAAC;IACjB,CAAC,CAAC;IACF,MAAM,aAAa,GAAG,CAAC,QAAgB,EAAE,UAAkB,EAAE,EAAE;QAC7D,MAAM,eAAe,GAAG,kBAAkB,CAAC,OAAO,CAAC;QACnD,IAAI,CAAC,eAAe,CAAC,OAAO;eACvB,iBAAiB,CAAC,OAAO,KAAK,QAAQ;eACtC,eAAe,CAAC,UAAU,KAAK,UAAU;YAAE,OAAO;QACvD,MAAM,QAAQ,GAAG,eAAe,CAAC,eAAe,CAAC,KAAK,QAAQ;eACzD,eAAe,CAAC,MAAM,KAAK,QAAQ;eACnC,eAAe,CAAC,MAAM,KAAK,WAAW;YACzC,CAAC,CAAC,OAAO;YACT,CAAC,CAAC,SAAS,CAAC;QACd,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,SAAS,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,EAAE,QAAQ,KAAK,QAAQ;gBACnD,CAAC,CAAC,EAAE,GAAG,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,EAAE;gBACvD,CAAC,CAAC,OAAO,CAAC,CAAC;YACb,OAAO;QACT,CAAC;QACD,SAAS,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,EAAE,QAAQ,KAAK,QAAQ;YACnD,CAAC,CAAC,EAAE,GAAG,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,SAAS,EAAE;YAC5C,CAAC,CAAC,OAAO,CAAC,CAAC;QACb,eAAe,CAAC,QAAQ,EAAE,kCAAkC,CAAC,CAAC;IAChE,CAAC,CAAC;IAEF,SAAS,CAAC,GAAG,EAAE,CAAC,GAAG,EAAE;QACnB,cAAc,EAAE,CAAC;QACjB,kBAAkB,EAAE,CAAC;IACvB,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,CAAC,OAAO,IAAI,CAAC,eAAe,EAAE,CAAC;YACjC,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,KAAK,KAAK,QAAQ;gBAAE,OAAO;YACjD,kBAAkB,CAAC,OAAO,GAAG,SAAS,CAAC;YACvC,eAAe,CAAC,OAAO,GAAG,SAAS,CAAC;YACpC,kBAAkB,EAAE,CAAC;YACrB,MAAM,QAAQ,GAAG,EAAE,iBAAiB,CAAC,OAAO,CAAC;YAC7C,SAAS,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO;gBAC5B,CAAC,CAAC,EAAE,GAAG,OAAO,EAAE,UAAU,EAAE,wBAAwB,EAAE,QAAQ,EAAE,SAAS,EAAE,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE;gBACtG,CAAC,CAAC,OAAO,CAAC,CAAC;YACb,cAAc,EAAE,CAAC;YACjB,YAAY,CAAC,OAAO,GAAG,UAAU,CAAC,GAAG,EAAE;gBACrC,IAAI,iBAAiB,CAAC,OAAO,KAAK,QAAQ;oBAAE,SAAS,CAAC,SAAS,CAAC,CAAC;YACnE,CAAC,EAAE,wBAAwB,CAAC,CAAC;YAC7B,OAAO;QACT,CAAC;QAED,cAAc,EAAE,CAAC;QACjB,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,kBAAkB,CAAC,OAAO,GAAG,SAAS,CAAC,UAAU,CAAC;YAClD,eAAe,CAAC,OAAO,GAAG,SAAS,CAAC;YACpC,MAAM,QAAQ,GAAG,EAAE,iBAAiB,CAAC,OAAO,CAAC;YAC7C,SAAS,CAAC;gBACR,UAAU,EAAE,CAAC;gBACb,QAAQ,EAAE,SAAS;gBACnB,KAAK,EAAE,SAAS;gBAChB,QAAQ,EAAE,eAAe;gBACzB,QAAQ;gBACR,UAAU,EAAE,SAAS,CAAC,UAAU;aACjC,CAAC,CAAC;YACH,OAAO;QACT,CAAC;QAED,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,kBAAkB,CAAC,OAAO,GAAG,SAAS,CAAC;YACvC,eAAe,CAAC,OAAO,GAAG,SAAS,CAAC;YACpC,kBAAkB,EAAE,CAAC;YACrB,IAAI,MAAM,CAAC,KAAK,KAAK,SAAS,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;gBAClD,MAAM,QAAQ,GAAG,EAAE,iBAAiB,CAAC,OAAO,CAAC;gBAC7C,SAAS,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO;oBAC5B,CAAC,CAAC,EAAE,GAAG,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE;oBACjE,CAAC,CAAC,OAAO,CAAC,CAAC;YACf,CAAC;YACD,OAAO;QACT,CAAC;QAED,MAAM,gBAAgB,GAAG,kBAAkB,CAAC,OAAO,KAAK,SAAS,CAAC,UAAU,CAAC;QAC7E,IAAI,gBAAgB,EAAE,CAAC;YACrB,kBAAkB,CAAC,OAAO,GAAG,SAAS,CAAC,UAAU,CAAC;YAClD,eAAe,CAAC,OAAO,GAAG,SAAS,CAAC;YACpC,kBAAkB,EAAE,CAAC;QACvB,CAAC;aAAM,IAAI,MAAM,CAAC,KAAK,KAAK,QAAQ,EAAE,CAAC;YACrC,SAAS,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO;gBAC5B,CAAC,CAAC,EAAE,GAAG,OAAO,EAAE,UAAU,EAAE,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE;gBACjD,CAAC,CAAC,OAAO,CAAC,CAAC;QACf,CAAC;QAED,IAAI,CAAC,aAAa,IAAI,CAAC,cAAc,EAAE,CAAC;YACtC,IAAI,gBAAgB,IAAI,eAAe,CAAC,OAAO,EAAE,CAAC;gBAChD,eAAe,CAAC,OAAO,GAAG,SAAS,CAAC;gBACpC,kBAAkB,EAAE,CAAC;gBACrB,MAAM,QAAQ,GAAG,EAAE,iBAAiB,CAAC,OAAO,CAAC;gBAC7C,MAAM,WAAW,GAAG,UAAU,CAAC,OAAO,EAAE,qBAAqB,EAAE,CAAC;gBAChE,SAAS,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO;oBAC5B,CAAC,CAAC;wBACA,GAAG,OAAO;wBACV,UAAU,EAAE,CAAC;wBACb,QAAQ,EAAE,SAAS;wBACnB,KAAK,EAAE,SAAS;wBAChB,QAAQ,EAAE,WAAW;4BACnB,CAAC,CAAC,EAAE,IAAI,EAAE,WAAW,CAAC,IAAI,EAAE,GAAG,EAAE,WAAW,CAAC,GAAG,EAAE;4BAClD,CAAC,CAAC,OAAO,CAAC,QAAQ;wBACpB,QAAQ;wBACR,UAAU,EAAE,SAAS,CAAC,UAAU;qBACjC;oBACD,CAAC,CAAC,OAAO,CAAC,CAAC;YACf,CAAC;YACD,OAAO;QACT,CAAC;QACD,MAAM,aAAa,GAAG,gBAAgB,IAAI,eAAe,CAAC,OAAO,KAAK,aAAa,CAAC;QACpF,IAAI,CAAC,aAAa,EAAE,CAAC;YACnB,IAAI,MAAM,CAAC,QAAQ,CAAC,IAAI,KAAK,cAAc,CAAC,IAAI,IAAI,MAAM,CAAC,QAAQ,CAAC,GAAG,KAAK,cAAc,CAAC,GAAG;gBAAE,OAAO;YACvG,SAAS,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO;gBAC5B,CAAC,CAAC,EAAE,GAAG,OAAO,EAAE,UAAU,EAAE,GAAG,EAAE,QAAQ,EAAE,cAAc,EAAE;gBAC3D,CAAC,CAAC,OAAO,CAAC,CAAC;YACb,OAAO;QACT,CAAC;QAED,eAAe,CAAC,OAAO,GAAG,aAAa,CAAC;QACxC,kBAAkB,EAAE,CAAC;QACrB,MAAM,QAAQ,GAAG,EAAE,iBAAiB,CAAC,OAAO,CAAC;QAC7C,MAAM,WAAW,GAAG,UAAU,CAAC,OAAO,EAAE,qBAAqB,EAAE,CAAC;QAChE,MAAM,eAAe,GAAG,WAAW;YACjC,CAAC,CAAC,EAAE,IAAI,EAAE,WAAW,CAAC,IAAI,EAAE,GAAG,EAAE,WAAW,CAAC,GAAG,EAAE;YAClD,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC;QACpB,MAAM,oBAAoB,GAAG,MAAM,CAAC,UAAU,EAAE,CAAC,kCAAkC,CAAC,CAAC,OAAO,IAAI,KAAK,CAAC;QACtG,MAAM,UAAU,GAAG,oBAAoB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,mBAAmB,CAAC,eAAe,EAAE,cAAc,CAAC,CAAC;QACnG,SAAS,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO;YAC5B,CAAC,CAAC;gBACA,GAAG,OAAO;gBACV,UAAU;gBACV,QAAQ,EAAE,SAAS;gBACnB,KAAK,EAAE,QAAQ;gBACf,QAAQ,EAAE,cAAc;gBACxB,QAAQ;gBACR,UAAU,EAAE,SAAS,CAAC,UAAU;aACjC;YACD,CAAC,CAAC,OAAO,CAAC,CAAC;QACb,IAAI,UAAU,KAAK,CAAC;YAAE,aAAa,CAAC,QAAQ,EAAE,SAAS,CAAC,UAAU,CAAC,CAAC;IACtE,CAAC,EAAE;QACD,MAAM;QACN,eAAe,EAAE,IAAI;QACrB,eAAe,EAAE,GAAG;QACpB,MAAM;QACN,SAAS,CAAC,UAAU;QACpB,aAAa;QACb,cAAc,EAAE,IAAI;QACpB,cAAc,EAAE,GAAG;QACnB,OAAO;KACR,CAAC,CAAC;IAEH,IAAI,CAAC,MAAM;QAAE,OAAO,IAAI,CAAC;IACzB,MAAM,MAAM,GAAG,eAAe,CAAC,SAAS,CAAC,CAAC;IAC1C,MAAM,YAAY,GAAG,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC;IACjD,OAAO,CACL,oCAEE,SAAS,EAAC,iCAAiC,iBAC9B,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,mBACvB,MAAM,CAAC,QAAQ,2BACP,YAAY,gBACvB,MAAM,CAAC,KAAK,EACxB,eAAe,EAAE,CAAC,KAAK,EAAE,EAAE;YACzB,IAAI,KAAK,CAAC,aAAa,KAAK,KAAK,CAAC,MAAM;mBACnC,KAAK,CAAC,YAAY,KAAK,WAAW;mBAClC,MAAM,CAAC,KAAK,KAAK,QAAQ;mBACzB,CAAC,oBAAoB,CAAC,KAAK,CAAC,aAAa,EAAE,MAAM,CAAC,QAAQ,CAAC;gBAAE,OAAO;YACzE,aAAa,CAAC,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,UAAU,CAAC,CAAC;QACpD,CAAC,EACD,GAAG,EAAE,UAAU,EACf,KAAK,EAAE;YACL,oCAAoC,EAAE,GAAG,MAAM,CAAC,UAAU,IAAI;YAC9D,6BAA6B,EAAE,GAAG,MAAM,CAAC,QAAQ,CAAC,IAAI,IAAI;YAC1D,6BAA6B,EAAE,GAAG,MAAM,CAAC,QAAQ,CAAC,GAAG,IAAI;YACzD,mCAAmC,EAAE,GAAG,kCAAkC,IAAI;SAC9D,aAEjB,MAAM,CAAC,KAAK,KAAK,SAAS,IAAI,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAC/C,eAAM,SAAS,EAAC,0EAA0E,IAAM,WAAW,MAAM,CAAC,QAAQ,EAAE,CAAI,CACjI,CAAC,CAAC,CAAC,IAAI,EACR,eAAM,SAAS,EAAC,iCAAiC,YAC9C,OAAO,IAAI,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,CAChC,KAAC,MAAM,IAAC,SAAS,EAAC,0BAA0B,EAAC,IAAI,EAAE,EAAE,EAAE,MAAM,EAAC,MAAM,GAAG,CACxE,CAAC,CAAC,CAAC,IAAI,GACH,EACN,MAAM,IAAI,MAAM,CAAC,KAAK,KAAK,QAAQ,IAAI,CAAC,WAAW,IAAI,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAC7E,gBAAM,SAAS,EAAE,WAAW,CAAC,CAAC,CAAC,gCAAgC,CAAC,CAAC,CAAC,oCAAoC,2BAAyB,YAAY,EAAE,KAAK,EAAE,WAAW,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,aAChL,YAAY,KAAK,MAAM,CAAC,CAAC,CAAC,CACzB,gBAAM,SAAS,EAAC,oCAAoC,aAClD,aAAK,EACL,aAAK,EACL,aAAK,EACL,aAAK,EACL,aAAK,IACA,CACR,CAAC,CAAC,CAAC,IAAI,EACP,YAAY,KAAK,UAAU,CAAC,CAAC,CAAC,eAAM,SAAS,EAAC,2CAA2C,GAAG,CAAC,CAAC,CAAC,IAAI,EACnG,WAAW,CAAC,CAAC,CAAC,eAAM,SAAS,EAAC,qCAAqC,YAAE,KAAK,GAAQ,CAAC,CAAC,CAAC,IAAI,IACrF,CACR,CAAC,CAAC,CAAC,IAAI,IACJ,CACP,CAAC;AACJ,CAAC;AAeD,MAAM,UAAU,oBAAoB,CAAC,EAAE,SAAS,EAAE,eAAe,GAAG,EAAE,EAAE,OAAO,EAAE,cAAc,GAAG,OAAO,EAAE,WAAW,GAAG,cAAc,EAAE,eAAe,GAAG,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,cAAc,EAAE,aAAa,EAA6B;IAC/O,MAAM,CAAC,EAAE,WAAW,CAAC,GAAG,QAAQ,CAAC,EAAE,CAAC,CAAC;IACrC,MAAM,CAAC,WAAW,EAAE,cAAc,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IACtD,MAAM,SAAS,GAAG,KAAK,EAAE,CAAC;IAC1B,MAAM,aAAa,GAAG,MAAM,CAA4C,SAAS,CAAC,CAAC;IACnF,MAAM,kBAAkB,GAAG,MAAM,CAA4C,SAAS,CAAC,CAAC;IACxF,MAAM,CAAC,gBAAgB,EAAE,mBAAmB,CAAC,GAAG,QAAQ,CAAC,SAAS,CAAC,CAAC;IACpE,MAAM,CAAC,iBAAiB,EAAE,oBAAoB,CAAC,GAAG,QAAQ,CAAC,OAAO,CAAC,SAAS;WACvE,SAAS,CAAC,MAAM,KAAK,WAAW;WAChC,CAAC,OAAO,IAAI,eAAe,IAAI,SAAS,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC;IACrE,MAAM,CAAC,iBAAiB,EAAE,oBAAoB,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAClE,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,aAAa,CAAC,OAAO;YAAE,YAAY,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;QAC/D,IAAI,SAAS;YAAE,mBAAmB,CAAC,SAAS,CAAC,CAAC;QAC9C,IAAI,SAAS,EAAE,MAAM,KAAK,WAAW,EAAE,CAAC;YACtC,aAAa,CAAC,OAAO,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,mBAAmB,CAAC,SAAS,CAAC,EAAE,GAAG,CAAC,CAAC;QAChF,CAAC;QACD,OAAO,GAAG,EAAE,GAAG,IAAI,aAAa,CAAC,OAAO;YAAE,YAAY,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;IACnF,CAAC,EAAE,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC,CAAC;IACzB,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,CAAC,CAAC,OAAO,IAAI,CAAC,cAAc,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,gBAAgB,IAAI,gBAAgB,CAAC,MAAM,KAAK,WAAW;YAAE,OAAO;QAC9H,IAAI,KAAK,GAAG,qBAAqB,CAAC,SAAS,MAAM;YAC/C,MAAM,OAAO,GAAG,cAAc,EAAE,EAAE,CAAC;YACnC,MAAM,MAAM,GAAG,aAAa,EAAE,CAAC,gBAAgB,CAAC,EAAE,OAAO,CAAC;YAC1D,MAAM,QAAQ,GAAG,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE;gBACjD,IAAI,CAAC,OAAO,EAAE,WAAW;oBAAE,OAAO,EAAE,CAAC;gBACrC,MAAM,IAAI,GAAG,OAAO,CAAC,qBAAqB,EAAE,CAAC;gBAC7C,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YAClE,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YACb,WAAW,CAAC,QAAQ,CAAC,CAAC;YACtB,KAAK,GAAG,qBAAqB,CAAC,MAAM,CAAC,CAAC;QACxC,CAAC,CAAC,CAAC;QACH,OAAO,GAAG,EAAE,CAAC,oBAAoB,CAAC,KAAK,CAAC,CAAC;IAC3C,CAAC,EAAE,CAAC,gBAAgB,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,EAAE,OAAO,EAAE,cAAc,EAAE,eAAe,EAAE,cAAc,EAAE,aAAa,CAAC,CAAC,CAAC;IACtI,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,eAAe,CAAC,MAAM,KAAK,CAAC;YAAE,cAAc,CAAC,KAAK,CAAC,CAAC;IAC1D,CAAC,EAAE,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC,CAAC;IAC7B,MAAM,yBAAyB,GAAG,OAAO,CAAC,gBAAgB;WACrD,gBAAgB,CAAC,MAAM,KAAK,WAAW;WACvC,CAAC,OAAO,IAAI,eAAe,IAAI,gBAAgB,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC;IAC3E,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,kBAAkB,CAAC,OAAO;YAAE,YAAY,CAAC,kBAAkB,CAAC,OAAO,CAAC,CAAC;QACzE,IAAI,yBAAyB,EAAE,CAAC;YAC9B,oBAAoB,CAAC,IAAI,CAAC,CAAC;YAC3B,oBAAoB,CAAC,KAAK,CAAC,CAAC;YAC5B,OAAO;QACT,CAAC;QACD,IAAI,CAAC,iBAAiB,EAAE,CAAC;YACvB,oBAAoB,CAAC,KAAK,CAAC,CAAC;YAC5B,OAAO;QACT,CAAC;QACD,cAAc,CAAC,KAAK,CAAC,CAAC;QACtB,oBAAoB,CAAC,IAAI,CAAC,CAAC;QAC3B,kBAAkB,CAAC,OAAO,GAAG,UAAU,CAAC,GAAG,EAAE;YAC3C,oBAAoB,CAAC,KAAK,CAAC,CAAC;YAC5B,oBAAoB,CAAC,KAAK,CAAC,CAAC;QAC9B,CAAC,EAAE,2BAA2B,CAAC,CAAC;QAChC,OAAO,GAAG,EAAE;YACV,IAAI,kBAAkB,CAAC,OAAO;gBAAE,YAAY,CAAC,kBAAkB,CAAC,OAAO,CAAC,CAAC;QAC3E,CAAC,CAAC;IACJ,CAAC,EAAE,CAAC,iBAAiB,EAAE,yBAAyB,CAAC,CAAC,CAAC;IACnD,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,OAAO,QAAQ,KAAK,WAAW;YAAE,OAAO;QAC5C,MAAM,OAAO,GAAG,cAAc,EAAE,EAAE,CAAC;QACnC,IAAI,CAAC,OAAO;YAAE,OAAO;QACrB,MAAM,aAAa,GAAG,OAAO,CAAC,KAAK,CAAC;QACpC,MAAM,YAAY,GAAG,OAAO,CAAC,YAAY,CAAC,WAAW,CAAC,CAAC;QACvD,MAAM,MAAM,GAAG,OAAO,IAAI,CAAC,eAAe,CAAC;QAC3C,OAAO,CAAC,KAAK,GAAG,MAAM,CAAC;QACvB,IAAI,MAAM;YAAE,OAAO,CAAC,YAAY,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;;YAAM,OAAO,CAAC,eAAe,CAAC,WAAW,CAAC,CAAC;QACjG,OAAO,GAAG,EAAE;YACV,OAAO,CAAC,KAAK,GAAG,aAAa,CAAC;YAC9B,IAAI,YAAY,KAAK,IAAI;gBAAE,OAAO,CAAC,eAAe,CAAC,WAAW,CAAC,CAAC;;gBAAM,OAAO,CAAC,YAAY,CAAC,WAAW,EAAE,YAAY,CAAC,CAAC;QACxH,CAAC,CAAC;IACJ,CAAC,EAAE,CAAC,eAAe,EAAE,cAAc,EAAE,OAAO,CAAC,CAAC,CAAC;IAC/C,IAAI,CAAC,gBAAgB,IAAI,OAAO,QAAQ,KAAK,WAAW;QAAE,OAAO,IAAI,CAAC;IACtE,MAAM,cAAc,GAAG,aAAa,EAAE,CAAC,gBAAgB,CAAC,CAAC;IACzD,MAAM,cAAc,GAAG,cAAc,EAAE,EAAE,CAAC;IAC1C,MAAM,MAAM,GAAG,cAAc,IAAI,CAAC,CAAC,cAAc,IAAI,cAAc,CAAC,QAAQ,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC;QACnG,CAAC,CAAC,cAAc;QAChB,CAAC,CAAC,SAAS,CAAC;IACd,MAAM,aAAa,GAAG,sBAAsB,CAAC,gBAAgB,CAAC,CAAC;IAC/D,MAAM,MAAM,GAAG,eAAe,CAAC,gBAAgB,CAAC,CAAC;IACjD,MAAM,WAAW,GAAG,oBAAoB,CAAC,gBAAgB,EAAE,MAAM,CAAC,CAAC;IACnE,MAAM,YAAY,GAAG,eAAe,CAAC,gBAAgB,CAAC,aAAa,CAAC,IAAI,WAAW,IAAI,aAAa,CAAC;IACrG,MAAM,mBAAmB,GAAG,eAAe,CAAC,SAAS,CAAC,CAAC;IACvD,MAAM,eAAe,GAAG,mBAAmB,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC;IAC7F,MAAM,WAAW,GAAG,eAAe,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC;QAChD,OAAO,EAAE,YAAY;QACrB,SAAS,EAAE,OAAO,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,OAAO;QAC3C,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,MAAM;QACzC,SAAS,EAAE,OAAO;KACnB,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC;IAC3B,MAAM,kBAAkB,GAAG,eAAe;QACxC,CAAC,CAAC,SAAS;QACX,CAAC,CAAC,mBAAmB,IAAI,aAAa,CAAC;IACzC,MAAM,IAAI,GAAG,MAAM,EAAE,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,qBAAqB,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;IAC9F,MAAM,eAAe,GAAG,MAAM,KAAK,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC;IACjE,MAAM,WAAW,GAAG,cAAc,EAAE,WAAW,CAAC,CAAC,CAAC,cAAc,CAAC,qBAAqB,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;IACrG,MAAM,oBAAoB,GAAG,OAAO,IAAI,CAAC,eAAe,CAAC;IACzD,MAAM,uBAAuB,GAAG,cAAc,IAAI,CAAC,eAAe,IAAI,gBAAgB,CAAC,MAAM,KAAK,WAAW,CAAC;IAC9G,MAAM,cAAc,GAAG,OAAO,CAAC,WAAW,CAAC,IAAI,cAAc,IAAI,CAAC,eAAe,IAAI,gBAAgB,CAAC,MAAM,KAAK,WAAW,CAAC;IAC7H,MAAM,eAAe,GAAG,IAAI,CAAC,CAAC,CAAC;QAC7B,IAAI,EAAE,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,KAAK,GAAG,CAAC;QAChC,GAAG,EAAE,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC;KAChC,CAAC,CAAC,CAAC,SAAS,CAAC;IACd,MAAM,MAAM,GAAG,QAAQ,CAAC,CAAC,CAAC,GAAG,EAAE;QAC7B,QAAQ,EAAE,CAAC;IACb,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IACd,OAAO,YAAY,CACjB,eAAK,SAAS,EAAC,iBAAiB,0BAAuB,cAAc,wBAAsB,eAAe,2BAAyB,MAAM,qBAAmB,OAAO,iBAAe,gBAAgB,CAAC,MAAM,aACtM,oBAAoB,IAAI,WAAW,CAAC,CAAC,CAAC,mCAAiB,SAAS,EAAC,0BAA0B,EAAC,KAAK,EAAE;oBAClG,GAAG,CAAC,eAAe,CAAC,CAAC,CAAC;wBACpB,iCAAiC,EAAE,GAAG,eAAe,CAAC,MAAM,IAAI;wBAChE,+BAA+B,EAAE,GAAG,eAAe,CAAC,IAAI,GAAG,WAAW,CAAC,IAAI,IAAI;wBAC/E,8BAA8B,EAAE,GAAG,eAAe,CAAC,GAAG,GAAG,WAAW,CAAC,GAAG,IAAI;wBAC5E,gCAAgC,EAAE,GAAG,eAAe,CAAC,KAAK,IAAI;qBAC/D,CAAC,CAAC,CAAC,EAAE,CAAC;oBACP,MAAM,EAAE,WAAW,CAAC,MAAM,EAAE,IAAI,EAAE,WAAW,CAAC,IAAI,EAAE,GAAG,EAAE,WAAW,CAAC,GAAG,EAAE,KAAK,EAAE,WAAW,CAAC,KAAK;iBAClF,GAAI,CAAC,CAAC,CAAC,IAAI,EAC5B,uBAAuB,IAAI,eAAe,CAAC,CAAC,CAAC,mCAAiB,SAAS,EAAC,yBAAyB,2BAAwB,MAAM,EAAE,KAAK,EAAE,EAAE,MAAM,EAAE,eAAe,CAAC,MAAM,EAAE,IAAI,EAAE,eAAe,CAAC,IAAI,EAAE,GAAG,EAAE,eAAe,CAAC,GAAG,EAAE,KAAK,EAAE,eAAe,CAAC,KAAK,EAAE,GAAI,CAAC,CAAC,CAAC,IAAI,EAC1Q,KAAC,YAAY,IACX,MAAM,EAAE,uBAAuB,EAC/B,eAAe,EAAE,WAAW,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,WAAW,CAAC,IAAI,GAAG,WAAW,CAAC,KAAK,GAAG,CAAC,EAAE,GAAG,EAAE,WAAW,CAAC,GAAG,GAAG,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,EAC5I,KAAK,EAAE,YAAY,EACnB,WAAW,EAAE,WAAW,EACxB,SAAS,EAAE,gBAAgB,EAC3B,aAAa,EAAE,MAAM,EAAE,OAAO,EAC9B,cAAc,EAAE,eAAe,EAC/B,OAAO,EAAE,cAAc,GACvB,EACD,iBAAiB,CAAC,CAAC,CAAC,gCAAmB,QAAQ,EAAC,SAAS,EAAC,6BAA6B,qBAAkB,iBAAiB,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,EAAE,KAAK,EAAE,WAAW,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,WAAW,CAAC,IAAI,GAAG,WAAW,CAAC,KAAK,GAAG,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,gCAAgC,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,WAAW,CAAC,KAAK,GAAG,EAAE,CAAC,EAAmB,CAAC,CAAC,CAAC,SAAS,aAC9V,WAAW,CAAC,CAAC,CAAC,+BAAkB,wDAAW,EAAC,SAAS,EAAC,0BAA0B,EAAC,EAAE,EAAE,SAAS,aAC7F,6BAAQ,wDAAqB,EAAA,yBAAO,eAAe,CAAC,MAAM,GAAQ,IAAS,EAC3E,uBAAK,eAAe,CAAC,GAAG,CAAC,CAAC,EAAE,aAAa,EAAE,KAAK,EAAE,UAAU,EAAE,EAAE,KAAK,EAAE,EAAE,CAAC,yBACxE,8CAAmB,KAAK,GAAG,CAAC,GAAQ,EAAA,sBAAI,KAAK,GAAK,KAD+B,UAAU,CAExF,CAAC,GAAM,IACN,CAAC,CAAC,CAAC,IAAI,EACf,oCAAkB,SAAS,EAAC,4BAA4B,GAAG,EAAA,qCAAkB,SAAS,EAAC,6BAA6B,aAAC,aAAK,EAAA,aAAK,IAAO,EAAA,mCACrH,SAAS,mBACT,WAAW,gBACf,oEAAa,EACxB,SAAS,EAAC,2BAA2B,eAC1B,WAAW,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,EACzC,QAAQ,EAAE,eAAe,CAAC,MAAM,KAAK,CAAC,EACtC,OAAO,EAAE,GAAG,EAAE,CAAC,cAAc,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,EACpD,KAAK,EAAE,eAAe,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,aAAa,EAC9D,IAAI,EAAC,QAAQ,aACd,KAAC,OAAO,IAAC,SAAS,EAAC,gCAAgC,EAAC,IAAI,EAAE,EAAE,EAAE,MAAM,EAAC,MAAM,GAAG,EAAA,aAAK,EAAA,iCAAQ,IAAS,EACrG,0BAAK,eAAM,SAAS,EAAC,0BAA0B,YAAC,2BAAS,eAAe,GAAU,GAAO,EAAC,WAAW,CAAC,CAAC,CAAC,gBAAO,SAAS,EAAC,8BAA8B,YAAC,eAAM,SAAS,EAAC,yBAAyB,YAAE,WAAW,GAAQ,GAAQ,CAAC,CAAC,CAAC,IAAI,IAAO,EAC3O,CAAC,OAAO,IAAI,eAAe,CAAC,IAAI,gBAAgB,CAAC,MAAM,KAAK,WAAW,CAAC,CAAC,CAAC,eAAM,SAAS,EAAC,iCAAiC,EAAC,KAAK,EAAE,kBAAkB,YAAG,kBAAkB,GAAQ,CAAC,CAAC,CAAC,IAAI,EACzL,MAAM,IAAI,OAAO,IAAI,gBAAgB,CAAC,MAAM,KAAK,WAAW,CAAC,CAAC,CAAC,iBAAQ,SAAS,EAAC,uBAAuB,EAAC,IAAI,EAAC,QAAQ,EAAC,OAAO,EAAE,MAAM,yCAAe,CAAC,CAAC,CAAC,IAAI,IACrJ,CAAC,CAAC,CAAC,IAAI,IACb,EAAE,QAAQ,CAAC,IAAI,CACtB,CAAC;AACJ,CAAC"}
package/dist/react.d.ts CHANGED
@@ -1,8 +1,47 @@
1
- import { type MouseEvent, type ReactElement, type ReactNode } from "react";
1
+ import { type MouseEvent, type ReactElement, type ReactNode, type RefCallback } from "react";
2
+ import { type AgentNavigation, type AgentNavigationExecutors } from "./navigation.js";
2
3
  import type { ToolRuntime } from "./runtime.js";
3
4
  import type { AgentContextEntry, AgentToolDefinition, AgentToolExecutor } from "./types.js";
4
- export declare function useAgentTool<TInput, TResult>(definition: AgentToolDefinition<TInput, TResult>, execute: AgentToolExecutor<TInput, TResult>): void;
5
- export declare function AgentToolsProvider({ children, toolRuntime, webMcp, }: {
5
+ export interface AgentToolChatConfirmationConfig {
6
+ mode: "chat";
7
+ title?: string;
8
+ description?: string;
9
+ confirmLabel?: string;
10
+ rejectLabel?: string;
11
+ }
12
+ export interface AgentToolPageConfirmationConfig {
13
+ mode: "page";
14
+ title?: string;
15
+ description?: string;
16
+ }
17
+ export interface UseAgentToolDefaultOptions {
18
+ requiresConfirmation?: AgentToolChatConfirmationConfig;
19
+ }
20
+ export interface UseAgentToolPageConfirmationOptions {
21
+ requiresConfirmation: AgentToolPageConfirmationConfig;
22
+ }
23
+ export interface AgentToolBinding<TInput = unknown, TElement extends HTMLElement = HTMLElement> {
24
+ readonly toolName: string;
25
+ readonly ref: RefCallback<TElement>;
26
+ refWhen(match: (input: TInput) => boolean): RefCallback<TElement>;
27
+ }
28
+ declare const pageConfirmableAgentToolBindingBrand: unique symbol;
29
+ export interface PageConfirmableAgentToolBinding<TInput = unknown, TElement extends HTMLElement = HTMLElement> extends AgentToolBinding<TInput, TElement> {
30
+ readonly [pageConfirmableAgentToolBindingBrand]: true;
31
+ }
32
+ type BindingInternals = {
33
+ resolveTarget(input: unknown): HTMLElement | undefined;
34
+ pageConfirmable: boolean;
35
+ getConditionalTargetRegistrations(): readonly {
36
+ element: HTMLElement;
37
+ match(input: unknown): boolean;
38
+ }[];
39
+ };
40
+ export declare function getAgentToolBindingInternals(binding: AgentToolBinding): BindingInternals;
41
+ export declare function useAgentTool<TInput, TResult, TElement extends HTMLElement = HTMLElement>(definition: AgentToolDefinition<TInput, TResult>, execute: AgentToolExecutor<TInput, TResult>, options: UseAgentToolPageConfirmationOptions): PageConfirmableAgentToolBinding<TInput, TElement>;
42
+ export declare function useAgentTool<TInput, TResult, TElement extends HTMLElement = HTMLElement>(definition: AgentToolDefinition<TInput, TResult>, execute: AgentToolExecutor<TInput, TResult>, options?: UseAgentToolDefaultOptions): AgentToolBinding<TInput, TElement>;
43
+ export declare function useAgentNavigation<TNavigation extends AgentNavigation, const TExecutors extends AgentNavigationExecutors<TNavigation>>(navigation: TNavigation, executors: TExecutors & Record<Exclude<keyof TExecutors, keyof AgentNavigationExecutors<TNavigation>>, never>): void;
44
+ export declare function ToolsProvider({ children, toolRuntime, webMcp, }: {
6
45
  children: ReactNode;
7
46
  toolRuntime: ToolRuntime;
8
47
  webMcp?: boolean;
package/dist/react.js CHANGED
@@ -1,23 +1,132 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  import { Children, Fragment, cloneElement, useCallback, useEffect, useLayoutEffect, useMemo, useRef, useState, } from "react";
3
3
  import { defineAgentTool } from "./definition.js";
4
+ import { getAgentNavigationEntries, } from "./navigation.js";
4
5
  import { AgentToolError, getInternalToolRuntime } from "./runtime.js";
5
6
  import { InternalToolRuntimeScope, useInternalToolRuntime, } from "./internal-react.js";
6
7
  import { connectToolRuntimeToWebMcp } from "./webmcp.js";
7
- function useAgentBinding(definition, execute) {
8
+ const bindingInternals = new WeakMap();
9
+ export function getAgentToolBindingInternals(binding) {
10
+ const internals = bindingInternals.get(binding);
11
+ if (!internals)
12
+ throw new Error("Invalid Agent Tool Binding.");
13
+ return internals;
14
+ }
15
+ function createAgentToolBinding(toolName, pageConfirmable) {
16
+ let fixedElement = null;
17
+ const conditionalElements = new Map();
18
+ const ref = (element) => {
19
+ if (element && fixedElement && fixedElement !== element) {
20
+ throw new Error("An Agent Tool Binding ref can only attach to one element.");
21
+ }
22
+ fixedElement = element;
23
+ };
24
+ const binding = {
25
+ toolName,
26
+ ref,
27
+ refWhen(match) {
28
+ let callback;
29
+ callback = (element) => {
30
+ if (element) {
31
+ conditionalElements.set(callback, { element, match });
32
+ }
33
+ else {
34
+ conditionalElements.delete(callback);
35
+ }
36
+ };
37
+ return callback;
38
+ },
39
+ };
40
+ bindingInternals.set(binding, {
41
+ resolveTarget(input) {
42
+ for (const entry of conditionalElements.values()) {
43
+ if (entry.element.isConnected && entry.match(input))
44
+ return entry.element;
45
+ }
46
+ return fixedElement?.isConnected ? fixedElement : undefined;
47
+ },
48
+ pageConfirmable,
49
+ getConditionalTargetRegistrations: () => Array.from(conditionalElements.values(), ({ element, match }) => ({
50
+ element,
51
+ match: (input) => match(input),
52
+ })),
53
+ });
54
+ return binding;
55
+ }
56
+ function useAgentBinding(definition, execute, options) {
8
57
  const runtime = useInternalToolRuntime();
58
+ const confirmation = options.requiresConfirmation;
59
+ if (confirmation !== undefined
60
+ && (!confirmation
61
+ || typeof confirmation !== "object"
62
+ || (confirmation.mode !== "chat" && confirmation.mode !== "page"))) {
63
+ throw new Error("requiresConfirmation must explicitly use chat or page mode.");
64
+ }
9
65
  const executeRef = useRef(execute);
10
66
  executeRef.current = execute;
67
+ const confirmationRef = useRef(confirmation);
68
+ confirmationRef.current = confirmation;
69
+ const mode = confirmation?.mode;
70
+ const binding = useMemo(() => createAgentToolBinding(definition.name, mode === "page"), [runtime, definition, mode]);
11
71
  useLayoutEffect(() => {
12
72
  const controller = new AbortController();
13
- runtime.register(definition, (input, context) => executeRef.current(input, context), { signal: controller.signal });
73
+ runtime.register(definition, (input, context) => executeRef.current(input, context), {
74
+ signal: controller.signal,
75
+ getConfirmation: () => confirmationRef.current,
76
+ resolveTarget: (input) => getAgentToolBindingInternals(binding).resolveTarget(input),
77
+ });
14
78
  return () => controller.abort();
15
- }, [runtime, definition]);
79
+ }, [runtime, definition, mode]);
80
+ return binding;
81
+ }
82
+ export function useAgentTool(definition, execute, options = {}) {
83
+ return useAgentBinding(definition, execute, options);
16
84
  }
17
- export function useAgentTool(definition, execute) {
18
- useAgentBinding(definition, execute);
85
+ function getAgentNavigationExecutor(executors, key) {
86
+ if (!executors
87
+ || typeof executors !== "object"
88
+ || !Object.hasOwn(executors, key)) {
89
+ throw new Error(`Missing navigation executor: ${key}.`);
90
+ }
91
+ const executor = executors[key];
92
+ if (typeof executor !== "function") {
93
+ throw new Error(`Missing navigation executor: ${key}.`);
94
+ }
95
+ return executor;
96
+ }
97
+ export function useAgentNavigation(navigation, executors) {
98
+ const runtime = useInternalToolRuntime();
99
+ const entries = getAgentNavigationEntries(navigation);
100
+ for (const entry of entries) {
101
+ getAgentNavigationExecutor(executors, entry.key);
102
+ }
103
+ const routeKeys = new Set(entries.map((entry) => entry.key));
104
+ for (const key of Object.keys(executors)) {
105
+ if (!routeKeys.has(key)) {
106
+ throw new Error(`Unknown navigation executor: ${key}.`);
107
+ }
108
+ }
109
+ const executorsRef = useRef(executors);
110
+ executorsRef.current = executors;
111
+ useLayoutEffect(() => {
112
+ const controller = new AbortController();
113
+ try {
114
+ for (const entry of entries) {
115
+ runtime.register(entry.definition, async (input, context) => {
116
+ const executor = getAgentNavigationExecutor(executorsRef.current, entry.key);
117
+ await executor(input, context);
118
+ return { status: "navigated" };
119
+ }, { signal: controller.signal });
120
+ }
121
+ }
122
+ catch (error) {
123
+ controller.abort();
124
+ throw error;
125
+ }
126
+ return () => controller.abort();
127
+ }, [runtime, navigation]);
19
128
  }
20
- export function AgentToolsProvider({ children, toolRuntime, webMcp = true, }) {
129
+ export function ToolsProvider({ children, toolRuntime, webMcp = true, }) {
21
130
  const runtime = getInternalToolRuntime(toolRuntime);
22
131
  return (_jsxs(InternalToolRuntimeScope, { runtime: toolRuntime, children: [_jsx(WebMcpRuntimeBridge, { enabled: webMcp, runtime: runtime }), children] }));
23
132
  }