orchestrator-client 5.7.3 → 5.7.10

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.
@@ -1 +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\tEVENT_TASK_CREATED,\n\tEVENT_TASK_STATUS_CHANGED,\n\tEVENT_TASK_ITERATION_CHANGED,\n\tEVENT_TASK_DELETED,\n\tEVENT_TASK_RESULT_UPDATED,\n\tEVENT_TASK_INSIGHT_UPDATED,\n\tEVENT_MESSAGE_ADDED,\n\tEVENT_MESSAGE_STREAMING,\n\tEVENT_MESSAGE_SUMMARY_GENERATED,\n\tEVENT_MESSAGE_TRANSLATION_READY,\n\tEVENT_ERROR_EVENT_RECORDED,\n} from \"./socketio.js\";\nexport type { EventHandler, RealtimeClientOptions } from \"./socketio.js\";\n\n// Exceptions\nexport {\n\tOrchestratorError,\n\tOrchestratorConnectionError,\n\tOrchestratorAuthError,\n\tOrchestratorNotFoundError,\n\tOrchestratorAPIError,\n\tOrchestratorConfigError,\n} from \"./errors.js\";\n\n// Models\nexport type { Pagination } from \"./models/pagination.js\";\nexport type {\n\tTaskSummary,\n\tTaskOptions,\n\tTaskDetail,\n\tTaskListResult,\n\tTaskCreateResponse,\n\tTaskCancelResponse,\n\tTaskDeleteResult,\n\tVSATaskCreateResponse,\n} from \"./models/task.js\";\nexport type {\n\tAttachmentMeta,\n\tToolCall,\n\tMessage,\n\tConversationResult,\n\tMatrixConversationResult,\n\tArchivedContent,\n\tMessageTranslation,\n\tMessageTranslationsResult,\n\tMessageTranslationReadyEvent,\n} from \"./models/conversation.js\";\nexport type {\n\tErrorEvent,\n\tErrorEventDetail,\n\tErrorStatsResult,\n\tErrorCountResult,\n\tErrorPurgeResult,\n} from \"./models/errors.js\";\nexport type {\n\tHealthStatus,\n\tComponentHealth,\n\tHealthDetail,\n\tReadinessCheck,\n\tReadinessResult,\n\tLockStatus,\n\tLeaderStatus,\n\tMetricSnapshot,\n} from \"./models/health.js\";\nexport type {\n\tSystemStatusSettings,\n\tSystemStatus,\n\tLLMBackendInfo,\n\tMCPServerInfo,\n\tTaskHandlerReplica,\n\tTaskHandlerCluster,\n\tTaskHandlerStatus,\n\tTaskHandlerStatusLocal,\n\tSummaryWorkerStatus,\n\tTokenWorkerStatus,\n\tSlotInfo,\n\tSlotsStatus,\n\tConfigurationStatus,\n} from \"./models/config-models.js\";\nexport type { ToolInfo, ToolsListResult } from \"./models/tools.js\";\nexport type {\n\tCompactionEvent,\n\tTaskJournal,\n\tAttachmentUploadResponse,\n} from \"./models/journal.js\";\nexport type {\n\tAuthConfig,\n\tWebSocketClientInfo,\n\tWebSocketStatus,\n} from \"./models/auth.js\";\nexport type {\n\tSuccessResponse,\n\tMioContext,\n\tWorkflowStates,\n} 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\tpublic readonly statusCode: number | null;\n\tpublic readonly errorCode: string | null;\n\tpublic readonly details: Record<string, unknown>;\n\n\tconstructor(\n\t\tmessage: string,\n\t\topts?: {\n\t\t\tstatusCode?: number | null;\n\t\t\terrorCode?: string | null;\n\t\t\tdetails?: Record<string, unknown>;\n\t\t},\n\t) {\n\t\tsuper(message);\n\t\tthis.name = \"OrchestratorError\";\n\t\tthis.statusCode = opts?.statusCode ?? null;\n\t\tthis.errorCode = opts?.errorCode ?? null;\n\t\tthis.details = opts?.details ?? {};\n\t}\n}\n\n/**\n * Orchestrator is unreachable (network / DNS / timeout).\n */\nexport class OrchestratorConnectionError extends OrchestratorError {\n\tconstructor(message: string) {\n\t\tsuper(message, { statusCode: null });\n\t\tthis.name = \"OrchestratorConnectionError\";\n\t}\n}\n\n/**\n * Authentication or authorization failure (401/403).\n */\nexport class OrchestratorAuthError extends OrchestratorError {\n\tconstructor(message: string, statusCode = 401) {\n\t\tsuper(message, { statusCode });\n\t\tthis.name = \"OrchestratorAuthError\";\n\t}\n}\n\n/**\n * Requested resource does not exist (404).\n */\nexport class OrchestratorNotFoundError extends OrchestratorError {\n\tpublic readonly resourceType: string;\n\tpublic readonly resourceId: string;\n\n\tconstructor(resourceType: string, resourceId: string, message?: string) {\n\t\tsuper(message ?? `${resourceType} not found: ${resourceId}`, {\n\t\t\tstatusCode: 404,\n\t\t});\n\t\tthis.name = \"OrchestratorNotFoundError\";\n\t\tthis.resourceType = resourceType;\n\t\tthis.resourceId = resourceId;\n\t}\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\tconstructor(\n\t\tmessage: string,\n\t\tstatusCode: number,\n\t\terrorCode?: string | null,\n\t\tdetails?: Record<string, unknown>,\n\t) {\n\t\tsuper(message, { statusCode, errorCode, details });\n\t\tthis.name = \"OrchestratorAPIError\";\n\t}\n}\n\n/**\n * Invalid or missing client configuration (bad env vars, etc.).\n */\nexport class OrchestratorConfigError extends OrchestratorError {\n\tconstructor(message: string) {\n\t\tsuper(message, { statusCode: null });\n\t\tthis.name = \"OrchestratorConfigError\";\n\t}\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 {\n\tOrchestratorAPIError,\n\tOrchestratorAuthError,\n\tOrchestratorConnectionError,\n\tOrchestratorNotFoundError,\n} from \"./errors.js\";\nimport type {\n\tAttachmentUploadResponse,\n\tAuthConfig,\n\tCatalogValidationResult,\n\tCompactionEvent,\n\tConfigurationStatus,\n\tConversationResult,\n\tErrorCountResult,\n\tErrorEventDetail,\n\tErrorEventListResult,\n\tErrorPurgeResult,\n\tErrorStatsResult,\n\tHealthDetail,\n\tHealthStatus,\n\tLeaderStatus,\n\tMCPRefreshResult,\n\tMatrixConversationResult,\n\tMessage,\n\tMessageDeleteMultipleResult,\n\tMessageTranslation,\n\tMessageTranslationsResult,\n\tMetricSnapshot,\n\tMioContext,\n\tMioMemoriesResult,\n\tPagination,\n\tReadinessResult,\n\tReloadServicesResult,\n\tReloadStatus,\n\tSlotsStatus,\n\tSubagentsStatus,\n\tSuccessResponse,\n\tSummaryWorkerStatus,\n\tSystemStatus,\n\tTaskCancelResponse,\n\tTaskCreateResponse,\n\tTaskDeleteResult,\n\tTaskDetail,\n\tTaskHandlerStatus,\n\tTaskHandlerStatusLocal,\n\tTaskJournal,\n\tTaskListResult,\n\tTaskSummary,\n\tTokenWorkerStatus,\n\tToolCatalogResult,\n\tToolInfo,\n\tToolsListResult,\n\tVSATaskCreateResponse,\n\tWebSocketStatus,\n\tWorkflowStates,\n} from \"./models/index.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\tconst p = (data.pagination ?? {}) as Record<string, unknown>;\n\treturn {\n\t\tcurrentPage: (p.currentPage ?? 1) as number,\n\t\tperPage: (p.perPage ?? 25) as number,\n\t\ttotalItems: (p.totalItems ?? 0) as number,\n\t\ttotalPages: (p.totalPages ?? 1) as number,\n\t\thasNext: (p.hasNext ?? false) as boolean,\n\t\thasPrev: (p.hasPrev ?? false) as boolean,\n\t};\n}\n\nfunction buildTaskSummary(t: Record<string, unknown>): TaskSummary {\n\treturn {\n\t\tid: (t.id ?? \"\") as string,\n\t\tstatus: (t.status ?? \"\") as string,\n\t\tworkflowId: (t.workflowId ?? t.workflow_id ?? \"\") as string,\n\t\titeration: (t.iteration ?? 0) as number,\n\t\tmaxIterations: (t.maxIterations ?? t.max_iterations ?? 0) as number,\n\t\tgoalPrompt: (t.goalPrompt ?? t.goal_prompt ?? \"\") as string,\n\t\tresult: (t.result ?? \"\") as string,\n\t\tresultLocalized: (t.resultLocalized ?? t.result_localized ?? null) as\n\t\t\t| string\n\t\t\t| null,\n\t\tapprovalReason: (t.approvalReason ?? t.approval_reason ?? \"\") as string,\n\t\tticketId: (t.ticketId ?? t.ticket_id ?? null) as string | null,\n\t\tavailableTools: (t.availableTools ?? t.available_tools ?? null) as\n\t\t\t| string[]\n\t\t\t| null,\n\t\tinsight: (t.insight ?? null) as string | null,\n\t\tinsightLocalized: (t.insightLocalized ?? t.insight_localized ?? null) as\n\t\t\t| string\n\t\t\t| null,\n\t\tcreatedAt: (t.createdAt ?? t.created_at ?? \"\") as string,\n\t\tupdatedAt: (t.updatedAt ?? t.updated_at ?? \"\") as string,\n\t\tpendingTranslationsForLocales: (t.pendingTranslationsForLocales ??\n\t\t\tt.pending_translations_for_locales ??\n\t\t\tnull) as string[] | null | undefined,\n\t};\n}\n\n// ---------------------------------------------------------------------------\n// Client options\n// ---------------------------------------------------------------------------\n\nexport interface OrchestratorClientOptions {\n\t/** Base URL of the orchestrator (e.g. \"http://localhost:8080\"). */\n\tbaseUrl?: string;\n\t/** Optional static bearer token. */\n\tapiKey?: string;\n\t/** Async function that returns a bearer token (called on each request). */\n\tgetToken?: () => string | Promise<string>;\n\t/** Request timeout in milliseconds (default: 30000). */\n\ttimeoutMs?: number;\n\t/** Max retry attempts on transient failures (default: 3). */\n\tmaxRetries?: number;\n\t/**\n\t * Locale tag sent as `X-Locale` on every request (e.g. `\"hu-hu\"`, `\"en-us\"`).\n\t *\n\t * When set the API returns translated content where available.\n\t * When not set the API returns its default (English) content.\n\t * Per-call locale overrides (on `listTasks`, `getTaskStatus`, etc.)\n\t * take precedence over this global setting.\n\t */\n\tlocale?: string;\n\t/**\n\t * Custom fetch implementation override.\n\t *\n\t * Use this to inject a fetch that ignores SSL errors (self-signed certs):\n\t *\n\t * new Orchestrator({\n\t * fetch: await createInsecureFetch(),\n\t * })\n\t *\n\t * When not provided, `globalThis.fetch` is used.\n\t */\n\tfetch?: typeof globalThis.fetch;\n\t/**\n\t * Allow self-signed / invalid SSL certificates.\n\t *\n\t * When true and no custom `fetch` is provided, creates an internal fetch\n\t * that uses Node.js `https.Agent` with `rejectUnauthorized: false`.\n\t * Only works in Node.js; ignored in browsers.\n\t */\n\tinsecure?: boolean;\n}\n\n// ---------------------------------------------------------------------------\n// OrchestratorAsync\n// ---------------------------------------------------------------------------\n\nexport class OrchestratorAsync {\n\tprotected _baseUrl: string;\n\tprotected _apiKey: string | undefined;\n\tprotected _getToken: (() => string | Promise<string>) | undefined;\n\tprotected _timeoutMs: number;\n\tprotected _maxRetries: number;\n\tprotected _locale: string | undefined;\n\tprotected _fetch: typeof globalThis.fetch;\n\tprotected _abortController: AbortController | null = null;\n\n\tconstructor(opts: OrchestratorClientOptions = {}) {\n\t\tthis._baseUrl = (opts.baseUrl ?? \"http://localhost:8080\").replace(\n\t\t\t/\\/+$/,\n\t\t\t\"\",\n\t\t);\n\t\tthis._apiKey = opts.apiKey;\n\t\tthis._getToken = opts.getToken;\n\t\tthis._timeoutMs = opts.timeoutMs ?? DEFAULT_TIMEOUT_MS;\n\t\tthis._maxRetries = opts.maxRetries ?? DEFAULT_MAX_RETRIES;\n\t\tthis._locale = opts.locale;\n\t\tthis._fetch = opts.fetch ?? globalThis.fetch;\n\t\tif (\n\t\t\topts.insecure &&\n\t\t\t!opts.fetch &&\n\t\t\ttypeof process !== \"undefined\" &&\n\t\t\tprocess.versions?.node\n\t\t) {\n\t\t\t// Lazy-init insecure fetch — requires async import of Node.js modules\n\t\t\t// The actual switch happens at request time since we can't await here\n\t\t\tthis._insecure = true;\n\t\t}\n\t}\n\n\tprotected _insecure = false;\n\n\tasync close(): Promise<void> {\n\t\tthis._abortController?.abort();\n\t}\n\n\t// ------------------------------------------------------------------\n\t// Internal helpers\n\t// ------------------------------------------------------------------\n\n\tprotected _makeUrl(path: string): string {\n\t\treturn `${this._baseUrl}${path}`;\n\t}\n\n\tprotected async _resolveHeaders(): Promise<Record<string, string>> {\n\t\tconst headers: Record<string, string> = {};\n\t\tif (this._apiKey) {\n\t\t\theaders.Authorization = `Bearer ${this._apiKey}`;\n\t\t} else if (this._getToken) {\n\t\t\tconst token = await this._getToken();\n\t\t\tif (token) {\n\t\t\t\theaders.Authorization = `Bearer ${token}`;\n\t\t\t}\n\t\t}\n\t\tif (this._locale) {\n\t\t\theaders[\"X-Locale\"] = this._locale;\n\t\t}\n\t\treturn headers;\n\t}\n\n\tprotected async _request(\n\t\tmethod: string,\n\t\tpath: string,\n\t\topts?: {\n\t\t\tjsonBody?: unknown;\n\t\t\tparams?: Record<string, string | number | boolean | undefined>;\n\t\t\theaders?: Record<string, string>;\n\t\t\trawResponse?: boolean;\n\t\t\tsignal?: AbortSignal;\n\t\t},\n\t): Promise<Response | unknown> {\n\t\tconst url = new URL(this._makeUrl(path));\n\t\tif (opts?.params) {\n\t\t\tfor (const [key, value] of Object.entries(opts.params)) {\n\t\t\t\tif (value !== undefined) {\n\t\t\t\t\turl.searchParams.set(key, String(value));\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tconst extraHeaders = await this._resolveHeaders();\n\t\tconst mergedHeaders: Record<string, string> = {\n\t\t\t...extraHeaders,\n\t\t\t...(opts?.headers ?? {}),\n\t\t};\n\t\tif (opts?.jsonBody !== undefined && !mergedHeaders[\"Content-Type\"]) {\n\t\t\tmergedHeaders[\"Content-Type\"] = \"application/json\";\n\t\t}\n\n\t\tfor (let attempt = 1; attempt <= this._maxRetries; attempt++) {\n\t\t\ttry {\n\t\t\t\tconst controller = new AbortController();\n\t\t\t\tconst timeoutId = setTimeout(() => controller.abort(), this._timeoutMs);\n\t\t\t\tconst signal = opts?.signal\n\t\t\t\t\t? combineSignals(opts.signal, controller.signal)\n\t\t\t\t\t: controller.signal;\n\n\t\t\t\tconst response = await this._fetch(url.toString(), {\n\t\t\t\t\tmethod,\n\t\t\t\t\theaders: mergedHeaders,\n\t\t\t\t\tbody:\n\t\t\t\t\t\topts?.jsonBody !== undefined\n\t\t\t\t\t\t\t? JSON.stringify(opts.jsonBody)\n\t\t\t\t\t\t\t: undefined,\n\t\t\t\t\tsignal,\n\t\t\t\t});\n\n\t\t\t\tclearTimeout(timeoutId);\n\n\t\t\t\tif (response.status === 401) {\n\t\t\t\t\tthrow new OrchestratorAuthError(\n\t\t\t\t\t\t`Authentication failed for ${method} ${path}`,\n\t\t\t\t\t\t401,\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\tif (response.status === 403) {\n\t\t\t\t\tthrow new OrchestratorAuthError(\n\t\t\t\t\t\t`Access denied for ${method} ${path}`,\n\t\t\t\t\t\t403,\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\tif (response.status === 404) {\n\t\t\t\t\tthrow new OrchestratorNotFoundError(\n\t\t\t\t\t\t\"resource\",\n\t\t\t\t\t\tpath,\n\t\t\t\t\t\t`Endpoint returned 404: ${method} ${path}`,\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\tif (response.status >= 500) {\n\t\t\t\t\tif (attempt === this._maxRetries) {\n\t\t\t\t\t\t// Fall through to error handling below\n\t\t\t\t\t} else {\n\t\t\t\t\t\tconst delay = RETRY_BACKOFF_BASE * 2 ** (attempt - 1);\n\t\t\t\t\t\tconsole.warn(\n\t\t\t\t\t\t\t`Server error ${response.status} (attempt ${attempt}/${this._maxRetries}), retrying in ${delay}ms`,\n\t\t\t\t\t\t);\n\t\t\t\t\t\tawait sleep(delay);\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (opts?.rawResponse) {\n\t\t\t\t\treturn response;\n\t\t\t\t}\n\n\t\t\t\tif (response.ok) {\n\t\t\t\t\tconst contentType = response.headers.get(\"content-type\") ?? \"\";\n\t\t\t\t\tif (contentType.includes(\"application/json\")) {\n\t\t\t\t\t\treturn response.json() as Promise<unknown>;\n\t\t\t\t\t}\n\t\t\t\t\treturn { _text: await response.text() };\n\t\t\t\t}\n\n\t\t\t\t// Error handling\n\t\t\t\tlet errorMessage: string;\n\t\t\t\tlet errorCode: string | null = null;\n\t\t\t\tlet errorDetails: Record<string, unknown> | null = null;\n\t\t\t\ttry {\n\t\t\t\t\tconst body = (await response.json()) as Record<string, unknown>;\n\t\t\t\t\tconst error = (body.error ?? body) as Record<string, unknown>;\n\t\t\t\t\terrorCode = (error.code as string) ?? null;\n\t\t\t\t\terrorMessage = (error.message as string) ?? (await response.text());\n\t\t\t\t\terrorDetails = (error.details as Record<string, unknown>) ?? null;\n\t\t\t\t} catch {\n\t\t\t\t\terrorMessage = await response.text();\n\t\t\t\t}\n\n\t\t\t\tthrow new OrchestratorAPIError(\n\t\t\t\t\terrorMessage,\n\t\t\t\t\tresponse.status,\n\t\t\t\t\terrorCode,\n\t\t\t\t\terrorDetails ?? undefined,\n\t\t\t\t);\n\t\t\t} catch (err) {\n\t\t\t\tif (\n\t\t\t\t\terr instanceof OrchestratorAPIError ||\n\t\t\t\t\terr instanceof OrchestratorAuthError ||\n\t\t\t\t\terr instanceof OrchestratorNotFoundError\n\t\t\t\t) {\n\t\t\t\t\tthrow err;\n\t\t\t\t}\n\t\t\t\tif (err instanceof OrchestratorConnectionError) {\n\t\t\t\t\tthrow err;\n\t\t\t\t}\n\t\t\t\tif (err instanceof DOMException && err.name === \"AbortError\") {\n\t\t\t\t\tif (attempt === this._maxRetries) {\n\t\t\t\t\t\tthrow new OrchestratorConnectionError(\n\t\t\t\t\t\t\t`Request timed out after ${this._timeoutMs}ms (${this._maxRetries} attempts): ${method} ${path}`,\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t\tconst delay = RETRY_BACKOFF_BASE * 2 ** (attempt - 1);\n\t\t\t\t\tconsole.warn(\n\t\t\t\t\t\t`Request timed out (attempt ${attempt}/${this._maxRetries}), retrying in ${delay}ms`,\n\t\t\t\t\t);\n\t\t\t\t\tawait sleep(delay);\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tif (err instanceof TypeError) {\n\t\t\t\t\t// fetch network errors are TypeErrors\n\t\t\t\t\tif (attempt === this._maxRetries) {\n\t\t\t\t\t\tthrow new OrchestratorConnectionError(\n\t\t\t\t\t\t\t`Orchestrator unreachable after ${this._maxRetries} attempts: ${(err as Error).message}`,\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t\tconst delay = RETRY_BACKOFF_BASE * 2 ** (attempt - 1);\n\t\t\t\t\tconsole.warn(\n\t\t\t\t\t\t`Request failed (attempt ${attempt}/${this._maxRetries}), retrying in ${delay}ms: ${(err as Error).message}`,\n\t\t\t\t\t);\n\t\t\t\t\tawait sleep(delay);\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tthrow err;\n\t\t\t}\n\t\t}\n\n\t\tthrow new OrchestratorConnectionError(\n\t\t\t`Request failed after ${this._maxRetries} attempts: ${method} ${path}`,\n\t\t);\n\t}\n\n\tprotected async _get<T>(\n\t\tpath: string,\n\t\tparams?: Record<string, string | number | boolean | undefined>,\n\t): Promise<T> {\n\t\treturn (await this._request(\"GET\", path, { params })) as T;\n\t}\n\n\tprotected async _post<T>(path: string, body?: unknown): Promise<T> {\n\t\treturn (await this._request(\"POST\", path, { jsonBody: body })) as T;\n\t}\n\n\tprotected async _put<T>(path: string, body?: unknown): Promise<T> {\n\t\treturn (await this._request(\"PUT\", path, { jsonBody: body })) as T;\n\t}\n\n\tprotected async _delete<T>(path: string): Promise<T> {\n\t\treturn (await this._request(\"DELETE\", path)) as T;\n\t}\n\n\t// ------------------------------------------------------------------\n\t// Tasks\n\t// ------------------------------------------------------------------\n\n\tasync listTasks(params?: {\n\t\tpage?: number;\n\t\tlimit?: number;\n\t\torderBy?: string;\n\t\torderDirection?: string;\n\t\tworkflowId?: string;\n\t\tlocale?: string;\n\t}): Promise<TaskListResult> {\n\t\tconst headers: Record<string, string> = {};\n\t\tif (params?.locale) headers[\"X-Locale\"] = params.locale;\n\t\tconst data = (await this._request(\"GET\", \"/tasks\", {\n\t\t\tparams: {\n\t\t\t\tpage: params?.page,\n\t\t\t\tlimit: params?.limit,\n\t\t\t\torder_by: params?.orderBy,\n\t\t\t\torder_direction: params?.orderDirection,\n\t\t\t\tworkflow_id: params?.workflowId,\n\t\t\t},\n\t\t\theaders,\n\t\t})) as Record<string, unknown>;\n\t\tconst tasks = ((data.tasks ?? []) as Record<string, unknown>[]).map(\n\t\t\tbuildTaskSummary,\n\t\t);\n\t\treturn { tasks, pagination: buildPagination(data) };\n\t}\n\n\tasync createTask(params: {\n\t\tworkflowId: string;\n\t\tgoalPrompt: string;\n\t\tmaxIterations?: number;\n\t\treasoningEffort?: string;\n\t\tsystemPrompt?: string;\n\t\tdeveloperPrompt?: string;\n\t\tticketId?: string;\n\t\tticketText?: string;\n\t\tsummary?: string;\n\t\tproblemSummary?: string;\n\t\tsolutionStrategy?: string;\n\t\tagentModelId?: string;\n\t\torchestratorModelId?: string;\n\t\tavailableTools?: string[];\n\t\tattachmentIds?: string[];\n\t\toptions?: Record<string, boolean>;\n\t}): Promise<TaskCreateResponse> {\n\t\tconst data = await this._post<Record<string, unknown>>(\"/task/create\", {\n\t\t\tworkflow_id: params.workflowId,\n\t\t\tgoal_prompt: params.goalPrompt,\n\t\t\tmax_iterations: params.maxIterations,\n\t\t\treasoning_effort: params.reasoningEffort,\n\t\t\tsystem_prompt: params.systemPrompt,\n\t\t\tdeveloper_prompt: params.developerPrompt,\n\t\t\tticket_id: params.ticketId,\n\t\t\tticket_text: params.ticketText,\n\t\t\tsummary: params.summary,\n\t\t\tproblem_summary: params.problemSummary,\n\t\t\tsolution_strategy: params.solutionStrategy,\n\t\t\tagent_model_id: params.agentModelId,\n\t\t\torchestrator_model_id: params.orchestratorModelId,\n\t\t\tavailable_tools: params.availableTools,\n\t\t\tattachment_ids: params.attachmentIds,\n\t\t\toptions: params.options,\n\t\t});\n\t\treturn {\n\t\t\ttaskId: (data.taskId ?? data.task_id ?? \"\") as string,\n\t\t\tstatus: (data.status ?? \"\") as string,\n\t\t};\n\t}\n\n\tasync getTaskStatus(taskId: string, locale?: string): Promise<TaskDetail> {\n\t\tconst headers: Record<string, string> = {};\n\t\tif (locale) headers[\"X-Locale\"] = locale;\n\t\tconst data = (await this._request(\"GET\", \"/task/status\", {\n\t\t\tparams: { task_id: taskId },\n\t\t\theaders,\n\t\t})) as Record<string, unknown>;\n\t\treturn {\n\t\t\t...buildTaskSummary(data),\n\t\t\tsubtaskIds: (data.subtaskIds ?? data.subtask_ids ?? []) as string[],\n\t\t\tworkflowData: (data.workflowData ?? data.workflow_data ?? null) as Record<\n\t\t\t\tstring,\n\t\t\t\tunknown\n\t\t\t> | null,\n\t\t\toptions: (data.options ?? null) as Record<string, unknown> | null,\n\t\t};\n\t}\n\n\tasync setTaskStatus(\n\t\ttaskId: string,\n\t\tstatus: string,\n\t): Promise<SuccessResponse> {\n\t\tconst data = await this._post<Record<string, unknown>>(\"/task/set_status\", {\n\t\t\ttask_id: taskId,\n\t\t\tstatus,\n\t\t});\n\t\treturn { message: (data.message ?? \"\") as string };\n\t}\n\n\tasync getTaskConversation(\n\t\ttaskId: string,\n\t\tparams?: {\n\t\t\tincludeSummaries?: boolean;\n\t\t\texcludeArchived?: boolean;\n\t\t\tlocale?: string;\n\t\t},\n\t): Promise<ConversationResult> {\n\t\tconst headers: Record<string, string> = {};\n\t\tif (params?.locale) headers[\"X-Locale\"] = params.locale;\n\t\tconst data = (await this._request(\"GET\", \"/task/conversation\", {\n\t\t\tparams: {\n\t\t\t\ttask_id: taskId,\n\t\t\t\tinclude_summaries: params?.includeSummaries,\n\t\t\t\texclude_archived: params?.excludeArchived,\n\t\t\t},\n\t\t\theaders,\n\t\t})) as Record<string, unknown>;\n\t\treturn {\n\t\t\ttaskId: (data.taskId ?? data.task_id ?? taskId) as string,\n\t\t\tconversation: (\n\t\t\t\t(data.conversation ?? []) as Record<string, unknown>[]\n\t\t\t).map((m) => m as unknown as Message),\n\t\t};\n\t}\n\n\tasync getArchivedMessageContent(\n\t\ttaskId: string,\n\t\tmessageId: number,\n\t): Promise<Record<string, unknown>> {\n\t\treturn this._get<Record<string, unknown>>(\n\t\t\t\"/task/message/archived-content\",\n\t\t\t{ task_id: taskId, message_id: messageId },\n\t\t);\n\t}\n\n\tasync getTaskCompactions(taskId: string): Promise<CompactionEvent[]> {\n\t\treturn this._get<CompactionEvent[]>(\"/task/compactions\", {\n\t\t\ttask_id: taskId,\n\t\t});\n\t}\n\n\tasync getTaskJournal(taskId: string): Promise<TaskJournal> {\n\t\tconst data = await this._get<Record<string, unknown>>(\"/task/journal\", {\n\t\t\ttask_id: taskId,\n\t\t});\n\t\treturn {\n\t\t\ttaskId: (data.taskId ?? data.task_id ?? taskId) as string,\n\t\t\texists: (data.exists ?? false) as boolean,\n\t\t\tcontent: (data.content ?? null) as string | null,\n\t\t\tupdatedAt: (data.updated_at ?? data.updatedAt ?? null) as string | null,\n\t\t\tversion: (data.version ?? null) as number | null,\n\t\t\tsectionsOverBudget: (data.sections_over_budget ??\n\t\t\t\tdata.sectionsOverBudget ??\n\t\t\t\tnull) as Record<string, number> | null,\n\t\t};\n\t}\n\n\tasync cancelTask(taskId: string): Promise<TaskCancelResponse> {\n\t\tconst data = await this._post<Record<string, unknown>>(\"/task/cancel\", {\n\t\t\ttask_id: taskId,\n\t\t});\n\t\treturn {\n\t\t\ttaskId: (data.taskId ?? data.task_id ?? taskId) as string,\n\t\t\tkilled: (data.killed ?? false) as boolean,\n\t\t\tvia: (data.via ?? \"none\") as \"local\" | \"remote\" | \"none\" | \"fallback\",\n\t\t\tholderId: (data.holderId ?? data.holder_id ?? undefined) as\n\t\t\t\t| string\n\t\t\t\t| undefined,\n\t\t\treason: (data.reason ?? undefined) as string | undefined,\n\t\t\tmessage: (data.message ?? \"\") as string,\n\t\t};\n\t}\n\n\tasync deleteTask(taskId: string): Promise<TaskDeleteResult> {\n\t\tconst data = await this._post<Record<string, unknown>>(\"/task/delete\", {\n\t\t\ttask_id: taskId,\n\t\t});\n\t\treturn {\n\t\t\tdeletedTasks: (data.deletedTasks ?? data.deleted_tasks ?? []) as string[],\n\t\t\tfailedTasks: (data.failedTasks ?? data.failed_tasks ?? []) as string[],\n\t\t\ttotalDeleted: (data.totalDeleted ?? data.total_deleted ?? 0) as number,\n\t\t\ttotalFailed: (data.totalFailed ?? data.total_failed ?? 0) as number,\n\t\t};\n\t}\n\n\tasync deleteTasks(taskIds: string[]): Promise<TaskDeleteResult> {\n\t\tconst data = await this._post<Record<string, unknown>>(\n\t\t\t\"/task/delete/multiple\",\n\t\t\t{ task_ids: taskIds },\n\t\t);\n\t\treturn {\n\t\t\tdeletedTasks: (data.deletedTasks ?? data.deleted_tasks ?? []) as string[],\n\t\t\tfailedTasks: (data.failedTasks ?? data.failed_tasks ?? []) as string[],\n\t\t\ttotalDeleted: (data.totalDeleted ?? data.total_deleted ?? 0) as number,\n\t\t\ttotalFailed: (data.totalFailed ?? data.total_failed ?? 0) as number,\n\t\t};\n\t}\n\n\t// ------------------------------------------------------------------\n\t// Attachments\n\t// ------------------------------------------------------------------\n\n\tasync uploadAttachment(\n\t\tfile: File | Blob,\n\t\tfilename?: string,\n\t): Promise<AttachmentUploadResponse> {\n\t\tconst formData = new FormData();\n\t\tformData.append(\"file\", file, filename);\n\t\tconst headers = await this._resolveHeaders();\n\t\t// Don't set Content-Type for FormData — browser sets it with boundary\n\t\tconst response = await this._fetch(this._makeUrl(\"/attachment\"), {\n\t\t\tmethod: \"POST\",\n\t\t\theaders: { ...headers },\n\t\t\tbody: formData,\n\t\t});\n\t\tif (!response.ok) {\n\t\t\tthrow new OrchestratorAPIError(\n\t\t\t\t`Attachment upload failed: ${response.statusText}`,\n\t\t\t\tresponse.status,\n\t\t\t);\n\t\t}\n\t\tconst data = (await response.json()) as Record<string, unknown>;\n\t\treturn {\n\t\t\tid: (data.id ?? \"\") as string,\n\t\t\tfilename: (data.filename ?? \"\") as string,\n\t\t\tmimeType: (data.mimeType ?? data.mime_type ?? \"\") as string,\n\t\t\tsize: (data.size ?? 0) as number,\n\t\t\twidth: (data.width ?? null) as number | null,\n\t\t\theight: (data.height ?? null) as number | null,\n\t\t\ttokenCount: (data.tokenCount ?? data.token_count ?? null) as\n\t\t\t\t| number\n\t\t\t\t| null,\n\t\t};\n\t}\n\n\tasync downloadAttachment(attachmentId: string): Promise<Blob> {\n\t\tconst headers = await this._resolveHeaders();\n\t\tconst response = await this._fetch(\n\t\t\tthis._makeUrl(`/attachment/${attachmentId}`),\n\t\t\t{ headers },\n\t\t);\n\t\tif (!response.ok) {\n\t\t\tthrow new OrchestratorAPIError(\n\t\t\t\t`Attachment download failed: ${response.statusText}`,\n\t\t\t\tresponse.status,\n\t\t\t);\n\t\t}\n\t\treturn response.blob();\n\t}\n\n\t// ------------------------------------------------------------------\n\t// Interactive workflow\n\t// ------------------------------------------------------------------\n\n\tasync sendInteractiveMessage(\n\t\ttaskId: string,\n\t\tmessage: string,\n\t\tattachmentIds?: string[],\n\t): Promise<SuccessResponse> {\n\t\tconst data = await this._post<Record<string, unknown>>(\n\t\t\t\"/task/interactive/message\",\n\t\t\t{ task_id: taskId, message, attachment_ids: attachmentIds },\n\t\t);\n\t\treturn { message: (data.message ?? \"\") as string };\n\t}\n\n\tasync markInteractiveComplete(taskId: string): Promise<SuccessResponse> {\n\t\tconst data = await this._post<Record<string, unknown>>(\n\t\t\t\"/task/interactive/mark_complete\",\n\t\t\t{ task_id: taskId },\n\t\t);\n\t\treturn { message: (data.message ?? \"\") as string };\n\t}\n\n\tasync markInteractiveFailed(taskId: string): Promise<SuccessResponse> {\n\t\tconst data = await this._post<Record<string, unknown>>(\n\t\t\t\"/task/interactive/mark_failed\",\n\t\t\t{ task_id: taskId },\n\t\t);\n\t\treturn { message: (data.message ?? \"\") as string };\n\t}\n\n\tasync approveInteractiveAction(\n\t\ttaskId: string,\n\t\tapproved = true,\n\t): Promise<SuccessResponse> {\n\t\tconst data = await this._post<Record<string, unknown>>(\n\t\t\t\"/task/interactive/action\",\n\t\t\t{ task_id: taskId, approved },\n\t\t);\n\t\treturn { message: (data.message ?? \"\") as string };\n\t}\n\n\tasync stopInteractive(taskId: string): Promise<SuccessResponse> {\n\t\tconst data = await this._post<Record<string, unknown>>(\n\t\t\t\"/task/interactive/stop\",\n\t\t\t{ task_id: taskId },\n\t\t);\n\t\treturn { message: (data.message ?? \"\") as string };\n\t}\n\n\t// ------------------------------------------------------------------\n\t// Proactive workflow\n\t// ------------------------------------------------------------------\n\n\tasync sendProactiveGuide(\n\t\ttaskId: string,\n\t\tmessage: string,\n\t\tattachmentIds?: string[],\n\t): Promise<SuccessResponse> {\n\t\tconst data = await this._post<Record<string, unknown>>(\n\t\t\t\"/task/proactive/guide\",\n\t\t\t{ task_id: taskId, message, attachment_ids: attachmentIds },\n\t\t);\n\t\treturn { message: (data.message ?? \"\") as string };\n\t}\n\n\tasync respondProactiveHelp(\n\t\ttaskId: string,\n\t\tresponse: string,\n\t): Promise<SuccessResponse> {\n\t\tconst data = await this._post<Record<string, unknown>>(\n\t\t\t\"/task/proactive/help\",\n\t\t\t{ task_id: taskId, response },\n\t\t);\n\t\treturn { message: (data.message ?? \"\") as string };\n\t}\n\n\tasync approveProactiveAction(\n\t\ttaskId: string,\n\t\tapproved = true,\n\t): Promise<SuccessResponse> {\n\t\tconst data = await this._post<Record<string, unknown>>(\n\t\t\t\"/task/proactive/action\",\n\t\t\t{ task_id: taskId, approved },\n\t\t);\n\t\treturn { message: (data.message ?? \"\") as string };\n\t}\n\n\t// ------------------------------------------------------------------\n\t// Ticket workflow\n\t// ------------------------------------------------------------------\n\n\tasync sendTicketGuide(\n\t\ttaskId: string,\n\t\tmessage: string,\n\t\tattachmentIds?: string[],\n\t): Promise<SuccessResponse> {\n\t\tconst data = await this._post<Record<string, unknown>>(\n\t\t\t\"/task/ticket/guide\",\n\t\t\t{ task_id: taskId, message, attachment_ids: attachmentIds },\n\t\t);\n\t\treturn { message: (data.message ?? \"\") as string };\n\t}\n\n\tasync respondTicketHelp(\n\t\ttaskId: string,\n\t\tresponse: string,\n\t): Promise<SuccessResponse> {\n\t\tconst data = await this._post<Record<string, unknown>>(\n\t\t\t\"/task/ticket/help\",\n\t\t\t{ task_id: taskId, response },\n\t\t);\n\t\treturn { message: (data.message ?? \"\") as string };\n\t}\n\n\tasync approveTicketAction(\n\t\ttaskId: string,\n\t\tapproved = true,\n\t): Promise<SuccessResponse> {\n\t\tconst data = await this._post<Record<string, unknown>>(\n\t\t\t\"/task/ticket/action\",\n\t\t\t{ task_id: taskId, approved },\n\t\t);\n\t\treturn { message: (data.message ?? \"\") as string };\n\t}\n\n\tasync wakeTicket(taskId: string): Promise<SuccessResponse> {\n\t\tconst data = await this._post<Record<string, unknown>>(\n\t\t\t\"/task/ticket/wake\",\n\t\t\t{ task_id: taskId },\n\t\t);\n\t\treturn { message: (data.message ?? \"\") as string };\n\t}\n\n\t// ------------------------------------------------------------------\n\t// Matrix workflow\n\t// ------------------------------------------------------------------\n\n\tasync sendMatrixMessage(\n\t\ttaskId: string,\n\t\tmessage: string,\n\t\tattachmentIds?: string[],\n\t): Promise<SuccessResponse> {\n\t\tconst data = await this._post<Record<string, unknown>>(\n\t\t\t\"/task/matrix/message\",\n\t\t\t{ task_id: taskId, message, attachment_ids: attachmentIds },\n\t\t);\n\t\treturn { message: (data.message ?? \"\") as string };\n\t}\n\n\tasync markMatrixComplete(taskId: string): Promise<SuccessResponse> {\n\t\tconst data = await this._post<Record<string, unknown>>(\n\t\t\t\"/task/matrix/mark_complete\",\n\t\t\t{ task_id: taskId },\n\t\t);\n\t\treturn { message: (data.message ?? \"\") as string };\n\t}\n\n\tasync markMatrixFailed(taskId: string): Promise<SuccessResponse> {\n\t\tconst data = await this._post<Record<string, unknown>>(\n\t\t\t\"/task/matrix/mark_failed\",\n\t\t\t{ task_id: taskId },\n\t\t);\n\t\treturn { message: (data.message ?? \"\") as string };\n\t}\n\n\tasync approveMatrixAction(\n\t\ttaskId: string,\n\t\tapproved = true,\n\t): Promise<SuccessResponse> {\n\t\tconst data = await this._post<Record<string, unknown>>(\n\t\t\t\"/task/matrix/action\",\n\t\t\t{ task_id: taskId, approved },\n\t\t);\n\t\treturn { message: (data.message ?? \"\") as string };\n\t}\n\n\tasync getMatrixConversation(\n\t\ttaskId: string,\n\t\tphase?: number,\n\t\tincludeSummaries?: boolean,\n\t): Promise<MatrixConversationResult> {\n\t\tconst data = await this._get<Record<string, unknown>>(\n\t\t\t\"/task/matrix/conversation\",\n\t\t\t{\n\t\t\t\ttask_id: taskId,\n\t\t\t\tphase,\n\t\t\t\tinclude_summaries: includeSummaries,\n\t\t\t},\n\t\t);\n\t\treturn {\n\t\t\ttaskId: (data.taskId ?? data.task_id ?? taskId) as string,\n\t\t\tconversation: (\n\t\t\t\t(data.conversation ?? []) as Record<string, unknown>[]\n\t\t\t).map((m) => m as unknown as Message),\n\t\t};\n\t}\n\n\t// ------------------------------------------------------------------\n\t// VSA workflow\n\t// ------------------------------------------------------------------\n\n\tasync createVSATask(params: {\n\t\tuserId: string;\n\t\tgoalPrompt: string;\n\t\ttitle?: string;\n\t\tagentModelId?: string;\n\t\torchestratorModelId?: string;\n\t\tattachmentIds?: string[];\n\t\toptions?: Record<string, boolean>;\n\t\tdelegatedToken?: string;\n\t}): Promise<VSATaskCreateResponse> {\n\t\tconst body: Record<string, unknown> = {\n\t\t\tuser_id: params.userId,\n\t\t\tgoal_prompt: params.goalPrompt,\n\t\t\ttitle: params.title,\n\t\t\tagent_model_id: params.agentModelId,\n\t\t\torchestrator_model_id: params.orchestratorModelId,\n\t\t\tattachment_ids: params.attachmentIds,\n\t\t\toptions: params.options,\n\t\t};\n\t\tif (params.delegatedToken !== undefined) {\n\t\t\tbody.delegated_token = params.delegatedToken;\n\t\t}\n\t\tconst data = await this._post<Record<string, unknown>>(\n\t\t\t\"/task/vsa/create\",\n\t\t\tbody,\n\t\t);\n\t\treturn {\n\t\t\ttaskId: (data.taskId ?? data.task_id ?? \"\") as string,\n\t\t\tstatus: (data.status ?? \"\") as string,\n\t\t};\n\t}\n\n\tasync sendVSAMessage(\n\t\ttaskId: string,\n\t\tmessage: string,\n\t\toptions?: {\n\t\t\tattachmentIds?: string[];\n\t\t\t/** Short-lived AiDIT delegated token. When provided, overwrites the\n\t\t\t * token stored for the task. Omitting leaves the existing token unchanged. */\n\t\t\tdelegatedToken?: string;\n\t\t},\n\t): Promise<SuccessResponse> {\n\t\tconst body: Record<string, unknown> = {\n\t\t\ttask_id: taskId,\n\t\t\tmessage,\n\t\t\tattachment_ids: options?.attachmentIds,\n\t\t};\n\t\tif (options?.delegatedToken !== undefined) {\n\t\t\tbody.delegated_token = options.delegatedToken;\n\t\t}\n\t\tconst data = await this._post<Record<string, unknown>>(\n\t\t\t\"/task/vsa/message\",\n\t\t\tbody,\n\t\t);\n\t\treturn { message: (data.message ?? \"\") as string };\n\t}\n\n\tasync renameVSATask(taskId: string, title: string): Promise<SuccessResponse> {\n\t\tconst data = await this._post<Record<string, unknown>>(\"/task/vsa/rename\", {\n\t\t\ttask_id: taskId,\n\t\t\ttitle,\n\t\t});\n\t\treturn { message: (data.message ?? \"\") as string };\n\t}\n\n\tasync regenerateVSATitle(taskId: string): Promise<SuccessResponse> {\n\t\tconst data = await this._post<Record<string, unknown>>(\n\t\t\t\"/task/vsa/regenerate_title\",\n\t\t\t{ task_id: taskId },\n\t\t);\n\t\treturn { message: (data.message ?? \"\") as string };\n\t}\n\n\tasync markVSAComplete(taskId: string): Promise<SuccessResponse> {\n\t\tconst data = await this._post<Record<string, unknown>>(\n\t\t\t\"/task/vsa/mark_complete\",\n\t\t\t{ task_id: taskId },\n\t\t);\n\t\treturn { message: (data.message ?? \"\") as string };\n\t}\n\n\tasync markVSAFailed(taskId: string): Promise<SuccessResponse> {\n\t\tconst data = await this._post<Record<string, unknown>>(\n\t\t\t\"/task/vsa/mark_failed\",\n\t\t\t{ task_id: taskId },\n\t\t);\n\t\treturn { message: (data.message ?? \"\") as string };\n\t}\n\n\tasync stopVSA(taskId: string): Promise<SuccessResponse> {\n\t\tconst data = await this._post<Record<string, unknown>>(\"/task/vsa/stop\", {\n\t\t\ttask_id: taskId,\n\t\t});\n\t\treturn { message: (data.message ?? \"\") as string };\n\t}\n\n\tasync deleteVSA(taskId: string): Promise<SuccessResponse> {\n\t\tconst data = await this._post<Record<string, unknown>>(\"/task/vsa/delete\", {\n\t\t\ttask_id: taskId,\n\t\t});\n\t\treturn { message: (data.message ?? \"\") as string };\n\t}\n\n\tasync listVSATasks(\n\t\tuserId: string,\n\t\tparams?: { limit?: number; offset?: number },\n\t): Promise<TaskListResult> {\n\t\tconst data = await this._get<Record<string, unknown>>(\"/task/vsa/list\", {\n\t\t\tuser_id: userId,\n\t\t\tlimit: params?.limit,\n\t\t\toffset: params?.offset,\n\t\t});\n\t\tconst tasks = ((data.tasks ?? []) as Record<string, unknown>[]).map(\n\t\t\tbuildTaskSummary,\n\t\t);\n\t\treturn { tasks, pagination: buildPagination(data) };\n\t}\n\n\tasync searchVSATasks(\n\t\tuserId: string,\n\t\tquery: string,\n\t\tlimit?: number,\n\t): Promise<TaskListResult> {\n\t\tconst data = await this._get<Record<string, unknown>>(\"/task/vsa/search\", {\n\t\t\tuser_id: userId,\n\t\t\tquery,\n\t\t\tlimit,\n\t\t});\n\t\tconst tasks = ((data.tasks ?? []) as Record<string, unknown>[]).map(\n\t\t\tbuildTaskSummary,\n\t\t);\n\t\treturn { tasks, pagination: buildPagination(data) };\n\t}\n\n\tasync deleteVSATasksBulk(taskIds: string[]): Promise<TaskDeleteResult> {\n\t\tconst data = await this._post<Record<string, unknown>>(\n\t\t\t\"/task/vsa/delete_bulk\",\n\t\t\t{ task_ids: taskIds },\n\t\t);\n\t\treturn {\n\t\t\tdeletedTasks: (data.deletedTasks ?? data.deleted_tasks ?? []) as string[],\n\t\t\tfailedTasks: (data.failedTasks ?? data.failed_tasks ?? []) as string[],\n\t\t\ttotalDeleted: (data.totalDeleted ?? data.total_deleted ?? 0) as number,\n\t\t\ttotalFailed: (data.totalFailed ?? data.total_failed ?? 0) as number,\n\t\t};\n\t}\n\n\t// ------------------------------------------------------------------\n\t// MIO (self_managed) workflow\n\t// ------------------------------------------------------------------\n\n\tasync sendMioMessage(\n\t\ttaskId: string,\n\t\tmessage: string,\n\t\tattachmentIds?: string[],\n\t): Promise<SuccessResponse> {\n\t\tconst data = await this._post<Record<string, unknown>>(\n\t\t\t\"/task/self_managed/message\",\n\t\t\t{ task_id: taskId, message, attachment_ids: attachmentIds },\n\t\t);\n\t\treturn { message: (data.message ?? \"\") as string };\n\t}\n\n\tasync approveMioAction(\n\t\ttaskId: string,\n\t\tapproved = true,\n\t\tfeedback?: string,\n\t): Promise<SuccessResponse> {\n\t\tconst data = await this._post<Record<string, unknown>>(\n\t\t\t\"/task/self_managed/action\",\n\t\t\t{ task_id: taskId, approved, feedback },\n\t\t);\n\t\treturn { message: (data.message ?? \"\") as string };\n\t}\n\n\tasync wakeMio(taskId: string): Promise<SuccessResponse> {\n\t\tconst data = await this._post<Record<string, unknown>>(\n\t\t\t\"/task/self_managed/wake\",\n\t\t\t{ task_id: taskId },\n\t\t);\n\t\treturn { message: (data.message ?? \"\") as string };\n\t}\n\n\tasync sendMioUserAway(taskId: string): Promise<SuccessResponse> {\n\t\tconst data = await this._post<Record<string, unknown>>(\n\t\t\t\"/task/self_managed/user_away\",\n\t\t\t{ task_id: taskId },\n\t\t);\n\t\treturn { message: (data.message ?? \"\") as string };\n\t}\n\n\tasync markMioComplete(taskId: string): Promise<SuccessResponse> {\n\t\tconst data = await this._post<Record<string, unknown>>(\n\t\t\t\"/task/self_managed/mark_complete\",\n\t\t\t{ task_id: taskId },\n\t\t);\n\t\treturn { message: (data.message ?? \"\") as string };\n\t}\n\n\tasync markMioFailed(taskId: string): Promise<SuccessResponse> {\n\t\tconst data = await this._post<Record<string, unknown>>(\n\t\t\t\"/task/self_managed/mark_failed\",\n\t\t\t{ task_id: taskId },\n\t\t);\n\t\treturn { message: (data.message ?? \"\") as string };\n\t}\n\n\tasync archiveMio(taskId: string): Promise<SuccessResponse> {\n\t\tconst data = await this._post<Record<string, unknown>>(\n\t\t\t\"/task/self_managed/archive\",\n\t\t\t{ task_id: taskId },\n\t\t);\n\t\treturn { message: (data.message ?? \"\") as string };\n\t}\n\n\tasync getMioContext(taskId: string): Promise<MioContext> {\n\t\tconst data = await this._get<Record<string, unknown>>(\n\t\t\t\"/task/self_managed/context\",\n\t\t\t{ task_id: taskId },\n\t\t);\n\t\treturn {\n\t\t\ttaskId: (data.taskId ?? data.task_id ?? taskId) as string,\n\t\t\tmodelId: (data.modelId ?? data.model_id ?? \"\") as string,\n\t\t\tcurrentTokens: (data.currentTokens ?? data.current_tokens ?? 0) as number,\n\t\t\tcontextLimit: (data.contextLimit ?? data.context_limit ?? 0) as number,\n\t\t\tusagePercentage: (data.usagePercentage ??\n\t\t\t\tdata.usage_percentage ??\n\t\t\t\t0) as number,\n\t\t\ttotalMessages: (data.totalMessages ?? data.total_messages ?? 0) as number,\n\t\t\tactiveMessages: (data.activeMessages ??\n\t\t\t\tdata.active_messages ??\n\t\t\t\t0) as number,\n\t\t\tarchivedMessages: (data.archivedMessages ??\n\t\t\t\tdata.archived_messages ??\n\t\t\t\t0) as number,\n\t\t\tmessagesWithoutTokenCount: (data.messagesWithoutTokenCount ??\n\t\t\t\tdata.messages_without_token_count ??\n\t\t\t\t0) as number,\n\t\t};\n\t}\n\n\tasync getMioMemories(\n\t\ttaskId: string,\n\t\tincludeCommon?: boolean,\n\t): Promise<MioMemoriesResult> {\n\t\tconst data = await this._get<Record<string, unknown>>(\n\t\t\t\"/task/self_managed/memories\",\n\t\t\t{ task_id: taskId, include_common: includeCommon },\n\t\t);\n\t\treturn {\n\t\t\tmemories: (data.memories ?? []) as MioMemoriesResult[\"memories\"],\n\t\t\ttotal: (data.total ?? 0) as number,\n\t\t};\n\t}\n\n\t// ------------------------------------------------------------------\n\t// Tools\n\t// ------------------------------------------------------------------\n\n\tasync listTools(): Promise<ToolsListResult> {\n\t\tconst data = await this._get<Record<string, unknown>>(\"/tools/all\");\n\t\treturn {\n\t\t\ttools: ((data.tools ?? []) as Record<string, unknown>[]).map(\n\t\t\t\t(t) => t as unknown as ToolInfo,\n\t\t\t),\n\t\t\ttotalTools: (data.totalTools ?? data.total_tools ?? 0) as number,\n\t\t\tservers: (data.servers ?? []) as string[],\n\t\t};\n\t}\n\n\tasync getToolCatalog(): Promise<ToolCatalogResult> {\n\t\treturn this._get<ToolCatalogResult>(\"/tools/catalog\");\n\t}\n\n\tasync refreshMCPTools(): Promise<MCPRefreshResult> {\n\t\treturn this._post<MCPRefreshResult>(\"/tools/mcp/refresh\");\n\t}\n\n\tasync validateToolCatalog(): Promise<CatalogValidationResult> {\n\t\treturn this._get<CatalogValidationResult>(\"/tools/validate\");\n\t}\n\n\t// ------------------------------------------------------------------\n\t// Debug / Admin\n\t// ------------------------------------------------------------------\n\n\tasync getWorkflowStates(): Promise<WorkflowStates> {\n\t\tconst data = await this._get<Record<string, unknown>>(\n\t\t\t\"/debug/workflow_states\",\n\t\t);\n\t\treturn {\n\t\t\tvalidStates: (data.validStates ?? data.valid_states ?? {}) as Record<\n\t\t\t\tstring,\n\t\t\t\tstring[]\n\t\t\t>,\n\t\t\tprocessableStates: (data.processableStates ??\n\t\t\t\tdata.processable_states ??\n\t\t\t\t{}) as Record<string, string[]>,\n\t\t\twaitingStates: (data.waitingStates ??\n\t\t\t\tdata.waiting_states ??\n\t\t\t\t{}) as Record<string, string[]>,\n\t\t\tstoppedStates: (data.stoppedStates ??\n\t\t\t\tdata.stopped_states ??\n\t\t\t\t{}) as Record<string, string[]>,\n\t\t\tintermediateStates: (data.intermediateStates ??\n\t\t\t\tdata.intermediate_states ??\n\t\t\t\t{}) as Record<string, string[]>,\n\t\t};\n\t}\n\n\tasync updateTaskModels(\n\t\ttaskId: string,\n\t\tmodels: { agentModelId?: string; orchestratorModelId?: string },\n\t): Promise<SuccessResponse> {\n\t\tconst data = await this._post<Record<string, unknown>>(\n\t\t\t\"/debug/task/models\",\n\t\t\t{\n\t\t\t\ttask_id: taskId,\n\t\t\t\tagent_model_id: models.agentModelId,\n\t\t\t\torchestrator_model_id: models.orchestratorModelId,\n\t\t\t},\n\t\t);\n\t\treturn { message: (data.message ?? \"\") as string };\n\t}\n\n\tasync updateTaskIteration(\n\t\ttaskId: string,\n\t\titeration?: number,\n\t\tmaxIterations?: number,\n\t): Promise<SuccessResponse> {\n\t\tconst data = await this._post<Record<string, unknown>>(\n\t\t\t\"/debug/task/iteration\",\n\t\t\t{ task_id: taskId, iteration, max_iterations: maxIterations },\n\t\t);\n\t\treturn { message: (data.message ?? \"\") as string };\n\t}\n\n\tasync updateTaskWorkflowData(\n\t\ttaskId: string,\n\t\tworkflowData: Record<string, unknown>,\n\t): Promise<SuccessResponse> {\n\t\tconst data = await this._post<Record<string, unknown>>(\n\t\t\t\"/debug/task/workflow_data\",\n\t\t\t{ task_id: taskId, workflow_data: workflowData },\n\t\t);\n\t\treturn { message: (data.message ?? \"\") as string };\n\t}\n\n\tasync deleteMessage(\n\t\ttaskId: string,\n\t\tmessageId: number,\n\t): Promise<SuccessResponse> {\n\t\tconst data = await this._post<Record<string, unknown>>(\n\t\t\t\"/debug/task/message/delete\",\n\t\t\t{ task_id: taskId, message_id: messageId },\n\t\t);\n\t\treturn { message: (data.message ?? \"\") as string };\n\t}\n\n\tasync deleteMessages(\n\t\ttaskId: string,\n\t\tmessageIds: number[],\n\t): Promise<MessageDeleteMultipleResult> {\n\t\tconst data = await this._post<Record<string, unknown>>(\n\t\t\t\"/debug/task/message/delete/multiple\",\n\t\t\t{ task_id: taskId, message_ids: messageIds },\n\t\t);\n\t\treturn {\n\t\t\tdeletedIds: (data.deletedIds ?? data.deleted_ids ?? []) as number[],\n\t\t\tfailedIds: (data.failedIds ?? data.failed_ids ?? []) as number[],\n\t\t\ttotalDeleted: (data.totalDeleted ?? data.total_deleted ?? 0) as number,\n\t\t\ttotalFailed: (data.totalFailed ?? data.total_failed ?? 0) as number,\n\t\t};\n\t}\n\n\tasync updateMessage(\n\t\ttaskId: string,\n\t\tmessageId: number,\n\t\tupdate: { content?: string; reasoning?: string },\n\t): Promise<SuccessResponse> {\n\t\tconst data = await this._post<Record<string, unknown>>(\n\t\t\t\"/debug/task/message/update\",\n\t\t\t{ task_id: taskId, message_id: messageId, ...update },\n\t\t);\n\t\treturn { message: (data.message ?? \"\") as string };\n\t}\n\n\tasync resetMatrixToPhase(\n\t\ttaskId: string,\n\t\tphase: number,\n\t): Promise<SuccessResponse> {\n\t\tconst data = await this._post<Record<string, unknown>>(\n\t\t\t\"/debug/task/matrix/reset_to_phase\",\n\t\t\t{ task_id: taskId, phase },\n\t\t);\n\t\treturn { message: (data.message ?? \"\") as string };\n\t}\n\n\tasync getMessageTranslations(\n\t\ttaskId: string,\n\t\tmessageId: number,\n\t): Promise<MessageTranslationsResult> {\n\t\tconst data = await this._get<Record<string, unknown>>(\n\t\t\t`/debug/task/${taskId}/message/${messageId}/translations`,\n\t\t);\n\t\treturn {\n\t\t\tmessageId: (data.messageId ?? data.message_id ?? messageId) as number,\n\t\t\ttranslations: (\n\t\t\t\t(data.translations ?? []) as Record<string, unknown>[]\n\t\t\t).map((t) => t as unknown as MessageTranslation),\n\t\t};\n\t}\n\n\t// ------------------------------------------------------------------\n\t// Error events\n\t// ------------------------------------------------------------------\n\n\tasync listErrors(params?: {\n\t\tpage?: number;\n\t\tlimit?: number;\n\t\ttaskId?: string;\n\t\tseverity?: string[];\n\t\tsource?: string[];\n\t\tworkflowId?: string;\n\t\terrorCode?: string;\n\t\texceptionType?: string;\n\t\tholderId?: string;\n\t\trequestId?: string;\n\t\tsearch?: string;\n\t\tsince?: string;\n\t\tuntil?: string;\n\t\torderDirection?: string;\n\t}): Promise<ErrorEventListResult> {\n\t\tconst authHeaders = await this._resolveHeaders();\n\t\tconst url = new URL(this._makeUrl(\"/errors\"));\n\t\tif (params?.page !== undefined)\n\t\t\turl.searchParams.set(\"page\", String(params.page));\n\t\tif (params?.limit !== undefined)\n\t\t\turl.searchParams.set(\"limit\", String(params.limit));\n\t\tif (params?.taskId) url.searchParams.set(\"task_id\", params.taskId);\n\t\tif (params?.workflowId)\n\t\t\turl.searchParams.set(\"workflow_id\", params.workflowId);\n\t\tif (params?.errorCode) url.searchParams.set(\"error_code\", params.errorCode);\n\t\tif (params?.exceptionType)\n\t\t\turl.searchParams.set(\"exception_type\", params.exceptionType);\n\t\tif (params?.holderId) url.searchParams.set(\"holder_id\", params.holderId);\n\t\tif (params?.requestId) url.searchParams.set(\"request_id\", params.requestId);\n\t\tif (params?.search) url.searchParams.set(\"search\", params.search);\n\t\tif (params?.since) url.searchParams.set(\"since\", params.since);\n\t\tif (params?.until) url.searchParams.set(\"until\", params.until);\n\t\tif (params?.orderDirection)\n\t\t\turl.searchParams.set(\"order_direction\", params.orderDirection);\n\t\t// Multi-value params: repeat for each value\n\t\tfor (const s of params?.severity ?? []) {\n\t\t\turl.searchParams.append(\"severity\", s);\n\t\t}\n\t\tfor (const s of params?.source ?? []) {\n\t\t\turl.searchParams.append(\"source\", s);\n\t\t}\n\n\t\tconst response = await this._fetch(url.toString(), {\n\t\t\tmethod: \"GET\",\n\t\t\theaders: { ...authHeaders },\n\t\t});\n\t\tif (!response.ok) {\n\t\t\tthrow new OrchestratorAPIError(\n\t\t\t\t`listErrors failed: ${response.statusText}`,\n\t\t\t\tresponse.status,\n\t\t\t);\n\t\t}\n\t\tconst data = (await response.json()) as Record<string, unknown>;\n\t\treturn {\n\t\t\titems: (\n\t\t\t\t(data.items ?? data.errors ?? []) as Record<string, unknown>[]\n\t\t\t).map((e) => e as unknown as ErrorEventDetail),\n\t\t\tpagination: buildPagination(data),\n\t\t};\n\t}\n\n\tasync getErrorDetail(errorId: string): Promise<ErrorEventDetail> {\n\t\treturn this._get<ErrorEventDetail>(`/errors/${errorId}`);\n\t}\n\n\tasync getErrorStats(since?: string, topN = 10): Promise<ErrorStatsResult> {\n\t\tconst params: Record<string, string | number | boolean | undefined> = {\n\t\t\ttop_n: topN,\n\t\t};\n\t\tif (since) params.since = since;\n\t\treturn this._get<ErrorStatsResult>(\"/errors/stats\", params);\n\t}\n\n\tasync countErrors(since?: string): Promise<ErrorCountResult> {\n\t\tconst params: Record<string, string | number | boolean | undefined> = {};\n\t\tif (since) params.since = since;\n\t\treturn this._get<ErrorCountResult>(\"/errors/count\", params);\n\t}\n\n\tasync purgeErrors(): Promise<ErrorPurgeResult> {\n\t\treturn this._delete<ErrorPurgeResult>(\"/errors\");\n\t}\n\n\t// ------------------------------------------------------------------\n\t// Health / Metrics\n\t// ------------------------------------------------------------------\n\n\tasync health(): Promise<HealthStatus> {\n\t\treturn this._get<HealthStatus>(\"/health\");\n\t}\n\n\tasync healthDetailed(): Promise<HealthDetail> {\n\t\treturn this._get<HealthDetail>(\"/health/detailed\");\n\t}\n\n\tasync ready(): Promise<ReadinessResult> {\n\t\treturn this._get<ReadinessResult>(\"/ready\");\n\t}\n\n\tasync healthLeader(): Promise<LeaderStatus> {\n\t\treturn this._get<LeaderStatus>(\"/health/leader\");\n\t}\n\n\tasync getMetrics(types?: string): Promise<MetricSnapshot> {\n\t\tconst params: Record<string, string | number | boolean | undefined> = {};\n\t\tif (types) params.types = types;\n\t\treturn this._get<MetricSnapshot>(\"/metrics\", params);\n\t}\n\n\t// ------------------------------------------------------------------\n\t// Configuration\n\t// ------------------------------------------------------------------\n\n\tasync getSystemStatus(): Promise<SystemStatus> {\n\t\treturn this._get<SystemStatus>(\"/configuration/system/status\");\n\t}\n\n\tasync updateSettings(\n\t\tsettings: Record<string, unknown>,\n\t): Promise<SystemStatus> {\n\t\treturn this._post<SystemStatus>(\"/configuration/system/settings\", settings);\n\t}\n\n\tasync getConfigurationStatus(): Promise<ConfigurationStatus> {\n\t\treturn this._get<ConfigurationStatus>(\"/configuration/status\");\n\t}\n\n\tasync setAgentModel(model: string): Promise<SuccessResponse> {\n\t\tconst data = await this._post<Record<string, unknown>>(\n\t\t\t\"/configuration/agent\",\n\t\t\t{ model_name: model },\n\t\t);\n\t\treturn { message: (data.message ?? \"\") as string };\n\t}\n\n\tasync setOrchestratorModel(model: string): Promise<SuccessResponse> {\n\t\tconst data = await this._post<Record<string, unknown>>(\n\t\t\t\"/configuration/orchestrator\",\n\t\t\t{ model_name: model },\n\t\t);\n\t\treturn { message: (data.message ?? \"\") as string };\n\t}\n\n\tasync getLLMBackendStatus(): Promise<Record<string, unknown>> {\n\t\treturn this._get<Record<string, unknown>>(\n\t\t\t\"/configuration/llmbackend/status\",\n\t\t);\n\t}\n\n\tasync addLLMBackend(host: string, apiKey: string): Promise<SuccessResponse> {\n\t\tconst data = await this._post<Record<string, unknown>>(\n\t\t\t\"/configuration/llmbackend/add\",\n\t\t\t{ backends: [{ url: host, api_key: apiKey }] },\n\t\t);\n\t\treturn { message: (data.message ?? \"\") as string };\n\t}\n\n\tasync removeLLMBackend(host: string): Promise<SuccessResponse> {\n\t\tconst data = await this._post<Record<string, unknown>>(\n\t\t\t\"/configuration/llmbackend/remove\",\n\t\t\t{ host },\n\t\t);\n\t\treturn { message: (data.message ?? \"\") as string };\n\t}\n\n\tasync getMCPServerStatus(): Promise<Record<string, unknown>> {\n\t\treturn this._get<Record<string, unknown>>(\n\t\t\t\"/configuration/mcpserver/status\",\n\t\t);\n\t}\n\n\tasync addMCPServer(host: string, apiKey: string): Promise<SuccessResponse> {\n\t\tconst data = await this._post<Record<string, unknown>>(\n\t\t\t\"/configuration/mcpserver/add\",\n\t\t\t{ servers: [{ url: host, api_key: apiKey }] },\n\t\t);\n\t\treturn { message: (data.message ?? \"\") as string };\n\t}\n\n\tasync removeMCPServer(host: string): Promise<SuccessResponse> {\n\t\tconst data = await this._post<Record<string, unknown>>(\n\t\t\t\"/configuration/mcpserver/remove\",\n\t\t\t{ host },\n\t\t);\n\t\treturn { message: (data.message ?? \"\") as string };\n\t}\n\n\tasync getTaskHandlerStatus(): Promise<TaskHandlerStatus> {\n\t\treturn this._get<TaskHandlerStatus>(\"/configuration/taskhandler/status\");\n\t}\n\n\tasync getTaskHandlerStatusLocal(): Promise<TaskHandlerStatusLocal> {\n\t\treturn this._get<TaskHandlerStatusLocal>(\n\t\t\t\"/configuration/taskhandler/status/local\",\n\t\t);\n\t}\n\n\tasync setConcurrentTasksPerReplica(\n\t\tmaxTasks: number,\n\t): Promise<SuccessResponse> {\n\t\tconst data = (await this._request(\n\t\t\t\"POST\",\n\t\t\t\"/configuration/taskhandler/concurrent-per-replica\",\n\t\t\t{ params: { max_tasks: maxTasks } },\n\t\t)) as Record<string, unknown>;\n\t\treturn { message: (data.message ?? \"\") as string };\n\t}\n\n\tasync getSummaryWorkerStatus(): Promise<SummaryWorkerStatus> {\n\t\treturn this._get<SummaryWorkerStatus>(\n\t\t\t\"/configuration/summary-worker/status\",\n\t\t);\n\t}\n\n\tasync setCompactorModel(modelName: string): Promise<SuccessResponse> {\n\t\tconst data = await this._post<Record<string, unknown>>(\n\t\t\t\"/configuration/summary-worker/model\",\n\t\t\t{ model_name: modelName },\n\t\t);\n\t\treturn { message: (data.message ?? \"\") as string };\n\t}\n\n\tasync setTranslateModel(modelName: string): Promise<SuccessResponse> {\n\t\tconst data = await this._post<Record<string, unknown>>(\n\t\t\t\"/configuration/summary-worker/translate-model\",\n\t\t\t{ model_name: modelName },\n\t\t);\n\t\treturn { message: (data.message ?? \"\") as string };\n\t}\n\n\tasync getTokenWorkerStatus(): Promise<TokenWorkerStatus> {\n\t\treturn this._get<TokenWorkerStatus>(\"/configuration/token-worker/status\");\n\t}\n\n\tasync getSlotsStatus(): Promise<SlotsStatus> {\n\t\treturn this._get<SlotsStatus>(\"/configuration/slots/status\");\n\t}\n\n\tasync getSubagentsStatus(): Promise<SubagentsStatus> {\n\t\treturn this._get<SubagentsStatus>(\"/configuration/subagents/status\");\n\t}\n\n\tasync setSubagentsEnabled(enabled: boolean): Promise<SuccessResponse> {\n\t\tconst data = await this._post<Record<string, unknown>>(\n\t\t\t\"/configuration/subagents\",\n\t\t\t{ enabled },\n\t\t);\n\t\treturn { message: (data.message ?? \"\") as string };\n\t}\n\n\tasync reloadServices(): Promise<ReloadServicesResult> {\n\t\treturn this._post<ReloadServicesResult>(\"/configuration/reload\");\n\t}\n\n\tasync getReloadStatus(): Promise<ReloadStatus> {\n\t\treturn this._get<ReloadStatus>(\"/configuration/reload/status\");\n\t}\n\n\t// ------------------------------------------------------------------\n\t// Auth / WebSocket status\n\t// ------------------------------------------------------------------\n\n\tasync getAuthConfig(): Promise<AuthConfig> {\n\t\treturn this._get<AuthConfig>(\"/auth/config\");\n\t}\n\n\tasync getWebSocketStatus(): Promise<WebSocketStatus> {\n\t\treturn this._get<WebSocketStatus>(\"/websocket/status\");\n\t}\n\n\t// ------------------------------------------------------------------\n\t// SSE stream\n\t// ------------------------------------------------------------------\n\n\tasync *streamTaskStatus(\n\t\ttaskId: string,\n\t): AsyncGenerator<Record<string, unknown>> {\n\t\tconst headers = await this._resolveHeaders();\n\t\theaders.Accept = \"text/event-stream\";\n\t\tconst response = await this._fetch(\n\t\t\tthis._makeUrl(\n\t\t\t\t`/task/stream_status?task_id=${encodeURIComponent(taskId)}`,\n\t\t\t),\n\t\t\t{ headers },\n\t\t);\n\t\tif (!response.ok) {\n\t\t\tthrow new OrchestratorAPIError(\n\t\t\t\t`Stream connection failed: ${response.statusText}`,\n\t\t\t\tresponse.status,\n\t\t\t);\n\t\t}\n\t\tconst reader = response.body?.getReader();\n\t\tif (!reader) {\n\t\t\tthrow new OrchestratorConnectionError(\"Stream body is not readable\");\n\t\t}\n\t\tconst decoder = new TextDecoder();\n\t\tlet buffer = \"\";\n\t\twhile (true) {\n\t\t\tconst { done, value } = await reader.read();\n\t\t\tif (done) break;\n\t\t\tbuffer += decoder.decode(value, { stream: true });\n\t\t\tconst lines = buffer.split(\"\\n\");\n\t\t\tbuffer = lines.pop() ?? \"\";\n\t\t\tfor (const line of lines) {\n\t\t\t\tif (line.startsWith(\"data: \")) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tyield JSON.parse(line.slice(6));\n\t\t\t\t\t} catch {\n\t\t\t\t\t\t// ignore malformed SSE lines\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n// ---------------------------------------------------------------------------\n// Helpers\n// ---------------------------------------------------------------------------\n\nfunction sleep(ms: number): Promise<void> {\n\treturn new Promise((resolve) => setTimeout(resolve, ms));\n}\n\nfunction combineSignals(...signals: AbortSignal[]): AbortSignal {\n\tconst controller = new AbortController();\n\tfor (const signal of signals) {\n\t\tif (signal.aborted) {\n\t\t\tcontroller.abort(signal.reason);\n\t\t\treturn controller.signal;\n\t\t}\n\t\tsignal.addEventListener(\"abort\", () => controller.abort(signal.reason), {\n\t\t\tonce: true,\n\t\t});\n\t}\n\treturn 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 type { 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\tprivate _async: OrchestratorAsync;\n\n\tconstructor(opts: OrchestratorClientOptions = {}) {\n\t\tthis._async = new OrchestratorAsync(opts);\n\t}\n\n\t/** Close the underlying resources. */\n\tclose(): void {\n\t\tthis._async.close().catch(() => {});\n\t}\n\n\t// ------------------------------------------------------------------\n\t// Tasks\n\t// ------------------------------------------------------------------\n\n\tlistTasks(params?: Parameters<OrchestratorAsync[\"listTasks\"]>[0]) {\n\t\treturn runSync(this._async.listTasks(params));\n\t}\n\n\tcreateTask(params: Parameters<OrchestratorAsync[\"createTask\"]>[0]) {\n\t\treturn runSync(this._async.createTask(params));\n\t}\n\n\tgetTaskStatus(taskId: string, locale?: string) {\n\t\treturn runSync(this._async.getTaskStatus(taskId, locale));\n\t}\n\n\tsetTaskStatus(taskId: string, status: string) {\n\t\treturn runSync(this._async.setTaskStatus(taskId, status));\n\t}\n\n\tgetTaskConversation(\n\t\ttaskId: string,\n\t\tparams?: Parameters<OrchestratorAsync[\"getTaskConversation\"]>[1],\n\t) {\n\t\treturn runSync(this._async.getTaskConversation(taskId, params));\n\t}\n\n\tgetArchivedMessageContent(taskId: string, messageId: number) {\n\t\treturn runSync(this._async.getArchivedMessageContent(taskId, messageId));\n\t}\n\n\tgetTaskCompactions(taskId: string) {\n\t\treturn runSync(this._async.getTaskCompactions(taskId));\n\t}\n\n\tgetTaskJournal(taskId: string) {\n\t\treturn runSync(this._async.getTaskJournal(taskId));\n\t}\n\n\tcancelTask(taskId: string) {\n\t\treturn runSync(this._async.cancelTask(taskId));\n\t}\n\n\tdeleteTask(taskId: string) {\n\t\treturn runSync(this._async.deleteTask(taskId));\n\t}\n\n\tdeleteTasks(taskIds: string[]) {\n\t\treturn runSync(this._async.deleteTasks(taskIds));\n\t}\n\n\t// ------------------------------------------------------------------\n\t// Attachments\n\t// ------------------------------------------------------------------\n\n\tuploadAttachment(file: File | Blob, filename?: string) {\n\t\treturn runSync(this._async.uploadAttachment(file, filename));\n\t}\n\n\tdownloadAttachment(attachmentId: string) {\n\t\treturn runSync(this._async.downloadAttachment(attachmentId));\n\t}\n\n\t// ------------------------------------------------------------------\n\t// Interactive workflow\n\t// ------------------------------------------------------------------\n\n\tsendInteractiveMessage(\n\t\ttaskId: string,\n\t\tmessage: string,\n\t\tattachmentIds?: string[],\n\t) {\n\t\treturn runSync(\n\t\t\tthis._async.sendInteractiveMessage(taskId, message, attachmentIds),\n\t\t);\n\t}\n\n\tmarkInteractiveComplete(taskId: string) {\n\t\treturn runSync(this._async.markInteractiveComplete(taskId));\n\t}\n\n\tmarkInteractiveFailed(taskId: string) {\n\t\treturn runSync(this._async.markInteractiveFailed(taskId));\n\t}\n\n\tapproveInteractiveAction(taskId: string, approved = true) {\n\t\treturn runSync(this._async.approveInteractiveAction(taskId, approved));\n\t}\n\n\tstopInteractive(taskId: string) {\n\t\treturn runSync(this._async.stopInteractive(taskId));\n\t}\n\n\t// ------------------------------------------------------------------\n\t// Proactive workflow\n\t// ------------------------------------------------------------------\n\n\tsendProactiveGuide(\n\t\ttaskId: string,\n\t\tmessage: string,\n\t\tattachmentIds?: string[],\n\t) {\n\t\treturn runSync(\n\t\t\tthis._async.sendProactiveGuide(taskId, message, attachmentIds),\n\t\t);\n\t}\n\n\trespondProactiveHelp(taskId: string, response: string) {\n\t\treturn runSync(this._async.respondProactiveHelp(taskId, response));\n\t}\n\n\tapproveProactiveAction(taskId: string, approved = true) {\n\t\treturn runSync(this._async.approveProactiveAction(taskId, approved));\n\t}\n\n\t// ------------------------------------------------------------------\n\t// Ticket workflow\n\t// ------------------------------------------------------------------\n\n\tsendTicketGuide(taskId: string, message: string, attachmentIds?: string[]) {\n\t\treturn runSync(this._async.sendTicketGuide(taskId, message, attachmentIds));\n\t}\n\n\trespondTicketHelp(taskId: string, response: string) {\n\t\treturn runSync(this._async.respondTicketHelp(taskId, response));\n\t}\n\n\tapproveTicketAction(taskId: string, approved = true) {\n\t\treturn runSync(this._async.approveTicketAction(taskId, approved));\n\t}\n\n\twakeTicket(taskId: string) {\n\t\treturn runSync(this._async.wakeTicket(taskId));\n\t}\n\n\t// ------------------------------------------------------------------\n\t// Matrix workflow\n\t// ------------------------------------------------------------------\n\n\tsendMatrixMessage(taskId: string, message: string, attachmentIds?: string[]) {\n\t\treturn runSync(\n\t\t\tthis._async.sendMatrixMessage(taskId, message, attachmentIds),\n\t\t);\n\t}\n\n\tmarkMatrixComplete(taskId: string) {\n\t\treturn runSync(this._async.markMatrixComplete(taskId));\n\t}\n\n\tmarkMatrixFailed(taskId: string) {\n\t\treturn runSync(this._async.markMatrixFailed(taskId));\n\t}\n\n\tapproveMatrixAction(taskId: string, approved = true) {\n\t\treturn runSync(this._async.approveMatrixAction(taskId, approved));\n\t}\n\n\tgetMatrixConversation(\n\t\ttaskId: string,\n\t\tphase?: number,\n\t\tincludeSummaries?: boolean,\n\t) {\n\t\treturn runSync(\n\t\t\tthis._async.getMatrixConversation(taskId, phase, includeSummaries),\n\t\t);\n\t}\n\n\t// ------------------------------------------------------------------\n\t// VSA workflow\n\t// ------------------------------------------------------------------\n\n\tcreateVSATask(params: Parameters<OrchestratorAsync[\"createVSATask\"]>[0]) {\n\t\treturn runSync(this._async.createVSATask(params));\n\t}\n\n\tsendVSAMessage(\n\t\ttaskId: string,\n\t\tmessage: string,\n\t\toptions?: { attachmentIds?: string[]; delegatedToken?: string },\n\t) {\n\t\treturn runSync(this._async.sendVSAMessage(taskId, message, options));\n\t}\n\n\trenameVSATask(taskId: string, title: string) {\n\t\treturn runSync(this._async.renameVSATask(taskId, title));\n\t}\n\n\tregenerateVSATitle(taskId: string) {\n\t\treturn runSync(this._async.regenerateVSATitle(taskId));\n\t}\n\n\tmarkVSAComplete(taskId: string) {\n\t\treturn runSync(this._async.markVSAComplete(taskId));\n\t}\n\n\tmarkVSAFailed(taskId: string) {\n\t\treturn runSync(this._async.markVSAFailed(taskId));\n\t}\n\n\tstopVSA(taskId: string) {\n\t\treturn runSync(this._async.stopVSA(taskId));\n\t}\n\n\tdeleteVSA(taskId: string) {\n\t\treturn runSync(this._async.deleteVSA(taskId));\n\t}\n\n\tlistVSATasks(\n\t\tuserId: string,\n\t\tparams?: Parameters<OrchestratorAsync[\"listVSATasks\"]>[1],\n\t) {\n\t\treturn runSync(this._async.listVSATasks(userId, params));\n\t}\n\n\tsearchVSATasks(userId: string, query: string, limit?: number) {\n\t\treturn runSync(this._async.searchVSATasks(userId, query, limit));\n\t}\n\n\tdeleteVSATasksBulk(taskIds: string[]) {\n\t\treturn runSync(this._async.deleteVSATasksBulk(taskIds));\n\t}\n\n\t// ------------------------------------------------------------------\n\t// MIO (self_managed) workflow\n\t// ------------------------------------------------------------------\n\n\tsendMioMessage(taskId: string, message: string, attachmentIds?: string[]) {\n\t\treturn runSync(this._async.sendMioMessage(taskId, message, attachmentIds));\n\t}\n\n\tapproveMioAction(taskId: string, approved = true, feedback?: string) {\n\t\treturn runSync(this._async.approveMioAction(taskId, approved, feedback));\n\t}\n\n\twakeMio(taskId: string) {\n\t\treturn runSync(this._async.wakeMio(taskId));\n\t}\n\n\tsendMioUserAway(taskId: string) {\n\t\treturn runSync(this._async.sendMioUserAway(taskId));\n\t}\n\n\tmarkMioComplete(taskId: string) {\n\t\treturn runSync(this._async.markMioComplete(taskId));\n\t}\n\n\tmarkMioFailed(taskId: string) {\n\t\treturn runSync(this._async.markMioFailed(taskId));\n\t}\n\n\tarchiveMio(taskId: string) {\n\t\treturn runSync(this._async.archiveMio(taskId));\n\t}\n\n\tgetMioContext(taskId: string) {\n\t\treturn runSync(this._async.getMioContext(taskId));\n\t}\n\n\tgetMioMemories(taskId: string, includeCommon?: boolean) {\n\t\treturn runSync(this._async.getMioMemories(taskId, includeCommon));\n\t}\n\n\t// ------------------------------------------------------------------\n\t// Tools\n\t// ------------------------------------------------------------------\n\n\tlistTools() {\n\t\treturn runSync(this._async.listTools());\n\t}\n\n\tgetToolCatalog() {\n\t\treturn runSync(this._async.getToolCatalog());\n\t}\n\n\trefreshMCPTools() {\n\t\treturn runSync(this._async.refreshMCPTools());\n\t}\n\n\tvalidateToolCatalog() {\n\t\treturn runSync(this._async.validateToolCatalog());\n\t}\n\n\t// ------------------------------------------------------------------\n\t// Debug / Admin\n\t// ------------------------------------------------------------------\n\n\tgetWorkflowStates() {\n\t\treturn runSync(this._async.getWorkflowStates());\n\t}\n\n\tupdateTaskModels(\n\t\ttaskId: string,\n\t\tmodels: { agentModelId?: string; orchestratorModelId?: string },\n\t) {\n\t\treturn runSync(this._async.updateTaskModels(taskId, models));\n\t}\n\n\tupdateTaskIteration(\n\t\ttaskId: string,\n\t\titeration?: number,\n\t\tmaxIterations?: number,\n\t) {\n\t\treturn runSync(\n\t\t\tthis._async.updateTaskIteration(taskId, iteration, maxIterations),\n\t\t);\n\t}\n\n\tupdateTaskWorkflowData(\n\t\ttaskId: string,\n\t\tworkflowData: Record<string, unknown>,\n\t) {\n\t\treturn runSync(this._async.updateTaskWorkflowData(taskId, workflowData));\n\t}\n\n\tdeleteMessage(taskId: string, messageId: number) {\n\t\treturn runSync(this._async.deleteMessage(taskId, messageId));\n\t}\n\n\tdeleteMessages(taskId: string, messageIds: number[]) {\n\t\treturn runSync(this._async.deleteMessages(taskId, messageIds));\n\t}\n\n\tupdateMessage(\n\t\ttaskId: string,\n\t\tmessageId: number,\n\t\tupdate: { content?: string; reasoning?: string },\n\t) {\n\t\treturn runSync(this._async.updateMessage(taskId, messageId, update));\n\t}\n\n\tresetMatrixToPhase(taskId: string, phase: number) {\n\t\treturn runSync(this._async.resetMatrixToPhase(taskId, phase));\n\t}\n\n\tgetMessageTranslations(taskId: string, messageId: number) {\n\t\treturn runSync(this._async.getMessageTranslations(taskId, messageId));\n\t}\n\n\t// ------------------------------------------------------------------\n\t// Error events\n\t// ------------------------------------------------------------------\n\n\tlistErrors(params?: Parameters<OrchestratorAsync[\"listErrors\"]>[0]) {\n\t\treturn runSync(this._async.listErrors(params));\n\t}\n\n\tgetErrorDetail(errorId: string) {\n\t\treturn runSync(this._async.getErrorDetail(errorId));\n\t}\n\n\tgetErrorStats(since?: string) {\n\t\treturn runSync(this._async.getErrorStats(since));\n\t}\n\n\tcountErrors(since?: string) {\n\t\treturn runSync(this._async.countErrors(since));\n\t}\n\n\tpurgeErrors() {\n\t\treturn runSync(this._async.purgeErrors());\n\t}\n\n\t// ------------------------------------------------------------------\n\t// Health / Metrics\n\t// ------------------------------------------------------------------\n\n\thealth() {\n\t\treturn runSync(this._async.health());\n\t}\n\n\thealthDetailed() {\n\t\treturn runSync(this._async.healthDetailed());\n\t}\n\n\tready() {\n\t\treturn runSync(this._async.ready());\n\t}\n\n\thealthLeader() {\n\t\treturn runSync(this._async.healthLeader());\n\t}\n\n\tgetMetrics(types?: string) {\n\t\treturn runSync(this._async.getMetrics(types));\n\t}\n\n\t// ------------------------------------------------------------------\n\t// Configuration\n\t// ------------------------------------------------------------------\n\n\tgetSystemStatus() {\n\t\treturn runSync(this._async.getSystemStatus());\n\t}\n\n\tupdateSettings(settings: Record<string, unknown>) {\n\t\treturn runSync(this._async.updateSettings(settings));\n\t}\n\n\tgetConfigurationStatus() {\n\t\treturn runSync(this._async.getConfigurationStatus());\n\t}\n\n\tsetAgentModel(model: string) {\n\t\treturn runSync(this._async.setAgentModel(model));\n\t}\n\n\tsetOrchestratorModel(model: string) {\n\t\treturn runSync(this._async.setOrchestratorModel(model));\n\t}\n\n\tgetLLMBackendStatus() {\n\t\treturn runSync(this._async.getLLMBackendStatus());\n\t}\n\n\taddLLMBackend(host: string, apiKey: string) {\n\t\treturn runSync(this._async.addLLMBackend(host, apiKey));\n\t}\n\n\tremoveLLMBackend(host: string) {\n\t\treturn runSync(this._async.removeLLMBackend(host));\n\t}\n\n\tgetMCPServerStatus() {\n\t\treturn runSync(this._async.getMCPServerStatus());\n\t}\n\n\taddMCPServer(host: string, apiKey: string) {\n\t\treturn runSync(this._async.addMCPServer(host, apiKey));\n\t}\n\n\tremoveMCPServer(host: string) {\n\t\treturn runSync(this._async.removeMCPServer(host));\n\t}\n\n\tgetTaskHandlerStatus() {\n\t\treturn runSync(this._async.getTaskHandlerStatus());\n\t}\n\n\tgetTaskHandlerStatusLocal() {\n\t\treturn runSync(this._async.getTaskHandlerStatusLocal());\n\t}\n\n\tsetConcurrentTasksPerReplica(maxTasks: number) {\n\t\treturn runSync(this._async.setConcurrentTasksPerReplica(maxTasks));\n\t}\n\n\tgetSummaryWorkerStatus() {\n\t\treturn runSync(this._async.getSummaryWorkerStatus());\n\t}\n\n\tsetCompactorModel(modelName: string) {\n\t\treturn runSync(this._async.setCompactorModel(modelName));\n\t}\n\n\tsetTranslateModel(modelName: string) {\n\t\treturn runSync(this._async.setTranslateModel(modelName));\n\t}\n\n\tgetTokenWorkerStatus() {\n\t\treturn runSync(this._async.getTokenWorkerStatus());\n\t}\n\n\tgetSlotsStatus() {\n\t\treturn runSync(this._async.getSlotsStatus());\n\t}\n\n\tgetSubagentsStatus() {\n\t\treturn runSync(this._async.getSubagentsStatus());\n\t}\n\n\tsetSubagentsEnabled(enabled: boolean) {\n\t\treturn runSync(this._async.setSubagentsEnabled(enabled));\n\t}\n\n\treloadServices() {\n\t\treturn runSync(this._async.reloadServices());\n\t}\n\n\tgetReloadStatus() {\n\t\treturn runSync(this._async.getReloadStatus());\n\t}\n\n\t// ------------------------------------------------------------------\n\t// Auth / WebSocket status\n\t// ------------------------------------------------------------------\n\n\tgetAuthConfig() {\n\t\treturn runSync(this._async.getAuthConfig());\n\t}\n\n\tgetWebSocketStatus() {\n\t\treturn runSync(this._async.getWebSocketStatus());\n\t}\n\n\t// ------------------------------------------------------------------\n\t// SSE stream (collects all events into an array)\n\t// ------------------------------------------------------------------\n\n\tstreamTaskStatus(_taskId: string): Record<string, unknown>[] {\n\t\tconst events: Record<string, unknown>[] = [];\n\t\t// Stream is async-only; for sync usage this returns empty\n\t\t// Users should use the async variant for streaming\n\t\treturn events;\n\t}\n}\n\nfunction runSync<T>(promise: Promise<T>): T {\n\t// In browser/Ember contexts, we can't use synchronous blocking.\n\t// This is a thin wrapper that assumes the promise resolves immediately\n\t// in practice, or the caller uses the async variant.\n\t// For Node.js scripts, the sync wrapper behaves correctly.\n\tlet result: T | undefined;\n\tlet error: unknown;\n\tlet done = false;\n\n\tpromise.then(\n\t\t(r) => {\n\t\t\tresult = r;\n\t\t\tdone = true;\n\t\t},\n\t\t(e) => {\n\t\t\terror = e;\n\t\t\tdone = true;\n\t\t},\n\t);\n\n\t// In Node.js, we could use a tight loop with setTimeout to wait,\n\t// but in browsers this hangs. The sync wrapper is best-effort;\n\t// for true synchronous use, prefer the async client or a Node.js\n\t// environment where we can block the event loop.\n\tif (!done) {\n\t\t// In Node.js, run a quick spin loop\n\t\tconst start = Date.now();\n\t\twhile (!done && Date.now() - start < 10_000) {\n\t\t\t// Spin — this works in Node.js for micro-tick resolution\n\t\t}\n\t}\n\n\tif (!done) {\n\t\tthrow new Error(\"Orchestrator sync: operation timed out\");\n\t}\n\tif (error) throw error;\n\treturn result as T;\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\t/** Base URL of the orchestrator (e.g. \"http://localhost:8080\"). */\n\tbaseUrl: string;\n\t/** Optional static bearer token sent as `Authorization: Bearer <key>`. */\n\tapiKey?: string;\n\t/** Default timeout in milliseconds for HTTP requests. */\n\ttimeoutMs: number;\n\t/** Maximum retry attempts on transient failures. */\n\tmaxRetries: number;\n}\n\nconst DEFAULTS: OrchestratorConfig = {\n\tbaseUrl: \"http://localhost:8080\",\n\tapiKey: undefined,\n\ttimeoutMs: 30_000,\n\tmaxRetries: 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\toverrides?: Partial<OrchestratorConfig>,\n): OrchestratorConfig {\n\treturn {\n\t\tbaseUrl: (\n\t\t\tprocess.env.ORCHESTRATOR_URL ??\n\t\t\toverrides?.baseUrl ??\n\t\t\tDEFAULTS.baseUrl\n\t\t).replace(/\\/+$/, \"\"),\n\t\tapiKey:\n\t\t\tprocess.env.ORCHESTRATOR_API_KEY ?? overrides?.apiKey ?? DEFAULTS.apiKey,\n\t\ttimeoutMs: Number(\n\t\t\tprocess.env.ORCHESTRATOR_TIMEOUT_MS ??\n\t\t\t\toverrides?.timeoutMs ??\n\t\t\t\tDEFAULTS.timeoutMs,\n\t\t),\n\t\tmaxRetries: Number(\n\t\t\tprocess.env.ORCHESTRATOR_MAX_RETRIES ??\n\t\t\t\toverrides?.maxRetries ??\n\t\t\t\tDEFAULTS.maxRetries,\n\t\t),\n\t};\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\tif (_insecureFetch) return _insecureFetch;\n\n\t// Check if we're in Node.js\n\tif (typeof process === \"undefined\" || process.versions?.node == null) {\n\t\t// In browsers, SSL is handled by the browser — return global fetch\n\t\t_insecureFetch = globalThis.fetch;\n\t\treturn _insecureFetch;\n\t}\n\n\t// Dynamic import — works with ESM and tsup bundling\n\tconst https = await import(\"node:https\");\n\tconst http = await import(\"node:http\");\n\n\tconst agent = new https.Agent({ rejectUnauthorized: false });\n\n\t_insecureFetch = async (\n\t\tinput: RequestInfo | URL,\n\t\tinit?: RequestInit,\n\t): Promise<Response> => {\n\t\tconst urlStr = typeof input === \"string\" ? input : input.toString();\n\t\tconst urlObj = new URL(urlStr);\n\t\tconst isHttps = urlObj.protocol === \"https:\";\n\n\t\treturn new Promise<Response>((resolve, reject) => {\n\t\t\tconst mod = isHttps ? https : http;\n\t\t\tconst req = mod.request(\n\t\t\t\turlStr,\n\t\t\t\t{\n\t\t\t\t\tmethod: init?.method ?? \"GET\",\n\t\t\t\t\theaders: init?.headers as Record<string, string> | undefined,\n\t\t\t\t\trejectUnauthorized: false,\n\t\t\t\t\tagent: isHttps ? agent : undefined,\n\t\t\t\t},\n\t\t\t\t(res: NodeJS.ReadableStream) => {\n\t\t\t\t\tconst chunks: Buffer[] = [];\n\t\t\t\t\tres.on(\"data\", (chunk: Buffer) => chunks.push(chunk));\n\t\t\t\t\tres.on(\"end\", () => {\n\t\t\t\t\t\tconst body = Buffer.concat(chunks);\n\t\t\t\t\t\tconst headers = new Headers();\n\t\t\t\t\t\t// Cast to access the headers object from Node's IncomingMessage\n\t\t\t\t\t\tconst resHeaders = (\n\t\t\t\t\t\t\tres as unknown as { headers: Record<string, string | string[]> }\n\t\t\t\t\t\t).headers;\n\t\t\t\t\t\tif (resHeaders) {\n\t\t\t\t\t\t\tfor (const [key, value] of Object.entries(resHeaders)) {\n\t\t\t\t\t\t\t\tif (value != null) {\n\t\t\t\t\t\t\t\t\tif (Array.isArray(value)) {\n\t\t\t\t\t\t\t\t\t\tfor (const v of value) headers.append(key, v);\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\theaders.set(key, value);\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tresolve(\n\t\t\t\t\t\t\tnew Response(body, {\n\t\t\t\t\t\t\t\tstatus: (res as unknown as { statusCode?: number }).statusCode,\n\t\t\t\t\t\t\t\tstatusText: (res as unknown as { statusMessage?: string })\n\t\t\t\t\t\t\t\t\t.statusMessage,\n\t\t\t\t\t\t\t\theaders,\n\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t);\n\t\t\t\t\t});\n\t\t\t\t},\n\t\t\t);\n\n\t\t\treq.on(\"error\", reject);\n\t\t\tif (init?.body != null) {\n\t\t\t\treq.write(init.body);\n\t\t\t}\n\t\t\treq.end();\n\t\t});\n\t};\n\n\treturn _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\";\nexport const EVENT_TASK_BULK_DELETED = \"task_bulk_deleted\";\nexport const EVENT_TASK_WORKFLOW_DATA_CHANGED = \"task_workflow_data_changed\";\nexport const EVENT_ITERATION_REMINDER_ADDED = \"iteration_reminder_added\";\nexport const EVENT_MESSAGE_DELETED = \"message_deleted\";\nexport const EVENT_MESSAGE_UPDATED = \"message_updated\";\nexport const EVENT_APPROVAL_REQUESTED = \"approval_requested\";\nexport const EVENT_APPROVAL_PROVIDED = \"approval_provided\";\nexport const EVENT_HELP_REQUESTED = \"help_requested\";\nexport const EVENT_HELP_PROVIDED = \"help_provided\";\nexport const EVENT_USER_MESSAGE_ADDED = \"user_message_added\";\nexport const EVENT_MIO_MEMORY_CREATED = \"mio_memory_created\";\nexport const EVENT_MIO_MEMORY_UPDATED = \"mio_memory_updated\";\nexport const EVENT_MIO_MEMORY_DELETED = \"mio_memory_deleted\";\nexport const EVENT_LLM_BACKEND_CHANGED = \"llm_backend_changed\";\nexport const EVENT_MCP_SERVER_CHANGED = \"mcp_server_changed\";\nexport const EVENT_MODEL_CONFIG_CHANGED = \"model_config_changed\";\nexport const EVENT_TASK_HANDLER_STATUS_CHANGED = \"task_handler_status_changed\";\nexport const EVENT_SUMMARY_WORKER_STATUS = \"summary_worker_status\";\nexport const EVENT_TOKEN_WORKER_STATUS = \"token_worker_status\";\nexport const EVENT_TOKEN_COUNT_UPDATED = \"token_count_updated\";\nexport const EVENT_MESSAGES_ARCHIVED = \"messages_archived\";\nexport const EVENT_SUBPROCESS_STARTED = \"subprocess_started\";\nexport const EVENT_SUBPROCESS_COMPLETED = \"subprocess_completed\";\nexport const EVENT_SUBPROCESS_FAILED = \"subprocess_failed\";\n\nexport type EventHandler = (...args: unknown[]) => void;\n\nexport interface RealtimeClientOptions {\n\t/** Socket.IO connection options. */\n\tsocketOptions?: Record<string, unknown>;\n\t/** Optional bearer token or async token getter. */\n\tgetToken?: (() => string | Promise<string>) | string;\n\t/** Whether to auto-connect on construction (default: false). */\n\tautoConnect?: boolean;\n\t/**\n\t * Client identifier sent as the `client_id` query parameter at connection\n\t * time. The server uses this for logging/diagnostics.\n\t * Defaults to `\"orchestrator-client\"`.\n\t */\n\tclientId?: string;\n\t/**\n\t * Locale tag sent as the `locale` query parameter at connection time\n\t * (e.g. `\"hu-hu\"`, `\"en-us\"`). When set the server automatically joins\n\t * the client into the matching `locale:<tag>` room so translation-ready\n\t * events are delivered without a separate `subscribeLocale()` call.\n\t */\n\tlocale?: string;\n}\n\n/**\n * Socket.IO-based realtime client for receiving orchestrator events.\n *\n * The server wraps all domain events in a `message` Socket.IO event with an\n * inner `event_type` field. This client unwraps the envelope and dispatches\n * to registered handlers by event_type.\n *\n * ## Two subscription APIs — choose one or mix them:\n *\n * ### 1. Event-type handlers via `on(event, handler)`\n * Registers a callback for a specific event type string (e.g.\n * `\"task_status_changed\"`). You still need to join the relevant rooms\n * manually via `subscribeTask()`, `subscribeEvents()`, etc.\n *\n * ### 2. Room-scoped subscribers via `subscribe(handler, rooms)`\n * Mirrors the WebSocketProvider pattern used in the webui. Each call\n * returns an opaque subscription id. Calling `unsubscribe(id)` removes it.\n * Room membership is kept in sync automatically: the client joins the union\n * of all subscribers' rooms and leaves rooms that are no longer needed.\n * The handler receives the unwrapped event dict for every event from those\n * rooms, regardless of type.\n */\nexport class RealtimeClient {\n\tprivate _baseUrl: string;\n\tprivate _socketOptions: Record<string, unknown>;\n\tprivate _getToken?: (() => string | Promise<string>) | string;\n\tprivate _clientId: string;\n\tprivate _locale?: string;\n\tprivate _socket: SocketIOClient | null = null;\n\tprivate _handlers: Map<string, Set<EventHandler>> = new Map();\n\tprivate _connected = false;\n\n\t// Multi-subscriber room-diffing state (mirrors WebSocketProvider)\n\tprivate _subscriptions: Map<\n\t\tstring,\n\t\t{ handler: EventHandler; rooms: string[] }\n\t> = new Map();\n\tprivate _currentRooms: Set<string> = new Set();\n\tprivate _subIdCounter = 0;\n\n\tconstructor(baseUrl: string, opts: RealtimeClientOptions) {\n\t\tthis._baseUrl = baseUrl.replace(/\\/+$/, \"\");\n\t\tthis._socketOptions = opts.socketOptions ?? {};\n\t\tthis._getToken = opts.getToken;\n\t\tthis._clientId = opts.clientId ?? \"orchestrator-client\";\n\t\tthis._locale = opts.locale;\n\n\t\tif (opts.autoConnect) {\n\t\t\tthis.connect();\n\t\t}\n\t}\n\n\tget connected(): boolean {\n\t\treturn this._connected;\n\t}\n\n\tasync connect(): Promise<void> {\n\t\tconst auth: Record<string, unknown> = {};\n\t\tif (this._getToken) {\n\t\t\tauth.token =\n\t\t\t\ttypeof this._getToken === \"function\"\n\t\t\t\t\t? await this._getToken()\n\t\t\t\t\t: this._getToken;\n\t\t}\n\n\t\tconst query: Record<string, string> = { client_id: this._clientId };\n\t\tif (this._locale) {\n\t\t\tquery.locale = this._locale;\n\t\t}\n\n\t\t// We construct the socket dynamically to avoid a hard import\n\t\tconst { io } = await import(\"socket.io-client\");\n\t\tthis._socket = io(this._baseUrl, {\n\t\t\tpath: \"/socket.io\",\n\t\t\tauth,\n\t\t\tquery,\n\t\t\ttransports: [\"websocket\", \"polling\"],\n\t\t\t...this._socketOptions,\n\t\t}) as unknown as SocketIOClient;\n\n\t\tthis._socket.on(\"connect\", () => {\n\t\t\tthis._connected = true;\n\t\t\t// Re-sync rooms after reconnect (server-side room membership is lost)\n\t\t\tthis._currentRooms = new Set();\n\t\t\tthis._syncRooms();\n\t\t});\n\n\t\tthis._socket.on(\"disconnect\", () => {\n\t\t\tthis._connected = false;\n\t\t\tthis._currentRooms = new Set();\n\t\t});\n\n\t\t// All domain events come wrapped in a `message` socket event with\n\t\t// an inner `event_type` field. Dispatch them to registered handlers.\n\t\tthis._socket.on(\"message\", (payload: unknown) => this._dispatch(payload));\n\n\t\treturn new Promise<void>((resolve, reject) => {\n\t\t\tif (!this._socket) {\n\t\t\t\treject(new Error(\"RealtimeClient not connected\"));\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tthis._socket.on(\"connect\", () => resolve());\n\t\t\tthis._socket.on(\"connect_error\", (err: Error) => reject(err));\n\t\t\t// If already connected, resolve immediately\n\t\t\tif (this._socket.connected) {\n\t\t\t\tresolve();\n\t\t\t}\n\t\t});\n\t}\n\n\tasync disconnect(): Promise<void> {\n\t\tif (this._socket) {\n\t\t\tthis._socket.disconnect();\n\t\t\tthis._socket = null;\n\t\t}\n\t\tthis._connected = false;\n\t}\n\n\t/**\n\t * Dispatch a message envelope to registered handlers and subscribers.\n\t * The server sends: socket.emit(\"message\", {type: \"message\", event: {..., event_type: \"...\", ...}})\n\t */\n\tprivate _dispatch(payload: unknown): void {\n\t\tconst envelope = payload as Record<string, unknown>;\n\t\tconst event = (envelope.event ?? envelope) as Record<string, unknown>;\n\t\tconst eventType = event.event_type as string | undefined;\n\t\tif (!eventType) return;\n\n\t\t// Dispatch to event-type handlers registered via on()\n\t\tconst handlers = this._handlers.get(eventType);\n\t\tif (handlers) {\n\t\t\tfor (const h of handlers) {\n\t\t\t\th(event);\n\t\t\t}\n\t\t}\n\n\t\t// Fan out to all room-scoped subscribers registered via subscribe()\n\t\tfor (const sub of this._subscriptions.values()) {\n\t\t\tsub.handler(event);\n\t\t}\n\t}\n\n\t/**\n\t * Subscribe to realtime events for a specific task.\n\t * Emits a `join` event with `{rooms: [\"task:{taskId}\"]}`.\n\t */\n\tsubscribeTask(taskId: string): void {\n\t\tif (!this._socket) throw new Error(\"RealtimeClient not connected\");\n\t\tthis._socket.emit(\"join\", { rooms: [`task:${taskId}`] });\n\t}\n\n\t/**\n\t * Unsubscribe from realtime events for a specific task.\n\t * Emits a `leave` event with `{rooms: [\"task:{taskId}\"]}`.\n\t */\n\tunsubscribeTask(taskId: string): void {\n\t\tif (!this._socket) throw new Error(\"RealtimeClient not connected\");\n\t\tthis._socket.emit(\"leave\", { rooms: [`task:${taskId}`] });\n\t}\n\n\t/**\n\t * Subscribe to event-type-scoped rooms.\n\t * e.g. subscribeEvents(\"task_created\", \"task_deleted\")\n\t */\n\tsubscribeEvents(...eventTypes: string[]): void {\n\t\tif (!this._socket) throw new Error(\"RealtimeClient not connected\");\n\t\tconst rooms = eventTypes.map((t) => `event:${t}`);\n\t\tthis._socket.emit(\"join\", { rooms });\n\t}\n\n\t/**\n\t * Unsubscribe from event-type-scoped rooms.\n\t */\n\tunsubscribeEvents(...eventTypes: string[]): void {\n\t\tif (!this._socket) throw new Error(\"RealtimeClient not connected\");\n\t\tconst rooms = eventTypes.map((t) => `event:${t}`);\n\t\tthis._socket.emit(\"leave\", { rooms });\n\t}\n\n\t/**\n\t * Subscribe to the `all` broadcast room (receives all events).\n\t */\n\tsubscribeAll(): void {\n\t\tif (!this._socket) throw new Error(\"RealtimeClient not connected\");\n\t\tthis._socket.emit(\"join\", { rooms: [\"all\"] });\n\t}\n\n\t/**\n\t * Subscribe to a locale-specific room.\n\t */\n\tsubscribeLocale(locale: string): void {\n\t\tif (!this._socket) throw new Error(\"RealtimeClient not connected\");\n\t\tthis._socket.emit(\"join\", { rooms: [`locale:${locale}`] });\n\t}\n\n\t/**\n\t * Unsubscribe from a locale-specific room.\n\t */\n\tunsubscribeLocale(locale: string): void {\n\t\tif (!this._socket) throw new Error(\"RealtimeClient not connected\");\n\t\tthis._socket.emit(\"leave\", { rooms: [`locale:${locale}`] });\n\t}\n\n\t/**\n\t * Join arbitrary rooms by name.\n\t */\n\tjoinRooms(rooms: string[]): void {\n\t\tif (!this._socket) throw new Error(\"RealtimeClient not connected\");\n\t\tthis._socket.emit(\"join\", { rooms });\n\t}\n\n\t/**\n\t * Leave arbitrary rooms by name.\n\t */\n\tleaveRooms(rooms: string[]): void {\n\t\tif (!this._socket) throw new Error(\"RealtimeClient not connected\");\n\t\tthis._socket.emit(\"leave\", { rooms });\n\t}\n\n\t// ------------------------------------------------------------------\n\t// Multi-subscriber API (mirrors WebSocketProvider room-diffing)\n\t// ------------------------------------------------------------------\n\n\t/**\n\t * Register a subscriber that receives all events from the given rooms.\n\t *\n\t * Room membership is managed automatically: the client joins the union\n\t * of all active subscribers' rooms and leaves rooms that are no longer\n\t * needed when the last subscriber referencing them is removed.\n\t *\n\t * The `handler` receives the unwrapped event dict (same object that\n\t * `on()` handlers receive).\n\t *\n\t * Returns an opaque subscription id that must be passed to\n\t * `unsubscribe()` to remove the subscription.\n\t *\n\t * Example — mirror the webui's per-component subscription pattern:\n\t *\n\t * const id = rt.subscribe((event) => {\n\t * if (event.event_type === \"task_status_changed\") { ... }\n\t * }, [`task:${taskId}`]);\n\t *\n\t * // later, on cleanup:\n\t * rt.unsubscribe(id);\n\t */\n\tsubscribe(handler: EventHandler, rooms: string[]): string {\n\t\tconst id = `sub_${++this._subIdCounter}`;\n\t\tthis._subscriptions.set(id, { handler, rooms });\n\t\tthis._syncRooms();\n\t\treturn id;\n\t}\n\n\t/**\n\t * Remove a subscription registered via `subscribe()`.\n\t *\n\t * Rooms that are no longer referenced by any remaining subscriber are\n\t * left automatically.\n\t */\n\tunsubscribe(id: string): void {\n\t\tthis._subscriptions.delete(id);\n\t\tthis._syncRooms();\n\t}\n\n\t/**\n\t * Diff the union of all subscribers' rooms against the currently joined\n\t * rooms and emit `join`/`leave` for the delta. No-ops when not connected.\n\t */\n\tprivate _syncRooms(): void {\n\t\tconst socket = this._socket;\n\t\tif (!socket?.connected) return;\n\n\t\tconst needed = new Set<string>();\n\t\tfor (const sub of this._subscriptions.values()) {\n\t\t\tfor (const r of sub.rooms) needed.add(r);\n\t\t}\n\n\t\tconst toJoin = [...needed].filter((r) => !this._currentRooms.has(r));\n\t\tconst toLeave = [...this._currentRooms].filter((r) => !needed.has(r));\n\n\t\tif (toJoin.length) socket.emit(\"join\", { rooms: toJoin });\n\t\tif (toLeave.length) socket.emit(\"leave\", { rooms: toLeave });\n\n\t\tthis._currentRooms = needed;\n\t}\n\n\t/**\n\t * Send a ping to the server.\n\t */\n\tping(): void {\n\t\tif (!this._socket) throw new Error(\"RealtimeClient not connected\");\n\t\tthis._socket.emit(\"ping\");\n\t}\n\n\t/**\n\t * Register a handler for a specific event type.\n\t *\n\t * Domain events (task_created, task_status_changed, etc.) are dispatched\n\t * via the message envelope. Raw socket events (connect, disconnect,\n\t * connection_established, rooms_updated, pong) are wired directly.\n\t */\n\ton(event: string, handler: EventHandler): void {\n\t\tif (!this._handlers.has(event)) {\n\t\t\tthis._handlers.set(event, new Set());\n\t\t\t// For raw socket events that arrive outside the message envelope,\n\t\t\t// also wire up a direct socket listener so they still fire.\n\t\t\tif (this._socket) {\n\t\t\t\tconst rawSocketEvents = new Set([\n\t\t\t\t\t\"connect\",\n\t\t\t\t\t\"disconnect\",\n\t\t\t\t\t\"connect_error\",\n\t\t\t\t\t\"connection_established\",\n\t\t\t\t\t\"rooms_updated\",\n\t\t\t\t\t\"pong\",\n\t\t\t\t]);\n\t\t\t\tif (rawSocketEvents.has(event)) {\n\t\t\t\t\tthis._socket.on(event, (...args: unknown[]) => {\n\t\t\t\t\t\tconst handlers = this._handlers.get(event);\n\t\t\t\t\t\tif (handlers) {\n\t\t\t\t\t\t\tfor (const h of handlers) {\n\t\t\t\t\t\t\t\th(...args);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tconst handlers = this._handlers.get(event);\n\t\tif (handlers) {\n\t\t\thandlers.add(handler);\n\t\t}\n\t}\n\n\t/**\n\t * Remove a registered handler.\n\t */\n\toff(event: string, handler: EventHandler): void {\n\t\tconst handlers = this._handlers.get(event);\n\t\tif (handlers) {\n\t\t\thandlers.delete(handler);\n\t\t\tif (handlers.size === 0) {\n\t\t\t\tthis._handlers.delete(event);\n\t\t\t\tif (this._socket) {\n\t\t\t\t\tthis._socket.off(event);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Wait for the connection to close (for long-running listeners).\n\t */\n\twait(): Promise<void> {\n\t\treturn new Promise((resolve) => {\n\t\t\tif (!this._socket) {\n\t\t\t\tresolve();\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tthis._socket.on(\"disconnect\", () => resolve());\n\t\t});\n\t}\n}\n"],"mappings":"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","names":["handlers"]}
1
+ {"version":3,"sources":["../src/index.ts","../src/errors.ts","../src/utils.ts","../src/client.ts","../src/sync-client.ts","../src/config.ts","../src/fetch.ts","../src/socketio.ts","../src/flow.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\tEVENT_TASK_CREATED,\n\tEVENT_TASK_STATUS_CHANGED,\n\tEVENT_TASK_ITERATION_CHANGED,\n\tEVENT_TASK_DELETED,\n\tEVENT_TASK_RESULT_UPDATED,\n\tEVENT_TASK_INSIGHT_UPDATED,\n\tEVENT_MESSAGE_ADDED,\n\tEVENT_MESSAGE_STREAMING,\n\tEVENT_MESSAGE_SUMMARY_GENERATED,\n\tEVENT_MESSAGE_TRANSLATION_READY,\n\tEVENT_ERROR_EVENT_RECORDED,\n} from \"./socketio.js\";\nexport type { EventHandler, RealtimeClientOptions } from \"./socketio.js\";\n\n// Exceptions\nexport {\n\tOrchestratorError,\n\tOrchestratorConnectionError,\n\tOrchestratorAuthError,\n\tOrchestratorNotFoundError,\n\tOrchestratorAPIError,\n\tOrchestratorConfigError,\n} from \"./errors.js\";\n\n// Flow framework\nexport {\n\tFlow,\n\tFlowCancelledError,\n\tFlowError,\n\tFlowTimeoutError,\n\textractJsonFromMessage,\n\tsetupDefaultClient,\n\tDEFAULT_FLOW_TIMEOUT_MS,\n} from \"./flow.js\";\nexport type { FlowRunParams } from \"./flow.js\";\n\n// Models\nexport type { Pagination } from \"./models/pagination.js\";\nexport type {\n\tTaskSummary,\n\tTaskOptions,\n\tTaskDetail,\n\tTaskListResult,\n\tTaskCreateResponse,\n\tTaskCancelResponse,\n\tTaskDeleteResult,\n\tVSATaskCreateResponse,\n} from \"./models/task.js\";\nexport type {\n\tAttachmentMeta,\n\tToolCall,\n\tMessage,\n\tConversationResult,\n\tMatrixConversationResult,\n\tArchivedContent,\n\tMessageTranslation,\n\tMessageTranslationsResult,\n\tMessageTranslationReadyEvent,\n} from \"./models/conversation.js\";\nexport type {\n\tErrorEvent,\n\tErrorEventDetail,\n\tErrorEventListResult,\n\tErrorStatsResult,\n\tErrorCountResult,\n\tErrorPurgeResult,\n} from \"./models/errors.js\";\nexport type {\n\tHealthStatus,\n\tComponentHealth,\n\tHealthDetail,\n\tReadinessCheck,\n\tReadinessResult,\n\tLockStatus,\n\tLeaderStatus,\n\tMetricSnapshot,\n} from \"./models/health.js\";\nexport type {\n\tSystemStatusSettings,\n\tSystemStatus,\n\tLLMBackendInfo,\n\tLLMModelVisionInfo,\n\tLLMModelContextInfo,\n\tLLMBackendStatus,\n\tMCPServerInfo,\n\tMCPServerStatus,\n\tTaskHandlerReplica,\n\tTaskHandlerCluster,\n\tTaskHandlerStatus,\n\tTaskHandlerStatusLocal,\n\tSummaryWorkerStatus,\n\tTokenWorkerStatus,\n\tSlotInfo,\n\tSlotsStatus,\n\tConfigurationStatus,\n\tReloadServicesResult,\n\tReloadStatus,\n\tSubagentsStatus,\n} from \"./models/config-models.js\";\nexport type { ToolInfo, ToolsListResult } from \"./models/tools.js\";\nexport type {\n\tCompactionEvent,\n\tTaskJournal,\n\tAttachmentUploadResponse,\n} from \"./models/journal.js\";\nexport type {\n\tAuthConfig,\n\tWebSocketClientInfo,\n\tWebSocketStatus,\n} from \"./models/auth.js\";\nexport type {\n\tSuccessResponse,\n\tMioContext,\n\tMioMemoryItem,\n\tMioMemoriesResult,\n\tMessageDeleteMultipleResult,\n\tWorkflowStates,\n} from \"./models/workflow.js\";\nexport { snakeToCamel, camelToSnake, deepCamelCase } from \"./utils.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\tpublic readonly statusCode: number | null;\n\tpublic readonly errorCode: string | null;\n\tpublic readonly details: Record<string, unknown>;\n\n\tconstructor(\n\t\tmessage: string,\n\t\topts?: {\n\t\t\tstatusCode?: number | null;\n\t\t\terrorCode?: string | null;\n\t\t\tdetails?: Record<string, unknown>;\n\t\t},\n\t) {\n\t\tsuper(message);\n\t\tthis.name = \"OrchestratorError\";\n\t\tthis.statusCode = opts?.statusCode ?? null;\n\t\tthis.errorCode = opts?.errorCode ?? null;\n\t\tthis.details = opts?.details ?? {};\n\t}\n}\n\n/**\n * Orchestrator is unreachable (network / DNS / timeout).\n */\nexport class OrchestratorConnectionError extends OrchestratorError {\n\tconstructor(message: string) {\n\t\tsuper(message, { statusCode: null });\n\t\tthis.name = \"OrchestratorConnectionError\";\n\t}\n}\n\n/**\n * Authentication or authorization failure (401/403).\n */\nexport class OrchestratorAuthError extends OrchestratorError {\n\tconstructor(message: string, statusCode = 401, errorCode?: string | null) {\n\t\tsuper(message, { statusCode, errorCode });\n\t\tthis.name = \"OrchestratorAuthError\";\n\t}\n}\n\n/**\n * Requested resource does not exist (404).\n */\nexport class OrchestratorNotFoundError extends OrchestratorError {\n\tpublic readonly resourceType: string;\n\tpublic readonly resourceId: string;\n\n\tconstructor(resourceType: string, resourceId: string, message?: string) {\n\t\tsuper(message ?? `${resourceType} not found: ${resourceId}`, {\n\t\t\tstatusCode: 404,\n\t\t});\n\t\tthis.name = \"OrchestratorNotFoundError\";\n\t\tthis.resourceType = resourceType;\n\t\tthis.resourceId = resourceId;\n\t}\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\tconstructor(\n\t\tmessage: string,\n\t\tstatusCode: number,\n\t\terrorCode?: string | null,\n\t\tdetails?: Record<string, unknown>,\n\t) {\n\t\tsuper(message, { statusCode, errorCode, details });\n\t\tthis.name = \"OrchestratorAPIError\";\n\t}\n}\n\n/**\n * Invalid or missing client configuration (bad env vars, etc.).\n */\nexport class OrchestratorConfigError extends OrchestratorError {\n\tconstructor(message: string) {\n\t\tsuper(message, { statusCode: null });\n\t\tthis.name = \"OrchestratorConfigError\";\n\t}\n}\n","/**\n * Convert a snake_case string to camelCase.\n * Only converts single-underscore sequences followed by a lowercase letter.\n * Leading/double underscores and all-caps segments are preserved.\n */\nexport function snakeToCamel(str: string): string {\n\treturn str.replace(/_([a-z])/g, (_, c: string) => c.toUpperCase());\n}\n\n/**\n * Convert a camelCase string to snake_case.\n * Inserts an underscore before each uppercase letter and lowercases it.\n */\nexport function camelToSnake(str: string): string {\n\treturn str.replace(/[A-Z]/g, (c) => `_${c.toLowerCase()}`);\n}\n\n/**\n * Recursively convert all object keys from snake_case to camelCase.\n * Arrays are mapped element-by-element.\n * Primitive values (strings, numbers, booleans, null) are returned unchanged —\n * only the *keys* of plain objects are converted, never the *values*.\n */\nexport function deepCamelCase<T>(obj: T): T {\n\tif (Array.isArray(obj)) {\n\t\treturn obj.map(deepCamelCase) as unknown as T;\n\t}\n\tif (typeof obj === \"object\" && obj !== null) {\n\t\treturn Object.fromEntries(\n\t\t\tObject.entries(obj as Record<string, unknown>).map(([key, value]) => [\n\t\t\t\tsnakeToCamel(key),\n\t\t\t\tdeepCamelCase(value),\n\t\t\t]),\n\t\t) as unknown as T;\n\t}\n\treturn obj;\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 {\n\tOrchestratorAPIError,\n\tOrchestratorAuthError,\n\tOrchestratorConnectionError,\n\tOrchestratorNotFoundError,\n} from \"./errors.js\";\nimport type {\n\tArchivedContent,\n\tAttachmentUploadResponse,\n\tAuthConfig,\n\tCatalogValidationResult,\n\tCompactionEvent,\n\tConfigurationStatus,\n\tConversationResult,\n\tErrorCountResult,\n\tErrorEventDetail,\n\tErrorEventListResult,\n\tErrorPurgeResult,\n\tErrorStatsResult,\n\tHealthDetail,\n\tHealthStatus,\n\tLLMBackendStatus,\n\tLeaderStatus,\n\tMCPRefreshResult,\n\tMCPServerStatus,\n\tMatrixConversationResult,\n\tMessage,\n\tMessageDeleteMultipleResult,\n\tMessageTranslation,\n\tMessageTranslationsResult,\n\tMetricSnapshot,\n\tMioContext,\n\tMioMemoriesResult,\n\tPagination,\n\tReadinessResult,\n\tReloadServicesResult,\n\tReloadStatus,\n\tSlotsStatus,\n\tSubagentsStatus,\n\tSuccessResponse,\n\tSummaryWorkerStatus,\n\tSystemStatus,\n\tSystemStatusSettings,\n\tTaskCancelResponse,\n\tTaskCreateResponse,\n\tTaskDeleteResult,\n\tTaskDetail,\n\tTaskHandlerStatus,\n\tTaskHandlerStatusLocal,\n\tTaskJournal,\n\tTaskListResult,\n\tTaskSummary,\n\tTokenWorkerStatus,\n\tToolCatalogResult,\n\tToolInfo,\n\tToolsListResult,\n\tVSATaskCreateResponse,\n\tWebSocketStatus,\n\tWorkflowStates,\n} from \"./models/index.js\";\nimport { camelToSnake, deepCamelCase } from \"./utils.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\tconst p = (data.pagination ?? {}) as Record<string, unknown>;\n\treturn {\n\t\tcurrentPage: (p.currentPage ?? 1) as number,\n\t\tperPage: (p.perPage ?? 25) as number,\n\t\ttotalItems: (p.totalItems ?? 0) as number,\n\t\ttotalPages: (p.totalPages ?? 1) as number,\n\t\thasNext: (p.hasNext ?? false) as boolean,\n\t\thasPrev: (p.hasPrev ?? false) as boolean,\n\t};\n}\n\nfunction buildTaskSummary(t: Record<string, unknown>): TaskSummary {\n\treturn {\n\t\tid: (t.id ?? \"\") as string,\n\t\tstatus: (t.status ?? \"\") as string,\n\t\tworkflowId: (t.workflowId ?? \"\") as string,\n\t\titeration: (t.iteration ?? 0) as number,\n\t\tmaxIterations: (t.maxIterations ?? 0) as number,\n\t\tgoalPrompt: (t.goalPrompt ?? \"\") as string,\n\t\tresult: (t.result ?? \"\") as string,\n\t\tresultLocalized: (t.resultLocalized ?? null) as string | null,\n\t\tapprovalReason: (t.approvalReason ?? \"\") as string,\n\t\tticketId: (t.ticketId ?? null) as string | null,\n\t\tavailableTools: (t.availableTools ?? null) as string[] | null,\n\t\tinsight: (t.insight ?? null) as string | null,\n\t\tinsightLocalized: (t.insightLocalized ?? null) as string | null,\n\t\tcreatedAt: (t.createdAt ?? \"\") as string,\n\t\tupdatedAt: (t.updatedAt ?? \"\") as string,\n\t\tpendingTranslationsForLocales: (t.pendingTranslationsForLocales ?? null) as\n\t\t\t| string[]\n\t\t\t| null\n\t\t\t| undefined,\n\t};\n}\n\ninterface ParsedApiErrorBody {\n\tmessage: string;\n\terrorCode: string | null;\n\tdetails: Record<string, unknown> | null;\n}\n\n/** Parse orchestrator / FastAPI error JSON into message, code, and details. */\nfunction parseApiErrorBody(\n\tbody: Record<string, unknown>,\n\tfallbackMessage: string,\n): ParsedApiErrorBody {\n\tlet errorCode = (body.error_code as string) ?? null;\n\tif (!errorCode && body.error && typeof body.error === \"object\") {\n\t\tconst nested = body.error as Record<string, unknown>;\n\t\terrorCode = (nested.code as string) ?? null;\n\t}\n\n\tlet message: string | null = null;\n\tif (typeof body.error === \"string\") {\n\t\tmessage = body.error;\n\t} else if (typeof body.message === \"string\") {\n\t\tmessage = body.message;\n\t}\n\n\tlet details: Record<string, unknown> | null =\n\t\t(body.details as Record<string, unknown>) ?? null;\n\n\tconst detail = body.detail;\n\tif (typeof detail === \"string\") {\n\t\tmessage = detail;\n\t} else if (detail && typeof detail === \"object\" && !Array.isArray(detail)) {\n\t\tconst detailObj = detail as Record<string, unknown>;\n\t\tif (!errorCode) {\n\t\t\terrorCode = (detailObj.error_code as string) ?? null;\n\t\t}\n\t\tif (typeof detailObj.error === \"string\") {\n\t\t\tmessage = detailObj.error;\n\t\t} else if (typeof detailObj.message === \"string\") {\n\t\t\tmessage = detailObj.message;\n\t\t}\n\t\tif (!details) {\n\t\t\tdetails = detailObj;\n\t\t}\n\t}\n\n\tif (!message) {\n\t\tmessage = fallbackMessage;\n\t}\n\n\tconst missingFields = body.missing_fields;\n\tif (Array.isArray(missingFields) && missingFields.length > 0) {\n\t\tconst fields = missingFields.filter(\n\t\t\t(f): f is string => typeof f === \"string\",\n\t\t);\n\t\tif (fields.length > 0) {\n\t\t\tmessage = `${message} (missing: ${fields.join(\", \")})`;\n\t\t}\n\t}\n\n\treturn { message, errorCode, details };\n}\n\n// ---------------------------------------------------------------------------\n// Client options\n// ---------------------------------------------------------------------------\n\nexport interface OrchestratorClientOptions {\n\t/** Base URL of the orchestrator (e.g. \"http://localhost:8080\"). */\n\tbaseUrl?: string;\n\t/** Optional static bearer token. */\n\tapiKey?: string;\n\t/** Async function that returns a bearer token (called on each request). */\n\tgetToken?: () => string | Promise<string>;\n\t/** Request timeout in milliseconds (default: 30000). */\n\ttimeoutMs?: number;\n\t/** Max retry attempts on transient failures (default: 3). */\n\tmaxRetries?: number;\n\t/**\n\t * Locale tag sent as `X-Locale` on every request (e.g. `\"hu-hu\"`, `\"en-us\"`).\n\t *\n\t * When set the API returns translated content where available.\n\t * When not set the API returns its default (English) content.\n\t * Per-call locale overrides (on `listTasks`, `getTaskStatus`, etc.)\n\t * take precedence over this global setting.\n\t */\n\tlocale?: string;\n\t/**\n\t * Custom fetch implementation override.\n\t *\n\t * Use this to inject a fetch that ignores SSL errors (self-signed certs):\n\t *\n\t * new Orchestrator({\n\t * fetch: await createInsecureFetch(),\n\t * })\n\t *\n\t * When not provided, `globalThis.fetch` is used.\n\t */\n\tfetch?: typeof globalThis.fetch;\n\t/**\n\t * Allow self-signed / invalid SSL certificates.\n\t *\n\t * When true and no custom `fetch` is provided, creates an internal fetch\n\t * that uses Node.js `https.Agent` with `rejectUnauthorized: false`.\n\t * Only works in Node.js; ignored in browsers.\n\t */\n\tinsecure?: boolean;\n}\n\n// ---------------------------------------------------------------------------\n// OrchestratorAsync\n// ---------------------------------------------------------------------------\n\nexport class OrchestratorAsync {\n\tprotected _baseUrl: string;\n\tprotected _apiKey: string | undefined;\n\tprotected _getToken: (() => string | Promise<string>) | undefined;\n\tprotected _timeoutMs: number;\n\tprotected _maxRetries: number;\n\tprotected _locale: string | undefined;\n\tprotected _fetch: typeof globalThis.fetch;\n\tprotected _abortController: AbortController | null = null;\n\n\tconstructor(opts: OrchestratorClientOptions = {}) {\n\t\tthis._baseUrl = (opts.baseUrl ?? \"http://localhost:8080\").replace(\n\t\t\t/\\/+$/,\n\t\t\t\"\",\n\t\t);\n\t\tthis._apiKey = opts.apiKey;\n\t\tthis._getToken = opts.getToken;\n\t\tthis._timeoutMs = opts.timeoutMs ?? DEFAULT_TIMEOUT_MS;\n\t\tthis._maxRetries = opts.maxRetries ?? DEFAULT_MAX_RETRIES;\n\t\tthis._locale = opts.locale;\n\t\tthis._fetch = opts.fetch ?? globalThis.fetch.bind(globalThis);\n\t\tif (\n\t\t\topts.insecure &&\n\t\t\t!opts.fetch &&\n\t\t\ttypeof process !== \"undefined\" &&\n\t\t\tprocess.versions?.node\n\t\t) {\n\t\t\t// Lazy-init insecure fetch — requires async import of Node.js modules\n\t\t\t// The actual switch happens at request time since we can't await here\n\t\t\tthis._insecure = true;\n\t\t}\n\t}\n\n\tprotected _insecure = false;\n\n\tasync close(): Promise<void> {\n\t\tthis._abortController?.abort();\n\t}\n\n\t// ------------------------------------------------------------------\n\t// Internal helpers\n\t// ------------------------------------------------------------------\n\n\tprotected _makeUrl(path: string): string {\n\t\treturn `${this._baseUrl}${path}`;\n\t}\n\n\tprotected _makeAbsoluteUrl(path: string): URL {\n\t\tconst raw = this._makeUrl(path);\n\t\t// In a browser with a relative baseUrl (e.g. \"/api\"), the URL constructor\n\t\t// needs the current page origin as a base; in Node.js there is no location.\n\t\tconst base =\n\t\t\ttypeof globalThis.location !== \"undefined\"\n\t\t\t\t? globalThis.location.href\n\t\t\t\t: undefined;\n\t\treturn new URL(raw, base);\n\t}\n\n\tprotected async _resolveHeaders(): Promise<Record<string, string>> {\n\t\tconst headers: Record<string, string> = {};\n\t\tif (this._apiKey) {\n\t\t\theaders.Authorization = `Bearer ${this._apiKey}`;\n\t\t} else if (this._getToken) {\n\t\t\tconst token = await this._getToken();\n\t\t\tif (token) {\n\t\t\t\theaders.Authorization = `Bearer ${token}`;\n\t\t\t}\n\t\t}\n\t\tif (this._locale) {\n\t\t\theaders[\"X-Locale\"] = this._locale;\n\t\t}\n\t\treturn headers;\n\t}\n\n\tprotected async _request(\n\t\tmethod: string,\n\t\tpath: string,\n\t\topts?: {\n\t\t\tjsonBody?: unknown;\n\t\t\tparams?: Record<string, string | number | boolean | undefined>;\n\t\t\theaders?: Record<string, string>;\n\t\t\trawResponse?: boolean;\n\t\t\tsignal?: AbortSignal;\n\t\t},\n\t): Promise<Response | unknown> {\n\t\tconst url = this._makeAbsoluteUrl(path);\n\t\tif (opts?.params) {\n\t\t\tfor (const [key, value] of Object.entries(opts.params)) {\n\t\t\t\tif (value !== undefined) {\n\t\t\t\t\turl.searchParams.set(key, String(value));\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tconst extraHeaders = await this._resolveHeaders();\n\t\tconst mergedHeaders: Record<string, string> = {\n\t\t\t...extraHeaders,\n\t\t\t...(opts?.headers ?? {}),\n\t\t};\n\t\tif (opts?.jsonBody !== undefined && !mergedHeaders[\"Content-Type\"]) {\n\t\t\tmergedHeaders[\"Content-Type\"] = \"application/json\";\n\t\t}\n\n\t\tfor (let attempt = 1; attempt <= this._maxRetries; attempt++) {\n\t\t\ttry {\n\t\t\t\tconst controller = new AbortController();\n\t\t\t\tconst timeoutId = setTimeout(() => controller.abort(), this._timeoutMs);\n\t\t\t\tconst signal = opts?.signal\n\t\t\t\t\t? combineSignals(opts.signal, controller.signal)\n\t\t\t\t\t: controller.signal;\n\n\t\t\t\tconst response = await this._fetch(url.toString(), {\n\t\t\t\t\tmethod,\n\t\t\t\t\theaders: mergedHeaders,\n\t\t\t\t\tbody:\n\t\t\t\t\t\topts?.jsonBody !== undefined\n\t\t\t\t\t\t\t? JSON.stringify(opts.jsonBody)\n\t\t\t\t\t\t\t: undefined,\n\t\t\t\t\tsignal,\n\t\t\t\t});\n\n\t\t\t\tclearTimeout(timeoutId);\n\n\t\t\t\tif (response.status === 401 || response.status === 403) {\n\t\t\t\t\tconst defaultAuthMsg =\n\t\t\t\t\t\tresponse.status === 401\n\t\t\t\t\t\t\t? `Authentication failed for ${method} ${path}`\n\t\t\t\t\t\t\t: `Access denied for ${method} ${path}`;\n\t\t\t\t\tlet authErrorCode: string | null = null;\n\t\t\t\t\tlet authErrorMsg = defaultAuthMsg;\n\t\t\t\t\ttry {\n\t\t\t\t\t\tconst body = (await response.clone().json()) as Record<\n\t\t\t\t\t\t\tstring,\n\t\t\t\t\t\t\tunknown\n\t\t\t\t\t\t>;\n\t\t\t\t\t\tconst parsed = parseApiErrorBody(body, defaultAuthMsg);\n\t\t\t\t\t\tauthErrorMsg = parsed.message;\n\t\t\t\t\t\tauthErrorCode = parsed.errorCode;\n\t\t\t\t\t} catch {\n\t\t\t\t\t\t// body unreadable — fall back to generic message\n\t\t\t\t\t}\n\t\t\t\t\tthrow new OrchestratorAuthError(\n\t\t\t\t\t\tauthErrorMsg,\n\t\t\t\t\t\tresponse.status,\n\t\t\t\t\t\tauthErrorCode,\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\tif (response.status === 404) {\n\t\t\t\t\tthrow new OrchestratorNotFoundError(\n\t\t\t\t\t\t\"resource\",\n\t\t\t\t\t\tpath,\n\t\t\t\t\t\t`Endpoint returned 404: ${method} ${path}`,\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\tif (response.status >= 500) {\n\t\t\t\t\tif (attempt === this._maxRetries) {\n\t\t\t\t\t\t// Fall through to error handling below\n\t\t\t\t\t} else {\n\t\t\t\t\t\tconst delay = RETRY_BACKOFF_BASE * 2 ** (attempt - 1);\n\t\t\t\t\t\tconsole.warn(\n\t\t\t\t\t\t\t`Server error ${response.status} (attempt ${attempt}/${this._maxRetries}), retrying in ${delay}ms`,\n\t\t\t\t\t\t);\n\t\t\t\t\t\tawait sleep(delay);\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (opts?.rawResponse) {\n\t\t\t\t\treturn response;\n\t\t\t\t}\n\n\t\t\t\tif (response.ok) {\n\t\t\t\t\tconst contentType = response.headers.get(\"content-type\") ?? \"\";\n\t\t\t\t\tif (contentType.includes(\"application/json\")) {\n\t\t\t\t\t\treturn deepCamelCase(await response.json());\n\t\t\t\t\t}\n\t\t\t\t\treturn { _text: await response.text() };\n\t\t\t\t}\n\n\t\t\t\t// Error handling\n\t\t\t\tconst defaultMessage = `API Error with status ${response.status}`;\n\t\t\t\tlet errorMessage = defaultMessage;\n\t\t\t\tlet errorCode: string | null = null;\n\t\t\t\tlet errorDetails: Record<string, unknown> | null = null;\n\t\t\t\ttry {\n\t\t\t\t\tconst clonedResponse = response.clone();\n\t\t\t\t\tconst body = (await clonedResponse.json()) as Record<string, unknown>;\n\t\t\t\t\tconst parsed = parseApiErrorBody(body, JSON.stringify(body));\n\t\t\t\t\terrorMessage = parsed.message;\n\t\t\t\t\terrorCode = parsed.errorCode;\n\t\t\t\t\terrorDetails = parsed.details;\n\t\t\t\t} catch {\n\t\t\t\t\ttry {\n\t\t\t\t\t\terrorMessage = await response.text();\n\t\t\t\t\t} catch {\n\t\t\t\t\t\terrorMessage = defaultMessage;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tthrow new OrchestratorAPIError(\n\t\t\t\t\terrorMessage,\n\t\t\t\t\tresponse.status,\n\t\t\t\t\terrorCode,\n\t\t\t\t\terrorDetails ?? undefined,\n\t\t\t\t);\n\t\t\t} catch (err) {\n\t\t\t\tif (\n\t\t\t\t\terr instanceof OrchestratorAPIError ||\n\t\t\t\t\terr instanceof OrchestratorAuthError ||\n\t\t\t\t\terr instanceof OrchestratorNotFoundError\n\t\t\t\t) {\n\t\t\t\t\tthrow err;\n\t\t\t\t}\n\t\t\t\tif (err instanceof OrchestratorConnectionError) {\n\t\t\t\t\tthrow err;\n\t\t\t\t}\n\t\t\t\tif (err instanceof DOMException && err.name === \"AbortError\") {\n\t\t\t\t\tif (attempt === this._maxRetries) {\n\t\t\t\t\t\tthrow new OrchestratorConnectionError(\n\t\t\t\t\t\t\t`Request timed out after ${this._timeoutMs}ms (${this._maxRetries} attempts): ${method} ${path}`,\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t\tconst delay = RETRY_BACKOFF_BASE * 2 ** (attempt - 1);\n\t\t\t\t\tconsole.warn(\n\t\t\t\t\t\t`Request timed out (attempt ${attempt}/${this._maxRetries}), retrying in ${delay}ms`,\n\t\t\t\t\t);\n\t\t\t\t\tawait sleep(delay);\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tif (err instanceof TypeError) {\n\t\t\t\t\t// fetch network errors are TypeErrors\n\t\t\t\t\tif (attempt === this._maxRetries) {\n\t\t\t\t\t\tthrow new OrchestratorConnectionError(\n\t\t\t\t\t\t\t`Orchestrator unreachable after ${this._maxRetries} attempts: ${(err as Error).message}`,\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t\tconst delay = RETRY_BACKOFF_BASE * 2 ** (attempt - 1);\n\t\t\t\t\tconsole.warn(\n\t\t\t\t\t\t`Request failed (attempt ${attempt}/${this._maxRetries}), retrying in ${delay}ms: ${(err as Error).message}`,\n\t\t\t\t\t);\n\t\t\t\t\tawait sleep(delay);\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tthrow err;\n\t\t\t}\n\t\t}\n\n\t\tthrow new OrchestratorConnectionError(\n\t\t\t`Request failed after ${this._maxRetries} attempts: ${method} ${path}`,\n\t\t);\n\t}\n\n\tprotected async _get<T>(\n\t\tpath: string,\n\t\tparams?: Record<string, string | number | boolean | undefined>,\n\t): Promise<T> {\n\t\treturn (await this._request(\"GET\", path, { params })) as T;\n\t}\n\n\tprotected async _post<T>(path: string, body?: unknown): Promise<T> {\n\t\treturn (await this._request(\"POST\", path, { jsonBody: body })) as T;\n\t}\n\n\tprotected async _put<T>(path: string, body?: unknown): Promise<T> {\n\t\treturn (await this._request(\"PUT\", path, { jsonBody: body })) as T;\n\t}\n\n\tprotected async _delete<T>(path: string): Promise<T> {\n\t\treturn (await this._request(\"DELETE\", path)) as T;\n\t}\n\n\t// ------------------------------------------------------------------\n\t// Tasks\n\t// ------------------------------------------------------------------\n\n\tasync listTasks(params?: {\n\t\tpage?: number;\n\t\tlimit?: number;\n\t\torderBy?: string;\n\t\torderDirection?: string;\n\t\tworkflowId?: string;\n\t\tlocale?: string;\n\t}): Promise<TaskListResult> {\n\t\tconst headers: Record<string, string> = {};\n\t\tif (params?.locale) headers[\"X-Locale\"] = params.locale;\n\t\tconst data = (await this._request(\"GET\", \"/tasks\", {\n\t\t\tparams: {\n\t\t\t\tpage: params?.page,\n\t\t\t\tlimit: params?.limit,\n\t\t\t\torder_by: params?.orderBy ? camelToSnake(params.orderBy) : undefined,\n\t\t\t\torder_direction: params?.orderDirection,\n\t\t\t\tworkflow_id: params?.workflowId,\n\t\t\t},\n\t\t\theaders,\n\t\t})) as Record<string, unknown>;\n\t\tconst tasks = ((data.tasks ?? []) as Record<string, unknown>[]).map(\n\t\t\tbuildTaskSummary,\n\t\t);\n\t\treturn { tasks, pagination: buildPagination(data) };\n\t}\n\n\tasync createTask(params: {\n\t\tworkflowId: string;\n\t\tgoalPrompt: string;\n\t\tmaxIterations?: number;\n\t\treasoningEffort?: string;\n\t\tsystemPrompt?: string;\n\t\tdeveloperPrompt?: string;\n\t\tticketId?: string;\n\t\tticketText?: string;\n\t\tsummary?: string;\n\t\tproblemSummary?: string;\n\t\tsolutionStrategy?: string;\n\t\tagentModelId?: string;\n\t\torchestratorModelId?: string;\n\t\tavailableTools?: string[];\n\t\tattachmentIds?: string[];\n\t\toptions?: Record<string, boolean>;\n\t}): Promise<TaskCreateResponse> {\n\t\tconst data = await this._post<Record<string, unknown>>(\"/task/create\", {\n\t\t\tworkflow_id: params.workflowId,\n\t\t\tgoal_prompt: params.goalPrompt,\n\t\t\tmax_iterations: params.maxIterations,\n\t\t\treasoning_effort: params.reasoningEffort,\n\t\t\tsystem_prompt: params.systemPrompt,\n\t\t\tdeveloper_prompt: params.developerPrompt,\n\t\t\tticket_id: params.ticketId,\n\t\t\tticket_text: params.ticketText,\n\t\t\tsummary: params.summary,\n\t\t\tproblem_summary: params.problemSummary,\n\t\t\tsolution_strategy: params.solutionStrategy,\n\t\t\tagent_model_id: params.agentModelId,\n\t\t\torchestrator_model_id: params.orchestratorModelId,\n\t\t\tavailable_tools: params.availableTools,\n\t\t\tattachment_ids: params.attachmentIds,\n\t\t\toptions: params.options,\n\t\t});\n\t\treturn {\n\t\t\ttaskId: (data.taskId ?? data.task_id ?? \"\") as string,\n\t\t\tstatus: (data.status ?? \"\") as string,\n\t\t};\n\t}\n\n\tasync getTaskStatus(taskId: string, locale?: string): Promise<TaskDetail> {\n\t\tconst headers: Record<string, string> = {};\n\t\tif (locale) headers[\"X-Locale\"] = locale;\n\t\tconst data = (await this._request(\"GET\", \"/task/status\", {\n\t\t\tparams: { task_id: taskId },\n\t\t\theaders,\n\t\t})) as Record<string, unknown>;\n\t\treturn {\n\t\t\t...buildTaskSummary(data),\n\t\t\tsubtaskIds: (data.subtaskIds ?? data.subtask_ids ?? []) as string[],\n\t\t\tworkflowData: (data.workflowData ?? data.workflow_data ?? null) as Record<\n\t\t\t\tstring,\n\t\t\t\tunknown\n\t\t\t> | null,\n\t\t\toptions: (data.options ?? null) as Record<string, unknown> | null,\n\t\t};\n\t}\n\n\tasync setTaskStatus(\n\t\ttaskId: string,\n\t\tstatus: string,\n\t): Promise<SuccessResponse> {\n\t\tconst data = await this._post<Record<string, unknown>>(\"/task/set_status\", {\n\t\t\ttask_id: taskId,\n\t\t\tstatus,\n\t\t});\n\t\treturn { message: (data.message ?? \"\") as string };\n\t}\n\n\tasync getTaskConversation(\n\t\ttaskId: string,\n\t\tparams?: {\n\t\t\tincludeSummaries?: boolean;\n\t\t\texcludeArchived?: boolean;\n\t\t\tlocale?: string;\n\t\t},\n\t): Promise<ConversationResult> {\n\t\tconst headers: Record<string, string> = {};\n\t\tif (params?.locale) headers[\"X-Locale\"] = params.locale;\n\t\tconst data = (await this._request(\"GET\", \"/task/conversation\", {\n\t\t\tparams: {\n\t\t\t\ttask_id: taskId,\n\t\t\t\tinclude_summaries: params?.includeSummaries,\n\t\t\t\texclude_archived: params?.excludeArchived,\n\t\t\t},\n\t\t\theaders,\n\t\t})) as Record<string, unknown>;\n\t\treturn {\n\t\t\ttaskId: (data.taskId ?? data.task_id ?? taskId) as string,\n\t\t\tconversation: (\n\t\t\t\t(data.conversation ?? []) as Record<string, unknown>[]\n\t\t\t).map((m) => m as unknown as Message),\n\t\t};\n\t}\n\n\tasync getArchivedMessageContent(\n\t\ttaskId: string,\n\t\tmessageId: number,\n\t): Promise<ArchivedContent> {\n\t\treturn this._get<ArchivedContent>(\"/task/message/archived-content\", {\n\t\t\ttask_id: taskId,\n\t\t\tmessage_id: messageId,\n\t\t});\n\t}\n\n\tasync getTaskCompactions(taskId: string): Promise<CompactionEvent[]> {\n\t\treturn this._get<CompactionEvent[]>(\"/task/compactions\", {\n\t\t\ttask_id: taskId,\n\t\t});\n\t}\n\n\tasync getTaskJournal(taskId: string): Promise<TaskJournal> {\n\t\tconst data = await this._get<Record<string, unknown>>(\"/task/journal\", {\n\t\t\ttask_id: taskId,\n\t\t});\n\t\treturn {\n\t\t\ttaskId: (data.taskId ?? data.task_id ?? taskId) as string,\n\t\t\texists: (data.exists ?? false) as boolean,\n\t\t\tcontent: (data.content ?? null) as string | null,\n\t\t\tupdatedAt: (data.updated_at ?? data.updatedAt ?? null) as string | null,\n\t\t\tversion: (data.version ?? null) as number | null,\n\t\t\tsectionsOverBudget: (data.sections_over_budget ??\n\t\t\t\tdata.sectionsOverBudget ??\n\t\t\t\tnull) as Record<string, number> | null,\n\t\t};\n\t}\n\n\tasync cancelTask(taskId: string): Promise<TaskCancelResponse> {\n\t\tconst data = await this._post<Record<string, unknown>>(\"/task/cancel\", {\n\t\t\ttask_id: taskId,\n\t\t});\n\t\treturn {\n\t\t\ttaskId: (data.taskId ?? data.task_id ?? taskId) as string,\n\t\t\tkilled: (data.killed ?? false) as boolean,\n\t\t\tvia: (data.via ?? \"none\") as \"local\" | \"remote\" | \"none\" | \"fallback\",\n\t\t\tholderId: (data.holderId ?? data.holder_id ?? undefined) as\n\t\t\t\t| string\n\t\t\t\t| undefined,\n\t\t\treason: (data.reason ?? undefined) as string | undefined,\n\t\t\tmessage: (data.message ?? \"\") as string,\n\t\t};\n\t}\n\n\tasync deleteTask(taskId: string): Promise<TaskDeleteResult> {\n\t\tconst data = await this._post<Record<string, unknown>>(\"/task/delete\", {\n\t\t\ttask_id: taskId,\n\t\t});\n\t\treturn {\n\t\t\tdeletedTasks: (data.deletedTasks ?? data.deleted_tasks ?? []) as string[],\n\t\t\tfailedTasks: (data.failedTasks ?? data.failed_tasks ?? []) as string[],\n\t\t\ttotalDeleted: (data.totalDeleted ?? data.total_deleted ?? 0) as number,\n\t\t\ttotalFailed: (data.totalFailed ?? data.total_failed ?? 0) as number,\n\t\t};\n\t}\n\n\tasync deleteTasks(taskIds: string[]): Promise<TaskDeleteResult> {\n\t\tconst data = await this._post<Record<string, unknown>>(\n\t\t\t\"/task/delete/multiple\",\n\t\t\t{ task_ids: taskIds },\n\t\t);\n\t\treturn {\n\t\t\tdeletedTasks: (data.deletedTasks ?? data.deleted_tasks ?? []) as string[],\n\t\t\tfailedTasks: (data.failedTasks ?? data.failed_tasks ?? []) as string[],\n\t\t\ttotalDeleted: (data.totalDeleted ?? data.total_deleted ?? 0) as number,\n\t\t\ttotalFailed: (data.totalFailed ?? data.total_failed ?? 0) as number,\n\t\t};\n\t}\n\n\t// ------------------------------------------------------------------\n\t// Attachments\n\t// ------------------------------------------------------------------\n\n\tasync uploadAttachment(\n\t\tfile: File | Blob,\n\t\tfilename?: string,\n\t\toptions?: { signal?: AbortSignal },\n\t): Promise<AttachmentUploadResponse> {\n\t\tconst formData = new FormData();\n\t\tformData.append(\"file\", file, filename);\n\t\tconst headers = await this._resolveHeaders();\n\t\t// Don't set Content-Type for FormData — browser sets it with boundary\n\t\tconst response = await this._fetch(this._makeUrl(\"/attachment\"), {\n\t\t\tmethod: \"POST\",\n\t\t\theaders: { ...headers },\n\t\t\tbody: formData,\n\t\t\tsignal: options?.signal,\n\t\t});\n\t\tif (!response.ok) {\n\t\t\tconst defaultMessage = `Attachment upload failed: ${response.statusText}`;\n\t\t\tlet errorMessage = defaultMessage;\n\t\t\tlet errorCode: string | null = null;\n\t\t\tlet errorDetails: Record<string, unknown> | null = null;\n\t\t\ttry {\n\t\t\t\tconst body = (await response.clone().json()) as Record<string, unknown>;\n\t\t\t\tconst parsed = parseApiErrorBody(body, defaultMessage);\n\t\t\t\terrorMessage = parsed.message;\n\t\t\t\terrorCode = parsed.errorCode;\n\t\t\t\terrorDetails = parsed.details;\n\t\t\t} catch {\n\t\t\t\ttry {\n\t\t\t\t\terrorMessage = (await response.text()) || defaultMessage;\n\t\t\t\t} catch {\n\t\t\t\t\terrorMessage = defaultMessage;\n\t\t\t\t}\n\t\t\t}\n\t\t\tthrow new OrchestratorAPIError(\n\t\t\t\terrorMessage,\n\t\t\t\tresponse.status,\n\t\t\t\terrorCode,\n\t\t\t\terrorDetails ?? undefined,\n\t\t\t);\n\t\t}\n\t\tconst data = (await response.json()) as Record<string, unknown>;\n\t\treturn {\n\t\t\tid: (data.id ?? \"\") as string,\n\t\t\tfilename: (data.filename ?? \"\") as string,\n\t\t\tmimeType: (data.mimeType ?? data.mime_type ?? \"\") as string,\n\t\t\tsize: (data.size ?? 0) as number,\n\t\t\twidth: (data.width ?? null) as number | null,\n\t\t\theight: (data.height ?? null) as number | null,\n\t\t\ttokenCount: (data.tokenCount ?? data.token_count ?? null) as\n\t\t\t\t| number\n\t\t\t\t| null,\n\t\t};\n\t}\n\n\tasync downloadAttachment(attachmentId: string): Promise<Blob> {\n\t\tconst headers = await this._resolveHeaders();\n\t\tconst response = await this._fetch(\n\t\t\tthis._makeUrl(`/attachment/${attachmentId}`),\n\t\t\t{ headers },\n\t\t);\n\t\tif (!response.ok) {\n\t\t\tthrow new OrchestratorAPIError(\n\t\t\t\t`Attachment download failed: ${response.statusText}`,\n\t\t\t\tresponse.status,\n\t\t\t);\n\t\t}\n\t\treturn response.blob();\n\t}\n\n\t// ------------------------------------------------------------------\n\t// Interactive workflow\n\t// ------------------------------------------------------------------\n\n\tasync sendInteractiveMessage(\n\t\ttaskId: string,\n\t\tmessage: string,\n\t\tattachmentIds?: string[],\n\t): Promise<SuccessResponse> {\n\t\tconst data = await this._post<Record<string, unknown>>(\n\t\t\t\"/task/interactive/message\",\n\t\t\t{ task_id: taskId, message, attachment_ids: attachmentIds },\n\t\t);\n\t\treturn { message: (data.message ?? \"\") as string };\n\t}\n\n\tasync markInteractiveComplete(taskId: string): Promise<SuccessResponse> {\n\t\tconst data = await this._post<Record<string, unknown>>(\n\t\t\t\"/task/interactive/mark_complete\",\n\t\t\t{ task_id: taskId },\n\t\t);\n\t\treturn { message: (data.message ?? \"\") as string };\n\t}\n\n\tasync markInteractiveFailed(taskId: string): Promise<SuccessResponse> {\n\t\tconst data = await this._post<Record<string, unknown>>(\n\t\t\t\"/task/interactive/mark_failed\",\n\t\t\t{ task_id: taskId },\n\t\t);\n\t\treturn { message: (data.message ?? \"\") as string };\n\t}\n\n\tasync approveInteractiveAction(\n\t\ttaskId: string,\n\t\tapproved = true,\n\t): Promise<SuccessResponse> {\n\t\tconst data = await this._post<Record<string, unknown>>(\n\t\t\t\"/task/interactive/action\",\n\t\t\t{ task_id: taskId, approved },\n\t\t);\n\t\treturn { message: (data.message ?? \"\") as string };\n\t}\n\n\tasync stopInteractive(taskId: string): Promise<SuccessResponse> {\n\t\tconst data = await this._post<Record<string, unknown>>(\n\t\t\t\"/task/interactive/stop\",\n\t\t\t{ task_id: taskId },\n\t\t);\n\t\treturn { message: (data.message ?? \"\") as string };\n\t}\n\n\t// ------------------------------------------------------------------\n\t// Proactive workflow\n\t// ------------------------------------------------------------------\n\n\tasync sendProactiveGuide(\n\t\ttaskId: string,\n\t\tmessage: string,\n\t\tattachmentIds?: string[],\n\t): Promise<SuccessResponse> {\n\t\tconst data = await this._post<Record<string, unknown>>(\n\t\t\t\"/task/proactive/guide\",\n\t\t\t{ task_id: taskId, message, attachment_ids: attachmentIds },\n\t\t);\n\t\treturn { message: (data.message ?? \"\") as string };\n\t}\n\n\tasync respondProactiveHelp(\n\t\ttaskId: string,\n\t\tresponse: string,\n\t): Promise<SuccessResponse> {\n\t\tconst data = await this._post<Record<string, unknown>>(\n\t\t\t\"/task/proactive/help\",\n\t\t\t{ task_id: taskId, response },\n\t\t);\n\t\treturn { message: (data.message ?? \"\") as string };\n\t}\n\n\tasync approveProactiveAction(\n\t\ttaskId: string,\n\t\tapproved = true,\n\t): Promise<SuccessResponse> {\n\t\tconst data = await this._post<Record<string, unknown>>(\n\t\t\t\"/task/proactive/action\",\n\t\t\t{ task_id: taskId, approved },\n\t\t);\n\t\treturn { message: (data.message ?? \"\") as string };\n\t}\n\n\t// ------------------------------------------------------------------\n\t// Ticket workflow\n\t// ------------------------------------------------------------------\n\n\tasync sendTicketGuide(\n\t\ttaskId: string,\n\t\tmessage: string,\n\t\tattachmentIds?: string[],\n\t): Promise<SuccessResponse> {\n\t\tconst data = await this._post<Record<string, unknown>>(\n\t\t\t\"/task/ticket/guide\",\n\t\t\t{ task_id: taskId, message, attachment_ids: attachmentIds },\n\t\t);\n\t\treturn { message: (data.message ?? \"\") as string };\n\t}\n\n\tasync respondTicketHelp(\n\t\ttaskId: string,\n\t\tresponse: string,\n\t): Promise<SuccessResponse> {\n\t\tconst data = await this._post<Record<string, unknown>>(\n\t\t\t\"/task/ticket/help\",\n\t\t\t{ task_id: taskId, response },\n\t\t);\n\t\treturn { message: (data.message ?? \"\") as string };\n\t}\n\n\tasync approveTicketAction(\n\t\ttaskId: string,\n\t\tapproved = true,\n\t): Promise<SuccessResponse> {\n\t\tconst data = await this._post<Record<string, unknown>>(\n\t\t\t\"/task/ticket/action\",\n\t\t\t{ task_id: taskId, approved },\n\t\t);\n\t\treturn { message: (data.message ?? \"\") as string };\n\t}\n\n\tasync wakeTicket(taskId: string): Promise<SuccessResponse> {\n\t\tconst data = await this._post<Record<string, unknown>>(\n\t\t\t\"/task/ticket/wake\",\n\t\t\t{ task_id: taskId },\n\t\t);\n\t\treturn { message: (data.message ?? \"\") as string };\n\t}\n\n\t// ------------------------------------------------------------------\n\t// Matrix workflow\n\t// ------------------------------------------------------------------\n\n\tasync sendMatrixMessage(\n\t\ttaskId: string,\n\t\tmessage: string,\n\t\tattachmentIds?: string[],\n\t): Promise<SuccessResponse> {\n\t\tconst data = await this._post<Record<string, unknown>>(\n\t\t\t\"/task/matrix/message\",\n\t\t\t{ task_id: taskId, message, attachment_ids: attachmentIds },\n\t\t);\n\t\treturn { message: (data.message ?? \"\") as string };\n\t}\n\n\tasync markMatrixComplete(taskId: string): Promise<SuccessResponse> {\n\t\tconst data = await this._post<Record<string, unknown>>(\n\t\t\t\"/task/matrix/mark_complete\",\n\t\t\t{ task_id: taskId },\n\t\t);\n\t\treturn { message: (data.message ?? \"\") as string };\n\t}\n\n\tasync markMatrixFailed(taskId: string): Promise<SuccessResponse> {\n\t\tconst data = await this._post<Record<string, unknown>>(\n\t\t\t\"/task/matrix/mark_failed\",\n\t\t\t{ task_id: taskId },\n\t\t);\n\t\treturn { message: (data.message ?? \"\") as string };\n\t}\n\n\tasync approveMatrixAction(\n\t\ttaskId: string,\n\t\tapproved = true,\n\t): Promise<SuccessResponse> {\n\t\tconst data = await this._post<Record<string, unknown>>(\n\t\t\t\"/task/matrix/action\",\n\t\t\t{ task_id: taskId, approved },\n\t\t);\n\t\treturn { message: (data.message ?? \"\") as string };\n\t}\n\n\tasync getMatrixConversation(\n\t\ttaskId: string,\n\t\tphase?: number,\n\t\tincludeSummaries?: boolean,\n\t): Promise<MatrixConversationResult> {\n\t\tconst data = await this._get<Record<string, unknown>>(\n\t\t\t\"/task/matrix/conversation\",\n\t\t\t{\n\t\t\t\ttask_id: taskId,\n\t\t\t\tphase,\n\t\t\t\tinclude_summaries: includeSummaries,\n\t\t\t},\n\t\t);\n\t\treturn {\n\t\t\ttaskId: (data.taskId ?? data.task_id ?? taskId) as string,\n\t\t\tconversation: (\n\t\t\t\t(data.conversation ?? []) as Record<string, unknown>[]\n\t\t\t).map((m) => m as unknown as Message),\n\t\t};\n\t}\n\n\t// ------------------------------------------------------------------\n\t// VSA workflow\n\t// ------------------------------------------------------------------\n\n\tasync createVSATask(params: {\n\t\tuserId: string;\n\t\tgoalPrompt: string;\n\t\ttitle?: string;\n\t\tagentModelId?: string;\n\t\torchestratorModelId?: string;\n\t\tattachmentIds?: string[];\n\t\toptions?: Record<string, boolean>;\n\t\tdelegatedToken?: string;\n\t}): Promise<VSATaskCreateResponse> {\n\t\tconst body: Record<string, unknown> = {\n\t\t\tuser_id: params.userId,\n\t\t\tgoal_prompt: params.goalPrompt,\n\t\t\ttitle: params.title,\n\t\t\tagent_model_id: params.agentModelId,\n\t\t\torchestrator_model_id: params.orchestratorModelId,\n\t\t\tattachment_ids: params.attachmentIds,\n\t\t\toptions: params.options,\n\t\t};\n\t\tif (params.delegatedToken !== undefined) {\n\t\t\tbody.delegated_token = params.delegatedToken;\n\t\t}\n\t\tconst data = await this._post<Record<string, unknown>>(\n\t\t\t\"/task/vsa/create\",\n\t\t\tbody,\n\t\t);\n\t\treturn {\n\t\t\ttaskId: (data.taskId ?? data.task_id ?? \"\") as string,\n\t\t\tstatus: (data.status ?? \"\") as string,\n\t\t};\n\t}\n\n\tasync sendVSAMessage(\n\t\ttaskId: string,\n\t\tmessage: string,\n\t\toptions?: {\n\t\t\tattachmentIds?: string[];\n\t\t\t/** Short-lived AiDIT delegated token. When provided, overwrites the\n\t\t\t * token stored for the task. Omitting leaves the existing token unchanged. */\n\t\t\tdelegatedToken?: string;\n\t\t},\n\t): Promise<SuccessResponse> {\n\t\tconst body: Record<string, unknown> = {\n\t\t\ttask_id: taskId,\n\t\t\tmessage,\n\t\t\tattachment_ids: options?.attachmentIds,\n\t\t};\n\t\tif (options?.delegatedToken !== undefined) {\n\t\t\tbody.delegated_token = options.delegatedToken;\n\t\t}\n\t\tconst data = await this._post<Record<string, unknown>>(\n\t\t\t\"/task/vsa/message\",\n\t\t\tbody,\n\t\t);\n\t\treturn { message: (data.message ?? \"\") as string };\n\t}\n\n\tasync renameVSATask(taskId: string, title: string): Promise<SuccessResponse> {\n\t\tconst data = await this._post<Record<string, unknown>>(\"/task/vsa/rename\", {\n\t\t\ttask_id: taskId,\n\t\t\ttitle,\n\t\t});\n\t\treturn { message: (data.message ?? \"\") as string };\n\t}\n\n\tasync regenerateVSATitle(taskId: string): Promise<SuccessResponse> {\n\t\tconst data = await this._post<Record<string, unknown>>(\n\t\t\t\"/task/vsa/regenerate_title\",\n\t\t\t{ task_id: taskId },\n\t\t);\n\t\treturn { message: (data.message ?? \"\") as string };\n\t}\n\n\tasync markVSAComplete(taskId: string): Promise<SuccessResponse> {\n\t\tconst data = await this._post<Record<string, unknown>>(\n\t\t\t\"/task/vsa/mark_complete\",\n\t\t\t{ task_id: taskId },\n\t\t);\n\t\treturn { message: (data.message ?? \"\") as string };\n\t}\n\n\tasync markVSAFailed(taskId: string): Promise<SuccessResponse> {\n\t\tconst data = await this._post<Record<string, unknown>>(\n\t\t\t\"/task/vsa/mark_failed\",\n\t\t\t{ task_id: taskId },\n\t\t);\n\t\treturn { message: (data.message ?? \"\") as string };\n\t}\n\n\tasync stopVSA(taskId: string): Promise<SuccessResponse> {\n\t\tconst data = await this._post<Record<string, unknown>>(\"/task/vsa/stop\", {\n\t\t\ttask_id: taskId,\n\t\t});\n\t\treturn { message: (data.message ?? \"\") as string };\n\t}\n\n\tasync deleteVSA(taskId: string): Promise<SuccessResponse> {\n\t\tconst data = await this._post<Record<string, unknown>>(\"/task/vsa/delete\", {\n\t\t\ttask_id: taskId,\n\t\t});\n\t\treturn { message: (data.message ?? \"\") as string };\n\t}\n\n\tasync listVSATasks(\n\t\tuserId: string,\n\t\tparams?: { limit?: number; offset?: number },\n\t): Promise<TaskListResult> {\n\t\tconst data = await this._get<Record<string, unknown>>(\"/task/vsa/list\", {\n\t\t\tuser_id: userId,\n\t\t\tlimit: params?.limit,\n\t\t\toffset: params?.offset,\n\t\t});\n\t\tconst tasks = ((data.tasks ?? []) as Record<string, unknown>[]).map(\n\t\t\tbuildTaskSummary,\n\t\t);\n\t\treturn { tasks, pagination: buildPagination(data) };\n\t}\n\n\tasync searchVSATasks(\n\t\tuserId: string,\n\t\tquery: string,\n\t\tlimit?: number,\n\t): Promise<TaskListResult> {\n\t\tconst data = await this._get<Record<string, unknown>>(\"/task/vsa/search\", {\n\t\t\tuser_id: userId,\n\t\t\tquery,\n\t\t\tlimit,\n\t\t});\n\t\tconst tasks = ((data.tasks ?? []) as Record<string, unknown>[]).map(\n\t\t\tbuildTaskSummary,\n\t\t);\n\t\treturn { tasks, pagination: buildPagination(data) };\n\t}\n\n\tasync deleteVSATasksBulk(taskIds: string[]): Promise<TaskDeleteResult> {\n\t\tconst data = await this._post<Record<string, unknown>>(\n\t\t\t\"/task/vsa/delete_bulk\",\n\t\t\t{ task_ids: taskIds },\n\t\t);\n\t\treturn {\n\t\t\tdeletedTasks: (data.deletedTasks ?? data.deleted_tasks ?? []) as string[],\n\t\t\tfailedTasks: (data.failedTasks ?? data.failed_tasks ?? []) as string[],\n\t\t\ttotalDeleted: (data.totalDeleted ?? data.total_deleted ?? 0) as number,\n\t\t\ttotalFailed: (data.totalFailed ?? data.total_failed ?? 0) as number,\n\t\t};\n\t}\n\n\t// ------------------------------------------------------------------\n\t// MIO (self_managed) workflow\n\t// ------------------------------------------------------------------\n\n\tasync sendMioMessage(\n\t\ttaskId: string,\n\t\tmessage: string,\n\t\tattachmentIds?: string[],\n\t): Promise<SuccessResponse> {\n\t\tconst data = await this._post<Record<string, unknown>>(\n\t\t\t\"/task/self_managed/message\",\n\t\t\t{ task_id: taskId, message, attachment_ids: attachmentIds },\n\t\t);\n\t\treturn { message: (data.message ?? \"\") as string };\n\t}\n\n\tasync approveMioAction(\n\t\ttaskId: string,\n\t\tapproved = true,\n\t\tfeedback?: string,\n\t): Promise<SuccessResponse> {\n\t\tconst data = await this._post<Record<string, unknown>>(\n\t\t\t\"/task/self_managed/action\",\n\t\t\t{ task_id: taskId, approved, feedback },\n\t\t);\n\t\treturn { message: (data.message ?? \"\") as string };\n\t}\n\n\tasync wakeMio(taskId: string): Promise<SuccessResponse> {\n\t\tconst data = await this._post<Record<string, unknown>>(\n\t\t\t\"/task/self_managed/wake\",\n\t\t\t{ task_id: taskId },\n\t\t);\n\t\treturn { message: (data.message ?? \"\") as string };\n\t}\n\n\tasync sendMioUserAway(taskId: string): Promise<SuccessResponse> {\n\t\tconst data = await this._post<Record<string, unknown>>(\n\t\t\t\"/task/self_managed/user_away\",\n\t\t\t{ task_id: taskId },\n\t\t);\n\t\treturn { message: (data.message ?? \"\") as string };\n\t}\n\n\tasync markMioComplete(taskId: string): Promise<SuccessResponse> {\n\t\tconst data = await this._post<Record<string, unknown>>(\n\t\t\t\"/task/self_managed/mark_complete\",\n\t\t\t{ task_id: taskId },\n\t\t);\n\t\treturn { message: (data.message ?? \"\") as string };\n\t}\n\n\tasync markMioFailed(taskId: string): Promise<SuccessResponse> {\n\t\tconst data = await this._post<Record<string, unknown>>(\n\t\t\t\"/task/self_managed/mark_failed\",\n\t\t\t{ task_id: taskId },\n\t\t);\n\t\treturn { message: (data.message ?? \"\") as string };\n\t}\n\n\tasync archiveMio(taskId: string): Promise<SuccessResponse> {\n\t\tconst data = await this._post<Record<string, unknown>>(\n\t\t\t\"/task/self_managed/archive\",\n\t\t\t{ task_id: taskId },\n\t\t);\n\t\treturn { message: (data.message ?? \"\") as string };\n\t}\n\n\tasync getMioContext(taskId: string): Promise<MioContext> {\n\t\tconst data = await this._get<Record<string, unknown>>(\n\t\t\t\"/task/self_managed/context\",\n\t\t\t{ task_id: taskId },\n\t\t);\n\t\treturn {\n\t\t\ttaskId: (data.taskId ?? data.task_id ?? taskId) as string,\n\t\t\tmodelId: (data.modelId ?? data.model_id ?? \"\") as string,\n\t\t\tcurrentTokens: (data.currentTokens ?? data.current_tokens ?? 0) as number,\n\t\t\tcontextLimit: (data.contextLimit ?? data.context_limit ?? 0) as number,\n\t\t\tusagePercentage: (data.usagePercentage ??\n\t\t\t\tdata.usage_percentage ??\n\t\t\t\t0) as number,\n\t\t\ttotalMessages: (data.totalMessages ?? data.total_messages ?? 0) as number,\n\t\t\tactiveMessages: (data.activeMessages ??\n\t\t\t\tdata.active_messages ??\n\t\t\t\t0) as number,\n\t\t\tarchivedMessages: (data.archivedMessages ??\n\t\t\t\tdata.archived_messages ??\n\t\t\t\t0) as number,\n\t\t\tmessagesWithoutTokenCount: (data.messagesWithoutTokenCount ??\n\t\t\t\tdata.messages_without_token_count ??\n\t\t\t\t0) as number,\n\t\t};\n\t}\n\n\tasync getMioMemories(\n\t\ttaskId: string,\n\t\tincludeCommon?: boolean,\n\t): Promise<MioMemoriesResult> {\n\t\tconst data = await this._get<Record<string, unknown>>(\n\t\t\t\"/task/self_managed/memories\",\n\t\t\t{ task_id: taskId, include_common: includeCommon },\n\t\t);\n\t\treturn {\n\t\t\tmemories: (data.memories ?? []) as MioMemoriesResult[\"memories\"],\n\t\t\ttotal: (data.total ?? 0) as number,\n\t\t};\n\t}\n\n\t// ------------------------------------------------------------------\n\t// Tools\n\t// ------------------------------------------------------------------\n\n\tasync listTools(): Promise<ToolsListResult> {\n\t\tconst data = await this._get<Record<string, unknown>>(\"/tools/all\");\n\t\treturn {\n\t\t\ttools: ((data.tools ?? []) as Record<string, unknown>[]).map(\n\t\t\t\t(t) => t as unknown as ToolInfo,\n\t\t\t),\n\t\t\ttotalTools: (data.totalTools ?? data.total_tools ?? 0) as number,\n\t\t\tservers: (data.servers ?? []) as string[],\n\t\t};\n\t}\n\n\tasync getToolCatalog(): Promise<ToolCatalogResult> {\n\t\treturn this._get<ToolCatalogResult>(\"/tools/catalog\");\n\t}\n\n\tasync refreshMCPTools(): Promise<MCPRefreshResult> {\n\t\treturn this._post<MCPRefreshResult>(\"/tools/mcp/refresh\");\n\t}\n\n\tasync validateToolCatalog(): Promise<CatalogValidationResult> {\n\t\treturn this._get<CatalogValidationResult>(\"/tools/validate\");\n\t}\n\n\t// ------------------------------------------------------------------\n\t// Debug / Admin\n\t// ------------------------------------------------------------------\n\n\tasync getWorkflowStates(): Promise<WorkflowStates> {\n\t\tconst data = await this._get<Record<string, unknown>>(\n\t\t\t\"/debug/workflow_states\",\n\t\t);\n\t\treturn {\n\t\t\tvalidStates: (data.validStates ?? data.valid_states ?? {}) as Record<\n\t\t\t\tstring,\n\t\t\t\tstring[]\n\t\t\t>,\n\t\t\tprocessableStates: (data.processableStates ??\n\t\t\t\tdata.processable_states ??\n\t\t\t\t{}) as Record<string, string[]>,\n\t\t\twaitingStates: (data.waitingStates ??\n\t\t\t\tdata.waiting_states ??\n\t\t\t\t{}) as Record<string, string[]>,\n\t\t\tstoppedStates: (data.stoppedStates ??\n\t\t\t\tdata.stopped_states ??\n\t\t\t\t{}) as Record<string, string[]>,\n\t\t\tintermediateStates: (data.intermediateStates ??\n\t\t\t\tdata.intermediate_states ??\n\t\t\t\t{}) as Record<string, string[]>,\n\t\t};\n\t}\n\n\tasync updateTaskModels(\n\t\ttaskId: string,\n\t\tmodels: { agentModelId?: string; orchestratorModelId?: string },\n\t): Promise<SuccessResponse> {\n\t\tconst data = await this._post<Record<string, unknown>>(\n\t\t\t\"/debug/task/models\",\n\t\t\t{\n\t\t\t\ttask_id: taskId,\n\t\t\t\tagent_model_id: models.agentModelId,\n\t\t\t\torchestrator_model_id: models.orchestratorModelId,\n\t\t\t},\n\t\t);\n\t\treturn { message: (data.message ?? \"\") as string };\n\t}\n\n\tasync updateTaskIteration(\n\t\ttaskId: string,\n\t\titeration?: number,\n\t\tmaxIterations?: number,\n\t): Promise<SuccessResponse> {\n\t\tconst data = await this._post<Record<string, unknown>>(\n\t\t\t\"/debug/task/iteration\",\n\t\t\t{ task_id: taskId, iteration, max_iterations: maxIterations },\n\t\t);\n\t\treturn { message: (data.message ?? \"\") as string };\n\t}\n\n\tasync updateTaskWorkflowData(\n\t\ttaskId: string,\n\t\tworkflowData: Record<string, unknown>,\n\t): Promise<SuccessResponse> {\n\t\tconst data = await this._post<Record<string, unknown>>(\n\t\t\t\"/debug/task/workflow_data\",\n\t\t\t{ task_id: taskId, workflow_data: workflowData },\n\t\t);\n\t\treturn { message: (data.message ?? \"\") as string };\n\t}\n\n\tasync deleteMessage(\n\t\ttaskId: string,\n\t\tmessageId: number,\n\t): Promise<SuccessResponse> {\n\t\tconst data = await this._post<Record<string, unknown>>(\n\t\t\t\"/debug/task/message/delete\",\n\t\t\t{ task_id: taskId, message_id: messageId },\n\t\t);\n\t\treturn { message: (data.message ?? \"\") as string };\n\t}\n\n\tasync deleteMessages(\n\t\ttaskId: string,\n\t\tmessageIds: number[],\n\t): Promise<MessageDeleteMultipleResult> {\n\t\tconst data = await this._post<Record<string, unknown>>(\n\t\t\t\"/debug/task/message/delete/multiple\",\n\t\t\t{ task_id: taskId, message_ids: messageIds },\n\t\t);\n\t\treturn {\n\t\t\tdeletedIds: (data.deletedIds ?? data.deleted_ids ?? []) as number[],\n\t\t\tfailedIds: (data.failedIds ?? data.failed_ids ?? []) as number[],\n\t\t\ttotalDeleted: (data.totalDeleted ?? data.total_deleted ?? 0) as number,\n\t\t\ttotalFailed: (data.totalFailed ?? data.total_failed ?? 0) as number,\n\t\t};\n\t}\n\n\tasync updateMessage(\n\t\ttaskId: string,\n\t\tmessageId: number,\n\t\tupdate: { content?: string; reasoning?: string },\n\t): Promise<SuccessResponse> {\n\t\tconst data = await this._post<Record<string, unknown>>(\n\t\t\t\"/debug/task/message/update\",\n\t\t\t{ task_id: taskId, message_id: messageId, ...update },\n\t\t);\n\t\treturn { message: (data.message ?? \"\") as string };\n\t}\n\n\tasync resetMatrixToPhase(\n\t\ttaskId: string,\n\t\tphase: number,\n\t): Promise<SuccessResponse> {\n\t\tconst data = await this._post<Record<string, unknown>>(\n\t\t\t\"/debug/task/matrix/reset_to_phase\",\n\t\t\t{ task_id: taskId, phase },\n\t\t);\n\t\treturn { message: (data.message ?? \"\") as string };\n\t}\n\n\tasync getMessageTranslations(\n\t\ttaskId: string,\n\t\tmessageId: number,\n\t): Promise<MessageTranslationsResult> {\n\t\tconst data = await this._get<Record<string, unknown>>(\n\t\t\t`/debug/task/${taskId}/message/${messageId}/translations`,\n\t\t);\n\t\treturn {\n\t\t\tmessageId: (data.messageId ?? data.message_id ?? messageId) as number,\n\t\t\ttranslations: (\n\t\t\t\t(data.translations ?? []) as Record<string, unknown>[]\n\t\t\t).map((t) => t as unknown as MessageTranslation),\n\t\t};\n\t}\n\n\t// ------------------------------------------------------------------\n\t// Error events\n\t// ------------------------------------------------------------------\n\n\tasync listErrors(params?: {\n\t\tpage?: number;\n\t\tlimit?: number;\n\t\ttaskId?: string;\n\t\tseverity?: string[];\n\t\tsource?: string[];\n\t\tworkflowId?: string;\n\t\terrorCode?: string;\n\t\texceptionType?: string;\n\t\tholderId?: string;\n\t\trequestId?: string;\n\t\tsearch?: string;\n\t\tsince?: string;\n\t\tuntil?: string;\n\t\torderDirection?: string;\n\t}): Promise<ErrorEventListResult> {\n\t\tconst authHeaders = await this._resolveHeaders();\n\t\tconst url = this._makeAbsoluteUrl(\"/errors\");\n\t\tif (params?.page !== undefined)\n\t\t\turl.searchParams.set(\"page\", String(params.page));\n\t\tif (params?.limit !== undefined)\n\t\t\turl.searchParams.set(\"limit\", String(params.limit));\n\t\tif (params?.taskId) url.searchParams.set(\"task_id\", params.taskId);\n\t\tif (params?.workflowId)\n\t\t\turl.searchParams.set(\"workflow_id\", params.workflowId);\n\t\tif (params?.errorCode) url.searchParams.set(\"error_code\", params.errorCode);\n\t\tif (params?.exceptionType)\n\t\t\turl.searchParams.set(\"exception_type\", params.exceptionType);\n\t\tif (params?.holderId) url.searchParams.set(\"holder_id\", params.holderId);\n\t\tif (params?.requestId) url.searchParams.set(\"request_id\", params.requestId);\n\t\tif (params?.search) url.searchParams.set(\"search\", params.search);\n\t\tif (params?.since) url.searchParams.set(\"since\", params.since);\n\t\tif (params?.until) url.searchParams.set(\"until\", params.until);\n\t\tif (params?.orderDirection)\n\t\t\turl.searchParams.set(\"order_direction\", params.orderDirection);\n\t\t// Multi-value params: repeat for each value\n\t\tfor (const s of params?.severity ?? []) {\n\t\t\turl.searchParams.append(\"severity\", s);\n\t\t}\n\t\tfor (const s of params?.source ?? []) {\n\t\t\turl.searchParams.append(\"source\", s);\n\t\t}\n\n\t\tconst response = await this._fetch(url.toString(), {\n\t\t\tmethod: \"GET\",\n\t\t\theaders: { ...authHeaders },\n\t\t});\n\t\tif (!response.ok) {\n\t\t\tthrow new OrchestratorAPIError(\n\t\t\t\t`listErrors failed: ${response.statusText}`,\n\t\t\t\tresponse.status,\n\t\t\t);\n\t\t}\n\t\tconst data = (await response.json()) as Record<string, unknown>;\n\t\treturn {\n\t\t\titems: (\n\t\t\t\t(data.items ?? data.errors ?? []) as Record<string, unknown>[]\n\t\t\t).map((e) => e as unknown as ErrorEventDetail),\n\t\t\tpagination: buildPagination(data),\n\t\t};\n\t}\n\n\tasync getErrorDetail(errorId: string): Promise<ErrorEventDetail> {\n\t\treturn this._get<ErrorEventDetail>(`/errors/${errorId}`);\n\t}\n\n\tasync getErrorStats(since?: string, topN = 10): Promise<ErrorStatsResult> {\n\t\tconst params: Record<string, string | number | boolean | undefined> = {\n\t\t\ttop_n: topN,\n\t\t};\n\t\tif (since) params.since = since;\n\t\treturn this._get<ErrorStatsResult>(\"/errors/stats\", params);\n\t}\n\n\tasync countErrors(\n\t\tsince?: string,\n\t\tseverity?: string[],\n\t): Promise<ErrorCountResult> {\n\t\tconst authHeaders = await this._resolveHeaders();\n\t\tconst url = new URL(this._makeUrl(\"/errors/count\"));\n\t\tif (since) url.searchParams.set(\"since\", since);\n\t\tfor (const s of severity ?? []) {\n\t\t\turl.searchParams.append(\"severity\", s);\n\t\t}\n\t\tconst response = await this._fetch(url.toString(), {\n\t\t\tmethod: \"GET\",\n\t\t\theaders: { ...authHeaders },\n\t\t});\n\t\tif (!response.ok) {\n\t\t\tthrow new OrchestratorAPIError(\n\t\t\t\t`countErrors failed: ${response.statusText}`,\n\t\t\t\tresponse.status,\n\t\t\t);\n\t\t}\n\t\treturn deepCamelCase(await response.json()) as ErrorCountResult;\n\t}\n\n\tasync purgeErrors(): Promise<ErrorPurgeResult> {\n\t\treturn this._delete<ErrorPurgeResult>(\"/errors\");\n\t}\n\n\t// ------------------------------------------------------------------\n\t// Health / Metrics\n\t// ------------------------------------------------------------------\n\n\tasync health(): Promise<HealthStatus> {\n\t\treturn this._get<HealthStatus>(\"/health\");\n\t}\n\n\tasync healthDetailed(): Promise<HealthDetail> {\n\t\treturn this._get<HealthDetail>(\"/health/detailed\");\n\t}\n\n\tasync ready(): Promise<ReadinessResult> {\n\t\treturn this._get<ReadinessResult>(\"/ready\");\n\t}\n\n\tasync healthLeader(): Promise<LeaderStatus> {\n\t\treturn this._get<LeaderStatus>(\"/health/leader\");\n\t}\n\n\tasync getMetrics(types?: string): Promise<MetricSnapshot> {\n\t\tconst params: Record<string, string | number | boolean | undefined> = {};\n\t\tif (types) params.types = types;\n\t\treturn this._get<MetricSnapshot>(\"/metrics\", params);\n\t}\n\n\t// ------------------------------------------------------------------\n\t// Configuration\n\t// ------------------------------------------------------------------\n\n\tasync getSystemStatus(): Promise<SystemStatus> {\n\t\treturn this._get<SystemStatus>(\"/configuration/system/status\");\n\t}\n\n\tasync updateSettings(\n\t\tsettings: Partial<SystemStatusSettings>,\n\t): Promise<SystemStatus> {\n\t\t// Outgoing payload must be snake_case — the backend does not accept camelCase.\n\t\tconst body: Record<string, unknown> = {};\n\t\tif (settings.agentModelId !== undefined) {\n\t\t\tbody.agent_model_id = settings.agentModelId;\n\t\t}\n\t\tif (settings.orchestratorModelId !== undefined) {\n\t\t\tbody.orchestrator_model_id = settings.orchestratorModelId;\n\t\t}\n\t\tif (settings.compactorModelId !== undefined) {\n\t\t\tbody.compactor_model_id = settings.compactorModelId;\n\t\t}\n\t\tif (settings.journalModelId !== undefined) {\n\t\t\tbody.journal_model_id = settings.journalModelId;\n\t\t}\n\t\tif (settings.summaryModelId !== undefined) {\n\t\t\tbody.summary_model_id = settings.summaryModelId;\n\t\t}\n\t\tif (settings.translateModelId !== undefined) {\n\t\t\tbody.translate_model_id = settings.translateModelId;\n\t\t}\n\t\tif (settings.maxConcurrentTasksPerReplica !== undefined) {\n\t\t\tbody.max_concurrent_tasks_per_replica =\n\t\t\t\tsettings.maxConcurrentTasksPerReplica;\n\t\t}\n\t\tif (settings.subagentsEnabled !== undefined) {\n\t\t\tbody.subagents_enabled = settings.subagentsEnabled;\n\t\t}\n\t\tif (settings.localizationTargets !== undefined) {\n\t\t\tbody.localization_targets = settings.localizationTargets;\n\t\t}\n\t\treturn this._post<SystemStatus>(\"/configuration/system/settings\", body);\n\t}\n\n\tasync getConfigurationStatus(): Promise<ConfigurationStatus> {\n\t\treturn this._get<ConfigurationStatus>(\"/configuration/status\");\n\t}\n\n\tasync setAgentModel(model: string): Promise<SuccessResponse> {\n\t\tconst data = await this._post<Record<string, unknown>>(\n\t\t\t\"/configuration/agent\",\n\t\t\t{ model_name: model },\n\t\t);\n\t\treturn { message: (data.message ?? \"\") as string };\n\t}\n\n\tasync setOrchestratorModel(model: string): Promise<SuccessResponse> {\n\t\tconst data = await this._post<Record<string, unknown>>(\n\t\t\t\"/configuration/orchestrator\",\n\t\t\t{ model_name: model },\n\t\t);\n\t\treturn { message: (data.message ?? \"\") as string };\n\t}\n\n\tasync getLLMBackendStatus(): Promise<LLMBackendStatus> {\n\t\treturn this._get<LLMBackendStatus>(\"/configuration/llmbackend/status\");\n\t}\n\n\tasync addLLMBackend(host: string, apiKey: string): Promise<SuccessResponse> {\n\t\tconst data = await this._post<Record<string, unknown>>(\n\t\t\t\"/configuration/llmbackend/add\",\n\t\t\t{ backends: [{ url: host, api_key: apiKey }] },\n\t\t);\n\t\treturn { message: (data.message ?? \"\") as string };\n\t}\n\n\tasync removeLLMBackend(host: string): Promise<SuccessResponse> {\n\t\tconst data = await this._post<Record<string, unknown>>(\n\t\t\t\"/configuration/llmbackend/remove\",\n\t\t\t{ host },\n\t\t);\n\t\treturn { message: (data.message ?? \"\") as string };\n\t}\n\n\tasync getMCPServerStatus(): Promise<MCPServerStatus> {\n\t\treturn this._get<MCPServerStatus>(\"/configuration/mcpserver/status\");\n\t}\n\n\tasync addMCPServer(host: string, apiKey: string): Promise<SuccessResponse> {\n\t\tconst data = await this._post<Record<string, unknown>>(\n\t\t\t\"/configuration/mcpserver/add\",\n\t\t\t{ servers: [{ url: host, api_key: apiKey }] },\n\t\t);\n\t\treturn { message: (data.message ?? \"\") as string };\n\t}\n\n\tasync removeMCPServer(host: string): Promise<SuccessResponse> {\n\t\tconst data = await this._post<Record<string, unknown>>(\n\t\t\t\"/configuration/mcpserver/remove\",\n\t\t\t{ host },\n\t\t);\n\t\treturn { message: (data.message ?? \"\") as string };\n\t}\n\n\tasync getTaskHandlerStatus(): Promise<TaskHandlerStatus> {\n\t\treturn this._get<TaskHandlerStatus>(\"/configuration/taskhandler/status\");\n\t}\n\n\tasync getTaskHandlerStatusLocal(): Promise<TaskHandlerStatusLocal> {\n\t\treturn this._get<TaskHandlerStatusLocal>(\n\t\t\t\"/configuration/taskhandler/status/local\",\n\t\t);\n\t}\n\n\tasync setConcurrentTasksPerReplica(\n\t\tmaxTasks: number,\n\t): Promise<SuccessResponse> {\n\t\tconst data = (await this._request(\n\t\t\t\"POST\",\n\t\t\t\"/configuration/taskhandler/concurrent-per-replica\",\n\t\t\t{ params: { max_tasks: maxTasks } },\n\t\t)) as Record<string, unknown>;\n\t\treturn { message: (data.message ?? \"\") as string };\n\t}\n\n\tasync getSummaryWorkerStatus(): Promise<SummaryWorkerStatus> {\n\t\treturn this._get<SummaryWorkerStatus>(\n\t\t\t\"/configuration/summary-worker/status\",\n\t\t);\n\t}\n\n\tasync setCompactorModel(modelName: string): Promise<SuccessResponse> {\n\t\tconst data = await this._post<Record<string, unknown>>(\n\t\t\t\"/configuration/summary-worker/model\",\n\t\t\t{ model_name: modelName },\n\t\t);\n\t\treturn { message: (data.message ?? \"\") as string };\n\t}\n\n\tasync setTranslateModel(modelName: string): Promise<SuccessResponse> {\n\t\tconst data = await this._post<Record<string, unknown>>(\n\t\t\t\"/configuration/summary-worker/translate-model\",\n\t\t\t{ model_name: modelName },\n\t\t);\n\t\treturn { message: (data.message ?? \"\") as string };\n\t}\n\n\tasync getTokenWorkerStatus(): Promise<TokenWorkerStatus> {\n\t\treturn this._get<TokenWorkerStatus>(\"/configuration/token-worker/status\");\n\t}\n\n\tasync getSlotsStatus(): Promise<SlotsStatus> {\n\t\treturn this._get<SlotsStatus>(\"/configuration/slots/status\");\n\t}\n\n\tasync getSubagentsStatus(): Promise<SubagentsStatus> {\n\t\treturn this._get<SubagentsStatus>(\"/configuration/subagents/status\");\n\t}\n\n\tasync setSubagentsEnabled(enabled: boolean): Promise<SuccessResponse> {\n\t\tconst data = await this._post<Record<string, unknown>>(\n\t\t\t\"/configuration/subagents\",\n\t\t\t{ enabled },\n\t\t);\n\t\treturn { message: (data.message ?? \"\") as string };\n\t}\n\n\tasync reloadServices(): Promise<ReloadServicesResult> {\n\t\treturn this._post<ReloadServicesResult>(\"/configuration/reload\");\n\t}\n\n\tasync getReloadStatus(): Promise<ReloadStatus> {\n\t\treturn this._get<ReloadStatus>(\"/configuration/reload/status\");\n\t}\n\n\t// ------------------------------------------------------------------\n\t// Auth / WebSocket status\n\t// ------------------------------------------------------------------\n\n\tasync getAuthConfig(): Promise<AuthConfig> {\n\t\treturn this._get<AuthConfig>(\"/auth/config\");\n\t}\n\n\tasync getWebSocketStatus(): Promise<WebSocketStatus> {\n\t\treturn this._get<WebSocketStatus>(\"/websocket/status\");\n\t}\n\n\t// ------------------------------------------------------------------\n\t// SSE stream\n\t// ------------------------------------------------------------------\n\n\tasync *streamTaskStatus(\n\t\ttaskId: string,\n\t): AsyncGenerator<Record<string, unknown>> {\n\t\tconst headers = await this._resolveHeaders();\n\t\theaders.Accept = \"text/event-stream\";\n\t\tconst response = await this._fetch(\n\t\t\tthis._makeUrl(\n\t\t\t\t`/task/stream_status?task_id=${encodeURIComponent(taskId)}`,\n\t\t\t),\n\t\t\t{ headers },\n\t\t);\n\t\tif (!response.ok) {\n\t\t\tthrow new OrchestratorAPIError(\n\t\t\t\t`Stream connection failed: ${response.statusText}`,\n\t\t\t\tresponse.status,\n\t\t\t);\n\t\t}\n\t\tconst reader = response.body?.getReader();\n\t\tif (!reader) {\n\t\t\tthrow new OrchestratorConnectionError(\"Stream body is not readable\");\n\t\t}\n\t\tconst decoder = new TextDecoder();\n\t\tlet buffer = \"\";\n\t\twhile (true) {\n\t\t\tconst { done, value } = await reader.read();\n\t\t\tif (done) break;\n\t\t\tbuffer += decoder.decode(value, { stream: true });\n\t\t\tconst lines = buffer.split(\"\\n\");\n\t\t\tbuffer = lines.pop() ?? \"\";\n\t\t\tfor (const line of lines) {\n\t\t\t\tif (line.startsWith(\"data: \")) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tyield JSON.parse(line.slice(6));\n\t\t\t\t\t} catch {\n\t\t\t\t\t\t// ignore malformed SSE lines\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n// ---------------------------------------------------------------------------\n// Helpers\n// ---------------------------------------------------------------------------\n\nfunction sleep(ms: number): Promise<void> {\n\treturn new Promise((resolve) => setTimeout(resolve, ms));\n}\n\nfunction combineSignals(...signals: AbortSignal[]): AbortSignal {\n\tconst controller = new AbortController();\n\tfor (const signal of signals) {\n\t\tif (signal.aborted) {\n\t\t\tcontroller.abort(signal.reason);\n\t\t\treturn controller.signal;\n\t\t}\n\t\tsignal.addEventListener(\"abort\", () => controller.abort(signal.reason), {\n\t\t\tonce: true,\n\t\t});\n\t}\n\treturn 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 type { 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\tprivate _async: OrchestratorAsync;\n\n\tconstructor(opts: OrchestratorClientOptions = {}) {\n\t\tthis._async = new OrchestratorAsync(opts);\n\t}\n\n\t/** Close the underlying resources. */\n\tclose(): void {\n\t\tthis._async.close().catch(() => {});\n\t}\n\n\t// ------------------------------------------------------------------\n\t// Tasks\n\t// ------------------------------------------------------------------\n\n\tlistTasks(params?: Parameters<OrchestratorAsync[\"listTasks\"]>[0]) {\n\t\treturn runSync(this._async.listTasks(params));\n\t}\n\n\tcreateTask(params: Parameters<OrchestratorAsync[\"createTask\"]>[0]) {\n\t\treturn runSync(this._async.createTask(params));\n\t}\n\n\tgetTaskStatus(taskId: string, locale?: string) {\n\t\treturn runSync(this._async.getTaskStatus(taskId, locale));\n\t}\n\n\tsetTaskStatus(taskId: string, status: string) {\n\t\treturn runSync(this._async.setTaskStatus(taskId, status));\n\t}\n\n\tgetTaskConversation(\n\t\ttaskId: string,\n\t\tparams?: Parameters<OrchestratorAsync[\"getTaskConversation\"]>[1],\n\t) {\n\t\treturn runSync(this._async.getTaskConversation(taskId, params));\n\t}\n\n\tgetArchivedMessageContent(taskId: string, messageId: number) {\n\t\treturn runSync(this._async.getArchivedMessageContent(taskId, messageId));\n\t}\n\n\tgetTaskCompactions(taskId: string) {\n\t\treturn runSync(this._async.getTaskCompactions(taskId));\n\t}\n\n\tgetTaskJournal(taskId: string) {\n\t\treturn runSync(this._async.getTaskJournal(taskId));\n\t}\n\n\tcancelTask(taskId: string) {\n\t\treturn runSync(this._async.cancelTask(taskId));\n\t}\n\n\tdeleteTask(taskId: string) {\n\t\treturn runSync(this._async.deleteTask(taskId));\n\t}\n\n\tdeleteTasks(taskIds: string[]) {\n\t\treturn runSync(this._async.deleteTasks(taskIds));\n\t}\n\n\t// ------------------------------------------------------------------\n\t// Attachments\n\t// ------------------------------------------------------------------\n\n\tuploadAttachment(\n\t\tfile: File | Blob,\n\t\tfilename?: string,\n\t\toptions?: { signal?: AbortSignal },\n\t) {\n\t\treturn runSync(this._async.uploadAttachment(file, filename, options));\n\t}\n\n\tdownloadAttachment(attachmentId: string) {\n\t\treturn runSync(this._async.downloadAttachment(attachmentId));\n\t}\n\n\t// ------------------------------------------------------------------\n\t// Interactive workflow\n\t// ------------------------------------------------------------------\n\n\tsendInteractiveMessage(\n\t\ttaskId: string,\n\t\tmessage: string,\n\t\tattachmentIds?: string[],\n\t) {\n\t\treturn runSync(\n\t\t\tthis._async.sendInteractiveMessage(taskId, message, attachmentIds),\n\t\t);\n\t}\n\n\tmarkInteractiveComplete(taskId: string) {\n\t\treturn runSync(this._async.markInteractiveComplete(taskId));\n\t}\n\n\tmarkInteractiveFailed(taskId: string) {\n\t\treturn runSync(this._async.markInteractiveFailed(taskId));\n\t}\n\n\tapproveInteractiveAction(taskId: string, approved = true) {\n\t\treturn runSync(this._async.approveInteractiveAction(taskId, approved));\n\t}\n\n\tstopInteractive(taskId: string) {\n\t\treturn runSync(this._async.stopInteractive(taskId));\n\t}\n\n\t// ------------------------------------------------------------------\n\t// Proactive workflow\n\t// ------------------------------------------------------------------\n\n\tsendProactiveGuide(\n\t\ttaskId: string,\n\t\tmessage: string,\n\t\tattachmentIds?: string[],\n\t) {\n\t\treturn runSync(\n\t\t\tthis._async.sendProactiveGuide(taskId, message, attachmentIds),\n\t\t);\n\t}\n\n\trespondProactiveHelp(taskId: string, response: string) {\n\t\treturn runSync(this._async.respondProactiveHelp(taskId, response));\n\t}\n\n\tapproveProactiveAction(taskId: string, approved = true) {\n\t\treturn runSync(this._async.approveProactiveAction(taskId, approved));\n\t}\n\n\t// ------------------------------------------------------------------\n\t// Ticket workflow\n\t// ------------------------------------------------------------------\n\n\tsendTicketGuide(taskId: string, message: string, attachmentIds?: string[]) {\n\t\treturn runSync(this._async.sendTicketGuide(taskId, message, attachmentIds));\n\t}\n\n\trespondTicketHelp(taskId: string, response: string) {\n\t\treturn runSync(this._async.respondTicketHelp(taskId, response));\n\t}\n\n\tapproveTicketAction(taskId: string, approved = true) {\n\t\treturn runSync(this._async.approveTicketAction(taskId, approved));\n\t}\n\n\twakeTicket(taskId: string) {\n\t\treturn runSync(this._async.wakeTicket(taskId));\n\t}\n\n\t// ------------------------------------------------------------------\n\t// Matrix workflow\n\t// ------------------------------------------------------------------\n\n\tsendMatrixMessage(taskId: string, message: string, attachmentIds?: string[]) {\n\t\treturn runSync(\n\t\t\tthis._async.sendMatrixMessage(taskId, message, attachmentIds),\n\t\t);\n\t}\n\n\tmarkMatrixComplete(taskId: string) {\n\t\treturn runSync(this._async.markMatrixComplete(taskId));\n\t}\n\n\tmarkMatrixFailed(taskId: string) {\n\t\treturn runSync(this._async.markMatrixFailed(taskId));\n\t}\n\n\tapproveMatrixAction(taskId: string, approved = true) {\n\t\treturn runSync(this._async.approveMatrixAction(taskId, approved));\n\t}\n\n\tgetMatrixConversation(\n\t\ttaskId: string,\n\t\tphase?: number,\n\t\tincludeSummaries?: boolean,\n\t) {\n\t\treturn runSync(\n\t\t\tthis._async.getMatrixConversation(taskId, phase, includeSummaries),\n\t\t);\n\t}\n\n\t// ------------------------------------------------------------------\n\t// VSA workflow\n\t// ------------------------------------------------------------------\n\n\tcreateVSATask(params: Parameters<OrchestratorAsync[\"createVSATask\"]>[0]) {\n\t\treturn runSync(this._async.createVSATask(params));\n\t}\n\n\tsendVSAMessage(\n\t\ttaskId: string,\n\t\tmessage: string,\n\t\toptions?: { attachmentIds?: string[]; delegatedToken?: string },\n\t) {\n\t\treturn runSync(this._async.sendVSAMessage(taskId, message, options));\n\t}\n\n\trenameVSATask(taskId: string, title: string) {\n\t\treturn runSync(this._async.renameVSATask(taskId, title));\n\t}\n\n\tregenerateVSATitle(taskId: string) {\n\t\treturn runSync(this._async.regenerateVSATitle(taskId));\n\t}\n\n\tmarkVSAComplete(taskId: string) {\n\t\treturn runSync(this._async.markVSAComplete(taskId));\n\t}\n\n\tmarkVSAFailed(taskId: string) {\n\t\treturn runSync(this._async.markVSAFailed(taskId));\n\t}\n\n\tstopVSA(taskId: string) {\n\t\treturn runSync(this._async.stopVSA(taskId));\n\t}\n\n\tdeleteVSA(taskId: string) {\n\t\treturn runSync(this._async.deleteVSA(taskId));\n\t}\n\n\tlistVSATasks(\n\t\tuserId: string,\n\t\tparams?: Parameters<OrchestratorAsync[\"listVSATasks\"]>[1],\n\t) {\n\t\treturn runSync(this._async.listVSATasks(userId, params));\n\t}\n\n\tsearchVSATasks(userId: string, query: string, limit?: number) {\n\t\treturn runSync(this._async.searchVSATasks(userId, query, limit));\n\t}\n\n\tdeleteVSATasksBulk(taskIds: string[]) {\n\t\treturn runSync(this._async.deleteVSATasksBulk(taskIds));\n\t}\n\n\t// ------------------------------------------------------------------\n\t// MIO (self_managed) workflow\n\t// ------------------------------------------------------------------\n\n\tsendMioMessage(taskId: string, message: string, attachmentIds?: string[]) {\n\t\treturn runSync(this._async.sendMioMessage(taskId, message, attachmentIds));\n\t}\n\n\tapproveMioAction(taskId: string, approved = true, feedback?: string) {\n\t\treturn runSync(this._async.approveMioAction(taskId, approved, feedback));\n\t}\n\n\twakeMio(taskId: string) {\n\t\treturn runSync(this._async.wakeMio(taskId));\n\t}\n\n\tsendMioUserAway(taskId: string) {\n\t\treturn runSync(this._async.sendMioUserAway(taskId));\n\t}\n\n\tmarkMioComplete(taskId: string) {\n\t\treturn runSync(this._async.markMioComplete(taskId));\n\t}\n\n\tmarkMioFailed(taskId: string) {\n\t\treturn runSync(this._async.markMioFailed(taskId));\n\t}\n\n\tarchiveMio(taskId: string) {\n\t\treturn runSync(this._async.archiveMio(taskId));\n\t}\n\n\tgetMioContext(taskId: string) {\n\t\treturn runSync(this._async.getMioContext(taskId));\n\t}\n\n\tgetMioMemories(taskId: string, includeCommon?: boolean) {\n\t\treturn runSync(this._async.getMioMemories(taskId, includeCommon));\n\t}\n\n\t// ------------------------------------------------------------------\n\t// Tools\n\t// ------------------------------------------------------------------\n\n\tlistTools() {\n\t\treturn runSync(this._async.listTools());\n\t}\n\n\tgetToolCatalog() {\n\t\treturn runSync(this._async.getToolCatalog());\n\t}\n\n\trefreshMCPTools() {\n\t\treturn runSync(this._async.refreshMCPTools());\n\t}\n\n\tvalidateToolCatalog() {\n\t\treturn runSync(this._async.validateToolCatalog());\n\t}\n\n\t// ------------------------------------------------------------------\n\t// Debug / Admin\n\t// ------------------------------------------------------------------\n\n\tgetWorkflowStates() {\n\t\treturn runSync(this._async.getWorkflowStates());\n\t}\n\n\tupdateTaskModels(\n\t\ttaskId: string,\n\t\tmodels: { agentModelId?: string; orchestratorModelId?: string },\n\t) {\n\t\treturn runSync(this._async.updateTaskModels(taskId, models));\n\t}\n\n\tupdateTaskIteration(\n\t\ttaskId: string,\n\t\titeration?: number,\n\t\tmaxIterations?: number,\n\t) {\n\t\treturn runSync(\n\t\t\tthis._async.updateTaskIteration(taskId, iteration, maxIterations),\n\t\t);\n\t}\n\n\tupdateTaskWorkflowData(\n\t\ttaskId: string,\n\t\tworkflowData: Record<string, unknown>,\n\t) {\n\t\treturn runSync(this._async.updateTaskWorkflowData(taskId, workflowData));\n\t}\n\n\tdeleteMessage(taskId: string, messageId: number) {\n\t\treturn runSync(this._async.deleteMessage(taskId, messageId));\n\t}\n\n\tdeleteMessages(taskId: string, messageIds: number[]) {\n\t\treturn runSync(this._async.deleteMessages(taskId, messageIds));\n\t}\n\n\tupdateMessage(\n\t\ttaskId: string,\n\t\tmessageId: number,\n\t\tupdate: { content?: string; reasoning?: string },\n\t) {\n\t\treturn runSync(this._async.updateMessage(taskId, messageId, update));\n\t}\n\n\tresetMatrixToPhase(taskId: string, phase: number) {\n\t\treturn runSync(this._async.resetMatrixToPhase(taskId, phase));\n\t}\n\n\tgetMessageTranslations(taskId: string, messageId: number) {\n\t\treturn runSync(this._async.getMessageTranslations(taskId, messageId));\n\t}\n\n\t// ------------------------------------------------------------------\n\t// Error events\n\t// ------------------------------------------------------------------\n\n\tlistErrors(params?: Parameters<OrchestratorAsync[\"listErrors\"]>[0]) {\n\t\treturn runSync(this._async.listErrors(params));\n\t}\n\n\tgetErrorDetail(errorId: string) {\n\t\treturn runSync(this._async.getErrorDetail(errorId));\n\t}\n\n\tgetErrorStats(since?: string) {\n\t\treturn runSync(this._async.getErrorStats(since));\n\t}\n\n\tcountErrors(since?: string, severity?: string[]) {\n\t\treturn runSync(this._async.countErrors(since, severity));\n\t}\n\n\tpurgeErrors() {\n\t\treturn runSync(this._async.purgeErrors());\n\t}\n\n\t// ------------------------------------------------------------------\n\t// Health / Metrics\n\t// ------------------------------------------------------------------\n\n\thealth() {\n\t\treturn runSync(this._async.health());\n\t}\n\n\thealthDetailed() {\n\t\treturn runSync(this._async.healthDetailed());\n\t}\n\n\tready() {\n\t\treturn runSync(this._async.ready());\n\t}\n\n\thealthLeader() {\n\t\treturn runSync(this._async.healthLeader());\n\t}\n\n\tgetMetrics(types?: string) {\n\t\treturn runSync(this._async.getMetrics(types));\n\t}\n\n\t// ------------------------------------------------------------------\n\t// Configuration\n\t// ------------------------------------------------------------------\n\n\tgetSystemStatus() {\n\t\treturn runSync(this._async.getSystemStatus());\n\t}\n\n\tupdateSettings(settings: Record<string, unknown>) {\n\t\treturn runSync(this._async.updateSettings(settings));\n\t}\n\n\tgetConfigurationStatus() {\n\t\treturn runSync(this._async.getConfigurationStatus());\n\t}\n\n\tsetAgentModel(model: string) {\n\t\treturn runSync(this._async.setAgentModel(model));\n\t}\n\n\tsetOrchestratorModel(model: string) {\n\t\treturn runSync(this._async.setOrchestratorModel(model));\n\t}\n\n\tgetLLMBackendStatus() {\n\t\treturn runSync(this._async.getLLMBackendStatus());\n\t}\n\n\taddLLMBackend(host: string, apiKey: string) {\n\t\treturn runSync(this._async.addLLMBackend(host, apiKey));\n\t}\n\n\tremoveLLMBackend(host: string) {\n\t\treturn runSync(this._async.removeLLMBackend(host));\n\t}\n\n\tgetMCPServerStatus() {\n\t\treturn runSync(this._async.getMCPServerStatus());\n\t}\n\n\taddMCPServer(host: string, apiKey: string) {\n\t\treturn runSync(this._async.addMCPServer(host, apiKey));\n\t}\n\n\tremoveMCPServer(host: string) {\n\t\treturn runSync(this._async.removeMCPServer(host));\n\t}\n\n\tgetTaskHandlerStatus() {\n\t\treturn runSync(this._async.getTaskHandlerStatus());\n\t}\n\n\tgetTaskHandlerStatusLocal() {\n\t\treturn runSync(this._async.getTaskHandlerStatusLocal());\n\t}\n\n\tsetConcurrentTasksPerReplica(maxTasks: number) {\n\t\treturn runSync(this._async.setConcurrentTasksPerReplica(maxTasks));\n\t}\n\n\tgetSummaryWorkerStatus() {\n\t\treturn runSync(this._async.getSummaryWorkerStatus());\n\t}\n\n\tsetCompactorModel(modelName: string) {\n\t\treturn runSync(this._async.setCompactorModel(modelName));\n\t}\n\n\tsetTranslateModel(modelName: string) {\n\t\treturn runSync(this._async.setTranslateModel(modelName));\n\t}\n\n\tgetTokenWorkerStatus() {\n\t\treturn runSync(this._async.getTokenWorkerStatus());\n\t}\n\n\tgetSlotsStatus() {\n\t\treturn runSync(this._async.getSlotsStatus());\n\t}\n\n\tgetSubagentsStatus() {\n\t\treturn runSync(this._async.getSubagentsStatus());\n\t}\n\n\tsetSubagentsEnabled(enabled: boolean) {\n\t\treturn runSync(this._async.setSubagentsEnabled(enabled));\n\t}\n\n\treloadServices() {\n\t\treturn runSync(this._async.reloadServices());\n\t}\n\n\tgetReloadStatus() {\n\t\treturn runSync(this._async.getReloadStatus());\n\t}\n\n\t// ------------------------------------------------------------------\n\t// Auth / WebSocket status\n\t// ------------------------------------------------------------------\n\n\tgetAuthConfig() {\n\t\treturn runSync(this._async.getAuthConfig());\n\t}\n\n\tgetWebSocketStatus() {\n\t\treturn runSync(this._async.getWebSocketStatus());\n\t}\n\n\t// ------------------------------------------------------------------\n\t// SSE stream (collects all events into an array)\n\t// ------------------------------------------------------------------\n\n\tstreamTaskStatus(_taskId: string): Record<string, unknown>[] {\n\t\tconst events: Record<string, unknown>[] = [];\n\t\t// Stream is async-only; for sync usage this returns empty\n\t\t// Users should use the async variant for streaming\n\t\treturn events;\n\t}\n}\n\nfunction runSync<T>(promise: Promise<T>): T {\n\t// In browser/Ember contexts, we can't use synchronous blocking.\n\t// This is a thin wrapper that assumes the promise resolves immediately\n\t// in practice, or the caller uses the async variant.\n\t// For Node.js scripts, the sync wrapper behaves correctly.\n\tlet result: T | undefined;\n\tlet error: unknown;\n\tlet done = false;\n\n\tpromise.then(\n\t\t(r) => {\n\t\t\tresult = r;\n\t\t\tdone = true;\n\t\t},\n\t\t(e) => {\n\t\t\terror = e;\n\t\t\tdone = true;\n\t\t},\n\t);\n\n\t// In Node.js, we could use a tight loop with setTimeout to wait,\n\t// but in browsers this hangs. The sync wrapper is best-effort;\n\t// for true synchronous use, prefer the async client or a Node.js\n\t// environment where we can block the event loop.\n\tif (!done) {\n\t\t// In Node.js, run a quick spin loop\n\t\tconst start = Date.now();\n\t\twhile (!done && Date.now() - start < 10_000) {\n\t\t\t// Spin — this works in Node.js for micro-tick resolution\n\t\t}\n\t}\n\n\tif (!done) {\n\t\tthrow new Error(\"Orchestrator sync: operation timed out\");\n\t}\n\tif (error) throw error;\n\treturn result as T;\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\t/** Base URL of the orchestrator (e.g. \"http://localhost:8080\"). */\n\tbaseUrl: string;\n\t/** Optional static bearer token sent as `Authorization: Bearer <key>`. */\n\tapiKey?: string;\n\t/** Default timeout in milliseconds for HTTP requests. */\n\ttimeoutMs: number;\n\t/** Maximum retry attempts on transient failures. */\n\tmaxRetries: number;\n}\n\nconst DEFAULTS: OrchestratorConfig = {\n\tbaseUrl: \"http://localhost:8080\",\n\tapiKey: undefined,\n\ttimeoutMs: 30_000,\n\tmaxRetries: 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\toverrides?: Partial<OrchestratorConfig>,\n): OrchestratorConfig {\n\treturn {\n\t\tbaseUrl: (\n\t\t\tprocess.env.ORCHESTRATOR_URL ??\n\t\t\toverrides?.baseUrl ??\n\t\t\tDEFAULTS.baseUrl\n\t\t).replace(/\\/+$/, \"\"),\n\t\tapiKey:\n\t\t\tprocess.env.ORCHESTRATOR_API_KEY ?? overrides?.apiKey ?? DEFAULTS.apiKey,\n\t\ttimeoutMs: Number(\n\t\t\tprocess.env.ORCHESTRATOR_TIMEOUT_MS ??\n\t\t\t\toverrides?.timeoutMs ??\n\t\t\t\tDEFAULTS.timeoutMs,\n\t\t),\n\t\tmaxRetries: Number(\n\t\t\tprocess.env.ORCHESTRATOR_MAX_RETRIES ??\n\t\t\t\toverrides?.maxRetries ??\n\t\t\t\tDEFAULTS.maxRetries,\n\t\t),\n\t};\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\tif (_insecureFetch) return _insecureFetch;\n\n\t// Check if we're in Node.js\n\tif (typeof process === \"undefined\" || process.versions?.node == null) {\n\t\t// In browsers, SSL is handled by the browser — return global fetch\n\t\t_insecureFetch = globalThis.fetch;\n\t\treturn _insecureFetch;\n\t}\n\n\t// Dynamic import — works with ESM and tsup bundling\n\tconst https = await import(\"node:https\");\n\tconst http = await import(\"node:http\");\n\n\tconst agent = new https.Agent({ rejectUnauthorized: false });\n\n\t_insecureFetch = async (\n\t\tinput: RequestInfo | URL,\n\t\tinit?: RequestInit,\n\t): Promise<Response> => {\n\t\tconst urlStr = typeof input === \"string\" ? input : input.toString();\n\t\tconst urlObj = new URL(urlStr);\n\t\tconst isHttps = urlObj.protocol === \"https:\";\n\n\t\treturn new Promise<Response>((resolve, reject) => {\n\t\t\tconst mod = isHttps ? https : http;\n\t\t\tconst req = mod.request(\n\t\t\t\turlStr,\n\t\t\t\t{\n\t\t\t\t\tmethod: init?.method ?? \"GET\",\n\t\t\t\t\theaders: init?.headers as Record<string, string> | undefined,\n\t\t\t\t\trejectUnauthorized: false,\n\t\t\t\t\tagent: isHttps ? agent : undefined,\n\t\t\t\t},\n\t\t\t\t(res: NodeJS.ReadableStream) => {\n\t\t\t\t\tconst chunks: Buffer[] = [];\n\t\t\t\t\tres.on(\"data\", (chunk: Buffer) => chunks.push(chunk));\n\t\t\t\t\tres.on(\"end\", () => {\n\t\t\t\t\t\tconst body = Buffer.concat(chunks);\n\t\t\t\t\t\tconst headers = new Headers();\n\t\t\t\t\t\t// Cast to access the headers object from Node's IncomingMessage\n\t\t\t\t\t\tconst resHeaders = (\n\t\t\t\t\t\t\tres as unknown as { headers: Record<string, string | string[]> }\n\t\t\t\t\t\t).headers;\n\t\t\t\t\t\tif (resHeaders) {\n\t\t\t\t\t\t\tfor (const [key, value] of Object.entries(resHeaders)) {\n\t\t\t\t\t\t\t\tif (value != null) {\n\t\t\t\t\t\t\t\t\tif (Array.isArray(value)) {\n\t\t\t\t\t\t\t\t\t\tfor (const v of value) headers.append(key, v);\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\theaders.set(key, value);\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tresolve(\n\t\t\t\t\t\t\tnew Response(body, {\n\t\t\t\t\t\t\t\tstatus: (res as unknown as { statusCode?: number }).statusCode,\n\t\t\t\t\t\t\t\tstatusText: (res as unknown as { statusMessage?: string })\n\t\t\t\t\t\t\t\t\t.statusMessage,\n\t\t\t\t\t\t\t\theaders,\n\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t);\n\t\t\t\t\t});\n\t\t\t\t},\n\t\t\t);\n\n\t\t\treq.on(\"error\", reject);\n\t\t\tif (init?.body != null) {\n\t\t\t\treq.write(init.body);\n\t\t\t}\n\t\t\treq.end();\n\t\t});\n\t};\n\n\treturn _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\";\nimport { deepCamelCase } from \"./utils.js\";\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\";\nexport const EVENT_TASK_BULK_DELETED = \"task_bulk_deleted\";\nexport const EVENT_TASK_WORKFLOW_DATA_CHANGED = \"task_workflow_data_changed\";\nexport const EVENT_ITERATION_REMINDER_ADDED = \"iteration_reminder_added\";\nexport const EVENT_MESSAGE_DELETED = \"message_deleted\";\nexport const EVENT_MESSAGE_UPDATED = \"message_updated\";\nexport const EVENT_APPROVAL_REQUESTED = \"approval_requested\";\nexport const EVENT_APPROVAL_PROVIDED = \"approval_provided\";\nexport const EVENT_HELP_REQUESTED = \"help_requested\";\nexport const EVENT_HELP_PROVIDED = \"help_provided\";\nexport const EVENT_USER_MESSAGE_ADDED = \"user_message_added\";\nexport const EVENT_MIO_MEMORY_CREATED = \"mio_memory_created\";\nexport const EVENT_MIO_MEMORY_UPDATED = \"mio_memory_updated\";\nexport const EVENT_MIO_MEMORY_DELETED = \"mio_memory_deleted\";\nexport const EVENT_LLM_BACKEND_CHANGED = \"llm_backend_changed\";\nexport const EVENT_MCP_SERVER_CHANGED = \"mcp_server_changed\";\nexport const EVENT_MODEL_CONFIG_CHANGED = \"model_config_changed\";\nexport const EVENT_TASK_HANDLER_STATUS_CHANGED = \"task_handler_status_changed\";\nexport const EVENT_SUMMARY_WORKER_STATUS = \"summary_worker_status\";\nexport const EVENT_TOKEN_WORKER_STATUS = \"token_worker_status\";\nexport const EVENT_TOKEN_COUNT_UPDATED = \"token_count_updated\";\nexport const EVENT_MESSAGES_ARCHIVED = \"messages_archived\";\nexport const EVENT_SUBPROCESS_STARTED = \"subprocess_started\";\nexport const EVENT_SUBPROCESS_COMPLETED = \"subprocess_completed\";\nexport const EVENT_SUBPROCESS_FAILED = \"subprocess_failed\";\n\nexport type EventHandler = (...args: unknown[]) => void;\n\nexport interface RealtimeClientOptions {\n\t/** Socket.IO connection options. */\n\tsocketOptions?: Record<string, unknown>;\n\t/** Optional bearer token or async token getter. */\n\tgetToken?: (() => string | Promise<string>) | string;\n\t/** Whether to auto-connect on construction (default: false). */\n\tautoConnect?: boolean;\n\t/**\n\t * Client identifier sent as the `client_id` query parameter at connection\n\t * time. The server uses this for logging/diagnostics.\n\t * Defaults to `\"orchestrator-client\"`.\n\t */\n\tclientId?: string;\n\t/**\n\t * Locale tag sent as the `locale` query parameter at connection time\n\t * (e.g. `\"hu-hu\"`, `\"en-us\"`). When set the server automatically joins\n\t * the client into the matching `locale:<tag>` room so translation-ready\n\t * events are delivered without a separate `subscribeLocale()` call.\n\t */\n\tlocale?: string;\n}\n\n/**\n * Socket.IO-based realtime client for receiving orchestrator events.\n *\n * The server wraps all domain events in a `message` Socket.IO event with an\n * inner `event_type` field. This client unwraps the envelope and dispatches\n * to registered handlers by event_type.\n *\n * ## Two subscription APIs — choose one or mix them:\n *\n * ### 1. Event-type handlers via `on(event, handler)`\n * Registers a callback for a specific event type string (e.g.\n * `\"task_status_changed\"`). You still need to join the relevant rooms\n * manually via `subscribeTask()`, `subscribeEvents()`, etc.\n *\n * ### 2. Room-scoped subscribers via `subscribe(handler, rooms)`\n * Mirrors the WebSocketProvider pattern used in the webui. Each call\n * returns an opaque subscription id. Calling `unsubscribe(id)` removes it.\n * Room membership is kept in sync automatically: the client joins the union\n * of all subscribers' rooms and leaves rooms that are no longer needed.\n * The handler receives the unwrapped event dict for every event from those\n * rooms, regardless of type.\n */\nexport class RealtimeClient {\n\tprivate _baseUrl: string;\n\tprivate _socketOptions: Record<string, unknown>;\n\tprivate _getToken?: (() => string | Promise<string>) | string;\n\tprivate _clientId: string;\n\tprivate _locale?: string;\n\tprivate _socket: SocketIOClient | null = null;\n\tprivate _handlers: Map<string, Set<EventHandler>> = new Map();\n\tprivate _connected = false;\n\n\t// Multi-subscriber room-diffing state (mirrors WebSocketProvider)\n\tprivate _subscriptions: Map<\n\t\tstring,\n\t\t{ handler: EventHandler; rooms: string[] }\n\t> = new Map();\n\tprivate _currentRooms: Set<string> = new Set();\n\tprivate _subIdCounter = 0;\n\n\tconstructor(baseUrl: string, opts: RealtimeClientOptions) {\n\t\tthis._baseUrl = baseUrl.replace(/\\/+$/, \"\");\n\t\tthis._socketOptions = opts.socketOptions ?? {};\n\t\tthis._getToken = opts.getToken;\n\t\tthis._clientId = opts.clientId ?? \"orchestrator-client\";\n\t\tthis._locale = opts.locale;\n\n\t\tif (opts.autoConnect) {\n\t\t\tthis.connect();\n\t\t}\n\t}\n\n\tget connected(): boolean {\n\t\treturn this._connected;\n\t}\n\n\tasync connect(): Promise<void> {\n\t\tconst auth: Record<string, unknown> = {};\n\t\tif (this._getToken) {\n\t\t\tauth.token =\n\t\t\t\ttypeof this._getToken === \"function\"\n\t\t\t\t\t? await this._getToken()\n\t\t\t\t\t: this._getToken;\n\t\t}\n\n\t\tconst query: Record<string, string> = { client_id: this._clientId };\n\t\tif (this._locale) {\n\t\t\tquery.locale = this._locale;\n\t\t}\n\n\t\t// We construct the socket dynamically to avoid a hard import\n\t\tconst { io } = await import(\"socket.io-client\");\n\t\tthis._socket = io(this._baseUrl, {\n\t\t\tpath: \"/socket.io\",\n\t\t\tauth,\n\t\t\tquery,\n\t\t\ttransports: [\"websocket\", \"polling\"],\n\t\t\t...this._socketOptions,\n\t\t}) as unknown as SocketIOClient;\n\n\t\tthis._socket.on(\"connect\", () => {\n\t\t\tthis._connected = true;\n\t\t\t// Re-sync rooms after reconnect (server-side room membership is lost)\n\t\t\tthis._currentRooms = new Set();\n\t\t\tthis._syncRooms();\n\t\t});\n\n\t\tthis._socket.on(\"disconnect\", () => {\n\t\t\tthis._connected = false;\n\t\t\tthis._currentRooms = new Set();\n\t\t});\n\n\t\t// All domain events come wrapped in a `message` socket event with\n\t\t// an inner `event_type` field. Dispatch them to registered handlers.\n\t\tthis._socket.on(\"message\", (payload: unknown) => this._dispatch(payload));\n\n\t\treturn new Promise<void>((resolve, reject) => {\n\t\t\tif (!this._socket) {\n\t\t\t\treject(new Error(\"RealtimeClient not connected\"));\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tthis._socket.on(\"connect\", () => resolve());\n\t\t\tthis._socket.on(\"connect_error\", (err: Error) => reject(err));\n\t\t\t// If already connected, resolve immediately\n\t\t\tif (this._socket.connected) {\n\t\t\t\tresolve();\n\t\t\t}\n\t\t});\n\t}\n\n\tasync disconnect(): Promise<void> {\n\t\tif (this._socket) {\n\t\t\tthis._socket.disconnect();\n\t\t\tthis._socket = null;\n\t\t}\n\t\tthis._connected = false;\n\t}\n\n\t/**\n\t * Dispatch a message envelope to registered handlers and subscribers.\n\t * The server sends: socket.emit(\"message\", {type: \"message\", event: {..., event_type: \"...\", ...}})\n\t *\n\t * All event payloads are deep-converted from snake_case to camelCase so\n\t * consumers receive consistent camelCase objects (same convention as the\n\t * REST responses from _request). The raw event_type string is extracted\n\t * before conversion so the handler-map lookup still works.\n\t */\n\tprivate _dispatch(payload: unknown): void {\n\t\tconst envelope = payload as Record<string, unknown>;\n\t\tconst rawEvent = (envelope.event ?? envelope) as Record<string, unknown>;\n\t\tconst eventType = rawEvent.event_type as string | undefined;\n\t\tif (!eventType) return;\n\n\t\tconst event = deepCamelCase(rawEvent) as Record<string, unknown>;\n\n\t\t// Dispatch to event-type handlers registered via on()\n\t\tconst handlers = this._handlers.get(eventType);\n\t\tif (handlers) {\n\t\t\tfor (const h of handlers) {\n\t\t\t\th(event);\n\t\t\t}\n\t\t}\n\n\t\t// Fan out to all room-scoped subscribers registered via subscribe()\n\t\tfor (const sub of this._subscriptions.values()) {\n\t\t\tsub.handler(event);\n\t\t}\n\t}\n\n\t/**\n\t * Subscribe to realtime events for a specific task.\n\t * Emits a `join` event with `{rooms: [\"task:{taskId}\"]}`.\n\t */\n\tsubscribeTask(taskId: string): void {\n\t\tif (!this._socket) throw new Error(\"RealtimeClient not connected\");\n\t\tthis._socket.emit(\"join\", { rooms: [`task:${taskId}`] });\n\t}\n\n\t/**\n\t * Unsubscribe from realtime events for a specific task.\n\t * Emits a `leave` event with `{rooms: [\"task:{taskId}\"]}`.\n\t */\n\tunsubscribeTask(taskId: string): void {\n\t\tif (!this._socket) throw new Error(\"RealtimeClient not connected\");\n\t\tthis._socket.emit(\"leave\", { rooms: [`task:${taskId}`] });\n\t}\n\n\t/**\n\t * Subscribe to event-type-scoped rooms.\n\t * e.g. subscribeEvents(\"task_created\", \"task_deleted\")\n\t */\n\tsubscribeEvents(...eventTypes: string[]): void {\n\t\tif (!this._socket) throw new Error(\"RealtimeClient not connected\");\n\t\tconst rooms = eventTypes.map((t) => `event:${t}`);\n\t\tthis._socket.emit(\"join\", { rooms });\n\t}\n\n\t/**\n\t * Unsubscribe from event-type-scoped rooms.\n\t */\n\tunsubscribeEvents(...eventTypes: string[]): void {\n\t\tif (!this._socket) throw new Error(\"RealtimeClient not connected\");\n\t\tconst rooms = eventTypes.map((t) => `event:${t}`);\n\t\tthis._socket.emit(\"leave\", { rooms });\n\t}\n\n\t/**\n\t * Subscribe to the `all` broadcast room (receives all events).\n\t */\n\tsubscribeAll(): void {\n\t\tif (!this._socket) throw new Error(\"RealtimeClient not connected\");\n\t\tthis._socket.emit(\"join\", { rooms: [\"all\"] });\n\t}\n\n\t/**\n\t * Subscribe to a locale-specific room.\n\t */\n\tsubscribeLocale(locale: string): void {\n\t\tif (!this._socket) throw new Error(\"RealtimeClient not connected\");\n\t\tthis._socket.emit(\"join\", { rooms: [`locale:${locale}`] });\n\t}\n\n\t/**\n\t * Unsubscribe from a locale-specific room.\n\t */\n\tunsubscribeLocale(locale: string): void {\n\t\tif (!this._socket) throw new Error(\"RealtimeClient not connected\");\n\t\tthis._socket.emit(\"leave\", { rooms: [`locale:${locale}`] });\n\t}\n\n\t/**\n\t * Join arbitrary rooms by name.\n\t */\n\tjoinRooms(rooms: string[]): void {\n\t\tif (!this._socket) throw new Error(\"RealtimeClient not connected\");\n\t\tthis._socket.emit(\"join\", { rooms });\n\t}\n\n\t/**\n\t * Leave arbitrary rooms by name.\n\t */\n\tleaveRooms(rooms: string[]): void {\n\t\tif (!this._socket) throw new Error(\"RealtimeClient not connected\");\n\t\tthis._socket.emit(\"leave\", { rooms });\n\t}\n\n\t// ------------------------------------------------------------------\n\t// Multi-subscriber API (mirrors WebSocketProvider room-diffing)\n\t// ------------------------------------------------------------------\n\n\t/**\n\t * Register a subscriber that receives all events from the given rooms.\n\t *\n\t * Room membership is managed automatically: the client joins the union\n\t * of all active subscribers' rooms and leaves rooms that are no longer\n\t * needed when the last subscriber referencing them is removed.\n\t *\n\t * The `handler` receives the unwrapped event dict (same object that\n\t * `on()` handlers receive).\n\t *\n\t * Returns an opaque subscription id that must be passed to\n\t * `unsubscribe()` to remove the subscription.\n\t *\n\t * Example — mirror the webui's per-component subscription pattern:\n\t *\n\t * const id = rt.subscribe((event) => {\n\t * if (event.event_type === \"task_status_changed\") { ... }\n\t * }, [`task:${taskId}`]);\n\t *\n\t * // later, on cleanup:\n\t * rt.unsubscribe(id);\n\t */\n\tsubscribe(handler: EventHandler, rooms: string[]): string {\n\t\tconst id = `sub_${++this._subIdCounter}`;\n\t\tthis._subscriptions.set(id, { handler, rooms });\n\t\tthis._syncRooms();\n\t\treturn id;\n\t}\n\n\t/**\n\t * Remove a subscription registered via `subscribe()`.\n\t *\n\t * Rooms that are no longer referenced by any remaining subscriber are\n\t * left automatically.\n\t */\n\tunsubscribe(id: string): void {\n\t\tthis._subscriptions.delete(id);\n\t\tthis._syncRooms();\n\t}\n\n\t/**\n\t * Diff the union of all subscribers' rooms against the currently joined\n\t * rooms and emit `join`/`leave` for the delta. No-ops when not connected.\n\t */\n\tprivate _syncRooms(): void {\n\t\tconst socket = this._socket;\n\t\tif (!socket?.connected) return;\n\n\t\tconst needed = new Set<string>();\n\t\tfor (const sub of this._subscriptions.values()) {\n\t\t\tfor (const r of sub.rooms) needed.add(r);\n\t\t}\n\n\t\tconst toJoin = [...needed].filter((r) => !this._currentRooms.has(r));\n\t\tconst toLeave = [...this._currentRooms].filter((r) => !needed.has(r));\n\n\t\tif (toJoin.length) socket.emit(\"join\", { rooms: toJoin });\n\t\tif (toLeave.length) socket.emit(\"leave\", { rooms: toLeave });\n\n\t\tthis._currentRooms = needed;\n\t}\n\n\t/**\n\t * Send a ping to the server.\n\t */\n\tping(): void {\n\t\tif (!this._socket) throw new Error(\"RealtimeClient not connected\");\n\t\tthis._socket.emit(\"ping\");\n\t}\n\n\t/**\n\t * Register a handler for a specific event type.\n\t *\n\t * Domain events (task_created, task_status_changed, etc.) are dispatched\n\t * via the message envelope. Raw socket events (connect, disconnect,\n\t * connection_established, rooms_updated, pong) are wired directly.\n\t */\n\ton(event: string, handler: EventHandler): void {\n\t\tif (!this._handlers.has(event)) {\n\t\t\tthis._handlers.set(event, new Set());\n\t\t\t// For raw socket events that arrive outside the message envelope,\n\t\t\t// also wire up a direct socket listener so they still fire.\n\t\t\tif (this._socket) {\n\t\t\t\tconst rawSocketEvents = new Set([\n\t\t\t\t\t\"connect\",\n\t\t\t\t\t\"disconnect\",\n\t\t\t\t\t\"connect_error\",\n\t\t\t\t\t\"connection_established\",\n\t\t\t\t\t\"rooms_updated\",\n\t\t\t\t\t\"pong\",\n\t\t\t\t]);\n\t\t\t\tif (rawSocketEvents.has(event)) {\n\t\t\t\t\tthis._socket.on(event, (...args: unknown[]) => {\n\t\t\t\t\t\tconst handlers = this._handlers.get(event);\n\t\t\t\t\t\tif (handlers) {\n\t\t\t\t\t\t\tfor (const h of handlers) {\n\t\t\t\t\t\t\t\th(...args);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tconst handlers = this._handlers.get(event);\n\t\tif (handlers) {\n\t\t\thandlers.add(handler);\n\t\t}\n\t}\n\n\t/**\n\t * Remove a registered handler.\n\t */\n\toff(event: string, handler: EventHandler): void {\n\t\tconst handlers = this._handlers.get(event);\n\t\tif (handlers) {\n\t\t\thandlers.delete(handler);\n\t\t\tif (handlers.size === 0) {\n\t\t\t\tthis._handlers.delete(event);\n\t\t\t\tif (this._socket) {\n\t\t\t\t\tthis._socket.off(event);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Wait for the connection to close (for long-running listeners).\n\t */\n\twait(): Promise<void> {\n\t\treturn new Promise((resolve) => {\n\t\t\tif (!this._socket) {\n\t\t\t\tresolve();\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tthis._socket.on(\"disconnect\", () => resolve());\n\t\t});\n\t}\n}\n","/**\n * Flow abstraction — reusable orchestrator workflow patterns.\n *\n * Every {@link Flow} subclass describes a complete orchestrator workflow\n * from trigger to parsed result. The base class handles task creation,\n * listening for completion via Socket.IO events, conversation retrieval,\n * and result parsing; subclasses only need to define the workflow\n * parameters and implement {@link Flow.parseResult}.\n *\n * Usage:\n *\n * ```ts\n * class MyFlow extends Flow<MyResult> {\n * get goalPrompt() { return \"Do the thing\"; }\n * parseResult(finalMessage: string): MyResult { ... }\n * }\n *\n * const result = await new MyFlow().run({ client: orchestrator });\n * ```\n *\n * @module\n */\n\nimport type { OrchestratorAsync } from \"./client.js\";\nimport type { TaskDetail, TaskOptions } from \"./models/task.js\";\nimport type { EventHandler, RealtimeClient } from \"./socketio.js\";\n\n// ---------------------------------------------------------------------------\n// Constants\n// ---------------------------------------------------------------------------\n\n/** Terminal statuses for proactive workflows. */\nconst TERMINAL_STATUSES = new Set([\n\t\"completed\",\n\t\"failed\",\n\t\"cancelled\",\n\t\"translation\",\n]);\n\n/** Default timeout for Socket.IO-based completion waiting (10 minutes). */\nexport const DEFAULT_FLOW_TIMEOUT_MS = 600_000;\n\n// ---------------------------------------------------------------------------\n// Global default client (optional convenience)\n// ---------------------------------------------------------------------------\n\nlet _defaultClient: OrchestratorAsync | undefined;\nlet _defaultRealtime: RealtimeClient | undefined;\n\n/**\n * Set the default {@link OrchestratorAsync} and optional\n * {@link RealtimeClient} for all flows in this process.\n *\n * Call once during application startup so that `flow.run()` can be\n * invoked without passing `client` explicitly.\n */\nexport function setupDefaultClient(\n\tclient: OrchestratorAsync,\n\trealtime?: RealtimeClient,\n): void {\n\t_defaultClient = client;\n\t_defaultRealtime = realtime;\n}\n\nfunction getDefaultClient(): OrchestratorAsync {\n\tif (!_defaultClient) {\n\t\tthrow new Error(\n\t\t\t\"No default OrchestratorAsync set. \" +\n\t\t\t\t\"Call setupDefaultClient() during application startup, \" +\n\t\t\t\t\"or pass client to flow.run().\",\n\t\t);\n\t}\n\treturn _defaultClient;\n}\n\nfunction getDefaultRealtime(): RealtimeClient | undefined {\n\treturn _defaultRealtime;\n}\n\n// ---------------------------------------------------------------------------\n// Exceptions\n// ---------------------------------------------------------------------------\n\n/** Raised when a flow execution fails. */\nexport class FlowError extends Error {\n\tconstructor(message: string) {\n\t\tsuper(message);\n\t\tthis.name = \"FlowError\";\n\t}\n}\n\n/** Raised when a flow's task does not reach a terminal state in time. */\nexport class FlowTimeoutError extends FlowError {\n\tconstructor(message: string) {\n\t\tsuper(message);\n\t\tthis.name = \"FlowTimeoutError\";\n\t}\n}\n\n/** Raised when a flow's orchestrator task was explicitly cancelled. */\nexport class FlowCancelledError extends FlowError {\n\t/** The orchestrator task ID that was cancelled. */\n\ttaskId: string;\n\n\tconstructor(taskId: string) {\n\t\tsuper(`Task ${taskId} was cancelled`);\n\t\tthis.name = \"FlowCancelledError\";\n\t\tthis.taskId = taskId;\n\t}\n}\n\n// ---------------------------------------------------------------------------\n// JSON extraction helper\n// ---------------------------------------------------------------------------\n\n/**\n * Extract the first JSON object from an LLM message body.\n *\n * Strategy (in order of preference):\n * 0. The entire trimmed message is parsed directly via `JSON.parse`.\n * 1. A fenced code block explicitly tagged `json`.\n * 2. Any fenced code block that parses as valid JSON.\n * 3. The first `{…}` block that parses as valid JSON.\n *\n * @throws {FlowError} If nothing parses.\n */\nexport function extractJsonFromMessage(\n\tcontent: string,\n): Record<string, unknown> {\n\tconst cleaned = content.replace(/^\\ufeff|\\u200b|\\u200c|\\u200d/, \"\").trim();\n\n\t// 0 — try the whole thing as JSON\n\tif (cleaned.startsWith(\"{\")) {\n\t\ttry {\n\t\t\treturn JSON.parse(cleaned) as Record<string, unknown>;\n\t\t} catch {\n\t\t\t// fall through\n\t\t}\n\t}\n\n\t// 1 — find first { and last }, extract the substring\n\tconst start = content.indexOf(\"{\");\n\tconst end = content.lastIndexOf(\"}\");\n\tif (start !== -1 && end !== -1 && end > start) {\n\t\ttry {\n\t\t\treturn JSON.parse(content.slice(start, end + 1)) as Record<\n\t\t\t\tstring,\n\t\t\t\tunknown\n\t\t\t>;\n\t\t} catch {\n\t\t\t// fall through\n\t\t}\n\t}\n\n\t// 2 — fenced block tagged ``json``\n\tconst jsonFenceMatch = content.match(/```(?:json)\\s*\\n([\\s\\S]*?)\\n```/i);\n\tif (jsonFenceMatch) {\n\t\ttry {\n\t\t\treturn JSON.parse(jsonFenceMatch[1].trim()) as Record<string, unknown>;\n\t\t} catch {\n\t\t\t// fall through\n\t\t}\n\t}\n\n\t// 2 — any fenced code block\n\tconst anyFenceMatch = content.match(/```(?:[\\w]*)\\s*\\n([\\s\\S]*?)\\n```/);\n\tif (anyFenceMatch) {\n\t\ttry {\n\t\t\treturn JSON.parse(anyFenceMatch[1].trim()) as Record<string, unknown>;\n\t\t} catch {\n\t\t\t// fall through\n\t\t}\n\t}\n\n\t// 3 — bare ``{…}``\n\tconst bareBraceMatch = content.match(/\\{[\\s\\S]*\\}/);\n\tif (bareBraceMatch) {\n\t\ttry {\n\t\t\treturn JSON.parse(bareBraceMatch[0]) as Record<string, unknown>;\n\t\t} catch {\n\t\t\t// fall through\n\t\t}\n\t}\n\n\tthrow new FlowError(\n\t\t\"Could not extract a valid JSON object from the agent's final message. \" +\n\t\t\t\"The agent did not format its answer as required.\",\n\t);\n}\n\n// ---------------------------------------------------------------------------\n// Run parameters\n// ---------------------------------------------------------------------------\n\n/** Optional parameters for {@link Flow.run}. */\nexport interface FlowRunParams {\n\t/** Orchestrator async client. Falls back to the module-level default. */\n\tclient?: OrchestratorAsync;\n\t/**\n\t * Optional realtime client for Socket.IO-based completion waiting.\n\t * Falls back to the module-level default. When neither is available\n\t * the flow uses polling instead.\n\t */\n\trealtime?: RealtimeClient;\n\t/**\n\t * Maximum milliseconds to wait for completion.\n\t * Defaults to {@link DEFAULT_FLOW_TIMEOUT_MS}.\n\t */\n\ttimeoutMs?: number;\n}\n\n// ---------------------------------------------------------------------------\n// Base flow\n// ---------------------------------------------------------------------------\n\n/**\n * Abstract base class for an orchestrator workflow flow.\n *\n * @typeParam T - The typed result produced by {@link parseResult}.\n */\nexport abstract class Flow<T> {\n\t// -- Workflow-level defaults (override in subclass) --------------------\n\n\t/** Orchestrator workflow type — `\"proactive\"` by default. */\n\tworkflowId = \"proactive\";\n\n\t/** Maximum agent turns before the orchestrator forces a failure. */\n\tmaxIterations = 100;\n\n\t/** LLM reasoning budget: `\"low\"`, `\"medium\"`, or `\"high\"`. */\n\treasoningEffort = \"medium\";\n\n\t/**\n\t * Maximum milliseconds to wait for the orchestrator task to reach a\n\t * terminal state. When exceeded, {@link FlowTimeoutError} is raised.\n\t */\n\tflowTimeoutMs = DEFAULT_FLOW_TIMEOUT_MS;\n\n\t// -- Template methods (override) --------------------------------------\n\n\t/**\n\t * The task description the orchestrator agent receives.\n\t * This is the primary instruction — it tells the agent *what* to do.\n\t */\n\tabstract get goalPrompt(): string;\n\n\t/**\n\t * Optional system-prompt override.\n\t * When set, this replaces the orchestrator's default system prompt.\n\t */\n\tget systemPrompt(): string | undefined {\n\t\treturn undefined;\n\t}\n\n\t/**\n\t * Optional developer-prompt override appended after system prompt.\n\t */\n\tget developerPrompt(): string | undefined {\n\t\treturn undefined;\n\t}\n\n\t/**\n\t * Restrict which MCP / built-in tools the agent may use.\n\t * `undefined` means *all* tools are available. An empty array means\n\t * *no* tools — text-only reasoning.\n\t */\n\tget availableTools(): string[] | undefined {\n\t\treturn undefined;\n\t}\n\n\t/**\n\t * Per-task feature toggles sent in the creation request.\n\t * By default summaries and translation are disabled since flow\n\t * output is typically machine-consumed, not human-read.\n\t * Override in subclasses that produce human-facing content.\n\t */\n\tget taskOptions(): TaskOptions {\n\t\treturn { disableSummaries: true, disableTranslation: true };\n\t}\n\n\t/**\n\t * Override the agent model for this flow.\n\t */\n\tget agentModelId(): string | undefined {\n\t\treturn undefined;\n\t}\n\n\t/**\n\t * Override the orchestrator (validation) model for this flow.\n\t */\n\tget orchestratorModelId(): string | undefined {\n\t\treturn undefined;\n\t}\n\n\t// -- Result parsing ---------------------------------------------------\n\n\t/**\n\t * Parse the agent's final message into a typed result.\n\t *\n\t * Called *after* the task reaches `\"completed\"` and the final\n\t * assistant message has been retrieved.\n\t *\n\t * @param finalMessage - The text content of the last assistant message.\n\t * @throws {FlowError} If the message cannot be parsed as expected.\n\t */\n\tabstract parseResult(finalMessage: string): T;\n\n\t// -- Cancellation -------------------------------------------------------\n\n\tprivate _lastTaskId?: string;\n\n\t/**\n\t * Cancel the underlying orchestrator task, if one is running.\n\t *\n\t * Calling `cancel()` after `run()` has returned is a no-op.\n\t * The `run()` promise will reject with {@link FlowCancelledError}\n\t * after the orchestrator task transitions to `\"cancelled\"`.\n\t */\n\tasync cancel(client?: OrchestratorAsync): Promise<void> {\n\t\tif (!this._lastTaskId) return;\n\t\tconst resolvedClient = client ?? getDefaultClient();\n\t\tawait resolvedClient.cancelTask(this._lastTaskId);\n\t}\n\n\t// -- Lifecycle ---------------------------------------------------------\n\n\t/**\n\t * Execute the flow end-to-end.\n\t *\n\t * @returns The parsed result.\n\t * @throws {FlowError} If the task fails, times out, or cannot be parsed.\n\t */\n\tasync run(params?: FlowRunParams): Promise<T> {\n\t\tconst client = params?.client ?? getDefaultClient();\n\t\tconst realtime = params?.realtime ?? getDefaultRealtime();\n\t\tconst timeoutMs = params?.timeoutMs ?? this.flowTimeoutMs;\n\n\t\tconsole.log(\n\t\t\t`[Flow] Starting ${this.constructor.name} — ` +\n\t\t\t\t`workflow=${this.workflowId} goal=${this.goalPrompt.slice(0, 80)}`,\n\t\t);\n\n\t\t// -- 1. Create the task -------------------------------------------\n\t\tconst response = await client.createTask({\n\t\t\tworkflowId: this.workflowId,\n\t\t\tgoalPrompt: this.goalPrompt,\n\t\t\tsystemPrompt: this.systemPrompt,\n\t\t\tdeveloperPrompt: this.developerPrompt,\n\t\t\tavailableTools: this.availableTools,\n\t\t\toptions: this.taskOptions as unknown as\n\t\t\t\t| Record<string, boolean>\n\t\t\t\t| undefined,\n\t\t\tmaxIterations: this.maxIterations,\n\t\t\treasoningEffort: this.reasoningEffort,\n\t\t\tagentModelId: this.agentModelId,\n\t\t\torchestratorModelId: this.orchestratorModelId,\n\t\t});\n\n\t\tthis._lastTaskId = response.taskId;\n\t\tconst taskId = response.taskId;\n\t\tconsole.log(\n\t\t\t`[Flow] Task created — taskId=${taskId} status=${response.status}`,\n\t\t);\n\n\t\t// -- 2. Wait for terminal state -----------------------------------\n\t\tconst status = await this._waitForTerminal(client, taskId, {\n\t\t\trealtime,\n\t\t\ttimeoutMs,\n\t\t});\n\n\t\t// -- 3. Check for cancellation (before trying to read messages) --\n\t\tif (status.status === \"cancelled\") {\n\t\t\tthrow new FlowCancelledError(taskId);\n\t\t}\n\n\t\t// -- 4. Get final message + parse ---------------------------------\n\t\tconst finalMessage = await this._getFinalMessage(client, taskId);\n\t\tconsole.log(\n\t\t\t`[Flow] ${this.constructor.name} completed — ` +\n\t\t\t\t`taskId=${taskId} messageLen=${finalMessage.length}`,\n\t\t);\n\t\treturn this.parseResult(finalMessage);\n\t}\n\n\t// -- Completion waiting -----------------------------------------------\n\n\tprivate async _waitForTerminal(\n\t\tclient: OrchestratorAsync,\n\t\ttaskId: string,\n\t\topts: { realtime?: RealtimeClient; timeoutMs: number },\n\t): Promise<TaskDetail> {\n\t\tconst { realtime, timeoutMs } = opts;\n\n\t\t// Quick initial check — the task may already be done\n\t\tconst status = await client.getTaskStatus(taskId);\n\t\tif (TERMINAL_STATUSES.has(status.status)) {\n\t\t\tconsole.log(\n\t\t\t\t`[Flow] Task ${taskId} already terminal — status=${status.status}`,\n\t\t\t);\n\t\t\treturn status;\n\t\t}\n\n\t\tif (realtime) {\n\t\t\tawait this._waitViaSocketIO(taskId, realtime, timeoutMs);\n\t\t} else {\n\t\t\tconsole.log(\n\t\t\t\t`[Flow] No RealtimeClient available — polling task ${taskId}` +\n\t\t\t\t\t` with backoff (timeout=${timeoutMs}ms)`,\n\t\t\t);\n\t\t\tawait this._waitViaPolling(client, taskId, timeoutMs);\n\t\t}\n\n\t\t// Fetch fresh status after waiting\n\t\treturn client.getTaskStatus(taskId);\n\t}\n\n\tprivate async _waitViaSocketIO(\n\t\ttaskId: string,\n\t\trealtime: RealtimeClient,\n\t\ttimeoutMs: number,\n\t): Promise<void> {\n\t\trealtime.subscribeTask(taskId);\n\n\t\treturn new Promise<void>((resolve, reject) => {\n\t\t\tconst timer = setTimeout(() => {\n\t\t\t\tcleanup();\n\t\t\t\treject(\n\t\t\t\t\tnew FlowTimeoutError(\n\t\t\t\t\t\t`Task ${taskId} did not reach a terminal state within ${timeoutMs}ms`,\n\t\t\t\t\t),\n\t\t\t\t);\n\t\t\t}, timeoutMs);\n\n\t\t\tconst handler: EventHandler = (...args: unknown[]) => {\n\t\t\t\tconst event = (args[0] ?? {}) as Record<string, unknown>;\n\t\t\t\tif (event.task_id !== taskId) return;\n\t\t\t\tconst newStatus = (event.new_status ?? \"\") as string;\n\t\t\t\tif (TERMINAL_STATUSES.has(newStatus)) {\n\t\t\t\t\tcleanup();\n\t\t\t\t\tresolve();\n\t\t\t\t}\n\t\t\t};\n\n\t\t\tconst cleanup = () => {\n\t\t\t\tclearTimeout(timer);\n\t\t\t\trealtime.off(\"task_status_changed\", handler);\n\t\t\t\trealtime.unsubscribeTask(taskId);\n\t\t\t};\n\n\t\t\trealtime.on(\"task_status_changed\", handler);\n\t\t});\n\t}\n\n\tprivate async _waitViaPolling(\n\t\tclient: OrchestratorAsync,\n\t\ttaskId: string,\n\t\ttimeoutMs: number,\n\t): Promise<void> {\n\t\tconst deadline = Date.now() + timeoutMs;\n\t\tlet delay = 1_000;\n\n\t\twhile (Date.now() < deadline) {\n\t\t\tconst status = await client.getTaskStatus(taskId);\n\t\t\tif (TERMINAL_STATUSES.has(status.status)) return;\n\n\t\t\tawait this._sleep(delay);\n\t\t\tdelay = Math.min(Math.round(delay * 1.5), 10_000);\n\t\t}\n\n\t\tthrow new FlowTimeoutError(\n\t\t\t`Task ${taskId} did not reach a terminal state within ${timeoutMs}ms (polling fallback)`,\n\t\t);\n\t}\n\n\t// -- Conversation helpers ---------------------------------------------\n\n\tprivate async _getFinalMessage(\n\t\tclient: OrchestratorAsync,\n\t\ttaskId: string,\n\t): Promise<string> {\n\t\tconst conversation = await client.getTaskConversation(taskId, {\n\t\t\tincludeSummaries: false,\n\t\t\texcludeArchived: false,\n\t\t});\n\n\t\tconst messages = conversation.conversation;\n\n\t\t// Pass 1 — non-archived assistant messages with content (reverse)\n\t\tfor (let i = messages.length - 1; i >= 0; i--) {\n\t\t\tconst msg = messages[i];\n\t\t\tif (msg.role === \"assistant\" && msg.content?.trim()) {\n\t\t\t\treturn msg.content;\n\t\t\t}\n\t\t}\n\n\t\t// Pass 2 — archived assistant messages\n\t\tfor (let i = messages.length - 1; i >= 0; i--) {\n\t\t\tconst msg = messages[i];\n\t\t\tif (msg.role === \"assistant\" && msg.archived && msg.id != null) {\n\t\t\t\tconst archived = await client.getArchivedMessageContent(taskId, msg.id);\n\t\t\t\tif (archived.content?.trim()) {\n\t\t\t\t\treturn archived.content;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tconst status = await client.getTaskStatus(taskId);\n\t\tthrow new FlowError(\n\t\t\t`No assistant message with content found in task ${taskId}. ` +\n\t\t\t\t`Status: ${status.status}. ` +\n\t\t\t\t`Result: ${(status.result ?? \"\").slice(0, 200) || \"empty\"}. ` +\n\t\t\t\t`Messages in conversation: ${messages.length}.`,\n\t\t);\n\t}\n\n\t// -- Helper -----------------------------------------------------------\n\n\tprivate _sleep(ms: number): Promise<void> {\n\t\treturn new Promise((resolve) => setTimeout(resolve, ms));\n\t}\n}\n"],"mappings":"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","names":["handlers"]}