@nexface/tools 0.1.11-alpha.0 → 0.1.11
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/browser/controller.js +27 -8
- package/dist/browser/controller.js.map +1 -1
- package/dist/browser/feedback.d.ts +8 -2
- package/dist/browser/feedback.js +11 -2
- package/dist/browser/feedback.js.map +1 -1
- package/dist/browser/locator.d.ts +1 -0
- package/dist/browser/locator.js +1 -1
- package/dist/browser/locator.js.map +1 -1
- package/dist/browser/toolset.d.ts +3 -1
- package/dist/browser/toolset.js +9 -6
- package/dist/browser/toolset.js.map +1 -1
- package/dist/operation-runtime.d.ts +1 -0
- package/dist/operation-runtime.js +12 -8
- package/dist/operation-runtime.js.map +1 -1
- package/dist/operation-surface.js +78 -100
- package/dist/operation-surface.js.map +1 -1
- package/dist/operation-types.d.ts +18 -8
- package/dist/operation-types.js.map +1 -1
- package/dist/operation-view.d.ts +4 -13
- package/dist/operation-view.js +147 -348
- package/dist/operation-view.js.map +1 -1
- package/dist/runtime.d.ts +27 -6
- package/dist/runtime.js +35 -23
- package/dist/runtime.js.map +1 -1
- package/dist/styles.css +1 -7
- package/package.json +1 -1
|
@@ -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
|
-
|
|
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
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
#
|
|
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
|
-
|
|
143
|
-
this.#
|
|
144
|
-
return () => { if (this.#
|
|
145
|
-
this.#
|
|
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
|
|
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 (
|
|
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
|
-
...(
|
|
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
|
-
|
|
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 =
|
|
517
|
-
|
|
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
|
-
|
|
524
|
-
|
|
525
|
-
|
|
526
|
-
|
|
527
|
-
|
|
528
|
-
|
|
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,
|