@nexface/tools 0.1.15-alpha.0 → 0.1.15-alpha.10

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (92) hide show
  1. package/dist/browser/actions.js +34 -10
  2. package/dist/browser/controller.js +53 -74
  3. package/dist/browser/diagnostics.js +8 -3
  4. package/dist/browser/dom.js +12 -28
  5. package/dist/browser/feedback.js +6 -5
  6. package/dist/browser/focus.d.ts +0 -1
  7. package/dist/browser/focus.js +1 -13
  8. package/dist/browser/locator.js +3 -9
  9. package/dist/browser/prompt.d.ts +1 -1
  10. package/dist/browser/prompt.generated.d.ts +1 -1
  11. package/dist/browser/prompt.generated.js +6 -3
  12. package/dist/browser/prompt.js +0 -1
  13. package/dist/browser/snapshot.js +141 -120
  14. package/dist/browser/toolset.js +42 -36
  15. package/dist/browser/types.d.ts +1 -1
  16. package/dist/browser/types.js +0 -1
  17. package/dist/browser/worker-runner.js +0 -1
  18. package/dist/definition.d.ts +1 -3
  19. package/dist/definition.js +2 -2
  20. package/dist/index.browser.js +0 -1
  21. package/dist/index.d.ts +1 -1
  22. package/dist/index.js +1 -2
  23. package/dist/internal-react.d.ts +1 -1
  24. package/dist/internal-react.js +3 -4
  25. package/dist/internal-types.js +0 -1
  26. package/dist/navigation.js +0 -1
  27. package/dist/operation-lock.d.ts +1 -1
  28. package/dist/operation-lock.js +36 -19
  29. package/dist/operation-runtime.js +41 -13
  30. package/dist/operation-surface.js +118 -41
  31. package/dist/operation-types.js +0 -1
  32. package/dist/operation-view.d.ts +1 -1
  33. package/dist/operation-view.js +232 -82
  34. package/dist/react.js +12 -17
  35. package/dist/registration.d.ts +3 -6
  36. package/dist/registration.js +8 -27
  37. package/dist/runtime.d.ts +19 -4
  38. package/dist/runtime.js +127 -52
  39. package/dist/shared/definition.js +2 -3
  40. package/dist/shared/errors.d.ts +1 -1
  41. package/dist/shared/errors.js +0 -1
  42. package/dist/shared/page-protocol.js +0 -1
  43. package/dist/shared/page-tools.js +2 -3
  44. package/dist/shared/runtime-controller.d.ts +1 -0
  45. package/dist/shared/runtime-controller.js +0 -1
  46. package/dist/shared/runtime-execution.js +0 -1
  47. package/dist/shared/schema.js +45 -19
  48. package/dist/styles.css +882 -109
  49. package/dist/tool-search.d.ts +11 -0
  50. package/dist/tool-search.js +117 -0
  51. package/dist/types.js +0 -1
  52. package/dist/webmcp.js +39 -13
  53. package/package.json +8 -4
  54. package/dist/browser/actions.js.map +0 -1
  55. package/dist/browser/controller.js.map +0 -1
  56. package/dist/browser/diagnostics.js.map +0 -1
  57. package/dist/browser/dom.js.map +0 -1
  58. package/dist/browser/feedback.js.map +0 -1
  59. package/dist/browser/focus.js.map +0 -1
  60. package/dist/browser/locator.js.map +0 -1
  61. package/dist/browser/prompt.generated.js.map +0 -1
  62. package/dist/browser/prompt.js.map +0 -1
  63. package/dist/browser/snapshot.js.map +0 -1
  64. package/dist/browser/toolset.js.map +0 -1
  65. package/dist/browser/types.js.map +0 -1
  66. package/dist/browser/worker-runner.js.map +0 -1
  67. package/dist/definition.js.map +0 -1
  68. package/dist/index.browser.js.map +0 -1
  69. package/dist/index.js.map +0 -1
  70. package/dist/internal-react.js.map +0 -1
  71. package/dist/internal-types.js.map +0 -1
  72. package/dist/navigation.js.map +0 -1
  73. package/dist/operation-lock.js.map +0 -1
  74. package/dist/operation-runtime.js.map +0 -1
  75. package/dist/operation-surface.js.map +0 -1
  76. package/dist/operation-types.js.map +0 -1
  77. package/dist/operation-view.js.map +0 -1
  78. package/dist/react.js.map +0 -1
  79. package/dist/registration.js.map +0 -1
  80. package/dist/runtime.js.map +0 -1
  81. package/dist/shared/definition.js.map +0 -1
  82. package/dist/shared/errors.js.map +0 -1
  83. package/dist/shared/page-protocol.js.map +0 -1
  84. package/dist/shared/page-tools.js.map +0 -1
  85. package/dist/shared/runtime-controller.js.map +0 -1
  86. package/dist/shared/runtime-execution.js.map +0 -1
  87. package/dist/shared/schema.js.map +0 -1
  88. package/dist/shared/tool-registry.d.ts +0 -6
  89. package/dist/shared/tool-registry.js +0 -10
  90. package/dist/shared/tool-registry.js.map +0 -1
  91. package/dist/types.js.map +0 -1
  92. package/dist/webmcp.js.map +0 -1
