@getmodus/sdk 0.2.0 → 0.2.2
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 +12 -3
- package/README.md +186 -39
- package/assets/modus-logo.png +0 -0
- package/assets/modus-logo.svg +13 -0
- package/dist/{chunk-7IOU7BOU.js → chunk-OUFN2O5C.js} +124 -93
- package/dist/chunk-OUFN2O5C.js.map +1 -0
- package/dist/{conversations-DoyTcWk6.d.cts → conversations-BP2sI3Q5.d.cts} +108 -90
- package/dist/{conversations-DoyTcWk6.d.ts → conversations-BP2sI3Q5.d.ts} +108 -90
- package/dist/index.cjs +237 -125
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +26 -10
- package/dist/index.d.ts +26 -10
- package/dist/index.js +114 -34
- package/dist/index.js.map +1 -1
- package/dist/management/index.cjs +129 -93
- package/dist/management/index.cjs.map +1 -1
- package/dist/management/index.d.cts +1 -1
- package/dist/management/index.d.ts +1 -1
- package/dist/management/index.js +7 -2
- package/dist/management/index.js.map +1 -1
- package/package.json +4 -2
- package/dist/chunk-7IOU7BOU.js.map +0 -1
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/_streaming.ts","../src/_chat.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/resources/suggestions.ts","../src/index.ts"],"sourcesContent":["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 { 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 chatPath(\n resource: string,\n resourceId: number | string,\n options: { threadId?: string; stream: boolean },\n): string {\n const safeId = encodeURIComponent(String(resourceId))\n const suffix = options.stream ? '/stream' : ''\n const tid = effectiveThreadId(options.threadId)\n if (tid !== undefined) {\n const safeTid = encodeURIComponent(tid)\n return `/api/v1/${resource}/${safeId}/conversations/${safeTid}/chat${suffix}`\n }\n return `/api/v1/${resource}/${safeId}/chat${suffix}`\n}\n\nfunction modusChatPath(options: { threadId?: string; stream: boolean }): string {\n const suffix = options.stream ? '/stream' : ''\n const tid = effectiveThreadId(options.threadId)\n if (tid !== undefined) {\n validateId(tid, 'thread_id')\n return `/api/v1/modus/conversations/${encodeURIComponent(tid)}/chat${suffix}`\n }\n return `/api/v1/modus/chat${suffix}`\n}\n\nfunction chatBody(message: string, model: ChatModel): Record<string, string> {\n return { message, model }\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 ) {}\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 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 stream: false,\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 resource: string,\n resourceId: number | string,\n message: string,\n options: { model: ChatModel; threadId?: string },\n): ChatStream {\n validateId(resourceId, `${resource}_id`)\n validateChatModel(options.model)\n const path = chatPath(resource, resourceId, {\n threadId: options.threadId,\n stream: true,\n })\n return new ChatStream(http, path, chatBody(message, options.model))\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, stream: false })\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 message: string,\n options: { model: ChatModel; threadId?: string },\n): ChatStream {\n validateChatModel(options.model)\n const path = modusChatPath({ threadId: options.threadId, stream: true })\n return new ChatStream(http, path, chatBody(message, options.model))\n}\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 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 crypto.randomUUID()\n}\n\nexport interface AgentRunStream {\n readonly runId: string\n readonly events: AsyncIterable<RunEvent>\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 async create(\n workflowId: number | string,\n body: CreateAgentRunRequest,\n options: { idempotencyKey?: string } = {},\n ): Promise<AgentRunStream> {\n validateId(workflowId, 'workflow_id')\n return this.createRun('WorkflowRunsController_create', body, { id: workflowId }, options)\n }\n\n async createScope(\n scopeId: number | string,\n body: SkillRunCreateRequest,\n options: { idempotencyKey?: string } = {},\n ): Promise<AgentRunStream> {\n validateId(scopeId, 'scope_id')\n return this.createRun('ScopeRunsController_create', body, { id: scopeId }, options)\n }\n\n async createModus(\n body: ModusRunCreateRequest,\n options: { idempotencyKey?: string } = {},\n ): Promise<AgentRunStream> {\n return this.createRun('ModusRunsController_create', body, {}, options)\n }\n\n async resume(\n runId: string,\n body: ResumeRunRequest,\n options: { idempotencyKey?: string } = {},\n ): Promise<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 { runId, events: 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 { runId, events: this.parseEvents(lines) }\n }\n\n private async *parseEvents(lines: AsyncIterable<string>): AsyncGenerator<RunEvent> {\n yield* parseSseStream(lines)\n }\n}\n","import 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 type { AgentRunStream } from './runs.js'\n\nfunction randomRunId(): string {\n return crypto.randomUUID()\n}\n\nexport class AgentWorkflowActionsResource {\n constructor(\n private readonly http: HttpClient,\n private readonly config: ModusConfig,\n ) {}\n\n async execute(\n body: WorkflowActionRequest,\n options: { idempotencyKey?: string } = {},\n ): Promise<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 { runId, events: 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 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 { 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","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, 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 },\n ): ChatStream {\n return chatStreamSession(this.http, 'scopes', scopeId, message, options)\n }\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 type { RecordSuggestionEventRequest, SuggestionQuestion } 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: 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, 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":["randomRunId"]}
|
|
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"]}
|