{"version":3,"file":"sdk/index.mjs","sources":["../../../src/sdk/index.ts"],"sourcesContent":["import type { ConnectivityTestResult, DeviceAction } from '@midscene/core';\nimport { PLAYGROUND_SERVER_PORT } from '@midscene/shared/constants';\nimport type { TModelConfig } from '@midscene/shared/env';\nimport type { BasePlaygroundAdapter } from '../adapters/base';\nimport { LocalExecutionAdapter } from '../adapters/local-execution';\nimport { RemoteExecutionAdapter } from '../adapters/remote-execution';\nimport type {\n  PlaygroundRecorderCapabilitiesResult,\n  PlaygroundRecorderDescribeResult,\n  PlaygroundRecorderEvent,\n  PlaygroundRecorderEventsResult,\n  PlaygroundRecorderStartResult,\n  PlaygroundSessionSetup,\n  PlaygroundSessionState,\n  PlaygroundSessionTarget,\n} from '../platform';\nimport type { PlaygroundRuntimeInfo } from '../runtime-metadata';\nimport type {\n  AgentFactory,\n  BeforeActionHook,\n  ExecutionOptions,\n  FormValue,\n  PlaygroundAgent,\n  PlaygroundConfig,\n  PlaygroundReportRef,\n  ValidationResult,\n} from '../types';\n\nexport type PlaygroundInteractPayload = {\n  actionType: string;\n} & Record<string, unknown>;\n\nexport interface PlaygroundInteractResult {\n  ok: boolean;\n  error?: string;\n}\n\nexport type PlaygroundPageRecordedEvent = PlaygroundRecorderEvent;\nexport type {\n  PlaygroundRecorderCapabilitiesResult,\n  PlaygroundRecorderDescribeResult,\n  PlaygroundRecorderEventsResult,\n  PlaygroundRecorderStartResult,\n};\n\nexport class PlaygroundSDK {\n  private adapter: BasePlaygroundAdapter;\n  private beforeActionHook?: BeforeActionHook;\n\n  constructor(config: PlaygroundConfig) {\n    this.adapter = this.createAdapter(\n      config.type,\n      config.serverUrl,\n      config.agent,\n      config.agentFactory,\n    );\n  }\n\n  private createAdapter(\n    type: string,\n    serverUrl?: string,\n    agent?: PlaygroundAgent,\n    agentFactory?: AgentFactory,\n  ): BasePlaygroundAdapter {\n    switch (type) {\n      case 'local-execution':\n        if (!agent && !agentFactory) {\n          throw new Error(\n            'Agent or agentFactory is required for local execution',\n          );\n        }\n        return new LocalExecutionAdapter(agent, agentFactory);\n      case 'remote-execution': {\n        // Use provided serverUrl first, then fallback to localhost if current page origin is file:// or default\n        const finalServerUrl =\n          serverUrl ||\n          (typeof window !== 'undefined' &&\n          window.location.protocol.includes('http')\n            ? window.location.origin\n            : `http://localhost:${PLAYGROUND_SERVER_PORT}`);\n\n        return new RemoteExecutionAdapter(finalServerUrl);\n      }\n      default:\n        throw new Error(`Unsupported execution type: ${type}`);\n    }\n  }\n\n  private runtimeMetadataAdapter():\n    | LocalExecutionAdapter\n    | RemoteExecutionAdapter\n    | null {\n    if (\n      this.adapter instanceof LocalExecutionAdapter ||\n      this.adapter instanceof RemoteExecutionAdapter\n    ) {\n      return this.adapter;\n    }\n\n    return null;\n  }\n\n  async executeAction(\n    actionType: string,\n    value: FormValue,\n    options: ExecutionOptions,\n  ): Promise<unknown> {\n    await this.beforeActionHook?.(actionType, value, options);\n    const result = await this.adapter.executeAction(actionType, value, options);\n    return result;\n  }\n\n  setBeforeActionHook(hook?: BeforeActionHook): void {\n    this.beforeActionHook = hook;\n  }\n\n  async getActionSpace(context?: unknown): Promise<DeviceAction<unknown>[]> {\n    // Both adapters now accept context parameter\n    // Local will prioritize internal agent, Remote will use server + fallback\n    return this.adapter.getActionSpace(context);\n  }\n\n  validateStructuredParams(\n    value: FormValue,\n    action: DeviceAction<unknown> | undefined,\n  ): ValidationResult {\n    return this.adapter.validateParams(value, action);\n  }\n\n  formatErrorMessage(error: any): string {\n    return this.adapter.formatErrorMessage(error);\n  }\n\n  createDisplayContent(\n    value: FormValue,\n    needsStructuredParams: boolean,\n    action: DeviceAction<unknown> | undefined,\n  ): string {\n    return this.adapter.createDisplayContent(\n      value,\n      needsStructuredParams,\n      action,\n    );\n  }\n\n  // Get adapter ID (works for both remote and local execution)\n  get id(): string | undefined {\n    if (this.adapter instanceof RemoteExecutionAdapter) {\n      return this.adapter.id;\n    }\n    if (this.adapter instanceof LocalExecutionAdapter) {\n      return this.adapter.id;\n    }\n    return undefined;\n  }\n\n  // Server communication methods (for remote execution)\n  async checkStatus(): Promise<boolean> {\n    if (this.adapter instanceof RemoteExecutionAdapter) {\n      return this.adapter.checkStatus();\n    }\n    return true; // For local execution, always return true\n  }\n\n  async overrideConfig(aiConfig: any): Promise<void> {\n    return this.adapter.overrideConfig(aiConfig);\n  }\n\n  async runConnectivityTest(\n    aiConfig: TModelConfig,\n  ): Promise<ConnectivityTestResult> {\n    return this.adapter.runConnectivityTest(aiConfig);\n  }\n\n  // Get task progress (for remote execution)\n  async getTaskProgress(requestId: string): Promise<{ executionDump?: any }> {\n    if (this.adapter instanceof RemoteExecutionAdapter) {\n      return this.adapter.getTaskProgress(requestId);\n    }\n    // For local execution, progress is handled via onDumpUpdate callback\n    return {};\n  }\n\n  // Cancel task (for remote execution)\n  async cancelTask(requestId: string): Promise<any> {\n    if (this.adapter instanceof RemoteExecutionAdapter) {\n      return this.adapter.cancelTask(requestId);\n    }\n    return { error: 'Cancel task not supported in local execution mode' };\n  }\n\n  // Dump update callback management\n  onDumpUpdate(callback: (dump: string, executionDump?: any) => void): void {\n    if (this.adapter instanceof LocalExecutionAdapter) {\n      this.adapter.onDumpUpdate(callback);\n    } else if (this.adapter instanceof RemoteExecutionAdapter) {\n      this.adapter.onDumpUpdate(callback);\n    }\n  }\n\n  // Progress update callback management\n  onProgressUpdate(callback: (tip: string) => void): void {\n    if (this.adapter instanceof LocalExecutionAdapter) {\n      this.adapter.setProgressCallback(callback);\n    }\n    // RemoteExecutionAdapter uses polling mechanism via onDumpUpdate, no separate progress callback needed\n  }\n\n  // Cancel execution - supports both remote and local\n  async cancelExecution(requestId: string): Promise<{\n    dump: any | null;\n    reportHTML: string | null;\n    report: PlaygroundReportRef | null;\n  } | null> {\n    if (this.adapter instanceof RemoteExecutionAdapter) {\n      const result = await this.adapter.cancelTask(requestId);\n      // Return dump and reportHTML if available from cancellation\n      if (result.success) {\n        return {\n          dump: (result as any).dump || null,\n          reportHTML: (result as any).reportHTML || null,\n          report: (result as any).report || null,\n        };\n      }\n    } else if (this.adapter instanceof LocalExecutionAdapter) {\n      // Invoke adapter cancellation to destroy the agent and block further actions\n      const result = await this.adapter.cancelTask(requestId);\n      if (result.success) {\n        return {\n          dump: (result as any).dump || null,\n          reportHTML: (result as any).reportHTML || null,\n          report: null,\n        };\n      }\n    }\n    return null;\n  }\n\n  // Get current execution data (dump and report)\n  async getCurrentExecutionData(): Promise<{\n    dump: any | null;\n    reportHTML: string | null;\n    report?: PlaygroundReportRef | null;\n  }> {\n    if (\n      this.adapter instanceof LocalExecutionAdapter &&\n      this.adapter.getCurrentExecutionData\n    ) {\n      return await this.adapter.getCurrentExecutionData();\n    }\n    // For remote execution or if method not available, return empty data\n    return { dump: null, reportHTML: null };\n  }\n\n  // Screenshot method for remote execution\n  async getScreenshot(): Promise<{\n    screenshot: string;\n    timestamp: number;\n  } | null> {\n    if (this.adapter instanceof RemoteExecutionAdapter) {\n      return this.adapter.getScreenshot();\n    }\n    return null; // For local execution, not supported yet\n  }\n\n  // Direct device manipulation – mouse/keyboard input from UI overlays.\n  async interact(\n    payload: PlaygroundInteractPayload,\n  ): Promise<PlaygroundInteractResult> {\n    if (this.adapter instanceof RemoteExecutionAdapter) {\n      return this.adapter.interact(payload);\n    }\n    return { ok: false, error: 'Direct interaction requires remote execution' };\n  }\n\n  async startRecorderSession(\n    sessionId: string,\n  ): Promise<PlaygroundRecorderStartResult> {\n    if (this.adapter instanceof RemoteExecutionAdapter) {\n      return this.adapter.startRecorderSession(sessionId);\n    }\n    return {\n      ok: false,\n      supported: false,\n      error: 'Recorder requires remote execution',\n    };\n  }\n\n  async getRecorderCapabilities(): Promise<PlaygroundRecorderCapabilitiesResult> {\n    if (this.adapter instanceof RemoteExecutionAdapter) {\n      return this.adapter.getRecorderCapabilities();\n    }\n    return {\n      supported: false,\n      source: 'unsupported',\n      error: 'Recorder requires remote execution',\n    };\n  }\n\n  async stopRecorderSession(): Promise<PlaygroundInteractResult> {\n    if (this.adapter instanceof RemoteExecutionAdapter) {\n      return this.adapter.stopRecorderSession();\n    }\n    return { ok: true };\n  }\n\n  async getRecorderEvents(since = 0): Promise<PlaygroundRecorderEventsResult> {\n    if (this.adapter instanceof RemoteExecutionAdapter) {\n      return this.adapter.getRecorderEvents(since);\n    }\n    return { events: [], nextIndex: since };\n  }\n\n  async describeRecorderEventAtPoint(\n    event: PlaygroundRecorderEvent,\n  ): Promise<PlaygroundRecorderDescribeResult> {\n    if (this.adapter instanceof RemoteExecutionAdapter) {\n      return this.adapter.describeRecorderEventAtPoint(event);\n    }\n    return {\n      ok: false,\n      error: 'Recorder aiDescribe requires remote execution',\n    };\n  }\n\n  async getRecorderScreenshotAsset(assetId: string): Promise<string | null> {\n    if (this.adapter instanceof RemoteExecutionAdapter) {\n      return this.adapter.getRecorderScreenshotAsset(assetId);\n    }\n    return null;\n  }\n\n  getRecorderScreenshotAssetUrl(assetId: string): string | null {\n    return this.adapter.getRecorderScreenshotAssetUrl(assetId);\n  }\n\n  async clearRecorderScreenshotAssets(sessionId: string): Promise<void> {\n    if (this.adapter instanceof RemoteExecutionAdapter) {\n      await this.adapter.clearRecorderScreenshotAssets(sessionId);\n    }\n  }\n\n  async pruneRecorderScreenshotAssets(\n    sessionId: string,\n    assetIds: string[],\n  ): Promise<void> {\n    if (this.adapter instanceof RemoteExecutionAdapter) {\n      await this.adapter.pruneRecorderScreenshotAssets(sessionId, assetIds);\n    }\n  }\n\n  // Get interface information (type and description)\n  async getInterfaceInfo(): Promise<{\n    type: string;\n    description?: string;\n    size?: { width: number; height: number };\n    navigationState?: { isLoading: boolean };\n    /** Action names exposed by the connected device's actionSpace. */\n    actionTypes?: string[];\n  } | null> {\n    const adapter = this.runtimeMetadataAdapter();\n    if (!adapter) {\n      return null;\n    }\n\n    return adapter.getInterfaceInfo();\n  }\n\n  async getRuntimeInfo(): Promise<PlaygroundRuntimeInfo | null> {\n    const adapter = this.runtimeMetadataAdapter();\n    if (!adapter) {\n      return null;\n    }\n\n    return adapter.getRuntimeInfo();\n  }\n\n  async getSessionInfo(): Promise<PlaygroundSessionState | null> {\n    if (this.adapter instanceof RemoteExecutionAdapter) {\n      return this.adapter.getSessionInfo();\n    }\n\n    return null;\n  }\n\n  async getSessionSetup(\n    input?: Record<string, unknown>,\n  ): Promise<PlaygroundSessionSetup | null> {\n    if (this.adapter instanceof RemoteExecutionAdapter) {\n      return this.adapter.getSessionSetup(input);\n    }\n\n    return null;\n  }\n\n  async listSessionTargets(): Promise<PlaygroundSessionTarget[]> {\n    if (this.adapter instanceof RemoteExecutionAdapter) {\n      return this.adapter.listSessionTargets();\n    }\n\n    return [];\n  }\n\n  async createSession(input?: Record<string, unknown>): Promise<{\n    session: PlaygroundSessionState;\n    runtimeInfo: PlaygroundRuntimeInfo;\n  }> {\n    if (this.adapter instanceof RemoteExecutionAdapter) {\n      return this.adapter.createSession(input);\n    }\n\n    throw new Error('Session creation is only supported in server mode');\n  }\n\n  async destroySession(): Promise<{\n    session: PlaygroundSessionState;\n    runtimeInfo: PlaygroundRuntimeInfo;\n  }> {\n    if (this.adapter instanceof RemoteExecutionAdapter) {\n      return this.adapter.destroySession();\n    }\n\n    throw new Error('Session destruction is only supported in server mode');\n  }\n\n  // Get service mode based on adapter type\n  getServiceMode(): 'In-Browser-Extension' | 'Server' {\n    if (this.adapter instanceof LocalExecutionAdapter) {\n      return 'In-Browser-Extension';\n    }\n    return 'Server';\n  }\n}\n"],"names":["PlaygroundSDK","type","serverUrl","agent","agentFactory","Error","LocalExecutionAdapter","finalServerUrl","window","PLAYGROUND_SERVER_PORT","RemoteExecutionAdapter","actionType","value","options","result","hook","context","action","error","needsStructuredParams","aiConfig","requestId","callback","payload","sessionId","since","event","assetId","assetIds","adapter","input","config"],"mappings":"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"}