@nexface/tools 0.1.0 → 0.1.1-alpha.1

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 (62) 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 +6 -4
  7. package/dist/index.js +2 -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 +12 -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 +83 -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-entry.d.ts +2 -0
  29. package/dist/react-entry.js +3 -0
  30. package/dist/react-entry.js.map +1 -0
  31. package/dist/react.d.ts +66 -3
  32. package/dist/react.js +115 -6
  33. package/dist/react.js.map +1 -1
  34. package/dist/runtime.d.ts +59 -6
  35. package/dist/runtime.js +129 -20
  36. package/dist/runtime.js.map +1 -1
  37. package/dist/styles.css +189 -0
  38. package/dist/types.d.ts +2 -0
  39. package/dist/webmcp.js +11 -10
  40. package/dist/webmcp.js.map +1 -1
  41. package/package.json +25 -4
  42. package/src/browser/controller.ts +0 -984
  43. package/src/browser/dom.ts +0 -507
  44. package/src/browser/feedback.ts +0 -5
  45. package/src/browser/locator.ts +0 -383
  46. package/src/browser/prompt.generated.ts +0 -50
  47. package/src/browser/prompt.ts +0 -10
  48. package/src/browser/snapshot.ts +0 -542
  49. package/src/browser/toolset.ts +0 -522
  50. package/src/browser/types.ts +0 -172
  51. package/src/browser/worker-runner.ts +0 -468
  52. package/src/definition.ts +0 -115
  53. package/src/index.ts +0 -35
  54. package/src/internal-react.tsx +0 -62
  55. package/src/internal-types.ts +0 -12
  56. package/src/internal.ts +0 -36
  57. package/src/react.tsx +0 -397
  58. package/src/runtime.ts +0 -722
  59. package/src/schema.ts +0 -52
  60. package/src/types.ts +0 -123
  61. package/src/webmcp.ts +0 -102
  62. 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":"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"}
@@ -0,0 +1,2 @@
1
+ import "./styles.css";
2
+ export { AgentOperationSurface, type AgentOperationSurfaceProps } from "./operation-surface.js";
@@ -0,0 +1,3 @@
1
+ import "./styles.css";
2
+ export { AgentOperationSurface } from "./operation-surface.js";
3
+ //# sourceMappingURL=react-entry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"react-entry.js","sourceRoot":"","sources":["../src/react-entry.ts"],"names":[],"mappings":"AAAA,OAAO,cAAc,CAAC;AAEtB,OAAO,EAAE,qBAAqB,EAAmC,MAAM,wBAAwB,CAAC"}
package/dist/react.d.ts CHANGED
@@ -1,8 +1,71 @@
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
+ /**
6
+ * @experimental Human-in-the-loop Chat confirmation configuration.
7
+ * @beta
8
+ */
9
+ export interface AgentToolChatConfirmationConfig {
10
+ mode: "chat";
11
+ title?: string;
12
+ description?: string;
13
+ confirmLabel?: string;
14
+ rejectLabel?: string;
15
+ }
16
+ /**
17
+ * @experimental Human-in-the-loop Page confirmation configuration.
18
+ * @beta
19
+ */
20
+ export interface AgentToolPageConfirmationConfig {
21
+ mode: "page";
22
+ title?: string;
23
+ description?: string;
24
+ }
25
+ export interface UseAgentToolDefaultOptions {
26
+ /**
27
+ * @experimental Enables human-in-the-loop Chat confirmation.
28
+ * @beta
29
+ */
30
+ requiresConfirmation?: AgentToolChatConfirmationConfig;
31
+ }
32
+ /**
33
+ * @experimental Enables human-in-the-loop Page confirmation.
34
+ * @beta
35
+ */
36
+ export interface UseAgentToolPageConfirmationOptions {
37
+ requiresConfirmation: AgentToolPageConfirmationConfig;
38
+ }
39
+ export interface AgentToolBinding<TInput = unknown, TElement extends HTMLElement = HTMLElement> {
40
+ readonly toolName: string;
41
+ readonly ref: RefCallback<TElement>;
42
+ refWhen(match: (input: TInput) => boolean): RefCallback<TElement>;
43
+ }
44
+ declare const pageConfirmableAgentToolBindingBrand: unique symbol;
45
+ /**
46
+ * @experimental Binding for human-in-the-loop Page confirmation.
47
+ * @beta
48
+ */
49
+ export interface PageConfirmableAgentToolBinding<TInput = unknown, TElement extends HTMLElement = HTMLElement> extends AgentToolBinding<TInput, TElement> {
50
+ readonly [pageConfirmableAgentToolBindingBrand]: true;
51
+ }
52
+ type BindingInternals = {
53
+ resolveTarget(input: unknown): HTMLElement | undefined;
54
+ pageConfirmable: boolean;
55
+ getConditionalTargetRegistrations(): readonly {
56
+ element: HTMLElement;
57
+ match(input: unknown): boolean;
58
+ }[];
59
+ };
60
+ export declare function getAgentToolBindingInternals(binding: AgentToolBinding): BindingInternals;
61
+ /**
62
+ * @experimental The Page confirmation overload is experimental.
63
+ * @beta
64
+ */
65
+ export declare function useAgentTool<TInput, TResult, TElement extends HTMLElement = HTMLElement>(definition: AgentToolDefinition<TInput, TResult>, execute: AgentToolExecutor<TInput, TResult>, options: UseAgentToolPageConfirmationOptions): PageConfirmableAgentToolBinding<TInput, TElement>;
66
+ export declare function useAgentTool<TInput, TResult, TElement extends HTMLElement = HTMLElement>(definition: AgentToolDefinition<TInput, TResult>, execute: AgentToolExecutor<TInput, TResult>, options?: UseAgentToolDefaultOptions): AgentToolBinding<TInput, TElement>;
67
+ 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;
68
+ export declare function ToolsProvider({ children, toolRuntime, webMcp, }: {
6
69
  children: ReactNode;
7
70
  toolRuntime: ToolRuntime;
8
71
  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
  }