@agent-commons/sdk 0.4.0 → 0.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +230 -0
- package/dist/index.cjs +726 -25
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.mts +1115 -15
- package/dist/index.d.ts +1115 -15
- package/dist/index.mjs +726 -25
- package/dist/index.mjs.map +1 -1
- package/package.json +27 -3
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts","../src/client.ts","../src/workflow-templates.ts"],"sourcesContent":["export { CommonsClient, CommonsError } from './client';\nexport { buildWorkflowTemplate, listWorkflowTemplates } from './workflow-templates';\nexport type {\n Agent, CreateAgentParams,\n // Persistent agent computers\n AgentComputer, AgentComputerBrowser, AgentComputerConfig, AgentComputerDesiredState,\n AgentComputerEvent, AgentComputerGpu, AgentComputerGpuType, AgentComputerInstance,\n AgentComputerLifecycle, AgentComputerResourceMode, AgentComputerResourceProfile,\n AgentComputerResources, AgentComputerStatus, AgentComputerTerminal,\n ComputerActionParams, ComputerBrowserOpenParams, ComputerLifecycle,\n ComputerCommandParams, ComputerConfigUpdate, ComputerFile, ComputerGpu,\n ComputerGpuType, ComputerNetworkAccess, ComputerPersistence, ComputerResizeParams,\n ComputerResources, ComputerResourceMode, ComputerResourceProfile, ComputerResourceUpdate,\n Session,\n ModelConfig, ModelProvider,\n RunParams, ChatMessage, StreamEvent, StreamEventType,\n Workflow, WorkflowDefinition, WorkflowNode, WorkflowNodeType, WorkflowEdge, WorkflowExecution,\n Task, CreateTaskParams,\n Tool, CreateToolParams,\n ToolKey, CreateToolKeyParams,\n ToolPermission,\n // A2A\n A2ATaskState, A2AMessage, A2AMessagePart, A2ATextPart, A2ADataPart, A2AFilePart,\n A2ATask, A2AArtifact, A2ASkill, AgentCard, A2ASendTaskParams,\n // MCP\n McpConnectionType, McpServer, McpResource, McpPrompt,\n // Skills\n Skill, SkillIndex, CreateSkillParams,\n // Memory\n AgentMemory, MemoryStats, MemoryType, MemorySourceType,\n CreateMemoryParams, UpdateMemoryParams,\n // Usage\n UsageEvent, UsageAggregation,\n // Wallet\n AgentWallet, WalletBalance, CreateWalletParams, WalletType,\n // API Keys\n ApiKey, CreatedApiKey, CreateApiKeyParams, ApiKeyPrincipalType,\n CommonsClientConfig,\n} from './types';\nexport type {\n WorkflowTemplateBuild,\n WorkflowTemplateContext,\n WorkflowTemplateName,\n WorkflowTemplateTool,\n} from './workflow-templates';\n","import {\n Agent,\n CreateAgentParams,\n RunParams,\n StreamEvent,\n Workflow,\n WorkflowExecution,\n Task,\n CreateTaskParams,\n Tool,\n CreateToolParams,\n ToolKey,\n CreateToolKeyParams,\n ToolPermission,\n CommonsClientConfig,\n AgentCard,\n A2ATask,\n A2ASendTaskParams,\n McpServer,\n McpResource,\n McpPrompt,\n McpConnectionType,\n Skill,\n SkillIndex,\n CreateSkillParams,\n UsageAggregation,\n CreditBalance,\n CreditLedgerEntry,\n CreditWriteParams,\n AgentMemory,\n MemoryStats,\n MemoryType,\n CreateMemoryParams,\n UpdateMemoryParams,\n SharedMemoryScope,\n CreateSharedMemoryScopeParams,\n AgentWallet,\n WalletBalance,\n CreateWalletParams,\n ApiKey,\n CreatedApiKey,\n CreateApiKeyParams,\n ApiKeyPrincipalType,\n AgentComputer,\n AgentComputerConfig,\n AgentComputerInstance,\n AgentComputerEvent,\n ComputerActionParams,\n ComputerBrowserOpenParams,\n ComputerCommandParams,\n ComputerConfigUpdate,\n ComputerFile,\n ComputerResizeParams,\n AgentRuntime,\n AgentRuntimeConfig,\n AgentRuntimeType,\n} from \"./types\";\n\nexport class CommonsClient {\n private readonly baseUrl: string;\n private readonly apiKey?: string;\n private readonly initiator?: string;\n private readonly _fetch: typeof fetch;\n\n constructor(config: CommonsClientConfig) {\n this.baseUrl = (config.baseUrl ?? \"https://api.agentcommons.io\").replace(\n /\\/$/,\n \"\",\n );\n this.apiKey = config.apiKey;\n this.initiator = config.initiator;\n this._fetch = config.fetch ?? fetch;\n }\n\n // ── Helpers ───────────────────────────────────────────────────────────────\n\n private headers(extra?: Record<string, string>): Record<string, string> {\n const h: Record<string, string> = { \"Content-Type\": \"application/json\" };\n if (this.apiKey) h[\"Authorization\"] = `Bearer ${this.apiKey}`;\n if (this.initiator) h[\"x-initiator\"] = this.initiator;\n return { ...h, ...extra };\n }\n\n private async request<T>(\n method: string,\n path: string,\n body?: unknown,\n ): Promise<T> {\n const res = await this._fetch(`${this.baseUrl}${path}`, {\n method,\n headers: this.headers(),\n body: body !== undefined ? JSON.stringify(body) : undefined,\n });\n if (!res.ok) {\n const err = await res.json().catch(() => ({ message: res.statusText }));\n throw new CommonsError(err.message ?? res.statusText, res.status, err);\n }\n return res.json() as Promise<T>;\n }\n\n // ── Models ────────────────────────────────────────────────────────────────\n\n get models() {\n return {\n /** List all available LLM models from the registry */\n list: (): Promise<{ data: any[]; grouped: Record<string, any[]> }> =>\n this.request(\"GET\", \"/v1/models\"),\n };\n }\n\n // ── Agents ────────────────────────────────────────────────────────────────\n\n get agents() {\n return {\n create: (params: CreateAgentParams): Promise<{ data: Agent }> =>\n this.request(\"POST\", \"/v1/agents\", params),\n\n list: (owner?: string): Promise<{ data: Agent[] }> =>\n this.request(\"GET\", `/v1/agents${owner ? `?owner=${owner}` : \"\"}`),\n\n get: (agentId: string): Promise<{ data: Agent }> =>\n this.request(\"GET\", `/v1/agents/${agentId}`),\n\n update: (\n agentId: string,\n params: Partial<CreateAgentParams>,\n ): Promise<{ data: Agent }> =>\n this.request(\"PUT\", `/v1/agents/${agentId}`, params),\n\n getRuntime: (agentId: string): Promise<{ data: AgentRuntime }> =>\n this.request(\"GET\", `/v1/agents/${agentId}/runtime`),\n\n configureRuntime: (\n agentId: string,\n params: {\n runtimeType?: AgentRuntimeType;\n version?: string | null;\n config?: AgentRuntimeConfig;\n deploy?: boolean;\n },\n ): Promise<{ data: AgentRuntime }> =>\n this.request(\"PUT\", `/v1/agents/${agentId}/runtime`, params),\n\n deployRuntime: (agentId: string): Promise<{ data: AgentRuntime }> =>\n this.request(\"POST\", `/v1/agents/${agentId}/runtime/deploy`),\n\n sleepRuntime: (agentId: string): Promise<{ data: AgentRuntime }> =>\n this.request(\"POST\", `/v1/agents/${agentId}/runtime/sleep`),\n\n restartRuntime: (agentId: string): Promise<{ data: AgentRuntime }> =>\n this.request(\"POST\", `/v1/agents/${agentId}/runtime/restart`),\n\n /** List tools assigned to an agent. */\n listTools: (agentId: string): Promise<{ data: any[] }> =>\n this.request(\"GET\", `/v1/agents/${agentId}/tools`),\n\n /** Assign a tool to an agent. */\n addTool: (\n agentId: string,\n params: { toolId: string; usageComments?: string },\n ): Promise<{ data: any }> =>\n this.request(\"POST\", `/v1/agents/${agentId}/tools`, params),\n\n /** Remove a tool assignment from an agent. */\n removeTool: (assignmentId: string): Promise<void> =>\n this.request(\"DELETE\", `/v1/agents/tools/${assignmentId}`),\n\n /** Create a liaison agent for an external agent. */\n createLiaison: (params: Record<string, any>): Promise<any> =>\n this.request(\"POST\", \"/v1/liaison\", params),\n\n /**\n * Stream an agent run. Returns an async generator of StreamEvents.\n * Works in Node.js, browsers, and Edge runtimes.\n *\n * @example\n * for await (const event of client.agents.stream({ agentId, messages })) {\n * if (event.type === 'token') process.stdout.write(event.content ?? '');\n * }\n */\n stream: (params: RunParams): AsyncGenerator<StreamEvent> =>\n this._streamAgentRun(params),\n\n // ── Heartbeat ─────────────────────────────────────────────────────────\n\n /** Get the current heartbeat status for an agent. */\n getAutonomy: (\n agentId: string,\n ): Promise<{\n data: {\n enabled: boolean;\n intervalSec: number;\n isArmed: boolean;\n lastBeatAt: string | null;\n nextBeatAt: string | null;\n };\n }> => this.request(\"GET\", `/v1/agents/${agentId}/autonomy`),\n\n /** Enable or disable the heartbeat, optionally setting the interval. */\n setAutonomy: (\n agentId: string,\n params: { enabled: boolean; intervalSec?: number },\n ): Promise<{\n data: { enabled: boolean; intervalSec: number; isArmed: boolean };\n }> => this.request(\"PUT\", `/v1/agents/${agentId}/autonomy`, params),\n\n /** Trigger a single heartbeat immediately. */\n triggerHeartbeat: (agentId: string): Promise<{ message: string }> =>\n this.request(\"POST\", `/v1/agents/${agentId}/autonomy/trigger`),\n\n /**\n * Manually trigger an agent (fire-and-forget).\n * Requires autonomy to be enabled on the agent.\n */\n trigger: (agentId: string): Promise<{ message: string }> =>\n this.request(\"POST\", `/v1/agents/${agentId}/trigger`),\n\n // ── Knowledgebase ────────────────────────────────────────────────────\n\n /** Get the knowledgebase entries for an agent. */\n getKnowledgebase: (agentId: string): Promise<{ data: any[] }> =>\n this.request(\"GET\", `/v1/agents/${agentId}/knowledgebase`),\n\n /** Replace the knowledgebase entries for an agent. */\n updateKnowledgebase: (\n agentId: string,\n knowledgebase: any[],\n ): Promise<{ data: any[] }> =>\n this.request(\"PUT\", `/v1/agents/${agentId}/knowledgebase`, {\n knowledgebase,\n }),\n\n // ── Preferred Connections ────────────────────────────────────────────\n\n /** List agents that this agent prefers to collaborate with. */\n getPreferredConnections: (agentId: string): Promise<{ data: any[] }> =>\n this.request(\"GET\", `/v1/agents/${agentId}/preferred-connections`),\n\n /** Add a preferred agent connection. */\n addPreferredConnection: (\n agentId: string,\n params: { preferredAgentId: string; usageComments?: string },\n ): Promise<{ data: any }> =>\n this.request(\n \"POST\",\n `/v1/agents/${agentId}/preferred-connections`,\n params,\n ),\n\n /** Remove a preferred agent connection by its record ID. */\n removePreferredConnection: (id: string): Promise<{ success: boolean }> =>\n this.request(\"DELETE\", `/v1/agents/preferred-connections/${id}`),\n\n // ── Computers ────────────────────────────────────────────────────────\n\n getComputerConfig: (\n agentId: string,\n ): Promise<{ data: AgentComputerConfig }> =>\n this.request(\"GET\", `/v1/agents/${agentId}/computer/config`),\n\n updateComputerConfig: (\n agentId: string,\n params: ComputerConfigUpdate,\n ): Promise<{ data: AgentComputerConfig }> =>\n this.request(\"PUT\", `/v1/agents/${agentId}/computer/config`, params),\n\n /** Get the agent's one persistent cloud computer. */\n getComputer: (\n agentId: string,\n /** @deprecated Computer IDs are no longer required and are ignored. */\n _legacyComputerId?: string,\n ): Promise<{ data: AgentComputer | null }> =>\n this.request(\"GET\", `/v1/agents/${agentId}/computer`),\n\n /** Wake the agent's persistent cloud computer, provisioning it if needed. */\n wakeComputer: (\n agentId: string,\n params?: ComputerActionParams,\n ): Promise<{ data: AgentComputer }> =>\n this.request(\"POST\", `/v1/agents/${agentId}/computer/wake`, params),\n\n /** Sleep the runtime while preserving the computer's durable workspace. */\n sleepComputer: (\n agentId: string,\n params?: ComputerActionParams,\n ): Promise<{ data: AgentComputer }> =>\n this.request(\"POST\", `/v1/agents/${agentId}/computer/sleep`, params),\n\n /** Replace the runtime without replacing the persistent computer. */\n restartComputer: (\n agentId: string,\n params?: ComputerActionParams,\n ): Promise<{ data: AgentComputer }> =>\n this.request(\"POST\", `/v1/agents/${agentId}/computer/restart`, params),\n\n resizeComputer: (\n agentId: string,\n params: ComputerResizeParams,\n ): Promise<{ data: AgentComputer }> =>\n this.request(\"POST\", `/v1/agents/${agentId}/computer/resize`, params),\n\n execComputer: (\n agentId: string,\n params: ComputerCommandParams,\n ): Promise<{ data: any }> =>\n this.request(\"POST\", `/v1/agents/${agentId}/computer/exec`, params),\n\n readComputerFile: (\n agentId: string,\n pathOrLegacyComputerId: string,\n /** @deprecated Pass the path as the second argument. */\n legacyPath?: string,\n ): Promise<{ data: ComputerFile }> => {\n const path = legacyPath ?? pathOrLegacyComputerId;\n return this.request(\n \"GET\",\n `/v1/agents/${agentId}/computer/files/read?path=${encodeURIComponent(path)}`,\n );\n },\n\n openComputerBrowser: (\n agentId: string,\n paramsOrLegacyComputerId: ComputerBrowserOpenParams | string,\n /** @deprecated Pass browser options as the second argument. */\n legacyParams?: ComputerBrowserOpenParams,\n ): Promise<{ data: any }> => {\n const params =\n typeof paramsOrLegacyComputerId === \"string\"\n ? legacyParams\n : paramsOrLegacyComputerId;\n if (!params) {\n return Promise.reject(new TypeError(\"Browser options are required.\"));\n }\n return this.request(\n \"POST\",\n `/v1/agents/${agentId}/computer/browser/open`,\n params,\n );\n },\n\n listComputerEvents: (\n agentId: string,\n limitOrLegacyComputerId?: number | string,\n /** @deprecated Pass the limit as the second argument. */\n legacyLimit?: number,\n ): Promise<{ data: AgentComputerEvent[] }> => {\n const limit =\n typeof limitOrLegacyComputerId === \"number\"\n ? limitOrLegacyComputerId\n : legacyLimit;\n return this.request(\n \"GET\",\n `/v1/agents/${agentId}/computer/events${limit ? `?limit=${limit}` : \"\"}`,\n );\n },\n\n // ── Deprecated per-instance compatibility ────────────────────────────\n\n /** @deprecated Use getComputer. The singleton is returned as a one-item list. */\n listComputers: (\n agentId: string,\n _filter?: { sessionId?: string; includeTerminated?: boolean },\n ): Promise<{ data: AgentComputerInstance[] }> => {\n return this.request<{ data: AgentComputer | null }>(\n \"GET\",\n `/v1/agents/${agentId}/computer`,\n ).then(({ data }) => ({\n data: data ? [data as AgentComputerInstance] : [],\n }));\n },\n\n /** @deprecated Use wakeComputer. Lifecycle, name, and session are ignored. */\n startComputer: (\n agentId: string,\n params?: {\n sessionId?: string;\n lifecycle?: \"persistent\" | \"ephemeral\";\n name?: string;\n reason?: string;\n },\n ): Promise<{ data: AgentComputerInstance }> =>\n this.request(\n \"POST\",\n `/v1/agents/${agentId}/computer/wake`,\n params?.reason ? { reason: params.reason } : undefined,\n ),\n\n /** @deprecated Use getComputer. Computer IDs are ignored. */\n refreshComputer: (\n agentId: string,\n _computerId?: string,\n ): Promise<{ data: AgentComputerInstance }> =>\n this.request(\"GET\", `/v1/agents/${agentId}/computer`),\n\n /** @deprecated Use sleepComputer. Computer IDs are ignored. */\n stopComputer: (\n agentId: string,\n _computerId?: string,\n ): Promise<{ data: AgentComputerInstance }> =>\n this.request(\"POST\", `/v1/agents/${agentId}/computer/sleep`),\n\n /** @deprecated Use execComputer. Computer IDs are ignored. */\n runComputerCommand: (\n agentId: string,\n paramsOrLegacyComputerId: ComputerCommandParams | string,\n legacyParams?: ComputerCommandParams,\n ): Promise<{ data: any }> => {\n const params =\n typeof paramsOrLegacyComputerId === \"string\"\n ? legacyParams\n : paramsOrLegacyComputerId;\n if (!params) {\n return Promise.reject(new TypeError(\"Command options are required.\"));\n }\n return this.request(\n \"POST\",\n `/v1/agents/${agentId}/computer/exec`,\n params,\n );\n },\n\n // ── TTS Voices ───────────────────────────────────────────────────────\n\n /**\n * List available TTS voices for a provider.\n * @param provider - 'openai' (default) or 'elevenlabs'\n * @param q - optional search query to filter voices\n */\n listVoices: (\n provider?: \"openai\" | \"elevenlabs\",\n q?: string,\n ): Promise<{ data: any[] }> => {\n const params = new URLSearchParams();\n if (provider) params.set(\"provider\", provider);\n if (q) params.set(\"q\", q);\n const qs = params.toString();\n return this.request(\n \"GET\",\n `/v1/agents/tts/voices${qs ? `?${qs}` : \"\"}`,\n );\n },\n };\n }\n\n // ── Run (non-streaming) ───────────────────────────────────────────────────\n\n get run() {\n return {\n once: (params: RunParams): Promise<any> =>\n this.request(\"POST\", \"/v1/agents/run\", params),\n };\n }\n\n // ── Workflows ─────────────────────────────────────────────────────────────\n\n get workflows() {\n return {\n create: (params: {\n name: string;\n description?: string;\n definition: any;\n ownerId: string;\n ownerType: \"user\" | \"agent\";\n isPublic?: boolean;\n category?: string;\n tags?: string[];\n }): Promise<Workflow> => this.request(\"POST\", \"/v1/workflows\", params),\n\n list: (\n ownerId: string,\n ownerType: \"user\" | \"agent\",\n ): Promise<Workflow[]> =>\n this.request(\n \"GET\",\n `/v1/workflows?ownerId=${ownerId}&ownerType=${ownerType}`,\n ),\n\n get: (workflowId: string): Promise<Workflow> =>\n this.request(\"GET\", `/v1/workflows/${workflowId}`),\n\n update: (\n workflowId: string,\n updates: Partial<Workflow>,\n ): Promise<Workflow> =>\n this.request(\"PUT\", `/v1/workflows/${workflowId}`, updates),\n\n delete: (workflowId: string): Promise<{ success: boolean }> =>\n this.request(\"DELETE\", `/v1/workflows/${workflowId}`),\n\n execute: (\n workflowId: string,\n params: {\n agentId?: string;\n sessionId?: string;\n inputData?: Record<string, any>;\n userId?: string;\n },\n ): Promise<WorkflowExecution> =>\n this.request(\"POST\", `/v1/workflows/${workflowId}/execute`, params),\n\n getExecution: (\n workflowId: string,\n executionId: string,\n ): Promise<WorkflowExecution> =>\n this.request(\n \"GET\",\n `/v1/workflows/${workflowId}/executions/${executionId}`,\n ),\n\n listExecutions: (\n workflowId: string,\n limit?: number,\n ): Promise<WorkflowExecution[]> =>\n this.request(\n \"GET\",\n `/v1/workflows/${workflowId}/executions${limit ? `?limit=${limit}` : \"\"}`,\n ),\n\n cancelExecution: (\n workflowId: string,\n executionId: string,\n ): Promise<{ success: boolean }> =>\n this.request(\n \"POST\",\n `/v1/workflows/${workflowId}/executions/${executionId}/cancel`,\n ),\n\n /** Approve a paused human_approval node and resume execution. */\n approveExecution: (\n workflowId: string,\n executionId: string,\n params: {\n approvalToken: string;\n approvalData?: Record<string, any>;\n },\n ): Promise<{ success: boolean; executionId: string; action: string }> =>\n this.request(\n \"POST\",\n `/v1/workflows/${workflowId}/executions/${executionId}/approve`,\n params,\n ),\n\n /** Reject a paused human_approval node and terminate execution. */\n rejectExecution: (\n workflowId: string,\n executionId: string,\n params: {\n approvalToken: string;\n reason?: string;\n },\n ): Promise<{ success: boolean; executionId: string; action: string }> =>\n this.request(\n \"POST\",\n `/v1/workflows/${workflowId}/executions/${executionId}/reject`,\n params,\n ),\n\n /** Stream execution progress via SSE. Returns an async generator. */\n stream: (\n workflowId: string,\n executionId: string,\n ): AsyncGenerator<StreamEvent> =>\n this._streamSse(\n `/v1/workflows/${workflowId}/executions/${executionId}/stream`,\n ),\n };\n }\n\n // ── Tasks ─────────────────────────────────────────────────────────────────\n\n get tasks() {\n return {\n create: (params: CreateTaskParams): Promise<{ data: Task }> =>\n this.request(\"POST\", \"/v1/tasks\", params),\n\n list: (filter: {\n sessionId?: string;\n agentId?: string;\n ownerId?: string;\n ownerType?: \"user\" | \"agent\";\n }): Promise<{ data: Task[] }> => {\n const q = new URLSearchParams(filter as any).toString();\n return this.request(\"GET\", `/v1/tasks?${q}`);\n },\n\n get: (taskId: string): Promise<{ data: Task }> =>\n this.request(\"GET\", `/v1/tasks/${taskId}`),\n\n execute: (taskId: string): Promise<{ success: boolean; data: any }> =>\n this.request(\"POST\", `/v1/tasks/${taskId}/execute`),\n\n cancel: (taskId: string): Promise<{ success: boolean }> =>\n this.request(\"POST\", `/v1/tasks/${taskId}/cancel`),\n\n delete: (taskId: string): Promise<{ success: boolean }> =>\n this.request(\"DELETE\", `/v1/tasks/${taskId}`),\n\n /** Edit human-facing task details (title/description/priority). */\n update: (\n taskId: string,\n params: { title?: string; description?: string; priority?: number },\n ): Promise<{ data: Task }> =>\n this.request(\"PATCH\", `/v1/tasks/${taskId}`, params),\n\n /** Reschedule a task's upcoming run and/or resize its estimated duration. */\n reschedule: (\n taskId: string,\n params: { scheduledFor?: Date; estimatedDuration?: number },\n ): Promise<{\n data: Task;\n rescheduledRun: { runId: string; created: boolean } | null;\n }> => this.request(\"PATCH\", `/v1/tasks/${taskId}/schedule`, params),\n\n /** Stream task status updates via SSE. Returns an async generator. */\n stream: (taskId: string): AsyncGenerator<StreamEvent> =>\n this._streamSse(`/v1/tasks/${taskId}/stream`),\n };\n }\n\n // ── Sessions ──────────────────────────────────────────────────────────────\n\n get sessions() {\n return {\n list: (\n agentId: string,\n initiatorId: string,\n ): Promise<{ data: import(\"./types\").Session[] }> =>\n this.request(\"GET\", `/v1/sessions/list/${agentId}/${initiatorId}`),\n\n /** List all sessions for a given agent (all initiators). */\n listByAgent: (\n agentId: string,\n ): Promise<{ data: import(\"./types\").Session[] }> =>\n this.request(\"GET\", `/v1/sessions/agent/${agentId}`),\n\n /** List all sessions for a user across all agents. */\n listByUser: (\n initiator: string,\n ): Promise<{ data: import(\"./types\").Session[] }> =>\n this.request(\n \"GET\",\n `/v1/sessions/user/${encodeURIComponent(initiator)}`,\n ),\n\n create: (params: {\n agentId: string;\n initiator: string;\n title?: string;\n model?: Record<string, any>;\n /** 'cli' | 'web' — marks the origin of this session for filtering in the UI */\n source?: \"cli\" | \"web\";\n }): Promise<{ data: import(\"./types\").Session }> =>\n this.request(\"POST\", \"/v1/sessions\", params),\n\n get: (sessionId: string): Promise<{ data: import(\"./types\").Session }> =>\n this.request(\"GET\", `/v1/sessions/${sessionId}`),\n\n /** Get full session with history, tasks, childSessions, and spaces. */\n getFull: (sessionId: string): Promise<{ data: any }> =>\n this.request(\"GET\", `/v1/sessions/${sessionId}/full`),\n };\n }\n\n // ── Tools ─────────────────────────────────────────────────────────────────\n\n get tools() {\n return {\n list: (filter?: {\n agentId?: string;\n owner?: string;\n ownerType?: string;\n visibility?: string;\n }): Promise<{ data: Tool[] }> => {\n const q = filter ? new URLSearchParams(filter as any).toString() : \"\";\n return this.request(\"GET\", `/v1/tools${q ? `?${q}` : \"\"}`);\n },\n\n get: (toolId: string): Promise<{ data: Tool }> =>\n this.request(\"GET\", `/v1/tools/${toolId}`),\n\n create: (params: CreateToolParams): Promise<{ data: Tool }> =>\n this.request(\"POST\", \"/v1/tools\", params),\n\n update: (\n toolId: string,\n params: Partial<CreateToolParams>,\n ): Promise<{ data: Tool }> =>\n this.request(\"PUT\", `/v1/tools/${toolId}`, params),\n\n delete: (toolId: string): Promise<{ success: boolean }> =>\n this.request(\"DELETE\", `/v1/tools/${toolId}`),\n\n /** List built-in static tools available to all agents. */\n listStatic: (): Promise<{ data: Tool[] }> =>\n this.request(\"GET\", \"/v1/tools/static\"),\n };\n }\n\n // ── OAuth Connections ─────────────────────────────────────────────────────\n\n get oauth() {\n return {\n /** List OAuth providers available on the platform (Google Workspace, GitHub, …). */\n listProviders: (): Promise<{ providers: any[] }> =>\n this.request(\"GET\", \"/v1/oauth/providers\"),\n\n /** Get one provider's details, including its scope groups. */\n getProvider: (providerKey: string): Promise<{ provider: any }> =>\n this.request(\n \"GET\",\n `/v1/oauth/providers/${encodeURIComponent(providerKey)}`,\n ),\n\n /**\n * List the caller's OAuth connections (the accounts agents act with).\n * `ownerId` is only needed when authenticating with a management key.\n */\n listConnections: (params?: {\n ownerId?: string;\n ownerType?: \"user\" | \"agent\";\n }): Promise<{ connections: any[] }> => {\n const q = params ? new URLSearchParams(params as any).toString() : \"\";\n return this.request(\"GET\", `/v1/oauth/connections${q ? `?${q}` : \"\"}`);\n },\n\n /**\n * Start an OAuth connect flow. Returns the authorization URL the user\n * must open in a browser to grant access.\n */\n connect: (params: {\n providerKey: string;\n scopes?: string[];\n redirectUri?: string;\n }): Promise<{\n authorizationUrl: string;\n state: string;\n expiresAt: string;\n }> => this.request(\"POST\", \"/v1/oauth/connect\", params),\n\n /** Refresh a connection's access token now. */\n refresh: (connectionId: string): Promise<{ success: boolean }> =>\n this.request(\"POST\", `/v1/oauth/connections/${connectionId}/refresh`),\n\n /** Check whether a connection's token is valid. */\n test: (\n connectionId: string,\n ): Promise<{\n success: boolean;\n status: string;\n accessTokenValid: boolean;\n providerUserEmail?: string;\n error?: string;\n }> => this.request(\"GET\", `/v1/oauth/connections/${connectionId}/test`),\n\n /** Revoke a connection and delete its tokens. */\n revoke: (connectionId: string): Promise<{ success: boolean }> =>\n this.request(\"DELETE\", `/v1/oauth/connections/${connectionId}`),\n };\n }\n\n // ── Tool Keys ─────────────────────────────────────────────────────────────\n\n get toolKeys() {\n return {\n list: (filter: {\n ownerId?: string;\n ownerType?: string;\n toolId?: string;\n }): Promise<{ success: boolean; data: ToolKey[] }> => {\n const q = new URLSearchParams(filter as any).toString();\n return this.request(\"GET\", `/v1/tool-keys${q ? `?${q}` : \"\"}`);\n },\n\n create: (\n params: CreateToolKeyParams,\n ): Promise<{ success: boolean; data: ToolKey }> =>\n this.request(\"POST\", \"/v1/tool-keys\", params),\n\n delete: (keyId: string): Promise<{ success: boolean }> =>\n this.request(\"DELETE\", `/v1/tool-keys/${keyId}`),\n };\n }\n\n // ── Tool Permissions ──────────────────────────────────────────────────────\n\n get toolPermissions() {\n return {\n list: (\n toolId?: string,\n ): Promise<{ success: boolean; data: ToolPermission[] }> => {\n const q = toolId ? `?toolId=${toolId}` : \"\";\n return this.request(\"GET\", `/v1/tool-permissions${q}`);\n },\n\n grant: (params: {\n toolId: string;\n subjectId: string;\n subjectType: \"user\" | \"agent\";\n permission: \"read\" | \"execute\" | \"admin\";\n grantedBy?: string;\n }): Promise<{ success: boolean; data: ToolPermission }> =>\n this.request(\"POST\", \"/v1/tool-permissions/grant\", params),\n\n revoke: (permissionId: string): Promise<{ success: boolean }> =>\n this.request(\"DELETE\", `/v1/tool-permissions/revoke/${permissionId}`),\n };\n }\n\n // ── Skills ────────────────────────────────────────────────────────────────\n\n get skills() {\n return {\n list: (filter?: {\n ownerId?: string;\n ownerType?: string;\n isPublic?: boolean;\n }): Promise<{ data: Skill[] }> => {\n const params = new URLSearchParams();\n if (filter?.ownerId) params.set(\"ownerId\", filter.ownerId);\n if (filter?.ownerType) params.set(\"ownerType\", filter.ownerType);\n if (filter?.isPublic !== undefined)\n params.set(\"isPublic\", String(filter.isPublic));\n const qs = params.toString();\n return this.request(\"GET\", `/v1/skills${qs ? `?${qs}` : \"\"}`);\n },\n\n get: (skillIdOrSlug: string): Promise<{ data: Skill }> =>\n this.request(\"GET\", `/v1/skills/${skillIdOrSlug}`),\n\n getIndex: (ownerId?: string): Promise<{ data: SkillIndex[] }> => {\n const qs = ownerId ? `?ownerId=${ownerId}` : \"\";\n return this.request(\"GET\", `/v1/skills/index${qs}`);\n },\n\n create: (params: CreateSkillParams): Promise<{ data: Skill }> =>\n this.request(\"POST\", \"/v1/skills\", params),\n\n update: (\n skillIdOrSlug: string,\n updates: Partial<CreateSkillParams>,\n ): Promise<{ data: Skill }> =>\n this.request(\"PUT\", `/v1/skills/${skillIdOrSlug}`, updates),\n\n delete: (skillIdOrSlug: string): Promise<{ deleted: boolean }> =>\n this.request(\"DELETE\", `/v1/skills/${skillIdOrSlug}`),\n };\n }\n\n // ── Wallets ───────────────────────────────────────────────────────────────\n\n get wallets() {\n return {\n /** List all wallets for an agent. */\n list: (agentId: string): Promise<AgentWallet[]> =>\n this.request(\"GET\", `/v1/wallets/agent/${agentId}`),\n\n /** Get the primary active wallet for an agent. */\n primary: (agentId: string): Promise<AgentWallet | null> =>\n this.request(\"GET\", `/v1/wallets/agent/${agentId}/primary`),\n\n /** Get a specific wallet by ID. */\n get: (walletId: string): Promise<AgentWallet> =>\n this.request(\"GET\", `/v1/wallets/${walletId}`),\n\n /** Create a new wallet for an agent. */\n create: (params: CreateWalletParams): Promise<AgentWallet> =>\n this.request(\"POST\", \"/v1/wallets\", params),\n\n /** Get USDC and native token balance for a wallet. */\n balance: (walletId: string): Promise<WalletBalance> =>\n this.request(\"GET\", `/v1/wallets/${walletId}/balance`),\n\n /** Transfer USDC or ETH to another address. */\n transfer: (\n walletId: string,\n params: {\n toAddress: string;\n amount: string;\n tokenSymbol?: \"USDC\" | \"ETH\";\n },\n ): Promise<{ txHash: string }> =>\n this.request(\"POST\", `/v1/wallets/${walletId}/transfer`, params),\n\n /**\n * Proxy an HTTP request through an agent's primary wallet, automatically\n * handling x402 payment challenges. The wallet signs the payment and\n * retries once if the target responds with HTTP 402.\n */\n x402Fetch: (\n agentId: string,\n params: {\n url: string;\n method?: string;\n headers?: Record<string, string>;\n body?: string;\n },\n ): Promise<{ status: number; body: unknown }> =>\n this.request(\"POST\", `/v1/wallets/agent/${agentId}/x402-fetch`, params),\n\n /** Deactivate a wallet. */\n deactivate: (walletId: string): Promise<void> =>\n this.request(\"DELETE\", `/v1/wallets/${walletId}`),\n };\n }\n\n // ── Auth ─────────────────────────────────────────────────────────────────\n\n get auth() {\n return {\n /**\n * GET /v1/auth/me\n *\n * Returns the principalId (wallet address / user ID) and principalType\n * that the current API key belongs to. Use this to auto-detect the\n * initiator without asking the user to type their address manually.\n */\n me: (): Promise<{\n principalId: string | null;\n principalType: string | null;\n }> => this.request(\"GET\", \"/v1/auth/me\"),\n };\n }\n\n // ── API Keys ──────────────────────────────────────────────────────────────\n\n get apiKeys() {\n return {\n /**\n * Generate a new API key for a principal (user or agent).\n * The plaintext key is returned only in this response — never again.\n */\n create: (params: CreateApiKeyParams): Promise<CreatedApiKey> =>\n this.request(\"POST\", \"/v1/auth/api-keys\", params),\n\n /** List all active API keys for a principal (key values not included). */\n list: (\n principalId: string,\n principalType: ApiKeyPrincipalType,\n ): Promise<ApiKey[]> => {\n const q = new URLSearchParams({\n principalId,\n principalType,\n }).toString();\n return this.request(\"GET\", `/v1/auth/api-keys?${q}`);\n },\n\n /** Revoke (soft-delete) an API key by its UUID. */\n revoke: (id: string): Promise<{ revoked: boolean }> =>\n this.request(\"DELETE\", `/v1/auth/api-keys/${id}`),\n };\n }\n\n // ── SSE Streaming internals ───────────────────────────────────────────────\n\n private async *_streamAgentRun(\n params: RunParams,\n ): AsyncGenerator<StreamEvent> {\n const res = await this._fetch(`${this.baseUrl}/v1/agents/run/stream`, {\n method: \"POST\",\n headers: this.headers(),\n body: JSON.stringify(params),\n });\n\n if (!res.ok) {\n const err = await res.json().catch(() => ({ message: res.statusText }));\n throw new CommonsError(err.message ?? res.statusText, res.status, err);\n }\n\n yield* this._parseEventStream(res);\n }\n\n private async *_streamSse(path: string): AsyncGenerator<StreamEvent> {\n const res = await this._fetch(`${this.baseUrl}${path}`, {\n method: \"GET\",\n headers: this.headers({ Accept: \"text/event-stream\" }),\n });\n\n if (!res.ok) {\n const err = await res.json().catch(() => ({ message: res.statusText }));\n throw new CommonsError(err.message ?? res.statusText, res.status, err);\n }\n\n yield* this._parseEventStream(res);\n }\n\n private async *_parseEventStream(res: Response): AsyncGenerator<StreamEvent> {\n if (!res.body) throw new Error(\"No response body\");\n const reader = res.body.getReader();\n const decoder = new TextDecoder();\n let buffer = \"\";\n\n while (true) {\n const { done, value } = await reader.read();\n if (done) break;\n buffer += decoder.decode(value, { stream: true });\n\n const lines = buffer.split(\"\\n\");\n buffer = lines.pop() ?? \"\";\n\n for (const line of lines) {\n if (line.startsWith(\"data: \")) {\n const raw = line.slice(6).trim();\n if (raw === \"[DONE]\") return;\n try {\n const event = JSON.parse(raw) as StreamEvent;\n if (event.type !== \"keepalive\") yield event;\n if (event.type === \"final\" || event.type === \"completed\") return;\n } catch {\n // Ignore malformed lines\n }\n }\n }\n }\n }\n\n // ── A2A ───────────────────────────────────────────────────────────────────\n\n get a2a() {\n return {\n /** Fetch the A2A Agent Card for an agent. */\n getAgentCard: (agentId: string): Promise<AgentCard> =>\n this.request(\"GET\", `/.well-known/agent.json?agentId=${agentId}`),\n\n /** Send a task to an agent (synchronous, waits for completion). */\n sendTask: (\n agentId: string,\n params: A2ASendTaskParams,\n ): Promise<A2ATask> =>\n this.request(\"POST\", `/v1/a2a/${agentId}`, {\n jsonrpc: \"2.0\",\n id: params.id ?? `sdk-${Date.now()}`,\n method: \"tasks/send\",\n params,\n }).then((r: any) => r.result as A2ATask),\n\n /** Get A2A task status. */\n getTask: (agentId: string, taskId: string): Promise<A2ATask> =>\n this.request(\"POST\", `/v1/a2a/${agentId}`, {\n jsonrpc: \"2.0\",\n id: taskId,\n method: \"tasks/get\",\n params: { id: taskId },\n }).then((r: any) => r.result as A2ATask),\n\n /** Cancel a running A2A task. */\n cancelTask: (agentId: string, taskId: string): Promise<A2ATask> =>\n this.request(\"POST\", `/v1/a2a/${agentId}`, {\n jsonrpc: \"2.0\",\n id: taskId,\n method: \"tasks/cancel\",\n params: { id: taskId },\n }).then((r: any) => r.result as A2ATask),\n\n /** List recent A2A tasks for an agent. */\n listTasks: (\n agentId: string,\n limit?: number,\n ): Promise<{ tasks: A2ATask[]; total: number }> =>\n this.request(\n \"GET\",\n `/v1/a2a/${agentId}/tasks${limit ? `?limit=${limit}` : \"\"}`,\n ),\n\n /** Stream A2A task updates (SSE). */\n stream: (agentId: string, taskId: string): AsyncGenerator<StreamEvent> =>\n this._streamSse(`/v1/a2a/${agentId}/tasks/${taskId}/stream`),\n };\n }\n\n // ── MCP ───────────────────────────────────────────────────────────────────\n\n get mcp() {\n return {\n /** List MCP servers for an owner. */\n listServers: (\n ownerId: string,\n ownerType: \"user\" | \"agent\",\n ): Promise<{ servers: McpServer[]; total: number }> =>\n this.request(\n \"GET\",\n `/v1/mcp/servers?ownerId=${ownerId}&ownerType=${ownerType}`,\n ),\n\n /** Create a new MCP server. */\n createServer: (params: {\n name: string;\n description?: string;\n connectionType: McpConnectionType;\n connectionConfig: Record<string, any>;\n isPublic?: boolean;\n tags?: string[];\n ownerId: string;\n ownerType: \"user\" | \"agent\";\n }): Promise<McpServer> => {\n const { ownerId, ownerType, ...dto } = params;\n return this.request(\n \"POST\",\n `/v1/mcp/servers?ownerId=${ownerId}&ownerType=${ownerType}`,\n dto,\n );\n },\n\n /** Get MCP server by ID. */\n getServer: (serverId: string): Promise<McpServer> =>\n this.request(\"GET\", `/v1/mcp/servers/${serverId}`),\n\n /** Update an MCP server's configuration. */\n updateServer: (\n serverId: string,\n params: Partial<{\n name: string;\n description: string;\n connectionConfig: Record<string, any>;\n isPublic: boolean;\n tags: string[];\n }>,\n ): Promise<McpServer> =>\n this.request(\"PUT\", `/v1/mcp/servers/${serverId}`, params),\n\n /** Delete an MCP server. */\n deleteServer: (serverId: string): Promise<void> =>\n this.request(\"DELETE\", `/v1/mcp/servers/${serverId}`),\n\n /** List public MCP servers (marketplace). */\n getMarketplace: (): Promise<{ servers: McpServer[]; total: number }> =>\n this.request(\"GET\", \"/v1/mcp/servers/marketplace\"),\n\n /** Get connection status for an MCP server. */\n getServerStatus: (\n serverId: string,\n ): Promise<{\n connected: boolean;\n capabilities: string[];\n toolsDiscovered: number;\n lastConnectedAt: Date | null;\n lastError: string | null;\n }> => this.request(\"GET\", `/v1/mcp/servers/${serverId}/status`),\n\n /** Connect to an MCP server. */\n connect: (serverId: string): Promise<{ connected: boolean }> =>\n this.request(\"POST\", `/v1/mcp/servers/${serverId}/connect`),\n\n /** Disconnect from an MCP server. */\n disconnect: (serverId: string): Promise<void> =>\n this.request(\"POST\", `/v1/mcp/servers/${serverId}/disconnect`),\n\n /** Sync tools + resources + prompts from the MCP server. */\n sync: (\n serverId: string,\n ): Promise<{\n toolsDiscovered: number;\n resourcesDiscovered: number;\n promptsDiscovered: number;\n }> => this.request(\"POST\", `/v1/mcp/servers/${serverId}/sync`, {}),\n\n /** List tools discovered from an MCP server. */\n listTools: (serverId: string): Promise<{ tools: any[]; total: number }> =>\n this.request(\"GET\", `/v1/mcp/servers/${serverId}/tools`),\n\n /** List all MCP tools across all servers for a given owner. */\n listToolsByOwner: (\n ownerId: string,\n ownerType: \"user\" | \"agent\",\n ): Promise<{ tools: any[] }> =>\n this.request(\n \"GET\",\n `/v1/mcp/tools?ownerId=${ownerId}&ownerType=${ownerType}`,\n ),\n\n /** List resources from an MCP server. */\n listResources: (\n serverId: string,\n ): Promise<{ resources: McpResource[]; total: number }> =>\n this.request(\"GET\", `/v1/mcp/servers/${serverId}/resources`),\n\n /** Read a resource by URI. */\n readResource: (\n serverId: string,\n uri: string,\n ): Promise<{ uri: string; contents: any }> =>\n this.request(\n \"GET\",\n `/v1/mcp/servers/${serverId}/resources/read?uri=${encodeURIComponent(uri)}`,\n ),\n\n /** List prompts from an MCP server. */\n listPrompts: (\n serverId: string,\n ): Promise<{ prompts: McpPrompt[]; total: number }> =>\n this.request(\"GET\", `/v1/mcp/servers/${serverId}/prompts`),\n\n /** Render a prompt with arguments. */\n getPrompt: (\n serverId: string,\n promptName: string,\n args?: Record<string, string>,\n ): Promise<{ description?: string; messages: any[] }> =>\n this.request(\n \"POST\",\n `/v1/mcp/servers/${serverId}/prompts/${promptName}`,\n { arguments: args },\n ),\n };\n }\n\n // ── Memory ────────────────────────────────────────────────────────────────\n\n get memory() {\n return {\n /** List all memories for an agent. */\n list: (\n agentId: string,\n opts?: { type?: MemoryType; limit?: number },\n ): Promise<{ data: AgentMemory[] }> => {\n const params = new URLSearchParams();\n if (opts?.type) params.set(\"type\", opts.type);\n if (opts?.limit) params.set(\"limit\", String(opts.limit));\n const qs = params.toString();\n return this.request(\n \"GET\",\n `/v1/memory/agents/${agentId}${qs ? `?${qs}` : \"\"}`,\n );\n },\n\n /** Get memory stats for an agent. */\n stats: (agentId: string): Promise<{ data: MemoryStats }> =>\n this.request(\"GET\", `/v1/memory/agents/${agentId}/stats`),\n\n /** Retrieve memories most relevant to a query. */\n retrieve: (\n agentId: string,\n query: string,\n limit?: number,\n ): Promise<{ data: AgentMemory[] }> => {\n const params = new URLSearchParams({ q: query });\n if (limit) params.set(\"limit\", String(limit));\n return this.request(\n \"GET\",\n `/v1/memory/agents/${agentId}/retrieve?${params}`,\n );\n },\n\n /** Get a single memory by ID. */\n get: (memoryId: string): Promise<{ data: AgentMemory }> =>\n this.request(\"GET\", `/v1/memory/${memoryId}`),\n\n /** Manually create a memory. */\n create: (params: CreateMemoryParams): Promise<{ data: AgentMemory }> =>\n this.request(\"POST\", \"/v1/memory\", params),\n\n /** Update a memory. */\n update: (\n memoryId: string,\n params: UpdateMemoryParams,\n ): Promise<{ data: AgentMemory }> =>\n this.request(\"PATCH\", `/v1/memory/${memoryId}`, params),\n\n /** Soft-delete (deactivate) a memory. */\n delete: (memoryId: string): Promise<void> =>\n this.request(\"DELETE\", `/v1/memory/${memoryId}`),\n\n /** Create an append-only memory scope shared by a set of owned agents. */\n createSharedScope: (\n params: CreateSharedMemoryScopeParams,\n ): Promise<{ data: SharedMemoryScope }> =>\n this.request(\"POST\", \"/v1/memory/shared-scopes\", params),\n\n /** List shared-memory scopes available to an agent. */\n listSharedScopes: (\n agentId: string,\n ): Promise<{ data: SharedMemoryScope[] }> =>\n this.request(\"GET\", `/v1/memory/shared-scopes/agents/${agentId}`),\n };\n }\n\n // ── Usage / Observability ─────────────────────────────────────────────────\n\n get usage() {\n return {\n /** Get aggregated token + cost usage for an agent. */\n getAgentUsage: (\n agentId: string,\n opts?: { from?: string; to?: string },\n ): Promise<{ data: UsageAggregation }> => {\n const params = new URLSearchParams();\n if (opts?.from) params.set(\"from\", opts.from);\n if (opts?.to) params.set(\"to\", opts.to);\n const qs = params.toString();\n return this.request(\n \"GET\",\n `/v1/usage/agents/${agentId}${qs ? `?${qs}` : \"\"}`,\n );\n },\n\n /** Get aggregated token + cost usage for a session. */\n getSessionUsage: (\n sessionId: string,\n ): Promise<{ data: UsageAggregation }> =>\n this.request(\"GET\", `/v1/usage/sessions/${sessionId}`),\n };\n }\n\n // ── Credits ──────────────────────────────────────────────────────────────\n\n get credits() {\n return {\n balance: (filter?: {\n principalId?: string;\n workspaceId?: string;\n }): Promise<{ data: CreditBalance }> => {\n const params = new URLSearchParams();\n if (filter?.principalId) params.set(\"principalId\", filter.principalId);\n if (filter?.workspaceId) params.set(\"workspaceId\", filter.workspaceId);\n const qs = params.toString();\n return this.request(\"GET\", `/v1/credits/balance${qs ? `?${qs}` : \"\"}`);\n },\n\n ledger: (filter?: {\n principalId?: string;\n workspaceId?: string;\n limit?: number;\n }): Promise<{ data: CreditLedgerEntry[] }> => {\n const params = new URLSearchParams();\n if (filter?.principalId) params.set(\"principalId\", filter.principalId);\n if (filter?.workspaceId) params.set(\"workspaceId\", filter.workspaceId);\n if (filter?.limit) params.set(\"limit\", String(filter.limit));\n const qs = params.toString();\n return this.request(\"GET\", `/v1/credits/ledger${qs ? `?${qs}` : \"\"}`);\n },\n\n grant: (\n params: CreditWriteParams,\n ): Promise<{ data: CreditLedgerEntry }> =>\n this.request(\"POST\", \"/v1/credits/grants\", params),\n\n debit: (\n params: CreditWriteParams,\n ): Promise<{ data: CreditLedgerEntry }> =>\n this.request(\"POST\", \"/v1/credits/debits\", params),\n };\n }\n}\n\n// ─── Error ────────────────────────────────────────────────────────────────────\n\nexport class CommonsError extends Error {\n constructor(\n message: string,\n public readonly status: number,\n public readonly data?: unknown,\n ) {\n super(message);\n this.name = \"CommonsError\";\n }\n}\n","import type { CreateToolParams, WorkflowDefinition } from './types';\n\nexport type WorkflowTemplateName =\n | 'country-weather-brief'\n | 'agent-research-summary'\n | 'multi-agent-field-report'\n | 'workflow-invocation-smoke';\n\nexport interface WorkflowTemplateContext {\n ownerId: string;\n prefix: string;\n agentId?: string;\n reviewerAgentId?: string;\n childWorkflowId?: string;\n}\n\nexport interface WorkflowTemplateTool {\n key: string;\n payload: CreateToolParams;\n}\n\nexport interface WorkflowTemplateBuild {\n name: string;\n description: string;\n tags: string[];\n category: string;\n tools: WorkflowTemplateTool[];\n buildDefinition: (toolIds: Record<string, string>, ctx: WorkflowTemplateContext) => WorkflowDefinition;\n sampleInput: Record<string, any>;\n}\n\nfunction toolName(prefix: string, name: string) {\n return `${prefix}_${name}`.replace(/[^a-zA-Z0-9_]/g, '_');\n}\n\nfunction functionTool(params: {\n name: string;\n displayName: string;\n description: string;\n properties: Record<string, any>;\n required?: string[];\n apiSpec: CreateToolParams['apiSpec'];\n tags: string[];\n}): CreateToolParams {\n return {\n name: params.name,\n displayName: params.displayName,\n description: params.description,\n visibility: 'private',\n ownerType: 'user',\n category: 'public-api',\n tags: params.tags,\n schema: {\n type: 'function',\n function: {\n name: params.name,\n description: params.description,\n parameters: {\n type: 'object',\n properties: params.properties,\n required: params.required ?? [],\n },\n },\n },\n apiSpec: params.apiSpec,\n };\n}\n\nexport function listWorkflowTemplates() {\n return [\n {\n name: 'country-weather-brief',\n description: 'Tool-only workflow using countries.dev and Open-Meteo.',\n },\n {\n name: 'agent-research-summary',\n description: 'Multi-tool workflow with an agent_processor summarization step.',\n },\n {\n name: 'multi-agent-field-report',\n description: 'Multi-tool workflow with two agent_processor nodes.',\n },\n {\n name: 'workflow-invocation-smoke',\n description: 'Parent workflow that invokes another workflow as a workflow node.',\n },\n ] as const;\n}\n\nexport function buildWorkflowTemplate(\n templateName: WorkflowTemplateName,\n ctx: WorkflowTemplateContext,\n): WorkflowTemplateBuild {\n switch (templateName) {\n case 'country-weather-brief':\n return countryWeatherBrief(ctx);\n case 'agent-research-summary':\n return agentResearchSummary(ctx);\n case 'multi-agent-field-report':\n return multiAgentFieldReport(ctx);\n case 'workflow-invocation-smoke':\n return workflowInvocationSmoke(ctx);\n }\n}\n\nfunction sharedTools(ctx: WorkflowTemplateContext) {\n const countryLookup = functionTool({\n name: toolName(ctx.prefix, 'country_lookup'),\n displayName: 'countries.dev country search',\n description: 'Look up country metadata by country name using countries.dev.',\n tags: ['template', 'countries-dev', 'public-api'],\n properties: {\n country: {\n type: 'string',\n description: 'Country name, for example \"Finland\" or \"Kenya\".',\n },\n },\n required: ['country'],\n apiSpec: {\n method: 'GET',\n baseUrl: 'https://countries.dev',\n path: '/name/{country}',\n authType: 'none',\n },\n });\n\n const weatherForecast = functionTool({\n name: toolName(ctx.prefix, 'open_meteo_weather'),\n displayName: 'Open-Meteo current weather',\n description: 'Get current weather for latitude and longitude using Open-Meteo.',\n tags: ['template', 'open-meteo', 'public-api', 'weather'],\n properties: {\n latitude: { type: 'number', description: 'Latitude in decimal degrees.' },\n longitude: { type: 'number', description: 'Longitude in decimal degrees.' },\n },\n required: ['latitude', 'longitude'],\n apiSpec: {\n method: 'GET',\n baseUrl: 'https://api.open-meteo.com',\n path: '/v1/forecast',\n queryParams: {\n latitude: '{latitude}',\n longitude: '{longitude}',\n current: 'temperature_2m,relative_humidity_2m,wind_speed_10m',\n timezone: 'auto',\n },\n authType: 'none',\n },\n });\n\n const openLibrarySearch = functionTool({\n name: toolName(ctx.prefix, 'open_library_search'),\n displayName: 'Open Library search',\n description: 'Search books and authors using Open Library.',\n tags: ['template', 'open-library', 'public-api', 'books'],\n properties: {\n query: { type: 'string', description: 'Book, author, or topic search query.' },\n limit: { type: 'number', description: 'Maximum result count.' },\n },\n required: ['query'],\n apiSpec: {\n method: 'GET',\n baseUrl: 'https://openlibrary.org',\n path: '/search.json',\n queryParams: {\n q: '{query}',\n limit: '{limit}',\n fields: 'key,title,author_name,first_publish_year',\n },\n authType: 'none',\n },\n });\n\n const exchangeRate = functionTool({\n name: toolName(ctx.prefix, 'frankfurter_exchange_rate'),\n displayName: 'Frankfurter exchange rate',\n description: 'Get a current exchange rate from USD to another currency using Frankfurter.',\n tags: ['template', 'frankfurter', 'public-api', 'exchange-rate'],\n properties: {\n to: { type: 'string', description: 'Target ISO 4217 currency code, for example \"JPY\".' },\n },\n required: ['to'],\n apiSpec: {\n method: 'GET',\n baseUrl: 'https://api.frankfurter.dev',\n path: '/v2/rates',\n queryParams: {\n base: 'USD',\n quotes: '{to}',\n },\n authType: 'none',\n },\n });\n\n return { countryLookup, weatherForecast, openLibrarySearch, exchangeRate };\n}\n\nfunction countryWeatherDefinition(toolIds: Record<string, string>): WorkflowDefinition {\n return {\n nodes: [\n { id: 'input', type: 'input', position: { x: 0, y: 80 } },\n { id: 'country', type: 'tool', toolId: toolIds.countryLookup, position: { x: 240, y: 20 } },\n { id: 'weather', type: 'tool', toolId: toolIds.weatherForecast, position: { x: 520, y: 20 } },\n { id: 'output', type: 'output', position: { x: 820, y: 80 } },\n ],\n edges: [\n {\n id: 'input-country',\n source: 'input',\n target: 'country',\n mapping: { country: 'country' },\n },\n {\n id: 'country-weather',\n source: 'country',\n target: 'weather',\n mapping: {\n '0.latlng.0': 'latitude',\n '0.latlng.1': 'longitude',\n },\n },\n {\n id: 'country-output',\n source: 'country',\n target: 'output',\n mapping: {\n '0.name': 'country',\n '0.capital': 'capital',\n '0.region': 'region',\n '0.population': 'population',\n },\n },\n {\n id: 'weather-output',\n source: 'weather',\n target: 'output',\n mapping: {\n 'current.temperature_2m': 'temperatureC',\n 'current.relative_humidity_2m': 'humidityPercent',\n 'current.wind_speed_10m': 'windSpeedKph',\n timezone: 'timezone',\n },\n },\n ],\n startNodeId: 'input',\n endNodeId: 'output',\n } as WorkflowDefinition;\n}\n\nfunction countryWeatherBrief(ctx: WorkflowTemplateContext): WorkflowTemplateBuild {\n const tools = sharedTools(ctx);\n return {\n name: `${ctx.prefix} Country Weather Brief`,\n description: 'Tool-only workflow: country metadata plus current Open-Meteo weather.',\n category: 'template',\n tags: ['template', 'tool-workflow', 'public-api'],\n tools: [\n { key: 'countryLookup', payload: tools.countryLookup },\n { key: 'weatherForecast', payload: tools.weatherForecast },\n ],\n buildDefinition: (toolIds) => countryWeatherDefinition(toolIds),\n sampleInput: { country: 'Finland' },\n };\n}\n\nfunction agentResearchSummary(ctx: WorkflowTemplateContext): WorkflowTemplateBuild {\n const tools = sharedTools(ctx);\n return {\n name: `${ctx.prefix} Agent Research Summary`,\n description: 'Multi-tool workflow with an agent_processor that summarizes country and book-search data.',\n category: 'template',\n tags: ['template', 'agent-processor', 'public-api'],\n tools: [\n { key: 'countryLookup', payload: tools.countryLookup },\n { key: 'openLibrarySearch', payload: tools.openLibrarySearch },\n ],\n buildDefinition: (toolIds, buildCtx): WorkflowDefinition => ({\n nodes: [\n { id: 'input', type: 'input', position: { x: 0, y: 100 } },\n { id: 'country', type: 'tool', toolId: toolIds.countryLookup, position: { x: 240, y: 20 } },\n { id: 'books', type: 'tool', toolId: toolIds.openLibrarySearch, position: { x: 240, y: 180 } },\n {\n id: 'analyst',\n type: 'agent_processor',\n position: { x: 560, y: 100 },\n config: {\n agentId: buildCtx.agentId,\n prompt:\n 'Create a concise research note from the country metadata and book search results. Include practical context and cite only the data available in the input.',\n },\n },\n { id: 'output', type: 'output', position: { x: 860, y: 100 } },\n ],\n edges: [\n { id: 'input-country', source: 'input', target: 'country', mapping: { country: 'country' } },\n { id: 'input-books', source: 'input', target: 'books', mapping: { query: 'query', limit: 'limit' } },\n { id: 'country-analyst', source: 'country', target: 'analyst', mapping: { '0': 'countryData' } },\n { id: 'books-analyst', source: 'books', target: 'analyst', mapping: { docs: 'books' } },\n { id: 'analyst-output', source: 'analyst', target: 'output', mapping: { result: 'summary' } },\n ],\n startNodeId: 'input',\n endNodeId: 'output',\n } as WorkflowDefinition),\n sampleInput: { country: 'Kenya', query: 'Kenyan history', limit: 5 },\n };\n}\n\nfunction multiAgentFieldReport(ctx: WorkflowTemplateContext): WorkflowTemplateBuild {\n const tools = sharedTools(ctx);\n return {\n name: `${ctx.prefix} Multi-Agent Field Report`,\n description: 'Multi-agent, multi-tool workflow with a researcher agent and reviewer agent.',\n category: 'template',\n tags: ['template', 'multi-agent', 'multi-tool', 'public-api'],\n tools: [\n { key: 'countryLookup', payload: tools.countryLookup },\n { key: 'weatherForecast', payload: tools.weatherForecast },\n { key: 'exchangeRate', payload: tools.exchangeRate },\n ],\n buildDefinition: (toolIds, buildCtx): WorkflowDefinition => ({\n nodes: [\n { id: 'input', type: 'input', position: { x: 0, y: 120 } },\n { id: 'country', type: 'tool', toolId: toolIds.countryLookup, position: { x: 230, y: 20 } },\n { id: 'weather', type: 'tool', toolId: toolIds.weatherForecast, position: { x: 500, y: 20 } },\n { id: 'exchange-rate', type: 'tool', toolId: toolIds.exchangeRate, position: { x: 230, y: 240 } },\n {\n id: 'researcher',\n type: 'agent_processor',\n position: { x: 760, y: 80 },\n config: {\n agentId: buildCtx.agentId,\n prompt:\n 'Draft a compact field report from the country, weather, and exchange-rate data. Use clear sections and do not invent facts.',\n },\n },\n {\n id: 'reviewer',\n type: 'agent_processor',\n position: { x: 1060, y: 80 },\n config: {\n agentId: buildCtx.reviewerAgentId ?? buildCtx.agentId,\n prompt:\n 'Review the draft field report for clarity, unsupported claims, and operational usefulness. Return the improved final report.',\n },\n },\n { id: 'output', type: 'output', position: { x: 1360, y: 120 } },\n ],\n edges: [\n { id: 'input-country', source: 'input', target: 'country', mapping: { country: 'country' } },\n { id: 'country-weather', source: 'country', target: 'weather', mapping: { '0.latlng.0': 'latitude', '0.latlng.1': 'longitude' } },\n { id: 'country-exchange-rate', source: 'country', target: 'exchange-rate', mapping: { '0.currencies.0.code': 'to' } },\n { id: 'country-researcher', source: 'country', target: 'researcher', mapping: { '0': 'countryData' } },\n { id: 'weather-researcher', source: 'weather', target: 'researcher', mapping: { current: 'weather' } },\n { id: 'exchange-rate-researcher', source: 'exchange-rate', target: 'researcher', mapping: { '0': 'exchangeRate' } },\n { id: 'researcher-reviewer', source: 'researcher', target: 'reviewer', mapping: { result: 'draftReport' } },\n { id: 'reviewer-output', source: 'reviewer', target: 'output', mapping: { result: 'finalReport' } },\n ],\n startNodeId: 'input',\n endNodeId: 'output',\n } as WorkflowDefinition),\n sampleInput: { country: 'Japan' },\n };\n}\n\nfunction workflowInvocationSmoke(ctx: WorkflowTemplateContext): WorkflowTemplateBuild {\n return {\n name: `${ctx.prefix} Workflow Invocation Smoke`,\n description: 'Parent workflow template that expects a child workflowId and invokes it as a workflow node.',\n category: 'template',\n tags: ['template', 'workflow-invocation'],\n tools: [],\n buildDefinition: (_toolIds, buildCtx): WorkflowDefinition => ({\n nodes: [\n { id: 'input', type: 'input', position: { x: 0, y: 80 } },\n {\n id: 'child-workflow',\n type: 'workflow',\n position: { x: 280, y: 80 },\n config: {\n workflowId: buildCtx.childWorkflowId,\n timeoutMs: 90_000,\n },\n },\n { id: 'output', type: 'output', position: { x: 620, y: 80 } },\n ],\n edges: [\n { id: 'input-child', source: 'input', target: 'child-workflow' },\n { id: 'child-output', source: 'child-workflow', target: 'output', mapping: { result: 'childResult', executionId: 'childExecutionId' } },\n ],\n startNodeId: 'input',\n endNodeId: 'output',\n } as WorkflowDefinition),\n sampleInput: { country: 'Finland' },\n };\n}\n"],"mappings":"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","names":[]}
|
|
1
|
+
{"version":3,"sources":["../src/index.ts","../src/client.ts","../src/workflow-templates.ts"],"sourcesContent":["export {\n CommonsClient,\n CommonsError,\n type CommonsRequestOptions,\n} from \"./client\";\nexport {\n buildWorkflowTemplate,\n listWorkflowTemplates,\n} from \"./workflow-templates\";\nexport type {\n Agent,\n CreateAgentParams,\n GenerateImageParams,\n GeneratedImageAsset,\n // Persistent agent computers\n AgentComputer,\n AgentComputerBrowser,\n AgentComputerConfig,\n AgentComputerDesiredState,\n AgentComputerEvent,\n AgentComputerGpu,\n AgentComputerGpuType,\n AgentComputerInstance,\n AgentComputerLifecycle,\n AgentComputerResourceMode,\n AgentComputerResourceProfile,\n AgentComputerResources,\n AgentComputerStatus,\n AgentComputerTerminal,\n ComputerActionParams,\n ComputerBrowserOpenParams,\n ComputerLifecycle,\n ComputerCommandParams,\n ComputerConfigUpdate,\n ComputerFile,\n ComputerGpu,\n ComputerGpuType,\n ComputerNetworkAccess,\n ComputerPersistence,\n ComputerResizeParams,\n ComputerResources,\n ComputerResourceMode,\n ComputerResourceProfile,\n ComputerResourceUpdate,\n Session,\n ModelConfig,\n ModelProvider,\n RunParams,\n ChatMessage,\n StreamEvent,\n StreamEventType,\n Workflow,\n WorkflowDefinition,\n WorkflowNode,\n WorkflowNodeType,\n WorkflowEdge,\n WorkflowExecution,\n Task,\n CreateTaskParams,\n Tool,\n CreateToolParams,\n ToolKey,\n CreateToolKeyParams,\n ToolPermission,\n // A2A\n A2ATaskState,\n A2AMessage,\n A2AMessagePart,\n A2ATextPart,\n A2ADataPart,\n A2AFilePart,\n A2ATask,\n A2AArtifact,\n A2ASkill,\n AgentCard,\n A2ASendTaskParams,\n // MCP\n McpConnectionType,\n McpServer,\n McpResource,\n McpPrompt,\n // Skills\n Skill,\n SkillIndex,\n SkillAgentAssignment,\n AgentSkill,\n CreateSkillParams,\n CapabilityName,\n CapabilityProviderDefinition,\n CapabilityProviderConfiguration,\n CapabilityProviderInput,\n UiPlugin,\n UiPluginSurface,\n UiPluginPermission,\n CreateUiPluginParams,\n // Memory\n AgentMemory,\n MemoryStats,\n MemoryType,\n MemorySourceType,\n CreateMemoryParams,\n UpdateMemoryParams,\n // Usage\n UsageEvent,\n UsageAggregation,\n // Wallet\n AgentWallet,\n WalletBalance,\n CreateWalletParams,\n WalletType,\n // API Keys\n ApiKey,\n CreatedApiKey,\n CreateApiKeyParams,\n ApiKeyPrincipalType,\n DeveloperProjectEnvironment,\n DeveloperProject,\n DeveloperApiKey,\n CreatedDeveloperApiKey,\n // Workflow value envelope\n WorkflowValue,\n WorkflowValueKind,\n OutputPresentation,\n // Billing\n PlanKey,\n ComputeProfile,\n ModelTier,\n PlanEntitlements,\n SubscriptionInfo,\n BillingCatalog,\n // Credits\n CreditBalance,\n CreditCampaign,\n CreditDirection,\n CreditLedgerEntry,\n CreditPlatform,\n CreditSummary,\n CreditTransfer,\n CreditWriteParams,\n // Feature flags\n FlagEvaluation,\n ActivityEvent,\n AgentLog,\n FileArtifact,\n FileContent,\n FileContentArtifact,\n FileContentDownload,\n UploadFileInput,\n LibraryItem,\n LibraryGrant,\n LibraryShareLink,\n Space,\n SpaceMember,\n SpaceMessage,\n CodeProject,\n CodeProjectFile,\n Goal,\n OAuthProvider,\n OAuthConnection,\n BillingInvoice,\n BillingPaymentMethod,\n CommonsClientConfig,\n} from \"./types\";\nexport type {\n WorkflowTemplateBuild,\n WorkflowTemplateContext,\n WorkflowTemplateName,\n WorkflowTemplateTool,\n} from \"./workflow-templates\";\n","import {\n Agent,\n CreateAgentParams,\n GenerateImageParams,\n GeneratedImageAsset,\n RunParams,\n StreamEvent,\n Workflow,\n WorkflowExecution,\n Task,\n CreateTaskParams,\n Tool,\n CreateToolParams,\n ToolKey,\n CreateToolKeyParams,\n ToolPermission,\n CommonsClientConfig,\n AgentCard,\n A2ATask,\n A2ASendTaskParams,\n McpServer,\n McpResource,\n McpPrompt,\n McpConnectionType,\n Skill,\n AgentSkill,\n SkillIndex,\n CreateSkillParams,\n UsageAggregation,\n CreditBalance,\n CreditLedgerEntry,\n CreditWriteParams,\n CreditCampaign,\n CreditSummary,\n CreditTransfer,\n SubscriptionInfo,\n PlanEntitlements,\n BillingCatalog,\n FlagEvaluation,\n AgentMemory,\n MemoryStats,\n MemoryType,\n CreateMemoryParams,\n UpdateMemoryParams,\n SharedMemoryScope,\n CreateSharedMemoryScopeParams,\n AgentWallet,\n WalletBalance,\n CreateWalletParams,\n ApiKey,\n CreatedApiKey,\n CreateApiKeyParams,\n ApiKeyPrincipalType,\n AgentComputer,\n AgentComputerConfig,\n AgentComputerInstance,\n AgentComputerEvent,\n ComputerActionParams,\n ComputerBrowserOpenParams,\n ComputerCommandParams,\n ComputerConfigUpdate,\n ComputerFile,\n ComputerResizeParams,\n AgentRuntime,\n AgentRuntimeConfig,\n AgentRuntimeType,\n CopilotChange,\n ActivityEvent,\n AgentLog,\n FileArtifact,\n FileContent,\n UploadFileInput,\n LibraryItem,\n LibraryGrant,\n LibraryShareLink,\n Space,\n SpaceMember,\n SpaceMessage,\n CodeProject,\n CodeProjectFile,\n Goal,\n OAuthProvider,\n OAuthConnection,\n BillingInvoice,\n BillingPaymentMethod,\n DeveloperProject,\n DeveloperProjectEnvironment,\n DeveloperApiKey,\n CreatedDeveloperApiKey,\n CapabilityName,\n CapabilityProviderConfiguration,\n CapabilityProviderDefinition,\n CapabilityProviderInput,\n UiPlugin,\n CreateUiPluginParams,\n} from \"./types\";\n\nexport interface CommonsRequestOptions {\n headers?: Record<string, string>;\n signal?: AbortSignal;\n}\n\nexport class CommonsClient {\n private readonly baseUrl: string;\n private readonly identityUrl: string;\n private readonly identityToken?: string;\n private readonly apiKey?: string;\n private readonly initiator?: string;\n private readonly _fetch: typeof fetch;\n\n constructor(config: CommonsClientConfig) {\n this.baseUrl = (config.baseUrl ?? \"https://api.agentcommons.io\").replace(\n /\\/$/,\n \"\",\n );\n this.identityUrl = (\n config.identityUrl ?? \"https://auth.agentcommons.io\"\n )\n .replace(/\\/api\\/auth\\/?$/, \"\")\n .replace(/\\/$/, \"\");\n this.identityToken = config.identityToken;\n this.apiKey = config.apiKey;\n this.initiator = config.initiator;\n this._fetch = config.fetch ?? fetch;\n }\n\n // ── Helpers ───────────────────────────────────────────────────────────────\n\n private headers(\n extra?: Record<string, string>,\n json = true,\n ): Record<string, string> {\n const h: Record<string, string> = {};\n if (json) h[\"Content-Type\"] = \"application/json\";\n if (this.apiKey) h[\"Authorization\"] = `Bearer ${this.apiKey}`;\n if (this.initiator) h[\"x-initiator\"] = this.initiator;\n return { ...h, ...extra };\n }\n\n /**\n * Call an API route that is not yet represented by a resource namespace.\n * Most applications should use the typed helpers below.\n */\n async request<T>(\n method: string,\n path: string,\n body?: unknown,\n options: CommonsRequestOptions = {},\n ): Promise<T> {\n const isFormData =\n typeof FormData !== \"undefined\" && body instanceof FormData;\n const res = await this._fetch(`${this.baseUrl}${path}`, {\n method,\n headers: this.headers(options.headers, !isFormData),\n body:\n body === undefined\n ? undefined\n : isFormData\n ? body\n : JSON.stringify(body),\n signal: options.signal,\n });\n if (!res.ok) {\n const err = await this.errorPayload(res);\n throw new CommonsError(\n this.errorMessage(err, res.statusText),\n res.status,\n err,\n );\n }\n if (res.status === 204) return undefined as T;\n const contentType = res.headers.get(\"content-type\") ?? \"\";\n if (!contentType.includes(\"json\")) {\n return (await res.text()) as T;\n }\n return res.json() as Promise<T>;\n }\n\n private async errorPayload(res: Response): Promise<unknown> {\n const contentType = res.headers.get(\"content-type\") ?? \"\";\n if (contentType.includes(\"json\")) {\n return res.json().catch(() => ({ message: res.statusText }));\n }\n const message = await res.text().catch(() => \"\");\n return { message: message || res.statusText };\n }\n\n private errorMessage(error: unknown, fallback: string): string {\n if (!error || typeof error !== \"object\") return fallback;\n if (\"message\" in error && typeof error.message === \"string\") {\n return error.message;\n }\n if (\"error\" in error) {\n if (typeof error.error === \"string\") return error.error;\n if (\n error.error &&\n typeof error.error === \"object\" &&\n \"message\" in error.error &&\n typeof error.error.message === \"string\"\n ) {\n return error.error.message;\n }\n }\n return fallback;\n }\n\n private async identityRequest<T>(\n method: string,\n path: string,\n body?: unknown,\n ): Promise<T> {\n const headers: Record<string, string> = {};\n if (body !== undefined) headers[\"Content-Type\"] = \"application/json\";\n if (this.identityToken) {\n headers.Authorization = `Bearer ${this.identityToken}`;\n }\n const response = await this._fetch(`${this.identityUrl}${path}`, {\n method,\n headers,\n credentials: \"include\",\n body: body === undefined ? undefined : JSON.stringify(body),\n });\n if (!response.ok) {\n const error = await this.errorPayload(response);\n throw new CommonsError(\n this.errorMessage(error, response.statusText),\n response.status,\n error,\n );\n }\n if (response.status === 204) return undefined as T;\n return response.json() as Promise<T>;\n }\n\n // ── Models ────────────────────────────────────────────────────────────────\n\n get models() {\n return {\n /** List all available LLM models from the registry */\n list: (): Promise<{ data: any[]; grouped: Record<string, any[]> }> =>\n this.request(\"GET\", \"/v1/models\"),\n };\n }\n\n // ── Agents ────────────────────────────────────────────────────────────────\n\n get agents() {\n return {\n create: (params: CreateAgentParams): Promise<{ data: Agent }> =>\n this.request(\"POST\", \"/v1/agents\", params),\n\n list: (owner?: string): Promise<{ data: Agent[] }> =>\n this.request(\"GET\", `/v1/agents${owner ? `?owner=${owner}` : \"\"}`),\n\n get: (agentId: string): Promise<{ data: Agent }> =>\n this.request(\"GET\", `/v1/agents/${agentId}`),\n\n update: (\n agentId: string,\n params: Partial<CreateAgentParams>,\n ): Promise<{ data: Agent }> =>\n this.request(\"PUT\", `/v1/agents/${agentId}`, params),\n\n /**\n * Generate durable image assets for this agent without routing a\n * deterministic image operation through an LLM tool-selection turn.\n */\n generateImage: (\n agentId: string,\n params: GenerateImageParams,\n ): Promise<{ data: GeneratedImageAsset[] }> =>\n this.request(\n \"POST\",\n `/v1/agents/${encodeURIComponent(agentId)}/assets/images`,\n params,\n ),\n\n getRuntime: (agentId: string): Promise<{ data: AgentRuntime }> =>\n this.request(\"GET\", `/v1/agents/${agentId}/runtime`),\n\n configureRuntime: (\n agentId: string,\n params: {\n runtimeType?: AgentRuntimeType;\n version?: string | null;\n config?: AgentRuntimeConfig;\n deploy?: boolean;\n },\n ): Promise<{ data: AgentRuntime }> =>\n this.request(\"PUT\", `/v1/agents/${agentId}/runtime`, params),\n\n deployRuntime: (agentId: string): Promise<{ data: AgentRuntime }> =>\n this.request(\"POST\", `/v1/agents/${agentId}/runtime/deploy`),\n\n sleepRuntime: (agentId: string): Promise<{ data: AgentRuntime }> =>\n this.request(\"POST\", `/v1/agents/${agentId}/runtime/sleep`),\n\n restartRuntime: (agentId: string): Promise<{ data: AgentRuntime }> =>\n this.request(\"POST\", `/v1/agents/${agentId}/runtime/restart`),\n\n manageRuntimeChannel: (\n agentId: string,\n channel: string,\n action: string,\n params: { pairingCode?: string; target?: string; message?: string } = {},\n ): Promise<{ data: unknown }> =>\n this.request(\n \"POST\",\n `/v1/agents/${encodeURIComponent(agentId)}/runtime/channels/${encodeURIComponent(channel)}/${encodeURIComponent(action)}`,\n params,\n ),\n\n /** List tools assigned to an agent. */\n listTools: (agentId: string): Promise<{ data: any[] }> =>\n this.request(\"GET\", `/v1/agents/${agentId}/tools`),\n\n /** Assign a tool to an agent. */\n addTool: (\n agentId: string,\n params: { toolId: string; usageComments?: string },\n ): Promise<{ data: any }> =>\n this.request(\"POST\", `/v1/agents/${agentId}/tools`, params),\n\n /** Update an agent tool assignment. */\n updateTool: (\n assignmentId: string,\n params: { usageComments?: string; enabled?: boolean },\n ): Promise<{ data: any }> =>\n this.request(\n \"PATCH\",\n `/v1/agents/tools/${encodeURIComponent(assignmentId)}`,\n params,\n ),\n\n /** Remove a tool assignment from an agent. */\n removeTool: (assignmentId: string): Promise<void> =>\n this.request(\n \"DELETE\",\n `/v1/agents/tools/${encodeURIComponent(assignmentId)}`,\n ),\n\n /** Create a liaison agent for an external agent. */\n createLiaison: (params: Record<string, any>): Promise<any> =>\n this.request(\"POST\", \"/v1/liaison\", params),\n\n /**\n * Stream an agent run. Returns an async generator of StreamEvents.\n * Works in Node.js, browsers, and Edge runtimes.\n *\n * @example\n * for await (const event of client.agents.stream({ agentId, messages })) {\n * if (event.type === 'token') process.stdout.write(event.content ?? '');\n * }\n */\n stream: (params: RunParams): AsyncGenerator<StreamEvent> =>\n this._streamAgentRun(params),\n\n /** Resume a streamed run after executing a caller-owned CLI tool. */\n submitCliToolResult: (\n requestId: string,\n result: string,\n ): Promise<{ data?: unknown; message?: string }> =>\n this.request(\"POST\", \"/v1/agents/cli-tool-result\", {\n requestId,\n result,\n }),\n\n // ── Heartbeat ─────────────────────────────────────────────────────────\n\n /** Get the current heartbeat status for an agent. */\n getAutonomy: (\n agentId: string,\n ): Promise<{\n data: {\n enabled: boolean;\n intervalSec: number;\n isArmed: boolean;\n lastBeatAt: string | null;\n nextBeatAt: string | null;\n };\n }> => this.request(\"GET\", `/v1/agents/${agentId}/autonomy`),\n\n /** Enable or disable the heartbeat, optionally setting the interval. */\n setAutonomy: (\n agentId: string,\n params: { enabled: boolean; intervalSec?: number },\n ): Promise<{\n data: { enabled: boolean; intervalSec: number; isArmed: boolean };\n }> => this.request(\"PUT\", `/v1/agents/${agentId}/autonomy`, params),\n\n /** Trigger a single heartbeat immediately. */\n triggerHeartbeat: (agentId: string): Promise<{ message: string }> =>\n this.request(\"POST\", `/v1/agents/${agentId}/autonomy/trigger`),\n\n /**\n * Manually trigger an agent (fire-and-forget).\n * Requires autonomy to be enabled on the agent.\n */\n trigger: (agentId: string): Promise<{ message: string }> =>\n this.request(\"POST\", `/v1/agents/${agentId}/trigger`),\n\n // ── Knowledgebase ────────────────────────────────────────────────────\n\n /** Get the knowledgebase entries for an agent. */\n getKnowledgebase: (agentId: string): Promise<{ data: any[] }> =>\n this.request(\"GET\", `/v1/agents/${agentId}/knowledgebase`),\n\n /** Replace the knowledgebase entries for an agent. */\n updateKnowledgebase: (\n agentId: string,\n knowledgebase: any[],\n ): Promise<{ data: any[] }> =>\n this.request(\"PUT\", `/v1/agents/${agentId}/knowledgebase`, {\n knowledgebase,\n }),\n\n // ── Preferred Connections ────────────────────────────────────────────\n\n /** List agents that this agent prefers to collaborate with. */\n getPreferredConnections: (agentId: string): Promise<{ data: any[] }> =>\n this.request(\"GET\", `/v1/agents/${agentId}/preferred-connections`),\n\n /** Add a preferred agent connection. */\n addPreferredConnection: (\n agentId: string,\n params: { preferredAgentId: string; usageComments?: string },\n ): Promise<{ data: any }> =>\n this.request(\n \"POST\",\n `/v1/agents/${agentId}/preferred-connections`,\n params,\n ),\n\n /** Remove a preferred agent connection by its record ID. */\n removePreferredConnection: (id: string): Promise<{ success: boolean }> =>\n this.request(\"DELETE\", `/v1/agents/preferred-connections/${id}`),\n\n // ── Computers ────────────────────────────────────────────────────────\n\n getComputerConfig: (\n agentId: string,\n ): Promise<{ data: AgentComputerConfig }> =>\n this.request(\"GET\", `/v1/agents/${agentId}/computer/config`),\n\n updateComputerConfig: (\n agentId: string,\n params: ComputerConfigUpdate,\n ): Promise<{ data: AgentComputerConfig }> =>\n this.request(\"PUT\", `/v1/agents/${agentId}/computer/config`, params),\n\n /** Get the agent's one persistent cloud computer. */\n getComputer: (\n agentId: string,\n /** @deprecated Computer IDs are no longer required and are ignored. */\n _legacyComputerId?: string,\n ): Promise<{ data: AgentComputer | null }> =>\n this.request(\"GET\", `/v1/agents/${agentId}/computer`),\n\n /** Wake the agent's persistent cloud computer, provisioning it if needed. */\n wakeComputer: (\n agentId: string,\n params?: ComputerActionParams,\n ): Promise<{ data: AgentComputer }> =>\n this.request(\"POST\", `/v1/agents/${agentId}/computer/wake`, params),\n\n /** Sleep the runtime while preserving the computer's durable workspace. */\n sleepComputer: (\n agentId: string,\n params?: ComputerActionParams,\n ): Promise<{ data: AgentComputer }> =>\n this.request(\"POST\", `/v1/agents/${agentId}/computer/sleep`, params),\n\n /** Replace the runtime without replacing the persistent computer. */\n restartComputer: (\n agentId: string,\n params?: ComputerActionParams,\n ): Promise<{ data: AgentComputer }> =>\n this.request(\"POST\", `/v1/agents/${agentId}/computer/restart`, params),\n\n resizeComputer: (\n agentId: string,\n params: ComputerResizeParams,\n ): Promise<{ data: AgentComputer }> =>\n this.request(\"POST\", `/v1/agents/${agentId}/computer/resize`, params),\n\n execComputer: (\n agentId: string,\n params: ComputerCommandParams,\n ): Promise<{ data: any }> =>\n this.request(\"POST\", `/v1/agents/${agentId}/computer/exec`, params),\n\n readComputerFile: (\n agentId: string,\n pathOrLegacyComputerId: string,\n /** @deprecated Pass the path as the second argument. */\n legacyPath?: string,\n ): Promise<{ data: ComputerFile }> => {\n const path = legacyPath ?? pathOrLegacyComputerId;\n return this.request(\n \"GET\",\n `/v1/agents/${agentId}/computer/files/read?path=${encodeURIComponent(path)}`,\n );\n },\n\n writeComputerFile: (\n agentId: string,\n params: { path: string; content: string; encoding?: \"utf8\" | \"base64\" },\n ): Promise<{ data: ComputerFile }> =>\n this.request(\n \"POST\",\n `/v1/agents/${encodeURIComponent(agentId)}/computer/files/write`,\n params,\n ),\n\n openComputerBrowser: (\n agentId: string,\n paramsOrLegacyComputerId: ComputerBrowserOpenParams | string,\n /** @deprecated Pass browser options as the second argument. */\n legacyParams?: ComputerBrowserOpenParams,\n ): Promise<{ data: any }> => {\n const params =\n typeof paramsOrLegacyComputerId === \"string\"\n ? legacyParams\n : paramsOrLegacyComputerId;\n if (!params) {\n return Promise.reject(new TypeError(\"Browser options are required.\"));\n }\n return this.request(\n \"POST\",\n `/v1/agents/${agentId}/computer/browser/open`,\n params,\n );\n },\n\n testComputerBrowser: (\n agentId: string,\n ): Promise<{ data: Record<string, unknown> }> =>\n this.request(\n \"POST\",\n `/v1/agents/${encodeURIComponent(agentId)}/computer/browser/test`,\n {},\n ),\n\n listComputerEvents: (\n agentId: string,\n limitOrLegacyComputerId?: number | string,\n /** @deprecated Pass the limit as the second argument. */\n legacyLimit?: number,\n ): Promise<{ data: AgentComputerEvent[] }> => {\n const limit =\n typeof limitOrLegacyComputerId === \"number\"\n ? limitOrLegacyComputerId\n : legacyLimit;\n return this.request(\n \"GET\",\n `/v1/agents/${agentId}/computer/events${limit ? `?limit=${limit}` : \"\"}`,\n );\n },\n\n // ── Deprecated per-instance compatibility ────────────────────────────\n\n /** @deprecated Use getComputer. The singleton is returned as a one-item list. */\n listComputers: (\n agentId: string,\n _filter?: { sessionId?: string; includeTerminated?: boolean },\n ): Promise<{ data: AgentComputerInstance[] }> => {\n return this.request<{ data: AgentComputer | null }>(\n \"GET\",\n `/v1/agents/${agentId}/computer`,\n ).then(({ data }) => ({\n data: data ? [data as AgentComputerInstance] : [],\n }));\n },\n\n /** @deprecated Use wakeComputer. Lifecycle, name, and session are ignored. */\n startComputer: (\n agentId: string,\n params?: {\n sessionId?: string;\n lifecycle?: \"persistent\" | \"ephemeral\";\n name?: string;\n reason?: string;\n },\n ): Promise<{ data: AgentComputerInstance }> =>\n this.request(\n \"POST\",\n `/v1/agents/${agentId}/computer/wake`,\n params?.reason ? { reason: params.reason } : undefined,\n ),\n\n /** @deprecated Use getComputer. Computer IDs are ignored. */\n refreshComputer: (\n agentId: string,\n _computerId?: string,\n ): Promise<{ data: AgentComputerInstance }> =>\n this.request(\"GET\", `/v1/agents/${agentId}/computer`),\n\n /** @deprecated Use sleepComputer. Computer IDs are ignored. */\n stopComputer: (\n agentId: string,\n _computerId?: string,\n ): Promise<{ data: AgentComputerInstance }> =>\n this.request(\"POST\", `/v1/agents/${agentId}/computer/sleep`),\n\n /** @deprecated Use execComputer. Computer IDs are ignored. */\n runComputerCommand: (\n agentId: string,\n paramsOrLegacyComputerId: ComputerCommandParams | string,\n legacyParams?: ComputerCommandParams,\n ): Promise<{ data: any }> => {\n const params =\n typeof paramsOrLegacyComputerId === \"string\"\n ? legacyParams\n : paramsOrLegacyComputerId;\n if (!params) {\n return Promise.reject(new TypeError(\"Command options are required.\"));\n }\n return this.request(\n \"POST\",\n `/v1/agents/${agentId}/computer/exec`,\n params,\n );\n },\n\n // ── TTS Voices ───────────────────────────────────────────────────────\n\n /**\n * List available TTS voices for a provider.\n * @param provider - 'openai' (default) or 'elevenlabs'\n * @param q - optional search query to filter voices\n */\n listVoices: (\n provider?: \"openai\" | \"elevenlabs\",\n q?: string,\n ): Promise<{ data: any[] }> => {\n const params = new URLSearchParams();\n if (provider) params.set(\"provider\", provider);\n if (q) params.set(\"q\", q);\n const qs = params.toString();\n return this.request(\n \"GET\",\n `/v1/agents/tts/voices${qs ? `?${qs}` : \"\"}`,\n );\n },\n };\n }\n\n get copilot() {\n return {\n get: (): Promise<{ data: Agent | null }> =>\n this.request(\"GET\", \"/v1/copilot\"),\n updateSettings: (params: {\n accessMode: \"full\" | \"scoped\" | \"confirm\";\n scopes?: string[];\n }): Promise<{ data: Agent }> =>\n this.request(\"PUT\", \"/v1/copilot/settings\", params),\n listChanges: (filter?: {\n status?: string;\n resourceType?: string;\n resourceId?: string;\n }): Promise<{ data: CopilotChange[] }> => {\n const query = new URLSearchParams();\n if (filter?.status) query.set(\"status\", filter.status);\n if (filter?.resourceType)\n query.set(\"resourceType\", filter.resourceType);\n if (filter?.resourceId) query.set(\"resourceId\", filter.resourceId);\n return this.request(\n \"GET\",\n `/v1/copilot/changes${query.size ? `?${query}` : \"\"}`,\n );\n },\n acceptChange: (changeId: string): Promise<{ data: CopilotChange }> =>\n this.request(\"POST\", `/v1/copilot/changes/${changeId}/accept`),\n rejectChange: (changeId: string): Promise<{ data: CopilotChange }> =>\n this.request(\"POST\", `/v1/copilot/changes/${changeId}/reject`),\n revertChange: (changeId: string): Promise<{ data: CopilotChange }> =>\n this.request(\"POST\", `/v1/copilot/changes/${changeId}/revert`),\n };\n }\n\n // ── Run (non-streaming) ───────────────────────────────────────────────────\n\n get run() {\n return {\n once: (params: RunParams): Promise<any> =>\n this.request(\"POST\", \"/v1/agents/run\", params),\n };\n }\n\n // ── Workflows ─────────────────────────────────────────────────────────────\n\n get workflows() {\n return {\n create: (params: {\n name: string;\n description?: string;\n definition: any;\n ownerId: string;\n ownerType: \"user\" | \"agent\";\n isPublic?: boolean;\n category?: string;\n tags?: string[];\n }): Promise<Workflow> => this.request(\"POST\", \"/v1/workflows\", params),\n\n list: (\n ownerId: string,\n ownerType: \"user\" | \"agent\",\n ): Promise<Workflow[]> =>\n this.request(\n \"GET\",\n `/v1/workflows?ownerId=${ownerId}&ownerType=${ownerType}`,\n ),\n\n discoverPublic: (filter?: {\n category?: string;\n tags?: string[];\n limit?: number;\n }): Promise<Workflow[]> => {\n const query = new URLSearchParams();\n if (filter?.category) query.set(\"category\", filter.category);\n if (filter?.tags?.length) query.set(\"tags\", filter.tags.join(\",\"));\n if (filter?.limit) query.set(\"limit\", String(filter.limit));\n return this.request(\n \"GET\",\n `/v1/workflows/public${query.size ? `?${query}` : \"\"}`,\n );\n },\n\n get: (workflowId: string): Promise<Workflow> =>\n this.request(\"GET\", `/v1/workflows/${workflowId}`),\n\n update: (\n workflowId: string,\n updates: Partial<Workflow>,\n ): Promise<Workflow> =>\n this.request(\"PUT\", `/v1/workflows/${workflowId}`, updates),\n\n delete: (workflowId: string): Promise<{ success: boolean }> =>\n this.request(\"DELETE\", `/v1/workflows/${workflowId}`),\n\n fork: (\n workflowId: string,\n params: {\n newOwnerId: string;\n newOwnerType: \"user\" | \"agent\";\n customizations?: {\n name?: string;\n description?: string;\n isPublic?: boolean;\n };\n },\n ): Promise<Workflow> =>\n this.request(\n \"POST\",\n `/v1/workflows/${encodeURIComponent(workflowId)}/fork`,\n params,\n ),\n\n getWebhook: (workflowId: string): Promise<Record<string, unknown>> =>\n this.request(\n \"GET\",\n `/v1/workflows/${encodeURIComponent(workflowId)}/webhook`,\n ),\n\n rotateWebhookToken: (\n workflowId: string,\n ): Promise<{ token: string; webhookUrl: string }> =>\n this.request(\n \"POST\",\n `/v1/workflows/${encodeURIComponent(workflowId)}/webhook-token`,\n {},\n ),\n\n disableWebhook: (\n workflowId: string,\n ): Promise<{ success: boolean }> =>\n this.request(\n \"DELETE\",\n `/v1/workflows/${encodeURIComponent(workflowId)}/webhook-token`,\n ),\n\n executeWebhook: (\n token: string,\n payload: unknown,\n query?: Record<string, string>,\n ): Promise<unknown> => {\n const search = query ? new URLSearchParams(query).toString() : \"\";\n return this.request(\n \"POST\",\n `/v1/workflows/webhooks/${encodeURIComponent(token)}${search ? `?${search}` : \"\"}`,\n payload,\n );\n },\n\n execute: (\n workflowId: string,\n params: {\n agentId?: string;\n sessionId?: string;\n inputData?: Record<string, any>;\n userId?: string;\n },\n ): Promise<WorkflowExecution> =>\n this.request(\"POST\", `/v1/workflows/${workflowId}/execute`, params),\n\n getExecution: (\n workflowId: string,\n executionId: string,\n ): Promise<WorkflowExecution> =>\n this.request(\n \"GET\",\n `/v1/workflows/${workflowId}/executions/${executionId}`,\n ),\n\n listExecutions: (\n workflowId: string,\n limit?: number,\n ): Promise<WorkflowExecution[]> =>\n this.request(\n \"GET\",\n `/v1/workflows/${workflowId}/executions${limit ? `?limit=${limit}` : \"\"}`,\n ),\n\n cancelExecution: (\n workflowId: string,\n executionId: string,\n ): Promise<{ success: boolean }> =>\n this.request(\n \"POST\",\n `/v1/workflows/${workflowId}/executions/${executionId}/cancel`,\n ),\n\n /** Approve a paused human_approval node and resume execution. */\n approveExecution: (\n workflowId: string,\n executionId: string,\n params: {\n approvalToken: string;\n approvalData?: Record<string, any>;\n },\n ): Promise<{ success: boolean; executionId: string; action: string }> =>\n this.request(\n \"POST\",\n `/v1/workflows/${workflowId}/executions/${executionId}/approve`,\n params,\n ),\n\n /** Reject a paused human_approval node and terminate execution. */\n rejectExecution: (\n workflowId: string,\n executionId: string,\n params: {\n approvalToken: string;\n reason?: string;\n },\n ): Promise<{ success: boolean; executionId: string; action: string }> =>\n this.request(\n \"POST\",\n `/v1/workflows/${workflowId}/executions/${executionId}/reject`,\n params,\n ),\n\n /** Stream execution progress via SSE. Returns an async generator. */\n stream: (\n workflowId: string,\n executionId: string,\n ): AsyncGenerator<StreamEvent> =>\n this._streamSse(\n `/v1/workflows/${workflowId}/executions/${executionId}/stream`,\n ),\n };\n }\n\n // ── Tasks ─────────────────────────────────────────────────────────────────\n\n get tasks() {\n return {\n create: (params: CreateTaskParams): Promise<{ data: Task }> =>\n this.request(\"POST\", \"/v1/tasks\", params),\n\n list: (filter: {\n sessionId?: string;\n agentId?: string;\n ownerId?: string;\n ownerType?: \"user\" | \"agent\";\n }): Promise<{ data: Task[] }> => {\n const q = new URLSearchParams(filter as any).toString();\n return this.request(\"GET\", `/v1/tasks?${q}`);\n },\n\n get: (taskId: string): Promise<{ data: Task }> =>\n this.request(\"GET\", `/v1/tasks/${taskId}`),\n\n execute: (taskId: string): Promise<{ success: boolean; data: any }> =>\n this.request(\"POST\", `/v1/tasks/${taskId}/execute`),\n\n cancel: (taskId: string): Promise<{ success: boolean }> =>\n this.request(\"POST\", `/v1/tasks/${taskId}/cancel`),\n\n delete: (taskId: string): Promise<{ success: boolean }> =>\n this.request(\"DELETE\", `/v1/tasks/${taskId}`),\n\n /** Edit human-facing task details (title/description/priority). */\n update: (\n taskId: string,\n params: { title?: string; description?: string; priority?: number },\n ): Promise<{ data: Task }> =>\n this.request(\"PATCH\", `/v1/tasks/${taskId}`, params),\n\n /** Reschedule a task's upcoming run and/or resize its estimated duration. */\n reschedule: (\n taskId: string,\n params: { scheduledFor?: Date; estimatedDuration?: number },\n ): Promise<{\n data: Task;\n rescheduledRun: { runId: string; created: boolean } | null;\n }> => this.request(\"PATCH\", `/v1/tasks/${taskId}/schedule`, params),\n\n /** Stream task status updates via SSE. Returns an async generator. */\n stream: (taskId: string): AsyncGenerator<StreamEvent> =>\n this._streamSse(`/v1/tasks/${taskId}/stream`),\n };\n }\n\n // ── Sessions ──────────────────────────────────────────────────────────────\n\n get sessions() {\n return {\n list: (\n agentId: string,\n initiatorId: string,\n ): Promise<{ data: import(\"./types\").Session[] }> =>\n this.request(\"GET\", `/v1/sessions/list/${agentId}/${initiatorId}`),\n\n /** List all sessions for a given agent (all initiators). */\n listByAgent: (\n agentId: string,\n ): Promise<{ data: import(\"./types\").Session[] }> =>\n this.request(\"GET\", `/v1/sessions/agent/${agentId}`),\n\n /** List all sessions for a user across all agents. */\n listByUser: (\n initiator: string,\n ): Promise<{ data: import(\"./types\").Session[] }> =>\n this.request(\n \"GET\",\n `/v1/sessions/user/${encodeURIComponent(initiator)}`,\n ),\n\n create: (params: {\n agentId: string;\n initiator: string;\n title?: string;\n model?: Record<string, any>;\n /** 'cli' | 'web' — marks the origin of this session for filtering in the UI */\n source?: \"cli\" | \"web\";\n }): Promise<{ data: import(\"./types\").Session }> =>\n this.request(\"POST\", \"/v1/sessions\", params),\n\n get: (sessionId: string): Promise<{ data: import(\"./types\").Session }> =>\n this.request(\"GET\", `/v1/sessions/${sessionId}`),\n\n /** Get full session with history, tasks, childSessions, and spaces. */\n getFull: (sessionId: string): Promise<{ data: any }> =>\n this.request(\"GET\", `/v1/sessions/${sessionId}/full`),\n\n /** Rename a session. */\n rename: (\n sessionId: string,\n title: string,\n ): Promise<{ data: import(\"./types\").Session }> =>\n this.request(\n \"PATCH\",\n `/v1/sessions/${encodeURIComponent(sessionId)}`,\n { title },\n ),\n\n /** Delete a session and its owned session data. */\n delete: (sessionId: string): Promise<{ data: unknown }> =>\n this.request(\n \"DELETE\",\n `/v1/sessions/${encodeURIComponent(sessionId)}`,\n ),\n\n /** Get the full chat transcript for a session. */\n getChat: (sessionId: string): Promise<{ data: unknown }> =>\n this.request(\n \"GET\",\n `/v1/agents/sessions/${encodeURIComponent(sessionId)}/chat`,\n ),\n };\n }\n\n // ── Tools ─────────────────────────────────────────────────────────────────\n\n get tools() {\n return {\n list: (filter?: {\n agentId?: string;\n owner?: string;\n ownerType?: string;\n visibility?: string;\n }): Promise<{ data: Tool[] }> => {\n const q = filter ? new URLSearchParams(filter as any).toString() : \"\";\n return this.request(\"GET\", `/v1/tools${q ? `?${q}` : \"\"}`);\n },\n\n get: (toolId: string): Promise<{ data: Tool }> =>\n this.request(\"GET\", `/v1/tools/${toolId}`),\n\n create: (params: CreateToolParams): Promise<{ data: Tool }> =>\n this.request(\"POST\", \"/v1/tools\", params),\n\n update: (\n toolId: string,\n params: Partial<CreateToolParams>,\n ): Promise<{ data: Tool }> =>\n this.request(\"PUT\", `/v1/tools/${toolId}`, params),\n\n delete: (toolId: string): Promise<{ success: boolean }> =>\n this.request(\"DELETE\", `/v1/tools/${toolId}`),\n\n /** List built-in static tools available to all agents. */\n listStatic: (): Promise<{ data: Tool[] }> =>\n this.request(\"GET\", \"/v1/tools/static\"),\n };\n }\n\n // ── OAuth Connections ─────────────────────────────────────────────────────\n\n get oauth() {\n return {\n /** List OAuth providers available on the platform (Google Workspace, GitHub, …). */\n listProviders: (): Promise<{ providers: OAuthProvider[] }> =>\n this.request(\"GET\", \"/v1/oauth/providers\"),\n\n /** Get one provider's details, including its scope groups. */\n getProvider: (\n providerKey: string,\n ): Promise<{ provider: OAuthProvider }> =>\n this.request(\n \"GET\",\n `/v1/oauth/providers/${encodeURIComponent(providerKey)}`,\n ),\n\n /**\n * List the caller's OAuth connections (the accounts agents act with).\n * `ownerId` is only needed when authenticating with a management key.\n */\n listConnections: (params?: {\n ownerId?: string;\n ownerType?: \"user\" | \"agent\";\n }): Promise<{ connections: OAuthConnection[] }> => {\n const q = params ? new URLSearchParams(params as any).toString() : \"\";\n return this.request(\"GET\", `/v1/oauth/connections${q ? `?${q}` : \"\"}`);\n },\n\n /** Get one OAuth connection. */\n getConnection: (\n connectionId: string,\n ): Promise<{ connection: OAuthConnection }> =>\n this.request(\n \"GET\",\n `/v1/oauth/connections/${encodeURIComponent(connectionId)}`,\n ),\n\n /** Update connection metadata or its active status. */\n updateConnection: (\n connectionId: string,\n params: { displayName?: string; isActive?: boolean },\n ): Promise<{ success: boolean; connection: OAuthConnection }> =>\n this.request(\n \"PUT\",\n `/v1/oauth/connections/${encodeURIComponent(connectionId)}`,\n params,\n ),\n\n /**\n * Start an OAuth connect flow. Returns the authorization URL the user\n * must open in a browser to grant access.\n */\n connect: (params: {\n providerKey: string;\n scopes?: string[];\n redirectUri?: string;\n }): Promise<{\n authorizationUrl: string;\n state: string;\n expiresAt: string;\n }> => this.request(\"POST\", \"/v1/oauth/connect\", params),\n\n /** Refresh a connection's access token now. */\n refresh: (connectionId: string): Promise<{ success: boolean }> =>\n this.request(\n \"POST\",\n `/v1/oauth/connections/${encodeURIComponent(connectionId)}/refresh`,\n ),\n\n /** Check whether a connection's token is valid. */\n test: (\n connectionId: string,\n ): Promise<{\n success: boolean;\n status: string;\n accessTokenValid: boolean;\n providerUserEmail?: string;\n error?: string;\n }> =>\n this.request(\n \"GET\",\n `/v1/oauth/connections/${encodeURIComponent(connectionId)}/test`,\n ),\n\n /** Revoke a connection and delete its tokens. */\n revoke: (connectionId: string): Promise<{ success: boolean }> =>\n this.request(\n \"DELETE\",\n `/v1/oauth/connections/${encodeURIComponent(connectionId)}`,\n ),\n };\n }\n\n // ── Tool Keys ─────────────────────────────────────────────────────────────\n\n get toolKeys() {\n return {\n list: (): Promise<{ success: boolean; data: ToolKey[] }> =>\n this.request(\"GET\", \"/v1/tool-keys\"),\n\n create: (\n params: CreateToolKeyParams,\n ): Promise<{ success: boolean; data: ToolKey }> =>\n this.request(\"POST\", \"/v1/tool-keys\", params),\n\n get: (keyId: string): Promise<{ success: boolean; data: ToolKey }> =>\n this.request(\n \"GET\",\n `/v1/tool-keys/${encodeURIComponent(keyId)}`,\n ),\n\n updateMetadata: (\n keyId: string,\n params: {\n displayName?: string;\n description?: string;\n isActive?: boolean;\n expiresAt?: string;\n },\n ): Promise<{ success: boolean; data: ToolKey }> =>\n this.request(\n \"PUT\",\n `/v1/tool-keys/${encodeURIComponent(keyId)}/metadata`,\n params,\n ),\n\n updateValue: (\n keyId: string,\n value: string,\n ): Promise<{ success: boolean; data: unknown }> =>\n this.request(\n \"PUT\",\n `/v1/tool-keys/${encodeURIComponent(keyId)}/value`,\n { value },\n ),\n\n test: (\n keyId: string,\n ): Promise<{ success: boolean; data: unknown }> =>\n this.request(\n \"POST\",\n `/v1/tool-keys/${encodeURIComponent(keyId)}/test`,\n {},\n ),\n\n mapToTool: (params: {\n toolId: string;\n keyId: string;\n contextId: string;\n contextType: \"user\" | \"agent\" | \"global\";\n priority?: number;\n }): Promise<{ success: boolean; data: unknown }> =>\n this.request(\"POST\", \"/v1/tool-keys/map\", params),\n\n removeMapping: (\n mappingId: string,\n ): Promise<{ success: boolean }> =>\n this.request(\n \"DELETE\",\n `/v1/tool-keys/map/${encodeURIComponent(mappingId)}`,\n ),\n\n delete: (keyId: string): Promise<{ success: boolean }> =>\n this.request(\n \"DELETE\",\n `/v1/tool-keys/${encodeURIComponent(keyId)}`,\n ),\n };\n }\n\n // ── Tool Permissions ──────────────────────────────────────────────────────\n\n get toolPermissions() {\n return {\n /** @deprecated Use listForTool with a tool ID. */\n list: (\n toolId: string,\n ): Promise<{ success: boolean; data: ToolPermission[] }> =>\n this.request(\n \"GET\",\n `/v1/tool-permissions/tool/${encodeURIComponent(toolId)}`,\n ),\n\n listForTool: (\n toolId: string,\n ): Promise<{ success: boolean; data: ToolPermission[] }> =>\n this.request(\n \"GET\",\n `/v1/tool-permissions/tool/${encodeURIComponent(toolId)}`,\n ),\n\n listForSubject: (\n subjectId: string,\n subjectType: \"user\" | \"agent\",\n ): Promise<{ success: boolean; data: ToolPermission[] }> => {\n const query = new URLSearchParams({ subjectId, subjectType });\n return this.request(\n \"GET\",\n `/v1/tool-permissions/subject?${query}`,\n );\n },\n\n accessibleTools: (\n subjectId: string,\n subjectType: \"user\" | \"agent\",\n ): Promise<{ success: boolean; data: Tool[] }> => {\n const query = new URLSearchParams({ subjectId, subjectType });\n return this.request(\n \"GET\",\n `/v1/tool-permissions/accessible-tools?${query}`,\n );\n },\n\n grant: (params: {\n toolId: string;\n subjectId: string;\n subjectType: \"user\" | \"agent\";\n permission: \"read\" | \"execute\" | \"admin\";\n grantedBy: string;\n expiresAt?: string;\n }): Promise<{ success: boolean; data: ToolPermission }> =>\n this.request(\"POST\", \"/v1/tool-permissions/grant\", params),\n\n batchGrant: (params: {\n toolId: string;\n subjects: Array<{\n subjectId: string;\n subjectType: \"user\" | \"agent\";\n }>;\n permission: \"read\" | \"execute\" | \"admin\";\n grantedBy: string;\n expiresAt?: string;\n }): Promise<{ success: boolean; data: ToolPermission[] }> =>\n this.request(\"POST\", \"/v1/tool-permissions/batch-grant\", params),\n\n revoke: (permissionId: string): Promise<{ success: boolean }> =>\n this.request(\n \"DELETE\",\n `/v1/tool-permissions/${encodeURIComponent(permissionId)}`,\n ),\n\n check: (params: {\n toolId: string;\n subjectId: string;\n subjectType: \"user\" | \"agent\";\n permission: \"read\" | \"execute\" | \"admin\";\n }): Promise<{ success: boolean; data: { hasPermission: boolean } }> =>\n this.request(\n \"GET\",\n `/v1/tool-permissions/check?${new URLSearchParams(params)}`,\n ),\n\n checkAgentAccess: (\n toolId: string,\n agentId: string,\n userId?: string,\n ): Promise<{ success: boolean; data: unknown }> => {\n const query = new URLSearchParams({ toolId, agentId });\n if (userId) query.set(\"userId\", userId);\n return this.request(\n \"GET\",\n `/v1/tool-permissions/check-agent-access?${query}`,\n );\n },\n\n transferOwnership: (params: {\n toolId: string;\n newOwnerId: string;\n newOwnerType: \"user\" | \"agent\";\n }): Promise<{ success: boolean; data: Tool }> =>\n this.request(\n \"POST\",\n \"/v1/tool-permissions/transfer-ownership\",\n params,\n ),\n };\n }\n\n // ── Skills ────────────────────────────────────────────────────────────────\n\n get skills() {\n return {\n list: (filter?: {\n ownerId?: string;\n ownerType?: string;\n isPublic?: boolean;\n }): Promise<{ data: Skill[] }> => {\n const params = new URLSearchParams();\n if (filter?.ownerId) params.set(\"ownerId\", filter.ownerId);\n if (filter?.ownerType) params.set(\"ownerType\", filter.ownerType);\n if (filter?.isPublic !== undefined)\n params.set(\"isPublic\", String(filter.isPublic));\n const qs = params.toString();\n return this.request(\"GET\", `/v1/skills${qs ? `?${qs}` : \"\"}`);\n },\n\n get: (skillIdOrSlug: string): Promise<{ data: Skill }> =>\n this.request(\"GET\", `/v1/skills/${encodeURIComponent(skillIdOrSlug)}`),\n\n getIndex: (ownerId?: string): Promise<{ data: SkillIndex[] }> => {\n const qs = ownerId ? `?ownerId=${ownerId}` : \"\";\n return this.request(\"GET\", `/v1/skills/index${qs}`);\n },\n\n listForAgent: (agentId: string): Promise<{ data: AgentSkill[] }> =>\n this.request(\"GET\", `/v1/skills/agents/${encodeURIComponent(agentId)}`),\n\n setAgentAvailability: (\n skillIdOrSlug: string,\n agentId: string,\n isEnabled: boolean,\n ): Promise<{ data: unknown }> =>\n this.request(\n \"PUT\",\n `/v1/skills/${encodeURIComponent(skillIdOrSlug)}/agents/${encodeURIComponent(agentId)}`,\n { isEnabled },\n ),\n\n create: (params: CreateSkillParams): Promise<{ data: Skill }> =>\n this.request(\"POST\", \"/v1/skills\", params),\n\n update: (\n skillIdOrSlug: string,\n updates: Partial<CreateSkillParams>,\n ): Promise<{ data: Skill }> =>\n this.request(\n \"PUT\",\n `/v1/skills/${encodeURIComponent(skillIdOrSlug)}`,\n updates,\n ),\n\n delete: (skillIdOrSlug: string): Promise<{ deleted: boolean }> =>\n this.request(\n \"DELETE\",\n `/v1/skills/${encodeURIComponent(skillIdOrSlug)}`,\n ),\n\n import: (\n file: Blob,\n options?: { fileName?: string; agentId?: string },\n ): Promise<{ data: Skill }> => {\n const body = new FormData();\n body.append(\"file\", file, options?.fileName || \"SKILL.md\");\n if (options?.agentId) body.set(\"agentId\", options.agentId);\n return this.request(\"POST\", \"/v1/skills/import\", body);\n },\n };\n }\n\n // ── Capability providers ─────────────────────────────────────────────────\n\n get providers() {\n return {\n list: (): Promise<{\n catalog: Record<CapabilityName, CapabilityProviderDefinition[]>;\n configurations: CapabilityProviderConfiguration[];\n }> => this.request(\"GET\", \"/v1/providers\"),\n\n configure: (\n capability: CapabilityName,\n input: CapabilityProviderInput,\n ): Promise<{ data: CapabilityProviderConfiguration }> =>\n this.request(\n \"PUT\",\n `/v1/providers/${encodeURIComponent(capability)}`,\n input,\n ),\n\n remove: (capability: CapabilityName): Promise<{ deleted: boolean }> =>\n this.request(\n \"DELETE\",\n `/v1/providers/${encodeURIComponent(capability)}`,\n ),\n };\n }\n\n // ── Sandboxed UI plugins ─────────────────────────────────────────────────\n\n get uiPlugins() {\n return {\n list: (activeOnly = false): Promise<{ data: UiPlugin[] }> =>\n this.request(\n \"GET\",\n `/v1/ui-plugins${activeOnly ? \"?active=true\" : \"\"}`,\n ),\n\n getBySlug: (slug: string): Promise<{ data: UiPlugin }> =>\n this.request(\n \"GET\",\n `/v1/ui-plugins/slug/${encodeURIComponent(slug)}`,\n ),\n\n create: (\n input: CreateUiPluginParams,\n ): Promise<{ data: UiPlugin }> =>\n this.request(\"PUT\", \"/v1/ui-plugins\", input),\n\n setStatus: (\n pluginId: string,\n status: \"draft\" | \"active\" | \"disabled\",\n ): Promise<{ data: UiPlugin }> =>\n this.request(\n \"PUT\",\n `/v1/ui-plugins/${encodeURIComponent(pluginId)}/status`,\n { status },\n ),\n\n delete: (pluginId: string): Promise<{ deleted: boolean }> =>\n this.request(\n \"DELETE\",\n `/v1/ui-plugins/${encodeURIComponent(pluginId)}`,\n ),\n };\n }\n\n // ── Wallets ───────────────────────────────────────────────────────────────\n\n get wallets() {\n return {\n /** List all wallets for an agent. */\n list: (agentId: string): Promise<AgentWallet[]> =>\n this.request(\"GET\", `/v1/wallets/agent/${agentId}`),\n\n /** Get the primary active wallet for an agent. */\n primary: (agentId: string): Promise<AgentWallet | null> =>\n this.request(\"GET\", `/v1/wallets/agent/${agentId}/primary`),\n\n /** Get a specific wallet by ID. */\n get: (walletId: string): Promise<AgentWallet> =>\n this.request(\"GET\", `/v1/wallets/${walletId}`),\n\n /** Create a new wallet for an agent. */\n create: (params: CreateWalletParams): Promise<AgentWallet> =>\n this.request(\"POST\", \"/v1/wallets\", params),\n\n /** Get USDC and native token balance for a wallet. */\n balance: (walletId: string): Promise<WalletBalance> =>\n this.request(\"GET\", `/v1/wallets/${walletId}/balance`),\n\n /** Transfer USDC or ETH to another address. */\n transfer: (\n walletId: string,\n params: {\n toAddress: string;\n amount: string;\n tokenSymbol?: \"USDC\" | \"ETH\";\n },\n ): Promise<{ txHash: string }> =>\n this.request(\"POST\", `/v1/wallets/${walletId}/transfer`, params),\n\n /**\n * Proxy an HTTP request through an agent's primary wallet, automatically\n * handling x402 payment challenges. The wallet signs the payment and\n * retries once if the target responds with HTTP 402.\n */\n x402Fetch: (\n agentId: string,\n params: {\n url: string;\n method?: string;\n headers?: Record<string, string>;\n body?: string;\n },\n ): Promise<{ status: number; body: unknown }> =>\n this.request(\"POST\", `/v1/wallets/agent/${agentId}/x402-fetch`, params),\n\n /** Deactivate a wallet. */\n deactivate: (walletId: string): Promise<void> =>\n this.request(\"DELETE\", `/v1/wallets/${walletId}`),\n };\n }\n\n // ── Auth ─────────────────────────────────────────────────────────────────\n\n get auth() {\n return {\n /**\n * GET /v1/auth/me\n *\n * Returns the principalId (wallet address / user ID) and principalType\n * that the current API key belongs to. Use this to auto-detect the\n * initiator without asking the user to type their address manually.\n */\n me: (): Promise<{\n principalId: string | null;\n principalType: string | null;\n }> => this.request(\"GET\", \"/v1/auth/me\"),\n };\n }\n\n // ── Developer projects and project API keys ──────────────────────────────\n\n get developer() {\n return {\n scopes: (): Promise<{ data: string[] }> =>\n this.identityRequest(\"GET\", \"/api/platform/scopes\"),\n\n listProjects: (): Promise<{ data: DeveloperProject[] }> =>\n this.identityRequest(\"GET\", \"/api/platform/projects\"),\n\n createProject: (params: {\n workspaceId: string;\n name: string;\n environment?: DeveloperProjectEnvironment;\n }): Promise<{ data: DeveloperProject }> =>\n this.identityRequest(\"POST\", \"/api/platform/projects\", params),\n\n listApiKeys: (\n projectId: string,\n ): Promise<{ data: DeveloperApiKey[] }> =>\n this.identityRequest(\n \"GET\",\n `/api/platform/projects/${encodeURIComponent(projectId)}/api-keys`,\n ),\n\n createApiKey: (\n projectId: string,\n params: {\n name: string;\n scopes?: string[];\n expiresAt?: string | null;\n },\n ): Promise<{ data: CreatedDeveloperApiKey }> =>\n this.identityRequest(\n \"POST\",\n `/api/platform/projects/${encodeURIComponent(projectId)}/api-keys`,\n params,\n ),\n\n revokeApiKey: (keyId: string): Promise<void> =>\n this.identityRequest(\n \"DELETE\",\n `/api/platform/api-keys/${encodeURIComponent(keyId)}`,\n ),\n };\n }\n\n // ── Legacy principal API keys ─────────────────────────────────────────────\n\n /**\n * Legacy per-principal keys (`sk-ac-*`).\n *\n * New developer integrations should use `client.developer`, which creates\n * project-scoped `csk_*` keys with explicit environments and scopes.\n */\n get apiKeys() {\n return {\n /**\n * Generate a new API key for a principal (user or agent).\n * The plaintext key is returned only in this response — never again.\n */\n create: (params: CreateApiKeyParams): Promise<CreatedApiKey> =>\n this.request(\"POST\", \"/v1/auth/api-keys\", params),\n\n /** List all active API keys for a principal (key values not included). */\n list: (\n principalId: string,\n principalType: ApiKeyPrincipalType,\n ): Promise<ApiKey[]> => {\n const q = new URLSearchParams({\n principalId,\n principalType,\n }).toString();\n return this.request(\"GET\", `/v1/auth/api-keys?${q}`);\n },\n\n /** Revoke (soft-delete) an API key by its UUID. */\n revoke: (id: string): Promise<{ revoked: boolean }> =>\n this.request(\"DELETE\", `/v1/auth/api-keys/${id}`),\n };\n }\n\n // ── SSE Streaming internals ───────────────────────────────────────────────\n\n private async *_streamAgentRun(\n params: RunParams,\n ): AsyncGenerator<StreamEvent> {\n const res = await this._fetch(`${this.baseUrl}/v1/agents/run/stream`, {\n method: \"POST\",\n headers: this.headers(),\n body: JSON.stringify(params),\n });\n\n if (!res.ok) {\n const err = await res.json().catch(() => ({ message: res.statusText }));\n throw new CommonsError(err.message ?? res.statusText, res.status, err);\n }\n\n yield* this._parseEventStream(res);\n }\n\n private async *_streamSse(path: string): AsyncGenerator<StreamEvent> {\n const res = await this._fetch(`${this.baseUrl}${path}`, {\n method: \"GET\",\n headers: this.headers({ Accept: \"text/event-stream\" }),\n });\n\n if (!res.ok) {\n const err = await res.json().catch(() => ({ message: res.statusText }));\n throw new CommonsError(err.message ?? res.statusText, res.status, err);\n }\n\n yield* this._parseEventStream(res);\n }\n\n private async *_parseEventStream(res: Response): AsyncGenerator<StreamEvent> {\n if (!res.body) throw new Error(\"No response body\");\n const reader = res.body.getReader();\n const decoder = new TextDecoder();\n let buffer = \"\";\n\n while (true) {\n const { done, value } = await reader.read();\n if (done) break;\n buffer += decoder.decode(value, { stream: true });\n\n const lines = buffer.split(\"\\n\");\n buffer = lines.pop() ?? \"\";\n\n for (const line of lines) {\n if (line.startsWith(\"data: \")) {\n const raw = line.slice(6).trim();\n if (raw === \"[DONE]\") return;\n try {\n const event = JSON.parse(raw) as StreamEvent;\n if (event.type !== \"keepalive\") yield event;\n if (event.type === \"final\" || event.type === \"completed\") return;\n } catch {\n // Ignore malformed lines\n }\n }\n }\n }\n }\n\n // ── A2A ───────────────────────────────────────────────────────────────────\n\n get a2a() {\n return {\n /** Fetch the A2A Agent Card for an agent. */\n getAgentCard: (agentId: string): Promise<AgentCard> =>\n this.request(\"GET\", `/.well-known/agent.json?agentId=${agentId}`),\n\n /** Send a task to an agent (synchronous, waits for completion). */\n sendTask: (\n agentId: string,\n params: A2ASendTaskParams,\n ): Promise<A2ATask> =>\n this.request(\"POST\", `/v1/a2a/${agentId}`, {\n jsonrpc: \"2.0\",\n id: params.id ?? `sdk-${Date.now()}`,\n method: \"tasks/send\",\n params,\n }).then((r: any) => r.result as A2ATask),\n\n /** Get A2A task status. */\n getTask: (agentId: string, taskId: string): Promise<A2ATask> =>\n this.request(\"POST\", `/v1/a2a/${agentId}`, {\n jsonrpc: \"2.0\",\n id: taskId,\n method: \"tasks/get\",\n params: { id: taskId },\n }).then((r: any) => r.result as A2ATask),\n\n /** Cancel a running A2A task. */\n cancelTask: (agentId: string, taskId: string): Promise<A2ATask> =>\n this.request(\"POST\", `/v1/a2a/${agentId}`, {\n jsonrpc: \"2.0\",\n id: taskId,\n method: \"tasks/cancel\",\n params: { id: taskId },\n }).then((r: any) => r.result as A2ATask),\n\n /** List recent A2A tasks for an agent. */\n listTasks: (\n agentId: string,\n limit?: number,\n ): Promise<{ tasks: A2ATask[]; total: number }> =>\n this.request(\n \"GET\",\n `/v1/a2a/${agentId}/tasks${limit ? `?limit=${limit}` : \"\"}`,\n ),\n\n /** Stream A2A task updates (SSE). */\n stream: (agentId: string, taskId: string): AsyncGenerator<StreamEvent> =>\n this._streamSse(`/v1/a2a/${agentId}/tasks/${taskId}/stream`),\n };\n }\n\n // ── MCP ───────────────────────────────────────────────────────────────────\n\n get mcp() {\n return {\n /** List MCP servers for an owner. */\n listServers: (\n ownerId: string,\n ownerType: \"user\" | \"agent\",\n ): Promise<{ servers: McpServer[]; total: number }> =>\n this.request(\n \"GET\",\n `/v1/mcp/servers?ownerId=${ownerId}&ownerType=${ownerType}`,\n ),\n\n /** Create a new MCP server. */\n createServer: (params: {\n name: string;\n description?: string;\n connectionType: McpConnectionType;\n connectionConfig: Record<string, any>;\n isPublic?: boolean;\n tags?: string[];\n ownerId: string;\n ownerType: \"user\" | \"agent\";\n }): Promise<McpServer> => {\n const { ownerId, ownerType, ...dto } = params;\n return this.request(\n \"POST\",\n `/v1/mcp/servers?ownerId=${ownerId}&ownerType=${ownerType}`,\n dto,\n );\n },\n\n /** Get MCP server by ID. */\n getServer: (serverId: string): Promise<McpServer> =>\n this.request(\"GET\", `/v1/mcp/servers/${serverId}`),\n\n /** Update an MCP server's configuration. */\n updateServer: (\n serverId: string,\n params: Partial<{\n name: string;\n description: string;\n connectionConfig: Record<string, any>;\n isPublic: boolean;\n tags: string[];\n }>,\n ): Promise<McpServer> =>\n this.request(\"PUT\", `/v1/mcp/servers/${serverId}`, params),\n\n /** Delete an MCP server. */\n deleteServer: (serverId: string): Promise<void> =>\n this.request(\"DELETE\", `/v1/mcp/servers/${serverId}`),\n\n /** List public MCP servers (marketplace). */\n getMarketplace: (): Promise<{ servers: McpServer[]; total: number }> =>\n this.request(\"GET\", \"/v1/mcp/servers/marketplace\"),\n\n /** Get connection status for an MCP server. */\n getServerStatus: (\n serverId: string,\n ): Promise<{\n connected: boolean;\n capabilities: string[];\n toolsDiscovered: number;\n lastConnectedAt: Date | null;\n lastError: string | null;\n }> => this.request(\"GET\", `/v1/mcp/servers/${serverId}/status`),\n\n /** Connect to an MCP server. */\n connect: (serverId: string): Promise<{ connected: boolean }> =>\n this.request(\"POST\", `/v1/mcp/servers/${serverId}/connect`),\n\n /** Disconnect from an MCP server. */\n disconnect: (serverId: string): Promise<void> =>\n this.request(\"POST\", `/v1/mcp/servers/${serverId}/disconnect`),\n\n /** Sync tools + resources + prompts from the MCP server. */\n sync: (\n serverId: string,\n ): Promise<{\n toolsDiscovered: number;\n resourcesDiscovered: number;\n promptsDiscovered: number;\n }> => this.request(\"POST\", `/v1/mcp/servers/${serverId}/sync`, {}),\n\n /** List tools discovered from an MCP server. */\n listTools: (serverId: string): Promise<{ tools: any[]; total: number }> =>\n this.request(\"GET\", `/v1/mcp/servers/${serverId}/tools`),\n\n /** List all MCP tools across all servers for a given owner. */\n listToolsByOwner: (\n ownerId: string,\n ownerType: \"user\" | \"agent\",\n ): Promise<{ tools: any[] }> =>\n this.request(\n \"GET\",\n `/v1/mcp/tools?ownerId=${ownerId}&ownerType=${ownerType}`,\n ),\n\n /** List resources from an MCP server. */\n listResources: (\n serverId: string,\n ): Promise<{ resources: McpResource[]; total: number }> =>\n this.request(\"GET\", `/v1/mcp/servers/${serverId}/resources`),\n\n /** Read a resource by URI. */\n readResource: (\n serverId: string,\n uri: string,\n ): Promise<{ uri: string; contents: any }> =>\n this.request(\n \"GET\",\n `/v1/mcp/servers/${serverId}/resources/read?uri=${encodeURIComponent(uri)}`,\n ),\n\n /** List prompts from an MCP server. */\n listPrompts: (\n serverId: string,\n ): Promise<{ prompts: McpPrompt[]; total: number }> =>\n this.request(\"GET\", `/v1/mcp/servers/${serverId}/prompts`),\n\n /** Render a prompt with arguments. */\n getPrompt: (\n serverId: string,\n promptName: string,\n args?: Record<string, string>,\n ): Promise<{ description?: string; messages: any[] }> =>\n this.request(\n \"POST\",\n `/v1/mcp/servers/${serverId}/prompts/${promptName}`,\n { arguments: args },\n ),\n };\n }\n\n // ── Memory ────────────────────────────────────────────────────────────────\n\n get memory() {\n return {\n /** List all memories for an agent. */\n list: (\n agentId: string,\n opts?: { type?: MemoryType; limit?: number },\n ): Promise<{ data: AgentMemory[] }> => {\n const params = new URLSearchParams();\n if (opts?.type) params.set(\"type\", opts.type);\n if (opts?.limit) params.set(\"limit\", String(opts.limit));\n const qs = params.toString();\n return this.request(\n \"GET\",\n `/v1/memory/agents/${agentId}${qs ? `?${qs}` : \"\"}`,\n );\n },\n\n /** Get memory stats for an agent. */\n stats: (agentId: string): Promise<{ data: MemoryStats }> =>\n this.request(\"GET\", `/v1/memory/agents/${agentId}/stats`),\n\n /** Retrieve memories most relevant to a query. */\n retrieve: (\n agentId: string,\n query: string,\n limit?: number,\n ): Promise<{ data: AgentMemory[] }> => {\n const params = new URLSearchParams({ q: query });\n if (limit) params.set(\"limit\", String(limit));\n return this.request(\n \"GET\",\n `/v1/memory/agents/${agentId}/retrieve?${params}`,\n );\n },\n\n /** Get a single memory by ID. */\n get: (memoryId: string): Promise<{ data: AgentMemory }> =>\n this.request(\"GET\", `/v1/memory/${memoryId}`),\n\n /** Manually create a memory. */\n create: (params: CreateMemoryParams): Promise<{ data: AgentMemory }> =>\n this.request(\"POST\", \"/v1/memory\", params),\n\n /** Update a memory. */\n update: (\n memoryId: string,\n params: UpdateMemoryParams,\n ): Promise<{ data: AgentMemory }> =>\n this.request(\"PATCH\", `/v1/memory/${memoryId}`, params),\n\n /** Soft-delete (deactivate) a memory. */\n delete: (memoryId: string): Promise<void> =>\n this.request(\"DELETE\", `/v1/memory/${memoryId}`),\n\n /** Create an append-only memory scope shared by a set of owned agents. */\n createSharedScope: (\n params: CreateSharedMemoryScopeParams,\n ): Promise<{ data: SharedMemoryScope }> =>\n this.request(\"POST\", \"/v1/memory/shared-scopes\", params),\n\n /** List shared-memory scopes available to an agent. */\n listSharedScopes: (\n agentId: string,\n ): Promise<{ data: SharedMemoryScope[] }> =>\n this.request(\"GET\", `/v1/memory/shared-scopes/agents/${agentId}`),\n };\n }\n\n // ── Usage / Observability ─────────────────────────────────────────────────\n\n get usage() {\n return {\n /** Get aggregated token + cost usage for an agent. */\n getAgentUsage: (\n agentId: string,\n opts?: { from?: string; to?: string },\n ): Promise<{ data: UsageAggregation }> => {\n const params = new URLSearchParams();\n if (opts?.from) params.set(\"from\", opts.from);\n if (opts?.to) params.set(\"to\", opts.to);\n const qs = params.toString();\n return this.request(\n \"GET\",\n `/v1/usage/agents/${agentId}${qs ? `?${qs}` : \"\"}`,\n );\n },\n\n /** Get aggregated token + cost usage for a session. */\n getSessionUsage: (\n sessionId: string,\n ): Promise<{ data: UsageAggregation }> =>\n this.request(\"GET\", `/v1/usage/sessions/${sessionId}`),\n };\n }\n\n // ── Activity and logs ────────────────────────────────────────────────────\n\n get activity() {\n return {\n list: (filter?: {\n actorId?: string;\n eventType?: string;\n since?: string;\n limit?: number;\n }): Promise<{ data: ActivityEvent[] }> => {\n const query = new URLSearchParams();\n if (filter?.actorId) query.set(\"actorId\", filter.actorId);\n if (filter?.eventType) query.set(\"eventType\", filter.eventType);\n if (filter?.since) query.set(\"since\", filter.since);\n if (filter?.limit) query.set(\"limit\", String(filter.limit));\n return this.request(\n \"GET\",\n `/v1/activity/events${query.size ? `?${query}` : \"\"}`,\n );\n },\n };\n }\n\n get logs() {\n return {\n list: (\n agentId: string,\n filter?: { sessionId?: string; limit?: number },\n ): Promise<{ data: AgentLog[] }> => {\n const query = new URLSearchParams();\n if (filter?.sessionId) query.set(\"sessionId\", filter.sessionId);\n if (filter?.limit) query.set(\"limit\", String(filter.limit));\n return this.request(\n \"GET\",\n `/v1/logs/agents/${encodeURIComponent(agentId)}${query.size ? `?${query}` : \"\"}`,\n );\n },\n\n observability: (\n agentId: string,\n filter?: { from?: string; to?: string; limit?: number },\n ): Promise<Record<string, unknown>> => {\n const query = new URLSearchParams();\n if (filter?.from) query.set(\"from\", filter.from);\n if (filter?.to) query.set(\"to\", filter.to);\n if (filter?.limit) query.set(\"limit\", String(filter.limit));\n return this.request(\n \"GET\",\n `/v1/logs/agents/${encodeURIComponent(agentId)}/observability${query.size ? `?${query}` : \"\"}`,\n );\n },\n };\n }\n\n // ── Files and library ────────────────────────────────────────────────────\n\n get files() {\n return {\n upload: (\n files: UploadFileInput[],\n params?: {\n agentId?: string;\n sessionId?: string;\n workspaceId?: string;\n storageProvider?: \"s3\" | \"ipfs\";\n },\n ): Promise<{ data: FileArtifact[] }> => {\n const body = new FormData();\n for (const file of files) {\n body.append(\"files\", file.data, file.name);\n }\n if (params?.agentId) body.set(\"agentId\", params.agentId);\n if (params?.sessionId) body.set(\"sessionId\", params.sessionId);\n if (params?.workspaceId) body.set(\"workspaceId\", params.workspaceId);\n if (params?.storageProvider)\n body.set(\"storageProvider\", params.storageProvider);\n return this.request(\"POST\", \"/v1/files/upload\", body);\n },\n\n get: (\n fileId: string,\n context?: { agentId?: string; sessionId?: string },\n ): Promise<{ data: FileArtifact }> => {\n const query = new URLSearchParams();\n if (context?.agentId) query.set(\"agentId\", context.agentId);\n if (context?.sessionId) query.set(\"sessionId\", context.sessionId);\n return this.request(\n \"GET\",\n `/v1/files/${encodeURIComponent(fileId)}${query.size ? `?${query}` : \"\"}`,\n );\n },\n\n content: (\n fileId: string,\n options?: {\n agentId?: string;\n sessionId?: string;\n offset?: number;\n maxChars?: number;\n includeImageUrls?: boolean;\n includeDownloadUrl?: boolean;\n },\n ): Promise<{ data: FileContent }> => {\n const query = new URLSearchParams();\n if (options?.agentId) query.set(\"agentId\", options.agentId);\n if (options?.sessionId) query.set(\"sessionId\", options.sessionId);\n if (options?.offset !== undefined)\n query.set(\"offset\", String(options.offset));\n if (options?.maxChars !== undefined)\n query.set(\"maxChars\", String(options.maxChars));\n if (options?.includeImageUrls !== undefined)\n query.set(\"includeImageUrls\", String(options.includeImageUrls));\n if (options?.includeDownloadUrl !== undefined)\n query.set(\"includeDownloadUrl\", String(options.includeDownloadUrl));\n return this.request(\n \"GET\",\n `/v1/files/${encodeURIComponent(fileId)}/content${query.size ? `?${query}` : \"\"}`,\n );\n },\n };\n }\n\n get library() {\n return {\n list: (filter?: {\n query?: string;\n view?: string;\n source?: string;\n favorite?: boolean;\n sessionId?: string;\n agentId?: string;\n limit?: number;\n offset?: number;\n }): Promise<{ data: LibraryItem[]; total?: number }> => {\n const query = new URLSearchParams();\n if (filter?.query) query.set(\"query\", filter.query);\n if (filter?.view) query.set(\"view\", filter.view);\n if (filter?.source) query.set(\"source\", filter.source);\n if (filter?.favorite !== undefined)\n query.set(\"favorite\", String(filter.favorite));\n if (filter?.sessionId) query.set(\"sessionId\", filter.sessionId);\n if (filter?.agentId) query.set(\"agentId\", filter.agentId);\n if (filter?.limit !== undefined)\n query.set(\"limit\", String(filter.limit));\n if (filter?.offset !== undefined)\n query.set(\"offset\", String(filter.offset));\n return this.request(\n \"GET\",\n `/v1/library${query.size ? `?${query}` : \"\"}`,\n );\n },\n\n get: (itemId: string): Promise<{ data: LibraryItem }> =>\n this.request(\n \"GET\",\n `/v1/library/${encodeURIComponent(itemId)}`,\n ),\n\n download: (itemId: string): Promise<Record<string, unknown>> =>\n this.request(\n \"GET\",\n `/v1/library/${encodeURIComponent(itemId)}/download`,\n ),\n\n preview: (itemId: string): Promise<Record<string, unknown>> =>\n this.request(\n \"GET\",\n `/v1/library/${encodeURIComponent(itemId)}/preview`,\n ),\n\n update: (\n itemId: string,\n params: {\n name?: string;\n description?: string;\n isFavorite?: boolean;\n },\n ): Promise<{ data: LibraryItem }> =>\n this.request(\n \"PATCH\",\n `/v1/library/${encodeURIComponent(itemId)}`,\n params,\n ),\n\n delete: (itemId: string): Promise<{ success?: boolean }> =>\n this.request(\n \"DELETE\",\n `/v1/library/${encodeURIComponent(itemId)}`,\n ),\n\n storagePreference: (): Promise<{\n data?: { defaultStorageProvider: \"s3\" | \"ipfs\" };\n defaultStorageProvider?: \"s3\" | \"ipfs\";\n }> => this.request(\"GET\", \"/v1/library/preferences/storage\"),\n\n setStoragePreference: (\n defaultStorageProvider: \"s3\" | \"ipfs\",\n ): Promise<{\n data?: { defaultStorageProvider: \"s3\" | \"ipfs\" };\n defaultStorageProvider?: \"s3\" | \"ipfs\";\n }> =>\n this.request(\"PATCH\", \"/v1/library/preferences/storage\", {\n defaultStorageProvider,\n }),\n\n grant: (\n itemId: string,\n params: {\n subjectType: \"user\" | \"agent\" | \"workspace\";\n subjectId: string;\n permission?: \"read\" | \"edit\" | \"manage\";\n expiresAt?: string | null;\n },\n ): Promise<{ data: LibraryGrant }> =>\n this.request(\n \"POST\",\n `/v1/library/${encodeURIComponent(itemId)}/grants`,\n params,\n ),\n\n revokeGrant: (\n itemId: string,\n grantId: string,\n ): Promise<{ success?: boolean }> =>\n this.request(\n \"DELETE\",\n `/v1/library/${encodeURIComponent(itemId)}/grants/${encodeURIComponent(grantId)}`,\n ),\n\n createShareLink: (\n itemId: string,\n expiresAt?: string | null,\n ): Promise<{ data: LibraryShareLink }> =>\n this.request(\n \"POST\",\n `/v1/library/${encodeURIComponent(itemId)}/share-links`,\n { expiresAt },\n ),\n\n revokeShareLink: (\n itemId: string,\n shareId: string,\n ): Promise<{ success?: boolean }> =>\n this.request(\n \"DELETE\",\n `/v1/library/${encodeURIComponent(itemId)}/share-links/${encodeURIComponent(shareId)}`,\n ),\n\n resolveShare: (token: string): Promise<{ data: LibraryItem }> =>\n this.request(\n \"GET\",\n `/v1/shared/artifacts/${encodeURIComponent(token)}`,\n ),\n };\n }\n\n // ── Spaces, projects, and goals ──────────────────────────────────────────\n\n get spaces() {\n return {\n list: (filter?: {\n memberId?: string;\n memberType?: \"agent\" | \"human\";\n agentIds?: string[];\n publicOnly?: boolean;\n search?: string;\n includeMembers?: boolean;\n limit?: number;\n offset?: number;\n }): Promise<{\n data: Space[];\n total?: number;\n limit?: number;\n offset?: number;\n }> => {\n const query = new URLSearchParams();\n if (filter?.memberId) query.set(\"memberId\", filter.memberId);\n if (filter?.memberType) query.set(\"memberType\", filter.memberType);\n if (filter?.agentIds?.length)\n query.set(\"agentIds\", filter.agentIds.join(\",\"));\n if (filter?.publicOnly !== undefined)\n query.set(\"publicOnly\", String(filter.publicOnly));\n if (filter?.search) query.set(\"search\", filter.search);\n if (filter?.includeMembers !== undefined)\n query.set(\"includeMembers\", String(filter.includeMembers));\n if (filter?.limit !== undefined)\n query.set(\"limit\", String(filter.limit));\n if (filter?.offset !== undefined)\n query.set(\"offset\", String(filter.offset));\n return this.request(\n \"GET\",\n `/v1/spaces${query.size ? `?${query}` : \"\"}`,\n );\n },\n\n create: (\n params: {\n name: string;\n description?: string;\n sessionId?: string;\n isPublic?: boolean;\n maxMembers?: number;\n image?: string;\n settings?: Record<string, unknown>;\n },\n creator: { id: string; type: \"agent\" | \"human\" },\n ): Promise<{ data: Space }> =>\n this.request(\"POST\", \"/v1/spaces\", params, {\n headers: {\n \"x-creator-id\": creator.id,\n \"x-creator-type\": creator.type,\n },\n }),\n\n get: (spaceId: string): Promise<{ data: Space }> =>\n this.request(\n \"GET\",\n `/v1/spaces/${encodeURIComponent(spaceId)}`,\n ),\n\n getFull: (spaceId: string): Promise<{ data: Space }> =>\n this.request(\n \"GET\",\n `/v1/spaces/${encodeURIComponent(spaceId)}/full`,\n ),\n\n update: (\n spaceId: string,\n params: Partial<{\n name: string;\n description: string;\n sessionId: string;\n isPublic: boolean;\n maxMembers: number;\n image: string;\n settings: Record<string, unknown>;\n }>,\n ): Promise<{ data: Space }> =>\n this.request(\n \"PUT\",\n `/v1/spaces/${encodeURIComponent(spaceId)}`,\n params,\n ),\n\n delete: (spaceId: string): Promise<{ success?: boolean }> =>\n this.request(\n \"DELETE\",\n `/v1/spaces/${encodeURIComponent(spaceId)}`,\n ),\n\n issueRtcTicket: (\n spaceId: string,\n ): Promise<{ data: { ticket: string } }> =>\n this.request(\n \"POST\",\n `/v1/spaces/${encodeURIComponent(spaceId)}/rtc-ticket`,\n {},\n ),\n\n listMembers: (\n spaceId: string,\n ): Promise<{ data: SpaceMember[] }> =>\n this.request(\n \"GET\",\n `/v1/spaces/${encodeURIComponent(spaceId)}/members`,\n ),\n\n addMember: (\n spaceId: string,\n params: {\n memberId: string;\n memberType: \"agent\" | \"human\";\n role?: string;\n permissions?: Record<string, unknown>;\n },\n ): Promise<{ data: SpaceMember }> =>\n this.request(\n \"POST\",\n `/v1/spaces/${encodeURIComponent(spaceId)}/members`,\n params,\n ),\n\n updateMember: (\n spaceId: string,\n memberId: string,\n memberType: \"agent\" | \"human\",\n params: {\n role?: string;\n permissions?: Record<string, unknown>;\n status?: string;\n },\n ): Promise<{ data: SpaceMember }> =>\n this.request(\n \"PUT\",\n `/v1/spaces/${encodeURIComponent(spaceId)}/members/${encodeURIComponent(memberId)}?memberType=${memberType}`,\n params,\n ),\n\n removeMember: (\n spaceId: string,\n memberId: string,\n memberType: \"agent\" | \"human\",\n ): Promise<{ success?: boolean }> =>\n this.request(\n \"DELETE\",\n `/v1/spaces/${encodeURIComponent(spaceId)}/members/${encodeURIComponent(memberId)}?memberType=${memberType}`,\n ),\n\n listMessages: (\n spaceId: string,\n filter?: { limit?: number; offset?: number; memberId?: string },\n ): Promise<{ data: SpaceMessage[] }> => {\n const query = new URLSearchParams();\n if (filter?.limit !== undefined)\n query.set(\"limit\", String(filter.limit));\n if (filter?.offset !== undefined)\n query.set(\"offset\", String(filter.offset));\n if (filter?.memberId) query.set(\"memberId\", filter.memberId);\n return this.request(\n \"GET\",\n `/v1/spaces/${encodeURIComponent(spaceId)}/messages${query.size ? `?${query}` : \"\"}`,\n );\n },\n\n sendMessage: (\n spaceId: string,\n params: {\n content: string;\n targetType?: \"broadcast\" | \"direct\" | \"group\";\n targetIds?: string[];\n messageType?: string;\n metadata?: Record<string, unknown>;\n sessionId?: string;\n },\n sender: { id: string; type: \"agent\" | \"human\" },\n ): Promise<{ data: SpaceMessage }> =>\n this.request(\n \"POST\",\n `/v1/spaces/${encodeURIComponent(spaceId)}/messages`,\n params,\n {\n headers: {\n \"x-sender-id\": sender.id,\n \"x-sender-type\": sender.type,\n },\n },\n ),\n\n updateMessage: (\n spaceId: string,\n messageId: string,\n params: { content?: string; metadata?: Record<string, unknown> },\n ): Promise<{ data: SpaceMessage }> =>\n this.request(\n \"PUT\",\n `/v1/spaces/${encodeURIComponent(spaceId)}/messages/${encodeURIComponent(messageId)}`,\n params,\n ),\n\n deleteMessage: (\n spaceId: string,\n messageId: string,\n ): Promise<{ success?: boolean }> =>\n this.request(\n \"DELETE\",\n `/v1/spaces/${encodeURIComponent(spaceId)}/messages/${encodeURIComponent(messageId)}`,\n ),\n };\n }\n\n get projects() {\n const base = (agentId: string) =>\n `/v1/agents/${encodeURIComponent(agentId)}/projects`;\n return {\n list: (agentId: string): Promise<{ data: CodeProject[] }> =>\n this.request(\"GET\", base(agentId)),\n\n create: (\n agentId: string,\n params: {\n name: string;\n description?: string;\n sessionId?: string;\n files?: CodeProjectFile[];\n },\n ): Promise<{ data: CodeProject }> =>\n this.request(\"POST\", base(agentId), params),\n\n get: (\n agentId: string,\n projectId: string,\n ): Promise<{ data: CodeProject }> =>\n this.request(\n \"GET\",\n `${base(agentId)}/${encodeURIComponent(projectId)}`,\n ),\n\n writeFiles: (\n agentId: string,\n projectId: string,\n files: CodeProjectFile[],\n replace = false,\n ): Promise<{ data: CodeProject }> =>\n this.request(\n \"PUT\",\n `${base(agentId)}/${encodeURIComponent(projectId)}/files`,\n { files, replace },\n ),\n\n publish: (\n agentId: string,\n projectId: string,\n ): Promise<{ data: Record<string, unknown> }> =>\n this.request(\n \"POST\",\n `${base(agentId)}/${encodeURIComponent(projectId)}/publish`,\n {},\n ),\n\n verify: (\n agentId: string,\n projectId: string,\n actions?: Array<Record<string, unknown>>,\n ): Promise<{ data: Record<string, unknown> }> =>\n this.request(\n \"POST\",\n `${base(agentId)}/${encodeURIComponent(projectId)}/verify`,\n { actions },\n ),\n\n exportToComputer: (\n agentId: string,\n projectId: string,\n params?: { directory?: string; sessionId?: string },\n ): Promise<{ data: Record<string, unknown> }> =>\n this.request(\n \"POST\",\n `${base(agentId)}/${encodeURIComponent(projectId)}/export`,\n params ?? {},\n ),\n\n exportToGitHub: (\n agentId: string,\n projectId: string,\n params?: { repositoryName?: string; private?: boolean },\n ): Promise<{ data: Record<string, unknown> }> =>\n this.request(\n \"POST\",\n `${base(agentId)}/${encodeURIComponent(projectId)}/github`,\n params ?? {},\n ),\n };\n }\n\n get goals() {\n return {\n create: (\n params: Record<string, unknown>,\n ): Promise<{ data: Goal }> =>\n this.request(\"POST\", \"/v1/goals\", params),\n\n get: (goalId: string): Promise<{ data: Goal }> =>\n this.request(\"GET\", `/v1/goals/${encodeURIComponent(goalId)}`),\n\n updateProgress: (\n goalId: string,\n progress: number,\n status: Goal[\"status\"],\n ): Promise<{ data: Goal }> =>\n this.request(\n \"PUT\",\n `/v1/goals/${encodeURIComponent(goalId)}`,\n { progress, status },\n ),\n };\n }\n\n // ── Audio and liaison agents ─────────────────────────────────────────────\n\n get audio() {\n return {\n transcribe: (\n file: UploadFileInput,\n options?: {\n durationMs?: number;\n idempotencyKey?: string;\n },\n ): Promise<{ data: { text: string } }> => {\n const body = new FormData();\n body.append(\"file\", file.data, file.name);\n if (options?.durationMs !== undefined)\n body.set(\"durationMs\", String(options.durationMs));\n return this.request(\"POST\", \"/v1/audio/transcriptions\", body, {\n headers: options?.idempotencyKey\n ? { \"x-idempotency-key\": options.idempotencyKey }\n : undefined,\n });\n },\n };\n }\n\n get liaisons() {\n return {\n create: (params: {\n name: string;\n owner: string;\n externalOwner: string;\n persona?: string;\n instructions?: string;\n externalUrl?: string;\n externalEndpoint?: string;\n }): Promise<{ data: Agent; liaisonKey: string; note: string }> =>\n this.request(\"POST\", \"/v1/liaison\", params),\n\n interact: (\n liaisonAgentId: string,\n liaisonKey: string,\n message?: string,\n ): Promise<{ data: unknown }> =>\n this.request(\n \"POST\",\n \"/v1/liaison/interact\",\n { liaisonAgentId, message },\n { headers: { \"x-api-key\": liaisonKey } },\n ),\n };\n }\n\n // ── Credits ──────────────────────────────────────────────────────────────\n\n get credits() {\n return {\n balance: (filter?: {\n principalId?: string;\n workspaceId?: string;\n }): Promise<{ data: CreditBalance }> => {\n const params = new URLSearchParams();\n if (filter?.principalId) params.set(\"principalId\", filter.principalId);\n if (filter?.workspaceId) params.set(\"workspaceId\", filter.workspaceId);\n const qs = params.toString();\n return this.request(\"GET\", `/v1/credits/balance${qs ? `?${qs}` : \"\"}`);\n },\n\n ledger: (filter?: {\n principalId?: string;\n workspaceId?: string;\n limit?: number;\n }): Promise<{ data: CreditLedgerEntry[] }> => {\n const params = new URLSearchParams();\n if (filter?.principalId) params.set(\"principalId\", filter.principalId);\n if (filter?.workspaceId) params.set(\"workspaceId\", filter.workspaceId);\n if (filter?.limit) params.set(\"limit\", String(filter.limit));\n const qs = params.toString();\n return this.request(\"GET\", `/v1/credits/ledger${qs ? `?${qs}` : \"\"}`);\n },\n\n summary: (): Promise<{ data: CreditSummary }> =>\n this.request(\"GET\", \"/v1/credits/summary\"),\n\n campaigns: (): Promise<{ data: CreditCampaign[] }> =>\n this.request(\"GET\", \"/v1/credits/campaigns\"),\n\n claimCampaign: (params: {\n campaignKey: string;\n eventId?: string;\n }): Promise<{ data: { alreadyClaimed: boolean } }> =>\n this.request(\"POST\", \"/v1/credits/campaigns/claim\", params),\n\n transfers: (): Promise<{ data: CreditTransfer[] }> =>\n this.request(\"GET\", \"/v1/credits/transfers\"),\n\n gift: (params: {\n recipientPrincipalId: string;\n amount: number;\n message?: string;\n idempotencyKey: string;\n }): Promise<{ data: CreditTransfer }> =>\n this.request(\"POST\", \"/v1/credits/gifts\", params),\n\n grant: (\n params: CreditWriteParams,\n ): Promise<{ data: CreditLedgerEntry }> =>\n this.request(\"POST\", \"/v1/credits/grants\", params),\n\n debit: (\n params: CreditWriteParams,\n ): Promise<{ data: CreditLedgerEntry }> =>\n this.request(\"POST\", \"/v1/credits/debits\", params),\n };\n }\n\n // ── Billing ────────────────────────────────────────────────────────────────\n\n get billing() {\n return {\n /** Public product catalog served from the backend source of truth. */\n catalog: (): Promise<{ data: BillingCatalog }> =>\n this.request(\"GET\", \"/v1/billing/catalog\"),\n\n /** Current plan, status, and entitlements for the caller. */\n subscription: (): Promise<{ data: SubscriptionInfo }> =>\n this.request(\"GET\", \"/v1/billing/subscription\"),\n\n /** Entitlements only (what paid features the caller may use). */\n entitlements: (): Promise<{ data: PlanEntitlements }> =>\n this.request(\"GET\", \"/v1/billing/entitlements\"),\n\n /** Stripe invoice history for the caller. */\n invoices: (): Promise<{ data: BillingInvoice[] }> =>\n this.request(\"GET\", \"/v1/billing/invoices\"),\n\n /** Saved Stripe payment methods for the caller. */\n paymentMethods: (): Promise<{ data: BillingPaymentMethod[] }> =>\n this.request(\"GET\", \"/v1/billing/payment-methods\"),\n\n /** Create a Stripe Checkout session for a subscription plan. */\n subscribe: (\n planKey: \"plus\" | \"pro\" | \"max\",\n ): Promise<{ data: { url: string } }> =>\n this.request(\"POST\", \"/v1/billing/checkout/subscription\", { planKey }),\n\n /** Create a Stripe Checkout session for a one-time credit top-up. */\n topup: (packKey: string): Promise<{ data: { url: string } }> =>\n this.request(\"POST\", \"/v1/billing/checkout/topup\", { packKey }),\n\n /** Open the Stripe billing portal. */\n portal: (): Promise<{ data: { url: string } }> =>\n this.request(\"POST\", \"/v1/billing/portal\", {}),\n };\n }\n\n // ── Feature flags ────────────────────────────────────────────────────────\n\n get flags() {\n return {\n /** Evaluate all active flags for the caller (call once at boot). */\n all: (): Promise<{ data: Record<string, FlagEvaluation> }> =>\n this.request(\"GET\", \"/v1/flags\"),\n\n /** Evaluate a single flag for the caller. */\n evaluate: (key: string): Promise<{ data: FlagEvaluation }> =>\n this.request(\"GET\", `/v1/flags/${encodeURIComponent(key)}`),\n };\n }\n}\n\n// ─── Error ────────────────────────────────────────────────────────────────────\n\nexport class CommonsError extends Error {\n constructor(\n message: string,\n public readonly status: number,\n public readonly data?: unknown,\n ) {\n super(message);\n this.name = \"CommonsError\";\n }\n}\n","import type { CreateToolParams, WorkflowDefinition } from './types';\n\nexport type WorkflowTemplateName =\n | 'country-weather-brief'\n | 'agent-research-summary'\n | 'multi-agent-field-report'\n | 'workflow-invocation-smoke';\n\nexport interface WorkflowTemplateContext {\n ownerId: string;\n prefix: string;\n agentId?: string;\n reviewerAgentId?: string;\n childWorkflowId?: string;\n}\n\nexport interface WorkflowTemplateTool {\n key: string;\n payload: CreateToolParams;\n}\n\nexport interface WorkflowTemplateBuild {\n name: string;\n description: string;\n tags: string[];\n category: string;\n tools: WorkflowTemplateTool[];\n buildDefinition: (toolIds: Record<string, string>, ctx: WorkflowTemplateContext) => WorkflowDefinition;\n sampleInput: Record<string, any>;\n}\n\nfunction toolName(prefix: string, name: string) {\n return `${prefix}_${name}`.replace(/[^a-zA-Z0-9_]/g, '_');\n}\n\nfunction functionTool(params: {\n name: string;\n displayName: string;\n description: string;\n properties: Record<string, any>;\n required?: string[];\n apiSpec: CreateToolParams['apiSpec'];\n tags: string[];\n}): CreateToolParams {\n return {\n name: params.name,\n displayName: params.displayName,\n description: params.description,\n visibility: 'private',\n ownerType: 'user',\n category: 'public-api',\n tags: params.tags,\n schema: {\n type: 'function',\n function: {\n name: params.name,\n description: params.description,\n parameters: {\n type: 'object',\n properties: params.properties,\n required: params.required ?? [],\n },\n },\n },\n apiSpec: params.apiSpec,\n };\n}\n\nexport function listWorkflowTemplates() {\n return [\n {\n name: 'country-weather-brief',\n description: 'Tool-only workflow using countries.dev and Open-Meteo.',\n },\n {\n name: 'agent-research-summary',\n description: 'Multi-tool workflow with an agent_processor summarization step.',\n },\n {\n name: 'multi-agent-field-report',\n description: 'Multi-tool workflow with two agent_processor nodes.',\n },\n {\n name: 'workflow-invocation-smoke',\n description: 'Parent workflow that invokes another workflow as a workflow node.',\n },\n ] as const;\n}\n\nexport function buildWorkflowTemplate(\n templateName: WorkflowTemplateName,\n ctx: WorkflowTemplateContext,\n): WorkflowTemplateBuild {\n switch (templateName) {\n case 'country-weather-brief':\n return countryWeatherBrief(ctx);\n case 'agent-research-summary':\n return agentResearchSummary(ctx);\n case 'multi-agent-field-report':\n return multiAgentFieldReport(ctx);\n case 'workflow-invocation-smoke':\n return workflowInvocationSmoke(ctx);\n }\n}\n\nfunction sharedTools(ctx: WorkflowTemplateContext) {\n const countryLookup = functionTool({\n name: toolName(ctx.prefix, 'country_lookup'),\n displayName: 'countries.dev country search',\n description: 'Look up country metadata by country name using countries.dev.',\n tags: ['template', 'countries-dev', 'public-api'],\n properties: {\n country: {\n type: 'string',\n description: 'Country name, for example \"Finland\" or \"Kenya\".',\n },\n },\n required: ['country'],\n apiSpec: {\n method: 'GET',\n baseUrl: 'https://countries.dev',\n path: '/name/{country}',\n authType: 'none',\n },\n });\n\n const weatherForecast = functionTool({\n name: toolName(ctx.prefix, 'open_meteo_weather'),\n displayName: 'Open-Meteo current weather',\n description: 'Get current weather for latitude and longitude using Open-Meteo.',\n tags: ['template', 'open-meteo', 'public-api', 'weather'],\n properties: {\n latitude: { type: 'number', description: 'Latitude in decimal degrees.' },\n longitude: { type: 'number', description: 'Longitude in decimal degrees.' },\n },\n required: ['latitude', 'longitude'],\n apiSpec: {\n method: 'GET',\n baseUrl: 'https://api.open-meteo.com',\n path: '/v1/forecast',\n queryParams: {\n latitude: '{latitude}',\n longitude: '{longitude}',\n current: 'temperature_2m,relative_humidity_2m,wind_speed_10m',\n timezone: 'auto',\n },\n authType: 'none',\n },\n });\n\n const openLibrarySearch = functionTool({\n name: toolName(ctx.prefix, 'open_library_search'),\n displayName: 'Open Library search',\n description: 'Search books and authors using Open Library.',\n tags: ['template', 'open-library', 'public-api', 'books'],\n properties: {\n query: { type: 'string', description: 'Book, author, or topic search query.' },\n limit: { type: 'number', description: 'Maximum result count.' },\n },\n required: ['query'],\n apiSpec: {\n method: 'GET',\n baseUrl: 'https://openlibrary.org',\n path: '/search.json',\n queryParams: {\n q: '{query}',\n limit: '{limit}',\n fields: 'key,title,author_name,first_publish_year',\n },\n authType: 'none',\n },\n });\n\n const exchangeRate = functionTool({\n name: toolName(ctx.prefix, 'frankfurter_exchange_rate'),\n displayName: 'Frankfurter exchange rate',\n description: 'Get a current exchange rate from USD to another currency using Frankfurter.',\n tags: ['template', 'frankfurter', 'public-api', 'exchange-rate'],\n properties: {\n to: { type: 'string', description: 'Target ISO 4217 currency code, for example \"JPY\".' },\n },\n required: ['to'],\n apiSpec: {\n method: 'GET',\n baseUrl: 'https://api.frankfurter.dev',\n path: '/v2/rates',\n queryParams: {\n base: 'USD',\n quotes: '{to}',\n },\n authType: 'none',\n },\n });\n\n return { countryLookup, weatherForecast, openLibrarySearch, exchangeRate };\n}\n\nfunction countryWeatherDefinition(toolIds: Record<string, string>): WorkflowDefinition {\n return {\n nodes: [\n { id: 'input', type: 'input', position: { x: 0, y: 80 } },\n { id: 'country', type: 'tool', toolId: toolIds.countryLookup, position: { x: 240, y: 20 } },\n { id: 'weather', type: 'tool', toolId: toolIds.weatherForecast, position: { x: 520, y: 20 } },\n { id: 'output', type: 'output', position: { x: 820, y: 80 } },\n ],\n edges: [\n {\n id: 'input-country',\n source: 'input',\n target: 'country',\n mapping: { country: 'country' },\n },\n {\n id: 'country-weather',\n source: 'country',\n target: 'weather',\n mapping: {\n '0.latlng.0': 'latitude',\n '0.latlng.1': 'longitude',\n },\n },\n {\n id: 'country-output',\n source: 'country',\n target: 'output',\n mapping: {\n '0.name': 'country',\n '0.capital': 'capital',\n '0.region': 'region',\n '0.population': 'population',\n },\n },\n {\n id: 'weather-output',\n source: 'weather',\n target: 'output',\n mapping: {\n 'current.temperature_2m': 'temperatureC',\n 'current.relative_humidity_2m': 'humidityPercent',\n 'current.wind_speed_10m': 'windSpeedKph',\n timezone: 'timezone',\n },\n },\n ],\n startNodeId: 'input',\n endNodeId: 'output',\n } as WorkflowDefinition;\n}\n\nfunction countryWeatherBrief(ctx: WorkflowTemplateContext): WorkflowTemplateBuild {\n const tools = sharedTools(ctx);\n return {\n name: `${ctx.prefix} Country Weather Brief`,\n description: 'Tool-only workflow: country metadata plus current Open-Meteo weather.',\n category: 'template',\n tags: ['template', 'tool-workflow', 'public-api'],\n tools: [\n { key: 'countryLookup', payload: tools.countryLookup },\n { key: 'weatherForecast', payload: tools.weatherForecast },\n ],\n buildDefinition: (toolIds) => countryWeatherDefinition(toolIds),\n sampleInput: { country: 'Finland' },\n };\n}\n\nfunction agentResearchSummary(ctx: WorkflowTemplateContext): WorkflowTemplateBuild {\n const tools = sharedTools(ctx);\n return {\n name: `${ctx.prefix} Agent Research Summary`,\n description: 'Multi-tool workflow with an agent_processor that summarizes country and book-search data.',\n category: 'template',\n tags: ['template', 'agent-processor', 'public-api'],\n tools: [\n { key: 'countryLookup', payload: tools.countryLookup },\n { key: 'openLibrarySearch', payload: tools.openLibrarySearch },\n ],\n buildDefinition: (toolIds, buildCtx): WorkflowDefinition => ({\n nodes: [\n { id: 'input', type: 'input', position: { x: 0, y: 100 } },\n { id: 'country', type: 'tool', toolId: toolIds.countryLookup, position: { x: 240, y: 20 } },\n { id: 'books', type: 'tool', toolId: toolIds.openLibrarySearch, position: { x: 240, y: 180 } },\n {\n id: 'analyst',\n type: 'agent_processor',\n position: { x: 560, y: 100 },\n config: {\n agentId: buildCtx.agentId,\n prompt:\n 'Create a concise research note from the country metadata and book search results. Include practical context and cite only the data available in the input.',\n },\n },\n { id: 'output', type: 'output', position: { x: 860, y: 100 } },\n ],\n edges: [\n { id: 'input-country', source: 'input', target: 'country', mapping: { country: 'country' } },\n { id: 'input-books', source: 'input', target: 'books', mapping: { query: 'query', limit: 'limit' } },\n { id: 'country-analyst', source: 'country', target: 'analyst', mapping: { '0': 'countryData' } },\n { id: 'books-analyst', source: 'books', target: 'analyst', mapping: { docs: 'books' } },\n { id: 'analyst-output', source: 'analyst', target: 'output', mapping: { result: 'summary' } },\n ],\n startNodeId: 'input',\n endNodeId: 'output',\n } as WorkflowDefinition),\n sampleInput: { country: 'Kenya', query: 'Kenyan history', limit: 5 },\n };\n}\n\nfunction multiAgentFieldReport(ctx: WorkflowTemplateContext): WorkflowTemplateBuild {\n const tools = sharedTools(ctx);\n return {\n name: `${ctx.prefix} Multi-Agent Field Report`,\n description: 'Multi-agent, multi-tool workflow with a researcher agent and reviewer agent.',\n category: 'template',\n tags: ['template', 'multi-agent', 'multi-tool', 'public-api'],\n tools: [\n { key: 'countryLookup', payload: tools.countryLookup },\n { key: 'weatherForecast', payload: tools.weatherForecast },\n { key: 'exchangeRate', payload: tools.exchangeRate },\n ],\n buildDefinition: (toolIds, buildCtx): WorkflowDefinition => ({\n nodes: [\n { id: 'input', type: 'input', position: { x: 0, y: 120 } },\n { id: 'country', type: 'tool', toolId: toolIds.countryLookup, position: { x: 230, y: 20 } },\n { id: 'weather', type: 'tool', toolId: toolIds.weatherForecast, position: { x: 500, y: 20 } },\n { id: 'exchange-rate', type: 'tool', toolId: toolIds.exchangeRate, position: { x: 230, y: 240 } },\n {\n id: 'researcher',\n type: 'agent_processor',\n position: { x: 760, y: 80 },\n config: {\n agentId: buildCtx.agentId,\n prompt:\n 'Draft a compact field report from the country, weather, and exchange-rate data. Use clear sections and do not invent facts.',\n },\n },\n {\n id: 'reviewer',\n type: 'agent_processor',\n position: { x: 1060, y: 80 },\n config: {\n agentId: buildCtx.reviewerAgentId ?? buildCtx.agentId,\n prompt:\n 'Review the draft field report for clarity, unsupported claims, and operational usefulness. Return the improved final report.',\n },\n },\n { id: 'output', type: 'output', position: { x: 1360, y: 120 } },\n ],\n edges: [\n { id: 'input-country', source: 'input', target: 'country', mapping: { country: 'country' } },\n { id: 'country-weather', source: 'country', target: 'weather', mapping: { '0.latlng.0': 'latitude', '0.latlng.1': 'longitude' } },\n { id: 'country-exchange-rate', source: 'country', target: 'exchange-rate', mapping: { '0.currencies.0.code': 'to' } },\n { id: 'country-researcher', source: 'country', target: 'researcher', mapping: { '0': 'countryData' } },\n { id: 'weather-researcher', source: 'weather', target: 'researcher', mapping: { current: 'weather' } },\n { id: 'exchange-rate-researcher', source: 'exchange-rate', target: 'researcher', mapping: { '0': 'exchangeRate' } },\n { id: 'researcher-reviewer', source: 'researcher', target: 'reviewer', mapping: { result: 'draftReport' } },\n { id: 'reviewer-output', source: 'reviewer', target: 'output', mapping: { result: 'finalReport' } },\n ],\n startNodeId: 'input',\n endNodeId: 'output',\n } as WorkflowDefinition),\n sampleInput: { country: 'Japan' },\n };\n}\n\nfunction workflowInvocationSmoke(ctx: WorkflowTemplateContext): WorkflowTemplateBuild {\n return {\n name: `${ctx.prefix} Workflow Invocation Smoke`,\n description: 'Parent workflow template that expects a child workflowId and invokes it as a workflow node.',\n category: 'template',\n tags: ['template', 'workflow-invocation'],\n tools: [],\n buildDefinition: (_toolIds, buildCtx): WorkflowDefinition => ({\n nodes: [\n { id: 'input', type: 'input', position: { x: 0, y: 80 } },\n {\n id: 'child-workflow',\n type: 'workflow',\n position: { x: 280, y: 80 },\n config: {\n workflowId: buildCtx.childWorkflowId,\n timeoutMs: 90_000,\n },\n },\n { id: 'output', type: 'output', position: { x: 620, y: 80 } },\n ],\n edges: [\n { id: 'input-child', source: 'input', target: 'child-workflow' },\n { id: 'child-output', source: 'child-workflow', target: 'output', mapping: { result: 'childResult', executionId: 'childExecutionId' } },\n ],\n startNodeId: 'input',\n endNodeId: 'output',\n } as WorkflowDefinition),\n sampleInput: { country: 'Finland' },\n };\n}\n"],"mappings":"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","names":[]}
|