orchestrator-client 5.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/index.ts","../src/errors.ts","../src/client.ts","../src/sync-client.ts","../src/config.ts","../src/fetch.ts","../src/socketio.ts"],"sourcesContent":["/**\n * orchestrator-client — TypeScript/JavaScript client for the DAMIT AIOps Orchestrator.\n *\n * Provides a complete wrapper for the orchestrator's REST API and\n * Socket.IO realtime events, with typed responses, automatic retry,\n * and configurable auth.\n *\n * Main components:\n *\n * - {@link Orchestrator} — synchronous REST client (primary interface)\n * - {@link OrchestratorAsync} — async REST client (for async contexts)\n * - {@link RealtimeClient} — Socket.IO event subscription layer\n * - Typed exception hierarchy ({@link OrchestratorError} and subclasses)\n * - Typed response interfaces for all response shapes\n */\n\nexport const VERSION = \"5.6.0\"\n\n// Client classes\nexport { OrchestratorAsync } from \"./client.js\"\nexport type { OrchestratorClientOptions } from \"./client.js\"\nexport { Orchestrator } from \"./sync-client.js\"\n\n// Config\nexport { loadConfig } from \"./config.js\"\nexport type { OrchestratorConfig } from \"./config.js\"\n\n// Custom fetch\nexport { createInsecureFetch } from \"./fetch.js\"\n\n// Socket.IO\nexport { RealtimeClient } from \"./socketio.js\"\nexport {\n EVENT_TASK_CREATED,\n EVENT_TASK_STATUS_CHANGED,\n EVENT_TASK_ITERATION_CHANGED,\n EVENT_TASK_DELETED,\n EVENT_TASK_RESULT_UPDATED,\n EVENT_TASK_INSIGHT_UPDATED,\n EVENT_MESSAGE_ADDED,\n EVENT_MESSAGE_STREAMING,\n EVENT_MESSAGE_SUMMARY_GENERATED,\n EVENT_MESSAGE_TRANSLATION_READY,\n EVENT_ERROR_EVENT_RECORDED,\n} from \"./socketio.js\"\nexport type { EventHandler, RealtimeClientOptions } from \"./socketio.js\"\n\n// Exceptions\nexport {\n OrchestratorError,\n OrchestratorConnectionError,\n OrchestratorAuthError,\n OrchestratorNotFoundError,\n OrchestratorAPIError,\n OrchestratorConfigError,\n} from \"./errors.js\"\n\n// Models\nexport type { Pagination } from \"./models/pagination.js\"\nexport type {\n TaskSummary,\n TaskOptions,\n TaskDetail,\n TaskListResult,\n TaskCreateResponse,\n TaskCancelResponse,\n TaskDeleteResult,\n VSATaskCreateResponse,\n} from \"./models/task.js\"\nexport type {\n AttachmentMeta,\n ToolCall,\n Message,\n ConversationResult,\n MatrixConversationResult,\n ArchivedContent,\n MessageTranslation,\n MessageTranslationsResult,\n MessageTranslationReadyEvent,\n} from \"./models/conversation.js\"\nexport type {\n ErrorEvent,\n ErrorEventDetail,\n ErrorStatsResult,\n ErrorCountResult,\n ErrorPurgeResult,\n} from \"./models/errors.js\"\nexport type {\n HealthStatus,\n ComponentHealth,\n HealthDetail,\n ReadinessCheck,\n ReadinessResult,\n LockStatus,\n LeaderStatus,\n MetricSnapshot,\n} from \"./models/health.js\"\nexport type {\n SystemStatusSettings,\n SystemStatus,\n LLMBackendInfo,\n MCPServerInfo,\n TaskHandlerReplica,\n TaskHandlerCluster,\n TaskHandlerStatus,\n TaskHandlerStatusLocal,\n SummaryWorkerStatus,\n TokenWorkerStatus,\n SlotInfo,\n SlotsStatus,\n ConfigurationStatus,\n} from \"./models/config-models.js\"\nexport type { ToolInfo, ToolsListResult } from \"./models/tools.js\"\nexport type {\n CompactionEvent,\n TaskJournal,\n AttachmentUploadResponse,\n} from \"./models/journal.js\"\nexport type { AuthConfig, WebSocketClientInfo, WebSocketStatus } from \"./models/auth.js\"\nexport type { SuccessResponse, MioContext, WorkflowStates } from \"./models/workflow.js\"\n","/**\n * Typed exception hierarchy for orchestrator API interactions.\n *\n * Every error carries `statusCode` and `errorCode` extracted from the\n * server's uniform error envelope, making it easy for callers to handle\n * specific error conditions programmatically.\n */\n\n/**\n * Base error for all orchestrator-related errors.\n */\nexport class OrchestratorError extends Error {\n public readonly statusCode: number | null\n public readonly errorCode: string | null\n public readonly details: Record<string, unknown>\n\n constructor(\n message: string,\n opts?: {\n statusCode?: number | null\n errorCode?: string | null\n details?: Record<string, unknown>\n },\n ) {\n super(message)\n this.name = \"OrchestratorError\"\n this.statusCode = opts?.statusCode ?? null\n this.errorCode = opts?.errorCode ?? null\n this.details = opts?.details ?? {}\n }\n}\n\n/**\n * Orchestrator is unreachable (network / DNS / timeout).\n */\nexport class OrchestratorConnectionError extends OrchestratorError {\n constructor(message: string) {\n super(message, { statusCode: null })\n this.name = \"OrchestratorConnectionError\"\n }\n}\n\n/**\n * Authentication or authorization failure (401/403).\n */\nexport class OrchestratorAuthError extends OrchestratorError {\n constructor(message: string, statusCode: number = 401) {\n super(message, { statusCode })\n this.name = \"OrchestratorAuthError\"\n }\n}\n\n/**\n * Requested resource does not exist (404).\n */\nexport class OrchestratorNotFoundError extends OrchestratorError {\n public readonly resourceType: string\n public readonly resourceId: string\n\n constructor(resourceType: string, resourceId: string, message?: string) {\n super(message ?? `${resourceType} not found: ${resourceId}`, {\n statusCode: 404,\n })\n this.name = \"OrchestratorNotFoundError\"\n this.resourceType = resourceType\n this.resourceId = resourceId\n }\n}\n\n/**\n * Non-2xx response from the orchestrator API.\n *\n * Covers 400 Bad Request, 500 Internal Server Error, and any other\n * unexpected status that isn't auth or not-found specific.\n */\nexport class OrchestratorAPIError extends OrchestratorError {\n constructor(\n message: string,\n statusCode: number,\n errorCode?: string | null,\n details?: Record<string, unknown>,\n ) {\n super(message, { statusCode, errorCode, details })\n this.name = \"OrchestratorAPIError\"\n }\n}\n\n/**\n * Invalid or missing client configuration (bad env vars, etc.).\n */\nexport class OrchestratorConfigError extends OrchestratorError {\n constructor(message: string) {\n super(message, { statusCode: null })\n this.name = \"OrchestratorConfigError\"\n }\n}\n","/**\n * OrchestratorAsync — async REST API wrapper for the DAMIT AIOps Orchestrator.\n *\n * Provides a complete mapping of the orchestrator's HTTP endpoints using\n * native fetch with automatic retry (exponential backoff), typed responses,\n * and configurable auth via bearer token or callback.\n *\n * Usage:\n *\n * const client = new OrchestratorAsync({ baseUrl: \"http://localhost:8080\" });\n * const tasks = await client.listTasks({ workflowId: \"proactive\" });\n * for (const t of tasks.tasks) {\n * console.log(t.id, t.status);\n * }\n * await client.close();\n */\n\nimport type {\n AuthConfig,\n AttachmentUploadResponse,\n CompactionEvent,\n ConfigurationStatus,\n ConversationResult,\n ErrorCountResult,\n ErrorEventDetail,\n ErrorPurgeResult,\n ErrorStatsResult,\n HealthDetail,\n HealthStatus,\n LeaderStatus,\n MatrixConversationResult,\n Message,\n MessageTranslation,\n MessageTranslationsResult,\n MetricSnapshot,\n MioContext,\n Pagination,\n ReadinessResult,\n SlotsStatus,\n SuccessResponse,\n SummaryWorkerStatus,\n SystemStatus,\n TaskCreateResponse,\n TaskDeleteResult,\n TaskDetail,\n TaskHandlerStatus,\n TaskHandlerStatusLocal,\n TaskJournal,\n TaskListResult,\n TaskSummary,\n TokenWorkerStatus,\n ToolInfo,\n ToolsListResult,\n VSATaskCreateResponse,\n WebSocketStatus,\n WorkflowStates,\n} from \"./models/index.js\"\nimport {\n OrchestratorAPIError,\n OrchestratorAuthError,\n OrchestratorConnectionError,\n OrchestratorNotFoundError,\n} from \"./errors.js\"\n\nconst RETRY_BACKOFF_BASE = 500\nconst DEFAULT_TIMEOUT_MS = 30_000\nconst DEFAULT_MAX_RETRIES = 3\n\n// ---------------------------------------------------------------------------\n// Internal helpers — build typed objects from raw API response data\n// ---------------------------------------------------------------------------\n\nfunction buildPagination(data: Record<string, unknown>): Pagination {\n const p = (data.pagination ?? {}) as Record<string, unknown>\n return {\n currentPage: (p.currentPage ?? 1) as number,\n perPage: (p.perPage ?? 25) as number,\n totalItems: (p.totalItems ?? 0) as number,\n totalPages: (p.totalPages ?? 1) as number,\n hasNext: (p.hasNext ?? false) as boolean,\n hasPrev: (p.hasPrev ?? false) as boolean,\n }\n}\n\nfunction buildTaskSummary(t: Record<string, unknown>): TaskSummary {\n return {\n id: (t.id ?? \"\") as string,\n status: (t.status ?? \"\") as string,\n workflowId: (t.workflowId ?? t.workflow_id ?? \"\") as string,\n iteration: (t.iteration ?? 0) as number,\n maxIterations: (t.maxIterations ?? t.max_iterations ?? 0) as number,\n goalPrompt: (t.goalPrompt ?? t.goal_prompt ?? \"\") as string,\n result: (t.result ?? \"\") as string,\n resultLocalized: (t.resultLocalized ?? t.result_localized ?? null) as string | null,\n approvalReason: (t.approvalReason ?? t.approval_reason ?? \"\") as string,\n ticketId: (t.ticketId ?? t.ticket_id ?? null) as string | null,\n availableTools: (t.availableTools ?? t.available_tools ?? null) as string[] | null,\n insight: (t.insight ?? null) as string | null,\n insightLocalized: (t.insightLocalized ?? t.insight_localized ?? null) as string | null,\n createdAt: (t.createdAt ?? t.created_at ?? \"\") as string,\n updatedAt: (t.updatedAt ?? t.updated_at ?? \"\") as string,\n pendingTranslationsForLocales: (t.pendingTranslationsForLocales ?? t.pending_translations_for_locales ?? null) as string[] | null | undefined,\n }\n}\n\n// ---------------------------------------------------------------------------\n// Client options\n// ---------------------------------------------------------------------------\n\nexport interface OrchestratorClientOptions {\n /** Base URL of the orchestrator (e.g. \"http://localhost:8080\"). */\n baseUrl?: string\n /** Optional static bearer token. */\n apiKey?: string\n /** Async function that returns a bearer token (called on each request). */\n getToken?: () => string | Promise<string>\n /** Request timeout in milliseconds (default: 30000). */\n timeoutMs?: number\n /** Max retry attempts on transient failures (default: 3). */\n maxRetries?: number\n /**\n * Custom fetch implementation override.\n *\n * Use this to inject a fetch that ignores SSL errors (self-signed certs):\n *\n * new Orchestrator({\n * fetch: await createInsecureFetch(),\n * })\n *\n * When not provided, `globalThis.fetch` is used.\n */\n fetch?: typeof globalThis.fetch\n /**\n * Allow self-signed / invalid SSL certificates.\n *\n * When true and no custom `fetch` is provided, creates an internal fetch\n * that uses Node.js `https.Agent` with `rejectUnauthorized: false`.\n * Only works in Node.js; ignored in browsers.\n */\n insecure?: boolean\n}\n\n// ---------------------------------------------------------------------------\n// OrchestratorAsync\n// ---------------------------------------------------------------------------\n\nexport class OrchestratorAsync {\n protected _baseUrl: string\n protected _apiKey: string | undefined\n protected _getToken: (() => string | Promise<string>) | undefined\n protected _timeoutMs: number\n protected _maxRetries: number\n protected _fetch: typeof globalThis.fetch\n protected _abortController: AbortController | null = null\n\n constructor(opts: OrchestratorClientOptions = {}) {\n this._baseUrl = (opts.baseUrl ?? \"http://localhost:8080\").replace(/\\/+$/, \"\")\n this._apiKey = opts.apiKey\n this._getToken = opts.getToken\n this._timeoutMs = opts.timeoutMs ?? DEFAULT_TIMEOUT_MS\n this._maxRetries = opts.maxRetries ?? DEFAULT_MAX_RETRIES\n this._fetch = opts.fetch ?? globalThis.fetch\n if (opts.insecure && !opts.fetch && typeof process !== \"undefined\" && process.versions?.node) {\n // Lazy-init insecure fetch — requires async import of Node.js modules\n // The actual switch happens at request time since we can't await here\n this._insecure = true\n }\n }\n\n protected _insecure = false\n\n async close(): Promise<void> {\n this._abortController?.abort()\n }\n\n // ------------------------------------------------------------------\n // Internal helpers\n // ------------------------------------------------------------------\n\n protected _makeUrl(path: string): string {\n return `${this._baseUrl}${path}`\n }\n\n protected async _resolveHeaders(): Promise<Record<string, string>> {\n const headers: Record<string, string> = {}\n if (this._apiKey) {\n headers[\"Authorization\"] = `Bearer ${this._apiKey}`\n } else if (this._getToken) {\n const token = await this._getToken()\n if (token) {\n headers[\"Authorization\"] = `Bearer ${token}`\n }\n }\n return headers\n }\n\n protected async _request(\n method: string,\n path: string,\n opts?: {\n jsonBody?: unknown\n params?: Record<string, string | number | boolean | undefined>\n headers?: Record<string, string>\n rawResponse?: boolean\n signal?: AbortSignal\n },\n ): Promise<Response | unknown> {\n const url = new URL(this._makeUrl(path))\n if (opts?.params) {\n for (const [key, value] of Object.entries(opts.params)) {\n if (value !== undefined) {\n url.searchParams.set(key, String(value))\n }\n }\n }\n\n const extraHeaders = await this._resolveHeaders()\n const mergedHeaders: Record<string, string> = {\n ...extraHeaders,\n ...(opts?.headers ?? {}),\n }\n if (opts?.jsonBody !== undefined && !mergedHeaders[\"Content-Type\"]) {\n mergedHeaders[\"Content-Type\"] = \"application/json\"\n }\n\n for (let attempt = 1; attempt <= this._maxRetries; attempt++) {\n try {\n const controller = new AbortController()\n const timeoutId = setTimeout(() => controller.abort(), this._timeoutMs)\n const signal = opts?.signal\n ? combineSignals(opts.signal, controller.signal)\n : controller.signal\n\n const response = await this._fetch(url.toString(), {\n method,\n headers: mergedHeaders,\n body: opts?.jsonBody !== undefined ? JSON.stringify(opts.jsonBody) : undefined,\n signal,\n })\n\n clearTimeout(timeoutId)\n\n if (response.status === 401) {\n throw new OrchestratorAuthError(\n `Authentication failed for ${method} ${path}`,\n 401,\n )\n }\n if (response.status === 403) {\n throw new OrchestratorAuthError(\n `Access denied for ${method} ${path}`,\n 403,\n )\n }\n if (response.status === 404) {\n throw new OrchestratorNotFoundError(\n \"resource\",\n path,\n `Endpoint returned 404: ${method} ${path}`,\n )\n }\n\n if (response.status >= 500) {\n if (attempt === this._maxRetries) {\n // Fall through to error handling below\n } else {\n const delay = RETRY_BACKOFF_BASE * 2 ** (attempt - 1)\n console.warn(\n `Server error ${response.status} (attempt ${attempt}/${this._maxRetries}), retrying in ${delay}ms`,\n )\n await sleep(delay)\n continue\n }\n }\n\n if (opts?.rawResponse) {\n return response\n }\n\n if (response.ok) {\n const contentType = response.headers.get(\"content-type\") ?? \"\"\n if (contentType.includes(\"application/json\")) {\n return response.json() as Promise<unknown>\n }\n return { _text: await response.text() }\n }\n\n // Error handling\n let errorMessage: string\n let errorCode: string | null = null\n let errorDetails: Record<string, unknown> | null = null\n try {\n const body = (await response.json()) as Record<string, unknown>\n const error = (body.error ?? body) as Record<string, unknown>\n errorCode = (error.code as string) ?? null\n errorMessage = (error.message as string) ?? (await response.text())\n errorDetails = (error.details as Record<string, unknown>) ?? null\n } catch {\n errorMessage = await response.text()\n }\n\n throw new OrchestratorAPIError(\n errorMessage,\n response.status,\n errorCode,\n errorDetails ?? undefined,\n )\n } catch (err) {\n if (err instanceof OrchestratorAPIError || err instanceof OrchestratorAuthError || err instanceof OrchestratorNotFoundError) {\n throw err\n }\n if (err instanceof OrchestratorConnectionError) {\n throw err\n }\n if (err instanceof DOMException && err.name === \"AbortError\") {\n if (attempt === this._maxRetries) {\n throw new OrchestratorConnectionError(\n `Request timed out after ${this._timeoutMs}ms (${this._maxRetries} attempts): ${method} ${path}`,\n )\n }\n const delay = RETRY_BACKOFF_BASE * 2 ** (attempt - 1)\n console.warn(\n `Request timed out (attempt ${attempt}/${this._maxRetries}), retrying in ${delay}ms`,\n )\n await sleep(delay)\n continue\n }\n if (err instanceof TypeError) {\n // fetch network errors are TypeErrors\n if (attempt === this._maxRetries) {\n throw new OrchestratorConnectionError(\n `Orchestrator unreachable after ${this._maxRetries} attempts: ${(err as Error).message}`,\n )\n }\n const delay = RETRY_BACKOFF_BASE * 2 ** (attempt - 1)\n console.warn(\n `Request failed (attempt ${attempt}/${this._maxRetries}), retrying in ${delay}ms: ${(err as Error).message}`,\n )\n await sleep(delay)\n continue\n }\n throw err\n }\n }\n\n throw new OrchestratorConnectionError(\n `Request failed after ${this._maxRetries} attempts: ${method} ${path}`,\n )\n }\n\n protected async _get<T>(path: string, params?: Record<string, string | number | boolean | undefined>): Promise<T> {\n return (await this._request(\"GET\", path, { params })) as T\n }\n\n protected async _post<T>(path: string, body?: unknown): Promise<T> {\n return (await this._request(\"POST\", path, { jsonBody: body })) as T\n }\n\n protected async _put<T>(path: string, body?: unknown): Promise<T> {\n return (await this._request(\"PUT\", path, { jsonBody: body })) as T\n }\n\n protected async _delete<T>(path: string): Promise<T> {\n return (await this._request(\"DELETE\", path)) as T\n }\n\n // ------------------------------------------------------------------\n // Tasks\n // ------------------------------------------------------------------\n\n async listTasks(params?: {\n workflowId?: string\n status?: string\n limit?: number\n offset?: number\n sortBy?: string\n sortOrder?: string\n }): Promise<TaskListResult> {\n const data = await this._get<Record<string, unknown>>(\"/tasks\", {\n workflow_id: params?.workflowId,\n status: params?.status,\n limit: params?.limit,\n offset: params?.offset,\n sort_by: params?.sortBy,\n sort_order: params?.sortOrder,\n })\n const tasks = ((data.tasks ?? []) as Record<string, unknown>[]).map(buildTaskSummary)\n return { tasks, pagination: buildPagination(data) }\n }\n\n async createTask(params: {\n workflowId: string\n goalPrompt: string\n maxIterations?: number\n options?: Record<string, boolean>\n ticketId?: string\n title?: string\n modelId?: string\n }): Promise<TaskCreateResponse> {\n const data = await this._post<Record<string, unknown>>(\"/tasks\", {\n workflow_id: params.workflowId,\n goal_prompt: params.goalPrompt,\n max_iterations: params.maxIterations,\n options: params.options,\n ticket_id: params.ticketId,\n title: params.title,\n model_id: params.modelId,\n })\n return {\n taskId: (data.taskId ?? data.task_id ?? \"\") as string,\n status: (data.status ?? \"\") as string,\n }\n }\n\n async getTaskStatus(taskId: string): Promise<TaskDetail> {\n const data = await this._get<Record<string, unknown>>(`/tasks/${taskId}`)\n return {\n ...buildTaskSummary(data),\n subtaskIds: (data.subtaskIds ?? data.subtask_ids ?? []) as string[],\n workflowData: (data.workflowData ?? data.workflow_data ?? null) as Record<string, unknown> | null,\n options: (data.options ?? null) as Record<string, unknown> | null,\n }\n }\n\n async getTaskConversation(taskId: string): Promise<ConversationResult> {\n const data = await this._get<Record<string, unknown>>(`/tasks/${taskId}/conversation`)\n return {\n taskId: (data.taskId ?? data.task_id ?? taskId) as string,\n conversation: ((data.conversation ?? []) as Record<string, unknown>[]).map(\n (m) => m as unknown as Message,\n ),\n }\n }\n\n async getArchivedMessageContent(taskId: string, messageId: number): Promise<Record<string, unknown>> {\n return this._get<Record<string, unknown>>(\n `/tasks/${taskId}/conversation/messages/${messageId}/archived`,\n )\n }\n\n async getTaskCompactions(taskId: string): Promise<CompactionEvent[]> {\n const data = await this._get<Record<string, unknown>>(`/tasks/${taskId}/compactions`)\n return (data.compactions ?? []) as CompactionEvent[]\n }\n\n async getTaskJournal(taskId: string): Promise<TaskJournal> {\n const data = await this._get<Record<string, unknown>>(`/tasks/${taskId}/journal`)\n return {\n taskId: (data.taskId ?? data.task_id ?? taskId) as string,\n exists: (data.exists ?? false) as boolean,\n content: (data.content ?? null) as string | null,\n updatedAt: (data.updated_at ?? data.updatedAt ?? null) as string | null,\n version: (data.version ?? null) as number | null,\n sectionsOverBudget: (data.sections_over_budget ?? data.sectionsOverBudget ?? null) as Record<string, number> | null,\n }\n }\n\n async cancelTask(taskId: string): Promise<SuccessResponse> {\n const data = await this._post<Record<string, unknown>>(`/tasks/${taskId}/cancel`)\n return { message: (data.message ?? \"\") as string }\n }\n\n async deleteTask(taskId: string): Promise<TaskDeleteResult> {\n const data = await this._delete<Record<string, unknown>>(`/tasks/${taskId}`)\n return {\n deletedTasks: (data.deletedTasks ?? data.deleted_tasks ?? []) as string[],\n failedTasks: (data.failedTasks ?? data.failed_tasks ?? []) as string[],\n totalDeleted: (data.totalDeleted ?? data.total_deleted ?? 0) as number,\n totalFailed: (data.totalFailed ?? data.total_failed ?? 0) as number,\n }\n }\n\n async deleteTasks(taskIds: string[]): Promise<TaskDeleteResult> {\n const data = await this._post<Record<string, unknown>>(\"/tasks/delete\", { task_ids: taskIds })\n return {\n deletedTasks: (data.deletedTasks ?? data.deleted_tasks ?? []) as string[],\n failedTasks: (data.failedTasks ?? data.failed_tasks ?? []) as string[],\n totalDeleted: (data.totalDeleted ?? data.total_deleted ?? 0) as number,\n totalFailed: (data.totalFailed ?? data.total_failed ?? 0) as number,\n }\n }\n\n // ------------------------------------------------------------------\n // Attachments\n // ------------------------------------------------------------------\n\n async uploadAttachment(\n taskId: string,\n file: File | Blob,\n filename?: string,\n ): Promise<AttachmentUploadResponse> {\n const formData = new FormData()\n formData.append(\"file\", file, filename)\n const headers = await this._resolveHeaders()\n // Don't set Content-Type for FormData — browser sets it with boundary\n const response = await this._fetch(this._makeUrl(`/tasks/${taskId}/attachments`), {\n method: \"POST\",\n headers: { ...headers },\n body: formData,\n })\n if (!response.ok) {\n throw new OrchestratorAPIError(\n `Attachment upload failed: ${response.statusText}`,\n response.status,\n )\n }\n const data = (await response.json()) as Record<string, unknown>\n return {\n id: (data.id ?? \"\") as string,\n filename: (data.filename ?? \"\") as string,\n mimeType: (data.mimeType ?? data.mime_type ?? \"\") as string,\n size: (data.size ?? 0) as number,\n width: (data.width ?? null) as number | null,\n height: (data.height ?? null) as number | null,\n tokenCount: (data.tokenCount ?? data.token_count ?? null) as number | null,\n }\n }\n\n async downloadAttachment(taskId: string, attachmentId: string): Promise<Blob> {\n const headers = await this._resolveHeaders()\n const response = await this._fetch(this._makeUrl(`/tasks/${taskId}/attachments/${attachmentId}`), {\n headers,\n })\n if (!response.ok) {\n throw new OrchestratorAPIError(\n `Attachment download failed: ${response.statusText}`,\n response.status,\n )\n }\n return response.blob()\n }\n\n // ------------------------------------------------------------------\n // Interactive workflow\n // ------------------------------------------------------------------\n\n async sendInteractiveMessage(taskId: string, content: string): Promise<SuccessResponse> {\n const data = await this._post<Record<string, unknown>>(`/tasks/${taskId}/interactive/message`, {\n content,\n })\n return { message: (data.message ?? \"\") as string }\n }\n\n async markInteractiveComplete(taskId: string): Promise<SuccessResponse> {\n const data = await this._post<Record<string, unknown>>(`/tasks/${taskId}/interactive/complete`)\n return { message: (data.message ?? \"\") as string }\n }\n\n async markInteractiveFailed(taskId: string): Promise<SuccessResponse> {\n const data = await this._post<Record<string, unknown>>(`/tasks/${taskId}/interactive/failed`)\n return { message: (data.message ?? \"\") as string }\n }\n\n async approveInteractiveAction(taskId: string): Promise<SuccessResponse> {\n const data = await this._post<Record<string, unknown>>(`/tasks/${taskId}/interactive/approve`)\n return { message: (data.message ?? \"\") as string }\n }\n\n // ------------------------------------------------------------------\n // Proactive workflow\n // ------------------------------------------------------------------\n\n async sendProactiveGuide(taskId: string, guide: string): Promise<SuccessResponse> {\n const data = await this._post<Record<string, unknown>>(`/tasks/${taskId}/proactive/guide`, {\n guide,\n })\n return { message: (data.message ?? \"\") as string }\n }\n\n async respondProactiveHelp(taskId: string, response: string): Promise<SuccessResponse> {\n const data = await this._post<Record<string, unknown>>(`/tasks/${taskId}/proactive/respond`, {\n response,\n })\n return { message: (data.message ?? \"\") as string }\n }\n\n async approveProactiveAction(taskId: string): Promise<SuccessResponse> {\n const data = await this._post<Record<string, unknown>>(`/tasks/${taskId}/proactive/approve`)\n return { message: (data.message ?? \"\") as string }\n }\n\n // ------------------------------------------------------------------\n // Ticket workflow\n // ------------------------------------------------------------------\n\n async sendTicketGuide(taskId: string, guide: string): Promise<SuccessResponse> {\n const data = await this._post<Record<string, unknown>>(`/tasks/${taskId}/ticket/guide`, {\n guide,\n })\n return { message: (data.message ?? \"\") as string }\n }\n\n async respondTicketHelp(taskId: string, response: string): Promise<SuccessResponse> {\n const data = await this._post<Record<string, unknown>>(`/tasks/${taskId}/ticket/respond`, {\n response,\n })\n return { message: (data.message ?? \"\") as string }\n }\n\n async approveTicketAction(taskId: string): Promise<SuccessResponse> {\n const data = await this._post<Record<string, unknown>>(`/tasks/${taskId}/ticket/approve`)\n return { message: (data.message ?? \"\") as string }\n }\n\n async wakeTicket(taskId: string): Promise<SuccessResponse> {\n const data = await this._post<Record<string, unknown>>(`/tasks/${taskId}/ticket/wake`)\n return { message: (data.message ?? \"\") as string }\n }\n\n // ------------------------------------------------------------------\n // Matrix workflow\n // ------------------------------------------------------------------\n\n async sendMatrixMessage(taskId: string, content: string): Promise<SuccessResponse> {\n const data = await this._post<Record<string, unknown>>(`/tasks/${taskId}/matrix/message`, {\n content,\n })\n return { message: (data.message ?? \"\") as string }\n }\n\n async markMatrixComplete(taskId: string): Promise<SuccessResponse> {\n const data = await this._post<Record<string, unknown>>(`/tasks/${taskId}/matrix/complete`)\n return { message: (data.message ?? \"\") as string }\n }\n\n async markMatrixFailed(taskId: string): Promise<SuccessResponse> {\n const data = await this._post<Record<string, unknown>>(`/tasks/${taskId}/matrix/failed`)\n return { message: (data.message ?? \"\") as string }\n }\n\n async approveMatrixAction(taskId: string): Promise<SuccessResponse> {\n const data = await this._post<Record<string, unknown>>(`/tasks/${taskId}/matrix/approve`)\n return { message: (data.message ?? \"\") as string }\n }\n\n async getMatrixConversation(taskId: string): Promise<MatrixConversationResult> {\n const data = await this._get<Record<string, unknown>>(`/tasks/${taskId}/matrix/conversation`)\n return {\n taskId: (data.taskId ?? data.task_id ?? taskId) as string,\n conversation: ((data.conversation ?? []) as Record<string, unknown>[]).map(\n (m) => m as unknown as Message,\n ),\n }\n }\n\n // ------------------------------------------------------------------\n // VSA workflow\n // ------------------------------------------------------------------\n\n async createVSATask(params: {\n goalPrompt: string\n title?: string\n modelId?: string\n }): Promise<VSATaskCreateResponse> {\n const data = await this._post<Record<string, unknown>>(\"/tasks/vsa\", {\n goal_prompt: params.goalPrompt,\n title: params.title,\n model_id: params.modelId,\n })\n return {\n taskId: (data.taskId ?? data.task_id ?? \"\") as string,\n status: (data.status ?? \"\") as string,\n }\n }\n\n async sendVSAMessage(taskId: string, content: string): Promise<SuccessResponse> {\n const data = await this._post<Record<string, unknown>>(`/tasks/${taskId}/vsa/message`, {\n content,\n })\n return { message: (data.message ?? \"\") as string }\n }\n\n async renameVSATask(taskId: string, title: string): Promise<SuccessResponse> {\n const data = await this._post<Record<string, unknown>>(`/tasks/${taskId}/vsa/rename`, {\n title,\n })\n return { message: (data.message ?? \"\") as string }\n }\n\n async regenerateVSATitle(taskId: string): Promise<SuccessResponse> {\n const data = await this._post<Record<string, unknown>>(`/tasks/${taskId}/vsa/regenerate-title`)\n return { message: (data.message ?? \"\") as string }\n }\n\n async markVSAComplete(taskId: string): Promise<SuccessResponse> {\n const data = await this._post<Record<string, unknown>>(`/tasks/${taskId}/vsa/complete`)\n return { message: (data.message ?? \"\") as string }\n }\n\n async markVSAFailed(taskId: string): Promise<SuccessResponse> {\n const data = await this._post<Record<string, unknown>>(`/tasks/${taskId}/vsa/failed`)\n return { message: (data.message ?? \"\") as string }\n }\n\n async stopVSA(taskId: string): Promise<SuccessResponse> {\n const data = await this._post<Record<string, unknown>>(`/tasks/${taskId}/vsa/stop`)\n return { message: (data.message ?? \"\") as string }\n }\n\n async deleteVSA(taskId: string): Promise<SuccessResponse> {\n const data = await this._delete<Record<string, unknown>>(`/tasks/${taskId}/vsa`)\n return { message: (data.message ?? \"\") as string }\n }\n\n async listVSATasks(params?: {\n status?: string\n limit?: number\n offset?: number\n }): Promise<TaskListResult> {\n const data = await this._get<Record<string, unknown>>(\"/tasks/vsa\", {\n status: params?.status,\n limit: params?.limit,\n offset: params?.offset,\n })\n const tasks = ((data.tasks ?? []) as Record<string, unknown>[]).map(buildTaskSummary)\n return { tasks, pagination: buildPagination(data) }\n }\n\n async searchVSATasks(query: string): Promise<TaskListResult> {\n const data = await this._get<Record<string, unknown>>(\"/tasks/vsa/search\", { q: query })\n const tasks = ((data.tasks ?? []) as Record<string, unknown>[]).map(buildTaskSummary)\n return { tasks, pagination: buildPagination(data) }\n }\n\n async deleteVSATasksBulk(taskIds: string[]): Promise<SuccessResponse> {\n const data = await this._post<Record<string, unknown>>(\"/tasks/vsa/delete-bulk\", {\n task_ids: taskIds,\n })\n return { message: (data.message ?? \"\") as string }\n }\n\n // ------------------------------------------------------------------\n // MIO workflow\n // ------------------------------------------------------------------\n\n async sendMioMessage(taskId: string, content: string): Promise<SuccessResponse> {\n const data = await this._post<Record<string, unknown>>(`/tasks/${taskId}/mio/message`, {\n content,\n })\n return { message: (data.message ?? \"\") as string }\n }\n\n async approveMioAction(taskId: string): Promise<SuccessResponse> {\n const data = await this._post<Record<string, unknown>>(`/tasks/${taskId}/mio/approve`)\n return { message: (data.message ?? \"\") as string }\n }\n\n async wakeMio(taskId: string): Promise<SuccessResponse> {\n const data = await this._post<Record<string, unknown>>(`/tasks/${taskId}/mio/wake`)\n return { message: (data.message ?? \"\") as string }\n }\n\n async sendMioUserAway(taskId: string): Promise<SuccessResponse> {\n const data = await this._post<Record<string, unknown>>(`/tasks/${taskId}/mio/user-away`)\n return { message: (data.message ?? \"\") as string }\n }\n\n async markMioComplete(taskId: string): Promise<SuccessResponse> {\n const data = await this._post<Record<string, unknown>>(`/tasks/${taskId}/mio/complete`)\n return { message: (data.message ?? \"\") as string }\n }\n\n async markMioFailed(taskId: string): Promise<SuccessResponse> {\n const data = await this._post<Record<string, unknown>>(`/tasks/${taskId}/mio/failed`)\n return { message: (data.message ?? \"\") as string }\n }\n\n async archiveMio(taskId: string): Promise<SuccessResponse> {\n const data = await this._post<Record<string, unknown>>(`/tasks/${taskId}/mio/archive`)\n return { message: (data.message ?? \"\") as string }\n }\n\n async getMioContext(taskId: string): Promise<MioContext> {\n const data = await this._get<Record<string, unknown>>(`/tasks/${taskId}/mio/context`)\n return {\n taskId: (data.taskId ?? data.task_id ?? taskId) as string,\n currentTokens: (data.currentTokens ?? data.current_tokens ?? 0) as number,\n contextLimit: (data.contextLimit ?? data.context_limit ?? 0) as number,\n usagePercentage: (data.usagePercentage ?? data.usage_percentage ?? 0) as number,\n archivedCount: (data.archivedCount ?? data.archived_count ?? 0) as number,\n activeCount: (data.activeCount ?? data.active_count ?? 0) as number,\n }\n }\n\n // ------------------------------------------------------------------\n // Tools\n // ------------------------------------------------------------------\n\n async listTools(): Promise<ToolsListResult> {\n const data = await this._get<Record<string, unknown>>(\"/tools\")\n return {\n tools: ((data.tools ?? data.tools ?? []) as Record<string, unknown>[]).map(\n (t) => t as unknown as ToolInfo,\n ),\n totalTools: (data.totalTools ?? data.total_tools ?? 0) as number,\n servers: (data.servers ?? []) as string[],\n }\n }\n\n // ------------------------------------------------------------------\n // Debug / Admin\n // ------------------------------------------------------------------\n\n async getWorkflowStates(): Promise<WorkflowStates> {\n const data = await this._get<Record<string, unknown>>(\"/debug/workflow-states\")\n return {\n validStates: (data.validStates ?? data.valid_states ?? {}) as Record<string, string[]>,\n processableStates: (data.processableStates ?? data.processable_states ?? {}) as Record<string, string[]>,\n waitingStates: (data.waitingStates ?? data.waiting_states ?? {}) as Record<string, string[]>,\n stoppedStates: (data.stoppedStates ?? data.stopped_states ?? {}) as Record<string, string[]>,\n intermediateStates: (data.intermediateStates ?? data.intermediate_states ?? {}) as Record<string, string[]>,\n }\n }\n\n async updateTaskModels(\n taskId: string,\n models: { agent?: string; orchestrator?: string },\n ): Promise<SuccessResponse> {\n const data = await this._post<Record<string, unknown>>(`/tasks/${taskId}/models`, {\n agent: models.agent,\n orchestrator: models.orchestrator,\n })\n return { message: (data.message ?? \"\") as string }\n }\n\n async updateTaskIteration(\n taskId: string,\n iteration: number,\n ): Promise<SuccessResponse> {\n const data = await this._post<Record<string, unknown>>(`/tasks/${taskId}/iteration`, {\n iteration,\n })\n return { message: (data.message ?? \"\") as string }\n }\n\n async updateTaskWorkflowData(\n taskId: string,\n workflowData: Record<string, unknown>,\n ): Promise<SuccessResponse> {\n const data = await this._post<Record<string, unknown>>(`/tasks/${taskId}/workflow-data`, {\n workflow_data: workflowData,\n })\n return { message: (data.message ?? \"\") as string }\n }\n\n async deleteMessage(taskId: string, messageId: number): Promise<SuccessResponse> {\n const data = await this._delete<Record<string, unknown>>(\n `/tasks/${taskId}/conversation/messages/${messageId}`,\n )\n return { message: (data.message ?? \"\") as string }\n }\n\n async deleteMessages(\n taskId: string,\n messageIds: number[],\n ): Promise<SuccessResponse> {\n const data = await this._post<Record<string, unknown>>(\n `/tasks/${taskId}/conversation/messages/delete`,\n { message_ids: messageIds },\n )\n return { message: (data.message ?? \"\") as string }\n }\n\n async updateMessage(\n taskId: string,\n messageId: number,\n update: { content?: string; reasoning?: string },\n ): Promise<SuccessResponse> {\n const data = await this._put<Record<string, unknown>>(\n `/tasks/${taskId}/conversation/messages/${messageId}`,\n update,\n )\n return { message: (data.message ?? \"\") as string }\n }\n\n async resetMatrixToPhase(taskId: string, phase: number): Promise<SuccessResponse> {\n const data = await this._post<Record<string, unknown>>(\n `/tasks/${taskId}/matrix/reset`,\n { phase },\n )\n return { message: (data.message ?? \"\") as string }\n }\n\n async getMessageTranslations(\n taskId: string,\n messageId: number,\n locale?: string,\n ): Promise<MessageTranslationsResult> {\n const params: Record<string, string | number | boolean | undefined> = {}\n if (locale) params.locale = locale\n const data = await this._get<Record<string, unknown>>(\n `/tasks/${taskId}/conversation/messages/${messageId}/translations`,\n params,\n )\n return {\n messageId: (data.messageId ?? data.message_id ?? messageId) as number,\n translations: ((data.translations ?? []) as Record<string, unknown>[]).map(\n (t) => t as unknown as MessageTranslation,\n ),\n }\n }\n\n // ------------------------------------------------------------------\n // Error events\n // ------------------------------------------------------------------\n\n async listErrors(params?: {\n since?: string\n severity?: string\n source?: string\n limit?: number\n offset?: number\n }): Promise<ErrorEventDetail[]> {\n const queryParams: Record<string, string | number | boolean | undefined> = {}\n if (params?.since) queryParams.since = params.since\n if (params?.severity) queryParams.severity = params.severity\n if (params?.source) queryParams.source = params.source\n if (params?.limit) queryParams.limit = params.limit\n if (params?.offset) queryParams.offset = params.offset\n\n const data = await this._get<Record<string, unknown>>(\"/errors\", queryParams)\n return ((data.errors ?? []) as Record<string, unknown>[]).map(\n (e) => e as unknown as ErrorEventDetail,\n )\n }\n\n async getErrorDetail(errorId: string): Promise<ErrorEventDetail> {\n return this._get<ErrorEventDetail>(`/errors/${errorId}`)\n }\n\n async getErrorStats(since?: string): Promise<ErrorStatsResult> {\n const params: Record<string, string | number | boolean | undefined> = {}\n if (since) params.since = since\n return this._get<ErrorStatsResult>(\"/errors/stats\", params)\n }\n\n async countErrors(since?: string): Promise<ErrorCountResult> {\n const params: Record<string, string | number | boolean | undefined> = {}\n if (since) params.since = since\n return this._get<ErrorCountResult>(\"/errors/count\", params)\n }\n\n async purgeErrors(): Promise<ErrorPurgeResult> {\n return this._delete<ErrorPurgeResult>(\"/errors\")\n }\n\n // ------------------------------------------------------------------\n // Health / Metrics\n // ------------------------------------------------------------------\n\n async health(): Promise<HealthStatus> {\n return this._get<HealthStatus>(\"/health\")\n }\n\n async healthDetailed(): Promise<HealthDetail> {\n return this._get<HealthDetail>(\"/health/detail\")\n }\n\n async ready(): Promise<ReadinessResult> {\n return this._get<ReadinessResult>(\"/ready\")\n }\n\n async healthLeader(): Promise<LeaderStatus> {\n return this._get<LeaderStatus>(\"/leader\")\n }\n\n async getMetrics(types?: string): Promise<MetricSnapshot> {\n const params: Record<string, string | number | boolean | undefined> = {}\n if (types) params.types = types\n return this._get<MetricSnapshot>(\"/metrics\", params)\n }\n\n // ------------------------------------------------------------------\n // Configuration\n // ------------------------------------------------------------------\n\n async getSystemStatus(): Promise<SystemStatus> {\n return this._get<SystemStatus>(\"/config/status\")\n }\n\n async updateSettings(settings: Record<string, unknown>): Promise<SystemStatus> {\n return this._post<SystemStatus>(\"/config/settings\", settings)\n }\n\n async getConfigurationStatus(): Promise<ConfigurationStatus> {\n return this._get<ConfigurationStatus>(\"/config\")\n }\n\n async setAgentModel(model: string): Promise<SuccessResponse> {\n const data = await this._post<Record<string, unknown>>(\"/config/models/agent\", { model })\n return { message: (data.message ?? \"\") as string }\n }\n\n async setOrchestratorModel(model: string): Promise<SuccessResponse> {\n const data = await this._post<Record<string, unknown>>(\"/config/models/orchestrator\", { model })\n return { message: (data.message ?? \"\") as string }\n }\n\n async getLLMBackendStatus(): Promise<Record<string, unknown>> {\n return this._get<Record<string, unknown>>(\"/config/llmbackends\")\n }\n\n async addLLMBackend(host: string, apiKey: string): Promise<SuccessResponse> {\n const data = await this._post<Record<string, unknown>>(\"/config/llmbackends\", {\n host,\n api_key: apiKey,\n })\n return { message: (data.message ?? \"\") as string }\n }\n\n async removeLLMBackend(host: string): Promise<SuccessResponse> {\n const data = await this._delete<Record<string, unknown>>(`/config/llmbackends/${encodeURIComponent(host)}`)\n return { message: (data.message ?? \"\") as string }\n }\n\n async getMCPServerStatus(): Promise<Record<string, unknown>> {\n return this._get<Record<string, unknown>>(\"/config/mcpservers\")\n }\n\n async addMCPServer(host: string, apiKey: string): Promise<SuccessResponse> {\n const data = await this._post<Record<string, unknown>>(\"/config/mcpservers\", {\n host,\n api_key: apiKey,\n })\n return { message: (data.message ?? \"\") as string }\n }\n\n async removeMCPServer(host: string): Promise<SuccessResponse> {\n const data = await this._delete<Record<string, unknown>>(`/config/mcpservers/${encodeURIComponent(host)}`)\n return { message: (data.message ?? \"\") as string }\n }\n\n async getTaskHandlerStatus(): Promise<TaskHandlerStatus> {\n return this._get<TaskHandlerStatus>(\"/config/taskhandler\")\n }\n\n async getTaskHandlerStatusLocal(): Promise<TaskHandlerStatusLocal> {\n return this._get<TaskHandlerStatusLocal>(\"/config/taskhandler/local\")\n }\n\n async setConcurrentTasksPerReplica(maxTasks: number): Promise<SuccessResponse> {\n const data = await this._post<Record<string, unknown>>(\"/config/taskhandler/concurrency\", {\n max_tasks: maxTasks,\n })\n return { message: (data.message ?? \"\") as string }\n }\n\n async getSummaryWorkerStatus(): Promise<SummaryWorkerStatus> {\n return this._get<SummaryWorkerStatus>(\"/config/summary-worker\")\n }\n\n async setCompactorModel(modelName: string): Promise<SuccessResponse> {\n const data = await this._post<Record<string, unknown>>(\"/config/models/compactor\", {\n model_name: modelName,\n })\n return { message: (data.message ?? \"\") as string }\n }\n\n async setTranslateModel(modelName: string): Promise<SuccessResponse> {\n const data = await this._post<Record<string, unknown>>(\"/config/models/translate\", {\n model_name: modelName,\n })\n return { message: (data.message ?? \"\") as string }\n }\n\n async getTokenWorkerStatus(): Promise<TokenWorkerStatus> {\n return this._get<TokenWorkerStatus>(\"/config/token-worker\")\n }\n\n async getSlotsStatus(): Promise<SlotsStatus> {\n return this._get<SlotsStatus>(\"/config/slots\")\n }\n\n // ------------------------------------------------------------------\n // Auth / WebSocket status\n // ------------------------------------------------------------------\n\n async getAuthConfig(): Promise<AuthConfig> {\n return this._get<AuthConfig>(\"/auth/config\")\n }\n\n async getWebSocketStatus(): Promise<WebSocketStatus> {\n return this._get<WebSocketStatus>(\"/websocket/status\")\n }\n\n // ------------------------------------------------------------------\n // SSE stream\n // ------------------------------------------------------------------\n\n async *streamTaskStatus(taskId: string): AsyncGenerator<Record<string, unknown>> {\n const headers = await this._resolveHeaders()\n headers[\"Accept\"] = \"text/event-stream\"\n const response = await this._fetch(this._makeUrl(`/tasks/${taskId}/stream`), {\n headers,\n })\n if (!response.ok) {\n throw new OrchestratorAPIError(\n `Stream connection failed: ${response.statusText}`,\n response.status,\n )\n }\n const reader = response.body?.getReader()\n if (!reader) {\n throw new OrchestratorConnectionError(\"Stream body is not readable\")\n }\n const decoder = new TextDecoder()\n let buffer = \"\"\n while (true) {\n const { done, value } = await reader.read()\n if (done) break\n buffer += decoder.decode(value, { stream: true })\n const lines = buffer.split(\"\\n\")\n buffer = lines.pop() ?? \"\"\n for (const line of lines) {\n if (line.startsWith(\"data: \")) {\n try {\n yield JSON.parse(line.slice(6))\n } catch {\n // ignore malformed SSE lines\n }\n }\n }\n }\n }\n}\n\n// ---------------------------------------------------------------------------\n// Helpers\n// ---------------------------------------------------------------------------\n\nfunction sleep(ms: number): Promise<void> {\n return new Promise((resolve) => setTimeout(resolve, ms))\n}\n\nfunction combineSignals(...signals: AbortSignal[]): AbortSignal {\n const controller = new AbortController()\n for (const signal of signals) {\n if (signal.aborted) {\n controller.abort(signal.reason)\n return controller.signal\n }\n signal.addEventListener(\"abort\", () => controller.abort(signal.reason), { once: true })\n }\n return controller.signal\n}\n","/**\n * Orchestrator — synchronous wrapper around OrchestratorAsync.\n *\n * Uses a dedicated pattern so every method is a plain sync call — no\n * `await` needed. Perfect for scripts, REPL sessions, and CLI tools.\n *\n * Usage:\n *\n * const client = new Orchestrator({ baseUrl: \"http://localhost:8080\" });\n * const tasks = client.listTasks({ workflowId: \"proactive\" });\n * for (const t of tasks.tasks) {\n * console.log(t.id, t.status);\n * }\n * client.close();\n *\n * Or use the context manager pattern:\n *\n * const client = new Orchestrator();\n * try {\n * const status = client.getTaskStatus(\"task-abc123\");\n * console.log(status.status);\n * } finally {\n * client.close();\n * }\n */\n\nimport { OrchestratorAsync, type OrchestratorClientOptions } from \"./client.js\"\n\nexport { OrchestratorClientOptions }\n\n/**\n * Synchronous wrapper around OrchestratorAsync.\n *\n * Manages its own resolution so every method returns synchronously.\n * Cannot be used from within an active async context.\n */\nexport class Orchestrator {\n private _async: OrchestratorAsync\n\n constructor(opts: OrchestratorClientOptions = {}) {\n this._async = new OrchestratorAsync(opts)\n }\n\n /** Close the underlying resources. */\n close(): void {\n this._async.close().catch(() => {})\n }\n\n // ------------------------------------------------------------------\n // Tasks\n // ------------------------------------------------------------------\n\n listTasks(params?: Parameters<OrchestratorAsync[\"listTasks\"]>[0]) {\n return runSync(this._async.listTasks(params))\n }\n\n createTask(params: Parameters<OrchestratorAsync[\"createTask\"]>[0]) {\n return runSync(this._async.createTask(params))\n }\n\n getTaskStatus(taskId: string) {\n return runSync(this._async.getTaskStatus(taskId))\n }\n\n getTaskConversation(taskId: string) {\n return runSync(this._async.getTaskConversation(taskId))\n }\n\n getArchivedMessageContent(taskId: string, messageId: number) {\n return runSync(this._async.getArchivedMessageContent(taskId, messageId))\n }\n\n getTaskCompactions(taskId: string) {\n return runSync(this._async.getTaskCompactions(taskId))\n }\n\n getTaskJournal(taskId: string) {\n return runSync(this._async.getTaskJournal(taskId))\n }\n\n cancelTask(taskId: string) {\n return runSync(this._async.cancelTask(taskId))\n }\n\n deleteTask(taskId: string) {\n return runSync(this._async.deleteTask(taskId))\n }\n\n deleteTasks(taskIds: string[]) {\n return runSync(this._async.deleteTasks(taskIds))\n }\n\n // ------------------------------------------------------------------\n // Attachments\n // ------------------------------------------------------------------\n\n uploadAttachment(taskId: string, file: File | Blob, filename?: string) {\n return runSync(this._async.uploadAttachment(taskId, file, filename))\n }\n\n downloadAttachment(taskId: string, attachmentId: string) {\n return runSync(this._async.downloadAttachment(taskId, attachmentId))\n }\n\n // ------------------------------------------------------------------\n // Interactive workflow\n // ------------------------------------------------------------------\n\n sendInteractiveMessage(taskId: string, content: string) {\n return runSync(this._async.sendInteractiveMessage(taskId, content))\n }\n\n markInteractiveComplete(taskId: string) {\n return runSync(this._async.markInteractiveComplete(taskId))\n }\n\n markInteractiveFailed(taskId: string) {\n return runSync(this._async.markInteractiveFailed(taskId))\n }\n\n approveInteractiveAction(taskId: string) {\n return runSync(this._async.approveInteractiveAction(taskId))\n }\n\n // ------------------------------------------------------------------\n // Proactive workflow\n // ------------------------------------------------------------------\n\n sendProactiveGuide(taskId: string, guide: string) {\n return runSync(this._async.sendProactiveGuide(taskId, guide))\n }\n\n respondProactiveHelp(taskId: string, response: string) {\n return runSync(this._async.respondProactiveHelp(taskId, response))\n }\n\n approveProactiveAction(taskId: string) {\n return runSync(this._async.approveProactiveAction(taskId))\n }\n\n // ------------------------------------------------------------------\n // Ticket workflow\n // ------------------------------------------------------------------\n\n sendTicketGuide(taskId: string, guide: string) {\n return runSync(this._async.sendTicketGuide(taskId, guide))\n }\n\n respondTicketHelp(taskId: string, response: string) {\n return runSync(this._async.respondTicketHelp(taskId, response))\n }\n\n approveTicketAction(taskId: string) {\n return runSync(this._async.approveTicketAction(taskId))\n }\n\n wakeTicket(taskId: string) {\n return runSync(this._async.wakeTicket(taskId))\n }\n\n // ------------------------------------------------------------------\n // Matrix workflow\n // ------------------------------------------------------------------\n\n sendMatrixMessage(taskId: string, content: string) {\n return runSync(this._async.sendMatrixMessage(taskId, content))\n }\n\n markMatrixComplete(taskId: string) {\n return runSync(this._async.markMatrixComplete(taskId))\n }\n\n markMatrixFailed(taskId: string) {\n return runSync(this._async.markMatrixFailed(taskId))\n }\n\n approveMatrixAction(taskId: string) {\n return runSync(this._async.approveMatrixAction(taskId))\n }\n\n getMatrixConversation(taskId: string) {\n return runSync(this._async.getMatrixConversation(taskId))\n }\n\n // ------------------------------------------------------------------\n // VSA workflow\n // ------------------------------------------------------------------\n\n createVSATask(params: Parameters<OrchestratorAsync[\"createVSATask\"]>[0]) {\n return runSync(this._async.createVSATask(params))\n }\n\n sendVSAMessage(taskId: string, content: string) {\n return runSync(this._async.sendVSAMessage(taskId, content))\n }\n\n renameVSATask(taskId: string, title: string) {\n return runSync(this._async.renameVSATask(taskId, title))\n }\n\n regenerateVSATitle(taskId: string) {\n return runSync(this._async.regenerateVSATitle(taskId))\n }\n\n markVSAComplete(taskId: string) {\n return runSync(this._async.markVSAComplete(taskId))\n }\n\n markVSAFailed(taskId: string) {\n return runSync(this._async.markVSAFailed(taskId))\n }\n\n stopVSA(taskId: string) {\n return runSync(this._async.stopVSA(taskId))\n }\n\n deleteVSA(taskId: string) {\n return runSync(this._async.deleteVSA(taskId))\n }\n\n listVSATasks(params?: Parameters<OrchestratorAsync[\"listVSATasks\"]>[0]) {\n return runSync(this._async.listVSATasks(params))\n }\n\n searchVSATasks(query: string) {\n return runSync(this._async.searchVSATasks(query))\n }\n\n deleteVSATasksBulk(taskIds: string[]) {\n return runSync(this._async.deleteVSATasksBulk(taskIds))\n }\n\n // ------------------------------------------------------------------\n // MIO workflow\n // ------------------------------------------------------------------\n\n sendMioMessage(taskId: string, content: string) {\n return runSync(this._async.sendMioMessage(taskId, content))\n }\n\n approveMioAction(taskId: string) {\n return runSync(this._async.approveMioAction(taskId))\n }\n\n wakeMio(taskId: string) {\n return runSync(this._async.wakeMio(taskId))\n }\n\n sendMioUserAway(taskId: string) {\n return runSync(this._async.sendMioUserAway(taskId))\n }\n\n markMioComplete(taskId: string) {\n return runSync(this._async.markMioComplete(taskId))\n }\n\n markMioFailed(taskId: string) {\n return runSync(this._async.markMioFailed(taskId))\n }\n\n archiveMio(taskId: string) {\n return runSync(this._async.archiveMio(taskId))\n }\n\n getMioContext(taskId: string) {\n return runSync(this._async.getMioContext(taskId))\n }\n\n // ------------------------------------------------------------------\n // Tools\n // ------------------------------------------------------------------\n\n listTools() {\n return runSync(this._async.listTools())\n }\n\n // ------------------------------------------------------------------\n // Debug / Admin\n // ------------------------------------------------------------------\n\n getWorkflowStates() {\n return runSync(this._async.getWorkflowStates())\n }\n\n updateTaskModels(taskId: string, models: { agent?: string; orchestrator?: string }) {\n return runSync(this._async.updateTaskModels(taskId, models))\n }\n\n updateTaskIteration(taskId: string, iteration: number) {\n return runSync(this._async.updateTaskIteration(taskId, iteration))\n }\n\n updateTaskWorkflowData(taskId: string, workflowData: Record<string, unknown>) {\n return runSync(this._async.updateTaskWorkflowData(taskId, workflowData))\n }\n\n deleteMessage(taskId: string, messageId: number) {\n return runSync(this._async.deleteMessage(taskId, messageId))\n }\n\n deleteMessages(taskId: string, messageIds: number[]) {\n return runSync(this._async.deleteMessages(taskId, messageIds))\n }\n\n updateMessage(taskId: string, messageId: number, update: { content?: string; reasoning?: string }) {\n return runSync(this._async.updateMessage(taskId, messageId, update))\n }\n\n resetMatrixToPhase(taskId: string, phase: number) {\n return runSync(this._async.resetMatrixToPhase(taskId, phase))\n }\n\n getMessageTranslations(taskId: string, messageId: number, locale?: string) {\n return runSync(this._async.getMessageTranslations(taskId, messageId, locale))\n }\n\n // ------------------------------------------------------------------\n // Error events\n // ------------------------------------------------------------------\n\n listErrors(params?: Parameters<OrchestratorAsync[\"listErrors\"]>[0]) {\n return runSync(this._async.listErrors(params))\n }\n\n getErrorDetail(errorId: string) {\n return runSync(this._async.getErrorDetail(errorId))\n }\n\n getErrorStats(since?: string) {\n return runSync(this._async.getErrorStats(since))\n }\n\n countErrors(since?: string) {\n return runSync(this._async.countErrors(since))\n }\n\n purgeErrors() {\n return runSync(this._async.purgeErrors())\n }\n\n // ------------------------------------------------------------------\n // Health / Metrics\n // ------------------------------------------------------------------\n\n health() {\n return runSync(this._async.health())\n }\n\n healthDetailed() {\n return runSync(this._async.healthDetailed())\n }\n\n ready() {\n return runSync(this._async.ready())\n }\n\n healthLeader() {\n return runSync(this._async.healthLeader())\n }\n\n getMetrics(types?: string) {\n return runSync(this._async.getMetrics(types))\n }\n\n // ------------------------------------------------------------------\n // Configuration\n // ------------------------------------------------------------------\n\n getSystemStatus() {\n return runSync(this._async.getSystemStatus())\n }\n\n updateSettings(settings: Record<string, unknown>) {\n return runSync(this._async.updateSettings(settings))\n }\n\n getConfigurationStatus() {\n return runSync(this._async.getConfigurationStatus())\n }\n\n setAgentModel(model: string) {\n return runSync(this._async.setAgentModel(model))\n }\n\n setOrchestratorModel(model: string) {\n return runSync(this._async.setOrchestratorModel(model))\n }\n\n getLLMBackendStatus() {\n return runSync(this._async.getLLMBackendStatus())\n }\n\n addLLMBackend(host: string, apiKey: string) {\n return runSync(this._async.addLLMBackend(host, apiKey))\n }\n\n removeLLMBackend(host: string) {\n return runSync(this._async.removeLLMBackend(host))\n }\n\n getMCPServerStatus() {\n return runSync(this._async.getMCPServerStatus())\n }\n\n addMCPServer(host: string, apiKey: string) {\n return runSync(this._async.addMCPServer(host, apiKey))\n }\n\n removeMCPServer(host: string) {\n return runSync(this._async.removeMCPServer(host))\n }\n\n getTaskHandlerStatus() {\n return runSync(this._async.getTaskHandlerStatus())\n }\n\n getTaskHandlerStatusLocal() {\n return runSync(this._async.getTaskHandlerStatusLocal())\n }\n\n setConcurrentTasksPerReplica(maxTasks: number) {\n return runSync(this._async.setConcurrentTasksPerReplica(maxTasks))\n }\n\n getSummaryWorkerStatus() {\n return runSync(this._async.getSummaryWorkerStatus())\n }\n\n setCompactorModel(modelName: string) {\n return runSync(this._async.setCompactorModel(modelName))\n }\n\n setTranslateModel(modelName: string) {\n return runSync(this._async.setTranslateModel(modelName))\n }\n\n getTokenWorkerStatus() {\n return runSync(this._async.getTokenWorkerStatus())\n }\n\n getSlotsStatus() {\n return runSync(this._async.getSlotsStatus())\n }\n\n // ------------------------------------------------------------------\n // Auth / WebSocket status\n // ------------------------------------------------------------------\n\n getAuthConfig() {\n return runSync(this._async.getAuthConfig())\n }\n\n getWebSocketStatus() {\n return runSync(this._async.getWebSocketStatus())\n }\n\n // ------------------------------------------------------------------\n // SSE stream (collects all events into an array)\n // ------------------------------------------------------------------\n\n streamTaskStatus(_taskId: string): Record<string, unknown>[] {\n const events: Record<string, unknown>[] = []\n // Stream is async-only; for sync usage this returns empty\n // Users should use the async variant for streaming\n return events\n }\n}\n\nfunction runSync<T>(promise: Promise<T>): T {\n // In browser/Ember contexts, we can't use synchronous blocking.\n // This is a thin wrapper that assumes the promise resolves immediately\n // in practice, or the caller uses the async variant.\n // For Node.js scripts, the sync wrapper behaves correctly.\n let result: T | undefined\n let error: unknown\n let done = false\n\n promise.then(\n (r) => { result = r; done = true },\n (e) => { error = e; done = true },\n )\n\n // In Node.js, we could use a tight loop with setTimeout to wait,\n // but in browsers this hangs. The sync wrapper is best-effort;\n // for true synchronous use, prefer the async client or a Node.js\n // environment where we can block the event loop.\n if (!done) {\n // In Node.js, run a quick spin loop\n const start = Date.now()\n while (!done && Date.now() - start < 10_000) {\n // Spin — this works in Node.js for micro-tick resolution\n }\n }\n\n if (!done) {\n throw new Error(\"Orchestrator sync: operation timed out\")\n }\n if (error) throw error\n return result!\n}\n","/**\n * Environment-based configuration for the orchestrator client.\n *\n * All settings are read from environment variables with sensible defaults,\n * so upstream applications can configure the client without passing args.\n */\n\nexport interface OrchestratorConfig {\n /** Base URL of the orchestrator (e.g. \"http://localhost:8080\"). */\n baseUrl: string\n /** Optional static bearer token sent as `Authorization: Bearer <key>`. */\n apiKey?: string\n /** Default timeout in milliseconds for HTTP requests. */\n timeoutMs: number\n /** Maximum retry attempts on transient failures. */\n maxRetries: number\n}\n\nconst DEFAULTS: OrchestratorConfig = {\n baseUrl: \"http://localhost:8080\",\n apiKey: undefined,\n timeoutMs: 30_000,\n maxRetries: 3,\n}\n\n/**\n * Build configuration from environment variables.\n *\n * - `ORCHESTRATOR_URL` — base URL (default: \"http://localhost:8080\")\n * - `ORCHESTRATOR_API_KEY` — optional bearer token\n * - `ORCHESTRATOR_TIMEOUT_MS` — timeout in ms (default: 30000)\n * - `ORCHESTRATOR_MAX_RETRIES` — max retries (default: 3)\n */\nexport function loadConfig(\n overrides?: Partial<OrchestratorConfig>,\n): OrchestratorConfig {\n return {\n baseUrl: (\n process.env.ORCHESTRATOR_URL ??\n overrides?.baseUrl ??\n DEFAULTS.baseUrl\n ).replace(/\\/+$/, \"\"),\n apiKey:\n process.env.ORCHESTRATOR_API_KEY ??\n overrides?.apiKey ??\n DEFAULTS.apiKey,\n timeoutMs: Number(\n process.env.ORCHESTRATOR_TIMEOUT_MS ??\n overrides?.timeoutMs ??\n DEFAULTS.timeoutMs,\n ),\n maxRetries: Number(\n process.env.ORCHESTRATOR_MAX_RETRIES ??\n overrides?.maxRetries ??\n DEFAULTS.maxRetries,\n ),\n }\n}\n","/**\n * Create a fetch implementation that ignores SSL certificate errors.\n *\n * Useful for connecting to orchestrator instances with self-signed or\n * internally-issued certificates during development or in isolated networks.\n *\n * Usage:\n *\n * import { Orchestrator, createInsecureFetch } from \"orchestrator-client\";\n *\n * const client = new Orchestrator({\n * baseUrl: \"https://orchestrator.internal:8443\",\n * fetch: await createInsecureFetch(),\n * });\n *\n * Note: Only works in Node.js (uses `https.Agent` underneath).\n * In browser environments, the global `fetch` is returned as-is.\n */\n\nlet _insecureFetch: typeof globalThis.fetch | undefined\n\nexport async function createInsecureFetch(): Promise<typeof globalThis.fetch> {\n if (_insecureFetch) return _insecureFetch\n\n // Check if we're in Node.js\n if (\n typeof process === \"undefined\" ||\n process.versions?.node == null\n ) {\n // In browsers, SSL is handled by the browser — return global fetch\n _insecureFetch = globalThis.fetch\n return _insecureFetch\n }\n\n // Dynamic import — works with ESM and tsup bundling\n const https = await import(\"node:https\")\n const http = await import(\"node:http\")\n\n const agent = new https.Agent({ rejectUnauthorized: false })\n\n _insecureFetch = async (\n input: RequestInfo | URL,\n init?: RequestInit,\n ): Promise<Response> => {\n const urlStr = typeof input === \"string\" ? input : input.toString()\n const urlObj = new URL(urlStr)\n const isHttps = urlObj.protocol === \"https:\"\n\n return new Promise<Response>((resolve, reject) => {\n const mod = isHttps ? https : http\n const req = mod.request(\n urlStr,\n {\n method: init?.method ?? \"GET\",\n headers: init?.headers as Record<string, string> | undefined,\n rejectUnauthorized: false,\n agent: isHttps ? agent : undefined,\n },\n (res: NodeJS.ReadableStream) => {\n const chunks: Buffer[] = []\n res.on(\"data\", (chunk: Buffer) => chunks.push(chunk))\n res.on(\"end\", () => {\n const body = Buffer.concat(chunks)\n const headers = new Headers()\n // Cast to access the headers object from Node's IncomingMessage\n const resHeaders = (res as unknown as { headers: Record<string, string | string[]> }).headers\n if (resHeaders) {\n for (const [key, value] of Object.entries(resHeaders)) {\n if (value != null) {\n if (Array.isArray(value)) {\n for (const v of value) headers.append(key, v)\n } else {\n headers.set(key, value)\n }\n }\n }\n }\n resolve(\n new Response(body, {\n status: (res as unknown as { statusCode?: number }).statusCode,\n statusText: (res as unknown as { statusMessage?: string }).statusMessage,\n headers,\n }),\n )\n })\n },\n )\n\n req.on(\"error\", reject)\n if (init?.body != null) {\n req.write(init.body)\n }\n req.end()\n })\n }\n\n return _insecureFetch\n}\n","/**\n * RealtimeClient — Socket.IO wrapper for orchestrator realtime events.\n *\n * Connects to the orchestrator's Socket.IO endpoint (same host:port as the\n * REST API) and provides a typed subscription layer using the server's\n * room-based event system.\n *\n * Usage:\n *\n * const rt = new RealtimeClient(\"http://localhost:8080\");\n * await rt.connect();\n * await rt.subscribeTask(\"task-abc123\");\n *\n * rt.on(\"task_status_changed\", (event) => {\n * console.log(event.new_status);\n * });\n */\n\nimport type { Socket as SocketIOClient } from \"socket.io-client\"\n\n// ---------------------------------------------------------------------------\n// Event type constants — mirror the Python client's event name constants\n// ---------------------------------------------------------------------------\n\nexport const EVENT_TASK_CREATED = \"task_created\"\nexport const EVENT_TASK_STATUS_CHANGED = \"task_status_changed\"\nexport const EVENT_TASK_ITERATION_CHANGED = \"task_iteration_changed\"\nexport const EVENT_TASK_DELETED = \"task_deleted\"\nexport const EVENT_TASK_RESULT_UPDATED = \"task_result_updated\"\nexport const EVENT_TASK_INSIGHT_UPDATED = \"task_insight_updated\"\nexport const EVENT_MESSAGE_ADDED = \"message_added\"\nexport const EVENT_MESSAGE_STREAMING = \"message_streaming\"\nexport const EVENT_MESSAGE_SUMMARY_GENERATED = \"message_summary_generated\"\nexport const EVENT_MESSAGE_TRANSLATION_READY = \"message_translation_ready\"\nexport const EVENT_ERROR_EVENT_RECORDED = \"error_event_recorded\"\n\nexport type EventHandler = (...args: unknown[]) => void\n\nexport interface RealtimeClientOptions {\n /** Socket.IO connection options. */\n socketOptions?: Record<string, unknown>\n /** Optional bearer token or async token getter. */\n getToken?: (() => string | Promise<string>) | string\n /** Whether to auto-connect on construction (default: false). */\n autoConnect?: boolean\n}\n\n/**\n * Socket.IO-based realtime client for receiving orchestrator events.\n *\n * Requires the consumer to provide their own `socket.io-client` instance\n * to avoid version conflicts.\n */\nexport class RealtimeClient {\n private _baseUrl: string\n private _socketOptions: Record<string, unknown>\n private _getToken?: (() => string | Promise<string>) | string\n private _socket: SocketIOClient | null = null\n private _handlers: Map<string, Set<EventHandler>> = new Map()\n private _connected = false\n\n constructor(baseUrl: string, opts: RealtimeClientOptions) {\n this._baseUrl = baseUrl.replace(/\\/+$/, \"\")\n this._socketOptions = opts.socketOptions ?? {}\n this._getToken = opts.getToken\n\n if (opts.autoConnect) {\n this.connect()\n }\n }\n\n get connected(): boolean {\n return this._connected\n }\n\n async connect(): Promise<void> {\n const auth: Record<string, unknown> = {}\n if (this._getToken) {\n auth.token =\n typeof this._getToken === \"function\"\n ? await this._getToken()\n : this._getToken\n }\n\n // We construct the socket dynamically to avoid a hard import\n const { io } = await import(\"socket.io-client\")\n this._socket = io(this._baseUrl, {\n path: \"/socket.io\",\n auth,\n transports: [\"websocket\", \"polling\"],\n ...this._socketOptions,\n }) as unknown as SocketIOClient\n\n this._socket.on(\"connect\", () => {\n this._connected = true\n })\n\n this._socket.on(\"disconnect\", () => {\n this._connected = false\n })\n\n return new Promise<void>((resolve, reject) => {\n const socket = this._socket!\n socket.on(\"connect\", () => resolve())\n socket.on(\"connect_error\", (err: Error) => reject(err))\n // If already connected, resolve immediately\n if (socket.connected) {\n resolve()\n }\n })\n }\n\n async disconnect(): Promise<void> {\n if (this._socket) {\n this._socket.disconnect()\n this._socket = null\n }\n this._connected = false\n }\n\n /**\n * Subscribe to realtime events for a specific task.\n */\n async subscribeTask(taskId: string): Promise<void> {\n if (!this._socket) throw new Error(\"RealtimeClient not connected\")\n return new Promise((resolve, reject) => {\n this._socket!.emit(\"subscribe\", { task_id: taskId }, (response: { ok: boolean; error?: string }) => {\n if (response.ok) resolve()\n else reject(new Error(response.error ?? \"Subscription failed\"))\n })\n })\n }\n\n /**\n * Unsubscribe from realtime events for a specific task.\n */\n async unsubscribeTask(taskId: string): Promise<void> {\n if (!this._socket) throw new Error(\"RealtimeClient not connected\")\n return new Promise((resolve, reject) => {\n this._socket!.emit(\"unsubscribe\", { task_id: taskId }, (response: { ok: boolean; error?: string }) => {\n if (response.ok) resolve()\n else reject(new Error(response.error ?? \"Unsubscription failed\"))\n })\n })\n }\n\n /**\n * Register a handler for a specific event type.\n */\n on(event: string, handler: EventHandler): void {\n if (!this._handlers.has(event)) {\n this._handlers.set(event, new Set())\n // Wire up socket listener when first handler is added\n if (this._socket) {\n this._socket.on(event, (...args: unknown[]) => {\n const handlers = this._handlers.get(event)\n if (handlers) {\n for (const h of handlers) {\n h(...args)\n }\n }\n })\n }\n }\n this._handlers.get(event)!.add(handler)\n }\n\n /**\n * Remove a registered handler.\n */\n off(event: string, handler: EventHandler): void {\n const handlers = this._handlers.get(event)\n if (handlers) {\n handlers.delete(handler)\n if (handlers.size === 0) {\n this._handlers.delete(event)\n if (this._socket) {\n this._socket.off(event)\n }\n }\n }\n }\n\n /**\n * Wait for the connection to close (for long-running listeners).\n */\n wait(): Promise<void> {\n return new Promise((resolve) => {\n const socket = this._socket\n if (!socket) {\n resolve()\n return\n }\n socket.on(\"disconnect\", () => resolve())\n })\n }\n}\n"],"mappings":"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","names":[]}