{"version":3,"sources":["../../../../tools/browser/profiles/core.ts","../../../../package.json","../../../../version.ts","../../../../tools/utils/resilience.ts","../../../../tools/browser/errors.ts","../../../../tools/browser/profiles/types.ts"],"sourcesContent":["/**\n * ProfilesClient - Manage browser profiles for storing login state.\n *\n * @example\n * ```typescript\n * const morph = new MorphClient({ apiKey: '...' });\n *\n * // Create a profile + live setup session\n * const setup = await morph.browser.profiles.createProfile({\n *   name: 'LinkedIn',\n *   repoId: 'owner/repo'\n * });\n *\n * console.log('Sign in at:', setup.session.debugUrl);\n * // User logs in, then explicitly save\n * await setup.save();\n *\n * // Use profile in browser tasks\n * await morph.browser.execute({\n *   task: 'Check notifications',\n *   url: 'https://linkedin.com',\n *   profileId: profile.id\n * });\n * ```\n */\n\nimport { fetchWithRetry } from '../../utils/resilience.js';\nimport type { BrowserConfig } from '../types.js';\nimport {\n  MorphValidationError,\n  MorphAuthenticationError,\n  parseAPIError,\n} from '../errors.js';\nimport type {\n  Profile,\n  ProfileSetup,\n  ProfileWithMethods,\n  CreateProfileInput,\n  ProfileListResponse,\n  ProfileSession,\n  ProfileSessionInput,\n  SaveProfileSessionInput,\n  ProfileStateResponse,\n  RepoSummary,\n  RepoListResponse,\n  APIProfile,\n  APIProfileSession,\n  APIProfileStateResponse,\n} from './types.js';\nimport {\n  transformProfile,\n  transformCreateInput,\n  transformSession,\n  transformSaveInput,\n  transformStateResponse,\n} from './types.js';\n\nconst DEFAULT_API_URL = process.env.MORPH_ENVIRONMENT === 'DEV'\n  ? 'http://localhost:8000'\n  : 'https://browser.morphllm.com';\n\n/**\n * ProfilesClient class for managing browser profiles.\n *\n * Access via `morph.browser.profiles` on a MorphClient instance.\n */\nexport class ProfilesClient {\n  private config: BrowserConfig;\n\n  constructor(config: BrowserConfig) {\n    this.config = config;\n  }\n\n  /**\n   * Create a new browser profile and immediately start a live session.\n   *\n   * @param input - Profile creation parameters\n   * @returns Profile setup handle with live URL + save()\n   * @throws {MorphValidationError} If input validation fails\n   * @throws {MorphProfileLimitError} If profile limit is exceeded\n   * @throws {MorphAuthenticationError} If API key is missing or invalid\n   *\n   * @example\n   * ```typescript\n * const setup = await morph.browser.profiles.createProfile({\n *   name: 'LinkedIn Production',\n *   repoId: 'owner/repo'\n * });\n * console.log(setup.session.debugUrl);\n * await setup.save();\n   * ```\n   */\n  async createProfile(input: CreateProfileInput): Promise<ProfileSetup> {\n    return createProfile(input, this.config);\n  }\n\n  /**\n   * List all profiles for the authenticated user.\n   *\n   * @param repoId - Optional repository ID to filter by\n   * @returns Array of profiles\n   *\n   * @example\n   * ```typescript\n   * // List all profiles\n   * const allProfiles = await morph.browser.profiles.listProfiles();\n   *\n   * // List profiles for a specific repo\n   * const repoProfiles = await morph.browser.profiles.listProfiles('owner/repo');\n   * ```\n   */\n  async listProfiles(repoId?: string): Promise<Profile[]> {\n    return listProfiles(this.config, repoId);\n  }\n\n  /**\n   * Get a profile by ID with convenience methods.\n   *\n   * @param id - Profile ID\n   * @returns Profile with attached methods\n   * @throws {MorphNotFoundError} If profile is not found\n   *\n   * @example\n   * ```typescript\n   * const profile = await morph.browser.profiles.getProfile('profile-id');\n   * const state = await profile.getState();\n   * await profile.delete();\n   * ```\n   */\n  async getProfile(id: string): Promise<ProfileWithMethods> {\n    return getProfile(id, this.config);\n  }\n\n  /**\n   * Update a profile by opening a live session (no rename).\n   *\n   * @param id - Profile ID\n   * @returns Profile setup handle with live URL + save()\n   */\n  async updateProfile(id: string): Promise<ProfileSetup> {\n    return updateProfile(id, this.config);\n  }\n\n  /**\n   * Delete a profile.\n   *\n   * @param id - Profile ID\n   * @throws {MorphNotFoundError} If profile is not found\n   */\n  async deleteProfile(id: string): Promise<void> {\n    return deleteProfile(id, this.config);\n  }\n\n  /**\n   * Start a browser session for profile setup.\n   *\n   * Returns a live URL where the user can sign into accounts.\n   * After signing in, call `saveSession` to persist the state.\n   *\n   * @param input - Optional session parameters\n   * @returns Session with debug URL\n   *\n   * @example\n   * ```typescript\n   * const session = await morph.browser.profiles.startSession();\n   * console.log('Sign in at:', session.debugUrl);\n   * // Open debugUrl in browser, user signs in...\n   * await morph.browser.profiles.saveSession(session.sessionId, profile.id);\n   * ```\n   */\n  async startSession(input?: ProfileSessionInput): Promise<ProfileSession> {\n    return startProfileSession(this.config, input);\n  }\n\n  /**\n   * Save browser state from a session to a profile.\n   *\n   * Call this after the user is done signing into accounts.\n   * Extracts cookies, localStorage, and sessionStorage.\n   *\n   * @param sessionId - Browser session ID from startSession\n   * @param profileId - Profile ID to save state to\n   * @returns Updated profile with cookie domains\n   */\n  async saveSession(sessionId: string, profileId: string): Promise<Profile> {\n    return saveProfileSession({ sessionId, profileId }, this.config);\n  }\n\n  /**\n   * List available repo IDs (discovery).\n   *\n   * @returns Repo summaries with profile counts\n   */\n  async listRepos(): Promise<RepoSummary[]> {\n    return listRepos(this.config);\n  }\n\n  /**\n   * Get the presigned URL for a profile's state.\n   *\n   * Use this to download the raw state JSON for debugging\n   * or to restore state manually.\n   *\n   * @param profileId - Profile ID\n   * @returns State URL with expiry information\n   */\n  async getProfileState(profileId: string): Promise<ProfileStateResponse> {\n    return getProfileState(profileId, this.config);\n  }\n}\n\n// ============================================================================\n// Validation Helpers\n// ============================================================================\n\nfunction validateCreateInput(input: CreateProfileInput): void {\n  if (!input.name || typeof input.name !== 'string') {\n    throw new MorphValidationError('name is required', 'name');\n  }\n\n  const trimmedName = input.name.trim();\n  if (trimmedName.length === 0) {\n    throw new MorphValidationError('name cannot be empty', 'name');\n  }\n\n  if (trimmedName.length > 100) {\n    throw new MorphValidationError('name must be 100 characters or less', 'name');\n  }\n\n  if (!input.repoId || typeof input.repoId !== 'string') {\n    throw new MorphValidationError('repoId is required', 'repoId');\n  }\n\n  if (input.repoId.trim().length === 0) {\n    throw new MorphValidationError('repoId cannot be empty', 'repoId');\n  }\n}\n\nfunction validateId(id: string, fieldName: string): void {\n  if (!id || typeof id !== 'string') {\n    throw new MorphValidationError(`${fieldName} is required`, fieldName);\n  }\n\n  if (id.trim().length === 0) {\n    throw new MorphValidationError(`${fieldName} cannot be empty`, fieldName);\n  }\n}\n\n// ============================================================================\n// Standalone Functions\n// ============================================================================\n\n/**\n * Create a new browser profile.\n */\nexport async function createProfile(\n  input: CreateProfileInput,\n  config: BrowserConfig = {}\n): Promise<ProfileSetup> {\n  validateCreateInput(input);\n\n  const apiUrl = config.apiUrl || DEFAULT_API_URL;\n  const headers = buildHeaders(config);\n\n  const response = await fetchWithRetry(\n    `${apiUrl}/profiles`,\n    {\n      method: 'POST',\n      headers,\n      body: JSON.stringify(transformCreateInput(input)),\n    },\n    config.retryConfig\n  );\n\n  if (!response.ok) {\n    const errorText = await response.text().catch(() => response.statusText);\n    const requestId = response.headers.get('x-request-id') || undefined;\n    throw parseAPIError(response.status, errorText, requestId);\n  }\n\n  const apiProfile: APIProfile = await response.json();\n  const profile = transformProfile(apiProfile);\n  const session = await startProfileSession(config, { profileId: profile.id });\n  return buildProfileSetup(profile, session, config);\n}\n\n/**\n * List all profiles for the authenticated user.\n */\nexport async function listProfiles(\n  config: BrowserConfig = {},\n  repoId?: string\n): Promise<Profile[]> {\n  const apiUrl = config.apiUrl || DEFAULT_API_URL;\n  const headers = buildHeaders(config);\n\n  const url = repoId\n    ? `${apiUrl}/profiles?repo_id=${encodeURIComponent(repoId)}`\n    : `${apiUrl}/profiles`;\n\n  const response = await fetchWithRetry(\n    url,\n    { method: 'GET', headers },\n    config.retryConfig\n  );\n\n  if (!response.ok) {\n    const errorText = await response.text().catch(() => response.statusText);\n    const requestId = response.headers.get('x-request-id') || undefined;\n    throw parseAPIError(response.status, errorText, requestId);\n  }\n\n  const data: { profiles: APIProfile[] } = await response.json();\n  return data.profiles.map(transformProfile);\n}\n\n/**\n * Get a profile by ID with convenience methods.\n */\nexport async function getProfile(\n  id: string,\n  config: BrowserConfig = {}\n): Promise<ProfileWithMethods> {\n  validateId(id, 'id');\n\n  const apiUrl = config.apiUrl || DEFAULT_API_URL;\n  const headers = buildHeaders(config);\n\n  const response = await fetchWithRetry(\n    `${apiUrl}/profiles/${encodeURIComponent(id)}`,\n    { method: 'GET', headers },\n    config.retryConfig\n  );\n\n  if (!response.ok) {\n    const errorText = await response.text().catch(() => response.statusText);\n    const requestId = response.headers.get('x-request-id') || undefined;\n    throw parseAPIError(response.status, errorText, requestId);\n  }\n\n  const apiProfile: APIProfile = await response.json();\n  const profile = transformProfile(apiProfile);\n\n  // Attach convenience methods\n  return {\n    ...profile,\n    getState: () => getProfileState(id, config),\n    delete: () => deleteProfile(id, config),\n  };\n}\n\n/**\n * Update a profile.\n */\nexport async function updateProfile(\n  id: string,\n  config: BrowserConfig = {}\n): Promise<ProfileSetup> {\n  validateId(id, 'id');\n  const profile = await fetchProfile(id, config);\n  const session = await startProfileSession(config, { profileId: profile.id });\n  return buildProfileSetup(profile, session, config);\n}\n\n/**\n * Delete a profile.\n */\nexport async function deleteProfile(\n  id: string,\n  config: BrowserConfig = {}\n): Promise<void> {\n  validateId(id, 'id');\n\n  const apiUrl = config.apiUrl || DEFAULT_API_URL;\n  const headers = buildHeaders(config);\n\n  const response = await fetchWithRetry(\n    `${apiUrl}/profiles/${encodeURIComponent(id)}`,\n    { method: 'DELETE', headers },\n    config.retryConfig\n  );\n\n  if (!response.ok) {\n    const errorText = await response.text().catch(() => response.statusText);\n    const requestId = response.headers.get('x-request-id') || undefined;\n    throw parseAPIError(response.status, errorText, requestId);\n  }\n}\n\n/**\n * Start a browser session for profile setup.\n */\nexport async function startProfileSession(\n  config: BrowserConfig = {},\n  input?: ProfileSessionInput\n): Promise<ProfileSession> {\n  if (!config.apiKey) {\n    throw new MorphAuthenticationError();\n  }\n\n  const apiUrl = config.apiUrl || DEFAULT_API_URL;\n  const headers = buildHeaders(config);\n\n  // Transform input if provided\n  const body = input?.profileId\n    ? { profile_id: input.profileId }\n    : {};\n\n  const response = await fetchWithRetry(\n    `${apiUrl}/profiles/session/start`,\n    {\n      method: 'POST',\n      headers,\n      body: JSON.stringify(body),\n    },\n    config.retryConfig\n  );\n\n  if (!response.ok) {\n    const errorText = await response.text().catch(() => response.statusText);\n    const requestId = response.headers.get('x-request-id') || undefined;\n    throw parseAPIError(response.status, errorText, requestId);\n  }\n\n  const apiSession: APIProfileSession = await response.json();\n  return transformSession(apiSession);\n}\n\n/**\n * Save browser state from a session to a profile.\n */\nexport async function saveProfileSession(\n  input: SaveProfileSessionInput,\n  config: BrowserConfig = {}\n): Promise<Profile> {\n  validateId(input.sessionId, 'sessionId');\n  validateId(input.profileId, 'profileId');\n\n  const apiUrl = config.apiUrl || DEFAULT_API_URL;\n  const headers = buildHeaders(config);\n\n  const response = await fetchWithRetry(\n    `${apiUrl}/profiles/session/save`,\n    {\n      method: 'POST',\n      headers,\n      body: JSON.stringify(transformSaveInput(input)),\n    },\n    config.retryConfig\n  );\n\n  if (!response.ok) {\n    const errorText = await response.text().catch(() => response.statusText);\n    const requestId = response.headers.get('x-request-id') || undefined;\n    throw parseAPIError(response.status, errorText, requestId);\n  }\n\n  const apiProfile: APIProfile = await response.json();\n  return transformProfile(apiProfile);\n}\n\n/**\n * List repo IDs available to the authenticated user/org.\n */\nexport async function listRepos(config: BrowserConfig = {}): Promise<RepoSummary[]> {\n  const apiUrl = config.apiUrl || DEFAULT_API_URL;\n  const headers = buildHeaders(config);\n\n  const response = await fetchWithRetry(\n    `${apiUrl}/repos`,\n    { method: 'GET', headers },\n    config.retryConfig\n  );\n\n  if (!response.ok) {\n    const errorText = await response.text().catch(() => response.statusText);\n    const requestId = response.headers.get('x-request-id') || undefined;\n    throw parseAPIError(response.status, errorText, requestId);\n  }\n\n  const data = await response.json();\n  const repos = Array.isArray(data?.repos) ? data.repos : [];\n\n  return repos.map((repo: any) => ({\n    repoId: repo.repo_id,\n    repoFullName: repo.repo_full_name,\n    profileCount: repo.profile_count ?? 0,\n  })) satisfies RepoSummary[];\n}\n\n/**\n * Get the presigned URL for a profile's state.\n */\nexport async function getProfileState(\n  profileId: string,\n  config: BrowserConfig = {}\n): Promise<ProfileStateResponse> {\n  validateId(profileId, 'profileId');\n\n  const apiUrl = config.apiUrl || DEFAULT_API_URL;\n  const headers = buildHeaders(config);\n\n  const response = await fetchWithRetry(\n    `${apiUrl}/profiles/${encodeURIComponent(profileId)}/state`,\n    { method: 'GET', headers },\n    config.retryConfig\n  );\n\n  if (!response.ok) {\n    const errorText = await response.text().catch(() => response.statusText);\n    const requestId = response.headers.get('x-request-id') || undefined;\n    throw parseAPIError(response.status, errorText, requestId);\n  }\n\n  const apiState: APIProfileStateResponse = await response.json();\n  return transformStateResponse(apiState);\n}\n\n// ============================================================================\n// Helpers\n// ============================================================================\n\nfunction buildHeaders(config: BrowserConfig): Record<string, string> {\n  const headers: Record<string, string> = { 'Content-Type': 'application/json' };\n  if (config.apiKey) {\n    headers['Authorization'] = `Bearer ${config.apiKey}`;\n  }\n  return headers;\n}\n\nasync function fetchProfile(id: string, config: BrowserConfig): Promise<Profile> {\n  const apiUrl = config.apiUrl || DEFAULT_API_URL;\n  const headers = buildHeaders(config);\n\n  const response = await fetchWithRetry(\n    `${apiUrl}/profiles/${encodeURIComponent(id)}`,\n    { method: 'GET', headers },\n    config.retryConfig\n  );\n\n  if (!response.ok) {\n    const errorText = await response.text().catch(() => response.statusText);\n    const requestId = response.headers.get('x-request-id') || undefined;\n    throw parseAPIError(response.status, errorText, requestId);\n  }\n\n  const apiProfile: APIProfile = await response.json();\n  return transformProfile(apiProfile);\n}\n\nfunction buildProfileSetup(profile: Profile, session: ProfileSession, config: BrowserConfig): ProfileSetup {\n  return {\n    profile,\n    session,\n    save: () => saveProfileSession({ sessionId: session.sessionId, profileId: profile.id }, config),\n  };\n}\n","{\n  \"name\": \"@morphllm/morphsdk\",\n  \"version\": \"0.2.194\",\n  \"description\": \"TypeScript SDK and CLI for Morph Fast Apply integration\",\n  \"type\": \"module\",\n  \"main\": \"./dist/index.cjs\",\n  \"module\": \"./dist/index.js\",\n  \"types\": \"./dist/index.d.ts\",\n  \"exports\": {\n    \".\": {\n      \"types\": \"./dist/index.d.ts\",\n      \"import\": \"./dist/index.js\",\n      \"require\": \"./dist/index.cjs\"\n    },\n    \"./logger\": {\n      \"types\": \"./dist/logger.d.ts\",\n      \"import\": \"./dist/logger.js\",\n      \"require\": \"./dist/logger.cjs\"\n    },\n    \"./edge\": {\n      \"types\": \"./dist/edge.d.ts\",\n      \"import\": \"./dist/edge.js\",\n      \"require\": \"./dist/edge.cjs\"\n    },\n    \"./tools/warp-grep\": {\n      \"types\": \"./dist/tools/warp_grep/index.d.ts\",\n      \"import\": \"./dist/tools/warp_grep/index.js\",\n      \"require\": \"./dist/tools/warp_grep/index.cjs\"\n    },\n    \"./tools/warp-grep/openai\": {\n      \"types\": \"./dist/tools/warp_grep/openai.d.ts\",\n      \"import\": \"./dist/tools/warp_grep/openai.js\",\n      \"require\": \"./dist/tools/warp_grep/openai.cjs\"\n    },\n    \"./tools/warp-grep/anthropic\": {\n      \"types\": \"./dist/tools/warp_grep/anthropic.d.ts\",\n      \"import\": \"./dist/tools/warp_grep/anthropic.js\",\n      \"require\": \"./dist/tools/warp_grep/anthropic.cjs\"\n    },\n    \"./tools/warp-grep/vercel\": {\n      \"types\": \"./dist/tools/warp_grep/vercel.d.ts\",\n      \"import\": \"./dist/tools/warp_grep/vercel.js\",\n      \"require\": \"./dist/tools/warp_grep/vercel.cjs\"\n    },\n    \"./tools/warp-grep/client\": {\n      \"types\": \"./dist/tools/warp_grep/client.d.ts\",\n      \"import\": \"./dist/tools/warp_grep/client.js\",\n      \"require\": \"./dist/tools/warp_grep/client.cjs\"\n    },\n    \"./tools/warp-grep/gemini\": {\n      \"types\": \"./dist/tools/warp_grep/gemini.d.ts\",\n      \"import\": \"./dist/tools/warp_grep/gemini.js\",\n      \"require\": \"./dist/tools/warp_grep/gemini.cjs\"\n    },\n    \"./tools/warp-grep/harness\": {\n      \"types\": \"./dist/tools/warp_grep/harness.d.ts\",\n      \"import\": \"./dist/tools/warp_grep/harness.js\",\n      \"require\": \"./dist/tools/warp_grep/harness.cjs\"\n    },\n    \"./tracing\": {\n      \"types\": \"./dist/tracing/index.d.ts\",\n      \"import\": \"./dist/tracing/index.js\",\n      \"require\": \"./dist/tracing/index.cjs\"\n    },\n    \"./tracing/otel\": {\n      \"types\": \"./dist/tracing/otel.d.ts\",\n      \"import\": \"./dist/tracing/otel.js\",\n      \"require\": \"./dist/tracing/otel.cjs\"\n    },\n    \"./tools/fastapply\": {\n      \"types\": \"./dist/tools/fastapply/index.d.ts\",\n      \"import\": \"./dist/tools/fastapply/index.js\",\n      \"require\": \"./dist/tools/fastapply/index.cjs\"\n    },\n    \"./tools/fastapply/anthropic\": {\n      \"types\": \"./dist/tools/fastapply/anthropic.d.ts\",\n      \"import\": \"./dist/tools/fastapply/anthropic.js\",\n      \"require\": \"./dist/tools/fastapply/anthropic.cjs\"\n    },\n    \"./tools/fastapply/openai\": {\n      \"types\": \"./dist/tools/fastapply/openai.d.ts\",\n      \"import\": \"./dist/tools/fastapply/openai.js\",\n      \"require\": \"./dist/tools/fastapply/openai.cjs\"\n    },\n    \"./tools/fastapply/vercel\": {\n      \"types\": \"./dist/tools/fastapply/vercel.d.ts\",\n      \"import\": \"./dist/tools/fastapply/vercel.js\",\n      \"require\": \"./dist/tools/fastapply/vercel.cjs\"\n    },\n    \"./tools/codebase-search\": {\n      \"types\": \"./dist/tools/codebase_search/index.d.ts\",\n      \"import\": \"./dist/tools/codebase_search/index.js\",\n      \"require\": \"./dist/tools/codebase_search/index.cjs\"\n    },\n    \"./tools/codebase-search/anthropic\": {\n      \"types\": \"./dist/tools/codebase_search/anthropic.d.ts\",\n      \"import\": \"./dist/tools/codebase_search/anthropic.js\",\n      \"require\": \"./dist/tools/codebase_search/anthropic.cjs\"\n    },\n    \"./tools/codebase-search/openai\": {\n      \"types\": \"./dist/tools/codebase_search/openai.d.ts\",\n      \"import\": \"./dist/tools/codebase_search/openai.js\",\n      \"require\": \"./dist/tools/codebase_search/openai.cjs\"\n    },\n    \"./tools/codebase-search/vercel\": {\n      \"types\": \"./dist/tools/codebase_search/vercel.d.ts\",\n      \"import\": \"./dist/tools/codebase_search/vercel.js\",\n      \"require\": \"./dist/tools/codebase_search/vercel.cjs\"\n    },\n    \"./tools/git\": {\n      \"types\": \"./dist/git/index.d.ts\",\n      \"import\": \"./dist/git/index.js\",\n      \"require\": \"./dist/git/index.cjs\"\n    },\n    \"./tools/browser\": {\n      \"types\": \"./dist/tools/browser/index.d.ts\",\n      \"import\": \"./dist/tools/browser/index.js\",\n      \"require\": \"./dist/tools/browser/index.cjs\"\n    },\n    \"./tools/browser/anthropic\": {\n      \"types\": \"./dist/tools/browser/anthropic.d.ts\",\n      \"import\": \"./dist/tools/browser/anthropic.js\",\n      \"require\": \"./dist/tools/browser/anthropic.cjs\"\n    },\n    \"./tools/browser/openai\": {\n      \"types\": \"./dist/tools/browser/openai.d.ts\",\n      \"import\": \"./dist/tools/browser/openai.js\",\n      \"require\": \"./dist/tools/browser/openai.cjs\"\n    },\n    \"./tools/browser/vercel\": {\n      \"types\": \"./dist/tools/browser/vercel.d.ts\",\n      \"import\": \"./dist/tools/browser/vercel.js\",\n      \"require\": \"./dist/tools/browser/vercel.cjs\"\n    },\n    \"./tools/browser/profiles\": {\n      \"types\": \"./dist/tools/browser/profiles/index.d.ts\",\n      \"import\": \"./dist/tools/browser/profiles/index.js\",\n      \"require\": \"./dist/tools/browser/profiles/index.cjs\"\n    },\n    \"./modelrouter\": {\n      \"types\": \"./dist/modelrouter/index.d.ts\",\n      \"import\": \"./dist/modelrouter/index.js\",\n      \"require\": \"./dist/modelrouter/index.cjs\"\n    },\n    \"./tools/compact\": {\n      \"types\": \"./dist/tools/compact/index.d.ts\",\n      \"import\": \"./dist/tools/compact/index.js\",\n      \"require\": \"./dist/tools/compact/index.cjs\"\n    },\n    \"./tools/reflex\": {\n      \"types\": \"./dist/tools/reflex/index.d.ts\",\n      \"import\": \"./dist/tools/reflex/index.js\",\n      \"require\": \"./dist/tools/reflex/index.cjs\"\n    },\n    \"./tools/traces\": {\n      \"types\": \"./dist/tools/traces/index.d.ts\",\n      \"import\": \"./dist/tools/traces/index.js\",\n      \"require\": \"./dist/tools/traces/index.cjs\"\n    },\n    \"./subagents\": {\n      \"types\": \"./dist/subagents/index.d.ts\",\n      \"import\": \"./dist/subagents/index.js\",\n      \"require\": \"./dist/subagents/index.cjs\"\n    },\n    \"./subagents/vercel\": {\n      \"types\": \"./dist/subagents/vercel.d.ts\",\n      \"import\": \"./dist/subagents/vercel.js\",\n      \"require\": \"./dist/subagents/vercel.cjs\"\n    },\n    \"./subagents/anthropic\": {\n      \"types\": \"./dist/subagents/anthropic.d.ts\",\n      \"import\": \"./dist/subagents/anthropic.js\",\n      \"require\": \"./dist/subagents/anthropic.cjs\"\n    }\n  },\n  \"files\": [\n    \"dist/**/*.js\",\n    \"dist/**/*.cjs\",\n    \"dist/**/*.d.ts\",\n    \"dist/**/*.map\",\n    \"!dist/**/__tests__/**\",\n    \"!dist/**/*.test.*\"\n  ],\n  \"scripts\": {\n    \"build\": \"tsup version.ts index.ts edge.ts client.ts core/index.ts core/client.ts core/resource.ts core/error.ts tools/index.ts tools/fastapply/index.ts tools/fastapply/core.ts tools/fastapply/apply.ts tools/fastapply/types.ts tools/fastapply/prompts.ts tools/fastapply/anthropic.ts tools/fastapply/openai.ts tools/fastapply/vercel.ts tools/codebase_search/index.ts tools/codebase_search/core.ts tools/codebase_search/types.ts tools/codebase_search/prompts.ts tools/codebase_search/anthropic.ts tools/codebase_search/openai.ts tools/codebase_search/vercel.ts tools/warp_grep/index.ts tools/warp_grep/client.ts tools/warp_grep/openai.ts tools/warp_grep/anthropic.ts tools/warp_grep/vercel.ts tools/warp_grep/gemini.ts tools/warp_grep/harness.ts tools/warp_grep/agent/config.ts tools/warp_grep/agent/parser.ts tools/warp_grep/agent/runner.ts tools/warp_grep/agent/types.ts tools/warp_grep/agent/formatter.ts tools/warp_grep/providers/types.ts tools/warp_grep/providers/local.ts tools/warp_grep/providers/remote.ts tools/warp_grep/providers/code_storage_http.ts tools/warp_grep/tools/grep.ts tools/warp_grep/tools/analyse.ts tools/warp_grep/tools/read.ts tools/warp_grep/tools/finish.ts tools/warp_grep/utils/paths.ts tools/warp_grep/utils/github.ts tools/warp_grep/utils/ripgrep.ts tools/warp_grep/utils/format.ts tools/warp_grep/utils/files.ts git/index.ts git/client.ts git/config.ts git/types.ts tools/browser/index.ts tools/browser/core.ts tools/browser/types.ts tools/browser/prompts.ts tools/browser/anthropic.ts tools/browser/openai.ts tools/browser/vercel.ts tools/browser/live.ts tools/browser/errors.ts tools/browser/profiles/index.ts tools/browser/profiles/core.ts tools/browser/profiles/types.ts modelrouter/index.ts modelrouter/core.ts modelrouter/types.ts tools/compact/index.ts tools/compact/core.ts tools/compact/types.ts tools/reflex/index.ts tools/reflex/core.ts tools/reflex/types.ts tools/traces/index.ts tools/traces/core.ts tools/traces/types.ts tools/utils/resilience.ts subagents/index.ts subagents/types.ts subagents/prompts.ts subagents/vercel.ts subagents/anthropic.ts tracing/index.ts tracing/core.ts tracing/interaction.ts tracing/otel.ts tracing/types.ts --format esm,cjs --sourcemap --clean --dts --dts-resolve\",\n    \"prepare\": \"npm run build\",\n    \"typecheck\": \"tsc --noEmit\",\n    \"lint\": \"eslint .\",\n    \"test\": \"vitest run\",\n    \"test:watch\": \"vitest watch\",\n    \"test:anthropic\": \"vitest run anthropic\",\n    \"test:openai\": \"vitest run openai\",\n    \"test:vercel\": \"vitest run vercel\",\n    \"test:git\": \"vitest run git\",\n    \"test:browser\": \"vitest run browser\",\n    \"test:agent\": \"npx tsx tests/fullAgentTest.ts\",\n    \"test:integration\": \"npx tsx tests/fullIntegrationTest.ts\",\n    \"test:e2e\": \"vitest run --config vitest.e2e.config.ts\",\n    \"release:patch\": \"npm version patch && npm publish\",\n    \"release:minor\": \"npm version minor && npm publish\",\n    \"release:major\": \"npm version major && npm publish\"\n  },\n  \"keywords\": [\n    \"morph\",\n    \"fast-apply\",\n    \"cli\",\n    \"sdk\",\n    \"edit-file\"\n  ],\n  \"engines\": {\n    \"node\": \">=18\"\n  },\n  \"license\": \"MIT\",\n  \"dependencies\": {\n    \"@opentelemetry/api\": \"^1.9.0\",\n    \"@opentelemetry/exporter-trace-otlp-http\": \"^0.203.0\",\n    \"@opentelemetry/sdk-trace-base\": \"^2.7.1\",\n    \"@traceloop/node-server-sdk\": \"^0.27.0\",\n    \"@vscode/ripgrep\": \"^1.17.0\",\n    \"ai\": \">=5.0.0\",\n    \"diff\": \"^7.0.0\",\n    \"isomorphic-git\": \"^1.25.10\",\n    \"openai\": \"^4.52.7\",\n    \"zod\": \">=3.23.0\"\n  },\n  \"devDependencies\": {\n    \"@ai-sdk/anthropic\": \"^2.0.70\",\n    \"@ai-sdk/openai\": \"^2.0.35\",\n    \"@anthropic-ai/sdk\": \"^0.30.1\",\n    \"@google/generative-ai\": \"^0.24.1\",\n    \"@types/diff\": \"^7.0.2\",\n    \"@types/node\": \"^20.14.10\",\n    \"@typescript-eslint/eslint-plugin\": \"^7.18.0\",\n    \"@typescript-eslint/parser\": \"^7.18.0\",\n    \"dotenv\": \"^16.4.5\",\n    \"eslint\": \"^8.57.0\",\n    \"shx\": \"^0.3.4\",\n    \"tsup\": \"^8.5.0\",\n    \"tsx\": \"^4.16.2\",\n    \"typescript\": \"^5.5.4\",\n    \"vitest\": \"^2.1.6\"\n  },\n  \"peerDependencies\": {\n    \"@anthropic-ai/sdk\": \">=0.25.0\",\n    \"@google/generative-ai\": \">=0.21.0\",\n    \"ai\": \">=5.0.0\",\n    \"zod\": \">=3.23.0\"\n  },\n  \"peerDependenciesMeta\": {\n    \"@anthropic-ai/sdk\": {\n      \"optional\": true\n    },\n    \"@google/generative-ai\": {\n      \"optional\": true\n    },\n    \"ai\": {\n      \"optional\": true\n    },\n    \"zod\": {\n      \"optional\": true\n    }\n  },\n  \"publishConfig\": {\n    \"access\": \"public\"\n  }\n}\n","import pkg from './package.json' with { type: 'json' };\nexport const SDK_VERSION: string = pkg.version;\n","/**\n * Resilience utilities for retry logic and timeout handling\n */\n\nimport { SDK_VERSION } from '../../version.js';\n\nexport interface RetryConfig {\n  maxRetries?: number;        // Default: 3\n  initialDelay?: number;      // Default: 1000ms\n  maxDelay?: number;          // Default: 30000ms\n  backoffMultiplier?: number; // Default: 2\n  retryableErrors?: string[]; // Default: ['ECONNREFUSED', 'ETIMEDOUT', 'ENOTFOUND']\n  onRetry?: (attempt: number, error: Error) => void;\n}\n\nconst DEFAULT_RETRY_CONFIG: Required<Omit<RetryConfig, 'onRetry'>> = {\n  maxRetries: 3,\n  initialDelay: 1000,\n  maxDelay: 30000,\n  backoffMultiplier: 2,\n  retryableErrors: ['ECONNREFUSED', 'ETIMEDOUT', 'ENOTFOUND'],\n};\n\n/**\n * Retry a fetch request with exponential backoff\n * \n * @param url - Request URL\n * @param options - Fetch options\n * @param retryConfig - Retry configuration\n * @returns Response from fetch\n * \n * @example\n * ```typescript\n * const response = await fetchWithRetry(\n *   'https://api.example.com/data',\n *   { method: 'POST', body: JSON.stringify(data) },\n *   { maxRetries: 5, initialDelay: 500 }\n * );\n * ```\n */\nexport async function fetchWithRetry(\n  url: string,\n  options: RequestInit,\n  retryConfig: RetryConfig = {}\n): Promise<Response> {\n  const {\n    maxRetries = DEFAULT_RETRY_CONFIG.maxRetries,\n    initialDelay = DEFAULT_RETRY_CONFIG.initialDelay,\n    maxDelay = DEFAULT_RETRY_CONFIG.maxDelay,\n    backoffMultiplier = DEFAULT_RETRY_CONFIG.backoffMultiplier,\n    retryableErrors = DEFAULT_RETRY_CONFIG.retryableErrors,\n    onRetry,\n  } = retryConfig;\n\n  let lastError: Error | null = null;\n  let delay = initialDelay;\n\n  // Inject SDK version header (caller-provided headers can override)\n  options = { ...options, headers: { 'X-Morph-SDK-Version': SDK_VERSION, ...options.headers } };\n\n  for (let attempt = 0; attempt <= maxRetries; attempt++) {\n    try {\n      const response = await fetch(url, options);\n      \n      // Retry on 429 (rate limit) or 503 (service unavailable)\n      if (response.status === 429 || response.status === 503) {\n        if (attempt < maxRetries) {\n          // Check for Retry-After header\n          const retryAfter = response.headers.get('Retry-After');\n          const waitTime = retryAfter \n            ? parseInt(retryAfter) * 1000 \n            : Math.min(delay, maxDelay);\n          \n          const error = new Error(`HTTP ${response.status}: Retrying after ${waitTime}ms`);\n          if (onRetry) {\n            onRetry(attempt + 1, error);\n          }\n          \n          await sleep(waitTime);\n          delay *= backoffMultiplier;\n          continue;\n        }\n      }\n\n      return response;\n    } catch (error) {\n      lastError = error as Error;\n      \n      // Check if error is retryable\n      const isRetryable = retryableErrors.some(errType => \n        lastError?.message?.includes(errType)\n      );\n\n      if (!isRetryable || attempt === maxRetries) {\n        throw lastError;\n      }\n\n      // Exponential backoff\n      const waitTime = Math.min(delay, maxDelay);\n      if (onRetry) {\n        onRetry(attempt + 1, lastError);\n      }\n      \n      await sleep(waitTime);\n      delay *= backoffMultiplier;\n    }\n  }\n\n  throw lastError || new Error('Max retries exceeded');\n}\n\n/**\n * Add timeout to any promise\n * \n * @param promise - Promise to wrap with timeout\n * @param timeoutMs - Timeout in milliseconds\n * @param errorMessage - Optional custom error message\n * @returns Promise that rejects if timeout is reached\n * \n * @example\n * ```typescript\n * const result = await withTimeout(\n *   fetchData(),\n *   5000,\n *   'Data fetch timed out'\n * );\n * ```\n */\nexport async function withTimeout<T>(\n  promise: Promise<T>,\n  timeoutMs: number,\n  errorMessage?: string\n): Promise<T> {\n  let timeoutId: NodeJS.Timeout | number;\n  \n  const timeoutPromise = new Promise<never>((_, reject) => {\n    timeoutId = setTimeout(() => {\n      reject(new Error(errorMessage || `Operation timed out after ${timeoutMs}ms`));\n    }, timeoutMs);\n  });\n\n  try {\n    const result = await Promise.race([promise, timeoutPromise]);\n    clearTimeout(timeoutId!);\n    return result;\n  } catch (error) {\n    clearTimeout(timeoutId!);\n    throw error;\n  }\n}\n\n/**\n * Sleep for specified milliseconds\n */\nfunction sleep(ms: number): Promise<void> {\n  return new Promise(resolve => setTimeout(resolve, ms));\n}\n\n/**\n * Unified error type for all tools\n */\nexport class MorphError extends Error {\n  constructor(\n    message: string,\n    public code: string,\n    public statusCode?: number,\n    public retryable: boolean = false\n  ) {\n    super(message);\n    this.name = 'MorphError';\n  }\n}\n\n\n","/**\n * Custom error classes for browser automation and profiles.\n *\n * @example\n * ```typescript\n * try {\n *   await morph.browser.profiles.createProfile({ name: '', repoId: 'owner/repo' });\n * } catch (e) {\n *   if (e instanceof MorphValidationError) {\n *     console.log('Validation failed:', e.field, e.message);\n *   } else if (e instanceof MorphAPIError) {\n *     console.log('API error:', e.code, e.statusCode);\n *   }\n * }\n * ```\n */\n\n/**\n * Error codes for Morph Browser SDK\n */\nexport type MorphErrorCode =\n  // Validation errors\n  | 'validation_error'\n  | 'invalid_parameter'\n  | 'missing_required_field'\n  // Authentication errors\n  | 'authentication_required'\n  | 'invalid_api_key'\n  | 'insufficient_permissions'\n  // Resource errors\n  | 'profile_not_found'\n  | 'session_not_found'\n  | 'resource_not_found'\n  // Limit errors\n  | 'profile_limit_exceeded'\n  | 'rate_limit_exceeded'\n  // Session errors\n  | 'session_expired'\n  | 'session_save_failed'\n  // Network errors\n  | 'network_error'\n  | 'timeout'\n  | 'service_unavailable';\n\n/**\n * Base error class for all Morph SDK errors.\n */\nexport class MorphError extends Error {\n  /** Error code for programmatic handling */\n  readonly code: MorphErrorCode;\n  /** Original cause of the error, if any */\n  readonly cause?: Error;\n\n  constructor(message: string, code: MorphErrorCode, cause?: Error) {\n    super(message);\n    this.name = 'MorphError';\n    this.code = code;\n    this.cause = cause;\n\n    // Maintains proper stack trace in V8 environments\n    if (Error.captureStackTrace) {\n      Error.captureStackTrace(this, this.constructor);\n    }\n  }\n\n  /**\n   * Returns a JSON representation of the error for logging.\n   */\n  toJSON() {\n    return {\n      name: this.name,\n      message: this.message,\n      code: this.code,\n      cause: this.cause?.message,\n    };\n  }\n}\n\n/**\n * Error thrown when API request validation fails.\n */\nexport class MorphValidationError extends MorphError {\n  /** The field that failed validation */\n  readonly field?: string;\n\n  constructor(message: string, field?: string) {\n    super(message, 'validation_error');\n    this.name = 'MorphValidationError';\n    this.field = field;\n  }\n\n  toJSON() {\n    return {\n      ...super.toJSON(),\n      field: this.field,\n    };\n  }\n}\n\n/**\n * Error thrown when an API request fails.\n */\nexport class MorphAPIError extends MorphError {\n  /** HTTP status code */\n  readonly statusCode: number;\n  /** Request ID for debugging (if available) */\n  readonly requestId?: string;\n  /** Raw response body */\n  readonly rawResponse?: string;\n\n  constructor(\n    message: string,\n    code: MorphErrorCode,\n    statusCode: number,\n    options?: {\n      requestId?: string;\n      rawResponse?: string;\n      cause?: Error;\n    }\n  ) {\n    super(message, code, options?.cause);\n    this.name = 'MorphAPIError';\n    this.statusCode = statusCode;\n    this.requestId = options?.requestId;\n    this.rawResponse = options?.rawResponse;\n  }\n\n  toJSON() {\n    return {\n      ...super.toJSON(),\n      statusCode: this.statusCode,\n      requestId: this.requestId,\n    };\n  }\n}\n\n/**\n * Error thrown when authentication fails.\n */\nexport class MorphAuthenticationError extends MorphAPIError {\n  constructor(message: string = 'Authentication required. Please provide a valid API key.') {\n    super(message, 'authentication_required', 401);\n    this.name = 'MorphAuthenticationError';\n  }\n}\n\n/**\n * Error thrown when rate limit is exceeded.\n */\nexport class MorphRateLimitError extends MorphAPIError {\n  /** When the rate limit resets (Unix timestamp) */\n  readonly resetAt?: number;\n  /** Number of seconds until reset */\n  readonly retryAfter?: number;\n\n  constructor(\n    message: string = 'Rate limit exceeded. Please retry later.',\n    options?: {\n      resetAt?: number;\n      retryAfter?: number;\n      requestId?: string;\n    }\n  ) {\n    super(message, 'rate_limit_exceeded', 429, { requestId: options?.requestId });\n    this.name = 'MorphRateLimitError';\n    this.resetAt = options?.resetAt;\n    this.retryAfter = options?.retryAfter;\n  }\n\n  toJSON() {\n    return {\n      ...super.toJSON(),\n      resetAt: this.resetAt,\n      retryAfter: this.retryAfter,\n    };\n  }\n}\n\n/**\n * Error thrown when a resource is not found.\n */\nexport class MorphNotFoundError extends MorphAPIError {\n  /** The type of resource that was not found */\n  readonly resourceType: string;\n  /** The ID of the resource that was not found */\n  readonly resourceId?: string;\n\n  constructor(resourceType: string, resourceId?: string) {\n    const message = resourceId\n      ? `${resourceType} '${resourceId}' not found`\n      : `${resourceType} not found`;\n    super(message, 'resource_not_found', 404);\n    this.name = 'MorphNotFoundError';\n    this.resourceType = resourceType;\n    this.resourceId = resourceId;\n  }\n\n  toJSON() {\n    return {\n      ...super.toJSON(),\n      resourceType: this.resourceType,\n      resourceId: this.resourceId,\n    };\n  }\n}\n\n/**\n * Error thrown when profile limit is exceeded.\n */\nexport class MorphProfileLimitError extends MorphAPIError {\n  /** Current number of profiles */\n  readonly currentCount?: number;\n  /** Maximum allowed profiles for the plan */\n  readonly maxAllowed?: number;\n\n  constructor(\n    message: string = 'Profile limit exceeded for your plan.',\n    options?: {\n      currentCount?: number;\n      maxAllowed?: number;\n      requestId?: string;\n    }\n  ) {\n    super(message, 'profile_limit_exceeded', 403, { requestId: options?.requestId });\n    this.name = 'MorphProfileLimitError';\n    this.currentCount = options?.currentCount;\n    this.maxAllowed = options?.maxAllowed;\n  }\n\n  toJSON() {\n    return {\n      ...super.toJSON(),\n      currentCount: this.currentCount,\n      maxAllowed: this.maxAllowed,\n    };\n  }\n}\n\n/**\n * Parse an API error response and return the appropriate error class.\n */\nexport function parseAPIError(\n  statusCode: number,\n  responseText: string,\n  requestId?: string\n): MorphAPIError {\n  // Try to parse JSON error response\n  let errorData: { detail?: string; code?: string; message?: string } = {};\n  try {\n    errorData = JSON.parse(responseText);\n  } catch {\n    // Not JSON, use raw text\n  }\n\n  const message = errorData.detail || errorData.message || responseText || 'Unknown error';\n  const code = errorData.code;\n\n  // Map status codes to specific error classes\n  switch (statusCode) {\n    case 401:\n      return new MorphAuthenticationError(message);\n\n    case 403:\n      if (code === 'profile_limit_exceeded' || message.toLowerCase().includes('limit')) {\n        return new MorphProfileLimitError(message, { requestId });\n      }\n      return new MorphAPIError(message, 'insufficient_permissions', statusCode, { requestId, rawResponse: responseText });\n\n    case 404:\n      if (message.toLowerCase().includes('profile')) {\n        return new MorphNotFoundError('Profile', undefined);\n      }\n      if (message.toLowerCase().includes('session')) {\n        return new MorphNotFoundError('Session', undefined);\n      }\n      return new MorphAPIError(message, 'resource_not_found', statusCode, { requestId, rawResponse: responseText });\n\n    case 429:\n      return new MorphRateLimitError(message, { requestId });\n\n    case 422:\n      return new MorphAPIError(message, 'validation_error', statusCode, { requestId, rawResponse: responseText });\n\n    case 500:\n    case 502:\n    case 503:\n    case 504:\n      return new MorphAPIError(message, 'service_unavailable', statusCode, { requestId, rawResponse: responseText });\n\n    default:\n      return new MorphAPIError(message, 'network_error', statusCode, { requestId, rawResponse: responseText });\n  }\n}\n","/**\n * Type definitions for browser profiles.\n *\n * All types use camelCase for SDK ergonomics.\n * API responses are normalized from snake_case to camelCase.\n */\n\n/**\n * A browser profile that stores login state (cookies, localStorage).\n *\n * @example\n * ```typescript\n * const profile = await morph.browser.profiles.getProfile('profile-id');\n * console.log(profile.cookieDomains); // ['linkedin.com', 'google.com']\n * ```\n */\nexport interface Profile {\n  /** Unique profile identifier (UUID) */\n  id: string;\n  /** Human-readable profile name */\n  name: string;\n  /** Repository ID this profile is associated with */\n  repoId: string;\n  /** List of domains with stored cookies */\n  cookieDomains?: string[];\n  /** ISO 8601 timestamp of last use */\n  lastUsedAt?: string;\n  /** ISO 8601 timestamp of creation */\n  createdAt: string;\n  /** ISO 8601 timestamp of last update */\n  updatedAt: string;\n}\n\n/**\n * Input for creating a new profile.\n *\n * @example\n * ```typescript\n * await morph.browser.profiles.createProfile({\n *   name: 'LinkedIn Production',\n *   repoId: 'owner/repo'\n * });\n * ```\n */\nexport interface CreateProfileInput {\n  /** Profile name (1-100 characters) */\n  name: string;\n  /** Repository ID - profiles are repo-specific */\n  repoId: string;\n}\n\n/**\n * Input for updating a profile.\n */\n// Intentionally no UpdateProfileInput: update means \"open a live session\"\n\n/**\n * Response for listing profiles.\n */\nexport interface ProfileListResponse {\n  profiles: Profile[];\n}\n\n/**\n * A browser session for profile setup.\n *\n * @example\n * ```typescript\n * const session = await morph.browser.profiles.startSession();\n * console.log('Sign in at:', session.debugUrl);\n * // After user signs in...\n * await morph.browser.profiles.saveSession(session.sessionId, profile.id);\n * ```\n */\nexport interface ProfileSession {\n  /** Unique session identifier */\n  sessionId: string;\n  /** Live session URL for viewing/interacting with the browser */\n  debugUrl: string;\n}\n\n/**\n * Profile setup handle returned by create/update.\n *\n * Provides a live URL for login and an explicit save() helper.\n */\nexport interface ProfileSetup {\n  profile: Profile;\n  session: ProfileSession;\n  save: () => Promise<Profile>;\n}\n/**\n * Input for starting a profile session.\n */\nexport interface ProfileSessionInput {\n  /** Optional profile ID to update an existing profile */\n  profileId?: string;\n}\n\n/**\n * Input for saving a profile session.\n */\nexport interface SaveProfileSessionInput {\n  /** The browser session ID to extract state from */\n  sessionId: string;\n  /** The profile ID to save state to */\n  profileId: string;\n}\n\n/**\n * Response for profile state URL.\n */\nexport interface ProfileStateResponse {\n  /** Profile ID */\n  profileId: string;\n  /** Presigned URL to download the profile state (expires in `expiresIn` seconds) */\n  stateUrl: string;\n  /** URL expiry time in seconds */\n  expiresIn: number;\n}\n\n/**\n * Repo summary for profile discovery.\n */\nexport interface RepoSummary {\n  repoId: string;\n  repoFullName?: string;\n  profileCount: number;\n}\n\n/**\n * Response for repo discovery.\n */\nexport interface RepoListResponse {\n  repos: RepoSummary[];\n}\n\n/**\n * Profile with convenience methods attached.\n *\n * @example\n * ```typescript\n * const profile = await morph.browser.profiles.getProfile('id');\n * const state = await profile.getState();\n * await profile.delete();\n * ```\n */\nexport interface ProfileWithMethods extends Profile {\n  /** Get presigned URL for profile state */\n  getState: () => Promise<ProfileStateResponse>;\n  /** Delete this profile */\n  delete: () => Promise<void>;\n}\n\n// ============================================================================\n// Internal API types (snake_case - matches backend response)\n// ============================================================================\n\n/** @internal API response format */\nexport interface APIProfile {\n  id: string;\n  name: string;\n  repo_id: string;\n  cookie_domains?: string[];\n  last_used_at?: string;\n  created_at: string;\n  updated_at: string;\n}\n\n/** @internal API response format */\nexport interface APIProfileSession {\n  session_id: string;\n  debug_url?: string;\n}\n\n/** @internal API response format */\nexport interface APIProfileStateResponse {\n  profile_id: string;\n  state_url: string;\n  expires_in: number;\n}\n\n// ============================================================================\n// Transformers\n// ============================================================================\n\n/**\n * Transform API profile response to SDK format.\n * @internal\n */\nexport function transformProfile(api: APIProfile): Profile {\n  return {\n    id: api.id,\n    name: api.name,\n    repoId: api.repo_id,\n    cookieDomains: api.cookie_domains,\n    lastUsedAt: api.last_used_at,\n    createdAt: api.created_at,\n    updatedAt: api.updated_at,\n  };\n}\n\n/**\n * Transform SDK input to API format.\n * @internal\n */\nexport function transformCreateInput(input: CreateProfileInput): { name: string; repo_id: string } {\n  return {\n    name: input.name,\n    repo_id: input.repoId,\n  };\n}\n\n/**\n * Transform API session response to SDK format.\n * @internal\n */\nexport function transformSession(api: APIProfileSession): ProfileSession {\n  return {\n    sessionId: api.session_id,\n    debugUrl: api.debug_url || '',\n  };\n}\n\n/**\n * Transform SDK save input to API format.\n * @internal\n */\nexport function transformSaveInput(input: SaveProfileSessionInput): { session_id: string; profile_id: string } {\n  return {\n    session_id: input.sessionId,\n    profile_id: input.profileId,\n  };\n}\n\n/**\n * Transform API state response to SDK format.\n * @internal\n */\nexport function transformStateResponse(api: APIProfileStateResponse): ProfileStateResponse {\n  return {\n    profileId: api.profile_id,\n    stateUrl: api.state_url,\n    expiresIn: api.expires_in,\n  };\n}\n"],"mappings":"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","names":[]}