{"version":3,"sources":["../../src/types.ts","../../src/config.ts","../../src/utils.ts","../../src/errors.ts","../../src/CloudAPI.ts","../../src/importVscode.ts","../../src/RefreshTimer.ts","../../src/WebAuthService.ts","../../src/StaticTokenAuthService.ts","../../src/CloudSettingsService.ts","../../src/StaticSettingsService.ts","../../src/TelemetryClient.ts","../../src/CloudShareService.ts","../../src/CloudService.ts","../../src/bridge/SocketConnectionManager.ts","../../src/bridge/ExtensionManager.ts","../../src/bridge/TaskManager.ts","../../src/bridge/ExtensionBridgeService.ts"],"names":["z","globalSettingsSchema","mcpMarketplaceItemSchema","providerSettingsWithIdSchema","ConnectionState","TaskStatus","taskMetadataSchema","staticAppPropertiesSchema","gitPropertiesSchema","clineMessageSchema","ExtensionBridgeEventName","RooCodeEventName","ExtensionBridgeCommandName","TaskBridgeEventName","TaskBridgeCommandName","EventEmitter","crypto","jwtDecode","TelemetryEventName","rooCodeTelemetryEventSchema","io"],"mappings":"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","file":"index.cjs","sourcesContent":["import EventEmitter from 'events';\n\nimport { z } from 'zod';\n\nimport {\n  RooCodeEventName,\n  TaskStatus,\n  globalSettingsSchema,\n  mcpMarketplaceItemSchema,\n  providerSettingsWithIdSchema,\n  taskMetadataSchema,\n  clineMessageSchema,\n  staticAppPropertiesSchema,\n  gitPropertiesSchema,\n} from '@roo-code/types';\n\n/**\n * JWTPayload\n */\n\nexport interface JWTPayload {\n  iss?: string; // Issuer (should be 'rcc')\n  sub?: string; // Subject - CloudJob ID for job tokens (t:'cj'), User ID for auth tokens (t:'auth')\n  exp?: number; // Expiration time\n  iat?: number; // Issued at time\n  nbf?: number; // Not before time\n  v?: number; // Version (should be 1)\n  r?: {\n    u?: string; // User ID (always present in valid tokens)\n    o?: string; // Organization ID (optional - undefined when orgId is null)\n    t?: string; // Token type: 'cj' for job tokens, 'auth' for auth tokens\n  };\n}\n\n/**\n * CloudUserInfo\n */\n\nexport interface CloudUserInfo {\n  id?: string;\n  name?: string;\n  email?: string;\n  picture?: string;\n  organizationId?: string;\n  organizationName?: string;\n  organizationRole?: string;\n  organizationImageUrl?: string;\n  extensionBridgeEnabled?: boolean;\n}\n\n/**\n * CloudOrganization\n */\n\nexport interface CloudOrganization {\n  id: string;\n  name: string;\n  slug?: string;\n  image_url?: string;\n  has_image?: boolean;\n  created_at?: number;\n  updated_at?: number;\n}\n\n/**\n * CloudOrganizationMembership\n */\n\nexport interface CloudOrganizationMembership {\n  id: string;\n  organization: CloudOrganization;\n  role: string;\n  permissions?: string[];\n  created_at?: number;\n  updated_at?: number;\n}\n\n/**\n * OrganizationAllowList\n */\n\nexport const organizationAllowListSchema = z.object({\n  allowAll: z.boolean(),\n  providers: z.record(\n    z.object({\n      allowAll: z.boolean(),\n      models: z.array(z.string()).optional(),\n    }),\n  ),\n});\n\nexport type OrganizationAllowList = z.infer<typeof organizationAllowListSchema>;\n\n/**\n * OrganizationDefaultSettings\n */\n\nexport const organizationDefaultSettingsSchema = globalSettingsSchema\n  .pick({\n    enableCheckpoints: true,\n    fuzzyMatchThreshold: true,\n    maxOpenTabsContext: true,\n    maxReadFileLine: true,\n    maxWorkspaceFiles: true,\n    showRooIgnoredFiles: true,\n    terminalCommandDelay: true,\n    terminalCompressProgressBar: true,\n    terminalOutputLineLimit: true,\n    terminalShellIntegrationDisabled: true,\n    terminalShellIntegrationTimeout: true,\n    terminalZshClearEolMark: true,\n  })\n  // Add stronger validations for some fields.\n  .merge(\n    z.object({\n      maxOpenTabsContext: z.number().int().nonnegative().optional(),\n      maxReadFileLine: z.number().int().gte(-1).optional(),\n      maxWorkspaceFiles: z.number().int().nonnegative().optional(),\n      terminalCommandDelay: z.number().int().nonnegative().optional(),\n      terminalOutputLineLimit: z.number().int().nonnegative().optional(),\n      terminalShellIntegrationTimeout: z\n        .number()\n        .int()\n        .nonnegative()\n        .optional(),\n    }),\n  );\n\nexport type OrganizationDefaultSettings = z.infer<\n  typeof organizationDefaultSettingsSchema\n>;\n\n/**\n * OrganizationCloudSettings\n */\n\nexport const organizationCloudSettingsSchema = z.object({\n  recordTaskMessages: z.boolean().optional(),\n  enableTaskSharing: z.boolean().optional(),\n  taskShareExpirationDays: z.number().int().positive().optional(),\n  allowMembersViewAllTasks: z.boolean().optional(),\n});\n\nexport type OrganizationCloudSettings = z.infer<\n  typeof organizationCloudSettingsSchema\n>;\n\n/**\n * OrganizationSettings\n */\n\nexport const organizationSettingsSchema = z.object({\n  version: z.number(),\n  cloudSettings: organizationCloudSettingsSchema.optional(),\n  defaultSettings: organizationDefaultSettingsSchema,\n  allowList: organizationAllowListSchema,\n  hiddenMcps: z.array(z.string()).optional(),\n  hideMarketplaceMcps: z.boolean().optional(),\n  mcps: z.array(mcpMarketplaceItemSchema).optional(),\n  providerProfiles: z\n    .record(z.string(), providerSettingsWithIdSchema)\n    .optional(),\n});\n\nexport type OrganizationSettings = z.infer<typeof organizationSettingsSchema>;\n\n/**\n * Constants\n */\n\nexport const ORGANIZATION_ALLOW_ALL: OrganizationAllowList = {\n  allowAll: true,\n  providers: {},\n} as const;\n\nexport const ORGANIZATION_DEFAULT: OrganizationSettings = {\n  version: 0,\n  cloudSettings: {\n    recordTaskMessages: true,\n    enableTaskSharing: true,\n    taskShareExpirationDays: 30,\n    allowMembersViewAllTasks: true,\n  },\n  defaultSettings: {},\n  allowList: ORGANIZATION_ALLOW_ALL,\n} as const;\n\n/**\n * ShareVisibility\n */\n\nexport type ShareVisibility = 'organization' | 'public';\n\n/**\n * ShareResponse\n */\n\nexport const shareResponseSchema = z.object({\n  success: z.boolean(),\n  shareUrl: z.string().optional(),\n  error: z.string().optional(),\n  isNewShare: z.boolean().optional(),\n  manageUrl: z.string().optional(),\n});\n\nexport type ShareResponse = z.infer<typeof shareResponseSchema>;\n\n/**\n * AuthService\n */\n\nexport type AuthState =\n  | 'initializing'\n  | 'logged-out'\n  | 'active-session'\n  | 'attempting-session'\n  | 'inactive-session';\n\nexport interface AuthService extends EventEmitter<AuthServiceEvents> {\n  // Lifecycle\n  initialize(): Promise<void>;\n  broadcast(): void;\n\n  // Authentication methods\n  login(): Promise<void>;\n  logout(): Promise<void>;\n  handleCallback(\n    code: string | null,\n    state: string | null,\n    organizationId?: string | null,\n  ): Promise<void>;\n\n  // State methods\n  getState(): AuthState;\n  isAuthenticated(): boolean;\n  hasActiveSession(): boolean;\n  hasOrIsAcquiringActiveSession(): boolean;\n\n  // Token and user info\n  getSessionToken(): string | undefined;\n  getUserInfo(): CloudUserInfo | null;\n  getStoredOrganizationId(): string | null;\n}\n\n/**\n * AuthServiceEvents\n */\n\nexport interface AuthServiceEvents {\n  'auth-state-changed': [\n    data: {\n      state: AuthState;\n      previousState: AuthState;\n    },\n  ];\n  'user-info': [data: { userInfo: CloudUserInfo }];\n}\n\n/**\n * SettingsService\n */\n\n/**\n * Interface for settings services that provide organization settings\n */\nexport interface SettingsService {\n  /**\n   * Get the organization allow list\n   * @returns The organization allow list or default if none available\n   */\n  getAllowList(): OrganizationAllowList;\n\n  /**\n   * Get the current organization settings\n   * @returns The organization settings or undefined if none available\n   */\n  getSettings(): OrganizationSettings | undefined;\n\n  /**\n   * Dispose of the settings service and clean up resources\n   */\n  dispose(): void;\n}\n\n/**\n * SettingsServiceEvents\n */\n\nexport interface SettingsServiceEvents {\n  'settings-updated': [\n    data: {\n      settings: OrganizationSettings;\n      previousSettings: OrganizationSettings | undefined;\n    },\n  ];\n}\n\n/**\n * CloudServiceEvents\n */\n\nexport type CloudServiceEvents = AuthServiceEvents & SettingsServiceEvents;\n\n/**\n * ConnectionState\n */\n\nexport enum ConnectionState {\n  DISCONNECTED = 'disconnected',\n  CONNECTING = 'connecting',\n  CONNECTED = 'connected',\n  RETRYING = 'retrying',\n  FAILED = 'failed',\n}\n\n/**\n * RetryConfig\n */\n\nexport interface RetryConfig {\n  maxInitialAttempts: number;\n  initialDelay: number;\n  maxDelay: number;\n  backoffMultiplier: number;\n}\n\n/**\n * Constants\n */\n\nexport const HEARTBEAT_INTERVAL_MS = 20_000;\nexport const INSTANCE_TTL_SECONDS = 60;\n\n/**\n * ExtensionTask\n */\n\nconst extensionTaskSchema = z.object({\n  taskId: z.string(),\n  taskStatus: z.nativeEnum(TaskStatus),\n  ...taskMetadataSchema.shape,\n});\n\nexport type ExtensionTask = z.infer<typeof extensionTaskSchema>;\n\n/**\n * ExtensionInstance\n */\n\nexport const extensionInstanceSchema = z.object({\n  instanceId: z.string(),\n  userId: z.string(),\n  workspacePath: z.string(),\n  appProperties: staticAppPropertiesSchema,\n  gitProperties: gitPropertiesSchema.optional(),\n  lastHeartbeat: z.coerce.number(),\n  task: extensionTaskSchema,\n  taskAsk: clineMessageSchema.optional(),\n  taskHistory: z.array(z.string()),\n});\n\nexport type ExtensionInstance = z.infer<typeof extensionInstanceSchema>;\n\n/**\n * ExtensionBridgeEvent\n */\n\nexport enum ExtensionBridgeEventName {\n  TaskCreated = RooCodeEventName.TaskCreated,\n  TaskStarted = RooCodeEventName.TaskStarted,\n  TaskCompleted = RooCodeEventName.TaskCompleted,\n  TaskAborted = RooCodeEventName.TaskAborted,\n  TaskFocused = RooCodeEventName.TaskFocused,\n  TaskUnfocused = RooCodeEventName.TaskUnfocused,\n  TaskActive = RooCodeEventName.TaskActive,\n  TaskInteractive = RooCodeEventName.TaskInteractive,\n  TaskResumable = RooCodeEventName.TaskResumable,\n  TaskIdle = RooCodeEventName.TaskIdle,\n\n  InstanceRegistered = 'instance_registered',\n  InstanceUnregistered = 'instance_unregistered',\n  HeartbeatUpdated = 'heartbeat_updated',\n}\n\nexport const extensionBridgeEventSchema = z.discriminatedUnion('type', [\n  z.object({\n    type: z.literal(ExtensionBridgeEventName.TaskCreated),\n    instance: extensionInstanceSchema,\n    timestamp: z.number(),\n  }),\n  z.object({\n    type: z.literal(ExtensionBridgeEventName.TaskStarted),\n    instance: extensionInstanceSchema,\n    timestamp: z.number(),\n  }),\n  z.object({\n    type: z.literal(ExtensionBridgeEventName.TaskCompleted),\n    instance: extensionInstanceSchema,\n    timestamp: z.number(),\n  }),\n  z.object({\n    type: z.literal(ExtensionBridgeEventName.TaskAborted),\n    instance: extensionInstanceSchema,\n    timestamp: z.number(),\n  }),\n  z.object({\n    type: z.literal(ExtensionBridgeEventName.TaskFocused),\n    instance: extensionInstanceSchema,\n    timestamp: z.number(),\n  }),\n  z.object({\n    type: z.literal(ExtensionBridgeEventName.TaskUnfocused),\n    instance: extensionInstanceSchema,\n    timestamp: z.number(),\n  }),\n  z.object({\n    type: z.literal(ExtensionBridgeEventName.TaskActive),\n    instance: extensionInstanceSchema,\n    timestamp: z.number(),\n  }),\n  z.object({\n    type: z.literal(ExtensionBridgeEventName.TaskInteractive),\n    instance: extensionInstanceSchema,\n    timestamp: z.number(),\n  }),\n  z.object({\n    type: z.literal(ExtensionBridgeEventName.TaskResumable),\n    instance: extensionInstanceSchema,\n    timestamp: z.number(),\n  }),\n  z.object({\n    type: z.literal(ExtensionBridgeEventName.TaskIdle),\n    instance: extensionInstanceSchema,\n    timestamp: z.number(),\n  }),\n  z.object({\n    type: z.literal(ExtensionBridgeEventName.InstanceRegistered),\n    instance: extensionInstanceSchema,\n    timestamp: z.number(),\n  }),\n  z.object({\n    type: z.literal(ExtensionBridgeEventName.InstanceUnregistered),\n    instance: extensionInstanceSchema,\n    timestamp: z.number(),\n  }),\n  z.object({\n    type: z.literal(ExtensionBridgeEventName.HeartbeatUpdated),\n    instance: extensionInstanceSchema,\n    timestamp: z.number(),\n  }),\n]);\n\nexport type ExtensionBridgeEvent = z.infer<typeof extensionBridgeEventSchema>;\n\n/**\n * ExtensionBridgeCommand\n */\n\nexport enum ExtensionBridgeCommandName {\n  StartTask = 'start_task',\n  StopTask = 'stop_task',\n  ResumeTask = 'resume_task',\n}\n\nexport const extensionBridgeCommandSchema = z.discriminatedUnion('type', [\n  z.object({\n    type: z.literal(ExtensionBridgeCommandName.StartTask),\n    instanceId: z.string(),\n    payload: z.object({\n      text: z.string(),\n      images: z.array(z.string()).optional(),\n    }),\n    timestamp: z.number(),\n  }),\n  z.object({\n    type: z.literal(ExtensionBridgeCommandName.StopTask),\n    instanceId: z.string(),\n    payload: z.object({ taskId: z.string() }),\n    timestamp: z.number(),\n  }),\n  z.object({\n    type: z.literal(ExtensionBridgeCommandName.ResumeTask),\n    instanceId: z.string(),\n    payload: z.object({\n      taskId: z.string(),\n    }),\n    timestamp: z.number(),\n  }),\n]);\n\nexport type ExtensionBridgeCommand = z.infer<\n  typeof extensionBridgeCommandSchema\n>;\n\n/**\n * TaskBridgeEvent\n */\n\nexport enum TaskBridgeEventName {\n  Message = RooCodeEventName.Message,\n  TaskModeSwitched = RooCodeEventName.TaskModeSwitched,\n  TaskInteractive = RooCodeEventName.TaskInteractive,\n}\n\nexport const taskBridgeEventSchema = z.discriminatedUnion('type', [\n  z.object({\n    type: z.literal(TaskBridgeEventName.Message),\n    taskId: z.string(),\n    action: z.string(),\n    message: clineMessageSchema,\n  }),\n  z.object({\n    type: z.literal(TaskBridgeEventName.TaskModeSwitched),\n    taskId: z.string(),\n    mode: z.string(),\n  }),\n  z.object({\n    type: z.literal(TaskBridgeEventName.TaskInteractive),\n    taskId: z.string(),\n  }),\n]);\n\nexport type TaskBridgeEvent = z.infer<typeof taskBridgeEventSchema>;\n\n/**\n * TaskBridgeCommand\n */\n\nexport enum TaskBridgeCommandName {\n  Message = 'message',\n  ApproveAsk = 'approve_ask',\n  DenyAsk = 'deny_ask',\n}\n\nexport const taskBridgeCommandSchema = z.discriminatedUnion('type', [\n  z.object({\n    type: z.literal(TaskBridgeCommandName.Message),\n    taskId: z.string(),\n    payload: z.object({\n      text: z.string(),\n      images: z.array(z.string()).optional(),\n    }),\n    timestamp: z.number(),\n  }),\n  z.object({\n    type: z.literal(TaskBridgeCommandName.ApproveAsk),\n    taskId: z.string(),\n    payload: z.object({\n      text: z.string().optional(),\n      images: z.array(z.string()).optional(),\n    }),\n    timestamp: z.number(),\n  }),\n  z.object({\n    type: z.literal(TaskBridgeCommandName.DenyAsk),\n    taskId: z.string(),\n    payload: z.object({\n      text: z.string().optional(),\n      images: z.array(z.string()).optional(),\n    }),\n    timestamp: z.number(),\n  }),\n]);\n\nexport type TaskBridgeCommand = z.infer<typeof taskBridgeCommandSchema>;\n\n/**\n * ExtensionSocketEvents\n */\n\nexport const ExtensionSocketEvents = {\n  CONNECTED: 'extension:connected',\n\n  REGISTER: 'extension:register',\n  UNREGISTER: 'extension:unregister',\n\n  HEARTBEAT: 'extension:heartbeat',\n\n  EVENT: 'extension:event', // event from extension instance\n  RELAYED_EVENT: 'extension:relayed_event', // relay from server\n\n  COMMAND: 'extension:command', // command from user\n  RELAYED_COMMAND: 'extension:relayed_command', // relay from server\n} as const;\n\n/**\n * TaskSocketEvents\n */\n\nexport const TaskSocketEvents = {\n  JOIN: 'task:join',\n  LEAVE: 'task:leave',\n\n  EVENT: 'task:event', // event from extension task\n  RELAYED_EVENT: 'task:relayed_event', // relay from server\n\n  COMMAND: 'task:command', // command from user\n  RELAYED_COMMAND: 'task:relayed_command', // relay from server\n} as const;\n","export const PRODUCTION_CLERK_BASE_URL = 'https://clerk.roocode.com';\nexport const PRODUCTION_ROO_CODE_API_URL = 'https://app.roocode.com';\n\nexport const getClerkBaseUrl = () =>\n  process.env.CLERK_BASE_URL || PRODUCTION_CLERK_BASE_URL;\n\nexport const getRooCodeApiUrl = () =>\n  process.env.ROO_CODE_API_URL || PRODUCTION_ROO_CODE_API_URL;\n","import type { ExtensionContext } from 'vscode';\n\nexport function getUserAgent(context?: ExtensionContext): string {\n  return `Roo-Code ${context?.extension?.packageJSON?.version || 'unknown'}`;\n}\n","export class CloudAPIError extends Error {\n  constructor(\n    message: string,\n    public statusCode?: number,\n    public responseBody?: unknown,\n  ) {\n    super(message);\n    this.name = 'CloudAPIError';\n    Object.setPrototypeOf(this, CloudAPIError.prototype);\n  }\n}\n\nexport class TaskNotFoundError extends CloudAPIError {\n  constructor(taskId?: string) {\n    super(taskId ? `Task '${taskId}' not found` : 'Task not found', 404);\n    this.name = 'TaskNotFoundError';\n    Object.setPrototypeOf(this, TaskNotFoundError.prototype);\n  }\n}\n\nexport class AuthenticationError extends CloudAPIError {\n  constructor(message = 'Authentication required') {\n    super(message, 401);\n    this.name = 'AuthenticationError';\n    Object.setPrototypeOf(this, AuthenticationError.prototype);\n  }\n}\n\nexport class NetworkError extends CloudAPIError {\n  constructor(message = 'Network error occurred') {\n    super(message);\n    this.name = 'NetworkError';\n    Object.setPrototypeOf(this, NetworkError.prototype);\n  }\n}\n\nexport class InvalidClientTokenError extends Error {\n  constructor() {\n    super('Invalid/Expired client token');\n    Object.setPrototypeOf(this, InvalidClientTokenError.prototype);\n  }\n}\n","import { z } from 'zod';\n\nimport {\n  type AuthService,\n  type ShareVisibility,\n  type ShareResponse,\n  shareResponseSchema,\n} from './types.js';\nimport { getRooCodeApiUrl } from './config.js';\nimport { getUserAgent } from './utils.js';\nimport {\n  AuthenticationError,\n  CloudAPIError,\n  NetworkError,\n  TaskNotFoundError,\n} from './errors.js';\n\ninterface CloudAPIRequestOptions extends Omit<RequestInit, 'headers'> {\n  timeout?: number;\n  headers?: Record<string, string>;\n}\n\nexport class CloudAPI {\n  private authService: AuthService;\n  private log: (...args: unknown[]) => void;\n  private baseUrl: string;\n\n  constructor(authService: AuthService, log?: (...args: unknown[]) => void) {\n    this.authService = authService;\n    this.log = log || console.log;\n    this.baseUrl = getRooCodeApiUrl();\n  }\n\n  private async request<T>(\n    endpoint: string,\n    options: CloudAPIRequestOptions & {\n      parseResponse?: (data: unknown) => T;\n    } = {},\n  ): Promise<T> {\n    const {\n      timeout = 30_000,\n      parseResponse,\n      headers = {},\n      ...fetchOptions\n    } = options;\n\n    const sessionToken = this.authService.getSessionToken();\n\n    if (!sessionToken) {\n      throw new AuthenticationError();\n    }\n\n    const url = `${this.baseUrl}${endpoint}`;\n\n    const requestHeaders = {\n      'Content-Type': 'application/json',\n      Authorization: `Bearer ${sessionToken}`,\n      'User-Agent': getUserAgent(),\n      ...headers,\n    };\n\n    try {\n      const response = await fetch(url, {\n        ...fetchOptions,\n        headers: requestHeaders,\n        signal: AbortSignal.timeout(timeout),\n      });\n\n      if (!response.ok) {\n        await this.handleErrorResponse(response, endpoint);\n      }\n\n      const data = await response.json();\n\n      if (parseResponse) {\n        return parseResponse(data);\n      }\n\n      return data as T;\n    } catch (error) {\n      if (error instanceof TypeError && error.message.includes('fetch')) {\n        throw new NetworkError(`Network error while calling ${endpoint}`);\n      }\n\n      if (error instanceof CloudAPIError) {\n        throw error;\n      }\n\n      if (error instanceof Error && error.name === 'AbortError') {\n        throw new CloudAPIError(\n          `Request to ${endpoint} timed out`,\n          undefined,\n          undefined,\n        );\n      }\n\n      throw new CloudAPIError(\n        `Unexpected error while calling ${endpoint}: ${error instanceof Error ? error.message : String(error)}`,\n      );\n    }\n  }\n\n  private async handleErrorResponse(\n    response: Response,\n    endpoint: string,\n  ): Promise<never> {\n    let responseBody: unknown;\n\n    try {\n      responseBody = await response.json();\n    } catch {\n      responseBody = await response.text();\n    }\n\n    switch (response.status) {\n      case 401:\n        throw new AuthenticationError();\n      case 404:\n        if (endpoint.includes('/share')) {\n          throw new TaskNotFoundError();\n        }\n        throw new CloudAPIError(\n          `Resource not found: ${endpoint}`,\n          404,\n          responseBody,\n        );\n      default:\n        throw new CloudAPIError(\n          `HTTP ${response.status}: ${response.statusText}`,\n          response.status,\n          responseBody,\n        );\n    }\n  }\n\n  async shareTask(\n    taskId: string,\n    visibility: ShareVisibility = 'organization',\n  ): Promise<ShareResponse> {\n    this.log(\n      `[CloudAPI] Sharing task ${taskId} with visibility: ${visibility}`,\n    );\n\n    const response = await this.request('/api/extension/share', {\n      method: 'POST',\n      body: JSON.stringify({ taskId, visibility }),\n      parseResponse: (data) => shareResponseSchema.parse(data),\n    });\n\n    this.log('[CloudAPI] Share response:', response);\n    return response;\n  }\n\n  async bridgeConfig() {\n    return this.request('/api/extension/bridge/config', {\n      method: 'GET',\n      parseResponse: (data) =>\n        z\n          .object({\n            userId: z.string(),\n            socketBridgeUrl: z.string(),\n            token: z.string(),\n          })\n          .parse(data),\n    });\n  }\n}\n","/**\n * Utility for lazy-loading the VS Code module in environments where it's available.\n * This allows the SDK to be used in both VS Code extension and Node.js environments.\n * Compatible with both VSCode and Cursor extension hosts.\n */\n\nlet vscodeModule: typeof import('vscode') | undefined;\n\n/**\n * Attempts to dynamically import the VS Code module.\n * Returns undefined if not running in a VS Code/Cursor extension context.\n */\nexport async function importVscode(): Promise<\n  typeof import('vscode') | undefined\n> {\n  // Check if already loaded\n  if (vscodeModule) {\n    return vscodeModule;\n  }\n\n  try {\n    // Method 1: Check if vscode is available in global scope (common in extension hosts).\n    if (typeof globalThis !== 'undefined' && 'acquireVsCodeApi' in globalThis) {\n      // We're in a webview context, vscode module won't be available.\n      return undefined;\n    }\n\n    // Method 2: Try to require the module (works in most extension contexts).\n    if (typeof require !== 'undefined') {\n      try {\n        // eslint-disable-next-line @typescript-eslint/no-require-imports\n        vscodeModule = require('vscode');\n\n        if (vscodeModule) {\n          return vscodeModule;\n        }\n      } catch (error) {\n        console.error('Error loading VS Code module:', error);\n        // Fall through to dynamic import.\n      }\n    }\n\n    // Method 3: Dynamic import (original approach, works in VSCode).\n    vscodeModule = await import('vscode');\n    return vscodeModule;\n  } catch (error) {\n    // Log the original error for debugging.\n    console.warn('VS Code module not available in this environment:', error);\n  }\n}\n","/**\n * RefreshTimer - A utility for executing a callback with configurable retry behavior\n *\n * This timer executes a callback function and schedules the next execution based on the result:\n * - If the callback succeeds (returns true), it schedules the next attempt after a fixed interval\n * - If the callback fails (returns false), it uses exponential backoff up to a maximum interval\n */\n\n/**\n * Configuration options for the RefreshTimer\n */\nexport interface RefreshTimerOptions {\n  /**\n   * The callback function to execute\n   * Should return a Promise that resolves to a boolean indicating success (true) or failure (false)\n   */\n  callback: () => Promise<boolean>;\n\n  /**\n   * Time in milliseconds to wait before next attempt after success\n   * @default 50000 (50 seconds)\n   */\n  successInterval?: number;\n\n  /**\n   * Initial backoff time in milliseconds for the first failure\n   * @default 1000 (1 second)\n   */\n  initialBackoffMs?: number;\n\n  /**\n   * Maximum backoff time in milliseconds\n   * @default 300000 (5 minutes)\n   */\n  maxBackoffMs?: number;\n}\n\n/**\n * A timer utility that executes a callback with configurable retry behavior\n */\nexport class RefreshTimer {\n  private callback: () => Promise<boolean>;\n  private successInterval: number;\n  private initialBackoffMs: number;\n  private maxBackoffMs: number;\n  private currentBackoffMs: number;\n  private attemptCount: number;\n  private timerId: NodeJS.Timeout | null;\n  private isRunning: boolean;\n\n  /**\n   * Creates a new RefreshTimer\n   *\n   * @param options Configuration options for the timer\n   */\n  constructor(options: RefreshTimerOptions) {\n    this.callback = options.callback;\n    this.successInterval = options.successInterval ?? 50000; // 50 seconds\n    this.initialBackoffMs = options.initialBackoffMs ?? 1000; // 1 second\n    this.maxBackoffMs = options.maxBackoffMs ?? 300000; // 5 minutes\n    this.currentBackoffMs = this.initialBackoffMs;\n    this.attemptCount = 0;\n    this.timerId = null;\n    this.isRunning = false;\n  }\n\n  /**\n   * Starts the timer and executes the callback immediately\n   */\n  public start(): void {\n    if (this.isRunning) {\n      return;\n    }\n\n    this.isRunning = true;\n\n    // Execute the callback immediately\n    this.executeCallback();\n  }\n\n  /**\n   * Stops the timer and cancels any pending execution\n   */\n  public stop(): void {\n    if (!this.isRunning) {\n      return;\n    }\n\n    if (this.timerId) {\n      clearTimeout(this.timerId);\n      this.timerId = null;\n    }\n\n    this.isRunning = false;\n  }\n\n  /**\n   * Resets the backoff state and attempt count\n   * Does not affect whether the timer is running\n   */\n  public reset(): void {\n    this.currentBackoffMs = this.initialBackoffMs;\n    this.attemptCount = 0;\n  }\n\n  /**\n   * Schedules the next attempt based on the success/failure of the current attempt\n   *\n   * @param wasSuccessful Whether the current attempt was successful\n   */\n  private scheduleNextAttempt(wasSuccessful: boolean): void {\n    if (!this.isRunning) {\n      return;\n    }\n\n    if (wasSuccessful) {\n      // Reset backoff on success\n      this.currentBackoffMs = this.initialBackoffMs;\n      this.attemptCount = 0;\n\n      this.timerId = setTimeout(\n        () => this.executeCallback(),\n        this.successInterval,\n      );\n    } else {\n      // Increment attempt count\n      this.attemptCount++;\n\n      // Calculate backoff time with exponential increase\n      // Formula: initialBackoff * 2^(attemptCount - 1)\n      this.currentBackoffMs = Math.min(\n        this.initialBackoffMs * Math.pow(2, this.attemptCount - 1),\n        this.maxBackoffMs,\n      );\n\n      this.timerId = setTimeout(\n        () => this.executeCallback(),\n        this.currentBackoffMs,\n      );\n    }\n  }\n\n  /**\n   * Executes the callback and handles the result\n   */\n  private async executeCallback(): Promise<void> {\n    if (!this.isRunning) {\n      return;\n    }\n\n    try {\n      const result = await this.callback();\n\n      this.scheduleNextAttempt(result);\n    } catch (_error) {\n      // Treat errors as failed attempts\n      this.scheduleNextAttempt(false);\n    }\n  }\n}\n","import crypto from 'crypto';\nimport EventEmitter from 'events';\n\nimport type { ExtensionContext } from 'vscode';\nimport { z } from 'zod';\n\nimport type {\n  CloudUserInfo,\n  CloudOrganizationMembership,\n  AuthService,\n  AuthServiceEvents,\n  AuthState,\n} from './types.js';\nimport {\n  getClerkBaseUrl,\n  getRooCodeApiUrl,\n  PRODUCTION_CLERK_BASE_URL,\n} from './config.js';\nimport { getUserAgent } from './utils.js';\nimport { importVscode } from './importVscode.js';\nimport { InvalidClientTokenError } from './errors.js';\nimport { RefreshTimer } from './RefreshTimer.js';\n\nconst AUTH_STATE_KEY = 'clerk-auth-state';\n\n/**\n * AuthCredentials\n */\n\nconst authCredentialsSchema = z.object({\n  clientToken: z.string().min(1, 'Client token cannot be empty'),\n  sessionId: z.string().min(1, 'Session ID cannot be empty'),\n  organizationId: z.string().nullable().optional(),\n});\n\ntype AuthCredentials = z.infer<typeof authCredentialsSchema>;\n\n/**\n * Clerk Schemas\n */\n\nconst clerkSignInResponseSchema = z.object({\n  response: z.object({\n    created_session_id: z.string(),\n  }),\n});\n\nconst clerkCreateSessionTokenResponseSchema = z.object({\n  jwt: z.string(),\n});\n\nconst clerkMeResponseSchema = z.object({\n  response: z.object({\n    id: z.string().optional(),\n    first_name: z.string().nullish(),\n    last_name: z.string().nullish(),\n    image_url: z.string().optional(),\n    primary_email_address_id: z.string().optional(),\n    email_addresses: z\n      .array(\n        z.object({\n          id: z.string(),\n          email_address: z.string(),\n        }),\n      )\n      .optional(),\n    public_metadata: z.record(z.any()).optional(),\n  }),\n});\n\nconst clerkOrganizationMembershipsSchema = z.object({\n  response: z.array(\n    z.object({\n      id: z.string(),\n      role: z.string(),\n      permissions: z.array(z.string()).optional(),\n      created_at: z.number().optional(),\n      updated_at: z.number().optional(),\n      organization: z.object({\n        id: z.string(),\n        name: z.string(),\n        slug: z.string().optional(),\n        image_url: z.string().optional(),\n        has_image: z.boolean().optional(),\n        created_at: z.number().optional(),\n        updated_at: z.number().optional(),\n      }),\n    }),\n  ),\n});\n\nexport class WebAuthService\n  extends EventEmitter<AuthServiceEvents>\n  implements AuthService\n{\n  private context: ExtensionContext;\n  private timer: RefreshTimer;\n  private state: AuthState = 'initializing';\n  private log: (...args: unknown[]) => void;\n  private readonly authCredentialsKey: string;\n\n  private credentials: AuthCredentials | null = null;\n  private sessionToken: string | null = null;\n  private userInfo: CloudUserInfo | null = null;\n  private isFirstRefreshAttempt: boolean = false;\n\n  constructor(context: ExtensionContext, log?: (...args: unknown[]) => void) {\n    super();\n\n    this.context = context;\n    this.log = log || console.log;\n\n    this.log('[auth] Using WebAuthService');\n\n    // Calculate auth credentials key based on Clerk base URL.\n    const clerkBaseUrl = getClerkBaseUrl();\n\n    if (clerkBaseUrl !== PRODUCTION_CLERK_BASE_URL) {\n      this.authCredentialsKey = `clerk-auth-credentials-${clerkBaseUrl}`;\n    } else {\n      this.authCredentialsKey = 'clerk-auth-credentials';\n    }\n\n    this.timer = new RefreshTimer({\n      callback: async () => {\n        await this.refreshSession();\n        return true;\n      },\n      successInterval: 50_000,\n      initialBackoffMs: 1_000,\n      maxBackoffMs: 300_000,\n    });\n  }\n\n  private changeState(newState: AuthState): void {\n    const previousState = this.state;\n    this.state = newState;\n    this.emit('auth-state-changed', { state: newState, previousState });\n  }\n\n  private async handleCredentialsChange(): Promise<void> {\n    try {\n      const credentials = await this.loadCredentials();\n\n      if (credentials) {\n        if (\n          this.credentials === null ||\n          this.credentials.clientToken !== credentials.clientToken ||\n          this.credentials.sessionId !== credentials.sessionId\n        ) {\n          this.transitionToAttemptingSession(credentials);\n        }\n      } else {\n        if (this.state !== 'logged-out') {\n          this.transitionToLoggedOut();\n        }\n      }\n    } catch (error) {\n      this.log('[auth] Error handling credentials change:', error);\n    }\n  }\n\n  private transitionToLoggedOut(): void {\n    this.timer.stop();\n\n    this.credentials = null;\n    this.sessionToken = null;\n    this.userInfo = null;\n\n    this.changeState('logged-out');\n\n    this.log('[auth] Transitioned to logged-out state');\n  }\n\n  private transitionToAttemptingSession(credentials: AuthCredentials): void {\n    this.credentials = credentials;\n\n    this.sessionToken = null;\n    this.userInfo = null;\n    this.isFirstRefreshAttempt = true;\n\n    this.changeState('attempting-session');\n\n    this.timer.start();\n\n    this.log('[auth] Transitioned to attempting-session state');\n  }\n\n  private transitionToInactiveSession(): void {\n    this.sessionToken = null;\n    this.userInfo = null;\n\n    this.changeState('inactive-session');\n\n    this.log('[auth] Transitioned to inactive-session state');\n  }\n\n  /**\n   * Initialize the auth state\n   *\n   * This method loads tokens from storage and determines the current auth state.\n   * It also starts the refresh timer if we have an active session.\n   */\n  public async initialize(): Promise<void> {\n    if (this.state !== 'initializing') {\n      this.log('[auth] initialize() called after already initialized');\n      return;\n    }\n\n    await this.handleCredentialsChange();\n\n    this.context.subscriptions.push(\n      this.context.secrets.onDidChange((e) => {\n        if (e.key === this.authCredentialsKey) {\n          this.handleCredentialsChange();\n        }\n      }),\n    );\n  }\n\n  public broadcast(): void {}\n\n  private async storeCredentials(credentials: AuthCredentials): Promise<void> {\n    await this.context.secrets.store(\n      this.authCredentialsKey,\n      JSON.stringify(credentials),\n    );\n  }\n\n  private async loadCredentials(): Promise<AuthCredentials | null> {\n    const credentialsJson = await this.context.secrets.get(\n      this.authCredentialsKey,\n    );\n    if (!credentialsJson) return null;\n\n    try {\n      const parsedJson = JSON.parse(credentialsJson);\n      const credentials = authCredentialsSchema.parse(parsedJson);\n\n      // Migration: If no organizationId but we have userInfo, add it\n      if (\n        credentials.organizationId === undefined &&\n        this.userInfo?.organizationId\n      ) {\n        credentials.organizationId = this.userInfo.organizationId;\n        await this.storeCredentials(credentials);\n        this.log('[auth] Migrated credentials with organizationId');\n      }\n\n      return credentials;\n    } catch (error) {\n      if (error instanceof z.ZodError) {\n        this.log('[auth] Invalid credentials format:', error.errors);\n      } else {\n        this.log('[auth] Failed to parse stored credentials:', error);\n      }\n      return null;\n    }\n  }\n\n  private async clearCredentials(): Promise<void> {\n    await this.context.secrets.delete(this.authCredentialsKey);\n  }\n\n  /**\n   * Start the login process\n   *\n   * This method initiates the authentication flow by generating a state parameter\n   * and opening the browser to the authorization URL.\n   */\n  public async login(): Promise<void> {\n    try {\n      const vscode = await importVscode();\n\n      if (!vscode) {\n        throw new Error('VS Code API not available');\n      }\n\n      // Generate a cryptographically random state parameter.\n      const state = crypto.randomBytes(16).toString('hex');\n      await this.context.globalState.update(AUTH_STATE_KEY, state);\n      const packageJSON = this.context.extension?.packageJSON;\n      const publisher = packageJSON?.publisher ?? 'RooVeterinaryInc';\n      const name = packageJSON?.name ?? 'roo-cline';\n      const params = new URLSearchParams({\n        state,\n        auth_redirect: `${vscode.env.uriScheme}://${publisher}.${name}`,\n      });\n      const url = `${getRooCodeApiUrl()}/extension/sign-in?${params.toString()}`;\n      await vscode.env.openExternal(vscode.Uri.parse(url));\n    } catch (error) {\n      this.log(`[auth] Error initiating Roo Code Cloud auth: ${error}`);\n      throw new Error(\n        `Failed to initiate Roo Code Cloud authentication: ${error}`,\n      );\n    }\n  }\n\n  /**\n   * Handle the callback from Roo Code Cloud\n   *\n   * This method is called when the user is redirected back to the extension\n   * after authenticating with Roo Code Cloud.\n   *\n   * @param code The authorization code from the callback\n   * @param state The state parameter from the callback\n   * @param organizationId The organization ID from the callback (null for personal accounts)\n   */\n  public async handleCallback(\n    code: string | null,\n    state: string | null,\n    organizationId?: string | null,\n  ): Promise<void> {\n    if (!code || !state) {\n      const vscode = await importVscode();\n\n      if (vscode) {\n        vscode.window.showInformationMessage(\n          'Invalid Roo Code Cloud sign in url',\n        );\n      }\n\n      return;\n    }\n\n    try {\n      // Validate state parameter to prevent CSRF attacks.\n      const storedState = this.context.globalState.get(AUTH_STATE_KEY);\n\n      if (state !== storedState) {\n        this.log('[auth] State mismatch in callback');\n        throw new Error(\n          'Invalid state parameter. Authentication request may have been tampered with.',\n        );\n      }\n\n      const credentials = await this.clerkSignIn(code);\n\n      // Set organizationId (null for personal accounts)\n      credentials.organizationId = organizationId || null;\n\n      await this.storeCredentials(credentials);\n\n      const vscode = await importVscode();\n\n      if (vscode) {\n        vscode.window.showInformationMessage(\n          'Successfully authenticated with Roo Code Cloud',\n        );\n      }\n\n      this.log('[auth] Successfully authenticated with Roo Code Cloud');\n    } catch (error) {\n      this.log(`[auth] Error handling Roo Code Cloud callback: ${error}`);\n      this.changeState('logged-out');\n      throw new Error(`Failed to handle Roo Code Cloud callback: ${error}`);\n    }\n  }\n\n  /**\n   * Log out\n   *\n   * This method removes all stored tokens and stops the refresh timer.\n   */\n  public async logout(): Promise<void> {\n    const oldCredentials = this.credentials;\n\n    try {\n      // Clear credentials from storage - onDidChange will handle state transitions\n      await this.clearCredentials();\n      await this.context.globalState.update(AUTH_STATE_KEY, undefined);\n\n      if (oldCredentials) {\n        try {\n          await this.clerkLogout(oldCredentials);\n        } catch (error) {\n          this.log('[auth] Error calling clerkLogout:', error);\n        }\n      }\n\n      const vscode = await importVscode();\n\n      if (vscode) {\n        vscode.window.showInformationMessage('Logged out from Roo Code Cloud');\n      }\n\n      this.log('[auth] Logged out from Roo Code Cloud');\n    } catch (error) {\n      this.log(`[auth] Error logging out from Roo Code Cloud: ${error}`);\n      throw new Error(`Failed to log out from Roo Code Cloud: ${error}`);\n    }\n  }\n\n  public getState(): AuthState {\n    return this.state;\n  }\n\n  public getSessionToken(): string | undefined {\n    if (this.state === 'active-session' && this.sessionToken) {\n      return this.sessionToken;\n    }\n\n    return;\n  }\n\n  /**\n   * Check if the user is authenticated\n   *\n   * @returns True if the user is authenticated (has an active, attempting, or inactive session)\n   */\n  public isAuthenticated(): boolean {\n    return (\n      this.state === 'active-session' ||\n      this.state === 'attempting-session' ||\n      this.state === 'inactive-session'\n    );\n  }\n\n  public hasActiveSession(): boolean {\n    return this.state === 'active-session';\n  }\n\n  /**\n   * Check if the user has an active session or is currently attempting to acquire one\n   *\n   * @returns True if the user has an active session or is attempting to get one\n   */\n  public hasOrIsAcquiringActiveSession(): boolean {\n    return (\n      this.state === 'active-session' || this.state === 'attempting-session'\n    );\n  }\n\n  /**\n   * Refresh the session\n   *\n   * This method refreshes the session token using the client token.\n   */\n  private async refreshSession(): Promise<void> {\n    if (!this.credentials) {\n      this.log('[auth] Cannot refresh session: missing credentials');\n      return;\n    }\n\n    try {\n      const previousState = this.state;\n      this.sessionToken = await this.clerkCreateSessionToken();\n\n      if (previousState !== 'active-session') {\n        this.changeState('active-session');\n        this.log('[auth] Transitioned to active-session state');\n        this.fetchUserInfo();\n      } else {\n        this.state = 'active-session';\n      }\n    } catch (error) {\n      if (error instanceof InvalidClientTokenError) {\n        this.log('[auth] Invalid/Expired client token: clearing credentials');\n        this.clearCredentials();\n      } else if (\n        this.isFirstRefreshAttempt &&\n        this.state === 'attempting-session'\n      ) {\n        this.isFirstRefreshAttempt = false;\n        this.transitionToInactiveSession();\n      }\n      this.log('[auth] Failed to refresh session', error);\n      throw error;\n    }\n  }\n\n  private async fetchUserInfo(): Promise<void> {\n    if (!this.credentials) {\n      return;\n    }\n\n    this.userInfo = await this.clerkMe();\n    this.emit('user-info', { userInfo: this.userInfo });\n  }\n\n  /**\n   * Extract user information from the ID token\n   *\n   * @returns User information from ID token claims or null if no ID token available\n   */\n  public getUserInfo(): CloudUserInfo | null {\n    return this.userInfo;\n  }\n\n  /**\n   * Get the stored organization ID from credentials\n   *\n   * @returns The stored organization ID, null for personal accounts or if no credentials exist\n   */\n  public getStoredOrganizationId(): string | null {\n    return this.credentials?.organizationId || null;\n  }\n\n  private async clerkSignIn(ticket: string): Promise<AuthCredentials> {\n    const formData = new URLSearchParams();\n    formData.append('strategy', 'ticket');\n    formData.append('ticket', ticket);\n\n    const response = await fetch(`${getClerkBaseUrl()}/v1/client/sign_ins`, {\n      method: 'POST',\n      headers: {\n        'Content-Type': 'application/x-www-form-urlencoded',\n        'User-Agent': this.userAgent(),\n      },\n      body: formData.toString(),\n      signal: AbortSignal.timeout(10000),\n    });\n\n    if (!response.ok) {\n      throw new Error(`HTTP ${response.status}: ${response.statusText}`);\n    }\n\n    const {\n      response: { created_session_id: sessionId },\n    } = clerkSignInResponseSchema.parse(await response.json());\n\n    // 3. Extract the client token from the Authorization header.\n    const clientToken = response.headers.get('authorization');\n\n    if (!clientToken) {\n      throw new Error('No authorization header found in the response');\n    }\n\n    return authCredentialsSchema.parse({ clientToken, sessionId });\n  }\n\n  private async clerkCreateSessionToken(): Promise<string> {\n    const formData = new URLSearchParams();\n    formData.append('_is_native', '1');\n\n    // Handle 3 cases for organization_id:\n    // 1. Have an org id: organization_id=THE_ORG_ID\n    // 2. Have a personal account: organization_id= (empty string)\n    // 3. Don't know if you have an org id (old style credentials): don't send organization_id param at all\n    const organizationId = this.getStoredOrganizationId();\n    if (this.credentials?.organizationId !== undefined) {\n      // We have organization context info (either org id or personal account)\n      formData.append('organization_id', organizationId || '');\n    }\n    // If organizationId is undefined, don't send the param at all (old credentials)\n\n    const response = await fetch(\n      `${getClerkBaseUrl()}/v1/client/sessions/${this.credentials!.sessionId}/tokens`,\n      {\n        method: 'POST',\n        headers: {\n          'Content-Type': 'application/x-www-form-urlencoded',\n          Authorization: `Bearer ${this.credentials!.clientToken}`,\n          'User-Agent': this.userAgent(),\n        },\n        body: formData.toString(),\n        signal: AbortSignal.timeout(10000),\n      },\n    );\n\n    if (response.status === 401 || response.status === 404) {\n      throw new InvalidClientTokenError();\n    } else if (!response.ok) {\n      throw new Error(`HTTP ${response.status}: ${response.statusText}`);\n    }\n\n    const data = clerkCreateSessionTokenResponseSchema.parse(\n      await response.json(),\n    );\n\n    return data.jwt;\n  }\n\n  private async clerkMe(): Promise<CloudUserInfo> {\n    const response = await fetch(`${getClerkBaseUrl()}/v1/me`, {\n      headers: {\n        Authorization: `Bearer ${this.credentials!.clientToken}`,\n        'User-Agent': this.userAgent(),\n      },\n      signal: AbortSignal.timeout(10000),\n    });\n\n    if (!response.ok) {\n      throw new Error(`HTTP ${response.status}: ${response.statusText}`);\n    }\n\n    const payload = await response.json();\n    const { response: userData } = clerkMeResponseSchema.parse(payload);\n\n    const userInfo: CloudUserInfo = {\n      id: userData.id,\n      picture: userData.image_url,\n    };\n\n    const names = [userData.first_name, userData.last_name].filter(\n      (name) => !!name,\n    );\n    userInfo.name = names.length > 0 ? names.join(' ') : undefined;\n    const primaryEmailAddressId = userData.primary_email_address_id;\n    const emailAddresses = userData.email_addresses;\n\n    if (primaryEmailAddressId && emailAddresses) {\n      userInfo.email = emailAddresses.find(\n        (email: { id: string }) => primaryEmailAddressId === email.id,\n      )?.email_address;\n    }\n\n    // Check for extension_bridge_enabled in user's public metadata\n    let extensionBridgeEnabled = false;\n    if (userData.public_metadata?.extension_bridge_enabled === true) {\n      extensionBridgeEnabled = true;\n    }\n\n    // Fetch organization info if user is in organization context\n    try {\n      const storedOrgId = this.getStoredOrganizationId();\n\n      if (this.credentials?.organizationId !== undefined) {\n        // We have organization context info\n        if (storedOrgId !== null) {\n          // User is in organization context - fetch user's memberships and filter\n          const orgMemberships = await this.clerkGetOrganizationMemberships();\n          const userMembership = this.findOrganizationMembership(\n            orgMemberships,\n            storedOrgId,\n          );\n\n          if (userMembership) {\n            this.setUserOrganizationInfo(userInfo, userMembership);\n\n            // Check organization public metadata for extension_bridge_enabled\n            // Organization setting takes precedence over user setting\n            if (\n              await this.isExtensionBridgeEnabledForOrganization(storedOrgId)\n            ) {\n              extensionBridgeEnabled = true;\n            }\n\n            this.log('[auth] User in organization context:', {\n              id: userMembership.organization.id,\n              name: userMembership.organization.name,\n              role: userMembership.role,\n            });\n          } else {\n            this.log(\n              '[auth] Warning: User not found in stored organization:',\n              storedOrgId,\n            );\n          }\n        } else {\n          this.log(\n            '[auth] User in personal account context - not setting organization info',\n          );\n        }\n      } else {\n        // Old credentials without organization context - fetch organization info to determine context\n        const orgMemberships = await this.clerkGetOrganizationMemberships();\n        const primaryOrgMembership =\n          this.findPrimaryOrganizationMembership(orgMemberships);\n\n        if (primaryOrgMembership) {\n          this.setUserOrganizationInfo(userInfo, primaryOrgMembership);\n\n          // Check organization public metadata for extension_bridge_enabled\n          if (\n            await this.isExtensionBridgeEnabledForOrganization(\n              primaryOrgMembership.organization.id,\n            )\n          ) {\n            extensionBridgeEnabled = true;\n          }\n\n          this.log(\n            '[auth] Legacy credentials: Found organization membership:',\n            {\n              id: primaryOrgMembership.organization.id,\n              name: primaryOrgMembership.organization.name,\n              role: primaryOrgMembership.role,\n            },\n          );\n        } else {\n          this.log(\n            '[auth] Legacy credentials: No organization memberships found',\n          );\n        }\n      }\n    } catch (error) {\n      this.log('[auth] Failed to fetch organization info:', error);\n      // Don't throw - organization info is optional\n    }\n\n    // Set the extension bridge enabled flag\n    userInfo.extensionBridgeEnabled = extensionBridgeEnabled;\n\n    return userInfo;\n  }\n\n  private findOrganizationMembership(\n    memberships: CloudOrganizationMembership[],\n    organizationId: string,\n  ): CloudOrganizationMembership | undefined {\n    return memberships?.find(\n      (membership) => membership.organization.id === organizationId,\n    );\n  }\n\n  private findPrimaryOrganizationMembership(\n    memberships: CloudOrganizationMembership[],\n  ): CloudOrganizationMembership | undefined {\n    return memberships && memberships.length > 0 ? memberships[0] : undefined;\n  }\n\n  private setUserOrganizationInfo(\n    userInfo: CloudUserInfo,\n    membership: CloudOrganizationMembership,\n  ): void {\n    userInfo.organizationId = membership.organization.id;\n    userInfo.organizationName = membership.organization.name;\n    userInfo.organizationRole = membership.role;\n    userInfo.organizationImageUrl = membership.organization.image_url;\n  }\n\n  private async clerkGetOrganizationMemberships(): Promise<\n    CloudOrganizationMembership[]\n  > {\n    const response = await fetch(\n      `${getClerkBaseUrl()}/v1/me/organization_memberships`,\n      {\n        headers: {\n          Authorization: `Bearer ${this.credentials!.clientToken}`,\n          'User-Agent': this.userAgent(),\n        },\n        signal: AbortSignal.timeout(10000),\n      },\n    );\n\n    return clerkOrganizationMembershipsSchema.parse(await response.json())\n      .response;\n  }\n\n  private async getOrganizationMetadata(\n    organizationId: string,\n  ): Promise<{ public_metadata?: Record<string, unknown> } | null> {\n    try {\n      const response = await fetch(\n        `${getClerkBaseUrl()}/v1/organizations/${organizationId}`,\n        {\n          headers: {\n            Authorization: `Bearer ${this.credentials!.clientToken}`,\n            'User-Agent': this.userAgent(),\n          },\n          signal: AbortSignal.timeout(10000),\n        },\n      );\n\n      if (!response.ok) {\n        this.log(\n          `[auth] Failed to fetch organization metadata: ${response.status} ${response.statusText}`,\n        );\n        return null;\n      }\n\n      const data = await response.json();\n      return data.response || data;\n    } catch (error) {\n      this.log('[auth] Error fetching organization metadata:', error);\n      return null;\n    }\n  }\n\n  private async isExtensionBridgeEnabledForOrganization(\n    organizationId: string,\n  ): Promise<boolean> {\n    const orgMetadata = await this.getOrganizationMetadata(organizationId);\n    return orgMetadata?.public_metadata?.extension_bridge_enabled === true;\n  }\n\n  private async clerkLogout(credentials: AuthCredentials): Promise<void> {\n    const formData = new URLSearchParams();\n    formData.append('_is_native', '1');\n\n    const response = await fetch(\n      `${getClerkBaseUrl()}/v1/client/sessions/${credentials.sessionId}/remove`,\n      {\n        method: 'POST',\n        headers: {\n          'Content-Type': 'application/x-www-form-urlencoded',\n          Authorization: `Bearer ${credentials.clientToken}`,\n          'User-Agent': this.userAgent(),\n        },\n        body: formData.toString(),\n        signal: AbortSignal.timeout(10000),\n      },\n    );\n\n    if (!response.ok) {\n      throw new Error(`HTTP ${response.status}: ${response.statusText}`);\n    }\n  }\n\n  private userAgent(): string {\n    return getUserAgent(this.context);\n  }\n}\n","import EventEmitter from 'events';\n\nimport { jwtDecode } from 'jwt-decode';\nimport type { ExtensionContext } from 'vscode';\n\nimport type {\n  JWTPayload,\n  CloudUserInfo,\n  AuthService,\n  AuthServiceEvents,\n  AuthState,\n} from './types.js';\n\nexport class StaticTokenAuthService\n  extends EventEmitter<AuthServiceEvents>\n  implements AuthService\n{\n  private state: AuthState = 'active-session';\n  private token: string;\n  private log: (...args: unknown[]) => void;\n  private userInfo: CloudUserInfo;\n\n  constructor(\n    context: ExtensionContext,\n    token: string,\n    log?: (...args: unknown[]) => void,\n  ) {\n    super();\n\n    this.token = token;\n    this.log = log || console.log;\n\n    this.log('[auth] Using StaticTokenAuthService');\n\n    let payload;\n\n    try {\n      payload = jwtDecode<JWTPayload>(token);\n    } catch (error) {\n      this.log('[auth] Failed to parse JWT:', error);\n    }\n\n    this.userInfo = {\n      id: payload?.r?.u || payload?.sub || undefined,\n      organizationId: payload?.r?.o || undefined,\n      extensionBridgeEnabled: true,\n    };\n  }\n\n  public async initialize(): Promise<void> {\n    this.state = 'active-session';\n  }\n\n  public broadcast(): void {\n    this.emit('auth-state-changed', {\n      state: this.state,\n      previousState: 'initializing',\n    });\n\n    this.emit('user-info', { userInfo: this.userInfo });\n  }\n\n  public async login(): Promise<void> {\n    throw new Error(\n      'Authentication methods are disabled in StaticTokenAuthService',\n    );\n  }\n\n  public async logout(): Promise<void> {\n    throw new Error(\n      'Authentication methods are disabled in StaticTokenAuthService',\n    );\n  }\n\n  public async handleCallback(\n    _code: string | null,\n    _state: string | null,\n    _organizationId?: string | null,\n  ): Promise<void> {\n    throw new Error(\n      'Authentication methods are disabled in StaticTokenAuthService',\n    );\n  }\n\n  public getState(): AuthState {\n    return this.state;\n  }\n\n  public getSessionToken(): string | undefined {\n    return this.token;\n  }\n\n  public isAuthenticated(): boolean {\n    return true;\n  }\n\n  public hasActiveSession(): boolean {\n    return true;\n  }\n\n  public hasOrIsAcquiringActiveSession(): boolean {\n    return true;\n  }\n\n  public getUserInfo(): CloudUserInfo | null {\n    return this.userInfo;\n  }\n\n  public getStoredOrganizationId(): string | null {\n    return this.userInfo?.organizationId || null;\n  }\n}\n","import EventEmitter from 'events';\n\nimport type { ExtensionContext } from 'vscode';\n\nimport {\n  type SettingsService,\n  type SettingsServiceEvents,\n  type AuthService,\n  type AuthState,\n  ORGANIZATION_ALLOW_ALL,\n  OrganizationAllowList,\n  OrganizationSettings,\n  organizationSettingsSchema,\n} from './types.js';\nimport { getRooCodeApiUrl } from './config.js';\nimport { RefreshTimer } from './RefreshTimer.js';\n\nconst ORGANIZATION_SETTINGS_CACHE_KEY = 'organization-settings';\n\nexport class CloudSettingsService\n  extends EventEmitter<SettingsServiceEvents>\n  implements SettingsService\n{\n  private context: ExtensionContext;\n  private authService: AuthService;\n  private settings: OrganizationSettings | undefined = undefined;\n  private timer: RefreshTimer;\n  private log: (...args: unknown[]) => void;\n\n  constructor(\n    context: ExtensionContext,\n    authService: AuthService,\n    log?: (...args: unknown[]) => void,\n  ) {\n    super();\n\n    this.context = context;\n    this.authService = authService;\n    this.log = log || console.log;\n\n    this.timer = new RefreshTimer({\n      callback: async () => {\n        return await this.fetchSettings();\n      },\n      successInterval: 30000,\n      initialBackoffMs: 1000,\n      maxBackoffMs: 30000,\n    });\n  }\n\n  public initialize(): void {\n    this.loadCachedSettings();\n\n    // Clear cached settings if we have missed a log out.\n    if (this.authService.getState() == 'logged-out' && this.settings) {\n      this.removeSettings();\n    }\n\n    this.authService.on(\n      'auth-state-changed',\n      (data: { state: AuthState; previousState: AuthState }) => {\n        if (data.state === 'active-session') {\n          this.timer.start();\n        } else if (data.previousState === 'active-session') {\n          this.timer.stop();\n\n          if (data.state === 'logged-out') {\n            this.removeSettings();\n          }\n        }\n      },\n    );\n\n    if (this.authService.hasActiveSession()) {\n      this.timer.start();\n    }\n  }\n\n  private async fetchSettings(): Promise<boolean> {\n    const token = this.authService.getSessionToken();\n\n    if (!token) {\n      return false;\n    }\n\n    try {\n      const response = await fetch(\n        `${getRooCodeApiUrl()}/api/organization-settings`,\n        {\n          headers: {\n            Authorization: `Bearer ${token}`,\n          },\n        },\n      );\n\n      if (!response.ok) {\n        this.log(\n          '[cloud-settings] Failed to fetch organization settings:',\n          response.status,\n          response.statusText,\n        );\n        return false;\n      }\n\n      const data = await response.json();\n      const result = organizationSettingsSchema.safeParse(data);\n\n      if (!result.success) {\n        this.log(\n          '[cloud-settings] Invalid organization settings format:',\n          result.error,\n        );\n        return false;\n      }\n\n      const newSettings = result.data;\n\n      if (!this.settings || this.settings.version !== newSettings.version) {\n        const previousSettings = this.settings;\n        this.settings = newSettings;\n        await this.cacheSettings();\n\n        this.emit('settings-updated', {\n          settings: this.settings,\n          previousSettings,\n        });\n      }\n\n      return true;\n    } catch (error) {\n      this.log('[cloud-settings] Error fetching organization settings:', error);\n      return false;\n    }\n  }\n\n  private async cacheSettings(): Promise<void> {\n    await this.context.globalState.update(\n      ORGANIZATION_SETTINGS_CACHE_KEY,\n      this.settings,\n    );\n  }\n\n  private loadCachedSettings(): void {\n    this.settings = this.context.globalState.get<OrganizationSettings>(\n      ORGANIZATION_SETTINGS_CACHE_KEY,\n    );\n  }\n\n  public getAllowList(): OrganizationAllowList {\n    return this.settings?.allowList || ORGANIZATION_ALLOW_ALL;\n  }\n\n  public getSettings(): OrganizationSettings | undefined {\n    return this.settings;\n  }\n\n  private async removeSettings(): Promise<void> {\n    this.settings = undefined;\n    await this.cacheSettings();\n  }\n\n  public dispose(): void {\n    this.removeAllListeners();\n    this.timer.stop();\n  }\n}\n","import {\n  type SettingsService,\n  ORGANIZATION_ALLOW_ALL,\n  OrganizationAllowList,\n  OrganizationSettings,\n  organizationSettingsSchema,\n} from './types.js';\n\nexport class StaticSettingsService implements SettingsService {\n  private settings: OrganizationSettings;\n  private log: (...args: unknown[]) => void;\n\n  constructor(envValue: string, log?: (...args: unknown[]) => void) {\n    this.log = log || console.log;\n    this.settings = this.parseEnvironmentSettings(envValue);\n  }\n\n  private parseEnvironmentSettings(envValue: string): OrganizationSettings {\n    try {\n      const decodedValue = Buffer.from(envValue, 'base64').toString('utf-8');\n      const parsedJson = JSON.parse(decodedValue);\n      return organizationSettingsSchema.parse(parsedJson);\n    } catch (error) {\n      this.log(\n        `[StaticSettingsService] failed to parse static settings: ${error instanceof Error ? error.message : String(error)}`,\n        error,\n      );\n\n      throw new Error('Failed to parse static settings', { cause: error });\n    }\n  }\n\n  public getAllowList(): OrganizationAllowList {\n    return this.settings?.allowList || ORGANIZATION_ALLOW_ALL;\n  }\n\n  public getSettings(): OrganizationSettings | undefined {\n    return this.settings;\n  }\n\n  public dispose(): void {\n    // No resources to clean up for static settings.\n  }\n}\n","import {\n  type TelemetryClient,\n  type TelemetryEvent,\n  type ClineMessage,\n  TelemetryEventName,\n  rooCodeTelemetryEventSchema,\n  TelemetryPropertiesProvider,\n  TelemetryEventSubscription,\n} from '@roo-code/types';\n\nimport type { AuthService, SettingsService } from './types.js';\nimport { getRooCodeApiUrl } from './config.js';\n\nabstract class BaseTelemetryClient implements TelemetryClient {\n  protected providerRef: WeakRef<TelemetryPropertiesProvider> | null = null;\n  protected telemetryEnabled: boolean = false;\n\n  constructor(\n    public readonly subscription?: TelemetryEventSubscription,\n    protected readonly debug = false,\n  ) {}\n\n  protected isEventCapturable(eventName: TelemetryEventName): boolean {\n    if (!this.subscription) {\n      return true;\n    }\n\n    return this.subscription.type === 'include'\n      ? this.subscription.events.includes(eventName)\n      : !this.subscription.events.includes(eventName);\n  }\n\n  /**\n   * Determines if a specific property should be included in telemetry events\n   * Override in subclasses to filter specific properties\n   */\n  protected isPropertyCapturable(_propertyName: string): boolean {\n    return true;\n  }\n\n  protected async getEventProperties(\n    event: TelemetryEvent,\n  ): Promise<TelemetryEvent['properties']> {\n    let providerProperties: TelemetryEvent['properties'] = {};\n    const provider = this.providerRef?.deref();\n\n    if (provider) {\n      try {\n        // Get properties from the provider\n        providerProperties = await provider.getTelemetryProperties();\n      } catch (error) {\n        // Log error but continue with capturing the event.\n        console.error(\n          `Error getting telemetry properties: ${error instanceof Error ? error.message : String(error)}`,\n        );\n      }\n    }\n\n    // Merge provider properties with event-specific properties.\n    // Event properties take precedence in case of conflicts.\n    const mergedProperties = {\n      ...providerProperties,\n      ...(event.properties || {}),\n    };\n\n    // Filter out properties that shouldn't be captured by this client\n    return Object.fromEntries(\n      Object.entries(mergedProperties).filter(([key]) =>\n        this.isPropertyCapturable(key),\n      ),\n    );\n  }\n\n  public abstract capture(event: TelemetryEvent): Promise<void>;\n\n  public setProvider(provider: TelemetryPropertiesProvider): void {\n    this.providerRef = new WeakRef(provider);\n  }\n\n  public abstract updateTelemetryState(didUserOptIn: boolean): void;\n\n  public isTelemetryEnabled(): boolean {\n    return this.telemetryEnabled;\n  }\n\n  public abstract shutdown(): Promise<void>;\n}\n\nexport class CloudTelemetryClient extends BaseTelemetryClient {\n  constructor(\n    private authService: AuthService,\n    private settingsService: SettingsService,\n    debug = false,\n  ) {\n    super(\n      {\n        type: 'exclude',\n        events: [TelemetryEventName.TASK_CONVERSATION_MESSAGE],\n      },\n      debug,\n    );\n  }\n\n  private async fetch(path: string, options: RequestInit) {\n    if (!this.authService.isAuthenticated()) {\n      return;\n    }\n\n    const token = this.authService.getSessionToken();\n\n    if (!token) {\n      console.error(\n        `[TelemetryClient#fetch] Unauthorized: No session token available.`,\n      );\n      return;\n    }\n\n    const response = await fetch(`${getRooCodeApiUrl()}/api/${path}`, {\n      ...options,\n      headers: {\n        Authorization: `Bearer ${token}`,\n        'Content-Type': 'application/json',\n      },\n    });\n\n    if (!response.ok) {\n      console.error(\n        `[TelemetryClient#fetch] ${options.method} ${path} -> ${response.status} ${response.statusText}`,\n      );\n    }\n  }\n\n  public override async capture(event: TelemetryEvent) {\n    if (!this.isTelemetryEnabled() || !this.isEventCapturable(event.event)) {\n      if (this.debug) {\n        console.info(\n          `[TelemetryClient#capture] Skipping event: ${event.event}`,\n        );\n      }\n\n      return;\n    }\n\n    const payload = {\n      type: event.event,\n      properties: await this.getEventProperties(event),\n    };\n\n    if (this.debug) {\n      console.info(`[TelemetryClient#capture] ${JSON.stringify(payload)}`);\n    }\n\n    const result = rooCodeTelemetryEventSchema.safeParse(payload);\n\n    if (!result.success) {\n      console.error(\n        `[TelemetryClient#capture] Invalid telemetry event: ${result.error.message} - ${JSON.stringify(payload)}`,\n      );\n\n      return;\n    }\n\n    try {\n      await this.fetch(`events`, {\n        method: 'POST',\n        body: JSON.stringify(result.data),\n      });\n    } catch (error) {\n      console.error(\n        `[TelemetryClient#capture] Error sending telemetry event: ${error}`,\n      );\n    }\n  }\n\n  public async backfillMessages(\n    messages: ClineMessage[],\n    taskId: string,\n  ): Promise<void> {\n    if (!this.authService.isAuthenticated()) {\n      if (this.debug) {\n        console.info(\n          `[TelemetryClient#backfillMessages] Skipping: Not authenticated`,\n        );\n      }\n      return;\n    }\n\n    const token = this.authService.getSessionToken();\n\n    if (!token) {\n      console.error(\n        `[TelemetryClient#backfillMessages] Unauthorized: No session token available.`,\n      );\n      return;\n    }\n\n    try {\n      const mergedProperties = await this.getEventProperties({\n        event: TelemetryEventName.TASK_MESSAGE,\n        properties: { taskId },\n      });\n\n      const formData = new FormData();\n      formData.append('taskId', taskId);\n      formData.append('properties', JSON.stringify(mergedProperties));\n\n      formData.append(\n        'file',\n        new File([JSON.stringify(messages)], 'task.json', {\n          type: 'application/json',\n        }),\n      );\n\n      if (this.debug) {\n        console.info(\n          `[TelemetryClient#backfillMessages] Uploading ${messages.length} messages for task ${taskId}`,\n        );\n      }\n\n      // Custom fetch for multipart - don't set Content-Type header (let browser set it)\n      const response = await fetch(\n        `${getRooCodeApiUrl()}/api/events/backfill`,\n        {\n          method: 'POST',\n          headers: {\n            Authorization: `Bearer ${token}`,\n            // Note: No Content-Type header - browser will set multipart/form-data with boundary\n          },\n          body: formData,\n        },\n      );\n\n      if (!response.ok) {\n        console.error(\n          `[TelemetryClient#backfillMessages] POST events/backfill -> ${response.status} ${response.statusText}`,\n        );\n      } else if (this.debug) {\n        console.info(\n          `[TelemetryClient#backfillMessages] Successfully uploaded messages for task ${taskId}`,\n        );\n      }\n    } catch (error) {\n      console.error(\n        `[TelemetryClient#backfillMessages] Error uploading messages: ${error}`,\n      );\n    }\n  }\n\n  public override updateTelemetryState(_didUserOptIn: boolean) {}\n\n  public override isTelemetryEnabled(): boolean {\n    return true;\n  }\n\n  protected override isEventCapturable(eventName: TelemetryEventName): boolean {\n    // Ensure that this event type is supported by the telemetry client\n    if (!super.isEventCapturable(eventName)) {\n      return false;\n    }\n\n    // Only record message telemetry if a cloud account is present and explicitly configured to record messages\n    if (eventName === TelemetryEventName.TASK_MESSAGE) {\n      return (\n        this.settingsService.getSettings()?.cloudSettings?.recordTaskMessages ||\n        false\n      );\n    }\n\n    // Other telemetry types are capturable at this point\n    return true;\n  }\n\n  public override async shutdown() {}\n}\n","import type {\n  SettingsService,\n  ShareResponse,\n  ShareVisibility,\n} from './types.js';\nimport { importVscode } from './importVscode.js';\nimport type { CloudAPI } from './CloudAPI.js';\n\nexport class CloudShareService {\n  private cloudAPI: CloudAPI;\n  private settingsService: SettingsService;\n  private log: (...args: unknown[]) => void;\n\n  constructor(\n    cloudAPI: CloudAPI,\n    settingsService: SettingsService,\n    log?: (...args: unknown[]) => void,\n  ) {\n    this.cloudAPI = cloudAPI;\n    this.settingsService = settingsService;\n    this.log = log || console.log;\n  }\n\n  async shareTask(\n    taskId: string,\n    visibility: ShareVisibility = 'organization',\n  ): Promise<ShareResponse> {\n    try {\n      const response = await this.cloudAPI.shareTask(taskId, visibility);\n\n      if (response.success && response.shareUrl) {\n        const vscode = await importVscode();\n\n        if (vscode?.env?.clipboard?.writeText) {\n          try {\n            await vscode.env.clipboard.writeText(response.shareUrl);\n          } catch (copyErr) {\n            this.log(\n              '[ShareService] Clipboard write failed (non-fatal):',\n              copyErr,\n            );\n          }\n        } else {\n          this.log(\n            '[ShareService] VS Code clipboard unavailable; running outside extension host.',\n          );\n        }\n      }\n\n      return response;\n    } catch (error) {\n      this.log('[ShareService] Error sharing task:', error);\n      throw error;\n    }\n  }\n\n  async canShareTask(): Promise<boolean> {\n    try {\n      return !!this.settingsService.getSettings()?.cloudSettings\n        ?.enableTaskSharing;\n    } catch (error) {\n      this.log('[ShareService] Error checking if task can be shared:', error);\n      return false;\n    }\n  }\n}\n","import type { Disposable, ExtensionContext } from 'vscode';\nimport EventEmitter from 'events';\n\nimport type { TelemetryEvent, ClineMessage } from '@roo-code/types';\n\nimport type {\n  CloudServiceEvents,\n  AuthService,\n  SettingsService,\n  CloudUserInfo,\n  OrganizationAllowList,\n  OrganizationSettings,\n  ShareVisibility,\n} from './types.js';\nimport { TaskNotFoundError } from './errors.js';\nimport { WebAuthService } from './WebAuthService.js';\nimport { StaticTokenAuthService } from './StaticTokenAuthService.js';\nimport { CloudSettingsService } from './CloudSettingsService.js';\nimport { StaticSettingsService } from './StaticSettingsService.js';\nimport { CloudTelemetryClient as TelemetryClient } from './TelemetryClient.js';\nimport { CloudShareService } from './CloudShareService.js';\nimport { CloudAPI } from './CloudAPI.js';\n\ntype AuthStateChangedPayload = CloudServiceEvents['auth-state-changed'][0];\ntype AuthUserInfoPayload = CloudServiceEvents['user-info'][0];\ntype SettingsPayload = CloudServiceEvents['settings-updated'][0];\n\nexport class CloudService\n  extends EventEmitter<CloudServiceEvents>\n  implements Disposable\n{\n  private static _instance: CloudService | null = null;\n\n  private context: ExtensionContext;\n\n  private authStateListener: (data: AuthStateChangedPayload) => void;\n  private authUserInfoListener: (data: AuthUserInfoPayload) => void;\n  private settingsListener: (data: SettingsPayload) => void;\n\n  private isInitialized = false;\n  private log: (...args: unknown[]) => void;\n\n  /**\n   * Services\n   */\n\n  private _authService: AuthService | null = null;\n\n  public get authService() {\n    return this._authService;\n  }\n\n  private _settingsService: SettingsService | null = null;\n\n  public get settingsService() {\n    return this._settingsService;\n  }\n\n  private _telemetryClient: TelemetryClient | null = null;\n\n  public get telemetryClient() {\n    return this._telemetryClient;\n  }\n\n  private _shareService: CloudShareService | null = null;\n\n  public get shareService() {\n    return this._shareService;\n  }\n\n  private _cloudAPI: CloudAPI | null = null;\n\n  public get cloudAPI() {\n    return this._cloudAPI;\n  }\n\n  private constructor(\n    context: ExtensionContext,\n    log?: (...args: unknown[]) => void,\n  ) {\n    super();\n\n    this.context = context;\n    this.log = log || console.log;\n\n    this.authStateListener = (data: AuthStateChangedPayload) => {\n      this.emit('auth-state-changed', data);\n    };\n\n    this.authUserInfoListener = (data: AuthUserInfoPayload) => {\n      this.emit('user-info', data);\n    };\n\n    this.settingsListener = (data: SettingsPayload) => {\n      this.emit('settings-updated', data);\n    };\n  }\n\n  public async initialize(): Promise<void> {\n    if (this.isInitialized) {\n      return;\n    }\n\n    try {\n      // For testing you can create a token with:\n      // `pnpm --filter @roo-code-cloud/roomote-cli development auth job-token --job-id 1 --user-id user_2xmBhejNeDTwanM8CgIOnMgVxzC --org-id org_2wbhchVXZMQl8OS1yt0mrDazCpW`\n      // The token will last for 1 hour.\n      const cloudToken = process.env.ROO_CODE_CLOUD_TOKEN;\n\n      if (cloudToken && cloudToken.length > 0) {\n        this._authService = new StaticTokenAuthService(\n          this.context,\n          cloudToken,\n          this.log,\n        );\n      } else {\n        this._authService = new WebAuthService(this.context, this.log);\n      }\n\n      this._authService.on('auth-state-changed', this.authStateListener);\n      this._authService.on('user-info', this.authUserInfoListener);\n      await this._authService.initialize();\n\n      // Check for static settings environment variable.\n      const staticOrgSettings = process.env.ROO_CODE_CLOUD_ORG_SETTINGS;\n\n      if (staticOrgSettings && staticOrgSettings.length > 0) {\n        this._settingsService = new StaticSettingsService(\n          staticOrgSettings,\n          this.log,\n        );\n      } else {\n        const cloudSettingsService = new CloudSettingsService(\n          this.context,\n          this._authService,\n          this.log,\n        );\n\n        cloudSettingsService.on('settings-updated', this.settingsListener);\n        cloudSettingsService.initialize();\n\n        this._settingsService = cloudSettingsService;\n      }\n\n      this._cloudAPI = new CloudAPI(this._authService, this.log);\n\n      this._telemetryClient = new TelemetryClient(\n        this._authService,\n        this._settingsService,\n      );\n\n      this._shareService = new CloudShareService(\n        this._cloudAPI,\n        this._settingsService,\n        this.log,\n      );\n\n      this.isInitialized = true;\n    } catch (error) {\n      this.log('[CloudService] Failed to initialize:', error);\n      throw new Error(`Failed to initialize CloudService: ${error}`);\n    }\n  }\n\n  // AuthService\n\n  public async login(): Promise<void> {\n    this.ensureInitialized();\n    return this.authService!.login();\n  }\n\n  public async logout(): Promise<void> {\n    this.ensureInitialized();\n    return this.authService!.logout();\n  }\n\n  public isAuthenticated(): boolean {\n    this.ensureInitialized();\n    return this.authService!.isAuthenticated();\n  }\n\n  public hasActiveSession(): boolean {\n    this.ensureInitialized();\n    return this.authService!.hasActiveSession();\n  }\n\n  public hasOrIsAcquiringActiveSession(): boolean {\n    this.ensureInitialized();\n    return this.authService!.hasOrIsAcquiringActiveSession();\n  }\n\n  public getUserInfo(): CloudUserInfo | null {\n    this.ensureInitialized();\n    return this.authService!.getUserInfo();\n  }\n\n  public getOrganizationId(): string | null {\n    this.ensureInitialized();\n    const userInfo = this.authService!.getUserInfo();\n    return userInfo?.organizationId || null;\n  }\n\n  public getOrganizationName(): string | null {\n    this.ensureInitialized();\n    const userInfo = this.authService!.getUserInfo();\n    return userInfo?.organizationName || null;\n  }\n\n  public getOrganizationRole(): string | null {\n    this.ensureInitialized();\n    const userInfo = this.authService!.getUserInfo();\n    return userInfo?.organizationRole || null;\n  }\n\n  public hasStoredOrganizationId(): boolean {\n    this.ensureInitialized();\n    return this.authService!.getStoredOrganizationId() !== null;\n  }\n\n  public getStoredOrganizationId(): string | null {\n    this.ensureInitialized();\n    return this.authService!.getStoredOrganizationId();\n  }\n\n  public getAuthState(): string {\n    this.ensureInitialized();\n    return this.authService!.getState();\n  }\n\n  public async handleAuthCallback(\n    code: string | null,\n    state: string | null,\n    organizationId?: string | null,\n  ): Promise<void> {\n    this.ensureInitialized();\n    return this.authService!.handleCallback(code, state, organizationId);\n  }\n\n  // SettingsService\n\n  public getAllowList(): OrganizationAllowList {\n    this.ensureInitialized();\n    return this.settingsService!.getAllowList();\n  }\n\n  public getOrganizationSettings(): OrganizationSettings | undefined {\n    this.ensureInitialized();\n    return this.settingsService!.getSettings();\n  }\n\n  // TelemetryClient\n\n  public captureEvent(event: TelemetryEvent): void {\n    this.ensureInitialized();\n    this.telemetryClient!.capture(event);\n  }\n\n  // ShareService\n\n  public async shareTask(\n    taskId: string,\n    visibility: ShareVisibility = 'organization',\n    clineMessages?: ClineMessage[],\n  ) {\n    this.ensureInitialized();\n\n    try {\n      return await this.shareService!.shareTask(taskId, visibility);\n    } catch (error) {\n      if (error instanceof TaskNotFoundError && clineMessages) {\n        // Backfill messages and retry.\n        await this.telemetryClient!.backfillMessages(clineMessages, taskId);\n        return await this.shareService!.shareTask(taskId, visibility);\n      }\n\n      throw error;\n    }\n  }\n\n  public async canShareTask(): Promise<boolean> {\n    this.ensureInitialized();\n    return this.shareService!.canShareTask();\n  }\n\n  // Lifecycle\n\n  public dispose(): void {\n    if (this.authService) {\n      this.authService.off('auth-state-changed', this.authStateListener);\n      this.authService.off('user-info', this.authUserInfoListener);\n    }\n\n    if (this.settingsService) {\n      if (this.settingsService instanceof CloudSettingsService) {\n        this.settingsService.off('settings-updated', this.settingsListener);\n      }\n\n      this.settingsService.dispose();\n    }\n\n    this.isInitialized = false;\n  }\n\n  private ensureInitialized(): void {\n    if (!this.isInitialized) {\n      throw new Error('CloudService not initialized.');\n    }\n  }\n\n  static get instance(): CloudService {\n    if (!this._instance) {\n      throw new Error('CloudService not initialized');\n    }\n\n    return this._instance;\n  }\n\n  static async createInstance(\n    context: ExtensionContext,\n    log?: (...args: unknown[]) => void,\n    eventHandlers?: Partial<{\n      [K in keyof CloudServiceEvents]: (...args: CloudServiceEvents[K]) => void;\n    }>,\n  ): Promise<CloudService> {\n    if (this._instance) {\n      throw new Error('CloudService instance already created');\n    }\n\n    this._instance = new CloudService(context, log);\n\n    await this._instance.initialize();\n\n    if (eventHandlers) {\n      for (const [event, handler] of Object.entries(eventHandlers)) {\n        if (handler) {\n          this._instance.on(\n            event as keyof CloudServiceEvents,\n            handler as (\n              ...args: CloudServiceEvents[keyof CloudServiceEvents]\n            ) => void,\n          );\n        }\n      }\n    }\n\n    await this._instance.authService?.broadcast();\n\n    return this._instance;\n  }\n\n  static hasInstance(): boolean {\n    return this._instance !== null && this._instance.isInitialized;\n  }\n\n  static resetInstance(): void {\n    if (this._instance) {\n      this._instance.dispose();\n      this._instance = null;\n    }\n  }\n\n  static isEnabled(): boolean {\n    return !!this._instance?.isAuthenticated();\n  }\n}\n","import { io, type Socket } from 'socket.io-client';\n\nimport { ConnectionState, type RetryConfig } from '../types.js';\n\nexport interface SocketConnectionOptions {\n  url: string;\n  socketOptions: Record<string, unknown>;\n  onConnect?: () => void | Promise<void>;\n  onDisconnect?: (reason: string) => void;\n  onReconnect?: (attemptNumber: number) => void | Promise<void>;\n  onError?: (error: Error) => void;\n  logger?: {\n    log: (message: string, ...args: unknown[]) => void;\n    error: (message: string, ...args: unknown[]) => void;\n    warn: (message: string, ...args: unknown[]) => void;\n  };\n}\n\nexport class SocketConnectionManager {\n  private socket: Socket | null = null;\n  private connectionState: ConnectionState = ConnectionState.DISCONNECTED;\n  private retryAttempt: number = 0;\n  private retryTimeout: NodeJS.Timeout | null = null;\n  private hasConnectedOnce: boolean = false;\n\n  private readonly retryConfig: RetryConfig = {\n    maxInitialAttempts: 10,\n    initialDelay: 1_000,\n    maxDelay: 15_000,\n    backoffMultiplier: 2,\n  };\n\n  private readonly CONNECTION_TIMEOUT = 2_000;\n  private readonly options: SocketConnectionOptions;\n\n  constructor(\n    options: SocketConnectionOptions,\n    retryConfig?: Partial<RetryConfig>,\n  ) {\n    this.options = options;\n\n    if (retryConfig) {\n      this.retryConfig = { ...this.retryConfig, ...retryConfig };\n    }\n  }\n\n  public async connect(): Promise<void> {\n    if (this.connectionState === ConnectionState.CONNECTED) {\n      console.log(`[SocketConnectionManager] Already connected`);\n      return;\n    }\n\n    if (\n      this.connectionState === ConnectionState.CONNECTING ||\n      this.connectionState === ConnectionState.RETRYING\n    ) {\n      console.log(\n        `[SocketConnectionManager] Connection attempt already in progress`,\n      );\n\n      return;\n    }\n\n    // Start connection attempt without blocking.\n    this.startConnectionAttempt();\n  }\n\n  private async startConnectionAttempt() {\n    this.retryAttempt = 0;\n\n    try {\n      await this.connectWithRetry();\n    } catch (error) {\n      console.error(\n        `[SocketConnectionManager] Initial connection attempts failed:`,\n        error,\n      );\n\n      // If we've never connected successfully, we've exhausted our retry attempts\n      // The user will need to manually retry or fix the issue\n      this.connectionState = ConnectionState.FAILED;\n    }\n  }\n\n  private async connectWithRetry(): Promise<void> {\n    let delay = this.retryConfig.initialDelay;\n\n    while (this.retryAttempt < this.retryConfig.maxInitialAttempts) {\n      try {\n        this.connectionState =\n          this.retryAttempt === 0\n            ? ConnectionState.CONNECTING\n            : ConnectionState.RETRYING;\n\n        console.log(\n          `[SocketConnectionManager] Connection attempt ${this.retryAttempt + 1} / ${this.retryConfig.maxInitialAttempts}`,\n        );\n\n        await this.connectSocket();\n\n        console.log(\n          `[SocketConnectionManager] Connected to ${this.options.url}`,\n        );\n\n        this.connectionState = ConnectionState.CONNECTED;\n        this.retryAttempt = 0;\n\n        this.clearRetryTimeouts();\n\n        if (this.options.onConnect) {\n          await this.options.onConnect();\n        }\n\n        return;\n      } catch (error) {\n        this.retryAttempt++;\n\n        console.error(\n          `[SocketConnectionManager] Connection attempt ${this.retryAttempt} failed:`,\n          error,\n        );\n\n        if (this.socket) {\n          this.socket.disconnect();\n          this.socket = null;\n        }\n\n        if (this.retryAttempt >= this.retryConfig.maxInitialAttempts) {\n          this.connectionState = ConnectionState.FAILED;\n\n          throw new Error(\n            `Failed to connect after ${this.retryConfig.maxInitialAttempts} attempts`,\n          );\n        }\n\n        console.log(\n          `[SocketConnectionManager] Waiting ${delay}ms before retry...`,\n        );\n\n        await this.delay(delay);\n\n        delay = Math.min(\n          delay * this.retryConfig.backoffMultiplier,\n          this.retryConfig.maxDelay,\n        );\n      }\n    }\n  }\n\n  private async connectSocket(): Promise<void> {\n    return new Promise((resolve, reject) => {\n      this.socket = io(this.options.url, this.options.socketOptions);\n\n      const connectionTimeout = setTimeout(() => {\n        console.error(`[SocketConnectionManager] Connection timeout`);\n\n        if (this.connectionState !== ConnectionState.CONNECTED) {\n          this.socket?.disconnect();\n          reject(new Error('Connection timeout'));\n        }\n      }, this.CONNECTION_TIMEOUT);\n\n      this.socket.on('connect', async () => {\n        clearTimeout(connectionTimeout);\n\n        const isReconnection = this.hasConnectedOnce;\n\n        // If this is a reconnection (not the first connect), treat it as a\n        // reconnect.\n        // This handles server restarts where 'reconnect' event might not fire.\n        if (isReconnection) {\n          console.log(\n            `[SocketConnectionManager] Treating connect as reconnection (server may have restarted)`,\n          );\n\n          this.connectionState = ConnectionState.CONNECTED;\n\n          if (this.options.onReconnect) {\n            // Call onReconnect to re-register instance.\n            await this.options.onReconnect(0);\n          }\n        }\n\n        this.hasConnectedOnce = true;\n        resolve();\n      });\n\n      this.socket.on('disconnect', (reason: string) => {\n        console.log(\n          `[SocketConnectionManager] Disconnected (reason: ${reason})`,\n        );\n\n        this.connectionState = ConnectionState.DISCONNECTED;\n\n        if (this.options.onDisconnect) {\n          this.options.onDisconnect(reason);\n        }\n\n        // Don't attempt to reconnect if we're manually disconnecting.\n        const isManualDisconnect = reason === 'io client disconnect';\n\n        if (!isManualDisconnect && this.hasConnectedOnce) {\n          // After successful initial connection, rely entirely on Socket.IO's\n          // reconnection.\n          console.log(\n            `[SocketConnectionManager] Socket.IO will handle reconnection (reason: ${reason})`,\n          );\n        }\n      });\n\n      // Listen for reconnection attempts.\n      this.socket.on('reconnect_attempt', (attemptNumber: number) => {\n        console.log(`[SocketConnectionManager] Socket.IO reconnect attempt:`, {\n          attemptNumber,\n        });\n      });\n\n      this.socket.on('reconnect', (attemptNumber: number) => {\n        console.log(\n          `[SocketConnectionManager] Socket reconnected (attempt: ${attemptNumber})`,\n        );\n\n        this.connectionState = ConnectionState.CONNECTED;\n\n        if (this.options.onReconnect) {\n          this.options.onReconnect(attemptNumber);\n        }\n      });\n\n      this.socket.on('reconnect_error', (error: Error) => {\n        console.error(\n          `[SocketConnectionManager] Socket.IO reconnect error:`,\n          error,\n        );\n      });\n\n      this.socket.on('reconnect_failed', () => {\n        console.error(\n          `[SocketConnectionManager] Socket.IO reconnection failed after all attempts`,\n        );\n\n        this.connectionState = ConnectionState.FAILED;\n\n        // Socket.IO has exhausted its reconnection attempts\n        // The connection is now permanently failed until manual intervention\n      });\n\n      this.socket.on('error', (error) => {\n        console.error(`[SocketConnectionManager] Socket error:`, error);\n\n        if (this.connectionState !== ConnectionState.CONNECTED) {\n          clearTimeout(connectionTimeout);\n          reject(error);\n        }\n\n        if (this.options.onError) {\n          this.options.onError(error);\n        }\n      });\n\n      this.socket.on('auth_error', (error) => {\n        console.error(`[SocketConnectionManager] Authentication error:`, error);\n        clearTimeout(connectionTimeout);\n        reject(new Error(error.message || 'Authentication failed'));\n      });\n    });\n  }\n\n  private delay(ms: number): Promise<void> {\n    return new Promise((resolve) => {\n      this.retryTimeout = setTimeout(resolve, ms);\n    });\n  }\n\n  // 1. Custom retry for initial connection attempts.\n  // 2. Socket.IO's built-in reconnection after successful initial connection.\n\n  private clearRetryTimeouts() {\n    if (this.retryTimeout) {\n      clearTimeout(this.retryTimeout);\n      this.retryTimeout = null;\n    }\n  }\n\n  public async disconnect(): Promise<void> {\n    console.log(`[SocketConnectionManager] Disconnecting...`);\n\n    this.clearRetryTimeouts();\n\n    if (this.socket) {\n      this.socket.removeAllListeners();\n      this.socket.disconnect();\n      this.socket = null;\n    }\n\n    this.connectionState = ConnectionState.DISCONNECTED;\n\n    console.log(`[SocketConnectionManager] Disconnected`);\n  }\n\n  public getSocket(): Socket | null {\n    return this.socket;\n  }\n\n  public getConnectionState(): ConnectionState {\n    return this.connectionState;\n  }\n\n  public isConnected(): boolean {\n    return (\n      this.connectionState === ConnectionState.CONNECTED &&\n      this.socket?.connected === true\n    );\n  }\n\n  public async reconnect(): Promise<void> {\n    if (this.connectionState === ConnectionState.CONNECTED) {\n      console.log(`[SocketConnectionManager] Already connected`);\n      return;\n    }\n\n    console.log(`[SocketConnectionManager] Manual reconnection requested`);\n\n    this.hasConnectedOnce = false;\n\n    await this.disconnect();\n    await this.connect();\n  }\n}\n","import type { Socket } from 'socket.io-client';\n\nimport {\n  type TaskProviderLike,\n  RooCodeEventName,\n  TaskStatus,\n} from '@roo-code/types';\n\nimport {\n  type ExtensionInstance,\n  type ExtensionBridgeCommand,\n  type ExtensionBridgeEvent,\n  ExtensionBridgeCommandName,\n  ExtensionBridgeEventName,\n  ExtensionSocketEvents,\n  HEARTBEAT_INTERVAL_MS,\n} from '../types.js';\n\nexport class ExtensionManager {\n  private instanceId: string;\n  private userId: string;\n  private provider: TaskProviderLike;\n  private extensionInstance: ExtensionInstance;\n  private heartbeatInterval: NodeJS.Timeout | null = null;\n  private socket: Socket | null = null;\n\n  constructor(instanceId: string, userId: string, provider: TaskProviderLike) {\n    this.instanceId = instanceId;\n    this.userId = userId;\n    this.provider = provider;\n\n    this.extensionInstance = {\n      instanceId: this.instanceId,\n      userId: this.userId,\n      workspacePath: this.provider.cwd,\n      appProperties: this.provider.appProperties,\n      gitProperties: this.provider.gitProperties,\n      lastHeartbeat: Date.now(),\n      task: {\n        taskId: '',\n        taskStatus: TaskStatus.None,\n      },\n      taskHistory: [],\n    };\n\n    this.setupListeners();\n  }\n\n  public async onConnect(socket: Socket): Promise<void> {\n    this.socket = socket;\n    await this.registerInstance(socket);\n    this.startHeartbeat(socket);\n  }\n\n  public onDisconnect(): void {\n    this.stopHeartbeat();\n    this.socket = null;\n  }\n\n  public async onReconnect(socket: Socket): Promise<void> {\n    this.socket = socket;\n    await this.registerInstance(socket);\n    this.startHeartbeat(socket);\n  }\n\n  public async cleanup(socket: Socket | null): Promise<void> {\n    this.stopHeartbeat();\n\n    if (socket) {\n      await this.unregisterInstance(socket);\n    }\n\n    this.socket = null;\n  }\n\n  public handleExtensionCommand(message: ExtensionBridgeCommand): void {\n    if (message.instanceId !== this.instanceId) {\n      console.log(\n        `[ExtensionManager] command -> instance id mismatch | ${this.instanceId}`,\n        {\n          messageInstanceId: message.instanceId,\n        },\n      );\n\n      return;\n    }\n\n    switch (message.type) {\n      case ExtensionBridgeCommandName.StartTask: {\n        console.log(\n          `[ExtensionManager] command -> createTask() | ${message.instanceId}`,\n          {\n            text: message.payload.text?.substring(0, 100) + '...',\n            hasImages: !!message.payload.images,\n          },\n        );\n\n        this.provider.createTask(message.payload.text, message.payload.images);\n\n        break;\n      }\n      case ExtensionBridgeCommandName.StopTask: {\n        const instance = this.updateInstance();\n\n        if (instance.task.taskStatus === TaskStatus.Running) {\n          console.log(\n            `[ExtensionManager] command -> cancelTask() | ${message.instanceId}`,\n          );\n\n          this.provider.cancelTask();\n          this.provider.postStateToWebview();\n        } else if (instance.task.taskId) {\n          console.log(\n            `[ExtensionManager] command -> clearTask() | ${message.instanceId}`,\n          );\n\n          this.provider.clearTask();\n          this.provider.postStateToWebview();\n        }\n\n        break;\n      }\n      case ExtensionBridgeCommandName.ResumeTask: {\n        console.log(\n          `[ExtensionManager] command -> resumeTask() | ${message.instanceId}`,\n          {\n            taskId: message.payload.taskId,\n          },\n        );\n\n        // Resume the task from history by taskId\n        this.provider.resumeTask(message.payload.taskId);\n\n        this.provider.postStateToWebview();\n\n        break;\n      }\n    }\n  }\n\n  private async registerInstance(socket: Socket): Promise<void> {\n    const instance = this.updateInstance();\n\n    try {\n      socket.emit(ExtensionSocketEvents.REGISTER, instance);\n\n      console.log(\n        `[ExtensionManager] emit() -> ${ExtensionSocketEvents.REGISTER}`,\n        // instance,\n      );\n    } catch (error) {\n      console.error(\n        `[ExtensionManager] emit() failed -> ${ExtensionSocketEvents.REGISTER}: ${\n          error instanceof Error ? error.message : String(error)\n        }`,\n      );\n\n      return;\n    }\n  }\n\n  private async unregisterInstance(socket: Socket): Promise<void> {\n    const instance = this.updateInstance();\n\n    try {\n      socket.emit(ExtensionSocketEvents.UNREGISTER, instance);\n\n      console.log(\n        `[ExtensionManager] emit() -> ${ExtensionSocketEvents.UNREGISTER}`,\n        // instance,\n      );\n    } catch (error) {\n      console.error(\n        `[ExtensionManager] emit() failed -> ${ExtensionSocketEvents.UNREGISTER}: ${\n          error instanceof Error ? error.message : String(error)\n        }`,\n      );\n    }\n  }\n\n  private startHeartbeat(socket: Socket): void {\n    this.stopHeartbeat();\n\n    this.heartbeatInterval = setInterval(async () => {\n      const instance = this.updateInstance();\n\n      try {\n        socket.emit(ExtensionSocketEvents.HEARTBEAT, instance);\n\n        // console.log(\n        //   `[ExtensionManager] emit() -> ${ExtensionSocketEvents.HEARTBEAT}`,\n        //   instance,\n        // );\n      } catch (error) {\n        console.error(\n          `[ExtensionManager] emit() failed -> ${ExtensionSocketEvents.HEARTBEAT}: ${\n            error instanceof Error ? error.message : String(error)\n          }`,\n        );\n      }\n    }, HEARTBEAT_INTERVAL_MS);\n  }\n\n  private stopHeartbeat(): void {\n    if (this.heartbeatInterval) {\n      clearInterval(this.heartbeatInterval);\n      this.heartbeatInterval = null;\n    }\n  }\n\n  private setupListeners(): void {\n    const eventMapping = [\n      {\n        from: RooCodeEventName.TaskCreated,\n        to: ExtensionBridgeEventName.TaskCreated,\n      },\n      {\n        from: RooCodeEventName.TaskStarted,\n        to: ExtensionBridgeEventName.TaskStarted,\n      },\n      {\n        from: RooCodeEventName.TaskCompleted,\n        to: ExtensionBridgeEventName.TaskCompleted,\n      },\n      {\n        from: RooCodeEventName.TaskAborted,\n        to: ExtensionBridgeEventName.TaskAborted,\n      },\n      {\n        from: RooCodeEventName.TaskFocused,\n        to: ExtensionBridgeEventName.TaskFocused,\n      },\n      {\n        from: RooCodeEventName.TaskUnfocused,\n        to: ExtensionBridgeEventName.TaskUnfocused,\n      },\n      {\n        from: RooCodeEventName.TaskActive,\n        to: ExtensionBridgeEventName.TaskActive,\n      },\n      {\n        from: RooCodeEventName.TaskInteractive,\n        to: ExtensionBridgeEventName.TaskInteractive,\n      },\n      {\n        from: RooCodeEventName.TaskResumable,\n        to: ExtensionBridgeEventName.TaskResumable,\n      },\n      {\n        from: RooCodeEventName.TaskIdle,\n        to: ExtensionBridgeEventName.TaskIdle,\n      },\n    ] as const;\n\n    const addListener =\n      (type: ExtensionBridgeEventName) =>\n      async (..._args: unknown[]) => {\n        this.publishEvent({\n          type,\n          instance: this.updateInstance(),\n          timestamp: Date.now(),\n        });\n      };\n\n    eventMapping.forEach(({ from, to }) =>\n      this.provider.on(from, addListener(to)),\n    );\n  }\n\n  private async publishEvent(message: ExtensionBridgeEvent): Promise<boolean> {\n    if (!this.socket) {\n      console.error('[ExtensionManager] publishEvent -> socket not available');\n      return false;\n    }\n\n    try {\n      this.socket.emit(ExtensionSocketEvents.EVENT, message);\n\n      console.log(\n        `[ExtensionManager] emit() -> ${ExtensionSocketEvents.EVENT} ${message.type}`,\n        message,\n      );\n\n      return true;\n    } catch (error) {\n      console.error(\n        `[ExtensionManager] emit() failed -> ${ExtensionSocketEvents.EVENT}: ${\n          error instanceof Error ? error.message : String(error)\n        }`,\n      );\n\n      return false;\n    }\n  }\n\n  private updateInstance(): ExtensionInstance {\n    const task = this.provider?.getCurrentTask();\n    const taskHistory = this.provider?.getRecentTasks() ?? [];\n\n    this.extensionInstance = {\n      ...this.extensionInstance,\n      appProperties:\n        this.extensionInstance.appProperties ?? this.provider.appProperties,\n      gitProperties:\n        this.extensionInstance.gitProperties ?? this.provider.gitProperties,\n      lastHeartbeat: Date.now(),\n      task: task\n        ? {\n            taskId: task.taskId,\n            taskStatus: task.taskStatus,\n            ...task.metadata,\n          }\n        : { taskId: '', taskStatus: TaskStatus.None },\n      taskAsk: task?.taskAsk,\n      taskHistory,\n    };\n\n    return this.extensionInstance;\n  }\n}\n","import type { Socket } from 'socket.io-client';\n\nimport {\n  type ClineMessage,\n  type TaskEvents,\n  type TaskLike,\n  RooCodeEventName,\n} from '@roo-code/types';\n\nimport {\n  type TaskBridgeCommand,\n  type TaskBridgeEvent,\n  TaskBridgeEventName,\n  TaskBridgeCommandName,\n  TaskSocketEvents,\n} from '../types.js';\n\ntype TaskEventListener = {\n  [K in keyof TaskEvents]: (...args: TaskEvents[K]) => void | Promise<void>;\n}[keyof TaskEvents];\n\nconst TASK_EVENT_MAPPING: Record<TaskBridgeEventName, keyof TaskEvents> = {\n  [TaskBridgeEventName.Message]: RooCodeEventName.Message,\n  [TaskBridgeEventName.TaskModeSwitched]: RooCodeEventName.TaskModeSwitched,\n  [TaskBridgeEventName.TaskInteractive]: RooCodeEventName.TaskInteractive,\n};\n\nexport class TaskManager {\n  private subscribedTasks: Map<string, TaskLike> = new Map();\n  private pendingTasks: Map<string, TaskLike> = new Map();\n  private socket: Socket | null = null;\n\n  private taskListeners: Map<\n    string,\n    Map<TaskBridgeEventName, TaskEventListener>\n  > = new Map();\n\n  constructor() {}\n\n  public async onConnect(socket: Socket): Promise<void> {\n    this.socket = socket;\n\n    // Rejoin all subscribed tasks.\n    for (const taskId of this.subscribedTasks.keys()) {\n      try {\n        socket.emit(TaskSocketEvents.JOIN, { taskId });\n\n        console.log(\n          `[TaskManager] emit() -> ${TaskSocketEvents.JOIN} ${taskId}`,\n        );\n      } catch (error) {\n        console.error(\n          `[TaskManager] emit() failed -> ${TaskSocketEvents.JOIN}: ${\n            error instanceof Error ? error.message : String(error)\n          }`,\n        );\n      }\n    }\n\n    // Subscribe to any pending tasks.\n    for (const task of this.pendingTasks.values()) {\n      await this.subscribeToTask(task, socket);\n    }\n\n    this.pendingTasks.clear();\n  }\n\n  public onDisconnect(): void {\n    this.socket = null;\n  }\n\n  public async onReconnect(socket: Socket): Promise<void> {\n    this.socket = socket;\n\n    // Rejoin all subscribed tasks.\n    for (const taskId of this.subscribedTasks.keys()) {\n      try {\n        socket.emit(TaskSocketEvents.JOIN, { taskId });\n\n        console.log(\n          `[TaskManager] emit() -> ${TaskSocketEvents.JOIN} ${taskId}`,\n        );\n      } catch (error) {\n        console.error(\n          `[TaskManager] emit() failed -> ${TaskSocketEvents.JOIN}: ${\n            error instanceof Error ? error.message : String(error)\n          }`,\n        );\n      }\n    }\n  }\n\n  public async cleanup(socket: Socket | null): Promise<void> {\n    if (!socket) {\n      return;\n    }\n\n    const unsubscribePromises = [];\n\n    for (const taskId of this.subscribedTasks.keys()) {\n      unsubscribePromises.push(this.unsubscribeFromTask(taskId, socket));\n    }\n\n    await Promise.allSettled(unsubscribePromises);\n    this.subscribedTasks.clear();\n    this.taskListeners.clear();\n    this.pendingTasks.clear();\n    this.socket = null;\n  }\n\n  public addPendingTask(task: TaskLike): void {\n    this.pendingTasks.set(task.taskId, task);\n  }\n\n  public async subscribeToTask(task: TaskLike, socket: Socket): Promise<void> {\n    const taskId = task.taskId;\n    this.subscribedTasks.set(taskId, task);\n    this.setupListeners(task);\n\n    try {\n      socket.emit(TaskSocketEvents.JOIN, { taskId });\n      console.log(`[TaskManager] emit() -> ${TaskSocketEvents.JOIN} ${taskId}`);\n    } catch (error) {\n      console.error(\n        `[TaskManager] emit() failed -> ${TaskSocketEvents.JOIN}: ${\n          error instanceof Error ? error.message : String(error)\n        }`,\n      );\n    }\n  }\n\n  public async unsubscribeFromTask(\n    taskId: string,\n    socket: Socket,\n  ): Promise<void> {\n    const task = this.subscribedTasks.get(taskId);\n\n    if (task) {\n      this.removeListeners(task);\n      this.subscribedTasks.delete(taskId);\n    }\n\n    try {\n      socket.emit(TaskSocketEvents.LEAVE, { taskId });\n\n      console.log(\n        `[TaskManager] emit() -> ${TaskSocketEvents.LEAVE} ${taskId}`,\n      );\n    } catch (error) {\n      console.error(\n        `[TaskManager] emit() failed -> ${TaskSocketEvents.LEAVE}: ${\n          error instanceof Error ? error.message : String(error)\n        }`,\n      );\n    }\n  }\n\n  public handleTaskCommand(message: TaskBridgeCommand): void {\n    const task = this.subscribedTasks.get(message.taskId);\n\n    if (!task) {\n      console.error(\n        `[TaskManager#handleTaskCommand] Unable to find task ${message.taskId}`,\n      );\n\n      return;\n    }\n\n    switch (message.type) {\n      case TaskBridgeCommandName.Message:\n        console.log(\n          `[TaskManager#handleTaskCommand] ${TaskBridgeCommandName.Message} ${message.taskId} -> submitUserMessage()`,\n          message,\n        );\n\n        task.submitUserMessage(message.payload.text, message.payload.images);\n        break;\n      case TaskBridgeCommandName.ApproveAsk:\n        console.log(\n          `[TaskManager#handleTaskCommand] ${TaskBridgeCommandName.ApproveAsk} ${message.taskId} -> approveAsk()`,\n          message,\n        );\n\n        task.approveAsk(message.payload);\n        break;\n      case TaskBridgeCommandName.DenyAsk:\n        console.log(\n          `[TaskManager#handleTaskCommand] ${TaskBridgeCommandName.DenyAsk} ${message.taskId} -> denyAsk()`,\n          message,\n        );\n\n        task.denyAsk(message.payload);\n        break;\n    }\n  }\n\n  private setupListeners(task: TaskLike): void {\n    if (this.taskListeners.has(task.taskId)) {\n      console.warn(\n        '[TaskManager] Listeners already exist for task, removing old listeners:',\n        task.taskId,\n      );\n\n      this.removeListeners(task);\n    }\n\n    const listeners = new Map<TaskBridgeEventName, TaskEventListener>();\n\n    const onMessage = ({\n      action,\n      message,\n    }: {\n      action: string;\n      message: ClineMessage;\n    }) => {\n      this.publishEvent({\n        type: TaskBridgeEventName.Message,\n        taskId: task.taskId,\n        action,\n        message,\n      });\n    };\n\n    task.on(RooCodeEventName.Message, onMessage);\n    listeners.set(TaskBridgeEventName.Message, onMessage);\n\n    const onTaskModeSwitched = (mode: string) => {\n      this.publishEvent({\n        type: TaskBridgeEventName.TaskModeSwitched,\n        taskId: task.taskId,\n        mode,\n      });\n    };\n\n    task.on(RooCodeEventName.TaskModeSwitched, onTaskModeSwitched);\n    listeners.set(TaskBridgeEventName.TaskModeSwitched, onTaskModeSwitched);\n\n    const onTaskInteractive = (_taskId: string) => {\n      this.publishEvent({\n        type: TaskBridgeEventName.TaskInteractive,\n        taskId: task.taskId,\n      });\n    };\n\n    task.on(RooCodeEventName.TaskInteractive, onTaskInteractive);\n\n    listeners.set(TaskBridgeEventName.TaskInteractive, onTaskInteractive);\n\n    this.taskListeners.set(task.taskId, listeners);\n\n    console.log(\n      '[TaskManager] Task listeners setup complete for:',\n      task.taskId,\n    );\n  }\n\n  private removeListeners(task: TaskLike): void {\n    const listeners = this.taskListeners.get(task.taskId);\n\n    if (!listeners) {\n      return;\n    }\n\n    console.log('[TaskManager] Removing task listeners for:', task.taskId);\n\n    listeners.forEach((listener, eventName) => {\n      try {\n        // eslint-disable-next-line @typescript-eslint/no-explicit-any\n        task.off(TASK_EVENT_MAPPING[eventName], listener as any);\n      } catch (error) {\n        console.error(\n          `[TaskManager] Error removing listener for ${String(eventName)} on task ${\n            task.taskId\n          }:`,\n          error,\n        );\n      }\n    });\n\n    this.taskListeners.delete(task.taskId);\n  }\n\n  private async publishEvent(message: TaskBridgeEvent): Promise<boolean> {\n    if (!this.socket) {\n      console.error('[TaskManager] publishEvent -> socket not available');\n      return false;\n    }\n\n    try {\n      this.socket.emit(TaskSocketEvents.EVENT, message);\n\n      if (message.type !== TaskBridgeEventName.Message) {\n        console.log(\n          `[TaskManager] emit() -> ${TaskSocketEvents.EVENT} ${message.taskId} ${message.type}`,\n          message,\n        );\n      }\n\n      return true;\n    } catch (error) {\n      console.error(\n        `[TaskManager] emit() failed -> ${TaskSocketEvents.EVENT}: ${\n          error instanceof Error ? error.message : String(error)\n        }`,\n      );\n\n      return false;\n    }\n  }\n}\n","import crypto from 'crypto';\n\nimport type { TaskProviderLike, TaskLike } from '@roo-code/types';\n\nimport {\n  type CloudUserInfo,\n  type ExtensionBridgeCommand,\n  type TaskBridgeCommand,\n  ConnectionState,\n  ExtensionSocketEvents,\n  TaskSocketEvents,\n} from '../types.js';\nimport { SocketConnectionManager } from './SocketConnectionManager.js';\nimport { ExtensionManager } from './ExtensionManager.js';\nimport { TaskManager } from './TaskManager.js';\n\nexport interface ExtensionBridgeServiceOptions {\n  userId: string;\n  socketBridgeUrl: string;\n  token: string;\n  provider: TaskProviderLike;\n  sessionId?: string;\n}\n\nexport class ExtensionBridgeService {\n  private static instance: ExtensionBridgeService | null = null;\n\n  // Core\n  private readonly userId: string;\n  private readonly socketBridgeUrl: string;\n  private readonly token: string;\n  private readonly provider: TaskProviderLike;\n  private readonly instanceId: string;\n\n  // Managers\n  private connectionManager: SocketConnectionManager;\n  private extensionManager: ExtensionManager;\n  private taskManager: TaskManager;\n\n  // Reconnection\n  private readonly MAX_RECONNECT_ATTEMPTS = Infinity;\n  private readonly RECONNECT_DELAY = 1_000;\n  private readonly RECONNECT_DELAY_MAX = 30_000;\n\n  public static getInstance(): ExtensionBridgeService | null {\n    return ExtensionBridgeService.instance;\n  }\n\n  public static async createInstance(options: ExtensionBridgeServiceOptions) {\n    console.log('[ExtensionBridgeService] createInstance');\n    ExtensionBridgeService.instance = new ExtensionBridgeService(options);\n    await ExtensionBridgeService.instance.initialize();\n    return ExtensionBridgeService.instance;\n  }\n\n  public static resetInstance() {\n    if (ExtensionBridgeService.instance) {\n      console.log('[ExtensionBridgeService] resetInstance');\n      ExtensionBridgeService.instance.disconnect().catch(() => {});\n      ExtensionBridgeService.instance = null;\n    }\n  }\n\n  public static async handleRemoteControlState(\n    userInfo: CloudUserInfo | null,\n    remoteControlEnabled: boolean | undefined,\n    options: ExtensionBridgeServiceOptions,\n    logger?: (message: string) => void,\n  ) {\n    if (userInfo?.extensionBridgeEnabled && remoteControlEnabled) {\n      const existingService = ExtensionBridgeService.getInstance();\n\n      if (!existingService) {\n        try {\n          const service = await ExtensionBridgeService.createInstance(options);\n          const state = service.getConnectionState();\n\n          logger?.(\n            `[ExtensionBridgeService#handleRemoteControlState] Instance created (state: ${state})`,\n          );\n\n          if (state !== ConnectionState.CONNECTED) {\n            logger?.(\n              `[ExtensionBridgeService#handleRemoteControlState] Service is not connected yet, will retry in background`,\n            );\n          }\n        } catch (error) {\n          const message = `[ExtensionBridgeService#handleRemoteControlState] Failed to create instance: ${\n            error instanceof Error ? error.message : String(error)\n          }`;\n\n          logger?.(message);\n          console.error(message);\n        }\n      } else {\n        const state = existingService.getConnectionState();\n\n        if (\n          state === ConnectionState.FAILED ||\n          state === ConnectionState.DISCONNECTED\n        ) {\n          logger?.(\n            `[ExtensionBridgeService#handleRemoteControlState] Existing service is ${state}, attempting reconnection`,\n          );\n\n          existingService.reconnect().catch((error) => {\n            const message = `[ExtensionBridgeService#handleRemoteControlState] Reconnection failed: ${\n              error instanceof Error ? error.message : String(error)\n            }`;\n\n            logger?.(message);\n            console.error(message);\n          });\n        }\n      }\n    } else {\n      const existingService = ExtensionBridgeService.getInstance();\n\n      if (existingService) {\n        try {\n          await existingService.disconnect();\n          ExtensionBridgeService.resetInstance();\n\n          logger?.(\n            `[ExtensionBridgeService#handleRemoteControlState] Service disconnected and reset`,\n          );\n        } catch (error) {\n          const message = `[ExtensionBridgeService#handleRemoteControlState] Failed to disconnect and reset instance: ${\n            error instanceof Error ? error.message : String(error)\n          }`;\n\n          logger?.(message);\n          console.error(message);\n        }\n      }\n    }\n  }\n\n  private constructor(options: ExtensionBridgeServiceOptions) {\n    this.userId = options.userId;\n    this.socketBridgeUrl = options.socketBridgeUrl;\n    this.token = options.token;\n    this.provider = options.provider;\n    this.instanceId = options.sessionId || crypto.randomUUID();\n\n    this.connectionManager = new SocketConnectionManager({\n      url: this.socketBridgeUrl,\n      socketOptions: {\n        query: {\n          token: this.token,\n          clientType: 'extension',\n          instanceId: this.instanceId,\n        },\n        transports: ['websocket', 'polling'],\n        reconnection: true,\n        reconnectionAttempts: this.MAX_RECONNECT_ATTEMPTS,\n        reconnectionDelay: this.RECONNECT_DELAY,\n        reconnectionDelayMax: this.RECONNECT_DELAY_MAX,\n      },\n      onConnect: () => this.handleConnect(),\n      onDisconnect: () => this.handleDisconnect(),\n      onReconnect: () => this.handleReconnect(),\n    });\n\n    this.extensionManager = new ExtensionManager(\n      this.instanceId,\n      this.userId,\n      this.provider,\n    );\n\n    this.taskManager = new TaskManager();\n  }\n\n  private async initialize() {\n    // Populate the app and git properties before registering the instance.\n    await this.provider.getTelemetryProperties();\n\n    await this.connectionManager.connect();\n    this.setupSocketListeners();\n  }\n\n  private setupSocketListeners() {\n    const socket = this.connectionManager.getSocket();\n\n    if (!socket) {\n      console.error('[ExtensionBridgeService] Socket not available');\n      return;\n    }\n\n    // Remove any existing listeners first to prevent duplicates.\n    socket.off(ExtensionSocketEvents.RELAYED_COMMAND);\n    socket.off(TaskSocketEvents.RELAYED_COMMAND);\n    socket.off('connected');\n\n    socket.on(\n      ExtensionSocketEvents.RELAYED_COMMAND,\n      (message: ExtensionBridgeCommand) => {\n        console.log(\n          `[ExtensionBridgeService] on(${ExtensionSocketEvents.RELAYED_COMMAND}) -> ${message.type} for ${message.instanceId}`,\n        );\n\n        this.extensionManager?.handleExtensionCommand(message);\n      },\n    );\n\n    socket.on(\n      TaskSocketEvents.RELAYED_COMMAND,\n      (message: TaskBridgeCommand) => {\n        console.log(\n          `[ExtensionBridgeService] on(${TaskSocketEvents.RELAYED_COMMAND}) -> ${message.type} for ${message.taskId}`,\n        );\n\n        this.taskManager.handleTaskCommand(message);\n      },\n    );\n  }\n\n  private async handleConnect() {\n    const socket = this.connectionManager.getSocket();\n\n    if (!socket) {\n      console.error(\n        '[ExtensionBridgeService] Socket not available after connect',\n      );\n\n      return;\n    }\n\n    await this.extensionManager.onConnect(socket);\n    await this.taskManager.onConnect(socket);\n  }\n\n  private handleDisconnect() {\n    this.extensionManager.onDisconnect();\n    this.taskManager.onDisconnect();\n  }\n\n  private async handleReconnect() {\n    const socket = this.connectionManager.getSocket();\n\n    if (!socket) {\n      console.error(\n        '[ExtensionBridgeService] Socket not available after reconnect',\n      );\n\n      return;\n    }\n\n    // Re-setup socket listeners to ensure they're properly configured\n    // after automatic reconnection (Socket.IO's built-in reconnection)\n    // The socket.off() calls in setupSocketListeners prevent duplicates\n    this.setupSocketListeners();\n\n    await this.extensionManager.onReconnect(socket);\n    await this.taskManager.onReconnect(socket);\n  }\n\n  // Task API\n\n  public async subscribeToTask(task: TaskLike): Promise<void> {\n    const socket = this.connectionManager.getSocket();\n\n    if (!socket || !this.connectionManager.isConnected()) {\n      console.warn(\n        '[ExtensionBridgeService] Cannot subscribe to task: not connected. Will retry when connected.',\n      );\n\n      this.taskManager.addPendingTask(task);\n\n      const state = this.connectionManager.getConnectionState();\n\n      if (\n        state === ConnectionState.DISCONNECTED ||\n        state === ConnectionState.FAILED\n      ) {\n        this.initialize();\n      }\n\n      return;\n    }\n\n    await this.taskManager.subscribeToTask(task, socket);\n  }\n\n  public async unsubscribeFromTask(taskId: string): Promise<void> {\n    const socket = this.connectionManager.getSocket();\n\n    if (!socket) {\n      return;\n    }\n\n    await this.taskManager.unsubscribeFromTask(taskId, socket);\n  }\n\n  // Shared API\n\n  public getConnectionState(): ConnectionState {\n    return this.connectionManager.getConnectionState();\n  }\n\n  public async disconnect(): Promise<void> {\n    await this.extensionManager.cleanup(this.connectionManager.getSocket());\n    await this.taskManager.cleanup(this.connectionManager.getSocket());\n    await this.connectionManager.disconnect();\n    ExtensionBridgeService.instance = null;\n  }\n\n  public async reconnect(): Promise<void> {\n    await this.connectionManager.reconnect();\n\n    // After a manual reconnect, we have a new socket instance\n    // so we need to set up listeners again.\n    this.setupSocketListeners();\n  }\n}\n"]}