@inf-mcp/mcp-server 0.2.0 → 0.2.1
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.js +2 -6
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -26,17 +26,13 @@ var InflectivClient = class {
|
|
|
26
26
|
}
|
|
27
27
|
/** Returns the API path prefix based on environment:
|
|
28
28
|
* - Production (app.inflectiv.ai/api/platform): no prefix (proxy adds /ext/)
|
|
29
|
-
* - Railway
|
|
30
|
-
* - Localhost: /api/v2 prefix (direct API access)
|
|
29
|
+
* - All other environments (localhost, Railway, etc.): /api/v2 (direct API access)
|
|
31
30
|
*/
|
|
32
31
|
get pathPrefix() {
|
|
33
32
|
if (this.baseUrl.includes("app.inflectiv.ai")) {
|
|
34
33
|
return "";
|
|
35
34
|
}
|
|
36
|
-
|
|
37
|
-
return "/api/v2";
|
|
38
|
-
}
|
|
39
|
-
return "/api/platform";
|
|
35
|
+
return "/api/v2";
|
|
40
36
|
}
|
|
41
37
|
headers(extra) {
|
|
42
38
|
const h = {};
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/client.ts","../src/errors.ts","../src/tools/agents.ts","../src/tools/datasets.ts","../src/tools/files.ts","../src/tools/knowledge-sources.ts","../src/tools/marketplace.ts","../src/memory/project-context.ts","../src/memory/memory-store.ts","../src/tools/skills.ts","../src/tools/webhooks.ts","../src/memory/types.ts","../src/tools/memory.ts","../src/resources/api-docs.ts","../src/server.ts","../src/index.ts"],"names":["path","z","fs","store","path2","fs3"],"mappings":"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","file":"index.js","sourcesContent":["import { z } from \"zod\";\n\nconst ApiKeySchema = z\n .string()\n .startsWith(\"inf_\", \"API key must start with 'inf_'\");\n\nexport class InflectivApiError extends Error {\n constructor(\n public status: number,\n public body: unknown,\n ) {\n const msg =\n typeof body === \"object\" && body !== null && \"detail\" in body\n ? String((body as { detail: unknown }).detail)\n : JSON.stringify(body);\n super(`HTTP ${status}: ${msg}`);\n this.name = \"InflectivApiError\";\n }\n}\n\nexport class InflectivClient {\n private apiKey: string | null;\n private baseUrl: string;\n\n constructor(apiKey: string | null, baseUrl?: string) {\n this.apiKey = apiKey ? ApiKeySchema.parse(apiKey) : null;\n this.baseUrl = (\n baseUrl ?? \"https://app.inflectiv.ai/api/platform\"\n ).replace(/\\/$/, \"\");\n }\n\n /** Returns the API path prefix based on environment:\n * - Production (app.inflectiv.ai/api/platform): no prefix (proxy adds /ext/)\n * - Railway dev: /api/platform prefix (Next.js proxy)\n * - Localhost: /api/v2 prefix (direct API access)\n */\n get pathPrefix(): string {\n if (this.baseUrl.includes(\"app.inflectiv.ai\")) {\n return \"\";\n }\n if (this.baseUrl.includes(\"localhost\") || this.baseUrl.includes(\"127.0.0.1\")) {\n return \"/api/v2\";\n }\n return \"/api/platform\";\n }\n\n private headers(extra?: Record<string, string>): Record<string, string> {\n const h: Record<string, string> = {};\n if (this.apiKey) {\n h[\"X-API-Key\"] = this.apiKey;\n }\n return { ...h, ...extra };\n }\n\n private async request<T>(\n method: string,\n path: string,\n body?: unknown,\n ): Promise<T> {\n const url = `${this.baseUrl}${path}`.replace(/\\/+$/, \"\");\n const init: RequestInit = {\n method,\n headers: this.headers(\n body !== undefined ? { \"Content-Type\": \"application/json\" } : undefined,\n ),\n body: body !== undefined ? JSON.stringify(body) : undefined,\n };\n\n const res = await fetch(url, init);\n\n if (!res.ok) {\n let errorBody: unknown;\n try {\n errorBody = await res.json();\n } catch {\n errorBody = await res.text();\n }\n throw new InflectivApiError(res.status, errorBody);\n }\n\n return res.json() as Promise<T>;\n }\n\n async get<T>(path: string): Promise<T> {\n return this.request<T>(\"GET\", path);\n }\n\n async post<T>(path: string, body?: unknown): Promise<T> {\n return this.request<T>(\"POST\", path, body);\n }\n\n async put<T>(path: string, body?: unknown): Promise<T> {\n return this.request<T>(\"PUT\", path, body);\n }\n\n async patch<T>(path: string, body?: unknown): Promise<T> {\n return this.request<T>(\"PATCH\", path, body);\n }\n\n async delete<T>(path: string): Promise<T> {\n return this.request<T>(\"DELETE\", path);\n }\n\n async uploadFile(\n path: string,\n fileBuffer: Buffer,\n filename: string,\n title?: string,\n dataset?: string,\n ): Promise<unknown> {\n const formData = new FormData();\n const blob = new Blob([fileBuffer]);\n formData.append(\"file\", blob, filename);\n if (title) {\n formData.append(\"title\", title);\n }\n\n // dataset is a Query param on the backend, so pass via URL\n const qs = dataset ? `?dataset=${encodeURIComponent(dataset)}` : \"\";\n const url = `${this.baseUrl}${path}${qs}`.replace(/\\/+$/, \"\");\n const res = await fetch(url, {\n method: \"POST\",\n headers: this.headers(),\n body: formData,\n });\n\n if (!res.ok) {\n let errorBody: unknown;\n try {\n errorBody = await res.json();\n } catch {\n errorBody = await res.text();\n }\n throw new InflectivApiError(res.status, errorBody);\n }\n\n return res.json();\n }\n}\n","import { ZodError } from \"zod\";\nimport { InflectivApiError } from \"./client.js\";\n\nexport function formatError(err: unknown): {\n content: { type: \"text\"; text: string }[];\n isError: true;\n} {\n let message: string;\n\n if (err instanceof InflectivApiError) {\n const body = err.body;\n let detail = err.message;\n\n if (typeof body === \"object\" && body !== null) {\n const b = body as Record<string, unknown>;\n if (b.detail) detail = String(b.detail);\n if (b.credits_required) {\n detail += `\\n\\nInsufficient credits. Required: ${b.credits_required}, Available: ${b.credits_available ?? \"unknown\"}. Top up at https://app.inflectiv.ai`;\n }\n }\n\n message = `Inflectiv API Error (${err.status}): ${detail}`;\n } else if (err instanceof ZodError) {\n const issues = err.issues\n .map((i) => ` - ${i.path.join(\".\")}: ${i.message}`)\n .join(\"\\n\");\n message = `Validation Error:\\n${issues}`;\n } else if (err instanceof Error) {\n message = err.message.includes(\"fetch failed\")\n ? `Network error: Could not reach Inflectiv API. Check your INFLECTIV_BASE_URL and network connection.`\n : `Error: ${err.message}`;\n } else {\n message = `Unknown error: ${String(err)}`;\n }\n\n return {\n content: [{ type: \"text\", text: message }],\n isError: true,\n };\n}\n","import { McpServer } from \"@modelcontextprotocol/sdk/server/mcp.js\";\nimport { z } from \"zod\";\nimport { InflectivClient } from \"../client.js\";\nimport { formatError } from \"../errors.js\";\n\nexport function registerAgentTools(server: McpServer, client: InflectivClient) {\n server.tool(\n \"inflectiv_list_agents\",\n \"List all agents owned by you. With a global key: lists all agents. With a dataset key: lists agents with that dataset attached. Free.\",\n {},\n async () => {\n try {\n const data = await client.get(`${client.pathPrefix}/ext/agents/`);\n return {\n content: [{ type: \"text\", text: JSON.stringify(data, null, 2) }],\n };\n } catch (err) {\n return formatError(err);\n }\n },\n );\n\n server.tool(\n \"inflectiv_create_agent\",\n \"Create a new AI agent attached to the API key's dataset. Costs 5 credits.\",\n {\n name: z.string().min(1).max(255).describe(\"Agent name\"),\n description: z\n .string()\n .max(1000)\n .optional()\n .describe(\"Agent description\"),\n personality: z\n .string()\n .optional()\n .describe(\n 'Agent personality style (default: \"professional\")',\n ),\n system_instructions: z\n .string()\n .max(2000)\n .optional()\n .describe(\"Custom system instructions for the agent\"),\n response_length: z\n .string()\n .optional()\n .describe('Response length preference (default: \"concise\")'),\n model_name: z\n .string()\n .optional()\n .describe('LLM model name (default: \"gpt-4o-mini\")'),\n temperature: z\n .number()\n .int()\n .min(0)\n .max(100)\n .optional()\n .describe(\"Temperature 0-100 (default: 70)\"),\n dataset: z.string().optional().describe(\"Dataset ID or api_name to attach (required for global API keys)\"),\n },\n async ({ dataset, ...body }) => {\n try {\n const qs = dataset ? `?dataset=${dataset}` : \"\";\n const data = await client.post(`${client.pathPrefix}/ext/agents/${qs}`, body);\n return {\n content: [{ type: \"text\", text: JSON.stringify(data, null, 2) }],\n };\n } catch (err) {\n return formatError(err);\n }\n },\n );\n\n server.tool(\n \"inflectiv_get_agent\",\n \"Get details of a specific agent. Free.\",\n {\n agent_id: z.number().int().describe(\"Agent ID\"),\n },\n async ({ agent_id }) => {\n try {\n const data = await client.get(`${client.pathPrefix}/ext/agents/${agent_id}`);\n return {\n content: [{ type: \"text\", text: JSON.stringify(data, null, 2) }],\n };\n } catch (err) {\n return formatError(err);\n }\n },\n );\n\n server.tool(\n \"inflectiv_update_agent_config\",\n \"Update an agent's configuration (personality, instructions, model, temperature, etc.). Costs 2 credits.\",\n {\n agent_id: z.number().int().describe(\"Agent ID\"),\n name: z.string().min(1).max(255).optional().describe(\"Agent name\"),\n description: z\n .string()\n .max(1000)\n .optional()\n .describe(\"Agent description\"),\n personality: z.string().optional().describe(\"Agent personality style\"),\n system_instructions: z\n .string()\n .max(2000)\n .optional()\n .describe(\"Custom system instructions\"),\n response_length: z\n .string()\n .optional()\n .describe(\"Response length preference\"),\n model_name: z.string().optional().describe(\"LLM model name\"),\n temperature: z\n .number()\n .int()\n .min(0)\n .max(100)\n .optional()\n .describe(\"Temperature 0-100\"),\n },\n async ({ agent_id, ...body }) => {\n try {\n const data = await client.put(\n `${client.pathPrefix}/ext/agents/${agent_id}/config`,\n body,\n );\n return {\n content: [{ type: \"text\", text: JSON.stringify(data, null, 2) }],\n };\n } catch (err) {\n return formatError(err);\n }\n },\n );\n\n server.tool(\n \"inflectiv_chat_with_agent\",\n 'Send a message to an agent and get a RAG-enabled response. Costs 1 credit. Provide conversation_history as an array of {role, content} objects for multi-turn chat.',\n {\n agent_id: z.number().int().describe(\"Agent ID\"),\n message: z.string().min(1).max(4000).describe(\"Message to send\"),\n conversation_history: z\n .array(\n z.object({\n role: z.string().describe('Message role (e.g. \"user\", \"assistant\")'),\n content: z.string().describe(\"Message content\"),\n }),\n )\n .optional()\n .describe(\"Previous conversation messages for context\"),\n },\n async ({ agent_id, message, conversation_history }) => {\n try {\n const data = await client.post(`${client.pathPrefix}/ext/agents/${agent_id}/chat`, {\n message,\n conversation_history: conversation_history ?? [],\n });\n return {\n content: [{ type: \"text\", text: JSON.stringify(data, null, 2) }],\n };\n } catch (err) {\n return formatError(err);\n }\n },\n );\n\n server.tool(\n \"inflectiv_list_agent_datasets\",\n \"List all datasets attached to an agent. Free.\",\n {\n agent_id: z.number().int().describe(\"Agent ID\"),\n },\n async ({ agent_id }) => {\n try {\n const data = await client.get(`${client.pathPrefix}/ext/agents/${agent_id}/datasets`);\n return {\n content: [{ type: \"text\", text: JSON.stringify(data, null, 2) }],\n };\n } catch (err) {\n return formatError(err);\n }\n },\n );\n\n server.tool(\n \"inflectiv_attach_dataset\",\n 'Attach a dataset to an agent. Free. Mode can be \"read_only\" or \"self_learning\".',\n {\n agent_id: z.number().int().describe(\"Agent ID\"),\n dataset_id: z.number().int().describe(\"Dataset ID to attach\"),\n mode: z\n .enum([\"read_only\", \"self_learning\"])\n .optional()\n .describe('Dataset mode (default: \"read_only\")'),\n },\n async ({ agent_id, dataset_id, mode }) => {\n try {\n const data = await client.post(\n `${client.pathPrefix}/ext/agents/${agent_id}/datasets`,\n {\n dataset_id,\n mode: mode ?? \"read_only\",\n },\n );\n return {\n content: [{ type: \"text\", text: JSON.stringify(data, null, 2) }],\n };\n } catch (err) {\n return formatError(err);\n }\n },\n );\n\n server.tool(\n \"inflectiv_update_dataset_mode\",\n 'Update the mode of a dataset attached to an agent. Mode: \"read_only\" or \"self_learning\". Free.',\n {\n agent_id: z.number().int().describe(\"Agent ID\"),\n dataset_id: z.number().int().describe(\"Dataset ID\"),\n mode: z\n .enum([\"read_only\", \"self_learning\"])\n .describe(\"New dataset mode\"),\n },\n async ({ agent_id, dataset_id, mode }) => {\n try {\n const data = await client.patch(\n `${client.pathPrefix}/ext/agents/${agent_id}/datasets/${dataset_id}`,\n { mode },\n );\n return {\n content: [{ type: \"text\", text: JSON.stringify(data, null, 2) }],\n };\n } catch (err) {\n return formatError(err);\n }\n },\n );\n}\n","import { McpServer } from \"@modelcontextprotocol/sdk/server/mcp.js\";\nimport { z } from \"zod\";\nimport { InflectivClient } from \"../client.js\";\nimport { formatError } from \"../errors.js\";\n\nexport function registerDatasetTools(\n server: McpServer,\n client: InflectivClient,\n) {\n server.tool(\n \"inflectiv_list_datasets\",\n \"List datasets accessible via this API key. Free.\",\n {\n dataset: z\n .string()\n .optional()\n .describe(\n \"Dataset ID or api_name (required for global API keys, optional for dataset-scoped keys)\",\n ),\n },\n async ({ dataset }) => {\n try {\n const qs = dataset ? `?dataset=${dataset}` : \"\";\n const data = await client.get(`${client.pathPrefix}/ext/datasets/${qs}`);\n return {\n content: [{ type: \"text\", text: JSON.stringify(data, null, 2) }],\n };\n } catch (err) {\n return formatError(err);\n }\n },\n );\n\n server.tool(\n \"inflectiv_update_dataset\",\n \"Update dataset name and/or description. Only dataset owner can update. Free.\",\n {\n dataset: z\n .string()\n .optional()\n .describe(\n \"Dataset ID or api_name (required for global API keys, optional for dataset-scoped keys)\",\n ),\n name: z\n .string()\n .min(1)\n .max(255)\n .optional()\n .describe(\"New dataset name\"),\n description: z\n .string()\n .max(1000)\n .optional()\n .describe(\"New dataset description\"),\n },\n async ({ dataset, ...params }) => {\n try {\n const qs = dataset ? `?dataset=${dataset}` : \"\";\n const data = await client.put(`${client.pathPrefix}/ext/datasets/${qs}`, params);\n return {\n content: [{ type: \"text\", text: JSON.stringify(data, null, 2) }],\n };\n } catch (err) {\n return formatError(err);\n }\n },\n );\n\n server.tool(\n \"inflectiv_reindex_dataset\",\n \"Reindex dataset vectors. Useful after bulk changes. Costs 2 credits.\",\n {\n dataset: z\n .string()\n .optional()\n .describe(\n \"Dataset ID or api_name (required for global API keys, optional for dataset-scoped keys)\",\n ),\n },\n async ({ dataset }) => {\n try {\n const qs = dataset ? `?dataset=${dataset}` : \"\";\n const data = await client.post(`${client.pathPrefix}/ext/datasets/reindex${qs}`);\n return {\n content: [{ type: \"text\", text: JSON.stringify(data, null, 2) }],\n };\n } catch (err) {\n return formatError(err);\n }\n },\n );\n\n server.tool(\n \"inflectiv_search_dataset\",\n \"Semantic search across the dataset's knowledge base. Costs 1 credit.\",\n {\n dataset: z\n .string()\n .optional()\n .describe(\n \"Dataset ID or api_name (required for global API keys, optional for dataset-scoped keys)\",\n ),\n query: z.string().min(1).max(2000).describe(\"Search query\"),\n top_k: z\n .number()\n .int()\n .min(1)\n .max(20)\n .optional()\n .describe(\"Number of results to return (default: 5)\"),\n score_threshold: z\n .number()\n .min(0)\n .max(1)\n .optional()\n .describe(\"Minimum similarity score 0.0-1.0 (default: 0.6)\"),\n },\n async ({ dataset, ...params }) => {\n try {\n const qs = dataset ? `?dataset=${dataset}` : \"\";\n const data = await client.post(`${client.pathPrefix}/ext/datasets/query${qs}`, params);\n return {\n content: [{ type: \"text\", text: JSON.stringify(data, null, 2) }],\n };\n } catch (err) {\n return formatError(err);\n }\n },\n );\n\n server.tool(\n \"inflectiv_batch_search\",\n \"Run multiple semantic searches in a single call. Costs 1 credit per query.\",\n {\n dataset: z\n .string()\n .optional()\n .describe(\n \"Dataset ID or api_name (required for global API keys, optional for dataset-scoped keys)\",\n ),\n queries: z\n .array(z.string())\n .min(1)\n .max(20)\n .describe(\"List of search queries (1-20)\"),\n top_k: z\n .number()\n .int()\n .min(1)\n .max(20)\n .optional()\n .describe(\"Number of results per query (default: 5)\"),\n score_threshold: z\n .number()\n .min(0)\n .max(1)\n .optional()\n .describe(\"Minimum similarity score 0.0-1.0 (default: 0.6)\"),\n },\n async ({ dataset, ...params }) => {\n try {\n const qs = dataset ? `?dataset=${dataset}` : \"\";\n const data = await client.post(\n `${client.pathPrefix}/ext/datasets/query/batch${qs}`,\n params,\n );\n return {\n content: [{ type: \"text\", text: JSON.stringify(data, null, 2) }],\n };\n } catch (err) {\n return formatError(err);\n }\n },\n );\n\n server.tool(\n \"inflectiv_write_intelligence\",\n \"Write a single intelligence entry to the dataset. Costs 1 credit (0 if duplicate detected). Content is embedded and becomes searchable.\",\n {\n dataset: z\n .string()\n .optional()\n .describe(\n \"Dataset ID or api_name (required for global API keys, optional for dataset-scoped keys)\",\n ),\n agent_id: z\n .number()\n .int()\n .describe(\"Agent ID that owns this intelligence\"),\n content: z\n .string()\n .min(1)\n .max(50000)\n .describe(\"Intelligence content text\"),\n title: z\n .string()\n .max(255)\n .optional()\n .describe(\"Title for the intelligence entry\"),\n source_type: z\n .enum([\"agent_text\", \"agent_url\"])\n .optional()\n .describe('Source type (default: \"agent_text\")'),\n source_identifier: z\n .string()\n .max(2000)\n .optional()\n .describe(\"Source identifier (e.g. URL)\"),\n },\n async ({ agent_id, dataset, ...body }) => {\n try {\n const datasetQs = dataset ? `&dataset=${dataset}` : \"\";\n const data = await client.post(\n `${client.pathPrefix}/ext/datasets/intelligence?agent_id=${agent_id}${datasetQs}`,\n body,\n );\n return {\n content: [{ type: \"text\", text: JSON.stringify(data, null, 2) }],\n };\n } catch (err) {\n return formatError(err);\n }\n },\n );\n\n server.tool(\n \"inflectiv_batch_write_intelligence\",\n \"Write multiple intelligence entries in a single call. Costs 1 credit per new entry (duplicates are free). Max 50 entries.\",\n {\n dataset: z\n .string()\n .optional()\n .describe(\n \"Dataset ID or api_name (required for global API keys, optional for dataset-scoped keys)\",\n ),\n agent_id: z\n .number()\n .int()\n .describe(\"Agent ID that owns these intelligence entries\"),\n entries: z\n .array(\n z.object({\n content: z\n .string()\n .min(1)\n .max(50000)\n .describe(\"Intelligence content text\"),\n title: z.string().max(255).optional().describe(\"Entry title\"),\n source_type: z\n .enum([\"agent_text\", \"agent_url\"])\n .optional()\n .describe('Source type (default: \"agent_text\")'),\n source_identifier: z\n .string()\n .max(2000)\n .optional()\n .describe(\"Source identifier\"),\n }),\n )\n .min(1)\n .max(50)\n .describe(\"Intelligence entries to write (1-50)\"),\n },\n async ({ agent_id, dataset, entries }) => {\n try {\n const datasetQs = dataset ? `&dataset=${dataset}` : \"\";\n const data = await client.post(\n `${client.pathPrefix}/ext/datasets/intelligence/batch?agent_id=${agent_id}${datasetQs}`,\n { entries },\n );\n return {\n content: [{ type: \"text\", text: JSON.stringify(data, null, 2) }],\n };\n } catch (err) {\n return formatError(err);\n }\n },\n );\n\n server.tool(\n \"inflectiv_list_intelligence\",\n \"List intelligence entries in the dataset. Free. Filter by agent_id, status, with pagination.\",\n {\n dataset: z\n .string()\n .optional()\n .describe(\n \"Dataset ID or api_name (required for global API keys, optional for dataset-scoped keys)\",\n ),\n agent_id: z\n .number()\n .int()\n .optional()\n .describe(\"Filter by agent ID\"),\n status: z\n .enum([\"processing\", \"processed\", \"failed\"])\n .optional()\n .describe(\"Filter by processing status\"),\n limit: z\n .number()\n .int()\n .min(1)\n .max(100)\n .optional()\n .describe(\"Number of entries to return (default: 50)\"),\n offset: z\n .number()\n .int()\n .min(0)\n .optional()\n .describe(\"Offset for pagination (default: 0)\"),\n },\n async ({ dataset, agent_id, status, limit, offset }) => {\n try {\n const params = new URLSearchParams();\n if (dataset) params.set(\"dataset\", dataset);\n if (agent_id !== undefined) params.set(\"agent_id\", String(agent_id));\n if (status) params.set(\"status\", status);\n if (limit !== undefined) params.set(\"limit\", String(limit));\n if (offset !== undefined) params.set(\"offset\", String(offset));\n const qs = params.toString();\n const path = `${client.pathPrefix}/ext/datasets/intelligence${qs ? `?${qs}` : \"\"}`;\n const data = await client.get(path);\n return {\n content: [{ type: \"text\", text: JSON.stringify(data, null, 2) }],\n };\n } catch (err) {\n return formatError(err);\n }\n },\n );\n}\n","import { McpServer } from \"@modelcontextprotocol/sdk/server/mcp.js\";\nimport { z } from \"zod\";\nimport { readFile } from \"node:fs/promises\";\nimport { basename } from \"node:path\";\nimport { InflectivClient } from \"../client.js\";\nimport { formatError } from \"../errors.js\";\n\nconst SUPPORTED_EXTENSIONS = [\n \".pdf\",\n \".docx\",\n \".txt\",\n \".md\",\n \".html\",\n \".csv\",\n \".json\",\n \".jsonl\",\n \".tsv\",\n \".xlsx\",\n \".xls\",\n \".parquet\",\n \".xml\",\n];\n\nexport function registerFileTools(\n server: McpServer,\n client: InflectivClient,\n) {\n server.tool(\n \"inflectiv_list_files\",\n \"List files (knowledge sources) in the dataset. Free.\",\n {\n skip: z\n .number()\n .int()\n .min(0)\n .optional()\n .describe(\"Number of files to skip (default: 0)\"),\n limit: z\n .number()\n .int()\n .min(1)\n .max(100)\n .optional()\n .describe(\"Number of files to return (default: 50)\"),\n dataset: z\n .string()\n .optional()\n .describe(\"Dataset ID or api_name (required for global API keys)\"),\n },\n async ({ skip, limit, dataset }) => {\n try {\n const params = new URLSearchParams();\n if (skip !== undefined) params.set(\"skip\", String(skip));\n if (limit !== undefined) params.set(\"limit\", String(limit));\n if (dataset) params.set(\"dataset\", dataset);\n const qs = params.toString();\n const path = `${client.pathPrefix}/ext/files/${qs ? `?${qs}` : \"\"}`;\n const data = await client.get(path);\n return {\n content: [{ type: \"text\", text: JSON.stringify(data, null, 2) }],\n };\n } catch (err) {\n return formatError(err);\n }\n },\n );\n\n server.tool(\n \"inflectiv_get_file\",\n \"Get details of a specific file (knowledge source). Free.\",\n {\n file_id: z.number().int().describe(\"File ID\"),\n },\n async ({ file_id }) => {\n try {\n const data = await client.get(`${client.pathPrefix}/ext/files/${file_id}`);\n return {\n content: [{ type: \"text\", text: JSON.stringify(data, null, 2) }],\n };\n } catch (err) {\n return formatError(err);\n }\n },\n );\n\n server.tool(\n \"inflectiv_upload_file\",\n `Upload a local file to the dataset as a knowledge source. Costs 5 credits base + 1/MB over 5MB. Supported formats: ${SUPPORTED_EXTENSIONS.join(\", \")}`,\n {\n file_path: z\n .string()\n .describe(\"Absolute path to the local file to upload\"),\n title: z\n .string()\n .max(255)\n .optional()\n .describe(\"Display title for the file\"),\n dataset: z\n .string()\n .optional()\n .describe(\"Dataset ID or api_name (required for global API keys)\"),\n },\n async ({ file_path, title, dataset }) => {\n try {\n const ext = \".\" + file_path.split(\".\").pop()?.toLowerCase();\n if (!SUPPORTED_EXTENSIONS.includes(ext)) {\n return {\n content: [\n {\n type: \"text\",\n text: `Unsupported file type \"${ext}\". Supported: ${SUPPORTED_EXTENSIONS.join(\", \")}`,\n },\n ],\n isError: true as const,\n };\n }\n\n const fileBuffer = await readFile(file_path);\n const filename = basename(file_path);\n const data = await client.uploadFile(\n `${client.pathPrefix}/ext/files/upload`,\n fileBuffer,\n filename,\n title,\n dataset,\n );\n return {\n content: [{ type: \"text\", text: JSON.stringify(data, null, 2) }],\n };\n } catch (err) {\n return formatError(err);\n }\n },\n );\n\n server.tool(\n \"inflectiv_reprocess_file\",\n \"Reprocess a previously uploaded file. Useful after processing failures. Costs 5 credits.\",\n {\n file_id: z.number().int().describe(\"File ID to reprocess\"),\n },\n async ({ file_id }) => {\n try {\n const data = await client.post(`${client.pathPrefix}/ext/files/${file_id}/reprocess`);\n return {\n content: [{ type: \"text\", text: JSON.stringify(data, null, 2) }],\n };\n } catch (err) {\n return formatError(err);\n }\n },\n );\n}\n","import { McpServer } from \"@modelcontextprotocol/sdk/server/mcp.js\";\nimport { z } from \"zod\";\nimport { InflectivClient } from \"../client.js\";\nimport { formatError } from \"../errors.js\";\n\nexport function registerKnowledgeSourceTools(\n server: McpServer,\n client: InflectivClient,\n) {\n server.tool(\n \"inflectiv_list_knowledge_sources\",\n \"List ALL knowledge sources in the dataset (files, URLs, manual text, AI-generated, etc.). Free.\",\n {\n source_type: z\n .enum([\n \"file\",\n \"url\",\n \"manual\",\n \"ai_generated\",\n \"agent_text\",\n \"agent_url\",\n \"token_pair\",\n ])\n .optional()\n .describe(\"Filter by source type\"),\n status: z\n .enum([\"processing\", \"processed\", \"failed\"])\n .optional()\n .describe(\"Filter by processing status\"),\n skip: z\n .number()\n .int()\n .min(0)\n .optional()\n .describe(\"Number of items to skip (default: 0)\"),\n limit: z\n .number()\n .int()\n .min(1)\n .max(100)\n .optional()\n .describe(\"Number of items to return (default: 50)\"),\n dataset: z.string().optional().describe(\"Dataset ID or api_name (required for global API keys)\"),\n },\n async ({ source_type, status, skip, limit, dataset }) => {\n try {\n const params = new URLSearchParams();\n if (source_type) params.set(\"source_type\", source_type);\n if (status) params.set(\"status\", status);\n if (skip !== undefined) params.set(\"skip\", String(skip));\n if (limit !== undefined) params.set(\"limit\", String(limit));\n if (dataset) params.set(\"dataset\", dataset);\n const qs = params.toString();\n const path = `${client.pathPrefix}/ext/knowledge-sources/${qs ? `?${qs}` : \"\"}`;\n const data = await client.get(path);\n return {\n content: [{ type: \"text\", text: JSON.stringify(data, null, 2) }],\n };\n } catch (err) {\n return formatError(err);\n }\n },\n );\n}\n","import type { McpServer } from \"@modelcontextprotocol/sdk/server/mcp.js\";\nimport { z } from \"zod\";\nimport type { InflectivClient } from \"../client.js\";\nimport { formatError } from \"../errors.js\";\n\nexport function registerMarketplaceTools(server: McpServer, client: InflectivClient): void {\n server.tool(\n \"inflectiv_browse_skill_marketplace\",\n \"Browse published skill marketplace listings. Free. Supports search, tag filtering, price filtering, and sorting.\",\n {\n query: z.string().max(200).optional().describe(\"Search query\"),\n tags: z.array(z.string()).max(10).optional().describe(\"Filter by tags\"),\n price_type: z.enum([\"free\", \"one_time\"]).optional().describe(\"Filter by price type\"),\n sort_by: z\n .enum([\"newest\", \"popular\", \"highest_rated\", \"price_low\", \"price_high\"])\n .optional()\n .describe(\"Sort order (default: newest)\"),\n platform: z.string().optional().describe(\"Filter by platform (evm, dogecoin)\"),\n skip: z.number().int().min(0).optional().describe(\"Pagination offset\"),\n limit: z.number().int().min(1).max(100).optional().describe(\"Pagination limit (default: 20)\"),\n },\n async (params) => {\n try {\n const searchParams = new URLSearchParams();\n if (params.query) searchParams.set(\"query\", params.query);\n if (params.tags) params.tags.forEach((t) => searchParams.append(\"tags\", t));\n if (params.price_type) searchParams.set(\"price_type\", params.price_type);\n if (params.sort_by) searchParams.set(\"sort_by\", params.sort_by);\n if (params.platform) searchParams.set(\"platform\", params.platform);\n if (params.skip !== undefined) searchParams.set(\"skip\", String(params.skip));\n if (params.limit !== undefined) searchParams.set(\"limit\", String(params.limit));\n\n const qs = searchParams.toString();\n const path = `${client.pathPrefix}/skill-marketplace/listings${qs ? `?${qs}` : \"\"}`;\n const data = await client.get(path);\n\n return {\n content: [{ type: \"text\", text: JSON.stringify(data, null, 2) }],\n };\n } catch (err) {\n return formatError(err);\n }\n },\n );\n\n server.tool(\n \"inflectiv_get_skill_listing\",\n \"Get detailed information about a skill marketplace listing. Free.\",\n {\n listing_id: z.number().describe(\"Skill listing ID\"),\n },\n async (params) => {\n try {\n const data = await client.get(\n `${client.pathPrefix}/skill-marketplace/listings/${params.listing_id}`,\n );\n return {\n content: [{ type: \"text\", text: JSON.stringify(data, null, 2) }],\n };\n } catch (err) {\n return formatError(err);\n }\n },\n );\n\n server.tool(\n \"inflectiv_acquire_skill\",\n \"Acquire a skill from the marketplace. Free skills cost nothing. Paid skills deduct credits.\",\n {\n listing_id: z.number().describe(\"Skill listing ID to acquire\"),\n },\n async (params) => {\n try {\n const data = await client.post(\n `${client.pathPrefix}/ext/skills/acquire-listing/${params.listing_id}`,\n );\n return {\n content: [{ type: \"text\", text: JSON.stringify(data, null, 2) }],\n };\n } catch (err) {\n return formatError(err);\n }\n },\n );\n\n server.tool(\n \"inflectiv_browse_dataset_marketplace\",\n \"Browse published dataset marketplace listings. Free. No auth required.\",\n {\n query: z.string().max(200).optional().describe(\"Search query\"),\n tags: z.array(z.string()).max(10).optional().describe(\"Filter by tags\"),\n sort_by: z\n .enum([\"newest\", \"popular\", \"highest_rated\", \"price_low\", \"price_high\"])\n .optional()\n .describe(\"Sort order\"),\n skip: z.number().int().min(0).optional().describe(\"Pagination offset\"),\n limit: z.number().int().min(1).max(100).optional().describe(\"Pagination limit\"),\n },\n async (params) => {\n try {\n const searchParams = new URLSearchParams();\n if (params.query) searchParams.set(\"query\", params.query);\n if (params.tags) params.tags.forEach((t) => searchParams.append(\"tags\", t));\n if (params.sort_by) searchParams.set(\"sort_by\", params.sort_by);\n if (params.skip !== undefined) searchParams.set(\"skip\", String(params.skip));\n if (params.limit !== undefined) searchParams.set(\"limit\", String(params.limit));\n\n const qs = searchParams.toString();\n const path = `${client.pathPrefix}/marketplace/listings${qs ? `?${qs}` : \"\"}`;\n const data = await client.get(path);\n\n return {\n content: [{ type: \"text\", text: JSON.stringify(data, null, 2) }],\n };\n } catch (err) {\n return formatError(err);\n }\n },\n );\n\n server.tool(\n \"inflectiv_browse_agent_marketplace\",\n \"Browse published agent marketplace listings. Free. No auth required.\",\n {\n query: z.string().max(200).optional().describe(\"Search query\"),\n tags: z.array(z.string()).max(10).optional().describe(\"Filter by tags\"),\n sort_by: z\n .enum([\"newest\", \"popular\", \"highest_rated\", \"price_low\", \"price_high\"])\n .optional()\n .describe(\"Sort order\"),\n platform: z.string().optional().describe(\"Filter by platform\"),\n skip: z.number().int().min(0).optional().describe(\"Pagination offset\"),\n limit: z.number().int().min(1).max(100).optional().describe(\"Pagination limit\"),\n },\n async (params) => {\n try {\n const searchParams = new URLSearchParams();\n if (params.query) searchParams.set(\"query\", params.query);\n if (params.tags) params.tags.forEach((t) => searchParams.append(\"tags\", t));\n if (params.sort_by) searchParams.set(\"sort_by\", params.sort_by);\n if (params.platform) searchParams.set(\"platform\", params.platform);\n if (params.skip !== undefined) searchParams.set(\"skip\", String(params.skip));\n if (params.limit !== undefined) searchParams.set(\"limit\", String(params.limit));\n\n const qs = searchParams.toString();\n const path = `${client.pathPrefix}/agent-marketplace/listings${qs ? `?${qs}` : \"\"}`;\n const data = await client.get(path);\n\n return {\n content: [{ type: \"text\", text: JSON.stringify(data, null, 2) }],\n };\n } catch (err) {\n return formatError(err);\n }\n },\n );\n}\n","import * as fs from \"node:fs\";\nimport * as path from \"node:path\";\nimport type { ProjectConfig } from \"./types.js\";\n\nconst PROJECT_MARKERS = [\n \".git\",\n \"package.json\",\n \"pyproject.toml\",\n \"Cargo.toml\",\n \"go.mod\",\n \"pom.xml\",\n \"build.gradle\",\n \"Makefile\",\n];\n\nconst INFLECTIV_DIR = \".inflectiv\";\nconst MEMORY_DIR = \"memory\";\nconst CONFIG_FILE = \"config.json\";\nconst ENTRIES_FILE = \"entries.jsonl\";\nconst INDEX_FILE = \"index.json\";\n\nexport function findProjectRoot(startDir?: string): string {\n let dir = startDir ?? process.cwd();\n const root = path.parse(dir).root;\n\n while (dir !== root) {\n for (const marker of PROJECT_MARKERS) {\n if (fs.existsSync(path.join(dir, marker))) {\n return dir;\n }\n }\n dir = path.dirname(dir);\n }\n\n return startDir ?? process.cwd();\n}\n\nexport function getInflectivDir(projectRoot: string): string {\n return path.join(projectRoot, INFLECTIV_DIR);\n}\n\nexport function getMemoryDir(projectRoot: string): string {\n return path.join(projectRoot, INFLECTIV_DIR, MEMORY_DIR);\n}\n\nexport function getConfigPath(projectRoot: string): string {\n return path.join(projectRoot, INFLECTIV_DIR, CONFIG_FILE);\n}\n\nexport function getEntriesPath(projectRoot: string): string {\n return path.join(projectRoot, INFLECTIV_DIR, MEMORY_DIR, ENTRIES_FILE);\n}\n\nexport function getIndexPath(projectRoot: string): string {\n return path.join(projectRoot, INFLECTIV_DIR, MEMORY_DIR, INDEX_FILE);\n}\n\nfunction generateProjectId(): string {\n const chars = \"abcdefghijklmnopqrstuvwxyz0123456789\";\n let result = \"\";\n for (let i = 0; i < 8; i++) {\n result += chars[Math.floor(Math.random() * chars.length)];\n }\n return result;\n}\n\nexport function ensureProjectStructure(projectRoot: string): ProjectConfig {\n const configPath = getConfigPath(projectRoot);\n\n if (fs.existsSync(configPath)) {\n return JSON.parse(fs.readFileSync(configPath, \"utf-8\")) as ProjectConfig;\n }\n\n const memoryDir = getMemoryDir(projectRoot);\n fs.mkdirSync(memoryDir, { recursive: true });\n\n const config: ProjectConfig = {\n project_id: generateProjectId(),\n project_name: path.basename(projectRoot),\n created_at: new Date().toISOString(),\n memory_count: 0,\n };\n\n fs.writeFileSync(configPath, JSON.stringify(config, null, 2));\n fs.writeFileSync(getEntriesPath(projectRoot), \"\");\n fs.writeFileSync(\n getIndexPath(projectRoot),\n JSON.stringify({ version: 1, tag_index: {}, category_index: {}, word_index: {} }),\n );\n\n return config;\n}\n","import * as fs from \"node:fs\";\nimport type { Importance, MemoryCategory, MemoryEntry, MemoryIndex, ProjectConfig } from \"./types.js\";\nimport {\n ensureProjectStructure,\n findProjectRoot,\n getConfigPath,\n getEntriesPath,\n getIndexPath,\n} from \"./project-context.js\";\n\nconst MAX_CONTENT_LENGTH = 10_000;\nconst MAX_TAGS = 10;\n\nfunction generateId(): string {\n const chars = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789\";\n let result = \"\";\n for (let i = 0; i < 8; i++) {\n result += chars[Math.floor(Math.random() * chars.length)];\n }\n return result;\n}\n\nfunction tokenize(text: string): string[] {\n return text\n .toLowerCase()\n .replace(/[^a-z0-9\\s]/g, \" \")\n .split(/\\s+/)\n .filter((w) => w.length > 2);\n}\n\nexport class MemoryStore {\n private projectRoot: string;\n private config: ProjectConfig;\n\n constructor(startDir?: string) {\n this.projectRoot = findProjectRoot(startDir);\n this.config = ensureProjectStructure(this.projectRoot);\n }\n\n get root(): string {\n return this.projectRoot;\n }\n\n get projectName(): string {\n return this.config.project_name;\n }\n\n get projectId(): string {\n return this.config.project_id;\n }\n\n get memoryCount(): number {\n return this.config.memory_count;\n }\n\n write(\n content: string,\n category: MemoryCategory,\n tags: string[] = [],\n importance: Importance = \"medium\",\n sourceContext?: string,\n ): MemoryEntry {\n if (content.length > MAX_CONTENT_LENGTH) {\n throw new Error(`Content exceeds maximum length of ${MAX_CONTENT_LENGTH} characters`);\n }\n if (tags.length > MAX_TAGS) {\n throw new Error(`Maximum ${MAX_TAGS} tags allowed`);\n }\n\n const now = new Date().toISOString();\n const entry: MemoryEntry = {\n id: generateId(),\n content,\n category,\n tags: tags.map((t) => t.toLowerCase().trim()),\n importance,\n created_at: now,\n updated_at: now,\n source_context: sourceContext,\n };\n\n const entriesPath = getEntriesPath(this.projectRoot);\n fs.appendFileSync(entriesPath, JSON.stringify(entry) + \"\\n\");\n\n this.addToIndex(entry);\n this.config.memory_count++;\n this.saveConfig();\n\n return entry;\n }\n\n list(\n category?: MemoryCategory,\n tags?: string[],\n importance?: Importance,\n limit = 20,\n offset = 0,\n ): { entries: MemoryEntry[]; total: number } {\n let entries = this.readAllEntries();\n\n if (category) {\n entries = entries.filter((e) => e.category === category);\n }\n if (tags && tags.length > 0) {\n const lowerTags = tags.map((t) => t.toLowerCase());\n entries = entries.filter((e) => lowerTags.some((t) => e.tags.includes(t)));\n }\n if (importance) {\n entries = entries.filter((e) => e.importance === importance);\n }\n\n entries.sort((a, b) => b.created_at.localeCompare(a.created_at));\n const total = entries.length;\n\n return {\n entries: entries.slice(offset, offset + limit),\n total,\n };\n }\n\n search(\n query: string,\n category?: MemoryCategory,\n limit = 10,\n ): MemoryEntry[] {\n const index = this.readIndex();\n const queryTokens = tokenize(query);\n\n if (queryTokens.length === 0) {\n return this.list(category, undefined, undefined, limit).entries;\n }\n\n const scores = new Map<string, number>();\n for (const token of queryTokens) {\n const ids = index.word_index[token] ?? [];\n for (const id of ids) {\n scores.set(id, (scores.get(id) ?? 0) + 1);\n }\n }\n\n let entries = this.readAllEntries();\n if (category) {\n entries = entries.filter((e) => e.category === category);\n }\n\n const entryMap = new Map(entries.map((e) => [e.id, e]));\n\n return Array.from(scores.entries())\n .filter(([id]) => entryMap.has(id))\n .sort((a, b) => {\n if (b[1] !== a[1]) return b[1] - a[1];\n const ea = entryMap.get(a[0])!;\n const eb = entryMap.get(b[0])!;\n return eb.created_at.localeCompare(ea.created_at);\n })\n .slice(0, limit)\n .map(([id]) => entryMap.get(id)!)\n .filter(Boolean);\n }\n\n delete(memoryId: string): boolean {\n const entries = this.readAllEntries();\n const filtered = entries.filter((e) => e.id !== memoryId);\n\n if (filtered.length === entries.length) {\n return false;\n }\n\n const entriesPath = getEntriesPath(this.projectRoot);\n fs.writeFileSync(entriesPath, filtered.map((e) => JSON.stringify(e)).join(\"\\n\") + (filtered.length > 0 ? \"\\n\" : \"\"));\n\n this.rebuildIndex(filtered);\n this.config.memory_count = filtered.length;\n this.saveConfig();\n\n return true;\n }\n\n suggestSkillCreation(): {\n memory_count: number;\n category_breakdown: Record<string, number>;\n coverage_analysis: string[];\n recommendation: string;\n ready: boolean;\n } {\n const entries = this.readAllEntries();\n const breakdown: Record<string, number> = {};\n for (const entry of entries) {\n breakdown[entry.category] = (breakdown[entry.category] ?? 0) + 1;\n }\n\n const coverage: string[] = [];\n const highImportance = entries.filter((e) => e.importance === \"high\").length;\n\n if (entries.length >= 10) coverage.push(\"Sufficient memory volume (10+)\");\n else coverage.push(`Low memory volume (${entries.length}/10 minimum recommended)`);\n\n if (Object.keys(breakdown).length >= 3) coverage.push(\"Good category diversity\");\n else coverage.push(\"Limited category diversity - consider adding more categories\");\n\n if (highImportance >= 3) coverage.push(\"Has high-importance entries for core knowledge\");\n else coverage.push(\"Few high-importance entries - mark key decisions as high importance\");\n\n const hasDocs = entries.some(\n (e) => e.category === \"architecture\" || e.category === \"convention\" || e.category === \"workflow\",\n );\n if (hasDocs) coverage.push(\"Contains structural knowledge (architecture/conventions/workflows)\");\n else coverage.push(\"Missing structural knowledge - add architecture or convention entries\");\n\n const ready = entries.length >= 5 && Object.keys(breakdown).length >= 2;\n const recommendation = ready\n ? \"Your memories are ready for skill creation. Use inflectiv_create_skill to synthesize them into a reusable skill document.\"\n : \"Continue accumulating memories across more categories before creating a skill.\";\n\n return {\n memory_count: entries.length,\n category_breakdown: breakdown,\n coverage_analysis: coverage,\n recommendation,\n ready,\n };\n }\n\n getConfig(): ProjectConfig {\n return { ...this.config };\n }\n\n updateSyncTime(): void {\n this.config.last_sync_at = new Date().toISOString();\n this.saveConfig();\n }\n\n readAllEntries(): MemoryEntry[] {\n const entriesPath = getEntriesPath(this.projectRoot);\n if (!fs.existsSync(entriesPath)) return [];\n\n const content = fs.readFileSync(entriesPath, \"utf-8\").trim();\n if (!content) return [];\n\n return content\n .split(\"\\n\")\n .filter(Boolean)\n .map((line) => JSON.parse(line) as MemoryEntry);\n }\n\n private readIndex(): MemoryIndex {\n const indexPath = getIndexPath(this.projectRoot);\n if (!fs.existsSync(indexPath)) {\n return { version: 1, tag_index: {}, category_index: {}, word_index: {} };\n }\n return JSON.parse(fs.readFileSync(indexPath, \"utf-8\")) as MemoryIndex;\n }\n\n private addToIndex(entry: MemoryEntry): void {\n const index = this.readIndex();\n\n for (const tag of entry.tags) {\n if (!index.tag_index[tag]) index.tag_index[tag] = [];\n index.tag_index[tag].push(entry.id);\n }\n\n if (!index.category_index[entry.category]) index.category_index[entry.category] = [];\n index.category_index[entry.category].push(entry.id);\n\n const words = tokenize(entry.content);\n for (const word of words) {\n if (!index.word_index[word]) index.word_index[word] = [];\n if (!index.word_index[word].includes(entry.id)) {\n index.word_index[word].push(entry.id);\n }\n }\n\n fs.writeFileSync(getIndexPath(this.projectRoot), JSON.stringify(index));\n }\n\n private rebuildIndex(entries: MemoryEntry[]): void {\n const index: MemoryIndex = { version: 1, tag_index: {}, category_index: {}, word_index: {} };\n\n for (const entry of entries) {\n for (const tag of entry.tags) {\n if (!index.tag_index[tag]) index.tag_index[tag] = [];\n index.tag_index[tag].push(entry.id);\n }\n\n if (!index.category_index[entry.category]) index.category_index[entry.category] = [];\n index.category_index[entry.category].push(entry.id);\n\n const words = tokenize(entry.content);\n for (const word of words) {\n if (!index.word_index[word]) index.word_index[word] = [];\n if (!index.word_index[word].includes(entry.id)) {\n index.word_index[word].push(entry.id);\n }\n }\n }\n\n fs.writeFileSync(getIndexPath(this.projectRoot), JSON.stringify(index));\n }\n\n private saveConfig(): void {\n const configPath = getConfigPath(this.projectRoot);\n fs.writeFileSync(configPath, JSON.stringify(this.config, null, 2));\n }\n}\n","import * as fs from \"node:fs\";\nimport * as path from \"node:path\";\nimport type { McpServer } from \"@modelcontextprotocol/sdk/server/mcp.js\";\nimport { z } from \"zod\";\nimport type { InflectivClient } from \"../client.js\";\nimport { formatError } from \"../errors.js\";\nimport { MemoryStore } from \"../memory/memory-store.js\";\n\nexport function registerSkillTools(server: McpServer, client: InflectivClient): void {\n server.tool(\n \"inflectiv_create_skill\",\n \"Synthesize local memories into a reusable skill document and upload to Inflectiv. Costs 5 credits. Requires a global API key (inf_global_*).\",\n {\n name: z.string().min(1).max(255).describe(\"Skill name\"),\n description: z.string().max(1000).optional().describe(\"Skill description\"),\n domain: z.string().max(100).optional().describe(\"Domain (e.g., 'react', 'python', 'devops')\"),\n tags: z.array(z.string()).max(20).optional().describe(\"Tags for discovery\"),\n synthesized_content: z\n .string()\n .min(10)\n .max(100000)\n .describe(\"The synthesized skill document (Markdown). The agent should compose this from local memories.\"),\n create_dataset: z.boolean().optional().describe(\"Create a backing dataset for RAG (default: true)\"),\n memory_ids: z.array(z.string()).optional().describe(\"Specific memory IDs to include (default: all)\"),\n agent_id: z.number().optional().describe(\"Auto-attach skill to this agent\"),\n },\n async (params) => {\n try {\n // Read local memories to include in the request\n let memories: Array<Record<string, unknown>> = [];\n try {\n const store = new MemoryStore();\n let entries = store.readAllEntries();\n if (params.memory_ids && params.memory_ids.length > 0) {\n const ids = new Set(params.memory_ids);\n entries = entries.filter((e) => ids.has(e.id));\n }\n memories = entries.map((e) => ({\n content: e.content,\n category: e.category,\n tags: e.tags,\n importance: e.importance,\n source_context: e.source_context,\n }));\n } catch {\n // No local memories available, proceed without\n }\n\n const body: Record<string, unknown> = {\n name: params.name,\n synthesized_content: params.synthesized_content,\n create_dataset: params.create_dataset ?? true,\n memories,\n };\n if (params.description) body.description = params.description;\n if (params.domain) body.domain = params.domain;\n if (params.tags) body.tags = params.tags;\n if (params.agent_id) body.agent_id = params.agent_id;\n\n try {\n const store = new MemoryStore();\n body.source_project_name = store.projectName;\n } catch {\n // ignore\n }\n\n const data = await client.post(`${client.pathPrefix}/ext/skills/create`, body);\n\n // Update local sync time\n try {\n const store = new MemoryStore();\n store.updateSyncTime();\n } catch {\n // ignore\n }\n\n return {\n content: [{ type: \"text\", text: JSON.stringify(data, null, 2) }],\n };\n } catch (err) {\n return formatError(err);\n }\n },\n );\n\n server.tool(\n \"inflectiv_apply_skill\",\n \"Apply a skill to an agent. Injects the skill document into the agent's system prompt and optionally attaches the skill's dataset. Costs 2 credits.\",\n {\n skill_id: z.number().describe(\"Skill ID to apply\"),\n agent_id: z.number().describe(\"Agent ID to apply the skill to\"),\n inject_as_prompt: z.boolean().optional().describe(\"Inject skill as system prompt context (default: true)\"),\n attach_dataset: z.boolean().optional().describe(\"Attach skill's dataset for RAG (default: true)\"),\n },\n async (params) => {\n try {\n const data = await client.post(\n `${client.pathPrefix}/ext/skills/${params.skill_id}/apply`,\n {\n agent_id: params.agent_id,\n inject_as_prompt: params.inject_as_prompt ?? true,\n attach_dataset: params.attach_dataset ?? true,\n },\n );\n return {\n content: [{ type: \"text\", text: JSON.stringify(data, null, 2) }],\n };\n } catch (err) {\n return formatError(err);\n }\n },\n );\n\n server.tool(\n \"inflectiv_list_skills\",\n \"List your skills (owned and acquired). Free.\",\n {},\n async () => {\n try {\n const data = await client.get(`${client.pathPrefix}/ext/skills/`);\n return {\n content: [{ type: \"text\", text: JSON.stringify(data, null, 2) }],\n };\n } catch (err) {\n return formatError(err);\n }\n },\n );\n\n server.tool(\n \"inflectiv_scan_skill_security\",\n \"Preview security scan on skill content before creating. Runs passes 1-4 (secrets, PII, prompt injection, metadata) and returns findings WITHOUT spending credits. Free.\",\n {\n synthesized_content: z\n .string()\n .min(1)\n .max(100000)\n .describe(\"The skill content to scan\"),\n },\n async (params) => {\n try {\n const data = await client.post(\n `${client.pathPrefix}/ext/skills/scan-security`,\n { synthesized_content: params.synthesized_content },\n );\n return {\n content: [{ type: \"text\", text: JSON.stringify(data, null, 2) }],\n };\n } catch (err) {\n return formatError(err);\n }\n },\n );\n\n server.tool(\n \"inflectiv_use_skill\",\n \"Load a skill's content into the current Claude Code session. For free/owned skills, content can also be installed permanently. For paid acquired skills, content is loaded ephemerally (session-only, not saved to disk). Free — no credits.\",\n {\n skill_id: z.number().describe(\"Skill ID to use\"),\n },\n async (params) => {\n try {\n const data = await client.get<{\n name: string;\n content: string;\n access_type: string;\n can_persist: boolean;\n }>(`${client.pathPrefix}/ext/skills/${params.skill_id}/use`);\n\n let instructions = `# Skill: ${data.name}\\n\\n${data.content}`;\n if (!data.can_persist) {\n instructions +=\n \"\\n\\n---\\n_This is a paid skill. Content is for this session only and must not be saved to disk or redistributed._\";\n } else {\n instructions +=\n `\\n\\n---\\n_This skill can be permanently installed using \\`inflectiv_install_skill\\` (skill_id: ${params.skill_id})._`;\n }\n\n return {\n content: [{ type: \"text\" as const, text: instructions }],\n };\n } catch (err) {\n return formatError(err);\n }\n },\n );\n\n server.tool(\n \"inflectiv_install_skill\",\n \"Install a skill as a Claude Code slash command (.claude/commands/<name>.md). Only works for owned or free acquired skills — paid skills cannot be installed locally to protect creator IP. Free — no credits.\",\n {\n skill_id: z.number().describe(\"Skill ID to install\"),\n command_name: z\n .string()\n .max(50)\n .optional()\n .describe(\"Custom slash command name (default: skill name slugified)\"),\n },\n async (params) => {\n try {\n const data = await client.get<{\n name: string;\n content: string;\n can_persist: boolean;\n }>(`${client.pathPrefix}/ext/skills/${params.skill_id}/use`);\n\n if (!data.can_persist) {\n return {\n content: [\n {\n type: \"text\" as const,\n text: \"Cannot install this skill locally — it is a paid acquired skill. Use `inflectiv_use_skill` to load it ephemerally for this session instead.\",\n },\n ],\n };\n }\n\n const cmdName =\n params.command_name ||\n data.name\n .toLowerCase()\n .replace(/[^a-z0-9]+/g, \"-\")\n .replace(/^-|-$/g, \"\");\n\n let projectRoot: string;\n try {\n const store = new MemoryStore();\n projectRoot = store.root;\n } catch {\n projectRoot = process.cwd();\n }\n\n const commandsDir = path.join(projectRoot, \".claude\", \"commands\");\n if (!fs.existsSync(commandsDir)) {\n fs.mkdirSync(commandsDir, { recursive: true });\n }\n\n const filePath = path.join(commandsDir, `${cmdName}.md`);\n fs.writeFileSync(filePath, data.content);\n\n return {\n content: [\n {\n type: \"text\" as const,\n text: `Skill installed as Claude Code command: /${cmdName}\\n\\nFile: ${filePath}\\n\\nYou can now use /${cmdName} in any Claude Code session in this project.`,\n },\n ],\n };\n } catch (err) {\n return formatError(err);\n }\n },\n );\n}\n","import { McpServer } from \"@modelcontextprotocol/sdk/server/mcp.js\";\nimport { z } from \"zod\";\nimport { InflectivClient } from \"../client.js\";\nimport { formatError } from \"../errors.js\";\n\nconst VALID_EVENTS = [\n \"intelligence.processed\",\n \"intelligence.failed\",\n \"intelligence.deduped\",\n \"dataset.mode_changed\",\n] as const;\n\nexport function registerWebhookTools(\n server: McpServer,\n client: InflectivClient,\n) {\n server.tool(\n \"inflectiv_register_webhook\",\n `Register a webhook to receive event notifications. URL must use HTTPS. Valid events: ${VALID_EVENTS.join(\", \")}. Max 10 webhooks per user. Free.`,\n {\n url: z\n .string()\n .url()\n .startsWith(\"https://\", \"Webhook URL must use HTTPS\")\n .min(10)\n .max(2000)\n .describe(\"HTTPS webhook endpoint URL\"),\n events: z\n .array(z.enum(VALID_EVENTS))\n .min(1)\n .describe(\"Events to subscribe to\"),\n description: z\n .string()\n .max(500)\n .optional()\n .describe(\"Webhook description\"),\n },\n async (params) => {\n try {\n const data = await client.post(`${client.pathPrefix}/ext/webhooks/`, params);\n return {\n content: [{ type: \"text\", text: JSON.stringify(data, null, 2) }],\n };\n } catch (err) {\n return formatError(err);\n }\n },\n );\n\n server.tool(\n \"inflectiv_list_webhooks\",\n \"List all registered webhooks. Free.\",\n {},\n async () => {\n try {\n const data = await client.get(`${client.pathPrefix}/ext/webhooks/`);\n return {\n content: [{ type: \"text\", text: JSON.stringify(data, null, 2) }],\n };\n } catch (err) {\n return formatError(err);\n }\n },\n );\n\n server.tool(\n \"inflectiv_test_webhook\",\n \"Send a test event to a registered webhook to verify it's receiving payloads. Free.\",\n {\n webhook_id: z.number().int().describe(\"Webhook ID to test\"),\n },\n async ({ webhook_id }) => {\n try {\n const data = await client.post(\n `${client.pathPrefix}/ext/webhooks/${webhook_id}/test`,\n );\n return {\n content: [{ type: \"text\", text: JSON.stringify(data, null, 2) }],\n };\n } catch (err) {\n return formatError(err);\n }\n },\n );\n}\n","export type MemoryCategory =\n | \"decision\"\n | \"constraint\"\n | \"workflow\"\n | \"architecture\"\n | \"gotcha\"\n | \"preference\"\n | \"convention\"\n | \"dependency\"\n | \"todo\"\n | \"general\";\n\nexport const MEMORY_CATEGORIES: MemoryCategory[] = [\n \"decision\",\n \"constraint\",\n \"workflow\",\n \"architecture\",\n \"gotcha\",\n \"preference\",\n \"convention\",\n \"dependency\",\n \"todo\",\n \"general\",\n];\n\nexport type Importance = \"low\" | \"medium\" | \"high\";\n\nexport interface MemoryEntry {\n id: string;\n content: string;\n category: MemoryCategory;\n tags: string[];\n importance: Importance;\n created_at: string;\n updated_at: string;\n source_context?: string;\n}\n\nexport interface ProjectConfig {\n project_id: string;\n project_name: string;\n created_at: string;\n memory_count: number;\n last_sync_at?: string;\n}\n\nexport interface MemoryIndex {\n version: 1;\n tag_index: Record<string, string[]>;\n category_index: Record<string, string[]>;\n word_index: Record<string, string[]>;\n}\n","import type { McpServer } from \"@modelcontextprotocol/sdk/server/mcp.js\";\nimport { z } from \"zod\";\nimport { MemoryStore } from \"../memory/memory-store.js\";\nimport { MEMORY_CATEGORIES } from \"../memory/types.js\";\n\nlet store: MemoryStore | null = null;\n\nfunction getStore(): MemoryStore {\n if (!store) {\n store = new MemoryStore();\n }\n return store;\n}\n\nexport function registerMemoryTools(server: McpServer): void {\n server.tool(\n \"inflectiv_write_memory\",\n \"Write a memory entry to the local project memory (.inflectiv/memory/). Free — local only, no API call.\",\n {\n content: z.string().min(1).max(10000).describe(\"Memory content (max 10,000 chars)\"),\n category: z.enum(MEMORY_CATEGORIES as [string, ...string[]]).describe(\n \"Category: decision, constraint, workflow, architecture, gotcha, preference, convention, dependency, todo, general\",\n ),\n tags: z.array(z.string()).max(10).optional().describe(\"Up to 10 tags for filtering\"),\n importance: z.enum([\"low\", \"medium\", \"high\"]).optional().describe(\"Importance level (default: medium)\"),\n source_context: z.string().optional().describe(\"What prompted this memory (file path, topic)\"),\n },\n async (params) => {\n try {\n const s = getStore();\n const entry = s.write(\n params.content,\n params.category as any,\n params.tags ?? [],\n (params.importance as any) ?? \"medium\",\n params.source_context,\n );\n return {\n content: [\n {\n type: \"text\",\n text: JSON.stringify(\n {\n status: \"saved\",\n memory_id: entry.id,\n project: s.projectName,\n total_memories: s.memoryCount,\n category: entry.category,\n tags: entry.tags,\n },\n null,\n 2,\n ),\n },\n ],\n };\n } catch (err) {\n return {\n content: [{ type: \"text\", text: `Error writing memory: ${err instanceof Error ? err.message : String(err)}` }],\n isError: true,\n };\n }\n },\n );\n\n server.tool(\n \"inflectiv_list_memories\",\n \"List local project memories with optional filters. Free — local only.\",\n {\n category: z.enum(MEMORY_CATEGORIES as [string, ...string[]]).optional().describe(\"Filter by category\"),\n tags: z.array(z.string()).optional().describe(\"Filter by tags (OR match)\"),\n importance: z.enum([\"low\", \"medium\", \"high\"]).optional().describe(\"Filter by importance\"),\n limit: z.number().min(1).max(100).optional().describe(\"Max entries to return (default: 20)\"),\n offset: z.number().min(0).optional().describe(\"Offset for pagination\"),\n },\n async (params) => {\n try {\n const s = getStore();\n const result = s.list(\n params.category as any,\n params.tags,\n params.importance as any,\n params.limit ?? 20,\n params.offset ?? 0,\n );\n return {\n content: [\n {\n type: \"text\",\n text: JSON.stringify(\n {\n project: s.projectName,\n total: result.total,\n returned: result.entries.length,\n entries: result.entries,\n },\n null,\n 2,\n ),\n },\n ],\n };\n } catch (err) {\n return {\n content: [{ type: \"text\", text: `Error listing memories: ${err instanceof Error ? err.message : String(err)}` }],\n isError: true,\n };\n }\n },\n );\n\n server.tool(\n \"inflectiv_search_memories\",\n \"Keyword search over local project memories. Free — local only.\",\n {\n query: z.string().min(1).describe(\"Search query\"),\n category: z.enum(MEMORY_CATEGORIES as [string, ...string[]]).optional().describe(\"Filter by category\"),\n limit: z.number().min(1).max(50).optional().describe(\"Max results (default: 10)\"),\n },\n async (params) => {\n try {\n const s = getStore();\n const results = s.search(params.query, params.category as any, params.limit ?? 10);\n return {\n content: [\n {\n type: \"text\",\n text: JSON.stringify(\n {\n project: s.projectName,\n query: params.query,\n results_count: results.length,\n results,\n },\n null,\n 2,\n ),\n },\n ],\n };\n } catch (err) {\n return {\n content: [\n { type: \"text\", text: `Error searching memories: ${err instanceof Error ? err.message : String(err)}` },\n ],\n isError: true,\n };\n }\n },\n );\n\n server.tool(\n \"inflectiv_delete_memory\",\n \"Delete a memory entry by ID. Free — local only.\",\n {\n memory_id: z.string().describe(\"ID of the memory entry to delete\"),\n },\n async (params) => {\n try {\n const s = getStore();\n const deleted = s.delete(params.memory_id);\n if (!deleted) {\n return {\n content: [{ type: \"text\", text: `Memory entry '${params.memory_id}' not found.` }],\n isError: true,\n };\n }\n return {\n content: [\n {\n type: \"text\",\n text: JSON.stringify(\n {\n status: \"deleted\",\n memory_id: params.memory_id,\n remaining_memories: s.memoryCount,\n },\n null,\n 2,\n ),\n },\n ],\n };\n } catch (err) {\n return {\n content: [\n { type: \"text\", text: `Error deleting memory: ${err instanceof Error ? err.message : String(err)}` },\n ],\n isError: true,\n };\n }\n },\n );\n\n server.tool(\n \"inflectiv_suggest_skill_creation\",\n \"Analyze local memories and recommend if they're ready for skill creation. Free — local only.\",\n {},\n async () => {\n try {\n const s = getStore();\n const analysis = s.suggestSkillCreation();\n return {\n content: [\n {\n type: \"text\",\n text: JSON.stringify(\n { project: s.projectName, ...analysis },\n null,\n 2,\n ),\n },\n ],\n };\n } catch (err) {\n return {\n content: [{ type: \"text\", text: `Error analyzing memories: ${err instanceof Error ? err.message : String(err)}` }],\n isError: true,\n };\n }\n },\n );\n}\n","import { McpServer } from \"@modelcontextprotocol/sdk/server/mcp.js\";\n\nexport function registerResources(server: McpServer) {\n server.resource(\n \"docs-overview\",\n \"inflectiv://docs/overview\",\n {\n description: \"Inflectiv API overview — authentication, base URL, credit system\",\n mimeType: \"text/markdown\",\n },\n async () => ({\n contents: [\n {\n uri: \"inflectiv://docs/overview\",\n mimeType: \"text/markdown\",\n text: OVERVIEW_DOC,\n },\n ],\n }),\n );\n\n server.resource(\n \"docs-webhook-events\",\n \"inflectiv://docs/webhook-events\",\n {\n description: \"Webhook event types and payload schemas\",\n mimeType: \"text/markdown\",\n },\n async () => ({\n contents: [\n {\n uri: \"inflectiv://docs/webhook-events\",\n mimeType: \"text/markdown\",\n text: WEBHOOK_EVENTS_DOC,\n },\n ],\n }),\n );\n\n server.resource(\n \"docs-credit-costs\",\n \"inflectiv://docs/credit-costs\",\n {\n description: \"Credit cost table for all API operations\",\n mimeType: \"text/markdown\",\n },\n async () => ({\n contents: [\n {\n uri: \"inflectiv://docs/credit-costs\",\n mimeType: \"text/markdown\",\n text: CREDIT_COSTS_DOC,\n },\n ],\n }),\n );\n}\n\nconst OVERVIEW_DOC = `# Inflectiv API Overview\n\n## Authentication\nAll requests require an API key passed via the \\`X-API-Key\\` header.\nAPI keys have the prefix \\`inf_\\` and are scoped to a single dataset.\n\n## Base URL\nProduction (via Next.js proxy):\n\\`\\`\\`\nhttps://app.inflectiv.ai/api/platform/ext/\n\\`\\`\\`\nLocal development:\n\\`\\`\\`\nhttp://localhost:18001/api/v2/ext/\n\\`\\`\\`\n\n## Concepts\n\n### Agents\nAI chatbots trained on your data. Each agent can have datasets attached for RAG-enabled conversations.\n\n### Datasets\nCollections of knowledge sources (files, intelligence entries) that agents use to answer questions.\nEach API key is scoped to one dataset.\n\n### Intelligence\nProgrammatic knowledge entries written directly to a dataset. Useful for syncing external data.\nDuplicates are automatically detected and cost 0 credits.\n\n### Files\nDocuments uploaded to a dataset. Supported formats: PDF, DOCX, TXT, MD, HTML, CSV, JSON, JSONL, TSV, XLSX, XLS, Parquet, XML.\nFiles are chunked and embedded automatically.\n\n### Webhooks\nHTTPS endpoints that receive event notifications (e.g., when intelligence is processed).\n\n## Credit System\nMost operations cost credits. Free-tier operations include listing resources and managing webhooks.\nSee the credit-costs resource for a full breakdown.\n\n## Getting Started\n1. Get an API key from the Inflectiv dashboard (Settings > API Keys)\n2. Use \\`inflectiv_list_datasets\\` to see your scoped dataset\n3. Use \\`inflectiv_list_agents\\` to see agents attached to the dataset\n4. Upload files or write intelligence to add knowledge\n5. Chat with agents using \\`inflectiv_chat_with_agent\\`\n`;\n\nconst WEBHOOK_EVENTS_DOC = `# Webhook Events\n\n## Available Events\n\n### \\`intelligence.processed\\`\nFired when an intelligence entry has been successfully embedded and indexed.\n\\`\\`\\`json\n{\n \"event\": \"intelligence.processed\",\n \"timestamp\": \"2025-01-01T00:00:00Z\",\n \"data\": {\n \"intelligence_id\": 123,\n \"dataset_id\": 456,\n \"title\": \"Entry title\",\n \"status\": \"processed\"\n }\n}\n\\`\\`\\`\n\n### \\`intelligence.failed\\`\nFired when intelligence processing fails.\n\\`\\`\\`json\n{\n \"event\": \"intelligence.failed\",\n \"timestamp\": \"2025-01-01T00:00:00Z\",\n \"data\": {\n \"intelligence_id\": 123,\n \"dataset_id\": 456,\n \"title\": \"Entry title\",\n \"status\": \"failed\",\n \"error\": \"Processing error message\"\n }\n}\n\\`\\`\\`\n\n### \\`intelligence.deduped\\`\nFired when a duplicate intelligence entry is detected and skipped.\n\\`\\`\\`json\n{\n \"event\": \"intelligence.deduped\",\n \"timestamp\": \"2025-01-01T00:00:00Z\",\n \"data\": {\n \"intelligence_id\": 123,\n \"dataset_id\": 456,\n \"title\": \"Entry title\",\n \"status\": \"deduped\"\n }\n}\n\\`\\`\\`\n\n### \\`dataset.mode_changed\\`\nFired when a dataset's mode is changed on an agent.\n\\`\\`\\`json\n{\n \"event\": \"dataset.mode_changed\",\n \"timestamp\": \"2025-01-01T00:00:00Z\",\n \"data\": {\n \"agent_id\": 789,\n \"dataset_id\": 456,\n \"old_mode\": \"read_only\",\n \"new_mode\": \"self_learning\"\n }\n}\n\\`\\`\\`\n\n## Webhook Security\nEach webhook receives a unique \\`secret\\` upon creation. Use this to verify payload signatures.\nThe secret is only returned once during creation — store it securely.\n`;\n\nconst CREDIT_COSTS_DOC = `# Credit Costs\n\n| Operation | Tool | Credits |\n|-----------|------|---------|\n| List agents | \\`inflectiv_list_agents\\` | Free |\n| Create agent | \\`inflectiv_create_agent\\` | 5 |\n| Get agent | \\`inflectiv_get_agent\\` | Free |\n| Update agent config | \\`inflectiv_update_agent_config\\` | 2 |\n| Chat with agent | \\`inflectiv_chat_with_agent\\` | 1 |\n| List agent datasets | \\`inflectiv_list_agent_datasets\\` | Free |\n| Attach dataset | \\`inflectiv_attach_dataset\\` | Free |\n| Update dataset mode | \\`inflectiv_update_dataset_mode\\` | Free |\n| List datasets | \\`inflectiv_list_datasets\\` | Free |\n| Update dataset | \\`inflectiv_update_dataset\\` | Free |\n| Reindex dataset | \\`inflectiv_reindex_dataset\\` | 2 |\n| Search dataset | \\`inflectiv_search_dataset\\` | 1 |\n| Batch search | \\`inflectiv_batch_search\\` | 1 per query |\n| Write intelligence | \\`inflectiv_write_intelligence\\` | 1 (0 if dup) |\n| Batch write intelligence | \\`inflectiv_batch_write_intelligence\\` | 1 per new entry |\n| List intelligence | \\`inflectiv_list_intelligence\\` | Free |\n| List files | \\`inflectiv_list_files\\` | Free |\n| Get file | \\`inflectiv_get_file\\` | Free |\n| Upload file | \\`inflectiv_upload_file\\` | 5 base + 1/MB over 5MB |\n| Reprocess file | \\`inflectiv_reprocess_file\\` | 5 |\n| Register webhook | \\`inflectiv_register_webhook\\` | Free |\n| List webhooks | \\`inflectiv_list_webhooks\\` | Free |\n| Test webhook | \\`inflectiv_test_webhook\\` | Free |\n`;\n","import { McpServer } from \"@modelcontextprotocol/sdk/server/mcp.js\";\nimport { InflectivClient } from \"./client.js\";\nimport {\n registerAgentTools,\n registerDatasetTools,\n registerFileTools,\n registerKnowledgeSourceTools,\n registerMarketplaceTools,\n registerMemoryTools,\n registerSkillTools,\n registerWebhookTools,\n} from \"./tools/index.js\";\nimport { registerResources } from \"./resources/index.js\";\n\nexport function createServer(): McpServer {\n const apiKey = process.env.INFLECTIV_API_KEY || null;\n const walletKey = process.env.INFLECTIV_WALLET_PRIVATE_KEY;\n\n if (!apiKey && !walletKey) {\n console.error(\n \"Error: Either INFLECTIV_API_KEY or INFLECTIV_WALLET_PRIVATE_KEY is required.\\n\" +\n \"Get your API key from https://app.inflectiv.ai (Settings > API Keys).\\n\" +\n \"Or set INFLECTIV_WALLET_PRIVATE_KEY for X402 crypto payments.\",\n );\n process.exit(1);\n }\n\n const baseUrl = process.env.INFLECTIV_BASE_URL;\n const client = new InflectivClient(apiKey, baseUrl);\n\n const server = new McpServer({\n name: \"inflectiv\",\n version: \"0.1.0\",\n });\n\n registerAgentTools(server, client);\n registerDatasetTools(server, client);\n registerFileTools(server, client);\n registerKnowledgeSourceTools(server, client);\n registerSkillTools(server, client);\n registerMarketplaceTools(server, client);\n registerWebhookTools(server, client);\n registerMemoryTools(server);\n registerResources(server);\n\n return server;\n}\n","import { StdioServerTransport } from \"@modelcontextprotocol/sdk/server/stdio.js\";\nimport { createServer } from \"./server.js\";\n\nasync function main() {\n const server = createServer();\n const transport = new StdioServerTransport();\n await server.connect(transport);\n}\n\nmain().catch((err) => {\n console.error(\"Fatal error:\", err);\n process.exit(1);\n});\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/client.ts","../src/errors.ts","../src/tools/agents.ts","../src/tools/datasets.ts","../src/tools/files.ts","../src/tools/knowledge-sources.ts","../src/tools/marketplace.ts","../src/memory/project-context.ts","../src/memory/memory-store.ts","../src/tools/skills.ts","../src/tools/webhooks.ts","../src/memory/types.ts","../src/tools/memory.ts","../src/resources/api-docs.ts","../src/server.ts","../src/index.ts"],"names":["path","z","fs","store","path2","fs3"],"mappings":";;;;;;;;;AAEA,IAAM,eAAe,CAAA,CAClB,MAAA,EAAO,CACP,UAAA,CAAW,QAAQ,gCAAgC,CAAA;AAE/C,IAAM,iBAAA,GAAN,cAAgC,KAAA,CAAM;AAAA,EAC3C,WAAA,CACS,QACA,IAAA,EACP;AACA,IAAA,MAAM,GAAA,GACJ,OAAO,IAAA,KAAS,QAAA,IAAY,SAAS,IAAA,IAAQ,QAAA,IAAY,IAAA,GACrD,MAAA,CAAQ,IAAA,CAA6B,MAAM,CAAA,GAC3C,IAAA,CAAK,UAAU,IAAI,CAAA;AACzB,IAAA,KAAA,CAAM,CAAA,KAAA,EAAQ,MAAM,CAAA,EAAA,EAAK,GAAG,CAAA,CAAE,CAAA;AAPvB,IAAA,IAAA,CAAA,MAAA,GAAA,MAAA;AACA,IAAA,IAAA,CAAA,IAAA,GAAA,IAAA;AAOP,IAAA,IAAA,CAAK,IAAA,GAAO,mBAAA;AAAA,EACd;AACF,CAAA;AAEO,IAAM,kBAAN,MAAsB;AAAA,EACnB,MAAA;AAAA,EACA,OAAA;AAAA,EAER,WAAA,CAAY,QAAuB,OAAA,EAAkB;AACnD,IAAA,IAAA,CAAK,MAAA,GAAS,MAAA,GAAS,YAAA,CAAa,KAAA,CAAM,MAAM,CAAA,GAAI,IAAA;AACpD,IAAA,IAAA,CAAK,OAAA,GAAA,CACH,OAAA,IAAW,uCAAA,EACX,OAAA,CAAQ,OAAO,EAAE,CAAA;AAAA,EACrB;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,IAAI,UAAA,GAAqB;AACvB,IAAA,IAAI,IAAA,CAAK,OAAA,CAAQ,QAAA,CAAS,kBAAkB,CAAA,EAAG;AAC7C,MAAA,OAAO,EAAA;AAAA,IACT;AACA,IAAA,OAAO,SAAA;AAAA,EACT;AAAA,EAEQ,QAAQ,KAAA,EAAwD;AACtE,IAAA,MAAM,IAA4B,EAAC;AACnC,IAAA,IAAI,KAAK,MAAA,EAAQ;AACf,MAAA,CAAA,CAAE,WAAW,IAAI,IAAA,CAAK,MAAA;AAAA,IACxB;AACA,IAAA,OAAO,EAAE,GAAG,CAAA,EAAG,GAAG,KAAA,EAAM;AAAA,EAC1B;AAAA,EAEA,MAAc,OAAA,CACZ,MAAA,EACAA,KAAAA,EACA,IAAA,EACY;AACZ,IAAA,MAAM,GAAA,GAAM,GAAG,IAAA,CAAK,OAAO,GAAGA,KAAI,CAAA,CAAA,CAAG,OAAA,CAAQ,MAAA,EAAQ,EAAE,CAAA;AACvD,IAAA,MAAM,IAAA,GAAoB;AAAA,MACxB,MAAA;AAAA,MACA,SAAS,IAAA,CAAK,OAAA;AAAA,QACZ,IAAA,KAAS,MAAA,GAAY,EAAE,cAAA,EAAgB,oBAAmB,GAAI;AAAA,OAChE;AAAA,MACA,MAAM,IAAA,KAAS,MAAA,GAAY,IAAA,CAAK,SAAA,CAAU,IAAI,CAAA,GAAI;AAAA,KACpD;AAEA,IAAA,MAAM,GAAA,GAAM,MAAM,KAAA,CAAM,GAAA,EAAK,IAAI,CAAA;AAEjC,IAAA,IAAI,CAAC,IAAI,EAAA,EAAI;AACX,MAAA,IAAI,SAAA;AACJ,MAAA,IAAI;AACF,QAAA,SAAA,GAAY,MAAM,IAAI,IAAA,EAAK;AAAA,MAC7B,CAAA,CAAA,MAAQ;AACN,QAAA,SAAA,GAAY,MAAM,IAAI,IAAA,EAAK;AAAA,MAC7B;AACA,MAAA,MAAM,IAAI,iBAAA,CAAkB,GAAA,CAAI,MAAA,EAAQ,SAAS,CAAA;AAAA,IACnD;AAEA,IAAA,OAAO,IAAI,IAAA,EAAK;AAAA,EAClB;AAAA,EAEA,MAAM,IAAOA,KAAAA,EAA0B;AACrC,IAAA,OAAO,IAAA,CAAK,OAAA,CAAW,KAAA,EAAOA,KAAI,CAAA;AAAA,EACpC;AAAA,EAEA,MAAM,IAAA,CAAQA,KAAAA,EAAc,IAAA,EAA4B;AACtD,IAAA,OAAO,IAAA,CAAK,OAAA,CAAW,MAAA,EAAQA,KAAAA,EAAM,IAAI,CAAA;AAAA,EAC3C;AAAA,EAEA,MAAM,GAAA,CAAOA,KAAAA,EAAc,IAAA,EAA4B;AACrD,IAAA,OAAO,IAAA,CAAK,OAAA,CAAW,KAAA,EAAOA,KAAAA,EAAM,IAAI,CAAA;AAAA,EAC1C;AAAA,EAEA,MAAM,KAAA,CAASA,KAAAA,EAAc,IAAA,EAA4B;AACvD,IAAA,OAAO,IAAA,CAAK,OAAA,CAAW,OAAA,EAASA,KAAAA,EAAM,IAAI,CAAA;AAAA,EAC5C;AAAA,EAEA,MAAM,OAAUA,KAAAA,EAA0B;AACxC,IAAA,OAAO,IAAA,CAAK,OAAA,CAAW,QAAA,EAAUA,KAAI,CAAA;AAAA,EACvC;AAAA,EAEA,MAAM,UAAA,CACJA,KAAAA,EACA,UAAA,EACA,QAAA,EACA,OACA,OAAA,EACkB;AAClB,IAAA,MAAM,QAAA,GAAW,IAAI,QAAA,EAAS;AAC9B,IAAA,MAAM,IAAA,GAAO,IAAI,IAAA,CAAK,CAAC,UAAU,CAAC,CAAA;AAClC,IAAA,QAAA,CAAS,MAAA,CAAO,MAAA,EAAQ,IAAA,EAAM,QAAQ,CAAA;AACtC,IAAA,IAAI,KAAA,EAAO;AACT,MAAA,QAAA,CAAS,MAAA,CAAO,SAAS,KAAK,CAAA;AAAA,IAChC;AAGA,IAAA,MAAM,KAAK,OAAA,GAAU,CAAA,SAAA,EAAY,kBAAA,CAAmB,OAAO,CAAC,CAAA,CAAA,GAAK,EAAA;AACjE,IAAA,MAAM,GAAA,GAAM,CAAA,EAAG,IAAA,CAAK,OAAO,CAAA,EAAGA,KAAI,CAAA,EAAG,EAAE,CAAA,CAAA,CAAG,OAAA,CAAQ,MAAA,EAAQ,EAAE,CAAA;AAC5D,IAAA,MAAM,GAAA,GAAM,MAAM,KAAA,CAAM,GAAA,EAAK;AAAA,MAC3B,MAAA,EAAQ,MAAA;AAAA,MACR,OAAA,EAAS,KAAK,OAAA,EAAQ;AAAA,MACtB,IAAA,EAAM;AAAA,KACP,CAAA;AAED,IAAA,IAAI,CAAC,IAAI,EAAA,EAAI;AACX,MAAA,IAAI,SAAA;AACJ,MAAA,IAAI;AACF,QAAA,SAAA,GAAY,MAAM,IAAI,IAAA,EAAK;AAAA,MAC7B,CAAA,CAAA,MAAQ;AACN,QAAA,SAAA,GAAY,MAAM,IAAI,IAAA,EAAK;AAAA,MAC7B;AACA,MAAA,MAAM,IAAI,iBAAA,CAAkB,GAAA,CAAI,MAAA,EAAQ,SAAS,CAAA;AAAA,IACnD;AAEA,IAAA,OAAO,IAAI,IAAA,EAAK;AAAA,EAClB;AACF,CAAA;ACnIO,SAAS,YAAY,GAAA,EAG1B;AACA,EAAA,IAAI,OAAA;AAEJ,EAAA,IAAI,eAAe,iBAAA,EAAmB;AACpC,IAAA,MAAM,OAAO,GAAA,CAAI,IAAA;AACjB,IAAA,IAAI,SAAS,GAAA,CAAI,OAAA;AAEjB,IAAA,IAAI,OAAO,IAAA,KAAS,QAAA,IAAY,IAAA,KAAS,IAAA,EAAM;AAC7C,MAAA,MAAM,CAAA,GAAI,IAAA;AACV,MAAA,IAAI,CAAA,CAAE,MAAA,EAAQ,MAAA,GAAS,MAAA,CAAO,EAAE,MAAM,CAAA;AACtC,MAAA,IAAI,EAAE,gBAAA,EAAkB;AACtB,QAAA,MAAA,IAAU;;AAAA,gCAAA,EAAuC,CAAA,CAAE,gBAAgB,CAAA,aAAA,EAAgB,CAAA,CAAE,qBAAqB,SAAS,CAAA,oCAAA,CAAA;AAAA,MACrH;AAAA,IACF;AAEA,IAAA,OAAA,GAAU,CAAA,qBAAA,EAAwB,GAAA,CAAI,MAAM,CAAA,GAAA,EAAM,MAAM,CAAA,CAAA;AAAA,EAC1D,CAAA,MAAA,IAAW,eAAe,QAAA,EAAU;AAClC,IAAA,MAAM,SAAS,GAAA,CAAI,MAAA,CAChB,IAAI,CAAC,CAAA,KAAM,OAAO,CAAA,CAAE,IAAA,CAAK,IAAA,CAAK,GAAG,CAAC,CAAA,EAAA,EAAK,CAAA,CAAE,OAAO,CAAA,CAAE,CAAA,CAClD,KAAK,IAAI,CAAA;AACZ,IAAA,OAAA,GAAU,CAAA;AAAA,EAAsB,MAAM,CAAA,CAAA;AAAA,EACxC,CAAA,MAAA,IAAW,eAAe,KAAA,EAAO;AAC/B,IAAA,OAAA,GAAU,GAAA,CAAI,QAAQ,QAAA,CAAS,cAAc,IACzC,CAAA,mGAAA,CAAA,GACA,CAAA,OAAA,EAAU,IAAI,OAAO,CAAA,CAAA;AAAA,EAC3B,CAAA,MAAO;AACL,IAAA,OAAA,GAAU,CAAA,eAAA,EAAkB,MAAA,CAAO,GAAG,CAAC,CAAA,CAAA;AAAA,EACzC;AAEA,EAAA,OAAO;AAAA,IACL,SAAS,CAAC,EAAE,MAAM,MAAA,EAAQ,IAAA,EAAM,SAAS,CAAA;AAAA,IACzC,OAAA,EAAS;AAAA,GACX;AACF;;;AClCO,SAAS,kBAAA,CAAmB,QAAmB,MAAA,EAAyB;AAC7E,EAAA,MAAA,CAAO,IAAA;AAAA,IACL,uBAAA;AAAA,IACA,uIAAA;AAAA,IACA,EAAC;AAAA,IACD,YAAY;AACV,MAAA,IAAI;AACF,QAAA,MAAM,OAAO,MAAM,MAAA,CAAO,IAAI,CAAA,EAAG,MAAA,CAAO,UAAU,CAAA,YAAA,CAAc,CAAA;AAChE,QAAA,OAAO;AAAA,UACL,OAAA,EAAS,CAAC,EAAE,IAAA,EAAM,MAAA,EAAQ,IAAA,EAAM,IAAA,CAAK,SAAA,CAAU,IAAA,EAAM,IAAA,EAAM,CAAC,CAAA,EAAG;AAAA,SACjE;AAAA,MACF,SAAS,GAAA,EAAK;AACZ,QAAA,OAAO,YAAY,GAAG,CAAA;AAAA,MACxB;AAAA,IACF;AAAA,GACF;AAEA,EAAA,MAAA,CAAO,IAAA;AAAA,IACL,wBAAA;AAAA,IACA,2EAAA;AAAA,IACA;AAAA,MACE,IAAA,EAAMC,CAAAA,CAAE,MAAA,EAAO,CAAE,GAAA,CAAI,CAAC,CAAA,CAAE,GAAA,CAAI,GAAG,CAAA,CAAE,QAAA,CAAS,YAAY,CAAA;AAAA,MACtD,WAAA,EAAaA,CAAAA,CACV,MAAA,EAAO,CACP,GAAA,CAAI,GAAI,CAAA,CACR,QAAA,EAAS,CACT,QAAA,CAAS,mBAAmB,CAAA;AAAA,MAC/B,WAAA,EAAaA,CAAAA,CACV,MAAA,EAAO,CACP,UAAS,CACT,QAAA;AAAA,QACC;AAAA,OACF;AAAA,MACF,mBAAA,EAAqBA,CAAAA,CAClB,MAAA,EAAO,CACP,GAAA,CAAI,GAAI,CAAA,CACR,QAAA,EAAS,CACT,QAAA,CAAS,0CAA0C,CAAA;AAAA,MACtD,iBAAiBA,CAAAA,CACd,MAAA,GACA,QAAA,EAAS,CACT,SAAS,iDAAiD,CAAA;AAAA,MAC7D,YAAYA,CAAAA,CACT,MAAA,GACA,QAAA,EAAS,CACT,SAAS,yCAAyC,CAAA;AAAA,MACrD,WAAA,EAAaA,CAAAA,CACV,MAAA,EAAO,CACP,KAAI,CACJ,GAAA,CAAI,CAAC,CAAA,CACL,IAAI,GAAG,CAAA,CACP,QAAA,EAAS,CACT,SAAS,iCAAiC,CAAA;AAAA,MAC7C,SAASA,CAAAA,CAAE,MAAA,GAAS,QAAA,EAAS,CAAE,SAAS,iEAAiE;AAAA,KAC3G;AAAA,IACA,OAAO,EAAE,OAAA,EAAS,GAAG,MAAK,KAAM;AAC9B,MAAA,IAAI;AACF,QAAA,MAAM,EAAA,GAAK,OAAA,GAAU,CAAA,SAAA,EAAY,OAAO,CAAA,CAAA,GAAK,EAAA;AAC7C,QAAA,MAAM,IAAA,GAAO,MAAM,MAAA,CAAO,IAAA,CAAK,CAAA,EAAG,OAAO,UAAU,CAAA,YAAA,EAAe,EAAE,CAAA,CAAA,EAAI,IAAI,CAAA;AAC5E,QAAA,OAAO;AAAA,UACL,OAAA,EAAS,CAAC,EAAE,IAAA,EAAM,MAAA,EAAQ,IAAA,EAAM,IAAA,CAAK,SAAA,CAAU,IAAA,EAAM,IAAA,EAAM,CAAC,CAAA,EAAG;AAAA,SACjE;AAAA,MACF,SAAS,GAAA,EAAK;AACZ,QAAA,OAAO,YAAY,GAAG,CAAA;AAAA,MACxB;AAAA,IACF;AAAA,GACF;AAEA,EAAA,MAAA,CAAO,IAAA;AAAA,IACL,qBAAA;AAAA,IACA,wCAAA;AAAA,IACA;AAAA,MACE,UAAUA,CAAAA,CAAE,MAAA,GAAS,GAAA,EAAI,CAAE,SAAS,UAAU;AAAA,KAChD;AAAA,IACA,OAAO,EAAE,QAAA,EAAS,KAAM;AACtB,MAAA,IAAI;AACF,QAAA,MAAM,IAAA,GAAO,MAAM,MAAA,CAAO,GAAA,CAAI,GAAG,MAAA,CAAO,UAAU,CAAA,YAAA,EAAe,QAAQ,CAAA,CAAE,CAAA;AAC3E,QAAA,OAAO;AAAA,UACL,OAAA,EAAS,CAAC,EAAE,IAAA,EAAM,MAAA,EAAQ,IAAA,EAAM,IAAA,CAAK,SAAA,CAAU,IAAA,EAAM,IAAA,EAAM,CAAC,CAAA,EAAG;AAAA,SACjE;AAAA,MACF,SAAS,GAAA,EAAK;AACZ,QAAA,OAAO,YAAY,GAAG,CAAA;AAAA,MACxB;AAAA,IACF;AAAA,GACF;AAEA,EAAA,MAAA,CAAO,IAAA;AAAA,IACL,+BAAA;AAAA,IACA,yGAAA;AAAA,IACA;AAAA,MACE,UAAUA,CAAAA,CAAE,MAAA,GAAS,GAAA,EAAI,CAAE,SAAS,UAAU,CAAA;AAAA,MAC9C,IAAA,EAAMA,CAAAA,CAAE,MAAA,EAAO,CAAE,GAAA,CAAI,CAAC,CAAA,CAAE,GAAA,CAAI,GAAG,CAAA,CAAE,QAAA,EAAS,CAAE,SAAS,YAAY,CAAA;AAAA,MACjE,WAAA,EAAaA,CAAAA,CACV,MAAA,EAAO,CACP,GAAA,CAAI,GAAI,CAAA,CACR,QAAA,EAAS,CACT,QAAA,CAAS,mBAAmB,CAAA;AAAA,MAC/B,aAAaA,CAAAA,CAAE,MAAA,GAAS,QAAA,EAAS,CAAE,SAAS,yBAAyB,CAAA;AAAA,MACrE,mBAAA,EAAqBA,CAAAA,CAClB,MAAA,EAAO,CACP,GAAA,CAAI,GAAI,CAAA,CACR,QAAA,EAAS,CACT,QAAA,CAAS,4BAA4B,CAAA;AAAA,MACxC,iBAAiBA,CAAAA,CACd,MAAA,GACA,QAAA,EAAS,CACT,SAAS,4BAA4B,CAAA;AAAA,MACxC,YAAYA,CAAAA,CAAE,MAAA,GAAS,QAAA,EAAS,CAAE,SAAS,gBAAgB,CAAA;AAAA,MAC3D,WAAA,EAAaA,CAAAA,CACV,MAAA,EAAO,CACP,KAAI,CACJ,GAAA,CAAI,CAAC,CAAA,CACL,IAAI,GAAG,CAAA,CACP,QAAA,EAAS,CACT,SAAS,mBAAmB;AAAA,KACjC;AAAA,IACA,OAAO,EAAE,QAAA,EAAU,GAAG,MAAK,KAAM;AAC/B,MAAA,IAAI;AACF,QAAA,MAAM,IAAA,GAAO,MAAM,MAAA,CAAO,GAAA;AAAA,UACxB,CAAA,EAAG,MAAA,CAAO,UAAU,CAAA,YAAA,EAAe,QAAQ,CAAA,OAAA,CAAA;AAAA,UAC3C;AAAA,SACF;AACA,QAAA,OAAO;AAAA,UACL,OAAA,EAAS,CAAC,EAAE,IAAA,EAAM,MAAA,EAAQ,IAAA,EAAM,IAAA,CAAK,SAAA,CAAU,IAAA,EAAM,IAAA,EAAM,CAAC,CAAA,EAAG;AAAA,SACjE;AAAA,MACF,SAAS,GAAA,EAAK;AACZ,QAAA,OAAO,YAAY,GAAG,CAAA;AAAA,MACxB;AAAA,IACF;AAAA,GACF;AAEA,EAAA,MAAA,CAAO,IAAA;AAAA,IACL,2BAAA;AAAA,IACA,qKAAA;AAAA,IACA;AAAA,MACE,UAAUA,CAAAA,CAAE,MAAA,GAAS,GAAA,EAAI,CAAE,SAAS,UAAU,CAAA;AAAA,MAC9C,OAAA,EAASA,CAAAA,CAAE,MAAA,EAAO,CAAE,GAAA,CAAI,CAAC,CAAA,CAAE,GAAA,CAAI,GAAI,CAAA,CAAE,QAAA,CAAS,iBAAiB,CAAA;AAAA,MAC/D,sBAAsBA,CAAAA,CACnB,KAAA;AAAA,QACCA,EAAE,MAAA,CAAO;AAAA,UACP,IAAA,EAAMA,CAAAA,CAAE,MAAA,EAAO,CAAE,SAAS,yCAAyC,CAAA;AAAA,UACnE,OAAA,EAASA,CAAAA,CAAE,MAAA,EAAO,CAAE,SAAS,iBAAiB;AAAA,SAC/C;AAAA,OACH,CACC,QAAA,EAAS,CACT,QAAA,CAAS,4CAA4C;AAAA,KAC1D;AAAA,IACA,OAAO,EAAE,QAAA,EAAU,OAAA,EAAS,sBAAqB,KAAM;AACrD,MAAA,IAAI;AACF,QAAA,MAAM,IAAA,GAAO,MAAM,MAAA,CAAO,IAAA,CAAK,GAAG,MAAA,CAAO,UAAU,CAAA,YAAA,EAAe,QAAQ,CAAA,KAAA,CAAA,EAAS;AAAA,UACjF,OAAA;AAAA,UACA,oBAAA,EAAsB,wBAAwB;AAAC,SAChD,CAAA;AACD,QAAA,OAAO;AAAA,UACL,OAAA,EAAS,CAAC,EAAE,IAAA,EAAM,MAAA,EAAQ,IAAA,EAAM,IAAA,CAAK,SAAA,CAAU,IAAA,EAAM,IAAA,EAAM,CAAC,CAAA,EAAG;AAAA,SACjE;AAAA,MACF,SAAS,GAAA,EAAK;AACZ,QAAA,OAAO,YAAY,GAAG,CAAA;AAAA,MACxB;AAAA,IACF;AAAA,GACF;AAEA,EAAA,MAAA,CAAO,IAAA;AAAA,IACL,+BAAA;AAAA,IACA,+CAAA;AAAA,IACA;AAAA,MACE,UAAUA,CAAAA,CAAE,MAAA,GAAS,GAAA,EAAI,CAAE,SAAS,UAAU;AAAA,KAChD;AAAA,IACA,OAAO,EAAE,QAAA,EAAS,KAAM;AACtB,MAAA,IAAI;AACF,QAAA,MAAM,IAAA,GAAO,MAAM,MAAA,CAAO,GAAA,CAAI,GAAG,MAAA,CAAO,UAAU,CAAA,YAAA,EAAe,QAAQ,CAAA,SAAA,CAAW,CAAA;AACpF,QAAA,OAAO;AAAA,UACL,OAAA,EAAS,CAAC,EAAE,IAAA,EAAM,MAAA,EAAQ,IAAA,EAAM,IAAA,CAAK,SAAA,CAAU,IAAA,EAAM,IAAA,EAAM,CAAC,CAAA,EAAG;AAAA,SACjE;AAAA,MACF,SAAS,GAAA,EAAK;AACZ,QAAA,OAAO,YAAY,GAAG,CAAA;AAAA,MACxB;AAAA,IACF;AAAA,GACF;AAEA,EAAA,MAAA,CAAO,IAAA;AAAA,IACL,0BAAA;AAAA,IACA,iFAAA;AAAA,IACA;AAAA,MACE,UAAUA,CAAAA,CAAE,MAAA,GAAS,GAAA,EAAI,CAAE,SAAS,UAAU,CAAA;AAAA,MAC9C,YAAYA,CAAAA,CAAE,MAAA,GAAS,GAAA,EAAI,CAAE,SAAS,sBAAsB,CAAA;AAAA,MAC5D,IAAA,EAAMA,CAAAA,CACH,IAAA,CAAK,CAAC,WAAA,EAAa,eAAe,CAAC,CAAA,CACnC,QAAA,EAAS,CACT,QAAA,CAAS,qCAAqC;AAAA,KACnD;AAAA,IACA,OAAO,EAAE,QAAA,EAAU,UAAA,EAAY,MAAK,KAAM;AACxC,MAAA,IAAI;AACF,QAAA,MAAM,IAAA,GAAO,MAAM,MAAA,CAAO,IAAA;AAAA,UACxB,CAAA,EAAG,MAAA,CAAO,UAAU,CAAA,YAAA,EAAe,QAAQ,CAAA,SAAA,CAAA;AAAA,UAC3C;AAAA,YACE,UAAA;AAAA,YACA,MAAM,IAAA,IAAQ;AAAA;AAChB,SACF;AACA,QAAA,OAAO;AAAA,UACL,OAAA,EAAS,CAAC,EAAE,IAAA,EAAM,MAAA,EAAQ,IAAA,EAAM,IAAA,CAAK,SAAA,CAAU,IAAA,EAAM,IAAA,EAAM,CAAC,CAAA,EAAG;AAAA,SACjE;AAAA,MACF,SAAS,GAAA,EAAK;AACZ,QAAA,OAAO,YAAY,GAAG,CAAA;AAAA,MACxB;AAAA,IACF;AAAA,GACF;AAEA,EAAA,MAAA,CAAO,IAAA;AAAA,IACL,+BAAA;AAAA,IACA,gGAAA;AAAA,IACA;AAAA,MACE,UAAUA,CAAAA,CAAE,MAAA,GAAS,GAAA,EAAI,CAAE,SAAS,UAAU,CAAA;AAAA,MAC9C,YAAYA,CAAAA,CAAE,MAAA,GAAS,GAAA,EAAI,CAAE,SAAS,YAAY,CAAA;AAAA,MAClD,IAAA,EAAMA,EACH,IAAA,CAAK,CAAC,aAAa,eAAe,CAAC,CAAA,CACnC,QAAA,CAAS,kBAAkB;AAAA,KAChC;AAAA,IACA,OAAO,EAAE,QAAA,EAAU,UAAA,EAAY,MAAK,KAAM;AACxC,MAAA,IAAI;AACF,QAAA,MAAM,IAAA,GAAO,MAAM,MAAA,CAAO,KAAA;AAAA,UACxB,GAAG,MAAA,CAAO,UAAU,CAAA,YAAA,EAAe,QAAQ,aAAa,UAAU,CAAA,CAAA;AAAA,UAClE,EAAE,IAAA;AAAK,SACT;AACA,QAAA,OAAO;AAAA,UACL,OAAA,EAAS,CAAC,EAAE,IAAA,EAAM,MAAA,EAAQ,IAAA,EAAM,IAAA,CAAK,SAAA,CAAU,IAAA,EAAM,IAAA,EAAM,CAAC,CAAA,EAAG;AAAA,SACjE;AAAA,MACF,SAAS,GAAA,EAAK;AACZ,QAAA,OAAO,YAAY,GAAG,CAAA;AAAA,MACxB;AAAA,IACF;AAAA,GACF;AACF;ACzOO,SAAS,oBAAA,CACd,QACA,MAAA,EACA;AACA,EAAA,MAAA,CAAO,IAAA;AAAA,IACL,yBAAA;AAAA,IACA,kDAAA;AAAA,IACA;AAAA,MACE,OAAA,EAASA,CAAAA,CACN,MAAA,EAAO,CACP,UAAS,CACT,QAAA;AAAA,QACC;AAAA;AACF,KACJ;AAAA,IACA,OAAO,EAAE,OAAA,EAAQ,KAAM;AACrB,MAAA,IAAI;AACF,QAAA,MAAM,EAAA,GAAK,OAAA,GAAU,CAAA,SAAA,EAAY,OAAO,CAAA,CAAA,GAAK,EAAA;AAC7C,QAAA,MAAM,IAAA,GAAO,MAAM,MAAA,CAAO,GAAA,CAAI,GAAG,MAAA,CAAO,UAAU,CAAA,cAAA,EAAiB,EAAE,CAAA,CAAE,CAAA;AACvE,QAAA,OAAO;AAAA,UACL,OAAA,EAAS,CAAC,EAAE,IAAA,EAAM,MAAA,EAAQ,IAAA,EAAM,IAAA,CAAK,SAAA,CAAU,IAAA,EAAM,IAAA,EAAM,CAAC,CAAA,EAAG;AAAA,SACjE;AAAA,MACF,SAAS,GAAA,EAAK;AACZ,QAAA,OAAO,YAAY,GAAG,CAAA;AAAA,MACxB;AAAA,IACF;AAAA,GACF;AAEA,EAAA,MAAA,CAAO,IAAA;AAAA,IACL,0BAAA;AAAA,IACA,8EAAA;AAAA,IACA;AAAA,MACE,OAAA,EAASA,CAAAA,CACN,MAAA,EAAO,CACP,UAAS,CACT,QAAA;AAAA,QACC;AAAA,OACF;AAAA,MACF,IAAA,EAAMA,CAAAA,CACH,MAAA,EAAO,CACP,GAAA,CAAI,CAAC,CAAA,CACL,GAAA,CAAI,GAAG,CAAA,CACP,QAAA,EAAS,CACT,SAAS,kBAAkB,CAAA;AAAA,MAC9B,WAAA,EAAaA,CAAAA,CACV,MAAA,EAAO,CACP,GAAA,CAAI,GAAI,CAAA,CACR,QAAA,EAAS,CACT,QAAA,CAAS,yBAAyB;AAAA,KACvC;AAAA,IACA,OAAO,EAAE,OAAA,EAAS,GAAG,QAAO,KAAM;AAChC,MAAA,IAAI;AACF,QAAA,MAAM,EAAA,GAAK,OAAA,GAAU,CAAA,SAAA,EAAY,OAAO,CAAA,CAAA,GAAK,EAAA;AAC7C,QAAA,MAAM,IAAA,GAAO,MAAM,MAAA,CAAO,GAAA,CAAI,CAAA,EAAG,OAAO,UAAU,CAAA,cAAA,EAAiB,EAAE,CAAA,CAAA,EAAI,MAAM,CAAA;AAC/E,QAAA,OAAO;AAAA,UACL,OAAA,EAAS,CAAC,EAAE,IAAA,EAAM,MAAA,EAAQ,IAAA,EAAM,IAAA,CAAK,SAAA,CAAU,IAAA,EAAM,IAAA,EAAM,CAAC,CAAA,EAAG;AAAA,SACjE;AAAA,MACF,SAAS,GAAA,EAAK;AACZ,QAAA,OAAO,YAAY,GAAG,CAAA;AAAA,MACxB;AAAA,IACF;AAAA,GACF;AAEA,EAAA,MAAA,CAAO,IAAA;AAAA,IACL,2BAAA;AAAA,IACA,sEAAA;AAAA,IACA;AAAA,MACE,OAAA,EAASA,CAAAA,CACN,MAAA,EAAO,CACP,UAAS,CACT,QAAA;AAAA,QACC;AAAA;AACF,KACJ;AAAA,IACA,OAAO,EAAE,OAAA,EAAQ,KAAM;AACrB,MAAA,IAAI;AACF,QAAA,MAAM,EAAA,GAAK,OAAA,GAAU,CAAA,SAAA,EAAY,OAAO,CAAA,CAAA,GAAK,EAAA;AAC7C,QAAA,MAAM,IAAA,GAAO,MAAM,MAAA,CAAO,IAAA,CAAK,GAAG,MAAA,CAAO,UAAU,CAAA,qBAAA,EAAwB,EAAE,CAAA,CAAE,CAAA;AAC/E,QAAA,OAAO;AAAA,UACL,OAAA,EAAS,CAAC,EAAE,IAAA,EAAM,MAAA,EAAQ,IAAA,EAAM,IAAA,CAAK,SAAA,CAAU,IAAA,EAAM,IAAA,EAAM,CAAC,CAAA,EAAG;AAAA,SACjE;AAAA,MACF,SAAS,GAAA,EAAK;AACZ,QAAA,OAAO,YAAY,GAAG,CAAA;AAAA,MACxB;AAAA,IACF;AAAA,GACF;AAEA,EAAA,MAAA,CAAO,IAAA;AAAA,IACL,0BAAA;AAAA,IACA,sEAAA;AAAA,IACA;AAAA,MACE,OAAA,EAASA,CAAAA,CACN,MAAA,EAAO,CACP,UAAS,CACT,QAAA;AAAA,QACC;AAAA,OACF;AAAA,MACF,KAAA,EAAOA,CAAAA,CAAE,MAAA,EAAO,CAAE,GAAA,CAAI,CAAC,CAAA,CAAE,GAAA,CAAI,GAAI,CAAA,CAAE,QAAA,CAAS,cAAc,CAAA;AAAA,MAC1D,KAAA,EAAOA,CAAAA,CACJ,MAAA,EAAO,CACP,KAAI,CACJ,GAAA,CAAI,CAAC,CAAA,CACL,IAAI,EAAE,CAAA,CACN,QAAA,EAAS,CACT,SAAS,0CAA0C,CAAA;AAAA,MACtD,eAAA,EAAiBA,CAAAA,CACd,MAAA,EAAO,CACP,GAAA,CAAI,CAAC,CAAA,CACL,GAAA,CAAI,CAAC,CAAA,CACL,QAAA,EAAS,CACT,SAAS,iDAAiD;AAAA,KAC/D;AAAA,IACA,OAAO,EAAE,OAAA,EAAS,GAAG,QAAO,KAAM;AAChC,MAAA,IAAI;AACF,QAAA,MAAM,EAAA,GAAK,OAAA,GAAU,CAAA,SAAA,EAAY,OAAO,CAAA,CAAA,GAAK,EAAA;AAC7C,QAAA,MAAM,IAAA,GAAO,MAAM,MAAA,CAAO,IAAA,CAAK,CAAA,EAAG,OAAO,UAAU,CAAA,mBAAA,EAAsB,EAAE,CAAA,CAAA,EAAI,MAAM,CAAA;AACrF,QAAA,OAAO;AAAA,UACL,OAAA,EAAS,CAAC,EAAE,IAAA,EAAM,MAAA,EAAQ,IAAA,EAAM,IAAA,CAAK,SAAA,CAAU,IAAA,EAAM,IAAA,EAAM,CAAC,CAAA,EAAG;AAAA,SACjE;AAAA,MACF,SAAS,GAAA,EAAK;AACZ,QAAA,OAAO,YAAY,GAAG,CAAA;AAAA,MACxB;AAAA,IACF;AAAA,GACF;AAEA,EAAA,MAAA,CAAO,IAAA;AAAA,IACL,wBAAA;AAAA,IACA,4EAAA;AAAA,IACA;AAAA,MACE,OAAA,EAASA,CAAAA,CACN,MAAA,EAAO,CACP,UAAS,CACT,QAAA;AAAA,QACC;AAAA,OACF;AAAA,MACF,OAAA,EAASA,CAAAA,CACN,KAAA,CAAMA,CAAAA,CAAE,QAAQ,CAAA,CAChB,GAAA,CAAI,CAAC,CAAA,CACL,GAAA,CAAI,EAAE,CAAA,CACN,SAAS,+BAA+B,CAAA;AAAA,MAC3C,KAAA,EAAOA,CAAAA,CACJ,MAAA,EAAO,CACP,KAAI,CACJ,GAAA,CAAI,CAAC,CAAA,CACL,IAAI,EAAE,CAAA,CACN,QAAA,EAAS,CACT,SAAS,0CAA0C,CAAA;AAAA,MACtD,eAAA,EAAiBA,CAAAA,CACd,MAAA,EAAO,CACP,GAAA,CAAI,CAAC,CAAA,CACL,GAAA,CAAI,CAAC,CAAA,CACL,QAAA,EAAS,CACT,SAAS,iDAAiD;AAAA,KAC/D;AAAA,IACA,OAAO,EAAE,OAAA,EAAS,GAAG,QAAO,KAAM;AAChC,MAAA,IAAI;AACF,QAAA,MAAM,EAAA,GAAK,OAAA,GAAU,CAAA,SAAA,EAAY,OAAO,CAAA,CAAA,GAAK,EAAA;AAC7C,QAAA,MAAM,IAAA,GAAO,MAAM,MAAA,CAAO,IAAA;AAAA,UACxB,CAAA,EAAG,MAAA,CAAO,UAAU,CAAA,yBAAA,EAA4B,EAAE,CAAA,CAAA;AAAA,UAClD;AAAA,SACF;AACA,QAAA,OAAO;AAAA,UACL,OAAA,EAAS,CAAC,EAAE,IAAA,EAAM,MAAA,EAAQ,IAAA,EAAM,IAAA,CAAK,SAAA,CAAU,IAAA,EAAM,IAAA,EAAM,CAAC,CAAA,EAAG;AAAA,SACjE;AAAA,MACF,SAAS,GAAA,EAAK;AACZ,QAAA,OAAO,YAAY,GAAG,CAAA;AAAA,MACxB;AAAA,IACF;AAAA,GACF;AAEA,EAAA,MAAA,CAAO,IAAA;AAAA,IACL,8BAAA;AAAA,IACA,yIAAA;AAAA,IACA;AAAA,MACE,OAAA,EAASA,CAAAA,CACN,MAAA,EAAO,CACP,UAAS,CACT,QAAA;AAAA,QACC;AAAA,OACF;AAAA,MACF,UAAUA,CAAAA,CACP,MAAA,GACA,GAAA,EAAI,CACJ,SAAS,sCAAsC,CAAA;AAAA,MAClD,OAAA,EAASA,CAAAA,CACN,MAAA,EAAO,CACP,GAAA,CAAI,CAAC,CAAA,CACL,GAAA,CAAI,GAAK,CAAA,CACT,QAAA,CAAS,2BAA2B,CAAA;AAAA,MACvC,KAAA,EAAOA,CAAAA,CACJ,MAAA,EAAO,CACP,GAAA,CAAI,GAAG,CAAA,CACP,QAAA,EAAS,CACT,QAAA,CAAS,kCAAkC,CAAA;AAAA,MAC9C,WAAA,EAAaA,CAAAA,CACV,IAAA,CAAK,CAAC,YAAA,EAAc,WAAW,CAAC,CAAA,CAChC,QAAA,EAAS,CACT,QAAA,CAAS,qCAAqC,CAAA;AAAA,MACjD,iBAAA,EAAmBA,CAAAA,CAChB,MAAA,EAAO,CACP,GAAA,CAAI,GAAI,CAAA,CACR,QAAA,EAAS,CACT,QAAA,CAAS,8BAA8B;AAAA,KAC5C;AAAA,IACA,OAAO,EAAE,QAAA,EAAU,OAAA,EAAS,GAAG,MAAK,KAAM;AACxC,MAAA,IAAI;AACF,QAAA,MAAM,SAAA,GAAY,OAAA,GAAU,CAAA,SAAA,EAAY,OAAO,CAAA,CAAA,GAAK,EAAA;AACpD,QAAA,MAAM,IAAA,GAAO,MAAM,MAAA,CAAO,IAAA;AAAA,UACxB,GAAG,MAAA,CAAO,UAAU,CAAA,oCAAA,EAAuC,QAAQ,GAAG,SAAS,CAAA,CAAA;AAAA,UAC/E;AAAA,SACF;AACA,QAAA,OAAO;AAAA,UACL,OAAA,EAAS,CAAC,EAAE,IAAA,EAAM,MAAA,EAAQ,IAAA,EAAM,IAAA,CAAK,SAAA,CAAU,IAAA,EAAM,IAAA,EAAM,CAAC,CAAA,EAAG;AAAA,SACjE;AAAA,MACF,SAAS,GAAA,EAAK;AACZ,QAAA,OAAO,YAAY,GAAG,CAAA;AAAA,MACxB;AAAA,IACF;AAAA,GACF;AAEA,EAAA,MAAA,CAAO,IAAA;AAAA,IACL,oCAAA;AAAA,IACA,2HAAA;AAAA,IACA;AAAA,MACE,OAAA,EAASA,CAAAA,CACN,MAAA,EAAO,CACP,UAAS,CACT,QAAA;AAAA,QACC;AAAA,OACF;AAAA,MACF,UAAUA,CAAAA,CACP,MAAA,GACA,GAAA,EAAI,CACJ,SAAS,+CAA+C,CAAA;AAAA,MAC3D,SAASA,CAAAA,CACN,KAAA;AAAA,QACCA,EAAE,MAAA,CAAO;AAAA,UACP,OAAA,EAASA,CAAAA,CACN,MAAA,EAAO,CACP,GAAA,CAAI,CAAC,CAAA,CACL,GAAA,CAAI,GAAK,CAAA,CACT,QAAA,CAAS,2BAA2B,CAAA;AAAA,UACvC,KAAA,EAAOA,CAAAA,CAAE,MAAA,EAAO,CAAE,GAAA,CAAI,GAAG,CAAA,CAAE,QAAA,EAAS,CAAE,QAAA,CAAS,aAAa,CAAA;AAAA,UAC5D,WAAA,EAAaA,CAAAA,CACV,IAAA,CAAK,CAAC,YAAA,EAAc,WAAW,CAAC,CAAA,CAChC,QAAA,EAAS,CACT,QAAA,CAAS,qCAAqC,CAAA;AAAA,UACjD,iBAAA,EAAmBA,CAAAA,CAChB,MAAA,EAAO,CACP,GAAA,CAAI,GAAI,CAAA,CACR,QAAA,EAAS,CACT,QAAA,CAAS,mBAAmB;AAAA,SAChC;AAAA,OACH,CACC,IAAI,CAAC,CAAA,CACL,IAAI,EAAE,CAAA,CACN,SAAS,sCAAsC;AAAA,KACpD;AAAA,IACA,OAAO,EAAE,QAAA,EAAU,OAAA,EAAS,SAAQ,KAAM;AACxC,MAAA,IAAI;AACF,QAAA,MAAM,SAAA,GAAY,OAAA,GAAU,CAAA,SAAA,EAAY,OAAO,CAAA,CAAA,GAAK,EAAA;AACpD,QAAA,MAAM,IAAA,GAAO,MAAM,MAAA,CAAO,IAAA;AAAA,UACxB,GAAG,MAAA,CAAO,UAAU,CAAA,0CAAA,EAA6C,QAAQ,GAAG,SAAS,CAAA,CAAA;AAAA,UACrF,EAAE,OAAA;AAAQ,SACZ;AACA,QAAA,OAAO;AAAA,UACL,OAAA,EAAS,CAAC,EAAE,IAAA,EAAM,MAAA,EAAQ,IAAA,EAAM,IAAA,CAAK,SAAA,CAAU,IAAA,EAAM,IAAA,EAAM,CAAC,CAAA,EAAG;AAAA,SACjE;AAAA,MACF,SAAS,GAAA,EAAK;AACZ,QAAA,OAAO,YAAY,GAAG,CAAA;AAAA,MACxB;AAAA,IACF;AAAA,GACF;AAEA,EAAA,MAAA,CAAO,IAAA;AAAA,IACL,6BAAA;AAAA,IACA,8FAAA;AAAA,IACA;AAAA,MACE,OAAA,EAASA,CAAAA,CACN,MAAA,EAAO,CACP,UAAS,CACT,QAAA;AAAA,QACC;AAAA,OACF;AAAA,MACF,QAAA,EAAUA,EACP,MAAA,EAAO,CACP,KAAI,CACJ,QAAA,EAAS,CACT,QAAA,CAAS,oBAAoB,CAAA;AAAA,MAChC,MAAA,EAAQA,CAAAA,CACL,IAAA,CAAK,CAAC,YAAA,EAAc,WAAA,EAAa,QAAQ,CAAC,CAAA,CAC1C,QAAA,EAAS,CACT,QAAA,CAAS,6BAA6B,CAAA;AAAA,MACzC,KAAA,EAAOA,CAAAA,CACJ,MAAA,EAAO,CACP,KAAI,CACJ,GAAA,CAAI,CAAC,CAAA,CACL,IAAI,GAAG,CAAA,CACP,QAAA,EAAS,CACT,SAAS,2CAA2C,CAAA;AAAA,MACvD,MAAA,EAAQA,CAAAA,CACL,MAAA,EAAO,CACP,GAAA,EAAI,CACJ,GAAA,CAAI,CAAC,CAAA,CACL,QAAA,EAAS,CACT,QAAA,CAAS,oCAAoC;AAAA,KAClD;AAAA,IACA,OAAO,EAAE,OAAA,EAAS,UAAU,MAAA,EAAQ,KAAA,EAAO,QAAO,KAAM;AACtD,MAAA,IAAI;AACF,QAAA,MAAM,MAAA,GAAS,IAAI,eAAA,EAAgB;AACnC,QAAA,IAAI,OAAA,EAAS,MAAA,CAAO,GAAA,CAAI,SAAA,EAAW,OAAO,CAAA;AAC1C,QAAA,IAAI,aAAa,KAAA,CAAA,EAAW,MAAA,CAAO,IAAI,UAAA,EAAY,MAAA,CAAO,QAAQ,CAAC,CAAA;AACnE,QAAA,IAAI,MAAA,EAAQ,MAAA,CAAO,GAAA,CAAI,QAAA,EAAU,MAAM,CAAA;AACvC,QAAA,IAAI,UAAU,KAAA,CAAA,EAAW,MAAA,CAAO,IAAI,OAAA,EAAS,MAAA,CAAO,KAAK,CAAC,CAAA;AAC1D,QAAA,IAAI,WAAW,KAAA,CAAA,EAAW,MAAA,CAAO,IAAI,QAAA,EAAU,MAAA,CAAO,MAAM,CAAC,CAAA;AAC7D,QAAA,MAAM,EAAA,GAAK,OAAO,QAAA,EAAS;AAC3B,QAAA,MAAMD,KAAAA,GAAO,GAAG,MAAA,CAAO,UAAU,6BAA6B,EAAA,GAAK,CAAA,CAAA,EAAI,EAAE,CAAA,CAAA,GAAK,EAAE,CAAA,CAAA;AAChF,QAAA,MAAM,IAAA,GAAO,MAAM,MAAA,CAAO,GAAA,CAAIA,KAAI,CAAA;AAClC,QAAA,OAAO;AAAA,UACL,OAAA,EAAS,CAAC,EAAE,IAAA,EAAM,MAAA,EAAQ,IAAA,EAAM,IAAA,CAAK,SAAA,CAAU,IAAA,EAAM,IAAA,EAAM,CAAC,CAAA,EAAG;AAAA,SACjE;AAAA,MACF,SAAS,GAAA,EAAK;AACZ,QAAA,OAAO,YAAY,GAAG,CAAA;AAAA,MACxB;AAAA,IACF;AAAA,GACF;AACF;ACpUA,IAAM,oBAAA,GAAuB;AAAA,EAC3B,MAAA;AAAA,EACA,OAAA;AAAA,EACA,MAAA;AAAA,EACA,KAAA;AAAA,EACA,OAAA;AAAA,EACA,MAAA;AAAA,EACA,OAAA;AAAA,EACA,QAAA;AAAA,EACA,MAAA;AAAA,EACA,OAAA;AAAA,EACA,MAAA;AAAA,EACA,UAAA;AAAA,EACA;AACF,CAAA;AAEO,SAAS,iBAAA,CACd,QACA,MAAA,EACA;AACA,EAAA,MAAA,CAAO,IAAA;AAAA,IACL,sBAAA;AAAA,IACA,sDAAA;AAAA,IACA;AAAA,MACE,IAAA,EAAMC,CAAAA,CACH,MAAA,EAAO,CACP,GAAA,EAAI,CACJ,GAAA,CAAI,CAAC,CAAA,CACL,QAAA,EAAS,CACT,QAAA,CAAS,sCAAsC,CAAA;AAAA,MAClD,KAAA,EAAOA,CAAAA,CACJ,MAAA,EAAO,CACP,KAAI,CACJ,GAAA,CAAI,CAAC,CAAA,CACL,IAAI,GAAG,CAAA,CACP,QAAA,EAAS,CACT,SAAS,yCAAyC,CAAA;AAAA,MACrD,SAASA,CAAAA,CACN,MAAA,GACA,QAAA,EAAS,CACT,SAAS,uDAAuD;AAAA,KACrE;AAAA,IACA,OAAO,EAAE,IAAA,EAAM,KAAA,EAAO,SAAQ,KAAM;AAClC,MAAA,IAAI;AACF,QAAA,MAAM,MAAA,GAAS,IAAI,eAAA,EAAgB;AACnC,QAAA,IAAI,SAAS,KAAA,CAAA,EAAW,MAAA,CAAO,IAAI,MAAA,EAAQ,MAAA,CAAO,IAAI,CAAC,CAAA;AACvD,QAAA,IAAI,UAAU,KAAA,CAAA,EAAW,MAAA,CAAO,IAAI,OAAA,EAAS,MAAA,CAAO,KAAK,CAAC,CAAA;AAC1D,QAAA,IAAI,OAAA,EAAS,MAAA,CAAO,GAAA,CAAI,SAAA,EAAW,OAAO,CAAA;AAC1C,QAAA,MAAM,EAAA,GAAK,OAAO,QAAA,EAAS;AAC3B,QAAA,MAAMD,KAAAA,GAAO,GAAG,MAAA,CAAO,UAAU,cAAc,EAAA,GAAK,CAAA,CAAA,EAAI,EAAE,CAAA,CAAA,GAAK,EAAE,CAAA,CAAA;AACjE,QAAA,MAAM,IAAA,GAAO,MAAM,MAAA,CAAO,GAAA,CAAIA,KAAI,CAAA;AAClC,QAAA,OAAO;AAAA,UACL,OAAA,EAAS,CAAC,EAAE,IAAA,EAAM,MAAA,EAAQ,IAAA,EAAM,IAAA,CAAK,SAAA,CAAU,IAAA,EAAM,IAAA,EAAM,CAAC,CAAA,EAAG;AAAA,SACjE;AAAA,MACF,SAAS,GAAA,EAAK;AACZ,QAAA,OAAO,YAAY,GAAG,CAAA;AAAA,MACxB;AAAA,IACF;AAAA,GACF;AAEA,EAAA,MAAA,CAAO,IAAA;AAAA,IACL,oBAAA;AAAA,IACA,0DAAA;AAAA,IACA;AAAA,MACE,SAASC,CAAAA,CAAE,MAAA,GAAS,GAAA,EAAI,CAAE,SAAS,SAAS;AAAA,KAC9C;AAAA,IACA,OAAO,EAAE,OAAA,EAAQ,KAAM;AACrB,MAAA,IAAI;AACF,QAAA,MAAM,IAAA,GAAO,MAAM,MAAA,CAAO,GAAA,CAAI,GAAG,MAAA,CAAO,UAAU,CAAA,WAAA,EAAc,OAAO,CAAA,CAAE,CAAA;AACzE,QAAA,OAAO;AAAA,UACL,OAAA,EAAS,CAAC,EAAE,IAAA,EAAM,MAAA,EAAQ,IAAA,EAAM,IAAA,CAAK,SAAA,CAAU,IAAA,EAAM,IAAA,EAAM,CAAC,CAAA,EAAG;AAAA,SACjE;AAAA,MACF,SAAS,GAAA,EAAK;AACZ,QAAA,OAAO,YAAY,GAAG,CAAA;AAAA,MACxB;AAAA,IACF;AAAA,GACF;AAEA,EAAA,MAAA,CAAO,IAAA;AAAA,IACL,uBAAA;AAAA,IACA,CAAA,mHAAA,EAAsH,oBAAA,CAAqB,IAAA,CAAK,IAAI,CAAC,CAAA,CAAA;AAAA,IACrJ;AAAA,MACE,SAAA,EAAWA,CAAAA,CACR,MAAA,EAAO,CACP,SAAS,2CAA2C,CAAA;AAAA,MACvD,KAAA,EAAOA,CAAAA,CACJ,MAAA,EAAO,CACP,GAAA,CAAI,GAAG,CAAA,CACP,QAAA,EAAS,CACT,QAAA,CAAS,4BAA4B,CAAA;AAAA,MACxC,SAASA,CAAAA,CACN,MAAA,GACA,QAAA,EAAS,CACT,SAAS,uDAAuD;AAAA,KACrE;AAAA,IACA,OAAO,EAAE,SAAA,EAAW,KAAA,EAAO,SAAQ,KAAM;AACvC,MAAA,IAAI;AACF,QAAA,MAAM,GAAA,GAAM,MAAM,SAAA,CAAU,KAAA,CAAM,GAAG,CAAA,CAAE,GAAA,IAAO,WAAA,EAAY;AAC1D,QAAA,IAAI,CAAC,oBAAA,CAAqB,QAAA,CAAS,GAAG,CAAA,EAAG;AACvC,UAAA,OAAO;AAAA,YACL,OAAA,EAAS;AAAA,cACP;AAAA,gBACE,IAAA,EAAM,MAAA;AAAA,gBACN,MAAM,CAAA,uBAAA,EAA0B,GAAG,iBAAiB,oBAAA,CAAqB,IAAA,CAAK,IAAI,CAAC,CAAA;AAAA;AACrF,aACF;AAAA,YACA,OAAA,EAAS;AAAA,WACX;AAAA,QACF;AAEA,QAAA,MAAM,UAAA,GAAa,MAAM,QAAA,CAAS,SAAS,CAAA;AAC3C,QAAA,MAAM,QAAA,GAAW,SAAS,SAAS,CAAA;AACnC,QAAA,MAAM,IAAA,GAAO,MAAM,MAAA,CAAO,UAAA;AAAA,UACxB,CAAA,EAAG,OAAO,UAAU,CAAA,iBAAA,CAAA;AAAA,UACpB,UAAA;AAAA,UACA,QAAA;AAAA,UACA,KAAA;AAAA,UACA;AAAA,SACF;AACA,QAAA,OAAO;AAAA,UACL,OAAA,EAAS,CAAC,EAAE,IAAA,EAAM,MAAA,EAAQ,IAAA,EAAM,IAAA,CAAK,SAAA,CAAU,IAAA,EAAM,IAAA,EAAM,CAAC,CAAA,EAAG;AAAA,SACjE;AAAA,MACF,SAAS,GAAA,EAAK;AACZ,QAAA,OAAO,YAAY,GAAG,CAAA;AAAA,MACxB;AAAA,IACF;AAAA,GACF;AAEA,EAAA,MAAA,CAAO,IAAA;AAAA,IACL,0BAAA;AAAA,IACA,0FAAA;AAAA,IACA;AAAA,MACE,SAASA,CAAAA,CAAE,MAAA,GAAS,GAAA,EAAI,CAAE,SAAS,sBAAsB;AAAA,KAC3D;AAAA,IACA,OAAO,EAAE,OAAA,EAAQ,KAAM;AACrB,MAAA,IAAI;AACF,QAAA,MAAM,IAAA,GAAO,MAAM,MAAA,CAAO,IAAA,CAAK,GAAG,MAAA,CAAO,UAAU,CAAA,WAAA,EAAc,OAAO,CAAA,UAAA,CAAY,CAAA;AACpF,QAAA,OAAO;AAAA,UACL,OAAA,EAAS,CAAC,EAAE,IAAA,EAAM,MAAA,EAAQ,IAAA,EAAM,IAAA,CAAK,SAAA,CAAU,IAAA,EAAM,IAAA,EAAM,CAAC,CAAA,EAAG;AAAA,SACjE;AAAA,MACF,SAAS,GAAA,EAAK;AACZ,QAAA,OAAO,YAAY,GAAG,CAAA;AAAA,MACxB;AAAA,IACF;AAAA,GACF;AACF;ACnJO,SAAS,4BAAA,CACd,QACA,MAAA,EACA;AACA,EAAA,MAAA,CAAO,IAAA;AAAA,IACL,kCAAA;AAAA,IACA,iGAAA;AAAA,IACA;AAAA,MACE,WAAA,EAAaA,EACV,IAAA,CAAK;AAAA,QACJ,MAAA;AAAA,QACA,KAAA;AAAA,QACA,QAAA;AAAA,QACA,cAAA;AAAA,QACA,YAAA;AAAA,QACA,WAAA;AAAA,QACA;AAAA,OACD,CAAA,CACA,QAAA,EAAS,CACT,SAAS,uBAAuB,CAAA;AAAA,MACnC,MAAA,EAAQA,CAAAA,CACL,IAAA,CAAK,CAAC,YAAA,EAAc,WAAA,EAAa,QAAQ,CAAC,CAAA,CAC1C,QAAA,EAAS,CACT,QAAA,CAAS,6BAA6B,CAAA;AAAA,MACzC,IAAA,EAAMA,CAAAA,CACH,MAAA,EAAO,CACP,GAAA,EAAI,CACJ,GAAA,CAAI,CAAC,CAAA,CACL,QAAA,EAAS,CACT,QAAA,CAAS,sCAAsC,CAAA;AAAA,MAClD,KAAA,EAAOA,CAAAA,CACJ,MAAA,EAAO,CACP,KAAI,CACJ,GAAA,CAAI,CAAC,CAAA,CACL,IAAI,GAAG,CAAA,CACP,QAAA,EAAS,CACT,SAAS,yCAAyC,CAAA;AAAA,MACrD,SAASA,CAAAA,CAAE,MAAA,GAAS,QAAA,EAAS,CAAE,SAAS,uDAAuD;AAAA,KACjG;AAAA,IACA,OAAO,EAAE,WAAA,EAAa,QAAQ,IAAA,EAAM,KAAA,EAAO,SAAQ,KAAM;AACvD,MAAA,IAAI;AACF,QAAA,MAAM,MAAA,GAAS,IAAI,eAAA,EAAgB;AACnC,QAAA,IAAI,WAAA,EAAa,MAAA,CAAO,GAAA,CAAI,aAAA,EAAe,WAAW,CAAA;AACtD,QAAA,IAAI,MAAA,EAAQ,MAAA,CAAO,GAAA,CAAI,QAAA,EAAU,MAAM,CAAA;AACvC,QAAA,IAAI,SAAS,KAAA,CAAA,EAAW,MAAA,CAAO,IAAI,MAAA,EAAQ,MAAA,CAAO,IAAI,CAAC,CAAA;AACvD,QAAA,IAAI,UAAU,KAAA,CAAA,EAAW,MAAA,CAAO,IAAI,OAAA,EAAS,MAAA,CAAO,KAAK,CAAC,CAAA;AAC1D,QAAA,IAAI,OAAA,EAAS,MAAA,CAAO,GAAA,CAAI,SAAA,EAAW,OAAO,CAAA;AAC1C,QAAA,MAAM,EAAA,GAAK,OAAO,QAAA,EAAS;AAC3B,QAAA,MAAMD,KAAAA,GAAO,GAAG,MAAA,CAAO,UAAU,0BAA0B,EAAA,GAAK,CAAA,CAAA,EAAI,EAAE,CAAA,CAAA,GAAK,EAAE,CAAA,CAAA;AAC7E,QAAA,MAAM,IAAA,GAAO,MAAM,MAAA,CAAO,GAAA,CAAIA,KAAI,CAAA;AAClC,QAAA,OAAO;AAAA,UACL,OAAA,EAAS,CAAC,EAAE,IAAA,EAAM,MAAA,EAAQ,IAAA,EAAM,IAAA,CAAK,SAAA,CAAU,IAAA,EAAM,IAAA,EAAM,CAAC,CAAA,EAAG;AAAA,SACjE;AAAA,MACF,SAAS,GAAA,EAAK;AACZ,QAAA,OAAO,YAAY,GAAG,CAAA;AAAA,MACxB;AAAA,IACF;AAAA,GACF;AACF;AC1DO,SAAS,wBAAA,CAAyB,QAAmB,MAAA,EAA+B;AACzF,EAAA,MAAA,CAAO,IAAA;AAAA,IACL,oCAAA;AAAA,IACA,kHAAA;AAAA,IACA;AAAA,MACE,KAAA,EAAOC,CAAAA,CAAE,MAAA,EAAO,CAAE,GAAA,CAAI,GAAG,CAAA,CAAE,QAAA,EAAS,CAAE,QAAA,CAAS,cAAc,CAAA;AAAA,MAC7D,IAAA,EAAMA,CAAAA,CAAE,KAAA,CAAMA,CAAAA,CAAE,MAAA,EAAQ,CAAA,CAAE,GAAA,CAAI,EAAE,CAAA,CAAE,QAAA,EAAS,CAAE,SAAS,gBAAgB,CAAA;AAAA,MACtE,UAAA,EAAYA,CAAAA,CAAE,IAAA,CAAK,CAAC,MAAA,EAAQ,UAAU,CAAC,CAAA,CAAE,QAAA,EAAS,CAAE,QAAA,CAAS,sBAAsB,CAAA;AAAA,MACnF,OAAA,EAASA,CAAAA,CACN,IAAA,CAAK,CAAC,UAAU,SAAA,EAAW,eAAA,EAAiB,WAAA,EAAa,YAAY,CAAC,CAAA,CACtE,QAAA,EAAS,CACT,SAAS,8BAA8B,CAAA;AAAA,MAC1C,UAAUA,CAAAA,CAAE,MAAA,GAAS,QAAA,EAAS,CAAE,SAAS,oCAAoC,CAAA;AAAA,MAC7E,IAAA,EAAMA,CAAAA,CAAE,MAAA,EAAO,CAAE,GAAA,EAAI,CAAE,GAAA,CAAI,CAAC,CAAA,CAAE,QAAA,EAAS,CAAE,QAAA,CAAS,mBAAmB,CAAA;AAAA,MACrE,KAAA,EAAOA,CAAAA,CAAE,MAAA,EAAO,CAAE,KAAI,CAAE,GAAA,CAAI,CAAC,CAAA,CAAE,IAAI,GAAG,CAAA,CAAE,QAAA,EAAS,CAAE,SAAS,gCAAgC;AAAA,KAC9F;AAAA,IACA,OAAO,MAAA,KAAW;AAChB,MAAA,IAAI;AACF,QAAA,MAAM,YAAA,GAAe,IAAI,eAAA,EAAgB;AACzC,QAAA,IAAI,OAAO,KAAA,EAAO,YAAA,CAAa,GAAA,CAAI,OAAA,EAAS,OAAO,KAAK,CAAA;AACxD,QAAA,IAAI,MAAA,CAAO,IAAA,EAAM,MAAA,CAAO,IAAA,CAAK,OAAA,CAAQ,CAAC,CAAA,KAAM,YAAA,CAAa,MAAA,CAAO,MAAA,EAAQ,CAAC,CAAC,CAAA;AAC1E,QAAA,IAAI,OAAO,UAAA,EAAY,YAAA,CAAa,GAAA,CAAI,YAAA,EAAc,OAAO,UAAU,CAAA;AACvE,QAAA,IAAI,OAAO,OAAA,EAAS,YAAA,CAAa,GAAA,CAAI,SAAA,EAAW,OAAO,OAAO,CAAA;AAC9D,QAAA,IAAI,OAAO,QAAA,EAAU,YAAA,CAAa,GAAA,CAAI,UAAA,EAAY,OAAO,QAAQ,CAAA;AACjE,QAAA,IAAI,MAAA,CAAO,SAAS,KAAA,CAAA,EAAW,YAAA,CAAa,IAAI,MAAA,EAAQ,MAAA,CAAO,MAAA,CAAO,IAAI,CAAC,CAAA;AAC3E,QAAA,IAAI,MAAA,CAAO,UAAU,KAAA,CAAA,EAAW,YAAA,CAAa,IAAI,OAAA,EAAS,MAAA,CAAO,MAAA,CAAO,KAAK,CAAC,CAAA;AAE9E,QAAA,MAAM,EAAA,GAAK,aAAa,QAAA,EAAS;AACjC,QAAA,MAAMD,KAAAA,GAAO,GAAG,MAAA,CAAO,UAAU,8BAA8B,EAAA,GAAK,CAAA,CAAA,EAAI,EAAE,CAAA,CAAA,GAAK,EAAE,CAAA,CAAA;AACjF,QAAA,MAAM,IAAA,GAAO,MAAM,MAAA,CAAO,GAAA,CAAIA,KAAI,CAAA;AAElC,QAAA,OAAO;AAAA,UACL,OAAA,EAAS,CAAC,EAAE,IAAA,EAAM,MAAA,EAAQ,IAAA,EAAM,IAAA,CAAK,SAAA,CAAU,IAAA,EAAM,IAAA,EAAM,CAAC,CAAA,EAAG;AAAA,SACjE;AAAA,MACF,SAAS,GAAA,EAAK;AACZ,QAAA,OAAO,YAAY,GAAG,CAAA;AAAA,MACxB;AAAA,IACF;AAAA,GACF;AAEA,EAAA,MAAA,CAAO,IAAA;AAAA,IACL,6BAAA;AAAA,IACA,mEAAA;AAAA,IACA;AAAA,MACE,UAAA,EAAYC,CAAAA,CAAE,MAAA,EAAO,CAAE,SAAS,kBAAkB;AAAA,KACpD;AAAA,IACA,OAAO,MAAA,KAAW;AAChB,MAAA,IAAI;AACF,QAAA,MAAM,IAAA,GAAO,MAAM,MAAA,CAAO,GAAA;AAAA,UACxB,CAAA,EAAG,MAAA,CAAO,UAAU,CAAA,4BAAA,EAA+B,OAAO,UAAU,CAAA;AAAA,SACtE;AACA,QAAA,OAAO;AAAA,UACL,OAAA,EAAS,CAAC,EAAE,IAAA,EAAM,MAAA,EAAQ,IAAA,EAAM,IAAA,CAAK,SAAA,CAAU,IAAA,EAAM,IAAA,EAAM,CAAC,CAAA,EAAG;AAAA,SACjE;AAAA,MACF,SAAS,GAAA,EAAK;AACZ,QAAA,OAAO,YAAY,GAAG,CAAA;AAAA,MACxB;AAAA,IACF;AAAA,GACF;AAEA,EAAA,MAAA,CAAO,IAAA;AAAA,IACL,yBAAA;AAAA,IACA,6FAAA;AAAA,IACA;AAAA,MACE,UAAA,EAAYA,CAAAA,CAAE,MAAA,EAAO,CAAE,SAAS,6BAA6B;AAAA,KAC/D;AAAA,IACA,OAAO,MAAA,KAAW;AAChB,MAAA,IAAI;AACF,QAAA,MAAM,IAAA,GAAO,MAAM,MAAA,CAAO,IAAA;AAAA,UACxB,CAAA,EAAG,MAAA,CAAO,UAAU,CAAA,4BAAA,EAA+B,OAAO,UAAU,CAAA;AAAA,SACtE;AACA,QAAA,OAAO;AAAA,UACL,OAAA,EAAS,CAAC,EAAE,IAAA,EAAM,MAAA,EAAQ,IAAA,EAAM,IAAA,CAAK,SAAA,CAAU,IAAA,EAAM,IAAA,EAAM,CAAC,CAAA,EAAG;AAAA,SACjE;AAAA,MACF,SAAS,GAAA,EAAK;AACZ,QAAA,OAAO,YAAY,GAAG,CAAA;AAAA,MACxB;AAAA,IACF;AAAA,GACF;AAEA,EAAA,MAAA,CAAO,IAAA;AAAA,IACL,sCAAA;AAAA,IACA,wEAAA;AAAA,IACA;AAAA,MACE,KAAA,EAAOA,CAAAA,CAAE,MAAA,EAAO,CAAE,GAAA,CAAI,GAAG,CAAA,CAAE,QAAA,EAAS,CAAE,QAAA,CAAS,cAAc,CAAA;AAAA,MAC7D,IAAA,EAAMA,CAAAA,CAAE,KAAA,CAAMA,CAAAA,CAAE,MAAA,EAAQ,CAAA,CAAE,GAAA,CAAI,EAAE,CAAA,CAAE,QAAA,EAAS,CAAE,SAAS,gBAAgB,CAAA;AAAA,MACtE,OAAA,EAASA,CAAAA,CACN,IAAA,CAAK,CAAC,UAAU,SAAA,EAAW,eAAA,EAAiB,WAAA,EAAa,YAAY,CAAC,CAAA,CACtE,QAAA,EAAS,CACT,SAAS,YAAY,CAAA;AAAA,MACxB,IAAA,EAAMA,CAAAA,CAAE,MAAA,EAAO,CAAE,GAAA,EAAI,CAAE,GAAA,CAAI,CAAC,CAAA,CAAE,QAAA,EAAS,CAAE,QAAA,CAAS,mBAAmB,CAAA;AAAA,MACrE,KAAA,EAAOA,CAAAA,CAAE,MAAA,EAAO,CAAE,KAAI,CAAE,GAAA,CAAI,CAAC,CAAA,CAAE,IAAI,GAAG,CAAA,CAAE,QAAA,EAAS,CAAE,SAAS,kBAAkB;AAAA,KAChF;AAAA,IACA,OAAO,MAAA,KAAW;AAChB,MAAA,IAAI;AACF,QAAA,MAAM,YAAA,GAAe,IAAI,eAAA,EAAgB;AACzC,QAAA,IAAI,OAAO,KAAA,EAAO,YAAA,CAAa,GAAA,CAAI,OAAA,EAAS,OAAO,KAAK,CAAA;AACxD,QAAA,IAAI,MAAA,CAAO,IAAA,EAAM,MAAA,CAAO,IAAA,CAAK,OAAA,CAAQ,CAAC,CAAA,KAAM,YAAA,CAAa,MAAA,CAAO,MAAA,EAAQ,CAAC,CAAC,CAAA;AAC1E,QAAA,IAAI,OAAO,OAAA,EAAS,YAAA,CAAa,GAAA,CAAI,SAAA,EAAW,OAAO,OAAO,CAAA;AAC9D,QAAA,IAAI,MAAA,CAAO,SAAS,KAAA,CAAA,EAAW,YAAA,CAAa,IAAI,MAAA,EAAQ,MAAA,CAAO,MAAA,CAAO,IAAI,CAAC,CAAA;AAC3E,QAAA,IAAI,MAAA,CAAO,UAAU,KAAA,CAAA,EAAW,YAAA,CAAa,IAAI,OAAA,EAAS,MAAA,CAAO,MAAA,CAAO,KAAK,CAAC,CAAA;AAE9E,QAAA,MAAM,EAAA,GAAK,aAAa,QAAA,EAAS;AACjC,QAAA,MAAMD,KAAAA,GAAO,GAAG,MAAA,CAAO,UAAU,wBAAwB,EAAA,GAAK,CAAA,CAAA,EAAI,EAAE,CAAA,CAAA,GAAK,EAAE,CAAA,CAAA;AAC3E,QAAA,MAAM,IAAA,GAAO,MAAM,MAAA,CAAO,GAAA,CAAIA,KAAI,CAAA;AAElC,QAAA,OAAO;AAAA,UACL,OAAA,EAAS,CAAC,EAAE,IAAA,EAAM,MAAA,EAAQ,IAAA,EAAM,IAAA,CAAK,SAAA,CAAU,IAAA,EAAM,IAAA,EAAM,CAAC,CAAA,EAAG;AAAA,SACjE;AAAA,MACF,SAAS,GAAA,EAAK;AACZ,QAAA,OAAO,YAAY,GAAG,CAAA;AAAA,MACxB;AAAA,IACF;AAAA,GACF;AAEA,EAAA,MAAA,CAAO,IAAA;AAAA,IACL,oCAAA;AAAA,IACA,sEAAA;AAAA,IACA;AAAA,MACE,KAAA,EAAOC,CAAAA,CAAE,MAAA,EAAO,CAAE,GAAA,CAAI,GAAG,CAAA,CAAE,QAAA,EAAS,CAAE,QAAA,CAAS,cAAc,CAAA;AAAA,MAC7D,IAAA,EAAMA,CAAAA,CAAE,KAAA,CAAMA,CAAAA,CAAE,MAAA,EAAQ,CAAA,CAAE,GAAA,CAAI,EAAE,CAAA,CAAE,QAAA,EAAS,CAAE,SAAS,gBAAgB,CAAA;AAAA,MACtE,OAAA,EAASA,CAAAA,CACN,IAAA,CAAK,CAAC,UAAU,SAAA,EAAW,eAAA,EAAiB,WAAA,EAAa,YAAY,CAAC,CAAA,CACtE,QAAA,EAAS,CACT,SAAS,YAAY,CAAA;AAAA,MACxB,UAAUA,CAAAA,CAAE,MAAA,GAAS,QAAA,EAAS,CAAE,SAAS,oBAAoB,CAAA;AAAA,MAC7D,IAAA,EAAMA,CAAAA,CAAE,MAAA,EAAO,CAAE,GAAA,EAAI,CAAE,GAAA,CAAI,CAAC,CAAA,CAAE,QAAA,EAAS,CAAE,QAAA,CAAS,mBAAmB,CAAA;AAAA,MACrE,KAAA,EAAOA,CAAAA,CAAE,MAAA,EAAO,CAAE,KAAI,CAAE,GAAA,CAAI,CAAC,CAAA,CAAE,IAAI,GAAG,CAAA,CAAE,QAAA,EAAS,CAAE,SAAS,kBAAkB;AAAA,KAChF;AAAA,IACA,OAAO,MAAA,KAAW;AAChB,MAAA,IAAI;AACF,QAAA,MAAM,YAAA,GAAe,IAAI,eAAA,EAAgB;AACzC,QAAA,IAAI,OAAO,KAAA,EAAO,YAAA,CAAa,GAAA,CAAI,OAAA,EAAS,OAAO,KAAK,CAAA;AACxD,QAAA,IAAI,MAAA,CAAO,IAAA,EAAM,MAAA,CAAO,IAAA,CAAK,OAAA,CAAQ,CAAC,CAAA,KAAM,YAAA,CAAa,MAAA,CAAO,MAAA,EAAQ,CAAC,CAAC,CAAA;AAC1E,QAAA,IAAI,OAAO,OAAA,EAAS,YAAA,CAAa,GAAA,CAAI,SAAA,EAAW,OAAO,OAAO,CAAA;AAC9D,QAAA,IAAI,OAAO,QAAA,EAAU,YAAA,CAAa,GAAA,CAAI,UAAA,EAAY,OAAO,QAAQ,CAAA;AACjE,QAAA,IAAI,MAAA,CAAO,SAAS,KAAA,CAAA,EAAW,YAAA,CAAa,IAAI,MAAA,EAAQ,MAAA,CAAO,MAAA,CAAO,IAAI,CAAC,CAAA;AAC3E,QAAA,IAAI,MAAA,CAAO,UAAU,KAAA,CAAA,EAAW,YAAA,CAAa,IAAI,OAAA,EAAS,MAAA,CAAO,MAAA,CAAO,KAAK,CAAC,CAAA;AAE9E,QAAA,MAAM,EAAA,GAAK,aAAa,QAAA,EAAS;AACjC,QAAA,MAAMD,KAAAA,GAAO,GAAG,MAAA,CAAO,UAAU,8BAA8B,EAAA,GAAK,CAAA,CAAA,EAAI,EAAE,CAAA,CAAA,GAAK,EAAE,CAAA,CAAA;AACjF,QAAA,MAAM,IAAA,GAAO,MAAM,MAAA,CAAO,GAAA,CAAIA,KAAI,CAAA;AAElC,QAAA,OAAO;AAAA,UACL,OAAA,EAAS,CAAC,EAAE,IAAA,EAAM,MAAA,EAAQ,IAAA,EAAM,IAAA,CAAK,SAAA,CAAU,IAAA,EAAM,IAAA,EAAM,CAAC,CAAA,EAAG;AAAA,SACjE;AAAA,MACF,SAAS,GAAA,EAAK;AACZ,QAAA,OAAO,YAAY,GAAG,CAAA;AAAA,MACxB;AAAA,IACF;AAAA,GACF;AACF;ACxJA,IAAM,eAAA,GAAkB;AAAA,EACtB,MAAA;AAAA,EACA,cAAA;AAAA,EACA,gBAAA;AAAA,EACA,YAAA;AAAA,EACA,QAAA;AAAA,EACA,SAAA;AAAA,EACA,cAAA;AAAA,EACA;AACF,CAAA;AAEA,IAAM,aAAA,GAAgB,YAAA;AACtB,IAAM,UAAA,GAAa,QAAA;AACnB,IAAM,WAAA,GAAc,aAAA;AACpB,IAAM,YAAA,GAAe,eAAA;AACrB,IAAM,UAAA,GAAa,YAAA;AAEZ,SAAS,gBAAgB,QAAA,EAA2B;AACzD,EAAA,IAAI,GAAA,GAAM,QAAA,IAAY,OAAA,CAAQ,GAAA,EAAI;AAClC,EAAA,MAAM,IAAA,GAAY,IAAA,CAAA,KAAA,CAAM,GAAG,CAAA,CAAE,IAAA;AAE7B,EAAA,OAAO,QAAQ,IAAA,EAAM;AACnB,IAAA,KAAA,MAAW,UAAU,eAAA,EAAiB;AACpC,MAAA,IAAOE,GAAA,CAAA,UAAA,CAAgB,IAAA,CAAA,IAAA,CAAK,GAAA,EAAK,MAAM,CAAC,CAAA,EAAG;AACzC,QAAA,OAAO,GAAA;AAAA,MACT;AAAA,IACF;AACA,IAAA,GAAA,GAAW,aAAQ,GAAG,CAAA;AAAA,EACxB;AAEA,EAAA,OAAO,QAAA,IAAY,QAAQ,GAAA,EAAI;AACjC;AAMO,SAAS,aAAa,WAAA,EAA6B;AACxD,EAAA,OAAY,IAAA,CAAA,IAAA,CAAK,WAAA,EAAa,aAAA,EAAe,UAAU,CAAA;AACzD;AAEO,SAAS,cAAc,WAAA,EAA6B;AACzD,EAAA,OAAY,IAAA,CAAA,IAAA,CAAK,WAAA,EAAa,aAAA,EAAe,WAAW,CAAA;AAC1D;AAEO,SAAS,eAAe,WAAA,EAA6B;AAC1D,EAAA,OAAY,IAAA,CAAA,IAAA,CAAK,WAAA,EAAa,aAAA,EAAe,UAAA,EAAY,YAAY,CAAA;AACvE;AAEO,SAAS,aAAa,WAAA,EAA6B;AACxD,EAAA,OAAY,IAAA,CAAA,IAAA,CAAK,WAAA,EAAa,aAAA,EAAe,UAAA,EAAY,UAAU,CAAA;AACrE;AAEA,SAAS,iBAAA,GAA4B;AACnC,EAAA,MAAM,KAAA,GAAQ,sCAAA;AACd,EAAA,IAAI,MAAA,GAAS,EAAA;AACb,EAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,CAAA,EAAG,CAAA,EAAA,EAAK;AAC1B,IAAA,MAAA,IAAU,KAAA,CAAM,KAAK,KAAA,CAAM,IAAA,CAAK,QAAO,GAAI,KAAA,CAAM,MAAM,CAAC,CAAA;AAAA,EAC1D;AACA,EAAA,OAAO,MAAA;AACT;AAEO,SAAS,uBAAuB,WAAA,EAAoC;AACzE,EAAA,MAAM,UAAA,GAAa,cAAc,WAAW,CAAA;AAE5C,EAAA,IAAOA,GAAA,CAAA,UAAA,CAAW,UAAU,CAAA,EAAG;AAC7B,IAAA,OAAO,IAAA,CAAK,KAAA,CAASA,GAAA,CAAA,YAAA,CAAa,UAAA,EAAY,OAAO,CAAC,CAAA;AAAA,EACxD;AAEA,EAAA,MAAM,SAAA,GAAY,aAAa,WAAW,CAAA;AAC1C,EAAGA,GAAA,CAAA,SAAA,CAAU,SAAA,EAAW,EAAE,SAAA,EAAW,MAAM,CAAA;AAE3C,EAAA,MAAM,MAAA,GAAwB;AAAA,IAC5B,YAAY,iBAAA,EAAkB;AAAA,IAC9B,YAAA,EAAmB,cAAS,WAAW,CAAA;AAAA,IACvC,UAAA,EAAA,iBAAY,IAAI,IAAA,EAAK,EAAE,WAAA,EAAY;AAAA,IACnC,YAAA,EAAc;AAAA,GAChB;AAEA,EAAGA,kBAAc,UAAA,EAAY,IAAA,CAAK,UAAU,MAAA,EAAQ,IAAA,EAAM,CAAC,CAAC,CAAA;AAC5D,EAAGA,GAAA,CAAA,aAAA,CAAc,cAAA,CAAe,WAAW,CAAA,EAAG,EAAE,CAAA;AAChD,EAAGA,GAAA,CAAA,aAAA;AAAA,IACD,aAAa,WAAW,CAAA;AAAA,IACxB,IAAA,CAAK,SAAA,CAAU,EAAE,OAAA,EAAS,GAAG,SAAA,EAAW,EAAC,EAAG,cAAA,EAAgB,EAAC,EAAG,UAAA,EAAY,IAAI;AAAA,GAClF;AAEA,EAAA,OAAO,MAAA;AACT;;;ACjFA,IAAM,kBAAA,GAAqB,GAAA;AAC3B,IAAM,QAAA,GAAW,EAAA;AAEjB,SAAS,UAAA,GAAqB;AAC5B,EAAA,MAAM,KAAA,GAAQ,gEAAA;AACd,EAAA,IAAI,MAAA,GAAS,EAAA;AACb,EAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,CAAA,EAAG,CAAA,EAAA,EAAK;AAC1B,IAAA,MAAA,IAAU,KAAA,CAAM,KAAK,KAAA,CAAM,IAAA,CAAK,QAAO,GAAI,KAAA,CAAM,MAAM,CAAC,CAAA;AAAA,EAC1D;AACA,EAAA,OAAO,MAAA;AACT;AAEA,SAAS,SAAS,IAAA,EAAwB;AACxC,EAAA,OAAO,IAAA,CACJ,WAAA,EAAY,CACZ,OAAA,CAAQ,gBAAgB,GAAG,CAAA,CAC3B,KAAA,CAAM,KAAK,EACX,MAAA,CAAO,CAAC,CAAA,KAAM,CAAA,CAAE,SAAS,CAAC,CAAA;AAC/B;AAEO,IAAM,cAAN,MAAkB;AAAA,EACf,WAAA;AAAA,EACA,MAAA;AAAA,EAER,YAAY,QAAA,EAAmB;AAC7B,IAAA,IAAA,CAAK,WAAA,GAAc,gBAAgB,QAAQ,CAAA;AAC3C,IAAA,IAAA,CAAK,MAAA,GAAS,sBAAA,CAAuB,IAAA,CAAK,WAAW,CAAA;AAAA,EACvD;AAAA,EAEA,IAAI,IAAA,GAAe;AACjB,IAAA,OAAO,IAAA,CAAK,WAAA;AAAA,EACd;AAAA,EAEA,IAAI,WAAA,GAAsB;AACxB,IAAA,OAAO,KAAK,MAAA,CAAO,YAAA;AAAA,EACrB;AAAA,EAEA,IAAI,SAAA,GAAoB;AACtB,IAAA,OAAO,KAAK,MAAA,CAAO,UAAA;AAAA,EACrB;AAAA,EAEA,IAAI,WAAA,GAAsB;AACxB,IAAA,OAAO,KAAK,MAAA,CAAO,YAAA;AAAA,EACrB;AAAA,EAEA,KAAA,CACE,SACA,QAAA,EACA,IAAA,GAAiB,EAAC,EAClB,UAAA,GAAyB,UACzB,aAAA,EACa;AACb,IAAA,IAAI,OAAA,CAAQ,SAAS,kBAAA,EAAoB;AACvC,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,kCAAA,EAAqC,kBAAkB,CAAA,WAAA,CAAa,CAAA;AAAA,IACtF;AACA,IAAA,IAAI,IAAA,CAAK,SAAS,QAAA,EAAU;AAC1B,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,QAAA,EAAW,QAAQ,CAAA,aAAA,CAAe,CAAA;AAAA,IACpD;AAEA,IAAA,MAAM,GAAA,GAAA,iBAAM,IAAI,IAAA,EAAK,EAAE,WAAA,EAAY;AACnC,IAAA,MAAM,KAAA,GAAqB;AAAA,MACzB,IAAI,UAAA,EAAW;AAAA,MACf,OAAA;AAAA,MACA,QAAA;AAAA,MACA,IAAA,EAAM,KAAK,GAAA,CAAI,CAAC,MAAM,CAAA,CAAE,WAAA,EAAY,CAAE,IAAA,EAAM,CAAA;AAAA,MAC5C,UAAA;AAAA,MACA,UAAA,EAAY,GAAA;AAAA,MACZ,UAAA,EAAY,GAAA;AAAA,MACZ,cAAA,EAAgB;AAAA,KAClB;AAEA,IAAA,MAAM,WAAA,GAAc,cAAA,CAAe,IAAA,CAAK,WAAW,CAAA;AACnD,IAAG,mBAAe,WAAA,EAAa,IAAA,CAAK,SAAA,CAAU,KAAK,IAAI,IAAI,CAAA;AAE3D,IAAA,IAAA,CAAK,WAAW,KAAK,CAAA;AACrB,IAAA,IAAA,CAAK,MAAA,CAAO,YAAA,EAAA;AACZ,IAAA,IAAA,CAAK,UAAA,EAAW;AAEhB,IAAA,OAAO,KAAA;AAAA,EACT;AAAA,EAEA,KACE,QAAA,EACA,IAAA,EACA,YACA,KAAA,GAAQ,EAAA,EACR,SAAS,CAAA,EACkC;AAC3C,IAAA,IAAI,OAAA,GAAU,KAAK,cAAA,EAAe;AAElC,IAAA,IAAI,QAAA,EAAU;AACZ,MAAA,OAAA,GAAU,QAAQ,MAAA,CAAO,CAAC,CAAA,KAAM,CAAA,CAAE,aAAa,QAAQ,CAAA;AAAA,IACzD;AACA,IAAA,IAAI,IAAA,IAAQ,IAAA,CAAK,MAAA,GAAS,CAAA,EAAG;AAC3B,MAAA,MAAM,YAAY,IAAA,CAAK,GAAA,CAAI,CAAC,CAAA,KAAM,CAAA,CAAE,aAAa,CAAA;AACjD,MAAA,OAAA,GAAU,OAAA,CAAQ,MAAA,CAAO,CAAC,CAAA,KAAM,SAAA,CAAU,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,IAAA,CAAK,QAAA,CAAS,CAAC,CAAC,CAAC,CAAA;AAAA,IAC3E;AACA,IAAA,IAAI,UAAA,EAAY;AACd,MAAA,OAAA,GAAU,QAAQ,MAAA,CAAO,CAAC,CAAA,KAAM,CAAA,CAAE,eAAe,UAAU,CAAA;AAAA,IAC7D;AAEA,IAAA,OAAA,CAAQ,IAAA,CAAK,CAAC,CAAA,EAAG,CAAA,KAAM,EAAE,UAAA,CAAW,aAAA,CAAc,CAAA,CAAE,UAAU,CAAC,CAAA;AAC/D,IAAA,MAAM,QAAQ,OAAA,CAAQ,MAAA;AAEtB,IAAA,OAAO;AAAA,MACL,OAAA,EAAS,OAAA,CAAQ,KAAA,CAAM,MAAA,EAAQ,SAAS,KAAK,CAAA;AAAA,MAC7C;AAAA,KACF;AAAA,EACF;AAAA,EAEA,MAAA,CACE,KAAA,EACA,QAAA,EACA,KAAA,GAAQ,EAAA,EACO;AACf,IAAA,MAAM,KAAA,GAAQ,KAAK,SAAA,EAAU;AAC7B,IAAA,MAAM,WAAA,GAAc,SAAS,KAAK,CAAA;AAElC,IAAA,IAAI,WAAA,CAAY,WAAW,CAAA,EAAG;AAC5B,MAAA,OAAO,KAAK,IAAA,CAAK,QAAA,EAAU,MAAA,EAAW,MAAA,EAAW,KAAK,CAAA,CAAE,OAAA;AAAA,IAC1D;AAEA,IAAA,MAAM,MAAA,uBAAa,GAAA,EAAoB;AACvC,IAAA,KAAA,MAAW,SAAS,WAAA,EAAa;AAC/B,MAAA,MAAM,GAAA,GAAM,KAAA,CAAM,UAAA,CAAW,KAAK,KAAK,EAAC;AACxC,MAAA,KAAA,MAAW,MAAM,GAAA,EAAK;AACpB,QAAA,MAAA,CAAO,IAAI,EAAA,EAAA,CAAK,MAAA,CAAO,IAAI,EAAE,CAAA,IAAK,KAAK,CAAC,CAAA;AAAA,MAC1C;AAAA,IACF;AAEA,IAAA,IAAI,OAAA,GAAU,KAAK,cAAA,EAAe;AAClC,IAAA,IAAI,QAAA,EAAU;AACZ,MAAA,OAAA,GAAU,QAAQ,MAAA,CAAO,CAAC,CAAA,KAAM,CAAA,CAAE,aAAa,QAAQ,CAAA;AAAA,IACzD;AAEA,IAAA,MAAM,QAAA,GAAW,IAAI,GAAA,CAAI,OAAA,CAAQ,GAAA,CAAI,CAAC,CAAA,KAAM,CAAC,CAAA,CAAE,EAAA,EAAI,CAAC,CAAC,CAAC,CAAA;AAEtD,IAAA,OAAO,MAAM,IAAA,CAAK,MAAA,CAAO,SAAS,CAAA,CAC/B,OAAO,CAAC,CAAC,EAAE,CAAA,KAAM,QAAA,CAAS,IAAI,EAAE,CAAC,EACjC,IAAA,CAAK,CAAC,GAAG,CAAA,KAAM;AACd,MAAA,IAAI,CAAA,CAAE,CAAC,CAAA,KAAM,CAAA,CAAE,CAAC,CAAA,EAAG,OAAO,CAAA,CAAE,CAAC,CAAA,GAAI,CAAA,CAAE,CAAC,CAAA;AACpC,MAAA,MAAM,EAAA,GAAK,QAAA,CAAS,GAAA,CAAI,CAAA,CAAE,CAAC,CAAC,CAAA;AAC5B,MAAA,MAAM,EAAA,GAAK,QAAA,CAAS,GAAA,CAAI,CAAA,CAAE,CAAC,CAAC,CAAA;AAC5B,MAAA,OAAO,EAAA,CAAG,UAAA,CAAW,aAAA,CAAc,EAAA,CAAG,UAAU,CAAA;AAAA,IAClD,CAAC,CAAA,CACA,KAAA,CAAM,CAAA,EAAG,KAAK,EACd,GAAA,CAAI,CAAC,CAAC,EAAE,MAAM,QAAA,CAAS,GAAA,CAAI,EAAE,CAAE,CAAA,CAC/B,OAAO,OAAO,CAAA;AAAA,EACnB;AAAA,EAEA,OAAO,QAAA,EAA2B;AAChC,IAAA,MAAM,OAAA,GAAU,KAAK,cAAA,EAAe;AACpC,IAAA,MAAM,WAAW,OAAA,CAAQ,MAAA,CAAO,CAAC,CAAA,KAAM,CAAA,CAAE,OAAO,QAAQ,CAAA;AAExD,IAAA,IAAI,QAAA,CAAS,MAAA,KAAW,OAAA,CAAQ,MAAA,EAAQ;AACtC,MAAA,OAAO,KAAA;AAAA,IACT;AAEA,IAAA,MAAM,WAAA,GAAc,cAAA,CAAe,IAAA,CAAK,WAAW,CAAA;AACnD,IAAG,kBAAc,WAAA,EAAa,QAAA,CAAS,IAAI,CAAC,CAAA,KAAM,KAAK,SAAA,CAAU,CAAC,CAAC,CAAA,CAAE,KAAK,IAAI,CAAA,IAAK,SAAS,MAAA,GAAS,CAAA,GAAI,OAAO,EAAA,CAAG,CAAA;AAEnH,IAAA,IAAA,CAAK,aAAa,QAAQ,CAAA;AAC1B,IAAA,IAAA,CAAK,MAAA,CAAO,eAAe,QAAA,CAAS,MAAA;AACpC,IAAA,IAAA,CAAK,UAAA,EAAW;AAEhB,IAAA,OAAO,IAAA;AAAA,EACT;AAAA,EAEA,oBAAA,GAME;AACA,IAAA,MAAM,OAAA,GAAU,KAAK,cAAA,EAAe;AACpC,IAAA,MAAM,YAAoC,EAAC;AAC3C,IAAA,KAAA,MAAW,SAAS,OAAA,EAAS;AAC3B,MAAA,SAAA,CAAU,MAAM,QAAQ,CAAA,GAAA,CAAK,UAAU,KAAA,CAAM,QAAQ,KAAK,CAAA,IAAK,CAAA;AAAA,IACjE;AAEA,IAAA,MAAM,WAAqB,EAAC;AAC5B,IAAA,MAAM,cAAA,GAAiB,QAAQ,MAAA,CAAO,CAAC,MAAM,CAAA,CAAE,UAAA,KAAe,MAAM,CAAA,CAAE,MAAA;AAEtE,IAAA,IAAI,OAAA,CAAQ,MAAA,IAAU,EAAA,EAAI,QAAA,CAAS,KAAK,gCAAgC,CAAA;AAAA,SACnE,QAAA,CAAS,IAAA,CAAK,CAAA,mBAAA,EAAsB,OAAA,CAAQ,MAAM,CAAA,wBAAA,CAA0B,CAAA;AAEjF,IAAA,IAAI,MAAA,CAAO,KAAK,SAAS,CAAA,CAAE,UAAU,CAAA,EAAG,QAAA,CAAS,KAAK,yBAAyB,CAAA;AAAA,SAC1E,QAAA,CAAS,KAAK,8DAA8D,CAAA;AAEjF,IAAA,IAAI,cAAA,IAAkB,CAAA,EAAG,QAAA,CAAS,IAAA,CAAK,gDAAgD,CAAA;AAAA,SAClF,QAAA,CAAS,KAAK,qEAAqE,CAAA;AAExF,IAAA,MAAM,UAAU,OAAA,CAAQ,IAAA;AAAA,MACtB,CAAC,MAAM,CAAA,CAAE,QAAA,KAAa,kBAAkB,CAAA,CAAE,QAAA,KAAa,YAAA,IAAgB,CAAA,CAAE,QAAA,KAAa;AAAA,KACxF;AACA,IAAA,IAAI,OAAA,EAAS,QAAA,CAAS,IAAA,CAAK,oEAAoE,CAAA;AAAA,SAC1F,QAAA,CAAS,KAAK,uEAAuE,CAAA;AAE1F,IAAA,MAAM,KAAA,GAAQ,QAAQ,MAAA,IAAU,CAAA,IAAK,OAAO,IAAA,CAAK,SAAS,EAAE,MAAA,IAAU,CAAA;AACtE,IAAA,MAAM,cAAA,GAAiB,QACnB,2HAAA,GACA,gFAAA;AAEJ,IAAA,OAAO;AAAA,MACL,cAAc,OAAA,CAAQ,MAAA;AAAA,MACtB,kBAAA,EAAoB,SAAA;AAAA,MACpB,iBAAA,EAAmB,QAAA;AAAA,MACnB,cAAA;AAAA,MACA;AAAA,KACF;AAAA,EACF;AAAA,EAEA,SAAA,GAA2B;AACzB,IAAA,OAAO,EAAE,GAAG,IAAA,CAAK,MAAA,EAAO;AAAA,EAC1B;AAAA,EAEA,cAAA,GAAuB;AACrB,IAAA,IAAA,CAAK,MAAA,CAAO,YAAA,GAAA,iBAAe,IAAI,IAAA,IAAO,WAAA,EAAY;AAClD,IAAA,IAAA,CAAK,UAAA,EAAW;AAAA,EAClB;AAAA,EAEA,cAAA,GAAgC;AAC9B,IAAA,MAAM,WAAA,GAAc,cAAA,CAAe,IAAA,CAAK,WAAW,CAAA;AACnD,IAAA,IAAI,CAAI,GAAA,CAAA,UAAA,CAAW,WAAW,CAAA,SAAU,EAAC;AAEzC,IAAA,MAAM,OAAA,GAAa,GAAA,CAAA,YAAA,CAAa,WAAA,EAAa,OAAO,EAAE,IAAA,EAAK;AAC3D,IAAA,IAAI,CAAC,OAAA,EAAS,OAAO,EAAC;AAEtB,IAAA,OAAO,OAAA,CACJ,KAAA,CAAM,IAAI,CAAA,CACV,MAAA,CAAO,OAAO,CAAA,CACd,GAAA,CAAI,CAAC,IAAA,KAAS,IAAA,CAAK,KAAA,CAAM,IAAI,CAAgB,CAAA;AAAA,EAClD;AAAA,EAEQ,SAAA,GAAyB;AAC/B,IAAA,MAAM,SAAA,GAAY,YAAA,CAAa,IAAA,CAAK,WAAW,CAAA;AAC/C,IAAA,IAAI,CAAI,GAAA,CAAA,UAAA,CAAW,SAAS,CAAA,EAAG;AAC7B,MAAA,OAAO,EAAE,OAAA,EAAS,CAAA,EAAG,SAAA,EAAW,EAAC,EAAG,cAAA,EAAgB,EAAC,EAAG,UAAA,EAAY,EAAC,EAAE;AAAA,IACzE;AACA,IAAA,OAAO,IAAA,CAAK,KAAA,CAAS,GAAA,CAAA,YAAA,CAAa,SAAA,EAAW,OAAO,CAAC,CAAA;AAAA,EACvD;AAAA,EAEQ,WAAW,KAAA,EAA0B;AAC3C,IAAA,MAAM,KAAA,GAAQ,KAAK,SAAA,EAAU;AAE7B,IAAA,KAAA,MAAW,GAAA,IAAO,MAAM,IAAA,EAAM;AAC5B,MAAA,IAAI,CAAC,MAAM,SAAA,CAAU,GAAG,GAAG,KAAA,CAAM,SAAA,CAAU,GAAG,CAAA,GAAI,EAAC;AACnD,MAAA,KAAA,CAAM,SAAA,CAAU,GAAG,CAAA,CAAE,IAAA,CAAK,MAAM,EAAE,CAAA;AAAA,IACpC;AAEA,IAAA,IAAI,CAAC,KAAA,CAAM,cAAA,CAAe,KAAA,CAAM,QAAQ,CAAA,EAAG,KAAA,CAAM,cAAA,CAAe,KAAA,CAAM,QAAQ,CAAA,GAAI,EAAC;AACnF,IAAA,KAAA,CAAM,eAAe,KAAA,CAAM,QAAQ,CAAA,CAAE,IAAA,CAAK,MAAM,EAAE,CAAA;AAElD,IAAA,MAAM,KAAA,GAAQ,QAAA,CAAS,KAAA,CAAM,OAAO,CAAA;AACpC,IAAA,KAAA,MAAW,QAAQ,KAAA,EAAO;AACxB,MAAA,IAAI,CAAC,MAAM,UAAA,CAAW,IAAI,GAAG,KAAA,CAAM,UAAA,CAAW,IAAI,CAAA,GAAI,EAAC;AACvD,MAAA,IAAI,CAAC,MAAM,UAAA,CAAW,IAAI,EAAE,QAAA,CAAS,KAAA,CAAM,EAAE,CAAA,EAAG;AAC9C,QAAA,KAAA,CAAM,UAAA,CAAW,IAAI,CAAA,CAAE,IAAA,CAAK,MAAM,EAAE,CAAA;AAAA,MACtC;AAAA,IACF;AAEA,IAAG,GAAA,CAAA,aAAA,CAAc,aAAa,IAAA,CAAK,WAAW,GAAG,IAAA,CAAK,SAAA,CAAU,KAAK,CAAC,CAAA;AAAA,EACxE;AAAA,EAEQ,aAAa,OAAA,EAA8B;AACjD,IAAA,MAAM,KAAA,GAAqB,EAAE,OAAA,EAAS,CAAA,EAAG,SAAA,EAAW,EAAC,EAAG,cAAA,EAAgB,EAAC,EAAG,UAAA,EAAY,EAAC,EAAE;AAE3F,IAAA,KAAA,MAAW,SAAS,OAAA,EAAS;AAC3B,MAAA,KAAA,MAAW,GAAA,IAAO,MAAM,IAAA,EAAM;AAC5B,QAAA,IAAI,CAAC,MAAM,SAAA,CAAU,GAAG,GAAG,KAAA,CAAM,SAAA,CAAU,GAAG,CAAA,GAAI,EAAC;AACnD,QAAA,KAAA,CAAM,SAAA,CAAU,GAAG,CAAA,CAAE,IAAA,CAAK,MAAM,EAAE,CAAA;AAAA,MACpC;AAEA,MAAA,IAAI,CAAC,KAAA,CAAM,cAAA,CAAe,KAAA,CAAM,QAAQ,CAAA,EAAG,KAAA,CAAM,cAAA,CAAe,KAAA,CAAM,QAAQ,CAAA,GAAI,EAAC;AACnF,MAAA,KAAA,CAAM,eAAe,KAAA,CAAM,QAAQ,CAAA,CAAE,IAAA,CAAK,MAAM,EAAE,CAAA;AAElD,MAAA,MAAM,KAAA,GAAQ,QAAA,CAAS,KAAA,CAAM,OAAO,CAAA;AACpC,MAAA,KAAA,MAAW,QAAQ,KAAA,EAAO;AACxB,QAAA,IAAI,CAAC,MAAM,UAAA,CAAW,IAAI,GAAG,KAAA,CAAM,UAAA,CAAW,IAAI,CAAA,GAAI,EAAC;AACvD,QAAA,IAAI,CAAC,MAAM,UAAA,CAAW,IAAI,EAAE,QAAA,CAAS,KAAA,CAAM,EAAE,CAAA,EAAG;AAC9C,UAAA,KAAA,CAAM,UAAA,CAAW,IAAI,CAAA,CAAE,IAAA,CAAK,MAAM,EAAE,CAAA;AAAA,QACtC;AAAA,MACF;AAAA,IACF;AAEA,IAAG,GAAA,CAAA,aAAA,CAAc,aAAa,IAAA,CAAK,WAAW,GAAG,IAAA,CAAK,SAAA,CAAU,KAAK,CAAC,CAAA;AAAA,EACxE;AAAA,EAEQ,UAAA,GAAmB;AACzB,IAAA,MAAM,UAAA,GAAa,aAAA,CAAc,IAAA,CAAK,WAAW,CAAA;AACjD,IAAG,GAAA,CAAA,aAAA,CAAc,YAAY,IAAA,CAAK,SAAA,CAAU,KAAK,MAAA,EAAQ,IAAA,EAAM,CAAC,CAAC,CAAA;AAAA,EACnE;AACF,CAAA;;;ACvSO,SAAS,kBAAA,CAAmB,QAAmB,MAAA,EAA+B;AACnF,EAAA,MAAA,CAAO,IAAA;AAAA,IACL,wBAAA;AAAA,IACA,8IAAA;AAAA,IACA;AAAA,MACE,IAAA,EAAMD,CAAAA,CAAE,MAAA,EAAO,CAAE,GAAA,CAAI,CAAC,CAAA,CAAE,GAAA,CAAI,GAAG,CAAA,CAAE,QAAA,CAAS,YAAY,CAAA;AAAA,MACtD,WAAA,EAAaA,CAAAA,CAAE,MAAA,EAAO,CAAE,GAAA,CAAI,GAAI,CAAA,CAAE,QAAA,EAAS,CAAE,QAAA,CAAS,mBAAmB,CAAA;AAAA,MACzE,MAAA,EAAQA,CAAAA,CAAE,MAAA,EAAO,CAAE,GAAA,CAAI,GAAG,CAAA,CAAE,QAAA,EAAS,CAAE,QAAA,CAAS,4CAA4C,CAAA;AAAA,MAC5F,IAAA,EAAMA,CAAAA,CAAE,KAAA,CAAMA,CAAAA,CAAE,MAAA,EAAQ,CAAA,CAAE,GAAA,CAAI,EAAE,CAAA,CAAE,QAAA,EAAS,CAAE,SAAS,oBAAoB,CAAA;AAAA,MAC1E,mBAAA,EAAqBA,CAAAA,CAClB,MAAA,EAAO,CACP,GAAA,CAAI,EAAE,CAAA,CACN,GAAA,CAAI,GAAM,CAAA,CACV,QAAA,CAAS,+FAA+F,CAAA;AAAA,MAC3G,gBAAgBA,CAAAA,CAAE,OAAA,GAAU,QAAA,EAAS,CAAE,SAAS,kDAAkD,CAAA;AAAA,MAClG,UAAA,EAAYA,CAAAA,CAAE,KAAA,CAAMA,CAAAA,CAAE,MAAA,EAAQ,CAAA,CAAE,QAAA,EAAS,CAAE,QAAA,CAAS,+CAA+C,CAAA;AAAA,MACnG,UAAUA,CAAAA,CAAE,MAAA,GAAS,QAAA,EAAS,CAAE,SAAS,iCAAiC;AAAA,KAC5E;AAAA,IACA,OAAO,MAAA,KAAW;AAChB,MAAA,IAAI;AAEF,QAAA,IAAI,WAA2C,EAAC;AAChD,QAAA,IAAI;AACF,UAAA,MAAME,MAAAA,GAAQ,IAAI,WAAA,EAAY;AAC9B,UAAA,IAAI,OAAA,GAAUA,OAAM,cAAA,EAAe;AACnC,UAAA,IAAI,MAAA,CAAO,UAAA,IAAc,MAAA,CAAO,UAAA,CAAW,SAAS,CAAA,EAAG;AACrD,YAAA,MAAM,GAAA,GAAM,IAAI,GAAA,CAAI,MAAA,CAAO,UAAU,CAAA;AACrC,YAAA,OAAA,GAAU,OAAA,CAAQ,OAAO,CAAC,CAAA,KAAM,IAAI,GAAA,CAAI,CAAA,CAAE,EAAE,CAAC,CAAA;AAAA,UAC/C;AACA,UAAA,QAAA,GAAW,OAAA,CAAQ,GAAA,CAAI,CAAC,CAAA,MAAO;AAAA,YAC7B,SAAS,CAAA,CAAE,OAAA;AAAA,YACX,UAAU,CAAA,CAAE,QAAA;AAAA,YACZ,MAAM,CAAA,CAAE,IAAA;AAAA,YACR,YAAY,CAAA,CAAE,UAAA;AAAA,YACd,gBAAgB,CAAA,CAAE;AAAA,WACpB,CAAE,CAAA;AAAA,QACJ,CAAA,CAAA,MAAQ;AAAA,QAER;AAEA,QAAA,MAAM,IAAA,GAAgC;AAAA,UACpC,MAAM,MAAA,CAAO,IAAA;AAAA,UACb,qBAAqB,MAAA,CAAO,mBAAA;AAAA,UAC5B,cAAA,EAAgB,OAAO,cAAA,IAAkB,IAAA;AAAA,UACzC;AAAA,SACF;AACA,QAAA,IAAI,MAAA,CAAO,WAAA,EAAa,IAAA,CAAK,WAAA,GAAc,MAAA,CAAO,WAAA;AAClD,QAAA,IAAI,MAAA,CAAO,MAAA,EAAQ,IAAA,CAAK,MAAA,GAAS,MAAA,CAAO,MAAA;AACxC,QAAA,IAAI,MAAA,CAAO,IAAA,EAAM,IAAA,CAAK,IAAA,GAAO,MAAA,CAAO,IAAA;AACpC,QAAA,IAAI,MAAA,CAAO,QAAA,EAAU,IAAA,CAAK,QAAA,GAAW,MAAA,CAAO,QAAA;AAE5C,QAAA,IAAI;AACF,UAAA,MAAMA,MAAAA,GAAQ,IAAI,WAAA,EAAY;AAC9B,UAAA,IAAA,CAAK,sBAAsBA,MAAAA,CAAM,WAAA;AAAA,QACnC,CAAA,CAAA,MAAQ;AAAA,QAER;AAEA,QAAA,MAAM,IAAA,GAAO,MAAM,MAAA,CAAO,IAAA,CAAK,GAAG,MAAA,CAAO,UAAU,sBAAsB,IAAI,CAAA;AAG7E,QAAA,IAAI;AACF,UAAA,MAAMA,MAAAA,GAAQ,IAAI,WAAA,EAAY;AAC9B,UAAAA,OAAM,cAAA,EAAe;AAAA,QACvB,CAAA,CAAA,MAAQ;AAAA,QAER;AAEA,QAAA,OAAO;AAAA,UACL,OAAA,EAAS,CAAC,EAAE,IAAA,EAAM,MAAA,EAAQ,IAAA,EAAM,IAAA,CAAK,SAAA,CAAU,IAAA,EAAM,IAAA,EAAM,CAAC,CAAA,EAAG;AAAA,SACjE;AAAA,MACF,SAAS,GAAA,EAAK;AACZ,QAAA,OAAO,YAAY,GAAG,CAAA;AAAA,MACxB;AAAA,IACF;AAAA,GACF;AAEA,EAAA,MAAA,CAAO,IAAA;AAAA,IACL,uBAAA;AAAA,IACA,oJAAA;AAAA,IACA;AAAA,MACE,QAAA,EAAUF,CAAAA,CAAE,MAAA,EAAO,CAAE,SAAS,mBAAmB,CAAA;AAAA,MACjD,QAAA,EAAUA,CAAAA,CAAE,MAAA,EAAO,CAAE,SAAS,gCAAgC,CAAA;AAAA,MAC9D,kBAAkBA,CAAAA,CAAE,OAAA,GAAU,QAAA,EAAS,CAAE,SAAS,uDAAuD,CAAA;AAAA,MACzG,gBAAgBA,CAAAA,CAAE,OAAA,GAAU,QAAA,EAAS,CAAE,SAAS,gDAAgD;AAAA,KAClG;AAAA,IACA,OAAO,MAAA,KAAW;AAChB,MAAA,IAAI;AACF,QAAA,MAAM,IAAA,GAAO,MAAM,MAAA,CAAO,IAAA;AAAA,UACxB,CAAA,EAAG,MAAA,CAAO,UAAU,CAAA,YAAA,EAAe,OAAO,QAAQ,CAAA,MAAA,CAAA;AAAA,UAClD;AAAA,YACE,UAAU,MAAA,CAAO,QAAA;AAAA,YACjB,gBAAA,EAAkB,OAAO,gBAAA,IAAoB,IAAA;AAAA,YAC7C,cAAA,EAAgB,OAAO,cAAA,IAAkB;AAAA;AAC3C,SACF;AACA,QAAA,OAAO;AAAA,UACL,OAAA,EAAS,CAAC,EAAE,IAAA,EAAM,MAAA,EAAQ,IAAA,EAAM,IAAA,CAAK,SAAA,CAAU,IAAA,EAAM,IAAA,EAAM,CAAC,CAAA,EAAG;AAAA,SACjE;AAAA,MACF,SAAS,GAAA,EAAK;AACZ,QAAA,OAAO,YAAY,GAAG,CAAA;AAAA,MACxB;AAAA,IACF;AAAA,GACF;AAEA,EAAA,MAAA,CAAO,IAAA;AAAA,IACL,uBAAA;AAAA,IACA,8CAAA;AAAA,IACA,EAAC;AAAA,IACD,YAAY;AACV,MAAA,IAAI;AACF,QAAA,MAAM,OAAO,MAAM,MAAA,CAAO,IAAI,CAAA,EAAG,MAAA,CAAO,UAAU,CAAA,YAAA,CAAc,CAAA;AAChE,QAAA,OAAO;AAAA,UACL,OAAA,EAAS,CAAC,EAAE,IAAA,EAAM,MAAA,EAAQ,IAAA,EAAM,IAAA,CAAK,SAAA,CAAU,IAAA,EAAM,IAAA,EAAM,CAAC,CAAA,EAAG;AAAA,SACjE;AAAA,MACF,SAAS,GAAA,EAAK;AACZ,QAAA,OAAO,YAAY,GAAG,CAAA;AAAA,MACxB;AAAA,IACF;AAAA,GACF;AAEA,EAAA,MAAA,CAAO,IAAA;AAAA,IACL,+BAAA;AAAA,IACA,yKAAA;AAAA,IACA;AAAA,MACE,mBAAA,EAAqBA,CAAAA,CAClB,MAAA,EAAO,CACP,GAAA,CAAI,CAAC,CAAA,CACL,GAAA,CAAI,GAAM,CAAA,CACV,QAAA,CAAS,2BAA2B;AAAA,KACzC;AAAA,IACA,OAAO,MAAA,KAAW;AAChB,MAAA,IAAI;AACF,QAAA,MAAM,IAAA,GAAO,MAAM,MAAA,CAAO,IAAA;AAAA,UACxB,CAAA,EAAG,OAAO,UAAU,CAAA,yBAAA,CAAA;AAAA,UACpB,EAAE,mBAAA,EAAqB,MAAA,CAAO,mBAAA;AAAoB,SACpD;AACA,QAAA,OAAO;AAAA,UACL,OAAA,EAAS,CAAC,EAAE,IAAA,EAAM,MAAA,EAAQ,IAAA,EAAM,IAAA,CAAK,SAAA,CAAU,IAAA,EAAM,IAAA,EAAM,CAAC,CAAA,EAAG;AAAA,SACjE;AAAA,MACF,SAAS,GAAA,EAAK;AACZ,QAAA,OAAO,YAAY,GAAG,CAAA;AAAA,MACxB;AAAA,IACF;AAAA,GACF;AAEA,EAAA,MAAA,CAAO,IAAA;AAAA,IACL,qBAAA;AAAA,IACA,mPAAA;AAAA,IACA;AAAA,MACE,QAAA,EAAUA,CAAAA,CAAE,MAAA,EAAO,CAAE,SAAS,iBAAiB;AAAA,KACjD;AAAA,IACA,OAAO,MAAA,KAAW;AAChB,MAAA,IAAI;AACF,QAAA,MAAM,IAAA,GAAO,MAAM,MAAA,CAAO,GAAA,CAKvB,CAAA,EAAG,OAAO,UAAU,CAAA,YAAA,EAAe,MAAA,CAAO,QAAQ,CAAA,IAAA,CAAM,CAAA;AAE3D,QAAA,IAAI,YAAA,GAAe,CAAA,SAAA,EAAY,IAAA,CAAK,IAAI;;AAAA,EAAO,KAAK,OAAO,CAAA,CAAA;AAC3D,QAAA,IAAI,CAAC,KAAK,WAAA,EAAa;AACrB,UAAA,YAAA,IACE,mHAAA;AAAA,QACJ,CAAA,MAAO;AACL,UAAA,YAAA,IACE;;AAAA;AAAA,sFAAA,EAAkG,OAAO,QAAQ,CAAA,GAAA,CAAA;AAAA,QACrH;AAEA,QAAA,OAAO;AAAA,UACL,SAAS,CAAC,EAAE,MAAM,MAAA,EAAiB,IAAA,EAAM,cAAc;AAAA,SACzD;AAAA,MACF,SAAS,GAAA,EAAK;AACZ,QAAA,OAAO,YAAY,GAAG,CAAA;AAAA,MACxB;AAAA,IACF;AAAA,GACF;AAEA,EAAA,MAAA,CAAO,IAAA;AAAA,IACL,yBAAA;AAAA,IACA,yNAAA;AAAA,IACA;AAAA,MACE,QAAA,EAAUA,CAAAA,CAAE,MAAA,EAAO,CAAE,SAAS,qBAAqB,CAAA;AAAA,MACnD,YAAA,EAAcA,CAAAA,CACX,MAAA,EAAO,CACP,GAAA,CAAI,EAAE,CAAA,CACN,QAAA,EAAS,CACT,QAAA,CAAS,2DAA2D;AAAA,KACzE;AAAA,IACA,OAAO,MAAA,KAAW;AAChB,MAAA,IAAI;AACF,QAAA,MAAM,IAAA,GAAO,MAAM,MAAA,CAAO,GAAA,CAIvB,CAAA,EAAG,OAAO,UAAU,CAAA,YAAA,EAAe,MAAA,CAAO,QAAQ,CAAA,IAAA,CAAM,CAAA;AAE3D,QAAA,IAAI,CAAC,KAAK,WAAA,EAAa;AACrB,UAAA,OAAO;AAAA,YACL,OAAA,EAAS;AAAA,cACP;AAAA,gBACE,IAAA,EAAM,MAAA;AAAA,gBACN,IAAA,EAAM;AAAA;AACR;AACF,WACF;AAAA,QACF;AAEA,QAAA,MAAM,OAAA,GACJ,MAAA,CAAO,YAAA,IACP,IAAA,CAAK,IAAA,CACF,WAAA,EAAY,CACZ,OAAA,CAAQ,aAAA,EAAe,GAAG,CAAA,CAC1B,OAAA,CAAQ,UAAU,EAAE,CAAA;AAEzB,QAAA,IAAI,WAAA;AACJ,QAAA,IAAI;AACF,UAAA,MAAME,MAAAA,GAAQ,IAAI,WAAA,EAAY;AAC9B,UAAA,WAAA,GAAcA,MAAAA,CAAM,IAAA;AAAA,QACtB,CAAA,CAAA,MAAQ;AACN,UAAA,WAAA,GAAc,QAAQ,GAAA,EAAI;AAAA,QAC5B;AAEA,QAAA,MAAM,WAAA,GAAmBC,IAAA,CAAA,IAAA,CAAK,WAAA,EAAa,SAAA,EAAW,UAAU,CAAA;AAChE,QAAA,IAAI,CAAIC,GAAA,CAAA,UAAA,CAAW,WAAW,CAAA,EAAG;AAC/B,UAAGA,GAAA,CAAA,SAAA,CAAU,WAAA,EAAa,EAAE,SAAA,EAAW,MAAM,CAAA;AAAA,QAC/C;AAEA,QAAA,MAAM,QAAA,GAAgBD,IAAA,CAAA,IAAA,CAAK,WAAA,EAAa,CAAA,EAAG,OAAO,CAAA,GAAA,CAAK,CAAA;AACvD,QAAGC,GAAA,CAAA,aAAA,CAAc,QAAA,EAAU,IAAA,CAAK,OAAO,CAAA;AAEvC,QAAA,OAAO;AAAA,UACL,OAAA,EAAS;AAAA,YACP;AAAA,cACE,IAAA,EAAM,MAAA;AAAA,cACN,IAAA,EAAM,4CAA4C,OAAO;;AAAA,MAAA,EAAa,QAAQ;;AAAA,iBAAA,EAAwB,OAAO,CAAA,4CAAA;AAAA;AAC/G;AACF,SACF;AAAA,MACF,SAAS,GAAA,EAAK;AACZ,QAAA,OAAO,YAAY,GAAG,CAAA;AAAA,MACxB;AAAA,IACF;AAAA,GACF;AACF;ACxPA,IAAM,YAAA,GAAe;AAAA,EACnB,wBAAA;AAAA,EACA,qBAAA;AAAA,EACA,sBAAA;AAAA,EACA;AACF,CAAA;AAEO,SAAS,oBAAA,CACd,QACA,MAAA,EACA;AACA,EAAA,MAAA,CAAO,IAAA;AAAA,IACL,4BAAA;AAAA,IACA,CAAA,qFAAA,EAAwF,YAAA,CAAa,IAAA,CAAK,IAAI,CAAC,CAAA,iCAAA,CAAA;AAAA,IAC/G;AAAA,MACE,KAAKJ,CAAAA,CACF,MAAA,EAAO,CACP,GAAA,GACA,UAAA,CAAW,UAAA,EAAY,4BAA4B,CAAA,CACnD,IAAI,EAAE,CAAA,CACN,IAAI,GAAI,CAAA,CACR,SAAS,4BAA4B,CAAA;AAAA,MACxC,MAAA,EAAQA,CAAAA,CACL,KAAA,CAAMA,CAAAA,CAAE,IAAA,CAAK,YAAY,CAAC,CAAA,CAC1B,GAAA,CAAI,CAAC,CAAA,CACL,QAAA,CAAS,wBAAwB,CAAA;AAAA,MACpC,WAAA,EAAaA,CAAAA,CACV,MAAA,EAAO,CACP,GAAA,CAAI,GAAG,CAAA,CACP,QAAA,EAAS,CACT,QAAA,CAAS,qBAAqB;AAAA,KACnC;AAAA,IACA,OAAO,MAAA,KAAW;AAChB,MAAA,IAAI;AACF,QAAA,MAAM,IAAA,GAAO,MAAM,MAAA,CAAO,IAAA,CAAK,GAAG,MAAA,CAAO,UAAU,kBAAkB,MAAM,CAAA;AAC3E,QAAA,OAAO;AAAA,UACL,OAAA,EAAS,CAAC,EAAE,IAAA,EAAM,MAAA,EAAQ,IAAA,EAAM,IAAA,CAAK,SAAA,CAAU,IAAA,EAAM,IAAA,EAAM,CAAC,CAAA,EAAG;AAAA,SACjE;AAAA,MACF,SAAS,GAAA,EAAK;AACZ,QAAA,OAAO,YAAY,GAAG,CAAA;AAAA,MACxB;AAAA,IACF;AAAA,GACF;AAEA,EAAA,MAAA,CAAO,IAAA;AAAA,IACL,yBAAA;AAAA,IACA,qCAAA;AAAA,IACA,EAAC;AAAA,IACD,YAAY;AACV,MAAA,IAAI;AACF,QAAA,MAAM,OAAO,MAAM,MAAA,CAAO,IAAI,CAAA,EAAG,MAAA,CAAO,UAAU,CAAA,cAAA,CAAgB,CAAA;AAClE,QAAA,OAAO;AAAA,UACL,OAAA,EAAS,CAAC,EAAE,IAAA,EAAM,MAAA,EAAQ,IAAA,EAAM,IAAA,CAAK,SAAA,CAAU,IAAA,EAAM,IAAA,EAAM,CAAC,CAAA,EAAG;AAAA,SACjE;AAAA,MACF,SAAS,GAAA,EAAK;AACZ,QAAA,OAAO,YAAY,GAAG,CAAA;AAAA,MACxB;AAAA,IACF;AAAA,GACF;AAEA,EAAA,MAAA,CAAO,IAAA;AAAA,IACL,wBAAA;AAAA,IACA,oFAAA;AAAA,IACA;AAAA,MACE,YAAYA,CAAAA,CAAE,MAAA,GAAS,GAAA,EAAI,CAAE,SAAS,oBAAoB;AAAA,KAC5D;AAAA,IACA,OAAO,EAAE,UAAA,EAAW,KAAM;AACxB,MAAA,IAAI;AACF,QAAA,MAAM,IAAA,GAAO,MAAM,MAAA,CAAO,IAAA;AAAA,UACxB,CAAA,EAAG,MAAA,CAAO,UAAU,CAAA,cAAA,EAAiB,UAAU,CAAA,KAAA;AAAA,SACjD;AACA,QAAA,OAAO;AAAA,UACL,OAAA,EAAS,CAAC,EAAE,IAAA,EAAM,MAAA,EAAQ,IAAA,EAAM,IAAA,CAAK,SAAA,CAAU,IAAA,EAAM,IAAA,EAAM,CAAC,CAAA,EAAG;AAAA,SACjE;AAAA,MACF,SAAS,GAAA,EAAK;AACZ,QAAA,OAAO,YAAY,GAAG,CAAA;AAAA,MACxB;AAAA,IACF;AAAA,GACF;AACF;;;ACxEO,IAAM,iBAAA,GAAsC;AAAA,EACjD,UAAA;AAAA,EACA,YAAA;AAAA,EACA,UAAA;AAAA,EACA,cAAA;AAAA,EACA,QAAA;AAAA,EACA,YAAA;AAAA,EACA,YAAA;AAAA,EACA,YAAA;AAAA,EACA,MAAA;AAAA,EACA;AACF,CAAA;;;AClBA,IAAI,KAAA,GAA4B,IAAA;AAEhC,SAAS,QAAA,GAAwB;AAC/B,EAAA,IAAI,CAAC,KAAA,EAAO;AACV,IAAA,KAAA,GAAQ,IAAI,WAAA,EAAY;AAAA,EAC1B;AACA,EAAA,OAAO,KAAA;AACT;AAEO,SAAS,oBAAoB,MAAA,EAAyB;AAC3D,EAAA,MAAA,CAAO,IAAA;AAAA,IACL,wBAAA;AAAA,IACA,6GAAA;AAAA,IACA;AAAA,MACE,OAAA,EAASA,CAAAA,CAAE,MAAA,EAAO,CAAE,GAAA,CAAI,CAAC,CAAA,CAAE,GAAA,CAAI,GAAK,CAAA,CAAE,QAAA,CAAS,mCAAmC,CAAA;AAAA,MAClF,QAAA,EAAUA,CAAAA,CAAE,IAAA,CAAK,iBAA0C,CAAA,CAAE,QAAA;AAAA,QAC3D;AAAA,OACF;AAAA,MACA,IAAA,EAAMA,CAAAA,CAAE,KAAA,CAAMA,CAAAA,CAAE,MAAA,EAAQ,CAAA,CAAE,GAAA,CAAI,EAAE,CAAA,CAAE,QAAA,EAAS,CAAE,SAAS,6BAA6B,CAAA;AAAA,MACnF,UAAA,EAAYA,CAAAA,CAAE,IAAA,CAAK,CAAC,KAAA,EAAO,QAAA,EAAU,MAAM,CAAC,CAAA,CAAE,QAAA,EAAS,CAAE,QAAA,CAAS,oCAAoC,CAAA;AAAA,MACtG,gBAAgBA,CAAAA,CAAE,MAAA,GAAS,QAAA,EAAS,CAAE,SAAS,8CAA8C;AAAA,KAC/F;AAAA,IACA,OAAO,MAAA,KAAW;AAChB,MAAA,IAAI;AACF,QAAA,MAAM,IAAI,QAAA,EAAS;AACnB,QAAA,MAAM,QAAQ,CAAA,CAAE,KAAA;AAAA,UACd,MAAA,CAAO,OAAA;AAAA,UACP,MAAA,CAAO,QAAA;AAAA,UACP,MAAA,CAAO,QAAQ,EAAC;AAAA,UACf,OAAO,UAAA,IAAsB,QAAA;AAAA,UAC9B,MAAA,CAAO;AAAA,SACT;AACA,QAAA,OAAO;AAAA,UACL,OAAA,EAAS;AAAA,YACP;AAAA,cACE,IAAA,EAAM,MAAA;AAAA,cACN,MAAM,IAAA,CAAK,SAAA;AAAA,gBACT;AAAA,kBACE,MAAA,EAAQ,OAAA;AAAA,kBACR,WAAW,KAAA,CAAM,EAAA;AAAA,kBACjB,SAAS,CAAA,CAAE,WAAA;AAAA,kBACX,gBAAgB,CAAA,CAAE,WAAA;AAAA,kBAClB,UAAU,KAAA,CAAM,QAAA;AAAA,kBAChB,MAAM,KAAA,CAAM;AAAA,iBACd;AAAA,gBACA,IAAA;AAAA,gBACA;AAAA;AACF;AACF;AACF,SACF;AAAA,MACF,SAAS,GAAA,EAAK;AACZ,QAAA,OAAO;AAAA,UACL,OAAA,EAAS,CAAC,EAAE,IAAA,EAAM,QAAQ,IAAA,EAAM,CAAA,sBAAA,EAAyB,GAAA,YAAe,KAAA,GAAQ,IAAI,OAAA,GAAU,MAAA,CAAO,GAAG,CAAC,IAAI,CAAA;AAAA,UAC7G,OAAA,EAAS;AAAA,SACX;AAAA,MACF;AAAA,IACF;AAAA,GACF;AAEA,EAAA,MAAA,CAAO,IAAA;AAAA,IACL,yBAAA;AAAA,IACA,4EAAA;AAAA,IACA;AAAA,MACE,QAAA,EAAUA,EAAE,IAAA,CAAK,iBAA0C,EAAE,QAAA,EAAS,CAAE,SAAS,oBAAoB,CAAA;AAAA,MACrG,IAAA,EAAMA,CAAAA,CAAE,KAAA,CAAMA,CAAAA,CAAE,MAAA,EAAQ,CAAA,CAAE,QAAA,EAAS,CAAE,QAAA,CAAS,2BAA2B,CAAA;AAAA,MACzE,UAAA,EAAYA,CAAAA,CAAE,IAAA,CAAK,CAAC,KAAA,EAAO,QAAA,EAAU,MAAM,CAAC,CAAA,CAAE,QAAA,EAAS,CAAE,QAAA,CAAS,sBAAsB,CAAA;AAAA,MACxF,KAAA,EAAOA,CAAAA,CAAE,MAAA,EAAO,CAAE,GAAA,CAAI,CAAC,CAAA,CAAE,GAAA,CAAI,GAAG,CAAA,CAAE,QAAA,EAAS,CAAE,SAAS,qCAAqC,CAAA;AAAA,MAC3F,MAAA,EAAQA,CAAAA,CAAE,MAAA,EAAO,CAAE,GAAA,CAAI,CAAC,CAAA,CAAE,QAAA,EAAS,CAAE,QAAA,CAAS,uBAAuB;AAAA,KACvE;AAAA,IACA,OAAO,MAAA,KAAW;AAChB,MAAA,IAAI;AACF,QAAA,MAAM,IAAI,QAAA,EAAS;AACnB,QAAA,MAAM,SAAS,CAAA,CAAE,IAAA;AAAA,UACf,MAAA,CAAO,QAAA;AAAA,UACP,MAAA,CAAO,IAAA;AAAA,UACP,MAAA,CAAO,UAAA;AAAA,UACP,OAAO,KAAA,IAAS,EAAA;AAAA,UAChB,OAAO,MAAA,IAAU;AAAA,SACnB;AACA,QAAA,OAAO;AAAA,UACL,OAAA,EAAS;AAAA,YACP;AAAA,cACE,IAAA,EAAM,MAAA;AAAA,cACN,MAAM,IAAA,CAAK,SAAA;AAAA,gBACT;AAAA,kBACE,SAAS,CAAA,CAAE,WAAA;AAAA,kBACX,OAAO,MAAA,CAAO,KAAA;AAAA,kBACd,QAAA,EAAU,OAAO,OAAA,CAAQ,MAAA;AAAA,kBACzB,SAAS,MAAA,CAAO;AAAA,iBAClB;AAAA,gBACA,IAAA;AAAA,gBACA;AAAA;AACF;AACF;AACF,SACF;AAAA,MACF,SAAS,GAAA,EAAK;AACZ,QAAA,OAAO;AAAA,UACL,OAAA,EAAS,CAAC,EAAE,IAAA,EAAM,QAAQ,IAAA,EAAM,CAAA,wBAAA,EAA2B,GAAA,YAAe,KAAA,GAAQ,IAAI,OAAA,GAAU,MAAA,CAAO,GAAG,CAAC,IAAI,CAAA;AAAA,UAC/G,OAAA,EAAS;AAAA,SACX;AAAA,MACF;AAAA,IACF;AAAA,GACF;AAEA,EAAA,MAAA,CAAO,IAAA;AAAA,IACL,2BAAA;AAAA,IACA,qEAAA;AAAA,IACA;AAAA,MACE,KAAA,EAAOA,EAAE,MAAA,EAAO,CAAE,IAAI,CAAC,CAAA,CAAE,SAAS,cAAc,CAAA;AAAA,MAChD,QAAA,EAAUA,EAAE,IAAA,CAAK,iBAA0C,EAAE,QAAA,EAAS,CAAE,SAAS,oBAAoB,CAAA;AAAA,MACrG,KAAA,EAAOA,CAAAA,CAAE,MAAA,EAAO,CAAE,GAAA,CAAI,CAAC,CAAA,CAAE,GAAA,CAAI,EAAE,CAAA,CAAE,QAAA,EAAS,CAAE,SAAS,2BAA2B;AAAA,KAClF;AAAA,IACA,OAAO,MAAA,KAAW;AAChB,MAAA,IAAI;AACF,QAAA,MAAM,IAAI,QAAA,EAAS;AACnB,QAAA,MAAM,OAAA,GAAU,EAAE,MAAA,CAAO,MAAA,CAAO,OAAO,MAAA,CAAO,QAAA,EAAiB,MAAA,CAAO,KAAA,IAAS,EAAE,CAAA;AACjF,QAAA,OAAO;AAAA,UACL,OAAA,EAAS;AAAA,YACP;AAAA,cACE,IAAA,EAAM,MAAA;AAAA,cACN,MAAM,IAAA,CAAK,SAAA;AAAA,gBACT;AAAA,kBACE,SAAS,CAAA,CAAE,WAAA;AAAA,kBACX,OAAO,MAAA,CAAO,KAAA;AAAA,kBACd,eAAe,OAAA,CAAQ,MAAA;AAAA,kBACvB;AAAA,iBACF;AAAA,gBACA,IAAA;AAAA,gBACA;AAAA;AACF;AACF;AACF,SACF;AAAA,MACF,SAAS,GAAA,EAAK;AACZ,QAAA,OAAO;AAAA,UACL,OAAA,EAAS;AAAA,YACP,EAAE,IAAA,EAAM,MAAA,EAAQ,IAAA,EAAM,CAAA,0BAAA,EAA6B,GAAA,YAAe,KAAA,GAAQ,GAAA,CAAI,OAAA,GAAU,MAAA,CAAO,GAAG,CAAC,CAAA,CAAA;AAAG,WACxG;AAAA,UACA,OAAA,EAAS;AAAA,SACX;AAAA,MACF;AAAA,IACF;AAAA,GACF;AAEA,EAAA,MAAA,CAAO,IAAA;AAAA,IACL,yBAAA;AAAA,IACA,sDAAA;AAAA,IACA;AAAA,MACE,SAAA,EAAWA,CAAAA,CAAE,MAAA,EAAO,CAAE,SAAS,kCAAkC;AAAA,KACnE;AAAA,IACA,OAAO,MAAA,KAAW;AAChB,MAAA,IAAI;AACF,QAAA,MAAM,IAAI,QAAA,EAAS;AACnB,QAAA,MAAM,OAAA,GAAU,CAAA,CAAE,MAAA,CAAO,MAAA,CAAO,SAAS,CAAA;AACzC,QAAA,IAAI,CAAC,OAAA,EAAS;AACZ,UAAA,OAAO;AAAA,YACL,OAAA,EAAS,CAAC,EAAE,IAAA,EAAM,MAAA,EAAQ,MAAM,CAAA,cAAA,EAAiB,MAAA,CAAO,SAAS,CAAA,YAAA,CAAA,EAAgB,CAAA;AAAA,YACjF,OAAA,EAAS;AAAA,WACX;AAAA,QACF;AACA,QAAA,OAAO;AAAA,UACL,OAAA,EAAS;AAAA,YACP;AAAA,cACE,IAAA,EAAM,MAAA;AAAA,cACN,MAAM,IAAA,CAAK,SAAA;AAAA,gBACT;AAAA,kBACE,MAAA,EAAQ,SAAA;AAAA,kBACR,WAAW,MAAA,CAAO,SAAA;AAAA,kBAClB,oBAAoB,CAAA,CAAE;AAAA,iBACxB;AAAA,gBACA,IAAA;AAAA,gBACA;AAAA;AACF;AACF;AACF,SACF;AAAA,MACF,SAAS,GAAA,EAAK;AACZ,QAAA,OAAO;AAAA,UACL,OAAA,EAAS;AAAA,YACP,EAAE,IAAA,EAAM,MAAA,EAAQ,IAAA,EAAM,CAAA,uBAAA,EAA0B,GAAA,YAAe,KAAA,GAAQ,GAAA,CAAI,OAAA,GAAU,MAAA,CAAO,GAAG,CAAC,CAAA,CAAA;AAAG,WACrG;AAAA,UACA,OAAA,EAAS;AAAA,SACX;AAAA,MACF;AAAA,IACF;AAAA,GACF;AAEA,EAAA,MAAA,CAAO,IAAA;AAAA,IACL,kCAAA;AAAA,IACA,mGAAA;AAAA,IACA,EAAC;AAAA,IACD,YAAY;AACV,MAAA,IAAI;AACF,QAAA,MAAM,IAAI,QAAA,EAAS;AACnB,QAAA,MAAM,QAAA,GAAW,EAAE,oBAAA,EAAqB;AACxC,QAAA,OAAO;AAAA,UACL,OAAA,EAAS;AAAA,YACP;AAAA,cACE,IAAA,EAAM,MAAA;AAAA,cACN,MAAM,IAAA,CAAK,SAAA;AAAA,gBACT,EAAE,OAAA,EAAS,CAAA,CAAE,WAAA,EAAa,GAAG,QAAA,EAAS;AAAA,gBACtC,IAAA;AAAA,gBACA;AAAA;AACF;AACF;AACF,SACF;AAAA,MACF,SAAS,GAAA,EAAK;AACZ,QAAA,OAAO;AAAA,UACL,OAAA,EAAS,CAAC,EAAE,IAAA,EAAM,QAAQ,IAAA,EAAM,CAAA,0BAAA,EAA6B,GAAA,YAAe,KAAA,GAAQ,IAAI,OAAA,GAAU,MAAA,CAAO,GAAG,CAAC,IAAI,CAAA;AAAA,UACjH,OAAA,EAAS;AAAA,SACX;AAAA,MACF;AAAA,IACF;AAAA,GACF;AACF;;;AC5NO,SAAS,kBAAkB,MAAA,EAAmB;AACnD,EAAA,MAAA,CAAO,QAAA;AAAA,IACL,eAAA;AAAA,IACA,2BAAA;AAAA,IACA;AAAA,MACE,WAAA,EAAa,uEAAA;AAAA,MACb,QAAA,EAAU;AAAA,KACZ;AAAA,IACA,aAAa;AAAA,MACX,QAAA,EAAU;AAAA,QACR;AAAA,UACE,GAAA,EAAK,2BAAA;AAAA,UACL,QAAA,EAAU,eAAA;AAAA,UACV,IAAA,EAAM;AAAA;AACR;AACF,KACF;AAAA,GACF;AAEA,EAAA,MAAA,CAAO,QAAA;AAAA,IACL,qBAAA;AAAA,IACA,iCAAA;AAAA,IACA;AAAA,MACE,WAAA,EAAa,yCAAA;AAAA,MACb,QAAA,EAAU;AAAA,KACZ;AAAA,IACA,aAAa;AAAA,MACX,QAAA,EAAU;AAAA,QACR;AAAA,UACE,GAAA,EAAK,iCAAA;AAAA,UACL,QAAA,EAAU,eAAA;AAAA,UACV,IAAA,EAAM;AAAA;AACR;AACF,KACF;AAAA,GACF;AAEA,EAAA,MAAA,CAAO,QAAA;AAAA,IACL,mBAAA;AAAA,IACA,+BAAA;AAAA,IACA;AAAA,MACE,WAAA,EAAa,0CAAA;AAAA,MACb,QAAA,EAAU;AAAA,KACZ;AAAA,IACA,aAAa;AAAA,MACX,QAAA,EAAU;AAAA,QACR;AAAA,UACE,GAAA,EAAK,+BAAA;AAAA,UACL,QAAA,EAAU,eAAA;AAAA,UACV,IAAA,EAAM;AAAA;AACR;AACF,KACF;AAAA,GACF;AACF;AAEA,IAAM,YAAA,GAAe,CAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,CAAA;AAgDrB,IAAM,kBAAA,GAAqB,CAAA;;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA,CAAA;AAsE3B,IAAM,gBAAA,GAAmB,CAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,CAAA;;;AClKlB,SAAS,YAAA,GAA0B;AACxC,EAAA,MAAM,MAAA,GAAS,OAAA,CAAQ,GAAA,CAAI,iBAAA,IAAqB,IAAA;AAChD,EAAA,MAAM,SAAA,GAAY,QAAQ,GAAA,CAAI,4BAAA;AAE9B,EAAA,IAAI,CAAC,MAAA,IAAU,CAAC,SAAA,EAAW;AACzB,IAAA,OAAA,CAAQ,KAAA;AAAA,MACN;AAAA,KAGF;AACA,IAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,EAChB;AAEA,EAAA,MAAM,OAAA,GAAU,QAAQ,GAAA,CAAI,kBAAA;AAC5B,EAAA,MAAM,MAAA,GAAS,IAAI,eAAA,CAAgB,MAAA,EAAQ,OAAO,CAAA;AAElD,EAAA,MAAM,MAAA,GAAS,IAAI,SAAA,CAAU;AAAA,IAC3B,IAAA,EAAM,WAAA;AAAA,IACN,OAAA,EAAS;AAAA,GACV,CAAA;AAED,EAAA,kBAAA,CAAmB,QAAQ,MAAM,CAAA;AACjC,EAAA,oBAAA,CAAqB,QAAQ,MAAM,CAAA;AACnC,EAAA,iBAAA,CAAkB,QAAQ,MAAM,CAAA;AAChC,EAAA,4BAAA,CAA6B,QAAQ,MAAM,CAAA;AAC3C,EAAA,kBAAA,CAAmB,QAAQ,MAAM,CAAA;AACjC,EAAA,wBAAA,CAAyB,QAAQ,MAAM,CAAA;AACvC,EAAA,oBAAA,CAAqB,QAAQ,MAAM,CAAA;AACnC,EAAA,mBAAA,CAAoB,MAAM,CAAA;AAC1B,EAAA,iBAAA,CAAkB,MAAM,CAAA;AAExB,EAAA,OAAO,MAAA;AACT;;;AC3CA,eAAe,IAAA,GAAO;AACpB,EAAA,MAAM,SAAS,YAAA,EAAa;AAC5B,EAAA,MAAM,SAAA,GAAY,IAAI,oBAAA,EAAqB;AAC3C,EAAA,MAAM,MAAA,CAAO,QAAQ,SAAS,CAAA;AAChC;AAEA,IAAA,EAAK,CAAE,KAAA,CAAM,CAAC,GAAA,KAAQ;AACpB,EAAA,OAAA,CAAQ,KAAA,CAAM,gBAAgB,GAAG,CAAA;AACjC,EAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAChB,CAAC,CAAA","file":"index.js","sourcesContent":["import { z } from \"zod\";\n\nconst ApiKeySchema = z\n .string()\n .startsWith(\"inf_\", \"API key must start with 'inf_'\");\n\nexport class InflectivApiError extends Error {\n constructor(\n public status: number,\n public body: unknown,\n ) {\n const msg =\n typeof body === \"object\" && body !== null && \"detail\" in body\n ? String((body as { detail: unknown }).detail)\n : JSON.stringify(body);\n super(`HTTP ${status}: ${msg}`);\n this.name = \"InflectivApiError\";\n }\n}\n\nexport class InflectivClient {\n private apiKey: string | null;\n private baseUrl: string;\n\n constructor(apiKey: string | null, baseUrl?: string) {\n this.apiKey = apiKey ? ApiKeySchema.parse(apiKey) : null;\n this.baseUrl = (\n baseUrl ?? \"https://app.inflectiv.ai/api/platform\"\n ).replace(/\\/$/, \"\");\n }\n\n /** Returns the API path prefix based on environment:\n * - Production (app.inflectiv.ai/api/platform): no prefix (proxy adds /ext/)\n * - All other environments (localhost, Railway, etc.): /api/v2 (direct API access)\n */\n get pathPrefix(): string {\n if (this.baseUrl.includes(\"app.inflectiv.ai\")) {\n return \"\";\n }\n return \"/api/v2\";\n }\n\n private headers(extra?: Record<string, string>): Record<string, string> {\n const h: Record<string, string> = {};\n if (this.apiKey) {\n h[\"X-API-Key\"] = this.apiKey;\n }\n return { ...h, ...extra };\n }\n\n private async request<T>(\n method: string,\n path: string,\n body?: unknown,\n ): Promise<T> {\n const url = `${this.baseUrl}${path}`.replace(/\\/+$/, \"\");\n const init: RequestInit = {\n method,\n headers: this.headers(\n body !== undefined ? { \"Content-Type\": \"application/json\" } : undefined,\n ),\n body: body !== undefined ? JSON.stringify(body) : undefined,\n };\n\n const res = await fetch(url, init);\n\n if (!res.ok) {\n let errorBody: unknown;\n try {\n errorBody = await res.json();\n } catch {\n errorBody = await res.text();\n }\n throw new InflectivApiError(res.status, errorBody);\n }\n\n return res.json() as Promise<T>;\n }\n\n async get<T>(path: string): Promise<T> {\n return this.request<T>(\"GET\", path);\n }\n\n async post<T>(path: string, body?: unknown): Promise<T> {\n return this.request<T>(\"POST\", path, body);\n }\n\n async put<T>(path: string, body?: unknown): Promise<T> {\n return this.request<T>(\"PUT\", path, body);\n }\n\n async patch<T>(path: string, body?: unknown): Promise<T> {\n return this.request<T>(\"PATCH\", path, body);\n }\n\n async delete<T>(path: string): Promise<T> {\n return this.request<T>(\"DELETE\", path);\n }\n\n async uploadFile(\n path: string,\n fileBuffer: Buffer,\n filename: string,\n title?: string,\n dataset?: string,\n ): Promise<unknown> {\n const formData = new FormData();\n const blob = new Blob([fileBuffer]);\n formData.append(\"file\", blob, filename);\n if (title) {\n formData.append(\"title\", title);\n }\n\n // dataset is a Query param on the backend, so pass via URL\n const qs = dataset ? `?dataset=${encodeURIComponent(dataset)}` : \"\";\n const url = `${this.baseUrl}${path}${qs}`.replace(/\\/+$/, \"\");\n const res = await fetch(url, {\n method: \"POST\",\n headers: this.headers(),\n body: formData,\n });\n\n if (!res.ok) {\n let errorBody: unknown;\n try {\n errorBody = await res.json();\n } catch {\n errorBody = await res.text();\n }\n throw new InflectivApiError(res.status, errorBody);\n }\n\n return res.json();\n }\n}\n","import { ZodError } from \"zod\";\nimport { InflectivApiError } from \"./client.js\";\n\nexport function formatError(err: unknown): {\n content: { type: \"text\"; text: string }[];\n isError: true;\n} {\n let message: string;\n\n if (err instanceof InflectivApiError) {\n const body = err.body;\n let detail = err.message;\n\n if (typeof body === \"object\" && body !== null) {\n const b = body as Record<string, unknown>;\n if (b.detail) detail = String(b.detail);\n if (b.credits_required) {\n detail += `\\n\\nInsufficient credits. Required: ${b.credits_required}, Available: ${b.credits_available ?? \"unknown\"}. Top up at https://app.inflectiv.ai`;\n }\n }\n\n message = `Inflectiv API Error (${err.status}): ${detail}`;\n } else if (err instanceof ZodError) {\n const issues = err.issues\n .map((i) => ` - ${i.path.join(\".\")}: ${i.message}`)\n .join(\"\\n\");\n message = `Validation Error:\\n${issues}`;\n } else if (err instanceof Error) {\n message = err.message.includes(\"fetch failed\")\n ? `Network error: Could not reach Inflectiv API. Check your INFLECTIV_BASE_URL and network connection.`\n : `Error: ${err.message}`;\n } else {\n message = `Unknown error: ${String(err)}`;\n }\n\n return {\n content: [{ type: \"text\", text: message }],\n isError: true,\n };\n}\n","import { McpServer } from \"@modelcontextprotocol/sdk/server/mcp.js\";\nimport { z } from \"zod\";\nimport { InflectivClient } from \"../client.js\";\nimport { formatError } from \"../errors.js\";\n\nexport function registerAgentTools(server: McpServer, client: InflectivClient) {\n server.tool(\n \"inflectiv_list_agents\",\n \"List all agents owned by you. With a global key: lists all agents. With a dataset key: lists agents with that dataset attached. Free.\",\n {},\n async () => {\n try {\n const data = await client.get(`${client.pathPrefix}/ext/agents/`);\n return {\n content: [{ type: \"text\", text: JSON.stringify(data, null, 2) }],\n };\n } catch (err) {\n return formatError(err);\n }\n },\n );\n\n server.tool(\n \"inflectiv_create_agent\",\n \"Create a new AI agent attached to the API key's dataset. Costs 5 credits.\",\n {\n name: z.string().min(1).max(255).describe(\"Agent name\"),\n description: z\n .string()\n .max(1000)\n .optional()\n .describe(\"Agent description\"),\n personality: z\n .string()\n .optional()\n .describe(\n 'Agent personality style (default: \"professional\")',\n ),\n system_instructions: z\n .string()\n .max(2000)\n .optional()\n .describe(\"Custom system instructions for the agent\"),\n response_length: z\n .string()\n .optional()\n .describe('Response length preference (default: \"concise\")'),\n model_name: z\n .string()\n .optional()\n .describe('LLM model name (default: \"gpt-4o-mini\")'),\n temperature: z\n .number()\n .int()\n .min(0)\n .max(100)\n .optional()\n .describe(\"Temperature 0-100 (default: 70)\"),\n dataset: z.string().optional().describe(\"Dataset ID or api_name to attach (required for global API keys)\"),\n },\n async ({ dataset, ...body }) => {\n try {\n const qs = dataset ? `?dataset=${dataset}` : \"\";\n const data = await client.post(`${client.pathPrefix}/ext/agents/${qs}`, body);\n return {\n content: [{ type: \"text\", text: JSON.stringify(data, null, 2) }],\n };\n } catch (err) {\n return formatError(err);\n }\n },\n );\n\n server.tool(\n \"inflectiv_get_agent\",\n \"Get details of a specific agent. Free.\",\n {\n agent_id: z.number().int().describe(\"Agent ID\"),\n },\n async ({ agent_id }) => {\n try {\n const data = await client.get(`${client.pathPrefix}/ext/agents/${agent_id}`);\n return {\n content: [{ type: \"text\", text: JSON.stringify(data, null, 2) }],\n };\n } catch (err) {\n return formatError(err);\n }\n },\n );\n\n server.tool(\n \"inflectiv_update_agent_config\",\n \"Update an agent's configuration (personality, instructions, model, temperature, etc.). Costs 2 credits.\",\n {\n agent_id: z.number().int().describe(\"Agent ID\"),\n name: z.string().min(1).max(255).optional().describe(\"Agent name\"),\n description: z\n .string()\n .max(1000)\n .optional()\n .describe(\"Agent description\"),\n personality: z.string().optional().describe(\"Agent personality style\"),\n system_instructions: z\n .string()\n .max(2000)\n .optional()\n .describe(\"Custom system instructions\"),\n response_length: z\n .string()\n .optional()\n .describe(\"Response length preference\"),\n model_name: z.string().optional().describe(\"LLM model name\"),\n temperature: z\n .number()\n .int()\n .min(0)\n .max(100)\n .optional()\n .describe(\"Temperature 0-100\"),\n },\n async ({ agent_id, ...body }) => {\n try {\n const data = await client.put(\n `${client.pathPrefix}/ext/agents/${agent_id}/config`,\n body,\n );\n return {\n content: [{ type: \"text\", text: JSON.stringify(data, null, 2) }],\n };\n } catch (err) {\n return formatError(err);\n }\n },\n );\n\n server.tool(\n \"inflectiv_chat_with_agent\",\n 'Send a message to an agent and get a RAG-enabled response. Costs 1 credit. Provide conversation_history as an array of {role, content} objects for multi-turn chat.',\n {\n agent_id: z.number().int().describe(\"Agent ID\"),\n message: z.string().min(1).max(4000).describe(\"Message to send\"),\n conversation_history: z\n .array(\n z.object({\n role: z.string().describe('Message role (e.g. \"user\", \"assistant\")'),\n content: z.string().describe(\"Message content\"),\n }),\n )\n .optional()\n .describe(\"Previous conversation messages for context\"),\n },\n async ({ agent_id, message, conversation_history }) => {\n try {\n const data = await client.post(`${client.pathPrefix}/ext/agents/${agent_id}/chat`, {\n message,\n conversation_history: conversation_history ?? [],\n });\n return {\n content: [{ type: \"text\", text: JSON.stringify(data, null, 2) }],\n };\n } catch (err) {\n return formatError(err);\n }\n },\n );\n\n server.tool(\n \"inflectiv_list_agent_datasets\",\n \"List all datasets attached to an agent. Free.\",\n {\n agent_id: z.number().int().describe(\"Agent ID\"),\n },\n async ({ agent_id }) => {\n try {\n const data = await client.get(`${client.pathPrefix}/ext/agents/${agent_id}/datasets`);\n return {\n content: [{ type: \"text\", text: JSON.stringify(data, null, 2) }],\n };\n } catch (err) {\n return formatError(err);\n }\n },\n );\n\n server.tool(\n \"inflectiv_attach_dataset\",\n 'Attach a dataset to an agent. Free. Mode can be \"read_only\" or \"self_learning\".',\n {\n agent_id: z.number().int().describe(\"Agent ID\"),\n dataset_id: z.number().int().describe(\"Dataset ID to attach\"),\n mode: z\n .enum([\"read_only\", \"self_learning\"])\n .optional()\n .describe('Dataset mode (default: \"read_only\")'),\n },\n async ({ agent_id, dataset_id, mode }) => {\n try {\n const data = await client.post(\n `${client.pathPrefix}/ext/agents/${agent_id}/datasets`,\n {\n dataset_id,\n mode: mode ?? \"read_only\",\n },\n );\n return {\n content: [{ type: \"text\", text: JSON.stringify(data, null, 2) }],\n };\n } catch (err) {\n return formatError(err);\n }\n },\n );\n\n server.tool(\n \"inflectiv_update_dataset_mode\",\n 'Update the mode of a dataset attached to an agent. Mode: \"read_only\" or \"self_learning\". Free.',\n {\n agent_id: z.number().int().describe(\"Agent ID\"),\n dataset_id: z.number().int().describe(\"Dataset ID\"),\n mode: z\n .enum([\"read_only\", \"self_learning\"])\n .describe(\"New dataset mode\"),\n },\n async ({ agent_id, dataset_id, mode }) => {\n try {\n const data = await client.patch(\n `${client.pathPrefix}/ext/agents/${agent_id}/datasets/${dataset_id}`,\n { mode },\n );\n return {\n content: [{ type: \"text\", text: JSON.stringify(data, null, 2) }],\n };\n } catch (err) {\n return formatError(err);\n }\n },\n );\n}\n","import { McpServer } from \"@modelcontextprotocol/sdk/server/mcp.js\";\nimport { z } from \"zod\";\nimport { InflectivClient } from \"../client.js\";\nimport { formatError } from \"../errors.js\";\n\nexport function registerDatasetTools(\n server: McpServer,\n client: InflectivClient,\n) {\n server.tool(\n \"inflectiv_list_datasets\",\n \"List datasets accessible via this API key. Free.\",\n {\n dataset: z\n .string()\n .optional()\n .describe(\n \"Dataset ID or api_name (required for global API keys, optional for dataset-scoped keys)\",\n ),\n },\n async ({ dataset }) => {\n try {\n const qs = dataset ? `?dataset=${dataset}` : \"\";\n const data = await client.get(`${client.pathPrefix}/ext/datasets/${qs}`);\n return {\n content: [{ type: \"text\", text: JSON.stringify(data, null, 2) }],\n };\n } catch (err) {\n return formatError(err);\n }\n },\n );\n\n server.tool(\n \"inflectiv_update_dataset\",\n \"Update dataset name and/or description. Only dataset owner can update. Free.\",\n {\n dataset: z\n .string()\n .optional()\n .describe(\n \"Dataset ID or api_name (required for global API keys, optional for dataset-scoped keys)\",\n ),\n name: z\n .string()\n .min(1)\n .max(255)\n .optional()\n .describe(\"New dataset name\"),\n description: z\n .string()\n .max(1000)\n .optional()\n .describe(\"New dataset description\"),\n },\n async ({ dataset, ...params }) => {\n try {\n const qs = dataset ? `?dataset=${dataset}` : \"\";\n const data = await client.put(`${client.pathPrefix}/ext/datasets/${qs}`, params);\n return {\n content: [{ type: \"text\", text: JSON.stringify(data, null, 2) }],\n };\n } catch (err) {\n return formatError(err);\n }\n },\n );\n\n server.tool(\n \"inflectiv_reindex_dataset\",\n \"Reindex dataset vectors. Useful after bulk changes. Costs 2 credits.\",\n {\n dataset: z\n .string()\n .optional()\n .describe(\n \"Dataset ID or api_name (required for global API keys, optional for dataset-scoped keys)\",\n ),\n },\n async ({ dataset }) => {\n try {\n const qs = dataset ? `?dataset=${dataset}` : \"\";\n const data = await client.post(`${client.pathPrefix}/ext/datasets/reindex${qs}`);\n return {\n content: [{ type: \"text\", text: JSON.stringify(data, null, 2) }],\n };\n } catch (err) {\n return formatError(err);\n }\n },\n );\n\n server.tool(\n \"inflectiv_search_dataset\",\n \"Semantic search across the dataset's knowledge base. Costs 1 credit.\",\n {\n dataset: z\n .string()\n .optional()\n .describe(\n \"Dataset ID or api_name (required for global API keys, optional for dataset-scoped keys)\",\n ),\n query: z.string().min(1).max(2000).describe(\"Search query\"),\n top_k: z\n .number()\n .int()\n .min(1)\n .max(20)\n .optional()\n .describe(\"Number of results to return (default: 5)\"),\n score_threshold: z\n .number()\n .min(0)\n .max(1)\n .optional()\n .describe(\"Minimum similarity score 0.0-1.0 (default: 0.6)\"),\n },\n async ({ dataset, ...params }) => {\n try {\n const qs = dataset ? `?dataset=${dataset}` : \"\";\n const data = await client.post(`${client.pathPrefix}/ext/datasets/query${qs}`, params);\n return {\n content: [{ type: \"text\", text: JSON.stringify(data, null, 2) }],\n };\n } catch (err) {\n return formatError(err);\n }\n },\n );\n\n server.tool(\n \"inflectiv_batch_search\",\n \"Run multiple semantic searches in a single call. Costs 1 credit per query.\",\n {\n dataset: z\n .string()\n .optional()\n .describe(\n \"Dataset ID or api_name (required for global API keys, optional for dataset-scoped keys)\",\n ),\n queries: z\n .array(z.string())\n .min(1)\n .max(20)\n .describe(\"List of search queries (1-20)\"),\n top_k: z\n .number()\n .int()\n .min(1)\n .max(20)\n .optional()\n .describe(\"Number of results per query (default: 5)\"),\n score_threshold: z\n .number()\n .min(0)\n .max(1)\n .optional()\n .describe(\"Minimum similarity score 0.0-1.0 (default: 0.6)\"),\n },\n async ({ dataset, ...params }) => {\n try {\n const qs = dataset ? `?dataset=${dataset}` : \"\";\n const data = await client.post(\n `${client.pathPrefix}/ext/datasets/query/batch${qs}`,\n params,\n );\n return {\n content: [{ type: \"text\", text: JSON.stringify(data, null, 2) }],\n };\n } catch (err) {\n return formatError(err);\n }\n },\n );\n\n server.tool(\n \"inflectiv_write_intelligence\",\n \"Write a single intelligence entry to the dataset. Costs 1 credit (0 if duplicate detected). Content is embedded and becomes searchable.\",\n {\n dataset: z\n .string()\n .optional()\n .describe(\n \"Dataset ID or api_name (required for global API keys, optional for dataset-scoped keys)\",\n ),\n agent_id: z\n .number()\n .int()\n .describe(\"Agent ID that owns this intelligence\"),\n content: z\n .string()\n .min(1)\n .max(50000)\n .describe(\"Intelligence content text\"),\n title: z\n .string()\n .max(255)\n .optional()\n .describe(\"Title for the intelligence entry\"),\n source_type: z\n .enum([\"agent_text\", \"agent_url\"])\n .optional()\n .describe('Source type (default: \"agent_text\")'),\n source_identifier: z\n .string()\n .max(2000)\n .optional()\n .describe(\"Source identifier (e.g. URL)\"),\n },\n async ({ agent_id, dataset, ...body }) => {\n try {\n const datasetQs = dataset ? `&dataset=${dataset}` : \"\";\n const data = await client.post(\n `${client.pathPrefix}/ext/datasets/intelligence?agent_id=${agent_id}${datasetQs}`,\n body,\n );\n return {\n content: [{ type: \"text\", text: JSON.stringify(data, null, 2) }],\n };\n } catch (err) {\n return formatError(err);\n }\n },\n );\n\n server.tool(\n \"inflectiv_batch_write_intelligence\",\n \"Write multiple intelligence entries in a single call. Costs 1 credit per new entry (duplicates are free). Max 50 entries.\",\n {\n dataset: z\n .string()\n .optional()\n .describe(\n \"Dataset ID or api_name (required for global API keys, optional for dataset-scoped keys)\",\n ),\n agent_id: z\n .number()\n .int()\n .describe(\"Agent ID that owns these intelligence entries\"),\n entries: z\n .array(\n z.object({\n content: z\n .string()\n .min(1)\n .max(50000)\n .describe(\"Intelligence content text\"),\n title: z.string().max(255).optional().describe(\"Entry title\"),\n source_type: z\n .enum([\"agent_text\", \"agent_url\"])\n .optional()\n .describe('Source type (default: \"agent_text\")'),\n source_identifier: z\n .string()\n .max(2000)\n .optional()\n .describe(\"Source identifier\"),\n }),\n )\n .min(1)\n .max(50)\n .describe(\"Intelligence entries to write (1-50)\"),\n },\n async ({ agent_id, dataset, entries }) => {\n try {\n const datasetQs = dataset ? `&dataset=${dataset}` : \"\";\n const data = await client.post(\n `${client.pathPrefix}/ext/datasets/intelligence/batch?agent_id=${agent_id}${datasetQs}`,\n { entries },\n );\n return {\n content: [{ type: \"text\", text: JSON.stringify(data, null, 2) }],\n };\n } catch (err) {\n return formatError(err);\n }\n },\n );\n\n server.tool(\n \"inflectiv_list_intelligence\",\n \"List intelligence entries in the dataset. Free. Filter by agent_id, status, with pagination.\",\n {\n dataset: z\n .string()\n .optional()\n .describe(\n \"Dataset ID or api_name (required for global API keys, optional for dataset-scoped keys)\",\n ),\n agent_id: z\n .number()\n .int()\n .optional()\n .describe(\"Filter by agent ID\"),\n status: z\n .enum([\"processing\", \"processed\", \"failed\"])\n .optional()\n .describe(\"Filter by processing status\"),\n limit: z\n .number()\n .int()\n .min(1)\n .max(100)\n .optional()\n .describe(\"Number of entries to return (default: 50)\"),\n offset: z\n .number()\n .int()\n .min(0)\n .optional()\n .describe(\"Offset for pagination (default: 0)\"),\n },\n async ({ dataset, agent_id, status, limit, offset }) => {\n try {\n const params = new URLSearchParams();\n if (dataset) params.set(\"dataset\", dataset);\n if (agent_id !== undefined) params.set(\"agent_id\", String(agent_id));\n if (status) params.set(\"status\", status);\n if (limit !== undefined) params.set(\"limit\", String(limit));\n if (offset !== undefined) params.set(\"offset\", String(offset));\n const qs = params.toString();\n const path = `${client.pathPrefix}/ext/datasets/intelligence${qs ? `?${qs}` : \"\"}`;\n const data = await client.get(path);\n return {\n content: [{ type: \"text\", text: JSON.stringify(data, null, 2) }],\n };\n } catch (err) {\n return formatError(err);\n }\n },\n );\n}\n","import { McpServer } from \"@modelcontextprotocol/sdk/server/mcp.js\";\nimport { z } from \"zod\";\nimport { readFile } from \"node:fs/promises\";\nimport { basename } from \"node:path\";\nimport { InflectivClient } from \"../client.js\";\nimport { formatError } from \"../errors.js\";\n\nconst SUPPORTED_EXTENSIONS = [\n \".pdf\",\n \".docx\",\n \".txt\",\n \".md\",\n \".html\",\n \".csv\",\n \".json\",\n \".jsonl\",\n \".tsv\",\n \".xlsx\",\n \".xls\",\n \".parquet\",\n \".xml\",\n];\n\nexport function registerFileTools(\n server: McpServer,\n client: InflectivClient,\n) {\n server.tool(\n \"inflectiv_list_files\",\n \"List files (knowledge sources) in the dataset. Free.\",\n {\n skip: z\n .number()\n .int()\n .min(0)\n .optional()\n .describe(\"Number of files to skip (default: 0)\"),\n limit: z\n .number()\n .int()\n .min(1)\n .max(100)\n .optional()\n .describe(\"Number of files to return (default: 50)\"),\n dataset: z\n .string()\n .optional()\n .describe(\"Dataset ID or api_name (required for global API keys)\"),\n },\n async ({ skip, limit, dataset }) => {\n try {\n const params = new URLSearchParams();\n if (skip !== undefined) params.set(\"skip\", String(skip));\n if (limit !== undefined) params.set(\"limit\", String(limit));\n if (dataset) params.set(\"dataset\", dataset);\n const qs = params.toString();\n const path = `${client.pathPrefix}/ext/files/${qs ? `?${qs}` : \"\"}`;\n const data = await client.get(path);\n return {\n content: [{ type: \"text\", text: JSON.stringify(data, null, 2) }],\n };\n } catch (err) {\n return formatError(err);\n }\n },\n );\n\n server.tool(\n \"inflectiv_get_file\",\n \"Get details of a specific file (knowledge source). Free.\",\n {\n file_id: z.number().int().describe(\"File ID\"),\n },\n async ({ file_id }) => {\n try {\n const data = await client.get(`${client.pathPrefix}/ext/files/${file_id}`);\n return {\n content: [{ type: \"text\", text: JSON.stringify(data, null, 2) }],\n };\n } catch (err) {\n return formatError(err);\n }\n },\n );\n\n server.tool(\n \"inflectiv_upload_file\",\n `Upload a local file to the dataset as a knowledge source. Costs 5 credits base + 1/MB over 5MB. Supported formats: ${SUPPORTED_EXTENSIONS.join(\", \")}`,\n {\n file_path: z\n .string()\n .describe(\"Absolute path to the local file to upload\"),\n title: z\n .string()\n .max(255)\n .optional()\n .describe(\"Display title for the file\"),\n dataset: z\n .string()\n .optional()\n .describe(\"Dataset ID or api_name (required for global API keys)\"),\n },\n async ({ file_path, title, dataset }) => {\n try {\n const ext = \".\" + file_path.split(\".\").pop()?.toLowerCase();\n if (!SUPPORTED_EXTENSIONS.includes(ext)) {\n return {\n content: [\n {\n type: \"text\",\n text: `Unsupported file type \"${ext}\". Supported: ${SUPPORTED_EXTENSIONS.join(\", \")}`,\n },\n ],\n isError: true as const,\n };\n }\n\n const fileBuffer = await readFile(file_path);\n const filename = basename(file_path);\n const data = await client.uploadFile(\n `${client.pathPrefix}/ext/files/upload`,\n fileBuffer,\n filename,\n title,\n dataset,\n );\n return {\n content: [{ type: \"text\", text: JSON.stringify(data, null, 2) }],\n };\n } catch (err) {\n return formatError(err);\n }\n },\n );\n\n server.tool(\n \"inflectiv_reprocess_file\",\n \"Reprocess a previously uploaded file. Useful after processing failures. Costs 5 credits.\",\n {\n file_id: z.number().int().describe(\"File ID to reprocess\"),\n },\n async ({ file_id }) => {\n try {\n const data = await client.post(`${client.pathPrefix}/ext/files/${file_id}/reprocess`);\n return {\n content: [{ type: \"text\", text: JSON.stringify(data, null, 2) }],\n };\n } catch (err) {\n return formatError(err);\n }\n },\n );\n}\n","import { McpServer } from \"@modelcontextprotocol/sdk/server/mcp.js\";\nimport { z } from \"zod\";\nimport { InflectivClient } from \"../client.js\";\nimport { formatError } from \"../errors.js\";\n\nexport function registerKnowledgeSourceTools(\n server: McpServer,\n client: InflectivClient,\n) {\n server.tool(\n \"inflectiv_list_knowledge_sources\",\n \"List ALL knowledge sources in the dataset (files, URLs, manual text, AI-generated, etc.). Free.\",\n {\n source_type: z\n .enum([\n \"file\",\n \"url\",\n \"manual\",\n \"ai_generated\",\n \"agent_text\",\n \"agent_url\",\n \"token_pair\",\n ])\n .optional()\n .describe(\"Filter by source type\"),\n status: z\n .enum([\"processing\", \"processed\", \"failed\"])\n .optional()\n .describe(\"Filter by processing status\"),\n skip: z\n .number()\n .int()\n .min(0)\n .optional()\n .describe(\"Number of items to skip (default: 0)\"),\n limit: z\n .number()\n .int()\n .min(1)\n .max(100)\n .optional()\n .describe(\"Number of items to return (default: 50)\"),\n dataset: z.string().optional().describe(\"Dataset ID or api_name (required for global API keys)\"),\n },\n async ({ source_type, status, skip, limit, dataset }) => {\n try {\n const params = new URLSearchParams();\n if (source_type) params.set(\"source_type\", source_type);\n if (status) params.set(\"status\", status);\n if (skip !== undefined) params.set(\"skip\", String(skip));\n if (limit !== undefined) params.set(\"limit\", String(limit));\n if (dataset) params.set(\"dataset\", dataset);\n const qs = params.toString();\n const path = `${client.pathPrefix}/ext/knowledge-sources/${qs ? `?${qs}` : \"\"}`;\n const data = await client.get(path);\n return {\n content: [{ type: \"text\", text: JSON.stringify(data, null, 2) }],\n };\n } catch (err) {\n return formatError(err);\n }\n },\n );\n}\n","import type { McpServer } from \"@modelcontextprotocol/sdk/server/mcp.js\";\nimport { z } from \"zod\";\nimport type { InflectivClient } from \"../client.js\";\nimport { formatError } from \"../errors.js\";\n\nexport function registerMarketplaceTools(server: McpServer, client: InflectivClient): void {\n server.tool(\n \"inflectiv_browse_skill_marketplace\",\n \"Browse published skill marketplace listings. Free. Supports search, tag filtering, price filtering, and sorting.\",\n {\n query: z.string().max(200).optional().describe(\"Search query\"),\n tags: z.array(z.string()).max(10).optional().describe(\"Filter by tags\"),\n price_type: z.enum([\"free\", \"one_time\"]).optional().describe(\"Filter by price type\"),\n sort_by: z\n .enum([\"newest\", \"popular\", \"highest_rated\", \"price_low\", \"price_high\"])\n .optional()\n .describe(\"Sort order (default: newest)\"),\n platform: z.string().optional().describe(\"Filter by platform (evm, dogecoin)\"),\n skip: z.number().int().min(0).optional().describe(\"Pagination offset\"),\n limit: z.number().int().min(1).max(100).optional().describe(\"Pagination limit (default: 20)\"),\n },\n async (params) => {\n try {\n const searchParams = new URLSearchParams();\n if (params.query) searchParams.set(\"query\", params.query);\n if (params.tags) params.tags.forEach((t) => searchParams.append(\"tags\", t));\n if (params.price_type) searchParams.set(\"price_type\", params.price_type);\n if (params.sort_by) searchParams.set(\"sort_by\", params.sort_by);\n if (params.platform) searchParams.set(\"platform\", params.platform);\n if (params.skip !== undefined) searchParams.set(\"skip\", String(params.skip));\n if (params.limit !== undefined) searchParams.set(\"limit\", String(params.limit));\n\n const qs = searchParams.toString();\n const path = `${client.pathPrefix}/skill-marketplace/listings${qs ? `?${qs}` : \"\"}`;\n const data = await client.get(path);\n\n return {\n content: [{ type: \"text\", text: JSON.stringify(data, null, 2) }],\n };\n } catch (err) {\n return formatError(err);\n }\n },\n );\n\n server.tool(\n \"inflectiv_get_skill_listing\",\n \"Get detailed information about a skill marketplace listing. Free.\",\n {\n listing_id: z.number().describe(\"Skill listing ID\"),\n },\n async (params) => {\n try {\n const data = await client.get(\n `${client.pathPrefix}/skill-marketplace/listings/${params.listing_id}`,\n );\n return {\n content: [{ type: \"text\", text: JSON.stringify(data, null, 2) }],\n };\n } catch (err) {\n return formatError(err);\n }\n },\n );\n\n server.tool(\n \"inflectiv_acquire_skill\",\n \"Acquire a skill from the marketplace. Free skills cost nothing. Paid skills deduct credits.\",\n {\n listing_id: z.number().describe(\"Skill listing ID to acquire\"),\n },\n async (params) => {\n try {\n const data = await client.post(\n `${client.pathPrefix}/ext/skills/acquire-listing/${params.listing_id}`,\n );\n return {\n content: [{ type: \"text\", text: JSON.stringify(data, null, 2) }],\n };\n } catch (err) {\n return formatError(err);\n }\n },\n );\n\n server.tool(\n \"inflectiv_browse_dataset_marketplace\",\n \"Browse published dataset marketplace listings. Free. No auth required.\",\n {\n query: z.string().max(200).optional().describe(\"Search query\"),\n tags: z.array(z.string()).max(10).optional().describe(\"Filter by tags\"),\n sort_by: z\n .enum([\"newest\", \"popular\", \"highest_rated\", \"price_low\", \"price_high\"])\n .optional()\n .describe(\"Sort order\"),\n skip: z.number().int().min(0).optional().describe(\"Pagination offset\"),\n limit: z.number().int().min(1).max(100).optional().describe(\"Pagination limit\"),\n },\n async (params) => {\n try {\n const searchParams = new URLSearchParams();\n if (params.query) searchParams.set(\"query\", params.query);\n if (params.tags) params.tags.forEach((t) => searchParams.append(\"tags\", t));\n if (params.sort_by) searchParams.set(\"sort_by\", params.sort_by);\n if (params.skip !== undefined) searchParams.set(\"skip\", String(params.skip));\n if (params.limit !== undefined) searchParams.set(\"limit\", String(params.limit));\n\n const qs = searchParams.toString();\n const path = `${client.pathPrefix}/marketplace/listings${qs ? `?${qs}` : \"\"}`;\n const data = await client.get(path);\n\n return {\n content: [{ type: \"text\", text: JSON.stringify(data, null, 2) }],\n };\n } catch (err) {\n return formatError(err);\n }\n },\n );\n\n server.tool(\n \"inflectiv_browse_agent_marketplace\",\n \"Browse published agent marketplace listings. Free. No auth required.\",\n {\n query: z.string().max(200).optional().describe(\"Search query\"),\n tags: z.array(z.string()).max(10).optional().describe(\"Filter by tags\"),\n sort_by: z\n .enum([\"newest\", \"popular\", \"highest_rated\", \"price_low\", \"price_high\"])\n .optional()\n .describe(\"Sort order\"),\n platform: z.string().optional().describe(\"Filter by platform\"),\n skip: z.number().int().min(0).optional().describe(\"Pagination offset\"),\n limit: z.number().int().min(1).max(100).optional().describe(\"Pagination limit\"),\n },\n async (params) => {\n try {\n const searchParams = new URLSearchParams();\n if (params.query) searchParams.set(\"query\", params.query);\n if (params.tags) params.tags.forEach((t) => searchParams.append(\"tags\", t));\n if (params.sort_by) searchParams.set(\"sort_by\", params.sort_by);\n if (params.platform) searchParams.set(\"platform\", params.platform);\n if (params.skip !== undefined) searchParams.set(\"skip\", String(params.skip));\n if (params.limit !== undefined) searchParams.set(\"limit\", String(params.limit));\n\n const qs = searchParams.toString();\n const path = `${client.pathPrefix}/agent-marketplace/listings${qs ? `?${qs}` : \"\"}`;\n const data = await client.get(path);\n\n return {\n content: [{ type: \"text\", text: JSON.stringify(data, null, 2) }],\n };\n } catch (err) {\n return formatError(err);\n }\n },\n );\n}\n","import * as fs from \"node:fs\";\nimport * as path from \"node:path\";\nimport type { ProjectConfig } from \"./types.js\";\n\nconst PROJECT_MARKERS = [\n \".git\",\n \"package.json\",\n \"pyproject.toml\",\n \"Cargo.toml\",\n \"go.mod\",\n \"pom.xml\",\n \"build.gradle\",\n \"Makefile\",\n];\n\nconst INFLECTIV_DIR = \".inflectiv\";\nconst MEMORY_DIR = \"memory\";\nconst CONFIG_FILE = \"config.json\";\nconst ENTRIES_FILE = \"entries.jsonl\";\nconst INDEX_FILE = \"index.json\";\n\nexport function findProjectRoot(startDir?: string): string {\n let dir = startDir ?? process.cwd();\n const root = path.parse(dir).root;\n\n while (dir !== root) {\n for (const marker of PROJECT_MARKERS) {\n if (fs.existsSync(path.join(dir, marker))) {\n return dir;\n }\n }\n dir = path.dirname(dir);\n }\n\n return startDir ?? process.cwd();\n}\n\nexport function getInflectivDir(projectRoot: string): string {\n return path.join(projectRoot, INFLECTIV_DIR);\n}\n\nexport function getMemoryDir(projectRoot: string): string {\n return path.join(projectRoot, INFLECTIV_DIR, MEMORY_DIR);\n}\n\nexport function getConfigPath(projectRoot: string): string {\n return path.join(projectRoot, INFLECTIV_DIR, CONFIG_FILE);\n}\n\nexport function getEntriesPath(projectRoot: string): string {\n return path.join(projectRoot, INFLECTIV_DIR, MEMORY_DIR, ENTRIES_FILE);\n}\n\nexport function getIndexPath(projectRoot: string): string {\n return path.join(projectRoot, INFLECTIV_DIR, MEMORY_DIR, INDEX_FILE);\n}\n\nfunction generateProjectId(): string {\n const chars = \"abcdefghijklmnopqrstuvwxyz0123456789\";\n let result = \"\";\n for (let i = 0; i < 8; i++) {\n result += chars[Math.floor(Math.random() * chars.length)];\n }\n return result;\n}\n\nexport function ensureProjectStructure(projectRoot: string): ProjectConfig {\n const configPath = getConfigPath(projectRoot);\n\n if (fs.existsSync(configPath)) {\n return JSON.parse(fs.readFileSync(configPath, \"utf-8\")) as ProjectConfig;\n }\n\n const memoryDir = getMemoryDir(projectRoot);\n fs.mkdirSync(memoryDir, { recursive: true });\n\n const config: ProjectConfig = {\n project_id: generateProjectId(),\n project_name: path.basename(projectRoot),\n created_at: new Date().toISOString(),\n memory_count: 0,\n };\n\n fs.writeFileSync(configPath, JSON.stringify(config, null, 2));\n fs.writeFileSync(getEntriesPath(projectRoot), \"\");\n fs.writeFileSync(\n getIndexPath(projectRoot),\n JSON.stringify({ version: 1, tag_index: {}, category_index: {}, word_index: {} }),\n );\n\n return config;\n}\n","import * as fs from \"node:fs\";\nimport type { Importance, MemoryCategory, MemoryEntry, MemoryIndex, ProjectConfig } from \"./types.js\";\nimport {\n ensureProjectStructure,\n findProjectRoot,\n getConfigPath,\n getEntriesPath,\n getIndexPath,\n} from \"./project-context.js\";\n\nconst MAX_CONTENT_LENGTH = 10_000;\nconst MAX_TAGS = 10;\n\nfunction generateId(): string {\n const chars = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789\";\n let result = \"\";\n for (let i = 0; i < 8; i++) {\n result += chars[Math.floor(Math.random() * chars.length)];\n }\n return result;\n}\n\nfunction tokenize(text: string): string[] {\n return text\n .toLowerCase()\n .replace(/[^a-z0-9\\s]/g, \" \")\n .split(/\\s+/)\n .filter((w) => w.length > 2);\n}\n\nexport class MemoryStore {\n private projectRoot: string;\n private config: ProjectConfig;\n\n constructor(startDir?: string) {\n this.projectRoot = findProjectRoot(startDir);\n this.config = ensureProjectStructure(this.projectRoot);\n }\n\n get root(): string {\n return this.projectRoot;\n }\n\n get projectName(): string {\n return this.config.project_name;\n }\n\n get projectId(): string {\n return this.config.project_id;\n }\n\n get memoryCount(): number {\n return this.config.memory_count;\n }\n\n write(\n content: string,\n category: MemoryCategory,\n tags: string[] = [],\n importance: Importance = \"medium\",\n sourceContext?: string,\n ): MemoryEntry {\n if (content.length > MAX_CONTENT_LENGTH) {\n throw new Error(`Content exceeds maximum length of ${MAX_CONTENT_LENGTH} characters`);\n }\n if (tags.length > MAX_TAGS) {\n throw new Error(`Maximum ${MAX_TAGS} tags allowed`);\n }\n\n const now = new Date().toISOString();\n const entry: MemoryEntry = {\n id: generateId(),\n content,\n category,\n tags: tags.map((t) => t.toLowerCase().trim()),\n importance,\n created_at: now,\n updated_at: now,\n source_context: sourceContext,\n };\n\n const entriesPath = getEntriesPath(this.projectRoot);\n fs.appendFileSync(entriesPath, JSON.stringify(entry) + \"\\n\");\n\n this.addToIndex(entry);\n this.config.memory_count++;\n this.saveConfig();\n\n return entry;\n }\n\n list(\n category?: MemoryCategory,\n tags?: string[],\n importance?: Importance,\n limit = 20,\n offset = 0,\n ): { entries: MemoryEntry[]; total: number } {\n let entries = this.readAllEntries();\n\n if (category) {\n entries = entries.filter((e) => e.category === category);\n }\n if (tags && tags.length > 0) {\n const lowerTags = tags.map((t) => t.toLowerCase());\n entries = entries.filter((e) => lowerTags.some((t) => e.tags.includes(t)));\n }\n if (importance) {\n entries = entries.filter((e) => e.importance === importance);\n }\n\n entries.sort((a, b) => b.created_at.localeCompare(a.created_at));\n const total = entries.length;\n\n return {\n entries: entries.slice(offset, offset + limit),\n total,\n };\n }\n\n search(\n query: string,\n category?: MemoryCategory,\n limit = 10,\n ): MemoryEntry[] {\n const index = this.readIndex();\n const queryTokens = tokenize(query);\n\n if (queryTokens.length === 0) {\n return this.list(category, undefined, undefined, limit).entries;\n }\n\n const scores = new Map<string, number>();\n for (const token of queryTokens) {\n const ids = index.word_index[token] ?? [];\n for (const id of ids) {\n scores.set(id, (scores.get(id) ?? 0) + 1);\n }\n }\n\n let entries = this.readAllEntries();\n if (category) {\n entries = entries.filter((e) => e.category === category);\n }\n\n const entryMap = new Map(entries.map((e) => [e.id, e]));\n\n return Array.from(scores.entries())\n .filter(([id]) => entryMap.has(id))\n .sort((a, b) => {\n if (b[1] !== a[1]) return b[1] - a[1];\n const ea = entryMap.get(a[0])!;\n const eb = entryMap.get(b[0])!;\n return eb.created_at.localeCompare(ea.created_at);\n })\n .slice(0, limit)\n .map(([id]) => entryMap.get(id)!)\n .filter(Boolean);\n }\n\n delete(memoryId: string): boolean {\n const entries = this.readAllEntries();\n const filtered = entries.filter((e) => e.id !== memoryId);\n\n if (filtered.length === entries.length) {\n return false;\n }\n\n const entriesPath = getEntriesPath(this.projectRoot);\n fs.writeFileSync(entriesPath, filtered.map((e) => JSON.stringify(e)).join(\"\\n\") + (filtered.length > 0 ? \"\\n\" : \"\"));\n\n this.rebuildIndex(filtered);\n this.config.memory_count = filtered.length;\n this.saveConfig();\n\n return true;\n }\n\n suggestSkillCreation(): {\n memory_count: number;\n category_breakdown: Record<string, number>;\n coverage_analysis: string[];\n recommendation: string;\n ready: boolean;\n } {\n const entries = this.readAllEntries();\n const breakdown: Record<string, number> = {};\n for (const entry of entries) {\n breakdown[entry.category] = (breakdown[entry.category] ?? 0) + 1;\n }\n\n const coverage: string[] = [];\n const highImportance = entries.filter((e) => e.importance === \"high\").length;\n\n if (entries.length >= 10) coverage.push(\"Sufficient memory volume (10+)\");\n else coverage.push(`Low memory volume (${entries.length}/10 minimum recommended)`);\n\n if (Object.keys(breakdown).length >= 3) coverage.push(\"Good category diversity\");\n else coverage.push(\"Limited category diversity - consider adding more categories\");\n\n if (highImportance >= 3) coverage.push(\"Has high-importance entries for core knowledge\");\n else coverage.push(\"Few high-importance entries - mark key decisions as high importance\");\n\n const hasDocs = entries.some(\n (e) => e.category === \"architecture\" || e.category === \"convention\" || e.category === \"workflow\",\n );\n if (hasDocs) coverage.push(\"Contains structural knowledge (architecture/conventions/workflows)\");\n else coverage.push(\"Missing structural knowledge - add architecture or convention entries\");\n\n const ready = entries.length >= 5 && Object.keys(breakdown).length >= 2;\n const recommendation = ready\n ? \"Your memories are ready for skill creation. Use inflectiv_create_skill to synthesize them into a reusable skill document.\"\n : \"Continue accumulating memories across more categories before creating a skill.\";\n\n return {\n memory_count: entries.length,\n category_breakdown: breakdown,\n coverage_analysis: coverage,\n recommendation,\n ready,\n };\n }\n\n getConfig(): ProjectConfig {\n return { ...this.config };\n }\n\n updateSyncTime(): void {\n this.config.last_sync_at = new Date().toISOString();\n this.saveConfig();\n }\n\n readAllEntries(): MemoryEntry[] {\n const entriesPath = getEntriesPath(this.projectRoot);\n if (!fs.existsSync(entriesPath)) return [];\n\n const content = fs.readFileSync(entriesPath, \"utf-8\").trim();\n if (!content) return [];\n\n return content\n .split(\"\\n\")\n .filter(Boolean)\n .map((line) => JSON.parse(line) as MemoryEntry);\n }\n\n private readIndex(): MemoryIndex {\n const indexPath = getIndexPath(this.projectRoot);\n if (!fs.existsSync(indexPath)) {\n return { version: 1, tag_index: {}, category_index: {}, word_index: {} };\n }\n return JSON.parse(fs.readFileSync(indexPath, \"utf-8\")) as MemoryIndex;\n }\n\n private addToIndex(entry: MemoryEntry): void {\n const index = this.readIndex();\n\n for (const tag of entry.tags) {\n if (!index.tag_index[tag]) index.tag_index[tag] = [];\n index.tag_index[tag].push(entry.id);\n }\n\n if (!index.category_index[entry.category]) index.category_index[entry.category] = [];\n index.category_index[entry.category].push(entry.id);\n\n const words = tokenize(entry.content);\n for (const word of words) {\n if (!index.word_index[word]) index.word_index[word] = [];\n if (!index.word_index[word].includes(entry.id)) {\n index.word_index[word].push(entry.id);\n }\n }\n\n fs.writeFileSync(getIndexPath(this.projectRoot), JSON.stringify(index));\n }\n\n private rebuildIndex(entries: MemoryEntry[]): void {\n const index: MemoryIndex = { version: 1, tag_index: {}, category_index: {}, word_index: {} };\n\n for (const entry of entries) {\n for (const tag of entry.tags) {\n if (!index.tag_index[tag]) index.tag_index[tag] = [];\n index.tag_index[tag].push(entry.id);\n }\n\n if (!index.category_index[entry.category]) index.category_index[entry.category] = [];\n index.category_index[entry.category].push(entry.id);\n\n const words = tokenize(entry.content);\n for (const word of words) {\n if (!index.word_index[word]) index.word_index[word] = [];\n if (!index.word_index[word].includes(entry.id)) {\n index.word_index[word].push(entry.id);\n }\n }\n }\n\n fs.writeFileSync(getIndexPath(this.projectRoot), JSON.stringify(index));\n }\n\n private saveConfig(): void {\n const configPath = getConfigPath(this.projectRoot);\n fs.writeFileSync(configPath, JSON.stringify(this.config, null, 2));\n }\n}\n","import * as fs from \"node:fs\";\nimport * as path from \"node:path\";\nimport type { McpServer } from \"@modelcontextprotocol/sdk/server/mcp.js\";\nimport { z } from \"zod\";\nimport type { InflectivClient } from \"../client.js\";\nimport { formatError } from \"../errors.js\";\nimport { MemoryStore } from \"../memory/memory-store.js\";\n\nexport function registerSkillTools(server: McpServer, client: InflectivClient): void {\n server.tool(\n \"inflectiv_create_skill\",\n \"Synthesize local memories into a reusable skill document and upload to Inflectiv. Costs 5 credits. Requires a global API key (inf_global_*).\",\n {\n name: z.string().min(1).max(255).describe(\"Skill name\"),\n description: z.string().max(1000).optional().describe(\"Skill description\"),\n domain: z.string().max(100).optional().describe(\"Domain (e.g., 'react', 'python', 'devops')\"),\n tags: z.array(z.string()).max(20).optional().describe(\"Tags for discovery\"),\n synthesized_content: z\n .string()\n .min(10)\n .max(100000)\n .describe(\"The synthesized skill document (Markdown). The agent should compose this from local memories.\"),\n create_dataset: z.boolean().optional().describe(\"Create a backing dataset for RAG (default: true)\"),\n memory_ids: z.array(z.string()).optional().describe(\"Specific memory IDs to include (default: all)\"),\n agent_id: z.number().optional().describe(\"Auto-attach skill to this agent\"),\n },\n async (params) => {\n try {\n // Read local memories to include in the request\n let memories: Array<Record<string, unknown>> = [];\n try {\n const store = new MemoryStore();\n let entries = store.readAllEntries();\n if (params.memory_ids && params.memory_ids.length > 0) {\n const ids = new Set(params.memory_ids);\n entries = entries.filter((e) => ids.has(e.id));\n }\n memories = entries.map((e) => ({\n content: e.content,\n category: e.category,\n tags: e.tags,\n importance: e.importance,\n source_context: e.source_context,\n }));\n } catch {\n // No local memories available, proceed without\n }\n\n const body: Record<string, unknown> = {\n name: params.name,\n synthesized_content: params.synthesized_content,\n create_dataset: params.create_dataset ?? true,\n memories,\n };\n if (params.description) body.description = params.description;\n if (params.domain) body.domain = params.domain;\n if (params.tags) body.tags = params.tags;\n if (params.agent_id) body.agent_id = params.agent_id;\n\n try {\n const store = new MemoryStore();\n body.source_project_name = store.projectName;\n } catch {\n // ignore\n }\n\n const data = await client.post(`${client.pathPrefix}/ext/skills/create`, body);\n\n // Update local sync time\n try {\n const store = new MemoryStore();\n store.updateSyncTime();\n } catch {\n // ignore\n }\n\n return {\n content: [{ type: \"text\", text: JSON.stringify(data, null, 2) }],\n };\n } catch (err) {\n return formatError(err);\n }\n },\n );\n\n server.tool(\n \"inflectiv_apply_skill\",\n \"Apply a skill to an agent. Injects the skill document into the agent's system prompt and optionally attaches the skill's dataset. Costs 2 credits.\",\n {\n skill_id: z.number().describe(\"Skill ID to apply\"),\n agent_id: z.number().describe(\"Agent ID to apply the skill to\"),\n inject_as_prompt: z.boolean().optional().describe(\"Inject skill as system prompt context (default: true)\"),\n attach_dataset: z.boolean().optional().describe(\"Attach skill's dataset for RAG (default: true)\"),\n },\n async (params) => {\n try {\n const data = await client.post(\n `${client.pathPrefix}/ext/skills/${params.skill_id}/apply`,\n {\n agent_id: params.agent_id,\n inject_as_prompt: params.inject_as_prompt ?? true,\n attach_dataset: params.attach_dataset ?? true,\n },\n );\n return {\n content: [{ type: \"text\", text: JSON.stringify(data, null, 2) }],\n };\n } catch (err) {\n return formatError(err);\n }\n },\n );\n\n server.tool(\n \"inflectiv_list_skills\",\n \"List your skills (owned and acquired). Free.\",\n {},\n async () => {\n try {\n const data = await client.get(`${client.pathPrefix}/ext/skills/`);\n return {\n content: [{ type: \"text\", text: JSON.stringify(data, null, 2) }],\n };\n } catch (err) {\n return formatError(err);\n }\n },\n );\n\n server.tool(\n \"inflectiv_scan_skill_security\",\n \"Preview security scan on skill content before creating. Runs passes 1-4 (secrets, PII, prompt injection, metadata) and returns findings WITHOUT spending credits. Free.\",\n {\n synthesized_content: z\n .string()\n .min(1)\n .max(100000)\n .describe(\"The skill content to scan\"),\n },\n async (params) => {\n try {\n const data = await client.post(\n `${client.pathPrefix}/ext/skills/scan-security`,\n { synthesized_content: params.synthesized_content },\n );\n return {\n content: [{ type: \"text\", text: JSON.stringify(data, null, 2) }],\n };\n } catch (err) {\n return formatError(err);\n }\n },\n );\n\n server.tool(\n \"inflectiv_use_skill\",\n \"Load a skill's content into the current Claude Code session. For free/owned skills, content can also be installed permanently. For paid acquired skills, content is loaded ephemerally (session-only, not saved to disk). Free — no credits.\",\n {\n skill_id: z.number().describe(\"Skill ID to use\"),\n },\n async (params) => {\n try {\n const data = await client.get<{\n name: string;\n content: string;\n access_type: string;\n can_persist: boolean;\n }>(`${client.pathPrefix}/ext/skills/${params.skill_id}/use`);\n\n let instructions = `# Skill: ${data.name}\\n\\n${data.content}`;\n if (!data.can_persist) {\n instructions +=\n \"\\n\\n---\\n_This is a paid skill. Content is for this session only and must not be saved to disk or redistributed._\";\n } else {\n instructions +=\n `\\n\\n---\\n_This skill can be permanently installed using \\`inflectiv_install_skill\\` (skill_id: ${params.skill_id})._`;\n }\n\n return {\n content: [{ type: \"text\" as const, text: instructions }],\n };\n } catch (err) {\n return formatError(err);\n }\n },\n );\n\n server.tool(\n \"inflectiv_install_skill\",\n \"Install a skill as a Claude Code slash command (.claude/commands/<name>.md). Only works for owned or free acquired skills — paid skills cannot be installed locally to protect creator IP. Free — no credits.\",\n {\n skill_id: z.number().describe(\"Skill ID to install\"),\n command_name: z\n .string()\n .max(50)\n .optional()\n .describe(\"Custom slash command name (default: skill name slugified)\"),\n },\n async (params) => {\n try {\n const data = await client.get<{\n name: string;\n content: string;\n can_persist: boolean;\n }>(`${client.pathPrefix}/ext/skills/${params.skill_id}/use`);\n\n if (!data.can_persist) {\n return {\n content: [\n {\n type: \"text\" as const,\n text: \"Cannot install this skill locally — it is a paid acquired skill. Use `inflectiv_use_skill` to load it ephemerally for this session instead.\",\n },\n ],\n };\n }\n\n const cmdName =\n params.command_name ||\n data.name\n .toLowerCase()\n .replace(/[^a-z0-9]+/g, \"-\")\n .replace(/^-|-$/g, \"\");\n\n let projectRoot: string;\n try {\n const store = new MemoryStore();\n projectRoot = store.root;\n } catch {\n projectRoot = process.cwd();\n }\n\n const commandsDir = path.join(projectRoot, \".claude\", \"commands\");\n if (!fs.existsSync(commandsDir)) {\n fs.mkdirSync(commandsDir, { recursive: true });\n }\n\n const filePath = path.join(commandsDir, `${cmdName}.md`);\n fs.writeFileSync(filePath, data.content);\n\n return {\n content: [\n {\n type: \"text\" as const,\n text: `Skill installed as Claude Code command: /${cmdName}\\n\\nFile: ${filePath}\\n\\nYou can now use /${cmdName} in any Claude Code session in this project.`,\n },\n ],\n };\n } catch (err) {\n return formatError(err);\n }\n },\n );\n}\n","import { McpServer } from \"@modelcontextprotocol/sdk/server/mcp.js\";\nimport { z } from \"zod\";\nimport { InflectivClient } from \"../client.js\";\nimport { formatError } from \"../errors.js\";\n\nconst VALID_EVENTS = [\n \"intelligence.processed\",\n \"intelligence.failed\",\n \"intelligence.deduped\",\n \"dataset.mode_changed\",\n] as const;\n\nexport function registerWebhookTools(\n server: McpServer,\n client: InflectivClient,\n) {\n server.tool(\n \"inflectiv_register_webhook\",\n `Register a webhook to receive event notifications. URL must use HTTPS. Valid events: ${VALID_EVENTS.join(\", \")}. Max 10 webhooks per user. Free.`,\n {\n url: z\n .string()\n .url()\n .startsWith(\"https://\", \"Webhook URL must use HTTPS\")\n .min(10)\n .max(2000)\n .describe(\"HTTPS webhook endpoint URL\"),\n events: z\n .array(z.enum(VALID_EVENTS))\n .min(1)\n .describe(\"Events to subscribe to\"),\n description: z\n .string()\n .max(500)\n .optional()\n .describe(\"Webhook description\"),\n },\n async (params) => {\n try {\n const data = await client.post(`${client.pathPrefix}/ext/webhooks/`, params);\n return {\n content: [{ type: \"text\", text: JSON.stringify(data, null, 2) }],\n };\n } catch (err) {\n return formatError(err);\n }\n },\n );\n\n server.tool(\n \"inflectiv_list_webhooks\",\n \"List all registered webhooks. Free.\",\n {},\n async () => {\n try {\n const data = await client.get(`${client.pathPrefix}/ext/webhooks/`);\n return {\n content: [{ type: \"text\", text: JSON.stringify(data, null, 2) }],\n };\n } catch (err) {\n return formatError(err);\n }\n },\n );\n\n server.tool(\n \"inflectiv_test_webhook\",\n \"Send a test event to a registered webhook to verify it's receiving payloads. Free.\",\n {\n webhook_id: z.number().int().describe(\"Webhook ID to test\"),\n },\n async ({ webhook_id }) => {\n try {\n const data = await client.post(\n `${client.pathPrefix}/ext/webhooks/${webhook_id}/test`,\n );\n return {\n content: [{ type: \"text\", text: JSON.stringify(data, null, 2) }],\n };\n } catch (err) {\n return formatError(err);\n }\n },\n );\n}\n","export type MemoryCategory =\n | \"decision\"\n | \"constraint\"\n | \"workflow\"\n | \"architecture\"\n | \"gotcha\"\n | \"preference\"\n | \"convention\"\n | \"dependency\"\n | \"todo\"\n | \"general\";\n\nexport const MEMORY_CATEGORIES: MemoryCategory[] = [\n \"decision\",\n \"constraint\",\n \"workflow\",\n \"architecture\",\n \"gotcha\",\n \"preference\",\n \"convention\",\n \"dependency\",\n \"todo\",\n \"general\",\n];\n\nexport type Importance = \"low\" | \"medium\" | \"high\";\n\nexport interface MemoryEntry {\n id: string;\n content: string;\n category: MemoryCategory;\n tags: string[];\n importance: Importance;\n created_at: string;\n updated_at: string;\n source_context?: string;\n}\n\nexport interface ProjectConfig {\n project_id: string;\n project_name: string;\n created_at: string;\n memory_count: number;\n last_sync_at?: string;\n}\n\nexport interface MemoryIndex {\n version: 1;\n tag_index: Record<string, string[]>;\n category_index: Record<string, string[]>;\n word_index: Record<string, string[]>;\n}\n","import type { McpServer } from \"@modelcontextprotocol/sdk/server/mcp.js\";\nimport { z } from \"zod\";\nimport { MemoryStore } from \"../memory/memory-store.js\";\nimport { MEMORY_CATEGORIES } from \"../memory/types.js\";\n\nlet store: MemoryStore | null = null;\n\nfunction getStore(): MemoryStore {\n if (!store) {\n store = new MemoryStore();\n }\n return store;\n}\n\nexport function registerMemoryTools(server: McpServer): void {\n server.tool(\n \"inflectiv_write_memory\",\n \"Write a memory entry to the local project memory (.inflectiv/memory/). Free — local only, no API call.\",\n {\n content: z.string().min(1).max(10000).describe(\"Memory content (max 10,000 chars)\"),\n category: z.enum(MEMORY_CATEGORIES as [string, ...string[]]).describe(\n \"Category: decision, constraint, workflow, architecture, gotcha, preference, convention, dependency, todo, general\",\n ),\n tags: z.array(z.string()).max(10).optional().describe(\"Up to 10 tags for filtering\"),\n importance: z.enum([\"low\", \"medium\", \"high\"]).optional().describe(\"Importance level (default: medium)\"),\n source_context: z.string().optional().describe(\"What prompted this memory (file path, topic)\"),\n },\n async (params) => {\n try {\n const s = getStore();\n const entry = s.write(\n params.content,\n params.category as any,\n params.tags ?? [],\n (params.importance as any) ?? \"medium\",\n params.source_context,\n );\n return {\n content: [\n {\n type: \"text\",\n text: JSON.stringify(\n {\n status: \"saved\",\n memory_id: entry.id,\n project: s.projectName,\n total_memories: s.memoryCount,\n category: entry.category,\n tags: entry.tags,\n },\n null,\n 2,\n ),\n },\n ],\n };\n } catch (err) {\n return {\n content: [{ type: \"text\", text: `Error writing memory: ${err instanceof Error ? err.message : String(err)}` }],\n isError: true,\n };\n }\n },\n );\n\n server.tool(\n \"inflectiv_list_memories\",\n \"List local project memories with optional filters. Free — local only.\",\n {\n category: z.enum(MEMORY_CATEGORIES as [string, ...string[]]).optional().describe(\"Filter by category\"),\n tags: z.array(z.string()).optional().describe(\"Filter by tags (OR match)\"),\n importance: z.enum([\"low\", \"medium\", \"high\"]).optional().describe(\"Filter by importance\"),\n limit: z.number().min(1).max(100).optional().describe(\"Max entries to return (default: 20)\"),\n offset: z.number().min(0).optional().describe(\"Offset for pagination\"),\n },\n async (params) => {\n try {\n const s = getStore();\n const result = s.list(\n params.category as any,\n params.tags,\n params.importance as any,\n params.limit ?? 20,\n params.offset ?? 0,\n );\n return {\n content: [\n {\n type: \"text\",\n text: JSON.stringify(\n {\n project: s.projectName,\n total: result.total,\n returned: result.entries.length,\n entries: result.entries,\n },\n null,\n 2,\n ),\n },\n ],\n };\n } catch (err) {\n return {\n content: [{ type: \"text\", text: `Error listing memories: ${err instanceof Error ? err.message : String(err)}` }],\n isError: true,\n };\n }\n },\n );\n\n server.tool(\n \"inflectiv_search_memories\",\n \"Keyword search over local project memories. Free — local only.\",\n {\n query: z.string().min(1).describe(\"Search query\"),\n category: z.enum(MEMORY_CATEGORIES as [string, ...string[]]).optional().describe(\"Filter by category\"),\n limit: z.number().min(1).max(50).optional().describe(\"Max results (default: 10)\"),\n },\n async (params) => {\n try {\n const s = getStore();\n const results = s.search(params.query, params.category as any, params.limit ?? 10);\n return {\n content: [\n {\n type: \"text\",\n text: JSON.stringify(\n {\n project: s.projectName,\n query: params.query,\n results_count: results.length,\n results,\n },\n null,\n 2,\n ),\n },\n ],\n };\n } catch (err) {\n return {\n content: [\n { type: \"text\", text: `Error searching memories: ${err instanceof Error ? err.message : String(err)}` },\n ],\n isError: true,\n };\n }\n },\n );\n\n server.tool(\n \"inflectiv_delete_memory\",\n \"Delete a memory entry by ID. Free — local only.\",\n {\n memory_id: z.string().describe(\"ID of the memory entry to delete\"),\n },\n async (params) => {\n try {\n const s = getStore();\n const deleted = s.delete(params.memory_id);\n if (!deleted) {\n return {\n content: [{ type: \"text\", text: `Memory entry '${params.memory_id}' not found.` }],\n isError: true,\n };\n }\n return {\n content: [\n {\n type: \"text\",\n text: JSON.stringify(\n {\n status: \"deleted\",\n memory_id: params.memory_id,\n remaining_memories: s.memoryCount,\n },\n null,\n 2,\n ),\n },\n ],\n };\n } catch (err) {\n return {\n content: [\n { type: \"text\", text: `Error deleting memory: ${err instanceof Error ? err.message : String(err)}` },\n ],\n isError: true,\n };\n }\n },\n );\n\n server.tool(\n \"inflectiv_suggest_skill_creation\",\n \"Analyze local memories and recommend if they're ready for skill creation. Free — local only.\",\n {},\n async () => {\n try {\n const s = getStore();\n const analysis = s.suggestSkillCreation();\n return {\n content: [\n {\n type: \"text\",\n text: JSON.stringify(\n { project: s.projectName, ...analysis },\n null,\n 2,\n ),\n },\n ],\n };\n } catch (err) {\n return {\n content: [{ type: \"text\", text: `Error analyzing memories: ${err instanceof Error ? err.message : String(err)}` }],\n isError: true,\n };\n }\n },\n );\n}\n","import { McpServer } from \"@modelcontextprotocol/sdk/server/mcp.js\";\n\nexport function registerResources(server: McpServer) {\n server.resource(\n \"docs-overview\",\n \"inflectiv://docs/overview\",\n {\n description: \"Inflectiv API overview — authentication, base URL, credit system\",\n mimeType: \"text/markdown\",\n },\n async () => ({\n contents: [\n {\n uri: \"inflectiv://docs/overview\",\n mimeType: \"text/markdown\",\n text: OVERVIEW_DOC,\n },\n ],\n }),\n );\n\n server.resource(\n \"docs-webhook-events\",\n \"inflectiv://docs/webhook-events\",\n {\n description: \"Webhook event types and payload schemas\",\n mimeType: \"text/markdown\",\n },\n async () => ({\n contents: [\n {\n uri: \"inflectiv://docs/webhook-events\",\n mimeType: \"text/markdown\",\n text: WEBHOOK_EVENTS_DOC,\n },\n ],\n }),\n );\n\n server.resource(\n \"docs-credit-costs\",\n \"inflectiv://docs/credit-costs\",\n {\n description: \"Credit cost table for all API operations\",\n mimeType: \"text/markdown\",\n },\n async () => ({\n contents: [\n {\n uri: \"inflectiv://docs/credit-costs\",\n mimeType: \"text/markdown\",\n text: CREDIT_COSTS_DOC,\n },\n ],\n }),\n );\n}\n\nconst OVERVIEW_DOC = `# Inflectiv API Overview\n\n## Authentication\nAll requests require an API key passed via the \\`X-API-Key\\` header.\nAPI keys have the prefix \\`inf_\\` and are scoped to a single dataset.\n\n## Base URL\nProduction (via Next.js proxy):\n\\`\\`\\`\nhttps://app.inflectiv.ai/api/platform/ext/\n\\`\\`\\`\nLocal development:\n\\`\\`\\`\nhttp://localhost:18001/api/v2/ext/\n\\`\\`\\`\n\n## Concepts\n\n### Agents\nAI chatbots trained on your data. Each agent can have datasets attached for RAG-enabled conversations.\n\n### Datasets\nCollections of knowledge sources (files, intelligence entries) that agents use to answer questions.\nEach API key is scoped to one dataset.\n\n### Intelligence\nProgrammatic knowledge entries written directly to a dataset. Useful for syncing external data.\nDuplicates are automatically detected and cost 0 credits.\n\n### Files\nDocuments uploaded to a dataset. Supported formats: PDF, DOCX, TXT, MD, HTML, CSV, JSON, JSONL, TSV, XLSX, XLS, Parquet, XML.\nFiles are chunked and embedded automatically.\n\n### Webhooks\nHTTPS endpoints that receive event notifications (e.g., when intelligence is processed).\n\n## Credit System\nMost operations cost credits. Free-tier operations include listing resources and managing webhooks.\nSee the credit-costs resource for a full breakdown.\n\n## Getting Started\n1. Get an API key from the Inflectiv dashboard (Settings > API Keys)\n2. Use \\`inflectiv_list_datasets\\` to see your scoped dataset\n3. Use \\`inflectiv_list_agents\\` to see agents attached to the dataset\n4. Upload files or write intelligence to add knowledge\n5. Chat with agents using \\`inflectiv_chat_with_agent\\`\n`;\n\nconst WEBHOOK_EVENTS_DOC = `# Webhook Events\n\n## Available Events\n\n### \\`intelligence.processed\\`\nFired when an intelligence entry has been successfully embedded and indexed.\n\\`\\`\\`json\n{\n \"event\": \"intelligence.processed\",\n \"timestamp\": \"2025-01-01T00:00:00Z\",\n \"data\": {\n \"intelligence_id\": 123,\n \"dataset_id\": 456,\n \"title\": \"Entry title\",\n \"status\": \"processed\"\n }\n}\n\\`\\`\\`\n\n### \\`intelligence.failed\\`\nFired when intelligence processing fails.\n\\`\\`\\`json\n{\n \"event\": \"intelligence.failed\",\n \"timestamp\": \"2025-01-01T00:00:00Z\",\n \"data\": {\n \"intelligence_id\": 123,\n \"dataset_id\": 456,\n \"title\": \"Entry title\",\n \"status\": \"failed\",\n \"error\": \"Processing error message\"\n }\n}\n\\`\\`\\`\n\n### \\`intelligence.deduped\\`\nFired when a duplicate intelligence entry is detected and skipped.\n\\`\\`\\`json\n{\n \"event\": \"intelligence.deduped\",\n \"timestamp\": \"2025-01-01T00:00:00Z\",\n \"data\": {\n \"intelligence_id\": 123,\n \"dataset_id\": 456,\n \"title\": \"Entry title\",\n \"status\": \"deduped\"\n }\n}\n\\`\\`\\`\n\n### \\`dataset.mode_changed\\`\nFired when a dataset's mode is changed on an agent.\n\\`\\`\\`json\n{\n \"event\": \"dataset.mode_changed\",\n \"timestamp\": \"2025-01-01T00:00:00Z\",\n \"data\": {\n \"agent_id\": 789,\n \"dataset_id\": 456,\n \"old_mode\": \"read_only\",\n \"new_mode\": \"self_learning\"\n }\n}\n\\`\\`\\`\n\n## Webhook Security\nEach webhook receives a unique \\`secret\\` upon creation. Use this to verify payload signatures.\nThe secret is only returned once during creation — store it securely.\n`;\n\nconst CREDIT_COSTS_DOC = `# Credit Costs\n\n| Operation | Tool | Credits |\n|-----------|------|---------|\n| List agents | \\`inflectiv_list_agents\\` | Free |\n| Create agent | \\`inflectiv_create_agent\\` | 5 |\n| Get agent | \\`inflectiv_get_agent\\` | Free |\n| Update agent config | \\`inflectiv_update_agent_config\\` | 2 |\n| Chat with agent | \\`inflectiv_chat_with_agent\\` | 1 |\n| List agent datasets | \\`inflectiv_list_agent_datasets\\` | Free |\n| Attach dataset | \\`inflectiv_attach_dataset\\` | Free |\n| Update dataset mode | \\`inflectiv_update_dataset_mode\\` | Free |\n| List datasets | \\`inflectiv_list_datasets\\` | Free |\n| Update dataset | \\`inflectiv_update_dataset\\` | Free |\n| Reindex dataset | \\`inflectiv_reindex_dataset\\` | 2 |\n| Search dataset | \\`inflectiv_search_dataset\\` | 1 |\n| Batch search | \\`inflectiv_batch_search\\` | 1 per query |\n| Write intelligence | \\`inflectiv_write_intelligence\\` | 1 (0 if dup) |\n| Batch write intelligence | \\`inflectiv_batch_write_intelligence\\` | 1 per new entry |\n| List intelligence | \\`inflectiv_list_intelligence\\` | Free |\n| List files | \\`inflectiv_list_files\\` | Free |\n| Get file | \\`inflectiv_get_file\\` | Free |\n| Upload file | \\`inflectiv_upload_file\\` | 5 base + 1/MB over 5MB |\n| Reprocess file | \\`inflectiv_reprocess_file\\` | 5 |\n| Register webhook | \\`inflectiv_register_webhook\\` | Free |\n| List webhooks | \\`inflectiv_list_webhooks\\` | Free |\n| Test webhook | \\`inflectiv_test_webhook\\` | Free |\n`;\n","import { McpServer } from \"@modelcontextprotocol/sdk/server/mcp.js\";\nimport { InflectivClient } from \"./client.js\";\nimport {\n registerAgentTools,\n registerDatasetTools,\n registerFileTools,\n registerKnowledgeSourceTools,\n registerMarketplaceTools,\n registerMemoryTools,\n registerSkillTools,\n registerWebhookTools,\n} from \"./tools/index.js\";\nimport { registerResources } from \"./resources/index.js\";\n\nexport function createServer(): McpServer {\n const apiKey = process.env.INFLECTIV_API_KEY || null;\n const walletKey = process.env.INFLECTIV_WALLET_PRIVATE_KEY;\n\n if (!apiKey && !walletKey) {\n console.error(\n \"Error: Either INFLECTIV_API_KEY or INFLECTIV_WALLET_PRIVATE_KEY is required.\\n\" +\n \"Get your API key from https://app.inflectiv.ai (Settings > API Keys).\\n\" +\n \"Or set INFLECTIV_WALLET_PRIVATE_KEY for X402 crypto payments.\",\n );\n process.exit(1);\n }\n\n const baseUrl = process.env.INFLECTIV_BASE_URL;\n const client = new InflectivClient(apiKey, baseUrl);\n\n const server = new McpServer({\n name: \"inflectiv\",\n version: \"0.1.0\",\n });\n\n registerAgentTools(server, client);\n registerDatasetTools(server, client);\n registerFileTools(server, client);\n registerKnowledgeSourceTools(server, client);\n registerSkillTools(server, client);\n registerMarketplaceTools(server, client);\n registerWebhookTools(server, client);\n registerMemoryTools(server);\n registerResources(server);\n\n return server;\n}\n","import { StdioServerTransport } from \"@modelcontextprotocol/sdk/server/stdio.js\";\nimport { createServer } from \"./server.js\";\n\nasync function main() {\n const server = createServer();\n const transport = new StdioServerTransport();\n await server.connect(transport);\n}\n\nmain().catch((err) => {\n console.error(\"Fatal error:\", err);\n process.exit(1);\n});\n"]}
|
package/package.json
CHANGED