{"version":3,"file":"tools.mjs","names":[],"sources":["../src/tool/metadata.ts"],"sourcesContent":["import * as v from 'valibot'\n\nimport type { ToolCapability } from '@open-pencil/core/tools'\n\nimport type { MCPToolScope } from '#mcp/tool/scope'\nexport type { ToolCapability } from '@open-pencil/core/tools'\n\nconst TOOL_EFFECTS = ['read', 'write'] as const\nconst TOOL_AVAILABILITIES = ['default', 'eval', 'filesystem'] as const\nconst TOOL_CAPABILITIES = [\n  'document:read',\n  'document:write',\n  'filesystem:read',\n  'filesystem:write',\n  'network:access',\n  'code:execute',\n  'settings:read',\n  'settings:write'\n] as const satisfies readonly ToolCapability[]\n\nexport type ToolEffect = (typeof TOOL_EFFECTS)[number]\nexport type ToolAvailability = (typeof TOOL_AVAILABILITIES)[number]\n\nconst toolDescriptorSchema = v.object({\n  name: v.pipe(v.string(), v.minLength(1)),\n  description: v.string(),\n  effect: v.picklist(TOOL_EFFECTS),\n  availability: v.picklist(TOOL_AVAILABILITIES),\n  capabilities: v.array(v.picklist(TOOL_CAPABILITIES)),\n  enabled: v.boolean()\n})\n\nexport type ToolDescriptor = v.InferOutput<typeof toolDescriptorSchema>\n\nexport interface ToolPolicy {\n  allowEval: boolean\n  disabledTools: string[]\n  /** What clients can reach; see `MCPToolScope`. */\n  scope: MCPToolScope\n}\n\nexport function parseToolDescriptor(value: unknown): ToolDescriptor | null {\n  const parsed = v.safeParse(toolDescriptorSchema, value)\n  return parsed.success ? parsed.output : null\n}\n"],"mappings":";;;;AAuBA,MAAM,uBAAuB,EAAE,OAAO;CACpC,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,EAAE,UAAU,CAAC,CAAC;CACvC,aAAa,EAAE,OAAO;CACtB,QAAQ,EAAE,SAAS,CAnBC,QAAQ,OAmBT,CAAY;CAC/B,cAAc,EAAE,SAAS;EAnBE;EAAW;EAAQ;CAmBrB,CAAmB;CAC5C,cAAc,EAAE,MAAM,EAAE,SAAS;EAlBjC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;CAWiC,CAAiB,CAAC;CACnD,SAAS,EAAE,QAAQ;AACrB,CAAC;AAWD,SAAgB,oBAAoB,OAAuC;CACzE,MAAM,SAAS,EAAE,UAAU,sBAAsB,KAAK;CACtD,OAAO,OAAO,UAAU,OAAO,SAAS;AAC1C"}