@getmodus/sdk 0.2.2 → 0.2.3
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.
- package/CHANGELOG.md +2 -0
- package/dist/{chunk-OUFN2O5C.js → chunk-ZFZQ2UMA.js} +37 -3
- package/dist/chunk-ZFZQ2UMA.js.map +1 -0
- package/dist/index.cjs +47 -4
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +12 -3
- package/dist/index.js.map +1 -1
- package/dist/management/index.cjs +36 -2
- package/dist/management/index.cjs.map +1 -1
- package/dist/management/index.js +1 -1
- package/package.json +1 -1
- package/dist/chunk-OUFN2O5C.js.map +0 -1
package/dist/index.js
CHANGED
|
@@ -29,10 +29,14 @@ import {
|
|
|
29
29
|
validateChatModel,
|
|
30
30
|
validateId,
|
|
31
31
|
validatePageSize
|
|
32
|
-
} from "./chunk-
|
|
32
|
+
} from "./chunk-ZFZQ2UMA.js";
|
|
33
33
|
|
|
34
|
-
// src/
|
|
34
|
+
// src/_agent_run_request.ts
|
|
35
35
|
import { randomUUID } from "crypto";
|
|
36
|
+
function resolveAgentRunSessionId(sessionId) {
|
|
37
|
+
if (typeof sessionId === "string" && sessionId.trim()) return sessionId.trim();
|
|
38
|
+
return randomUUID();
|
|
39
|
+
}
|
|
36
40
|
|
|
37
41
|
// src/_streaming.ts
|
|
38
42
|
var SILENTLY_IGNORED = /* @__PURE__ */ new Set([
|
|
@@ -125,7 +129,7 @@ function effectiveThreadId(threadId) {
|
|
|
125
129
|
return threadId;
|
|
126
130
|
}
|
|
127
131
|
function resolveSessionId(threadId) {
|
|
128
|
-
return effectiveThreadId(threadId)
|
|
132
|
+
return resolveAgentRunSessionId(effectiveThreadId(threadId));
|
|
129
133
|
}
|
|
130
134
|
function chatPath(resource, resourceId, options) {
|
|
131
135
|
const safeId = encodeURIComponent(String(resourceId));
|
|
@@ -327,6 +331,9 @@ function parseActiveRunsPage(raw, fetchPage) {
|
|
|
327
331
|
function randomRunId() {
|
|
328
332
|
return randomUUID2();
|
|
329
333
|
}
|
|
334
|
+
function sessionIdFromBody(body) {
|
|
335
|
+
return resolveAgentRunSessionId(body.sessionId);
|
|
336
|
+
}
|
|
330
337
|
function makeAgentRunStream(runId, events) {
|
|
331
338
|
return {
|
|
332
339
|
runId,
|
|
@@ -463,10 +470,12 @@ var WorkflowRunsResource = class {
|
|
|
463
470
|
}
|
|
464
471
|
createRun(operationId, body, pathParams, options) {
|
|
465
472
|
const runId = options.idempotencyKey?.trim() || body.runId?.trim() || randomRunId();
|
|
473
|
+
const sessionId = sessionIdFromBody(body);
|
|
466
474
|
const op = getOperation(operationId);
|
|
467
475
|
const path = formatOperationPath(operationId, pathParams);
|
|
468
476
|
const lines = this.http.streamPost(path, {
|
|
469
477
|
...body,
|
|
478
|
+
sessionId,
|
|
470
479
|
streamProtocolVersion: 2
|
|
471
480
|
}, {
|
|
472
481
|
baseUrl: operationBaseUrl(this.http, op),
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/_chat.ts","../src/_streaming.ts","../src/types/agents.ts","../src/types/conversations.ts","../src/resources/agents/runs.ts","../src/resources/agents/workflow-actions.ts","../src/resources/agents.ts","../src/resources/connections.ts","../src/resources/context/items.ts","../src/resources/context/context.ts","../src/resources/modus/conversations.ts","../src/resources/modus/modus.ts","../src/resources/skills.ts","../src/types/suggestions.ts","../src/resources/suggestions.ts","../src/index.ts"],"sourcesContent":["import { randomUUID } from 'node:crypto'\nimport {\n ModusError,\n RunCancelledError,\n StreamTimeoutError,\n} from './_exceptions.js'\nimport type { ModusConfig } from './_config.js'\nimport type { HttpClient } from './_http.js'\nimport { parseSseStream } from './_streaming.js'\nimport { validateChatModel, validateId } from './_validation.js'\nimport type { ChatModel, ChatResult } from './types/chat.js'\nimport type { RunEvent } from './types/runs.js'\n\nfunction effectiveThreadId(threadId?: string): string | undefined {\n if (threadId === undefined) return undefined\n if (!threadId.trim()) return undefined\n return threadId\n}\n\nfunction resolveSessionId(threadId?: string): string {\n return effectiveThreadId(threadId) ?? randomUUID()\n}\n\nfunction chatPath(\n resource: string,\n resourceId: number | string,\n options: { threadId?: string },\n): string {\n const safeId = encodeURIComponent(String(resourceId))\n const tid = effectiveThreadId(options.threadId)\n if (tid !== undefined) {\n const safeTid = encodeURIComponent(tid)\n return `/api/v1/${resource}/${safeId}/conversations/${safeTid}/chat`\n }\n return `/api/v1/${resource}/${safeId}/chat`\n}\n\nfunction modusChatPath(options: { threadId?: string }): string {\n const tid = effectiveThreadId(options.threadId)\n if (tid !== undefined) {\n validateId(tid, 'thread_id')\n return `/api/v1/modus/conversations/${encodeURIComponent(tid)}/chat`\n }\n return `/api/v1/modus/chat`\n}\n\nfunction agentHostRunsPath(\n resource: 'modus' | 'scopes' | 'workflows',\n resourceId?: number | string,\n): string {\n if (resource === 'modus') return '/agent/v1/modus/runs'\n const safeId = encodeURIComponent(String(resourceId))\n return `/agent/v1/${resource}/${safeId}/runs`\n}\n\nfunction chatBody(message: string, model: ChatModel): Record<string, string> {\n return { message, model }\n}\n\nfunction agentRunsBody(\n message: string,\n model: ChatModel,\n options: { sessionId: string; organizationId?: string; version?: string },\n): Record<string, unknown> {\n const body: Record<string, unknown> = {\n message,\n config: { model },\n sessionId: options.sessionId,\n }\n if (options.organizationId !== undefined) {\n body.organizationId = options.organizationId\n }\n if (options.version !== undefined) {\n body.version = options.version\n }\n return body\n}\n\nfunction raiseForEvent(event: RunEvent): RunEvent {\n if (event.type === 'error') throw new ModusError(event.message)\n if (event.type === 'cancelled') throw new RunCancelledError()\n if (event.type === 'stream_timeout') throw new StreamTimeoutError()\n return event\n}\n\nexport class ChatStream {\n private final?: ChatResult\n private readonly textParts: string[] = []\n\n constructor(\n private readonly http: HttpClient,\n private readonly path: string,\n private readonly body: Record<string, unknown>,\n private readonly baseUrl?: string,\n ) {}\n\n async *textStream(): AsyncGenerator<string> {\n for await (const event of this.events(false)) {\n if (event.type === 'token') yield event.content\n }\n }\n\n async *eventStream(): AsyncGenerator<RunEvent> {\n yield* this.events(true)\n }\n\n private async *events(supportsReset: boolean): AsyncGenerator<RunEvent> {\n const body = supportsReset\n ? { ...this.body, streamProtocolVersion: 2 }\n : this.body\n for await (const line of this.http.streamPost(this.path, body, {\n baseUrl: this.baseUrl,\n })) {\n for (const event of parseSseStream([line])) {\n const normalized = raiseForEvent(event)\n if (normalized.type === 'token') this.textParts.push(normalized.content)\n if (normalized.type === 'assistant_content_reset') {\n this.textParts.length = 0\n this.textParts.push(normalized.content)\n }\n if (normalized.type === 'done') {\n this.final = {\n content: this.textParts.join(''),\n threadId: normalized.threadId,\n runId: normalized.runId,\n }\n yield normalized\n return\n }\n yield normalized\n }\n }\n }\n\n getFinalResult(): ChatResult {\n if (this.final === undefined) {\n throw new ModusError(\n 'Stream ended without a done event; call getFinalResult() only after consuming textStream() or eventStream().',\n )\n }\n return this.final\n }\n}\n\nexport async function chatBuffered(\n http: HttpClient,\n resource: string,\n resourceId: number | string,\n message: string,\n options: { model: ChatModel; threadId?: string },\n): Promise<ChatResult> {\n validateId(resourceId, `${resource}_id`)\n validateChatModel(options.model)\n const path = chatPath(resource, resourceId, {\n threadId: options.threadId,\n })\n const data = await http.post(path, chatBody(message, options.model))\n return data as ChatResult\n}\n\nexport function chatStreamSession(\n http: HttpClient,\n config: ModusConfig,\n resource: 'scopes' | 'workflows',\n resourceId: number | string,\n message: string,\n options: { model: ChatModel; threadId?: string; version?: string },\n): ChatStream {\n validateId(resourceId, `${resource}_id`)\n validateChatModel(options.model)\n const path = agentHostRunsPath(resource, resourceId)\n return new ChatStream(\n http,\n path,\n agentRunsBody(message, options.model, {\n sessionId: resolveSessionId(options.threadId),\n organizationId: config.organizationId,\n version: options.version,\n }),\n config.agentHost,\n )\n}\n\nexport async function modusChatBuffered(\n http: HttpClient,\n message: string,\n options: { model: ChatModel; threadId?: string },\n): Promise<ChatResult> {\n validateChatModel(options.model)\n const path = modusChatPath({ threadId: options.threadId })\n const data = await http.post(path, chatBody(message, options.model))\n return data as ChatResult\n}\n\nexport function modusChatStreamSession(\n http: HttpClient,\n config: ModusConfig,\n message: string,\n options: { model: ChatModel; threadId?: string },\n): ChatStream {\n validateChatModel(options.model)\n return new ChatStream(\n http,\n agentHostRunsPath('modus'),\n agentRunsBody(message, options.model, {\n sessionId: resolveSessionId(options.threadId),\n organizationId: config.organizationId,\n }),\n config.agentHost,\n )\n}\n","import type {\n AssistantContentResetEvent,\n CancelledEvent,\n DoneEvent,\n ErrorEvent,\n RunEvent,\n StreamTimeoutEvent,\n TokenEvent,\n} from './types/runs.js'\n\nconst SILENTLY_IGNORED = new Set([\n 'heartbeat',\n 'ws_chunk',\n 'unknown',\n 'tool_start',\n 'tool_end',\n 'tool_chunk',\n 'agent_thinking',\n 'warning',\n 'selected_final_content',\n])\n\nfunction parseLine(line: string): Record<string, unknown> | undefined {\n if (!line.startsWith('data:')) return undefined\n const raw = line.slice(5).trimStart()\n if (!raw || raw === '[DONE]') return undefined\n try {\n const data = JSON.parse(raw) as unknown\n if (data && typeof data === 'object' && !Array.isArray(data)) {\n return data as Record<string, unknown>\n }\n } catch {\n return undefined\n }\n return undefined\n}\n\nfunction isAsyncIterable<T>(value: Iterable<T> | AsyncIterable<T>): value is AsyncIterable<T> {\n return Symbol.asyncIterator in Object(value)\n}\n\nfunction* parseData(data: Record<string, unknown>): Generator<RunEvent> {\n const eventType = typeof data.type === 'string' ? data.type : 'unknown'\n\n if (eventType === 'token') {\n const event: TokenEvent = {\n type: 'token',\n content: typeof data.content === 'string' ? data.content : '',\n }\n yield event\n } else if (eventType === 'done') {\n const event: DoneEvent = {\n type: 'done',\n runId: typeof data.runId === 'string' ? data.runId : '',\n threadId: typeof data.threadId === 'string' ? data.threadId : '',\n }\n yield event\n } else if (eventType === 'error') {\n const msg =\n data.error ?? data.message ?? data.content ?? 'Unknown run error'\n const event: ErrorEvent = { type: 'error', message: String(msg) }\n yield event\n } else if (eventType === 'cancelled') {\n const event: CancelledEvent = { type: 'cancelled' }\n yield event\n } else if (eventType === 'stream_timeout') {\n const event: StreamTimeoutEvent = { type: 'stream_timeout' }\n yield event\n } else if (eventType === 'assistant_content_reset') {\n if (typeof data.content !== 'string') return\n const event: AssistantContentResetEvent = {\n type: 'assistant_content_reset',\n content: data.content,\n ...(typeof data.visibleContent === 'string'\n ? { visibleContent: data.visibleContent }\n : {}),\n attempt: typeof data.attempt === 'number' ? data.attempt : 1,\n reason: 'provider_stream_failed',\n }\n yield event\n } else if (!SILENTLY_IGNORED.has(eventType)) {\n // Unknown future event types ignored for forward compatibility.\n return\n }\n}\n\nfunction* parseSyncSseLines(lines: Iterable<string>): Generator<RunEvent> {\n for (const line of lines) {\n const data = parseLine(line)\n if (data !== undefined) yield* parseData(data)\n }\n}\n\nasync function* parseAsyncSseLines(lines: AsyncIterable<string>): AsyncGenerator<RunEvent> {\n for await (const line of lines) {\n const data = parseLine(line)\n if (data !== undefined) yield* parseData(data)\n }\n}\n\n/** Convert raw SSE lines into typed run events (forward-compatible). */\nexport function parseSseStream(lines: Iterable<string>): Generator<RunEvent>\nexport function parseSseStream(lines: AsyncIterable<string>): AsyncGenerator<RunEvent>\nexport function parseSseStream(\n lines: Iterable<string> | AsyncIterable<string>,\n): Generator<RunEvent> | AsyncGenerator<RunEvent> {\n return isAsyncIterable(lines) ? parseAsyncSseLines(lines) : parseSyncSseLines(lines)\n}\n","import type { components } from '../_generated/v1.js'\n\nexport type Agent = components['schemas']['AgentDto']\n\n/** Runtime + type for agent kinds (use `AgentType.task`, not only as a type). */\nexport const AgentType = {\n task: 'task',\n workflow: 'workflow',\n} as const\n\nexport type AgentType = (typeof AgentType)[keyof typeof AgentType]\n","import type { components } from '../_generated/v1.js'\n\nexport type Conversation = components['schemas']['ConversationDto']\nexport type ConversationListItem = components['schemas']['ConversationListItemDto']\nexport type Message = components['schemas']['ConversationMessageDto']\nexport type ConversationKind = 'all' | 'modus' | 'skills'\n\n/** Skill id for a list item, or undefined for direct Modus chats (skillId 0). */\nexport function conversationSkillId(item: ConversationListItem): number | undefined {\n return item.skillId === 0 ? undefined : item.skillId\n}\n","import { randomUUID } from 'node:crypto'\nimport type { ModusConfig } from '../../_config.js'\nimport { ModusError } from '../../_exceptions.js'\nimport type { OperationId } from '../../_generated/operations.js'\nimport {\n formatOperationPath,\n getOperation,\n operationBaseUrl,\n} from '../../_openapi-invoke.js'\nimport type { HttpClient } from '../../_http.js'\nimport { Page, normalizePageToken } from '../../_pagination.js'\nimport { asRecord, invokeWithRetry } from '../../_request.js'\nimport { parseSseStream } from '../../_streaming.js'\nimport { validateId, validatePageSize } from '../../_validation.js'\nimport type {\n AgentRun,\n AgentRunListItem,\n AgentRunCreateRequest,\n ApprovalScope,\n CreateAgentRunRequest,\n ModusRunCreateRequest,\n ResumeRunRequest,\n RunStatus,\n RunTimeframe,\n SkillRunCreateRequest,\n} from '../../types/agent-runs.js'\nimport type { ActiveConversationRun, RunEvent } from '../../types/runs.js'\n\nconst RUNS_MAX_PAGE_SIZE = 100\n\nfunction runsListParams(\n pageSize: number,\n pageToken: string | undefined,\n status?: RunStatus,\n timeframe?: RunTimeframe,\n approvalScope?: ApprovalScope,\n search?: string,\n): Record<string, string | number | boolean | undefined | null> {\n const params: Record<string, string | number | boolean | undefined | null> = { pageSize }\n const token = normalizePageToken(pageToken)\n if (token !== undefined) params.pageToken = token\n if (status !== undefined) params.status = status\n if (timeframe !== undefined) params.timeframe = timeframe\n if (approvalScope !== undefined) params.approvalScope = approvalScope\n if (search !== undefined) params.search = search\n return params\n}\n\nfunction activeRunsParams(\n pageSize: number,\n pageToken: string | undefined,\n): Record<string, string | number> {\n const params: Record<string, string | number> = { pageSize }\n const token = normalizePageToken(pageToken)\n if (token !== undefined) params.pageToken = token\n return params\n}\n\nfunction parseRun(raw: unknown): AgentRun {\n return raw as AgentRun\n}\n\nfunction parseActiveRunsArray(raw: unknown): ActiveConversationRun[] {\n const data = asRecord(raw)\n const runs = data.runs\n if (!Array.isArray(runs)) {\n throw new ModusError(\n `Unexpected active runs response shape: runs must be a list, got ${typeof runs}.`,\n )\n }\n return runs as ActiveConversationRun[]\n}\n\nfunction parseActiveRunsPage(\n raw: unknown,\n fetchPage: (token: string) => Promise<Page<ActiveConversationRun>>,\n): Page<ActiveConversationRun> {\n const data = asRecord(raw)\n const runs = data.runs\n if (!Array.isArray(runs)) {\n throw new ModusError(\n `Unexpected active runs response shape: runs must be a list, got ${typeof runs}.`,\n )\n }\n return new Page(\n runs as ActiveConversationRun[],\n normalizePageToken(\n typeof data.nextPageToken === 'string' ? data.nextPageToken : undefined,\n ),\n fetchPage,\n )\n}\n\nfunction randomRunId(): string {\n return randomUUID()\n}\n\nexport interface AgentRunStream extends AsyncIterable<RunEvent> {\n readonly runId: string\n readonly events: AsyncIterable<RunEvent>\n}\n\nexport function makeAgentRunStream(runId: string, events: AsyncIterable<RunEvent>): AgentRunStream {\n return {\n runId,\n events,\n [Symbol.asyncIterator]() {\n return events[Symbol.asyncIterator]()\n },\n }\n}\n\nexport class WorkflowRunsResource {\n constructor(\n private readonly http: HttpClient,\n private readonly config: ModusConfig,\n ) {}\n\n list(\n workflowId: number | string,\n options: {\n pageSize?: number\n pageToken?: string\n status?: RunStatus\n timeframe?: RunTimeframe\n approvalScope?: ApprovalScope\n search?: string\n } = {},\n ): Promise<Page<AgentRunListItem>> {\n validateId(workflowId, 'workflow_id')\n const pageSize = options.pageSize ?? 25\n validatePageSize(pageSize, RUNS_MAX_PAGE_SIZE)\n return this.listPage(workflowId, pageSize, options.pageToken, options)\n }\n\n private async listPage(\n workflowId: number | string,\n pageSize: number,\n pageToken: string | undefined,\n filters: {\n status?: RunStatus\n timeframe?: RunTimeframe\n approvalScope?: ApprovalScope\n search?: string\n },\n ): Promise<Page<AgentRunListItem>> {\n const data = asRecord(\n await invokeWithRetry(this.config, this.http, 'WorkflowRunsController_list', {\n pathParams: { id: workflowId },\n query: runsListParams(\n pageSize,\n pageToken,\n filters.status,\n filters.timeframe,\n filters.approvalScope,\n filters.search,\n ),\n }),\n )\n const runs = data.runs\n if (!Array.isArray(runs)) {\n throw new ModusError(\n `Unexpected list response shape: runs must be a list, got ${typeof runs}.`,\n )\n }\n return new Page(\n runs as AgentRunListItem[],\n normalizePageToken(\n typeof data.nextPageToken === 'string' ? data.nextPageToken : undefined,\n ),\n (token: string) => this.listPage(workflowId, pageSize, token, filters),\n )\n }\n\n async get(\n workflowId: number | string,\n runId: string,\n options: { temporalRunId?: string } = {},\n ): Promise<AgentRun> {\n validateId(workflowId, 'workflow_id')\n if (!runId.trim()) throw new Error('run_id must be a non-empty string')\n const query =\n options.temporalRunId !== undefined\n ? { temporalRunId: options.temporalRunId }\n : undefined\n const data = await invokeWithRetry(this.config, this.http, 'WorkflowRunsController_get', {\n pathParams: { id: workflowId, runId },\n query,\n })\n return parseRun(data)\n }\n\n create(\n workflowId: number | string,\n body: CreateAgentRunRequest,\n options: { idempotencyKey?: string } = {},\n ): AgentRunStream {\n validateId(workflowId, 'workflow_id')\n return this.createRun('WorkflowRunsController_create', body, { id: workflowId }, options)\n }\n\n createScope(\n scopeId: number | string,\n body: SkillRunCreateRequest,\n options: { idempotencyKey?: string } = {},\n ): AgentRunStream {\n validateId(scopeId, 'scope_id')\n return this.createRun('ScopeRunsController_create', body, { id: scopeId }, options)\n }\n\n createModus(\n body: ModusRunCreateRequest,\n options: { idempotencyKey?: string } = {},\n ): AgentRunStream {\n return this.createRun('ModusRunsController_create', body, {}, options)\n }\n\n resume(\n runId: string,\n body: ResumeRunRequest,\n options: { idempotencyKey?: string } = {},\n ): AgentRunStream {\n validateId(runId, 'run_id')\n return this.createRun('ResumeRunsController_create', body, { runId }, options)\n }\n\n async cancel(runId: string): Promise<void> {\n validateId(runId, 'run_id')\n await invokeWithRetry(this.config, this.http, 'RunLifecycleController_cancel', {\n pathParams: { runId },\n jsonBody: {},\n })\n }\n\n async events(runId: string): Promise<unknown> {\n validateId(runId, 'run_id')\n return invokeWithRetry(this.config, this.http, 'RunLifecycleController_events', {\n pathParams: { runId },\n })\n }\n\n async interrupt(runId: string): Promise<void> {\n validateId(runId, 'run_id')\n await invokeWithRetry(this.config, this.http, 'RunLifecycleController_interrupt', {\n pathParams: { runId },\n jsonBody: {},\n })\n }\n\n async editQueued(runId: string): Promise<void> {\n validateId(runId, 'run_id')\n await invokeWithRetry(this.config, this.http, 'RunLifecycleController_editQueued', {\n pathParams: { runId },\n jsonBody: {},\n })\n }\n\n active(options: {\n pageSize?: number\n pageToken?: string\n } = {}): Promise<Page<ActiveConversationRun>> {\n const pageSize = options.pageSize ?? 50\n validatePageSize(pageSize, RUNS_MAX_PAGE_SIZE)\n return this.activePage(pageSize, options.pageToken)\n }\n\n private async activePage(\n pageSize: number,\n pageToken: string | undefined,\n ): Promise<Page<ActiveConversationRun>> {\n return parseActiveRunsPage(\n await invokeWithRetry(this.config, this.http, 'RunLifecycleController_active', {\n query: activeRunsParams(pageSize, pageToken),\n }),\n (token: string) => this.activePage(pageSize, token),\n )\n }\n\n async activeBySession(sessionIds: readonly string[]): Promise<ActiveConversationRun[]> {\n const uniqueSessionIds = [...new Set(sessionIds.map((id) => id.trim()).filter(Boolean))]\n if (uniqueSessionIds.length > 100) {\n throw new Error('sessionIds must contain at most 100 ids')\n }\n return parseActiveRunsArray(\n await invokeWithRetry(this.config, this.http, 'RunLifecycleController_activeBySession', {\n jsonBody: { sessionIds: uniqueSessionIds },\n }),\n )\n }\n\n stream(runId: string, options: { lastEventId?: string } = {}): AgentRunStream {\n validateId(runId, 'run_id')\n const op = getOperation('RunLifecycleController_stream')\n const path = formatOperationPath('RunLifecycleController_stream', { runId })\n const lines = this.http.streamGet(path, undefined, {\n baseUrl: operationBaseUrl(this.http, op),\n headers: options.lastEventId ? { 'Last-Event-ID': options.lastEventId } : undefined,\n })\n return makeAgentRunStream(runId, this.parseEvents(lines))\n }\n\n private createRun(\n operationId: OperationId,\n body: AgentRunCreateRequest | SkillRunCreateRequest | ModusRunCreateRequest | ResumeRunRequest,\n pathParams: Record<string, unknown>,\n options: { idempotencyKey?: string },\n ): AgentRunStream {\n const runId = options.idempotencyKey?.trim() || body.runId?.trim() || randomRunId()\n const op = getOperation(operationId)\n const path = formatOperationPath(operationId, pathParams)\n const lines = this.http.streamPost(path, {\n ...body,\n streamProtocolVersion: 2,\n }, {\n baseUrl: operationBaseUrl(this.http, op),\n headers: { 'Idempotency-Key': runId },\n })\n return makeAgentRunStream(runId, this.parseEvents(lines))\n }\n\n private async *parseEvents(lines: AsyncIterable<string>): AsyncGenerator<RunEvent> {\n yield* parseSseStream(lines)\n }\n}\n","import { randomUUID } from 'node:crypto'\nimport type { ModusConfig } from '../../_config.js'\nimport {\n formatOperationPath,\n getOperation,\n operationBaseUrl,\n} from '../../_openapi-invoke.js'\nimport type { HttpClient } from '../../_http.js'\nimport { invokeWithRetry } from '../../_request.js'\nimport { parseSseStream } from '../../_streaming.js'\nimport { validateId } from '../../_validation.js'\nimport type { WorkflowActionRequest } from '../../types/agent-runs.js'\nimport type { RunEvent } from '../../types/runs.js'\nimport { makeAgentRunStream, type AgentRunStream } from './runs.js'\n\nfunction randomRunId(): string {\n return randomUUID()\n}\n\nexport class AgentWorkflowActionsResource {\n constructor(\n private readonly http: HttpClient,\n private readonly config: ModusConfig,\n ) {}\n\n execute(\n body: WorkflowActionRequest,\n options: { idempotencyKey?: string } = {},\n ): AgentRunStream {\n const runId = options.idempotencyKey?.trim() || body.runId?.trim() || randomRunId()\n const op = getOperation('WorkflowActionsController_execute')\n const path = formatOperationPath('WorkflowActionsController_execute')\n const lines = this.http.streamPost(path, body, {\n baseUrl: operationBaseUrl(this.http, op),\n headers: { 'Idempotency-Key': runId },\n })\n return makeAgentRunStream(runId, this.parseEvents(lines))\n }\n\n async cancel(runId: string): Promise<void> {\n validateId(runId, 'run_id')\n await invokeWithRetry(this.config, this.http, 'WorkflowActionsController_cancel', {\n pathParams: { runId },\n jsonBody: {},\n })\n }\n\n private async *parseEvents(lines: AsyncIterable<string>): AsyncGenerator<RunEvent> {\n yield* parseSseStream(lines)\n }\n}\n","import { chatBuffered, chatStreamSession, type ChatStream } from '../_chat.js'\nimport type { ModusConfig } from '../_config.js'\nimport type { HttpClient } from '../_http.js'\nimport { aipListParams, buildAipPage, type Page } from '../_pagination.js'\nimport { asRecord, invokeWithRetry } from '../_request.js'\nimport { validateId, validatePageSize } from '../_validation.js'\nimport type { Agent, AgentType } from '../types/agents.js'\nimport type { ChatModel, ChatResult } from '../types/chat.js'\nimport type { VariationView } from '../types/views.js'\nimport { WorkflowRunsResource } from './agents/runs.js'\nimport { AgentWorkflowActionsResource } from './agents/workflow-actions.js'\n\nfunction workflowsListParams(\n pageSize: number,\n pageToken: string | undefined,\n search?: string,\n type?: AgentType,\n view?: VariationView,\n includeVariation?: boolean,\n): Record<string, string | number | boolean | undefined | null> {\n const extra: Record<string, string | number | boolean | undefined | null> = {}\n if (search !== undefined) extra.search = search\n if (type !== undefined) extra.type = type\n if (view !== undefined) extra.view = view\n if (includeVariation !== undefined) extra.includeVariation = includeVariation\n return aipListParams(pageSize, pageToken, extra) as Record<\n string,\n string | number | boolean | undefined | null\n >\n}\n\nfunction parseWorkflow(raw: unknown): Agent {\n return raw as Agent\n}\n\n/** Read / invoke access to Modus workflows (`/api/v1/workflows`). */\nexport class WorkflowsResource {\n readonly runs: WorkflowRunsResource\n readonly workflowActions: AgentWorkflowActionsResource\n\n constructor(\n private readonly http: HttpClient,\n private readonly config: ModusConfig,\n ) {\n this.runs = new WorkflowRunsResource(http, config)\n this.workflowActions = new AgentWorkflowActionsResource(http, config)\n }\n\n list(options: {\n pageSize?: number\n pageToken?: string\n search?: string\n type?: AgentType\n view?: VariationView\n includeVariation?: boolean\n } = {}): Promise<Page<Agent>> {\n const pageSize = options.pageSize ?? 25\n validatePageSize(pageSize)\n return this.listPage(\n pageSize,\n options.pageToken,\n options.search,\n options.type,\n options.view,\n options.includeVariation,\n )\n }\n\n private async listPage(\n pageSize: number,\n pageToken: string | undefined,\n search?: string,\n type?: AgentType,\n view?: VariationView,\n includeVariation?: boolean,\n ): Promise<Page<Agent>> {\n const data = asRecord(\n await invokeWithRetry(this.config, this.http, 'WorkflowsController_list', {\n query: workflowsListParams(\n pageSize,\n pageToken,\n search,\n type,\n view,\n includeVariation,\n ),\n }),\n )\n // Envelope key is the server DTO property name — unchanged by the rename\n // (only paths/opIds/tags moved to the workflows vocab).\n return buildAipPage(data, 'agents', parseWorkflow, (token) =>\n this.listPage(pageSize, token, search, type, view, includeVariation),\n )\n }\n\n async get(\n workflowId: number | string,\n options: { view?: VariationView; includeVariation?: boolean } = {},\n ): Promise<Agent> {\n validateId(workflowId, 'workflow_id')\n const query: Record<string, string | boolean> = {}\n if (options.view !== undefined) query.view = options.view\n if (options.includeVariation !== undefined) {\n query.includeVariation = options.includeVariation\n }\n const data = await invokeWithRetry(this.config, this.http, 'WorkflowsController_get', {\n pathParams: { id: workflowId },\n query: Object.keys(query).length > 0 ? query : undefined,\n })\n return parseWorkflow(data)\n }\n\n chat(\n workflowId: number | string,\n message: string,\n options: { model: ChatModel; threadId?: string },\n ): Promise<ChatResult> {\n return chatBuffered(this.http, 'workflows', workflowId, message, options)\n }\n\n chatStream(\n workflowId: number | string,\n message: string,\n options: { model: ChatModel; threadId?: string; version?: string },\n ): ChatStream {\n return chatStreamSession(this.http, this.config, 'workflows', workflowId, message, options)\n }\n}\n","import type { ModusConfig } from '../_config.js'\nimport type { HttpClient } from '../_http.js'\nimport { aipListParams, buildAipPage, type Page } from '../_pagination.js'\nimport { asRecord, invokeWithRetry } from '../_request.js'\nimport { validatePageSize } from '../_validation.js'\nimport type { Connection } from '../types/connections.js'\n\nfunction connectionsListParams(\n pageSize: number,\n pageToken: string | undefined,\n type?: string,\n): Record<string, string | number | boolean | undefined | null> {\n const extra: Record<string, string | number | boolean | undefined | null> = {}\n if (type !== undefined) extra.type = type\n return aipListParams(pageSize, pageToken, extra) as Record<\n string,\n string | number | boolean | undefined | null\n >\n}\n\nfunction parseConnection(raw: unknown): Connection {\n return raw as Connection\n}\n\nexport class ConnectionsResource {\n constructor(\n private readonly http: HttpClient,\n private readonly config: ModusConfig,\n ) {}\n\n list(options: {\n pageSize?: number\n pageToken?: string\n type?: string\n } = {}): Promise<Page<Connection>> {\n const pageSize = options.pageSize ?? 25\n validatePageSize(pageSize)\n return this.listPage(pageSize, options.pageToken, options.type)\n }\n\n private async listPage(\n pageSize: number,\n pageToken: string | undefined,\n type?: string,\n ): Promise<Page<Connection>> {\n const data = asRecord(\n await invokeWithRetry(this.config, this.http, 'ConnectionsController_list', {\n query: connectionsListParams(pageSize, pageToken, type),\n }),\n )\n return buildAipPage(data, 'connections', parseConnection, (token) =>\n this.listPage(pageSize, token, type),\n )\n }\n\n async find(options: {\n name: string\n type?: string\n pageSize?: number\n }): Promise<Connection | undefined> {\n const pageSize = options.pageSize ?? 25\n validatePageSize(pageSize)\n const target = options.name.trim().toLowerCase()\n let token: string | undefined\n do {\n const page = await this.listPage(pageSize, token, options.type)\n const match = page.items.find((c) => c.name?.toLowerCase() === target)\n if (match) return match\n if (!page.hasNextPage()) break\n token = page.nextPageToken\n } while (token !== undefined)\n return undefined\n }\n}\n","import type { ModusConfig } from '../../_config.js'\nimport { NotFoundError } from '../../_exceptions.js'\nimport type { HttpClient } from '../../_http.js'\nimport { aipListParams, buildAipPage, type Page } from '../../_pagination.js'\nimport { asRecord, invokeWithRetry, omitUndefined } from '../../_request.js'\nimport { DEFAULT_MAX_PAGE_SIZE, validatePageSize } from '../../_validation.js'\nimport type { ContextItem, ContextItemLookupRow } from '../../types/context.js'\nimport type { ContextValueRow } from '../../types/context-values.js'\nimport type { ContentProjection, JsonObjectInput } from '../../types/json-blob.js'\n\nfunction contextListParams(\n pageSize: number,\n pageToken: string | undefined,\n contextType?: string,\n): Record<string, string | number | boolean | readonly string[] | undefined | null> {\n const extra: Record<string, string | readonly string[]> = {}\n if (contextType !== undefined) extra.contextTypes = [contextType]\n return aipListParams(pageSize, pageToken, extra) as Record<\n string,\n string | number | boolean | readonly string[] | undefined | null\n >\n}\n\nfunction parseContextItem(raw: unknown): ContextItem {\n return raw as ContextItem\n}\n\nfunction parseContextValueRow(raw: unknown): ContextValueRow {\n return raw as ContextValueRow\n}\n\nfunction parseLookupResponse(raw: Record<string, unknown>): ContextItemLookupRow | undefined {\n const item = raw.item\n if (item === null || item === undefined) return undefined\n return item as ContextItemLookupRow\n}\n\nexport class ContextItemsResource {\n constructor(\n private readonly http: HttpClient,\n private readonly config: ModusConfig,\n ) {}\n\n list(options: {\n pageSize?: number\n pageToken?: string\n contextType?: string\n } = {}): Promise<Page<ContextItem>> {\n const pageSize = options.pageSize ?? 25\n validatePageSize(pageSize)\n return this.listPage(pageSize, options.pageToken, options.contextType)\n }\n\n private async listPage(\n pageSize: number,\n pageToken: string | undefined,\n contextType?: string,\n ): Promise<Page<ContextItem>> {\n const data = asRecord(\n await invokeWithRetry(this.config, this.http, 'ContextItemsController_list', {\n query: contextListParams(pageSize, pageToken, contextType),\n }),\n )\n return buildAipPage(data, 'contextItems', parseContextItem, (token) =>\n this.listPage(pageSize, token, contextType),\n )\n }\n\n async get(uid: string): Promise<ContextItem> {\n const data = await invokeWithRetry(this.config, this.http, 'ContextItemsController_get', {\n pathParams: { uid },\n })\n return parseContextItem(data)\n }\n\n async lookup(options: {\n contextType: string\n dataPath: string[]\n contentProjection?: JsonObjectInput | ContentProjection\n }): Promise<ContextItemLookupRow | undefined> {\n const body = omitUndefined({\n contextType: options.contextType,\n dataPath: options.dataPath,\n contentProjection: options.contentProjection,\n })\n try {\n const raw = asRecord(\n await invokeWithRetry(this.config, this.http, 'ContextItemsController_lookup', {\n jsonBody: body,\n }),\n )\n return parseLookupResponse(raw)\n } catch (error) {\n if (error instanceof NotFoundError) return undefined\n throw error\n }\n }\n\n listValues(\n uid: string,\n contextType: string,\n contentKeyPath: string,\n options: { pageSize?: number; pageToken?: string } = {},\n ): Promise<Page<ContextValueRow>> {\n const pageSize = options.pageSize ?? 25\n validatePageSize(pageSize, DEFAULT_MAX_PAGE_SIZE)\n return this.listValuesPage(uid, contextType, contentKeyPath, pageSize, options.pageToken)\n }\n\n listValuesFor(\n item: ContextItem,\n contentKeyPath: string,\n options: { pageSize?: number; pageToken?: string } = {},\n ): Promise<Page<ContextValueRow>> {\n return this.listValues(item.uid, item.contextType, contentKeyPath, options)\n }\n\n private async listValuesPage(\n uid: string,\n contextType: string,\n contentKeyPath: string,\n pageSize: number,\n pageToken: string | undefined,\n ): Promise<Page<ContextValueRow>> {\n const data = asRecord(\n await invokeWithRetry(this.config, this.http, 'ContextItemsController_listValues', {\n pathParams: { uid },\n query: aipListParams(pageSize, pageToken, {\n contextType,\n contentKeyPath,\n }) as Record<string, string | number | boolean | undefined | null>,\n }),\n )\n return buildAipPage(data, 'values', parseContextValueRow, (token) =>\n this.listValuesPage(uid, contextType, contentKeyPath, pageSize, token),\n )\n }\n}\n","import type { ModusConfig } from '../../_config.js'\nimport type { HttpClient } from '../../_http.js'\nimport { CustomContextItemsResource } from './custom-items.js'\nimport { ContextItemsResource } from './items.js'\n\n/** Read access to the Modus knowledge base. */\nexport class ContextResource {\n readonly items: ContextItemsResource\n readonly customItems: CustomContextItemsResource\n\n constructor(http: HttpClient, config: ModusConfig) {\n this.items = new ContextItemsResource(http, config)\n this.customItems = new CustomContextItemsResource(http, config)\n }\n}\n","import type { ModusConfig } from '../../_config.js'\nimport type { HttpClient } from '../../_http.js'\nimport { aipListParams, buildAipPage, type Page } from '../../_pagination.js'\nimport { asRecord, invokeWithRetry } from '../../_request.js'\nimport { validateId, validatePageSize } from '../../_validation.js'\nimport type {\n Conversation,\n ConversationKind,\n ConversationListItem,\n} from '../../types/conversations.js'\n\nconst ALLOWED_KINDS = new Set<ConversationKind>(['all', 'modus', 'skills'])\n\nfunction listParams(\n pageSize: number,\n pageToken: string | undefined,\n kind?: ConversationKind,\n): Record<string, string | number | boolean | undefined | null> {\n if (kind !== undefined && !ALLOWED_KINDS.has(kind)) {\n throw new Error(\n `kind must be one of ${[...ALLOWED_KINDS].sort().join(', ')}, got ${JSON.stringify(kind)}`,\n )\n }\n const extra: Record<string, string> = {}\n if (kind !== undefined) extra.kind = kind\n return aipListParams(pageSize, pageToken, extra) as Record<\n string,\n string | number | boolean | undefined | null\n >\n}\n\nfunction parseListItem(raw: unknown): ConversationListItem {\n return raw as ConversationListItem\n}\n\nfunction parseConversation(raw: unknown): Conversation {\n return raw as Conversation\n}\n\nexport class ModusConversationsResource {\n constructor(\n private readonly http: HttpClient,\n private readonly config: ModusConfig,\n ) {}\n\n list(options: {\n pageSize?: number\n pageToken?: string\n kind?: ConversationKind\n } = {}): Promise<Page<ConversationListItem>> {\n const pageSize = options.pageSize ?? 25\n validatePageSize(pageSize)\n return this.listPage(pageSize, options.pageToken, options.kind)\n }\n\n private async listPage(\n pageSize: number,\n pageToken: string | undefined,\n kind?: ConversationKind,\n ): Promise<Page<ConversationListItem>> {\n const data = asRecord(\n await invokeWithRetry(this.config, this.http, 'ModusConversationsController_list', {\n query: listParams(pageSize, pageToken, kind),\n }),\n )\n return buildAipPage(data, 'conversations', parseListItem, (token) =>\n this.listPage(pageSize, token, kind),\n )\n }\n\n async get(threadId: string): Promise<Conversation> {\n validateId(threadId, 'thread_id')\n const data = await invokeWithRetry(this.config, this.http, 'ModusConversationsController_get', {\n pathParams: { threadId },\n })\n return parseConversation(data)\n }\n}\n","import { modusChatBuffered, modusChatStreamSession, type ChatStream } from '../../_chat.js'\nimport type { ModusConfig } from '../../_config.js'\nimport type { HttpClient } from '../../_http.js'\nimport { invokeWithRetry, omitUndefined } from '../../_request.js'\nimport type { ChatModel, ChatResult } from '../../types/chat.js'\nimport type { ModusContextComposition } from '../../types/context-compose.js'\n\nimport { ModusConversationsResource } from './conversations.js'\n\n/** Org-wide Modus assistant. */\nexport class ModusResource {\n readonly conversations: ModusConversationsResource\n\n constructor(\n private readonly http: HttpClient,\n private readonly config: ModusConfig,\n ) {\n this.conversations = new ModusConversationsResource(http, config)\n }\n\n async getContext(\n message: string,\n options: { limit?: number } = {},\n ): Promise<ModusContextComposition> {\n const data = await invokeWithRetry(this.config, this.http, 'ModusContextController_compose', {\n jsonBody: omitUndefined({ message, limit: options.limit }),\n })\n return data as ModusContextComposition\n }\n\n chat(message: string, options: { model: ChatModel; threadId?: string }): Promise<ChatResult> {\n return modusChatBuffered(this.http, message, options)\n }\n\n chatStream(message: string, options: { model: ChatModel; threadId?: string }): ChatStream {\n return modusChatStreamSession(this.http, this.config, message, options)\n }\n}\n","import { chatBuffered, chatStreamSession, type ChatStream } from '../_chat.js'\nimport type { ModusConfig } from '../_config.js'\nimport type { HttpClient } from '../_http.js'\nimport { aipListParams, buildAipPage, type Page } from '../_pagination.js'\nimport { asRecord, invokeWithRetry, omitUndefined } from '../_request.js'\nimport { validateId, validatePageSize } from '../_validation.js'\nimport type { ChatModel, ChatResult } from '../types/chat.js'\nimport type { SkillContextComposition } from '../types/context-compose.js'\nimport type { Skill } from '../types/skills.js'\nimport type { VariationView } from '../types/views.js'\nimport { ScopeConversationsResource } from './skills/conversations.js'\n\nfunction scopesListParams(\n pageSize: number,\n pageToken: string | undefined,\n search?: string,\n view?: VariationView,\n managerId?: number,\n): Record<string, string | number | boolean | undefined | null> {\n const extra: Record<string, string | number | boolean | undefined | null> = {}\n if (search !== undefined) extra.search = search\n if (view !== undefined) extra.view = view\n if (managerId !== undefined) extra.managerId = managerId\n return aipListParams(pageSize, pageToken, extra) as Record<\n string,\n string | number | boolean | undefined | null\n >\n}\n\nfunction parseScope(raw: unknown): Skill {\n return raw as Skill\n}\n\n/** Read / invoke access to Modus scopes (`/api/v1/scopes`). */\nexport class ScopesResource {\n constructor(\n private readonly http: HttpClient,\n private readonly config: ModusConfig,\n ) {}\n\n conversations(scopeId: number | string): ScopeConversationsResource {\n return new ScopeConversationsResource(this.http, this.config, scopeId)\n }\n\n list(options: {\n pageSize?: number\n pageToken?: string\n search?: string\n view?: VariationView\n managerId?: number\n } = {}): Promise<Page<Skill>> {\n const pageSize = options.pageSize ?? 25\n validatePageSize(pageSize)\n return this.listPage(\n pageSize,\n options.pageToken,\n options.search,\n options.view,\n options.managerId,\n )\n }\n\n private async listPage(\n pageSize: number,\n pageToken: string | undefined,\n search?: string,\n view?: VariationView,\n managerId?: number,\n ): Promise<Page<Skill>> {\n const data = asRecord(\n await invokeWithRetry(this.config, this.http, 'ScopesController_list', {\n query: scopesListParams(pageSize, pageToken, search, view, managerId),\n }),\n )\n // The list response envelope key is the server DTO property name, which\n // this rename intentionally left as `skills` (only paths/opIds/tags moved\n // to the scopes vocab — response body schemas are unchanged).\n return buildAipPage(data, 'skills', parseScope, (token) =>\n this.listPage(pageSize, token, search, view, managerId),\n )\n }\n\n async get(\n scopeId: number | string,\n options: { view?: VariationView } = {},\n ): Promise<Skill> {\n validateId(scopeId, 'scope_id')\n const query = options.view !== undefined ? { view: options.view } : undefined\n const data = await invokeWithRetry(this.config, this.http, 'ScopesController_get', {\n pathParams: { id: scopeId },\n query,\n })\n return parseScope(data)\n }\n\n async getContext(\n scopeId: number | string,\n message: string,\n options: { limit?: number } = {},\n ): Promise<SkillContextComposition> {\n validateId(scopeId, 'scope_id')\n const data = await invokeWithRetry(this.config, this.http, 'ScopeContextController_compose', {\n pathParams: { id: scopeId },\n jsonBody: omitUndefined({ message, limit: options.limit }),\n })\n return data as SkillContextComposition\n }\n\n chat(\n scopeId: number | string,\n message: string,\n options: { model: ChatModel; threadId?: string },\n ): Promise<ChatResult> {\n return chatBuffered(this.http, 'scopes', scopeId, message, options)\n }\n\n chatStream(\n scopeId: number | string,\n message: string,\n options: { model: ChatModel; threadId?: string; version?: string },\n ): ChatStream {\n return chatStreamSession(this.http, this.config, 'scopes', scopeId, message, options)\n }\n}\n","import type { components } from '../_generated/v1.js'\n\nexport type SuggestionQuestion = components['schemas']['SuggestionQuestionDto']\nexport type SuggestionEventType = components['schemas']['SuggestionEventType']\nexport type SuggestionEventSource = components['schemas']['SuggestionEventSource']\n\n/** Wire format (snake_case) plus camelCase aliases for DX. */\nexport type RecordSuggestionEventRequest = components['schemas']['RecordSuggestionEventDto'] & {\n eventType?: components['schemas']['SuggestionEventType']\n skillId?: number\n threadId?: string\n}\n\n/** Normalize to the OpenAPI allowlist keys (`event_type`, not `eventType`). */\nexport function normalizeRecordSuggestionEvent(\n event: RecordSuggestionEventRequest,\n): components['schemas']['RecordSuggestionEventDto'] {\n const eventType = event.event_type ?? event.eventType\n if (eventType === undefined) {\n throw new Error('recordEvent requires event_type (or eventType)')\n }\n const body: components['schemas']['RecordSuggestionEventDto'] = {\n event_type: eventType,\n source: event.source,\n }\n const skillId = event.skill_id ?? event.skillId\n if (skillId !== undefined) body.skill_id = skillId\n const threadId = event.thread_id ?? event.threadId\n if (threadId !== undefined) body.thread_id = threadId\n if (event.metadata !== undefined) body.metadata = event.metadata\n return body\n}\n","import type { ModusConfig } from '../_config.js'\nimport type { HttpClient } from '../_http.js'\nimport { buildAipPage, type Page } from '../_pagination.js'\nimport { asRecord, invokeWithRetry } from '../_request.js'\nimport { validateId, validatePageSize } from '../_validation.js'\nimport {\n normalizeRecordSuggestionEvent,\n type RecordSuggestionEventRequest,\n type SuggestionQuestion,\n} from '../types/suggestions.js'\n\nconst DEFAULT_SUGGESTIONS_PAGE_SIZE = 5\nconst MAX_SUGGESTIONS_PAGE_SIZE = 12\n\nfunction parseSuggestion(raw: unknown): SuggestionQuestion {\n return raw as SuggestionQuestion\n}\n\nfunction suggestionListParams(options: {\n pageSize: number\n pageToken?: string\n skillId?: number\n skillIds?: readonly number[]\n}): Record<string, string | number | undefined> {\n return {\n pageSize: options.pageSize,\n pageToken: options.pageToken,\n skill_id: options.skillId,\n skill_ids: options.skillIds?.join(','),\n }\n}\n\nexport class SuggestionsResource {\n constructor(\n private readonly http: HttpClient,\n private readonly config: ModusConfig,\n ) {}\n\n list(options: {\n pageSize?: number\n pageToken?: string\n skillId?: number\n skillIds?: readonly number[]\n } = {}): Promise<Page<SuggestionQuestion>> {\n const pageSize = options.pageSize ?? DEFAULT_SUGGESTIONS_PAGE_SIZE\n validatePageSize(pageSize, MAX_SUGGESTIONS_PAGE_SIZE)\n return this.listPage(pageSize, options.pageToken, options.skillId, options.skillIds)\n }\n\n private async listPage(\n pageSize: number,\n pageToken: string | undefined,\n skillId: number | undefined,\n skillIds: readonly number[] | undefined,\n ): Promise<Page<SuggestionQuestion>> {\n const data = asRecord(\n await invokeWithRetry(this.config, this.http, 'SuggestionsController_listApproved', {\n query: suggestionListParams({ pageSize, pageToken, skillId, skillIds }),\n }),\n )\n return buildAipPage(data, 'suggestions', parseSuggestion, (token) =>\n this.listPage(pageSize, token, skillId, skillIds),\n )\n }\n\n async recordEvent(id: string, event: RecordSuggestionEventRequest): Promise<void> {\n validateId(id, 'id')\n await invokeWithRetry(this.config, this.http, 'SuggestionsController_recordEvent', {\n pathParams: { id },\n jsonBody: normalizeRecordSuggestionEvent(event),\n })\n }\n}\n","/**\n * @getmodus/sdk — official TypeScript client for Modus.\n */\n\nexport type { components, paths, operations } from './_generated/v1.js'\nexport type { OperationId, OperationSpec } from './_generated/operations.js'\nexport { OPERATIONS } from './_generated/operations.js'\n\nexport {\n APIConnectionError,\n AuthenticationError,\n ConflictError,\n InternalServerError,\n ModusError,\n NotFoundError,\n PermissionDeniedError,\n RateLimitError,\n RunCancelledError,\n StreamTimeoutError,\n UnprocessableError,\n ValidationError,\n} from './_exceptions.js'\n\nexport { ChatStream } from './_chat.js'\nexport { Page } from './_pagination.js'\nexport type {\n AssistantContentResetEvent,\n CancelledEvent,\n DoneEvent,\n ErrorEvent,\n RunEvent,\n StreamTimeoutEvent,\n TokenEvent,\n} from './types/runs.js'\nexport type { ChatModel, ChatRequest, ChatResult } from './types/chat.js'\nexport type { ModusOptions } from './_config.js'\nexport type { Skill, SkillStatus, SkillVariation } from './types/skills.js'\nexport type { Agent } from './types/agents.js'\nexport { AgentType } from './types/agents.js'\nexport type {\n AgentRun,\n AgentRunCreateRequest,\n AgentRunListItem,\n ApprovalScope,\n CancelRunRequest,\n CreateAgentRunRequest,\n EditQueuedRunRequest,\n InterruptRunRequest,\n ModusRunCreateRequest,\n ResumeRunRequest,\n RunStatus,\n RunTimeframe,\n SkillRunCreateRequest,\n WorkflowActionRequest,\n} from './types/agent-runs.js'\nexport type { AgentRunStream } from './resources/agents/runs.js'\nexport type {\n Conversation,\n ConversationKind,\n ConversationListItem,\n Message,\n} from './types/conversations.js'\nexport { conversationSkillId } from './types/conversations.js'\nexport type { Connection } from './types/connections.js'\nexport type { VariationView } from './types/views.js'\nexport type {\n ContextItem,\n ContextItemLookupRow,\n ContextType,\n} from './types/context.js'\nexport type { ContextValueRow } from './types/context-values.js'\nexport type {\n ComposeSkillContextRequest,\n ModusContextComposition,\n ModusContextRequest,\n SkillContextComposition,\n} from './types/context-compose.js'\nexport type {\n RecordSuggestionEventRequest,\n SuggestionEventSource,\n SuggestionEventType,\n SuggestionQuestion,\n} from './types/suggestions.js'\n\nimport { ModusClientBase } from './_client-base.js'\nimport { WorkflowsResource } from './resources/agents.js'\nimport { ConnectionsResource } from './resources/connections.js'\nimport { ContextResource } from './resources/context/context.js'\nimport { ModusResource } from './resources/modus/modus.js'\nimport { ScopesResource } from './resources/skills.js'\nimport { SuggestionsResource } from './resources/suggestions.js'\n\n/** Read / invoke client for Modus scopes, workflows, connections, and more. */\nexport class Modus extends ModusClientBase {\n readonly scopes: ScopesResource\n readonly modus: ModusResource\n readonly workflows: WorkflowsResource\n readonly context: ContextResource\n readonly connections: ConnectionsResource\n readonly suggestions: SuggestionsResource\n\n constructor(options: import('./_config.js').ModusOptions = {}) {\n super(options)\n this.scopes = new ScopesResource(this.http, this.config)\n this.modus = new ModusResource(this.http, this.config)\n this.workflows = new WorkflowsResource(this.http, this.config)\n this.context = new ContextResource(this.http, this.config)\n this.connections = new ConnectionsResource(this.http, this.config)\n this.suggestions = new SuggestionsResource(this.http, this.config)\n }\n}\n"],"mappings":"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","names":["randomUUID","randomUUID","randomUUID","randomRunId","randomUUID"]}
|
|
1
|
+
{"version":3,"sources":["../src/_agent_run_request.ts","../src/_streaming.ts","../src/_chat.ts","../src/types/agents.ts","../src/types/conversations.ts","../src/resources/agents/runs.ts","../src/resources/agents/workflow-actions.ts","../src/resources/agents.ts","../src/resources/connections.ts","../src/resources/context/items.ts","../src/resources/context/context.ts","../src/resources/modus/conversations.ts","../src/resources/modus/modus.ts","../src/resources/skills.ts","../src/types/suggestions.ts","../src/resources/suggestions.ts","../src/index.ts"],"sourcesContent":["import { randomUUID } from 'node:crypto'\n\n/** Mint or reuse a non-empty sessionId for agent-host runs. */\nexport function resolveAgentRunSessionId(sessionId?: string | null): string {\n if (typeof sessionId === 'string' && sessionId.trim()) return sessionId.trim()\n return randomUUID()\n}\n","import type {\n AssistantContentResetEvent,\n CancelledEvent,\n DoneEvent,\n ErrorEvent,\n RunEvent,\n StreamTimeoutEvent,\n TokenEvent,\n} from './types/runs.js'\n\nconst SILENTLY_IGNORED = new Set([\n 'heartbeat',\n 'ws_chunk',\n 'unknown',\n 'tool_start',\n 'tool_end',\n 'tool_chunk',\n 'agent_thinking',\n 'warning',\n 'selected_final_content',\n])\n\nfunction parseLine(line: string): Record<string, unknown> | undefined {\n if (!line.startsWith('data:')) return undefined\n const raw = line.slice(5).trimStart()\n if (!raw || raw === '[DONE]') return undefined\n try {\n const data = JSON.parse(raw) as unknown\n if (data && typeof data === 'object' && !Array.isArray(data)) {\n return data as Record<string, unknown>\n }\n } catch {\n return undefined\n }\n return undefined\n}\n\nfunction isAsyncIterable<T>(value: Iterable<T> | AsyncIterable<T>): value is AsyncIterable<T> {\n return Symbol.asyncIterator in Object(value)\n}\n\nfunction* parseData(data: Record<string, unknown>): Generator<RunEvent> {\n const eventType = typeof data.type === 'string' ? data.type : 'unknown'\n\n if (eventType === 'token') {\n const event: TokenEvent = {\n type: 'token',\n content: typeof data.content === 'string' ? data.content : '',\n }\n yield event\n } else if (eventType === 'done') {\n const event: DoneEvent = {\n type: 'done',\n runId: typeof data.runId === 'string' ? data.runId : '',\n threadId: typeof data.threadId === 'string' ? data.threadId : '',\n }\n yield event\n } else if (eventType === 'error') {\n const msg =\n data.error ?? data.message ?? data.content ?? 'Unknown run error'\n const event: ErrorEvent = { type: 'error', message: String(msg) }\n yield event\n } else if (eventType === 'cancelled') {\n const event: CancelledEvent = { type: 'cancelled' }\n yield event\n } else if (eventType === 'stream_timeout') {\n const event: StreamTimeoutEvent = { type: 'stream_timeout' }\n yield event\n } else if (eventType === 'assistant_content_reset') {\n if (typeof data.content !== 'string') return\n const event: AssistantContentResetEvent = {\n type: 'assistant_content_reset',\n content: data.content,\n ...(typeof data.visibleContent === 'string'\n ? { visibleContent: data.visibleContent }\n : {}),\n attempt: typeof data.attempt === 'number' ? data.attempt : 1,\n reason: 'provider_stream_failed',\n }\n yield event\n } else if (!SILENTLY_IGNORED.has(eventType)) {\n // Unknown future event types ignored for forward compatibility.\n return\n }\n}\n\nfunction* parseSyncSseLines(lines: Iterable<string>): Generator<RunEvent> {\n for (const line of lines) {\n const data = parseLine(line)\n if (data !== undefined) yield* parseData(data)\n }\n}\n\nasync function* parseAsyncSseLines(lines: AsyncIterable<string>): AsyncGenerator<RunEvent> {\n for await (const line of lines) {\n const data = parseLine(line)\n if (data !== undefined) yield* parseData(data)\n }\n}\n\n/** Convert raw SSE lines into typed run events (forward-compatible). */\nexport function parseSseStream(lines: Iterable<string>): Generator<RunEvent>\nexport function parseSseStream(lines: AsyncIterable<string>): AsyncGenerator<RunEvent>\nexport function parseSseStream(\n lines: Iterable<string> | AsyncIterable<string>,\n): Generator<RunEvent> | AsyncGenerator<RunEvent> {\n return isAsyncIterable(lines) ? parseAsyncSseLines(lines) : parseSyncSseLines(lines)\n}\n","import {\n ModusError,\n RunCancelledError,\n StreamTimeoutError,\n} from './_exceptions.js'\nimport type { ModusConfig } from './_config.js'\nimport { resolveAgentRunSessionId } from './_agent_run_request.js'\nimport type { HttpClient } from './_http.js'\nimport { parseSseStream } from './_streaming.js'\nimport { validateChatModel, validateId } from './_validation.js'\nimport type { ChatModel, ChatResult } from './types/chat.js'\nimport type { RunEvent } from './types/runs.js'\n\nfunction effectiveThreadId(threadId?: string): string | undefined {\n if (threadId === undefined) return undefined\n if (!threadId.trim()) return undefined\n return threadId\n}\n\nfunction resolveSessionId(threadId?: string): string {\n return resolveAgentRunSessionId(effectiveThreadId(threadId))\n}\n\nfunction chatPath(\n resource: string,\n resourceId: number | string,\n options: { threadId?: string },\n): string {\n const safeId = encodeURIComponent(String(resourceId))\n const tid = effectiveThreadId(options.threadId)\n if (tid !== undefined) {\n const safeTid = encodeURIComponent(tid)\n return `/api/v1/${resource}/${safeId}/conversations/${safeTid}/chat`\n }\n return `/api/v1/${resource}/${safeId}/chat`\n}\n\nfunction modusChatPath(options: { threadId?: string }): string {\n const tid = effectiveThreadId(options.threadId)\n if (tid !== undefined) {\n validateId(tid, 'thread_id')\n return `/api/v1/modus/conversations/${encodeURIComponent(tid)}/chat`\n }\n return `/api/v1/modus/chat`\n}\n\nfunction agentHostRunsPath(\n resource: 'modus' | 'scopes' | 'workflows',\n resourceId?: number | string,\n): string {\n if (resource === 'modus') return '/agent/v1/modus/runs'\n const safeId = encodeURIComponent(String(resourceId))\n return `/agent/v1/${resource}/${safeId}/runs`\n}\n\nfunction chatBody(message: string, model: ChatModel): Record<string, string> {\n return { message, model }\n}\n\nfunction agentRunsBody(\n message: string,\n model: ChatModel,\n options: { sessionId: string; organizationId?: string; version?: string },\n): Record<string, unknown> {\n const body: Record<string, unknown> = {\n message,\n config: { model },\n sessionId: options.sessionId,\n }\n if (options.organizationId !== undefined) {\n body.organizationId = options.organizationId\n }\n if (options.version !== undefined) {\n body.version = options.version\n }\n return body\n}\n\nfunction raiseForEvent(event: RunEvent): RunEvent {\n if (event.type === 'error') throw new ModusError(event.message)\n if (event.type === 'cancelled') throw new RunCancelledError()\n if (event.type === 'stream_timeout') throw new StreamTimeoutError()\n return event\n}\n\nexport class ChatStream {\n private final?: ChatResult\n private readonly textParts: string[] = []\n\n constructor(\n private readonly http: HttpClient,\n private readonly path: string,\n private readonly body: Record<string, unknown>,\n private readonly baseUrl?: string,\n ) {}\n\n async *textStream(): AsyncGenerator<string> {\n for await (const event of this.events(false)) {\n if (event.type === 'token') yield event.content\n }\n }\n\n async *eventStream(): AsyncGenerator<RunEvent> {\n yield* this.events(true)\n }\n\n private async *events(supportsReset: boolean): AsyncGenerator<RunEvent> {\n const body = supportsReset\n ? { ...this.body, streamProtocolVersion: 2 }\n : this.body\n for await (const line of this.http.streamPost(this.path, body, {\n baseUrl: this.baseUrl,\n })) {\n for (const event of parseSseStream([line])) {\n const normalized = raiseForEvent(event)\n if (normalized.type === 'token') this.textParts.push(normalized.content)\n if (normalized.type === 'assistant_content_reset') {\n this.textParts.length = 0\n this.textParts.push(normalized.content)\n }\n if (normalized.type === 'done') {\n this.final = {\n content: this.textParts.join(''),\n threadId: normalized.threadId,\n runId: normalized.runId,\n }\n yield normalized\n return\n }\n yield normalized\n }\n }\n }\n\n getFinalResult(): ChatResult {\n if (this.final === undefined) {\n throw new ModusError(\n 'Stream ended without a done event; call getFinalResult() only after consuming textStream() or eventStream().',\n )\n }\n return this.final\n }\n}\n\nexport async function chatBuffered(\n http: HttpClient,\n resource: string,\n resourceId: number | string,\n message: string,\n options: { model: ChatModel; threadId?: string },\n): Promise<ChatResult> {\n validateId(resourceId, `${resource}_id`)\n validateChatModel(options.model)\n const path = chatPath(resource, resourceId, {\n threadId: options.threadId,\n })\n const data = await http.post(path, chatBody(message, options.model))\n return data as ChatResult\n}\n\nexport function chatStreamSession(\n http: HttpClient,\n config: ModusConfig,\n resource: 'scopes' | 'workflows',\n resourceId: number | string,\n message: string,\n options: { model: ChatModel; threadId?: string; version?: string },\n): ChatStream {\n validateId(resourceId, `${resource}_id`)\n validateChatModel(options.model)\n const path = agentHostRunsPath(resource, resourceId)\n return new ChatStream(\n http,\n path,\n agentRunsBody(message, options.model, {\n sessionId: resolveSessionId(options.threadId),\n organizationId: config.organizationId,\n version: options.version,\n }),\n config.agentHost,\n )\n}\n\nexport async function modusChatBuffered(\n http: HttpClient,\n message: string,\n options: { model: ChatModel; threadId?: string },\n): Promise<ChatResult> {\n validateChatModel(options.model)\n const path = modusChatPath({ threadId: options.threadId })\n const data = await http.post(path, chatBody(message, options.model))\n return data as ChatResult\n}\n\nexport function modusChatStreamSession(\n http: HttpClient,\n config: ModusConfig,\n message: string,\n options: { model: ChatModel; threadId?: string },\n): ChatStream {\n validateChatModel(options.model)\n return new ChatStream(\n http,\n agentHostRunsPath('modus'),\n agentRunsBody(message, options.model, {\n sessionId: resolveSessionId(options.threadId),\n organizationId: config.organizationId,\n }),\n config.agentHost,\n )\n}\n","import type { components } from '../_generated/v1.js'\n\nexport type Agent = components['schemas']['AgentDto']\n\n/** Runtime + type for agent kinds (use `AgentType.task`, not only as a type). */\nexport const AgentType = {\n task: 'task',\n workflow: 'workflow',\n} as const\n\nexport type AgentType = (typeof AgentType)[keyof typeof AgentType]\n","import type { components } from '../_generated/v1.js'\n\nexport type Conversation = components['schemas']['ConversationDto']\nexport type ConversationListItem = components['schemas']['ConversationListItemDto']\nexport type Message = components['schemas']['ConversationMessageDto']\nexport type ConversationKind = 'all' | 'modus' | 'skills'\n\n/** Skill id for a list item, or undefined for direct Modus chats (skillId 0). */\nexport function conversationSkillId(item: ConversationListItem): number | undefined {\n return item.skillId === 0 ? undefined : item.skillId\n}\n","import { randomUUID } from 'node:crypto'\nimport type { ModusConfig } from '../../_config.js'\nimport { resolveAgentRunSessionId } from '../../_agent_run_request.js'\nimport { ModusError } from '../../_exceptions.js'\nimport type { OperationId } from '../../_generated/operations.js'\nimport {\n formatOperationPath,\n getOperation,\n operationBaseUrl,\n} from '../../_openapi-invoke.js'\nimport type { HttpClient } from '../../_http.js'\nimport { Page, normalizePageToken } from '../../_pagination.js'\nimport { asRecord, invokeWithRetry } from '../../_request.js'\nimport { parseSseStream } from '../../_streaming.js'\nimport { validateId, validatePageSize } from '../../_validation.js'\nimport type {\n AgentRun,\n AgentRunListItem,\n AgentRunCreateRequest,\n ApprovalScope,\n CreateAgentRunRequest,\n ModusRunCreateRequest,\n ResumeRunRequest,\n RunStatus,\n RunTimeframe,\n SkillRunCreateRequest,\n} from '../../types/agent-runs.js'\nimport type { ActiveConversationRun, RunEvent } from '../../types/runs.js'\n\nconst RUNS_MAX_PAGE_SIZE = 100\n\nfunction runsListParams(\n pageSize: number,\n pageToken: string | undefined,\n status?: RunStatus,\n timeframe?: RunTimeframe,\n approvalScope?: ApprovalScope,\n search?: string,\n): Record<string, string | number | boolean | undefined | null> {\n const params: Record<string, string | number | boolean | undefined | null> = { pageSize }\n const token = normalizePageToken(pageToken)\n if (token !== undefined) params.pageToken = token\n if (status !== undefined) params.status = status\n if (timeframe !== undefined) params.timeframe = timeframe\n if (approvalScope !== undefined) params.approvalScope = approvalScope\n if (search !== undefined) params.search = search\n return params\n}\n\nfunction activeRunsParams(\n pageSize: number,\n pageToken: string | undefined,\n): Record<string, string | number> {\n const params: Record<string, string | number> = { pageSize }\n const token = normalizePageToken(pageToken)\n if (token !== undefined) params.pageToken = token\n return params\n}\n\nfunction parseRun(raw: unknown): AgentRun {\n return raw as AgentRun\n}\n\nfunction parseActiveRunsArray(raw: unknown): ActiveConversationRun[] {\n const data = asRecord(raw)\n const runs = data.runs\n if (!Array.isArray(runs)) {\n throw new ModusError(\n `Unexpected active runs response shape: runs must be a list, got ${typeof runs}.`,\n )\n }\n return runs as ActiveConversationRun[]\n}\n\nfunction parseActiveRunsPage(\n raw: unknown,\n fetchPage: (token: string) => Promise<Page<ActiveConversationRun>>,\n): Page<ActiveConversationRun> {\n const data = asRecord(raw)\n const runs = data.runs\n if (!Array.isArray(runs)) {\n throw new ModusError(\n `Unexpected active runs response shape: runs must be a list, got ${typeof runs}.`,\n )\n }\n return new Page(\n runs as ActiveConversationRun[],\n normalizePageToken(\n typeof data.nextPageToken === 'string' ? data.nextPageToken : undefined,\n ),\n fetchPage,\n )\n}\n\nfunction randomRunId(): string {\n return randomUUID()\n}\n\nfunction sessionIdFromBody(body: { sessionId?: string }): string {\n return resolveAgentRunSessionId(body.sessionId)\n}\n\nexport interface AgentRunStream extends AsyncIterable<RunEvent> {\n readonly runId: string\n readonly events: AsyncIterable<RunEvent>\n}\n\nexport function makeAgentRunStream(runId: string, events: AsyncIterable<RunEvent>): AgentRunStream {\n return {\n runId,\n events,\n [Symbol.asyncIterator]() {\n return events[Symbol.asyncIterator]()\n },\n }\n}\n\nexport class WorkflowRunsResource {\n constructor(\n private readonly http: HttpClient,\n private readonly config: ModusConfig,\n ) {}\n\n list(\n workflowId: number | string,\n options: {\n pageSize?: number\n pageToken?: string\n status?: RunStatus\n timeframe?: RunTimeframe\n approvalScope?: ApprovalScope\n search?: string\n } = {},\n ): Promise<Page<AgentRunListItem>> {\n validateId(workflowId, 'workflow_id')\n const pageSize = options.pageSize ?? 25\n validatePageSize(pageSize, RUNS_MAX_PAGE_SIZE)\n return this.listPage(workflowId, pageSize, options.pageToken, options)\n }\n\n private async listPage(\n workflowId: number | string,\n pageSize: number,\n pageToken: string | undefined,\n filters: {\n status?: RunStatus\n timeframe?: RunTimeframe\n approvalScope?: ApprovalScope\n search?: string\n },\n ): Promise<Page<AgentRunListItem>> {\n const data = asRecord(\n await invokeWithRetry(this.config, this.http, 'WorkflowRunsController_list', {\n pathParams: { id: workflowId },\n query: runsListParams(\n pageSize,\n pageToken,\n filters.status,\n filters.timeframe,\n filters.approvalScope,\n filters.search,\n ),\n }),\n )\n const runs = data.runs\n if (!Array.isArray(runs)) {\n throw new ModusError(\n `Unexpected list response shape: runs must be a list, got ${typeof runs}.`,\n )\n }\n return new Page(\n runs as AgentRunListItem[],\n normalizePageToken(\n typeof data.nextPageToken === 'string' ? data.nextPageToken : undefined,\n ),\n (token: string) => this.listPage(workflowId, pageSize, token, filters),\n )\n }\n\n async get(\n workflowId: number | string,\n runId: string,\n options: { temporalRunId?: string } = {},\n ): Promise<AgentRun> {\n validateId(workflowId, 'workflow_id')\n if (!runId.trim()) throw new Error('run_id must be a non-empty string')\n const query =\n options.temporalRunId !== undefined\n ? { temporalRunId: options.temporalRunId }\n : undefined\n const data = await invokeWithRetry(this.config, this.http, 'WorkflowRunsController_get', {\n pathParams: { id: workflowId, runId },\n query,\n })\n return parseRun(data)\n }\n\n create(\n workflowId: number | string,\n body: CreateAgentRunRequest,\n options: { idempotencyKey?: string } = {},\n ): AgentRunStream {\n validateId(workflowId, 'workflow_id')\n return this.createRun('WorkflowRunsController_create', body, { id: workflowId }, options)\n }\n\n createScope(\n scopeId: number | string,\n body: SkillRunCreateRequest,\n options: { idempotencyKey?: string } = {},\n ): AgentRunStream {\n validateId(scopeId, 'scope_id')\n return this.createRun('ScopeRunsController_create', body, { id: scopeId }, options)\n }\n\n createModus(\n body: ModusRunCreateRequest,\n options: { idempotencyKey?: string } = {},\n ): AgentRunStream {\n return this.createRun('ModusRunsController_create', body, {}, options)\n }\n\n resume(\n runId: string,\n body: ResumeRunRequest,\n options: { idempotencyKey?: string } = {},\n ): AgentRunStream {\n validateId(runId, 'run_id')\n return this.createRun('ResumeRunsController_create', body, { runId }, options)\n }\n\n async cancel(runId: string): Promise<void> {\n validateId(runId, 'run_id')\n await invokeWithRetry(this.config, this.http, 'RunLifecycleController_cancel', {\n pathParams: { runId },\n jsonBody: {},\n })\n }\n\n async events(runId: string): Promise<unknown> {\n validateId(runId, 'run_id')\n return invokeWithRetry(this.config, this.http, 'RunLifecycleController_events', {\n pathParams: { runId },\n })\n }\n\n async interrupt(runId: string): Promise<void> {\n validateId(runId, 'run_id')\n await invokeWithRetry(this.config, this.http, 'RunLifecycleController_interrupt', {\n pathParams: { runId },\n jsonBody: {},\n })\n }\n\n async editQueued(runId: string): Promise<void> {\n validateId(runId, 'run_id')\n await invokeWithRetry(this.config, this.http, 'RunLifecycleController_editQueued', {\n pathParams: { runId },\n jsonBody: {},\n })\n }\n\n active(options: {\n pageSize?: number\n pageToken?: string\n } = {}): Promise<Page<ActiveConversationRun>> {\n const pageSize = options.pageSize ?? 50\n validatePageSize(pageSize, RUNS_MAX_PAGE_SIZE)\n return this.activePage(pageSize, options.pageToken)\n }\n\n private async activePage(\n pageSize: number,\n pageToken: string | undefined,\n ): Promise<Page<ActiveConversationRun>> {\n return parseActiveRunsPage(\n await invokeWithRetry(this.config, this.http, 'RunLifecycleController_active', {\n query: activeRunsParams(pageSize, pageToken),\n }),\n (token: string) => this.activePage(pageSize, token),\n )\n }\n\n async activeBySession(sessionIds: readonly string[]): Promise<ActiveConversationRun[]> {\n const uniqueSessionIds = [...new Set(sessionIds.map((id) => id.trim()).filter(Boolean))]\n if (uniqueSessionIds.length > 100) {\n throw new Error('sessionIds must contain at most 100 ids')\n }\n return parseActiveRunsArray(\n await invokeWithRetry(this.config, this.http, 'RunLifecycleController_activeBySession', {\n jsonBody: { sessionIds: uniqueSessionIds },\n }),\n )\n }\n\n stream(runId: string, options: { lastEventId?: string } = {}): AgentRunStream {\n validateId(runId, 'run_id')\n const op = getOperation('RunLifecycleController_stream')\n const path = formatOperationPath('RunLifecycleController_stream', { runId })\n const lines = this.http.streamGet(path, undefined, {\n baseUrl: operationBaseUrl(this.http, op),\n headers: options.lastEventId ? { 'Last-Event-ID': options.lastEventId } : undefined,\n })\n return makeAgentRunStream(runId, this.parseEvents(lines))\n }\n\n private createRun(\n operationId: OperationId,\n body: AgentRunCreateRequest | SkillRunCreateRequest | ModusRunCreateRequest | ResumeRunRequest,\n pathParams: Record<string, unknown>,\n options: { idempotencyKey?: string },\n ): AgentRunStream {\n const runId = options.idempotencyKey?.trim() || body.runId?.trim() || randomRunId()\n const sessionId = sessionIdFromBody(body as { sessionId?: string })\n const op = getOperation(operationId)\n const path = formatOperationPath(operationId, pathParams)\n const lines = this.http.streamPost(path, {\n ...body,\n sessionId,\n streamProtocolVersion: 2,\n }, {\n baseUrl: operationBaseUrl(this.http, op),\n headers: { 'Idempotency-Key': runId },\n })\n return makeAgentRunStream(runId, this.parseEvents(lines))\n }\n\n private async *parseEvents(lines: AsyncIterable<string>): AsyncGenerator<RunEvent> {\n yield* parseSseStream(lines)\n }\n}\n","import { randomUUID } from 'node:crypto'\nimport type { ModusConfig } from '../../_config.js'\nimport {\n formatOperationPath,\n getOperation,\n operationBaseUrl,\n} from '../../_openapi-invoke.js'\nimport type { HttpClient } from '../../_http.js'\nimport { invokeWithRetry } from '../../_request.js'\nimport { parseSseStream } from '../../_streaming.js'\nimport { validateId } from '../../_validation.js'\nimport type { WorkflowActionRequest } from '../../types/agent-runs.js'\nimport type { RunEvent } from '../../types/runs.js'\nimport { makeAgentRunStream, type AgentRunStream } from './runs.js'\n\nfunction randomRunId(): string {\n return randomUUID()\n}\n\nexport class AgentWorkflowActionsResource {\n constructor(\n private readonly http: HttpClient,\n private readonly config: ModusConfig,\n ) {}\n\n execute(\n body: WorkflowActionRequest,\n options: { idempotencyKey?: string } = {},\n ): AgentRunStream {\n const runId = options.idempotencyKey?.trim() || body.runId?.trim() || randomRunId()\n const op = getOperation('WorkflowActionsController_execute')\n const path = formatOperationPath('WorkflowActionsController_execute')\n const lines = this.http.streamPost(path, body, {\n baseUrl: operationBaseUrl(this.http, op),\n headers: { 'Idempotency-Key': runId },\n })\n return makeAgentRunStream(runId, this.parseEvents(lines))\n }\n\n async cancel(runId: string): Promise<void> {\n validateId(runId, 'run_id')\n await invokeWithRetry(this.config, this.http, 'WorkflowActionsController_cancel', {\n pathParams: { runId },\n jsonBody: {},\n })\n }\n\n private async *parseEvents(lines: AsyncIterable<string>): AsyncGenerator<RunEvent> {\n yield* parseSseStream(lines)\n }\n}\n","import { chatBuffered, chatStreamSession, type ChatStream } from '../_chat.js'\nimport type { ModusConfig } from '../_config.js'\nimport type { HttpClient } from '../_http.js'\nimport { aipListParams, buildAipPage, type Page } from '../_pagination.js'\nimport { asRecord, invokeWithRetry } from '../_request.js'\nimport { validateId, validatePageSize } from '../_validation.js'\nimport type { Agent, AgentType } from '../types/agents.js'\nimport type { ChatModel, ChatResult } from '../types/chat.js'\nimport type { VariationView } from '../types/views.js'\nimport { WorkflowRunsResource } from './agents/runs.js'\nimport { AgentWorkflowActionsResource } from './agents/workflow-actions.js'\n\nfunction workflowsListParams(\n pageSize: number,\n pageToken: string | undefined,\n search?: string,\n type?: AgentType,\n view?: VariationView,\n includeVariation?: boolean,\n): Record<string, string | number | boolean | undefined | null> {\n const extra: Record<string, string | number | boolean | undefined | null> = {}\n if (search !== undefined) extra.search = search\n if (type !== undefined) extra.type = type\n if (view !== undefined) extra.view = view\n if (includeVariation !== undefined) extra.includeVariation = includeVariation\n return aipListParams(pageSize, pageToken, extra) as Record<\n string,\n string | number | boolean | undefined | null\n >\n}\n\nfunction parseWorkflow(raw: unknown): Agent {\n return raw as Agent\n}\n\n/** Read / invoke access to Modus workflows (`/api/v1/workflows`). */\nexport class WorkflowsResource {\n readonly runs: WorkflowRunsResource\n readonly workflowActions: AgentWorkflowActionsResource\n\n constructor(\n private readonly http: HttpClient,\n private readonly config: ModusConfig,\n ) {\n this.runs = new WorkflowRunsResource(http, config)\n this.workflowActions = new AgentWorkflowActionsResource(http, config)\n }\n\n list(options: {\n pageSize?: number\n pageToken?: string\n search?: string\n type?: AgentType\n view?: VariationView\n includeVariation?: boolean\n } = {}): Promise<Page<Agent>> {\n const pageSize = options.pageSize ?? 25\n validatePageSize(pageSize)\n return this.listPage(\n pageSize,\n options.pageToken,\n options.search,\n options.type,\n options.view,\n options.includeVariation,\n )\n }\n\n private async listPage(\n pageSize: number,\n pageToken: string | undefined,\n search?: string,\n type?: AgentType,\n view?: VariationView,\n includeVariation?: boolean,\n ): Promise<Page<Agent>> {\n const data = asRecord(\n await invokeWithRetry(this.config, this.http, 'WorkflowsController_list', {\n query: workflowsListParams(\n pageSize,\n pageToken,\n search,\n type,\n view,\n includeVariation,\n ),\n }),\n )\n // Envelope key is the server DTO property name — unchanged by the rename\n // (only paths/opIds/tags moved to the workflows vocab).\n return buildAipPage(data, 'agents', parseWorkflow, (token) =>\n this.listPage(pageSize, token, search, type, view, includeVariation),\n )\n }\n\n async get(\n workflowId: number | string,\n options: { view?: VariationView; includeVariation?: boolean } = {},\n ): Promise<Agent> {\n validateId(workflowId, 'workflow_id')\n const query: Record<string, string | boolean> = {}\n if (options.view !== undefined) query.view = options.view\n if (options.includeVariation !== undefined) {\n query.includeVariation = options.includeVariation\n }\n const data = await invokeWithRetry(this.config, this.http, 'WorkflowsController_get', {\n pathParams: { id: workflowId },\n query: Object.keys(query).length > 0 ? query : undefined,\n })\n return parseWorkflow(data)\n }\n\n chat(\n workflowId: number | string,\n message: string,\n options: { model: ChatModel; threadId?: string },\n ): Promise<ChatResult> {\n return chatBuffered(this.http, 'workflows', workflowId, message, options)\n }\n\n chatStream(\n workflowId: number | string,\n message: string,\n options: { model: ChatModel; threadId?: string; version?: string },\n ): ChatStream {\n return chatStreamSession(this.http, this.config, 'workflows', workflowId, message, options)\n }\n}\n","import type { ModusConfig } from '../_config.js'\nimport type { HttpClient } from '../_http.js'\nimport { aipListParams, buildAipPage, type Page } from '../_pagination.js'\nimport { asRecord, invokeWithRetry } from '../_request.js'\nimport { validatePageSize } from '../_validation.js'\nimport type { Connection } from '../types/connections.js'\n\nfunction connectionsListParams(\n pageSize: number,\n pageToken: string | undefined,\n type?: string,\n): Record<string, string | number | boolean | undefined | null> {\n const extra: Record<string, string | number | boolean | undefined | null> = {}\n if (type !== undefined) extra.type = type\n return aipListParams(pageSize, pageToken, extra) as Record<\n string,\n string | number | boolean | undefined | null\n >\n}\n\nfunction parseConnection(raw: unknown): Connection {\n return raw as Connection\n}\n\nexport class ConnectionsResource {\n constructor(\n private readonly http: HttpClient,\n private readonly config: ModusConfig,\n ) {}\n\n list(options: {\n pageSize?: number\n pageToken?: string\n type?: string\n } = {}): Promise<Page<Connection>> {\n const pageSize = options.pageSize ?? 25\n validatePageSize(pageSize)\n return this.listPage(pageSize, options.pageToken, options.type)\n }\n\n private async listPage(\n pageSize: number,\n pageToken: string | undefined,\n type?: string,\n ): Promise<Page<Connection>> {\n const data = asRecord(\n await invokeWithRetry(this.config, this.http, 'ConnectionsController_list', {\n query: connectionsListParams(pageSize, pageToken, type),\n }),\n )\n return buildAipPage(data, 'connections', parseConnection, (token) =>\n this.listPage(pageSize, token, type),\n )\n }\n\n async find(options: {\n name: string\n type?: string\n pageSize?: number\n }): Promise<Connection | undefined> {\n const pageSize = options.pageSize ?? 25\n validatePageSize(pageSize)\n const target = options.name.trim().toLowerCase()\n let token: string | undefined\n do {\n const page = await this.listPage(pageSize, token, options.type)\n const match = page.items.find((c) => c.name?.toLowerCase() === target)\n if (match) return match\n if (!page.hasNextPage()) break\n token = page.nextPageToken\n } while (token !== undefined)\n return undefined\n }\n}\n","import type { ModusConfig } from '../../_config.js'\nimport { NotFoundError } from '../../_exceptions.js'\nimport type { HttpClient } from '../../_http.js'\nimport { aipListParams, buildAipPage, type Page } from '../../_pagination.js'\nimport { asRecord, invokeWithRetry, omitUndefined } from '../../_request.js'\nimport { DEFAULT_MAX_PAGE_SIZE, validatePageSize } from '../../_validation.js'\nimport type { ContextItem, ContextItemLookupRow } from '../../types/context.js'\nimport type { ContextValueRow } from '../../types/context-values.js'\nimport type { ContentProjection, JsonObjectInput } from '../../types/json-blob.js'\n\nfunction contextListParams(\n pageSize: number,\n pageToken: string | undefined,\n contextType?: string,\n): Record<string, string | number | boolean | readonly string[] | undefined | null> {\n const extra: Record<string, string | readonly string[]> = {}\n if (contextType !== undefined) extra.contextTypes = [contextType]\n return aipListParams(pageSize, pageToken, extra) as Record<\n string,\n string | number | boolean | readonly string[] | undefined | null\n >\n}\n\nfunction parseContextItem(raw: unknown): ContextItem {\n return raw as ContextItem\n}\n\nfunction parseContextValueRow(raw: unknown): ContextValueRow {\n return raw as ContextValueRow\n}\n\nfunction parseLookupResponse(raw: Record<string, unknown>): ContextItemLookupRow | undefined {\n const item = raw.item\n if (item === null || item === undefined) return undefined\n return item as ContextItemLookupRow\n}\n\nexport class ContextItemsResource {\n constructor(\n private readonly http: HttpClient,\n private readonly config: ModusConfig,\n ) {}\n\n list(options: {\n pageSize?: number\n pageToken?: string\n contextType?: string\n } = {}): Promise<Page<ContextItem>> {\n const pageSize = options.pageSize ?? 25\n validatePageSize(pageSize)\n return this.listPage(pageSize, options.pageToken, options.contextType)\n }\n\n private async listPage(\n pageSize: number,\n pageToken: string | undefined,\n contextType?: string,\n ): Promise<Page<ContextItem>> {\n const data = asRecord(\n await invokeWithRetry(this.config, this.http, 'ContextItemsController_list', {\n query: contextListParams(pageSize, pageToken, contextType),\n }),\n )\n return buildAipPage(data, 'contextItems', parseContextItem, (token) =>\n this.listPage(pageSize, token, contextType),\n )\n }\n\n async get(uid: string): Promise<ContextItem> {\n const data = await invokeWithRetry(this.config, this.http, 'ContextItemsController_get', {\n pathParams: { uid },\n })\n return parseContextItem(data)\n }\n\n async lookup(options: {\n contextType: string\n dataPath: string[]\n contentProjection?: JsonObjectInput | ContentProjection\n }): Promise<ContextItemLookupRow | undefined> {\n const body = omitUndefined({\n contextType: options.contextType,\n dataPath: options.dataPath,\n contentProjection: options.contentProjection,\n })\n try {\n const raw = asRecord(\n await invokeWithRetry(this.config, this.http, 'ContextItemsController_lookup', {\n jsonBody: body,\n }),\n )\n return parseLookupResponse(raw)\n } catch (error) {\n if (error instanceof NotFoundError) return undefined\n throw error\n }\n }\n\n listValues(\n uid: string,\n contextType: string,\n contentKeyPath: string,\n options: { pageSize?: number; pageToken?: string } = {},\n ): Promise<Page<ContextValueRow>> {\n const pageSize = options.pageSize ?? 25\n validatePageSize(pageSize, DEFAULT_MAX_PAGE_SIZE)\n return this.listValuesPage(uid, contextType, contentKeyPath, pageSize, options.pageToken)\n }\n\n listValuesFor(\n item: ContextItem,\n contentKeyPath: string,\n options: { pageSize?: number; pageToken?: string } = {},\n ): Promise<Page<ContextValueRow>> {\n return this.listValues(item.uid, item.contextType, contentKeyPath, options)\n }\n\n private async listValuesPage(\n uid: string,\n contextType: string,\n contentKeyPath: string,\n pageSize: number,\n pageToken: string | undefined,\n ): Promise<Page<ContextValueRow>> {\n const data = asRecord(\n await invokeWithRetry(this.config, this.http, 'ContextItemsController_listValues', {\n pathParams: { uid },\n query: aipListParams(pageSize, pageToken, {\n contextType,\n contentKeyPath,\n }) as Record<string, string | number | boolean | undefined | null>,\n }),\n )\n return buildAipPage(data, 'values', parseContextValueRow, (token) =>\n this.listValuesPage(uid, contextType, contentKeyPath, pageSize, token),\n )\n }\n}\n","import type { ModusConfig } from '../../_config.js'\nimport type { HttpClient } from '../../_http.js'\nimport { CustomContextItemsResource } from './custom-items.js'\nimport { ContextItemsResource } from './items.js'\n\n/** Read access to the Modus knowledge base. */\nexport class ContextResource {\n readonly items: ContextItemsResource\n readonly customItems: CustomContextItemsResource\n\n constructor(http: HttpClient, config: ModusConfig) {\n this.items = new ContextItemsResource(http, config)\n this.customItems = new CustomContextItemsResource(http, config)\n }\n}\n","import type { ModusConfig } from '../../_config.js'\nimport type { HttpClient } from '../../_http.js'\nimport { aipListParams, buildAipPage, type Page } from '../../_pagination.js'\nimport { asRecord, invokeWithRetry } from '../../_request.js'\nimport { validateId, validatePageSize } from '../../_validation.js'\nimport type {\n Conversation,\n ConversationKind,\n ConversationListItem,\n} from '../../types/conversations.js'\n\nconst ALLOWED_KINDS = new Set<ConversationKind>(['all', 'modus', 'skills'])\n\nfunction listParams(\n pageSize: number,\n pageToken: string | undefined,\n kind?: ConversationKind,\n): Record<string, string | number | boolean | undefined | null> {\n if (kind !== undefined && !ALLOWED_KINDS.has(kind)) {\n throw new Error(\n `kind must be one of ${[...ALLOWED_KINDS].sort().join(', ')}, got ${JSON.stringify(kind)}`,\n )\n }\n const extra: Record<string, string> = {}\n if (kind !== undefined) extra.kind = kind\n return aipListParams(pageSize, pageToken, extra) as Record<\n string,\n string | number | boolean | undefined | null\n >\n}\n\nfunction parseListItem(raw: unknown): ConversationListItem {\n return raw as ConversationListItem\n}\n\nfunction parseConversation(raw: unknown): Conversation {\n return raw as Conversation\n}\n\nexport class ModusConversationsResource {\n constructor(\n private readonly http: HttpClient,\n private readonly config: ModusConfig,\n ) {}\n\n list(options: {\n pageSize?: number\n pageToken?: string\n kind?: ConversationKind\n } = {}): Promise<Page<ConversationListItem>> {\n const pageSize = options.pageSize ?? 25\n validatePageSize(pageSize)\n return this.listPage(pageSize, options.pageToken, options.kind)\n }\n\n private async listPage(\n pageSize: number,\n pageToken: string | undefined,\n kind?: ConversationKind,\n ): Promise<Page<ConversationListItem>> {\n const data = asRecord(\n await invokeWithRetry(this.config, this.http, 'ModusConversationsController_list', {\n query: listParams(pageSize, pageToken, kind),\n }),\n )\n return buildAipPage(data, 'conversations', parseListItem, (token) =>\n this.listPage(pageSize, token, kind),\n )\n }\n\n async get(threadId: string): Promise<Conversation> {\n validateId(threadId, 'thread_id')\n const data = await invokeWithRetry(this.config, this.http, 'ModusConversationsController_get', {\n pathParams: { threadId },\n })\n return parseConversation(data)\n }\n}\n","import { modusChatBuffered, modusChatStreamSession, type ChatStream } from '../../_chat.js'\nimport type { ModusConfig } from '../../_config.js'\nimport type { HttpClient } from '../../_http.js'\nimport { invokeWithRetry, omitUndefined } from '../../_request.js'\nimport type { ChatModel, ChatResult } from '../../types/chat.js'\nimport type { ModusContextComposition } from '../../types/context-compose.js'\n\nimport { ModusConversationsResource } from './conversations.js'\n\n/** Org-wide Modus assistant. */\nexport class ModusResource {\n readonly conversations: ModusConversationsResource\n\n constructor(\n private readonly http: HttpClient,\n private readonly config: ModusConfig,\n ) {\n this.conversations = new ModusConversationsResource(http, config)\n }\n\n async getContext(\n message: string,\n options: { limit?: number } = {},\n ): Promise<ModusContextComposition> {\n const data = await invokeWithRetry(this.config, this.http, 'ModusContextController_compose', {\n jsonBody: omitUndefined({ message, limit: options.limit }),\n })\n return data as ModusContextComposition\n }\n\n chat(message: string, options: { model: ChatModel; threadId?: string }): Promise<ChatResult> {\n return modusChatBuffered(this.http, message, options)\n }\n\n chatStream(message: string, options: { model: ChatModel; threadId?: string }): ChatStream {\n return modusChatStreamSession(this.http, this.config, message, options)\n }\n}\n","import { chatBuffered, chatStreamSession, type ChatStream } from '../_chat.js'\nimport type { ModusConfig } from '../_config.js'\nimport type { HttpClient } from '../_http.js'\nimport { aipListParams, buildAipPage, type Page } from '../_pagination.js'\nimport { asRecord, invokeWithRetry, omitUndefined } from '../_request.js'\nimport { validateId, validatePageSize } from '../_validation.js'\nimport type { ChatModel, ChatResult } from '../types/chat.js'\nimport type { SkillContextComposition } from '../types/context-compose.js'\nimport type { Skill } from '../types/skills.js'\nimport type { VariationView } from '../types/views.js'\nimport { ScopeConversationsResource } from './skills/conversations.js'\n\nfunction scopesListParams(\n pageSize: number,\n pageToken: string | undefined,\n search?: string,\n view?: VariationView,\n managerId?: number,\n): Record<string, string | number | boolean | undefined | null> {\n const extra: Record<string, string | number | boolean | undefined | null> = {}\n if (search !== undefined) extra.search = search\n if (view !== undefined) extra.view = view\n if (managerId !== undefined) extra.managerId = managerId\n return aipListParams(pageSize, pageToken, extra) as Record<\n string,\n string | number | boolean | undefined | null\n >\n}\n\nfunction parseScope(raw: unknown): Skill {\n return raw as Skill\n}\n\n/** Read / invoke access to Modus scopes (`/api/v1/scopes`). */\nexport class ScopesResource {\n constructor(\n private readonly http: HttpClient,\n private readonly config: ModusConfig,\n ) {}\n\n conversations(scopeId: number | string): ScopeConversationsResource {\n return new ScopeConversationsResource(this.http, this.config, scopeId)\n }\n\n list(options: {\n pageSize?: number\n pageToken?: string\n search?: string\n view?: VariationView\n managerId?: number\n } = {}): Promise<Page<Skill>> {\n const pageSize = options.pageSize ?? 25\n validatePageSize(pageSize)\n return this.listPage(\n pageSize,\n options.pageToken,\n options.search,\n options.view,\n options.managerId,\n )\n }\n\n private async listPage(\n pageSize: number,\n pageToken: string | undefined,\n search?: string,\n view?: VariationView,\n managerId?: number,\n ): Promise<Page<Skill>> {\n const data = asRecord(\n await invokeWithRetry(this.config, this.http, 'ScopesController_list', {\n query: scopesListParams(pageSize, pageToken, search, view, managerId),\n }),\n )\n // The list response envelope key is the server DTO property name, which\n // this rename intentionally left as `skills` (only paths/opIds/tags moved\n // to the scopes vocab — response body schemas are unchanged).\n return buildAipPage(data, 'skills', parseScope, (token) =>\n this.listPage(pageSize, token, search, view, managerId),\n )\n }\n\n async get(\n scopeId: number | string,\n options: { view?: VariationView } = {},\n ): Promise<Skill> {\n validateId(scopeId, 'scope_id')\n const query = options.view !== undefined ? { view: options.view } : undefined\n const data = await invokeWithRetry(this.config, this.http, 'ScopesController_get', {\n pathParams: { id: scopeId },\n query,\n })\n return parseScope(data)\n }\n\n async getContext(\n scopeId: number | string,\n message: string,\n options: { limit?: number } = {},\n ): Promise<SkillContextComposition> {\n validateId(scopeId, 'scope_id')\n const data = await invokeWithRetry(this.config, this.http, 'ScopeContextController_compose', {\n pathParams: { id: scopeId },\n jsonBody: omitUndefined({ message, limit: options.limit }),\n })\n return data as SkillContextComposition\n }\n\n chat(\n scopeId: number | string,\n message: string,\n options: { model: ChatModel; threadId?: string },\n ): Promise<ChatResult> {\n return chatBuffered(this.http, 'scopes', scopeId, message, options)\n }\n\n chatStream(\n scopeId: number | string,\n message: string,\n options: { model: ChatModel; threadId?: string; version?: string },\n ): ChatStream {\n return chatStreamSession(this.http, this.config, 'scopes', scopeId, message, options)\n }\n}\n","import type { components } from '../_generated/v1.js'\n\nexport type SuggestionQuestion = components['schemas']['SuggestionQuestionDto']\nexport type SuggestionEventType = components['schemas']['SuggestionEventType']\nexport type SuggestionEventSource = components['schemas']['SuggestionEventSource']\n\n/** Wire format (snake_case) plus camelCase aliases for DX. */\nexport type RecordSuggestionEventRequest = components['schemas']['RecordSuggestionEventDto'] & {\n eventType?: components['schemas']['SuggestionEventType']\n skillId?: number\n threadId?: string\n}\n\n/** Normalize to the OpenAPI allowlist keys (`event_type`, not `eventType`). */\nexport function normalizeRecordSuggestionEvent(\n event: RecordSuggestionEventRequest,\n): components['schemas']['RecordSuggestionEventDto'] {\n const eventType = event.event_type ?? event.eventType\n if (eventType === undefined) {\n throw new Error('recordEvent requires event_type (or eventType)')\n }\n const body: components['schemas']['RecordSuggestionEventDto'] = {\n event_type: eventType,\n source: event.source,\n }\n const skillId = event.skill_id ?? event.skillId\n if (skillId !== undefined) body.skill_id = skillId\n const threadId = event.thread_id ?? event.threadId\n if (threadId !== undefined) body.thread_id = threadId\n if (event.metadata !== undefined) body.metadata = event.metadata\n return body\n}\n","import type { ModusConfig } from '../_config.js'\nimport type { HttpClient } from '../_http.js'\nimport { buildAipPage, type Page } from '../_pagination.js'\nimport { asRecord, invokeWithRetry } from '../_request.js'\nimport { validateId, validatePageSize } from '../_validation.js'\nimport {\n normalizeRecordSuggestionEvent,\n type RecordSuggestionEventRequest,\n type SuggestionQuestion,\n} from '../types/suggestions.js'\n\nconst DEFAULT_SUGGESTIONS_PAGE_SIZE = 5\nconst MAX_SUGGESTIONS_PAGE_SIZE = 12\n\nfunction parseSuggestion(raw: unknown): SuggestionQuestion {\n return raw as SuggestionQuestion\n}\n\nfunction suggestionListParams(options: {\n pageSize: number\n pageToken?: string\n skillId?: number\n skillIds?: readonly number[]\n}): Record<string, string | number | undefined> {\n return {\n pageSize: options.pageSize,\n pageToken: options.pageToken,\n skill_id: options.skillId,\n skill_ids: options.skillIds?.join(','),\n }\n}\n\nexport class SuggestionsResource {\n constructor(\n private readonly http: HttpClient,\n private readonly config: ModusConfig,\n ) {}\n\n list(options: {\n pageSize?: number\n pageToken?: string\n skillId?: number\n skillIds?: readonly number[]\n } = {}): Promise<Page<SuggestionQuestion>> {\n const pageSize = options.pageSize ?? DEFAULT_SUGGESTIONS_PAGE_SIZE\n validatePageSize(pageSize, MAX_SUGGESTIONS_PAGE_SIZE)\n return this.listPage(pageSize, options.pageToken, options.skillId, options.skillIds)\n }\n\n private async listPage(\n pageSize: number,\n pageToken: string | undefined,\n skillId: number | undefined,\n skillIds: readonly number[] | undefined,\n ): Promise<Page<SuggestionQuestion>> {\n const data = asRecord(\n await invokeWithRetry(this.config, this.http, 'SuggestionsController_listApproved', {\n query: suggestionListParams({ pageSize, pageToken, skillId, skillIds }),\n }),\n )\n return buildAipPage(data, 'suggestions', parseSuggestion, (token) =>\n this.listPage(pageSize, token, skillId, skillIds),\n )\n }\n\n async recordEvent(id: string, event: RecordSuggestionEventRequest): Promise<void> {\n validateId(id, 'id')\n await invokeWithRetry(this.config, this.http, 'SuggestionsController_recordEvent', {\n pathParams: { id },\n jsonBody: normalizeRecordSuggestionEvent(event),\n })\n }\n}\n","/**\n * @getmodus/sdk — official TypeScript client for Modus.\n */\n\nexport type { components, paths, operations } from './_generated/v1.js'\nexport type { OperationId, OperationSpec } from './_generated/operations.js'\nexport { OPERATIONS } from './_generated/operations.js'\n\nexport {\n APIConnectionError,\n AuthenticationError,\n ConflictError,\n InternalServerError,\n ModusError,\n NotFoundError,\n PermissionDeniedError,\n RateLimitError,\n RunCancelledError,\n StreamTimeoutError,\n UnprocessableError,\n ValidationError,\n} from './_exceptions.js'\n\nexport { ChatStream } from './_chat.js'\nexport { Page } from './_pagination.js'\nexport type {\n AssistantContentResetEvent,\n CancelledEvent,\n DoneEvent,\n ErrorEvent,\n RunEvent,\n StreamTimeoutEvent,\n TokenEvent,\n} from './types/runs.js'\nexport type { ChatModel, ChatRequest, ChatResult } from './types/chat.js'\nexport type { ModusOptions } from './_config.js'\nexport type { Skill, SkillStatus, SkillVariation } from './types/skills.js'\nexport type { Agent } from './types/agents.js'\nexport { AgentType } from './types/agents.js'\nexport type {\n AgentRun,\n AgentRunCreateRequest,\n AgentRunListItem,\n ApprovalScope,\n CancelRunRequest,\n CreateAgentRunRequest,\n EditQueuedRunRequest,\n InterruptRunRequest,\n ModusRunCreateRequest,\n ResumeRunRequest,\n RunStatus,\n RunTimeframe,\n SkillRunCreateRequest,\n WorkflowActionRequest,\n} from './types/agent-runs.js'\nexport type { AgentRunStream } from './resources/agents/runs.js'\nexport type {\n Conversation,\n ConversationKind,\n ConversationListItem,\n Message,\n} from './types/conversations.js'\nexport { conversationSkillId } from './types/conversations.js'\nexport type { Connection } from './types/connections.js'\nexport type { VariationView } from './types/views.js'\nexport type {\n ContextItem,\n ContextItemLookupRow,\n ContextType,\n} from './types/context.js'\nexport type { ContextValueRow } from './types/context-values.js'\nexport type {\n ComposeSkillContextRequest,\n ModusContextComposition,\n ModusContextRequest,\n SkillContextComposition,\n} from './types/context-compose.js'\nexport type {\n RecordSuggestionEventRequest,\n SuggestionEventSource,\n SuggestionEventType,\n SuggestionQuestion,\n} from './types/suggestions.js'\n\nimport { ModusClientBase } from './_client-base.js'\nimport { WorkflowsResource } from './resources/agents.js'\nimport { ConnectionsResource } from './resources/connections.js'\nimport { ContextResource } from './resources/context/context.js'\nimport { ModusResource } from './resources/modus/modus.js'\nimport { ScopesResource } from './resources/skills.js'\nimport { SuggestionsResource } from './resources/suggestions.js'\n\n/** Read / invoke client for Modus scopes, workflows, connections, and more. */\nexport class Modus extends ModusClientBase {\n readonly scopes: ScopesResource\n readonly modus: ModusResource\n readonly workflows: WorkflowsResource\n readonly context: ContextResource\n readonly connections: ConnectionsResource\n readonly suggestions: SuggestionsResource\n\n constructor(options: import('./_config.js').ModusOptions = {}) {\n super(options)\n this.scopes = new ScopesResource(this.http, this.config)\n this.modus = new ModusResource(this.http, this.config)\n this.workflows = new WorkflowsResource(this.http, this.config)\n this.context = new ContextResource(this.http, this.config)\n this.connections = new ConnectionsResource(this.http, this.config)\n this.suggestions = new SuggestionsResource(this.http, this.config)\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,SAAS,kBAAkB;AAGpB,SAAS,yBAAyB,WAAmC;AAC1E,MAAI,OAAO,cAAc,YAAY,UAAU,KAAK,EAAG,QAAO,UAAU,KAAK;AAC7E,SAAO,WAAW;AACpB;;;ACIA,IAAM,mBAAmB,oBAAI,IAAI;AAAA,EAC/B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,CAAC;AAED,SAAS,UAAU,MAAmD;AACpE,MAAI,CAAC,KAAK,WAAW,OAAO,EAAG,QAAO;AACtC,QAAM,MAAM,KAAK,MAAM,CAAC,EAAE,UAAU;AACpC,MAAI,CAAC,OAAO,QAAQ,SAAU,QAAO;AACrC,MAAI;AACF,UAAM,OAAO,KAAK,MAAM,GAAG;AAC3B,QAAI,QAAQ,OAAO,SAAS,YAAY,CAAC,MAAM,QAAQ,IAAI,GAAG;AAC5D,aAAO;AAAA,IACT;AAAA,EACF,QAAQ;AACN,WAAO;AAAA,EACT;AACA,SAAO;AACT;AAEA,SAAS,gBAAmB,OAAkE;AAC5F,SAAO,OAAO,iBAAiB,OAAO,KAAK;AAC7C;AAEA,UAAU,UAAU,MAAoD;AACtE,QAAM,YAAY,OAAO,KAAK,SAAS,WAAW,KAAK,OAAO;AAE9D,MAAI,cAAc,SAAS;AACzB,UAAM,QAAoB;AAAA,MACxB,MAAM;AAAA,MACN,SAAS,OAAO,KAAK,YAAY,WAAW,KAAK,UAAU;AAAA,IAC7D;AACA,UAAM;AAAA,EACR,WAAW,cAAc,QAAQ;AAC/B,UAAM,QAAmB;AAAA,MACvB,MAAM;AAAA,MACN,OAAO,OAAO,KAAK,UAAU,WAAW,KAAK,QAAQ;AAAA,MACrD,UAAU,OAAO,KAAK,aAAa,WAAW,KAAK,WAAW;AAAA,IAChE;AACA,UAAM;AAAA,EACR,WAAW,cAAc,SAAS;AAChC,UAAM,MACJ,KAAK,SAAS,KAAK,WAAW,KAAK,WAAW;AAChD,UAAM,QAAoB,EAAE,MAAM,SAAS,SAAS,OAAO,GAAG,EAAE;AAChE,UAAM;AAAA,EACR,WAAW,cAAc,aAAa;AACpC,UAAM,QAAwB,EAAE,MAAM,YAAY;AAClD,UAAM;AAAA,EACR,WAAW,cAAc,kBAAkB;AACzC,UAAM,QAA4B,EAAE,MAAM,iBAAiB;AAC3D,UAAM;AAAA,EACR,WAAW,cAAc,2BAA2B;AAClD,QAAI,OAAO,KAAK,YAAY,SAAU;AACtC,UAAM,QAAoC;AAAA,MACxC,MAAM;AAAA,MACN,SAAS,KAAK;AAAA,MACd,GAAI,OAAO,KAAK,mBAAmB,WAC/B,EAAE,gBAAgB,KAAK,eAAe,IACtC,CAAC;AAAA,MACL,SAAS,OAAO,KAAK,YAAY,WAAW,KAAK,UAAU;AAAA,MAC3D,QAAQ;AAAA,IACV;AACA,UAAM;AAAA,EACR,WAAW,CAAC,iBAAiB,IAAI,SAAS,GAAG;AAE3C;AAAA,EACF;AACF;AAEA,UAAU,kBAAkB,OAA8C;AACxE,aAAW,QAAQ,OAAO;AACxB,UAAM,OAAO,UAAU,IAAI;AAC3B,QAAI,SAAS,OAAW,QAAO,UAAU,IAAI;AAAA,EAC/C;AACF;AAEA,gBAAgB,mBAAmB,OAAwD;AACzF,mBAAiB,QAAQ,OAAO;AAC9B,UAAM,OAAO,UAAU,IAAI;AAC3B,QAAI,SAAS,OAAW,QAAO,UAAU,IAAI;AAAA,EAC/C;AACF;AAKO,SAAS,eACd,OACgD;AAChD,SAAO,gBAAgB,KAAK,IAAI,mBAAmB,KAAK,IAAI,kBAAkB,KAAK;AACrF;;;AC9FA,SAAS,kBAAkB,UAAuC;AAChE,MAAI,aAAa,OAAW,QAAO;AACnC,MAAI,CAAC,SAAS,KAAK,EAAG,QAAO;AAC7B,SAAO;AACT;AAEA,SAAS,iBAAiB,UAA2B;AACnD,SAAO,yBAAyB,kBAAkB,QAAQ,CAAC;AAC7D;AAEA,SAAS,SACP,UACA,YACA,SACQ;AACR,QAAM,SAAS,mBAAmB,OAAO,UAAU,CAAC;AACpD,QAAM,MAAM,kBAAkB,QAAQ,QAAQ;AAC9C,MAAI,QAAQ,QAAW;AACrB,UAAM,UAAU,mBAAmB,GAAG;AACtC,WAAO,WAAW,QAAQ,IAAI,MAAM,kBAAkB,OAAO;AAAA,EAC/D;AACA,SAAO,WAAW,QAAQ,IAAI,MAAM;AACtC;AAEA,SAAS,cAAc,SAAwC;AAC7D,QAAM,MAAM,kBAAkB,QAAQ,QAAQ;AAC9C,MAAI,QAAQ,QAAW;AACrB,eAAW,KAAK,WAAW;AAC3B,WAAO,+BAA+B,mBAAmB,GAAG,CAAC;AAAA,EAC/D;AACA,SAAO;AACT;AAEA,SAAS,kBACP,UACA,YACQ;AACR,MAAI,aAAa,QAAS,QAAO;AACjC,QAAM,SAAS,mBAAmB,OAAO,UAAU,CAAC;AACpD,SAAO,aAAa,QAAQ,IAAI,MAAM;AACxC;AAEA,SAAS,SAAS,SAAiB,OAA0C;AAC3E,SAAO,EAAE,SAAS,MAAM;AAC1B;AAEA,SAAS,cACP,SACA,OACA,SACyB;AACzB,QAAM,OAAgC;AAAA,IACpC;AAAA,IACA,QAAQ,EAAE,MAAM;AAAA,IAChB,WAAW,QAAQ;AAAA,EACrB;AACA,MAAI,QAAQ,mBAAmB,QAAW;AACxC,SAAK,iBAAiB,QAAQ;AAAA,EAChC;AACA,MAAI,QAAQ,YAAY,QAAW;AACjC,SAAK,UAAU,QAAQ;AAAA,EACzB;AACA,SAAO;AACT;AAEA,SAAS,cAAc,OAA2B;AAChD,MAAI,MAAM,SAAS,QAAS,OAAM,IAAI,WAAW,MAAM,OAAO;AAC9D,MAAI,MAAM,SAAS,YAAa,OAAM,IAAI,kBAAkB;AAC5D,MAAI,MAAM,SAAS,iBAAkB,OAAM,IAAI,mBAAmB;AAClE,SAAO;AACT;AAEO,IAAM,aAAN,MAAiB;AAAA,EAItB,YACmB,MACA,MACA,MACA,SACjB;AAJiB;AACA;AACA;AACA;AANnB,SAAiB,YAAsB,CAAC;AAAA,EAOrC;AAAA,EAEH,OAAO,aAAqC;AAC1C,qBAAiB,SAAS,KAAK,OAAO,KAAK,GAAG;AAC5C,UAAI,MAAM,SAAS,QAAS,OAAM,MAAM;AAAA,IAC1C;AAAA,EACF;AAAA,EAEA,OAAO,cAAwC;AAC7C,WAAO,KAAK,OAAO,IAAI;AAAA,EACzB;AAAA,EAEA,OAAe,OAAO,eAAkD;AACtE,UAAM,OAAO,gBACT,EAAE,GAAG,KAAK,MAAM,uBAAuB,EAAE,IACzC,KAAK;AACT,qBAAiB,QAAQ,KAAK,KAAK,WAAW,KAAK,MAAM,MAAM;AAAA,MAC7D,SAAS,KAAK;AAAA,IAChB,CAAC,GAAG;AACF,iBAAW,SAAS,eAAe,CAAC,IAAI,CAAC,GAAG;AAC1C,cAAM,aAAa,cAAc,KAAK;AACtC,YAAI,WAAW,SAAS,QAAS,MAAK,UAAU,KAAK,WAAW,OAAO;AACvE,YAAI,WAAW,SAAS,2BAA2B;AACjD,eAAK,UAAU,SAAS;AACxB,eAAK,UAAU,KAAK,WAAW,OAAO;AAAA,QACxC;AACA,YAAI,WAAW,SAAS,QAAQ;AAC9B,eAAK,QAAQ;AAAA,YACX,SAAS,KAAK,UAAU,KAAK,EAAE;AAAA,YAC/B,UAAU,WAAW;AAAA,YACrB,OAAO,WAAW;AAAA,UACpB;AACA,gBAAM;AACN;AAAA,QACF;AACA,cAAM;AAAA,MACR;AAAA,IACF;AAAA,EACF;AAAA,EAEA,iBAA6B;AAC3B,QAAI,KAAK,UAAU,QAAW;AAC5B,YAAM,IAAI;AAAA,QACR;AAAA,MACF;AAAA,IACF;AACA,WAAO,KAAK;AAAA,EACd;AACF;AAEA,eAAsB,aACpB,MACA,UACA,YACA,SACA,SACqB;AACrB,aAAW,YAAY,GAAG,QAAQ,KAAK;AACvC,oBAAkB,QAAQ,KAAK;AAC/B,QAAM,OAAO,SAAS,UAAU,YAAY;AAAA,IAC1C,UAAU,QAAQ;AAAA,EACpB,CAAC;AACD,QAAM,OAAO,MAAM,KAAK,KAAK,MAAM,SAAS,SAAS,QAAQ,KAAK,CAAC;AACnE,SAAO;AACT;AAEO,SAAS,kBACd,MACA,QACA,UACA,YACA,SACA,SACY;AACZ,aAAW,YAAY,GAAG,QAAQ,KAAK;AACvC,oBAAkB,QAAQ,KAAK;AAC/B,QAAM,OAAO,kBAAkB,UAAU,UAAU;AACnD,SAAO,IAAI;AAAA,IACT;AAAA,IACA;AAAA,IACA,cAAc,SAAS,QAAQ,OAAO;AAAA,MACpC,WAAW,iBAAiB,QAAQ,QAAQ;AAAA,MAC5C,gBAAgB,OAAO;AAAA,MACvB,SAAS,QAAQ;AAAA,IACnB,CAAC;AAAA,IACD,OAAO;AAAA,EACT;AACF;AAEA,eAAsB,kBACpB,MACA,SACA,SACqB;AACrB,oBAAkB,QAAQ,KAAK;AAC/B,QAAM,OAAO,cAAc,EAAE,UAAU,QAAQ,SAAS,CAAC;AACzD,QAAM,OAAO,MAAM,KAAK,KAAK,MAAM,SAAS,SAAS,QAAQ,KAAK,CAAC;AACnE,SAAO;AACT;AAEO,SAAS,uBACd,MACA,QACA,SACA,SACY;AACZ,oBAAkB,QAAQ,KAAK;AAC/B,SAAO,IAAI;AAAA,IACT;AAAA,IACA,kBAAkB,OAAO;AAAA,IACzB,cAAc,SAAS,QAAQ,OAAO;AAAA,MACpC,WAAW,iBAAiB,QAAQ,QAAQ;AAAA,MAC5C,gBAAgB,OAAO;AAAA,IACzB,CAAC;AAAA,IACD,OAAO;AAAA,EACT;AACF;;;AC7MO,IAAM,YAAY;AAAA,EACvB,MAAM;AAAA,EACN,UAAU;AACZ;;;ACAO,SAAS,oBAAoB,MAAgD;AAClF,SAAO,KAAK,YAAY,IAAI,SAAY,KAAK;AAC/C;;;ACVA,SAAS,cAAAA,mBAAkB;AA6B3B,IAAM,qBAAqB;AAE3B,SAAS,eACP,UACA,WACA,QACA,WACA,eACA,QAC8D;AAC9D,QAAM,SAAuE,EAAE,SAAS;AACxF,QAAM,QAAQ,mBAAmB,SAAS;AAC1C,MAAI,UAAU,OAAW,QAAO,YAAY;AAC5C,MAAI,WAAW,OAAW,QAAO,SAAS;AAC1C,MAAI,cAAc,OAAW,QAAO,YAAY;AAChD,MAAI,kBAAkB,OAAW,QAAO,gBAAgB;AACxD,MAAI,WAAW,OAAW,QAAO,SAAS;AAC1C,SAAO;AACT;AAEA,SAAS,iBACP,UACA,WACiC;AACjC,QAAM,SAA0C,EAAE,SAAS;AAC3D,QAAM,QAAQ,mBAAmB,SAAS;AAC1C,MAAI,UAAU,OAAW,QAAO,YAAY;AAC5C,SAAO;AACT;AAEA,SAAS,SAAS,KAAwB;AACxC,SAAO;AACT;AAEA,SAAS,qBAAqB,KAAuC;AACnE,QAAM,OAAO,SAAS,GAAG;AACzB,QAAM,OAAO,KAAK;AAClB,MAAI,CAAC,MAAM,QAAQ,IAAI,GAAG;AACxB,UAAM,IAAI;AAAA,MACR,mEAAmE,OAAO,IAAI;AAAA,IAChF;AAAA,EACF;AACA,SAAO;AACT;AAEA,SAAS,oBACP,KACA,WAC6B;AAC7B,QAAM,OAAO,SAAS,GAAG;AACzB,QAAM,OAAO,KAAK;AAClB,MAAI,CAAC,MAAM,QAAQ,IAAI,GAAG;AACxB,UAAM,IAAI;AAAA,MACR,mEAAmE,OAAO,IAAI;AAAA,IAChF;AAAA,EACF;AACA,SAAO,IAAI;AAAA,IACT;AAAA,IACA;AAAA,MACE,OAAO,KAAK,kBAAkB,WAAW,KAAK,gBAAgB;AAAA,IAChE;AAAA,IACA;AAAA,EACF;AACF;AAEA,SAAS,cAAsB;AAC7B,SAAOC,YAAW;AACpB;AAEA,SAAS,kBAAkB,MAAsC;AAC/D,SAAO,yBAAyB,KAAK,SAAS;AAChD;AAOO,SAAS,mBAAmB,OAAe,QAAiD;AACjG,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA,CAAC,OAAO,aAAa,IAAI;AACvB,aAAO,OAAO,OAAO,aAAa,EAAE;AAAA,IACtC;AAAA,EACF;AACF;AAEO,IAAM,uBAAN,MAA2B;AAAA,EAChC,YACmB,MACA,QACjB;AAFiB;AACA;AAAA,EAChB;AAAA,EAEH,KACE,YACA,UAOI,CAAC,GAC4B;AACjC,eAAW,YAAY,aAAa;AACpC,UAAM,WAAW,QAAQ,YAAY;AACrC,qBAAiB,UAAU,kBAAkB;AAC7C,WAAO,KAAK,SAAS,YAAY,UAAU,QAAQ,WAAW,OAAO;AAAA,EACvE;AAAA,EAEA,MAAc,SACZ,YACA,UACA,WACA,SAMiC;AACjC,UAAM,OAAO;AAAA,MACX,MAAM,gBAAgB,KAAK,QAAQ,KAAK,MAAM,+BAA+B;AAAA,QAC3E,YAAY,EAAE,IAAI,WAAW;AAAA,QAC7B,OAAO;AAAA,UACL;AAAA,UACA;AAAA,UACA,QAAQ;AAAA,UACR,QAAQ;AAAA,UACR,QAAQ;AAAA,UACR,QAAQ;AAAA,QACV;AAAA,MACF,CAAC;AAAA,IACH;AACA,UAAM,OAAO,KAAK;AAClB,QAAI,CAAC,MAAM,QAAQ,IAAI,GAAG;AACxB,YAAM,IAAI;AAAA,QACR,4DAA4D,OAAO,IAAI;AAAA,MACzE;AAAA,IACF;AACA,WAAO,IAAI;AAAA,MACT;AAAA,MACA;AAAA,QACE,OAAO,KAAK,kBAAkB,WAAW,KAAK,gBAAgB;AAAA,MAChE;AAAA,MACA,CAAC,UAAkB,KAAK,SAAS,YAAY,UAAU,OAAO,OAAO;AAAA,IACvE;AAAA,EACF;AAAA,EAEA,MAAM,IACJ,YACA,OACA,UAAsC,CAAC,GACpB;AACnB,eAAW,YAAY,aAAa;AACpC,QAAI,CAAC,MAAM,KAAK,EAAG,OAAM,IAAI,MAAM,mCAAmC;AACtE,UAAM,QACJ,QAAQ,kBAAkB,SACtB,EAAE,eAAe,QAAQ,cAAc,IACvC;AACN,UAAM,OAAO,MAAM,gBAAgB,KAAK,QAAQ,KAAK,MAAM,8BAA8B;AAAA,MACvF,YAAY,EAAE,IAAI,YAAY,MAAM;AAAA,MACpC;AAAA,IACF,CAAC;AACD,WAAO,SAAS,IAAI;AAAA,EACtB;AAAA,EAEA,OACE,YACA,MACA,UAAuC,CAAC,GACxB;AAChB,eAAW,YAAY,aAAa;AACpC,WAAO,KAAK,UAAU,iCAAiC,MAAM,EAAE,IAAI,WAAW,GAAG,OAAO;AAAA,EAC1F;AAAA,EAEA,YACE,SACA,MACA,UAAuC,CAAC,GACxB;AAChB,eAAW,SAAS,UAAU;AAC9B,WAAO,KAAK,UAAU,8BAA8B,MAAM,EAAE,IAAI,QAAQ,GAAG,OAAO;AAAA,EACpF;AAAA,EAEA,YACE,MACA,UAAuC,CAAC,GACxB;AAChB,WAAO,KAAK,UAAU,8BAA8B,MAAM,CAAC,GAAG,OAAO;AAAA,EACvE;AAAA,EAEA,OACE,OACA,MACA,UAAuC,CAAC,GACxB;AAChB,eAAW,OAAO,QAAQ;AAC1B,WAAO,KAAK,UAAU,+BAA+B,MAAM,EAAE,MAAM,GAAG,OAAO;AAAA,EAC/E;AAAA,EAEA,MAAM,OAAO,OAA8B;AACzC,eAAW,OAAO,QAAQ;AAC1B,UAAM,gBAAgB,KAAK,QAAQ,KAAK,MAAM,iCAAiC;AAAA,MAC7E,YAAY,EAAE,MAAM;AAAA,MACpB,UAAU,CAAC;AAAA,IACb,CAAC;AAAA,EACH;AAAA,EAEA,MAAM,OAAO,OAAiC;AAC5C,eAAW,OAAO,QAAQ;AAC1B,WAAO,gBAAgB,KAAK,QAAQ,KAAK,MAAM,iCAAiC;AAAA,MAC9E,YAAY,EAAE,MAAM;AAAA,IACtB,CAAC;AAAA,EACH;AAAA,EAEA,MAAM,UAAU,OAA8B;AAC5C,eAAW,OAAO,QAAQ;AAC1B,UAAM,gBAAgB,KAAK,QAAQ,KAAK,MAAM,oCAAoC;AAAA,MAChF,YAAY,EAAE,MAAM;AAAA,MACpB,UAAU,CAAC;AAAA,IACb,CAAC;AAAA,EACH;AAAA,EAEA,MAAM,WAAW,OAA8B;AAC7C,eAAW,OAAO,QAAQ;AAC1B,UAAM,gBAAgB,KAAK,QAAQ,KAAK,MAAM,qCAAqC;AAAA,MACjF,YAAY,EAAE,MAAM;AAAA,MACpB,UAAU,CAAC;AAAA,IACb,CAAC;AAAA,EACH;AAAA,EAEA,OAAO,UAGH,CAAC,GAAyC;AAC5C,UAAM,WAAW,QAAQ,YAAY;AACrC,qBAAiB,UAAU,kBAAkB;AAC7C,WAAO,KAAK,WAAW,UAAU,QAAQ,SAAS;AAAA,EACpD;AAAA,EAEA,MAAc,WACZ,UACA,WACsC;AACtC,WAAO;AAAA,MACL,MAAM,gBAAgB,KAAK,QAAQ,KAAK,MAAM,iCAAiC;AAAA,QAC7E,OAAO,iBAAiB,UAAU,SAAS;AAAA,MAC7C,CAAC;AAAA,MACD,CAAC,UAAkB,KAAK,WAAW,UAAU,KAAK;AAAA,IACpD;AAAA,EACF;AAAA,EAEA,MAAM,gBAAgB,YAAiE;AACrF,UAAM,mBAAmB,CAAC,GAAG,IAAI,IAAI,WAAW,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC,EAAE,OAAO,OAAO,CAAC,CAAC;AACvF,QAAI,iBAAiB,SAAS,KAAK;AACjC,YAAM,IAAI,MAAM,yCAAyC;AAAA,IAC3D;AACA,WAAO;AAAA,MACL,MAAM,gBAAgB,KAAK,QAAQ,KAAK,MAAM,0CAA0C;AAAA,QACtF,UAAU,EAAE,YAAY,iBAAiB;AAAA,MAC3C,CAAC;AAAA,IACH;AAAA,EACF;AAAA,EAEA,OAAO,OAAe,UAAoC,CAAC,GAAmB;AAC5E,eAAW,OAAO,QAAQ;AAC1B,UAAM,KAAK,aAAa,+BAA+B;AACvD,UAAM,OAAO,oBAAoB,iCAAiC,EAAE,MAAM,CAAC;AAC3E,UAAM,QAAQ,KAAK,KAAK,UAAU,MAAM,QAAW;AAAA,MACjD,SAAS,iBAAiB,KAAK,MAAM,EAAE;AAAA,MACvC,SAAS,QAAQ,cAAc,EAAE,iBAAiB,QAAQ,YAAY,IAAI;AAAA,IAC5E,CAAC;AACD,WAAO,mBAAmB,OAAO,KAAK,YAAY,KAAK,CAAC;AAAA,EAC1D;AAAA,EAEQ,UACN,aACA,MACA,YACA,SACgB;AAChB,UAAM,QAAQ,QAAQ,gBAAgB,KAAK,KAAK,KAAK,OAAO,KAAK,KAAK,YAAY;AAClF,UAAM,YAAY,kBAAkB,IAA8B;AAClE,UAAM,KAAK,aAAa,WAAW;AACnC,UAAM,OAAO,oBAAoB,aAAa,UAAU;AACxD,UAAM,QAAQ,KAAK,KAAK,WAAW,MAAM;AAAA,MACvC,GAAG;AAAA,MACH;AAAA,MACA,uBAAuB;AAAA,IACzB,GAAG;AAAA,MACD,SAAS,iBAAiB,KAAK,MAAM,EAAE;AAAA,MACvC,SAAS,EAAE,mBAAmB,MAAM;AAAA,IACtC,CAAC;AACD,WAAO,mBAAmB,OAAO,KAAK,YAAY,KAAK,CAAC;AAAA,EAC1D;AAAA,EAEA,OAAe,YAAY,OAAwD;AACjF,WAAO,eAAe,KAAK;AAAA,EAC7B;AACF;;;AC1UA,SAAS,cAAAC,mBAAkB;AAe3B,SAASC,eAAsB;AAC7B,SAAOC,YAAW;AACpB;AAEO,IAAM,+BAAN,MAAmC;AAAA,EACxC,YACmB,MACA,QACjB;AAFiB;AACA;AAAA,EAChB;AAAA,EAEH,QACE,MACA,UAAuC,CAAC,GACxB;AAChB,UAAM,QAAQ,QAAQ,gBAAgB,KAAK,KAAK,KAAK,OAAO,KAAK,KAAKD,aAAY;AAClF,UAAM,KAAK,aAAa,mCAAmC;AAC3D,UAAM,OAAO,oBAAoB,mCAAmC;AACpE,UAAM,QAAQ,KAAK,KAAK,WAAW,MAAM,MAAM;AAAA,MAC7C,SAAS,iBAAiB,KAAK,MAAM,EAAE;AAAA,MACvC,SAAS,EAAE,mBAAmB,MAAM;AAAA,IACtC,CAAC;AACD,WAAO,mBAAmB,OAAO,KAAK,YAAY,KAAK,CAAC;AAAA,EAC1D;AAAA,EAEA,MAAM,OAAO,OAA8B;AACzC,eAAW,OAAO,QAAQ;AAC1B,UAAM,gBAAgB,KAAK,QAAQ,KAAK,MAAM,oCAAoC;AAAA,MAChF,YAAY,EAAE,MAAM;AAAA,MACpB,UAAU,CAAC;AAAA,IACb,CAAC;AAAA,EACH;AAAA,EAEA,OAAe,YAAY,OAAwD;AACjF,WAAO,eAAe,KAAK;AAAA,EAC7B;AACF;;;ACtCA,SAAS,oBACP,UACA,WACA,QACA,MACA,MACA,kBAC8D;AAC9D,QAAM,QAAsE,CAAC;AAC7E,MAAI,WAAW,OAAW,OAAM,SAAS;AACzC,MAAI,SAAS,OAAW,OAAM,OAAO;AACrC,MAAI,SAAS,OAAW,OAAM,OAAO;AACrC,MAAI,qBAAqB,OAAW,OAAM,mBAAmB;AAC7D,SAAO,cAAc,UAAU,WAAW,KAAK;AAIjD;AAEA,SAAS,cAAc,KAAqB;AAC1C,SAAO;AACT;AAGO,IAAM,oBAAN,MAAwB;AAAA,EAI7B,YACmB,MACA,QACjB;AAFiB;AACA;AAEjB,SAAK,OAAO,IAAI,qBAAqB,MAAM,MAAM;AACjD,SAAK,kBAAkB,IAAI,6BAA6B,MAAM,MAAM;AAAA,EACtE;AAAA,EAEA,KAAK,UAOD,CAAC,GAAyB;AAC5B,UAAM,WAAW,QAAQ,YAAY;AACrC,qBAAiB,QAAQ;AACzB,WAAO,KAAK;AAAA,MACV;AAAA,MACA,QAAQ;AAAA,MACR,QAAQ;AAAA,MACR,QAAQ;AAAA,MACR,QAAQ;AAAA,MACR,QAAQ;AAAA,IACV;AAAA,EACF;AAAA,EAEA,MAAc,SACZ,UACA,WACA,QACA,MACA,MACA,kBACsB;AACtB,UAAM,OAAO;AAAA,MACX,MAAM,gBAAgB,KAAK,QAAQ,KAAK,MAAM,4BAA4B;AAAA,QACxE,OAAO;AAAA,UACL;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,QACF;AAAA,MACF,CAAC;AAAA,IACH;AAGA,WAAO;AAAA,MAAa;AAAA,MAAM;AAAA,MAAU;AAAA,MAAe,CAAC,UAClD,KAAK,SAAS,UAAU,OAAO,QAAQ,MAAM,MAAM,gBAAgB;AAAA,IACrE;AAAA,EACF;AAAA,EAEA,MAAM,IACJ,YACA,UAAgE,CAAC,GACjD;AAChB,eAAW,YAAY,aAAa;AACpC,UAAM,QAA0C,CAAC;AACjD,QAAI,QAAQ,SAAS,OAAW,OAAM,OAAO,QAAQ;AACrD,QAAI,QAAQ,qBAAqB,QAAW;AAC1C,YAAM,mBAAmB,QAAQ;AAAA,IACnC;AACA,UAAM,OAAO,MAAM,gBAAgB,KAAK,QAAQ,KAAK,MAAM,2BAA2B;AAAA,MACpF,YAAY,EAAE,IAAI,WAAW;AAAA,MAC7B,OAAO,OAAO,KAAK,KAAK,EAAE,SAAS,IAAI,QAAQ;AAAA,IACjD,CAAC;AACD,WAAO,cAAc,IAAI;AAAA,EAC3B;AAAA,EAEA,KACE,YACA,SACA,SACqB;AACrB,WAAO,aAAa,KAAK,MAAM,aAAa,YAAY,SAAS,OAAO;AAAA,EAC1E;AAAA,EAEA,WACE,YACA,SACA,SACY;AACZ,WAAO,kBAAkB,KAAK,MAAM,KAAK,QAAQ,aAAa,YAAY,SAAS,OAAO;AAAA,EAC5F;AACF;;;ACxHA,SAAS,sBACP,UACA,WACA,MAC8D;AAC9D,QAAM,QAAsE,CAAC;AAC7E,MAAI,SAAS,OAAW,OAAM,OAAO;AACrC,SAAO,cAAc,UAAU,WAAW,KAAK;AAIjD;AAEA,SAAS,gBAAgB,KAA0B;AACjD,SAAO;AACT;AAEO,IAAM,sBAAN,MAA0B;AAAA,EAC/B,YACmB,MACA,QACjB;AAFiB;AACA;AAAA,EAChB;AAAA,EAEH,KAAK,UAID,CAAC,GAA8B;AACjC,UAAM,WAAW,QAAQ,YAAY;AACrC,qBAAiB,QAAQ;AACzB,WAAO,KAAK,SAAS,UAAU,QAAQ,WAAW,QAAQ,IAAI;AAAA,EAChE;AAAA,EAEA,MAAc,SACZ,UACA,WACA,MAC2B;AAC3B,UAAM,OAAO;AAAA,MACX,MAAM,gBAAgB,KAAK,QAAQ,KAAK,MAAM,8BAA8B;AAAA,QAC1E,OAAO,sBAAsB,UAAU,WAAW,IAAI;AAAA,MACxD,CAAC;AAAA,IACH;AACA,WAAO;AAAA,MAAa;AAAA,MAAM;AAAA,MAAe;AAAA,MAAiB,CAAC,UACzD,KAAK,SAAS,UAAU,OAAO,IAAI;AAAA,IACrC;AAAA,EACF;AAAA,EAEA,MAAM,KAAK,SAIyB;AAClC,UAAM,WAAW,QAAQ,YAAY;AACrC,qBAAiB,QAAQ;AACzB,UAAM,SAAS,QAAQ,KAAK,KAAK,EAAE,YAAY;AAC/C,QAAI;AACJ,OAAG;AACD,YAAM,OAAO,MAAM,KAAK,SAAS,UAAU,OAAO,QAAQ,IAAI;AAC9D,YAAM,QAAQ,KAAK,MAAM,KAAK,CAAC,MAAM,EAAE,MAAM,YAAY,MAAM,MAAM;AACrE,UAAI,MAAO,QAAO;AAClB,UAAI,CAAC,KAAK,YAAY,EAAG;AACzB,cAAQ,KAAK;AAAA,IACf,SAAS,UAAU;AACnB,WAAO;AAAA,EACT;AACF;;;AC/DA,SAAS,kBACP,UACA,WACA,aACkF;AAClF,QAAM,QAAoD,CAAC;AAC3D,MAAI,gBAAgB,OAAW,OAAM,eAAe,CAAC,WAAW;AAChE,SAAO,cAAc,UAAU,WAAW,KAAK;AAIjD;AAEA,SAAS,iBAAiB,KAA2B;AACnD,SAAO;AACT;AAEA,SAAS,qBAAqB,KAA+B;AAC3D,SAAO;AACT;AAEA,SAAS,oBAAoB,KAAgE;AAC3F,QAAM,OAAO,IAAI;AACjB,MAAI,SAAS,QAAQ,SAAS,OAAW,QAAO;AAChD,SAAO;AACT;AAEO,IAAM,uBAAN,MAA2B;AAAA,EAChC,YACmB,MACA,QACjB;AAFiB;AACA;AAAA,EAChB;AAAA,EAEH,KAAK,UAID,CAAC,GAA+B;AAClC,UAAM,WAAW,QAAQ,YAAY;AACrC,qBAAiB,QAAQ;AACzB,WAAO,KAAK,SAAS,UAAU,QAAQ,WAAW,QAAQ,WAAW;AAAA,EACvE;AAAA,EAEA,MAAc,SACZ,UACA,WACA,aAC4B;AAC5B,UAAM,OAAO;AAAA,MACX,MAAM,gBAAgB,KAAK,QAAQ,KAAK,MAAM,+BAA+B;AAAA,QAC3E,OAAO,kBAAkB,UAAU,WAAW,WAAW;AAAA,MAC3D,CAAC;AAAA,IACH;AACA,WAAO;AAAA,MAAa;AAAA,MAAM;AAAA,MAAgB;AAAA,MAAkB,CAAC,UAC3D,KAAK,SAAS,UAAU,OAAO,WAAW;AAAA,IAC5C;AAAA,EACF;AAAA,EAEA,MAAM,IAAI,KAAmC;AAC3C,UAAM,OAAO,MAAM,gBAAgB,KAAK,QAAQ,KAAK,MAAM,8BAA8B;AAAA,MACvF,YAAY,EAAE,IAAI;AAAA,IACpB,CAAC;AACD,WAAO,iBAAiB,IAAI;AAAA,EAC9B;AAAA,EAEA,MAAM,OAAO,SAIiC;AAC5C,UAAM,OAAO,cAAc;AAAA,MACzB,aAAa,QAAQ;AAAA,MACrB,UAAU,QAAQ;AAAA,MAClB,mBAAmB,QAAQ;AAAA,IAC7B,CAAC;AACD,QAAI;AACF,YAAM,MAAM;AAAA,QACV,MAAM,gBAAgB,KAAK,QAAQ,KAAK,MAAM,iCAAiC;AAAA,UAC7E,UAAU;AAAA,QACZ,CAAC;AAAA,MACH;AACA,aAAO,oBAAoB,GAAG;AAAA,IAChC,SAAS,OAAO;AACd,UAAI,iBAAiB,cAAe,QAAO;AAC3C,YAAM;AAAA,IACR;AAAA,EACF;AAAA,EAEA,WACE,KACA,aACA,gBACA,UAAqD,CAAC,GACtB;AAChC,UAAM,WAAW,QAAQ,YAAY;AACrC,qBAAiB,UAAU,qBAAqB;AAChD,WAAO,KAAK,eAAe,KAAK,aAAa,gBAAgB,UAAU,QAAQ,SAAS;AAAA,EAC1F;AAAA,EAEA,cACE,MACA,gBACA,UAAqD,CAAC,GACtB;AAChC,WAAO,KAAK,WAAW,KAAK,KAAK,KAAK,aAAa,gBAAgB,OAAO;AAAA,EAC5E;AAAA,EAEA,MAAc,eACZ,KACA,aACA,gBACA,UACA,WACgC;AAChC,UAAM,OAAO;AAAA,MACX,MAAM,gBAAgB,KAAK,QAAQ,KAAK,MAAM,qCAAqC;AAAA,QACjF,YAAY,EAAE,IAAI;AAAA,QAClB,OAAO,cAAc,UAAU,WAAW;AAAA,UACxC;AAAA,UACA;AAAA,QACF,CAAC;AAAA,MACH,CAAC;AAAA,IACH;AACA,WAAO;AAAA,MAAa;AAAA,MAAM;AAAA,MAAU;AAAA,MAAsB,CAAC,UACzD,KAAK,eAAe,KAAK,aAAa,gBAAgB,UAAU,KAAK;AAAA,IACvE;AAAA,EACF;AACF;;;ACnIO,IAAM,kBAAN,MAAsB;AAAA,EAI3B,YAAY,MAAkB,QAAqB;AACjD,SAAK,QAAQ,IAAI,qBAAqB,MAAM,MAAM;AAClD,SAAK,cAAc,IAAI,2BAA2B,MAAM,MAAM;AAAA,EAChE;AACF;;;ACHA,IAAM,gBAAgB,oBAAI,IAAsB,CAAC,OAAO,SAAS,QAAQ,CAAC;AAE1E,SAAS,WACP,UACA,WACA,MAC8D;AAC9D,MAAI,SAAS,UAAa,CAAC,cAAc,IAAI,IAAI,GAAG;AAClD,UAAM,IAAI;AAAA,MACR,uBAAuB,CAAC,GAAG,aAAa,EAAE,KAAK,EAAE,KAAK,IAAI,CAAC,SAAS,KAAK,UAAU,IAAI,CAAC;AAAA,IAC1F;AAAA,EACF;AACA,QAAM,QAAgC,CAAC;AACvC,MAAI,SAAS,OAAW,OAAM,OAAO;AACrC,SAAO,cAAc,UAAU,WAAW,KAAK;AAIjD;AAEA,SAAS,cAAc,KAAoC;AACzD,SAAO;AACT;AAEA,SAAS,kBAAkB,KAA4B;AACrD,SAAO;AACT;AAEO,IAAM,6BAAN,MAAiC;AAAA,EACtC,YACmB,MACA,QACjB;AAFiB;AACA;AAAA,EAChB;AAAA,EAEH,KAAK,UAID,CAAC,GAAwC;AAC3C,UAAM,WAAW,QAAQ,YAAY;AACrC,qBAAiB,QAAQ;AACzB,WAAO,KAAK,SAAS,UAAU,QAAQ,WAAW,QAAQ,IAAI;AAAA,EAChE;AAAA,EAEA,MAAc,SACZ,UACA,WACA,MACqC;AACrC,UAAM,OAAO;AAAA,MACX,MAAM,gBAAgB,KAAK,QAAQ,KAAK,MAAM,qCAAqC;AAAA,QACjF,OAAO,WAAW,UAAU,WAAW,IAAI;AAAA,MAC7C,CAAC;AAAA,IACH;AACA,WAAO;AAAA,MAAa;AAAA,MAAM;AAAA,MAAiB;AAAA,MAAe,CAAC,UACzD,KAAK,SAAS,UAAU,OAAO,IAAI;AAAA,IACrC;AAAA,EACF;AAAA,EAEA,MAAM,IAAI,UAAyC;AACjD,eAAW,UAAU,WAAW;AAChC,UAAM,OAAO,MAAM,gBAAgB,KAAK,QAAQ,KAAK,MAAM,oCAAoC;AAAA,MAC7F,YAAY,EAAE,SAAS;AAAA,IACzB,CAAC;AACD,WAAO,kBAAkB,IAAI;AAAA,EAC/B;AACF;;;ACnEO,IAAM,gBAAN,MAAoB;AAAA,EAGzB,YACmB,MACA,QACjB;AAFiB;AACA;AAEjB,SAAK,gBAAgB,IAAI,2BAA2B,MAAM,MAAM;AAAA,EAClE;AAAA,EAEA,MAAM,WACJ,SACA,UAA8B,CAAC,GACG;AAClC,UAAM,OAAO,MAAM,gBAAgB,KAAK,QAAQ,KAAK,MAAM,kCAAkC;AAAA,MAC3F,UAAU,cAAc,EAAE,SAAS,OAAO,QAAQ,MAAM,CAAC;AAAA,IAC3D,CAAC;AACD,WAAO;AAAA,EACT;AAAA,EAEA,KAAK,SAAiB,SAAuE;AAC3F,WAAO,kBAAkB,KAAK,MAAM,SAAS,OAAO;AAAA,EACtD;AAAA,EAEA,WAAW,SAAiB,SAA8D;AACxF,WAAO,uBAAuB,KAAK,MAAM,KAAK,QAAQ,SAAS,OAAO;AAAA,EACxE;AACF;;;ACzBA,SAAS,iBACP,UACA,WACA,QACA,MACA,WAC8D;AAC9D,QAAM,QAAsE,CAAC;AAC7E,MAAI,WAAW,OAAW,OAAM,SAAS;AACzC,MAAI,SAAS,OAAW,OAAM,OAAO;AACrC,MAAI,cAAc,OAAW,OAAM,YAAY;AAC/C,SAAO,cAAc,UAAU,WAAW,KAAK;AAIjD;AAEA,SAAS,WAAW,KAAqB;AACvC,SAAO;AACT;AAGO,IAAM,iBAAN,MAAqB;AAAA,EAC1B,YACmB,MACA,QACjB;AAFiB;AACA;AAAA,EAChB;AAAA,EAEH,cAAc,SAAsD;AAClE,WAAO,IAAI,2BAA2B,KAAK,MAAM,KAAK,QAAQ,OAAO;AAAA,EACvE;AAAA,EAEA,KAAK,UAMD,CAAC,GAAyB;AAC5B,UAAM,WAAW,QAAQ,YAAY;AACrC,qBAAiB,QAAQ;AACzB,WAAO,KAAK;AAAA,MACV;AAAA,MACA,QAAQ;AAAA,MACR,QAAQ;AAAA,MACR,QAAQ;AAAA,MACR,QAAQ;AAAA,IACV;AAAA,EACF;AAAA,EAEA,MAAc,SACZ,UACA,WACA,QACA,MACA,WACsB;AACtB,UAAM,OAAO;AAAA,MACX,MAAM,gBAAgB,KAAK,QAAQ,KAAK,MAAM,yBAAyB;AAAA,QACrE,OAAO,iBAAiB,UAAU,WAAW,QAAQ,MAAM,SAAS;AAAA,MACtE,CAAC;AAAA,IACH;AAIA,WAAO;AAAA,MAAa;AAAA,MAAM;AAAA,MAAU;AAAA,MAAY,CAAC,UAC/C,KAAK,SAAS,UAAU,OAAO,QAAQ,MAAM,SAAS;AAAA,IACxD;AAAA,EACF;AAAA,EAEA,MAAM,IACJ,SACA,UAAoC,CAAC,GACrB;AAChB,eAAW,SAAS,UAAU;AAC9B,UAAM,QAAQ,QAAQ,SAAS,SAAY,EAAE,MAAM,QAAQ,KAAK,IAAI;AACpE,UAAM,OAAO,MAAM,gBAAgB,KAAK,QAAQ,KAAK,MAAM,wBAAwB;AAAA,MACjF,YAAY,EAAE,IAAI,QAAQ;AAAA,MAC1B;AAAA,IACF,CAAC;AACD,WAAO,WAAW,IAAI;AAAA,EACxB;AAAA,EAEA,MAAM,WACJ,SACA,SACA,UAA8B,CAAC,GACG;AAClC,eAAW,SAAS,UAAU;AAC9B,UAAM,OAAO,MAAM,gBAAgB,KAAK,QAAQ,KAAK,MAAM,kCAAkC;AAAA,MAC3F,YAAY,EAAE,IAAI,QAAQ;AAAA,MAC1B,UAAU,cAAc,EAAE,SAAS,OAAO,QAAQ,MAAM,CAAC;AAAA,IAC3D,CAAC;AACD,WAAO;AAAA,EACT;AAAA,EAEA,KACE,SACA,SACA,SACqB;AACrB,WAAO,aAAa,KAAK,MAAM,UAAU,SAAS,SAAS,OAAO;AAAA,EACpE;AAAA,EAEA,WACE,SACA,SACA,SACY;AACZ,WAAO,kBAAkB,KAAK,MAAM,KAAK,QAAQ,UAAU,SAAS,SAAS,OAAO;AAAA,EACtF;AACF;;;AC7GO,SAAS,+BACd,OACmD;AACnD,QAAM,YAAY,MAAM,cAAc,MAAM;AAC5C,MAAI,cAAc,QAAW;AAC3B,UAAM,IAAI,MAAM,gDAAgD;AAAA,EAClE;AACA,QAAM,OAA0D;AAAA,IAC9D,YAAY;AAAA,IACZ,QAAQ,MAAM;AAAA,EAChB;AACA,QAAM,UAAU,MAAM,YAAY,MAAM;AACxC,MAAI,YAAY,OAAW,MAAK,WAAW;AAC3C,QAAM,WAAW,MAAM,aAAa,MAAM;AAC1C,MAAI,aAAa,OAAW,MAAK,YAAY;AAC7C,MAAI,MAAM,aAAa,OAAW,MAAK,WAAW,MAAM;AACxD,SAAO;AACT;;;ACpBA,IAAM,gCAAgC;AACtC,IAAM,4BAA4B;AAElC,SAAS,gBAAgB,KAAkC;AACzD,SAAO;AACT;AAEA,SAAS,qBAAqB,SAKkB;AAC9C,SAAO;AAAA,IACL,UAAU,QAAQ;AAAA,IAClB,WAAW,QAAQ;AAAA,IACnB,UAAU,QAAQ;AAAA,IAClB,WAAW,QAAQ,UAAU,KAAK,GAAG;AAAA,EACvC;AACF;AAEO,IAAM,sBAAN,MAA0B;AAAA,EAC/B,YACmB,MACA,QACjB;AAFiB;AACA;AAAA,EAChB;AAAA,EAEH,KAAK,UAKD,CAAC,GAAsC;AACzC,UAAM,WAAW,QAAQ,YAAY;AACrC,qBAAiB,UAAU,yBAAyB;AACpD,WAAO,KAAK,SAAS,UAAU,QAAQ,WAAW,QAAQ,SAAS,QAAQ,QAAQ;AAAA,EACrF;AAAA,EAEA,MAAc,SACZ,UACA,WACA,SACA,UACmC;AACnC,UAAM,OAAO;AAAA,MACX,MAAM,gBAAgB,KAAK,QAAQ,KAAK,MAAM,sCAAsC;AAAA,QAClF,OAAO,qBAAqB,EAAE,UAAU,WAAW,SAAS,SAAS,CAAC;AAAA,MACxE,CAAC;AAAA,IACH;AACA,WAAO;AAAA,MAAa;AAAA,MAAM;AAAA,MAAe;AAAA,MAAiB,CAAC,UACzD,KAAK,SAAS,UAAU,OAAO,SAAS,QAAQ;AAAA,IAClD;AAAA,EACF;AAAA,EAEA,MAAM,YAAY,IAAY,OAAoD;AAChF,eAAW,IAAI,IAAI;AACnB,UAAM,gBAAgB,KAAK,QAAQ,KAAK,MAAM,qCAAqC;AAAA,MACjF,YAAY,EAAE,GAAG;AAAA,MACjB,UAAU,+BAA+B,KAAK;AAAA,IAChD,CAAC;AAAA,EACH;AACF;;;ACqBO,IAAM,QAAN,cAAoB,gBAAgB;AAAA,EAQzC,YAAY,UAA+C,CAAC,GAAG;AAC7D,UAAM,OAAO;AACb,SAAK,SAAS,IAAI,eAAe,KAAK,MAAM,KAAK,MAAM;AACvD,SAAK,QAAQ,IAAI,cAAc,KAAK,MAAM,KAAK,MAAM;AACrD,SAAK,YAAY,IAAI,kBAAkB,KAAK,MAAM,KAAK,MAAM;AAC7D,SAAK,UAAU,IAAI,gBAAgB,KAAK,MAAM,KAAK,MAAM;AACzD,SAAK,cAAc,IAAI,oBAAoB,KAAK,MAAM,KAAK,MAAM;AACjE,SAAK,cAAc,IAAI,oBAAoB,KAAK,MAAM,KAAK,MAAM;AAAA,EACnE;AACF;","names":["randomUUID","randomUUID","randomUUID","randomRunId","randomUUID"]}
|
|
@@ -203,7 +203,7 @@ function formatConfigForLog(config) {
|
|
|
203
203
|
}
|
|
204
204
|
|
|
205
205
|
// src/_http.ts
|
|
206
|
-
var USER_AGENT = `modus-typescript/${"0.2.
|
|
206
|
+
var USER_AGENT = `modus-typescript/${"0.2.3"} (node/${process.version}; ${process.platform})`;
|
|
207
207
|
function buildUrl(baseUrl, path, params) {
|
|
208
208
|
const url = new URL(path.startsWith("/") ? path : `/${path}`, baseUrl);
|
|
209
209
|
if (params) {
|
|
@@ -298,6 +298,26 @@ function wrapNetworkError(error, baseUrl) {
|
|
|
298
298
|
async function readBody(response) {
|
|
299
299
|
return response.text();
|
|
300
300
|
}
|
|
301
|
+
async function readBodyPreview(response, maxChars = 200) {
|
|
302
|
+
if (!response.body) return "";
|
|
303
|
+
const reader = response.body.getReader();
|
|
304
|
+
const decoder = new TextDecoder();
|
|
305
|
+
let out = "";
|
|
306
|
+
try {
|
|
307
|
+
while (out.length < maxChars) {
|
|
308
|
+
const { done, value } = await reader.read();
|
|
309
|
+
if (done) break;
|
|
310
|
+
out += decoder.decode(value, { stream: true });
|
|
311
|
+
if (out.length >= maxChars) {
|
|
312
|
+
out = out.slice(0, maxChars);
|
|
313
|
+
break;
|
|
314
|
+
}
|
|
315
|
+
}
|
|
316
|
+
} finally {
|
|
317
|
+
await reader.cancel().catch(() => void 0);
|
|
318
|
+
}
|
|
319
|
+
return out;
|
|
320
|
+
}
|
|
301
321
|
var HttpClient = class {
|
|
302
322
|
constructor(config) {
|
|
303
323
|
this.config = config;
|
|
@@ -353,7 +373,13 @@ var HttpClient = class {
|
|
|
353
373
|
try {
|
|
354
374
|
const response = await this.config.fetch(url, {
|
|
355
375
|
method,
|
|
356
|
-
|
|
376
|
+
// Agent-service negotiates SSE vs JSON polling on Accept; JSON-only
|
|
377
|
+
// Accept returns {"runId","status":"pending"} instead of token SSE.
|
|
378
|
+
headers: {
|
|
379
|
+
...this.defaultHeaders(),
|
|
380
|
+
...options.headers,
|
|
381
|
+
Accept: "text/event-stream"
|
|
382
|
+
},
|
|
357
383
|
body: options.json !== void 0 ? JSON.stringify(options.json) : void 0,
|
|
358
384
|
signal: AbortSignal.timeout(this.config.timeoutMs)
|
|
359
385
|
});
|
|
@@ -362,6 +388,14 @@ var HttpClient = class {
|
|
|
362
388
|
raiseForStatus(response, body);
|
|
363
389
|
return;
|
|
364
390
|
}
|
|
391
|
+
const contentType = response.headers.get("content-type") ?? "";
|
|
392
|
+
if (!contentType.toLowerCase().includes("text/event-stream")) {
|
|
393
|
+
const preview = await readBodyPreview(response);
|
|
394
|
+
throw new ModusError(
|
|
395
|
+
`Unexpected stream response: expected Content-Type text/event-stream, got ${JSON.stringify(contentType) || "(missing)"}. Body preview: ${preview}`,
|
|
396
|
+
{ statusCode: response.status, body: preview }
|
|
397
|
+
);
|
|
398
|
+
}
|
|
365
399
|
if (!response.body) return;
|
|
366
400
|
const reader = response.body.getReader();
|
|
367
401
|
const decoder = new TextDecoder();
|