{"_id":"@conveniencepro/ctp-discovery","name":"@conveniencepro/ctp-discovery","dist-tags":{"latest":"1.0.0"},"versions":{"1.0.0":{"name":"@conveniencepro/ctp-discovery","version":"1.0.0","description":"Discovery manifest generators for the ConveniencePro Tool Protocol (OpenAPI, AI tools, llms.txt)","main":"dist/index.js","module":"dist/index.mjs","types":"dist/index.d.ts","exports":{".":{"import":"./dist/index.mjs","require":"./dist/index.js","types":"./dist/index.d.ts"},"./openapi":{"import":"./dist/openapi.mjs","require":"./dist/openapi.js","types":"./dist/openapi.d.ts"},"./ai-tools":{"import":"./dist/ai-tools.mjs","require":"./dist/ai-tools.js","types":"./dist/ai-tools.d.ts"},"./llms-txt":{"import":"./dist/llms-txt.mjs","require":"./dist/llms-txt.js","types":"./dist/llms-txt.d.ts"}},"scripts":{"build":"tsup src/index.ts src/openapi.ts src/ai-tools.ts src/llms-txt.ts --format cjs,esm --dts --clean","dev":"tsup src/index.ts src/openapi.ts src/ai-tools.ts src/llms-txt.ts --format cjs,esm --dts --watch","test":"vitest run","test:watch":"vitest","lint":"eslint src --ext .ts","clean":"rm -rf dist"},"keywords":["ctp","conveniencepro","discovery","openapi","ai-tools","llms-txt","manifest"],"author":{"name":"ConveniencePro"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/titan-alpha/ctp.git","directory":"packages/ctp-discovery"},"homepage":"https://spec.conveniencepro.cc","bugs":{"url":"https://github.com/titan-alpha/ctp/issues"},"dependencies":{"@conveniencepro/ctp-core":"^1.0.0"},"devDependencies":{"@types/node":"^20.0.0","tsup":"^8.0.0","typescript":"^5.3.0","vitest":"^1.0.0"},"engines":{"node":">=16.0.0"},"gitHead":"e0b486c2f3a42f11091b47050f6c7c043393374b","_id":"@conveniencepro/ctp-discovery@1.0.0","_nodeVersion":"25.1.0","_npmVersion":"11.6.2","dist":{"integrity":"sha512-xhVHKHDotN43BZu9q3D/zfouCjlvDfbuNpL4RjkAInNhj0N+vThc1RR7qAGhgo8PfeKLg7h0pX9ZRJpQWmdiSA==","shasum":"d90d26af929e381e74acf44a238ee4e91503ff39","tarball":"https://registry.npmjs.org/@conveniencepro/ctp-discovery/-/ctp-discovery-1.0.0.tgz","fileCount":21,"unpackedSize":111072,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQCRicNO8pkDnC9B3tilnWOC/cuaedy39dQ2iwxwu5YZjQIhAKKJLui+f+vUC3egh2kjM8+fWAOfhRFwSA3JlTa/hUsm"}]},"_npmUser":{"name":"convenienceprouser","email":"welovegoodhouse@gmail.com"},"directories":{},"maintainers":[{"name":"convenienceprouser","email":"welovegoodhouse@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/ctp-discovery_1.0.0_1764822768533_0.4401168165963707"},"_hasShrinkwrap":false}},"time":{"created":"2025-12-04T04:32:48.458Z","1.0.0":"2025-12-04T04:32:48.759Z","modified":"2025-12-04T04:32:49.061Z"},"maintainers":[{"name":"convenienceprouser","email":"welovegoodhouse@gmail.com"}],"description":"Discovery manifest generators for the ConveniencePro Tool Protocol (OpenAPI, AI tools, llms.txt)","homepage":"https://spec.conveniencepro.cc","keywords":["ctp","conveniencepro","discovery","openapi","ai-tools","llms-txt","manifest"],"repository":{"type":"git","url":"git+https://github.com/titan-alpha/ctp.git","directory":"packages/ctp-discovery"},"author":{"name":"ConveniencePro"},"bugs":{"url":"https://github.com/titan-alpha/ctp/issues"},"license":"MIT","readme":"# @conveniencepro/ctp-discovery\n\nDiscovery manifest generators for the **ConveniencePro Tool Protocol (CTP)**.\n\nGenerate OpenAPI specs, AI tools manifests, llms.txt files, and more from your tool definitions.\n\n## Installation\n\n```bash\nnpm install @conveniencepro/ctp-discovery\n# or\nyarn add @conveniencepro/ctp-discovery\n# or\npnpm add @conveniencepro/ctp-discovery\n```\n\n## Quick Start\n\n```typescript\nimport { generateAllDiscoveryFiles, getRecommendedFilePaths } from '@conveniencepro/ctp-discovery';\n\n// Your tool definitions\nconst tools = [\n  {\n    id: 'base64-encode',\n    name: 'Base64 Encode',\n    description: 'Encode text to Base64',\n    category: 'encoding',\n    tags: ['encoding', 'base64'],\n    method: 'GET',\n    parameters: [\n      {\n        name: 'text',\n        type: 'textarea',\n        label: 'Text',\n        description: 'Text to encode',\n        required: true,\n      },\n    ],\n    outputDescription: 'Returns encoded Base64 string',\n    example: {\n      input: { text: 'Hello' },\n      output: { success: true, encoded: 'SGVsbG8=' },\n    },\n  },\n  // ... more tools\n];\n\n// Generate all discovery files\nconst files = generateAllDiscoveryFiles(tools, {\n  baseUrl: 'https://my-tools.com',\n  name: 'My Tools',\n  description: 'Awesome utility tools',\n});\n\n// Get recommended file paths\nconst paths = getRecommendedFilePaths();\n\n// Write files\n// files.openapiYaml   -> .well-known/openapi.yaml\n// files.aiToolsJson   -> .well-known/ai-tools.json\n// files.llmsTxt       -> llms.txt\n// files.llmsFullTxt   -> llms-full.txt\n```\n\n## OpenAPI Generation\n\nGenerate OpenAPI 3.1 specifications:\n\n```typescript\nimport { generateOpenAPI, generateOpenAPIYAML } from '@conveniencepro/ctp-discovery/openapi';\n\n// Generate as JavaScript object\nconst spec = generateOpenAPI(tools, {\n  title: 'My Tools API',\n  description: 'API for my utility tools',\n  baseUrl: 'https://api.example.com',\n  pathPrefix: '/v1/tools',\n  includeExamples: true,\n  groupByCategory: true,\n});\n\n// Generate as YAML string\nconst yaml = generateOpenAPIYAML(tools, options);\n```\n\n### OpenAPI Options\n\n```typescript\ninterface OpenAPIGeneratorOptions {\n  title?: string;           // API title\n  description?: string;     // API description\n  version?: string;         // API version\n  baseUrl?: string;         // Base URL\n  pathPrefix?: string;      // Path prefix (default: '/run')\n  includeExamples?: boolean; // Include examples\n  groupByCategory?: boolean; // Group by category as tags\n  contact?: { name, url, email };\n  license?: { name, url };\n}\n```\n\n## AI Tools Manifest\n\nGenerate manifests for AI/LLM integration:\n\n```typescript\nimport {\n  generateAIToolsManifest,\n  generateCTManifest,\n  generateChatGPTPlugin,\n} from '@conveniencepro/ctp-discovery/ai-tools';\n\n// AI Tools manifest (generic format)\nconst aiTools = generateAIToolsManifest(tools, {\n  name: 'My Tools',\n  baseUrl: 'https://api.example.com',\n});\n\n// CTP manifest (ConveniencePro format)\nconst ctManifest = generateCTManifest(tools, {\n  providerName: 'My Company',\n  providerUrl: 'https://example.com',\n});\n\n// ChatGPT plugin manifest\nconst chatgptPlugin = generateChatGPTPlugin({\n  nameForHuman: 'My Tools',\n  nameForModel: 'mytools',\n  openapiUrl: 'https://example.com/.well-known/openapi.yaml',\n});\n```\n\n## LLMs.txt Generation\n\nGenerate context files for LLMs:\n\n```typescript\nimport {\n  generateLLMsTxt,\n  generateLLMsFullTxt,\n  generateToolsMarkdown,\n} from '@conveniencepro/ctp-discovery/llms-txt';\n\n// Concise version (llms.txt)\nconst llmsTxt = generateLLMsTxt(tools, {\n  name: 'My Tools',\n  baseUrl: 'https://api.example.com',\n  groupByCategory: true,\n});\n\n// Detailed version (llms-full.txt)\nconst llmsFullTxt = generateLLMsFullTxt(tools, {\n  includeExamples: true,\n  maxLineWidth: 80,\n});\n\n// Markdown documentation\nconst markdown = generateToolsMarkdown(tools, {\n  includeExamples: true,\n});\n```\n\n## Output Formats\n\n### llms.txt (Concise)\n\n```text\n# ConveniencePro\n# Browser-native utility tools API\n# Base URL: https://conveniencepro.cc\n\n## Encoding\n- Base64 Encode (base64-encode): Encode text to Base64\n  Endpoint: GET /run/base64-encode\n  Required: text\n```\n\n### llms-full.txt (Detailed)\n\n```text\n================================================================================\n                           ConveniencePro Tools\n================================================================================\n\n### Base64 Encode\nID: base64-encode\nDescription: Encode text to Base64\nMethod: GET\nEndpoint: /run/base64-encode\n\nParameters:\n  - text (textarea) [REQUIRED]\n    Text to encode\n```\n\n### OpenAPI 3.1\n\n```yaml\nopenapi: 3.1.0\ninfo:\n  title: ConveniencePro Tools API\n  version: 1.0.0\npaths:\n  /run/base64-encode:\n    get:\n      operationId: base64_encode\n      summary: Base64 Encode\n      parameters:\n        - name: text\n          in: query\n          required: true\n          schema:\n            type: string\n```\n\n## Recommended Directory Structure\n\n```\npublic/\n├── .well-known/\n│   ├── openapi.yaml       # OpenAPI specification\n│   ├── openapi.json       # OpenAPI (JSON format)\n│   ├── ai-tools.json      # AI tools manifest\n│   ├── ai-plugin.json     # ChatGPT plugin manifest\n│   └── ctp-manifest.json  # CTP manifest\n├── llms.txt               # Concise LLM context\n└── llms-full.txt          # Detailed LLM context\n```\n\n## Build Integration\n\nGenerate discovery files during build:\n\n```typescript\n// scripts/generate-discovery.ts\nimport { writeFileSync, mkdirSync } from 'fs';\nimport { generateAllDiscoveryFiles, getRecommendedFilePaths } from '@conveniencepro/ctp-discovery';\nimport { tools } from '../src/data/tools';\n\nconst files = generateAllDiscoveryFiles(tools, {\n  baseUrl: process.env.BASE_URL,\n});\n\nconst paths = getRecommendedFilePaths();\n\n// Ensure directories exist\nmkdirSync('public/.well-known', { recursive: true });\n\n// Write files\nwriteFileSync(`public/${paths.openapiYaml}`, files.openapiYaml);\nwriteFileSync(`public/${paths.aiToolsJson}`, files.aiToolsJson);\nwriteFileSync(`public/${paths.llmsTxt}`, files.llmsTxt);\nwriteFileSync(`public/${paths.llmsFullTxt}`, files.llmsFullTxt);\n\nconsole.log('Discovery files generated!');\n```\n\n## Related Packages\n\n- `@conveniencepro/ctp-core` - Core types and interfaces\n- `@conveniencepro/ctp-runtime` - Tool execution runtime\n- `@conveniencepro/ctp-sdk` - Embeddable SDK\n\n## License\n\nMIT © ConveniencePro\n","readmeFilename":"README.md","_rev":"1-61c864a05c349bb461b85e315c1d056f"}