@nexface/tools 0.1.9 → 0.1.10-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.
@@ -1 +1 @@
1
- {"version":3,"file":"operation-view.js","sourceRoot":"","sources":["../src/operation-view.tsx"],"names":[],"mappings":"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","sourcesContent":["import { CursorIcon as Cursor } from \"@phosphor-icons/react/Cursor\";\nimport { SparkleIcon as Sparkle } from \"@phosphor-icons/react/Sparkle\";\nimport * as React from \"react\";\nimport { useLayoutEffect, useEffect, useRef, useState, type CSSProperties } from \"react\";\nimport { createPortal, flushSync } from \"react-dom\";\nimport type { AgentOperation, AgentOperationProgressEntry, AgentOperationTarget } from \"./operation-types.js\";\n\nimport { lockOperationSurface } from \"./operation-lock.js\";\n\nconst BROWSER_TOOL_NAMES = new Set([\"nxf_getSnapshot\", \"nxf_executeAction\", \"nxf_applyAction\"]);\nconst CENTER_BROWSER_TOOL_NAMES = new Set([\"nxf_getSnapshot\", \"nxf_executeAction\"]);\nconst POINTER_EXIT_DURATION_MS = 120;\nconst CONTROLLER_EXIT_DURATION_MS = 300;\n\ninterface PointerPosition {\n left: number;\n top: number;\n}\n\ntype PointerPhase = \"hidden\" | \"resting\" | \"moving\";\n\ninterface PointerMotion {\n durationMs: number;\n phase: PointerPhase;\n position: PointerPosition;\n revision: number;\n toolCallId: string;\n}\n\nfunction operationProgressLabel(operation: AgentOperation): string {\n const progressLabel = operation.progressLabel?.trim().replace(/\\s+/g, \" \");\n if (progressLabel) return progressLabel.slice(0, 48);\n return BROWSER_TOOL_NAMES.has(operation.name)\n ? \"正在浏览网页\"\n : \"正在处理你的请求\";\n}\n\nfunction operationEffect(operation: AgentOperation): \"read\" | \"action\" | \"navigate\" | \"processing\" {\n return operation.effect ?? \"action\";\n}\n\nfunction normalizedLabel(label: string | undefined): string | undefined {\n const normalized = label?.trim().replace(/\\s+/g, \" \");\n return normalized || undefined;\n}\n\nfunction operationTargetLabel(\n operation: AgentOperation,\n target: AgentOperationTarget | undefined,\n): string | undefined {\n const label = target?.label;\n if (!label || label === operation.name) return undefined;\n const rawNamePrefix = `${operation.name} · `;\n return label.startsWith(rawNamePrefix) ? label.slice(rawNamePrefix.length) : label;\n}\n\nfunction pointerMoveDuration(from: PointerPosition, to: PointerPosition): number {\n const distance = Math.hypot(to.left - from.left, to.top - from.top);\n if (distance < 2) return 0;\n return Math.round(Math.min(360, Math.max(180, 180 + distance * 0.18)));\n}\n\nfunction pointerReachedTarget(element: HTMLElement, target: PointerPosition): boolean {\n const rect = element.getBoundingClientRect();\n return Math.hypot(rect.left - target.left, rect.top - target.top) < 2;\n}\n\ninterface AgentPointerProps {\n active: boolean;\n initialPosition: PointerPosition | undefined;\n label: string;\n labelActive: boolean;\n operation: AgentOperation;\n targetElement: HTMLElement | undefined;\n targetPosition: PointerPosition | undefined;\n visible: boolean;\n onPointerReady?(toolCallId: string): void;\n}\n\nfunction AgentPointer({ active, initialPosition, label, labelActive, operation, targetElement, targetPosition, visible, onPointerReady }: AgentPointerProps) {\n const pointerRef = useRef<HTMLDivElement>(null);\n const activeOperationRef = useRef<string | undefined>(undefined);\n const activeTargetRef = useRef<HTMLElement | undefined>(undefined);\n const exitTimerRef = useRef<ReturnType<typeof setTimeout> | undefined>(undefined);\n const movementTimerRef = useRef<ReturnType<typeof setTimeout> | undefined>(undefined);\n const motionRevisionRef = useRef(0);\n const latestActiveRef = useRef(active);\n const latestOperationRef = useRef(operation);\n const [motion, setMotion] = useState<PointerMotion>();\n latestActiveRef.current = active;\n latestOperationRef.current = operation;\n\n const clearExitTimer = () => {\n if (!exitTimerRef.current) return;\n clearTimeout(exitTimerRef.current);\n exitTimerRef.current = undefined;\n };\n const clearMovementTimer = () => {\n if (!movementTimerRef.current) return;\n clearTimeout(movementTimerRef.current);\n movementTimerRef.current = undefined;\n };\n const finishMovement = (revision: number, toolCallId: string) => {\n const latestOperation = latestOperationRef.current;\n if (!latestActiveRef.current\n || motionRevisionRef.current !== revision\n || latestOperation.toolCallId !== toolCallId) return;\n clearMovementTimer();\n const settle = () => setMotion((current) => current?.revision === revision ? { ...current, phase: \"resting\" } : current);\n if (latestOperation.name !== \"nxf_applyAction\" || !onPointerReady) {\n settle();\n return;\n }\n queueMicrotask(() => {\n if (!latestActiveRef.current || motionRevisionRef.current !== revision || latestOperationRef.current.toolCallId !== toolCallId) return;\n flushSync(settle);\n requestAnimationFrame(() => requestAnimationFrame(() => {\n if (latestActiveRef.current && motionRevisionRef.current === revision\n && latestOperationRef.current.toolCallId === toolCallId && activeTargetRef.current?.isConnected) onPointerReady(toolCallId);\n }));\n });\n };\n\n useEffect(() => () => {\n clearExitTimer();\n clearMovementTimer();\n }, []);\n\n useEffect(() => {\n if (!visible || !initialPosition) {\n if (!motion || motion.phase === \"hidden\") return;\n activeOperationRef.current = undefined;\n activeTargetRef.current = undefined;\n clearMovementTimer();\n const revision = ++motionRevisionRef.current;\n setMotion((current) => current\n ? { ...current, durationMs: POINTER_EXIT_DURATION_MS, phase: \"hidden\", revision }\n : current);\n clearExitTimer();\n exitTimerRef.current = setTimeout(() => {\n if (motionRevisionRef.current === revision) setMotion(undefined);\n }, POINTER_EXIT_DURATION_MS);\n return;\n }\n\n clearExitTimer();\n if (!motion) {\n activeOperationRef.current = operation.toolCallId;\n activeTargetRef.current = undefined;\n const revision = ++motionRevisionRef.current;\n setMotion({\n durationMs: 0,\n phase: \"resting\",\n position: initialPosition,\n revision,\n toolCallId: operation.toolCallId,\n });\n return;\n }\n\n if (!active) {\n activeOperationRef.current = undefined;\n activeTargetRef.current = undefined;\n clearMovementTimer();\n if (motion.phase !== \"resting\") {\n const revision = ++motionRevisionRef.current;\n setMotion((current) => current\n ? { ...current, phase: \"resting\", revision }\n : current);\n }\n return;\n }\n\n const operationChanged = activeOperationRef.current !== operation.toolCallId;\n if (operationChanged) {\n activeOperationRef.current = operation.toolCallId;\n activeTargetRef.current = undefined;\n clearMovementTimer();\n } else if (motion.phase === \"hidden\") {\n setMotion((current) => current\n ? { ...current, durationMs: 0, phase: \"resting\" }\n : current);\n }\n\n if (!targetElement || !targetPosition) {\n const positionChanged = CENTER_BROWSER_TOOL_NAMES.has(operation.name)\n && (motion.position.left !== initialPosition.left || motion.position.top !== initialPosition.top);\n if (operationChanged || activeTargetRef.current || positionChanged) {\n activeTargetRef.current = undefined;\n clearMovementTimer();\n const revision = ++motionRevisionRef.current;\n const pointerRect = pointerRef.current?.getBoundingClientRect();\n setMotion((current) => current\n ? {\n ...current,\n durationMs: 0,\n phase: \"resting\",\n position: operationChanged || positionChanged ? initialPosition : pointerRect\n ? { left: pointerRect.left, top: pointerRect.top }\n : current.position,\n revision,\n toolCallId: operation.toolCallId,\n }\n : current);\n }\n return;\n }\n const targetChanged = operationChanged || activeTargetRef.current !== targetElement;\n if (!targetChanged) {\n if (motion.position.left === targetPosition.left && motion.position.top === targetPosition.top) return;\n clearMovementTimer();\n const revision = ++motionRevisionRef.current;\n const durationMs = window.matchMedia?.(\"(prefers-reduced-motion: reduce)\").matches ? 0 : 180;\n setMotion((current) => current\n ? { ...current, durationMs, phase: \"moving\", position: targetPosition, revision }\n : current);\n if (durationMs === 0) finishMovement(revision, operation.toolCallId);\n else movementTimerRef.current = setTimeout(() => finishMovement(revision, operation.toolCallId), durationMs + 50);\n return;\n }\n\n activeTargetRef.current = targetElement;\n clearMovementTimer();\n const revision = ++motionRevisionRef.current;\n const pointerRect = pointerRef.current?.getBoundingClientRect();\n const currentPosition = pointerRect\n ? { left: pointerRect.left, top: pointerRect.top }\n : motion.position;\n const prefersReducedMotion = window.matchMedia?.(\"(prefers-reduced-motion: reduce)\").matches ?? false;\n const durationMs = prefersReducedMotion ? 0 : pointerMoveDuration(currentPosition, targetPosition);\n setMotion((current) => current\n ? {\n ...current,\n durationMs,\n phase: \"moving\",\n position: targetPosition,\n revision,\n toolCallId: operation.toolCallId,\n }\n : current);\n if (durationMs === 0) finishMovement(revision, operation.toolCallId);\n else {\n // A first-frame position update may not dispatch transitionend.\n movementTimerRef.current = setTimeout(() => finishMovement(revision, operation.toolCallId), durationMs + 50);\n }\n }, [\n active,\n initialPosition?.left,\n initialPosition?.top,\n motion,\n operation.toolCallId,\n targetElement,\n targetPosition?.left,\n targetPosition?.top,\n visible,\n ]);\n\n if (!motion) return null;\n const effect = operationEffect(operation);\n const activeEffect = active ? effect : undefined;\n const browserTool = CENTER_BROWSER_TOOL_NAMES.has(operation.name);\n return (\n <div\n aria-hidden\n className=\"agent-operation__pointer-effect\"\n data-active={active ? \"true\" : \"false\"}\n data-operation-effect={activeEffect}\n data-phase={motion.phase}\n onTransitionEnd={(event) => {\n if (event.currentTarget !== event.target\n || event.propertyName !== \"transform\"\n || motion.phase !== \"moving\"\n || !pointerReachedTarget(event.currentTarget, motion.position)) return;\n finishMovement(motion.revision, motion.toolCallId);\n }}\n ref={pointerRef}\n style={{\n \"--agent-operation-pointer-duration\": `${motion.durationMs}ms`,\n \"--agent-operation-pointer-x\": `${motion.position.left}px`,\n \"--agent-operation-pointer-y\": `${motion.position.top}px`,\n } as CSSProperties}\n >\n {active && visible && motion.toolCallId === operation.toolCallId && browserTool && effect === \"action\" && motion.phase !== \"hidden\" ? (\n <>\n <span className=\"agent-operation__browser-halo\" />\n {labelActive ? <span className=\"agent-operation__browser-label\" title={label}>{label}</span> : null}\n </>\n ) : null}\n {active && visible && motion.toolCallId === operation.toolCallId && !browserTool && effect === \"action\" && motion.phase !== \"hidden\" ? (\n <>\n <span className=\"agent-operation__pointer-cursor\">\n <Cursor className=\"agent-operation__pointer\" size={24} weight=\"fill\" />\n </span>\n </>\n ) : null}\n {active && (!browserTool || (effect === \"read\" && visible && motion.toolCallId === operation.toolCallId))\n && motion.phase !== \"hidden\" && (labelActive || effect !== \"action\") ? (\n <span className={labelActive ? \"agent-operation__pointer-label\" : \"agent-operation__pointer-indicator\"} data-browser-tool={browserTool ? \"true\" : undefined} data-operation-effect={activeEffect} title={labelActive ? label : undefined}>\n {activeEffect === \"processing\" ? <span className=\"agent-operation__pointer-processing\" /> : null}\n {activeEffect === \"read\" ? (\n <span className=\"agent-operation__pointer-read-scan\">\n <i />\n <i />\n <i />\n <i />\n <i />\n </span>\n ) : null}\n {activeEffect === \"navigate\" ? <span className=\"agent-operation__pointer-navigation-trail\" /> : null}\n {labelActive ? <span className=\"agent-operation__pointer-label-text\">{label}</span> : null}\n </span>\n ) : null}\n </div>\n );\n}\n\nexport interface OperationOverlayViewProps {\n fallbackPosition?: PointerPosition;\n feedbackActive?: boolean;\n labelActive?: boolean;\n operation?: AgentOperation;\n progressHistory?: readonly AgentOperationProgressEntry[];\n running: boolean;\n humanHasControl?: boolean;\n cancelling?: boolean;\n onCancel?(): void;\n resolveSurface?(): HTMLElement | undefined;\n resolveTarget?(operation: AgentOperation): AgentOperationTarget | undefined;\n onPointerReady?(toolCallId: string): void;\n}\n\nexport function OperationOverlayView({ operation, progressHistory = [], running, feedbackActive = running, labelActive = feedbackActive, humanHasControl = false, cancelling = false, onCancel, resolveSurface, resolveTarget, fallbackPosition, onPointerReady }: OperationOverlayViewProps) {\n const [, setGeometry] = useState(\"\");\n useLayoutEffect(() => {\n const rect = resolveSurface?.()?.getBoundingClientRect();\n if (rect) setGeometry([rect.left, rect.top, rect.width, rect.height].join(\",\"));\n }, [resolveSurface]);\n const [historyOpen, setHistoryOpen] = useState(false);\n const [historyId] = useState(() => `nexface-operation-history-${globalThis.crypto?.randomUUID?.() ?? `${Date.now()}-${Math.random()}`}`);\n const clearTimerRef = useRef<ReturnType<typeof setTimeout> | undefined>(undefined);\n const cancelButtonRef = useRef<HTMLButtonElement>(null);\n const controllerTimerRef = useRef<ReturnType<typeof setTimeout> | undefined>(undefined);\n const [visibleOperation, setVisibleOperation] = useState(operation);\n const [controllerMounted, setControllerMounted] = useState(Boolean(operation\n && operation.status !== \"cancelled\"\n && (running || humanHasControl || operation.status === \"failed\")));\n const [controllerExiting, setControllerExiting] = useState(false);\n useLayoutEffect(() => {\n if (clearTimerRef.current) clearTimeout(clearTimerRef.current);\n if (operation) setVisibleOperation(operation);\n if (operation?.status === \"cancelled\") {\n clearTimerRef.current = setTimeout(() => setVisibleOperation(undefined), 600);\n }\n return () => { if (clearTimerRef.current) clearTimeout(clearTimerRef.current); };\n }, [operation, running]);\n useEffect(() => {\n if ((!running && !feedbackActive && !humanHasControl) || !visibleOperation || visibleOperation.status === \"cancelled\") return;\n let frame = requestAnimationFrame(function update() {\n const surface = resolveSurface?.();\n const target = resolveTarget?.(visibleOperation)?.element;\n const geometry = [surface, target].map((element) => {\n if (!element?.isConnected) return \"\";\n const rect = element.getBoundingClientRect();\n return [rect.left, rect.top, rect.width, rect.height].join(\",\");\n }).join(\";\");\n setGeometry(geometry);\n frame = requestAnimationFrame(update);\n });\n return () => cancelAnimationFrame(frame);\n }, [visibleOperation?.toolCallId, visibleOperation?.status, running, feedbackActive, humanHasControl, resolveSurface, resolveTarget]);\n useEffect(() => {\n if (progressHistory.length === 0) setHistoryOpen(false);\n }, [progressHistory.length]);\n const controllerShouldBeVisible = Boolean(visibleOperation\n && visibleOperation.status !== \"cancelled\"\n && (running || humanHasControl || visibleOperation.status === \"failed\"));\n useEffect(() => {\n if (controllerTimerRef.current) clearTimeout(controllerTimerRef.current);\n if (controllerShouldBeVisible) {\n setControllerMounted(true);\n setControllerExiting(false);\n return;\n }\n if (!controllerMounted) {\n setControllerExiting(false);\n return;\n }\n setHistoryOpen(false);\n setControllerExiting(true);\n controllerTimerRef.current = setTimeout(() => {\n setControllerMounted(false);\n setControllerExiting(false);\n }, CONTROLLER_EXIT_DURATION_MS);\n return () => {\n if (controllerTimerRef.current) clearTimeout(controllerTimerRef.current);\n };\n }, [controllerMounted, controllerShouldBeVisible]);\n useLayoutEffect(() => {\n const surface = resolveSurface?.();\n if (!surface || !running || humanHasControl) return;\n return lockOperationSurface(surface, () => cancelButtonRef.current?.focus());\n }, [humanHasControl, resolveSurface, running]);\n if (!visibleOperation || typeof document === \"undefined\") return null;\n const resolvedTarget = resolveTarget?.(visibleOperation);\n const surfaceElement = resolveSurface?.();\n const target = resolvedTarget && (!surfaceElement || surfaceElement.contains(resolvedTarget.element))\n ? resolvedTarget\n : undefined;\n const structuredTargetLost = visibleOperation.name === \"nxf_applyAction\" && !target;\n const progressLabel = operationProgressLabel(visibleOperation);\n const effect = operationEffect(visibleOperation);\n const targetLabel = operationTargetLabel(visibleOperation, target);\n const pointerLabel = normalizedLabel(visibleOperation.progressLabel) ?? targetLabel ?? progressLabel;\n const controllerLabel = humanHasControl ? undefined : progressLabel;\n const statusLabel = humanHasControl ? \"等待你完成操作\" : {\n running: \"Agent 正在控制\",\n completed: running ? \"工具已完成,任务继续中\" : \"操作已完成\",\n failed: running ? \"Agent 正在处理错误\" : \"操作失败\",\n cancelled: \"任务已终止\",\n }[visibleOperation.status];\n const compactStatusLabel = humanHasControl\n ? \"等待你完成操作\"\n : progressLabel;\n const rect = target?.element.isConnected ? target.element.getBoundingClientRect() : undefined;\n const highlightedRect = effect === \"navigate\" ? undefined : rect;\n const surfaceRect = surfaceElement?.isConnected ? surfaceElement.getBoundingClientRect() : undefined;\n const agentControlsSurface = running && !humanHasControl;\n const operationFeedbackActive = feedbackActive && !structuredTargetLost && !humanHasControl && visibleOperation.status !== \"cancelled\";\n const pointerVisible = Boolean(surfaceRect) && operationFeedbackActive;\n const pointerPosition = rect ? {\n left: rect.left + rect.width / 2,\n top: rect.top + rect.height / 2,\n } : undefined;\n const cancel = onCancel ? () => {\n onCancel();\n } : undefined;\n return createPortal(\n <div className=\"agent-operation\" data-nexface-ignore data-feedback-active={operationFeedbackActive} data-structured-target-lost={structuredTargetLost} data-human-control={humanHasControl} data-operation-effect={effect} data-run-active={running} data-status={visibleOperation.status}>\n {agentControlsSurface && surfaceRect ? <div aria-hidden className=\"agent-operation__surface\" style={{\n ...(highlightedRect ? {\n \"--agent-operation-cutout-height\": `${highlightedRect.height}px`,\n \"--agent-operation-cutout-left\": `${highlightedRect.left - surfaceRect.left}px`,\n \"--agent-operation-cutout-top\": `${highlightedRect.top - surfaceRect.top}px`,\n \"--agent-operation-cutout-width\": `${highlightedRect.width}px`,\n } : {}),\n height: surfaceRect.height, left: surfaceRect.left, top: surfaceRect.top, width: surfaceRect.width,\n } as CSSProperties} /> : null}\n {operationFeedbackActive && highlightedRect ? <div aria-hidden className=\"agent-operation__target\" data-operation-effect={effect} style={{ height: highlightedRect.height, left: highlightedRect.left, top: highlightedRect.top, width: highlightedRect.width }} /> : null}\n <AgentPointer\n active={operationFeedbackActive}\n initialPosition={visibleOperation.name === \"nxf_applyAction\" && surfaceRect\n ? { left: surfaceRect.left + surfaceRect.width / 2, top: surfaceRect.top + surfaceRect.height / 2 }\n : pointerPosition ?? fallbackPosition ?? (surfaceRect ? { left: surfaceRect.left + surfaceRect.width / 2, top: surfaceRect.top + surfaceRect.height / 2 } : undefined)}\n label={pointerLabel}\n labelActive={labelActive}\n operation={visibleOperation}\n targetElement={target?.element}\n targetPosition={pointerPosition}\n visible={pointerVisible}\n {...(onPointerReady ? { onPointerReady } : {})}\n />\n {controllerMounted ? <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) } as CSSProperties : undefined}>\n {historyOpen ? <aside aria-label=\"本次运行的操作记录\" className=\"agent-operation__history\" id={historyId}>\n <header><strong>操作记录</strong><span>{progressHistory.length}</span></header>\n <ol>{progressHistory.map(({ progressLabel: label, toolCallId }, index) => <li key={toolCallId}>\n <span aria-hidden>{index + 1}</span><p>{label}</p>\n </li>)}</ol>\n </aside> : null}\n <span aria-hidden className=\"agent-operation__edge-flow\" /><span aria-hidden className=\"agent-operation__pause-mark\"><i /><i /></span><button\n aria-controls={historyId}\n aria-expanded={historyOpen}\n aria-label=\"查看本次运行的操作记录\"\n className=\"agent-operation__activity\"\n data-open={historyOpen ? \"true\" : \"false\"}\n disabled={progressHistory.length === 0}\n onClick={() => setHistoryOpen((current) => !current)}\n title={progressHistory.length === 0 ? \"暂无操作记录\" : \"查看本次运行的操作记录\"}\n type=\"button\"\n ><Sparkle className=\"agent-operation__activity-icon\" size={16} weight=\"fill\" /><i /><b>✦</b></button>\n <div><span className=\"agent-operation__heading\"><strong>{controllerLabel}</strong></span>{statusLabel ? <small className=\"agent-operation__description\"><span className=\"agent-operation__status\">{statusLabel}</span></small> : null}</div>\n {(running || humanHasControl) && visibleOperation.status !== \"cancelled\" ? <span className=\"agent-operation__compact-status\" title={compactStatusLabel}>{compactStatusLabel}</span> : null}\n {cancel && (running || humanHasControl) && visibleOperation.status !== \"cancelled\" ? <button ref={cancelButtonRef} className=\"agent-operation__stop\" type=\"button\" disabled={cancelling} onClick={cancel}>{cancelling ? \"正在终止\" : \"终止任务\"}</button> : null}\n </section> : null}\n </div>, document.body,\n );\n}\n"]}
1
+ {"version":3,"file":"operation-view.js","sourceRoot":"","sources":["../src/operation-view.tsx"],"names":[],"mappings":"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","sourcesContent":["import { CursorIcon as Cursor } from \"@phosphor-icons/react/Cursor\";\nimport { SparkleIcon as Sparkle } from \"@phosphor-icons/react/Sparkle\";\nimport * as React from \"react\";\nimport { useCallback, useLayoutEffect, useEffect, useRef, useState, type CSSProperties } from \"react\";\nimport { createPortal } from \"react-dom\";\nimport { PageCommandError } from \"./browser/locator.js\";\nimport type { AgentOperation, AgentOperationProgressEntry, OperationFeedback } from \"./operation-types.js\";\nimport { lockOperationSurface } from \"./operation-lock.js\";\n\ntype Position = { left: number; top: number };\ntype Motion = { position: Position; durationMs: number; persistent: boolean };\nconst center = (rect: DOMRect): Position => ({ left: rect.left + rect.width / 2, top: rect.top + rect.height / 2 });\nconst distance = (a: Position, b: Position) => Math.hypot(a.left - b.left, a.top - b.top);\nconst interrupted = () => new PageCommandError({ code: \"EXECUTION_CANCELLED\", message: \"Page action presentation was interrupted.\" });\n\nfunction presentPointer(pointer: HTMLElement, target: Element, presentation: NonNullable<OperationFeedback[\"presentation\"]>): () => void {\n let finished = false;\n const finish = (error?: Error) => {\n if (finished) return;\n finished = true;\n clearTimeout(timer);\n pointer.removeEventListener(\"transitionend\", onTransition);\n presentation.signal?.removeEventListener(\"abort\", onAbort);\n presentation.finish(error);\n };\n const reached = () => pointer.isConnected && target.isConnected && distance(pointer.getBoundingClientRect(), center(target.getBoundingClientRect())) < 2;\n const onTransition = (event: TransitionEvent) => {\n if (event.target === pointer && event.propertyName === \"transform\" && reached()) finish();\n };\n const onAbort = () => finish(interrupted());\n const timer = setTimeout(() => reached() ? finish() : finish(new PageCommandError({\n code: \"ACTION_TIMEOUT\", message: \"Page action pointer did not reach its target in time.\",\n })), 750);\n pointer.addEventListener(\"transitionend\", onTransition);\n presentation.signal?.addEventListener(\"abort\", onAbort, { once: true });\n queueMicrotask(() => { if (presentation.signal?.aborted) onAbort(); else if (reached()) finish(); });\n return () => finish(interrupted());\n}\n\nfunction FeedbackLabel({ feedback }: { feedback: OperationFeedback }) {\n return <span className=\"agent-operation__pointer-label\" data-browser-tool={feedback.centered ? \"true\" : undefined} data-operation-effect={feedback.effect} title={feedback.label}>\n {feedback.effect === \"processing\" ? <span className=\"agent-operation__pointer-processing\" /> : null}\n {feedback.effect === \"read\" ? <span className=\"agent-operation__pointer-read-scan\"><i /><i /><i /><i /><i /></span> : null}\n {feedback.effect === \"navigate\" ? <span className=\"agent-operation__pointer-navigation-trail\" /> : null}\n <span className=\"agent-operation__pointer-label-text\">{feedback.label}</span>\n </span>;\n}\n\nfunction FeedbackIndicator({ feedback, position }: { feedback: OperationFeedback; position: Position | undefined }) {\n const [lastPosition, setLastPosition] = useState(position ?? feedback.position);\n useLayoutEffect(() => { if (position) setLastPosition(position); }, [position?.left, position?.top]);\n const current = position ?? lastPosition;\n return current ? <div aria-hidden className=\"agent-operation__pointer-effect\" data-active=\"true\" data-operation-effect={feedback.effect}\n style={{ \"--agent-operation-pointer-duration\": \"0ms\", \"--agent-operation-pointer-x\": `${current.left}px`,\n \"--agent-operation-pointer-y\": `${current.top}px` } as CSSProperties}>\n <FeedbackLabel feedback={feedback} />\n </div> : null;\n}\n\nfunction AgentPointer({ active, feedback, targetPosition, surfaceCenter }: {\n active: boolean;\n feedback: OperationFeedback | undefined;\n targetPosition: Position | undefined;\n surfaceCenter: Position | undefined;\n}) {\n const pointer = useRef<HTMLDivElement>(null);\n const [motion, setMotion] = useState<Motion>();\n const action = feedback?.effect === \"action\" && (!feedback.requiresTarget || Boolean(targetPosition));\n useLayoutEffect(() => {\n if (!active) { setMotion(undefined); return; }\n if (!action || !targetPosition) {\n if (action && !feedback?.requiresTarget && motion && pointer.current) {\n const rect = pointer.current.getBoundingClientRect();\n if (distance(rect, motion.position) >= 1) setMotion({ ...motion, position: rect, durationMs: 0 });\n }\n return;\n }\n if (!motion) {\n setMotion({ position: feedback?.persistentCursor && surfaceCenter ? surfaceCenter : targetPosition,\n durationMs: 0, persistent: Boolean(feedback?.persistentCursor) });\n return;\n }\n if (distance(motion.position, targetPosition) < 1) {\n if (feedback?.persistentCursor && !motion.persistent) setMotion({ ...motion, persistent: true });\n return;\n }\n const from = pointer.current?.getBoundingClientRect() ?? motion.position;\n const durationMs = window.matchMedia?.(\"(prefers-reduced-motion: reduce)\").matches ? 0\n : Math.round(Math.min(360, Math.max(180, 180 + distance(from, targetPosition) * 0.18)));\n setMotion({ position: targetPosition, durationMs, persistent: motion.persistent || Boolean(feedback?.persistentCursor) });\n }, [active, action, feedback?.id, targetPosition?.left, targetPosition?.top, motion]);\n const show = Boolean(active && motion && (motion.persistent || action));\n useLayoutEffect(() => {\n if (!feedback?.presentation) return;\n if (!active || !feedback.target?.isConnected || !targetPosition) { feedback.presentation.finish(interrupted()); return; }\n if (show && pointer.current) return presentPointer(pointer.current, feedback.target, feedback.presentation);\n }, [active, show, feedback?.presentation, feedback?.target, Boolean(targetPosition)]);\n return show && motion ? <div aria-hidden ref={pointer} className=\"agent-operation__pointer-effect\"\n data-active={action} data-operation-effect={action ? \"action\" : undefined}\n style={{ \"--agent-operation-pointer-duration\": `${motion.durationMs}ms`,\n \"--agent-operation-pointer-x\": `${motion.position.left}px`, \"--agent-operation-pointer-y\": `${motion.position.top}px` } as CSSProperties}>\n <span className=\"agent-operation__pointer-cursor\"><Cursor className=\"agent-operation__pointer\" size={24} weight=\"fill\" /></span>\n {action && feedback ? <FeedbackLabel feedback={feedback} /> : null}\n </div> : null;\n}\n\nexport interface OperationOverlayViewProps {\n operation: AgentOperation;\n feedback?: OperationFeedback;\n progressHistory?: readonly AgentOperationProgressEntry[];\n running: boolean;\n humanHasControl?: boolean;\n cancelling?: boolean;\n onCancel?(): void;\n resolveSurface?(): HTMLElement | undefined;\n}\n\nexport function OperationOverlayView({ operation, feedback, progressHistory = [], running, humanHasControl = false, cancelling = false, onCancel: cancel, resolveSurface }: OperationOverlayViewProps) {\n const [, setGeometry] = useState(\"\");\n const [historyOpen, setHistoryOpen] = useState(false);\n const [historyId] = useState(() => `nexface-operation-history-${globalThis.crypto?.randomUUID?.() ?? `${Date.now()}-${Math.random()}`}`);\n const cancelButtonRef = useRef<HTMLButtonElement>(null);\n const controllerShouldBeVisible = operation.status !== \"cancelled\" && (running || humanHasControl || operation.status === \"failed\");\n const [controllerVisibility, setControllerVisibility] = useState<\"visible\" | \"exiting\" | undefined>(controllerShouldBeVisible ? \"visible\" : undefined);\n useEffect(() => {\n if (controllerShouldBeVisible) { setControllerVisibility(\"visible\"); return; }\n setHistoryOpen(false);\n setControllerVisibility((current) => current ? \"exiting\" : undefined);\n const timer = setTimeout(() => setControllerVisibility(undefined), 300);\n return () => clearTimeout(timer);\n }, [controllerShouldBeVisible]);\n useEffect(() => { if (!progressHistory.length) setHistoryOpen(false); }, [progressHistory.length]);\n useLayoutEffect(() => {\n const surface = resolveSurface?.();\n if (!surface || !running || humanHasControl) return;\n return lockOperationSurface(surface, () => cancelButtonRef.current?.focus());\n }, [humanHasControl, resolveSurface, running]);\n const readGeometry = useCallback(() => {\n const surface = resolveSurface?.();\n const resolvedTarget = feedback?.resolveTarget ? feedback.resolveTarget() : feedback?.target;\n const target = resolvedTarget?.isConnected && surface?.contains(resolvedTarget) ? resolvedTarget : undefined;\n return {\n surfaceRect: surface?.isConnected ? surface.getBoundingClientRect() : undefined,\n target,\n targetRect: target?.getBoundingClientRect(),\n };\n }, [resolveSurface, feedback?.target, feedback?.resolveTarget]);\n useLayoutEffect(() => {\n const update = () => {\n const { surfaceRect, targetRect } = readGeometry();\n const geometry = [surfaceRect, targetRect].map((rect) => {\n if (!rect) return \"\";\n return [rect.left, rect.top, rect.width, rect.height].join(\",\");\n }).join(\";\");\n setGeometry(geometry);\n };\n update();\n if (!running && !humanHasControl) return;\n let frame = requestAnimationFrame(function track() { update(); frame = requestAnimationFrame(track); });\n return () => cancelAnimationFrame(frame);\n }, [readGeometry, operation, running, humanHasControl]);\n if (typeof document === \"undefined\") return null;\n const { surfaceRect, target, targetRect: rect } = readGeometry();\n const structuredTargetLost = Boolean(feedback?.requiresTarget && !target);\n const activeFeedback = !cancelling && !humanHasControl && !structuredTargetLost ? feedback : undefined;\n const effect = activeFeedback?.effect;\n const highlightedRect = effect === \"navigate\" || activeFeedback?.centered ? undefined : rect;\n const agentControlsSurface = running && !humanHasControl;\n const operationFeedbackActive = Boolean(activeFeedback);\n const controllerMounted = Boolean(controllerVisibility);\n const controllerExiting = controllerVisibility === \"exiting\";\n const controllerLabel = humanHasControl ? undefined : operation.progressLabel;\n const compactStatusLabel = humanHasControl ? \"等待你完成操作\" : operation.progressLabel;\n const statusLabel = humanHasControl ? \"等待你完成操作\" : {\n running: \"Agent 正在控制\", completed: running ? \"工具已完成,任务继续中\" : \"操作已完成\",\n failed: running ? \"Agent 正在处理错误\" : \"操作失败\", cancelled: \"任务已终止\",\n }[operation.status];\n const targetPosition = rect ? center(rect) : undefined;\n return createPortal(\n <div className=\"agent-operation\" data-nexface-ignore data-feedback-active={operationFeedbackActive} data-structured-target-lost={structuredTargetLost} data-human-control={humanHasControl} data-operation-effect={effect ?? \"action\"} data-run-active={running} data-status={operation.status}>\n {agentControlsSurface && surfaceRect ? <div aria-hidden className=\"agent-operation__surface\" style={{\n ...(highlightedRect ? { \"--agent-operation-cutout-height\": `${highlightedRect.height}px`,\n \"--agent-operation-cutout-left\": `${highlightedRect.left - surfaceRect.left}px`,\n \"--agent-operation-cutout-top\": `${highlightedRect.top - surfaceRect.top}px`, \"--agent-operation-cutout-width\": `${highlightedRect.width}px` } : {}),\n height: surfaceRect.height, left: surfaceRect.left, top: surfaceRect.top, width: surfaceRect.width,\n } as CSSProperties} /> : null}\n {activeFeedback && highlightedRect ? <div aria-hidden className=\"agent-operation__target\" data-operation-effect={effect} style={{ height: highlightedRect.height, left: highlightedRect.left, top: highlightedRect.top, width: highlightedRect.width }} /> : null}\n <AgentPointer active={agentControlsSurface && !cancelling} feedback={feedback?.presentation ? feedback : activeFeedback}\n targetPosition={targetPosition} surfaceCenter={surfaceRect ? center(surfaceRect) : undefined} />\n {activeFeedback && effect !== \"action\" && surfaceRect ? <FeedbackIndicator key={activeFeedback.id}\n feedback={activeFeedback} position={activeFeedback.centered ? center(surfaceRect) : targetPosition} /> : null}\n {controllerMounted ? <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) } as CSSProperties : undefined}>\n {historyOpen ? <aside aria-label=\"本次运行的操作记录\" className=\"agent-operation__history\" id={historyId}>\n <header><strong>操作记录</strong><span>{progressHistory.length}</span></header>\n <ol>{progressHistory.map(({ progressLabel: label, toolCallId }, index) => <li key={toolCallId}>\n <span aria-hidden>{index + 1}</span><p>{label}</p>\n </li>)}</ol>\n </aside> : null}\n <span aria-hidden className=\"agent-operation__edge-flow\" /><span aria-hidden className=\"agent-operation__pause-mark\"><i /><i /></span><button\n aria-controls={historyId}\n aria-expanded={historyOpen}\n aria-label=\"查看本次运行的操作记录\"\n className=\"agent-operation__activity\"\n data-open={historyOpen ? \"true\" : \"false\"}\n disabled={progressHistory.length === 0}\n onClick={() => setHistoryOpen((current) => !current)}\n title={progressHistory.length === 0 ? \"暂无操作记录\" : \"查看本次运行的操作记录\"}\n type=\"button\"\n ><Sparkle className=\"agent-operation__activity-icon\" size={16} weight=\"fill\" /><i /><b>✦</b></button>\n <div><span className=\"agent-operation__heading\"><strong>{controllerLabel}</strong></span>{statusLabel ? <small className=\"agent-operation__description\"><span className=\"agent-operation__status\">{statusLabel}</span></small> : null}</div>\n {(running || humanHasControl) && operation.status !== \"cancelled\" ? <span className=\"agent-operation__compact-status\" title={compactStatusLabel}>{compactStatusLabel}</span> : null}\n {cancel && (running || humanHasControl) && operation.status !== \"cancelled\" ? <button ref={cancelButtonRef} className=\"agent-operation__stop\" type=\"button\" disabled={cancelling} onClick={cancel}>{cancelling ? \"正在终止\" : \"终止任务\"}</button> : null}\n </section> : null}\n </div>, document.body,\n );\n}\n"]}
package/dist/runtime.d.ts CHANGED
@@ -1,3 +1,4 @@
1
+ import type { PageActionFeedback } from "./browser/feedback.js";
1
2
  import type { TaskProgress } from "./operation-runtime.js";
