{"_id":"@bluefly/duadp","_rev":"6-afff0fe6fa1a4d6975ea2eeca6735fcf","name":"@bluefly/duadp","dist-tags":{"latest":"0.1.7"},"versions":{"0.1.0":{"name":"@bluefly/duadp","version":"0.1.0","keywords":["uadp","ossa","agent","discovery","federation","mcp","ai"],"author":{"name":"Bluefly","email":"hello@bluefly.io"},"license":"Apache-2.0","_id":"@bluefly/duadp@0.1.0","maintainers":[{"name":"bagent","email":"agent@bluefly.io"},{"name":"blueflyio","email":"admin@bluefly.io"}],"homepage":"https://openstandardagents.org/uadp/","bugs":{"url":"https://gitlab.com/blueflyio/ossa/lab/duadp/-/issues"},"bin":{"uadp":"dist/cli.js"},"dist":{"shasum":"e9593a0eafed8060f0b19d019297cadffb1a128c","tarball":"https://registry.npmjs.org/@bluefly/duadp/-/duadp-0.1.0.tgz","fileCount":23,"integrity":"sha512-lpKuHQX7OD1UDqYrCxwe0DBQKF/jfwZ9O+T7Cm0DvS5WM2vsldaermc1bRoKZ7Dggz+mV+FjTN4T5WW2VLu/Mw==","signatures":[{"sig":"MEUCIQCWNLl5cAPDv0SjWAhcEoiTpa4FSnlxjycNHilwstONMQIgGdlJ0jE6uTim8e0XJBs4R9vTTbIn04Gt1KpwVylp85o=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":151854},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./did":{"types":"./dist/did.d.ts","import":"./dist/did.js"},"./client":{"types":"./dist/client.d.ts","import":"./dist/client.js"},"./crypto":{"types":"./dist/crypto.d.ts","import":"./dist/crypto.js"},"./server":{"types":"./dist/server.d.ts","import":"./dist/server.js"},"./validate":{"types":"./dist/validate.d.ts","import":"./dist/validate.js"},"./conformance":{"types":"./dist/conformance.d.ts","import":"./dist/conformance.js"}},"scripts":{"lint":"eslint src/","test":"vitest run","build":"tsc","prepublishOnly":"npm run build && npm test"},"_npmUser":{"name":"blueflyio","email":"admin@bluefly.io"},"repository":{"url":"git+https://gitlab.com/blueflyio/ossa/lab/duadp.git","type":"git","directory":"sdk/typescript"},"_npmVersion":"11.11.0","description":"DUADP — Decentralized Universal AI Discovery Protocol SDK for TypeScript","directories":{},"_nodeVersion":"25.8.0","dependencies":{"canonicalize":"^2.1.0","did-resolver":"^4.1.0","key-did-resolver":"^4.0.0","web-did-resolver":"^2.0.32"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^3.0.0","typescript":"^5.7.0","@types/express":"^5.0.6"},"peerDependencies":{"express":">=4.0.0"},"peerDependenciesMeta":{"express":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/duadp_0.1.0_1772819629232_0.9125232217385513","host":"s3://npm-registry-packages-npm-production"}},"0.1.1":{"name":"@bluefly/duadp","version":"0.1.1","keywords":["duadp","ossa","agent","discovery","federation","mcp","ai"],"author":{"name":"Bluefly","email":"hello@bluefly.io"},"license":"Apache-2.0","_id":"@bluefly/duadp@0.1.1","maintainers":[{"name":"bagent","email":"agent@bluefly.io"},{"name":"blueflyio","email":"admin@bluefly.io"}],"homepage":"https://openstandardagents.org/duadp/","bugs":{"url":"https://gitlab.com/blueflyio/ossa/lab/duadp/-/issues"},"bin":{"duadp":"dist/cli.js"},"dist":{"shasum":"893bbbfc17277bb35c3dc7568a34d1b6aa524dad","tarball":"https://registry.npmjs.org/@bluefly/duadp/-/duadp-0.1.1.tgz","fileCount":23,"integrity":"sha512-50NKBNK6dys5+sGtkAbuSX79vWiRs9flvgRSlHMQGVOE+tfJMoF+UqHuMkKslX25qQAzuc4XDEG7wqgtiHusZA==","signatures":[{"sig":"MEYCIQDHWuD2F4YRbRr2LNzOCA4J1oNy7VXi9AFlvKGpAUttKgIhAKeMRyn0UrlGVHg1y3t3WqnKhgyR1tZUxI2/C3b48yRL","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":164056},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./did":{"types":"./dist/did.d.ts","import":"./dist/did.js"},"./client":{"types":"./dist/client.d.ts","import":"./dist/client.js"},"./crypto":{"types":"./dist/crypto.d.ts","import":"./dist/crypto.js"},"./server":{"types":"./dist/server.d.ts","import":"./dist/server.js"},"./validate":{"types":"./dist/validate.d.ts","import":"./dist/validate.js"},"./conformance":{"types":"./dist/conformance.d.ts","import":"./dist/conformance.js"}},"scripts":{"lint":"eslint src/","test":"vitest run","build":"tsc","prepublishOnly":"npm run build && npm test"},"_npmUser":{"name":"blueflyio","email":"admin@bluefly.io"},"repository":{"url":"git+https://gitlab.com/blueflyio/ossa/lab/duadp.git","type":"git","directory":"sdk/typescript"},"_npmVersion":"11.6.2","description":"DUADP — Decentralized Universal AI Discovery Protocol SDK for TypeScript","directories":{},"_nodeVersion":"22.19.0","dependencies":{"ajv":"^8.18.0","js-yaml":"^4.1.1","ajv-formats":"^3.0.1","canonicalize":"^2.1.0","did-resolver":"^4.1.0","key-did-resolver":"^4.0.0","web-did-resolver":"^2.0.32"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^3.0.0","@types/ajv":"^0.0.5","typescript":"^5.7.0","@types/express":"^5.0.6","@types/js-yaml":"^4.0.9"},"peerDependencies":{"express":">=4.0.0"},"peerDependenciesMeta":{"express":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/duadp_0.1.1_1772845028955_0.6677430782195231","host":"s3://npm-registry-packages-npm-production"}},"0.1.2":{"name":"@bluefly/duadp","version":"0.1.2","keywords":["duadp","ossa","agent","discovery","federation","mcp","ai"],"author":{"name":"Bluefly","email":"hello@bluefly.io"},"license":"Apache-2.0","_id":"@bluefly/duadp@0.1.2","maintainers":[{"name":"bagent","email":"agent@bluefly.io"},{"name":"blueflyio","email":"admin@bluefly.io"}],"homepage":"https://openstandardagents.org/duadp/","bugs":{"url":"https://gitlab.com/blueflyio/ossa/lab/duadp/-/issues"},"bin":{"duadp":"dist/cli.js"},"dist":{"shasum":"489bba2285245b2ca7de20b30266f047ca096d98","tarball":"https://registry.npmjs.org/@bluefly/duadp/-/duadp-0.1.2.tgz","fileCount":23,"integrity":"sha512-TpBhTBgQyubwBieAWwls5dRVD+aba/haNMz8dnaZVlsP7PaQCxQEa4G8Hj8N5J8Ui/6Lwa7OIi6SYTDuTody4w==","signatures":[{"sig":"MEUCIGSqvT5mRLhiQqpVA4G05Lu69gCmGGMEsvzIlrxSHhtVAiEAq+65g6HFk2CrE8DAMU+fh95gz6ErSrHDiNL66sMyxn8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":164083},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./did":{"types":"./dist/did.d.ts","import":"./dist/did.js"},"./client":{"types":"./dist/client.d.ts","import":"./dist/client.js"},"./crypto":{"types":"./dist/crypto.d.ts","import":"./dist/crypto.js"},"./server":{"types":"./dist/server.d.ts","import":"./dist/server.js"},"./validate":{"types":"./dist/validate.d.ts","import":"./dist/validate.js"},"./conformance":{"types":"./dist/conformance.d.ts","import":"./dist/conformance.js"}},"scripts":{"lint":"eslint src/","test":"vitest run","build":"tsc","prepublishOnly":"npm run build && npm test"},"_npmUser":{"name":"blueflyio","email":"admin@bluefly.io"},"repository":{"url":"git+https://gitlab.com/blueflyio/ossa/lab/duadp.git","type":"git","directory":"sdk/typescript"},"_npmVersion":"11.6.2","description":"DUADP — Decentralized Universal AI Discovery Protocol SDK for TypeScript","directories":{},"_nodeVersion":"22.19.0","dependencies":{"ajv":"^8.18.0","js-yaml":"^4.1.1","ajv-formats":"^3.0.1","canonicalize":"^2.1.0","did-resolver":"^4.1.0","key-did-resolver":"^4.0.0","web-did-resolver":"^2.0.32"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^3.0.0","@types/ajv":"^0.0.5","typescript":"^5.7.0","@types/express":"^5.0.6","@types/js-yaml":"^4.0.9"},"peerDependencies":{"express":">=4.0.0"},"peerDependenciesMeta":{"express":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/duadp_0.1.2_1772862558804_0.561116021508737","host":"s3://npm-registry-packages-npm-production"}},"0.1.3":{"name":"@bluefly/duadp","version":"0.1.3","keywords":["duadp","ossa","agent","discovery","federation","mcp","ai"],"author":{"name":"Bluefly","email":"hello@bluefly.io"},"license":"Apache-2.0","_id":"@bluefly/duadp@0.1.3","maintainers":[{"name":"bagent","email":"agent@bluefly.io"},{"name":"blueflyio","email":"admin@bluefly.io"}],"homepage":"https://duadp.org","bugs":{"url":"https://gitlab.com/blueflyio/duadp/duadp/-/issues"},"bin":{"duadp":"dist/cli.js"},"dist":{"shasum":"2384554528446d299a5b1402171a4ebe6e3449b5","tarball":"https://registry.npmjs.org/@bluefly/duadp/-/duadp-0.1.3.tgz","fileCount":23,"integrity":"sha512-ocGxlS0vV0bH7+UY5NIo6WT+wpEThZBEIE2UZZAxf+LAYsp8v5CmSETm/RvItuYbxgN90bGohcGcKYpHThKhRg==","signatures":[{"sig":"MEQCIGIGeMgo7fjaFqOAuJmPRffGp8XBRtpZzgGTWz6uTFkrAiA4G7txba6OgTLk7/0iVTNf6FNPosNKtgvcFvseaJasBQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":173059},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./did":{"types":"./dist/did.d.ts","import":"./dist/did.js"},"./client":{"types":"./dist/client.d.ts","import":"./dist/client.js"},"./crypto":{"types":"./dist/crypto.d.ts","import":"./dist/crypto.js"},"./server":{"types":"./dist/server.d.ts","import":"./dist/server.js"},"./validate":{"types":"./dist/validate.d.ts","import":"./dist/validate.js"},"./conformance":{"types":"./dist/conformance.d.ts","import":"./dist/conformance.js"}},"scripts":{"lint":"eslint src/","test":"vitest run","build":"tsc","prepublishOnly":"npm run build && npm test"},"_npmUser":{"name":"blueflyio","email":"admin@bluefly.io"},"repository":{"url":"git+https://gitlab.com/blueflyio/duadp/duadp.git","type":"git","directory":"sdk/typescript"},"_npmVersion":"11.6.2","description":"DUADP — Decentralized Universal AI Discovery Protocol SDK for TypeScript","directories":{},"_nodeVersion":"22.19.0","dependencies":{"ajv":"^8.18.0","js-yaml":"^4.1.1","ajv-formats":"^3.0.1","canonicalize":"^2.1.0","did-resolver":"^4.1.0","key-did-resolver":"^4.0.0","web-did-resolver":"^2.0.32"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^3.0.0","@types/ajv":"^0.0.5","typescript":"^5.7.0","@types/express":"^5.0.6","@types/js-yaml":"^4.0.9"},"peerDependencies":{"express":">=4.0.0"},"peerDependenciesMeta":{"express":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/duadp_0.1.3_1773077791858_0.36373798256058487","host":"s3://npm-registry-packages-npm-production"}},"0.1.4":{"name":"@bluefly/duadp","version":"0.1.4","keywords":["duadp","ossa","agent","discovery","federation","mcp","ai"],"author":{"name":"Bluefly","email":"hello@bluefly.io"},"license":"Apache-2.0","_id":"@bluefly/duadp@0.1.4","maintainers":[{"name":"bagent","email":"agent@bluefly.io"},{"name":"blueflyio","email":"admin@bluefly.io"}],"homepage":"https://duadp.org","bugs":{"url":"https://gitlab.com/blueflyio/duadp/duadp/-/issues"},"bin":{"duadp":"dist/cli.js"},"dist":{"shasum":"59a1fca5315ea45af80e255873ab8b00d063fa78","tarball":"https://registry.npmjs.org/@bluefly/duadp/-/duadp-0.1.4.tgz","fileCount":23,"integrity":"sha512-3+2Rd9Msbu0n0NjY0Knd5oup6UhncrW7PKgaQtSL2gfVgjKqm1nK5UNKHAWOIoEtKqbRVlSmqBN45kiIKFgRvA==","signatures":[{"sig":"MEQCIF4IAzPyy04nrkpEc6sntrrAoqVd5hB/Fz0zs49bDDteAiAQYhWmuQLgUuFRqHd0awKbbQV+l9p0nPTHeyA4Xhlwxg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":173059},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./did":{"types":"./dist/did.d.ts","import":"./dist/did.js"},"./client":{"types":"./dist/client.d.ts","import":"./dist/client.js"},"./crypto":{"types":"./dist/crypto.d.ts","import":"./dist/crypto.js"},"./server":{"types":"./dist/server.d.ts","import":"./dist/server.js"},"./validate":{"types":"./dist/validate.d.ts","import":"./dist/validate.js"},"./conformance":{"types":"./dist/conformance.d.ts","import":"./dist/conformance.js"}},"scripts":{"lint":"eslint src/","test":"vitest run","build":"tsc","prepublishOnly":"npm run build && npm test"},"_npmUser":{"name":"blueflyio","email":"admin@bluefly.io"},"repository":{"url":"git+https://gitlab.com/blueflyio/duadp/duadp.git","type":"git","directory":"sdk/typescript"},"_npmVersion":"11.6.2","description":"DUADP — Decentralized Universal AI Discovery Protocol SDK for TypeScript","directories":{},"_nodeVersion":"22.19.0","dependencies":{"ajv":"^8.18.0","js-yaml":"^4.1.1","ajv-formats":"^3.0.1","canonicalize":"^2.1.0","did-resolver":"^4.1.0","key-did-resolver":"^4.0.0","web-did-resolver":"^2.0.32"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^3.0.0","@types/ajv":"^0.0.5","typescript":"^5.7.0","@types/express":"^5.0.6","@types/js-yaml":"^4.0.9"},"peerDependencies":{"express":">=4.0.0"},"peerDependenciesMeta":{"express":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/duadp_0.1.4_1773077836757_0.304160637296504","host":"s3://npm-registry-packages-npm-production"}},"0.1.7":{"name":"@bluefly/duadp","version":"0.1.7","description":"DUADP — Decentralized Universal AI Discovery Protocol SDK for TypeScript","type":"module","main":"dist/index.js","bin":{"duadp":"dist/cli.js"},"types":"dist/index.d.ts","repository":{"type":"git","url":"git+https://gitlab.com/blueflyio/duadp/duadp.git","directory":"sdk/typescript"},"homepage":"https://duadp.org","bugs":{"url":"https://gitlab.com/blueflyio/duadp/duadp/-/issues"},"author":{"name":"Bluefly","email":"hello@bluefly.io"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"exports":{".":{"import":"./dist/index.js","types":"./dist/index.d.ts"},"./client":{"import":"./dist/client.js","types":"./dist/client.d.ts"},"./server":{"import":"./dist/server.js","types":"./dist/server.d.ts"},"./validate":{"import":"./dist/validate.js","types":"./dist/validate.d.ts"},"./crypto":{"import":"./dist/crypto.js","types":"./dist/crypto.d.ts"},"./did":{"import":"./dist/did.js","types":"./dist/did.d.ts"},"./conformance":{"import":"./dist/conformance.js","types":"./dist/conformance.d.ts"},"./fleet":{"import":"./dist/fleet.js","types":"./dist/fleet.d.ts"}},"scripts":{"build":"tsc","test":"vitest run","lint":"eslint src/","prepublishOnly":"npm run build && npm test"},"keywords":["duadp","ossa","agent","discovery","federation","mcp","ai"],"license":"Apache-2.0","devDependencies":{"@types/ajv":"^0.0.5","@types/express":"^5.0.6","@types/js-yaml":"^4.0.9","@types/node":"^25.5.0","express":"^4.21.0","typescript":"^5.7.0","vitest":"^3.0.0"},"peerDependencies":{"express":">=4.0.0"},"peerDependenciesMeta":{"express":{"optional":true}},"dependencies":{"ajv":"^8.18.0","ajv-formats":"^3.0.1","canonicalize":"^2.1.0","did-resolver":"^4.1.0","js-yaml":"^4.1.1","key-did-resolver":"^4.0.0","web-did-resolver":"^2.0.32"},"gitHead":"734295ae769a91c1c7a2ca130ef3cc59ca020d46","_id":"@bluefly/duadp@0.1.7","_nodeVersion":"24.15.0","_npmVersion":"11.12.1","dist":{"integrity":"sha512-FWvBlPE+U4PeMw7mq5XFLbquLF7LcCRUe+PD/jZ33lv71zXrw3v6zo3Mmmu63IZF401lkh6nSnrjjRzKulCJgw==","shasum":"c9562937bedcac40eeef54351a9eb88f63557adf","tarball":"https://registry.npmjs.org/@bluefly/duadp/-/duadp-0.1.7.tgz","fileCount":39,"unpackedSize":256511,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCIAvPDsMJrHSw/KC3cQM0Z4ac0JUszEiYGuLgK5moom5oAiBct00VSE+wjfBWbVPHuEoR+Iakail+REM4jgeLdbw8qg=="}]},"_npmUser":{"name":"blueflyio","email":"admin@bluefly.io"},"directories":{},"maintainers":[{"name":"bagent","email":"agent@bluefly.io"},{"name":"blueflyio","email":"admin@bluefly.io"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/duadp_0.1.7_1780528320448_0.14190007068052912"},"_hasShrinkwrap":false}},"time":{"created":"2026-03-06T17:53:49.148Z","modified":"2026-06-03T23:12:00.745Z","0.1.0":"2026-03-06T17:53:49.388Z","0.1.1":"2026-03-07T00:57:09.161Z","0.1.2":"2026-03-07T05:49:18.969Z","0.1.3":"2026-03-09T17:36:32.017Z","0.1.4":"2026-03-09T17:37:16.963Z","0.1.7":"2026-06-03T23:12:00.600Z"},"bugs":{"url":"https://gitlab.com/blueflyio/duadp/duadp/-/issues"},"author":{"name":"Bluefly","email":"hello@bluefly.io"},"license":"Apache-2.0","homepage":"https://duadp.org","keywords":["duadp","ossa","agent","discovery","federation","mcp","ai"],"repository":{"type":"git","url":"git+https://gitlab.com/blueflyio/duadp/duadp.git","directory":"sdk/typescript"},"description":"DUADP — Decentralized Universal AI Discovery Protocol SDK for TypeScript","maintainers":[{"name":"bagent","email":"agent@bluefly.io"},{"name":"blueflyio","email":"admin@bluefly.io"}],"readme":"# DUADP — TypeScript SDK\n\n**The official TypeScript SDK for [DUADP](https://openstandardagents.org/duadp/) (Decentralized Universal AI Discovery Protocol).**\n\nDUADP is an open protocol for decentralized discovery, publishing, and federation of AI agents, skills, and tools. It provides a standard HTTP interface that any system can implement — turning isolated AI registries into an interoperable, federated network. Think DNS for AI capabilities: any node that serves a few standard endpoints becomes discoverable by every other node in the mesh.\n\nThe protocol addresses a fundamental problem in the AI ecosystem: **there is no standard way to find, publish, or verify AI capabilities across organizational boundaries.** Marketplaces, tool registries, and agent platforms are siloed. DUADP solves this with:\n\n- **Decentralized discovery** via `/.well-known/duadp.json` and DNS TXT records\n- **Federated search** across peer nodes with gossip-based propagation\n- **Cryptographic trust** using Ed25519 signatures and W3C DIDs (`did:web`, `did:key`)\n- **OSSA-native payloads** in `.ajson` format with trust tiers, GAID identifiers, and governance metadata\n- **Protocol interop** bridging MCP tool servers and Google A2A agent cards into a unified registry\n\nThis SDK provides both a **client** for consuming any DUADP node and a **server router** for turning your Express app into a fully compliant DUADP node — with validation, cryptographic signing, DID resolution, conformance testing, and a consolidated GAID inspector built in.\n\n[![npm](https://img.shields.io/npm/v/@bluefly/duadp)](https://www.npmjs.com/package/@bluefly/duadp)\n[![License](https://img.shields.io/badge/License-Apache_2.0-blue.svg)](https://gitlab.com/blueflyio/duadp/duadp/-/blob/main/LICENSE)\n\n> **[openstandardagents.org/duadp](https://openstandardagents.org/duadp/)** | **[duadp.org](https://duadp.org)** | **[Full Spec](https://gitlab.com/blueflyio/duadp/duadp/-/blob/main/spec/README.md)**\n\n---\n\n## Install\n\n```bash\nnpm install @bluefly/duadp\n```\n\n## Architecture\n\n```\n┌─────────────┐     ┌─────────────┐     ┌─────────────┐\n│  Your App   │     │  DUADP Node │     │  DUADP Node │\n│  (client)   │────>│  (skills.sh)│<───>│  (Acme Corp)│\n└─────────────┘     └──────┬──────┘     └─────────────┘\n                           │ federation\n                    ┌──────┴──────┐\n                    │  DUADP Node │\n                    │  (your org) │\n                    └─────────────┘\n\nThis SDK provides the core protocol endpoints, including GAID resolution and inspection:\n  GET  /.well-known/duadp.json         Discovery manifest\n  GET  /.well-known/webfinger          WebFinger resolution\n  GET  /api/v1/skills                 Paginated skill registry\n  GET  /api/v1/skills/:name           Single skill detail\n  GET  /api/v1/agents                 Paginated agent registry\n  GET  /api/v1/agents/:name           Single agent detail\n  GET  /api/v1/tools                  Paginated tool registry\n  GET  /api/v1/tools/:name            Single tool detail\n  POST /api/v1/publish                Publish any resource\n  GET  /api/v1/resolve/:gaid          Resolve a GAID to a resource\n  GET  /api/v1/inspect                Consolidated trust/policy inspection\n  POST /api/v1/{kind}                 Create resource by kind\n  PUT  /api/v1/{kind}/:name           Update resource\n  DELETE /api/v1/{kind}/:name         Delete resource\n  POST /api/v1/validate               Validate OSSA manifest\n  GET  /api/v1/federation             Peer node directory\n  POST /api/v1/federation             Register as peer\n```\n\n## Quick Start\n\n### Client — consume any DUADP node\n\n```typescript\nimport { DuadpClient } from '@bluefly/duadp/client';\n\nconst client = new DuadpClient('https://your-duadp-node.example.com');\n\n// Discover the node's capabilities\nconst manifest = await client.discover();\nconsole.log(manifest.node_name, manifest.protocol_version);\n\n// Search for skills across the node and its federation peers\nconst skills = await client.listSkills({ search: 'code review', limit: 10 });\n\n// Browse agents by category\nconst agents = await client.listAgents({ category: 'security' });\n\n// Find MCP-compatible tools\nconst tools = await client.listTools({ protocol: 'mcp' });\n\n// Resolve and inspect a GAID with evidence-first output\nconst resolved = await client.resolveResource('agent://discover.duadp.org/agents/code-reviewer');\nconst inspection = await client.inspectGaid('agent://discover.duadp.org/agents/code-reviewer');\nconsole.log(resolved.source_node, inspection.trust_verification.verified_tier);\n```\n\n### Server — make your app a DUADP node\n\n```typescript\nimport express from 'express';\nimport { createDuadpRouter } from '@bluefly/duadp/server';\n\nconst app = express();\n\n// Mount all 15 DUADP protocol endpoints with one call\nconst router = createDuadpRouter({\n  nodeName: 'My Registry',\n  nodeId: 'did:web:registry.example.com',\n  baseUrl: 'https://registry.example.com',\n  federation: { gossip: true, max_hops: 3 },\n}, myDataProvider);   // implement DuadpDataProvider interface\n\napp.use(router);\napp.listen(4200);\n// Your app now serves /.well-known/duadp.json and all /api/v1/* routes\n```\n\n### Validate OSSA resource manifests\n\n```typescript\nimport { validateManifest } from '@bluefly/duadp/validate';\n\nconst result = validateManifest(skillManifest);\nif (!result.valid) console.error(result.errors);\n```\n\n### Cryptographic signing and verification\n\n```typescript\nimport { generateKeyPair, signResource, verifySignature } from '@bluefly/duadp/crypto';\n\nconst keys = await generateKeyPair();                        // Ed25519\nconst signed = await signResource(resource, keys.privateKey);\nconst verified = await verifySignature(signed, keys.publicKey); // true/false\n```\n\n### DID resolution\n\n```typescript\nimport { resolveDID } from '@bluefly/duadp/did';\n\nconst doc = await resolveDID('did:web:example.com');    // W3C DID Document\nconst doc2 = await resolveDID('did:key:z6Mkf5rG...');   // did:key support\n```\n\n## Subpath Exports\n\n| Import | Description |\n|--------|-------------|\n| `@bluefly/duadp` | Core types — `DuadpManifest`, `OssaResource`, `OssaSkill`, `OssaAgent`, `OssaTool`, `PaginatedResponse`, `Peer`, and 40+ more |\n| `@bluefly/duadp/client` | `DuadpClient` — typed HTTP client for discovery, search, GAID resolution, inspection, pagination, and federation |\n| `@bluefly/duadp/server` | `createDuadpRouter(config, provider)` — Express router mounting all 15 core protocol endpoints |\n| `@bluefly/duadp/validate` | `validateManifest()` — OSSA manifest validation against the spec |\n| `@bluefly/duadp/crypto` | `generateKeyPair()`, `signResource()`, `verifySignature()` — Ed25519 cryptographic operations |\n| `@bluefly/duadp/did` | `resolveDID()` — W3C Decentralized Identifier resolution (`did:web`, `did:key`) |\n| `@bluefly/duadp/conformance` | `runConformanceTests(url)` — automated protocol compliance test suite |\n\n## Key Concepts\n\n| Concept | Description |\n|---------|-------------|\n| **DUADP Node** | Any HTTP server implementing `/.well-known/duadp.json` and `/api/v1/*` endpoints |\n| **GAID** | Global Agent Identifier — `agent://namespace/kind/name` URI scheme for cross-registry resolution |\n| **DID** | W3C Decentralized Identifier — `did:web:example.com` for node and resource identity |\n| **Trust Tier** | `official` > `verified-signature` > `signed` > `community` > `experimental` |\n| **Federation** | Gossip-based peer discovery with circuit breakers and configurable hop limits |\n| **OSSA** | Open Standard for Agent Systems — the payload format (`.ajson`) for skills, agents, and tools |\n\n## Reference Node\n\nA complete reference implementation using this SDK ships in the same repository: [`reference-node/`](https://gitlab.com/blueflyio/duadp/duadp/-/tree/main/reference-node) — Express + SQLite, all protocol endpoints (17 SDK + governance), Docker-ready, seeded with demo data.\n\n```bash\ncd reference-node\ncp .env.example .env\nnpx tsx src/seed.ts && npx tsx src/index.ts\n# Node running at http://localhost:4200\n```\n\n## Tests\n\n```bash\nnpm test\n# 157 tests across 10 suites, including the inspector client surface\n```\n\n## Also Available\n\n| Language | Package | Registry |\n|----------|---------|----------|\n| Python | [`duadp`](https://pypi.org/project/duadp/) | PyPI |\n\n## License\n\nApache-2.0 — See [LICENSE](https://gitlab.com/blueflyio/duadp/duadp/-/blob/main/LICENSE)\n","readmeFilename":"README.md"}