@agent-commons/sdk 0.2.2 → 0.2.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.cjs CHANGED
@@ -181,6 +181,10 @@ var CommonsClient = class {
181
181
  execute: (taskId) => this.request("POST", `/v1/tasks/${taskId}/execute`),
182
182
  cancel: (taskId) => this.request("POST", `/v1/tasks/${taskId}/cancel`),
183
183
  delete: (taskId) => this.request("DELETE", `/v1/tasks/${taskId}`),
184
+ /** Edit human-facing task details (title/description/priority). */
185
+ update: (taskId, params) => this.request("PATCH", `/v1/tasks/${taskId}`, params),
186
+ /** Reschedule a task's upcoming run and/or resize its estimated duration. */
187
+ reschedule: (taskId, params) => this.request("PATCH", `/v1/tasks/${taskId}/schedule`, params),
184
188
  /** Stream task status updates via SSE. Returns an async generator. */
185
189
  stream: (taskId) => this._streamSse(`/v1/tasks/${taskId}/stream`)
186
190
  };
@@ -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 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, CreateAgentParams,\n RunParams, StreamEvent,\n Workflow, WorkflowExecution,\n Task, CreateTaskParams,\n Tool, CreateToolParams,\n ToolKey, CreateToolKeyParams,\n ToolPermission,\n CommonsClientConfig,\n AgentCard, A2ATask, A2ASendTaskParams,\n McpServer, McpResource, McpPrompt, McpConnectionType,\n Skill, SkillIndex, CreateSkillParams,\n UsageAggregation,\n CreditBalance, CreditLedgerEntry, CreditWriteParams,\n AgentMemory, MemoryStats, MemoryType,\n CreateMemoryParams, UpdateMemoryParams,\n AgentWallet, WalletBalance, CreateWalletParams,\n ApiKey, CreatedApiKey, CreateApiKeyParams, ApiKeyPrincipalType,\n AgentComputerConfig, AgentComputerInstance, AgentComputerEvent,\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 = (\n config.baseUrl ?? 'https://api.agentcommons.io'\n ).replace(/\\/$/, '');\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>(method: string, path: string, body?: unknown): 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: (agentId: string, params: Partial<CreateAgentParams>): Promise<{ data: Agent }> =>\n this.request('PUT', `/v1/agents/${agentId}`, params),\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: (agentId: string, params: { toolId: string; usageComments?: string }): 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: (agentId: string): 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<{ 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: (agentId: string, knowledgebase: any[]): Promise<{ data: any[] }> =>\n this.request('PUT', `/v1/agents/${agentId}/knowledgebase`, { knowledgebase }),\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('POST', `/v1/agents/${agentId}/preferred-connections`, params),\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: (agentId: string): Promise<{ data: AgentComputerConfig }> =>\n this.request('GET', `/v1/agents/${agentId}/computer/config`),\n\n updateComputerConfig: (\n agentId: string,\n params: Partial<AgentComputerConfig>,\n ): Promise<{ data: AgentComputerConfig }> =>\n this.request('PUT', `/v1/agents/${agentId}/computer/config`, params),\n\n listComputers: (\n agentId: string,\n filter?: { sessionId?: string; includeTerminated?: boolean },\n ): Promise<{ data: AgentComputerInstance[] }> => {\n const qs = new URLSearchParams();\n if (filter?.sessionId) qs.set('sessionId', filter.sessionId);\n if (filter?.includeTerminated) qs.set('includeTerminated', 'true');\n const query = qs.toString();\n return this.request('GET', `/v1/agents/${agentId}/computers${query ? `?${query}` : ''}`);\n },\n\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('POST', `/v1/agents/${agentId}/computers`, params),\n\n getComputer: (\n agentId: string,\n computerId: string,\n ): Promise<{ data: AgentComputerInstance }> =>\n this.request('GET', `/v1/agents/${agentId}/computers/${computerId}`),\n\n refreshComputer: (\n agentId: string,\n computerId: string,\n ): Promise<{ data: AgentComputerInstance }> =>\n this.request('POST', `/v1/agents/${agentId}/computers/${computerId}/refresh`),\n\n stopComputer: (\n agentId: string,\n computerId: string,\n ): Promise<{ data: AgentComputerInstance }> =>\n this.request('POST', `/v1/agents/${agentId}/computers/${computerId}/stop`),\n\n readComputerFile: (\n agentId: string,\n computerId: string,\n path: string,\n ): Promise<{ data: { path: string; content: string } }> =>\n this.request('GET', `/v1/agents/${agentId}/computers/${computerId}/files/read?path=${encodeURIComponent(path)}`),\n\n runComputerCommand: (\n agentId: string,\n computerId: string,\n params: { command: string; cwd?: string; timeoutSeconds?: number },\n ): Promise<{ data: any }> =>\n this.request('POST', `/v1/agents/${agentId}/computers/${computerId}/commands`, params),\n\n openComputerBrowser: (\n agentId: string,\n computerId: string,\n params: { url: string },\n ): Promise<{ data: any }> =>\n this.request('POST', `/v1/agents/${agentId}/computers/${computerId}/browser/open`, params),\n\n listComputerEvents: (\n agentId: string,\n computerId: string,\n limit?: number,\n ): Promise<{ data: AgentComputerEvent[] }> =>\n this.request('GET', `/v1/agents/${agentId}/computers/${computerId}/events${limit ? `?limit=${limit}` : ''}`),\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('GET', `/v1/agents/tts/voices${qs ? `?${qs}` : ''}`);\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: (ownerId: string, ownerType: 'user' | 'agent'): Promise<Workflow[]> =>\n this.request('GET', `/v1/workflows?ownerId=${ownerId}&ownerType=${ownerType}`),\n\n get: (workflowId: string): Promise<Workflow> =>\n this.request('GET', `/v1/workflows/${workflowId}`),\n\n update: (workflowId: string, updates: Partial<Workflow>): 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: (workflowId: string, params: {\n agentId?: string;\n sessionId?: string;\n inputData?: Record<string, any>;\n userId?: string;\n }): Promise<WorkflowExecution> =>\n this.request('POST', `/v1/workflows/${workflowId}/execute`, params),\n\n getExecution: (workflowId: string, executionId: string): Promise<WorkflowExecution> =>\n this.request('GET', `/v1/workflows/${workflowId}/executions/${executionId}`),\n\n listExecutions: (workflowId: string, limit?: number): Promise<WorkflowExecution[]> =>\n this.request('GET', `/v1/workflows/${workflowId}/executions${limit ? `?limit=${limit}` : ''}`),\n\n cancelExecution: (workflowId: string, executionId: string): Promise<{ success: boolean }> =>\n this.request('POST', `/v1/workflows/${workflowId}/executions/${executionId}/cancel`),\n\n /** Approve a paused human_approval node and resume execution. */\n approveExecution: (workflowId: string, executionId: string, params: {\n approvalToken: string;\n approvalData?: Record<string, any>;\n }): Promise<{ success: boolean; executionId: string; action: string }> =>\n this.request('POST', `/v1/workflows/${workflowId}/executions/${executionId}/approve`, params),\n\n /** Reject a paused human_approval node and terminate execution. */\n rejectExecution: (workflowId: string, executionId: string, params: {\n approvalToken: string;\n reason?: string;\n }): Promise<{ success: boolean; executionId: string; action: string }> =>\n this.request('POST', `/v1/workflows/${workflowId}/executions/${executionId}/reject`, params),\n\n /** Stream execution progress via SSE. Returns an async generator. */\n stream: (workflowId: string, executionId: string): AsyncGenerator<StreamEvent> =>\n this._streamSse(`/v1/workflows/${workflowId}/executions/${executionId}/stream`),\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: { sessionId?: string; agentId?: string; ownerId?: string; ownerType?: 'user' | 'agent' }): 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 /** 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: (agentId: string, initiatorId: string): 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: (agentId: string): 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: (initiator: string): Promise<{ data: import('./types').Session[] }> =>\n this.request('GET', `/v1/sessions/user/${encodeURIComponent(initiator)}`),\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?: { agentId?: string; owner?: string; ownerType?: string; visibility?: string }): 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: (toolId: string, params: Partial<CreateToolParams>): 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 // ── Tool Keys ─────────────────────────────────────────────────────────────\n\n get toolKeys() {\n return {\n list: (filter: { ownerId?: string; ownerType?: string; toolId?: string }): 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: (params: CreateToolKeyParams): 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: (toolId?: string): 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?: { ownerId?: string; ownerType?: string; isPublic?: boolean }): 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) 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: (skillIdOrSlug: string, updates: Partial<CreateSkillParams>): 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: { toAddress: string; amount: string; tokenSymbol?: 'USDC' | 'ETH' },\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<{ principalId: string | null; 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: (principalId: string, principalType: ApiKeyPrincipalType): Promise<ApiKey[]> => {\n const q = new URLSearchParams({ principalId, principalType }).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(params: RunParams): 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: (agentId: string, params: A2ASendTaskParams): 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', id: taskId, method: 'tasks/get', 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', id: taskId, method: 'tasks/cancel', params: { id: taskId },\n }).then((r: any) => r.result as A2ATask),\n\n /** List recent A2A tasks for an agent. */\n listTasks: (agentId: string, limit?: number): Promise<{ tasks: A2ATask[]; total: number }> =>\n this.request('GET', `/v1/a2a/${agentId}/tasks${limit ? `?limit=${limit}` : ''}`),\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: (ownerId: string, ownerType: 'user' | 'agent'): Promise<{ servers: McpServer[]; total: number }> =>\n this.request('GET', `/v1/mcp/servers?ownerId=${ownerId}&ownerType=${ownerType}`),\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('POST', `/v1/mcp/servers?ownerId=${ownerId}&ownerType=${ownerType}`, dto);\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: (serverId: string, params: Partial<{\n name: string;\n description: string;\n connectionConfig: Record<string, any>;\n isPublic: boolean;\n tags: string[];\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: (serverId: string): 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: (serverId: string): Promise<{ toolsDiscovered: number; resourcesDiscovered: number; 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: (ownerId: string, ownerType: 'user' | 'agent'): Promise<{ tools: any[] }> =>\n this.request('GET', `/v1/mcp/tools?ownerId=${ownerId}&ownerType=${ownerType}`),\n\n /** List resources from an MCP server. */\n listResources: (serverId: string): Promise<{ resources: McpResource[]; total: number }> =>\n this.request('GET', `/v1/mcp/servers/${serverId}/resources`),\n\n /** Read a resource by URI. */\n readResource: (serverId: string, uri: string): Promise<{ uri: string; contents: any }> =>\n this.request('GET', `/v1/mcp/servers/${serverId}/resources/read?uri=${encodeURIComponent(uri)}`),\n\n /** List prompts from an MCP server. */\n listPrompts: (serverId: string): Promise<{ prompts: McpPrompt[]; total: number }> =>\n this.request('GET', `/v1/mcp/servers/${serverId}/prompts`),\n\n /** Render a prompt with arguments. */\n getPrompt: (serverId: string, promptName: string, args?: Record<string, string>): Promise<{ description?: string; messages: any[] }> =>\n this.request('POST', `/v1/mcp/servers/${serverId}/prompts/${promptName}`, { arguments: args }),\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('GET', `/v1/memory/agents/${agentId}${qs ? `?${qs}` : ''}`);\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('GET', `/v1/memory/agents/${agentId}/retrieve?${params}`);\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: (memoryId: string, params: UpdateMemoryParams): 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 }\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('GET', `/v1/usage/agents/${agentId}${qs ? `?${qs}` : ''}`);\n },\n\n /** Get aggregated token + cost usage for a session. */\n getSessionUsage: (sessionId: string): 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: (params: CreditWriteParams): Promise<{ data: CreditLedgerEntry }> =>\n this.request('POST', '/v1/credits/grants', params),\n\n debit: (params: CreditWriteParams): 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 { CommonsClient, CommonsError } from './client';\nexport { buildWorkflowTemplate, listWorkflowTemplates } from './workflow-templates';\nexport type {\n Agent, CreateAgentParams,\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, CreateAgentParams,\n RunParams, StreamEvent,\n Workflow, WorkflowExecution,\n Task, CreateTaskParams,\n Tool, CreateToolParams,\n ToolKey, CreateToolKeyParams,\n ToolPermission,\n CommonsClientConfig,\n AgentCard, A2ATask, A2ASendTaskParams,\n McpServer, McpResource, McpPrompt, McpConnectionType,\n Skill, SkillIndex, CreateSkillParams,\n UsageAggregation,\n CreditBalance, CreditLedgerEntry, CreditWriteParams,\n AgentMemory, MemoryStats, MemoryType,\n CreateMemoryParams, UpdateMemoryParams,\n AgentWallet, WalletBalance, CreateWalletParams,\n ApiKey, CreatedApiKey, CreateApiKeyParams, ApiKeyPrincipalType,\n AgentComputerConfig, AgentComputerInstance, AgentComputerEvent,\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 = (\n config.baseUrl ?? 'https://api.agentcommons.io'\n ).replace(/\\/$/, '');\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>(method: string, path: string, body?: unknown): 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: (agentId: string, params: Partial<CreateAgentParams>): Promise<{ data: Agent }> =>\n this.request('PUT', `/v1/agents/${agentId}`, params),\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: (agentId: string, params: { toolId: string; usageComments?: string }): 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: (agentId: string): 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<{ 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: (agentId: string, knowledgebase: any[]): Promise<{ data: any[] }> =>\n this.request('PUT', `/v1/agents/${agentId}/knowledgebase`, { knowledgebase }),\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('POST', `/v1/agents/${agentId}/preferred-connections`, params),\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: (agentId: string): Promise<{ data: AgentComputerConfig }> =>\n this.request('GET', `/v1/agents/${agentId}/computer/config`),\n\n updateComputerConfig: (\n agentId: string,\n params: Partial<AgentComputerConfig>,\n ): Promise<{ data: AgentComputerConfig }> =>\n this.request('PUT', `/v1/agents/${agentId}/computer/config`, params),\n\n listComputers: (\n agentId: string,\n filter?: { sessionId?: string; includeTerminated?: boolean },\n ): Promise<{ data: AgentComputerInstance[] }> => {\n const qs = new URLSearchParams();\n if (filter?.sessionId) qs.set('sessionId', filter.sessionId);\n if (filter?.includeTerminated) qs.set('includeTerminated', 'true');\n const query = qs.toString();\n return this.request('GET', `/v1/agents/${agentId}/computers${query ? `?${query}` : ''}`);\n },\n\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('POST', `/v1/agents/${agentId}/computers`, params),\n\n getComputer: (\n agentId: string,\n computerId: string,\n ): Promise<{ data: AgentComputerInstance }> =>\n this.request('GET', `/v1/agents/${agentId}/computers/${computerId}`),\n\n refreshComputer: (\n agentId: string,\n computerId: string,\n ): Promise<{ data: AgentComputerInstance }> =>\n this.request('POST', `/v1/agents/${agentId}/computers/${computerId}/refresh`),\n\n stopComputer: (\n agentId: string,\n computerId: string,\n ): Promise<{ data: AgentComputerInstance }> =>\n this.request('POST', `/v1/agents/${agentId}/computers/${computerId}/stop`),\n\n readComputerFile: (\n agentId: string,\n computerId: string,\n path: string,\n ): Promise<{ data: { path: string; content: string } }> =>\n this.request('GET', `/v1/agents/${agentId}/computers/${computerId}/files/read?path=${encodeURIComponent(path)}`),\n\n runComputerCommand: (\n agentId: string,\n computerId: string,\n params: { command: string; cwd?: string; timeoutSeconds?: number },\n ): Promise<{ data: any }> =>\n this.request('POST', `/v1/agents/${agentId}/computers/${computerId}/commands`, params),\n\n openComputerBrowser: (\n agentId: string,\n computerId: string,\n params: { url: string },\n ): Promise<{ data: any }> =>\n this.request('POST', `/v1/agents/${agentId}/computers/${computerId}/browser/open`, params),\n\n listComputerEvents: (\n agentId: string,\n computerId: string,\n limit?: number,\n ): Promise<{ data: AgentComputerEvent[] }> =>\n this.request('GET', `/v1/agents/${agentId}/computers/${computerId}/events${limit ? `?limit=${limit}` : ''}`),\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('GET', `/v1/agents/tts/voices${qs ? `?${qs}` : ''}`);\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: (ownerId: string, ownerType: 'user' | 'agent'): Promise<Workflow[]> =>\n this.request('GET', `/v1/workflows?ownerId=${ownerId}&ownerType=${ownerType}`),\n\n get: (workflowId: string): Promise<Workflow> =>\n this.request('GET', `/v1/workflows/${workflowId}`),\n\n update: (workflowId: string, updates: Partial<Workflow>): 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: (workflowId: string, params: {\n agentId?: string;\n sessionId?: string;\n inputData?: Record<string, any>;\n userId?: string;\n }): Promise<WorkflowExecution> =>\n this.request('POST', `/v1/workflows/${workflowId}/execute`, params),\n\n getExecution: (workflowId: string, executionId: string): Promise<WorkflowExecution> =>\n this.request('GET', `/v1/workflows/${workflowId}/executions/${executionId}`),\n\n listExecutions: (workflowId: string, limit?: number): Promise<WorkflowExecution[]> =>\n this.request('GET', `/v1/workflows/${workflowId}/executions${limit ? `?limit=${limit}` : ''}`),\n\n cancelExecution: (workflowId: string, executionId: string): Promise<{ success: boolean }> =>\n this.request('POST', `/v1/workflows/${workflowId}/executions/${executionId}/cancel`),\n\n /** Approve a paused human_approval node and resume execution. */\n approveExecution: (workflowId: string, executionId: string, params: {\n approvalToken: string;\n approvalData?: Record<string, any>;\n }): Promise<{ success: boolean; executionId: string; action: string }> =>\n this.request('POST', `/v1/workflows/${workflowId}/executions/${executionId}/approve`, params),\n\n /** Reject a paused human_approval node and terminate execution. */\n rejectExecution: (workflowId: string, executionId: string, params: {\n approvalToken: string;\n reason?: string;\n }): Promise<{ success: boolean; executionId: string; action: string }> =>\n this.request('POST', `/v1/workflows/${workflowId}/executions/${executionId}/reject`, params),\n\n /** Stream execution progress via SSE. Returns an async generator. */\n stream: (workflowId: string, executionId: string): AsyncGenerator<StreamEvent> =>\n this._streamSse(`/v1/workflows/${workflowId}/executions/${executionId}/stream`),\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: { sessionId?: string; agentId?: string; ownerId?: string; ownerType?: 'user' | 'agent' }): 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: (taskId: string, params: { title?: string; description?: string; priority?: number }): 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: (taskId: string, params: { scheduledFor?: Date; estimatedDuration?: number }): Promise<{ data: Task; 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: (agentId: string, initiatorId: string): 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: (agentId: string): 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: (initiator: string): Promise<{ data: import('./types').Session[] }> =>\n this.request('GET', `/v1/sessions/user/${encodeURIComponent(initiator)}`),\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?: { agentId?: string; owner?: string; ownerType?: string; visibility?: string }): 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: (toolId: string, params: Partial<CreateToolParams>): 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 // ── Tool Keys ─────────────────────────────────────────────────────────────\n\n get toolKeys() {\n return {\n list: (filter: { ownerId?: string; ownerType?: string; toolId?: string }): 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: (params: CreateToolKeyParams): 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: (toolId?: string): 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?: { ownerId?: string; ownerType?: string; isPublic?: boolean }): 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) 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: (skillIdOrSlug: string, updates: Partial<CreateSkillParams>): 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: { toAddress: string; amount: string; tokenSymbol?: 'USDC' | 'ETH' },\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<{ principalId: string | null; 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: (principalId: string, principalType: ApiKeyPrincipalType): Promise<ApiKey[]> => {\n const q = new URLSearchParams({ principalId, principalType }).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(params: RunParams): 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: (agentId: string, params: A2ASendTaskParams): 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', id: taskId, method: 'tasks/get', 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', id: taskId, method: 'tasks/cancel', params: { id: taskId },\n }).then((r: any) => r.result as A2ATask),\n\n /** List recent A2A tasks for an agent. */\n listTasks: (agentId: string, limit?: number): Promise<{ tasks: A2ATask[]; total: number }> =>\n this.request('GET', `/v1/a2a/${agentId}/tasks${limit ? `?limit=${limit}` : ''}`),\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: (ownerId: string, ownerType: 'user' | 'agent'): Promise<{ servers: McpServer[]; total: number }> =>\n this.request('GET', `/v1/mcp/servers?ownerId=${ownerId}&ownerType=${ownerType}`),\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('POST', `/v1/mcp/servers?ownerId=${ownerId}&ownerType=${ownerType}`, dto);\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: (serverId: string, params: Partial<{\n name: string;\n description: string;\n connectionConfig: Record<string, any>;\n isPublic: boolean;\n tags: string[];\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: (serverId: string): 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: (serverId: string): Promise<{ toolsDiscovered: number; resourcesDiscovered: number; 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: (ownerId: string, ownerType: 'user' | 'agent'): Promise<{ tools: any[] }> =>\n this.request('GET', `/v1/mcp/tools?ownerId=${ownerId}&ownerType=${ownerType}`),\n\n /** List resources from an MCP server. */\n listResources: (serverId: string): Promise<{ resources: McpResource[]; total: number }> =>\n this.request('GET', `/v1/mcp/servers/${serverId}/resources`),\n\n /** Read a resource by URI. */\n readResource: (serverId: string, uri: string): Promise<{ uri: string; contents: any }> =>\n this.request('GET', `/v1/mcp/servers/${serverId}/resources/read?uri=${encodeURIComponent(uri)}`),\n\n /** List prompts from an MCP server. */\n listPrompts: (serverId: string): Promise<{ prompts: McpPrompt[]; total: number }> =>\n this.request('GET', `/v1/mcp/servers/${serverId}/prompts`),\n\n /** Render a prompt with arguments. */\n getPrompt: (serverId: string, promptName: string, args?: Record<string, string>): Promise<{ description?: string; messages: any[] }> =>\n this.request('POST', `/v1/mcp/servers/${serverId}/prompts/${promptName}`, { arguments: args }),\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('GET', `/v1/memory/agents/${agentId}${qs ? `?${qs}` : ''}`);\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('GET', `/v1/memory/agents/${agentId}/retrieve?${params}`);\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: (memoryId: string, params: UpdateMemoryParams): 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 }\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('GET', `/v1/usage/agents/${agentId}${qs ? `?${qs}` : ''}`);\n },\n\n /** Get aggregated token + cost usage for a session. */\n getSessionUsage: (sessionId: string): 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: (params: CreditWriteParams): Promise<{ data: CreditLedgerEntry }> =>\n this.request('POST', '/v1/credits/grants', params),\n\n debit: (params: CreditWriteParams): 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":[]}
package/dist/index.d.mts CHANGED
@@ -188,7 +188,7 @@ interface ChatMessage {
188
188
  tool_call_id?: string;
189
189
  name?: string;
190
190
  }
191
- type StreamEventType = 'token' | 'tool' | 'toolStart' | 'toolEnd' | 'agent_step' | 'final' | 'completed' | 'failed' | 'cancelled' | 'status' | 'keepalive' | 'cli_tool_request' | 'error';
191
+ type StreamEventType = 'token' | 'tool' | 'toolProgress' | 'toolStart' | 'toolEnd' | 'agent_step' | 'final' | 'completed' | 'failed' | 'cancelled' | 'status' | 'keepalive' | 'cli_tool_request' | 'error';
192
192
  interface StreamEvent {
193
193
  type: StreamEventType;
194
194
  phase?: 'commentary' | 'final_answer' | string;
@@ -199,6 +199,7 @@ interface StreamEvent {
199
199
  name?: string;
200
200
  toolName?: string;
201
201
  tool?: string;
202
+ toolCallId?: string;
202
203
  input?: string;
203
204
  args?: any;
204
205
  output?: any;
@@ -274,6 +275,14 @@ interface Task {
274
275
  workflowId?: string;
275
276
  cronExpression?: string;
276
277
  isRecurring?: boolean;
278
+ scheduledFor?: string;
279
+ nextRunAt?: string;
280
+ lastRunAt?: string;
281
+ actualStart?: string;
282
+ actualEnd?: string;
283
+ estimatedDuration?: number;
284
+ dependsOn?: string[];
285
+ metadata?: Record<string, any>;
277
286
  priority?: number;
278
287
  timeoutMs?: number;
279
288
  progress?: number;
@@ -283,6 +292,7 @@ interface Task {
283
292
  createdBy: string;
284
293
  createdByType: 'user' | 'agent';
285
294
  createdAt: string;
295
+ updatedAt?: string;
286
296
  }
287
297
  interface CreateTaskParams {
288
298
  agentId: string;
@@ -957,6 +967,25 @@ declare class CommonsClient {
957
967
  delete: (taskId: string) => Promise<{
958
968
  success: boolean;
959
969
  }>;
970
+ /** Edit human-facing task details (title/description/priority). */
971
+ update: (taskId: string, params: {
972
+ title?: string;
973
+ description?: string;
974
+ priority?: number;
975
+ }) => Promise<{
976
+ data: Task;
977
+ }>;
978
+ /** Reschedule a task's upcoming run and/or resize its estimated duration. */
979
+ reschedule: (taskId: string, params: {
980
+ scheduledFor?: Date;
981
+ estimatedDuration?: number;
982
+ }) => Promise<{
983
+ data: Task;
984
+ rescheduledRun: {
985
+ runId: string;
986
+ created: boolean;
987
+ } | null;
988
+ }>;
960
989
  /** Stream task status updates via SSE. Returns an async generator. */
961
990
  stream: (taskId: string) => AsyncGenerator<StreamEvent>;
962
991
  };
package/dist/index.d.ts CHANGED
@@ -188,7 +188,7 @@ interface ChatMessage {
188
188
  tool_call_id?: string;
189
189
  name?: string;
190
190
  }
191
- type StreamEventType = 'token' | 'tool' | 'toolStart' | 'toolEnd' | 'agent_step' | 'final' | 'completed' | 'failed' | 'cancelled' | 'status' | 'keepalive' | 'cli_tool_request' | 'error';
191
+ type StreamEventType = 'token' | 'tool' | 'toolProgress' | 'toolStart' | 'toolEnd' | 'agent_step' | 'final' | 'completed' | 'failed' | 'cancelled' | 'status' | 'keepalive' | 'cli_tool_request' | 'error';
192
192
  interface StreamEvent {
193
193
  type: StreamEventType;
194
194
  phase?: 'commentary' | 'final_answer' | string;
@@ -199,6 +199,7 @@ interface StreamEvent {
199
199
  name?: string;
200
200
  toolName?: string;
201
201
  tool?: string;
202
+ toolCallId?: string;
202
203
  input?: string;
203
204
  args?: any;
204
205
  output?: any;
@@ -274,6 +275,14 @@ interface Task {
274
275
  workflowId?: string;
275
276
  cronExpression?: string;
276
277
  isRecurring?: boolean;
278
+ scheduledFor?: string;
279
+ nextRunAt?: string;
280
+ lastRunAt?: string;
281
+ actualStart?: string;
282
+ actualEnd?: string;
283
+ estimatedDuration?: number;
284
+ dependsOn?: string[];
285
+ metadata?: Record<string, any>;
277
286
  priority?: number;
278
287
  timeoutMs?: number;
279
288
  progress?: number;
@@ -283,6 +292,7 @@ interface Task {
283
292
  createdBy: string;
284
293
  createdByType: 'user' | 'agent';
285
294
  createdAt: string;
295
+ updatedAt?: string;
286
296
  }
287
297
  interface CreateTaskParams {
288
298
  agentId: string;
@@ -957,6 +967,25 @@ declare class CommonsClient {
957
967
  delete: (taskId: string) => Promise<{
958
968
  success: boolean;
959
969
  }>;
970
+ /** Edit human-facing task details (title/description/priority). */
971
+ update: (taskId: string, params: {
972
+ title?: string;
973
+ description?: string;
974
+ priority?: number;
975
+ }) => Promise<{
976
+ data: Task;
977
+ }>;
978
+ /** Reschedule a task's upcoming run and/or resize its estimated duration. */
979
+ reschedule: (taskId: string, params: {
980
+ scheduledFor?: Date;
981
+ estimatedDuration?: number;
982
+ }) => Promise<{
983
+ data: Task;
984
+ rescheduledRun: {
985
+ runId: string;
986
+ created: boolean;
987
+ } | null;
988
+ }>;
960
989
  /** Stream task status updates via SSE. Returns an async generator. */
961
990
  stream: (taskId: string) => AsyncGenerator<StreamEvent>;
962
991
  };
package/dist/index.mjs CHANGED
@@ -152,6 +152,10 @@ var CommonsClient = class {
152
152
  execute: (taskId) => this.request("POST", `/v1/tasks/${taskId}/execute`),
153
153
  cancel: (taskId) => this.request("POST", `/v1/tasks/${taskId}/cancel`),
154
154
  delete: (taskId) => this.request("DELETE", `/v1/tasks/${taskId}`),
155
+ /** Edit human-facing task details (title/description/priority). */
156
+ update: (taskId, params) => this.request("PATCH", `/v1/tasks/${taskId}`, params),
157
+ /** Reschedule a task's upcoming run and/or resize its estimated duration. */
158
+ reschedule: (taskId, params) => this.request("PATCH", `/v1/tasks/${taskId}/schedule`, params),
155
159
  /** Stream task status updates via SSE. Returns an async generator. */
156
160
  stream: (taskId) => this._streamSse(`/v1/tasks/${taskId}/stream`)
157
161
  };
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/client.ts","../src/workflow-templates.ts"],"sourcesContent":["import {\n Agent, CreateAgentParams,\n RunParams, StreamEvent,\n Workflow, WorkflowExecution,\n Task, CreateTaskParams,\n Tool, CreateToolParams,\n ToolKey, CreateToolKeyParams,\n ToolPermission,\n CommonsClientConfig,\n AgentCard, A2ATask, A2ASendTaskParams,\n McpServer, McpResource, McpPrompt, McpConnectionType,\n Skill, SkillIndex, CreateSkillParams,\n UsageAggregation,\n CreditBalance, CreditLedgerEntry, CreditWriteParams,\n AgentMemory, MemoryStats, MemoryType,\n CreateMemoryParams, UpdateMemoryParams,\n AgentWallet, WalletBalance, CreateWalletParams,\n ApiKey, CreatedApiKey, CreateApiKeyParams, ApiKeyPrincipalType,\n AgentComputerConfig, AgentComputerInstance, AgentComputerEvent,\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 = (\n config.baseUrl ?? 'https://api.agentcommons.io'\n ).replace(/\\/$/, '');\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>(method: string, path: string, body?: unknown): 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: (agentId: string, params: Partial<CreateAgentParams>): Promise<{ data: Agent }> =>\n this.request('PUT', `/v1/agents/${agentId}`, params),\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: (agentId: string, params: { toolId: string; usageComments?: string }): 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: (agentId: string): 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<{ 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: (agentId: string, knowledgebase: any[]): Promise<{ data: any[] }> =>\n this.request('PUT', `/v1/agents/${agentId}/knowledgebase`, { knowledgebase }),\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('POST', `/v1/agents/${agentId}/preferred-connections`, params),\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: (agentId: string): Promise<{ data: AgentComputerConfig }> =>\n this.request('GET', `/v1/agents/${agentId}/computer/config`),\n\n updateComputerConfig: (\n agentId: string,\n params: Partial<AgentComputerConfig>,\n ): Promise<{ data: AgentComputerConfig }> =>\n this.request('PUT', `/v1/agents/${agentId}/computer/config`, params),\n\n listComputers: (\n agentId: string,\n filter?: { sessionId?: string; includeTerminated?: boolean },\n ): Promise<{ data: AgentComputerInstance[] }> => {\n const qs = new URLSearchParams();\n if (filter?.sessionId) qs.set('sessionId', filter.sessionId);\n if (filter?.includeTerminated) qs.set('includeTerminated', 'true');\n const query = qs.toString();\n return this.request('GET', `/v1/agents/${agentId}/computers${query ? `?${query}` : ''}`);\n },\n\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('POST', `/v1/agents/${agentId}/computers`, params),\n\n getComputer: (\n agentId: string,\n computerId: string,\n ): Promise<{ data: AgentComputerInstance }> =>\n this.request('GET', `/v1/agents/${agentId}/computers/${computerId}`),\n\n refreshComputer: (\n agentId: string,\n computerId: string,\n ): Promise<{ data: AgentComputerInstance }> =>\n this.request('POST', `/v1/agents/${agentId}/computers/${computerId}/refresh`),\n\n stopComputer: (\n agentId: string,\n computerId: string,\n ): Promise<{ data: AgentComputerInstance }> =>\n this.request('POST', `/v1/agents/${agentId}/computers/${computerId}/stop`),\n\n readComputerFile: (\n agentId: string,\n computerId: string,\n path: string,\n ): Promise<{ data: { path: string; content: string } }> =>\n this.request('GET', `/v1/agents/${agentId}/computers/${computerId}/files/read?path=${encodeURIComponent(path)}`),\n\n runComputerCommand: (\n agentId: string,\n computerId: string,\n params: { command: string; cwd?: string; timeoutSeconds?: number },\n ): Promise<{ data: any }> =>\n this.request('POST', `/v1/agents/${agentId}/computers/${computerId}/commands`, params),\n\n openComputerBrowser: (\n agentId: string,\n computerId: string,\n params: { url: string },\n ): Promise<{ data: any }> =>\n this.request('POST', `/v1/agents/${agentId}/computers/${computerId}/browser/open`, params),\n\n listComputerEvents: (\n agentId: string,\n computerId: string,\n limit?: number,\n ): Promise<{ data: AgentComputerEvent[] }> =>\n this.request('GET', `/v1/agents/${agentId}/computers/${computerId}/events${limit ? `?limit=${limit}` : ''}`),\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('GET', `/v1/agents/tts/voices${qs ? `?${qs}` : ''}`);\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: (ownerId: string, ownerType: 'user' | 'agent'): Promise<Workflow[]> =>\n this.request('GET', `/v1/workflows?ownerId=${ownerId}&ownerType=${ownerType}`),\n\n get: (workflowId: string): Promise<Workflow> =>\n this.request('GET', `/v1/workflows/${workflowId}`),\n\n update: (workflowId: string, updates: Partial<Workflow>): 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: (workflowId: string, params: {\n agentId?: string;\n sessionId?: string;\n inputData?: Record<string, any>;\n userId?: string;\n }): Promise<WorkflowExecution> =>\n this.request('POST', `/v1/workflows/${workflowId}/execute`, params),\n\n getExecution: (workflowId: string, executionId: string): Promise<WorkflowExecution> =>\n this.request('GET', `/v1/workflows/${workflowId}/executions/${executionId}`),\n\n listExecutions: (workflowId: string, limit?: number): Promise<WorkflowExecution[]> =>\n this.request('GET', `/v1/workflows/${workflowId}/executions${limit ? `?limit=${limit}` : ''}`),\n\n cancelExecution: (workflowId: string, executionId: string): Promise<{ success: boolean }> =>\n this.request('POST', `/v1/workflows/${workflowId}/executions/${executionId}/cancel`),\n\n /** Approve a paused human_approval node and resume execution. */\n approveExecution: (workflowId: string, executionId: string, params: {\n approvalToken: string;\n approvalData?: Record<string, any>;\n }): Promise<{ success: boolean; executionId: string; action: string }> =>\n this.request('POST', `/v1/workflows/${workflowId}/executions/${executionId}/approve`, params),\n\n /** Reject a paused human_approval node and terminate execution. */\n rejectExecution: (workflowId: string, executionId: string, params: {\n approvalToken: string;\n reason?: string;\n }): Promise<{ success: boolean; executionId: string; action: string }> =>\n this.request('POST', `/v1/workflows/${workflowId}/executions/${executionId}/reject`, params),\n\n /** Stream execution progress via SSE. Returns an async generator. */\n stream: (workflowId: string, executionId: string): AsyncGenerator<StreamEvent> =>\n this._streamSse(`/v1/workflows/${workflowId}/executions/${executionId}/stream`),\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: { sessionId?: string; agentId?: string; ownerId?: string; ownerType?: 'user' | 'agent' }): 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 /** 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: (agentId: string, initiatorId: string): 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: (agentId: string): 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: (initiator: string): Promise<{ data: import('./types').Session[] }> =>\n this.request('GET', `/v1/sessions/user/${encodeURIComponent(initiator)}`),\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?: { agentId?: string; owner?: string; ownerType?: string; visibility?: string }): 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: (toolId: string, params: Partial<CreateToolParams>): 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 // ── Tool Keys ─────────────────────────────────────────────────────────────\n\n get toolKeys() {\n return {\n list: (filter: { ownerId?: string; ownerType?: string; toolId?: string }): 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: (params: CreateToolKeyParams): 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: (toolId?: string): 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?: { ownerId?: string; ownerType?: string; isPublic?: boolean }): 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) 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: (skillIdOrSlug: string, updates: Partial<CreateSkillParams>): 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: { toAddress: string; amount: string; tokenSymbol?: 'USDC' | 'ETH' },\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<{ principalId: string | null; 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: (principalId: string, principalType: ApiKeyPrincipalType): Promise<ApiKey[]> => {\n const q = new URLSearchParams({ principalId, principalType }).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(params: RunParams): 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: (agentId: string, params: A2ASendTaskParams): 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', id: taskId, method: 'tasks/get', 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', id: taskId, method: 'tasks/cancel', params: { id: taskId },\n }).then((r: any) => r.result as A2ATask),\n\n /** List recent A2A tasks for an agent. */\n listTasks: (agentId: string, limit?: number): Promise<{ tasks: A2ATask[]; total: number }> =>\n this.request('GET', `/v1/a2a/${agentId}/tasks${limit ? `?limit=${limit}` : ''}`),\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: (ownerId: string, ownerType: 'user' | 'agent'): Promise<{ servers: McpServer[]; total: number }> =>\n this.request('GET', `/v1/mcp/servers?ownerId=${ownerId}&ownerType=${ownerType}`),\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('POST', `/v1/mcp/servers?ownerId=${ownerId}&ownerType=${ownerType}`, dto);\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: (serverId: string, params: Partial<{\n name: string;\n description: string;\n connectionConfig: Record<string, any>;\n isPublic: boolean;\n tags: string[];\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: (serverId: string): 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: (serverId: string): Promise<{ toolsDiscovered: number; resourcesDiscovered: number; 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: (ownerId: string, ownerType: 'user' | 'agent'): Promise<{ tools: any[] }> =>\n this.request('GET', `/v1/mcp/tools?ownerId=${ownerId}&ownerType=${ownerType}`),\n\n /** List resources from an MCP server. */\n listResources: (serverId: string): Promise<{ resources: McpResource[]; total: number }> =>\n this.request('GET', `/v1/mcp/servers/${serverId}/resources`),\n\n /** Read a resource by URI. */\n readResource: (serverId: string, uri: string): Promise<{ uri: string; contents: any }> =>\n this.request('GET', `/v1/mcp/servers/${serverId}/resources/read?uri=${encodeURIComponent(uri)}`),\n\n /** List prompts from an MCP server. */\n listPrompts: (serverId: string): Promise<{ prompts: McpPrompt[]; total: number }> =>\n this.request('GET', `/v1/mcp/servers/${serverId}/prompts`),\n\n /** Render a prompt with arguments. */\n getPrompt: (serverId: string, promptName: string, args?: Record<string, string>): Promise<{ description?: string; messages: any[] }> =>\n this.request('POST', `/v1/mcp/servers/${serverId}/prompts/${promptName}`, { arguments: args }),\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('GET', `/v1/memory/agents/${agentId}${qs ? `?${qs}` : ''}`);\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('GET', `/v1/memory/agents/${agentId}/retrieve?${params}`);\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: (memoryId: string, params: UpdateMemoryParams): 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 }\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('GET', `/v1/usage/agents/${agentId}${qs ? `?${qs}` : ''}`);\n },\n\n /** Get aggregated token + cost usage for a session. */\n getSessionUsage: (sessionId: string): 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: (params: CreditWriteParams): Promise<{ data: CreditLedgerEntry }> =>\n this.request('POST', '/v1/credits/grants', params),\n\n debit: (params: CreditWriteParams): 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/client.ts","../src/workflow-templates.ts"],"sourcesContent":["import {\n Agent, CreateAgentParams,\n RunParams, StreamEvent,\n Workflow, WorkflowExecution,\n Task, CreateTaskParams,\n Tool, CreateToolParams,\n ToolKey, CreateToolKeyParams,\n ToolPermission,\n CommonsClientConfig,\n AgentCard, A2ATask, A2ASendTaskParams,\n McpServer, McpResource, McpPrompt, McpConnectionType,\n Skill, SkillIndex, CreateSkillParams,\n UsageAggregation,\n CreditBalance, CreditLedgerEntry, CreditWriteParams,\n AgentMemory, MemoryStats, MemoryType,\n CreateMemoryParams, UpdateMemoryParams,\n AgentWallet, WalletBalance, CreateWalletParams,\n ApiKey, CreatedApiKey, CreateApiKeyParams, ApiKeyPrincipalType,\n AgentComputerConfig, AgentComputerInstance, AgentComputerEvent,\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 = (\n config.baseUrl ?? 'https://api.agentcommons.io'\n ).replace(/\\/$/, '');\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>(method: string, path: string, body?: unknown): 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: (agentId: string, params: Partial<CreateAgentParams>): Promise<{ data: Agent }> =>\n this.request('PUT', `/v1/agents/${agentId}`, params),\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: (agentId: string, params: { toolId: string; usageComments?: string }): 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: (agentId: string): 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<{ 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: (agentId: string, knowledgebase: any[]): Promise<{ data: any[] }> =>\n this.request('PUT', `/v1/agents/${agentId}/knowledgebase`, { knowledgebase }),\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('POST', `/v1/agents/${agentId}/preferred-connections`, params),\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: (agentId: string): Promise<{ data: AgentComputerConfig }> =>\n this.request('GET', `/v1/agents/${agentId}/computer/config`),\n\n updateComputerConfig: (\n agentId: string,\n params: Partial<AgentComputerConfig>,\n ): Promise<{ data: AgentComputerConfig }> =>\n this.request('PUT', `/v1/agents/${agentId}/computer/config`, params),\n\n listComputers: (\n agentId: string,\n filter?: { sessionId?: string; includeTerminated?: boolean },\n ): Promise<{ data: AgentComputerInstance[] }> => {\n const qs = new URLSearchParams();\n if (filter?.sessionId) qs.set('sessionId', filter.sessionId);\n if (filter?.includeTerminated) qs.set('includeTerminated', 'true');\n const query = qs.toString();\n return this.request('GET', `/v1/agents/${agentId}/computers${query ? `?${query}` : ''}`);\n },\n\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('POST', `/v1/agents/${agentId}/computers`, params),\n\n getComputer: (\n agentId: string,\n computerId: string,\n ): Promise<{ data: AgentComputerInstance }> =>\n this.request('GET', `/v1/agents/${agentId}/computers/${computerId}`),\n\n refreshComputer: (\n agentId: string,\n computerId: string,\n ): Promise<{ data: AgentComputerInstance }> =>\n this.request('POST', `/v1/agents/${agentId}/computers/${computerId}/refresh`),\n\n stopComputer: (\n agentId: string,\n computerId: string,\n ): Promise<{ data: AgentComputerInstance }> =>\n this.request('POST', `/v1/agents/${agentId}/computers/${computerId}/stop`),\n\n readComputerFile: (\n agentId: string,\n computerId: string,\n path: string,\n ): Promise<{ data: { path: string; content: string } }> =>\n this.request('GET', `/v1/agents/${agentId}/computers/${computerId}/files/read?path=${encodeURIComponent(path)}`),\n\n runComputerCommand: (\n agentId: string,\n computerId: string,\n params: { command: string; cwd?: string; timeoutSeconds?: number },\n ): Promise<{ data: any }> =>\n this.request('POST', `/v1/agents/${agentId}/computers/${computerId}/commands`, params),\n\n openComputerBrowser: (\n agentId: string,\n computerId: string,\n params: { url: string },\n ): Promise<{ data: any }> =>\n this.request('POST', `/v1/agents/${agentId}/computers/${computerId}/browser/open`, params),\n\n listComputerEvents: (\n agentId: string,\n computerId: string,\n limit?: number,\n ): Promise<{ data: AgentComputerEvent[] }> =>\n this.request('GET', `/v1/agents/${agentId}/computers/${computerId}/events${limit ? `?limit=${limit}` : ''}`),\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('GET', `/v1/agents/tts/voices${qs ? `?${qs}` : ''}`);\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: (ownerId: string, ownerType: 'user' | 'agent'): Promise<Workflow[]> =>\n this.request('GET', `/v1/workflows?ownerId=${ownerId}&ownerType=${ownerType}`),\n\n get: (workflowId: string): Promise<Workflow> =>\n this.request('GET', `/v1/workflows/${workflowId}`),\n\n update: (workflowId: string, updates: Partial<Workflow>): 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: (workflowId: string, params: {\n agentId?: string;\n sessionId?: string;\n inputData?: Record<string, any>;\n userId?: string;\n }): Promise<WorkflowExecution> =>\n this.request('POST', `/v1/workflows/${workflowId}/execute`, params),\n\n getExecution: (workflowId: string, executionId: string): Promise<WorkflowExecution> =>\n this.request('GET', `/v1/workflows/${workflowId}/executions/${executionId}`),\n\n listExecutions: (workflowId: string, limit?: number): Promise<WorkflowExecution[]> =>\n this.request('GET', `/v1/workflows/${workflowId}/executions${limit ? `?limit=${limit}` : ''}`),\n\n cancelExecution: (workflowId: string, executionId: string): Promise<{ success: boolean }> =>\n this.request('POST', `/v1/workflows/${workflowId}/executions/${executionId}/cancel`),\n\n /** Approve a paused human_approval node and resume execution. */\n approveExecution: (workflowId: string, executionId: string, params: {\n approvalToken: string;\n approvalData?: Record<string, any>;\n }): Promise<{ success: boolean; executionId: string; action: string }> =>\n this.request('POST', `/v1/workflows/${workflowId}/executions/${executionId}/approve`, params),\n\n /** Reject a paused human_approval node and terminate execution. */\n rejectExecution: (workflowId: string, executionId: string, params: {\n approvalToken: string;\n reason?: string;\n }): Promise<{ success: boolean; executionId: string; action: string }> =>\n this.request('POST', `/v1/workflows/${workflowId}/executions/${executionId}/reject`, params),\n\n /** Stream execution progress via SSE. Returns an async generator. */\n stream: (workflowId: string, executionId: string): AsyncGenerator<StreamEvent> =>\n this._streamSse(`/v1/workflows/${workflowId}/executions/${executionId}/stream`),\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: { sessionId?: string; agentId?: string; ownerId?: string; ownerType?: 'user' | 'agent' }): 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: (taskId: string, params: { title?: string; description?: string; priority?: number }): 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: (taskId: string, params: { scheduledFor?: Date; estimatedDuration?: number }): Promise<{ data: Task; 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: (agentId: string, initiatorId: string): 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: (agentId: string): 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: (initiator: string): Promise<{ data: import('./types').Session[] }> =>\n this.request('GET', `/v1/sessions/user/${encodeURIComponent(initiator)}`),\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?: { agentId?: string; owner?: string; ownerType?: string; visibility?: string }): 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: (toolId: string, params: Partial<CreateToolParams>): 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 // ── Tool Keys ─────────────────────────────────────────────────────────────\n\n get toolKeys() {\n return {\n list: (filter: { ownerId?: string; ownerType?: string; toolId?: string }): 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: (params: CreateToolKeyParams): 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: (toolId?: string): 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?: { ownerId?: string; ownerType?: string; isPublic?: boolean }): 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) 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: (skillIdOrSlug: string, updates: Partial<CreateSkillParams>): 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: { toAddress: string; amount: string; tokenSymbol?: 'USDC' | 'ETH' },\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<{ principalId: string | null; 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: (principalId: string, principalType: ApiKeyPrincipalType): Promise<ApiKey[]> => {\n const q = new URLSearchParams({ principalId, principalType }).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(params: RunParams): 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: (agentId: string, params: A2ASendTaskParams): 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', id: taskId, method: 'tasks/get', 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', id: taskId, method: 'tasks/cancel', params: { id: taskId },\n }).then((r: any) => r.result as A2ATask),\n\n /** List recent A2A tasks for an agent. */\n listTasks: (agentId: string, limit?: number): Promise<{ tasks: A2ATask[]; total: number }> =>\n this.request('GET', `/v1/a2a/${agentId}/tasks${limit ? `?limit=${limit}` : ''}`),\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: (ownerId: string, ownerType: 'user' | 'agent'): Promise<{ servers: McpServer[]; total: number }> =>\n this.request('GET', `/v1/mcp/servers?ownerId=${ownerId}&ownerType=${ownerType}`),\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('POST', `/v1/mcp/servers?ownerId=${ownerId}&ownerType=${ownerType}`, dto);\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: (serverId: string, params: Partial<{\n name: string;\n description: string;\n connectionConfig: Record<string, any>;\n isPublic: boolean;\n tags: string[];\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: (serverId: string): 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: (serverId: string): Promise<{ toolsDiscovered: number; resourcesDiscovered: number; 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: (ownerId: string, ownerType: 'user' | 'agent'): Promise<{ tools: any[] }> =>\n this.request('GET', `/v1/mcp/tools?ownerId=${ownerId}&ownerType=${ownerType}`),\n\n /** List resources from an MCP server. */\n listResources: (serverId: string): Promise<{ resources: McpResource[]; total: number }> =>\n this.request('GET', `/v1/mcp/servers/${serverId}/resources`),\n\n /** Read a resource by URI. */\n readResource: (serverId: string, uri: string): Promise<{ uri: string; contents: any }> =>\n this.request('GET', `/v1/mcp/servers/${serverId}/resources/read?uri=${encodeURIComponent(uri)}`),\n\n /** List prompts from an MCP server. */\n listPrompts: (serverId: string): Promise<{ prompts: McpPrompt[]; total: number }> =>\n this.request('GET', `/v1/mcp/servers/${serverId}/prompts`),\n\n /** Render a prompt with arguments. */\n getPrompt: (serverId: string, promptName: string, args?: Record<string, string>): Promise<{ description?: string; messages: any[] }> =>\n this.request('POST', `/v1/mcp/servers/${serverId}/prompts/${promptName}`, { arguments: args }),\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('GET', `/v1/memory/agents/${agentId}${qs ? `?${qs}` : ''}`);\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('GET', `/v1/memory/agents/${agentId}/retrieve?${params}`);\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: (memoryId: string, params: UpdateMemoryParams): 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 }\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('GET', `/v1/usage/agents/${agentId}${qs ? `?${qs}` : ''}`);\n },\n\n /** Get aggregated token + cost usage for a session. */\n getSessionUsage: (sessionId: string): 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: (params: CreditWriteParams): Promise<{ data: CreditLedgerEntry }> =>\n this.request('POST', '/v1/credits/grants', params),\n\n debit: (params: CreditWriteParams): 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":[]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@agent-commons/sdk",
3
- "version": "0.2.2",
3
+ "version": "0.2.3",
4
4
  "description": "Typed client SDK for the Agent Commons API",
5
5
  "main": "./dist/index.cjs",
6
6
  "module": "./dist/index.mjs",