2
3
  export { AgentToolError } from "./errors.js";
3
4
  import { OperationTracker, type RuntimeActivitySnapshot } from "./operation-runtime.js";
@@ -26,7 +27,12 @@ declare const toolRuntimeBrand: unique symbol;
26
27
  */
27
28
  export interface ToolOperation {
28
29
  readonly id: string;
29
- setWaitingForUser(waiting: boolean): void;
30
+ /**
31
+ * @experimental End the operation and wait for its admitted tool calls to settle.
32
+ * @beta
33
+ * @param options - Final outcome; defaults to completed. Does not cancel execution.
34
+ * @returns A promise that resolves when outstanding calls have settled and the operation is released.
35
+ */
30
36
  end(options?: {
31
37
  outcome?: "completed" | "failed" | "cancelled";
32
38
  }): Promise<void>;
@@ -34,19 +40,32 @@ export interface ToolOperation {
34
40
  export interface ToolRuntime {
35
41
  readonly [toolRuntimeBrand]: true;
36
42
  /**
37
- * @experimental Begin a logical operation; throws OPERATION_BUSY while occupied.
43
+ * @experimental Begin a logical operation spanning one complete host-managed task.
38
44
  * @beta
45
+ * @param options - Optional callback for cancellation requested from the operation UI.
46
+ * @returns A handle that the host must end on completion, failure, or cancellation.
47
+ * @throws An OPERATION_BUSY error if another operation or unscoped tool call is outstanding.
48
+ * @remarks The host owns cancellation. Pass its signal to execute and external requests, then end the operation.
39
49
  */
40
50
  beginOperation(options?: {
41
- signal?: AbortSignal;
42
51
  onCancel?: () => void;
43
52
  }): ToolOperation;
44
53
  getTools(): readonly RuntimeAgentTool[];
45
54
  getContexts(options?: {
46
55
  signal?: AbortSignal;
47
56
  }): Promise<readonly AgentContextEntry[]>;
57
+ /**
58
+ * @experimental Execute a current Runtime Tool through the Runtime queue.
59
+ * @beta
60
+ * @param tool - The current tool object returned by this Runtime's getTools method.
61
+ * @param input - Arguments matching the tool's input schema.
62
+ * @param options - Optional cancellation signal and display-only progress label.
63
+ * @returns The tool result, or a rejected promise when execution fails.
64
+ * @remarks Joins the operation active when submitted. Rejects with OPERATION_BUSY while ending. Does not trigger user confirmation.
65
+ */
48
66
  execute<TInput, TResult>(tool: RuntimeAgentTool<TInput, TResult>, input: TInput, options?: {
49
67
  signal?: AbortSignal;
68
+ progressLabel?: string;
50
69
  }): Promise<TResult>;
51
70
  on(eventName: "toolchange", listener: (event: ToolRuntimeToolChangeEvent) => void): () => void;
52
71
  /**
@@ -95,11 +114,12 @@ export interface InternalToolRuntime extends ToolRuntime, EventTarget {
95
114
  }): ToolOperation;
96
115
  endBridgeOperation(handle: ToolOperation): Promise<void>;
97
116
  setTaskProgress(handle: ToolOperation, progress: TaskProgress): void;
117
+ setOperationWaiting(handle: ToolOperation, waiting: boolean): void;
98
118
  getActivitySnapshot(): RuntimeActivitySnapshot;
99
119
  subscribeActivity(listener: () => void): () => void;
100
120
  requestOperationCancel(id: string): void;
101
121
  resolveTarget(tool: RuntimeAgentTool, input: unknown): HTMLElement | undefined;
102
- setPageActionPresentation(wait: (event: AgentToolExecutionEvent, signal?: AbortSignal) => Promise<void>): () => void;
122
+ setPageActionFeedback(listener: (event: AgentToolExecutionEvent, feedback: PageActionFeedback, signal?: AbortSignal) => void | Promise<void>): () => void;
103
123
  executeWithProgress<TInput, TResult>(tool: RuntimeAgentTool<TInput, TResult>, input: TInput, options: {
104
124
  signal?: AbortSignal;
105
125
  progressLabel?: string;
@@ -132,16 +152,16 @@ export declare class ToolRuntimeImplementation extends EventTarget implements To
132
152
  #private;
133
153
  readonly [toolRuntimeBrand]: true;
134
154
  beginOperation(options?: {
135
- signal?: AbortSignal;
136
155
  onCancel?: () => void;
137
156
  }): ToolOperation;
138
157
  beginInternalOperation(options?: Parameters<OperationTracker["begin"]>[0]): ToolOperation;
139
158
  endBridgeOperation(handle: ToolOperation): Promise<void>;
140
159
  setTaskProgress: (handle: ToolOperation, progress: TaskProgress) => void;
160
+ setOperationWaiting: (handle: ToolOperation, waiting: boolean) => void;
141
161
  getActivitySnapshot: () => RuntimeActivitySnapshot;
142
162
  subscribeActivity: (listener: () => void) => (() => void);
143
163
  requestOperationCancel(id: string): void;
144
- setPageActionPresentation(wait: (event: AgentToolExecutionEvent, signal?: AbortSignal) => Promise<void>): () => void;
164
+ setPageActionFeedback(listener: (event: AgentToolExecutionEvent, feedback: PageActionFeedback, signal?: AbortSignal) => void | Promise<void>): () => void;
145
165
  constructor(options?: ToolRuntimeOptions);
146
166
  on(eventName: "toolchange", listener: (event: ToolRuntimeToolChangeEvent) => void): () => void;
147
167
  on(eventName: "toolexecution", listener: (event: AgentToolExecutionEvent) => void): () => void;
@@ -168,6 +188,7 @@ export declare class ToolRuntimeImplementation extends EventTarget implements To
168
188
  }): Promise<void>;
169
189
  execute<TInput, TResult>(tool: RuntimeAgentTool<TInput, TResult>, input: TInput, options?: {
170
190
  signal?: AbortSignal;
191
+ progressLabel?: string;
171
192
  }): Promise<TResult>;
172
193
  executeWithProgress<TInput, TResult>(tool: RuntimeAgentTool<TInput, TResult>, input: TInput, options?: {
173
194
  signal?: AbortSignal;
package/dist/runtime.js CHANGED
@@ -1,10 +1,11 @@
1
+ import { PageCommandError } from "./browser/locator.js";
2
+ import { measurePagePhase } from "./browser/diagnostics.js";
1
3
  import { AgentToolError, TOOL_ERROR_CODES } from "./errors.js";
2
4
  export { AgentToolError } from "./errors.js";
3
5
  import { OperationTracker } from "./operation-runtime.js";
4
6
  import { isValidAgentContextName } from "./definition.js";
5
7
  import { assertAgentToolInputSchema, validateAgentToolInput } from "./schema.js";
6
8
  import { createBrowserToolset, } from "./browser/toolset.js";
7
- import { measurePagePhase } from "./browser/diagnostics.js";
8
9
  const CONTEXT_ERROR_CODES = [
9
10
  "CONTEXT_DISPOSED",
10
11
  "CONTEXT_NAME_MISMATCH",
@@ -126,23 +127,24 @@ export class ToolRuntimeImplementation extends EventTarget {
126
127
  #browserToolset;
127
128
  #browserRuntimeTools = new WeakMap();
128
129
  #executionTail;
129
- #pageActionPresentation;
130
+ #pageActionFeedback;
130
131
  #operations = new OperationTracker();
131
132
  beginOperation(options = {}) {
132
- return this.#operations.begin(options);
133
+ return this.#operations.begin(options.onCancel ? { onCancel: options.onCancel } : {});
133
134
  }
134
135
  beginInternalOperation(options = {}) {
135
136
  return this.#operations.begin(options);
136
137
  }
137
138
  endBridgeOperation(handle) { return this.#operations.disposeBridge(handle); }
138
139
  setTaskProgress = (handle, progress) => this.#operations.setTaskProgress(handle, progress);
140
+ setOperationWaiting = (handle, waiting) => this.#operations.setWaitingForUser(handle, waiting);
139
141
  getActivitySnapshot = () => this.#operations.getSnapshot();
140
142
  subscribeActivity = (listener) => this.#operations.subscribe(listener);
141
143
  requestOperationCancel(id) { this.#operations.requestCancel(id); }
142
- setPageActionPresentation(wait) {
143
- this.#pageActionPresentation = wait;
144
- return () => { if (this.#pageActionPresentation === wait)
145
- this.#pageActionPresentation = undefined; };
144
+ setPageActionFeedback(listener) {
145
+ this.#pageActionFeedback = listener;
146
+ return () => { if (this.#pageActionFeedback === listener)
147
+ this.#pageActionFeedback = undefined; };
146
148
  }
147
149
  #emitExecution(event) {
148
150
  this.#operations.observe(event);
@@ -394,7 +396,7 @@ export class ToolRuntimeImplementation extends EventTarget {
394
396
  });
395
397
  }
396
398
  execute(tool, input, options = {}) {
397
- return this.executeWithProgress(tool, input, options.signal ? { signal: options.signal } : {});
399
+ return this.executeWithProgress(tool, input, options);
398
400
  }
399
401
  executeWithProgress(tool, input, options = {}) {
400
402
  const label = options.progressLabel?.trim().replace(/\s+/g, " ").slice(0, 48);
@@ -418,12 +420,13 @@ export class ToolRuntimeImplementation extends EventTarget {
418
420
  || this.#getBrowserRuntimeTool(definition) !== tool) {
419
421
  return Promise.reject(new AgentToolError("CONTRACT_MISMATCH", `Tool "${name}" is registered with a different Definition.`));
420
422
  }
421
- return this.#enqueue((operationId) => this.#observeExecution(tool, input, options.signal, async (presentTarget) => {
423
+ return this.#enqueue((operationId) => this.#observeExecution(tool, input, options.signal, async (onFeedback, assertActive) => {
422
424
  const signal = options.signal ?? new AbortController().signal;
423
425
  signal.throwIfAborted();
424
426
  return browserHandler.execute(input, {
425
427
  signal,
426
- ...(presentTarget ? { presentTarget } : {}),
428
+ ...(onFeedback ? { onFeedback } : {}),
429
+ ...(assertActive ? { assertActive } : {}),
427
430
  });
428
431
  }, options.progressLabel, operationId), options.signal);
429
432
  }
@@ -451,7 +454,13 @@ export class ToolRuntimeImplementation extends EventTarget {
451
454
  #enqueue(execute, signal) {
452
455
  if (signal?.aborted)
453
456
  return Promise.reject(signal.reason);
454
- const admission = this.#operations.admit();
457
+ let admission;
458
+ try {
459
+ admission = this.#operations.admit();
460
+ }
461
+ catch (error) {
462
+ return Promise.reject(error);
463
+ }
455
464
  const previous = this.#executionTail;
456
465
  let removeQueuedAbort = () => { };
457
466
  const start = async () => {
@@ -513,19 +522,22 @@ export class ToolRuntimeImplementation extends EventTarget {
513
522
  input,
514
523
  ...(progressLabel ? { progressLabel } : {}),
515
524
  };
516
- const presentation = running.name === "nxf_applyAction" && this.resolveTarget(tool, input)
517
- ? this.#pageActionPresentation : undefined;
518
- const waitForPresentation = Boolean(presentation);
519
- if (!waitForPresentation)
520
- this.#emitExecution(running);
521
- try {
525
+ const presentation = this.#pageActionFeedback;
526
+ const assertActive = () => {
522
527
  signal?.throwIfAborted();
523
- const result = await execute(waitForPresentation ? async () => {
524
- if (this.#pageActionPresentation !== presentation)
525
- throw new Error("Page action presentation was interrupted.");
526
- this.#emitExecution(running);
527
- await measurePagePhase("presentation", () => presentation(running, signal));
528
- } : undefined);
528
+ if (presentation && this.#pageActionFeedback !== presentation) {
529
+ throw new PageCommandError({ code: "EXECUTION_CANCELLED", message: "Page action presentation was detached." });
530
+ }
531
+ };
532
+ this.#emitExecution(running);
533
+ try {
534
+ assertActive();
535
+ const result = await execute(async (feedback) => {
536
+ assertActive();
537
+ if (presentation)
538
+ await measurePagePhase("presentation", async () => { await presentation(running, feedback, signal); });
539
+ assertActive();
540
+ }, assertActive);
529
541
  signal?.throwIfAborted();
530
542
  this.#emitExecution({
531
543
  ...running, status: "success", finishedAt: Date.now(), result,