@scalar/agent 0.1.5

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.
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../src/index.ts"],
4
+ "sourcesContent": ["import { createMCPClient, type MCPClient } from '@ai-sdk/mcp'\nimport { StreamableHTTPClientTransport } from '@modelcontextprotocol/sdk/client/streamableHttp.js'\nimport { createNeverpanic } from 'neverpanic'\nimport z from 'zod'\n\nimport {\n GET_MINI_OPENAPI_SPEC_TOOL_NAME,\n GET_OPENAPI_SPECS_SUMMARY_TOOL_NAME,\n getMiniOpenAPIDocToolInputSchema,\n TOOL_NAMESPACE_SLUG_DELIMITER,\n} from '@scalar/agent-chat/entities'\n\nexport type AgentError<D> = {\n code: string\n detail: D\n}\n\nexport const n = createNeverpanic<unknown, AgentError<unknown>>()\n\nexport interface AgentSDKConfig {\n baseUrl?: string\n agentKey?: string\n}\n\ntype Api = {\n namespace: string\n slug: string\n}\n\nexport const EXECUTE_REQUEST_TOOL_NAME = 'execute-request'\n\nexport const executeRequestToolInputSchema = z.object({\n method: z.string(),\n path: z.string(),\n headers: z.record(z.string(), z.string()).optional(),\n body: z.string().optional(),\n})\n\nexport const mcpToolSchemas = {\n [EXECUTE_REQUEST_TOOL_NAME]: { inputSchema: executeRequestToolInputSchema },\n [GET_MINI_OPENAPI_SPEC_TOOL_NAME]: {\n inputSchema: getMiniOpenAPIDocToolInputSchema,\n },\n [GET_OPENAPI_SPECS_SUMMARY_TOOL_NAME]: {\n inputSchema: z.object(),\n },\n}\n\nexport const safeParseJson = n.safeFn(\n (value: any) => ({ success: true, data: JSON.parse(value) }),\n (originalError) =>\n n.err({ code: 'FAILED_TO_PARSE_JSON', detail: originalError }),\n)\n\nconst createClients = n.safeFn(\n async ({\n baseUrl,\n agentKey,\n apis,\n }: {\n baseUrl: string\n agentKey?: string\n apis: Api[]\n }) => {\n const clients = await Promise.all(\n apis.map(async (api) => {\n const mcpUrl = new URL(\n `/vector/mcp/${api.namespace}/${api.slug}?activeServerUrl=${encodeURIComponent('https://galaxy.scalar.com')}`,\n baseUrl,\n )\n\n const mcpClient = await createMCPClient({\n transport: new StreamableHTTPClientTransport(mcpUrl, {\n fetch(url, options) {\n const parsedJsonBodyResult = safeParseJson(options?.body)\n if (!parsedJsonBodyResult.success) return fetch(url, options)\n\n if (parsedJsonBodyResult.data.params)\n parsedJsonBodyResult.data.params._meta = {\n securitySchemes: [],\n }\n\n return fetch(url, {\n ...options,\n headers: {\n 'Content-Type': 'application/json',\n 'Accept': 'application/json, text/event-stream',\n ...options?.headers,\n ...(agentKey && {\n 'x-scalar-agent-key': agentKey,\n }),\n },\n body: JSON.stringify(parsedJsonBodyResult.data),\n })\n },\n }),\n })\n\n return {\n mcpClient,\n api,\n }\n }),\n )\n\n return {\n success: true,\n data: clients,\n }\n },\n (originalError) =>\n n.err({ code: 'FAILED_TO_CREATE_MCP_CLIENTS', detail: originalError }),\n)\n\n/**\n * Create AI SDK tools from an MCP clients returned tools.\n * Applies prefix for tool name uniqueness.\n */\nexport const createTools = n.safeFn(\n async (mcpClients: { mcpClient: MCPClient; api: Api }[]) => {\n const toolSets = await Promise.all(\n mcpClients.map(async ({ mcpClient, api }) => {\n const tools = await mcpClient.tools({\n schemas: mcpToolSchemas,\n })\n\n return Object.fromEntries(\n Object.entries(tools).map(([toolName, tool]) => [\n `${api.namespace}${TOOL_NAMESPACE_SLUG_DELIMITER}${api.slug}__${toolName}`,\n tool,\n ]),\n ) as any\n }),\n )\n\n function merge<T>(sources: T[]): T {\n return Object.assign({}, ...sources)\n }\n\n return {\n success: true,\n data: merge(toolSets),\n }\n },\n (originalError) =>\n n.err({ code: 'FAILED_TO_CREATE_MCP_TOOLS', detail: originalError }),\n)\n\nexport const agentScalar = (config: AgentSDKConfig = {}) => {\n const baseUrl = config.baseUrl ?? 'https://services.staging.scalar.com'\n\n const session = async ({ apis }: { apis: Api[] }) => {\n const createClientsResult = await createClients({\n agentKey: config.agentKey,\n baseUrl,\n apis,\n })\n\n if (!createClientsResult.success) {\n throw createClientsResult.error\n }\n\n return {\n tools: async () => {\n const toolsResult = await createTools(createClientsResult.data)\n\n if (!toolsResult.success) {\n throw Error(toolsResult.error.code)\n }\n\n return toolsResult.data\n },\n }\n }\n\n return {\n session,\n }\n}\n"],
5
+ "mappings": "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",
6
+ "names": []
7
+ }
package/package.json ADDED
@@ -0,0 +1,22 @@
1
+ {
2
+ "name": "@scalar/agent",
3
+ "description": "Scalar Agent SDK",
4
+ "version": "0.1.5",
5
+ "author": "Scalar (https://github.com/scalar)",
6
+ "license": "MIT",
7
+ "private": false,
8
+ "engines": {
9
+ "node": ">=24"
10
+ },
11
+ "files": [
12
+ "dist"
13
+ ],
14
+ "type": "module",
15
+ "exports": {
16
+ ".": {
17
+ "import": "./dist/index.js",
18
+ "types": "./dist/index.d.ts",
19
+ "default": "./dist/index.js"
20
+ }
21
+ }
22
+ }