@@ -1 +0,0 @@
1
- {"version":3,"file":"prompt.js","sourceRoot":"","sources":["../../src/browser/prompt.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,0BAA0B,EAAE,MAAM,uBAAuB,CAAC;AAEnE,MAAM,CAAC,MAAM,mBAAmB,GAAG;IACjC,IAAI,EAAE,eAAe;IACrB,OAAO,EAAE,0BAA0B;CAC3B,CAAC;AAEX,MAAM,UAAU,0BAA0B;IACxC,OAAO,2BAA2B,mBAAmB,CAAC,IAAI,OAAO,mBAAmB,CAAC,OAAO,uBAAuB,CAAC;AACtH,CAAC","sourcesContent":["import { BROWSER_TOOLS_INSTRUCTIONS } from \"./prompt.generated.js\";\n\nexport const BROWSER_TOOLS_SKILL = {\n name: \"browser_tools\",\n content: BROWSER_TOOLS_INSTRUCTIONS,\n} as const;\n\nexport function serializeBrowserToolsSkill(): string {\n return `[NEXFACE_SKILL_V1 name=\"${BROWSER_TOOLS_SKILL.name}\"]\\n${BROWSER_TOOLS_SKILL.content}\\n[/NEXFACE_SKILL_V1]`;\n}\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"file":"snapshot.js","sourceRoot":"","sources":["../../src/browser/snapshot.ts"],"names":[],"mappings":"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","sourcesContent":["import { collectElementActions, collectPageActions, type ObservedAction } from \"./actions.js\";\nimport {\n composedChildren,\n composedParent,\n computeNameInfo,\n computeRole,\n computeState,\n createIdentity,\n createScrollableIdentity,\n findNearestHeadingText,\n getElementScrollability,\n isActionableRole,\n isContextRole,\n isElementInViewport,\n isElementRendered,\n normalizeText,\n walkComposedElements,\n} from \"./dom.js\";\nimport type { ElementScrollability, NameSource } from \"./dom.js\";\nimport type {\n PageSnapshot,\n SemanticState,\n SnapshotBundle,\n SnapshotLimits,\n SnapshotRegistry,\n SnapshotScope,\n SnapshotFormat,\n} from \"./types.js\";\n\ninterface RenderNode {\n element?: Element;\n role: string;\n name: string;\n normalizedName: string;\n nameSource: NameSource;\n state: SemanticState;\n actionable: boolean;\n scrollable?: ElementScrollability;\n children: RenderNode[];\n}\n\ninterface WalkContext {\n scope: SnapshotScope;\n activeModal?: Element;\n allowedPortalRoots: Set<Element>;\n styles: WeakMap<Element, CSSStyleDeclaration>;\n rects: WeakMap<Element, DOMRect>;\n visitedNodes: number;\n maxVisitedNodes: number;\n truncated: boolean;\n execution?: SnapshotExecutionContext;\n}\n\ninterface RenderContext {\n actions?: Map<string, ObservedAction>;\n refs: SnapshotRegistry[\"refs\"];\n maxChars: number;\n usedChars: number;\n lines: string[];\n truncated: boolean;\n renderedNodes: number;\n execution?: SnapshotExecutionContext;\n}\n\nexport interface SnapshotExecutionContext {\n deadline: number;\n signal: AbortSignal;\n}\n\nconst DEFAULT_LIMITS: SnapshotLimits = {\n viewportMaxChars: 18_000,\n viewportMaxVisitedNodes: 12_000,\n fullMaxChars: 50_000,\n fullMaxVisitedNodes: 30_000,\n};\n\nconst STRUCTURAL_ROLES = new Set([\n \"alert\",\n \"alertdialog\",\n \"dialog\",\n \"form\",\n \"heading\",\n \"iframe\",\n \"list\",\n \"listbox\",\n \"menu\",\n \"navigation\",\n \"progressbar\",\n \"region\",\n \"row\",\n \"rowgroup\",\n \"status\",\n \"table\",\n \"tooltip\",\n \"tree\",\n \"listitem\",\n]);\n\nconst PORTAL_ROLES = new Set([\n \"alert\",\n \"listbox\",\n \"menu\",\n \"progressbar\",\n \"status\",\n \"tooltip\",\n \"tree\",\n]);\n\nconst REDUNDANT_WRAPPER_ROLES = new Set([\"group\", \"listitem\"]);\n\nfunction checkExecution(context?: SnapshotExecutionContext): void {\n if (!context) return;\n context.signal.throwIfAborted();\n if (performance.now() >= context.deadline) {\n throw new DOMException(\n \"Snapshot collection exceeded the nxf_executeAction deadline.\",\n \"TimeoutError\",\n );\n }\n}\n\nfunction nextAnimationFrame(\n context?: SnapshotExecutionContext,\n): Promise<void> {\n checkExecution(context);\n if (!context) {\n return new Promise((resolve) => requestAnimationFrame(() => resolve()));\n }\n return new Promise((resolve, reject) => {\n let settled = false;\n let frame = 0;\n const remaining = Math.max(0, context.deadline - performance.now());\n const cleanup = (): void => {\n window.clearTimeout(timer);\n context.signal.removeEventListener(\"abort\", onAbort);\n };\n const finish = (error?: Error): void => {\n if (settled) return;\n settled = true;\n cleanup();\n if (error) reject(error);\n else resolve();\n };\n const onAbort = (): void => finish(\n context.signal.reason instanceof Error\n ? context.signal.reason\n : new DOMException(\"Execution cancelled.\", \"AbortError\"),\n );\n const timer = window.setTimeout(() => finish(new DOMException(\n \"Snapshot collection exceeded the nxf_executeAction deadline.\",\n \"TimeoutError\",\n )), remaining);\n context.signal.addEventListener(\"abort\", onAbort, { once: true });\n frame = requestAnimationFrame(() => finish());\n if (settled && typeof cancelAnimationFrame === \"function\") {\n cancelAnimationFrame(frame);\n }\n });\n}\n\nfunction cachedStyle(\n element: Element,\n cache: WeakMap<Element, CSSStyleDeclaration>,\n): CSSStyleDeclaration {\n const existing = cache.get(element);\n if (existing) return existing;\n const style = getComputedStyle(element);\n cache.set(element, style);\n return style;\n}\n\nfunction cachedRect(\n element: Element,\n cache: WeakMap<Element, DOMRect>,\n): DOMRect {\n const existing = cache.get(element);\n if (existing) return existing;\n const rect = element.getBoundingClientRect();\n cache.set(element, rect);\n return rect;\n}\n\nfunction isTextInScope(node: Text, context: WalkContext): boolean {\n if (!normalizeText(node.data)) return false;\n const parent = node.parentElement;\n if (!parent) return false;\n const style = cachedStyle(parent, context.styles);\n if (!isElementRendered(parent, style)) return false;\n if (context.scope === \"full\") return true;\n const parentRect = cachedRect(parent, context.rects);\n if (!isElementInViewport(parent, parentRect)) return false;\n const range = document.createRange();\n range.selectNodeContents(node);\n const rect = range.getBoundingClientRect();\n range.detach();\n return (\n rect.width > 0 &&\n rect.height > 0 &&\n rect.right > 0 &&\n rect.bottom > 0 &&\n rect.left < window.innerWidth &&\n rect.top < window.innerHeight\n );\n}\n\nfunction isElementInScope(element: Element, context: WalkContext): boolean {\n const style = cachedStyle(element, context.styles);\n if (!isElementRendered(element, style)) return false;\n if (context.scope === \"full\") {\n const rect = cachedRect(element, context.rects);\n return rect.width > 0 && rect.height > 0;\n }\n return isElementInViewport(element, cachedRect(element, context.rects));\n}\n\nfunction isDescendantOrSelf(element: Element, ancestor: Element): boolean {\n if (element === ancestor) return true;\n let current: Element | null = element;\n while (current) {\n if (current === ancestor) return true;\n current = composedParent(current);\n }\n return false;\n}\n\nfunction isAllowedByModal(element: Element, context: WalkContext): boolean {\n if (!context.activeModal) return true;\n if (isDescendantOrSelf(element, context.activeModal)) return true;\n for (const root of context.allowedPortalRoots) {\n if (isDescendantOrSelf(element, root)) return true;\n }\n return false;\n}\n\nfunction normalizeNodeChildren(node: RenderNode): void {\n const merged: RenderNode[] = [];\n for (const child of node.children) {\n const previous = merged.at(-1);\n if (\n child.role === \"text\" &&\n previous?.role === \"text\" &&\n !child.element &&\n !previous.element\n ) {\n previous.name = normalizeText(`${previous.name} ${child.name}`);\n previous.normalizedName = previous.name;\n continue;\n }\n merged.push(child);\n }\n\n const directText = normalizeText(\n merged\n .filter((child) => child.role === \"text\")\n .map((child) => child.name)\n .join(\" \"),\n );\n node.children =\n node.normalizedName &&\n directText &&\n node.normalizedName === directText\n ? merged.filter((child) => child.role !== \"text\")\n : merged;\n\n const onlyChild = node.children.length === 1 ? node.children[0] : undefined;\n if (\n REDUNDANT_WRAPPER_ROLES.has(node.role) &&\n node.nameSource === \"content\" &&\n !node.actionable &&\n Object.keys(node.state).length === 0 &&\n onlyChild &&\n onlyChild.role !== \"text\" &&\n node.normalizedName === onlyChild.normalizedName\n ) {\n node.name = \"\";\n node.normalizedName = \"\";\n }\n}\n\nfunction visitNode(node: Node, context: WalkContext): RenderNode[] {\n context.visitedNodes += 1;\n if (context.visitedNodes % 128 === 0) checkExecution(context.execution);\n if (context.visitedNodes > context.maxVisitedNodes) {\n context.truncated = true;\n return [];\n }\n\n if (node instanceof Text) {\n if (!isTextInScope(node, context)) return [];\n const parent = node.parentElement;\n if (parent && !isAllowedByModal(parent, context)) return [];\n return [{\n role: \"text\",\n name: normalizeText(node.data),\n normalizedName: normalizeText(node.data),\n nameSource: \"content\",\n state: {},\n actionable: false,\n children: [],\n }];\n }\n\n if (!(node instanceof Element)) return [];\n const tag = node.tagName.toLowerCase();\n if ([\"script\", \"style\", \"template\", \"meta\", \"link\", \"noscript\"].includes(tag)) {\n return [];\n }\n\n const style = cachedStyle(node, context.styles);\n if (!isElementRendered(node, style)) return [];\n\n const children = composedChildren(node).flatMap((child) =>\n visitNode(child, context),\n );\n const inScope = isElementInScope(node, context);\n const allowed = isAllowedByModal(node, context);\n const role = computeRole(node);\n const state = computeState(node);\n const inferredActionable = isActionableRole(role);\n const focusOnlyActionable =\n role === \"actionable\" &&\n node instanceof HTMLElement &&\n node.tabIndex >= 0 &&\n node.onclick === null &&\n !node.hasAttribute(\"onclick\") &&\n !node.isContentEditable;\n const scrollable = inScope && (!inferredActionable || focusOnlyActionable)\n ? getElementScrollability(node, style)\n : undefined;\n const actionable = inferredActionable && !scrollable;\n const hasState = Object.keys(state).length > 0;\n const keep =\n allowed &&\n ((inScope && (actionable || scrollable || STRUCTURAL_ROLES.has(role) || hasState)) ||\n (children.length > 0 && (isContextRole(role) || role === \"table\" || role === \"list\")));\n\n if (!keep) return children;\n\n const computedName = computeNameInfo(node);\n const scrollableName =\n scrollable && computedName.source === \"content\"\n ? findNearestHeadingText(node)\n : computedName.value || (scrollable ? findNearestHeadingText(node) : \"\");\n const renderNode: RenderNode = {\n element: node,\n role: scrollable && (!role || role === \"actionable\")\n ? \"scrollable\"\n : role || \"group\",\n name: scrollableName,\n normalizedName: normalizeText(scrollableName),\n nameSource: computedName.source,\n state,\n actionable,\n ...(scrollable ? { scrollable } : {}),\n children,\n };\n normalizeNodeChildren(renderNode);\n return [renderNode];\n}\n\nfunction isVisibleModal(element: Element): boolean {\n const role = computeRole(element);\n const ariaModal =\n role === \"dialog\" && element.getAttribute(\"aria-modal\") === \"true\";\n const alertDialog = role === \"alertdialog\";\n let nativeModal = false;\n if (element instanceof HTMLDialogElement && element.open) {\n try {\n nativeModal = element.matches(\":modal\");\n } catch {\n nativeModal = element.open;\n }\n }\n return (ariaModal || alertDialog || nativeModal) && isElementInViewport(element);\n}\n\nfunction findActiveModal(\n execution?: SnapshotExecutionContext,\n): Element | undefined {\n let activeModal: Element | undefined;\n let visited = 0;\n for (const element of walkComposedElements()) {\n visited += 1;\n if (visited % 128 === 0) checkExecution(execution);\n if (isVisibleModal(element)) activeModal = element;\n }\n return activeModal;\n}\n\nfunction findPortalRoots(\n activeModal: Element,\n execution?: SnapshotExecutionContext,\n): Set<Element> {\n const roots = new Set<Element>();\n let visited = 0;\n for (const element of walkComposedElements()) {\n visited += 1;\n if (visited % 128 === 0) checkExecution(execution);\n if (isDescendantOrSelf(element, activeModal)) continue;\n const role = computeRole(element);\n if (\n (PORTAL_ROLES.has(role) || element.hasAttribute(\"aria-live\")) &&\n isElementInViewport(element)\n ) {\n roots.add(element);\n }\n }\n return roots;\n}\n\nfunction serializeState(state: SemanticState): string {\n const entries = Object.entries(state);\n if (entries.length === 0) return \"\";\n return ` [${entries\n .map(([key, value]) =>\n typeof value === \"boolean\"\n ? value\n ? key\n : `${key}=false`\n : `${key}=${JSON.stringify(value)}`,\n )\n .join(\" \")}]`;\n}\n\nfunction serializeScrollability(value: ElementScrollability | undefined): string {\n if (!value) return \"\";\n const axis = value.x && value.y ? \"xy\" : value.y ? \"y\" : \"x\";\n const metrics = value.y\n ? `scrollTop=${value.scrollTop} scrollHeight=${value.scrollHeight} clientHeight=${value.clientHeight}`\n : `scrollLeft=${value.scrollLeft} scrollWidth=${value.scrollWidth} clientWidth=${value.clientWidth}`;\n return ` [axis=${axis} ${metrics}]`;\n}\n\nfunction renderTree(nodes: RenderNode[], context: RenderContext): void {\n const renderNode = (node: RenderNode, depth: number): void => {\n if (context.truncated) return;\n context.renderedNodes += 1;\n if (context.renderedNodes % 128 === 0) {\n checkExecution(context.execution);\n }\n const indent = \" \".repeat(Math.min(depth, 6));\n const name = node.name ? ` ${JSON.stringify(normalizeText(node.name))}` : \"\";\n const state = serializeState(node.state);\n const scrollability = serializeScrollability(node.scrollable);\n const nextRef = node.actionable || node.scrollable\n ? `@${context.refs.size + 1}`\n : undefined;\n const refText = nextRef ? ` [ref=${nextRef}]` : \"\";\n const prefix = node.role === \"text\" ? `${indent}- text:` : `${indent}- ${node.role}`;\n const line =\n node.role === \"text\"\n ? `${prefix} ${JSON.stringify(normalizeText(node.name))}`\n : `${prefix}${name}${state}${scrollability}${refText}`;\n\n const added = line.length + (context.lines.length > 0 ? 1 : 0);\n if (context.usedChars + added > context.maxChars) {\n context.truncated = true;\n return;\n }\n\n context.lines.push(line);\n context.usedChars += added;\n if (nextRef && node.element) {\n if (context.actions) collectElementActions(context.actions, nextRef, node.element, node.role, node.name, node.state, Boolean(node.scrollable));\n context.refs.set(nextRef, {\n element: node.element,\n identity: node.scrollable\n ? createScrollableIdentity(node.element)\n : createIdentity(node.element),\n kind: node.scrollable ? \"scrollable\" : \"element\",\n });\n }\n\n for (const child of node.children) renderNode(child, depth + 1);\n };\n\n for (const node of nodes) renderNode(node, 0);\n}\n\nexport async function createSnapshot(\n scope: SnapshotScope = \"viewport\",\n limits: Partial<SnapshotLimits> = {},\n execution?: SnapshotExecutionContext,\n format: SnapshotFormat = \"text\",\n): Promise<SnapshotBundle> {\n await nextAnimationFrame(execution);\n checkExecution(execution);\n const resolvedLimits = { ...DEFAULT_LIMITS, ...limits };\n const activeModal = findActiveModal(execution);\n const walkContext: WalkContext = {\n scope,\n ...(activeModal ? { activeModal } : {}),\n allowedPortalRoots: activeModal\n ? findPortalRoots(activeModal, execution)\n : new Set(),\n styles: new WeakMap(),\n rects: new WeakMap(),\n visitedNodes: 0,\n maxVisitedNodes:\n scope === \"viewport\"\n ? resolvedLimits.viewportMaxVisitedNodes\n : resolvedLimits.fullMaxVisitedNodes,\n truncated: false,\n ...(execution ? { execution } : {}),\n };\n\n const tree = composedChildren(document.body).flatMap((node) =>\n visitNode(node, walkContext),\n );\n const snapshotId = `s-${crypto.randomUUID()}`;\n const registry: SnapshotRegistry = {\n snapshotId,\n refs: new Map(),\n };\n const actions = format === \"actions\" ? new Map<string, ObservedAction>() : undefined;\n const renderContext: RenderContext = {\n ...(actions ? { actions } : {}),\n refs: registry.refs,\n maxChars:\n scope === \"viewport\"\n ? resolvedLimits.viewportMaxChars\n : resolvedLimits.fullMaxChars,\n usedChars: 0,\n lines: [],\n truncated: false,\n renderedNodes: 0,\n ...(execution ? { execution } : {}),\n };\n renderTree(tree, renderContext);\n checkExecution(execution);\n if (actions) collectPageActions(actions);\n\n const snapshot: PageSnapshot = {\n snapshotId,\n scope,\n url: location.href,\n title: document.title,\n content: renderContext.lines.join(\"\\n\"),\n truncated: walkContext.truncated || renderContext.truncated || (actions ? actions.size >= 240 : false),\n ...(actions ? { actions: [...actions.values()].map(({ candidate }) => candidate) } : {}),\n };\n\n return { snapshot, registry, ...(actions ? { actions } : {}) };\n}\n\nexport async function getSnapshot(\n scope: SnapshotScope = \"viewport\",\n limits: Partial<SnapshotLimits> = {},\n): Promise<PageSnapshot> {\n return (await createSnapshot(scope, limits)).snapshot;\n}\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"file":"toolset.js","sourceRoot":"","sources":["../../src/browser/toolset.ts"],"names":[],"mappings":"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","sourcesContent":["import { measurePagePhase } from \"./diagnostics.js\";\nimport { AgentToolError } from \"../runtime.js\";\nimport { validateAgentToolInput } from \"../shared/schema.js\";\nimport type { AgentToolDefinition } from \"../types.js\";\nimport { getSnapshotTool, executeActionTool, applyActionTool } from \"../shared/page-tools.js\";\nexport { getSnapshotTool, executeActionTool, applyActionTool } from \"../shared/page-tools.js\";\n\nimport { PageController } from \"./controller.js\";\nimport { ActionFeedback, type PageFeedbackListener } from \"./feedback.js\";\nimport { createSnapshot } from \"./snapshot.js\";\nimport type {\n ExecutionLimits,\n ExecutionResult,\n SnapshotBundle,\n SnapshotLimits,\n SnapshotScope,\n SnapshotFormat,\n PageCommand,\n} from \"./types.js\";\nimport { WorkerRunner } from \"./worker-runner.js\";\n\nexport const DEFAULT_EXECUTION_LIMITS: ExecutionLimits = {\n maxArgumentChars: 8_000,\n maxCodeLength: 12_000,\n maxDurationMs: 20_000,\n maxPageCalls: 30,\n maxResultChars: 64_000,\n singleActionTimeoutMs: 5_000,\n};\n\nconst MINIMUM_OBSERVATION_MS = 500;\nconst ACTION_OBSERVATION_MS = 150;\nconst QUIET_WINDOW_MS = 250;\nconst MAXIMUM_SETTLE_MS = 2_000;\nconst PAGE_POLL_INTERVAL_MS = 50;\n\nconst DEFAULT_SNAPSHOT_LIMITS: SnapshotLimits = {\n viewportMaxChars: 24_000,\n viewportMaxVisitedNodes: 12_000,\n fullMaxChars: 60_000,\n fullMaxVisitedNodes: 40_000,\n};\n\nexport interface PageAutomationOptions {\n limits?: {\n maxDurationMs?: number;\n maxResultChars?: number;\n singleActionTimeoutMs?: number;\n };\n snapshotLimits?: {\n viewportMaxChars?: number;\n fullMaxChars?: number;\n };\n}\n\nexport interface BrowserToolHandler {\n resolveTarget?(input: Record<string, unknown>): HTMLElement | undefined;\n definition: AgentToolDefinition<Record<string, unknown>, unknown>;\n execute(\n input: Record<string, unknown>,\n context: { signal: AbortSignal; onFeedback?: PageFeedbackListener; assertActive?: () => void; pageDecision?: boolean },\n ): Promise<unknown>;\n}\n\nexport interface BrowserToolset {\n definitions: AgentToolDefinition<Record<string, unknown>, unknown>[];\n handlers: Map<string, BrowserToolHandler>;\n}\n\nfunction isIgnoredMutationNode(node: Node | null): boolean {\n const element =\n node instanceof Element\n ? node\n : node instanceof Text\n ? node.parentElement\n : null;\n return Boolean(element?.closest(\"[data-nexface-ignore]\"));\n}\n\nfunction isRelevantMutation(record: MutationRecord): boolean {\n if (isIgnoredMutationNode(record.target)) return false;\n if (record.type !== \"childList\") return true;\n const changedNodes = [...record.addedNodes, ...record.removedNodes];\n return (\n changedNodes.length === 0\n || changedNodes.some((node) => !isIgnoredMutationNode(node))\n );\n}\n\nexport interface PageTransitionSettleResult {\n timedOut: boolean;\n urlChanged: boolean;\n mutationObservedAfterUrlChange: boolean;\n}\n\nexport interface PageTransitionTracker {\n waitForSettle(options: {\n deadline: number;\n signal: AbortSignal;\n }): Promise<PageTransitionSettleResult>;\n dispose(): void;\n}\n\ninterface HistoryChangeSubscriber {\n beforeChange(): void;\n afterChange(): void;\n}\n\ninterface HistoryPatch {\n subscribers: Set<HistoryChangeSubscriber>;\n originalPushState: History[\"pushState\"];\n originalReplaceState: History[\"replaceState\"];\n wrappedPushState: History[\"pushState\"];\n wrappedReplaceState: History[\"replaceState\"];\n onUrlEvent: () => void;\n}\n\nlet activeHistoryPatch: HistoryPatch | undefined;\n\nfunction subscribeHistoryChanges(\n subscriber: HistoryChangeSubscriber,\n): () => void {\n if (!activeHistoryPatch) {\n const subscribers = new Set<HistoryChangeSubscriber>();\n const originalPushState = history.pushState;\n const originalReplaceState = history.replaceState;\n const beforeChange = (): void => {\n for (const entry of [...subscribers]) entry.beforeChange();\n };\n const afterChange = (): void => {\n for (const entry of [...subscribers]) entry.afterChange();\n };\n const wrappedPushState: History[\"pushState\"] = function(\n this: History,\n data,\n unused,\n url,\n ): void {\n beforeChange();\n originalPushState.call(this, data, unused, url);\n afterChange();\n };\n const wrappedReplaceState: History[\"replaceState\"] = function(\n this: History,\n data,\n unused,\n url,\n ): void {\n beforeChange();\n originalReplaceState.call(this, data, unused, url);\n afterChange();\n };\n const onUrlEvent = (): void => {\n beforeChange();\n afterChange();\n };\n activeHistoryPatch = {\n subscribers,\n originalPushState,\n originalReplaceState,\n wrappedPushState,\n wrappedReplaceState,\n onUrlEvent,\n };\n history.pushState = wrappedPushState;\n history.replaceState = wrappedReplaceState;\n window.addEventListener(\"popstate\", onUrlEvent);\n window.addEventListener(\"hashchange\", onUrlEvent);\n }\n\n const patch = activeHistoryPatch;\n patch.subscribers.add(subscriber);\n let unsubscribed = false;\n return () => {\n if (unsubscribed) return;\n unsubscribed = true;\n patch.subscribers.delete(subscriber);\n if (patch.subscribers.size > 0 || activeHistoryPatch !== patch) return;\n if (history.pushState === patch.wrappedPushState) {\n history.pushState = patch.originalPushState;\n }\n if (history.replaceState === patch.wrappedReplaceState) {\n history.replaceState = patch.originalReplaceState;\n }\n window.removeEventListener(\"popstate\", patch.onUrlEvent);\n window.removeEventListener(\"hashchange\", patch.onUrlEvent);\n activeHistoryPatch = undefined;\n };\n}\n\nexport function startPageTransitionTracker(mode: \"code\" | \"action\" = \"code\"): PageTransitionTracker {\n const minimumObservationMs = mode === \"action\" ? ACTION_OBSERVATION_MS : MINIMUM_OBSERVATION_MS;\n const quietWindowMs = mode === \"action\" ? ACTION_OBSERVATION_MS : QUIET_WINDOW_MS;\n const initialUrl = location.href;\n let currentUrl = initialUrl;\n let urlChangedAt: number | undefined;\n let didUrlChange = false;\n let mutationObservedAfterUrlChange = false;\n let lastRelevantMutationAt = performance.now();\n let disposed = false;\n\n const syncUrl = (now: number): void => {\n const nextUrl = location.href;\n if (nextUrl === currentUrl) return;\n currentUrl = nextUrl;\n didUrlChange = true;\n urlChangedAt = now;\n mutationObservedAfterUrlChange = false;\n lastRelevantMutationAt = now;\n };\n\n let observer: MutationObserver;\n const recordMutations = (\n records: MutationRecord[],\n now: number,\n ): void => {\n if (!records.some(isRelevantMutation)) return;\n lastRelevantMutationAt = now;\n if (didUrlChange) mutationObservedAfterUrlChange = true;\n };\n const flushBeforeUrlChange = (): void => {\n recordMutations(observer.takeRecords(), performance.now());\n };\n\n observer = new MutationObserver((records) => {\n const now = performance.now();\n if (location.href !== currentUrl) {\n recordMutations(records, now);\n syncUrl(now);\n return;\n }\n recordMutations(records, now);\n });\n observer.observe(document.body, {\n attributes: true,\n childList: true,\n characterData: true,\n subtree: true,\n });\n\n const unsubscribeHistory = subscribeHistoryChanges({\n beforeChange: flushBeforeUrlChange,\n afterChange: () => syncUrl(performance.now()),\n });\n\n return {\n waitForSettle({ deadline, signal }) {\n signal.throwIfAborted();\n const startedAt = performance.now();\n syncUrl(startedAt);\n const settleDeadline = Math.min(\n deadline,\n startedAt + MAXIMUM_SETTLE_MS,\n );\n\n return new Promise((resolve, reject) => {\n let timer = 0;\n let settled = false;\n const cleanup = (): void => {\n window.clearInterval(timer);\n signal.removeEventListener(\"abort\", onAbort);\n };\n const finish = (timedOut: boolean): void => {\n if (settled) return;\n settled = true;\n cleanup();\n resolve({\n timedOut,\n urlChanged: didUrlChange,\n mutationObservedAfterUrlChange,\n });\n };\n const onAbort = (): void => {\n if (settled) return;\n settled = true;\n cleanup();\n reject(\n signal.reason instanceof Error\n ? signal.reason\n : new DOMException(\"Execution cancelled.\", \"AbortError\"),\n );\n };\n const check = (): void => {\n const now = performance.now();\n syncUrl(now);\n const minimumStartedAt = Math.max(\n startedAt,\n urlChangedAt ?? startedAt,\n );\n const reachedMinimum =\n now - minimumStartedAt >= minimumObservationMs;\n const isQuiet = now - lastRelevantMutationAt >= quietWindowMs;\n const urlReady =\n !didUrlChange || mutationObservedAfterUrlChange;\n if (reachedMinimum && isQuiet && urlReady) {\n finish(false);\n return;\n }\n if (now >= settleDeadline) finish(true);\n };\n\n signal.addEventListener(\"abort\", onAbort, { once: true });\n timer = window.setInterval(check, PAGE_POLL_INTERVAL_MS);\n check();\n });\n },\n dispose() {\n if (disposed) return;\n disposed = true;\n observer.disconnect();\n unsubscribeHistory();\n },\n };\n}\n\nfunction validateInput(\n definition: AgentToolDefinition,\n input: Record<string, unknown>,\n): void {\n const errors = validateAgentToolInput(definition.inputSchema, input);\n if (errors.length > 0) {\n throw new AgentToolError(\"INVALID_INPUT\", errors.join(\" \"), { errors });\n }\n}\n\nexport function browserToolsAvailable(): boolean {\n return (\n typeof window !== \"undefined\"\n && typeof document !== \"undefined\"\n && typeof Worker !== \"undefined\"\n && typeof Blob !== \"undefined\"\n && typeof URL?.createObjectURL === \"function\"\n && typeof MutationObserver !== \"undefined\"\n );\n}\n\nexport function createBrowserToolset(\n options: PageAutomationOptions = {},\n): BrowserToolset {\n if (!browserToolsAvailable()) {\n throw new AgentToolError(\n \"BROWSER_TOOLS_UNAVAILABLE\",\n \"Page automation requires document, Worker, Blob URL, and MutationObserver support.\",\n );\n }\n\n const limits: ExecutionLimits = {\n ...DEFAULT_EXECUTION_LIMITS,\n maxDurationMs: options.limits?.maxDurationMs\n ?? DEFAULT_EXECUTION_LIMITS.maxDurationMs,\n maxResultChars: options.limits?.maxResultChars\n ?? DEFAULT_EXECUTION_LIMITS.maxResultChars,\n singleActionTimeoutMs: options.limits?.singleActionTimeoutMs\n ?? DEFAULT_EXECUTION_LIMITS.singleActionTimeoutMs,\n };\n const snapshotLimits = {\n ...DEFAULT_SNAPSHOT_LIMITS,\n viewportMaxChars: options.snapshotLimits?.viewportMaxChars\n ?? DEFAULT_SNAPSHOT_LIMITS.viewportMaxChars,\n fullMaxChars: options.snapshotLimits?.fullMaxChars\n ?? DEFAULT_SNAPSHOT_LIMITS.fullMaxChars,\n };\n const feedback = new ActionFeedback();\n const controller = new PageController(limits, feedback);\n const runner = new WorkerRunner(controller, limits);\n let bundle: SnapshotBundle | undefined;\n\n const activate = (next: SnapshotBundle): SnapshotBundle => {\n bundle = next;\n return next;\n };\n\n const clearBundle = (): void => {\n bundle = undefined;\n };\n\n const expireRefs = (result: ExecutionResult): ExecutionResult => {\n clearBundle();\n result.refsExpired = true;\n return result;\n };\n\n const observe = async (\n scope: SnapshotScope,\n execution?: { deadline: number; signal: AbortSignal },\n format: SnapshotFormat = \"text\",\n ): Promise<SnapshotBundle> => {\n const next = await measurePagePhase(\"observation\", () => createSnapshot(scope, snapshotLimits, execution, format));\n execution?.signal.throwIfAborted();\n if (execution && performance.now() >= execution.deadline) {\n throw new DOMException(\n \"Snapshot collection exceeded the page automation deadline.\",\n \"TimeoutError\",\n );\n }\n return activate(next);\n };\n\n const getSnapshot: BrowserToolHandler = {\n definition: getSnapshotTool,\n async execute(input, { signal, pageDecision }) {\n const normalizedInput = {\n ...input,\n scope: input.scope ?? \"viewport\",\n };\n validateInput(getSnapshotTool, normalizedInput);\n const scope = normalizedInput.scope as SnapshotScope;\n const deadline = performance.now() + limits.maxDurationMs;\n signal.throwIfAborted();\n return (await observe(scope, { deadline, signal }, pageDecision ? \"actions\" : \"text\")).snapshot;\n },\n };\n\n const executeObserved = async (\n signal: AbortSignal,\n execute: (registry: SnapshotBundle[\"registry\"], budget: number) => Promise<ExecutionResult>,\n cancel: () => void,\n mode: \"code\" | \"action\" = \"code\",\n onFeedback?: PageFeedbackListener,\n assertActive?: () => void,\n ): Promise<ExecutionResult> => {\n if (!bundle) throw new AgentToolError(\"BROWSER_SNAPSHOT_REQUIRED\", \"A current page observation is required.\");\n const format: SnapshotFormat = mode === \"action\" ? \"actions\" : \"text\";\n const deadline = performance.now() + limits.maxDurationMs;\n signal.throwIfAborted();\n\n const onAbort = (): void => cancel();\n signal.addEventListener(\"abort\", onAbort, { once: true });\n const tracker = startPageTransitionTracker(mode);\n feedback.listener = onFeedback;\n feedback.assertActive = assertActive;\n let result: ExecutionResult;\n try {\n const activeRegistry = bundle.registry;\n const workerBudget = Math.max(0, deadline - performance.now());\n if (workerBudget <= 0) {\n return {\n executionId: \"deadline-exceeded\",\n ok: false,\n completedActions: [],\n error: {\n code: \"EXECUTION_TIMEOUT\",\n message: `Execution exceeded ${limits.maxDurationMs}ms.`,\n },\n } satisfies ExecutionResult;\n }\n result = await measurePagePhase(\"execution\", () => execute(activeRegistry, workerBudget));\n signal.throwIfAborted();\n if (result.error && [\"EXECUTION_TIMEOUT\", \"WORKER_ERROR\", \"EXECUTION_OUTCOME_UNKNOWN\"].includes(result.error.code)) {\n result.error.code = \"EXECUTION_OUTCOME_UNKNOWN\";\n }\n if (!result.ok && result.completedActions.length === 0) {\n return expireRefs(result);\n }\n try {\n const settled = await measurePagePhase(\"settle\", () => tracker.waitForSettle({ deadline, signal }));\n signal.throwIfAborted();\n if (\n settled.timedOut\n && settled.urlChanged\n && !settled.mutationObservedAfterUrlChange\n ) {\n result.snapshotUnavailable = true;\n return expireRefs(result);\n }\n const remainingBudget = deadline - performance.now();\n if (remainingBudget <= 0) {\n result.snapshotUnavailable = true;\n return expireRefs(result);\n }\n if (settled.timedOut) {\n const diagnostic = await measurePagePhase(\"observation\", () => createSnapshot(\n \"viewport\",\n snapshotLimits,\n { deadline, signal },\n format,\n ));\n result.snapshot = diagnostic.snapshot;\n result.postSnapshotTimedOut = true;\n return expireRefs(result);\n }\n const refreshed = await observe(\"viewport\", { deadline, signal }, format);\n signal.throwIfAborted();\n result.snapshot = refreshed.snapshot;\n } catch (error) {\n if (signal.aborted) {\n clearBundle();\n throw signal.reason;\n }\n result.snapshotUnavailable = true;\n expireRefs(result);\n }\n return result;\n } catch (error) {\n clearBundle();\n if (signal.aborted) throw signal.reason;\n throw new AgentToolError(\n \"EXECUTION_OUTCOME_UNKNOWN\",\n error instanceof Error ? error.message : \"Browser execution failed.\",\n { refsExpired: true },\n );\n } finally {\n feedback.listener = undefined;\n feedback.assertActive = undefined;\n tracker.dispose();\n signal.removeEventListener(\"abort\", onAbort);\n }\n };\n\n const executeCode: BrowserToolHandler = {\n definition: executeActionTool,\n async execute(input, { signal, onFeedback, assertActive }) {\n validateInput(executeActionTool, input);\n return executeObserved(signal, (registry, budget) => runner.execute(input.code as string, registry, budget), () => runner.cancel(), \"code\", onFeedback, assertActive);\n },\n };\n\n const applyAction: BrowserToolHandler = {\n definition: applyActionTool,\n resolveTarget(input) {\n if (!bundle || bundle.snapshot.snapshotId !== input.snapshotId) return undefined;\n const selected = bundle.actions?.get(input.actionId as string);\n if (!selected || selected.command.method === \"scrollBy\" || selected.command.method === \"waitForTimeout\") return undefined;\n const target = selected.command.target;\n const element = target?.type === \"ref\" ? bundle.registry.refs.get(target.ref)?.element : undefined;\n return element instanceof HTMLElement && element.isConnected ? element : undefined;\n },\n async execute(input, { signal, onFeedback, assertActive }) {\n validateInput(applyActionTool, input);\n if (!bundle || bundle.snapshot.snapshotId !== input.snapshotId || !bundle.actions) {\n throw new AgentToolError(\"BROWSER_SNAPSHOT_REQUIRED\", \"The actions observation is missing or expired.\");\n }\n const selected = bundle.actions.get(input.actionId as string);\n if (!selected) throw new AgentToolError(\"INVALID_INPUT\", \"Action is not a candidate of this observation.\");\n if (selected.command.method === \"fill\" ? typeof input.text !== \"string\" || !input.text.trim() : input.text !== undefined) {\n throw new AgentToolError(\"INVALID_INPUT\", \"Only fill actions require a non-empty text value.\");\n }\n if (selected.command.method === \"selectOption\") {\n const target = selected.command.target;\n const element = target.type === \"ref\" ? bundle.registry.refs.get(target.ref)?.element : undefined;\n const options = element instanceof HTMLSelectElement ? [...element.options].filter((option) => option.value === selected.command.args[0]) : [];\n if (options.length !== 1 || options[0]!.disabled || options[0]!.closest(\"optgroup[disabled]\") || options[0]!.label.slice(0, 500) !== selected.candidate.option) {\n throw new AgentToolError(\"INVALID_INPUT\", \"The observed option changed or is no longer available. Observe again.\");\n }\n }\n const executionId = crypto.randomUUID();\n return executeObserved(signal, async (registry, budget) => {\n controller.beginExecution(executionId, registry);\n let timer: ReturnType<typeof setTimeout> | undefined;\n try {\n const command: PageCommand = {\n ...selected.command, executionId, commandSeq: 1,\n args: selected.command.method === \"fill\" ? [input.text] : selected.command.args,\n };\n const response = await Promise.race([\n controller.execute(command, async () => {\n if (selected.optionElement) {\n const target = selected.command.target;\n const element = target.type === \"ref\" ? registry.refs.get(target.ref)?.element : undefined;\n if (!selected.optionElement.isConnected || selected.optionElement.closest(\"select\") !== element) {\n throw new AgentToolError(\"INVALID_INPUT\", \"The observed option was replaced. Observe again.\");\n }\n }\n }),\n new Promise<never>((_, reject) => {\n timer = setTimeout(() => {\n controller.cancelExecution(executionId);\n reject(new Error(\"Page action exceeded its execution budget.\"));\n }, budget);\n }),\n ]);\n const receipt = controller.completeExecution(executionId);\n return { executionId, ...receipt, ok: response.ok, ...(response.error ? { error: response.error } : {}) };\n } finally {\n clearTimeout(timer);\n controller.completeExecution(executionId);\n }\n }, () => controller.cancelExecution(executionId), \"action\", onFeedback, assertActive);\n },\n };\n\n const toolHandlers = [getSnapshot, executeCode, applyAction];\n return {\n definitions: toolHandlers.map(({ definition }) => definition),\n handlers: new Map(toolHandlers.map((tool) => [tool.definition.name, tool])),\n };\n}\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/browser/types.ts"],"names":[],"mappings":"","sourcesContent":["import type { ObservedAction } from \"./actions.js\";\n\nimport type { PageSnapshot } from \"../shared/page-protocol.js\";\nexport type { SnapshotScope, SnapshotFormat, SemanticState, PageActionCandidate, PageSnapshot } from \"../shared/page-protocol.js\";\n\nexport interface RefTarget {\n element: Element;\n identity: string;\n kind?: \"element\" | \"scrollable\";\n}\n\nexport interface SnapshotRegistry {\n snapshotId: string;\n refs: Map<string, RefTarget>;\n}\n\nexport interface SnapshotBundle {\n snapshot: PageSnapshot;\n registry: SnapshotRegistry;\n actions?: Map<string, ObservedAction>;\n}\n\nexport interface RegexValue {\n source: string;\n flags: string;\n}\n\nexport type TextMatcher = string | RegexValue;\n\nexport type LocatorStep =\n | {\n kind: \"role\";\n role: string;\n options?: { name?: TextMatcher; exact?: boolean };\n }\n | {\n kind: \"text\";\n text: TextMatcher;\n options?: { exact?: boolean };\n }\n | {\n kind: \"label\";\n text: TextMatcher;\n options?: { exact?: boolean };\n }\n | {\n kind: \"filter\";\n hasText: TextMatcher;\n };\n\nexport interface LocatorDescriptor {\n steps: LocatorStep[];\n}\n\nexport type LocatorMethod =\n | \"click\"\n | \"fill\"\n | \"press\"\n | \"check\"\n | \"uncheck\"\n | \"selectOption\"\n | \"setOptionSelected\"\n | \"hover\"\n | \"focus\"\n | \"blur\"\n | \"scrollBy\"\n | \"scrollTo\"\n | \"scrollIntoView\"\n | \"exists\"\n | \"text\"\n | \"waitFor\";\n\nexport type PageMethod = \"scrollBy\" | \"waitForTimeout\" | \"waitForURL\";\n\nexport type PageCommandTarget =\n | { type: \"page\" }\n | { type: \"ref\"; ref: string }\n | { type: \"locator\"; locator: LocatorDescriptor };\n\nexport interface PageCommand {\n executionId: string;\n commandSeq: number;\n target: PageCommandTarget;\n method: LocatorMethod | PageMethod;\n args: unknown[];\n}\n\nexport interface CommandError {\n code:\n | \"NOT_FOUND\"\n | \"AMBIGUOUS_TARGET\"\n | \"REF_ACTION_FAILED\"\n | \"NOT_VISIBLE\"\n | \"ELEMENT_COVERED\"\n | \"ELEMENT_DISABLED\"\n | \"NOT_EDITABLE\"\n | \"ACTION_TIMEOUT\"\n | \"EXECUTION_CANCELLED\"\n | \"EXECUTION_OUTCOME_UNKNOWN\"\n | \"INVALID_COMMAND\"\n | \"RESULT_TOO_LARGE\"\n | \"UNSUPPORTED_OPERATION\";\n message: string;\n candidates?: string[];\n}\n\nexport type JSONValue =\n | null\n | boolean\n | number\n | string\n | JSONValue[]\n | { [key: string]: JSONValue };\n\nexport interface CompletedAction {\n callIndex: number;\n method: LocatorMethod | PageMethod;\n target?: string;\n}\n\nexport interface FailedCall {\n callIndex: number;\n method: LocatorMethod | PageMethod;\n target?: string;\n}\n\nexport interface ExecutionResult {\n executionId: string;\n ok: boolean;\n value?: JSONValue;\n completedActions: CompletedAction[];\n failedCall?: FailedCall;\n error?: {\n code: string;\n message: string;\n statement?: string;\n };\n snapshot?: PageSnapshot;\n snapshotUnavailable?: boolean;\n postSnapshotTimedOut?: boolean;\n refsExpired?: boolean;\n}\n\nexport interface ExecutionLimits {\n maxArgumentChars: number;\n maxCodeLength: number;\n maxDurationMs: number;\n maxPageCalls: number;\n maxResultChars: number;\n singleActionTimeoutMs: number;\n}\n\nexport interface SnapshotLimits {\n fullMaxChars: number;\n fullMaxVisitedNodes: number;\n viewportMaxChars: number;\n viewportMaxVisitedNodes: number;\n}\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"file":"worker-runner.js","sourceRoot":"","sources":["../../src/browser/worker-runner.ts"],"names":[],"mappings":"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","sourcesContent":["import { PageController } from \"./controller.js\";\nimport type {\n ExecutionLimits,\n ExecutionResult,\n JSONValue,\n PageCommand,\n SnapshotRegistry,\n} from \"./types.js\";\n\ninterface WorkerCommandMessage {\n type: \"command\";\n requestId: number;\n command: PageCommand;\n}\n\ninterface WorkerDoneMessage {\n type: \"done\";\n hasValue: boolean;\n value?: unknown;\n}\n\ninterface WorkerErrorMessage {\n type: \"error\";\n error: { code: string; message: string; statement?: string };\n}\n\ntype WorkerMessage =\n | WorkerCommandMessage\n | WorkerDoneMessage\n | WorkerErrorMessage;\n\nexport function createWorkerRuntimeSource(\n executionId: string,\n code: string,\n): string {\n return `\nconst executionId = ${JSON.stringify(executionId)};\nlet requestId = 0;\nlet commandSeq = 0;\nconst pending = new Map();\n\nself.onmessage = (event) => {\n const message = event.data;\n if (message.type !== \"response\") return;\n const entry = pending.get(message.requestId);\n if (!entry) return;\n pending.delete(message.requestId);\n if (message.response.ok) entry.resolve(message.response.value);\n else {\n const error = new Error(message.response.error?.message || \"Page command failed\");\n error.code = message.response.error?.code || \"PAGE_COMMAND_FAILED\";\n error.candidates = message.response.error?.candidates;\n entry.reject(error);\n }\n};\n\nfunction normalizeRPCValue(value) {\n if (value instanceof RegExp) {\n return { source: value.source, flags: value.flags };\n }\n if (\n value === null ||\n typeof value === \"string\" ||\n typeof value === \"boolean\" ||\n (typeof value === \"number\" && Number.isFinite(value))\n ) {\n return value;\n }\n if (Array.isArray(value)) return value.map(normalizeRPCValue);\n if (value && typeof value === \"object\") {\n const prototype = Object.getPrototypeOf(value);\n if (prototype !== Object.prototype && prototype !== null) {\n throw new Error(\"Page API arguments must be plain JSON values or RegExp.\");\n }\n return Object.fromEntries(\n Object.entries(value).map(([key, item]) => [key, normalizeRPCValue(item)])\n );\n }\n throw new Error(\"Page API arguments contain an unsupported value.\");\n}\n\nfunction normalizeResult(value, seen = new Set()) {\n if (\n value === null ||\n typeof value === \"string\" ||\n typeof value === \"boolean\" ||\n (typeof value === \"number\" && Number.isFinite(value))\n ) {\n return value;\n }\n if (Array.isArray(value)) {\n if (seen.has(value)) throw new Error(\"nxf_executeAction returned a cyclic value.\");\n seen.add(value);\n const result = value.map((item) => normalizeResult(item, seen));\n seen.delete(value);\n return result;\n }\n if (value && typeof value === \"object\") {\n const prototype = Object.getPrototypeOf(value);\n if (prototype !== Object.prototype && prototype !== null) {\n throw new Error(\"nxf_executeAction must return JSON-serializable data.\");\n }\n if (seen.has(value)) throw new Error(\"nxf_executeAction returned a cyclic value.\");\n seen.add(value);\n const result = Object.fromEntries(\n Object.entries(value).map(([key, item]) => [key, normalizeResult(item, seen)])\n );\n seen.delete(value);\n return result;\n }\n throw new Error(\"nxf_executeAction must return JSON-serializable data.\");\n}\n\nfunction rpc(target, method, args) {\n if (pending.size > 0) {\n const error = new Error(\"Page API operations must be awaited sequentially.\");\n error.code = \"CONCURRENT_PAGE_OPERATION\";\n throw error;\n }\n const id = ++requestId;\n const command = {\n executionId,\n commandSeq: ++commandSeq,\n target: normalizeRPCValue(target),\n method,\n args: normalizeRPCValue(args)\n };\n self.postMessage({ type: \"command\", requestId: id, command });\n return new Promise((resolve, reject) =>\n pending.set(id, { resolve, reject })\n );\n}\n\nclass Locator {\n constructor(steps) { this.steps = steps; }\n getByRole(role, options = {}) {\n return new Locator([...this.steps, { kind: \"role\", role, options }]);\n }\n getByText(text, options = {}) {\n return new Locator([...this.steps, { kind: \"text\", text, options }]);\n }\n getByLabel(text, options = {}) {\n return new Locator([...this.steps, { kind: \"label\", text, options }]);\n }\n filter(options) {\n return new Locator([...this.steps, { kind: \"filter\", hasText: options.hasText }]);\n }\n call(method, ...args) {\n return rpc(\n { type: \"locator\", locator: { steps: this.steps } },\n method,\n args\n );\n }\n click() { return this.call(\"click\"); }\n fill(value) { return this.call(\"fill\", value); }\n press(key) { return this.call(\"press\", key); }\n check() { return this.call(\"check\"); }\n uncheck() { return this.call(\"uncheck\"); }\n selectOption(value) { return this.call(\"selectOption\", value); }\n hover() { return this.call(\"hover\"); }\n focus() { return this.call(\"focus\"); }\n blur() { return this.call(\"blur\"); }\n scrollBy(value) { return this.call(\"scrollBy\", value); }\n scrollTo(value) { return this.call(\"scrollTo\", value); }\n scrollIntoView() { return this.call(\"scrollIntoView\"); }\n exists() { return this.call(\"exists\"); }\n text() { return this.call(\"text\"); }\n waitFor(options = {}) { return this.call(\"waitFor\", options); }\n}\n\nconst uiTarget = Object.freeze({\n ref: (ref) => {\n if (typeof ref !== \"string\" || !/^@\\\\d+$/.test(ref)) {\n throw new Error(\"ui.ref(ref) requires a Snapshot ref such as @12.\");\n }\n return new LocatorProxy({ type: \"ref\", ref });\n },\n getByRole: (role, options = {}) =>\n new Locator([{ kind: \"role\", role, options }]),\n getByText: (text, options = {}) =>\n new Locator([{ kind: \"text\", text, options }]),\n getByLabel: (text, options = {}) =>\n new Locator([{ kind: \"label\", text, options }]),\n scrollBy: (value) => rpc({ type: \"page\" }, \"scrollBy\", [value]),\n waitForTimeout: (ms) => rpc({ type: \"page\" }, \"waitForTimeout\", [ms]),\n waitForURL: (url, options = {}) =>\n rpc({ type: \"page\" }, \"waitForURL\", [url, options])\n});\nconst ui = new Proxy(uiTarget, {\n get(target, property, receiver) {\n if (typeof property !== \"string\" || Object.hasOwn(target, property)) {\n return Reflect.get(target, property, receiver);\n }\n const error = new Error(\n 'UI API method \"' + property + '\" is not available. Supported methods: '\n + Object.keys(uiTarget).join(\", \") + \".\"\n );\n error.code = \"UI_API_NOT_AVAILABLE\";\n throw error;\n }\n});\n\nfunction LocatorProxy(target) {\n this.target = target;\n}\nLocatorProxy.prototype.call = function(method, ...args) {\n return rpc(this.target, method, args);\n};\nfor (const method of [\n \"click\",\n \"check\",\n \"uncheck\",\n \"hover\",\n \"focus\",\n \"blur\",\n \"scrollIntoView\",\n \"exists\",\n \"text\"\n]) {\n LocatorProxy.prototype[method] = function() {\n return this.call(method);\n };\n}\nLocatorProxy.prototype.fill = function(value) { return this.call(\"fill\", value); };\nLocatorProxy.prototype.press = function(key) { return this.call(\"press\", key); };\nLocatorProxy.prototype.selectOption = function(value) {\n return this.call(\"selectOption\", value);\n};\nLocatorProxy.prototype.scrollBy = function(value) {\n return this.call(\"scrollBy\", value);\n};\nLocatorProxy.prototype.scrollTo = function(value) {\n return this.call(\"scrollTo\", value);\n};\nLocatorProxy.prototype.waitFor = function(options = {}) {\n return this.call(\"waitFor\", options);\n};\n\n(async () => {\n try {\n const rawResult = await (async () => {\n${code}\n })();\n if (pending.size > 0) {\n const error = new Error(\"Every Page API operation must be awaited before nxf_executeAction returns.\");\n error.code = \"UNAWAITED_PAGE_OPERATION\";\n throw error;\n }\n const hasValue = rawResult !== undefined;\n const value = hasValue ? normalizeResult(rawResult) : undefined;\n self.postMessage({ type: \"done\", hasValue, value });\n } catch (error) {\n self.postMessage({\n type: \"error\",\n error: {\n code: error?.code || \"CODE_EXECUTION_FAILED\",\n message: error?.message || String(error),\n statement: error?.statement || error?.stack?.split(\"\\\\n\")[1]?.trim()\n }\n });\n }\n})();`;\n}\n\nfunction validateJSONValue(\n value: unknown,\n maxChars: number,\n): JSONValue {\n const serialized = JSON.stringify(value);\n if (serialized === undefined) {\n throw new Error(\"nxf_executeAction returned a non-JSON value.\");\n }\n if (serialized.length > maxChars) {\n throw new Error(\n `nxf_executeAction result exceeds ${maxChars} serialized characters.`,\n );\n }\n return JSON.parse(serialized) as JSONValue;\n}\n\nexport class WorkerRunner {\n private active:\n | {\n executionId: string;\n worker: Worker;\n objectUrl: string;\n settled: boolean;\n cancel: () => void;\n }\n | undefined;\n\n constructor(\n private readonly controller: PageController,\n private readonly limits: ExecutionLimits,\n ) {}\n\n async execute(\n code: string,\n registry: SnapshotRegistry,\n maxDurationMs = this.limits.maxDurationMs,\n ): Promise<ExecutionResult> {\n if (code.length > this.limits.maxCodeLength) {\n return {\n executionId: \"rejected\",\n ok: false,\n completedActions: [],\n error: {\n code: \"CODE_TOO_LONG\",\n message: `Code exceeds ${this.limits.maxCodeLength} characters.`,\n },\n };\n }\n\n if (this.active && !this.active.settled) {\n return {\n executionId: \"rejected\",\n ok: false,\n completedActions: [],\n error: {\n code: \"EXECUTION_IN_PROGRESS\",\n message: \"Another nxf_executeAction call is still running.\",\n },\n };\n }\n\n const executionId = crypto.randomUUID();\n const source = createWorkerRuntimeSource(executionId, code);\n const blob = new Blob([source], {\n type: \"text/javascript\",\n });\n const objectUrl = URL.createObjectURL(blob);\n const worker = new Worker(objectUrl, {\n name: `nexface-${executionId}`,\n });\n this.controller.beginExecution(executionId, registry);\n\n return new Promise<ExecutionResult>((resolve) => {\n const active: NonNullable<WorkerRunner[\"active\"]> = {\n executionId,\n worker,\n objectUrl,\n settled: false,\n cancel: () => {},\n };\n this.active = active;\n\n const settle = (\n partial: Omit<\n ExecutionResult,\n \"executionId\" | \"completedActions\" | \"failedCall\"\n >,\n ): void => {\n if (active.settled) return;\n active.settled = true;\n window.clearTimeout(timer);\n worker.terminate();\n URL.revokeObjectURL(objectUrl);\n const receipt = this.controller.completeExecution(executionId);\n if (this.active === active) this.active = undefined;\n resolve({\n executionId,\n ...partial,\n completedActions: receipt.completedActions,\n ...(receipt.failedCall ? { failedCall: receipt.failedCall } : {}),\n });\n };\n\n active.cancel = () => {\n this.controller.cancelExecution(executionId);\n settle({\n ok: false,\n error: {\n code: \"EXECUTION_CANCELLED\",\n message: \"Execution was cancelled.\",\n },\n });\n };\n\n const timer = window.setTimeout(() => {\n this.controller.cancelExecution(executionId);\n settle({\n ok: false,\n error: {\n code: \"EXECUTION_TIMEOUT\",\n message: `Execution exceeded ${maxDurationMs}ms.`,\n },\n });\n }, maxDurationMs);\n\n worker.onmessage = async (event: MessageEvent<WorkerMessage>) => {\n const message = event.data;\n if (message.type === \"command\") {\n let response = await this.controller.execute(message.command);\n if (response.ok && response.value !== undefined) {\n try {\n response = {\n ...response,\n value: validateJSONValue(\n response.value,\n this.limits.maxResultChars,\n ),\n };\n } catch (error) {\n response = {\n ok: false,\n error: {\n code: \"RESULT_TOO_LARGE\",\n message: error instanceof Error ? error.message : String(error),\n },\n };\n }\n }\n if (!active.settled) {\n worker.postMessage({\n type: \"response\",\n requestId: message.requestId,\n response,\n });\n }\n return;\n }\n if (message.type === \"done\") {\n if (!message.hasValue) {\n settle({ ok: true });\n return;\n }\n try {\n settle({\n ok: true,\n value: validateJSONValue(\n message.value,\n this.limits.maxResultChars,\n ),\n });\n } catch (error) {\n settle({\n ok: false,\n error: {\n code: \"RESULT_INVALID\",\n message:\n error instanceof Error ? error.message : String(error),\n },\n });\n }\n return;\n }\n settle({ ok: false, error: message.error });\n };\n\n worker.onerror = (event) => {\n settle({\n ok: false,\n error: {\n code: \"WORKER_ERROR\",\n message: event.message || \"Worker execution failed.\",\n },\n });\n };\n });\n }\n\n cancel(): void {\n const active = this.active;\n if (!active || active.settled) return;\n active.cancel();\n }\n}\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"file":"definition.js","sourceRoot":"","sources":["../src/definition.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,yBAAyB,EAAE,MAAM,wBAAwB,CAAC;AAOnE,MAAM,gBAAgB,GAAyB,MAAM,CAAC,MAAM,CAAC;IAC3D,IAAI,EAAE,QAAQ;IACd,UAAU,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC;IAC7B,oBAAoB,EAAE,KAAK;CAC5B,CAAC,CAAC;AAQH,MAAM,gBAAgB,GAAG,uBAAuB,CAAC;AAEjD,MAAM,oBAAoB,GAAG,IAAI,GAAG,CAAC;IACnC,iBAAiB,EAAE,sBAAsB;IACzC,iBAAiB;IACjB,YAAY;IACZ,iBAAiB;IACjB,mBAAmB;CACpB,CAAC,CAAC;AAEH,MAAM,iBAAiB,GAAG,IAAI,GAAG,CAAC;IAChC,GAAG,oBAAoB;IACvB,eAAe;IACf,oBAAoB;IACpB,kBAAkB;CACnB,CAAC,CAAC;AAEH,MAAM,UAAU,uBAAuB,CAAC,IAAY;IAClD,OAAO,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;AACxE,CAAC;AAED,SAAS,UAAU,CAAC,IAAY;IAC9B,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,iBAAiB,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;QAChE,MAAM,IAAI,KAAK,CAAC,wCAAwC,IAAI,GAAG,CAAC,CAAC;IACnE,CAAC;AACH,CAAC;AAeD,MAAM,UAAU,eAAe,CAC7B,QAAyE;IAEzE,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;IAC1B,OAAO,yBAAyB,CAAC;QAC/B,GAAG,QAAQ;QACX,WAAW,EAAE,QAAQ,CAAC,WAAW,KAAK,SAAS,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,QAAQ,CAAC,WAAW;KAC1F,CAAC,CAAC;AACL,CAAC","sourcesContent":["import { createAgentToolDefinition } from \"./shared/definition.js\";\nimport type {\n AgentToolDefinition,\n AgentToolInputSchema,\n InferJsonSchema,\n} from \"./types.js\";\n\nconst emptyInputSchema: AgentToolInputSchema = Object.freeze({\n type: \"object\",\n properties: Object.freeze({}),\n additionalProperties: false,\n});\n\ninterface AgentToolMetadataInput {\n name: string;\n description: string;\n effect?: \"read\" | \"action\" | \"navigate\";\n}\n\nconst agentNamePattern = /^[A-Za-z0-9_-]{1,64}$/;\n\nconst reservedContextNames = new Set([\n \"nxf_applyAction\", \"nxf_delegatePageTask\",\n \"nxf_callAppTool\",\n \"nxf_finish\",\n \"nxf_getSnapshot\",\n \"nxf_executeAction\",\n]);\n\nconst reservedToolNames = new Set([\n ...reservedContextNames,\n \"nxf_loadSkill\",\n \"nxf_beginOperation\",\n \"nxf_endOperation\",\n]);\n\nexport function isValidAgentContextName(name: string): boolean {\n return agentNamePattern.test(name) && !reservedContextNames.has(name);\n}\n\nfunction assertName(name: string): void {\n if (!agentNamePattern.test(name) || reservedToolNames.has(name)) {\n throw new Error(`Invalid or reserved agent tool name: ${name}.`);\n }\n}\n\nexport function defineAgentTool<TResult = unknown>(\n metadata: AgentToolMetadataInput,\n): AgentToolDefinition<Record<string, never>, TResult>;\nexport function defineAgentTool<\n TInput = never,\n TResult = unknown,\n const TSchema extends AgentToolInputSchema = AgentToolInputSchema,\n>(\n metadata: AgentToolMetadataInput & { inputSchema: TSchema },\n): AgentToolDefinition<\n [TInput] extends [never] ? InferJsonSchema<TSchema> : TInput,\n TResult\n>;\nexport function defineAgentTool(\n metadata: AgentToolMetadataInput & { inputSchema?: AgentToolInputSchema },\n): AgentToolDefinition {\n assertName(metadata.name);\n return createAgentToolDefinition({\n ...metadata,\n inputSchema: metadata.inputSchema === undefined ? emptyInputSchema : metadata.inputSchema,\n });\n}\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.browser.js","sourceRoot":"","sources":["../src/index.browser.ts"],"names":[],"mappings":"AAAA,OAAO,cAAc,CAAC;AAEtB,cAAc,YAAY,CAAC;AAE3B,OAAO,EAAE,iBAAiB,EAA4B,MAAM,mBAAmB,CAAC","sourcesContent":["import \"./styles.css\";\n\nexport * from \"./index.js\";\n\nexport { registerAgentTool, type RegisteredAgentTool } from \"./registration.js\";\n"]}
package/dist/index.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAClD,OAAO,EAAE,qBAAqB,EAAE,MAAM,iBAAiB,CAAC;AACxD,OAAO,EAAE,qBAAqB,EAAmC,MAAM,wBAAwB,CAAC;AAChG,OAAO,EACL,iBAAiB,EACjB,kBAAkB,GACnB,MAAM,cAAc,CAAC;AACtB,OAAO,EACL,YAAY,EACZ,aAAa,EACb,aAAa,EACb,eAAe,EACf,kBAAkB,EAClB,YAAY,GACb,MAAM,YAAY,CAAC;AAqCpB,OAAO,EAAE,uBAAuB,EAAE,iBAAiB,EAA4B,MAAM,mBAAmB,CAAC","sourcesContent":["export { defineAgentTool } from \"./definition.js\";\nexport { defineAgentNavigation } from \"./navigation.js\";\nexport { AgentOperationSurface, type AgentOperationSurfaceProps } from \"./operation-surface.js\";\nexport {\n createToolRuntime,\n isToolRuntimeError,\n} from \"./runtime.js\";\nexport {\n AgentContext,\n ToolsProvider,\n AgentUIAction,\n useAgentContext,\n useAgentNavigation,\n useAgentTool,\n} from \"./react.js\";\nexport type {\n AgentNavigation,\n AgentNavigationConfig,\n AgentNavigationExecutors,\n AgentNavigationRouteConfig,\n} from \"./navigation.js\";\nexport type {\n AgentToolBinding,\n AgentToolChatConfirmationConfig,\n AgentToolPageConfirmationConfig,\n AgentUIActionChildProps,\n AgentUIActionEvent,\n AgentUIActionProps,\n UseAgentToolDefaultOptions,\n UseAgentToolPageConfirmationOptions,\n} from \"./react.js\";\nexport type {\n AgentToolConfirmationConfig,\n RuntimeAgentTool,\n ToolRuntime,\n ToolOperation,\n ToolRuntimeOptions,\n ToolRuntimeToolChangeEvent,\n} from \"./runtime.js\";\nexport type {\n AgentContextEntry,\n AgentContextValue,\n AgentToolDefinition,\n AgentToolEffect,\n AgentToolExecutionContext,\n AgentToolExecutor,\n AgentToolInputSchema,\n InferJsonSchema,\n JsonSchema,\n} from \"./types.js\";\n\nexport { createAgentToolRegistry, registerAgentTool, type RegisteredAgentTool } from \"./registration.js\";\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"file":"internal-react.js","sourceRoot":"","sources":["../src/internal-react.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EACL,aAAa,EACb,UAAU,EACV,OAAO,GAGR,MAAM,OAAO,CAAC;AAEf,OAAO,EACL,iBAAiB,EACjB,sBAAsB,GAGvB,MAAM,cAAc,CAAC;AAEtB,MAAM,0BAA0B,GAC9B,aAAa,CAA6B,IAAI,CAAC,CAAC;AAMlD,MAAM,UAAU,uBAAuB,CAAC,EACtC,QAAQ,GACqB;IAC7B,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC,iBAAiB,EAAE,EAAE,EAAE,CAAC,CAAC;IACvD,OAAO,CACL,oBAAC,wBAAwB,IAAC,OAAO,EAAE,OAAO,IACvC,QAAQ,CACgB,CAC5B,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,wBAAwB,CAAC,EACvC,QAAQ,EACR,OAAO,GAIR;IACC,MAAM,eAAe,GAAG,sBAAsB,CAAC,OAAO,CAAC,CAAC;IACxD,OAAO,CACL,oBAAC,0BAA0B,CAAC,QAAQ,IAAC,KAAK,EAAE,eAAe,IACxD,QAAQ,CAC2B,CACvC,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,sBAAsB;IACpC,MAAM,OAAO,GAAG,UAAU,CAAC,0BAA0B,CAAC,CAAC;IACvD,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,MAAM,IAAI,KAAK,CACb,8EAA8E,CAC/E,CAAC;IACJ,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,MAAM,UAAU,8BAA8B;IAG5C,OAAO,UAAU,CAAC,0BAA0B,CAAC,CAAC;AAChD,CAAC","sourcesContent":["import * as React from \"react\";\nimport {\n createContext,\n useContext,\n useMemo,\n type ReactNode,\n type ReactElement,\n} from \"react\";\n\nimport {\n createToolRuntime,\n getInternalToolRuntime,\n type ToolRuntime,\n type InternalToolRuntime,\n} from \"./runtime.js\";\n\nconst InternalToolRuntimeContext =\n createContext<InternalToolRuntime | null>(null);\n\nexport interface InternalToolRuntimeHostProps {\n children: ReactNode;\n}\n\nexport function InternalToolRuntimeHost({\n children,\n}: InternalToolRuntimeHostProps): ReactElement {\n const runtime = useMemo(() => createToolRuntime(), []);\n return (\n <InternalToolRuntimeScope runtime={runtime}>\n {children}\n </InternalToolRuntimeScope>\n );\n}\n\nexport function InternalToolRuntimeScope({\n children,\n runtime,\n}: {\n children: ReactNode;\n runtime: ToolRuntime;\n}): ReactElement {\n const internalRuntime = getInternalToolRuntime(runtime);\n return (\n <InternalToolRuntimeContext.Provider value={internalRuntime}>\n {children}\n </InternalToolRuntimeContext.Provider>\n );\n}\n\nexport function useInternalToolRuntime(): InternalToolRuntime {\n const runtime = useContext(InternalToolRuntimeContext);\n if (!runtime) {\n throw new Error(\n \"Nexface components must be rendered inside ToolsProvider or NexfaceProvider.\",\n );\n }\n return runtime;\n}\n\nexport function useOptionalInternalToolRuntime():\n | InternalToolRuntime\n | null {\n return useContext(InternalToolRuntimeContext);\n}\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"file":"internal-types.js","sourceRoot":"","sources":["../src/internal-types.ts"],"names":[],"mappings":"","sourcesContent":["import type { RuntimeAgentTool } from \"./runtime.js\";\n\n/**\n * @experimental Status of an experimental execution notification.\n * @beta\n */\nexport type AgentToolExecutionStatus = \"running\" | \"success\" | \"error\";\n\n/**\n * @experimental Payload inferred by experimental execution listeners; not a named public export.\n * @beta\n */\nexport interface AgentToolExecutionEvent {\n tool: RuntimeAgentTool<any, any>;\n cancelled?: boolean;\n progressLabel?: string;\n id: string;\n operationId?: string;\n name: string;\n status: AgentToolExecutionStatus;\n startedAt: number;\n finishedAt?: number;\n input: unknown;\n result?: unknown;\n error?: unknown;\n}\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"file":"navigation.js","sourceRoot":"","sources":["../src/navigation.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AA6BlD,MAAM,wBAAwB,GAAG,UAAU,CAAC;AA4B5C,MAAM,iBAAiB,GAAG,IAAI,OAAO,EAGlC,CAAC;AAEJ,MAAM,UAAU,qBAAqB,CAGnC,MAOC;IAED,MAAM,KAAK,GAAG,IAAI,GAAG,EAAU,CAAC;IAChC,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE;QACjE,MAAM,IAAI,GAAG,GAAG,wBAAwB,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;QACxD,MAAM,UAAU,GAAG,KAAK,CAAC,WAAW;YAClC,CAAC,CAAC,eAAe,CAAiC;gBAC9C,IAAI;gBACJ,MAAM,EAAE,UAAU;gBAClB,WAAW,EAAE,KAAK,CAAC,WAAW;gBAC9B,WAAW,EAAE,KAAK,CAAC,WAAW;aAC/B,CAAC;YACJ,CAAC,CAAC,eAAe,CAAwB;gBACrC,IAAI;gBACJ,MAAM,EAAE,UAAU;gBAClB,WAAW,EAAE,KAAK,CAAC,WAAW;aAC/B,CAAC,CAAC;QACP,IAAI,KAAK,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;YAC/B,MAAM,IAAI,KAAK,CAAC,mCAAmC,UAAU,CAAC,IAAI,GAAG,CAAC,CAAC;QACzE,CAAC;QACD,KAAK,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;QAC3B,OAAO,MAAM,CAAC,MAAM,CAAC;YACnB,GAAG;YACH,UAAU;SACX,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IACH,MAAM,UAAU,GAAG,MAAM,CAAC,MAAM,CAAC,EAAE,CAAwC,CAAC;IAC5E,iBAAiB,CAAC,GAAG,CAAC,UAAU,EAAE,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC;IAC1D,OAAO,UAAU,CAAC;AACpB,CAAC;AAED,MAAM,UAAU,yBAAyB,CACvC,UAAgC;IAEhC,MAAM,OAAO,GAAG,iBAAiB,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;IAClD,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,MAAM,IAAI,KAAK,CAAC,wDAAwD,CAAC,CAAC;IAC5E,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC","sourcesContent":["import { defineAgentTool } from \"./definition.js\";\nimport type {\n AgentToolDefinition,\n AgentToolExecutionContext,\n AgentToolInputSchema,\n InferJsonSchema,\n} from \"./types.js\";\n\nexport interface AgentNavigationResult {\n status: \"navigated\";\n}\n\ndeclare const agentNavigationBrand: unique symbol;\n\nexport interface AgentNavigationRouteConfig {\n name: string;\n description: string;\n inputSchema?: AgentToolInputSchema;\n}\n\nexport interface AgentNavigation<\n TRoutes extends Record<string, AgentNavigationRouteConfig> = Record<\n string,\n AgentNavigationRouteConfig\n >,\n> {\n readonly [agentNavigationBrand]: TRoutes;\n}\n\nconst navigationToolNamePrefix = \"nxf_nav_\";\n\nexport interface AgentNavigationConfig<\n TRoutes extends Record<string, AgentNavigationRouteConfig>,\n> {\n routes: TRoutes;\n}\n\nexport type AgentNavigationExecutors<\n TNavigation extends AgentNavigation,\n> = TNavigation extends AgentNavigation<infer TRoutes>\n ? {\n [TKey in keyof TRoutes]: (\n input: TRoutes[TKey] extends {\n readonly inputSchema: infer TSchema extends AgentToolInputSchema;\n }\n ? InferJsonSchema<TSchema>\n : Record<string, never>,\n context: AgentToolExecutionContext,\n ) => void | Promise<void>;\n }\n : never;\n\ninterface InternalAgentNavigationRoute {\n key: string;\n definition: AgentToolDefinition<any, AgentNavigationResult>;\n}\n\nconst navigationEntries = new WeakMap<\n AgentNavigation<any>,\n readonly InternalAgentNavigationRoute[]\n>();\n\nexport function defineAgentNavigation<\n const TRoutes extends Record<string, AgentNavigationRouteConfig>,\n>(\n config: AgentNavigationConfig<TRoutes> & {\n routes: {\n [TKey in keyof TRoutes]: Record<\n Exclude<keyof TRoutes[TKey], keyof AgentNavigationRouteConfig>,\n never\n >;\n };\n },\n): AgentNavigation<TRoutes> {\n const names = new Set<string>();\n const entries = Object.entries(config.routes).map(([key, route]) => {\n const name = `${navigationToolNamePrefix}${route.name}`;\n const definition = route.inputSchema\n ? defineAgentTool<unknown, AgentNavigationResult>({\n name,\n effect: \"navigate\",\n description: route.description,\n inputSchema: route.inputSchema,\n })\n : defineAgentTool<AgentNavigationResult>({\n name,\n effect: \"navigate\",\n description: route.description,\n });\n if (names.has(definition.name)) {\n throw new Error(`Duplicate navigation tool name: ${definition.name}.`);\n }\n names.add(definition.name);\n return Object.freeze({\n key,\n definition,\n });\n });\n const navigation = Object.freeze({}) as unknown as AgentNavigation<TRoutes>;\n navigationEntries.set(navigation, Object.freeze(entries));\n return navigation;\n}\n\nexport function getAgentNavigationEntries(\n navigation: AgentNavigation<any>,\n): readonly InternalAgentNavigationRoute[] {\n const entries = navigationEntries.get(navigation);\n if (!entries) {\n throw new Error(\"Navigation must be created by defineAgentNavigation().\");\n }\n return entries;\n}\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"file":"operation-lock.js","sourceRoot":"","sources":["../src/operation-lock.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAErE,MAAM,cAAc,GAAG,IAAI,OAAO,EAAe,CAAC;AAElD,MAAM,UAAU,wBAAwB,CAAC,OAAoB;IAC3D,OAAO,cAAc,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;AACrC,CAAC;AAED,8EAA8E;AAC9E,MAAM,UAAU,oBAAoB,CAAC,OAAoB,EAAE,aAA0B;IACnF,MAAM,YAAY,GAAG,OAAO,CAAC,YAAY,CAAC,WAAW,CAAC,CAAC;IACvD,MAAM,KAAK,GAAG,CAAC,KAAY,EAAE,EAAE;QAC7B,IAAI,CAAC,KAAK,CAAC,IAAI,KAAK,QAAQ,IAAI,KAAK,CAAC,IAAI,KAAK,OAAO,CAAC,IAAI,iBAAiB,EAAE;YAAE,OAAO;QACvF,IAAI,CAAC,KAAK,CAAC,SAAS;YAAE,OAAO;QAC7B,IAAI,KAAK,CAAC,IAAI,KAAK,OAAO,IAAI,KAAK,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;YACvD,IAAI,YAAY,EAAE;gBAAE,OAAO;YAC3B,KAAK,CAAC,wBAAwB,EAAE,CAAC;YACjC,IAAI,KAAK,CAAC,MAAM,YAAY,WAAW;gBAAE,KAAK,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;YAC7D,aAAa,EAAE,EAAE,CAAC;YAClB,OAAO;QACT,CAAC;QACD,IAAI,KAAK,CAAC,IAAI,KAAK,SAAS,IAAK,KAAuB,CAAC,GAAG,KAAK,KAAK,EAAE,CAAC;YACvE,KAAK,CAAC,cAAc,EAAE,CAAC;YACvB,KAAK,CAAC,wBAAwB,EAAE,CAAC;YACjC,aAAa,EAAE,EAAE,CAAC;YAClB,OAAO;QACT,CAAC;QACD,KAAK,CAAC,cAAc,EAAE,CAAC;QACvB,KAAK,CAAC,wBAAwB,EAAE,CAAC;IACnC,CAAC,CAAC;IACF,6EAA6E;IAC7E,MAAM,MAAM,GAAG,CAAC,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,YAAY,EAAE,cAAc,EAAE,cAAc,EAAE,aAAa,EAAE,WAAW,EAAE,aAAa,EAAE,aAAa,EAAE,YAAY,EAAE,WAAW,EAAE,SAAS,EAAE,WAAW,EAAE,WAAW,EAAE,UAAU,EAAE,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,aAAa,EAAE,SAAS,EAAE,OAAO,EAAE,aAAa,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,WAAW,EAAE,YAAY,EAAE,WAAW,EAAE,UAAU,EAAE,aAAa,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC;IAChb,cAAc,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IAC5B,OAAO,CAAC,YAAY,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;IAC1C,KAAK,MAAM,IAAI,IAAI,MAAM;QAAE,OAAO,CAAC,gBAAgB,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC;IACpG,OAAO,GAAG,EAAE;QACV,cAAc,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QAC/B,KAAK,MAAM,IAAI,IAAI,MAAM;YAAE,OAAO,CAAC,mBAAmB,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;QAC1E,IAAI,YAAY,KAAK,IAAI;YAAE,OAAO,CAAC,eAAe,CAAC,WAAW,CAAC,CAAC;;YAC3D,OAAO,CAAC,YAAY,CAAC,WAAW,EAAE,YAAY,CAAC,CAAC;IACvD,CAAC,CAAC;AACJ,CAAC","sourcesContent":["import { isAgentActivation, isAgentFocus } from \"./browser/focus.js\";\n\nconst lockedSurfaces = new WeakSet<HTMLElement>();\n\nexport function isOperationSurfaceLocked(surface: HTMLElement): boolean {\n return lockedSurfaces.has(surface);\n}\n\n/** Block user input inside the surface without hiding DOM from page tools. */\nexport function lockOperationSurface(surface: HTMLElement, redirectFocus?: () => void): () => void {\n const previousBusy = surface.getAttribute(\"aria-busy\");\n const block = (event: Event) => {\n if ((event.type === \"submit\" || event.type === \"reset\") && isAgentActivation()) return;\n if (!event.isTrusted) return;\n if (event.type === \"focus\" || event.type === \"focusin\") {\n if (isAgentFocus()) return;\n event.stopImmediatePropagation();\n if (event.target instanceof HTMLElement) event.target.blur();\n redirectFocus?.();\n return;\n }\n if (event.type === \"keydown\" && (event as KeyboardEvent).key === \"Tab\") {\n event.preventDefault();\n event.stopImmediatePropagation();\n redirectFocus?.();\n return;\n }\n event.preventDefault();\n event.stopImmediatePropagation();\n };\n // Wheel and touch defaults are blocked here: React delegates them passively.\n const events = [\"focus\", \"focusin\", \"mouseenter\", \"mouseleave\", \"pointerenter\", \"pointerleave\", \"pointerdown\", \"pointerup\", \"pointermove\", \"pointerover\", \"pointerout\", \"mousedown\", \"mouseup\", \"mousemove\", \"mouseover\", \"mouseout\", \"click\", \"dblclick\", \"auxclick\", \"contextmenu\", \"keydown\", \"keyup\", \"beforeinput\", \"paste\", \"cut\", \"drop\", \"dragstart\", \"touchstart\", \"touchmove\", \"touchend\", \"touchcancel\", \"wheel\", \"submit\", \"reset\"];\n lockedSurfaces.add(surface);\n surface.setAttribute(\"aria-busy\", \"true\");\n for (const name of events) surface.addEventListener(name, block, { capture: true, passive: false });\n return () => {\n lockedSurfaces.delete(surface);\n for (const name of events) surface.removeEventListener(name, block, true);\n if (previousBusy === null) surface.removeAttribute(\"aria-busy\");\n else surface.setAttribute(\"aria-busy\", previousBusy);\n };\n}\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"file":"operation-runtime.js","sourceRoot":"","sources":["../src/operation-runtime.ts"],"names":[],"mappings":"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","sourcesContent":["import type { AgentToolExecutionEvent } from \"./internal-types.js\";\nimport { AgentToolError } from \"./shared/errors.js\";\nimport type { ToolOperation } from \"./runtime.js\";\n\nimport type { TaskProgress } from \"./shared/runtime-controller.js\";\nexport type { TaskProgress } from \"./shared/runtime-controller.js\";\n\nexport interface OperationSnapshot {\n readonly taskProgress?: TaskProgress;\n readonly id: string;\n readonly source: \"host\" | \"webmcp\";\n readonly status: \"running\" | \"waiting\" | \"cancelling\" | \"ending\";\n readonly hasExecuted: boolean;\n readonly outcome?: \"completed\" | \"failed\" | \"cancelled\";\n readonly reason?: \"bridge_disposed\";\n readonly canCancel: boolean;\n}\n\nexport interface RuntimeActivitySnapshot {\n readonly operation: OperationSnapshot | null;\n readonly executions: readonly AgentToolExecutionEvent[];\n}\n\ntype Operation = {\n snapshot: OperationSnapshot;\n handle: ToolOperation;\n pending: number;\n onCancel?: () => void;\n removeAbort(): void;\n resolveEnd(): void;\n};\n\nexport class OperationTracker {\n #operation: Operation | undefined;\n #unscoped = 0;\n #executions = new Map<string, AgentToolExecutionEvent>();\n #listeners = new Set<() => void>();\n #snapshot: RuntimeActivitySnapshot = Object.freeze({ operation: null, executions: Object.freeze([]) });\n\n getSnapshot = (): RuntimeActivitySnapshot => this.#snapshot;\n subscribe = (listener: () => void): (() => void) => {\n this.#listeners.add(listener);\n return () => { this.#listeners.delete(listener); };\n };\n\n begin(options: {\n signal?: AbortSignal;\n onCancel?: () => void;\n source?: \"host\" | \"webmcp\";\n replaceWaiting?: ToolOperation;\n taskProgress?: TaskProgress;\n } = {}): ToolOperation {\n options.signal?.throwIfAborted();\n const previous = this.#operation;\n const replacing = previous && previous.handle === options.replaceWaiting\n && previous.snapshot.status === \"waiting\" && previous.pending === 0;\n if (this.#unscoped || (previous && !replacing)) {\n throw new AgentToolError(\"OPERATION_BUSY\", \"The Runtime already has an operation or outstanding tool calls.\");\n }\n if (replacing) {\n previous.removeAbort();\n previous.resolveEnd();\n }\n let resolveEnd!: () => void;\n const endPromise = new Promise<void>((resolve) => { resolveEnd = resolve; });\n const id = globalThis.crypto?.randomUUID?.() ?? `${Date.now()}-${Math.random()}`;\n const operation: Operation = {\n snapshot: Object.freeze({ id, source: options.source ?? \"host\", status: \"running\", hasExecuted: false, canCancel: Boolean(options.onCancel), ...(options.taskProgress ? { taskProgress: Object.freeze(options.taskProgress) } : {}) }),\n handle: undefined!, pending: 0, resolveEnd,\n ...(options.onCancel ? { onCancel: options.onCancel } : {}),\n removeAbort: () => options.signal?.removeEventListener(\"abort\", onAbort),\n };\n const onAbort = () => {\n if (this.#operation !== operation || operation.snapshot.status === \"ending\") return;\n this.#update(operation, { status: \"cancelling\" });\n };\n const handle: ToolOperation = Object.freeze({\n id,\n end: (endOptions?: { outcome?: \"completed\" | \"failed\" | \"cancelled\" }) => {\n if (this.#operation !== operation || operation.snapshot.status === \"ending\") return endPromise;\n operation.removeAbort();\n operation.snapshot = Object.freeze({ ...operation.snapshot, status: \"ending\", outcome: endOptions?.outcome ?? \"completed\" });\n this.#publish();\n if (this.#finish(operation)) this.#publish();\n return endPromise;\n },\n });\n operation.handle = handle;\n this.#operation = operation;\n options.signal?.addEventListener(\"abort\", onAbort, { once: true });\n this.#publish();\n return handle;\n }\n\n setWaitingForUser(handle: ToolOperation, waiting: boolean): void {\n const operation = this.#operation;\n if (operation?.handle !== handle || ![\"running\", \"waiting\"].includes(operation.snapshot.status)) return;\n const status = waiting ? \"waiting\" : \"running\";\n if (status !== operation.snapshot.status) this.#update(operation, { status });\n }\n\n setTaskProgress(handle: ToolOperation, progress: TaskProgress): void {\n const operation = this.#operation;\n if (operation?.handle !== handle || operation.snapshot.status === \"ending\") return;\n this.#update(operation, { taskProgress: Object.freeze(progress) });\n }\n\n disposeBridge(handle: ToolOperation): Promise<void> {\n const operation = this.#operation;\n if (operation?.handle === handle) operation.snapshot = Object.freeze({ ...operation.snapshot, reason: \"bridge_disposed\" });\n return handle.end();\n }\n\n requestCancel(id: string): void {\n const operation = this.#operation;\n if (!operation || operation.snapshot.id !== id || !operation.onCancel\n || operation.snapshot.status === \"ending\" || operation.snapshot.status === \"cancelling\") return;\n const previous = operation.snapshot.status;\n this.#update(operation, { status: \"cancelling\" });\n try {\n operation.onCancel();\n } catch (error) {\n if (this.#operation === operation && this.#snapshot.operation?.status === \"cancelling\") {\n this.#update(operation, { status: previous });\n }\n throw error;\n }\n }\n\n // Admission is captured before execution and released exactly once, including queued aborts.\n admit(): { operationId?: string; release(): void } {\n const operation = this.#operation;\n if (operation?.snapshot.status === \"ending\") {\n throw new AgentToolError(\"OPERATION_BUSY\", \"The Runtime operation is ending; wait for end() before submitting more calls.\");\n }\n if (operation) operation.pending += 1;\n else this.#unscoped += 1;\n let released = false;\n return {\n ...(operation ? { operationId: operation.snapshot.id } : {}),\n release: () => {\n if (released) return;\n released = true;\n if (operation) {\n operation.pending -= 1;\n if (this.#finish(operation)) this.#publish();\n } else this.#unscoped -= 1;\n },\n };\n }\n\n observe(event: AgentToolExecutionEvent): void {\n if (event.status === \"running\") {\n this.#executions.set(event.id, event);\n const operation = this.#operation;\n if (operation && event.operationId === operation.snapshot.id && !operation.snapshot.hasExecuted) {\n operation.snapshot = Object.freeze({ ...operation.snapshot, hasExecuted: true });\n }\n } else this.#executions.delete(event.id);\n this.#publish();\n }\n\n #finish(operation: Operation): boolean {\n if (operation.pending || operation.snapshot.status !== \"ending\" || this.#operation !== operation) return false;\n this.#operation = undefined;\n operation.resolveEnd();\n return true;\n }\n\n #update(operation: Operation, patch: Partial<OperationSnapshot>): void {\n operation.snapshot = Object.freeze({ ...operation.snapshot, ...patch });\n this.#publish();\n }\n\n #publish(): void {\n this.#snapshot = Object.freeze({\n operation: this.#operation?.snapshot ?? null,\n executions: Object.freeze([...this.#executions.values()]),\n });\n for (const listener of this.#listeners) listener();\n }\n}\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"file":"operation-surface.js","sourceRoot":"","sources":["../src/operation-surface.tsx"],"names":[],"mappings":"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","sourcesContent":["import * as React from \"react\";\nimport { flushSync } from \"react-dom\";\nimport { useCallback, useLayoutEffect, useRef, useState, type ReactElement, type ReactNode, type RefObject, type SyntheticEvent } from \"react\";\nimport { useSyncExternalStore } from \"use-sync-external-store/shim\";\nimport { PageCommandError } from \"./browser/locator.js\";\nimport type { AgentToolExecutionEvent } from \"./internal-types.js\";\nimport { getInternalToolRuntime, type ToolRuntime } from \"./runtime.js\";\nimport { isOperationSurfaceLocked } from \"./operation-lock.js\";\nimport { isAgentActivation } from \"./browser/focus.js\";\nimport { OperationOverlayView } from \"./operation-view.js\";\nimport type { AgentOperation, AgentOperationProgressEntry, OperationFeedback } from \"./operation-types.js\";\nimport type { OperationSnapshot } from \"./operation-runtime.js\";\n\nconst BROWSER_TOOL_NAMES = new Set([\"nxf_getSnapshot\", \"nxf_executeAction\", \"nxf_applyAction\"]);\n\nconst belongsToOperation = (event: AgentToolExecutionEvent, operation: OperationSnapshot | null) =>\n !operation || event.operationId === operation.id;\nconst canPresentInOperation = (event: AgentToolExecutionEvent, operation: OperationSnapshot | null) =>\n belongsToOperation(event, operation) && (!operation || operation.status === \"running\" || operation.status === \"ending\");\n\nexport interface AgentOperationSurfaceProps {\n toolRuntime: ToolRuntime;\n children: ReactNode;\n}\n\nconst surfaces = new WeakSet<ToolRuntime>();\n\nexport function AgentOperationSurface(props: AgentOperationSurfaceProps): ReactElement {\n const element = useRef<HTMLDivElement>(null);\n const initial = useRef(props.toolRuntime);\n if (initial.current !== props.toolRuntime) {\n throw new Error(\"AgentOperationSurface requires a stable Runtime. Remount it to change Runtime.\");\n }\n useLayoutEffect(() => {\n if (surfaces.has(props.toolRuntime)) throw new Error(\"Only one AgentOperationSurface is supported per Runtime.\");\n surfaces.add(props.toolRuntime);\n return () => { surfaces.delete(props.toolRuntime); };\n }, [props.toolRuntime]);\n const blockUserInput = useCallback((event: SyntheticEvent) => {\n if ((event.type === \"submit\" || event.type === \"reset\") && isAgentActivation()) return;\n if (!element.current || !isOperationSurfaceLocked(element.current) || !event.nativeEvent.isTrusted) return;\n event.preventDefault();\n event.stopPropagation();\n }, []);\n const blockPassiveUserInput = useCallback((event: SyntheticEvent) => {\n if (!element.current || !isOperationSurfaceLocked(element.current) || !event.nativeEvent.isTrusted) return;\n // Stop React's capture dispatch, but let the native event reach our non-passive\n // surface listener. React's passive root listener cannot prevent scrolling.\n event.isPropagationStopped = () => true;\n }, []);\n return <>\n <div ref={element} className=\"nexface-operation-surface\"\n onClickCapture={blockUserInput} onDoubleClickCapture={blockUserInput} onAuxClickCapture={blockUserInput}\n onPointerDownCapture={blockUserInput} onPointerUpCapture={blockUserInput}\n onPointerMoveCapture={blockUserInput} onPointerOverCapture={blockUserInput} onPointerOutCapture={blockUserInput}\n onMouseDownCapture={blockUserInput} onMouseUpCapture={blockUserInput} onContextMenuCapture={blockUserInput}\n onMouseMoveCapture={blockUserInput} onMouseOverCapture={blockUserInput} onMouseOutCapture={blockUserInput}\n onWheelCapture={blockPassiveUserInput} onTouchStartCapture={blockPassiveUserInput} onTouchMoveCapture={blockPassiveUserInput}\n onTouchEndCapture={blockUserInput} onTouchCancelCapture={blockUserInput}\n onKeyDownCapture={blockUserInput} onKeyUpCapture={blockUserInput} onKeyPressCapture={blockUserInput}\n onBeforeInputCapture={blockUserInput} onPasteCapture={blockUserInput} onCutCapture={blockUserInput}\n onDropCapture={blockUserInput} onDragStartCapture={blockUserInput}\n onSubmitCapture={blockUserInput} onResetCapture={blockUserInput}\n >{props.children}</div>\n <OperationSurfaceContent {...props} element={element} />\n </>;\n}\n\nfunction OperationSurfaceContent({ toolRuntime, element }: AgentOperationSurfaceProps & { element: RefObject<HTMLDivElement | null> }) {\n const runtime = getInternalToolRuntime(toolRuntime);\n const activity = useSyncExternalStore(runtime.subscribeActivity, runtime.getActivitySnapshot, runtime.getActivitySnapshot);\n const cycle = activity.operation;\n const [outcome, setOutcome] = useState<{ id: string; status: AgentOperation[\"status\"] }>();\n const [visual, setVisual] = useState<{ event: AgentToolExecutionEvent; feedback: OperationFeedback }>();\n const [history, setHistory] = useState<{ scope: string; entries: AgentOperationProgressEntry[] }>({ scope: \"\", entries: [] });\n const label = (event: AgentToolExecutionEvent) => event.progressLabel || (BROWSER_TOOL_NAMES.has(event.name) ? \"正在操作\" : \"正在处理你的请求\");\n useLayoutEffect(() => runtime.subscribeActivity(() => {\n const operation = runtime.getActivitySnapshot().operation;\n if (operation?.status === \"ending\" && operation.outcome) setOutcome({ id: operation.id, status: operation.outcome });\n }), [runtime]);\n useLayoutEffect(() => runtime.setPageActionFeedback((event, feedback, signal) => {\n const operation = runtime.getActivitySnapshot().operation;\n if (signal?.aborted || !canPresentInOperation(event, operation)) throw new PageCommandError({ code: \"EXECUTION_CANCELLED\", message: \"Page action presentation was interrupted.\" });\n const target = feedback.target;\n if (!feedback.effect || (feedback.effect === \"action\" && (!target?.isConnected || !element.current?.contains(target)))) {\n setVisual(undefined);\n return;\n }\n const next: OperationFeedback = {\n id: crypto.randomUUID(), effect: feedback.effect, label: label(event),\n centered: feedback.effect === \"read\", persistentCursor: true, requiresTarget: feedback.effect === \"action\",\n ...(target ? { target } : {}),\n };\n if (feedback.effect !== \"action\") { setVisual({ event, feedback: next }); return; }\n return new Promise<void>((resolve, reject) => {\n let finished = false;\n next.presentation = {\n ...(signal ? { signal } : {}),\n finish: (error) => {\n if (finished) return;\n finished = true;\n if (error) reject(error); else resolve();\n },\n };\n flushSync(() => setVisual({ event, feedback: next }));\n });\n }), [runtime, element]);\n useLayoutEffect(() => {\n const onExecution = (event: AgentToolExecutionEvent) => {\n const scope = event.operationId ?? event.id;\n const operation = runtime.getActivitySnapshot().operation;\n const canDisplay = !event.operationId || (operation !== null && canPresentInOperation(event, operation));\n const page = BROWSER_TOOL_NAMES.has(event.name);\n if (canDisplay && event.status === \"running\") {\n if (page) setVisual(event.name === \"nxf_getSnapshot\" ? { event, feedback: {\n id: event.id, effect: \"read\", label: label(event), centered: true,\n } } : undefined);\n else {\n const target = event.tool.definition.effect === \"navigate\" ? element.current : runtime.resolveTarget(event.tool, event.input);\n if (target?.isConnected && element.current?.contains(target)) {\n const rect = target.getBoundingClientRect();\n setVisual({ event, feedback: { id: event.id, effect: event.tool.definition.effect ?? \"action\", label: label(event),\n resolveTarget: () => event.tool.definition.effect === \"navigate\" ? element.current ?? undefined : runtime.resolveTarget(event.tool, event.input),\n position: { left: rect.left + rect.width / 2, top: rect.top + rect.height / 2 } } });\n }\n }\n } else if (canDisplay) setVisual((current) => current?.event.id === event.id && current.event.operationId === event.operationId\n ? page ? undefined : { ...current, event } : current);\n if (page && !operation && event.status === \"error\") setOutcome({ id: scope, status: event.cancelled ? \"cancelled\" : \"failed\" });\n setHistory((current) => {\n if (!belongsToOperation(event, operation) || (event.status !== \"running\" && current.scope !== scope)) return current;\n const entries = current.scope === scope ? current.entries : [];\n const entry = { toolCallId: event.id,\n progressLabel: `${event.progressLabel || \"正在处理你的请求\"} · ${event.cancelled ? \"已取消\" : event.status === \"running\" ? \"执行中\" : event.status === \"success\" ? \"已完成\" : \"失败\"}` };\n return { scope, entries: entries.some((item) => item.toolCallId === event.id)\n ? entries.map((item) => item.toolCallId === event.id ? entry : item) : [...entries, entry] };\n });\n };\n const unsubscribe = toolRuntime.on(\"toolexecution\", onExecution);\n for (const event of runtime.getActivitySnapshot().executions) onExecution(event);\n return unsubscribe;\n }, [runtime, toolRuntime, element]);\n const activated = Boolean(cycle && (cycle.source === \"webmcp\" || cycle.hasExecuted));\n const executing = activity.executions.length > 0;\n const waiting = cycle?.status === \"waiting\" && !executing;\n const running = executing || (activated && cycle?.status !== \"waiting\");\n const stopping = cycle?.status === \"cancelling\";\n useLayoutEffect(() => { if (!running || waiting) setVisual(undefined); }, [running, waiting]);\n const serverExecuting = cycle?.taskProgress?.phase === \"tool\";\n const visualExecuting = Boolean(visual && activity.executions.some((event) => event.id === visual.event.id));\n const currentVisual = !stopping && !waiting && visual\n && (!serverExecuting || (BROWSER_TOOL_NAMES.has(visual.event.name) && visualExecuting))\n && canPresentInOperation(visual.event, cycle) && (cycle || visualExecuting) ? visual : undefined;\n const browserExecution = activity.executions.find((event) => BROWSER_TOOL_NAMES.has(event.name));\n const progressLabel = currentVisual?.feedback.label ?? (waiting ? \"等待你完成操作\" : stopping ? \"正在终止\"\n : browserExecution ? browserExecution.progressLabel || \"正在浏览网页\"\n : cycle?.taskProgress?.phase === \"tool\" ? cycle.taskProgress.progressLabel || \"正在执行工具\"\n : cycle?.taskProgress ? \"正在处理\" : \"正在处理你的请求\");\n const operation: AgentOperation = { progressLabel, status: currentVisual\n ? currentVisual.event.status === \"running\" ? \"running\" : currentVisual.event.status === \"success\" ? \"completed\" : \"failed\"\n : running || waiting ? \"running\" : outcome?.id === history.scope ? outcome.status : \"completed\" };\n const feedback = currentVisual?.feedback ?? (serverExecuting && running && !waiting && !stopping\n ? { id: cycle.taskProgress.toolCallId, effect: \"read\" as const, label: progressLabel, centered: true } : undefined);\n const resolveSurface = useCallback(() => element.current ?? undefined, [element]);\n const entries = !cycle || history.scope === cycle.id ? history.entries : [];\n return activated || executing || entries.length ? <OperationOverlayView key={cycle?.id ?? history.scope}\n operation={operation} progressHistory={entries} running={running} humanHasControl={waiting} cancelling={stopping}\n {...(feedback ? { feedback } : {})}\n {...(cycle?.canCancel ? { onCancel: () => runtime.requestOperationCancel(cycle.id) } : {})}\n resolveSurface={resolveSurface} /> : null;\n}\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"file":"operation-types.js","sourceRoot":"","sources":["../src/operation-types.ts"],"names":[],"mappings":"","sourcesContent":["import type { AgentToolEffect } from \"./types.js\";\n\nexport interface AgentOperation {\n progressLabel: string;\n status: \"running\" | \"completed\" | \"failed\" | \"cancelled\";\n}\n\nexport interface AgentOperationProgressEntry {\n progressLabel: string;\n toolCallId: string;\n}\n\nexport interface OperationFeedback {\n id: string;\n effect: AgentToolEffect | \"processing\";\n label: string;\n target?: Element;\n resolveTarget?(): Element | undefined;\n position?: { left: number; top: number };\n centered?: boolean;\n persistentCursor?: boolean;\n requiresTarget?: boolean;\n presentation?: {\n signal?: AbortSignal;\n finish(error?: Error): void;\n };\n}\n"]}
@@ -1 +0,0 @@
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/react.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"react.js","sourceRoot":"","sources":["../src/react.tsx"],"names":[],"mappings":"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","sourcesContent":["import * as React from \"react\";\nimport {\n Children,\n Fragment,\n cloneElement,\n useCallback,\n useEffect,\n useLayoutEffect,\n useMemo,\n useRef,\n useState,\n type MouseEvent,\n type JSXElementConstructor,\n type Ref,\n type ReactElement,\n type ReactNode,\n type RefCallback,\n} from \"react\";\n\nimport { defineAgentTool } from \"./definition.js\";\nimport {\n getAgentNavigationEntries,\n type AgentNavigation,\n type AgentNavigationExecutors,\n type AgentNavigationResult,\n} from \"./navigation.js\";\nimport { AgentToolError, getInternalToolRuntime } from \"./runtime.js\";\nimport {\n InternalToolRuntimeScope,\n useInternalToolRuntime,\n} from \"./internal-react.js\";\nimport type { ToolRuntime } from \"./runtime.js\";\nimport type {\n AgentContextEntry,\n AgentContextRegistration,\n AgentToolDefinition,\n AgentToolExecutor,\n} from \"./types.js\";\nimport type { AgentToolConfirmationConfig } from \"./runtime.js\";\nimport { connectToolRuntimeToWebMcp } from \"./webmcp.js\";\n\n/**\n * @experimental Human-in-the-loop Chat confirmation configuration.\n * @beta\n */\nexport interface AgentToolChatConfirmationConfig {\n mode: \"chat\";\n title?: string;\n description?: string;\n confirmLabel?: string;\n rejectLabel?: string;\n}\n\n/**\n * @experimental Human-in-the-loop Page confirmation configuration.\n * @beta\n */\nexport interface AgentToolPageConfirmationConfig {\n mode: \"page\";\n title?: string;\n description?: string;\n}\n\nexport interface UseAgentToolDefaultOptions {\n /**\n * @experimental Enables human-in-the-loop Chat confirmation.\n * @beta\n */\n requiresConfirmation?: AgentToolChatConfirmationConfig;\n}\n\n/**\n * @experimental Enables human-in-the-loop Page confirmation.\n * @beta\n */\nexport interface UseAgentToolPageConfirmationOptions {\n requiresConfirmation: AgentToolPageConfirmationConfig;\n}\n\nexport interface AgentToolBinding<\n TInput = unknown,\n TElement extends HTMLElement = HTMLElement,\n> {\n readonly toolName: string;\n readonly ref: RefCallback<TElement>;\n refWhen(match: (input: TInput) => boolean): RefCallback<TElement>;\n}\n\ntype BindingInternals = {\n resolveTarget(input: unknown): HTMLElement | undefined;\n getConditionalTargetRegistrations(): readonly {\n element: HTMLElement;\n match(input: unknown): boolean;\n }[];\n};\n\nconst bindingInternals = new WeakMap<object, BindingInternals>();\n\nexport function getAgentToolBindingInternals(\n binding: AgentToolBinding,\n): BindingInternals {\n const internals = bindingInternals.get(binding);\n if (!internals) throw new Error(\"Invalid Agent Tool Binding.\");\n return internals;\n}\n\nfunction createAgentToolBinding<TInput, TElement extends HTMLElement>(\n toolName: string,\n): AgentToolBinding<TInput, TElement> {\n let fixedElement: TElement | null = null;\n const conditionalElements = new Map<\n RefCallback<TElement>,\n { element: TElement; match: (input: TInput) => boolean }\n >();\n const ref: RefCallback<TElement> = (element) => {\n if (element && fixedElement && fixedElement !== element) {\n throw new Error(\"An Agent Tool Binding ref can only attach to one element.\");\n }\n fixedElement = element;\n };\n const binding: AgentToolBinding<TInput, TElement> = {\n toolName,\n ref,\n refWhen(match) {\n let callback: RefCallback<TElement>;\n callback = (element) => {\n if (element) {\n conditionalElements.set(callback, { element, match });\n } else {\n conditionalElements.delete(callback);\n }\n };\n return callback;\n },\n };\n bindingInternals.set(binding, {\n resolveTarget(input) {\n for (const entry of conditionalElements.values()) {\n if (entry.element.isConnected && entry.match(input as TInput)) return entry.element;\n }\n return fixedElement?.isConnected ? fixedElement : undefined;\n },\n getConditionalTargetRegistrations: () =>\n Array.from(conditionalElements.values(), ({ element, match }) => ({\n element,\n match: (input: unknown) => match(input as TInput),\n })),\n });\n return binding;\n}\n\nfunction useAgentBinding<\n TInput,\n TResult,\n TElement extends HTMLElement,\n>(\n definition: AgentToolDefinition<TInput, TResult>,\n execute: AgentToolExecutor<TInput, TResult>,\n options: UseAgentToolDefaultOptions | UseAgentToolPageConfirmationOptions,\n): AgentToolBinding<TInput, TElement> {\n const runtime = useInternalToolRuntime();\n const confirmation = options.requiresConfirmation;\n if (\n confirmation !== undefined\n && (\n !confirmation\n || typeof confirmation !== \"object\"\n || (confirmation.mode !== \"chat\" && confirmation.mode !== \"page\")\n )\n ) {\n throw new Error(\n \"requiresConfirmation must explicitly use chat or page mode.\",\n );\n }\n const executeRef = useRef(execute);\n executeRef.current = execute;\n const confirmationRef = useRef<AgentToolConfirmationConfig | undefined>(\n confirmation,\n );\n confirmationRef.current = confirmation;\n const mode = confirmation?.mode;\n const binding = useMemo(\n () => createAgentToolBinding<TInput, TElement>(\n definition.name,\n ),\n [runtime, definition, mode],\n );\n useLayoutEffect(() => {\n const controller = new AbortController();\n runtime.register(\n definition,\n (input, context) => executeRef.current(input, context),\n {\n signal: controller.signal,\n getConfirmation: () => confirmationRef.current,\n resolveTarget: (input) => getAgentToolBindingInternals(binding).resolveTarget(input),\n },\n );\n return () => controller.abort();\n }, [runtime, definition, mode]);\n return binding;\n}\n\n/**\n * @experimental The Page confirmation overload is experimental.\n * @beta\n */\nexport function useAgentTool<\n TInput,\n TResult,\n TElement extends HTMLElement = HTMLElement,\n>(\n definition: AgentToolDefinition<TInput, TResult>,\n execute: AgentToolExecutor<TInput, TResult>,\n options: UseAgentToolPageConfirmationOptions,\n): AgentToolBinding<TInput, TElement>;\nexport function useAgentTool<\n TInput,\n TResult,\n TElement extends HTMLElement = HTMLElement,\n>(\n definition: AgentToolDefinition<TInput, TResult>,\n execute: AgentToolExecutor<TInput, TResult>,\n options?: UseAgentToolDefaultOptions,\n): AgentToolBinding<TInput, TElement>;\nexport function useAgentTool<\n TInput,\n TResult,\n TElement extends HTMLElement = HTMLElement,\n>(\n definition: AgentToolDefinition<TInput, TResult>,\n execute: AgentToolExecutor<TInput, TResult>,\n options: UseAgentToolDefaultOptions | UseAgentToolPageConfirmationOptions = {},\n): AgentToolBinding<TInput, TElement> {\n return useAgentBinding(definition, execute, options);\n}\n\nfunction getAgentNavigationExecutor(\n executors: unknown,\n key: string,\n): AgentToolExecutor<any, void> {\n if (\n !executors\n || typeof executors !== \"object\"\n || !Object.hasOwn(executors, key)\n ) {\n throw new Error(`Missing navigation executor: ${key}.`);\n }\n const executor = (executors as Record<string, unknown>)[key];\n if (typeof executor !== \"function\") {\n throw new Error(`Missing navigation executor: ${key}.`);\n }\n return executor as AgentToolExecutor<any, void>;\n}\n\nexport function useAgentNavigation<\n TNavigation extends AgentNavigation,\n const TExecutors extends AgentNavigationExecutors<TNavigation>,\n>(\n navigation: TNavigation,\n executors: TExecutors & Record<\n Exclude<\n keyof TExecutors,\n keyof AgentNavigationExecutors<TNavigation>\n >,\n never\n >,\n): void {\n const runtime = useInternalToolRuntime();\n const entries = getAgentNavigationEntries(navigation);\n for (const entry of entries) {\n getAgentNavigationExecutor(executors, entry.key);\n }\n const routeKeys = new Set(entries.map((entry) => entry.key));\n for (const key of Object.keys(executors)) {\n if (!routeKeys.has(key)) {\n throw new Error(`Unknown navigation executor: ${key}.`);\n }\n }\n const executorsRef = useRef(executors);\n executorsRef.current = executors;\n\n useLayoutEffect(() => {\n const controller = new AbortController();\n try {\n for (const entry of entries) {\n runtime.register(\n entry.definition,\n async (input, context): Promise<AgentNavigationResult> => {\n const executor = getAgentNavigationExecutor(\n executorsRef.current,\n entry.key,\n );\n await executor(input, context);\n return { status: \"navigated\" };\n },\n { signal: controller.signal },\n );\n }\n } catch (error) {\n controller.abort();\n throw error;\n }\n return () => controller.abort();\n }, [runtime, navigation]);\n}\n\nexport function ToolsProvider({\n children,\n toolRuntime,\n webMcp = true,\n}: {\n children: ReactNode;\n toolRuntime: ToolRuntime;\n webMcp?: boolean;\n}): ReactElement {\n const runtime = getInternalToolRuntime(toolRuntime);\n return (\n <InternalToolRuntimeScope runtime={toolRuntime}>\n <WebMcpRuntimeBridge enabled={webMcp} runtime={runtime} />\n {children}\n </InternalToolRuntimeScope>\n );\n}\n\nfunction WebMcpRuntimeBridge({\n enabled,\n runtime,\n}: {\n enabled: boolean;\n runtime: ReturnType<typeof getInternalToolRuntime>;\n}) {\n useEffect(() => {\n if (!enabled) return undefined;\n return connectToolRuntimeToWebMcp(runtime);\n }, [enabled, runtime]);\n return null;\n}\n\nexport function useAgentContext(context: AgentContextEntry): void {\n const runtime = useInternalToolRuntime();\n const registrationRef = useRef<AgentContextRegistration | undefined>(undefined);\n useLayoutEffect(() => {\n const controller = new AbortController();\n const registration = runtime.registerContext(context, { signal: controller.signal });\n registrationRef.current = registration;\n return () => {\n if (registrationRef.current === registration) registrationRef.current = undefined;\n controller.abort();\n };\n }, [runtime, context.name]);\n useLayoutEffect(() => {\n registrationRef.current?.update(context);\n }, [runtime, context.name, context.description, context.value]);\n}\n\nexport function AgentContext(context: AgentContextEntry): null {\n useAgentContext(context);\n return null;\n}\n\nfunction waitForActionResult<TResult>(\n result: TResult | Promise<TResult>,\n signal: AbortSignal,\n): Promise<TResult> {\n if (signal.aborted) return Promise.reject(signal.reason);\n return new Promise((resolve, reject) => {\n const onAbort = () => {\n signal.removeEventListener(\"abort\", onAbort);\n reject(signal.reason);\n };\n signal.addEventListener(\"abort\", onAbort, { once: true });\n Promise.resolve(result).then(\n (value) => {\n signal.removeEventListener(\"abort\", onAbort);\n resolve(value);\n },\n (error) => {\n signal.removeEventListener(\"abort\", onAbort);\n reject(error);\n },\n );\n });\n}\n\nexport type AgentUIActionEvent = \"click\";\n\ntype Awaitable<TResult> = TResult | Promise<TResult>;\n\nexport interface AgentUIActionChildProps<TResult = void> {\n onClick: (event: MouseEvent<HTMLElement>) => Awaitable<TResult>;\n disabled?: boolean;\n}\n\nexport interface AgentUIActionProps<TResult = void> {\n name: string;\n description: string;\n event?: AgentUIActionEvent;\n children: ReactElement<AgentUIActionChildProps<TResult>>;\n}\n\ntype PendingInvocation<TResult> = {\n resolve: (value: TResult | PromiseLike<TResult>) => void;\n reject: (reason?: unknown) => void;\n};\n\nfunction setRefValue<T>(ref: Ref<T> | undefined, value: T | null): (() => void) | undefined {\n if (typeof ref === \"function\") {\n const cleanup = ref(value);\n return typeof cleanup === \"function\" ? cleanup : undefined;\n }\n if (ref) (ref as { current: T | null }).current = value;\n}\n\nfunction getElementRef(element: ReactElement): Ref<HTMLElement> | undefined {\n const props = element.props as Record<string, unknown>;\n const refDescriptor = Object.getOwnPropertyDescriptor(element, \"ref\");\n if (refDescriptor && \"value\" in refDescriptor) {\n return refDescriptor.value as Ref<HTMLElement> | undefined;\n }\n return (props as { ref?: Ref<HTMLElement> }).ref;\n}\n\nfunction isHTMLElement(value: unknown): value is HTMLElement {\n if (!value || typeof value !== \"object\") return false;\n const ownerDocument = (value as { ownerDocument?: Document }).ownerDocument;\n const ElementConstructor =\n ownerDocument?.defaultView?.HTMLElement ??\n (typeof HTMLElement === \"undefined\" ? undefined : HTMLElement);\n return ElementConstructor !== undefined && value instanceof ElementConstructor;\n}\n\nfunction warnAgentUIAction(message: string): void {\n if (typeof process !== \"undefined\" && process.env.NODE_ENV !== \"production\") {\n console.warn(message);\n }\n}\n\nconst eventAdapters: Record<AgentUIActionEvent, { invoke(target: HTMLElement): void }> = {\n click: {\n invoke(target) {\n target.click();\n },\n },\n};\n\nexport function AgentUIAction<TResult = void>({\n name,\n description,\n event = \"click\",\n children,\n}: AgentUIActionProps<TResult>): ReactElement<AgentUIActionChildProps<TResult>, string | JSXElementConstructor<any>> {\n const runtime = useInternalToolRuntime();\n const child = Children.only(children) as ReactElement<AgentUIActionChildProps<TResult>>;\n const isFragment = child.type === Fragment;\n const handler = isFragment ? undefined : child.props.onClick;\n const childDisabled = isFragment ? false : Boolean(child.props.disabled);\n const childRef = isFragment ? undefined : getElementRef(child);\n const [target, setTarget] = useState<HTMLElement | null>(null);\n const targetRef = useRef<HTMLElement | null>(null);\n const handlerRef = useRef(handler);\n const disabledRef = useRef(childDisabled);\n const pendingInvocationRef = useRef<PendingInvocation<TResult> | null>(null);\n const invalidTargetRef = useRef(false);\n const warnedTargetRef = useRef(false);\n const warnedChildRef = useRef<\"fragment\" | \"handler\" | null>(null);\n const invokingRef = useRef(false);\n\n useLayoutEffect(() => {\n handlerRef.current = handler;\n disabledRef.current = childDisabled;\n });\n\n const mergedRef = useCallback(\n (value: unknown) => {\n const element = isHTMLElement(value) ? value : null;\n const cleanupChildRef = setRefValue(childRef as Ref<unknown> | undefined, value);\n invalidTargetRef.current = value !== null && !element;\n targetRef.current = element;\n setTarget(element);\n if (element) warnedTargetRef.current = false;\n if (cleanupChildRef) {\n return () => {\n cleanupChildRef();\n if (targetRef.current === element) {\n invalidTargetRef.current = false;\n targetRef.current = null;\n setTarget(null);\n }\n };\n }\n },\n [childRef],\n );\n\n const invokeHandler = useCallback((mouseEvent: MouseEvent<HTMLElement>) => {\n const currentHandler = handlerRef.current;\n const pending = pendingInvocationRef.current;\n if (pending) pendingInvocationRef.current = null;\n if (!currentHandler) {\n pending?.reject(\n new AgentToolError(\n \"ACTION_NOT_HANDLED\",\n `AgentUIAction \"${name}\" does not have an onClick handler.`,\n ),\n );\n return undefined as TResult;\n }\n try {\n const result = currentHandler(mouseEvent);\n if (pending) Promise.resolve(result).then(pending.resolve, pending.reject);\n return result;\n } catch (error) {\n if (pending) {\n pending.reject(error);\n return undefined as TResult;\n }\n throw error;\n }\n }, [name]);\n\n const definition = useMemo(\n () =>\n defineAgentTool<TResult>({\n name,\n description,\n }),\n [name, description],\n );\n\n useLayoutEffect(() => {\n if (isFragment || !handler) {\n const warningType = isFragment ? \"fragment\" : \"handler\";\n if (warnedChildRef.current !== warningType) {\n warnedChildRef.current = warningType;\n warnAgentUIAction(\n isFragment\n ? `AgentUIAction \"${name}\" does not support React.Fragment children.`\n : `AgentUIAction \"${name}\" needs a child with onClick.`,\n );\n }\n return;\n }\n warnedChildRef.current = null;\n if (!target) {\n if (!targetRef.current && !warnedTargetRef.current) {\n warnedTargetRef.current = true;\n warnAgentUIAction(\n invalidTargetRef.current\n ? `AgentUIAction \"${name}\" needs its child ref to resolve to an HTMLElement; the Tool is not registered.`\n : `AgentUIAction \"${name}\" needs its child to forward ref to an HTMLElement; the Tool is not registered.`,\n );\n }\n return;\n }\n\n const controller = new AbortController();\n runtime.register(\n definition,\n async (_input, context) => {\n if (invokingRef.current) {\n throw new AgentToolError(\n \"ACTION_IN_FLIGHT\",\n `AgentUIAction \"${name}\" is already being invoked.`,\n );\n }\n if (disabledRef.current) {\n throw new AgentToolError(\n \"TOOL_UNAVAILABLE\",\n `AgentUIAction \"${name}\" is disabled.`,\n );\n }\n const currentTarget = targetRef.current;\n if (!currentTarget || !currentTarget.isConnected) {\n throw new AgentToolError(\n \"ACTION_TARGET_UNAVAILABLE\",\n `AgentUIAction \"${name}\" target is not available.`,\n );\n }\n invokingRef.current = true;\n let resolveInvocation!: (value: TResult | PromiseLike<TResult>) => void;\n let rejectInvocation!: (reason?: unknown) => void;\n const actionPromise = new Promise<TResult>((resolve, reject) => {\n resolveInvocation = resolve;\n rejectInvocation = reject;\n });\n const pendingInvocation = {\n resolve: resolveInvocation,\n reject: rejectInvocation,\n };\n pendingInvocationRef.current = pendingInvocation;\n try {\n eventAdapters[event].invoke(currentTarget);\n } catch (error) {\n if (pendingInvocationRef.current === pendingInvocation) {\n pendingInvocationRef.current = null;\n }\n invokingRef.current = false;\n throw error;\n }\n if (pendingInvocationRef.current === pendingInvocation) {\n pendingInvocationRef.current = null;\n invokingRef.current = false;\n throw new AgentToolError(\n \"ACTION_NOT_HANDLED\",\n `AgentUIAction \"${name}\" click did not invoke its onClick handler.`,\n );\n }\n try {\n return await waitForActionResult(actionPromise, context.signal);\n } finally {\n if (context.signal.aborted) {\n void actionPromise.then(\n () => {\n invokingRef.current = false;\n },\n () => {\n invokingRef.current = false;\n },\n );\n } else {\n invokingRef.current = false;\n }\n }\n },\n { signal: controller.signal },\n );\n return () => controller.abort();\n }, [runtime, definition, event, handler !== undefined, isFragment, name, target]);\n\n if (isFragment) return child;\n return cloneElement(child, {\n onClick: invokeHandler,\n ref: mergedRef,\n } as AgentUIActionChildProps<TResult> & { ref: Ref<HTMLElement> });\n}\n\nexport type {\n AgentContextValue,\n AgentToolDefinition,\n AgentToolExecutor,\n} from \"./types.js\";\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"file":"registration.js","sourceRoot":"","sources":["../src/registration.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAClD,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAC/D,OAAO,EAAE,0BAA0B,EAAE,MAAM,oBAAoB,CAAC;AAQhE,MAAM,UAAU,iBAAiB,CAC/B,UAAgD,EAChD,OAAmG;IAEnG,IAAI,CAAC,UAAU,IAAI,OAAO,UAAU,CAAC,IAAI,KAAK,QAAQ,IAAI,OAAO,OAAO,EAAE,OAAO,KAAK,UAAU,EAAE,CAAC;QACjG,MAAM,IAAI,SAAS,CAAC,+DAA+D,CAAC,CAAC;IACvF,CAAC;IACD,IAAI,sBAAsB,IAAI,OAAO,EAAE,CAAC;QACtC,MAAM,IAAI,SAAS,CAAC,6DAA6D,CAAC,CAAC;IACrF,CAAC;IACD,0BAA0B,CAAC,UAAU,CAAC,WAAW,EAAE,SAAS,UAAU,CAAC,IAAI,eAAe,CAAC,CAAC;IAC5F,OAAO,MAAM,CAAC,MAAM,CAAC,EAAE,UAAU,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC;AACjE,CAAC;AAED,MAAM,UAAU,uBAAuB;IAMrC,MAAM,KAAK,GAAG,IAAI,GAAG,EAA+B,CAAC;IACrD,MAAM,QAAQ,GAAG;QACf,QAAQ,CACN,UAAgD,EAChD,OAAmG;YAEnG,MAAM,SAAS,GAAG,iBAAiB,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;YACzD,IAAI,KAAK,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC;gBAAE,MAAM,IAAI,SAAS,CAAC,SAAS,UAAU,CAAC,IAAI,0BAA0B,CAAC,CAAC;YACxG,MAAM,MAAM,GAAG,eAAe,CAAkB,SAAS,CAAC,UAAU,CAAC,CAAC;YACtE,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,EAAE,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,SAAS,CAAC,OAAO,EAAE,CAAC,CAAC;YAC/E,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;YAC7B,OAAO,GAAG,EAAE;gBACV,IAAI,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,IAAI;oBAAE,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;YACjE,CAAC,CAAC;QACJ,CAAC;KACF,CAAC;IACF,MAAM,CAAC,cAAc,CAAC,QAAQ,EAAE,kBAAkB,EAAE;QAClD,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,CAAC;KAC9D,CAAC,CAAC;IACH,OAAO,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;AACjC,CAAC","sourcesContent":["import { defineAgentTool } from \"./definition.js\";\nimport { toolRegistrySymbol } from \"./shared/tool-registry.js\";\nimport { assertAgentToolInputSchema } from \"./shared/schema.js\";\nimport type { AgentToolDefinition } from \"./types.js\";\n\nexport interface RegisteredAgentTool<TInput = any, TResult = any> {\n readonly definition: AgentToolDefinition<TInput, TResult>;\n readonly execute: (input: TInput, context: { signal: AbortSignal }) => TResult | Promise<TResult>;\n}\n\nexport function registerAgentTool<TInput, TResult>(\n definition: AgentToolDefinition<TInput, TResult>,\n options: { execute: RegisteredAgentTool<TInput, TResult>[\"execute\"]; requiresConfirmation?: never },\n): RegisteredAgentTool<TInput, TResult> {\n if (!definition || typeof definition.name !== \"string\" || typeof options?.execute !== \"function\") {\n throw new TypeError(\"registerAgentTool requires a definition and execute function.\");\n }\n if (\"requiresConfirmation\" in options) {\n throw new TypeError(\"Registered Agent tools do not support requiresConfirmation.\");\n }\n assertAgentToolInputSchema(definition.inputSchema, `Tool \"${definition.name}\".inputSchema`);\n return Object.freeze({ definition, execute: options.execute });\n}\n\nexport function createAgentToolRegistry(): {\n register<TInput, TResult>(\n definition: AgentToolDefinition<TInput, TResult>,\n options: { execute: RegisteredAgentTool<TInput, TResult>[\"execute\"]; requiresConfirmation?: never },\n ): () => void;\n} {\n const tools = new Map<string, RegisteredAgentTool>();\n const registry = {\n register<TInput, TResult>(\n definition: AgentToolDefinition<TInput, TResult>,\n options: { execute: RegisteredAgentTool<TInput, TResult>[\"execute\"]; requiresConfirmation?: never },\n ): () => void {\n const validated = registerAgentTool(definition, options);\n if (tools.has(definition.name)) throw new TypeError(`Tool \"${definition.name}\" is already registered.`);\n const copied = defineAgentTool<TInput, TResult>(validated.definition);\n const tool = Object.freeze({ definition: copied, execute: validated.execute });\n tools.set(copied.name, tool);\n return () => {\n if (tools.get(copied.name) === tool) tools.delete(copied.name);\n };\n },\n };\n Object.defineProperty(registry, toolRegistrySymbol, {\n value: Object.freeze({ getTools: () => [...tools.values()] }),\n });\n return Object.freeze(registry);\n}\n"]}