@copass/management
Advanced tools
| { | ||
| "input": { | ||
| "data_source_id": "ds_01HXYZAB1234567890123ABCDE", | ||
| "delete_source": false | ||
| }, | ||
| "output": { | ||
| "success": true, | ||
| "delete_source_applied": false, | ||
| "events_deleted": 42, | ||
| "extractions_deleted": 10, | ||
| "canonical_index_rows_deleted": 3, | ||
| "entity_vectors_deleted": 120, | ||
| "triggers_deleted": 0, | ||
| "webhooks_deleted": 0, | ||
| "event_seen_deleted": 0, | ||
| "project_links_deleted": 1, | ||
| "strategy_artifacts_deleted": 0, | ||
| "pull_artifacts_deleted": 0, | ||
| "user_strategies_deleted": 0, | ||
| "vault_objects_deleted": 5 | ||
| } | ||
| } |
| { | ||
| "$schema": "https://json-schema.org/draft/2020-12/schema", | ||
| "name": "purge_source_context", | ||
| "description": "Remove ingested knowledge attributed to a data source: graph events and related rows, vectors, and sandbox-scoped binary objects stored under that source prefix. Does not remove the source registration unless delete_source is true. Use when content was ingested into the wrong sandbox or you need a clean slate for that source without destroying the sandbox.", | ||
| "inputSchema": { | ||
| "type": "object", | ||
| "required": ["data_source_id"], | ||
| "properties": { | ||
| "data_source_id": { | ||
| "type": "string", | ||
| "description": "UUID of the data source whose attributed knowledge should be removed." | ||
| }, | ||
| "delete_source": { | ||
| "type": "boolean", | ||
| "description": "When true, delete the data source registration after purging (same as the DELETE source route)." | ||
| } | ||
| }, | ||
| "additionalProperties": false | ||
| }, | ||
| "outputSchema": { | ||
| "type": "object", | ||
| "properties": { | ||
| "success": { "type": "boolean" }, | ||
| "delete_source_applied": { "type": "boolean" }, | ||
| "events_deleted": { "type": "integer" }, | ||
| "extractions_deleted": { "type": "integer" }, | ||
| "canonical_index_rows_deleted": { "type": "integer" }, | ||
| "entity_vectors_deleted": { "type": "integer" }, | ||
| "triggers_deleted": { "type": "integer" }, | ||
| "webhooks_deleted": { "type": "integer" }, | ||
| "event_seen_deleted": { "type": "integer" }, | ||
| "project_links_deleted": { "type": "integer" }, | ||
| "strategy_artifacts_deleted": { "type": "integer" }, | ||
| "pull_artifacts_deleted": { "type": "integer" }, | ||
| "user_strategies_deleted": { "type": "integer" }, | ||
| "vault_objects_deleted": { "type": "integer" } | ||
| }, | ||
| "additionalProperties": true | ||
| }, | ||
| "since": "v1.3" | ||
| } |
@@ -524,2 +524,11 @@ "use strict"; | ||
| // src/tools/purge_source_context.ts | ||
| var purgeSourceContext = async (ctx, input) => { | ||
| const sourceId = String(input.data_source_id); | ||
| const deleteSource = typeof input.delete_source === "boolean" ? input.delete_source : void 0; | ||
| return ctx.client.sources.purge(ctx.sandboxId, sourceId, { | ||
| ...deleteSource !== void 0 ? { delete_source: deleteSource } : {} | ||
| }); | ||
| }; | ||
| // src/tools/resume_trigger.ts | ||
@@ -730,2 +739,3 @@ var resumeTrigger = async (ctx, input) => { | ||
| provision_source: provisionSource, | ||
| purge_source_context: purgeSourceContext, | ||
| update_source: updateSource, | ||
@@ -732,0 +742,0 @@ start_integration_connect: startIntegrationConnect, |
+10
-0
@@ -509,2 +509,11 @@ // ../../node_modules/.pnpm/tsup@8.5.1_postcss@8.5.10_tsx@4.21.0_typescript@5.9.3_yaml@2.8.3/node_modules/tsup/assets/esm_shims.js | ||
| // src/tools/purge_source_context.ts | ||
| var purgeSourceContext = async (ctx, input) => { | ||
| const sourceId = String(input.data_source_id); | ||
| const deleteSource = typeof input.delete_source === "boolean" ? input.delete_source : void 0; | ||
| return ctx.client.sources.purge(ctx.sandboxId, sourceId, { | ||
| ...deleteSource !== void 0 ? { delete_source: deleteSource } : {} | ||
| }); | ||
| }; | ||
| // src/tools/resume_trigger.ts | ||
@@ -715,2 +724,3 @@ var resumeTrigger = async (ctx, input) => { | ||
| provision_source: provisionSource, | ||
| purge_source_context: purgeSourceContext, | ||
| update_source: updateSource, | ||
@@ -717,0 +727,0 @@ start_integration_connect: startIntegrationConnect, |
+10
-0
@@ -530,2 +530,11 @@ "use strict"; | ||
| // src/tools/purge_source_context.ts | ||
| var purgeSourceContext = async (ctx, input) => { | ||
| const sourceId = String(input.data_source_id); | ||
| const deleteSource = typeof input.delete_source === "boolean" ? input.delete_source : void 0; | ||
| return ctx.client.sources.purge(ctx.sandboxId, sourceId, { | ||
| ...deleteSource !== void 0 ? { delete_source: deleteSource } : {} | ||
| }); | ||
| }; | ||
| // src/tools/resume_trigger.ts | ||
@@ -736,2 +745,3 @@ var resumeTrigger = async (ctx, input) => { | ||
| provision_source: provisionSource, | ||
| purge_source_context: purgeSourceContext, | ||
| update_source: updateSource, | ||
@@ -738,0 +748,0 @@ start_integration_connect: startIntegrationConnect, |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"sources":["../src/index.ts","../src/json-schema-to-zod.ts","../src/specs.ts","../src/tools/add_user_mcp_source.ts","../src/tools/connect_linear.ts","../src/tools/create_agent.ts","../src/tools/create_trigger.ts","../src/tools/get_agent.ts","../src/tools/get_run_trace.ts","../src/tools/get_source.ts","../src/tools/grant_sandbox_connection.ts","../src/tools/list_agent_tools.ts","../src/tools/list_agents.ts","../src/tools/list_api_keys.ts","../src/tools/list_apps.ts","../src/tools/list_connected_accounts.ts","../src/tools/list_runs.ts","../src/tools/list_sandbox_connections.ts","../src/tools/list_sandboxes.ts","../src/tools/list_sources.ts","../src/tools/list_trigger_components.ts","../src/tools/list_triggers.ts","../src/tools/pause_trigger.ts","../src/tools/provision_source.ts","../src/tools/resume_trigger.ts","../src/tools/revoke_sandbox_connection.ts","../src/tools/revoke_user_mcp_source.ts","../src/tools/start_integration_connect.ts","../src/tools/test_user_mcp_source.ts","../src/tools/update_agent_model_settings.ts","../src/tools/update_agent_prompt.ts","../src/tools/update_agent_tool_sources.ts","../src/tools/update_agent_tools.ts","../src/tools/update_source.ts","../src/tools/update_trigger.ts","../src/tools/wire_integration_to_agent.ts","../src/tools/index.ts","../src/registrar.ts"],"sourcesContent":["export {\n registerManagementTools,\n type Register,\n type RegistrarOptions,\n type ToolContext,\n type ToolHandler,\n type ToolRegistration,\n} from './registrar.js';\nexport {\n loadManagementSpecs,\n MIN_SPEC_VERSION,\n MAX_SPEC_VERSION,\n type LoadOptions,\n type LoadedManagementCorpus,\n type ManagementFixture,\n type ManagementSpec,\n} from './specs.js';\nexport { jsonSchemaToZod } from './json-schema-to-zod.js';\nexport { TOOL_HANDLERS } from './tools/index.js';\n","import { z, type ZodTypeAny } from 'zod';\n\ntype Schema = Record<string, unknown> & { type?: string | string[] };\n\nfunction describeIfPresent(node: ZodTypeAny, schema: Schema): ZodTypeAny {\n const description = schema.description;\n if (typeof description === 'string' && description.length > 0) {\n return node.describe(description);\n }\n return node;\n}\n\nfunction asArray<T>(value: T | T[] | undefined): T[] {\n if (value === undefined) return [];\n return Array.isArray(value) ? value : [value];\n}\n\nfunction buildScalarForType(type: string): ZodTypeAny {\n switch (type) {\n case 'string':\n return z.string();\n case 'integer':\n return z.number().int();\n case 'number':\n return z.number();\n case 'boolean':\n return z.boolean();\n case 'null':\n return z.null();\n case 'array':\n return z.array(z.unknown());\n case 'object':\n return z.record(z.string(), z.unknown());\n default:\n return z.unknown();\n }\n}\n\nfunction applyStringConstraints(schema: Schema, base: ZodTypeAny): ZodTypeAny {\n if ((schema.type === 'string' || (Array.isArray(schema.type) && schema.type.includes('string'))) && schema.format === 'date-time') {\n // Permissive: accept any string. JSON Schema's date-time is just a hint.\n return base;\n }\n return base;\n}\n\nfunction buildEnum(schema: Schema): ZodTypeAny | undefined {\n const enumValues = schema.enum as unknown[] | undefined;\n if (!enumValues || !Array.isArray(enumValues) || enumValues.length === 0) return undefined;\n const literals: ZodTypeAny[] = enumValues.map((value) => {\n if (value === null) return z.null();\n if (typeof value === 'string') return z.literal(value);\n if (typeof value === 'number') return z.literal(value);\n if (typeof value === 'boolean') return z.literal(value);\n return z.literal(value as never);\n });\n if (literals.length === 1) return literals[0];\n return z.union(literals as unknown as [ZodTypeAny, ZodTypeAny, ...ZodTypeAny[]]);\n}\n\nfunction buildForType(schema: Schema, type: string): ZodTypeAny {\n if (type === 'array') {\n const items = (schema.items as Schema | undefined) ?? {};\n return z.array(jsonSchemaToZod(items));\n }\n if (type === 'object') {\n const properties = (schema.properties as Record<string, Schema> | undefined) ?? {};\n const required = new Set(asArray(schema.required as string | string[] | undefined));\n const shape: Record<string, ZodTypeAny> = {};\n for (const [key, subSchema] of Object.entries(properties)) {\n const sub = jsonSchemaToZod(subSchema);\n shape[key] = required.has(key) ? sub : sub.optional();\n }\n let obj: ZodTypeAny;\n const additional = schema.additionalProperties;\n if (additional === false) {\n obj = z.strictObject(shape);\n } else if (additional && typeof additional === 'object') {\n obj = z.object(shape).catchall(jsonSchemaToZod(additional as Schema));\n } else {\n // additionalProperties is true / unspecified — be permissive\n obj = z.object(shape).catchall(z.unknown());\n }\n return obj;\n }\n return applyStringConstraints(schema, buildScalarForType(type));\n}\n\nfunction buildSchemaUntyped(schema: Schema): ZodTypeAny {\n const enumZ = buildEnum(schema);\n if (enumZ) return enumZ;\n\n if (Array.isArray(schema.oneOf)) {\n const variants = (schema.oneOf as Schema[]).map((s) => jsonSchemaToZod(s));\n if (variants.length === 1) return variants[0];\n return z.union(variants as unknown as [ZodTypeAny, ZodTypeAny, ...ZodTypeAny[]]);\n }\n\n if (Array.isArray(schema.anyOf)) {\n const variants = (schema.anyOf as Schema[]).map((s) => jsonSchemaToZod(s));\n if (variants.length === 1) return variants[0];\n return z.union(variants as unknown as [ZodTypeAny, ZodTypeAny, ...ZodTypeAny[]]);\n }\n\n const types = asArray(schema.type as string | string[] | undefined);\n\n if (types.length === 0) {\n if (schema.properties || schema.additionalProperties !== undefined) {\n return buildForType(schema, 'object');\n }\n return z.unknown();\n }\n\n if (types.length === 1) {\n return buildForType(schema, types[0]);\n }\n\n // Multi-type union, e.g. [\"string\", \"null\"] or [\"object\", \"null\"].\n const variants = types.map((t) => buildForType(schema, t));\n return z.union(variants as [ZodTypeAny, ZodTypeAny, ...ZodTypeAny[]]);\n}\n\nexport function jsonSchemaToZod(schema: Schema): ZodTypeAny {\n if (!schema || typeof schema !== 'object') return z.unknown();\n return describeIfPresent(buildSchemaUntyped(schema), schema);\n}\n","import { readFileSync, readdirSync, existsSync, statSync } from 'node:fs';\nimport { join, resolve } from 'node:path';\n\n// `__dirname` is provided by tsup's `shims: true` in both the ESM and\n// CJS bundles (see tsup.config.ts). In CJS it's a Node built-in; in ESM\n// it's emitted by esbuild as `dirname(fileURLToPath(import.meta.url))`.\n// Either way, `__dirname` resolves to the directory of the running\n// bundle file, so we don't need format-conditional logic.\ndeclare const __dirname: string;\n\n// Walk up from `start` looking for a directory whose `<sub>` subdir\n// exists. Returns the resolved subdir or null. Used to locate either\n// the bundled `dist/specs/v1` (whose anchor varies between the two\n// tsup entry points — `dist/` for `index.{js,cjs}`, `dist/adapters/`\n// for `adapters/mcp.{js,cjs}`) or the dev-mode source-tree\n// `spec/management/v1` from the harness root.\nfunction findUpwards(start: string, sub: string[], maxDepth = 8): string | null {\n let here = start;\n for (let depth = 0; depth < maxDepth; depth++) {\n const candidate = resolve(here, ...sub);\n if (existsSync(candidate) && statSync(candidate).isDirectory()) {\n return candidate;\n }\n const parent = resolve(here, '..');\n if (parent === here) return null;\n here = parent;\n }\n return null;\n}\n\nexport const MIN_SPEC_VERSION = 'v1';\nexport const MAX_SPEC_VERSION = 'v1';\n\nexport interface ManagementSpec {\n name: string;\n description: string;\n inputSchema: Record<string, unknown>;\n outputSchema: Record<string, unknown>;\n since: string;\n}\n\nexport interface ManagementFixture {\n input: Record<string, unknown>;\n output: Record<string, unknown>;\n}\n\nexport interface LoadedManagementCorpus {\n specDir: string;\n specs: Record<string, ManagementSpec>;\n fixtures: Record<string, ManagementFixture>;\n}\n\nexport interface LoadOptions {\n specDir?: string;\n}\n\nconst ENV_OVERRIDE = 'COPASS_MANAGEMENT_SPEC_DIR';\n\nfunction resolveDefaultSpecDir(): string {\n const envDir = process.env[ENV_OVERRIDE];\n if (envDir && envDir.trim().length > 0) {\n return resolve(envDir);\n }\n\n // Production: bundled specs at `<package-root>/dist/specs/v1`. Search\n // upward from `__dirname` since the entry-point bundle file may be at\n // either `dist/index.{js,cjs}` (one level up) or\n // `dist/adapters/mcp.{js,cjs}` (two levels up).\n const bundled = findUpwards(__dirname, ['specs', 'v1']);\n if (bundled) return bundled;\n\n // Dev fallback: source-tree specs at `<harness-root>/spec/management/v1`.\n const sourceTree = findUpwards(__dirname, ['spec', 'management', 'v1']);\n if (sourceTree) return sourceTree;\n\n throw new Error(\n `loadManagementSpecs: could not locate spec directory. Searched upward from ${__dirname} for both \\`specs/v1\\` (bundled) and \\`spec/management/v1\\` (source). Set ${ENV_OVERRIDE} to override.`,\n );\n}\n\nfunction assertSpecShape(name: string, raw: unknown): asserts raw is ManagementSpec {\n if (!raw || typeof raw !== 'object') {\n throw new Error(`spec ${name}: not an object`);\n }\n const obj = raw as Record<string, unknown>;\n for (const required of ['name', 'description', 'inputSchema', 'outputSchema', 'since']) {\n if (!(required in obj)) {\n throw new Error(`spec ${name}: missing required field \"${required}\"`);\n }\n }\n if (typeof obj.name !== 'string' || typeof obj.description !== 'string') {\n throw new Error(`spec ${name}: name/description must be strings`);\n }\n if (typeof obj.since !== 'string') {\n throw new Error(`spec ${name}: since must be a string`);\n }\n if (typeof obj.inputSchema !== 'object' || typeof obj.outputSchema !== 'object') {\n throw new Error(`spec ${name}: inputSchema/outputSchema must be objects`);\n }\n}\n\nconst JSON_SCHEMA_META_KEYS = new Set([\n '$schema',\n '$id',\n '$defs',\n '$ref',\n '$comment',\n]);\n\nfunction stripJsonSchemaMeta(value: unknown): unknown {\n if (Array.isArray(value)) {\n return value.map(stripJsonSchemaMeta);\n }\n if (value && typeof value === 'object') {\n const out: Record<string, unknown> = {};\n for (const [k, v] of Object.entries(value as Record<string, unknown>)) {\n if (JSON_SCHEMA_META_KEYS.has(k)) continue;\n out[k] = stripJsonSchemaMeta(v);\n }\n return out;\n }\n return value;\n}\n\nfunction readJson(path: string): unknown {\n return JSON.parse(readFileSync(path, 'utf-8'));\n}\n\n/**\n * Load every `<tool>.json` and matching `examples/<tool>.example.json`\n * fixture from the management spec directory.\n *\n * Resolution order for `specDir`:\n * 1. Explicit option, when passed\n * 2. `COPASS_MANAGEMENT_SPEC_DIR` env override\n * 3. Bundled `dist/specs/v1/`\n * 4. Source-tree `copass/spec/management/v1/` (dev mode)\n */\nexport function loadManagementSpecs(options: LoadOptions = {}): LoadedManagementCorpus {\n const specDir = options.specDir ? resolve(options.specDir) : resolveDefaultSpecDir();\n\n if (!existsSync(specDir) || !statSync(specDir).isDirectory()) {\n throw new Error(`loadManagementSpecs: ${specDir} is not a directory`);\n }\n\n const specs: Record<string, ManagementSpec> = {};\n for (const entry of readdirSync(specDir)) {\n if (!entry.endsWith('.json')) continue;\n const file = join(specDir, entry);\n if (!statSync(file).isFile()) continue;\n const raw = readJson(file);\n assertSpecShape(entry, raw);\n const cleaned: ManagementSpec = {\n ...raw,\n inputSchema: stripJsonSchemaMeta(raw.inputSchema) as Record<string, unknown>,\n outputSchema: stripJsonSchemaMeta(raw.outputSchema) as Record<string, unknown>,\n };\n specs[cleaned.name] = cleaned;\n }\n\n const fixtures: Record<string, ManagementFixture> = {};\n const examplesDir = join(specDir, 'examples');\n if (existsSync(examplesDir) && statSync(examplesDir).isDirectory()) {\n for (const entry of readdirSync(examplesDir)) {\n if (!entry.endsWith('.example.json')) continue;\n const toolName = entry.slice(0, -'.example.json'.length);\n const file = join(examplesDir, entry);\n const raw = readJson(file) as Record<string, unknown>;\n if (!raw || typeof raw !== 'object' || !('input' in raw) || !('output' in raw)) {\n throw new Error(`fixture ${entry}: must have \"input\" and \"output\" keys`);\n }\n fixtures[toolName] = raw as unknown as ManagementFixture;\n }\n }\n\n return { specDir, specs, fixtures };\n}\n","import type { ToolContext, ToolHandler } from '../registrar.js';\n\ntype RegisterUserMcpRequest = Parameters<\n ToolContext['client']['sources']['registerUserMcp']\n>[1];\n\nexport const addUserMcpSource: ToolHandler = async (\n ctx: ToolContext,\n input: Record<string, unknown>,\n) => {\n const authKind = String(input.auth_kind) as RegisterUserMcpRequest['auth_kind'];\n const request: RegisterUserMcpRequest = {\n name: String(input.name),\n base_url: String(input.base_url),\n auth_kind: authKind,\n };\n if (typeof input.token === 'string') {\n request.token = input.token;\n }\n if (typeof input.auth_header === 'string') {\n request.auth_header = input.auth_header;\n }\n if (typeof input.app_namespace === 'string') {\n request.app_namespace = input.app_namespace;\n }\n if (Array.isArray(input.allowed_tools)) {\n request.allowed_tools = input.allowed_tools.map(String);\n }\n if (Array.isArray(input.ingest_tool_calls)) {\n request.ingest_tool_calls = input.ingest_tool_calls as Array<\n Record<string, unknown>\n >;\n }\n if (typeof input.rate_cap_per_minute === 'number') {\n request.rate_cap_per_minute = input.rate_cap_per_minute;\n }\n if (typeof input.webhook_rate_cap_per_minute === 'number') {\n request.webhook_rate_cap_per_minute = input.webhook_rate_cap_per_minute;\n }\n return ctx.client.sources.registerUserMcp(ctx.sandboxId, request);\n};\n","import type { ToolContext, ToolHandler } from '../registrar.js';\n\ntype ConnectLinearRequest = Parameters<\n ToolContext['client']['sources']['connectLinear']\n>[1];\n\nexport const connectLinear: ToolHandler = async (\n ctx: ToolContext,\n input: Record<string, unknown>,\n) => {\n const request: ConnectLinearRequest = {\n api_key: String(input.api_key),\n };\n if (typeof input.name === 'string') {\n request.name = input.name;\n }\n if (Array.isArray(input.include)) {\n request.include = input.include.map(String) as ConnectLinearRequest['include'];\n }\n if (typeof input.rate_cap_per_minute === 'number') {\n request.rate_cap_per_minute = input.rate_cap_per_minute;\n }\n if (typeof input.poll_interval_seconds === 'number') {\n request.poll_interval_seconds = input.poll_interval_seconds;\n }\n return ctx.client.sources.connectLinear(ctx.sandboxId, request);\n};\n","import {\n DEFAULT_MODEL_BY_BACKEND,\n type AgentBackend,\n type AgentModelSettings,\n type CreateAgentRequest,\n} from '@copass/core';\n\nimport type { ToolContext, ToolHandler } from '../registrar.js';\n\nexport const createAgent: ToolHandler = async (\n ctx: ToolContext,\n input: Record<string, unknown>,\n) => {\n const backend: AgentBackend =\n input.backend === 'google' ? 'google' : 'anthropic';\n const defaultModel = DEFAULT_MODEL_BY_BACKEND[backend];\n\n const modelSettings: AgentModelSettings = {\n backend,\n model: typeof input.model === 'string' ? input.model : defaultModel,\n };\n if (typeof input.temperature === 'number') {\n modelSettings.temperature = input.temperature;\n }\n if (typeof input.max_tokens === 'number') {\n modelSettings.max_tokens = input.max_tokens;\n }\n if (typeof input.max_turns === 'number') {\n modelSettings.max_turns = input.max_turns;\n }\n if (typeof input.timeout_s === 'number') {\n modelSettings.timeout_s = input.timeout_s;\n }\n\n const request: CreateAgentRequest = {\n slug: String(input.slug),\n name: String(input.name),\n system_prompt: String(input.system_prompt),\n model_settings: modelSettings,\n };\n if (typeof input.description === 'string') {\n request.description = input.description;\n }\n if (Array.isArray(input.tool_allowlist)) {\n request.tool_allowlist = input.tool_allowlist.map(String);\n }\n\n const agent = await ctx.client.agents.create(ctx.sandboxId, request);\n return { agent };\n};\n","import type { CreateTriggerRequest } from '@copass/core';\n\nimport type { ToolContext, ToolHandler } from '../registrar.js';\n\nexport const createTrigger: ToolHandler = async (\n ctx: ToolContext,\n input: Record<string, unknown>,\n) => {\n const agentSlug = String(input.agent_slug);\n const dataSourceId = String(input.data_source_id);\n const eventType =\n typeof input.event_type_filter === 'string' && input.event_type_filter.length > 0\n ? input.event_type_filter\n : '*';\n const request: CreateTriggerRequest = {\n data_source_id: dataSourceId,\n event_type_filter: eventType,\n };\n if (\n typeof input.filter_config === 'object' &&\n input.filter_config !== null\n ) {\n request.filter_config = input.filter_config as Record<string, unknown>;\n }\n if (typeof input.rate_limit_per_hour === 'number') {\n request.rate_limit_per_hour = input.rate_limit_per_hour;\n }\n const trigger = await ctx.client.agents.triggers.create(\n ctx.sandboxId,\n agentSlug,\n request,\n );\n return { trigger };\n};\n","import type { ToolContext, ToolHandler } from '../registrar.js';\n\nexport const getAgent: ToolHandler = async (\n ctx: ToolContext,\n input: Record<string, unknown>,\n) => {\n const slug = String(input.slug);\n return ctx.client.agents.retrieve(ctx.sandboxId, slug);\n};\n","import type { ToolContext, ToolHandler } from '../registrar.js';\n\nexport const getRunTrace: ToolHandler = async (\n ctx: ToolContext,\n input: Record<string, unknown>,\n) => {\n const runId = String(input.run_id);\n return ctx.client.agents.getRun(ctx.sandboxId, runId);\n};\n","import type { ToolContext, ToolHandler } from '../registrar.js';\n\nexport const getSource: ToolHandler = async (\n ctx: ToolContext,\n input: Record<string, unknown>,\n) => {\n const dataSourceId = String(input.data_source_id);\n return ctx.client.sources.retrieve(ctx.sandboxId, dataSourceId);\n};\n","import type {\n ConnectionRole,\n CreateSandboxConnectionRequest,\n} from '@copass/core';\n\nimport type { ToolContext, ToolHandler } from '../registrar.js';\n\nexport const grantSandboxConnection: ToolHandler = async (\n ctx: ToolContext,\n input: Record<string, unknown>,\n) => {\n const role = String(input.role) as ConnectionRole;\n const request: CreateSandboxConnectionRequest = { role };\n if (typeof input.copass_id === 'string') {\n request.copass_id = input.copass_id;\n }\n if (typeof input.user_id === 'string') {\n request.user_id = input.user_id;\n }\n if (typeof input.project_id === 'string') {\n request.project_id = input.project_id;\n }\n if (typeof input.label === 'string') {\n request.label = input.label;\n }\n if (typeof input.expires_at === 'string') {\n request.expires_at = input.expires_at;\n }\n return ctx.client.sandboxConnections.create(ctx.sandboxId, request);\n};\n","import type { ToolContext, ToolHandler } from '../registrar.js';\n\n/**\n * Surfaces the agent tool catalog grouped by app_slug.\n *\n * The backend returns the flat ``{tools, count}`` shape; this handler\n * adds the ``by_app`` map the spec promises (``{[app_slug]: Tool[]}``)\n * so callers can render per-provider sections without re-grouping\n * client-side. Optional ``app_slug`` input filters the flat list AND\n * the by_app map to a single provider.\n */\nexport const listAgentTools: ToolHandler = async (\n ctx: ToolContext,\n input: Record<string, unknown>,\n) => {\n const filterAppSlug =\n typeof input.app_slug === 'string' ? input.app_slug : undefined;\n\n const catalog = await ctx.client.agents.listTools(ctx.sandboxId);\n const tools = filterAppSlug\n ? catalog.tools.filter((t) => t.app_slug === filterAppSlug)\n : catalog.tools;\n\n const by_app: Record<\n string,\n Array<{ name: string; description?: string | null }>\n > = {};\n for (const tool of tools) {\n const slug = tool.app_slug || 'unknown';\n if (!by_app[slug]) by_app[slug] = [];\n by_app[slug].push({ name: tool.name, description: tool.description ?? null });\n }\n\n return { tools, by_app, count: tools.length };\n};\n","import type { ToolContext, ToolHandler } from '../registrar.js';\n\nexport const listAgents: ToolHandler = async (\n ctx: ToolContext,\n input: Record<string, unknown>,\n) => {\n return ctx.client.agents.list(ctx.sandboxId, {\n status:\n input.status === 'active' || input.status === 'archived'\n ? input.status\n : undefined,\n });\n};\n","import type { ToolContext, ToolHandler } from '../registrar.js';\n\nexport const listApiKeys: ToolHandler = async (ctx: ToolContext) => {\n // The core resource returns a flat list — wrap into the shape the spec\n // declares (`{ keys, count }`). Filtering by `kinds` / `include_revoked`\n // is server-side once the API exposes those query params; today we\n // surface the inventory and let the caller filter post-hoc.\n const keys = await ctx.client.apiKeys.list();\n return { keys, count: Array.isArray(keys) ? keys.length : 0 };\n};\n","import type { ToolContext, ToolHandler } from '../registrar.js';\n\nexport const listApps: ToolHandler = async (\n ctx: ToolContext,\n input: Record<string, unknown>,\n) => {\n return ctx.client.integrations.catalog(ctx.sandboxId, {\n q: typeof input.q === 'string' ? input.q : undefined,\n cursor: typeof input.cursor === 'string' ? input.cursor : undefined,\n limit: typeof input.limit === 'number' ? input.limit : undefined,\n });\n};\n","import type { ToolContext, ToolHandler } from '../registrar.js';\n\nexport const listConnectedAccounts: ToolHandler = async (\n ctx: ToolContext,\n input: Record<string, unknown>,\n) => {\n return ctx.client.integrations.listAccounts(ctx.sandboxId, {\n app_slug: typeof input.app_slug === 'string' ? input.app_slug : undefined,\n });\n};\n","import type { ToolContext, ToolHandler } from '../registrar.js';\n\nexport const listRuns: ToolHandler = async (\n ctx: ToolContext,\n input: Record<string, unknown>,\n) => {\n const slug = String(input.agent_slug);\n const limit = typeof input.limit === 'number' ? input.limit : undefined;\n return ctx.client.agents.listRuns(ctx.sandboxId, slug, { limit });\n};\n","import type { ToolContext, ToolHandler } from '../registrar.js';\n\n/**\n * Wraps the bare-array SDK response in the ``{connections, count}``\n * envelope the spec requires. MCP's ``structuredContent`` rejects\n * bare arrays — every list-style tool must return an object.\n */\nexport const listSandboxConnections: ToolHandler = async (\n ctx: ToolContext,\n input: Record<string, unknown>,\n) => {\n const connections = await ctx.client.sandboxConnections.list(ctx.sandboxId, {\n include_revoked: input.include_revoked === true,\n });\n return { connections, count: connections.length };\n};\n","import type { ToolContext, ToolHandler } from '../registrar.js';\n\nexport const listSandboxes: ToolHandler = async (ctx: ToolContext) => {\n return ctx.client.sandboxes.list();\n};\n","import type { ToolContext, ToolHandler } from '../registrar.js';\n\nexport const listSources: ToolHandler = async (\n ctx: ToolContext,\n input: Record<string, unknown>,\n) => {\n return ctx.client.sources.list(ctx.sandboxId, {\n provider: typeof input.provider === 'string' ? input.provider : undefined,\n });\n};\n","import type { ToolContext, ToolHandler } from '../registrar.js';\n\nexport const listTriggerComponents: ToolHandler = async (\n ctx: ToolContext,\n input: Record<string, unknown>,\n) => {\n return ctx.client.agents.listTriggerComponents(ctx.sandboxId, {\n app: typeof input.app === 'string' ? input.app : undefined,\n q: typeof input.q === 'string' ? input.q : undefined,\n limit: typeof input.limit === 'number' ? input.limit : undefined,\n });\n};\n","import type { ToolContext, ToolHandler } from '../registrar.js';\n\nexport const listTriggers: ToolHandler = async (\n ctx: ToolContext,\n input: Record<string, unknown>,\n) => {\n const slug = String(input.agent_slug);\n return ctx.client.agents.triggers.list(ctx.sandboxId, slug);\n};\n","import type { ToolContext, ToolHandler } from '../registrar.js';\n\nexport const pauseTrigger: ToolHandler = async (\n ctx: ToolContext,\n input: Record<string, unknown>,\n) => {\n const triggerId = String(input.trigger_id);\n const trigger = await ctx.client.agents.triggers.updateById(\n ctx.sandboxId,\n triggerId,\n { status: 'paused' },\n );\n return { trigger };\n};\n","import type { CreateDataSourceRequest, DataSourceIngestionMode, DataSourceKind } from '@copass/core';\n\nimport type { ToolContext, ToolHandler } from '../registrar.js';\n\nexport const provisionSource: ToolHandler = async (\n ctx: ToolContext,\n input: Record<string, unknown>,\n) => {\n const adapterConfig: Record<string, unknown> =\n typeof input.adapter_config === 'object' && input.adapter_config !== null\n ? { ...(input.adapter_config as Record<string, unknown>) }\n : {};\n if (input.ingest_to_graph === true) {\n adapterConfig.ingest_to_graph = true;\n }\n\n const request: CreateDataSourceRequest = {\n provider: typeof input.provider === 'string' ? input.provider : 'pipedream',\n name: String(input.name),\n };\n if (typeof input.ingestion_mode === 'string') {\n request.ingestion_mode = input.ingestion_mode as DataSourceIngestionMode;\n }\n if (input.kind === 'durable' || input.kind === 'ephemeral') {\n request.kind = input.kind as DataSourceKind;\n }\n if (typeof input.external_account_id === 'string') {\n request.external_account_id = input.external_account_id;\n }\n if (typeof input.poll_interval_seconds === 'number') {\n request.poll_interval_seconds = input.poll_interval_seconds;\n }\n if (Object.keys(adapterConfig).length > 0) {\n request.adapter_config = adapterConfig;\n }\n\n const source = await ctx.client.sources.register(ctx.sandboxId, request);\n return { source };\n};\n","import type { ToolContext, ToolHandler } from '../registrar.js';\n\nexport const resumeTrigger: ToolHandler = async (\n ctx: ToolContext,\n input: Record<string, unknown>,\n) => {\n const triggerId = String(input.trigger_id);\n const trigger = await ctx.client.agents.triggers.updateById(\n ctx.sandboxId,\n triggerId,\n { status: 'active' },\n );\n return { trigger };\n};\n","import type { ToolContext, ToolHandler } from '../registrar.js';\n\nexport const revokeSandboxConnection: ToolHandler = async (\n ctx: ToolContext,\n input: Record<string, unknown>,\n) => {\n const connectionId = String(input.connection_id);\n return ctx.client.sandboxConnections.revoke(ctx.sandboxId, connectionId);\n};\n","import type { ToolContext, ToolHandler } from '../registrar.js';\n\nexport const revokeUserMcpSource: ToolHandler = async (\n ctx: ToolContext,\n input: Record<string, unknown>,\n) => {\n const sourceId = String(input.data_source_id);\n return ctx.client.sources.revokeUserMcp(ctx.sandboxId, sourceId);\n};\n","import type { ConnectRequest } from '@copass/core';\n\nimport type { ToolContext, ToolHandler } from '../registrar.js';\n\nexport const startIntegrationConnect: ToolHandler = async (\n ctx: ToolContext,\n input: Record<string, unknown>,\n) => {\n const appSlug = String(input.app_slug);\n const successRedirect =\n typeof input.success_redirect_uri === 'string'\n ? input.success_redirect_uri\n : '';\n const errorRedirect =\n typeof input.error_redirect_uri === 'string'\n ? input.error_redirect_uri\n : '';\n const request: ConnectRequest = {\n success_redirect_uri: successRedirect,\n error_redirect_uri: errorRedirect,\n };\n if (typeof input.webhook_uri === 'string') {\n request.webhook_uri = input.webhook_uri;\n }\n return ctx.client.integrations.connect(ctx.sandboxId, appSlug, request);\n};\n","import type { ToolContext, ToolHandler } from '../registrar.js';\n\nexport const testUserMcpSource: ToolHandler = async (\n ctx: ToolContext,\n input: Record<string, unknown>,\n) => {\n const sourceId = String(input.data_source_id);\n return ctx.client.sources.testUserMcp(ctx.sandboxId, sourceId);\n};\n","import type { ToolContext, ToolHandler } from '../registrar.js';\n\nexport const updateAgentModelSettings: ToolHandler = async (\n ctx: ToolContext,\n input: Record<string, unknown>,\n) => {\n const slug = String(input.slug);\n const patch: Record<string, unknown> = {};\n if (input.backend === 'anthropic' || input.backend === 'google') {\n patch.backend = input.backend;\n }\n if (typeof input.model === 'string') {\n patch.model = input.model;\n }\n if (typeof input.temperature === 'number') {\n patch.temperature = input.temperature;\n }\n if (typeof input.max_tokens === 'number') {\n patch.max_tokens = input.max_tokens;\n }\n if (typeof input.max_turns === 'number') {\n patch.max_turns = input.max_turns;\n }\n if (typeof input.timeout_s === 'number') {\n patch.timeout_s = input.timeout_s;\n }\n const agent = await ctx.client.agents.updateModelSettings(\n ctx.sandboxId,\n slug,\n patch as Parameters<typeof ctx.client.agents.updateModelSettings>[2],\n );\n return { agent };\n};\n","import type { ToolContext, ToolHandler } from '../registrar.js';\n\nexport const updateAgentPrompt: ToolHandler = async (\n ctx: ToolContext,\n input: Record<string, unknown>,\n) => {\n const slug = String(input.slug);\n const agent = await ctx.client.agents.update(ctx.sandboxId, slug, {\n system_prompt: String(input.system_prompt),\n });\n return { agent };\n};\n","import type { ToolContext, ToolHandler } from '../registrar.js';\n\nexport const updateAgentToolSources: ToolHandler = async (\n ctx: ToolContext,\n input: Record<string, unknown>,\n) => {\n const slug = String(input.slug);\n const raw = input.tool_sources;\n const toolSources: string[] | null =\n raw === null\n ? null\n : Array.isArray(raw)\n ? raw.map(String)\n : null;\n const agent = await ctx.client.agents.updateToolSources(\n ctx.sandboxId,\n slug,\n toolSources,\n );\n return { agent };\n};\n","import type { ToolContext, ToolHandler } from '../registrar.js';\n\nexport const updateAgentTools: ToolHandler = async (\n ctx: ToolContext,\n input: Record<string, unknown>,\n) => {\n const slug = String(input.slug);\n const toolAllowlist = Array.isArray(input.tool_allowlist)\n ? input.tool_allowlist.map(String)\n : [];\n const agent = await ctx.client.agents.update(ctx.sandboxId, slug, {\n tool_allowlist: toolAllowlist,\n });\n return { agent };\n};\n","import type {\n DataSourceIngestionMode,\n UpdateDataSourceRequest,\n} from '@copass/core';\n\nimport type { ToolContext, ToolHandler } from '../registrar.js';\n\nexport const updateSource: ToolHandler = async (\n ctx: ToolContext,\n input: Record<string, unknown>,\n) => {\n const sourceId = String(input.data_source_id);\n const updates: UpdateDataSourceRequest = {};\n if (typeof input.name === 'string') {\n updates.name = input.name;\n }\n if (typeof input.ingestion_mode === 'string') {\n updates.ingestion_mode = input.ingestion_mode as DataSourceIngestionMode;\n }\n if (typeof input.external_account_id === 'string') {\n updates.external_account_id = input.external_account_id;\n }\n if (typeof input.poll_interval_seconds === 'number') {\n updates.poll_interval_seconds = input.poll_interval_seconds;\n }\n\n let mergeAdapterConfig = false;\n let adapterConfig: Record<string, unknown> | undefined;\n if (\n typeof input.adapter_config === 'object' &&\n input.adapter_config !== null\n ) {\n adapterConfig = { ...(input.adapter_config as Record<string, unknown>) };\n }\n if (typeof input.ingest_to_graph === 'boolean') {\n adapterConfig = { ...(adapterConfig ?? {}), ingest_to_graph: input.ingest_to_graph };\n mergeAdapterConfig = true;\n }\n if (adapterConfig !== undefined) {\n updates.adapter_config = adapterConfig;\n }\n\n const source = await ctx.client.sources.update(\n ctx.sandboxId,\n sourceId,\n updates,\n { mergeAdapterConfig },\n );\n return { source };\n};\n","import type { UpdateTriggerRequest } from '@copass/core';\n\nimport type { ToolContext, ToolHandler } from '../registrar.js';\n\nexport const updateTrigger: ToolHandler = async (\n ctx: ToolContext,\n input: Record<string, unknown>,\n) => {\n const triggerId = String(input.trigger_id);\n const patch: UpdateTriggerRequest = {};\n if (typeof input.event_type_filter === 'string') {\n patch.event_type_filter = input.event_type_filter;\n }\n if ('rate_limit_per_hour' in input) {\n const v = input.rate_limit_per_hour;\n if (v === null) {\n patch.clear_rate_limit = true;\n } else if (typeof v === 'number') {\n patch.rate_limit_per_hour = v;\n }\n }\n if ('filter_config' in input) {\n const v = input.filter_config;\n if (v === null) {\n patch.clear_filter_config = true;\n } else if (typeof v === 'object' && v !== null) {\n patch.filter_config = v as Record<string, unknown>;\n }\n }\n const trigger = await ctx.client.agents.triggers.updateById(\n ctx.sandboxId,\n triggerId,\n patch,\n );\n return { trigger };\n};\n","import type { ToolContext, ToolHandler } from '../registrar.js';\n\nexport const wireIntegrationToAgent: ToolHandler = async (\n ctx: ToolContext,\n input: Record<string, unknown>,\n) => {\n const agentSlug = String(input.agent_slug);\n const appSlug = String(input.app_slug);\n return ctx.client.agents.wireIntegration(ctx.sandboxId, agentSlug, appSlug);\n};\n","import type { ToolHandler } from '../registrar.js';\nimport { addUserMcpSource } from './add_user_mcp_source.js';\nimport { connectLinear } from './connect_linear.js';\nimport { createAgent } from './create_agent.js';\nimport { createTrigger } from './create_trigger.js';\nimport { getAgent } from './get_agent.js';\nimport { getRunTrace } from './get_run_trace.js';\nimport { getSource } from './get_source.js';\nimport { grantSandboxConnection } from './grant_sandbox_connection.js';\nimport { listAgentTools } from './list_agent_tools.js';\nimport { listAgents } from './list_agents.js';\nimport { listApiKeys } from './list_api_keys.js';\nimport { listApps } from './list_apps.js';\nimport { listConnectedAccounts } from './list_connected_accounts.js';\nimport { listRuns } from './list_runs.js';\nimport { listSandboxConnections } from './list_sandbox_connections.js';\nimport { listSandboxes } from './list_sandboxes.js';\nimport { listSources } from './list_sources.js';\nimport { listTriggerComponents } from './list_trigger_components.js';\nimport { listTriggers } from './list_triggers.js';\nimport { pauseTrigger } from './pause_trigger.js';\nimport { provisionSource } from './provision_source.js';\nimport { resumeTrigger } from './resume_trigger.js';\nimport { revokeSandboxConnection } from './revoke_sandbox_connection.js';\nimport { revokeUserMcpSource } from './revoke_user_mcp_source.js';\nimport { startIntegrationConnect } from './start_integration_connect.js';\nimport { testUserMcpSource } from './test_user_mcp_source.js';\nimport { updateAgentModelSettings } from './update_agent_model_settings.js';\nimport { updateAgentPrompt } from './update_agent_prompt.js';\nimport { updateAgentToolSources } from './update_agent_tool_sources.js';\nimport { updateAgentTools } from './update_agent_tools.js';\nimport { updateSource } from './update_source.js';\nimport { updateTrigger } from './update_trigger.js';\nimport { wireIntegrationToAgent } from './wire_integration_to_agent.js';\n\nexport const TOOL_HANDLERS: Record<string, ToolHandler> = {\n list_sandboxes: listSandboxes,\n list_sources: listSources,\n get_source: getSource,\n list_agents: listAgents,\n get_agent: getAgent,\n list_triggers: listTriggers,\n list_runs: listRuns,\n get_run_trace: getRunTrace,\n list_trigger_components: listTriggerComponents,\n list_apps: listApps,\n list_connected_accounts: listConnectedAccounts,\n list_api_keys: listApiKeys,\n list_agent_tools: listAgentTools,\n list_sandbox_connections: listSandboxConnections,\n create_agent: createAgent,\n update_agent_prompt: updateAgentPrompt,\n update_agent_tools: updateAgentTools,\n update_agent_tool_sources: updateAgentToolSources,\n update_agent_model_settings: updateAgentModelSettings,\n add_user_mcp_source: addUserMcpSource,\n wire_integration_to_agent: wireIntegrationToAgent,\n provision_source: provisionSource,\n update_source: updateSource,\n start_integration_connect: startIntegrationConnect,\n connect_linear: connectLinear,\n test_user_mcp_source: testUserMcpSource,\n revoke_user_mcp_source: revokeUserMcpSource,\n create_trigger: createTrigger,\n pause_trigger: pauseTrigger,\n resume_trigger: resumeTrigger,\n update_trigger: updateTrigger,\n grant_sandbox_connection: grantSandboxConnection,\n revoke_sandbox_connection: revokeSandboxConnection,\n};\n\nexport {\n addUserMcpSource,\n connectLinear,\n createAgent,\n createTrigger,\n getAgent,\n getRunTrace,\n getSource,\n grantSandboxConnection,\n listAgentTools,\n listAgents,\n listApiKeys,\n listApps,\n listConnectedAccounts,\n listRuns,\n listSandboxConnections,\n listSandboxes,\n listSources,\n listTriggerComponents,\n listTriggers,\n pauseTrigger,\n provisionSource,\n resumeTrigger,\n revokeSandboxConnection,\n revokeUserMcpSource,\n startIntegrationConnect,\n testUserMcpSource,\n updateAgentModelSettings,\n updateAgentPrompt,\n updateAgentToolSources,\n updateAgentTools,\n updateSource,\n updateTrigger,\n wireIntegrationToAgent,\n};\n","import type { CopassClient } from '@copass/core';\nimport type { ZodTypeAny } from 'zod';\n\nimport { jsonSchemaToZod } from './json-schema-to-zod.js';\nimport {\n loadManagementSpecs,\n type LoadOptions,\n type ManagementSpec,\n} from './specs.js';\nimport { TOOL_HANDLERS } from './tools/index.js';\n\nexport interface ToolContext {\n client: CopassClient;\n sandboxId: string;\n}\n\nexport type ToolHandler = (\n ctx: ToolContext,\n input: Record<string, unknown>,\n) => Promise<unknown>;\n\nexport interface ToolRegistration {\n name: string;\n description: string;\n /** Raw JSON Schema for the tool's input. */\n inputSchema: Record<string, unknown>;\n /** Raw JSON Schema for the tool's output. */\n outputSchema: Record<string, unknown>;\n /** Compiled Zod parser for the input. */\n inputZod: ZodTypeAny;\n /** Compiled Zod parser for the output. */\n outputZod: ZodTypeAny;\n /** Async handler that runs the call and returns the parsed result. */\n handler: (input: unknown) => Promise<unknown>;\n /** The full spec object as loaded from disk. */\n spec: ManagementSpec;\n}\n\nexport type Register = (registration: ToolRegistration) => void;\n\nexport interface RegistrarOptions extends LoadOptions {\n /** Sandbox the registered tools target. Required — every Phase 1 read tool\n * is sandbox-scoped. */\n sandboxId: string;\n /**\n * When true, validate the handler's HTTP response against the tool's\n * `outputSchema` before returning. Defaults to `false` because handlers\n * already pass through `@copass/core`-typed responses; the conformance\n * test enforces parity at build time. Enabling this adds runtime cost.\n */\n validateOutput?: boolean;\n /**\n * When true, silently skip spec entries that have no handler bound\n * in `TOOL_HANDLERS` rather than raising. Used by Phase 2A's\n * spec-only landing where the JSON Schemas + fixtures ship before\n * the per-tool TS / Python handler files (Phase 2B). Defaults to\n * `false` — production wiring should always pin every spec to a\n * handler.\n */\n allowMissingHandlers?: boolean;\n}\n\n/**\n * Transport-agnostic management-tool registrar.\n *\n * Loads the management spec corpus, builds Zod parsers for each tool's\n * input/output schema, wires every spec entry to its `@copass/core`\n * handler, and calls `register(...)` once per tool.\n *\n * The transport (MCP SDK, backend tool resolver, plain function table)\n * is the caller's concern.\n */\nexport function registerManagementTools(\n register: Register,\n client: CopassClient,\n options: RegistrarOptions,\n): ToolRegistration[] {\n const corpus = loadManagementSpecs(options);\n const ctx: ToolContext = { client, sandboxId: options.sandboxId };\n const registrations: ToolRegistration[] = [];\n\n const names = Object.keys(corpus.specs).sort();\n for (const name of names) {\n const spec = corpus.specs[name];\n const handler = TOOL_HANDLERS[name];\n if (!handler) {\n if (options.allowMissingHandlers) {\n continue;\n }\n throw new Error(\n `registerManagementTools: no handler implementation for tool \"${name}\". Add one in src/tools/.`,\n );\n }\n\n const inputZod = jsonSchemaToZod(spec.inputSchema);\n const outputZod = jsonSchemaToZod(spec.outputSchema);\n\n const wrapped = async (rawInput: unknown): Promise<unknown> => {\n const parsedInput = inputZod.parse(rawInput ?? {}) as Record<string, unknown>;\n const result = await handler(ctx, parsedInput);\n if (options.validateOutput) {\n return outputZod.parse(result);\n }\n return result;\n };\n\n const registration: ToolRegistration = {\n name: spec.name,\n description: spec.description,\n inputSchema: spec.inputSchema,\n outputSchema: spec.outputSchema,\n inputZod,\n outputZod,\n handler: wrapped,\n spec,\n };\n\n register(registration);\n registrations.push(registration);\n }\n\n return registrations;\n}\n"],"mappings":"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","names":["variants"]} | ||
| {"version":3,"sources":["../src/index.ts","../src/json-schema-to-zod.ts","../src/specs.ts","../src/tools/add_user_mcp_source.ts","../src/tools/connect_linear.ts","../src/tools/create_agent.ts","../src/tools/create_trigger.ts","../src/tools/get_agent.ts","../src/tools/get_run_trace.ts","../src/tools/get_source.ts","../src/tools/grant_sandbox_connection.ts","../src/tools/list_agent_tools.ts","../src/tools/list_agents.ts","../src/tools/list_api_keys.ts","../src/tools/list_apps.ts","../src/tools/list_connected_accounts.ts","../src/tools/list_runs.ts","../src/tools/list_sandbox_connections.ts","../src/tools/list_sandboxes.ts","../src/tools/list_sources.ts","../src/tools/list_trigger_components.ts","../src/tools/list_triggers.ts","../src/tools/pause_trigger.ts","../src/tools/provision_source.ts","../src/tools/purge_source_context.ts","../src/tools/resume_trigger.ts","../src/tools/revoke_sandbox_connection.ts","../src/tools/revoke_user_mcp_source.ts","../src/tools/start_integration_connect.ts","../src/tools/test_user_mcp_source.ts","../src/tools/update_agent_model_settings.ts","../src/tools/update_agent_prompt.ts","../src/tools/update_agent_tool_sources.ts","../src/tools/update_agent_tools.ts","../src/tools/update_source.ts","../src/tools/update_trigger.ts","../src/tools/wire_integration_to_agent.ts","../src/tools/index.ts","../src/registrar.ts"],"sourcesContent":["export {\n registerManagementTools,\n type Register,\n type RegistrarOptions,\n type ToolContext,\n type ToolHandler,\n type ToolRegistration,\n} from './registrar.js';\nexport {\n loadManagementSpecs,\n MIN_SPEC_VERSION,\n MAX_SPEC_VERSION,\n type LoadOptions,\n type LoadedManagementCorpus,\n type ManagementFixture,\n type ManagementSpec,\n} from './specs.js';\nexport { jsonSchemaToZod } from './json-schema-to-zod.js';\nexport { TOOL_HANDLERS } from './tools/index.js';\n","import { z, type ZodTypeAny } from 'zod';\n\ntype Schema = Record<string, unknown> & { type?: string | string[] };\n\nfunction describeIfPresent(node: ZodTypeAny, schema: Schema): ZodTypeAny {\n const description = schema.description;\n if (typeof description === 'string' && description.length > 0) {\n return node.describe(description);\n }\n return node;\n}\n\nfunction asArray<T>(value: T | T[] | undefined): T[] {\n if (value === undefined) return [];\n return Array.isArray(value) ? value : [value];\n}\n\nfunction buildScalarForType(type: string): ZodTypeAny {\n switch (type) {\n case 'string':\n return z.string();\n case 'integer':\n return z.number().int();\n case 'number':\n return z.number();\n case 'boolean':\n return z.boolean();\n case 'null':\n return z.null();\n case 'array':\n return z.array(z.unknown());\n case 'object':\n return z.record(z.string(), z.unknown());\n default:\n return z.unknown();\n }\n}\n\nfunction applyStringConstraints(schema: Schema, base: ZodTypeAny): ZodTypeAny {\n if ((schema.type === 'string' || (Array.isArray(schema.type) && schema.type.includes('string'))) && schema.format === 'date-time') {\n // Permissive: accept any string. JSON Schema's date-time is just a hint.\n return base;\n }\n return base;\n}\n\nfunction buildEnum(schema: Schema): ZodTypeAny | undefined {\n const enumValues = schema.enum as unknown[] | undefined;\n if (!enumValues || !Array.isArray(enumValues) || enumValues.length === 0) return undefined;\n const literals: ZodTypeAny[] = enumValues.map((value) => {\n if (value === null) return z.null();\n if (typeof value === 'string') return z.literal(value);\n if (typeof value === 'number') return z.literal(value);\n if (typeof value === 'boolean') return z.literal(value);\n return z.literal(value as never);\n });\n if (literals.length === 1) return literals[0];\n return z.union(literals as unknown as [ZodTypeAny, ZodTypeAny, ...ZodTypeAny[]]);\n}\n\nfunction buildForType(schema: Schema, type: string): ZodTypeAny {\n if (type === 'array') {\n const items = (schema.items as Schema | undefined) ?? {};\n return z.array(jsonSchemaToZod(items));\n }\n if (type === 'object') {\n const properties = (schema.properties as Record<string, Schema> | undefined) ?? {};\n const required = new Set(asArray(schema.required as string | string[] | undefined));\n const shape: Record<string, ZodTypeAny> = {};\n for (const [key, subSchema] of Object.entries(properties)) {\n const sub = jsonSchemaToZod(subSchema);\n shape[key] = required.has(key) ? sub : sub.optional();\n }\n let obj: ZodTypeAny;\n const additional = schema.additionalProperties;\n if (additional === false) {\n obj = z.strictObject(shape);\n } else if (additional && typeof additional === 'object') {\n obj = z.object(shape).catchall(jsonSchemaToZod(additional as Schema));\n } else {\n // additionalProperties is true / unspecified — be permissive\n obj = z.object(shape).catchall(z.unknown());\n }\n return obj;\n }\n return applyStringConstraints(schema, buildScalarForType(type));\n}\n\nfunction buildSchemaUntyped(schema: Schema): ZodTypeAny {\n const enumZ = buildEnum(schema);\n if (enumZ) return enumZ;\n\n if (Array.isArray(schema.oneOf)) {\n const variants = (schema.oneOf as Schema[]).map((s) => jsonSchemaToZod(s));\n if (variants.length === 1) return variants[0];\n return z.union(variants as unknown as [ZodTypeAny, ZodTypeAny, ...ZodTypeAny[]]);\n }\n\n if (Array.isArray(schema.anyOf)) {\n const variants = (schema.anyOf as Schema[]).map((s) => jsonSchemaToZod(s));\n if (variants.length === 1) return variants[0];\n return z.union(variants as unknown as [ZodTypeAny, ZodTypeAny, ...ZodTypeAny[]]);\n }\n\n const types = asArray(schema.type as string | string[] | undefined);\n\n if (types.length === 0) {\n if (schema.properties || schema.additionalProperties !== undefined) {\n return buildForType(schema, 'object');\n }\n return z.unknown();\n }\n\n if (types.length === 1) {\n return buildForType(schema, types[0]);\n }\n\n // Multi-type union, e.g. [\"string\", \"null\"] or [\"object\", \"null\"].\n const variants = types.map((t) => buildForType(schema, t));\n return z.union(variants as [ZodTypeAny, ZodTypeAny, ...ZodTypeAny[]]);\n}\n\nexport function jsonSchemaToZod(schema: Schema): ZodTypeAny {\n if (!schema || typeof schema !== 'object') return z.unknown();\n return describeIfPresent(buildSchemaUntyped(schema), schema);\n}\n","import { readFileSync, readdirSync, existsSync, statSync } from 'node:fs';\nimport { join, resolve } from 'node:path';\n\n// `__dirname` is provided by tsup's `shims: true` in both the ESM and\n// CJS bundles (see tsup.config.ts). In CJS it's a Node built-in; in ESM\n// it's emitted by esbuild as `dirname(fileURLToPath(import.meta.url))`.\n// Either way, `__dirname` resolves to the directory of the running\n// bundle file, so we don't need format-conditional logic.\ndeclare const __dirname: string;\n\n// Walk up from `start` looking for a directory whose `<sub>` subdir\n// exists. Returns the resolved subdir or null. Used to locate either\n// the bundled `dist/specs/v1` (whose anchor varies between the two\n// tsup entry points — `dist/` for `index.{js,cjs}`, `dist/adapters/`\n// for `adapters/mcp.{js,cjs}`) or the dev-mode source-tree\n// `spec/management/v1` from the harness root.\nfunction findUpwards(start: string, sub: string[], maxDepth = 8): string | null {\n let here = start;\n for (let depth = 0; depth < maxDepth; depth++) {\n const candidate = resolve(here, ...sub);\n if (existsSync(candidate) && statSync(candidate).isDirectory()) {\n return candidate;\n }\n const parent = resolve(here, '..');\n if (parent === here) return null;\n here = parent;\n }\n return null;\n}\n\nexport const MIN_SPEC_VERSION = 'v1';\nexport const MAX_SPEC_VERSION = 'v1';\n\nexport interface ManagementSpec {\n name: string;\n description: string;\n inputSchema: Record<string, unknown>;\n outputSchema: Record<string, unknown>;\n since: string;\n}\n\nexport interface ManagementFixture {\n input: Record<string, unknown>;\n output: Record<string, unknown>;\n}\n\nexport interface LoadedManagementCorpus {\n specDir: string;\n specs: Record<string, ManagementSpec>;\n fixtures: Record<string, ManagementFixture>;\n}\n\nexport interface LoadOptions {\n specDir?: string;\n}\n\nconst ENV_OVERRIDE = 'COPASS_MANAGEMENT_SPEC_DIR';\n\nfunction resolveDefaultSpecDir(): string {\n const envDir = process.env[ENV_OVERRIDE];\n if (envDir && envDir.trim().length > 0) {\n return resolve(envDir);\n }\n\n // Production: bundled specs at `<package-root>/dist/specs/v1`. Search\n // upward from `__dirname` since the entry-point bundle file may be at\n // either `dist/index.{js,cjs}` (one level up) or\n // `dist/adapters/mcp.{js,cjs}` (two levels up).\n const bundled = findUpwards(__dirname, ['specs', 'v1']);\n if (bundled) return bundled;\n\n // Dev fallback: source-tree specs at `<harness-root>/spec/management/v1`.\n const sourceTree = findUpwards(__dirname, ['spec', 'management', 'v1']);\n if (sourceTree) return sourceTree;\n\n throw new Error(\n `loadManagementSpecs: could not locate spec directory. Searched upward from ${__dirname} for both \\`specs/v1\\` (bundled) and \\`spec/management/v1\\` (source). Set ${ENV_OVERRIDE} to override.`,\n );\n}\n\nfunction assertSpecShape(name: string, raw: unknown): asserts raw is ManagementSpec {\n if (!raw || typeof raw !== 'object') {\n throw new Error(`spec ${name}: not an object`);\n }\n const obj = raw as Record<string, unknown>;\n for (const required of ['name', 'description', 'inputSchema', 'outputSchema', 'since']) {\n if (!(required in obj)) {\n throw new Error(`spec ${name}: missing required field \"${required}\"`);\n }\n }\n if (typeof obj.name !== 'string' || typeof obj.description !== 'string') {\n throw new Error(`spec ${name}: name/description must be strings`);\n }\n if (typeof obj.since !== 'string') {\n throw new Error(`spec ${name}: since must be a string`);\n }\n if (typeof obj.inputSchema !== 'object' || typeof obj.outputSchema !== 'object') {\n throw new Error(`spec ${name}: inputSchema/outputSchema must be objects`);\n }\n}\n\nconst JSON_SCHEMA_META_KEYS = new Set([\n '$schema',\n '$id',\n '$defs',\n '$ref',\n '$comment',\n]);\n\nfunction stripJsonSchemaMeta(value: unknown): unknown {\n if (Array.isArray(value)) {\n return value.map(stripJsonSchemaMeta);\n }\n if (value && typeof value === 'object') {\n const out: Record<string, unknown> = {};\n for (const [k, v] of Object.entries(value as Record<string, unknown>)) {\n if (JSON_SCHEMA_META_KEYS.has(k)) continue;\n out[k] = stripJsonSchemaMeta(v);\n }\n return out;\n }\n return value;\n}\n\nfunction readJson(path: string): unknown {\n return JSON.parse(readFileSync(path, 'utf-8'));\n}\n\n/**\n * Load every `<tool>.json` and matching `examples/<tool>.example.json`\n * fixture from the management spec directory.\n *\n * Resolution order for `specDir`:\n * 1. Explicit option, when passed\n * 2. `COPASS_MANAGEMENT_SPEC_DIR` env override\n * 3. Bundled `dist/specs/v1/`\n * 4. Source-tree `copass/spec/management/v1/` (dev mode)\n */\nexport function loadManagementSpecs(options: LoadOptions = {}): LoadedManagementCorpus {\n const specDir = options.specDir ? resolve(options.specDir) : resolveDefaultSpecDir();\n\n if (!existsSync(specDir) || !statSync(specDir).isDirectory()) {\n throw new Error(`loadManagementSpecs: ${specDir} is not a directory`);\n }\n\n const specs: Record<string, ManagementSpec> = {};\n for (const entry of readdirSync(specDir)) {\n if (!entry.endsWith('.json')) continue;\n const file = join(specDir, entry);\n if (!statSync(file).isFile()) continue;\n const raw = readJson(file);\n assertSpecShape(entry, raw);\n const cleaned: ManagementSpec = {\n ...raw,\n inputSchema: stripJsonSchemaMeta(raw.inputSchema) as Record<string, unknown>,\n outputSchema: stripJsonSchemaMeta(raw.outputSchema) as Record<string, unknown>,\n };\n specs[cleaned.name] = cleaned;\n }\n\n const fixtures: Record<string, ManagementFixture> = {};\n const examplesDir = join(specDir, 'examples');\n if (existsSync(examplesDir) && statSync(examplesDir).isDirectory()) {\n for (const entry of readdirSync(examplesDir)) {\n if (!entry.endsWith('.example.json')) continue;\n const toolName = entry.slice(0, -'.example.json'.length);\n const file = join(examplesDir, entry);\n const raw = readJson(file) as Record<string, unknown>;\n if (!raw || typeof raw !== 'object' || !('input' in raw) || !('output' in raw)) {\n throw new Error(`fixture ${entry}: must have \"input\" and \"output\" keys`);\n }\n fixtures[toolName] = raw as unknown as ManagementFixture;\n }\n }\n\n return { specDir, specs, fixtures };\n}\n","import type { ToolContext, ToolHandler } from '../registrar.js';\n\ntype RegisterUserMcpRequest = Parameters<\n ToolContext['client']['sources']['registerUserMcp']\n>[1];\n\nexport const addUserMcpSource: ToolHandler = async (\n ctx: ToolContext,\n input: Record<string, unknown>,\n) => {\n const authKind = String(input.auth_kind) as RegisterUserMcpRequest['auth_kind'];\n const request: RegisterUserMcpRequest = {\n name: String(input.name),\n base_url: String(input.base_url),\n auth_kind: authKind,\n };\n if (typeof input.token === 'string') {\n request.token = input.token;\n }\n if (typeof input.auth_header === 'string') {\n request.auth_header = input.auth_header;\n }\n if (typeof input.app_namespace === 'string') {\n request.app_namespace = input.app_namespace;\n }\n if (Array.isArray(input.allowed_tools)) {\n request.allowed_tools = input.allowed_tools.map(String);\n }\n if (Array.isArray(input.ingest_tool_calls)) {\n request.ingest_tool_calls = input.ingest_tool_calls as Array<\n Record<string, unknown>\n >;\n }\n if (typeof input.rate_cap_per_minute === 'number') {\n request.rate_cap_per_minute = input.rate_cap_per_minute;\n }\n if (typeof input.webhook_rate_cap_per_minute === 'number') {\n request.webhook_rate_cap_per_minute = input.webhook_rate_cap_per_minute;\n }\n return ctx.client.sources.registerUserMcp(ctx.sandboxId, request);\n};\n","import type { ToolContext, ToolHandler } from '../registrar.js';\n\ntype ConnectLinearRequest = Parameters<\n ToolContext['client']['sources']['connectLinear']\n>[1];\n\nexport const connectLinear: ToolHandler = async (\n ctx: ToolContext,\n input: Record<string, unknown>,\n) => {\n const request: ConnectLinearRequest = {\n api_key: String(input.api_key),\n };\n if (typeof input.name === 'string') {\n request.name = input.name;\n }\n if (Array.isArray(input.include)) {\n request.include = input.include.map(String) as ConnectLinearRequest['include'];\n }\n if (typeof input.rate_cap_per_minute === 'number') {\n request.rate_cap_per_minute = input.rate_cap_per_minute;\n }\n if (typeof input.poll_interval_seconds === 'number') {\n request.poll_interval_seconds = input.poll_interval_seconds;\n }\n return ctx.client.sources.connectLinear(ctx.sandboxId, request);\n};\n","import {\n DEFAULT_MODEL_BY_BACKEND,\n type AgentBackend,\n type AgentModelSettings,\n type CreateAgentRequest,\n} from '@copass/core';\n\nimport type { ToolContext, ToolHandler } from '../registrar.js';\n\nexport const createAgent: ToolHandler = async (\n ctx: ToolContext,\n input: Record<string, unknown>,\n) => {\n const backend: AgentBackend =\n input.backend === 'google' ? 'google' : 'anthropic';\n const defaultModel = DEFAULT_MODEL_BY_BACKEND[backend];\n\n const modelSettings: AgentModelSettings = {\n backend,\n model: typeof input.model === 'string' ? input.model : defaultModel,\n };\n if (typeof input.temperature === 'number') {\n modelSettings.temperature = input.temperature;\n }\n if (typeof input.max_tokens === 'number') {\n modelSettings.max_tokens = input.max_tokens;\n }\n if (typeof input.max_turns === 'number') {\n modelSettings.max_turns = input.max_turns;\n }\n if (typeof input.timeout_s === 'number') {\n modelSettings.timeout_s = input.timeout_s;\n }\n\n const request: CreateAgentRequest = {\n slug: String(input.slug),\n name: String(input.name),\n system_prompt: String(input.system_prompt),\n model_settings: modelSettings,\n };\n if (typeof input.description === 'string') {\n request.description = input.description;\n }\n if (Array.isArray(input.tool_allowlist)) {\n request.tool_allowlist = input.tool_allowlist.map(String);\n }\n\n const agent = await ctx.client.agents.create(ctx.sandboxId, request);\n return { agent };\n};\n","import type { CreateTriggerRequest } from '@copass/core';\n\nimport type { ToolContext, ToolHandler } from '../registrar.js';\n\nexport const createTrigger: ToolHandler = async (\n ctx: ToolContext,\n input: Record<string, unknown>,\n) => {\n const agentSlug = String(input.agent_slug);\n const dataSourceId = String(input.data_source_id);\n const eventType =\n typeof input.event_type_filter === 'string' && input.event_type_filter.length > 0\n ? input.event_type_filter\n : '*';\n const request: CreateTriggerRequest = {\n data_source_id: dataSourceId,\n event_type_filter: eventType,\n };\n if (\n typeof input.filter_config === 'object' &&\n input.filter_config !== null\n ) {\n request.filter_config = input.filter_config as Record<string, unknown>;\n }\n if (typeof input.rate_limit_per_hour === 'number') {\n request.rate_limit_per_hour = input.rate_limit_per_hour;\n }\n const trigger = await ctx.client.agents.triggers.create(\n ctx.sandboxId,\n agentSlug,\n request,\n );\n return { trigger };\n};\n","import type { ToolContext, ToolHandler } from '../registrar.js';\n\nexport const getAgent: ToolHandler = async (\n ctx: ToolContext,\n input: Record<string, unknown>,\n) => {\n const slug = String(input.slug);\n return ctx.client.agents.retrieve(ctx.sandboxId, slug);\n};\n","import type { ToolContext, ToolHandler } from '../registrar.js';\n\nexport const getRunTrace: ToolHandler = async (\n ctx: ToolContext,\n input: Record<string, unknown>,\n) => {\n const runId = String(input.run_id);\n return ctx.client.agents.getRun(ctx.sandboxId, runId);\n};\n","import type { ToolContext, ToolHandler } from '../registrar.js';\n\nexport const getSource: ToolHandler = async (\n ctx: ToolContext,\n input: Record<string, unknown>,\n) => {\n const dataSourceId = String(input.data_source_id);\n return ctx.client.sources.retrieve(ctx.sandboxId, dataSourceId);\n};\n","import type {\n ConnectionRole,\n CreateSandboxConnectionRequest,\n} from '@copass/core';\n\nimport type { ToolContext, ToolHandler } from '../registrar.js';\n\nexport const grantSandboxConnection: ToolHandler = async (\n ctx: ToolContext,\n input: Record<string, unknown>,\n) => {\n const role = String(input.role) as ConnectionRole;\n const request: CreateSandboxConnectionRequest = { role };\n if (typeof input.copass_id === 'string') {\n request.copass_id = input.copass_id;\n }\n if (typeof input.user_id === 'string') {\n request.user_id = input.user_id;\n }\n if (typeof input.project_id === 'string') {\n request.project_id = input.project_id;\n }\n if (typeof input.label === 'string') {\n request.label = input.label;\n }\n if (typeof input.expires_at === 'string') {\n request.expires_at = input.expires_at;\n }\n return ctx.client.sandboxConnections.create(ctx.sandboxId, request);\n};\n","import type { ToolContext, ToolHandler } from '../registrar.js';\n\n/**\n * Surfaces the agent tool catalog grouped by app_slug.\n *\n * The backend returns the flat ``{tools, count}`` shape; this handler\n * adds the ``by_app`` map the spec promises (``{[app_slug]: Tool[]}``)\n * so callers can render per-provider sections without re-grouping\n * client-side. Optional ``app_slug`` input filters the flat list AND\n * the by_app map to a single provider.\n */\nexport const listAgentTools: ToolHandler = async (\n ctx: ToolContext,\n input: Record<string, unknown>,\n) => {\n const filterAppSlug =\n typeof input.app_slug === 'string' ? input.app_slug : undefined;\n\n const catalog = await ctx.client.agents.listTools(ctx.sandboxId);\n const tools = filterAppSlug\n ? catalog.tools.filter((t) => t.app_slug === filterAppSlug)\n : catalog.tools;\n\n const by_app: Record<\n string,\n Array<{ name: string; description?: string | null }>\n > = {};\n for (const tool of tools) {\n const slug = tool.app_slug || 'unknown';\n if (!by_app[slug]) by_app[slug] = [];\n by_app[slug].push({ name: tool.name, description: tool.description ?? null });\n }\n\n return { tools, by_app, count: tools.length };\n};\n","import type { ToolContext, ToolHandler } from '../registrar.js';\n\nexport const listAgents: ToolHandler = async (\n ctx: ToolContext,\n input: Record<string, unknown>,\n) => {\n return ctx.client.agents.list(ctx.sandboxId, {\n status:\n input.status === 'active' || input.status === 'archived'\n ? input.status\n : undefined,\n });\n};\n","import type { ToolContext, ToolHandler } from '../registrar.js';\n\nexport const listApiKeys: ToolHandler = async (ctx: ToolContext) => {\n // The core resource returns a flat list — wrap into the shape the spec\n // declares (`{ keys, count }`). Filtering by `kinds` / `include_revoked`\n // is server-side once the API exposes those query params; today we\n // surface the inventory and let the caller filter post-hoc.\n const keys = await ctx.client.apiKeys.list();\n return { keys, count: Array.isArray(keys) ? keys.length : 0 };\n};\n","import type { ToolContext, ToolHandler } from '../registrar.js';\n\nexport const listApps: ToolHandler = async (\n ctx: ToolContext,\n input: Record<string, unknown>,\n) => {\n return ctx.client.integrations.catalog(ctx.sandboxId, {\n q: typeof input.q === 'string' ? input.q : undefined,\n cursor: typeof input.cursor === 'string' ? input.cursor : undefined,\n limit: typeof input.limit === 'number' ? input.limit : undefined,\n });\n};\n","import type { ToolContext, ToolHandler } from '../registrar.js';\n\nexport const listConnectedAccounts: ToolHandler = async (\n ctx: ToolContext,\n input: Record<string, unknown>,\n) => {\n return ctx.client.integrations.listAccounts(ctx.sandboxId, {\n app_slug: typeof input.app_slug === 'string' ? input.app_slug : undefined,\n });\n};\n","import type { ToolContext, ToolHandler } from '../registrar.js';\n\nexport const listRuns: ToolHandler = async (\n ctx: ToolContext,\n input: Record<string, unknown>,\n) => {\n const slug = String(input.agent_slug);\n const limit = typeof input.limit === 'number' ? input.limit : undefined;\n return ctx.client.agents.listRuns(ctx.sandboxId, slug, { limit });\n};\n","import type { ToolContext, ToolHandler } from '../registrar.js';\n\n/**\n * Wraps the bare-array SDK response in the ``{connections, count}``\n * envelope the spec requires. MCP's ``structuredContent`` rejects\n * bare arrays — every list-style tool must return an object.\n */\nexport const listSandboxConnections: ToolHandler = async (\n ctx: ToolContext,\n input: Record<string, unknown>,\n) => {\n const connections = await ctx.client.sandboxConnections.list(ctx.sandboxId, {\n include_revoked: input.include_revoked === true,\n });\n return { connections, count: connections.length };\n};\n","import type { ToolContext, ToolHandler } from '../registrar.js';\n\nexport const listSandboxes: ToolHandler = async (ctx: ToolContext) => {\n return ctx.client.sandboxes.list();\n};\n","import type { ToolContext, ToolHandler } from '../registrar.js';\n\nexport const listSources: ToolHandler = async (\n ctx: ToolContext,\n input: Record<string, unknown>,\n) => {\n return ctx.client.sources.list(ctx.sandboxId, {\n provider: typeof input.provider === 'string' ? input.provider : undefined,\n });\n};\n","import type { ToolContext, ToolHandler } from '../registrar.js';\n\nexport const listTriggerComponents: ToolHandler = async (\n ctx: ToolContext,\n input: Record<string, unknown>,\n) => {\n return ctx.client.agents.listTriggerComponents(ctx.sandboxId, {\n app: typeof input.app === 'string' ? input.app : undefined,\n q: typeof input.q === 'string' ? input.q : undefined,\n limit: typeof input.limit === 'number' ? input.limit : undefined,\n });\n};\n","import type { ToolContext, ToolHandler } from '../registrar.js';\n\nexport const listTriggers: ToolHandler = async (\n ctx: ToolContext,\n input: Record<string, unknown>,\n) => {\n const slug = String(input.agent_slug);\n return ctx.client.agents.triggers.list(ctx.sandboxId, slug);\n};\n","import type { ToolContext, ToolHandler } from '../registrar.js';\n\nexport const pauseTrigger: ToolHandler = async (\n ctx: ToolContext,\n input: Record<string, unknown>,\n) => {\n const triggerId = String(input.trigger_id);\n const trigger = await ctx.client.agents.triggers.updateById(\n ctx.sandboxId,\n triggerId,\n { status: 'paused' },\n );\n return { trigger };\n};\n","import type { CreateDataSourceRequest, DataSourceIngestionMode, DataSourceKind } from '@copass/core';\n\nimport type { ToolContext, ToolHandler } from '../registrar.js';\n\nexport const provisionSource: ToolHandler = async (\n ctx: ToolContext,\n input: Record<string, unknown>,\n) => {\n const adapterConfig: Record<string, unknown> =\n typeof input.adapter_config === 'object' && input.adapter_config !== null\n ? { ...(input.adapter_config as Record<string, unknown>) }\n : {};\n if (input.ingest_to_graph === true) {\n adapterConfig.ingest_to_graph = true;\n }\n\n const request: CreateDataSourceRequest = {\n provider: typeof input.provider === 'string' ? input.provider : 'pipedream',\n name: String(input.name),\n };\n if (typeof input.ingestion_mode === 'string') {\n request.ingestion_mode = input.ingestion_mode as DataSourceIngestionMode;\n }\n if (input.kind === 'durable' || input.kind === 'ephemeral') {\n request.kind = input.kind as DataSourceKind;\n }\n if (typeof input.external_account_id === 'string') {\n request.external_account_id = input.external_account_id;\n }\n if (typeof input.poll_interval_seconds === 'number') {\n request.poll_interval_seconds = input.poll_interval_seconds;\n }\n if (Object.keys(adapterConfig).length > 0) {\n request.adapter_config = adapterConfig;\n }\n\n const source = await ctx.client.sources.register(ctx.sandboxId, request);\n return { source };\n};\n","import type { ToolContext, ToolHandler } from '../registrar.js';\n\nexport const purgeSourceContext: ToolHandler = async (\n ctx: ToolContext,\n input: Record<string, unknown>,\n) => {\n const sourceId = String(input.data_source_id);\n const deleteSource =\n typeof input.delete_source === 'boolean' ? input.delete_source : undefined;\n return ctx.client.sources.purge(ctx.sandboxId, sourceId, {\n ...(deleteSource !== undefined ? { delete_source: deleteSource } : {}),\n });\n};\n","import type { ToolContext, ToolHandler } from '../registrar.js';\n\nexport const resumeTrigger: ToolHandler = async (\n ctx: ToolContext,\n input: Record<string, unknown>,\n) => {\n const triggerId = String(input.trigger_id);\n const trigger = await ctx.client.agents.triggers.updateById(\n ctx.sandboxId,\n triggerId,\n { status: 'active' },\n );\n return { trigger };\n};\n","import type { ToolContext, ToolHandler } from '../registrar.js';\n\nexport const revokeSandboxConnection: ToolHandler = async (\n ctx: ToolContext,\n input: Record<string, unknown>,\n) => {\n const connectionId = String(input.connection_id);\n return ctx.client.sandboxConnections.revoke(ctx.sandboxId, connectionId);\n};\n","import type { ToolContext, ToolHandler } from '../registrar.js';\n\nexport const revokeUserMcpSource: ToolHandler = async (\n ctx: ToolContext,\n input: Record<string, unknown>,\n) => {\n const sourceId = String(input.data_source_id);\n return ctx.client.sources.revokeUserMcp(ctx.sandboxId, sourceId);\n};\n","import type { ConnectRequest } from '@copass/core';\n\nimport type { ToolContext, ToolHandler } from '../registrar.js';\n\nexport const startIntegrationConnect: ToolHandler = async (\n ctx: ToolContext,\n input: Record<string, unknown>,\n) => {\n const appSlug = String(input.app_slug);\n const successRedirect =\n typeof input.success_redirect_uri === 'string'\n ? input.success_redirect_uri\n : '';\n const errorRedirect =\n typeof input.error_redirect_uri === 'string'\n ? input.error_redirect_uri\n : '';\n const request: ConnectRequest = {\n success_redirect_uri: successRedirect,\n error_redirect_uri: errorRedirect,\n };\n if (typeof input.webhook_uri === 'string') {\n request.webhook_uri = input.webhook_uri;\n }\n return ctx.client.integrations.connect(ctx.sandboxId, appSlug, request);\n};\n","import type { ToolContext, ToolHandler } from '../registrar.js';\n\nexport const testUserMcpSource: ToolHandler = async (\n ctx: ToolContext,\n input: Record<string, unknown>,\n) => {\n const sourceId = String(input.data_source_id);\n return ctx.client.sources.testUserMcp(ctx.sandboxId, sourceId);\n};\n","import type { ToolContext, ToolHandler } from '../registrar.js';\n\nexport const updateAgentModelSettings: ToolHandler = async (\n ctx: ToolContext,\n input: Record<string, unknown>,\n) => {\n const slug = String(input.slug);\n const patch: Record<string, unknown> = {};\n if (input.backend === 'anthropic' || input.backend === 'google') {\n patch.backend = input.backend;\n }\n if (typeof input.model === 'string') {\n patch.model = input.model;\n }\n if (typeof input.temperature === 'number') {\n patch.temperature = input.temperature;\n }\n if (typeof input.max_tokens === 'number') {\n patch.max_tokens = input.max_tokens;\n }\n if (typeof input.max_turns === 'number') {\n patch.max_turns = input.max_turns;\n }\n if (typeof input.timeout_s === 'number') {\n patch.timeout_s = input.timeout_s;\n }\n const agent = await ctx.client.agents.updateModelSettings(\n ctx.sandboxId,\n slug,\n patch as Parameters<typeof ctx.client.agents.updateModelSettings>[2],\n );\n return { agent };\n};\n","import type { ToolContext, ToolHandler } from '../registrar.js';\n\nexport const updateAgentPrompt: ToolHandler = async (\n ctx: ToolContext,\n input: Record<string, unknown>,\n) => {\n const slug = String(input.slug);\n const agent = await ctx.client.agents.update(ctx.sandboxId, slug, {\n system_prompt: String(input.system_prompt),\n });\n return { agent };\n};\n","import type { ToolContext, ToolHandler } from '../registrar.js';\n\nexport const updateAgentToolSources: ToolHandler = async (\n ctx: ToolContext,\n input: Record<string, unknown>,\n) => {\n const slug = String(input.slug);\n const raw = input.tool_sources;\n const toolSources: string[] | null =\n raw === null\n ? null\n : Array.isArray(raw)\n ? raw.map(String)\n : null;\n const agent = await ctx.client.agents.updateToolSources(\n ctx.sandboxId,\n slug,\n toolSources,\n );\n return { agent };\n};\n","import type { ToolContext, ToolHandler } from '../registrar.js';\n\nexport const updateAgentTools: ToolHandler = async (\n ctx: ToolContext,\n input: Record<string, unknown>,\n) => {\n const slug = String(input.slug);\n const toolAllowlist = Array.isArray(input.tool_allowlist)\n ? input.tool_allowlist.map(String)\n : [];\n const agent = await ctx.client.agents.update(ctx.sandboxId, slug, {\n tool_allowlist: toolAllowlist,\n });\n return { agent };\n};\n","import type {\n DataSourceIngestionMode,\n UpdateDataSourceRequest,\n} from '@copass/core';\n\nimport type { ToolContext, ToolHandler } from '../registrar.js';\n\nexport const updateSource: ToolHandler = async (\n ctx: ToolContext,\n input: Record<string, unknown>,\n) => {\n const sourceId = String(input.data_source_id);\n const updates: UpdateDataSourceRequest = {};\n if (typeof input.name === 'string') {\n updates.name = input.name;\n }\n if (typeof input.ingestion_mode === 'string') {\n updates.ingestion_mode = input.ingestion_mode as DataSourceIngestionMode;\n }\n if (typeof input.external_account_id === 'string') {\n updates.external_account_id = input.external_account_id;\n }\n if (typeof input.poll_interval_seconds === 'number') {\n updates.poll_interval_seconds = input.poll_interval_seconds;\n }\n\n let mergeAdapterConfig = false;\n let adapterConfig: Record<string, unknown> | undefined;\n if (\n typeof input.adapter_config === 'object' &&\n input.adapter_config !== null\n ) {\n adapterConfig = { ...(input.adapter_config as Record<string, unknown>) };\n }\n if (typeof input.ingest_to_graph === 'boolean') {\n adapterConfig = { ...(adapterConfig ?? {}), ingest_to_graph: input.ingest_to_graph };\n mergeAdapterConfig = true;\n }\n if (adapterConfig !== undefined) {\n updates.adapter_config = adapterConfig;\n }\n\n const source = await ctx.client.sources.update(\n ctx.sandboxId,\n sourceId,\n updates,\n { mergeAdapterConfig },\n );\n return { source };\n};\n","import type { UpdateTriggerRequest } from '@copass/core';\n\nimport type { ToolContext, ToolHandler } from '../registrar.js';\n\nexport const updateTrigger: ToolHandler = async (\n ctx: ToolContext,\n input: Record<string, unknown>,\n) => {\n const triggerId = String(input.trigger_id);\n const patch: UpdateTriggerRequest = {};\n if (typeof input.event_type_filter === 'string') {\n patch.event_type_filter = input.event_type_filter;\n }\n if ('rate_limit_per_hour' in input) {\n const v = input.rate_limit_per_hour;\n if (v === null) {\n patch.clear_rate_limit = true;\n } else if (typeof v === 'number') {\n patch.rate_limit_per_hour = v;\n }\n }\n if ('filter_config' in input) {\n const v = input.filter_config;\n if (v === null) {\n patch.clear_filter_config = true;\n } else if (typeof v === 'object' && v !== null) {\n patch.filter_config = v as Record<string, unknown>;\n }\n }\n const trigger = await ctx.client.agents.triggers.updateById(\n ctx.sandboxId,\n triggerId,\n patch,\n );\n return { trigger };\n};\n","import type { ToolContext, ToolHandler } from '../registrar.js';\n\nexport const wireIntegrationToAgent: ToolHandler = async (\n ctx: ToolContext,\n input: Record<string, unknown>,\n) => {\n const agentSlug = String(input.agent_slug);\n const appSlug = String(input.app_slug);\n return ctx.client.agents.wireIntegration(ctx.sandboxId, agentSlug, appSlug);\n};\n","import type { ToolHandler } from '../registrar.js';\nimport { addUserMcpSource } from './add_user_mcp_source.js';\nimport { connectLinear } from './connect_linear.js';\nimport { createAgent } from './create_agent.js';\nimport { createTrigger } from './create_trigger.js';\nimport { getAgent } from './get_agent.js';\nimport { getRunTrace } from './get_run_trace.js';\nimport { getSource } from './get_source.js';\nimport { grantSandboxConnection } from './grant_sandbox_connection.js';\nimport { listAgentTools } from './list_agent_tools.js';\nimport { listAgents } from './list_agents.js';\nimport { listApiKeys } from './list_api_keys.js';\nimport { listApps } from './list_apps.js';\nimport { listConnectedAccounts } from './list_connected_accounts.js';\nimport { listRuns } from './list_runs.js';\nimport { listSandboxConnections } from './list_sandbox_connections.js';\nimport { listSandboxes } from './list_sandboxes.js';\nimport { listSources } from './list_sources.js';\nimport { listTriggerComponents } from './list_trigger_components.js';\nimport { listTriggers } from './list_triggers.js';\nimport { pauseTrigger } from './pause_trigger.js';\nimport { provisionSource } from './provision_source.js';\nimport { purgeSourceContext } from './purge_source_context.js';\nimport { resumeTrigger } from './resume_trigger.js';\nimport { revokeSandboxConnection } from './revoke_sandbox_connection.js';\nimport { revokeUserMcpSource } from './revoke_user_mcp_source.js';\nimport { startIntegrationConnect } from './start_integration_connect.js';\nimport { testUserMcpSource } from './test_user_mcp_source.js';\nimport { updateAgentModelSettings } from './update_agent_model_settings.js';\nimport { updateAgentPrompt } from './update_agent_prompt.js';\nimport { updateAgentToolSources } from './update_agent_tool_sources.js';\nimport { updateAgentTools } from './update_agent_tools.js';\nimport { updateSource } from './update_source.js';\nimport { updateTrigger } from './update_trigger.js';\nimport { wireIntegrationToAgent } from './wire_integration_to_agent.js';\n\nexport const TOOL_HANDLERS: Record<string, ToolHandler> = {\n list_sandboxes: listSandboxes,\n list_sources: listSources,\n get_source: getSource,\n list_agents: listAgents,\n get_agent: getAgent,\n list_triggers: listTriggers,\n list_runs: listRuns,\n get_run_trace: getRunTrace,\n list_trigger_components: listTriggerComponents,\n list_apps: listApps,\n list_connected_accounts: listConnectedAccounts,\n list_api_keys: listApiKeys,\n list_agent_tools: listAgentTools,\n list_sandbox_connections: listSandboxConnections,\n create_agent: createAgent,\n update_agent_prompt: updateAgentPrompt,\n update_agent_tools: updateAgentTools,\n update_agent_tool_sources: updateAgentToolSources,\n update_agent_model_settings: updateAgentModelSettings,\n add_user_mcp_source: addUserMcpSource,\n wire_integration_to_agent: wireIntegrationToAgent,\n provision_source: provisionSource,\n purge_source_context: purgeSourceContext,\n update_source: updateSource,\n start_integration_connect: startIntegrationConnect,\n connect_linear: connectLinear,\n test_user_mcp_source: testUserMcpSource,\n revoke_user_mcp_source: revokeUserMcpSource,\n create_trigger: createTrigger,\n pause_trigger: pauseTrigger,\n resume_trigger: resumeTrigger,\n update_trigger: updateTrigger,\n grant_sandbox_connection: grantSandboxConnection,\n revoke_sandbox_connection: revokeSandboxConnection,\n};\n\nexport {\n addUserMcpSource,\n connectLinear,\n createAgent,\n createTrigger,\n getAgent,\n getRunTrace,\n getSource,\n grantSandboxConnection,\n listAgentTools,\n listAgents,\n listApiKeys,\n listApps,\n listConnectedAccounts,\n listRuns,\n listSandboxConnections,\n listSandboxes,\n listSources,\n listTriggerComponents,\n listTriggers,\n pauseTrigger,\n provisionSource,\n purgeSourceContext,\n resumeTrigger,\n revokeSandboxConnection,\n revokeUserMcpSource,\n startIntegrationConnect,\n testUserMcpSource,\n updateAgentModelSettings,\n updateAgentPrompt,\n updateAgentToolSources,\n updateAgentTools,\n updateSource,\n updateTrigger,\n wireIntegrationToAgent,\n};\n","import type { CopassClient } from '@copass/core';\nimport type { ZodTypeAny } from 'zod';\n\nimport { jsonSchemaToZod } from './json-schema-to-zod.js';\nimport {\n loadManagementSpecs,\n type LoadOptions,\n type ManagementSpec,\n} from './specs.js';\nimport { TOOL_HANDLERS } from './tools/index.js';\n\nexport interface ToolContext {\n client: CopassClient;\n sandboxId: string;\n}\n\nexport type ToolHandler = (\n ctx: ToolContext,\n input: Record<string, unknown>,\n) => Promise<unknown>;\n\nexport interface ToolRegistration {\n name: string;\n description: string;\n /** Raw JSON Schema for the tool's input. */\n inputSchema: Record<string, unknown>;\n /** Raw JSON Schema for the tool's output. */\n outputSchema: Record<string, unknown>;\n /** Compiled Zod parser for the input. */\n inputZod: ZodTypeAny;\n /** Compiled Zod parser for the output. */\n outputZod: ZodTypeAny;\n /** Async handler that runs the call and returns the parsed result. */\n handler: (input: unknown) => Promise<unknown>;\n /** The full spec object as loaded from disk. */\n spec: ManagementSpec;\n}\n\nexport type Register = (registration: ToolRegistration) => void;\n\nexport interface RegistrarOptions extends LoadOptions {\n /** Sandbox the registered tools target. Required — every Phase 1 read tool\n * is sandbox-scoped. */\n sandboxId: string;\n /**\n * When true, validate the handler's HTTP response against the tool's\n * `outputSchema` before returning. Defaults to `false` because handlers\n * already pass through `@copass/core`-typed responses; the conformance\n * test enforces parity at build time. Enabling this adds runtime cost.\n */\n validateOutput?: boolean;\n /**\n * When true, silently skip spec entries that have no handler bound\n * in `TOOL_HANDLERS` rather than raising. Used by Phase 2A's\n * spec-only landing where the JSON Schemas + fixtures ship before\n * the per-tool TS / Python handler files (Phase 2B). Defaults to\n * `false` — production wiring should always pin every spec to a\n * handler.\n */\n allowMissingHandlers?: boolean;\n}\n\n/**\n * Transport-agnostic management-tool registrar.\n *\n * Loads the management spec corpus, builds Zod parsers for each tool's\n * input/output schema, wires every spec entry to its `@copass/core`\n * handler, and calls `register(...)` once per tool.\n *\n * The transport (MCP SDK, backend tool resolver, plain function table)\n * is the caller's concern.\n */\nexport function registerManagementTools(\n register: Register,\n client: CopassClient,\n options: RegistrarOptions,\n): ToolRegistration[] {\n const corpus = loadManagementSpecs(options);\n const ctx: ToolContext = { client, sandboxId: options.sandboxId };\n const registrations: ToolRegistration[] = [];\n\n const names = Object.keys(corpus.specs).sort();\n for (const name of names) {\n const spec = corpus.specs[name];\n const handler = TOOL_HANDLERS[name];\n if (!handler) {\n if (options.allowMissingHandlers) {\n continue;\n }\n throw new Error(\n `registerManagementTools: no handler implementation for tool \"${name}\". Add one in src/tools/.`,\n );\n }\n\n const inputZod = jsonSchemaToZod(spec.inputSchema);\n const outputZod = jsonSchemaToZod(spec.outputSchema);\n\n const wrapped = async (rawInput: unknown): Promise<unknown> => {\n const parsedInput = inputZod.parse(rawInput ?? {}) as Record<string, unknown>;\n const result = await handler(ctx, parsedInput);\n if (options.validateOutput) {\n return outputZod.parse(result);\n }\n return result;\n };\n\n const registration: ToolRegistration = {\n name: spec.name,\n description: spec.description,\n inputSchema: spec.inputSchema,\n outputSchema: spec.outputSchema,\n inputZod,\n outputZod,\n handler: wrapped,\n spec,\n };\n\n register(registration);\n registrations.push(registration);\n }\n\n return registrations;\n}\n"],"mappings":"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","names":["variants"]} |
+10
-0
@@ -508,2 +508,11 @@ // ../../node_modules/.pnpm/tsup@8.5.1_postcss@8.5.10_tsx@4.21.0_typescript@5.9.3_yaml@2.8.3/node_modules/tsup/assets/esm_shims.js | ||
| // src/tools/purge_source_context.ts | ||
| var purgeSourceContext = async (ctx, input) => { | ||
| const sourceId = String(input.data_source_id); | ||
| const deleteSource = typeof input.delete_source === "boolean" ? input.delete_source : void 0; | ||
| return ctx.client.sources.purge(ctx.sandboxId, sourceId, { | ||
| ...deleteSource !== void 0 ? { delete_source: deleteSource } : {} | ||
| }); | ||
| }; | ||
| // src/tools/resume_trigger.ts | ||
@@ -714,2 +723,3 @@ var resumeTrigger = async (ctx, input) => { | ||
| provision_source: provisionSource, | ||
| purge_source_context: purgeSourceContext, | ||
| update_source: updateSource, | ||
@@ -716,0 +726,0 @@ start_integration_connect: startIntegrationConnect, |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"sources":["../../../node_modules/.pnpm/tsup@8.5.1_postcss@8.5.10_tsx@4.21.0_typescript@5.9.3_yaml@2.8.3/node_modules/tsup/assets/esm_shims.js","../src/json-schema-to-zod.ts","../src/specs.ts","../src/tools/add_user_mcp_source.ts","../src/tools/connect_linear.ts","../src/tools/create_agent.ts","../src/tools/create_trigger.ts","../src/tools/get_agent.ts","../src/tools/get_run_trace.ts","../src/tools/get_source.ts","../src/tools/grant_sandbox_connection.ts","../src/tools/list_agent_tools.ts","../src/tools/list_agents.ts","../src/tools/list_api_keys.ts","../src/tools/list_apps.ts","../src/tools/list_connected_accounts.ts","../src/tools/list_runs.ts","../src/tools/list_sandbox_connections.ts","../src/tools/list_sandboxes.ts","../src/tools/list_sources.ts","../src/tools/list_trigger_components.ts","../src/tools/list_triggers.ts","../src/tools/pause_trigger.ts","../src/tools/provision_source.ts","../src/tools/resume_trigger.ts","../src/tools/revoke_sandbox_connection.ts","../src/tools/revoke_user_mcp_source.ts","../src/tools/start_integration_connect.ts","../src/tools/test_user_mcp_source.ts","../src/tools/update_agent_model_settings.ts","../src/tools/update_agent_prompt.ts","../src/tools/update_agent_tool_sources.ts","../src/tools/update_agent_tools.ts","../src/tools/update_source.ts","../src/tools/update_trigger.ts","../src/tools/wire_integration_to_agent.ts","../src/tools/index.ts","../src/registrar.ts"],"sourcesContent":["// Shim globals in esm bundle\nimport path from 'node:path'\nimport { fileURLToPath } from 'node:url'\n\nconst getFilename = () => fileURLToPath(import.meta.url)\nconst getDirname = () => path.dirname(getFilename())\n\nexport const __dirname = /* @__PURE__ */ getDirname()\nexport const __filename = /* @__PURE__ */ getFilename()\n","import { z, type ZodTypeAny } from 'zod';\n\ntype Schema = Record<string, unknown> & { type?: string | string[] };\n\nfunction describeIfPresent(node: ZodTypeAny, schema: Schema): ZodTypeAny {\n const description = schema.description;\n if (typeof description === 'string' && description.length > 0) {\n return node.describe(description);\n }\n return node;\n}\n\nfunction asArray<T>(value: T | T[] | undefined): T[] {\n if (value === undefined) return [];\n return Array.isArray(value) ? value : [value];\n}\n\nfunction buildScalarForType(type: string): ZodTypeAny {\n switch (type) {\n case 'string':\n return z.string();\n case 'integer':\n return z.number().int();\n case 'number':\n return z.number();\n case 'boolean':\n return z.boolean();\n case 'null':\n return z.null();\n case 'array':\n return z.array(z.unknown());\n case 'object':\n return z.record(z.string(), z.unknown());\n default:\n return z.unknown();\n }\n}\n\nfunction applyStringConstraints(schema: Schema, base: ZodTypeAny): ZodTypeAny {\n if ((schema.type === 'string' || (Array.isArray(schema.type) && schema.type.includes('string'))) && schema.format === 'date-time') {\n // Permissive: accept any string. JSON Schema's date-time is just a hint.\n return base;\n }\n return base;\n}\n\nfunction buildEnum(schema: Schema): ZodTypeAny | undefined {\n const enumValues = schema.enum as unknown[] | undefined;\n if (!enumValues || !Array.isArray(enumValues) || enumValues.length === 0) return undefined;\n const literals: ZodTypeAny[] = enumValues.map((value) => {\n if (value === null) return z.null();\n if (typeof value === 'string') return z.literal(value);\n if (typeof value === 'number') return z.literal(value);\n if (typeof value === 'boolean') return z.literal(value);\n return z.literal(value as never);\n });\n if (literals.length === 1) return literals[0];\n return z.union(literals as unknown as [ZodTypeAny, ZodTypeAny, ...ZodTypeAny[]]);\n}\n\nfunction buildForType(schema: Schema, type: string): ZodTypeAny {\n if (type === 'array') {\n const items = (schema.items as Schema | undefined) ?? {};\n return z.array(jsonSchemaToZod(items));\n }\n if (type === 'object') {\n const properties = (schema.properties as Record<string, Schema> | undefined) ?? {};\n const required = new Set(asArray(schema.required as string | string[] | undefined));\n const shape: Record<string, ZodTypeAny> = {};\n for (const [key, subSchema] of Object.entries(properties)) {\n const sub = jsonSchemaToZod(subSchema);\n shape[key] = required.has(key) ? sub : sub.optional();\n }\n let obj: ZodTypeAny;\n const additional = schema.additionalProperties;\n if (additional === false) {\n obj = z.strictObject(shape);\n } else if (additional && typeof additional === 'object') {\n obj = z.object(shape).catchall(jsonSchemaToZod(additional as Schema));\n } else {\n // additionalProperties is true / unspecified — be permissive\n obj = z.object(shape).catchall(z.unknown());\n }\n return obj;\n }\n return applyStringConstraints(schema, buildScalarForType(type));\n}\n\nfunction buildSchemaUntyped(schema: Schema): ZodTypeAny {\n const enumZ = buildEnum(schema);\n if (enumZ) return enumZ;\n\n if (Array.isArray(schema.oneOf)) {\n const variants = (schema.oneOf as Schema[]).map((s) => jsonSchemaToZod(s));\n if (variants.length === 1) return variants[0];\n return z.union(variants as unknown as [ZodTypeAny, ZodTypeAny, ...ZodTypeAny[]]);\n }\n\n if (Array.isArray(schema.anyOf)) {\n const variants = (schema.anyOf as Schema[]).map((s) => jsonSchemaToZod(s));\n if (variants.length === 1) return variants[0];\n return z.union(variants as unknown as [ZodTypeAny, ZodTypeAny, ...ZodTypeAny[]]);\n }\n\n const types = asArray(schema.type as string | string[] | undefined);\n\n if (types.length === 0) {\n if (schema.properties || schema.additionalProperties !== undefined) {\n return buildForType(schema, 'object');\n }\n return z.unknown();\n }\n\n if (types.length === 1) {\n return buildForType(schema, types[0]);\n }\n\n // Multi-type union, e.g. [\"string\", \"null\"] or [\"object\", \"null\"].\n const variants = types.map((t) => buildForType(schema, t));\n return z.union(variants as [ZodTypeAny, ZodTypeAny, ...ZodTypeAny[]]);\n}\n\nexport function jsonSchemaToZod(schema: Schema): ZodTypeAny {\n if (!schema || typeof schema !== 'object') return z.unknown();\n return describeIfPresent(buildSchemaUntyped(schema), schema);\n}\n","import { readFileSync, readdirSync, existsSync, statSync } from 'node:fs';\nimport { join, resolve } from 'node:path';\n\n// `__dirname` is provided by tsup's `shims: true` in both the ESM and\n// CJS bundles (see tsup.config.ts). In CJS it's a Node built-in; in ESM\n// it's emitted by esbuild as `dirname(fileURLToPath(import.meta.url))`.\n// Either way, `__dirname` resolves to the directory of the running\n// bundle file, so we don't need format-conditional logic.\ndeclare const __dirname: string;\n\n// Walk up from `start` looking for a directory whose `<sub>` subdir\n// exists. Returns the resolved subdir or null. Used to locate either\n// the bundled `dist/specs/v1` (whose anchor varies between the two\n// tsup entry points — `dist/` for `index.{js,cjs}`, `dist/adapters/`\n// for `adapters/mcp.{js,cjs}`) or the dev-mode source-tree\n// `spec/management/v1` from the harness root.\nfunction findUpwards(start: string, sub: string[], maxDepth = 8): string | null {\n let here = start;\n for (let depth = 0; depth < maxDepth; depth++) {\n const candidate = resolve(here, ...sub);\n if (existsSync(candidate) && statSync(candidate).isDirectory()) {\n return candidate;\n }\n const parent = resolve(here, '..');\n if (parent === here) return null;\n here = parent;\n }\n return null;\n}\n\nexport const MIN_SPEC_VERSION = 'v1';\nexport const MAX_SPEC_VERSION = 'v1';\n\nexport interface ManagementSpec {\n name: string;\n description: string;\n inputSchema: Record<string, unknown>;\n outputSchema: Record<string, unknown>;\n since: string;\n}\n\nexport interface ManagementFixture {\n input: Record<string, unknown>;\n output: Record<string, unknown>;\n}\n\nexport interface LoadedManagementCorpus {\n specDir: string;\n specs: Record<string, ManagementSpec>;\n fixtures: Record<string, ManagementFixture>;\n}\n\nexport interface LoadOptions {\n specDir?: string;\n}\n\nconst ENV_OVERRIDE = 'COPASS_MANAGEMENT_SPEC_DIR';\n\nfunction resolveDefaultSpecDir(): string {\n const envDir = process.env[ENV_OVERRIDE];\n if (envDir && envDir.trim().length > 0) {\n return resolve(envDir);\n }\n\n // Production: bundled specs at `<package-root>/dist/specs/v1`. Search\n // upward from `__dirname` since the entry-point bundle file may be at\n // either `dist/index.{js,cjs}` (one level up) or\n // `dist/adapters/mcp.{js,cjs}` (two levels up).\n const bundled = findUpwards(__dirname, ['specs', 'v1']);\n if (bundled) return bundled;\n\n // Dev fallback: source-tree specs at `<harness-root>/spec/management/v1`.\n const sourceTree = findUpwards(__dirname, ['spec', 'management', 'v1']);\n if (sourceTree) return sourceTree;\n\n throw new Error(\n `loadManagementSpecs: could not locate spec directory. Searched upward from ${__dirname} for both \\`specs/v1\\` (bundled) and \\`spec/management/v1\\` (source). Set ${ENV_OVERRIDE} to override.`,\n );\n}\n\nfunction assertSpecShape(name: string, raw: unknown): asserts raw is ManagementSpec {\n if (!raw || typeof raw !== 'object') {\n throw new Error(`spec ${name}: not an object`);\n }\n const obj = raw as Record<string, unknown>;\n for (const required of ['name', 'description', 'inputSchema', 'outputSchema', 'since']) {\n if (!(required in obj)) {\n throw new Error(`spec ${name}: missing required field \"${required}\"`);\n }\n }\n if (typeof obj.name !== 'string' || typeof obj.description !== 'string') {\n throw new Error(`spec ${name}: name/description must be strings`);\n }\n if (typeof obj.since !== 'string') {\n throw new Error(`spec ${name}: since must be a string`);\n }\n if (typeof obj.inputSchema !== 'object' || typeof obj.outputSchema !== 'object') {\n throw new Error(`spec ${name}: inputSchema/outputSchema must be objects`);\n }\n}\n\nconst JSON_SCHEMA_META_KEYS = new Set([\n '$schema',\n '$id',\n '$defs',\n '$ref',\n '$comment',\n]);\n\nfunction stripJsonSchemaMeta(value: unknown): unknown {\n if (Array.isArray(value)) {\n return value.map(stripJsonSchemaMeta);\n }\n if (value && typeof value === 'object') {\n const out: Record<string, unknown> = {};\n for (const [k, v] of Object.entries(value as Record<string, unknown>)) {\n if (JSON_SCHEMA_META_KEYS.has(k)) continue;\n out[k] = stripJsonSchemaMeta(v);\n }\n return out;\n }\n return value;\n}\n\nfunction readJson(path: string): unknown {\n return JSON.parse(readFileSync(path, 'utf-8'));\n}\n\n/**\n * Load every `<tool>.json` and matching `examples/<tool>.example.json`\n * fixture from the management spec directory.\n *\n * Resolution order for `specDir`:\n * 1. Explicit option, when passed\n * 2. `COPASS_MANAGEMENT_SPEC_DIR` env override\n * 3. Bundled `dist/specs/v1/`\n * 4. Source-tree `copass/spec/management/v1/` (dev mode)\n */\nexport function loadManagementSpecs(options: LoadOptions = {}): LoadedManagementCorpus {\n const specDir = options.specDir ? resolve(options.specDir) : resolveDefaultSpecDir();\n\n if (!existsSync(specDir) || !statSync(specDir).isDirectory()) {\n throw new Error(`loadManagementSpecs: ${specDir} is not a directory`);\n }\n\n const specs: Record<string, ManagementSpec> = {};\n for (const entry of readdirSync(specDir)) {\n if (!entry.endsWith('.json')) continue;\n const file = join(specDir, entry);\n if (!statSync(file).isFile()) continue;\n const raw = readJson(file);\n assertSpecShape(entry, raw);\n const cleaned: ManagementSpec = {\n ...raw,\n inputSchema: stripJsonSchemaMeta(raw.inputSchema) as Record<string, unknown>,\n outputSchema: stripJsonSchemaMeta(raw.outputSchema) as Record<string, unknown>,\n };\n specs[cleaned.name] = cleaned;\n }\n\n const fixtures: Record<string, ManagementFixture> = {};\n const examplesDir = join(specDir, 'examples');\n if (existsSync(examplesDir) && statSync(examplesDir).isDirectory()) {\n for (const entry of readdirSync(examplesDir)) {\n if (!entry.endsWith('.example.json')) continue;\n const toolName = entry.slice(0, -'.example.json'.length);\n const file = join(examplesDir, entry);\n const raw = readJson(file) as Record<string, unknown>;\n if (!raw || typeof raw !== 'object' || !('input' in raw) || !('output' in raw)) {\n throw new Error(`fixture ${entry}: must have \"input\" and \"output\" keys`);\n }\n fixtures[toolName] = raw as unknown as ManagementFixture;\n }\n }\n\n return { specDir, specs, fixtures };\n}\n","import type { ToolContext, ToolHandler } from '../registrar.js';\n\ntype RegisterUserMcpRequest = Parameters<\n ToolContext['client']['sources']['registerUserMcp']\n>[1];\n\nexport const addUserMcpSource: ToolHandler = async (\n ctx: ToolContext,\n input: Record<string, unknown>,\n) => {\n const authKind = String(input.auth_kind) as RegisterUserMcpRequest['auth_kind'];\n const request: RegisterUserMcpRequest = {\n name: String(input.name),\n base_url: String(input.base_url),\n auth_kind: authKind,\n };\n if (typeof input.token === 'string') {\n request.token = input.token;\n }\n if (typeof input.auth_header === 'string') {\n request.auth_header = input.auth_header;\n }\n if (typeof input.app_namespace === 'string') {\n request.app_namespace = input.app_namespace;\n }\n if (Array.isArray(input.allowed_tools)) {\n request.allowed_tools = input.allowed_tools.map(String);\n }\n if (Array.isArray(input.ingest_tool_calls)) {\n request.ingest_tool_calls = input.ingest_tool_calls as Array<\n Record<string, unknown>\n >;\n }\n if (typeof input.rate_cap_per_minute === 'number') {\n request.rate_cap_per_minute = input.rate_cap_per_minute;\n }\n if (typeof input.webhook_rate_cap_per_minute === 'number') {\n request.webhook_rate_cap_per_minute = input.webhook_rate_cap_per_minute;\n }\n return ctx.client.sources.registerUserMcp(ctx.sandboxId, request);\n};\n","import type { ToolContext, ToolHandler } from '../registrar.js';\n\ntype ConnectLinearRequest = Parameters<\n ToolContext['client']['sources']['connectLinear']\n>[1];\n\nexport const connectLinear: ToolHandler = async (\n ctx: ToolContext,\n input: Record<string, unknown>,\n) => {\n const request: ConnectLinearRequest = {\n api_key: String(input.api_key),\n };\n if (typeof input.name === 'string') {\n request.name = input.name;\n }\n if (Array.isArray(input.include)) {\n request.include = input.include.map(String) as ConnectLinearRequest['include'];\n }\n if (typeof input.rate_cap_per_minute === 'number') {\n request.rate_cap_per_minute = input.rate_cap_per_minute;\n }\n if (typeof input.poll_interval_seconds === 'number') {\n request.poll_interval_seconds = input.poll_interval_seconds;\n }\n return ctx.client.sources.connectLinear(ctx.sandboxId, request);\n};\n","import {\n DEFAULT_MODEL_BY_BACKEND,\n type AgentBackend,\n type AgentModelSettings,\n type CreateAgentRequest,\n} from '@copass/core';\n\nimport type { ToolContext, ToolHandler } from '../registrar.js';\n\nexport const createAgent: ToolHandler = async (\n ctx: ToolContext,\n input: Record<string, unknown>,\n) => {\n const backend: AgentBackend =\n input.backend === 'google' ? 'google' : 'anthropic';\n const defaultModel = DEFAULT_MODEL_BY_BACKEND[backend];\n\n const modelSettings: AgentModelSettings = {\n backend,\n model: typeof input.model === 'string' ? input.model : defaultModel,\n };\n if (typeof input.temperature === 'number') {\n modelSettings.temperature = input.temperature;\n }\n if (typeof input.max_tokens === 'number') {\n modelSettings.max_tokens = input.max_tokens;\n }\n if (typeof input.max_turns === 'number') {\n modelSettings.max_turns = input.max_turns;\n }\n if (typeof input.timeout_s === 'number') {\n modelSettings.timeout_s = input.timeout_s;\n }\n\n const request: CreateAgentRequest = {\n slug: String(input.slug),\n name: String(input.name),\n system_prompt: String(input.system_prompt),\n model_settings: modelSettings,\n };\n if (typeof input.description === 'string') {\n request.description = input.description;\n }\n if (Array.isArray(input.tool_allowlist)) {\n request.tool_allowlist = input.tool_allowlist.map(String);\n }\n\n const agent = await ctx.client.agents.create(ctx.sandboxId, request);\n return { agent };\n};\n","import type { CreateTriggerRequest } from '@copass/core';\n\nimport type { ToolContext, ToolHandler } from '../registrar.js';\n\nexport const createTrigger: ToolHandler = async (\n ctx: ToolContext,\n input: Record<string, unknown>,\n) => {\n const agentSlug = String(input.agent_slug);\n const dataSourceId = String(input.data_source_id);\n const eventType =\n typeof input.event_type_filter === 'string' && input.event_type_filter.length > 0\n ? input.event_type_filter\n : '*';\n const request: CreateTriggerRequest = {\n data_source_id: dataSourceId,\n event_type_filter: eventType,\n };\n if (\n typeof input.filter_config === 'object' &&\n input.filter_config !== null\n ) {\n request.filter_config = input.filter_config as Record<string, unknown>;\n }\n if (typeof input.rate_limit_per_hour === 'number') {\n request.rate_limit_per_hour = input.rate_limit_per_hour;\n }\n const trigger = await ctx.client.agents.triggers.create(\n ctx.sandboxId,\n agentSlug,\n request,\n );\n return { trigger };\n};\n","import type { ToolContext, ToolHandler } from '../registrar.js';\n\nexport const getAgent: ToolHandler = async (\n ctx: ToolContext,\n input: Record<string, unknown>,\n) => {\n const slug = String(input.slug);\n return ctx.client.agents.retrieve(ctx.sandboxId, slug);\n};\n","import type { ToolContext, ToolHandler } from '../registrar.js';\n\nexport const getRunTrace: ToolHandler = async (\n ctx: ToolContext,\n input: Record<string, unknown>,\n) => {\n const runId = String(input.run_id);\n return ctx.client.agents.getRun(ctx.sandboxId, runId);\n};\n","import type { ToolContext, ToolHandler } from '../registrar.js';\n\nexport const getSource: ToolHandler = async (\n ctx: ToolContext,\n input: Record<string, unknown>,\n) => {\n const dataSourceId = String(input.data_source_id);\n return ctx.client.sources.retrieve(ctx.sandboxId, dataSourceId);\n};\n","import type {\n ConnectionRole,\n CreateSandboxConnectionRequest,\n} from '@copass/core';\n\nimport type { ToolContext, ToolHandler } from '../registrar.js';\n\nexport const grantSandboxConnection: ToolHandler = async (\n ctx: ToolContext,\n input: Record<string, unknown>,\n) => {\n const role = String(input.role) as ConnectionRole;\n const request: CreateSandboxConnectionRequest = { role };\n if (typeof input.copass_id === 'string') {\n request.copass_id = input.copass_id;\n }\n if (typeof input.user_id === 'string') {\n request.user_id = input.user_id;\n }\n if (typeof input.project_id === 'string') {\n request.project_id = input.project_id;\n }\n if (typeof input.label === 'string') {\n request.label = input.label;\n }\n if (typeof input.expires_at === 'string') {\n request.expires_at = input.expires_at;\n }\n return ctx.client.sandboxConnections.create(ctx.sandboxId, request);\n};\n","import type { ToolContext, ToolHandler } from '../registrar.js';\n\n/**\n * Surfaces the agent tool catalog grouped by app_slug.\n *\n * The backend returns the flat ``{tools, count}`` shape; this handler\n * adds the ``by_app`` map the spec promises (``{[app_slug]: Tool[]}``)\n * so callers can render per-provider sections without re-grouping\n * client-side. Optional ``app_slug`` input filters the flat list AND\n * the by_app map to a single provider.\n */\nexport const listAgentTools: ToolHandler = async (\n ctx: ToolContext,\n input: Record<string, unknown>,\n) => {\n const filterAppSlug =\n typeof input.app_slug === 'string' ? input.app_slug : undefined;\n\n const catalog = await ctx.client.agents.listTools(ctx.sandboxId);\n const tools = filterAppSlug\n ? catalog.tools.filter((t) => t.app_slug === filterAppSlug)\n : catalog.tools;\n\n const by_app: Record<\n string,\n Array<{ name: string; description?: string | null }>\n > = {};\n for (const tool of tools) {\n const slug = tool.app_slug || 'unknown';\n if (!by_app[slug]) by_app[slug] = [];\n by_app[slug].push({ name: tool.name, description: tool.description ?? null });\n }\n\n return { tools, by_app, count: tools.length };\n};\n","import type { ToolContext, ToolHandler } from '../registrar.js';\n\nexport const listAgents: ToolHandler = async (\n ctx: ToolContext,\n input: Record<string, unknown>,\n) => {\n return ctx.client.agents.list(ctx.sandboxId, {\n status:\n input.status === 'active' || input.status === 'archived'\n ? input.status\n : undefined,\n });\n};\n","import type { ToolContext, ToolHandler } from '../registrar.js';\n\nexport const listApiKeys: ToolHandler = async (ctx: ToolContext) => {\n // The core resource returns a flat list — wrap into the shape the spec\n // declares (`{ keys, count }`). Filtering by `kinds` / `include_revoked`\n // is server-side once the API exposes those query params; today we\n // surface the inventory and let the caller filter post-hoc.\n const keys = await ctx.client.apiKeys.list();\n return { keys, count: Array.isArray(keys) ? keys.length : 0 };\n};\n","import type { ToolContext, ToolHandler } from '../registrar.js';\n\nexport const listApps: ToolHandler = async (\n ctx: ToolContext,\n input: Record<string, unknown>,\n) => {\n return ctx.client.integrations.catalog(ctx.sandboxId, {\n q: typeof input.q === 'string' ? input.q : undefined,\n cursor: typeof input.cursor === 'string' ? input.cursor : undefined,\n limit: typeof input.limit === 'number' ? input.limit : undefined,\n });\n};\n","import type { ToolContext, ToolHandler } from '../registrar.js';\n\nexport const listConnectedAccounts: ToolHandler = async (\n ctx: ToolContext,\n input: Record<string, unknown>,\n) => {\n return ctx.client.integrations.listAccounts(ctx.sandboxId, {\n app_slug: typeof input.app_slug === 'string' ? input.app_slug : undefined,\n });\n};\n","import type { ToolContext, ToolHandler } from '../registrar.js';\n\nexport const listRuns: ToolHandler = async (\n ctx: ToolContext,\n input: Record<string, unknown>,\n) => {\n const slug = String(input.agent_slug);\n const limit = typeof input.limit === 'number' ? input.limit : undefined;\n return ctx.client.agents.listRuns(ctx.sandboxId, slug, { limit });\n};\n","import type { ToolContext, ToolHandler } from '../registrar.js';\n\n/**\n * Wraps the bare-array SDK response in the ``{connections, count}``\n * envelope the spec requires. MCP's ``structuredContent`` rejects\n * bare arrays — every list-style tool must return an object.\n */\nexport const listSandboxConnections: ToolHandler = async (\n ctx: ToolContext,\n input: Record<string, unknown>,\n) => {\n const connections = await ctx.client.sandboxConnections.list(ctx.sandboxId, {\n include_revoked: input.include_revoked === true,\n });\n return { connections, count: connections.length };\n};\n","import type { ToolContext, ToolHandler } from '../registrar.js';\n\nexport const listSandboxes: ToolHandler = async (ctx: ToolContext) => {\n return ctx.client.sandboxes.list();\n};\n","import type { ToolContext, ToolHandler } from '../registrar.js';\n\nexport const listSources: ToolHandler = async (\n ctx: ToolContext,\n input: Record<string, unknown>,\n) => {\n return ctx.client.sources.list(ctx.sandboxId, {\n provider: typeof input.provider === 'string' ? input.provider : undefined,\n });\n};\n","import type { ToolContext, ToolHandler } from '../registrar.js';\n\nexport const listTriggerComponents: ToolHandler = async (\n ctx: ToolContext,\n input: Record<string, unknown>,\n) => {\n return ctx.client.agents.listTriggerComponents(ctx.sandboxId, {\n app: typeof input.app === 'string' ? input.app : undefined,\n q: typeof input.q === 'string' ? input.q : undefined,\n limit: typeof input.limit === 'number' ? input.limit : undefined,\n });\n};\n","import type { ToolContext, ToolHandler } from '../registrar.js';\n\nexport const listTriggers: ToolHandler = async (\n ctx: ToolContext,\n input: Record<string, unknown>,\n) => {\n const slug = String(input.agent_slug);\n return ctx.client.agents.triggers.list(ctx.sandboxId, slug);\n};\n","import type { ToolContext, ToolHandler } from '../registrar.js';\n\nexport const pauseTrigger: ToolHandler = async (\n ctx: ToolContext,\n input: Record<string, unknown>,\n) => {\n const triggerId = String(input.trigger_id);\n const trigger = await ctx.client.agents.triggers.updateById(\n ctx.sandboxId,\n triggerId,\n { status: 'paused' },\n );\n return { trigger };\n};\n","import type { CreateDataSourceRequest, DataSourceIngestionMode, DataSourceKind } from '@copass/core';\n\nimport type { ToolContext, ToolHandler } from '../registrar.js';\n\nexport const provisionSource: ToolHandler = async (\n ctx: ToolContext,\n input: Record<string, unknown>,\n) => {\n const adapterConfig: Record<string, unknown> =\n typeof input.adapter_config === 'object' && input.adapter_config !== null\n ? { ...(input.adapter_config as Record<string, unknown>) }\n : {};\n if (input.ingest_to_graph === true) {\n adapterConfig.ingest_to_graph = true;\n }\n\n const request: CreateDataSourceRequest = {\n provider: typeof input.provider === 'string' ? input.provider : 'pipedream',\n name: String(input.name),\n };\n if (typeof input.ingestion_mode === 'string') {\n request.ingestion_mode = input.ingestion_mode as DataSourceIngestionMode;\n }\n if (input.kind === 'durable' || input.kind === 'ephemeral') {\n request.kind = input.kind as DataSourceKind;\n }\n if (typeof input.external_account_id === 'string') {\n request.external_account_id = input.external_account_id;\n }\n if (typeof input.poll_interval_seconds === 'number') {\n request.poll_interval_seconds = input.poll_interval_seconds;\n }\n if (Object.keys(adapterConfig).length > 0) {\n request.adapter_config = adapterConfig;\n }\n\n const source = await ctx.client.sources.register(ctx.sandboxId, request);\n return { source };\n};\n","import type { ToolContext, ToolHandler } from '../registrar.js';\n\nexport const resumeTrigger: ToolHandler = async (\n ctx: ToolContext,\n input: Record<string, unknown>,\n) => {\n const triggerId = String(input.trigger_id);\n const trigger = await ctx.client.agents.triggers.updateById(\n ctx.sandboxId,\n triggerId,\n { status: 'active' },\n );\n return { trigger };\n};\n","import type { ToolContext, ToolHandler } from '../registrar.js';\n\nexport const revokeSandboxConnection: ToolHandler = async (\n ctx: ToolContext,\n input: Record<string, unknown>,\n) => {\n const connectionId = String(input.connection_id);\n return ctx.client.sandboxConnections.revoke(ctx.sandboxId, connectionId);\n};\n","import type { ToolContext, ToolHandler } from '../registrar.js';\n\nexport const revokeUserMcpSource: ToolHandler = async (\n ctx: ToolContext,\n input: Record<string, unknown>,\n) => {\n const sourceId = String(input.data_source_id);\n return ctx.client.sources.revokeUserMcp(ctx.sandboxId, sourceId);\n};\n","import type { ConnectRequest } from '@copass/core';\n\nimport type { ToolContext, ToolHandler } from '../registrar.js';\n\nexport const startIntegrationConnect: ToolHandler = async (\n ctx: ToolContext,\n input: Record<string, unknown>,\n) => {\n const appSlug = String(input.app_slug);\n const successRedirect =\n typeof input.success_redirect_uri === 'string'\n ? input.success_redirect_uri\n : '';\n const errorRedirect =\n typeof input.error_redirect_uri === 'string'\n ? input.error_redirect_uri\n : '';\n const request: ConnectRequest = {\n success_redirect_uri: successRedirect,\n error_redirect_uri: errorRedirect,\n };\n if (typeof input.webhook_uri === 'string') {\n request.webhook_uri = input.webhook_uri;\n }\n return ctx.client.integrations.connect(ctx.sandboxId, appSlug, request);\n};\n","import type { ToolContext, ToolHandler } from '../registrar.js';\n\nexport const testUserMcpSource: ToolHandler = async (\n ctx: ToolContext,\n input: Record<string, unknown>,\n) => {\n const sourceId = String(input.data_source_id);\n return ctx.client.sources.testUserMcp(ctx.sandboxId, sourceId);\n};\n","import type { ToolContext, ToolHandler } from '../registrar.js';\n\nexport const updateAgentModelSettings: ToolHandler = async (\n ctx: ToolContext,\n input: Record<string, unknown>,\n) => {\n const slug = String(input.slug);\n const patch: Record<string, unknown> = {};\n if (input.backend === 'anthropic' || input.backend === 'google') {\n patch.backend = input.backend;\n }\n if (typeof input.model === 'string') {\n patch.model = input.model;\n }\n if (typeof input.temperature === 'number') {\n patch.temperature = input.temperature;\n }\n if (typeof input.max_tokens === 'number') {\n patch.max_tokens = input.max_tokens;\n }\n if (typeof input.max_turns === 'number') {\n patch.max_turns = input.max_turns;\n }\n if (typeof input.timeout_s === 'number') {\n patch.timeout_s = input.timeout_s;\n }\n const agent = await ctx.client.agents.updateModelSettings(\n ctx.sandboxId,\n slug,\n patch as Parameters<typeof ctx.client.agents.updateModelSettings>[2],\n );\n return { agent };\n};\n","import type { ToolContext, ToolHandler } from '../registrar.js';\n\nexport const updateAgentPrompt: ToolHandler = async (\n ctx: ToolContext,\n input: Record<string, unknown>,\n) => {\n const slug = String(input.slug);\n const agent = await ctx.client.agents.update(ctx.sandboxId, slug, {\n system_prompt: String(input.system_prompt),\n });\n return { agent };\n};\n","import type { ToolContext, ToolHandler } from '../registrar.js';\n\nexport const updateAgentToolSources: ToolHandler = async (\n ctx: ToolContext,\n input: Record<string, unknown>,\n) => {\n const slug = String(input.slug);\n const raw = input.tool_sources;\n const toolSources: string[] | null =\n raw === null\n ? null\n : Array.isArray(raw)\n ? raw.map(String)\n : null;\n const agent = await ctx.client.agents.updateToolSources(\n ctx.sandboxId,\n slug,\n toolSources,\n );\n return { agent };\n};\n","import type { ToolContext, ToolHandler } from '../registrar.js';\n\nexport const updateAgentTools: ToolHandler = async (\n ctx: ToolContext,\n input: Record<string, unknown>,\n) => {\n const slug = String(input.slug);\n const toolAllowlist = Array.isArray(input.tool_allowlist)\n ? input.tool_allowlist.map(String)\n : [];\n const agent = await ctx.client.agents.update(ctx.sandboxId, slug, {\n tool_allowlist: toolAllowlist,\n });\n return { agent };\n};\n","import type {\n DataSourceIngestionMode,\n UpdateDataSourceRequest,\n} from '@copass/core';\n\nimport type { ToolContext, ToolHandler } from '../registrar.js';\n\nexport const updateSource: ToolHandler = async (\n ctx: ToolContext,\n input: Record<string, unknown>,\n) => {\n const sourceId = String(input.data_source_id);\n const updates: UpdateDataSourceRequest = {};\n if (typeof input.name === 'string') {\n updates.name = input.name;\n }\n if (typeof input.ingestion_mode === 'string') {\n updates.ingestion_mode = input.ingestion_mode as DataSourceIngestionMode;\n }\n if (typeof input.external_account_id === 'string') {\n updates.external_account_id = input.external_account_id;\n }\n if (typeof input.poll_interval_seconds === 'number') {\n updates.poll_interval_seconds = input.poll_interval_seconds;\n }\n\n let mergeAdapterConfig = false;\n let adapterConfig: Record<string, unknown> | undefined;\n if (\n typeof input.adapter_config === 'object' &&\n input.adapter_config !== null\n ) {\n adapterConfig = { ...(input.adapter_config as Record<string, unknown>) };\n }\n if (typeof input.ingest_to_graph === 'boolean') {\n adapterConfig = { ...(adapterConfig ?? {}), ingest_to_graph: input.ingest_to_graph };\n mergeAdapterConfig = true;\n }\n if (adapterConfig !== undefined) {\n updates.adapter_config = adapterConfig;\n }\n\n const source = await ctx.client.sources.update(\n ctx.sandboxId,\n sourceId,\n updates,\n { mergeAdapterConfig },\n );\n return { source };\n};\n","import type { UpdateTriggerRequest } from '@copass/core';\n\nimport type { ToolContext, ToolHandler } from '../registrar.js';\n\nexport const updateTrigger: ToolHandler = async (\n ctx: ToolContext,\n input: Record<string, unknown>,\n) => {\n const triggerId = String(input.trigger_id);\n const patch: UpdateTriggerRequest = {};\n if (typeof input.event_type_filter === 'string') {\n patch.event_type_filter = input.event_type_filter;\n }\n if ('rate_limit_per_hour' in input) {\n const v = input.rate_limit_per_hour;\n if (v === null) {\n patch.clear_rate_limit = true;\n } else if (typeof v === 'number') {\n patch.rate_limit_per_hour = v;\n }\n }\n if ('filter_config' in input) {\n const v = input.filter_config;\n if (v === null) {\n patch.clear_filter_config = true;\n } else if (typeof v === 'object' && v !== null) {\n patch.filter_config = v as Record<string, unknown>;\n }\n }\n const trigger = await ctx.client.agents.triggers.updateById(\n ctx.sandboxId,\n triggerId,\n patch,\n );\n return { trigger };\n};\n","import type { ToolContext, ToolHandler } from '../registrar.js';\n\nexport const wireIntegrationToAgent: ToolHandler = async (\n ctx: ToolContext,\n input: Record<string, unknown>,\n) => {\n const agentSlug = String(input.agent_slug);\n const appSlug = String(input.app_slug);\n return ctx.client.agents.wireIntegration(ctx.sandboxId, agentSlug, appSlug);\n};\n","import type { ToolHandler } from '../registrar.js';\nimport { addUserMcpSource } from './add_user_mcp_source.js';\nimport { connectLinear } from './connect_linear.js';\nimport { createAgent } from './create_agent.js';\nimport { createTrigger } from './create_trigger.js';\nimport { getAgent } from './get_agent.js';\nimport { getRunTrace } from './get_run_trace.js';\nimport { getSource } from './get_source.js';\nimport { grantSandboxConnection } from './grant_sandbox_connection.js';\nimport { listAgentTools } from './list_agent_tools.js';\nimport { listAgents } from './list_agents.js';\nimport { listApiKeys } from './list_api_keys.js';\nimport { listApps } from './list_apps.js';\nimport { listConnectedAccounts } from './list_connected_accounts.js';\nimport { listRuns } from './list_runs.js';\nimport { listSandboxConnections } from './list_sandbox_connections.js';\nimport { listSandboxes } from './list_sandboxes.js';\nimport { listSources } from './list_sources.js';\nimport { listTriggerComponents } from './list_trigger_components.js';\nimport { listTriggers } from './list_triggers.js';\nimport { pauseTrigger } from './pause_trigger.js';\nimport { provisionSource } from './provision_source.js';\nimport { resumeTrigger } from './resume_trigger.js';\nimport { revokeSandboxConnection } from './revoke_sandbox_connection.js';\nimport { revokeUserMcpSource } from './revoke_user_mcp_source.js';\nimport { startIntegrationConnect } from './start_integration_connect.js';\nimport { testUserMcpSource } from './test_user_mcp_source.js';\nimport { updateAgentModelSettings } from './update_agent_model_settings.js';\nimport { updateAgentPrompt } from './update_agent_prompt.js';\nimport { updateAgentToolSources } from './update_agent_tool_sources.js';\nimport { updateAgentTools } from './update_agent_tools.js';\nimport { updateSource } from './update_source.js';\nimport { updateTrigger } from './update_trigger.js';\nimport { wireIntegrationToAgent } from './wire_integration_to_agent.js';\n\nexport const TOOL_HANDLERS: Record<string, ToolHandler> = {\n list_sandboxes: listSandboxes,\n list_sources: listSources,\n get_source: getSource,\n list_agents: listAgents,\n get_agent: getAgent,\n list_triggers: listTriggers,\n list_runs: listRuns,\n get_run_trace: getRunTrace,\n list_trigger_components: listTriggerComponents,\n list_apps: listApps,\n list_connected_accounts: listConnectedAccounts,\n list_api_keys: listApiKeys,\n list_agent_tools: listAgentTools,\n list_sandbox_connections: listSandboxConnections,\n create_agent: createAgent,\n update_agent_prompt: updateAgentPrompt,\n update_agent_tools: updateAgentTools,\n update_agent_tool_sources: updateAgentToolSources,\n update_agent_model_settings: updateAgentModelSettings,\n add_user_mcp_source: addUserMcpSource,\n wire_integration_to_agent: wireIntegrationToAgent,\n provision_source: provisionSource,\n update_source: updateSource,\n start_integration_connect: startIntegrationConnect,\n connect_linear: connectLinear,\n test_user_mcp_source: testUserMcpSource,\n revoke_user_mcp_source: revokeUserMcpSource,\n create_trigger: createTrigger,\n pause_trigger: pauseTrigger,\n resume_trigger: resumeTrigger,\n update_trigger: updateTrigger,\n grant_sandbox_connection: grantSandboxConnection,\n revoke_sandbox_connection: revokeSandboxConnection,\n};\n\nexport {\n addUserMcpSource,\n connectLinear,\n createAgent,\n createTrigger,\n getAgent,\n getRunTrace,\n getSource,\n grantSandboxConnection,\n listAgentTools,\n listAgents,\n listApiKeys,\n listApps,\n listConnectedAccounts,\n listRuns,\n listSandboxConnections,\n listSandboxes,\n listSources,\n listTriggerComponents,\n listTriggers,\n pauseTrigger,\n provisionSource,\n resumeTrigger,\n revokeSandboxConnection,\n revokeUserMcpSource,\n startIntegrationConnect,\n testUserMcpSource,\n updateAgentModelSettings,\n updateAgentPrompt,\n updateAgentToolSources,\n updateAgentTools,\n updateSource,\n updateTrigger,\n wireIntegrationToAgent,\n};\n","import type { CopassClient } from '@copass/core';\nimport type { ZodTypeAny } from 'zod';\n\nimport { jsonSchemaToZod } from './json-schema-to-zod.js';\nimport {\n loadManagementSpecs,\n type LoadOptions,\n type ManagementSpec,\n} from './specs.js';\nimport { TOOL_HANDLERS } from './tools/index.js';\n\nexport interface ToolContext {\n client: CopassClient;\n sandboxId: string;\n}\n\nexport type ToolHandler = (\n ctx: ToolContext,\n input: Record<string, unknown>,\n) => Promise<unknown>;\n\nexport interface ToolRegistration {\n name: string;\n description: string;\n /** Raw JSON Schema for the tool's input. */\n inputSchema: Record<string, unknown>;\n /** Raw JSON Schema for the tool's output. */\n outputSchema: Record<string, unknown>;\n /** Compiled Zod parser for the input. */\n inputZod: ZodTypeAny;\n /** Compiled Zod parser for the output. */\n outputZod: ZodTypeAny;\n /** Async handler that runs the call and returns the parsed result. */\n handler: (input: unknown) => Promise<unknown>;\n /** The full spec object as loaded from disk. */\n spec: ManagementSpec;\n}\n\nexport type Register = (registration: ToolRegistration) => void;\n\nexport interface RegistrarOptions extends LoadOptions {\n /** Sandbox the registered tools target. Required — every Phase 1 read tool\n * is sandbox-scoped. */\n sandboxId: string;\n /**\n * When true, validate the handler's HTTP response against the tool's\n * `outputSchema` before returning. Defaults to `false` because handlers\n * already pass through `@copass/core`-typed responses; the conformance\n * test enforces parity at build time. Enabling this adds runtime cost.\n */\n validateOutput?: boolean;\n /**\n * When true, silently skip spec entries that have no handler bound\n * in `TOOL_HANDLERS` rather than raising. Used by Phase 2A's\n * spec-only landing where the JSON Schemas + fixtures ship before\n * the per-tool TS / Python handler files (Phase 2B). Defaults to\n * `false` — production wiring should always pin every spec to a\n * handler.\n */\n allowMissingHandlers?: boolean;\n}\n\n/**\n * Transport-agnostic management-tool registrar.\n *\n * Loads the management spec corpus, builds Zod parsers for each tool's\n * input/output schema, wires every spec entry to its `@copass/core`\n * handler, and calls `register(...)` once per tool.\n *\n * The transport (MCP SDK, backend tool resolver, plain function table)\n * is the caller's concern.\n */\nexport function registerManagementTools(\n register: Register,\n client: CopassClient,\n options: RegistrarOptions,\n): ToolRegistration[] {\n const corpus = loadManagementSpecs(options);\n const ctx: ToolContext = { client, sandboxId: options.sandboxId };\n const registrations: ToolRegistration[] = [];\n\n const names = Object.keys(corpus.specs).sort();\n for (const name of names) {\n const spec = corpus.specs[name];\n const handler = TOOL_HANDLERS[name];\n if (!handler) {\n if (options.allowMissingHandlers) {\n continue;\n }\n throw new Error(\n `registerManagementTools: no handler implementation for tool \"${name}\". Add one in src/tools/.`,\n );\n }\n\n const inputZod = jsonSchemaToZod(spec.inputSchema);\n const outputZod = jsonSchemaToZod(spec.outputSchema);\n\n const wrapped = async (rawInput: unknown): Promise<unknown> => {\n const parsedInput = inputZod.parse(rawInput ?? {}) as Record<string, unknown>;\n const result = await handler(ctx, parsedInput);\n if (options.validateOutput) {\n return outputZod.parse(result);\n }\n return result;\n };\n\n const registration: ToolRegistration = {\n name: spec.name,\n description: spec.description,\n inputSchema: spec.inputSchema,\n outputSchema: spec.outputSchema,\n inputZod,\n outputZod,\n handler: wrapped,\n spec,\n };\n\n register(registration);\n registrations.push(registration);\n }\n\n return registrations;\n}\n"],"mappings":"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","names":["variants","path"]} | ||
| {"version":3,"sources":["../../../node_modules/.pnpm/tsup@8.5.1_postcss@8.5.10_tsx@4.21.0_typescript@5.9.3_yaml@2.8.3/node_modules/tsup/assets/esm_shims.js","../src/json-schema-to-zod.ts","../src/specs.ts","../src/tools/add_user_mcp_source.ts","../src/tools/connect_linear.ts","../src/tools/create_agent.ts","../src/tools/create_trigger.ts","../src/tools/get_agent.ts","../src/tools/get_run_trace.ts","../src/tools/get_source.ts","../src/tools/grant_sandbox_connection.ts","../src/tools/list_agent_tools.ts","../src/tools/list_agents.ts","../src/tools/list_api_keys.ts","../src/tools/list_apps.ts","../src/tools/list_connected_accounts.ts","../src/tools/list_runs.ts","../src/tools/list_sandbox_connections.ts","../src/tools/list_sandboxes.ts","../src/tools/list_sources.ts","../src/tools/list_trigger_components.ts","../src/tools/list_triggers.ts","../src/tools/pause_trigger.ts","../src/tools/provision_source.ts","../src/tools/purge_source_context.ts","../src/tools/resume_trigger.ts","../src/tools/revoke_sandbox_connection.ts","../src/tools/revoke_user_mcp_source.ts","../src/tools/start_integration_connect.ts","../src/tools/test_user_mcp_source.ts","../src/tools/update_agent_model_settings.ts","../src/tools/update_agent_prompt.ts","../src/tools/update_agent_tool_sources.ts","../src/tools/update_agent_tools.ts","../src/tools/update_source.ts","../src/tools/update_trigger.ts","../src/tools/wire_integration_to_agent.ts","../src/tools/index.ts","../src/registrar.ts"],"sourcesContent":["// Shim globals in esm bundle\nimport path from 'node:path'\nimport { fileURLToPath } from 'node:url'\n\nconst getFilename = () => fileURLToPath(import.meta.url)\nconst getDirname = () => path.dirname(getFilename())\n\nexport const __dirname = /* @__PURE__ */ getDirname()\nexport const __filename = /* @__PURE__ */ getFilename()\n","import { z, type ZodTypeAny } from 'zod';\n\ntype Schema = Record<string, unknown> & { type?: string | string[] };\n\nfunction describeIfPresent(node: ZodTypeAny, schema: Schema): ZodTypeAny {\n const description = schema.description;\n if (typeof description === 'string' && description.length > 0) {\n return node.describe(description);\n }\n return node;\n}\n\nfunction asArray<T>(value: T | T[] | undefined): T[] {\n if (value === undefined) return [];\n return Array.isArray(value) ? value : [value];\n}\n\nfunction buildScalarForType(type: string): ZodTypeAny {\n switch (type) {\n case 'string':\n return z.string();\n case 'integer':\n return z.number().int();\n case 'number':\n return z.number();\n case 'boolean':\n return z.boolean();\n case 'null':\n return z.null();\n case 'array':\n return z.array(z.unknown());\n case 'object':\n return z.record(z.string(), z.unknown());\n default:\n return z.unknown();\n }\n}\n\nfunction applyStringConstraints(schema: Schema, base: ZodTypeAny): ZodTypeAny {\n if ((schema.type === 'string' || (Array.isArray(schema.type) && schema.type.includes('string'))) && schema.format === 'date-time') {\n // Permissive: accept any string. JSON Schema's date-time is just a hint.\n return base;\n }\n return base;\n}\n\nfunction buildEnum(schema: Schema): ZodTypeAny | undefined {\n const enumValues = schema.enum as unknown[] | undefined;\n if (!enumValues || !Array.isArray(enumValues) || enumValues.length === 0) return undefined;\n const literals: ZodTypeAny[] = enumValues.map((value) => {\n if (value === null) return z.null();\n if (typeof value === 'string') return z.literal(value);\n if (typeof value === 'number') return z.literal(value);\n if (typeof value === 'boolean') return z.literal(value);\n return z.literal(value as never);\n });\n if (literals.length === 1) return literals[0];\n return z.union(literals as unknown as [ZodTypeAny, ZodTypeAny, ...ZodTypeAny[]]);\n}\n\nfunction buildForType(schema: Schema, type: string): ZodTypeAny {\n if (type === 'array') {\n const items = (schema.items as Schema | undefined) ?? {};\n return z.array(jsonSchemaToZod(items));\n }\n if (type === 'object') {\n const properties = (schema.properties as Record<string, Schema> | undefined) ?? {};\n const required = new Set(asArray(schema.required as string | string[] | undefined));\n const shape: Record<string, ZodTypeAny> = {};\n for (const [key, subSchema] of Object.entries(properties)) {\n const sub = jsonSchemaToZod(subSchema);\n shape[key] = required.has(key) ? sub : sub.optional();\n }\n let obj: ZodTypeAny;\n const additional = schema.additionalProperties;\n if (additional === false) {\n obj = z.strictObject(shape);\n } else if (additional && typeof additional === 'object') {\n obj = z.object(shape).catchall(jsonSchemaToZod(additional as Schema));\n } else {\n // additionalProperties is true / unspecified — be permissive\n obj = z.object(shape).catchall(z.unknown());\n }\n return obj;\n }\n return applyStringConstraints(schema, buildScalarForType(type));\n}\n\nfunction buildSchemaUntyped(schema: Schema): ZodTypeAny {\n const enumZ = buildEnum(schema);\n if (enumZ) return enumZ;\n\n if (Array.isArray(schema.oneOf)) {\n const variants = (schema.oneOf as Schema[]).map((s) => jsonSchemaToZod(s));\n if (variants.length === 1) return variants[0];\n return z.union(variants as unknown as [ZodTypeAny, ZodTypeAny, ...ZodTypeAny[]]);\n }\n\n if (Array.isArray(schema.anyOf)) {\n const variants = (schema.anyOf as Schema[]).map((s) => jsonSchemaToZod(s));\n if (variants.length === 1) return variants[0];\n return z.union(variants as unknown as [ZodTypeAny, ZodTypeAny, ...ZodTypeAny[]]);\n }\n\n const types = asArray(schema.type as string | string[] | undefined);\n\n if (types.length === 0) {\n if (schema.properties || schema.additionalProperties !== undefined) {\n return buildForType(schema, 'object');\n }\n return z.unknown();\n }\n\n if (types.length === 1) {\n return buildForType(schema, types[0]);\n }\n\n // Multi-type union, e.g. [\"string\", \"null\"] or [\"object\", \"null\"].\n const variants = types.map((t) => buildForType(schema, t));\n return z.union(variants as [ZodTypeAny, ZodTypeAny, ...ZodTypeAny[]]);\n}\n\nexport function jsonSchemaToZod(schema: Schema): ZodTypeAny {\n if (!schema || typeof schema !== 'object') return z.unknown();\n return describeIfPresent(buildSchemaUntyped(schema), schema);\n}\n","import { readFileSync, readdirSync, existsSync, statSync } from 'node:fs';\nimport { join, resolve } from 'node:path';\n\n// `__dirname` is provided by tsup's `shims: true` in both the ESM and\n// CJS bundles (see tsup.config.ts). In CJS it's a Node built-in; in ESM\n// it's emitted by esbuild as `dirname(fileURLToPath(import.meta.url))`.\n// Either way, `__dirname` resolves to the directory of the running\n// bundle file, so we don't need format-conditional logic.\ndeclare const __dirname: string;\n\n// Walk up from `start` looking for a directory whose `<sub>` subdir\n// exists. Returns the resolved subdir or null. Used to locate either\n// the bundled `dist/specs/v1` (whose anchor varies between the two\n// tsup entry points — `dist/` for `index.{js,cjs}`, `dist/adapters/`\n// for `adapters/mcp.{js,cjs}`) or the dev-mode source-tree\n// `spec/management/v1` from the harness root.\nfunction findUpwards(start: string, sub: string[], maxDepth = 8): string | null {\n let here = start;\n for (let depth = 0; depth < maxDepth; depth++) {\n const candidate = resolve(here, ...sub);\n if (existsSync(candidate) && statSync(candidate).isDirectory()) {\n return candidate;\n }\n const parent = resolve(here, '..');\n if (parent === here) return null;\n here = parent;\n }\n return null;\n}\n\nexport const MIN_SPEC_VERSION = 'v1';\nexport const MAX_SPEC_VERSION = 'v1';\n\nexport interface ManagementSpec {\n name: string;\n description: string;\n inputSchema: Record<string, unknown>;\n outputSchema: Record<string, unknown>;\n since: string;\n}\n\nexport interface ManagementFixture {\n input: Record<string, unknown>;\n output: Record<string, unknown>;\n}\n\nexport interface LoadedManagementCorpus {\n specDir: string;\n specs: Record<string, ManagementSpec>;\n fixtures: Record<string, ManagementFixture>;\n}\n\nexport interface LoadOptions {\n specDir?: string;\n}\n\nconst ENV_OVERRIDE = 'COPASS_MANAGEMENT_SPEC_DIR';\n\nfunction resolveDefaultSpecDir(): string {\n const envDir = process.env[ENV_OVERRIDE];\n if (envDir && envDir.trim().length > 0) {\n return resolve(envDir);\n }\n\n // Production: bundled specs at `<package-root>/dist/specs/v1`. Search\n // upward from `__dirname` since the entry-point bundle file may be at\n // either `dist/index.{js,cjs}` (one level up) or\n // `dist/adapters/mcp.{js,cjs}` (two levels up).\n const bundled = findUpwards(__dirname, ['specs', 'v1']);\n if (bundled) return bundled;\n\n // Dev fallback: source-tree specs at `<harness-root>/spec/management/v1`.\n const sourceTree = findUpwards(__dirname, ['spec', 'management', 'v1']);\n if (sourceTree) return sourceTree;\n\n throw new Error(\n `loadManagementSpecs: could not locate spec directory. Searched upward from ${__dirname} for both \\`specs/v1\\` (bundled) and \\`spec/management/v1\\` (source). Set ${ENV_OVERRIDE} to override.`,\n );\n}\n\nfunction assertSpecShape(name: string, raw: unknown): asserts raw is ManagementSpec {\n if (!raw || typeof raw !== 'object') {\n throw new Error(`spec ${name}: not an object`);\n }\n const obj = raw as Record<string, unknown>;\n for (const required of ['name', 'description', 'inputSchema', 'outputSchema', 'since']) {\n if (!(required in obj)) {\n throw new Error(`spec ${name}: missing required field \"${required}\"`);\n }\n }\n if (typeof obj.name !== 'string' || typeof obj.description !== 'string') {\n throw new Error(`spec ${name}: name/description must be strings`);\n }\n if (typeof obj.since !== 'string') {\n throw new Error(`spec ${name}: since must be a string`);\n }\n if (typeof obj.inputSchema !== 'object' || typeof obj.outputSchema !== 'object') {\n throw new Error(`spec ${name}: inputSchema/outputSchema must be objects`);\n }\n}\n\nconst JSON_SCHEMA_META_KEYS = new Set([\n '$schema',\n '$id',\n '$defs',\n '$ref',\n '$comment',\n]);\n\nfunction stripJsonSchemaMeta(value: unknown): unknown {\n if (Array.isArray(value)) {\n return value.map(stripJsonSchemaMeta);\n }\n if (value && typeof value === 'object') {\n const out: Record<string, unknown> = {};\n for (const [k, v] of Object.entries(value as Record<string, unknown>)) {\n if (JSON_SCHEMA_META_KEYS.has(k)) continue;\n out[k] = stripJsonSchemaMeta(v);\n }\n return out;\n }\n return value;\n}\n\nfunction readJson(path: string): unknown {\n return JSON.parse(readFileSync(path, 'utf-8'));\n}\n\n/**\n * Load every `<tool>.json` and matching `examples/<tool>.example.json`\n * fixture from the management spec directory.\n *\n * Resolution order for `specDir`:\n * 1. Explicit option, when passed\n * 2. `COPASS_MANAGEMENT_SPEC_DIR` env override\n * 3. Bundled `dist/specs/v1/`\n * 4. Source-tree `copass/spec/management/v1/` (dev mode)\n */\nexport function loadManagementSpecs(options: LoadOptions = {}): LoadedManagementCorpus {\n const specDir = options.specDir ? resolve(options.specDir) : resolveDefaultSpecDir();\n\n if (!existsSync(specDir) || !statSync(specDir).isDirectory()) {\n throw new Error(`loadManagementSpecs: ${specDir} is not a directory`);\n }\n\n const specs: Record<string, ManagementSpec> = {};\n for (const entry of readdirSync(specDir)) {\n if (!entry.endsWith('.json')) continue;\n const file = join(specDir, entry);\n if (!statSync(file).isFile()) continue;\n const raw = readJson(file);\n assertSpecShape(entry, raw);\n const cleaned: ManagementSpec = {\n ...raw,\n inputSchema: stripJsonSchemaMeta(raw.inputSchema) as Record<string, unknown>,\n outputSchema: stripJsonSchemaMeta(raw.outputSchema) as Record<string, unknown>,\n };\n specs[cleaned.name] = cleaned;\n }\n\n const fixtures: Record<string, ManagementFixture> = {};\n const examplesDir = join(specDir, 'examples');\n if (existsSync(examplesDir) && statSync(examplesDir).isDirectory()) {\n for (const entry of readdirSync(examplesDir)) {\n if (!entry.endsWith('.example.json')) continue;\n const toolName = entry.slice(0, -'.example.json'.length);\n const file = join(examplesDir, entry);\n const raw = readJson(file) as Record<string, unknown>;\n if (!raw || typeof raw !== 'object' || !('input' in raw) || !('output' in raw)) {\n throw new Error(`fixture ${entry}: must have \"input\" and \"output\" keys`);\n }\n fixtures[toolName] = raw as unknown as ManagementFixture;\n }\n }\n\n return { specDir, specs, fixtures };\n}\n","import type { ToolContext, ToolHandler } from '../registrar.js';\n\ntype RegisterUserMcpRequest = Parameters<\n ToolContext['client']['sources']['registerUserMcp']\n>[1];\n\nexport const addUserMcpSource: ToolHandler = async (\n ctx: ToolContext,\n input: Record<string, unknown>,\n) => {\n const authKind = String(input.auth_kind) as RegisterUserMcpRequest['auth_kind'];\n const request: RegisterUserMcpRequest = {\n name: String(input.name),\n base_url: String(input.base_url),\n auth_kind: authKind,\n };\n if (typeof input.token === 'string') {\n request.token = input.token;\n }\n if (typeof input.auth_header === 'string') {\n request.auth_header = input.auth_header;\n }\n if (typeof input.app_namespace === 'string') {\n request.app_namespace = input.app_namespace;\n }\n if (Array.isArray(input.allowed_tools)) {\n request.allowed_tools = input.allowed_tools.map(String);\n }\n if (Array.isArray(input.ingest_tool_calls)) {\n request.ingest_tool_calls = input.ingest_tool_calls as Array<\n Record<string, unknown>\n >;\n }\n if (typeof input.rate_cap_per_minute === 'number') {\n request.rate_cap_per_minute = input.rate_cap_per_minute;\n }\n if (typeof input.webhook_rate_cap_per_minute === 'number') {\n request.webhook_rate_cap_per_minute = input.webhook_rate_cap_per_minute;\n }\n return ctx.client.sources.registerUserMcp(ctx.sandboxId, request);\n};\n","import type { ToolContext, ToolHandler } from '../registrar.js';\n\ntype ConnectLinearRequest = Parameters<\n ToolContext['client']['sources']['connectLinear']\n>[1];\n\nexport const connectLinear: ToolHandler = async (\n ctx: ToolContext,\n input: Record<string, unknown>,\n) => {\n const request: ConnectLinearRequest = {\n api_key: String(input.api_key),\n };\n if (typeof input.name === 'string') {\n request.name = input.name;\n }\n if (Array.isArray(input.include)) {\n request.include = input.include.map(String) as ConnectLinearRequest['include'];\n }\n if (typeof input.rate_cap_per_minute === 'number') {\n request.rate_cap_per_minute = input.rate_cap_per_minute;\n }\n if (typeof input.poll_interval_seconds === 'number') {\n request.poll_interval_seconds = input.poll_interval_seconds;\n }\n return ctx.client.sources.connectLinear(ctx.sandboxId, request);\n};\n","import {\n DEFAULT_MODEL_BY_BACKEND,\n type AgentBackend,\n type AgentModelSettings,\n type CreateAgentRequest,\n} from '@copass/core';\n\nimport type { ToolContext, ToolHandler } from '../registrar.js';\n\nexport const createAgent: ToolHandler = async (\n ctx: ToolContext,\n input: Record<string, unknown>,\n) => {\n const backend: AgentBackend =\n input.backend === 'google' ? 'google' : 'anthropic';\n const defaultModel = DEFAULT_MODEL_BY_BACKEND[backend];\n\n const modelSettings: AgentModelSettings = {\n backend,\n model: typeof input.model === 'string' ? input.model : defaultModel,\n };\n if (typeof input.temperature === 'number') {\n modelSettings.temperature = input.temperature;\n }\n if (typeof input.max_tokens === 'number') {\n modelSettings.max_tokens = input.max_tokens;\n }\n if (typeof input.max_turns === 'number') {\n modelSettings.max_turns = input.max_turns;\n }\n if (typeof input.timeout_s === 'number') {\n modelSettings.timeout_s = input.timeout_s;\n }\n\n const request: CreateAgentRequest = {\n slug: String(input.slug),\n name: String(input.name),\n system_prompt: String(input.system_prompt),\n model_settings: modelSettings,\n };\n if (typeof input.description === 'string') {\n request.description = input.description;\n }\n if (Array.isArray(input.tool_allowlist)) {\n request.tool_allowlist = input.tool_allowlist.map(String);\n }\n\n const agent = await ctx.client.agents.create(ctx.sandboxId, request);\n return { agent };\n};\n","import type { CreateTriggerRequest } from '@copass/core';\n\nimport type { ToolContext, ToolHandler } from '../registrar.js';\n\nexport const createTrigger: ToolHandler = async (\n ctx: ToolContext,\n input: Record<string, unknown>,\n) => {\n const agentSlug = String(input.agent_slug);\n const dataSourceId = String(input.data_source_id);\n const eventType =\n typeof input.event_type_filter === 'string' && input.event_type_filter.length > 0\n ? input.event_type_filter\n : '*';\n const request: CreateTriggerRequest = {\n data_source_id: dataSourceId,\n event_type_filter: eventType,\n };\n if (\n typeof input.filter_config === 'object' &&\n input.filter_config !== null\n ) {\n request.filter_config = input.filter_config as Record<string, unknown>;\n }\n if (typeof input.rate_limit_per_hour === 'number') {\n request.rate_limit_per_hour = input.rate_limit_per_hour;\n }\n const trigger = await ctx.client.agents.triggers.create(\n ctx.sandboxId,\n agentSlug,\n request,\n );\n return { trigger };\n};\n","import type { ToolContext, ToolHandler } from '../registrar.js';\n\nexport const getAgent: ToolHandler = async (\n ctx: ToolContext,\n input: Record<string, unknown>,\n) => {\n const slug = String(input.slug);\n return ctx.client.agents.retrieve(ctx.sandboxId, slug);\n};\n","import type { ToolContext, ToolHandler } from '../registrar.js';\n\nexport const getRunTrace: ToolHandler = async (\n ctx: ToolContext,\n input: Record<string, unknown>,\n) => {\n const runId = String(input.run_id);\n return ctx.client.agents.getRun(ctx.sandboxId, runId);\n};\n","import type { ToolContext, ToolHandler } from '../registrar.js';\n\nexport const getSource: ToolHandler = async (\n ctx: ToolContext,\n input: Record<string, unknown>,\n) => {\n const dataSourceId = String(input.data_source_id);\n return ctx.client.sources.retrieve(ctx.sandboxId, dataSourceId);\n};\n","import type {\n ConnectionRole,\n CreateSandboxConnectionRequest,\n} from '@copass/core';\n\nimport type { ToolContext, ToolHandler } from '../registrar.js';\n\nexport const grantSandboxConnection: ToolHandler = async (\n ctx: ToolContext,\n input: Record<string, unknown>,\n) => {\n const role = String(input.role) as ConnectionRole;\n const request: CreateSandboxConnectionRequest = { role };\n if (typeof input.copass_id === 'string') {\n request.copass_id = input.copass_id;\n }\n if (typeof input.user_id === 'string') {\n request.user_id = input.user_id;\n }\n if (typeof input.project_id === 'string') {\n request.project_id = input.project_id;\n }\n if (typeof input.label === 'string') {\n request.label = input.label;\n }\n if (typeof input.expires_at === 'string') {\n request.expires_at = input.expires_at;\n }\n return ctx.client.sandboxConnections.create(ctx.sandboxId, request);\n};\n","import type { ToolContext, ToolHandler } from '../registrar.js';\n\n/**\n * Surfaces the agent tool catalog grouped by app_slug.\n *\n * The backend returns the flat ``{tools, count}`` shape; this handler\n * adds the ``by_app`` map the spec promises (``{[app_slug]: Tool[]}``)\n * so callers can render per-provider sections without re-grouping\n * client-side. Optional ``app_slug`` input filters the flat list AND\n * the by_app map to a single provider.\n */\nexport const listAgentTools: ToolHandler = async (\n ctx: ToolContext,\n input: Record<string, unknown>,\n) => {\n const filterAppSlug =\n typeof input.app_slug === 'string' ? input.app_slug : undefined;\n\n const catalog = await ctx.client.agents.listTools(ctx.sandboxId);\n const tools = filterAppSlug\n ? catalog.tools.filter((t) => t.app_slug === filterAppSlug)\n : catalog.tools;\n\n const by_app: Record<\n string,\n Array<{ name: string; description?: string | null }>\n > = {};\n for (const tool of tools) {\n const slug = tool.app_slug || 'unknown';\n if (!by_app[slug]) by_app[slug] = [];\n by_app[slug].push({ name: tool.name, description: tool.description ?? null });\n }\n\n return { tools, by_app, count: tools.length };\n};\n","import type { ToolContext, ToolHandler } from '../registrar.js';\n\nexport const listAgents: ToolHandler = async (\n ctx: ToolContext,\n input: Record<string, unknown>,\n) => {\n return ctx.client.agents.list(ctx.sandboxId, {\n status:\n input.status === 'active' || input.status === 'archived'\n ? input.status\n : undefined,\n });\n};\n","import type { ToolContext, ToolHandler } from '../registrar.js';\n\nexport const listApiKeys: ToolHandler = async (ctx: ToolContext) => {\n // The core resource returns a flat list — wrap into the shape the spec\n // declares (`{ keys, count }`). Filtering by `kinds` / `include_revoked`\n // is server-side once the API exposes those query params; today we\n // surface the inventory and let the caller filter post-hoc.\n const keys = await ctx.client.apiKeys.list();\n return { keys, count: Array.isArray(keys) ? keys.length : 0 };\n};\n","import type { ToolContext, ToolHandler } from '../registrar.js';\n\nexport const listApps: ToolHandler = async (\n ctx: ToolContext,\n input: Record<string, unknown>,\n) => {\n return ctx.client.integrations.catalog(ctx.sandboxId, {\n q: typeof input.q === 'string' ? input.q : undefined,\n cursor: typeof input.cursor === 'string' ? input.cursor : undefined,\n limit: typeof input.limit === 'number' ? input.limit : undefined,\n });\n};\n","import type { ToolContext, ToolHandler } from '../registrar.js';\n\nexport const listConnectedAccounts: ToolHandler = async (\n ctx: ToolContext,\n input: Record<string, unknown>,\n) => {\n return ctx.client.integrations.listAccounts(ctx.sandboxId, {\n app_slug: typeof input.app_slug === 'string' ? input.app_slug : undefined,\n });\n};\n","import type { ToolContext, ToolHandler } from '../registrar.js';\n\nexport const listRuns: ToolHandler = async (\n ctx: ToolContext,\n input: Record<string, unknown>,\n) => {\n const slug = String(input.agent_slug);\n const limit = typeof input.limit === 'number' ? input.limit : undefined;\n return ctx.client.agents.listRuns(ctx.sandboxId, slug, { limit });\n};\n","import type { ToolContext, ToolHandler } from '../registrar.js';\n\n/**\n * Wraps the bare-array SDK response in the ``{connections, count}``\n * envelope the spec requires. MCP's ``structuredContent`` rejects\n * bare arrays — every list-style tool must return an object.\n */\nexport const listSandboxConnections: ToolHandler = async (\n ctx: ToolContext,\n input: Record<string, unknown>,\n) => {\n const connections = await ctx.client.sandboxConnections.list(ctx.sandboxId, {\n include_revoked: input.include_revoked === true,\n });\n return { connections, count: connections.length };\n};\n","import type { ToolContext, ToolHandler } from '../registrar.js';\n\nexport const listSandboxes: ToolHandler = async (ctx: ToolContext) => {\n return ctx.client.sandboxes.list();\n};\n","import type { ToolContext, ToolHandler } from '../registrar.js';\n\nexport const listSources: ToolHandler = async (\n ctx: ToolContext,\n input: Record<string, unknown>,\n) => {\n return ctx.client.sources.list(ctx.sandboxId, {\n provider: typeof input.provider === 'string' ? input.provider : undefined,\n });\n};\n","import type { ToolContext, ToolHandler } from '../registrar.js';\n\nexport const listTriggerComponents: ToolHandler = async (\n ctx: ToolContext,\n input: Record<string, unknown>,\n) => {\n return ctx.client.agents.listTriggerComponents(ctx.sandboxId, {\n app: typeof input.app === 'string' ? input.app : undefined,\n q: typeof input.q === 'string' ? input.q : undefined,\n limit: typeof input.limit === 'number' ? input.limit : undefined,\n });\n};\n","import type { ToolContext, ToolHandler } from '../registrar.js';\n\nexport const listTriggers: ToolHandler = async (\n ctx: ToolContext,\n input: Record<string, unknown>,\n) => {\n const slug = String(input.agent_slug);\n return ctx.client.agents.triggers.list(ctx.sandboxId, slug);\n};\n","import type { ToolContext, ToolHandler } from '../registrar.js';\n\nexport const pauseTrigger: ToolHandler = async (\n ctx: ToolContext,\n input: Record<string, unknown>,\n) => {\n const triggerId = String(input.trigger_id);\n const trigger = await ctx.client.agents.triggers.updateById(\n ctx.sandboxId,\n triggerId,\n { status: 'paused' },\n );\n return { trigger };\n};\n","import type { CreateDataSourceRequest, DataSourceIngestionMode, DataSourceKind } from '@copass/core';\n\nimport type { ToolContext, ToolHandler } from '../registrar.js';\n\nexport const provisionSource: ToolHandler = async (\n ctx: ToolContext,\n input: Record<string, unknown>,\n) => {\n const adapterConfig: Record<string, unknown> =\n typeof input.adapter_config === 'object' && input.adapter_config !== null\n ? { ...(input.adapter_config as Record<string, unknown>) }\n : {};\n if (input.ingest_to_graph === true) {\n adapterConfig.ingest_to_graph = true;\n }\n\n const request: CreateDataSourceRequest = {\n provider: typeof input.provider === 'string' ? input.provider : 'pipedream',\n name: String(input.name),\n };\n if (typeof input.ingestion_mode === 'string') {\n request.ingestion_mode = input.ingestion_mode as DataSourceIngestionMode;\n }\n if (input.kind === 'durable' || input.kind === 'ephemeral') {\n request.kind = input.kind as DataSourceKind;\n }\n if (typeof input.external_account_id === 'string') {\n request.external_account_id = input.external_account_id;\n }\n if (typeof input.poll_interval_seconds === 'number') {\n request.poll_interval_seconds = input.poll_interval_seconds;\n }\n if (Object.keys(adapterConfig).length > 0) {\n request.adapter_config = adapterConfig;\n }\n\n const source = await ctx.client.sources.register(ctx.sandboxId, request);\n return { source };\n};\n","import type { ToolContext, ToolHandler } from '../registrar.js';\n\nexport const purgeSourceContext: ToolHandler = async (\n ctx: ToolContext,\n input: Record<string, unknown>,\n) => {\n const sourceId = String(input.data_source_id);\n const deleteSource =\n typeof input.delete_source === 'boolean' ? input.delete_source : undefined;\n return ctx.client.sources.purge(ctx.sandboxId, sourceId, {\n ...(deleteSource !== undefined ? { delete_source: deleteSource } : {}),\n });\n};\n","import type { ToolContext, ToolHandler } from '../registrar.js';\n\nexport const resumeTrigger: ToolHandler = async (\n ctx: ToolContext,\n input: Record<string, unknown>,\n) => {\n const triggerId = String(input.trigger_id);\n const trigger = await ctx.client.agents.triggers.updateById(\n ctx.sandboxId,\n triggerId,\n { status: 'active' },\n );\n return { trigger };\n};\n","import type { ToolContext, ToolHandler } from '../registrar.js';\n\nexport const revokeSandboxConnection: ToolHandler = async (\n ctx: ToolContext,\n input: Record<string, unknown>,\n) => {\n const connectionId = String(input.connection_id);\n return ctx.client.sandboxConnections.revoke(ctx.sandboxId, connectionId);\n};\n","import type { ToolContext, ToolHandler } from '../registrar.js';\n\nexport const revokeUserMcpSource: ToolHandler = async (\n ctx: ToolContext,\n input: Record<string, unknown>,\n) => {\n const sourceId = String(input.data_source_id);\n return ctx.client.sources.revokeUserMcp(ctx.sandboxId, sourceId);\n};\n","import type { ConnectRequest } from '@copass/core';\n\nimport type { ToolContext, ToolHandler } from '../registrar.js';\n\nexport const startIntegrationConnect: ToolHandler = async (\n ctx: ToolContext,\n input: Record<string, unknown>,\n) => {\n const appSlug = String(input.app_slug);\n const successRedirect =\n typeof input.success_redirect_uri === 'string'\n ? input.success_redirect_uri\n : '';\n const errorRedirect =\n typeof input.error_redirect_uri === 'string'\n ? input.error_redirect_uri\n : '';\n const request: ConnectRequest = {\n success_redirect_uri: successRedirect,\n error_redirect_uri: errorRedirect,\n };\n if (typeof input.webhook_uri === 'string') {\n request.webhook_uri = input.webhook_uri;\n }\n return ctx.client.integrations.connect(ctx.sandboxId, appSlug, request);\n};\n","import type { ToolContext, ToolHandler } from '../registrar.js';\n\nexport const testUserMcpSource: ToolHandler = async (\n ctx: ToolContext,\n input: Record<string, unknown>,\n) => {\n const sourceId = String(input.data_source_id);\n return ctx.client.sources.testUserMcp(ctx.sandboxId, sourceId);\n};\n","import type { ToolContext, ToolHandler } from '../registrar.js';\n\nexport const updateAgentModelSettings: ToolHandler = async (\n ctx: ToolContext,\n input: Record<string, unknown>,\n) => {\n const slug = String(input.slug);\n const patch: Record<string, unknown> = {};\n if (input.backend === 'anthropic' || input.backend === 'google') {\n patch.backend = input.backend;\n }\n if (typeof input.model === 'string') {\n patch.model = input.model;\n }\n if (typeof input.temperature === 'number') {\n patch.temperature = input.temperature;\n }\n if (typeof input.max_tokens === 'number') {\n patch.max_tokens = input.max_tokens;\n }\n if (typeof input.max_turns === 'number') {\n patch.max_turns = input.max_turns;\n }\n if (typeof input.timeout_s === 'number') {\n patch.timeout_s = input.timeout_s;\n }\n const agent = await ctx.client.agents.updateModelSettings(\n ctx.sandboxId,\n slug,\n patch as Parameters<typeof ctx.client.agents.updateModelSettings>[2],\n );\n return { agent };\n};\n","import type { ToolContext, ToolHandler } from '../registrar.js';\n\nexport const updateAgentPrompt: ToolHandler = async (\n ctx: ToolContext,\n input: Record<string, unknown>,\n) => {\n const slug = String(input.slug);\n const agent = await ctx.client.agents.update(ctx.sandboxId, slug, {\n system_prompt: String(input.system_prompt),\n });\n return { agent };\n};\n","import type { ToolContext, ToolHandler } from '../registrar.js';\n\nexport const updateAgentToolSources: ToolHandler = async (\n ctx: ToolContext,\n input: Record<string, unknown>,\n) => {\n const slug = String(input.slug);\n const raw = input.tool_sources;\n const toolSources: string[] | null =\n raw === null\n ? null\n : Array.isArray(raw)\n ? raw.map(String)\n : null;\n const agent = await ctx.client.agents.updateToolSources(\n ctx.sandboxId,\n slug,\n toolSources,\n );\n return { agent };\n};\n","import type { ToolContext, ToolHandler } from '../registrar.js';\n\nexport const updateAgentTools: ToolHandler = async (\n ctx: ToolContext,\n input: Record<string, unknown>,\n) => {\n const slug = String(input.slug);\n const toolAllowlist = Array.isArray(input.tool_allowlist)\n ? input.tool_allowlist.map(String)\n : [];\n const agent = await ctx.client.agents.update(ctx.sandboxId, slug, {\n tool_allowlist: toolAllowlist,\n });\n return { agent };\n};\n","import type {\n DataSourceIngestionMode,\n UpdateDataSourceRequest,\n} from '@copass/core';\n\nimport type { ToolContext, ToolHandler } from '../registrar.js';\n\nexport const updateSource: ToolHandler = async (\n ctx: ToolContext,\n input: Record<string, unknown>,\n) => {\n const sourceId = String(input.data_source_id);\n const updates: UpdateDataSourceRequest = {};\n if (typeof input.name === 'string') {\n updates.name = input.name;\n }\n if (typeof input.ingestion_mode === 'string') {\n updates.ingestion_mode = input.ingestion_mode as DataSourceIngestionMode;\n }\n if (typeof input.external_account_id === 'string') {\n updates.external_account_id = input.external_account_id;\n }\n if (typeof input.poll_interval_seconds === 'number') {\n updates.poll_interval_seconds = input.poll_interval_seconds;\n }\n\n let mergeAdapterConfig = false;\n let adapterConfig: Record<string, unknown> | undefined;\n if (\n typeof input.adapter_config === 'object' &&\n input.adapter_config !== null\n ) {\n adapterConfig = { ...(input.adapter_config as Record<string, unknown>) };\n }\n if (typeof input.ingest_to_graph === 'boolean') {\n adapterConfig = { ...(adapterConfig ?? {}), ingest_to_graph: input.ingest_to_graph };\n mergeAdapterConfig = true;\n }\n if (adapterConfig !== undefined) {\n updates.adapter_config = adapterConfig;\n }\n\n const source = await ctx.client.sources.update(\n ctx.sandboxId,\n sourceId,\n updates,\n { mergeAdapterConfig },\n );\n return { source };\n};\n","import type { UpdateTriggerRequest } from '@copass/core';\n\nimport type { ToolContext, ToolHandler } from '../registrar.js';\n\nexport const updateTrigger: ToolHandler = async (\n ctx: ToolContext,\n input: Record<string, unknown>,\n) => {\n const triggerId = String(input.trigger_id);\n const patch: UpdateTriggerRequest = {};\n if (typeof input.event_type_filter === 'string') {\n patch.event_type_filter = input.event_type_filter;\n }\n if ('rate_limit_per_hour' in input) {\n const v = input.rate_limit_per_hour;\n if (v === null) {\n patch.clear_rate_limit = true;\n } else if (typeof v === 'number') {\n patch.rate_limit_per_hour = v;\n }\n }\n if ('filter_config' in input) {\n const v = input.filter_config;\n if (v === null) {\n patch.clear_filter_config = true;\n } else if (typeof v === 'object' && v !== null) {\n patch.filter_config = v as Record<string, unknown>;\n }\n }\n const trigger = await ctx.client.agents.triggers.updateById(\n ctx.sandboxId,\n triggerId,\n patch,\n );\n return { trigger };\n};\n","import type { ToolContext, ToolHandler } from '../registrar.js';\n\nexport const wireIntegrationToAgent: ToolHandler = async (\n ctx: ToolContext,\n input: Record<string, unknown>,\n) => {\n const agentSlug = String(input.agent_slug);\n const appSlug = String(input.app_slug);\n return ctx.client.agents.wireIntegration(ctx.sandboxId, agentSlug, appSlug);\n};\n","import type { ToolHandler } from '../registrar.js';\nimport { addUserMcpSource } from './add_user_mcp_source.js';\nimport { connectLinear } from './connect_linear.js';\nimport { createAgent } from './create_agent.js';\nimport { createTrigger } from './create_trigger.js';\nimport { getAgent } from './get_agent.js';\nimport { getRunTrace } from './get_run_trace.js';\nimport { getSource } from './get_source.js';\nimport { grantSandboxConnection } from './grant_sandbox_connection.js';\nimport { listAgentTools } from './list_agent_tools.js';\nimport { listAgents } from './list_agents.js';\nimport { listApiKeys } from './list_api_keys.js';\nimport { listApps } from './list_apps.js';\nimport { listConnectedAccounts } from './list_connected_accounts.js';\nimport { listRuns } from './list_runs.js';\nimport { listSandboxConnections } from './list_sandbox_connections.js';\nimport { listSandboxes } from './list_sandboxes.js';\nimport { listSources } from './list_sources.js';\nimport { listTriggerComponents } from './list_trigger_components.js';\nimport { listTriggers } from './list_triggers.js';\nimport { pauseTrigger } from './pause_trigger.js';\nimport { provisionSource } from './provision_source.js';\nimport { purgeSourceContext } from './purge_source_context.js';\nimport { resumeTrigger } from './resume_trigger.js';\nimport { revokeSandboxConnection } from './revoke_sandbox_connection.js';\nimport { revokeUserMcpSource } from './revoke_user_mcp_source.js';\nimport { startIntegrationConnect } from './start_integration_connect.js';\nimport { testUserMcpSource } from './test_user_mcp_source.js';\nimport { updateAgentModelSettings } from './update_agent_model_settings.js';\nimport { updateAgentPrompt } from './update_agent_prompt.js';\nimport { updateAgentToolSources } from './update_agent_tool_sources.js';\nimport { updateAgentTools } from './update_agent_tools.js';\nimport { updateSource } from './update_source.js';\nimport { updateTrigger } from './update_trigger.js';\nimport { wireIntegrationToAgent } from './wire_integration_to_agent.js';\n\nexport const TOOL_HANDLERS: Record<string, ToolHandler> = {\n list_sandboxes: listSandboxes,\n list_sources: listSources,\n get_source: getSource,\n list_agents: listAgents,\n get_agent: getAgent,\n list_triggers: listTriggers,\n list_runs: listRuns,\n get_run_trace: getRunTrace,\n list_trigger_components: listTriggerComponents,\n list_apps: listApps,\n list_connected_accounts: listConnectedAccounts,\n list_api_keys: listApiKeys,\n list_agent_tools: listAgentTools,\n list_sandbox_connections: listSandboxConnections,\n create_agent: createAgent,\n update_agent_prompt: updateAgentPrompt,\n update_agent_tools: updateAgentTools,\n update_agent_tool_sources: updateAgentToolSources,\n update_agent_model_settings: updateAgentModelSettings,\n add_user_mcp_source: addUserMcpSource,\n wire_integration_to_agent: wireIntegrationToAgent,\n provision_source: provisionSource,\n purge_source_context: purgeSourceContext,\n update_source: updateSource,\n start_integration_connect: startIntegrationConnect,\n connect_linear: connectLinear,\n test_user_mcp_source: testUserMcpSource,\n revoke_user_mcp_source: revokeUserMcpSource,\n create_trigger: createTrigger,\n pause_trigger: pauseTrigger,\n resume_trigger: resumeTrigger,\n update_trigger: updateTrigger,\n grant_sandbox_connection: grantSandboxConnection,\n revoke_sandbox_connection: revokeSandboxConnection,\n};\n\nexport {\n addUserMcpSource,\n connectLinear,\n createAgent,\n createTrigger,\n getAgent,\n getRunTrace,\n getSource,\n grantSandboxConnection,\n listAgentTools,\n listAgents,\n listApiKeys,\n listApps,\n listConnectedAccounts,\n listRuns,\n listSandboxConnections,\n listSandboxes,\n listSources,\n listTriggerComponents,\n listTriggers,\n pauseTrigger,\n provisionSource,\n purgeSourceContext,\n resumeTrigger,\n revokeSandboxConnection,\n revokeUserMcpSource,\n startIntegrationConnect,\n testUserMcpSource,\n updateAgentModelSettings,\n updateAgentPrompt,\n updateAgentToolSources,\n updateAgentTools,\n updateSource,\n updateTrigger,\n wireIntegrationToAgent,\n};\n","import type { CopassClient } from '@copass/core';\nimport type { ZodTypeAny } from 'zod';\n\nimport { jsonSchemaToZod } from './json-schema-to-zod.js';\nimport {\n loadManagementSpecs,\n type LoadOptions,\n type ManagementSpec,\n} from './specs.js';\nimport { TOOL_HANDLERS } from './tools/index.js';\n\nexport interface ToolContext {\n client: CopassClient;\n sandboxId: string;\n}\n\nexport type ToolHandler = (\n ctx: ToolContext,\n input: Record<string, unknown>,\n) => Promise<unknown>;\n\nexport interface ToolRegistration {\n name: string;\n description: string;\n /** Raw JSON Schema for the tool's input. */\n inputSchema: Record<string, unknown>;\n /** Raw JSON Schema for the tool's output. */\n outputSchema: Record<string, unknown>;\n /** Compiled Zod parser for the input. */\n inputZod: ZodTypeAny;\n /** Compiled Zod parser for the output. */\n outputZod: ZodTypeAny;\n /** Async handler that runs the call and returns the parsed result. */\n handler: (input: unknown) => Promise<unknown>;\n /** The full spec object as loaded from disk. */\n spec: ManagementSpec;\n}\n\nexport type Register = (registration: ToolRegistration) => void;\n\nexport interface RegistrarOptions extends LoadOptions {\n /** Sandbox the registered tools target. Required — every Phase 1 read tool\n * is sandbox-scoped. */\n sandboxId: string;\n /**\n * When true, validate the handler's HTTP response against the tool's\n * `outputSchema` before returning. Defaults to `false` because handlers\n * already pass through `@copass/core`-typed responses; the conformance\n * test enforces parity at build time. Enabling this adds runtime cost.\n */\n validateOutput?: boolean;\n /**\n * When true, silently skip spec entries that have no handler bound\n * in `TOOL_HANDLERS` rather than raising. Used by Phase 2A's\n * spec-only landing where the JSON Schemas + fixtures ship before\n * the per-tool TS / Python handler files (Phase 2B). Defaults to\n * `false` — production wiring should always pin every spec to a\n * handler.\n */\n allowMissingHandlers?: boolean;\n}\n\n/**\n * Transport-agnostic management-tool registrar.\n *\n * Loads the management spec corpus, builds Zod parsers for each tool's\n * input/output schema, wires every spec entry to its `@copass/core`\n * handler, and calls `register(...)` once per tool.\n *\n * The transport (MCP SDK, backend tool resolver, plain function table)\n * is the caller's concern.\n */\nexport function registerManagementTools(\n register: Register,\n client: CopassClient,\n options: RegistrarOptions,\n): ToolRegistration[] {\n const corpus = loadManagementSpecs(options);\n const ctx: ToolContext = { client, sandboxId: options.sandboxId };\n const registrations: ToolRegistration[] = [];\n\n const names = Object.keys(corpus.specs).sort();\n for (const name of names) {\n const spec = corpus.specs[name];\n const handler = TOOL_HANDLERS[name];\n if (!handler) {\n if (options.allowMissingHandlers) {\n continue;\n }\n throw new Error(\n `registerManagementTools: no handler implementation for tool \"${name}\". Add one in src/tools/.`,\n );\n }\n\n const inputZod = jsonSchemaToZod(spec.inputSchema);\n const outputZod = jsonSchemaToZod(spec.outputSchema);\n\n const wrapped = async (rawInput: unknown): Promise<unknown> => {\n const parsedInput = inputZod.parse(rawInput ?? {}) as Record<string, unknown>;\n const result = await handler(ctx, parsedInput);\n if (options.validateOutput) {\n return outputZod.parse(result);\n }\n return result;\n };\n\n const registration: ToolRegistration = {\n name: spec.name,\n description: spec.description,\n inputSchema: spec.inputSchema,\n outputSchema: spec.outputSchema,\n inputZod,\n outputZod,\n handler: wrapped,\n spec,\n };\n\n register(registration);\n registrations.push(registration);\n }\n\n return registrations;\n}\n"],"mappings":"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","names":["variants","path"]} |
@@ -10,3 +10,3 @@ # Copass Management Tool Spec — `v1` | ||
| `v1/` ships **33 tools**: | ||
| `v1/` ships **34 tools**: | ||
@@ -29,2 +29,3 @@ - **14 read tools** (Phase 1, `since: "v1"`): `list_sandboxes`, | ||
| `revoke_sandbox_connection`. | ||
| - **1 write tool** (`since: "v1.3"`): `purge_source_context`. | ||
@@ -31,0 +32,0 @@ Four destructive / sensitive Concierge tools remain BACKEND_ONLY by |
+3
-3
| { | ||
| "name": "@copass/management", | ||
| "version": "0.5.9", | ||
| "version": "0.5.11", | ||
| "description": "Spec-driven management tool registrar for Copass agents (read-only, Phase 1).", | ||
@@ -71,3 +71,3 @@ "publishConfig": { | ||
| "devDependencies": { | ||
| "@copass/core": "^0.6.0", | ||
| "@copass/core": "^0.6.3", | ||
| "@modelcontextprotocol/sdk": "^1.29.0", | ||
@@ -84,3 +84,3 @@ "@types/node": "^25.0.0", | ||
| }, | ||
| "gitHead": "43407828b3e4548801c131b17a4b7db0c7204ef0" | ||
| "gitHead": "89abb7a320314feed66ff82fcb251f41ad2a70cb" | ||
| } |
Sorry, the diff of this file is too big to display
Sorry, the diff of this file is too big to display
491504
1.61%85
2.41%7530
1.35%