@mydatavalue/polter 0.1.2 → 0.1.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.d.mts +6 -2
- package/dist/index.d.ts +6 -2
- package/dist/index.js +9 -4
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +9 -4
- package/dist/index.mjs.map +1 -1
- package/package.json +1 -1
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/core/schemaGenerator.ts","../src/executor/visualExecutor.ts","../src/components/AgentActionProvider.tsx","../src/components/AgentAction.tsx","../src/components/AgentStep.tsx","../src/components/AgentTarget.tsx","../src/hooks/useAgentActions.ts","../src/components/AgentDevTools.tsx","../src/hooks/useAgentAction.ts","../src/hooks/useAgentCommandRouter.ts","../src/core/defineAction.ts"],"names":["createContext","useRef","useState","useEffect","useCallback","result","useMemo","useContext","jsx","useId","jsxs","Fragment","items"],"mappings":"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","file":"index.js","sourcesContent":["import type { RegisteredAction, ToolSchema } from './types';\n\ntype JsonSchema = Record<string, unknown>;\n\nexport function zodToJsonSchema(schema: unknown): JsonSchema {\n // Zod v4+: use built-in toJSONSchema() if available\n if (typeof (schema as any).toJSONSchema === 'function') {\n try {\n const result = (schema as any).toJSONSchema();\n // Remove $schema key — not needed for tool schemas\n delete result.$schema;\n return result;\n } catch {\n // Fall through to manual conversion\n }\n }\n\n // Zod v3: manual conversion via _def.typeName\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const def = (schema as any)._def;\n const description = (schema as any).description;\n\n switch (def.typeName) {\n case 'ZodString': {\n const result: JsonSchema = { type: 'string' };\n if (description) result.description = description;\n if (def.checks) {\n for (const check of def.checks) {\n if (check.kind === 'min') result.minLength = check.value;\n if (check.kind === 'max') result.maxLength = check.value;\n }\n }\n return result;\n }\n\n case 'ZodNumber': {\n const result: JsonSchema = { type: 'number' };\n if (description) result.description = description;\n if (def.checks) {\n for (const check of def.checks) {\n if (check.kind === 'int') result.type = 'integer';\n if (check.kind === 'min')\n result[check.inclusive ? 'minimum' : 'exclusiveMinimum'] = check.value;\n if (check.kind === 'max')\n result[check.inclusive ? 'maximum' : 'exclusiveMaximum'] = check.value;\n }\n }\n return result;\n }\n\n case 'ZodBoolean': {\n const result: JsonSchema = { type: 'boolean' };\n if (description) result.description = description;\n return result;\n }\n\n case 'ZodArray': {\n const result: JsonSchema = {\n type: 'array',\n items: zodToJsonSchema(def.type),\n };\n if (description) result.description = description;\n if (def.minLength !== null && def.minLength !== undefined)\n result.minItems = def.minLength.value;\n if (def.maxLength !== null && def.maxLength !== undefined)\n result.maxItems = def.maxLength.value;\n return result;\n }\n\n case 'ZodObject': {\n const shape = def.shape();\n const properties: Record<string, JsonSchema> = {};\n const required: string[] = [];\n\n for (const [key, value] of Object.entries(shape)) {\n properties[key] = zodToJsonSchema(value);\n if (!(value as any).isOptional()) {\n required.push(key);\n }\n }\n\n const result: JsonSchema = { type: 'object', properties };\n if (required.length > 0) result.required = required;\n if (description) result.description = description;\n return result;\n }\n\n case 'ZodEnum': {\n const result: JsonSchema = { type: 'string', enum: [...def.values] };\n if (description) result.description = description;\n return result;\n }\n\n case 'ZodLiteral': {\n const result: JsonSchema = { type: typeof def.value, const: def.value };\n if (description) result.description = description;\n return result;\n }\n\n case 'ZodUnion':\n case 'ZodDiscriminatedUnion': {\n const options = def.options as unknown[];\n const result: JsonSchema = { anyOf: options.map((o) => zodToJsonSchema(o)) };\n if (description) result.description = description;\n return result;\n }\n\n case 'ZodOptional': {\n const inner = zodToJsonSchema(def.innerType);\n if (description && !inner.description) inner.description = description;\n return inner;\n }\n\n case 'ZodNullable': {\n const inner = zodToJsonSchema(def.innerType);\n if (description && !inner.description) inner.description = description;\n return inner;\n }\n\n case 'ZodDefault': {\n const inner = zodToJsonSchema(def.innerType);\n if (description && !inner.description) inner.description = description;\n return inner;\n }\n\n case 'ZodRecord': {\n const result: JsonSchema = {\n type: 'object',\n additionalProperties: zodToJsonSchema(def.valueType),\n };\n if (description) result.description = description;\n return result;\n }\n\n case 'ZodNull': {\n return { type: 'null', ...(description && { description }) };\n }\n\n case 'ZodAny':\n case 'ZodUnknown': {\n return description ? { description } : {};\n }\n\n default: {\n return { type: 'object', ...(description && { description }) };\n }\n }\n}\n\nexport function generateToolSchemas(actions: RegisteredAction[]): ToolSchema[] {\n return actions\n .filter((a) => !a.disabled)\n .map((action) => ({\n name: action.name,\n description: action.description,\n parameters: action.parameters\n ? zodToJsonSchema(action.parameters)\n : { type: 'object' as const, properties: {} },\n }));\n}\n\n","import type { RegisteredAction, ExecutionResult, ExecutionTarget, ExecutorConfig } from '../core/types';\n\nlet stylesInjected = false;\n\nfunction injectStyles(): void {\n if (stylesInjected) return;\n if (typeof document === 'undefined') return;\n stylesInjected = true;\n\n const style = document.createElement('style');\n style.id = 'polter-styles';\n style.textContent = `\n @keyframes polter-pulse {\n 0%, 100% { opacity: 1; transform: scale(1); }\n 50% { opacity: 0.7; transform: scale(1.02); }\n }\n @keyframes polter-fade-in {\n from { opacity: 0; transform: translateX(-50%) translateY(4px); }\n to { opacity: 1; transform: translateX(-50%) translateY(0); }\n }\n @keyframes polter-cursor-click {\n 0% { transform: scale(1); }\n 50% { transform: scale(0.85); }\n 100% { transform: scale(1); }\n }\n `;\n document.head.appendChild(style);\n}\n\ninterface OverlayHandle {\n remove: () => void;\n}\n\nconst CURSOR_SVG = `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\">\n <path d=\"M5.5 3.21V20.8c0 .45.54.67.85.35l4.86-4.86a.5.5 0 0 1 .35-.15h6.87c.48 0 .68-.61.3-.92L5.95 2.87a.5.5 0 0 0-.45.34z\" fill=\"#1e293b\" stroke=\"white\" stroke-width=\"1.5\" stroke-linejoin=\"round\"/>\n</svg>`;\n\n/**\n * Full-screen overlay that blocks user interaction during guided execution.\n * Persists across steps so there's no gap where clicks can leak through.\n */\nfunction createBlockingOverlay(): OverlayHandle {\n const overlay = document.createElement('div');\n overlay.className = 'polter-blocking-overlay';\n overlay.style.cssText = `\n position:fixed;\n inset:0;\n z-index:99997;\n cursor:not-allowed;\n `;\n document.body.appendChild(overlay);\n return { remove: () => overlay.remove() };\n}\n\nfunction createCursor(): OverlayHandle {\n injectStyles();\n\n const cursor = document.createElement('div');\n cursor.className = 'polter-cursor';\n cursor.innerHTML = CURSOR_SVG;\n cursor.style.cssText = `\n position:fixed;\n left:-40px;\n top:-40px;\n z-index:100000;\n pointer-events:none;\n transition:left 0.4s cubic-bezier(0.4,0,0.2,1),top 0.4s cubic-bezier(0.4,0,0.2,1);\n filter:drop-shadow(0 2px 4px rgba(0,0,0,0.3));\n `;\n document.body.appendChild(cursor);\n\n return { remove: () => cursor.remove() };\n}\n\nfunction moveCursorTo(target: HTMLElement, signal?: AbortSignal): Promise<void> {\n const cursor = document.querySelector('.polter-cursor') as HTMLElement | null;\n if (!cursor) return Promise.resolve();\n\n const rect = target.getBoundingClientRect();\n cursor.style.left = `${rect.left + rect.width / 2}px`;\n cursor.style.top = `${rect.top + rect.height / 2}px`;\n\n return delay(450, signal);\n}\n\nfunction animateCursorClick(): void {\n const cursor = document.querySelector('.polter-cursor') as HTMLElement | null;\n if (!cursor) return;\n cursor.style.animation = 'polter-cursor-click 0.2s ease';\n cursor.addEventListener('animationend', () => { cursor.style.animation = ''; }, { once: true });\n}\n\ninterface SpotlightHandle {\n remove: () => void;\n}\n\nfunction createSpotlight(\n target: HTMLElement,\n label: string,\n config: ExecutorConfig,\n): SpotlightHandle {\n injectStyles();\n\n const rect = target.getBoundingClientRect();\n const padding = config.spotlightPadding;\n const overlayRgba = `rgba(0, 0, 0, ${config.overlayOpacity})`;\n\n const container = document.createElement('div');\n container.className = 'polter-spotlight-container';\n container.style.cssText = 'position:fixed;inset:0;z-index:99998;pointer-events:none;';\n\n // Box-shadow creates the dimmed overlay with a hole for the target\n const spotlight = document.createElement('div');\n spotlight.className = 'polter-spotlight';\n spotlight.style.cssText = `\n position:fixed;\n left:${rect.left - padding}px;\n top:${rect.top - padding}px;\n width:${rect.width + padding * 2}px;\n height:${rect.height + padding * 2}px;\n border-radius:8px;\n box-shadow:0 0 0 9999px ${overlayRgba};\n z-index:99998;\n pointer-events:none;\n transition:all 0.3s ease;\n `;\n\n // Pulsing ring around the target\n const ring = document.createElement('div');\n ring.className = 'polter-ring';\n ring.style.cssText = `\n position:fixed;\n left:${rect.left - padding - 2}px;\n top:${rect.top - padding - 2}px;\n width:${rect.width + padding * 2 + 4}px;\n height:${rect.height + padding * 2 + 4}px;\n border:2px solid #3b82f6;\n border-radius:10px;\n z-index:99999;\n pointer-events:none;\n animation:polter-pulse 1.5s ease-in-out infinite;\n `;\n\n container.appendChild(spotlight);\n container.appendChild(ring);\n\n // Tooltip\n if (label && config.tooltipEnabled) {\n const tooltip = document.createElement('div');\n tooltip.className = 'polter-tooltip';\n tooltip.textContent = label;\n\n const spaceBelow = window.innerHeight - rect.bottom - padding;\n const isBelow = spaceBelow > 60;\n const tooltipTop = isBelow\n ? rect.bottom + padding + 12\n : rect.top - padding - 44;\n\n tooltip.style.cssText = `\n position:fixed;\n left:${rect.left + rect.width / 2}px;\n top:${tooltipTop}px;\n transform:translateX(-50%);\n background:#1e293b;\n color:#f8fafc;\n padding:8px 14px;\n border-radius:6px;\n font-size:13px;\n font-weight:500;\n line-height:1.4;\n white-space:nowrap;\n z-index:99999;\n pointer-events:none;\n animation:polter-fade-in 0.2s ease;\n box-shadow:0 4px 12px rgba(0,0,0,0.15);\n `;\n\n container.appendChild(tooltip);\n }\n\n document.body.appendChild(container);\n\n return {\n remove: () => container.remove(),\n };\n}\n\nfunction delay(ms: number, signal?: AbortSignal): Promise<void> {\n return new Promise((resolve, reject) => {\n if (signal?.aborted) {\n reject(new DOMException('Aborted', 'AbortError'));\n return;\n }\n const timer = setTimeout(resolve, ms);\n signal?.addEventListener(\n 'abort',\n () => {\n clearTimeout(timer);\n reject(new DOMException('Aborted', 'AbortError'));\n },\n { once: true },\n );\n });\n}\n\n/**\n * Set an input's value in a way that triggers React's onChange.\n */\nfunction setNativeInputValue(input: HTMLInputElement, value: string): void {\n const nativeSetter =\n Object.getOwnPropertyDescriptor(HTMLInputElement.prototype, 'value')?.set ??\n Object.getOwnPropertyDescriptor(HTMLTextAreaElement.prototype, 'value')?.set;\n\n if (nativeSetter) {\n nativeSetter.call(input, value);\n } else {\n input.value = value;\n }\n\n input.dispatchEvent(new Event('input', { bubbles: true }));\n input.dispatchEvent(new Event('change', { bubbles: true }));\n}\n\n/**\n * Simulate typing into an input character by character.\n */\nasync function simulateTyping(element: HTMLElement, value: string, signal?: AbortSignal): Promise<void> {\n const input = element as HTMLInputElement;\n input.focus();\n\n // Clear existing value first\n if (input.value) {\n setNativeInputValue(input, '');\n await delay(30, signal);\n }\n\n // Type each character with a small delay\n const charDelay = Math.max(15, Math.min(40, 800 / value.length));\n for (let i = 0; i < value.length; i++) {\n if (signal?.aborted) return;\n setNativeInputValue(input, value.slice(0, i + 1));\n await delay(charDelay, signal);\n }\n}\n\n/**\n * Resolve the element for a step. For static steps, returns the element directly.\n * For fromParam steps, polls the AgentTarget registry until a match is found.\n */\nasync function resolveStepElement(\n target: ExecutionTarget,\n actionName: string,\n params: Record<string, unknown>,\n config: ExecutorConfig,\n): Promise<HTMLElement | null> {\n // prepareView runs first (e.g. scroll virtualized list into view)\n if (target.prepareView) {\n await target.prepareView(params);\n await delay(200, config.signal);\n }\n\n // fromParam: resolve lazily from AgentTarget registry by param value.\n // For array params, resolve against the first element (spotlight one representative target).\n if (target.fromParam && config.resolveTarget) {\n const raw = params[target.fromParam];\n const paramValue = String(Array.isArray(raw) ? raw[0] ?? '' : raw ?? '');\n return config.resolveTarget(actionName, target.fromParam, paramValue, config.signal);\n }\n\n // fromTarget: resolve lazily from AgentTarget registry by name\n if (target.fromTarget && config.resolveNamedTarget) {\n return config.resolveNamedTarget(actionName, target.fromTarget, config.signal);\n }\n\n // Static element\n return target.element;\n}\n\nasync function executeInstant(\n action: RegisteredAction,\n params: Record<string, unknown>,\n): Promise<ExecutionResult> {\n try {\n if (action.onExecute) {\n await action.onExecute(params);\n } else {\n const targets = action.getExecutionTargets();\n for (const target of targets) {\n target.element?.click();\n }\n }\n return { success: true, actionName: action.name };\n } catch (err) {\n return { success: false, actionName: action.name, error: String(err) };\n }\n}\n\n/**\n * Check whether an element is visible and measurable.\n * Returns false for detached nodes and display:contents wrappers\n * (whose getBoundingClientRect() returns all zeros).\n */\nfunction isElementVisible(el: HTMLElement): boolean {\n if (!el.isConnected) return false;\n const rect = el.getBoundingClientRect();\n return rect.width > 0 && rect.height > 0;\n}\n\nasync function executeGuided(\n action: RegisteredAction,\n params: Record<string, unknown>,\n config: ExecutorConfig,\n): Promise<ExecutionResult> {\n const targets = action.getExecutionTargets();\n\n // No targets, or all targets are invisible (e.g. display:contents wrappers) — run directly\n if (targets.length === 0 || targets.every((t) => t.element && !isElementVisible(t.element))) {\n if (action.onExecute) {\n await action.onExecute(params);\n }\n return { success: true, actionName: action.name };\n }\n\n let spotlight: SpotlightHandle | null = null;\n let cursor: OverlayHandle | null = null;\n const blocker = createBlockingOverlay();\n\n if (config.cursorEnabled) {\n cursor = createCursor();\n }\n\n try {\n for (let i = 0; i < targets.length; i++) {\n const target = targets[i];\n const isLast = i === targets.length - 1;\n\n // Resolve element (may be lazy for fromParam steps)\n const element = await resolveStepElement(target, action.name, params, config);\n if (!element) continue;\n\n // Element not in DOM (never rendered) — skip for single-step, abort for multi-step\n if (!isElementVisible(element)) {\n if (targets.length > 1) {\n blocker.remove();\n cursor?.remove();\n return { success: false, actionName: action.name, error: `Step element not visible: \"${target.label}\"` };\n }\n continue;\n }\n\n // 1. Scroll into view\n element.scrollIntoView({ behavior: 'smooth', block: 'center' });\n await delay(300, config.signal);\n\n // 2. Move cursor to element\n if (cursor) {\n await moveCursorTo(element, config.signal);\n }\n\n // 3. Spotlight\n spotlight = createSpotlight(element, target.label, config);\n await delay(config.stepDelay, config.signal);\n\n // 4. Interact based on step type\n if (target.setParam) {\n // Type the param value into the input — find the actual input/textarea within the element\n const inputEl = (element.tagName === 'INPUT' || element.tagName === 'TEXTAREA')\n ? element\n : element.querySelector('input, textarea') ?? element;\n const value = String(params[target.setParam] ?? '');\n await simulateTyping(inputEl as HTMLElement, value, config.signal);\n } else if (target.setValue && target.onSetValue) {\n // Set value programmatically via callback\n const value = params[target.setValue];\n target.onSetValue(value);\n } else if (target.fromParam || target.fromTarget) {\n // Lazy-resolved step: always click the resolved target (dropdown option, popover button, etc.)\n animateCursorClick();\n element.click();\n } else if (action.onExecute) {\n // With onExecute: click intermediate steps (e.g. open dropdown),\n // skip clicking the last step (onExecute handles the action)\n if (!isLast) {\n animateCursorClick();\n element.click();\n }\n } else {\n // Without onExecute: click every step\n animateCursorClick();\n element.click();\n }\n\n // 5. Remove spotlight\n spotlight.remove();\n spotlight = null;\n\n if (!isLast) {\n await delay(200, config.signal);\n }\n }\n\n // 6. Call onExecute after visual sequence\n if (action.onExecute) {\n await action.onExecute(params);\n }\n\n blocker.remove();\n cursor?.remove();\n return { success: true, actionName: action.name };\n } catch (err) {\n // Clean up on error\n spotlight?.remove();\n blocker.remove();\n cursor?.remove();\n\n if (err instanceof DOMException && err.name === 'AbortError') {\n return { success: false, actionName: action.name, error: 'Execution cancelled' };\n }\n return { success: false, actionName: action.name, error: String(err) };\n }\n}\n\nexport async function executeAction(\n action: RegisteredAction,\n params: Record<string, unknown>,\n config: ExecutorConfig,\n): Promise<ExecutionResult> {\n if (config.mode === 'instant') {\n return executeInstant(action, params);\n }\n return executeGuided(action, params, config);\n}\n","import React, { createContext, useCallback, useEffect, useMemo, useRef, useState } from 'react';\nimport type {\n AgentActionContextValue,\n AgentActionProviderProps,\n AgentTargetEntry,\n AvailableAction,\n ExecutionResult,\n RegisteredAction,\n} from '../core/types';\nimport type { ActionDefinition } from '../core/defineAction';\nimport { generateToolSchemas } from '../core/schemaGenerator';\nimport { executeAction } from '../executor/visualExecutor';\n\nexport const AgentActionContext = createContext<AgentActionContextValue | null>(null);\n\n/** Convert an ActionDefinition to a schema-only RegisteredAction (no DOM targets). */\nfunction definitionToRegisteredAction(def: ActionDefinition<any>): RegisteredAction {\n return {\n name: def.name,\n description: def.description,\n parameters: def.parameters,\n onExecute: def.onExecute as RegisteredAction['onExecute'],\n disabled: false,\n disabledReason: undefined,\n getExecutionTargets: () => [],\n route: def.route as RegisteredAction['route'],\n navigateVia: def.navigateVia,\n mountTimeout: def.mountTimeout,\n };\n}\n\nexport function AgentActionProvider({\n mode = 'guided',\n stepDelay = 600,\n overlayOpacity = 0.5,\n spotlightPadding = 8,\n tooltipEnabled = true,\n cursorEnabled = true,\n children,\n onExecutionStart,\n onExecutionComplete,\n registry,\n navigate,\n}: AgentActionProviderProps) {\n const actionsRef = useRef<Map<string, RegisteredAction>>(new Map());\n const targetsRef = useRef<Map<string, AgentTargetEntry>>(new Map());\n /** Registry actions stored separately so they can be restored on component unmount. */\n const registryRef = useRef<Map<string, RegisteredAction>>(new Map());\n const navigateRef = useRef(navigate);\n navigateRef.current = navigate;\n const [version, setVersion] = useState(0);\n const [isExecuting, setIsExecuting] = useState(false);\n const currentExecutionRef = useRef<AbortController | null>(null);\n\n // Sync registry prop into actionsRef on mount and when registry changes.\n useEffect(() => {\n const newNames = new Set<string>();\n\n for (const def of registry ?? []) {\n newNames.add(def.name);\n const registryAction = definitionToRegisteredAction(def);\n registryRef.current.set(def.name, registryAction);\n\n // Only set in actionsRef if no component has already registered a richer version\n // (a component-backed action has DOM targets).\n const existing = actionsRef.current.get(def.name);\n if (!existing || existing.getExecutionTargets().length === 0) {\n actionsRef.current.set(def.name, registryAction);\n }\n }\n\n // Remove actions that were in the previous registry but not the new one.\n for (const name of registryRef.current.keys()) {\n if (!newNames.has(name)) {\n registryRef.current.delete(name);\n // Only remove from actionsRef if it's still the registry version (no component override).\n const current = actionsRef.current.get(name);\n if (current && current.getExecutionTargets().length === 0) {\n actionsRef.current.delete(name);\n }\n }\n }\n\n setVersion((v) => v + 1);\n }, [registry]);\n\n const registerAction = useCallback((action: RegisteredAction) => {\n const existing = actionsRef.current.get(action.name);\n\n // Preserve route/navigateVia from registry definition when a component upgrades the action.\n const registryAction = registryRef.current.get(action.name);\n if (registryAction) {\n if (!action.route) action.route = registryAction.route;\n if (!action.navigateVia) action.navigateVia = registryAction.navigateVia;\n if (action.mountTimeout == null) action.mountTimeout = registryAction.mountTimeout;\n }\n\n actionsRef.current.set(action.name, action);\n\n // Only bump version if schema-relevant or state-relevant props changed\n if (\n !existing ||\n existing.description !== action.description ||\n existing.disabled !== action.disabled ||\n existing.disabledReason !== action.disabledReason\n ) {\n setVersion((v) => v + 1);\n }\n }, []);\n\n const unregisterAction = useCallback((name: string) => {\n // If this action came from the registry, restore the schema-only version\n // instead of deleting so the LLM still sees it in schemas.\n const registryAction = registryRef.current.get(name);\n if (registryAction) {\n actionsRef.current.set(name, registryAction);\n } else {\n actionsRef.current.delete(name);\n }\n setVersion((v) => v + 1);\n }, []);\n\n const registerTarget = useCallback((id: string, entry: AgentTargetEntry) => {\n targetsRef.current.set(id, entry);\n }, []);\n\n const unregisterTarget = useCallback((id: string) => {\n targetsRef.current.delete(id);\n }, []);\n\n const resolveTarget = useCallback(\n async (\n actionName: string,\n param: string,\n value: string,\n signal?: AbortSignal,\n ): Promise<HTMLElement | null> => {\n const normalizedValue = value.toLowerCase();\n const maxWait = 3000;\n const pollInterval = 50;\n const start = Date.now();\n\n while (Date.now() - start < maxWait) {\n if (signal?.aborted) return null;\n\n for (const entry of targetsRef.current.values()) {\n if (\n (!entry.action || entry.action === actionName) &&\n entry.param === param &&\n entry.value?.toLowerCase() === normalizedValue &&\n entry.element.isConnected\n ) {\n return entry.element;\n }\n }\n\n await new Promise((r) => setTimeout(r, pollInterval));\n }\n\n return null;\n },\n [],\n );\n\n const resolveNamedTarget = useCallback(\n async (\n actionName: string,\n name: string,\n signal?: AbortSignal,\n ): Promise<HTMLElement | null> => {\n const maxWait = 3000;\n const pollInterval = 50;\n const start = Date.now();\n\n while (Date.now() - start < maxWait) {\n if (signal?.aborted) return null;\n\n for (const entry of targetsRef.current.values()) {\n if (\n (!entry.action || entry.action === actionName) &&\n entry.name === name &&\n entry.element.isConnected\n ) {\n return entry.element;\n }\n }\n\n await new Promise((r) => setTimeout(r, pollInterval));\n }\n\n return null;\n },\n [],\n );\n\n /** Poll actionsRef until the action has DOM targets (component mounted after navigation). */\n const waitForActionMount = useCallback(\n async (name: string, signal?: AbortSignal, timeout = 5000): Promise<RegisteredAction | null> => {\n const maxWait = timeout;\n const pollInterval = 50;\n const start = Date.now();\n\n while (Date.now() - start < maxWait) {\n if (signal?.aborted) return null;\n const current = actionsRef.current.get(name);\n if (current && (current.componentBacked || current.getExecutionTargets().length > 0)) {\n return current;\n }\n await new Promise((r) => setTimeout(r, pollInterval));\n }\n\n // Timed out — return whatever we have (executor handles empty targets gracefully).\n return actionsRef.current.get(name) ?? null;\n },\n [],\n );\n\n const execute = useCallback(\n async (actionName: string, params?: Record<string, unknown>): Promise<ExecutionResult> => {\n currentExecutionRef.current?.abort();\n const controller = new AbortController();\n currentExecutionRef.current = controller;\n\n let action = actionsRef.current.get(actionName);\n if (!action) {\n return { success: false, actionName, error: `Action \"${actionName}\" not found` };\n }\n if (action.disabled) {\n return {\n success: false,\n actionName,\n error: action.disabledReason || 'Action is disabled',\n };\n }\n\n setIsExecuting(true);\n onExecutionStart?.(actionName);\n\n try {\n const executorConfig = {\n mode,\n stepDelay,\n overlayOpacity,\n spotlightPadding,\n tooltipEnabled,\n cursorEnabled,\n signal: controller.signal,\n resolveTarget,\n resolveNamedTarget,\n };\n\n // Validate params against the Zod schema before navigating — prevents\n // wasted navigateVia chains when required params are missing.\n const schema = action.parameters as any;\n if (schema?.safeParse) {\n const validation = schema.safeParse(params ?? {});\n if (!validation.success) {\n const missing = validation.error.issues\n .map((i: any) => i.path.join('.'))\n .filter(Boolean);\n const error = missing.length > 0\n ? `Required parameters missing: ${missing.join(', ')}`\n : validation.error.issues.map((i: any) => i.message).join('; ');\n return { success: false, actionName, error };\n }\n }\n\n if (action.navigateVia && action.navigateVia.length > 0) {\n // Execute each action in the chain sequentially — spotlight, click, wait for next mount.\n for (const viaName of action.navigateVia) {\n if (controller.signal.aborted) break;\n\n const viaRegistered = actionsRef.current.get(viaName);\n const viaTimeout = viaRegistered?.mountTimeout ?? 10000;\n const viaAction = await waitForActionMount(viaName, controller.signal, viaTimeout);\n if (!viaAction || viaAction.getExecutionTargets().length === 0) {\n return {\n success: false,\n actionName,\n error: `Navigation chain action \"${viaName}\" not found or has no targets`,\n };\n }\n\n const viaResult = await executeAction(viaAction, {}, executorConfig);\n if (!viaResult.success) {\n return {\n success: false,\n actionName,\n error: `Navigation chain failed at \"${viaName}\": ${viaResult.error}`,\n };\n }\n }\n\n // After the chain, wait for the terminal action to mount with DOM targets.\n const mounted = await waitForActionMount(actionName, controller.signal, action.mountTimeout ?? 10000);\n if (!mounted || !mounted.componentBacked) {\n // Still schema-only — component never mounted on the page\n return {\n success: false,\n actionName,\n error: `Action \"${actionName}\" did not mount after navigation chain — the page may require authentication or failed to load`,\n };\n }\n action = mounted;\n } else {\n // If this is a registry action with no DOM targets, navigate first.\n const targets = action.getExecutionTargets();\n if (targets.length === 0 && action.route && navigateRef.current) {\n const path = action.route(params ?? {});\n await navigateRef.current(path);\n\n // Wait for the <AgentAction> component to mount on the new page.\n const mounted = await waitForActionMount(actionName, controller.signal, action.mountTimeout);\n if (mounted) {\n action = mounted;\n }\n }\n }\n\n // Re-check disabled after navigation — the mounted version may have\n // dynamic disabled state that the schema-only registry version didn't.\n if (action.disabled) {\n const result: ExecutionResult = {\n success: false,\n actionName,\n error: action.disabledReason || 'Action is disabled',\n };\n onExecutionComplete?.(result);\n return result;\n }\n\n const result = await executeAction(action, params ?? {}, executorConfig);\n onExecutionComplete?.(result);\n return result;\n } catch (err) {\n const result: ExecutionResult = {\n success: false,\n actionName,\n error:\n err instanceof DOMException && err.name === 'AbortError'\n ? 'Execution cancelled'\n : String(err),\n };\n onExecutionComplete?.(result);\n return result;\n } finally {\n setIsExecuting(false);\n if (currentExecutionRef.current === controller) {\n currentExecutionRef.current = null;\n }\n }\n },\n [mode, stepDelay, overlayOpacity, spotlightPadding, tooltipEnabled, cursorEnabled, onExecutionStart, onExecutionComplete, resolveTarget, resolveNamedTarget, waitForActionMount],\n );\n\n const availableActions = useMemo<AvailableAction[]>(\n () =>\n Array.from(actionsRef.current.values()).map((a) => ({\n name: a.name,\n description: a.description,\n disabled: a.disabled,\n disabledReason: a.disabledReason,\n hasParameters: !!a.parameters,\n })),\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [version],\n );\n\n const schemas = useMemo(\n () => generateToolSchemas(Array.from(actionsRef.current.values())),\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [version],\n );\n\n const contextValue = useMemo<AgentActionContextValue>(\n () => ({\n registerAction,\n unregisterAction,\n registerTarget,\n unregisterTarget,\n execute,\n availableActions,\n schemas,\n isExecuting,\n mode,\n }),\n [\n registerAction,\n unregisterAction,\n registerTarget,\n unregisterTarget,\n execute,\n availableActions,\n schemas,\n isExecuting,\n mode,\n ],\n );\n\n return (\n <AgentActionContext.Provider value={contextValue}>{children}</AgentActionContext.Provider>\n );\n}\n","import React, { createContext, useCallback, useContext, useEffect, useMemo, useRef } from 'react';\nimport type { ExecutionTarget } from '../core/types';\nimport type { ActionDefinition } from '../core/defineAction';\nimport { AgentActionContext } from './AgentActionProvider';\n\ninterface StepData {\n label: string;\n element: HTMLElement | null;\n fromParam?: string;\n fromTarget?: string;\n setParam?: string;\n setValue?: string;\n onSetValue?: (value: unknown) => void;\n prepareView?: (params: Record<string, unknown>) => void | Promise<void>;\n}\n\ninterface AgentStepContextValue {\n registerStep: (id: string, data: StepData) => void;\n unregisterStep: (id: string) => void;\n}\n\nexport const AgentStepContext = createContext<AgentStepContextValue | null>(null);\n\ntype AgentActionProps = {\n onExecute?: (params: Record<string, unknown>) => void | Promise<void>;\n disabled?: boolean;\n disabledReason?: string;\n children?: React.ReactNode;\n} & (\n | { action: ActionDefinition<any>; name?: string; description?: string; parameters?: unknown }\n | { action?: never; name: string; description: string; parameters?: unknown }\n);\n\nexport function AgentAction(props: AgentActionProps) {\n const {\n action,\n onExecute,\n disabled = false,\n disabledReason,\n children,\n } = props;\n\n // Resolve from action definition, with inline props as overrides.\n const name = props.name ?? action?.name;\n const description = props.description ?? action?.description ?? '';\n const parameters = props.parameters ?? action?.parameters;\n\n const context = useContext(AgentActionContext);\n if (!context) {\n throw new Error('AgentAction must be used within an AgentActionProvider');\n }\n if (!name) {\n throw new Error('AgentAction requires either a \"name\" prop or an \"action\" prop');\n }\n\n const wrapperRef = useRef<HTMLDivElement>(null);\n const stepsRef = useRef<Map<string, StepData>>(new Map());\n\n const onExecuteRef = useRef(onExecute);\n onExecuteRef.current = onExecute;\n const parametersRef = useRef(parameters);\n parametersRef.current = parameters;\n\n const stableOnExecute = useCallback((params: Record<string, unknown>) => {\n return onExecuteRef.current?.(params);\n }, []);\n\n const getExecutionTargets = useCallback((): ExecutionTarget[] => {\n if (stepsRef.current.size > 0) {\n const steps = Array.from(stepsRef.current.values());\n\n // Separate steps with elements (sortable by DOM position) from lazy steps (no element)\n const withElements = steps.filter((s) => s.element);\n const withoutElements = steps.filter((s) => !s.element && (s.fromParam || s.fromTarget));\n\n // Sort steps with elements by DOM position\n withElements.sort((a, b) => {\n if (!a.element || !b.element) return 0;\n const pos = a.element.compareDocumentPosition(b.element);\n return pos & Node.DOCUMENT_POSITION_FOLLOWING ? -1 : 1;\n });\n\n // Combine: element steps first (in DOM order), then fromParam steps\n const ordered = [...withElements, ...withoutElements];\n\n return ordered.map((s) => ({\n label: s.label,\n element: s.element,\n fromParam: s.fromParam,\n fromTarget: s.fromTarget,\n setParam: s.setParam,\n setValue: s.setValue,\n onSetValue: s.onSetValue,\n prepareView: s.prepareView,\n }));\n }\n\n // Single element: use wrapper's first child\n const el = wrapperRef.current?.firstElementChild as HTMLElement | null;\n return el ? [{ label: description, element: el }] : [];\n }, [description]);\n\n const { registerAction, unregisterAction } = context;\n\n useEffect(() => {\n registerAction({\n name,\n description,\n parameters: parametersRef.current,\n onExecute: onExecuteRef.current ? stableOnExecute : undefined,\n disabled,\n disabledReason,\n getExecutionTargets,\n componentBacked: true,\n });\n return () => unregisterAction(name);\n }, [name, description, disabled, disabledReason, stableOnExecute, getExecutionTargets, registerAction, unregisterAction]);\n\n const registerStep = useCallback(\n (id: string, data: StepData) => {\n stepsRef.current.set(id, data);\n },\n [],\n );\n\n const unregisterStep = useCallback((id: string) => {\n stepsRef.current.delete(id);\n }, []);\n\n const stepContextValue = useMemo(\n () => ({ registerStep, unregisterStep }),\n [registerStep, unregisterStep],\n );\n\n if (!children) return null;\n\n return (\n <AgentStepContext.Provider value={stepContextValue}>\n <div ref={wrapperRef} style={{ display: 'contents' }}>\n {children}\n </div>\n </AgentStepContext.Provider>\n );\n}\n","import React, { useContext, useEffect, useId, useRef } from 'react';\nimport { AgentStepContext } from './AgentAction';\n\ninterface AgentStepProps {\n label: string;\n children?: React.ReactNode;\n /** Resolve the target element from the AgentTarget registry by matching this param's value. */\n fromParam?: string;\n /** Resolve a named target from the AgentTarget registry (for static elements inside popovers/dropdowns). */\n fromTarget?: string;\n /** Simulate typing the value of this param into the element. */\n setParam?: string;\n /** Set a value programmatically via onSetValue callback. */\n setValue?: string;\n /** Callback for setValue — receives the param value and sets it on the component. */\n onSetValue?: (value: unknown) => void;\n /** Run a callback to prepare the DOM (e.g. scroll a virtualized list) before resolving the target. */\n prepareView?: (params: Record<string, unknown>) => void | Promise<void>;\n}\n\nexport function AgentStep({\n label,\n children,\n fromParam,\n fromTarget,\n setParam,\n setValue,\n onSetValue,\n prepareView,\n}: AgentStepProps) {\n const id = useId();\n const wrapperRef = useRef<HTMLDivElement>(null);\n const stepContext = useContext(AgentStepContext);\n\n if (!stepContext) {\n throw new Error('AgentStep must be used within an AgentAction');\n }\n\n const onSetValueRef = useRef(onSetValue);\n onSetValueRef.current = onSetValue;\n const prepareViewRef = useRef(prepareView);\n prepareViewRef.current = prepareView;\n\n useEffect(() => {\n const element = children\n ? (wrapperRef.current?.firstElementChild as HTMLElement | null)\n : null;\n\n stepContext.registerStep(id, {\n label,\n element,\n fromParam,\n fromTarget,\n setParam,\n setValue,\n onSetValue: onSetValueRef.current,\n prepareView: prepareViewRef.current,\n });\n return () => stepContext.unregisterStep(id);\n }, [id, label, fromParam, fromTarget, setParam, setValue, stepContext]);\n\n if (!children) return null;\n\n return (\n <div ref={wrapperRef} style={{ display: 'contents' }}>\n {children}\n </div>\n );\n}\n","import React, { useContext, useEffect, useId, useRef } from 'react';\nimport { AgentActionContext } from './AgentActionProvider';\n\ninterface AgentTargetProps {\n /** The action name this target belongs to. Omit to make a shared target that any action can resolve. */\n action?: string;\n children: React.ReactNode;\n /** The parameter key this target maps to (for fromParam resolution). */\n param?: string;\n /** The parameter value this target represents (for fromParam resolution). */\n value?: string;\n /** Named target key (for fromTarget resolution — static elements inside popovers/dropdowns). */\n name?: string;\n}\n\n/**\n * Register a DOM element as a selectable target for an agent action step.\n *\n * Use this to wrap lazily-rendered elements (dropdown options, search results, etc.)\n * so that `AgentStep fromParam` or `AgentStep fromTarget` can find and interact\n * with them after they mount.\n *\n * Works through React portals — context flows regardless of DOM position.\n *\n * @example\n * ```tsx\n * // Dynamic: match by param value (inside a dropdown's renderOption):\n * <AgentTarget action=\"filter_by_tag\" param=\"tag_name\" value={option.label}>\n * <DropdownOption>{option.label}</DropdownOption>\n * </AgentTarget>\n *\n * // Static: match by name (inside a popover that mounts lazily):\n * <AgentTarget action=\"toggle_frozen_columns\" name=\"freeze-btn\">\n * <button>Freeze columns</button>\n * </AgentTarget>\n * ```\n */\nexport function AgentTarget({ action, param, value, name, children }: AgentTargetProps) {\n const id = useId();\n const wrapperRef = useRef<HTMLDivElement>(null);\n const context = useContext(AgentActionContext);\n\n if (!context) {\n throw new Error('AgentTarget must be used within an AgentActionProvider');\n }\n\n const { registerTarget, unregisterTarget } = context;\n\n useEffect(() => {\n const element = wrapperRef.current?.firstElementChild as HTMLElement | null;\n if (element) {\n registerTarget(id, { action, param, value, name, element });\n }\n return () => unregisterTarget(id);\n }, [id, action, param, value, name, registerTarget, unregisterTarget]);\n\n return (\n <div ref={wrapperRef} style={{ display: 'contents' }}>\n {children}\n </div>\n );\n}\n","import { useContext } from 'react';\nimport type { AgentActionContextValue } from '../core/types';\nimport { AgentActionContext } from '../components/AgentActionProvider';\n\nexport function useAgentActions(): AgentActionContextValue {\n const context = useContext(AgentActionContext);\n if (!context) {\n throw new Error('useAgentActions must be used within an AgentActionProvider');\n }\n return context;\n}\n","import React, { useState, useCallback, useRef, useEffect } from 'react';\nimport { useAgentActions } from '../hooks/useAgentActions';\nimport type { AvailableAction, ExecutionResult, ToolSchema } from '../core/types';\n\ninterface AgentDevToolsProps {\n /** Default open state. */\n defaultOpen?: boolean;\n}\n\ninterface LogEntry {\n id: number;\n action: string;\n params?: Record<string, unknown>;\n result?: ExecutionResult;\n timestamp: number;\n}\n\nlet logId = 0;\n\nconst PANEL_WIDTH = 440;\n\n/**\n * Extract parameter fields from a schema's JSON Schema properties.\n */\nfunction getSchemaFields(\n schemas: ToolSchema[],\n actionName: string,\n): { name: string; type: string; description?: string; enumValues?: string[]; isRequired: boolean }[] {\n const schema = schemas.find((s) => s.name === actionName);\n if (!schema?.parameters) return [];\n\n const params = schema.parameters as Record<string, unknown>;\n const properties = (params.properties ?? {}) as Record<string, Record<string, unknown>>;\n const required = ((params.required ?? []) as string[]);\n\n return Object.entries(properties).map(([name, prop]) => ({\n name,\n type: (prop.type as string) ?? 'string',\n description: prop.description as string | undefined,\n enumValues: prop.enum as string[] | undefined,\n isRequired: required.includes(name),\n }));\n}\n\nexport function AgentDevTools({ defaultOpen = false }: AgentDevToolsProps) {\n const { availableActions, execute, isExecuting, mode, schemas } = useAgentActions();\n const [open, setOpen] = useState(defaultOpen);\n const [log, setLog] = useState<LogEntry[]>([]);\n const [expandedAction, setExpandedAction] = useState<string | null>(null);\n const [paramInputs, setParamInputs] = useState<Record<string, Record<string, string>>>({});\n const [filter, setFilter] = useState('');\n const [tab, setTab] = useState<'actions' | 'log'>('actions');\n const logEndRef = useRef<HTMLDivElement>(null);\n\n useEffect(() => {\n if (tab === 'log') logEndRef.current?.scrollIntoView({ behavior: 'smooth' });\n }, [log, tab]);\n\n const setFieldValue = useCallback((actionName: string, fieldName: string, value: string) => {\n setParamInputs((prev) => ({\n ...prev,\n [actionName]: { ...prev[actionName], [fieldName]: value },\n }));\n }, []);\n\n const handleExecute = useCallback(\n async (action: AvailableAction) => {\n const entryId = ++logId;\n let params: Record<string, unknown> | undefined;\n\n const fields = getSchemaFields(schemas, action.name);\n const rawInputs = paramInputs[action.name];\n\n if (fields.length > 0 && rawInputs) {\n params = {};\n for (const field of fields) {\n const raw = rawInputs[field.name];\n if (raw === undefined || raw === '') continue;\n\n if (field.type === 'number' || field.type === 'integer') {\n params[field.name] = Number(raw);\n } else if (field.type === 'boolean') {\n params[field.name] = raw === 'true';\n } else if (field.type === 'array') {\n try {\n params[field.name] = JSON.parse(raw);\n } catch {\n setLog((prev) => [\n ...prev,\n {\n id: entryId,\n action: action.name,\n timestamp: Date.now(),\n result: { success: false, actionName: action.name, error: `Invalid JSON for ${field.name}` },\n },\n ]);\n return;\n }\n } else {\n params[field.name] = raw;\n }\n }\n }\n\n setLog((prev) => [...prev, { id: entryId, action: action.name, params, timestamp: Date.now() }]);\n const result = await execute(action.name, params);\n setLog((prev) => prev.map((e) => (e.id === entryId ? { ...e, result } : e)));\n },\n [execute, paramInputs, schemas],\n );\n\n const filtered = filter\n ? availableActions.filter((a) => a.name.includes(filter) || a.description.includes(filter))\n : availableActions;\n\n // Toggle button\n if (!open) {\n return (\n <button\n onClick={() => setOpen(true)}\n style={{\n position: 'fixed',\n bottom: 16,\n right: 16,\n zIndex: 99990,\n height: 36,\n paddingLeft: 12,\n paddingRight: 14,\n borderRadius: 18,\n border: 'none',\n cursor: 'pointer',\n background: '#3b82f6',\n color: 'white',\n fontSize: 13,\n fontWeight: 600,\n fontFamily: 'system-ui, sans-serif',\n boxShadow: '0 2px 12px rgba(59,130,246,0.4)',\n display: 'flex',\n alignItems: 'center',\n gap: 6,\n }}\n >\n <span style={{ fontSize: 16 }}>⚙</span>\n Agent · {availableActions.length}\n </button>\n );\n }\n\n return (\n <>\n {/* Backdrop */}\n <div\n onClick={() => setOpen(false)}\n style={{\n position: 'fixed',\n inset: 0,\n zIndex: 99989,\n background: 'rgba(0,0,0,0.15)',\n }}\n />\n\n {/* Side panel */}\n <div\n style={{\n position: 'fixed',\n top: 0,\n right: 0,\n bottom: 0,\n zIndex: 99990,\n width: PANEL_WIDTH,\n display: 'flex',\n flexDirection: 'column',\n background: '#0f172a',\n color: '#e2e8f0',\n boxShadow: '-4px 0 24px rgba(0,0,0,0.3)',\n fontFamily: 'system-ui, -apple-system, sans-serif',\n fontSize: 13,\n }}\n >\n {/* Header */}\n <div\n style={{\n padding: '16px 20px',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n borderBottom: '1px solid #1e293b',\n }}\n >\n <div>\n <div style={{ fontWeight: 700, fontSize: 15 }}>Agent DevTools</div>\n <div style={{ fontSize: 12, color: '#64748b', marginTop: 2 }}>\n {availableActions.length} actions registered · {mode} mode\n </div>\n </div>\n <button onClick={() => setOpen(false)} style={closeBtnStyle}>\n ✕\n </button>\n </div>\n\n {/* Tabs */}\n <div style={{ display: 'flex', borderBottom: '1px solid #1e293b' }}>\n <button onClick={() => setTab('actions')} style={tabStyle(tab === 'actions')}>\n Actions\n </button>\n <button onClick={() => setTab('log')} style={tabStyle(tab === 'log')}>\n Log {log.length > 0 && `(${log.length})`}\n </button>\n </div>\n\n {/* Content */}\n {tab === 'actions' ? (\n <div style={{ flex: 1, overflowY: 'auto', minHeight: 0 }}>\n {/* Filter */}\n <div style={{ padding: '12px 20px' }}>\n <input\n value={filter}\n onChange={(e) => setFilter(e.target.value)}\n placeholder=\"Filter actions...\"\n style={filterInputStyle}\n />\n </div>\n\n {filtered.length > 0 && filtered.map((action) => (\n <ActionRow\n key={action.name}\n action={action}\n schemas={schemas}\n expanded={expandedAction === action.name}\n onToggle={() => setExpandedAction(expandedAction === action.name ? null : action.name)}\n fieldValues={paramInputs[action.name] ?? {}}\n onFieldChange={(field, value) => setFieldValue(action.name, field, value)}\n onExecute={() => handleExecute(action)}\n isExecuting={isExecuting}\n />\n ))}\n\n {filtered.length === 0 && (\n <div style={{ padding: 20, color: '#475569', textAlign: 'center' }}>\n {filter ? 'No matching actions' : 'No actions registered'}\n </div>\n )}\n </div>\n ) : (\n <div style={{ flex: 1, overflowY: 'auto', minHeight: 0 }}>\n {log.length === 0 ? (\n <div style={{ padding: 20, color: '#475569', textAlign: 'center' }}>\n No executions yet. Run an action to see results here.\n </div>\n ) : (\n <>\n <div style={{ padding: '8px 20px', display: 'flex', justifyContent: 'flex-end' }}>\n <button onClick={() => setLog([])} style={clearBtnStyle}>\n Clear\n </button>\n </div>\n {log.map((entry) => (\n <div key={entry.id} style={{ padding: '10px 20px', borderBottom: '1px solid #1e293b' }}>\n <div style={{ display: 'flex', alignItems: 'center', gap: 8 }}>\n <StatusDot result={entry.result} />\n <span style={{ fontWeight: 600, fontSize: 13 }}>{entry.action}</span>\n <span style={{ marginLeft: 'auto', fontSize: 11, color: '#475569' }}>\n {new Date(entry.timestamp).toLocaleTimeString()}\n </span>\n </div>\n {entry.params && <pre style={logParamsStyle}>{JSON.stringify(entry.params, null, 2)}</pre>}\n {entry.result && !entry.result.success && (\n <div style={{ marginTop: 4, fontSize: 12, color: '#f87171' }}>{entry.result.error}</div>\n )}\n </div>\n ))}\n <div ref={logEndRef} />\n </>\n )}\n </div>\n )}\n </div>\n </>\n );\n}\n\nfunction ActionRow({\n action,\n schemas,\n expanded,\n onToggle,\n fieldValues,\n onFieldChange,\n onExecute,\n isExecuting,\n badge,\n}: {\n action: AvailableAction;\n schemas: ToolSchema[];\n expanded: boolean;\n onToggle: () => void;\n fieldValues: Record<string, string>;\n onFieldChange: (field: string, value: string) => void;\n onExecute: () => void;\n isExecuting: boolean;\n badge?: string;\n}) {\n const fields = getSchemaFields(schemas, action.name);\n\n return (\n <div\n style={{\n padding: '10px 20px',\n borderBottom: '1px solid #1e293b',\n opacity: action.disabled ? 0.5 : 1,\n cursor: 'pointer',\n }}\n onKeyDown={(e) => {\n if (e.key === 'Enter' && expanded && !action.disabled && !isExecuting) {\n e.preventDefault();\n onExecute();\n }\n }}\n >\n <div onClick={onToggle} style={{ display: 'flex', alignItems: 'center', gap: 8 }}>\n <span style={{ color: '#475569', fontSize: 10, flexShrink: 0 }}>{expanded ? '\\u25BC' : '\\u25B6'}</span>\n <div style={{ flex: 1, minWidth: 0 }}>\n <div style={{ display: 'flex', alignItems: 'center', gap: 6 }}>\n <span style={{ fontWeight: 600, color: '#93c5fd' }}>{action.name}</span>\n {badge && (\n <span\n style={{\n fontSize: 9,\n padding: '1px 5px',\n borderRadius: 3,\n background: '#1e3a5f',\n color: '#60a5fa',\n fontWeight: 600,\n }}\n >\n {badge}\n </span>\n )}\n {action.disabled && (\n <span\n style={{\n fontSize: 9,\n padding: '1px 5px',\n borderRadius: 3,\n background: '#3f1d1d',\n color: '#f87171',\n fontWeight: 600,\n }}\n >\n disabled\n </span>\n )}\n </div>\n <div style={{ color: '#94a3b8', fontSize: 12, marginTop: 2 }}>\n {action.disabled && action.disabledReason ? action.disabledReason : action.description}\n </div>\n </div>\n <button\n onClick={(e) => {\n e.stopPropagation();\n onExecute();\n }}\n disabled={action.disabled || isExecuting}\n style={{\n padding: '5px 14px',\n borderRadius: 6,\n border: 'none',\n fontSize: 12,\n fontWeight: 600,\n cursor: action.disabled ? 'not-allowed' : 'pointer',\n background: action.disabled ? '#334155' : '#3b82f6',\n color: 'white',\n flexShrink: 0,\n }}\n >\n {isExecuting ? '···' : 'Run'}\n </button>\n </div>\n\n {expanded && (\n <div style={{ marginTop: 10, marginLeft: 18 }}>\n {fields.length > 0 ? (\n <div style={{ display: 'flex', flexDirection: 'column', gap: 8 }}>\n {fields.map((field) => (\n <div key={field.name}>\n <label style={{ fontSize: 11, color: '#64748b', display: 'block', marginBottom: 3 }}>\n {field.name}\n {field.isRequired && <span style={{ color: '#f87171', marginLeft: 2 }}>*</span>}\n {field.description && (\n <span style={{ color: '#475569', marginLeft: 6 }}>{field.description}</span>\n )}\n </label>\n {field.enumValues ? (\n <select\n value={fieldValues[field.name] ?? ''}\n onChange={(e) => onFieldChange(field.name, e.target.value)}\n style={fieldSelectStyle}\n >\n <option value=\"\">Select...</option>\n {field.enumValues.map((v) => (\n <option key={v} value={v}>\n {v}\n </option>\n ))}\n </select>\n ) : field.type === 'boolean' ? (\n <select\n value={fieldValues[field.name] ?? ''}\n onChange={(e) => onFieldChange(field.name, e.target.value)}\n style={fieldSelectStyle}\n >\n <option value=\"\">Select...</option>\n <option value=\"true\">true</option>\n <option value=\"false\">false</option>\n </select>\n ) : field.type === 'array' ? (\n <textarea\n value={fieldValues[field.name] ?? ''}\n onChange={(e) => onFieldChange(field.name, e.target.value)}\n placeholder='[1, 2, 3]'\n rows={2}\n style={textareaStyle}\n />\n ) : (\n <input\n type={field.type === 'number' || field.type === 'integer' ? 'number' : 'text'}\n value={fieldValues[field.name] ?? ''}\n onChange={(e) => onFieldChange(field.name, e.target.value)}\n placeholder={field.description ?? field.name}\n style={fieldInputStyle}\n />\n )}\n </div>\n ))}\n </div>\n ) : (\n <div style={{ fontSize: 12, color: '#475569' }}>No parameters</div>\n )}\n </div>\n )}\n </div>\n );\n}\n\n\nfunction StatusDot({ result }: { result?: ExecutionResult }) {\n const color = !result ? '#fbbf24' : result.success ? '#4ade80' : '#f87171';\n return (\n <span\n style={{\n width: 8,\n height: 8,\n borderRadius: '50%',\n background: color,\n display: 'inline-block',\n flexShrink: 0,\n }}\n />\n );\n}\n\nconst closeBtnStyle: React.CSSProperties = {\n width: 28,\n height: 28,\n borderRadius: 6,\n border: '1px solid #334155',\n background: 'transparent',\n color: '#94a3b8',\n cursor: 'pointer',\n fontSize: 14,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n};\n\nconst tabStyle = (active: boolean): React.CSSProperties => ({\n flex: 1,\n padding: '10px 0',\n border: 'none',\n cursor: 'pointer',\n fontSize: 13,\n fontWeight: 600,\n fontFamily: 'inherit',\n background: active ? '#1e293b' : 'transparent',\n color: active ? '#e2e8f0' : '#64748b',\n borderBottom: active ? '2px solid #3b82f6' : '2px solid transparent',\n});\n\nconst filterInputStyle: React.CSSProperties = {\n width: '100%',\n background: '#1e293b',\n border: '1px solid #334155',\n borderRadius: 6,\n padding: '8px 12px',\n color: '#e2e8f0',\n fontSize: 13,\n outline: 'none',\n fontFamily: 'inherit',\n};\n\nconst clearBtnStyle: React.CSSProperties = {\n padding: '4px 10px',\n borderRadius: 4,\n border: '1px solid #334155',\n background: 'transparent',\n color: '#64748b',\n cursor: 'pointer',\n fontSize: 11,\n fontFamily: 'inherit',\n};\n\nconst fieldInputStyle: React.CSSProperties = {\n width: '100%',\n background: '#1e293b',\n border: '1px solid #334155',\n borderRadius: 6,\n padding: '7px 10px',\n color: '#e2e8f0',\n fontSize: 12,\n outline: 'none',\n fontFamily: 'inherit',\n};\n\nconst fieldSelectStyle: React.CSSProperties = {\n width: '100%',\n background: '#1e293b',\n border: '1px solid #334155',\n borderRadius: 6,\n padding: '7px 10px',\n color: '#e2e8f0',\n fontSize: 12,\n outline: 'none',\n fontFamily: 'inherit',\n cursor: 'pointer',\n};\n\nconst textareaStyle: React.CSSProperties = {\n width: '100%',\n background: '#1e293b',\n border: '1px solid #334155',\n borderRadius: 6,\n padding: '8px 10px',\n color: '#e2e8f0',\n fontSize: 12,\n outline: 'none',\n resize: 'vertical',\n fontFamily: 'ui-monospace, SFMono-Regular, Menlo, monospace',\n};\n\nconst logParamsStyle: React.CSSProperties = {\n marginTop: 4,\n padding: '6px 8px',\n background: '#1e293b',\n borderRadius: 4,\n fontSize: 11,\n color: '#94a3b8',\n overflow: 'auto',\n maxHeight: 80,\n fontFamily: 'ui-monospace, SFMono-Regular, Menlo, monospace',\n};\n","import { useContext, useEffect, useRef } from 'react';\nimport type { ExecutionTarget } from '../core/types';\nimport { AgentActionContext } from '../components/AgentActionProvider';\n\ninterface StepConfig {\n label: string;\n fromParam?: string;\n fromTarget?: string;\n setParam?: string;\n setValue?: string;\n onSetValue?: (value: unknown) => void;\n prepareView?: (params: Record<string, unknown>) => void | Promise<void>;\n}\n\nexport interface AgentActionConfig {\n name: string;\n description: string;\n parameters?: unknown;\n onExecute?: (params: Record<string, unknown>) => void | Promise<void>;\n disabled?: boolean;\n disabledReason?: string;\n steps?: StepConfig[];\n}\n\n/**\n * Hook-based action registration for actions that don't wrap a single element.\n * Use this for per-row actions where AgentTargets are on scattered elements\n * and the action resolves to them via fromParam/fromTarget.\n *\n * Accepts a single config or an array to batch-register multiple actions.\n *\n * For actions that wrap a visible element, prefer the <AgentAction> component.\n */\nexport function useAgentAction(config: AgentActionConfig | AgentActionConfig[]): void {\n const context = useContext(AgentActionContext);\n if (!context) {\n throw new Error('useAgentAction must be used within an AgentActionProvider');\n }\n\n const configRef = useRef(config);\n configRef.current = config;\n\n const { registerAction, unregisterAction } = context;\n\n useEffect(() => {\n const items = Array.isArray(configRef.current) ? configRef.current : [configRef.current];\n\n for (const item of items) {\n const onExecute = item.onExecute;\n const steps = item.steps;\n\n registerAction({\n name: item.name,\n description: item.description,\n parameters: item.parameters,\n onExecute: onExecute\n ? (params: Record<string, unknown>) => onExecute(params)\n : undefined,\n disabled: item.disabled ?? false,\n disabledReason: item.disabledReason,\n getExecutionTargets: (): ExecutionTarget[] => {\n if (!steps?.length) return [];\n return steps.map((s) => ({\n label: s.label,\n element: null,\n fromParam: s.fromParam,\n fromTarget: s.fromTarget,\n setParam: s.setParam,\n setValue: s.setValue,\n onSetValue: s.onSetValue,\n prepareView: s.prepareView,\n }));\n },\n });\n }\n\n return () => {\n const items = Array.isArray(configRef.current) ? configRef.current : [configRef.current];\n for (const item of items) {\n unregisterAction(item.name);\n }\n };\n }, [registerAction, unregisterAction]);\n}\n","import { useCallback } from 'react';\nimport type { ExecutionResult } from '../core/types';\nimport { useAgentActions } from './useAgentActions';\n\n/**\n * Wraps an existing command handler with agent action routing.\n *\n * When a command arrives, if a matching `<AgentAction>` is mounted and enabled,\n * it routes through `execute()` for visual guided execution. Otherwise it falls\n * through to the original handler.\n *\n * Returns the `ExecutionResult` for registered actions, or `undefined` for\n * fallback commands.\n *\n * Works with any command shape — you provide `getActionName` to extract the\n * action name from your command object.\n *\n * @example\n * ```tsx\n * const handleCommand = useAgentCommandRouter(\n * existingHandler,\n * (cmd) => cmd.action,\n * );\n * ```\n */\nexport function useAgentCommandRouter<T>(\n fallback: ((command: T) => void | Promise<void>) | null,\n getActionName: (command: T) => string,\n): (command: T) => Promise<ExecutionResult | undefined> {\n const { execute, availableActions } = useAgentActions();\n\n return useCallback(\n async (command: T): Promise<ExecutionResult | undefined> => {\n const actionName = getActionName(command);\n const isRegistered = availableActions.some((a) => a.name === actionName && !a.disabled);\n\n if (isRegistered) {\n return await execute(actionName, command as Record<string, unknown>);\n }\n\n await fallback?.(command);\n return undefined;\n },\n [execute, availableActions, fallback, getActionName],\n );\n}\n","/**\n * Define an action at import time so its schema is available before the component mounts.\n * Pass defined actions to `<AgentActionProvider registry={[...]}>` for single-roundtrip execution.\n *\n * @example\n * ```ts\n * export const updatePrice = defineAction({\n * name: 'update_price',\n * description: 'Update price markup on a property',\n * parameters: z.object({ property_id: z.string(), markup: z.number() }),\n * route: (p) => `/properties/${p.property_id}/pricing`,\n * });\n * ```\n */\nexport interface ActionDefinition<TParams = Record<string, unknown>> {\n readonly name: string;\n readonly description: string;\n /** Zod schema for action parameters. */\n readonly parameters?: unknown;\n /** Client-side route to navigate to before executing. */\n readonly route?: (params: TParams) => string;\n /** Handler for background execution (no UI component needed). */\n readonly onExecute?: (params: TParams) => void | Promise<void>;\n /**\n * Chain of action names to execute sequentially before this action.\n * Each action in the chain is visually executed (spotlight → click), and the next\n * action is waited on to mount before proceeding. This lets the user see the full\n * navigation path instead of being teleported directly to a route.\n */\n readonly navigateVia?: string[];\n /**\n * How long (ms) to wait for this action's component to mount after navigation.\n * Defaults to 5000ms. Set higher for pages that load slowly\n */\n readonly mountTimeout?: number;\n}\n\nexport function defineAction<TParams = Record<string, unknown>>(config: {\n name: string;\n description: string;\n parameters?: unknown;\n route?: (params: TParams) => string;\n onExecute?: (params: TParams) => void | Promise<void>;\n navigateVia?: string[];\n mountTimeout?: number;\n}): ActionDefinition<TParams> {\n return {\n name: config.name,\n description: config.description,\n parameters: config.parameters,\n route: config.route,\n onExecute: config.onExecute,\n navigateVia: config.navigateVia,\n mountTimeout: config.mountTimeout,\n };\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/core/schemaGenerator.ts","../src/executor/visualExecutor.ts","../src/components/AgentActionProvider.tsx","../src/components/AgentAction.tsx","../src/components/AgentStep.tsx","../src/components/AgentTarget.tsx","../src/hooks/useAgentActions.ts","../src/components/AgentDevTools.tsx","../src/hooks/useAgentAction.ts","../src/hooks/useAgentCommandRouter.ts","../src/core/defineAction.ts"],"names":["createContext","useRef","useState","useEffect","useCallback","result","useMemo","useContext","jsx","useId","jsxs","Fragment","items"],"mappings":"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","file":"index.js","sourcesContent":["import type { RegisteredAction, ToolSchema } from './types';\n\ntype JsonSchema = Record<string, unknown>;\n\nexport function zodToJsonSchema(schema: unknown): JsonSchema {\n // Zod v4+: use built-in toJSONSchema() if available\n if (typeof (schema as any).toJSONSchema === 'function') {\n try {\n const result = (schema as any).toJSONSchema();\n // Remove $schema key — not needed for tool schemas\n delete result.$schema;\n return result;\n } catch {\n // Fall through to manual conversion\n }\n }\n\n // Zod v3: manual conversion via _def.typeName\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const def = (schema as any)._def;\n const description = (schema as any).description;\n\n switch (def.typeName) {\n case 'ZodString': {\n const result: JsonSchema = { type: 'string' };\n if (description) result.description = description;\n if (def.checks) {\n for (const check of def.checks) {\n if (check.kind === 'min') result.minLength = check.value;\n if (check.kind === 'max') result.maxLength = check.value;\n }\n }\n return result;\n }\n\n case 'ZodNumber': {\n const result: JsonSchema = { type: 'number' };\n if (description) result.description = description;\n if (def.checks) {\n for (const check of def.checks) {\n if (check.kind === 'int') result.type = 'integer';\n if (check.kind === 'min')\n result[check.inclusive ? 'minimum' : 'exclusiveMinimum'] = check.value;\n if (check.kind === 'max')\n result[check.inclusive ? 'maximum' : 'exclusiveMaximum'] = check.value;\n }\n }\n return result;\n }\n\n case 'ZodBoolean': {\n const result: JsonSchema = { type: 'boolean' };\n if (description) result.description = description;\n return result;\n }\n\n case 'ZodArray': {\n const result: JsonSchema = {\n type: 'array',\n items: zodToJsonSchema(def.type),\n };\n if (description) result.description = description;\n if (def.minLength !== null && def.minLength !== undefined)\n result.minItems = def.minLength.value;\n if (def.maxLength !== null && def.maxLength !== undefined)\n result.maxItems = def.maxLength.value;\n return result;\n }\n\n case 'ZodObject': {\n const shape = def.shape();\n const properties: Record<string, JsonSchema> = {};\n const required: string[] = [];\n\n for (const [key, value] of Object.entries(shape)) {\n properties[key] = zodToJsonSchema(value);\n if (!(value as any).isOptional()) {\n required.push(key);\n }\n }\n\n const result: JsonSchema = { type: 'object', properties };\n if (required.length > 0) result.required = required;\n if (description) result.description = description;\n return result;\n }\n\n case 'ZodEnum': {\n const result: JsonSchema = { type: 'string', enum: [...def.values] };\n if (description) result.description = description;\n return result;\n }\n\n case 'ZodLiteral': {\n const result: JsonSchema = { type: typeof def.value, const: def.value };\n if (description) result.description = description;\n return result;\n }\n\n case 'ZodUnion':\n case 'ZodDiscriminatedUnion': {\n const options = def.options as unknown[];\n const result: JsonSchema = { anyOf: options.map((o) => zodToJsonSchema(o)) };\n if (description) result.description = description;\n return result;\n }\n\n case 'ZodOptional': {\n const inner = zodToJsonSchema(def.innerType);\n if (description && !inner.description) inner.description = description;\n return inner;\n }\n\n case 'ZodNullable': {\n const inner = zodToJsonSchema(def.innerType);\n if (description && !inner.description) inner.description = description;\n return inner;\n }\n\n case 'ZodDefault': {\n const inner = zodToJsonSchema(def.innerType);\n if (description && !inner.description) inner.description = description;\n return inner;\n }\n\n case 'ZodRecord': {\n const result: JsonSchema = {\n type: 'object',\n additionalProperties: zodToJsonSchema(def.valueType),\n };\n if (description) result.description = description;\n return result;\n }\n\n case 'ZodNull': {\n return { type: 'null', ...(description && { description }) };\n }\n\n case 'ZodAny':\n case 'ZodUnknown': {\n return description ? { description } : {};\n }\n\n default: {\n return { type: 'object', ...(description && { description }) };\n }\n }\n}\n\nexport function generateToolSchemas(actions: RegisteredAction[]): ToolSchema[] {\n return actions\n .filter((a) => !a.disabled)\n .map((action) => ({\n name: action.name,\n description: action.description,\n parameters: action.parameters\n ? zodToJsonSchema(action.parameters)\n : { type: 'object' as const, properties: {} },\n }));\n}\n\n","import type { RegisteredAction, ExecutionResult, ExecutionTarget, ExecutorConfig } from '../core/types';\n\nlet stylesInjected = false;\n\nfunction injectStyles(): void {\n if (stylesInjected) return;\n if (typeof document === 'undefined') return;\n stylesInjected = true;\n\n const style = document.createElement('style');\n style.id = 'polter-styles';\n style.textContent = `\n @keyframes polter-pulse {\n 0%, 100% { opacity: 1; transform: scale(1); }\n 50% { opacity: 0.7; transform: scale(1.02); }\n }\n @keyframes polter-fade-in {\n from { opacity: 0; transform: translateX(-50%) translateY(4px); }\n to { opacity: 1; transform: translateX(-50%) translateY(0); }\n }\n @keyframes polter-cursor-click {\n 0% { transform: scale(1); }\n 50% { transform: scale(0.85); }\n 100% { transform: scale(1); }\n }\n `;\n document.head.appendChild(style);\n}\n\ninterface OverlayHandle {\n remove: () => void;\n}\n\nconst CURSOR_SVG = `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\">\n <path d=\"M5.5 3.21V20.8c0 .45.54.67.85.35l4.86-4.86a.5.5 0 0 1 .35-.15h6.87c.48 0 .68-.61.3-.92L5.95 2.87a.5.5 0 0 0-.45.34z\" fill=\"#1e293b\" stroke=\"white\" stroke-width=\"1.5\" stroke-linejoin=\"round\"/>\n</svg>`;\n\n/**\n * Full-screen overlay that blocks user interaction during guided execution.\n * Persists across steps so there's no gap where clicks can leak through.\n */\nfunction createBlockingOverlay(): OverlayHandle {\n const overlay = document.createElement('div');\n overlay.className = 'polter-blocking-overlay';\n overlay.style.cssText = `\n position:fixed;\n inset:0;\n z-index:99997;\n cursor:not-allowed;\n `;\n document.body.appendChild(overlay);\n return { remove: () => overlay.remove() };\n}\n\nfunction createCursor(): OverlayHandle {\n injectStyles();\n\n const cursor = document.createElement('div');\n cursor.className = 'polter-cursor';\n cursor.innerHTML = CURSOR_SVG;\n cursor.style.cssText = `\n position:fixed;\n left:-40px;\n top:-40px;\n z-index:100000;\n pointer-events:none;\n transition:left 0.4s cubic-bezier(0.4,0,0.2,1),top 0.4s cubic-bezier(0.4,0,0.2,1);\n filter:drop-shadow(0 2px 4px rgba(0,0,0,0.3));\n `;\n document.body.appendChild(cursor);\n\n return { remove: () => cursor.remove() };\n}\n\nfunction moveCursorTo(target: HTMLElement, signal?: AbortSignal): Promise<void> {\n const cursor = document.querySelector('.polter-cursor') as HTMLElement | null;\n if (!cursor) return Promise.resolve();\n\n const rect = target.getBoundingClientRect();\n cursor.style.left = `${rect.left + rect.width / 2}px`;\n cursor.style.top = `${rect.top + rect.height / 2}px`;\n\n return delay(450, signal);\n}\n\nfunction animateCursorClick(): void {\n const cursor = document.querySelector('.polter-cursor') as HTMLElement | null;\n if (!cursor) return;\n cursor.style.animation = 'polter-cursor-click 0.2s ease';\n cursor.addEventListener('animationend', () => { cursor.style.animation = ''; }, { once: true });\n}\n\ninterface SpotlightHandle {\n remove: () => void;\n}\n\nfunction createSpotlight(\n target: HTMLElement,\n label: string,\n config: ExecutorConfig,\n): SpotlightHandle {\n injectStyles();\n\n const rect = target.getBoundingClientRect();\n const padding = config.spotlightPadding;\n const overlayRgba = `rgba(0, 0, 0, ${config.overlayOpacity})`;\n\n const container = document.createElement('div');\n container.className = 'polter-spotlight-container';\n container.style.cssText = 'position:fixed;inset:0;z-index:99998;pointer-events:none;';\n\n // Box-shadow creates the dimmed overlay with a hole for the target\n const spotlight = document.createElement('div');\n spotlight.className = 'polter-spotlight';\n spotlight.style.cssText = `\n position:fixed;\n left:${rect.left - padding}px;\n top:${rect.top - padding}px;\n width:${rect.width + padding * 2}px;\n height:${rect.height + padding * 2}px;\n border-radius:8px;\n box-shadow:0 0 0 9999px ${overlayRgba};\n z-index:99998;\n pointer-events:none;\n transition:all 0.3s ease;\n `;\n\n // Pulsing ring around the target\n const ring = document.createElement('div');\n ring.className = 'polter-ring';\n ring.style.cssText = `\n position:fixed;\n left:${rect.left - padding - 2}px;\n top:${rect.top - padding - 2}px;\n width:${rect.width + padding * 2 + 4}px;\n height:${rect.height + padding * 2 + 4}px;\n border:2px solid #3b82f6;\n border-radius:10px;\n z-index:99999;\n pointer-events:none;\n animation:polter-pulse 1.5s ease-in-out infinite;\n `;\n\n container.appendChild(spotlight);\n container.appendChild(ring);\n\n // Tooltip\n if (label && config.tooltipEnabled) {\n const tooltip = document.createElement('div');\n tooltip.className = 'polter-tooltip';\n tooltip.textContent = label;\n\n const spaceBelow = window.innerHeight - rect.bottom - padding;\n const isBelow = spaceBelow > 60;\n const tooltipTop = isBelow\n ? rect.bottom + padding + 12\n : rect.top - padding - 44;\n\n tooltip.style.cssText = `\n position:fixed;\n left:${rect.left + rect.width / 2}px;\n top:${tooltipTop}px;\n transform:translateX(-50%);\n background:#1e293b;\n color:#f8fafc;\n padding:8px 14px;\n border-radius:6px;\n font-size:13px;\n font-weight:500;\n line-height:1.4;\n white-space:nowrap;\n z-index:99999;\n pointer-events:none;\n animation:polter-fade-in 0.2s ease;\n box-shadow:0 4px 12px rgba(0,0,0,0.15);\n `;\n\n container.appendChild(tooltip);\n }\n\n document.body.appendChild(container);\n\n return {\n remove: () => container.remove(),\n };\n}\n\nfunction delay(ms: number, signal?: AbortSignal): Promise<void> {\n return new Promise((resolve, reject) => {\n if (signal?.aborted) {\n reject(new DOMException('Aborted', 'AbortError'));\n return;\n }\n const timer = setTimeout(resolve, ms);\n signal?.addEventListener(\n 'abort',\n () => {\n clearTimeout(timer);\n reject(new DOMException('Aborted', 'AbortError'));\n },\n { once: true },\n );\n });\n}\n\n/**\n * Set an input's value in a way that triggers React's onChange.\n */\nfunction setNativeInputValue(input: HTMLInputElement, value: string): void {\n const nativeSetter =\n Object.getOwnPropertyDescriptor(HTMLInputElement.prototype, 'value')?.set ??\n Object.getOwnPropertyDescriptor(HTMLTextAreaElement.prototype, 'value')?.set;\n\n if (nativeSetter) {\n nativeSetter.call(input, value);\n } else {\n input.value = value;\n }\n\n input.dispatchEvent(new Event('input', { bubbles: true }));\n input.dispatchEvent(new Event('change', { bubbles: true }));\n}\n\n/**\n * Simulate typing into an input character by character.\n */\nasync function simulateTyping(element: HTMLElement, value: string, signal?: AbortSignal): Promise<void> {\n const input = element as HTMLInputElement;\n input.focus();\n\n // Clear existing value first\n if (input.value) {\n setNativeInputValue(input, '');\n await delay(30, signal);\n }\n\n // Type each character with a small delay\n const charDelay = Math.max(15, Math.min(40, 800 / value.length));\n for (let i = 0; i < value.length; i++) {\n if (signal?.aborted) return;\n setNativeInputValue(input, value.slice(0, i + 1));\n await delay(charDelay, signal);\n }\n}\n\n/**\n * Resolve the element for a step. For static steps, returns the element directly.\n * For fromParam steps, polls the AgentTarget registry until a match is found.\n */\nasync function resolveStepElement(\n target: ExecutionTarget,\n actionName: string,\n params: Record<string, unknown>,\n config: ExecutorConfig,\n): Promise<HTMLElement | null> {\n // prepareView runs first (e.g. scroll virtualized list into view)\n if (target.prepareView) {\n await target.prepareView(params);\n await delay(200, config.signal);\n }\n\n // fromParam: resolve lazily from AgentTarget registry by param value.\n // For array params, resolve against the first element (spotlight one representative target).\n if (target.fromParam && config.resolveTarget) {\n const raw = params[target.fromParam];\n const paramValue = String(Array.isArray(raw) ? raw[0] ?? '' : raw ?? '');\n return config.resolveTarget(actionName, target.fromParam, paramValue, config.signal);\n }\n\n // fromTarget: resolve lazily from AgentTarget registry by name\n if (target.fromTarget && config.resolveNamedTarget) {\n return config.resolveNamedTarget(actionName, target.fromTarget, config.signal, params);\n }\n\n // Static element\n return target.element;\n}\n\nasync function executeInstant(\n action: RegisteredAction,\n params: Record<string, unknown>,\n): Promise<ExecutionResult> {\n try {\n if (action.onExecute) {\n await action.onExecute(params);\n } else {\n const targets = action.getExecutionTargets();\n for (const target of targets) {\n target.element?.click();\n }\n }\n return { success: true, actionName: action.name };\n } catch (err) {\n return { success: false, actionName: action.name, error: String(err) };\n }\n}\n\n/**\n * Check whether an element is visible and measurable.\n * Returns false for detached nodes and display:contents wrappers\n * (whose getBoundingClientRect() returns all zeros).\n */\nfunction isElementVisible(el: HTMLElement): boolean {\n if (!el.isConnected) return false;\n const rect = el.getBoundingClientRect();\n return rect.width > 0 && rect.height > 0;\n}\n\nasync function executeGuided(\n action: RegisteredAction,\n params: Record<string, unknown>,\n config: ExecutorConfig,\n): Promise<ExecutionResult> {\n const targets = action.getExecutionTargets();\n\n // No targets, or all targets are invisible (e.g. display:contents wrappers) — run directly\n if (targets.length === 0 || targets.every((t) => t.element && !isElementVisible(t.element))) {\n if (action.onExecute) {\n await action.onExecute(params);\n }\n return { success: true, actionName: action.name };\n }\n\n let spotlight: SpotlightHandle | null = null;\n let cursor: OverlayHandle | null = null;\n const blocker = createBlockingOverlay();\n\n if (config.cursorEnabled) {\n cursor = createCursor();\n }\n\n try {\n for (let i = 0; i < targets.length; i++) {\n const target = targets[i];\n const isLast = i === targets.length - 1;\n\n // Resolve element (may be lazy for fromParam steps)\n const element = await resolveStepElement(target, action.name, params, config);\n if (!element) continue;\n\n // Element not in DOM (never rendered) — skip for single-step, abort for multi-step\n if (!isElementVisible(element)) {\n if (targets.length > 1) {\n blocker.remove();\n cursor?.remove();\n return { success: false, actionName: action.name, error: `Step element not visible: \"${target.label}\"` };\n }\n continue;\n }\n\n // 1. Scroll into view\n element.scrollIntoView({ behavior: 'smooth', block: 'center' });\n await delay(300, config.signal);\n\n // 2. Move cursor to element\n if (cursor) {\n await moveCursorTo(element, config.signal);\n }\n\n // 3. Spotlight\n spotlight = createSpotlight(element, target.label, config);\n await delay(config.stepDelay, config.signal);\n\n // 4. Interact based on step type\n if (target.setParam) {\n // Type the param value into the input — find the actual input/textarea within the element\n const inputEl = (element.tagName === 'INPUT' || element.tagName === 'TEXTAREA')\n ? element\n : element.querySelector('input, textarea') ?? element;\n const value = String(params[target.setParam] ?? '');\n await simulateTyping(inputEl as HTMLElement, value, config.signal);\n } else if (target.setValue && target.onSetValue) {\n // Set value programmatically via callback\n const value = params[target.setValue];\n target.onSetValue(value);\n } else if (target.fromParam || target.fromTarget) {\n // Lazy-resolved step: always click the resolved target (dropdown option, popover button, etc.)\n animateCursorClick();\n element.click();\n } else if (action.onExecute) {\n // With onExecute: click intermediate steps (e.g. open dropdown),\n // skip clicking the last step (onExecute handles the action)\n if (!isLast) {\n animateCursorClick();\n element.click();\n }\n } else {\n // Without onExecute: click every step\n animateCursorClick();\n element.click();\n }\n\n // 5. Remove spotlight\n spotlight.remove();\n spotlight = null;\n\n if (!isLast) {\n await delay(200, config.signal);\n }\n }\n\n // 6. Call onExecute after visual sequence\n if (action.onExecute) {\n await action.onExecute(params);\n }\n\n blocker.remove();\n cursor?.remove();\n return { success: true, actionName: action.name };\n } catch (err) {\n // Clean up on error\n spotlight?.remove();\n blocker.remove();\n cursor?.remove();\n\n if (err instanceof DOMException && err.name === 'AbortError') {\n return { success: false, actionName: action.name, error: 'Execution cancelled' };\n }\n return { success: false, actionName: action.name, error: String(err) };\n }\n}\n\nexport async function executeAction(\n action: RegisteredAction,\n params: Record<string, unknown>,\n config: ExecutorConfig,\n): Promise<ExecutionResult> {\n if (config.mode === 'instant') {\n return executeInstant(action, params);\n }\n return executeGuided(action, params, config);\n}\n","import React, { createContext, useCallback, useEffect, useMemo, useRef, useState } from 'react';\nimport type {\n AgentActionContextValue,\n AgentActionProviderProps,\n AgentTargetEntry,\n AvailableAction,\n ExecutionResult,\n RegisteredAction,\n} from '../core/types';\nimport type { ActionDefinition } from '../core/defineAction';\nimport { generateToolSchemas } from '../core/schemaGenerator';\nimport { executeAction } from '../executor/visualExecutor';\n\nexport const AgentActionContext = createContext<AgentActionContextValue | null>(null);\n\n/** Convert an ActionDefinition to a schema-only RegisteredAction (no DOM targets). */\nfunction definitionToRegisteredAction(def: ActionDefinition<any>): RegisteredAction {\n return {\n name: def.name,\n description: def.description,\n parameters: def.parameters,\n onExecute: def.onExecute as RegisteredAction['onExecute'],\n disabled: false,\n disabledReason: undefined,\n getExecutionTargets: () => [],\n route: def.route as RegisteredAction['route'],\n navigateVia: def.navigateVia,\n mountTimeout: def.mountTimeout,\n };\n}\n\nexport function AgentActionProvider({\n mode = 'guided',\n stepDelay = 600,\n overlayOpacity = 0.5,\n spotlightPadding = 8,\n tooltipEnabled = true,\n cursorEnabled = true,\n children,\n onExecutionStart,\n onExecutionComplete,\n registry,\n navigate,\n}: AgentActionProviderProps) {\n const actionsRef = useRef<Map<string, RegisteredAction>>(new Map());\n const targetsRef = useRef<Map<string, AgentTargetEntry>>(new Map());\n /** Registry actions stored separately so they can be restored on component unmount. */\n const registryRef = useRef<Map<string, RegisteredAction>>(new Map());\n const navigateRef = useRef(navigate);\n navigateRef.current = navigate;\n const [version, setVersion] = useState(0);\n const [isExecuting, setIsExecuting] = useState(false);\n const currentExecutionRef = useRef<AbortController | null>(null);\n\n // Sync registry prop into actionsRef on mount and when registry changes.\n useEffect(() => {\n const newNames = new Set<string>();\n\n for (const def of registry ?? []) {\n newNames.add(def.name);\n const registryAction = definitionToRegisteredAction(def);\n registryRef.current.set(def.name, registryAction);\n\n // Only set in actionsRef if no component has already registered a richer version\n // (a component-backed action has DOM targets).\n const existing = actionsRef.current.get(def.name);\n if (!existing || existing.getExecutionTargets().length === 0) {\n actionsRef.current.set(def.name, registryAction);\n }\n }\n\n // Remove actions that were in the previous registry but not the new one.\n for (const name of registryRef.current.keys()) {\n if (!newNames.has(name)) {\n registryRef.current.delete(name);\n // Only remove from actionsRef if it's still the registry version (no component override).\n const current = actionsRef.current.get(name);\n if (current && current.getExecutionTargets().length === 0) {\n actionsRef.current.delete(name);\n }\n }\n }\n\n setVersion((v) => v + 1);\n }, [registry]);\n\n const registerAction = useCallback((action: RegisteredAction) => {\n const existing = actionsRef.current.get(action.name);\n\n // Preserve route/navigateVia from registry definition when a component upgrades the action.\n const registryAction = registryRef.current.get(action.name);\n if (registryAction) {\n if (!action.route) action.route = registryAction.route;\n if (!action.navigateVia) action.navigateVia = registryAction.navigateVia;\n if (action.mountTimeout == null) action.mountTimeout = registryAction.mountTimeout;\n }\n\n actionsRef.current.set(action.name, action);\n\n // Only bump version if schema-relevant or state-relevant props changed\n if (\n !existing ||\n existing.description !== action.description ||\n existing.disabled !== action.disabled ||\n existing.disabledReason !== action.disabledReason\n ) {\n setVersion((v) => v + 1);\n }\n }, []);\n\n const unregisterAction = useCallback((name: string) => {\n // If this action came from the registry, restore the schema-only version\n // instead of deleting so the LLM still sees it in schemas.\n const registryAction = registryRef.current.get(name);\n if (registryAction) {\n actionsRef.current.set(name, registryAction);\n } else {\n actionsRef.current.delete(name);\n }\n setVersion((v) => v + 1);\n }, []);\n\n const registerTarget = useCallback((id: string, entry: AgentTargetEntry) => {\n targetsRef.current.set(id, entry);\n }, []);\n\n const unregisterTarget = useCallback((id: string) => {\n targetsRef.current.delete(id);\n }, []);\n\n const resolveTarget = useCallback(\n async (\n actionName: string,\n param: string,\n value: string,\n signal?: AbortSignal,\n ): Promise<HTMLElement | null> => {\n const normalizedValue = value.toLowerCase();\n const maxWait = 3000;\n const pollInterval = 50;\n const start = Date.now();\n\n while (Date.now() - start < maxWait) {\n if (signal?.aborted) return null;\n\n for (const entry of targetsRef.current.values()) {\n if (\n (!entry.action || entry.action === actionName) &&\n entry.param === param &&\n entry.value?.toLowerCase() === normalizedValue &&\n entry.element.isConnected\n ) {\n return entry.element;\n }\n }\n\n await new Promise((r) => setTimeout(r, pollInterval));\n }\n\n return null;\n },\n [],\n );\n\n const resolveNamedTarget = useCallback(\n async (\n actionName: string,\n name: string,\n signal?: AbortSignal,\n params?: Record<string, unknown>,\n ): Promise<HTMLElement | null> => {\n const maxWait = 3000;\n const pollInterval = 50;\n const start = Date.now();\n\n while (Date.now() - start < maxWait) {\n if (signal?.aborted) return null;\n\n for (const entry of targetsRef.current.values()) {\n if (\n (!entry.action || entry.action === actionName) &&\n entry.name === name &&\n entry.element.isConnected\n ) {\n if (entry.prepareView && params) {\n await entry.prepareView(params);\n }\n return entry.element;\n }\n }\n\n await new Promise((r) => setTimeout(r, pollInterval));\n }\n\n return null;\n },\n [],\n );\n\n /** Poll actionsRef until the action has DOM targets (component mounted after navigation). */\n const waitForActionMount = useCallback(\n async (name: string, signal?: AbortSignal, timeout = 5000): Promise<RegisteredAction | null> => {\n const maxWait = timeout;\n const pollInterval = 50;\n const start = Date.now();\n\n while (Date.now() - start < maxWait) {\n if (signal?.aborted) return null;\n const current = actionsRef.current.get(name);\n if (current && (current.componentBacked || current.getExecutionTargets().length > 0)) {\n return current;\n }\n await new Promise((r) => setTimeout(r, pollInterval));\n }\n\n // Timed out — return whatever we have (executor handles empty targets gracefully).\n return actionsRef.current.get(name) ?? null;\n },\n [],\n );\n\n const execute = useCallback(\n async (actionName: string, params?: Record<string, unknown>): Promise<ExecutionResult> => {\n currentExecutionRef.current?.abort();\n const controller = new AbortController();\n currentExecutionRef.current = controller;\n\n let action = actionsRef.current.get(actionName);\n if (!action) {\n return { success: false, actionName, error: `Action \"${actionName}\" not found` };\n }\n if (action.disabled) {\n return {\n success: false,\n actionName,\n error: action.disabledReason || 'Action is disabled',\n };\n }\n\n setIsExecuting(true);\n onExecutionStart?.(actionName);\n\n try {\n const executorConfig = {\n mode,\n stepDelay,\n overlayOpacity,\n spotlightPadding,\n tooltipEnabled,\n cursorEnabled,\n signal: controller.signal,\n resolveTarget,\n resolveNamedTarget,\n };\n\n // Validate params against the Zod schema before navigating — prevents\n // wasted navigateVia chains when required params are missing.\n const schema = action.parameters as any;\n if (schema?.safeParse) {\n const validation = schema.safeParse(params ?? {});\n if (!validation.success) {\n const missing = validation.error.issues\n .map((i: any) => i.path.join('.'))\n .filter(Boolean);\n const error = missing.length > 0\n ? `Required parameters missing: ${missing.join(', ')}`\n : validation.error.issues.map((i: any) => i.message).join('; ');\n return { success: false, actionName, error };\n }\n }\n\n if (action.navigateVia && action.navigateVia.length > 0) {\n // Execute each action in the chain sequentially — spotlight, click, wait for next mount.\n for (const viaName of action.navigateVia) {\n if (controller.signal.aborted) break;\n\n const viaRegistered = actionsRef.current.get(viaName);\n const viaTimeout = viaRegistered?.mountTimeout ?? 10000;\n const viaAction = await waitForActionMount(viaName, controller.signal, viaTimeout);\n if (!viaAction || viaAction.getExecutionTargets().length === 0) {\n return {\n success: false,\n actionName,\n error: `Navigation chain action \"${viaName}\" not found or has no targets`,\n };\n }\n\n const viaResult = await executeAction(viaAction, {}, executorConfig);\n if (!viaResult.success) {\n return {\n success: false,\n actionName,\n error: `Navigation chain failed at \"${viaName}\": ${viaResult.error}`,\n };\n }\n }\n\n // After the chain, wait for the terminal action to mount with DOM targets.\n const mounted = await waitForActionMount(actionName, controller.signal, action.mountTimeout ?? 10000);\n if (!mounted || !mounted.componentBacked) {\n // Still schema-only — component never mounted on the page\n return {\n success: false,\n actionName,\n error: `Action \"${actionName}\" did not mount after navigation chain — the page may require authentication or failed to load`,\n };\n }\n action = mounted;\n } else {\n // If this is a registry action with no DOM targets, navigate first.\n const targets = action.getExecutionTargets();\n if (targets.length === 0 && action.route && navigateRef.current) {\n const path = action.route(params ?? {});\n await navigateRef.current(path);\n\n // Wait for the <AgentAction> component to mount on the new page.\n const mounted = await waitForActionMount(actionName, controller.signal, action.mountTimeout);\n if (mounted) {\n action = mounted;\n }\n }\n }\n\n // Re-check disabled after navigation — the mounted version may have\n // dynamic disabled state that the schema-only registry version didn't.\n if (action.disabled) {\n const result: ExecutionResult = {\n success: false,\n actionName,\n error: action.disabledReason || 'Action is disabled',\n };\n onExecutionComplete?.(result);\n return result;\n }\n\n const result = await executeAction(action, params ?? {}, executorConfig);\n onExecutionComplete?.(result);\n return result;\n } catch (err) {\n const result: ExecutionResult = {\n success: false,\n actionName,\n error:\n err instanceof DOMException && err.name === 'AbortError'\n ? 'Execution cancelled'\n : String(err),\n };\n onExecutionComplete?.(result);\n return result;\n } finally {\n setIsExecuting(false);\n if (currentExecutionRef.current === controller) {\n currentExecutionRef.current = null;\n }\n }\n },\n [mode, stepDelay, overlayOpacity, spotlightPadding, tooltipEnabled, cursorEnabled, onExecutionStart, onExecutionComplete, resolveTarget, resolveNamedTarget, waitForActionMount],\n );\n\n const availableActions = useMemo<AvailableAction[]>(\n () =>\n Array.from(actionsRef.current.values()).map((a) => ({\n name: a.name,\n description: a.description,\n disabled: a.disabled,\n disabledReason: a.disabledReason,\n hasParameters: !!a.parameters,\n })),\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [version],\n );\n\n const schemas = useMemo(\n () => generateToolSchemas(Array.from(actionsRef.current.values())),\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [version],\n );\n\n const contextValue = useMemo<AgentActionContextValue>(\n () => ({\n registerAction,\n unregisterAction,\n registerTarget,\n unregisterTarget,\n execute,\n availableActions,\n schemas,\n isExecuting,\n mode,\n }),\n [\n registerAction,\n unregisterAction,\n registerTarget,\n unregisterTarget,\n execute,\n availableActions,\n schemas,\n isExecuting,\n mode,\n ],\n );\n\n return (\n <AgentActionContext.Provider value={contextValue}>{children}</AgentActionContext.Provider>\n );\n}\n","import React, { createContext, useCallback, useContext, useEffect, useMemo, useRef } from 'react';\nimport type { ExecutionTarget } from '../core/types';\nimport type { ActionDefinition } from '../core/defineAction';\nimport { AgentActionContext } from './AgentActionProvider';\n\ninterface StepData {\n label: string;\n element: HTMLElement | null;\n fromParam?: string;\n fromTarget?: string;\n setParam?: string;\n setValue?: string;\n onSetValue?: (value: unknown) => void;\n prepareView?: (params: Record<string, unknown>) => void | Promise<void>;\n}\n\ninterface AgentStepContextValue {\n registerStep: (id: string, data: StepData) => void;\n unregisterStep: (id: string) => void;\n}\n\nexport const AgentStepContext = createContext<AgentStepContextValue | null>(null);\n\ntype AgentActionProps = {\n onExecute?: (params: Record<string, unknown>) => void | Promise<void>;\n disabled?: boolean;\n disabledReason?: string;\n children?: React.ReactNode;\n} & (\n | { action: ActionDefinition<any>; name?: string; description?: string; parameters?: unknown }\n | { action?: never; name: string; description: string; parameters?: unknown }\n);\n\nexport function AgentAction(props: AgentActionProps) {\n const {\n action,\n onExecute,\n disabled = false,\n disabledReason,\n children,\n } = props;\n\n // Resolve from action definition, with inline props as overrides.\n const name = props.name ?? action?.name;\n const description = props.description ?? action?.description ?? '';\n const parameters = props.parameters ?? action?.parameters;\n\n const context = useContext(AgentActionContext);\n if (!context) {\n throw new Error('AgentAction must be used within an AgentActionProvider');\n }\n if (!name) {\n throw new Error('AgentAction requires either a \"name\" prop or an \"action\" prop');\n }\n\n const wrapperRef = useRef<HTMLDivElement>(null);\n const stepsRef = useRef<Map<string, StepData>>(new Map());\n\n const onExecuteRef = useRef(onExecute);\n onExecuteRef.current = onExecute;\n const parametersRef = useRef(parameters);\n parametersRef.current = parameters;\n\n const stableOnExecute = useCallback((params: Record<string, unknown>) => {\n return onExecuteRef.current?.(params);\n }, []);\n\n const getExecutionTargets = useCallback((): ExecutionTarget[] => {\n if (stepsRef.current.size > 0) {\n const steps = Array.from(stepsRef.current.values());\n\n // Separate steps with elements (sortable by DOM position) from lazy steps (no element)\n const withElements = steps.filter((s) => s.element);\n const withoutElements = steps.filter((s) => !s.element && (s.fromParam || s.fromTarget));\n\n // Sort steps with elements by DOM position\n withElements.sort((a, b) => {\n if (!a.element || !b.element) return 0;\n const pos = a.element.compareDocumentPosition(b.element);\n return pos & Node.DOCUMENT_POSITION_FOLLOWING ? -1 : 1;\n });\n\n // Combine: element steps first (in DOM order), then fromParam steps\n const ordered = [...withElements, ...withoutElements];\n\n return ordered.map((s) => ({\n label: s.label,\n element: s.element,\n fromParam: s.fromParam,\n fromTarget: s.fromTarget,\n setParam: s.setParam,\n setValue: s.setValue,\n onSetValue: s.onSetValue,\n prepareView: s.prepareView,\n }));\n }\n\n // Single element: use wrapper's first child\n const el = wrapperRef.current?.firstElementChild as HTMLElement | null;\n return el ? [{ label: description, element: el }] : [];\n }, [description]);\n\n const { registerAction, unregisterAction } = context;\n\n useEffect(() => {\n registerAction({\n name,\n description,\n parameters: parametersRef.current,\n onExecute: onExecuteRef.current ? stableOnExecute : undefined,\n disabled,\n disabledReason,\n getExecutionTargets,\n componentBacked: true,\n });\n return () => unregisterAction(name);\n }, [name, description, disabled, disabledReason, stableOnExecute, getExecutionTargets, registerAction, unregisterAction]);\n\n const registerStep = useCallback(\n (id: string, data: StepData) => {\n stepsRef.current.set(id, data);\n },\n [],\n );\n\n const unregisterStep = useCallback((id: string) => {\n stepsRef.current.delete(id);\n }, []);\n\n const stepContextValue = useMemo(\n () => ({ registerStep, unregisterStep }),\n [registerStep, unregisterStep],\n );\n\n if (!children) return null;\n\n return (\n <AgentStepContext.Provider value={stepContextValue}>\n <div ref={wrapperRef} style={{ display: 'contents' }}>\n {children}\n </div>\n </AgentStepContext.Provider>\n );\n}\n","import React, { useContext, useEffect, useId, useRef } from 'react';\nimport { AgentStepContext } from './AgentAction';\n\ninterface AgentStepProps {\n label: string;\n children?: React.ReactNode;\n /** Resolve the target element from the AgentTarget registry by matching this param's value. */\n fromParam?: string;\n /** Resolve a named target from the AgentTarget registry (for static elements inside popovers/dropdowns). */\n fromTarget?: string;\n /** Simulate typing the value of this param into the element. */\n setParam?: string;\n /** Set a value programmatically via onSetValue callback. */\n setValue?: string;\n /** Callback for setValue — receives the param value and sets it on the component. */\n onSetValue?: (value: unknown) => void;\n /** Run a callback to prepare the DOM (e.g. scroll a virtualized list) before resolving the target. */\n prepareView?: (params: Record<string, unknown>) => void | Promise<void>;\n}\n\nexport function AgentStep({\n label,\n children,\n fromParam,\n fromTarget,\n setParam,\n setValue,\n onSetValue,\n prepareView,\n}: AgentStepProps) {\n const id = useId();\n const wrapperRef = useRef<HTMLDivElement>(null);\n const stepContext = useContext(AgentStepContext);\n\n if (!stepContext) {\n throw new Error('AgentStep must be used within an AgentAction');\n }\n\n const onSetValueRef = useRef(onSetValue);\n onSetValueRef.current = onSetValue;\n const prepareViewRef = useRef(prepareView);\n prepareViewRef.current = prepareView;\n\n useEffect(() => {\n const element = children\n ? (wrapperRef.current?.firstElementChild as HTMLElement | null)\n : null;\n\n stepContext.registerStep(id, {\n label,\n element,\n fromParam,\n fromTarget,\n setParam,\n setValue,\n onSetValue: onSetValueRef.current,\n prepareView: prepareViewRef.current,\n });\n return () => stepContext.unregisterStep(id);\n }, [id, label, fromParam, fromTarget, setParam, setValue, stepContext]);\n\n if (!children) return null;\n\n return (\n <div ref={wrapperRef} style={{ display: 'contents' }}>\n {children}\n </div>\n );\n}\n","import React, { useContext, useEffect, useId, useRef } from 'react';\nimport { AgentActionContext } from './AgentActionProvider';\n\ninterface AgentTargetProps {\n /** The action name this target belongs to. Omit to make a shared target that any action can resolve. */\n action?: string;\n children: React.ReactNode;\n /** The parameter key this target maps to (for fromParam resolution). */\n param?: string;\n /** The parameter value this target represents (for fromParam resolution). */\n value?: string;\n /** Named target key (for fromTarget resolution — static elements inside popovers/dropdowns). */\n name?: string;\n /** Run a callback to prepare component state before the agent interacts with this target. Runs in the child's scope so it can access internal state. */\n prepareView?: (params: Record<string, unknown>) => void | Promise<void>;\n}\n\n/**\n * Register a DOM element as a selectable target for an agent action step.\n *\n * Use this to wrap lazily-rendered elements (dropdown options, search results, etc.)\n * so that `AgentStep fromParam` or `AgentStep fromTarget` can find and interact\n * with them after they mount.\n *\n * Works through React portals — context flows regardless of DOM position.\n *\n * @example\n * ```tsx\n * // Dynamic: match by param value (inside a dropdown's renderOption):\n * <AgentTarget action=\"filter_by_tag\" param=\"tag_name\" value={option.label}>\n * <DropdownOption>{option.label}</DropdownOption>\n * </AgentTarget>\n *\n * // Static: match by name (inside a popover that mounts lazily):\n * <AgentTarget action=\"toggle_frozen_columns\" name=\"freeze-btn\">\n * <button>Freeze columns</button>\n * </AgentTarget>\n * ```\n */\nexport function AgentTarget({ action, param, value, name, prepareView, children }: AgentTargetProps) {\n const id = useId();\n const wrapperRef = useRef<HTMLDivElement>(null);\n const context = useContext(AgentActionContext);\n const prepareViewRef = useRef(prepareView);\n prepareViewRef.current = prepareView;\n\n if (!context) {\n throw new Error('AgentTarget must be used within an AgentActionProvider');\n }\n\n const { registerTarget, unregisterTarget } = context;\n\n useEffect(() => {\n const element = wrapperRef.current?.firstElementChild as HTMLElement | null;\n if (element) {\n registerTarget(id, { action, param, value, name, element, prepareView: prepareViewRef.current });\n }\n return () => unregisterTarget(id);\n }, [id, action, param, value, name, registerTarget, unregisterTarget]);\n\n return (\n <div ref={wrapperRef} style={{ display: 'contents' }}>\n {children}\n </div>\n );\n}\n","import { useContext } from 'react';\nimport type { AgentActionContextValue } from '../core/types';\nimport { AgentActionContext } from '../components/AgentActionProvider';\n\nexport function useAgentActions(): AgentActionContextValue {\n const context = useContext(AgentActionContext);\n if (!context) {\n throw new Error('useAgentActions must be used within an AgentActionProvider');\n }\n return context;\n}\n","import React, { useState, useCallback, useRef, useEffect } from 'react';\nimport { useAgentActions } from '../hooks/useAgentActions';\nimport type { AvailableAction, ExecutionResult, ToolSchema } from '../core/types';\n\ninterface AgentDevToolsProps {\n /** Default open state. */\n defaultOpen?: boolean;\n}\n\ninterface LogEntry {\n id: number;\n action: string;\n params?: Record<string, unknown>;\n result?: ExecutionResult;\n timestamp: number;\n}\n\nlet logId = 0;\n\nconst PANEL_WIDTH = 440;\n\n/**\n * Extract parameter fields from a schema's JSON Schema properties.\n */\nfunction getSchemaFields(\n schemas: ToolSchema[],\n actionName: string,\n): { name: string; type: string; description?: string; enumValues?: string[]; isRequired: boolean }[] {\n const schema = schemas.find((s) => s.name === actionName);\n if (!schema?.parameters) return [];\n\n const params = schema.parameters as Record<string, unknown>;\n const properties = (params.properties ?? {}) as Record<string, Record<string, unknown>>;\n const required = ((params.required ?? []) as string[]);\n\n return Object.entries(properties).map(([name, prop]) => ({\n name,\n type: (prop.type as string) ?? 'string',\n description: prop.description as string | undefined,\n enumValues: prop.enum as string[] | undefined,\n isRequired: required.includes(name),\n }));\n}\n\nexport function AgentDevTools({ defaultOpen = false }: AgentDevToolsProps) {\n const { availableActions, execute, isExecuting, mode, schemas } = useAgentActions();\n const [open, setOpen] = useState(defaultOpen);\n const [log, setLog] = useState<LogEntry[]>([]);\n const [expandedAction, setExpandedAction] = useState<string | null>(null);\n const [paramInputs, setParamInputs] = useState<Record<string, Record<string, string>>>({});\n const [filter, setFilter] = useState('');\n const [tab, setTab] = useState<'actions' | 'log'>('actions');\n const logEndRef = useRef<HTMLDivElement>(null);\n\n useEffect(() => {\n if (tab === 'log') logEndRef.current?.scrollIntoView({ behavior: 'smooth' });\n }, [log, tab]);\n\n const setFieldValue = useCallback((actionName: string, fieldName: string, value: string) => {\n setParamInputs((prev) => ({\n ...prev,\n [actionName]: { ...prev[actionName], [fieldName]: value },\n }));\n }, []);\n\n const handleExecute = useCallback(\n async (action: AvailableAction) => {\n const entryId = ++logId;\n let params: Record<string, unknown> | undefined;\n\n const fields = getSchemaFields(schemas, action.name);\n const rawInputs = paramInputs[action.name];\n\n if (fields.length > 0 && rawInputs) {\n params = {};\n for (const field of fields) {\n const raw = rawInputs[field.name];\n if (raw === undefined || raw === '') continue;\n\n if (field.type === 'number' || field.type === 'integer') {\n params[field.name] = Number(raw);\n } else if (field.type === 'boolean') {\n params[field.name] = raw === 'true';\n } else if (field.type === 'array') {\n try {\n params[field.name] = JSON.parse(raw);\n } catch {\n setLog((prev) => [\n ...prev,\n {\n id: entryId,\n action: action.name,\n timestamp: Date.now(),\n result: { success: false, actionName: action.name, error: `Invalid JSON for ${field.name}` },\n },\n ]);\n return;\n }\n } else {\n params[field.name] = raw;\n }\n }\n }\n\n setLog((prev) => [...prev, { id: entryId, action: action.name, params, timestamp: Date.now() }]);\n const result = await execute(action.name, params);\n setLog((prev) => prev.map((e) => (e.id === entryId ? { ...e, result } : e)));\n },\n [execute, paramInputs, schemas],\n );\n\n const filtered = filter\n ? availableActions.filter((a) => a.name.includes(filter) || a.description.includes(filter))\n : availableActions;\n\n // Toggle button\n if (!open) {\n return (\n <button\n onClick={() => setOpen(true)}\n style={{\n position: 'fixed',\n bottom: 16,\n right: 16,\n zIndex: 99990,\n height: 36,\n paddingLeft: 12,\n paddingRight: 14,\n borderRadius: 18,\n border: 'none',\n cursor: 'pointer',\n background: '#3b82f6',\n color: 'white',\n fontSize: 13,\n fontWeight: 600,\n fontFamily: 'system-ui, sans-serif',\n boxShadow: '0 2px 12px rgba(59,130,246,0.4)',\n display: 'flex',\n alignItems: 'center',\n gap: 6,\n }}\n >\n <span style={{ fontSize: 16 }}>⚙</span>\n Agent · {availableActions.length}\n </button>\n );\n }\n\n return (\n <>\n {/* Backdrop */}\n <div\n onClick={() => setOpen(false)}\n style={{\n position: 'fixed',\n inset: 0,\n zIndex: 99989,\n background: 'rgba(0,0,0,0.15)',\n }}\n />\n\n {/* Side panel */}\n <div\n style={{\n position: 'fixed',\n top: 0,\n right: 0,\n bottom: 0,\n zIndex: 99990,\n width: PANEL_WIDTH,\n display: 'flex',\n flexDirection: 'column',\n background: '#0f172a',\n color: '#e2e8f0',\n boxShadow: '-4px 0 24px rgba(0,0,0,0.3)',\n fontFamily: 'system-ui, -apple-system, sans-serif',\n fontSize: 13,\n }}\n >\n {/* Header */}\n <div\n style={{\n padding: '16px 20px',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n borderBottom: '1px solid #1e293b',\n }}\n >\n <div>\n <div style={{ fontWeight: 700, fontSize: 15 }}>Agent DevTools</div>\n <div style={{ fontSize: 12, color: '#64748b', marginTop: 2 }}>\n {availableActions.length} actions registered · {mode} mode\n </div>\n </div>\n <button onClick={() => setOpen(false)} style={closeBtnStyle}>\n ✕\n </button>\n </div>\n\n {/* Tabs */}\n <div style={{ display: 'flex', borderBottom: '1px solid #1e293b' }}>\n <button onClick={() => setTab('actions')} style={tabStyle(tab === 'actions')}>\n Actions\n </button>\n <button onClick={() => setTab('log')} style={tabStyle(tab === 'log')}>\n Log {log.length > 0 && `(${log.length})`}\n </button>\n </div>\n\n {/* Content */}\n {tab === 'actions' ? (\n <div style={{ flex: 1, overflowY: 'auto', minHeight: 0 }}>\n {/* Filter */}\n <div style={{ padding: '12px 20px' }}>\n <input\n value={filter}\n onChange={(e) => setFilter(e.target.value)}\n placeholder=\"Filter actions...\"\n style={filterInputStyle}\n />\n </div>\n\n {filtered.length > 0 && filtered.map((action) => (\n <ActionRow\n key={action.name}\n action={action}\n schemas={schemas}\n expanded={expandedAction === action.name}\n onToggle={() => setExpandedAction(expandedAction === action.name ? null : action.name)}\n fieldValues={paramInputs[action.name] ?? {}}\n onFieldChange={(field, value) => setFieldValue(action.name, field, value)}\n onExecute={() => handleExecute(action)}\n isExecuting={isExecuting}\n />\n ))}\n\n {filtered.length === 0 && (\n <div style={{ padding: 20, color: '#475569', textAlign: 'center' }}>\n {filter ? 'No matching actions' : 'No actions registered'}\n </div>\n )}\n </div>\n ) : (\n <div style={{ flex: 1, overflowY: 'auto', minHeight: 0 }}>\n {log.length === 0 ? (\n <div style={{ padding: 20, color: '#475569', textAlign: 'center' }}>\n No executions yet. Run an action to see results here.\n </div>\n ) : (\n <>\n <div style={{ padding: '8px 20px', display: 'flex', justifyContent: 'flex-end' }}>\n <button onClick={() => setLog([])} style={clearBtnStyle}>\n Clear\n </button>\n </div>\n {log.map((entry) => (\n <div key={entry.id} style={{ padding: '10px 20px', borderBottom: '1px solid #1e293b' }}>\n <div style={{ display: 'flex', alignItems: 'center', gap: 8 }}>\n <StatusDot result={entry.result} />\n <span style={{ fontWeight: 600, fontSize: 13 }}>{entry.action}</span>\n <span style={{ marginLeft: 'auto', fontSize: 11, color: '#475569' }}>\n {new Date(entry.timestamp).toLocaleTimeString()}\n </span>\n </div>\n {entry.params && <pre style={logParamsStyle}>{JSON.stringify(entry.params, null, 2)}</pre>}\n {entry.result && !entry.result.success && (\n <div style={{ marginTop: 4, fontSize: 12, color: '#f87171' }}>{entry.result.error}</div>\n )}\n </div>\n ))}\n <div ref={logEndRef} />\n </>\n )}\n </div>\n )}\n </div>\n </>\n );\n}\n\nfunction ActionRow({\n action,\n schemas,\n expanded,\n onToggle,\n fieldValues,\n onFieldChange,\n onExecute,\n isExecuting,\n badge,\n}: {\n action: AvailableAction;\n schemas: ToolSchema[];\n expanded: boolean;\n onToggle: () => void;\n fieldValues: Record<string, string>;\n onFieldChange: (field: string, value: string) => void;\n onExecute: () => void;\n isExecuting: boolean;\n badge?: string;\n}) {\n const fields = getSchemaFields(schemas, action.name);\n\n return (\n <div\n style={{\n padding: '10px 20px',\n borderBottom: '1px solid #1e293b',\n opacity: action.disabled ? 0.5 : 1,\n cursor: 'pointer',\n }}\n onKeyDown={(e) => {\n if (e.key === 'Enter' && expanded && !action.disabled && !isExecuting) {\n e.preventDefault();\n onExecute();\n }\n }}\n >\n <div onClick={onToggle} style={{ display: 'flex', alignItems: 'center', gap: 8 }}>\n <span style={{ color: '#475569', fontSize: 10, flexShrink: 0 }}>{expanded ? '\\u25BC' : '\\u25B6'}</span>\n <div style={{ flex: 1, minWidth: 0 }}>\n <div style={{ display: 'flex', alignItems: 'center', gap: 6 }}>\n <span style={{ fontWeight: 600, color: '#93c5fd' }}>{action.name}</span>\n {badge && (\n <span\n style={{\n fontSize: 9,\n padding: '1px 5px',\n borderRadius: 3,\n background: '#1e3a5f',\n color: '#60a5fa',\n fontWeight: 600,\n }}\n >\n {badge}\n </span>\n )}\n {action.disabled && (\n <span\n style={{\n fontSize: 9,\n padding: '1px 5px',\n borderRadius: 3,\n background: '#3f1d1d',\n color: '#f87171',\n fontWeight: 600,\n }}\n >\n disabled\n </span>\n )}\n </div>\n <div style={{ color: '#94a3b8', fontSize: 12, marginTop: 2 }}>\n {action.disabled && action.disabledReason ? action.disabledReason : action.description}\n </div>\n </div>\n <button\n onClick={(e) => {\n e.stopPropagation();\n onExecute();\n }}\n disabled={action.disabled || isExecuting}\n style={{\n padding: '5px 14px',\n borderRadius: 6,\n border: 'none',\n fontSize: 12,\n fontWeight: 600,\n cursor: action.disabled ? 'not-allowed' : 'pointer',\n background: action.disabled ? '#334155' : '#3b82f6',\n color: 'white',\n flexShrink: 0,\n }}\n >\n {isExecuting ? '···' : 'Run'}\n </button>\n </div>\n\n {expanded && (\n <div style={{ marginTop: 10, marginLeft: 18 }}>\n {fields.length > 0 ? (\n <div style={{ display: 'flex', flexDirection: 'column', gap: 8 }}>\n {fields.map((field) => (\n <div key={field.name}>\n <label style={{ fontSize: 11, color: '#64748b', display: 'block', marginBottom: 3 }}>\n {field.name}\n {field.isRequired && <span style={{ color: '#f87171', marginLeft: 2 }}>*</span>}\n {field.description && (\n <span style={{ color: '#475569', marginLeft: 6 }}>{field.description}</span>\n )}\n </label>\n {field.enumValues ? (\n <select\n value={fieldValues[field.name] ?? ''}\n onChange={(e) => onFieldChange(field.name, e.target.value)}\n style={fieldSelectStyle}\n >\n <option value=\"\">Select...</option>\n {field.enumValues.map((v) => (\n <option key={v} value={v}>\n {v}\n </option>\n ))}\n </select>\n ) : field.type === 'boolean' ? (\n <select\n value={fieldValues[field.name] ?? ''}\n onChange={(e) => onFieldChange(field.name, e.target.value)}\n style={fieldSelectStyle}\n >\n <option value=\"\">Select...</option>\n <option value=\"true\">true</option>\n <option value=\"false\">false</option>\n </select>\n ) : field.type === 'array' ? (\n <textarea\n value={fieldValues[field.name] ?? ''}\n onChange={(e) => onFieldChange(field.name, e.target.value)}\n placeholder='[1, 2, 3]'\n rows={2}\n style={textareaStyle}\n />\n ) : (\n <input\n type={field.type === 'number' || field.type === 'integer' ? 'number' : 'text'}\n value={fieldValues[field.name] ?? ''}\n onChange={(e) => onFieldChange(field.name, e.target.value)}\n placeholder={field.description ?? field.name}\n style={fieldInputStyle}\n />\n )}\n </div>\n ))}\n </div>\n ) : (\n <div style={{ fontSize: 12, color: '#475569' }}>No parameters</div>\n )}\n </div>\n )}\n </div>\n );\n}\n\n\nfunction StatusDot({ result }: { result?: ExecutionResult }) {\n const color = !result ? '#fbbf24' : result.success ? '#4ade80' : '#f87171';\n return (\n <span\n style={{\n width: 8,\n height: 8,\n borderRadius: '50%',\n background: color,\n display: 'inline-block',\n flexShrink: 0,\n }}\n />\n );\n}\n\nconst closeBtnStyle: React.CSSProperties = {\n width: 28,\n height: 28,\n borderRadius: 6,\n border: '1px solid #334155',\n background: 'transparent',\n color: '#94a3b8',\n cursor: 'pointer',\n fontSize: 14,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n};\n\nconst tabStyle = (active: boolean): React.CSSProperties => ({\n flex: 1,\n padding: '10px 0',\n border: 'none',\n cursor: 'pointer',\n fontSize: 13,\n fontWeight: 600,\n fontFamily: 'inherit',\n background: active ? '#1e293b' : 'transparent',\n color: active ? '#e2e8f0' : '#64748b',\n borderBottom: active ? '2px solid #3b82f6' : '2px solid transparent',\n});\n\nconst filterInputStyle: React.CSSProperties = {\n width: '100%',\n background: '#1e293b',\n border: '1px solid #334155',\n borderRadius: 6,\n padding: '8px 12px',\n color: '#e2e8f0',\n fontSize: 13,\n outline: 'none',\n fontFamily: 'inherit',\n};\n\nconst clearBtnStyle: React.CSSProperties = {\n padding: '4px 10px',\n borderRadius: 4,\n border: '1px solid #334155',\n background: 'transparent',\n color: '#64748b',\n cursor: 'pointer',\n fontSize: 11,\n fontFamily: 'inherit',\n};\n\nconst fieldInputStyle: React.CSSProperties = {\n width: '100%',\n background: '#1e293b',\n border: '1px solid #334155',\n borderRadius: 6,\n padding: '7px 10px',\n color: '#e2e8f0',\n fontSize: 12,\n outline: 'none',\n fontFamily: 'inherit',\n};\n\nconst fieldSelectStyle: React.CSSProperties = {\n width: '100%',\n background: '#1e293b',\n border: '1px solid #334155',\n borderRadius: 6,\n padding: '7px 10px',\n color: '#e2e8f0',\n fontSize: 12,\n outline: 'none',\n fontFamily: 'inherit',\n cursor: 'pointer',\n};\n\nconst textareaStyle: React.CSSProperties = {\n width: '100%',\n background: '#1e293b',\n border: '1px solid #334155',\n borderRadius: 6,\n padding: '8px 10px',\n color: '#e2e8f0',\n fontSize: 12,\n outline: 'none',\n resize: 'vertical',\n fontFamily: 'ui-monospace, SFMono-Regular, Menlo, monospace',\n};\n\nconst logParamsStyle: React.CSSProperties = {\n marginTop: 4,\n padding: '6px 8px',\n background: '#1e293b',\n borderRadius: 4,\n fontSize: 11,\n color: '#94a3b8',\n overflow: 'auto',\n maxHeight: 80,\n fontFamily: 'ui-monospace, SFMono-Regular, Menlo, monospace',\n};\n","import { useContext, useEffect, useRef } from 'react';\nimport type { ExecutionTarget } from '../core/types';\nimport { AgentActionContext } from '../components/AgentActionProvider';\n\ninterface StepConfig {\n label: string;\n fromParam?: string;\n fromTarget?: string;\n setParam?: string;\n setValue?: string;\n onSetValue?: (value: unknown) => void;\n prepareView?: (params: Record<string, unknown>) => void | Promise<void>;\n}\n\nexport interface AgentActionConfig {\n name: string;\n description: string;\n parameters?: unknown;\n onExecute?: (params: Record<string, unknown>) => void | Promise<void>;\n disabled?: boolean;\n disabledReason?: string;\n steps?: StepConfig[];\n}\n\n/**\n * Hook-based action registration for actions that don't wrap a single element.\n * Use this for per-row actions where AgentTargets are on scattered elements\n * and the action resolves to them via fromParam/fromTarget.\n *\n * Accepts a single config or an array to batch-register multiple actions.\n *\n * For actions that wrap a visible element, prefer the <AgentAction> component.\n */\nexport function useAgentAction(config: AgentActionConfig | AgentActionConfig[]): void {\n const context = useContext(AgentActionContext);\n if (!context) {\n throw new Error('useAgentAction must be used within an AgentActionProvider');\n }\n\n const configRef = useRef(config);\n configRef.current = config;\n\n const { registerAction, unregisterAction } = context;\n\n useEffect(() => {\n const items = Array.isArray(configRef.current) ? configRef.current : [configRef.current];\n\n for (const item of items) {\n const onExecute = item.onExecute;\n const steps = item.steps;\n\n registerAction({\n name: item.name,\n description: item.description,\n parameters: item.parameters,\n onExecute: onExecute\n ? (params: Record<string, unknown>) => onExecute(params)\n : undefined,\n disabled: item.disabled ?? false,\n disabledReason: item.disabledReason,\n getExecutionTargets: (): ExecutionTarget[] => {\n if (!steps?.length) return [];\n return steps.map((s) => ({\n label: s.label,\n element: null,\n fromParam: s.fromParam,\n fromTarget: s.fromTarget,\n setParam: s.setParam,\n setValue: s.setValue,\n onSetValue: s.onSetValue,\n prepareView: s.prepareView,\n }));\n },\n });\n }\n\n return () => {\n const items = Array.isArray(configRef.current) ? configRef.current : [configRef.current];\n for (const item of items) {\n unregisterAction(item.name);\n }\n };\n }, [registerAction, unregisterAction]);\n}\n","import { useCallback } from 'react';\nimport type { ExecutionResult } from '../core/types';\nimport { useAgentActions } from './useAgentActions';\n\n/**\n * Wraps an existing command handler with agent action routing.\n *\n * When a command arrives, if a matching `<AgentAction>` is mounted and enabled,\n * it routes through `execute()` for visual guided execution. Otherwise it falls\n * through to the original handler.\n *\n * Returns the `ExecutionResult` for registered actions, or `undefined` for\n * fallback commands.\n *\n * Works with any command shape — you provide `getActionName` to extract the\n * action name from your command object.\n *\n * @example\n * ```tsx\n * const handleCommand = useAgentCommandRouter(\n * existingHandler,\n * (cmd) => cmd.action,\n * );\n * ```\n */\nexport function useAgentCommandRouter<T>(\n fallback: ((command: T) => void | Promise<void>) | null,\n getActionName: (command: T) => string,\n): (command: T) => Promise<ExecutionResult | undefined> {\n const { execute, availableActions } = useAgentActions();\n\n return useCallback(\n async (command: T): Promise<ExecutionResult | undefined> => {\n const actionName = getActionName(command);\n const isRegistered = availableActions.some((a) => a.name === actionName && !a.disabled);\n\n if (isRegistered) {\n return await execute(actionName, command as Record<string, unknown>);\n }\n\n await fallback?.(command);\n return undefined;\n },\n [execute, availableActions, fallback, getActionName],\n );\n}\n","/**\n * Define an action at import time so its schema is available before the component mounts.\n * Pass defined actions to `<AgentActionProvider registry={[...]}>` for single-roundtrip execution.\n *\n * @example\n * ```ts\n * export const updatePrice = defineAction({\n * name: 'update_price',\n * description: 'Update price markup on a property',\n * parameters: z.object({ property_id: z.string(), markup: z.number() }),\n * route: (p) => `/properties/${p.property_id}/pricing`,\n * });\n * ```\n */\nexport interface ActionDefinition<TParams = Record<string, unknown>> {\n readonly name: string;\n readonly description: string;\n /** Zod schema for action parameters. */\n readonly parameters?: unknown;\n /** Client-side route to navigate to before executing. */\n readonly route?: (params: TParams) => string;\n /** Handler for background execution (no UI component needed). */\n readonly onExecute?: (params: TParams) => void | Promise<void>;\n /**\n * Chain of action names to execute sequentially before this action.\n * Each action in the chain is visually executed (spotlight → click), and the next\n * action is waited on to mount before proceeding. This lets the user see the full\n * navigation path instead of being teleported directly to a route.\n */\n readonly navigateVia?: string[];\n /**\n * How long (ms) to wait for this action's component to mount after navigation.\n * Defaults to 5000ms. Set higher for pages that load slowly\n */\n readonly mountTimeout?: number;\n}\n\nexport function defineAction<TParams = Record<string, unknown>>(config: {\n name: string;\n description: string;\n parameters?: unknown;\n route?: (params: TParams) => string;\n onExecute?: (params: TParams) => void | Promise<void>;\n navigateVia?: string[];\n mountTimeout?: number;\n}): ActionDefinition<TParams> {\n return {\n name: config.name,\n description: config.description,\n parameters: config.parameters,\n route: config.route,\n onExecute: config.onExecute,\n navigateVia: config.navigateVia,\n mountTimeout: config.mountTimeout,\n };\n}\n"]}
|