{"_id":"@ailib-official/ai-protocol","_rev":"4-98fee9a75bd9dd38a66b2b3c93fed31c","name":"@ailib-official/ai-protocol","dist-tags":{"latest":"1.2.0"},"versions":{"0.8.4":{"name":"@ailib-official/ai-protocol","version":"0.8.4","keywords":["ai","protocol","schema","validation","provider","model"],"license":"MIT OR Apache-2.0","_id":"@ailib-official/ai-protocol@0.8.4","maintainers":[{"name":"hiddenpath","email":"wang.luqiang@gmail.com"}],"dist":{"shasum":"bbb7e4bef5771d15b9cb493f9bf2a4e1f144482d","tarball":"https://registry.npmjs.org/@ailib-official/ai-protocol/-/ai-protocol-0.8.4.tgz","fileCount":194,"integrity":"sha512-rTUb5WrPxYxcJPKkBLJoUo5dRa2AKVbKeY4iBBCXRaaaoXiETNuVr9zvnRvGCcw4NOPRkeqx96pMI5I7N2MJzA==","signatures":[{"sig":"MEUCIQCmJoIMxSjqBGrd+ivIbpIEysp1l2aQ04bjb7MRyIfABwIgNiYkoFreptIjoquUJqpzdljN55fU7Fy48aPsUXPErUw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":953624},"main":"dist/index.json","type":"module","engines":{"node":">=18.0.0"},"gitHead":"0d2a2e4e89f1741b2f43fcb5f482f2ab49f42303","scripts":{"build":"node scripts/build.js","validate":"node scripts/validate.js","drift:check":"node scripts/drift-detect.js","release:gate":"node scripts/release-gate.js","gate:fullchain":"node scripts/gate-fullchain.js","validate:specs":"node scripts/validate.js --specs","validate:models":"node scripts/validate.js --models","validate:schemas":"node scripts/validate.js --schemas","fact-check:models":"node scripts/fact-check-models.js","validate:examples":"node scripts/validate.js --examples","validate:providers":"node scripts/validate.js --providers","gate:compliance-matrix":"node scripts/gate-compliance-matrix.js","fact-check:models:strict":"node scripts/fact-check-models.js --strict","gate:manifest-consumption":"node scripts/gate-manifest-consumption.js","validate:capability-profile":"node scripts/validate-capability-profile-boundary.js","fact-check:models:strict-all":"node scripts/fact-check-models.js --strict --require-keys","gate:fullchain:with-rollback":"node scripts/gate-fullchain.js --with-rollback-drill","rehearse:compliance:rollback":"node scripts/rehearse-compliance-rollback.js","gate:compliance-matrix:required":"node scripts/gate-compliance-matrix.js","gate:compliance-matrix:report-only":"node scripts/gate-compliance-matrix.js --report-only","rehearse:compliance:rollback:required":"node scripts/rehearse-compliance-rollback.js --mode=required","gate:fullchain:with-rollback:both-drill":"node scripts/gate-fullchain.js --with-rollback-drill --rollback-drill-both","rehearse:compliance:rollback:report-only":"node scripts/rehearse-compliance-rollback.js --mode=report-only","gate:fullchain:with-rollback:required-drill":"node scripts/gate-fullchain.js --with-rollback-drill --rollback-drill-required"},"_npmUser":{"name":"hiddenpath","email":"wang.luqiang@gmail.com"},"_npmVersion":"11.12.1","description":"Provider-agnostic AI provider + model registry specification","directories":{},"_nodeVersion":"24.15.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"ajv":"^8.12.0","undici":"^6.23.0","js-yaml":"^4.1.0","ajv-formats":"^3.0.1"},"_npmOperationalInternal":{"tmp":"tmp/ai-protocol_0.8.4_1778088141360_0.33435437593607964","host":"s3://npm-registry-packages-npm-production"}},"1.0.0":{"name":"@ailib-official/ai-protocol","version":"1.0.0","keywords":["ai","protocol","schema","validation","provider","model"],"license":"MIT OR Apache-2.0","_id":"@ailib-official/ai-protocol@1.0.0","maintainers":[{"name":"hiddenpath","email":"wang.luqiang@gmail.com"}],"homepage":"https://github.com/ailib-official/ai-protocol#readme","bugs":{"url":"https://github.com/ailib-official/ai-protocol/issues"},"dist":{"shasum":"82e3a84e3f04ff123db446982b5c0a154f9d466d","tarball":"https://registry.npmjs.org/@ailib-official/ai-protocol/-/ai-protocol-1.0.0.tgz","fileCount":207,"integrity":"sha512-4Fl/1cfjf6OxWDIHtd0Ei1Lx0Oa15nDsXVz94DDEb0V1xsX65l0y2Ax453d5d24MYHR6ZHpCyRgsGemTdzB9tA==","signatures":[{"sig":"MEUCIQD+4Z4TkZpkXUhNMEWMM2jBGvy5+nGfIs8JaLZqWPdvWQIgVeRToIv8kQySt1ij9+AXy1kkw5Qh6OaA2sJ1P66fCtk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1024976},"main":"dist/index.json","type":"module","engines":{"node":">=18.0.0"},"gitHead":"8abb5b96feb1f6f797a156100ab49a00d5c18e5b","scripts":{"build":"node scripts/build.js","validate":"node scripts/validate.js","drift:check":"node scripts/drift-detect.js","release:gate":"node scripts/release-gate.js","gate:fullchain":"node scripts/gate-fullchain.js","validate:packs":"node scripts/validate.js --packs","validate:specs":"node scripts/validate.js --specs","validate:models":"node scripts/validate.js --models","validate:schemas":"node scripts/validate.js --schemas","fact-check:models":"node scripts/fact-check-models.js","validate:examples":"node scripts/validate.js --examples","validate:providers":"node scripts/validate.js --providers","validate:compliance":"node scripts/validate-compliance-cases.js","validate:error-codes":"node scripts/validate-error-codes-sync.js","verify:v1-v2-capacity":"node scripts/verify-v1-v2-capacity-parity.js","gate:compliance-matrix":"node scripts/gate-compliance-matrix.js","gate:manifest-authority":"node scripts/gate-manifest-authority.js","fact-check:models:strict":"node scripts/fact-check-models.js --strict","migrate:v2alpha-capacity":"node scripts/migrate-v1-capacity-to-v2alpha.js","gate:manifest-consumption":"node scripts/gate-manifest-consumption.js","fact-check:models:strict-all":"node scripts/fact-check-models.js --strict --require-keys","gate:fullchain:with-rollback":"node scripts/gate-fullchain.js --with-rollback-drill","rehearse:compliance:rollback":"node scripts/rehearse-compliance-rollback.js","gate:compliance-matrix:required":"node scripts/gate-compliance-matrix.js","gate:compliance-matrix:report-only":"node scripts/gate-compliance-matrix.js --report-only","rehearse:compliance:rollback:required":"node scripts/rehearse-compliance-rollback.js --mode=required","gate:fullchain:with-rollback:both-drill":"node scripts/gate-fullchain.js --with-rollback-drill --rollback-drill-both","rehearse:compliance:rollback:report-only":"node scripts/rehearse-compliance-rollback.js --mode=report-only","gate:fullchain:with-rollback:required-drill":"node scripts/gate-fullchain.js --with-rollback-drill --rollback-drill-required"},"_npmUser":{"name":"hiddenpath","email":"wang.luqiang@gmail.com"},"repository":{"url":"git+https://github.com/ailib-official/ai-protocol.git","type":"git"},"_npmVersion":"10.8.2","description":"Provider-agnostic AI provider + model registry specification","directories":{},"_nodeVersion":"20.20.2","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"ajv":"^8.12.0","undici":"^6.23.0","js-yaml":"^4.1.0","ajv-formats":"^3.0.1"},"_npmOperationalInternal":{"tmp":"tmp/ai-protocol_1.0.0_1782910354127_0.9937196041543264","host":"s3://npm-registry-packages-npm-production"}},"1.1.0":{"name":"@ailib-official/ai-protocol","version":"1.1.0","keywords":["ai","protocol","schema","validation","provider","model"],"license":"MIT OR Apache-2.0","_id":"@ailib-official/ai-protocol@1.1.0","maintainers":[{"name":"hiddenpath","email":"wang.luqiang@gmail.com"}],"homepage":"https://github.com/ailib-official/ai-protocol#readme","bugs":{"url":"https://github.com/ailib-official/ai-protocol/issues"},"dist":{"shasum":"9984ea17c9023b9581300bcc3ca389ecb5b6505d","tarball":"https://registry.npmjs.org/@ailib-official/ai-protocol/-/ai-protocol-1.1.0.tgz","fileCount":241,"integrity":"sha512-uqRAwNXb2IAfW2EpJioITxwj+02dJHzRS+c3K9uU9nZtqVtIYp5sQgFMCCqxH0eo3nhVdfOiGgvOkmE9fLBUZw==","signatures":[{"sig":"MEYCIQDszZKRpKIeCtOcqr2VA5j7WswnKM9JQzQvTOh6paqbmQIhAN+IzIz0UWEa+9XC3UnceEWrOD5l/gWZx6So5f4qlXly","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1297452},"main":"dist/index.json","type":"module","engines":{"node":">=18.0.0"},"gitHead":"2743912f9a88d7255a23953d4a74b5d2b453fa2a","scripts":{"build":"node scripts/build.js","validate":"node scripts/validate.js","drift:check":"node scripts/drift-detect.js","release:gate":"node scripts/release-gate.js","validate:arch":"node scripts/validate-arch-fixtures.js","gate:fullchain":"node scripts/gate-fullchain.js","validate:packs":"node scripts/validate.js --packs","validate:specs":"node scripts/validate.js --specs","validate:models":"node scripts/validate.js --models","validate:schemas":"node scripts/validate.js --schemas","fact-check:models":"node scripts/fact-check-models.js","validate:examples":"node scripts/validate.js --examples","test:me001-oneshot":"node --test scripts/me001-oneshot-candidate.test.js","validate:providers":"node scripts/validate.js --providers","validate:compliance":"node scripts/validate-compliance-cases.js","validate:error-codes":"node scripts/validate-error-codes-sync.js","verify:v1-v2-capacity":"node scripts/verify-v1-v2-capacity-parity.js","gate:compliance-matrix":"node scripts/gate-compliance-matrix.js","gate:manifest-authority":"node scripts/gate-manifest-authority.js","me001:oneshot-candidate":"node scripts/me001-oneshot-candidate.js","fact-check:models:strict":"node scripts/fact-check-models.js --strict","migrate:v2alpha-capacity":"node scripts/migrate-v1-capacity-to-v2alpha.js","gate:manifest-consumption":"node scripts/gate-manifest-consumption.js","fact-check:models:strict-all":"node scripts/fact-check-models.js --strict --require-keys","gate:fullchain:with-rollback":"node scripts/gate-fullchain.js --with-rollback-drill","rehearse:compliance:rollback":"node scripts/rehearse-compliance-rollback.js","gate:compliance-matrix:required":"node scripts/gate-compliance-matrix.js","gate:compliance-matrix:report-only":"node scripts/gate-compliance-matrix.js --report-only","rehearse:compliance:rollback:required":"node scripts/rehearse-compliance-rollback.js --mode=required","gate:fullchain:with-rollback:both-drill":"node scripts/gate-fullchain.js --with-rollback-drill --rollback-drill-both","rehearse:compliance:rollback:report-only":"node scripts/rehearse-compliance-rollback.js --mode=report-only","gate:fullchain:with-rollback:required-drill":"node scripts/gate-fullchain.js --with-rollback-drill --rollback-drill-required"},"_npmUser":{"name":"hiddenpath","email":"wang.luqiang@gmail.com"},"repository":{"url":"git+https://github.com/ailib-official/ai-protocol.git","type":"git"},"_npmVersion":"10.8.2","description":"Provider-agnostic AI provider + model registry specification","directories":{},"_nodeVersion":"20.20.2","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"ajv":"^8.12.0","undici":"^6.23.0","js-yaml":"^4.1.0","ajv-formats":"^3.0.1"},"_npmOperationalInternal":{"tmp":"tmp/ai-protocol_1.1.0_1785481408220_0.9276941783520938","host":"s3://npm-registry-packages-npm-production"}},"1.2.0":{"name":"@ailib-official/ai-protocol","version":"1.2.0","description":"Provider-agnostic AI provider + model registry specification","type":"module","main":"dist/index.json","scripts":{"build":"node scripts/build.js","validate":"node scripts/validate.js","validate:providers":"node scripts/validate.js --providers","validate:models":"node scripts/validate.js --models","validate:examples":"node scripts/validate.js --examples","validate:packs":"node scripts/validate.js --packs","validate:schemas":"node scripts/validate.js --schemas","validate:specs":"node scripts/validate.js --specs","validate:compliance":"node scripts/validate-compliance-cases.js","validate:error-codes":"node scripts/validate-error-codes-sync.js","drift:check":"node scripts/drift-detect.js","gate:manifest-consumption":"node scripts/gate-manifest-consumption.js","gate:manifest-authority":"node scripts/gate-manifest-authority.js","gate:compliance-matrix":"node scripts/gate-compliance-matrix.js","gate:compliance-matrix:required":"node scripts/gate-compliance-matrix.js","gate:compliance-matrix:report-only":"node scripts/gate-compliance-matrix.js --report-only","rehearse:compliance:rollback":"node scripts/rehearse-compliance-rollback.js","rehearse:compliance:rollback:report-only":"node scripts/rehearse-compliance-rollback.js --mode=report-only","rehearse:compliance:rollback:required":"node scripts/rehearse-compliance-rollback.js --mode=required","gate:fullchain":"node scripts/gate-fullchain.js","gate:fullchain:with-rollback":"node scripts/gate-fullchain.js --with-rollback-drill","gate:fullchain:with-rollback:required-drill":"node scripts/gate-fullchain.js --with-rollback-drill --rollback-drill-required","gate:fullchain:with-rollback:both-drill":"node scripts/gate-fullchain.js --with-rollback-drill --rollback-drill-both","release:gate":"node scripts/release-gate.js","fact-check:models":"node scripts/fact-check-models.js","fact-check:models:strict":"node scripts/fact-check-models.js --strict","fact-check:models:strict-all":"node scripts/fact-check-models.js --strict --require-keys","migrate:v2alpha-capacity":"node scripts/migrate-v1-capacity-to-v2alpha.js","verify:v1-v2-capacity":"node scripts/verify-v1-v2-capacity-parity.js","verify:me001-identity-aliases":"node scripts/verify-me001-identity-alias-parity.js","validate:arch":"node scripts/validate-arch-fixtures.js","me001:oneshot-candidate":"node scripts/me001-oneshot-candidate.js","test:me001-oneshot":"node --test scripts/me001-oneshot-candidate.test.js","test:gov007-maps":"node --test scripts/lib/v1-v2-capacity-provider-map.test.js && npm run verify:me001-identity-aliases"},"engines":{"node":">=18.0.0"},"devDependencies":{"ajv":"^8.12.0","ajv-formats":"^3.0.1","js-yaml":"^4.1.0","undici":"^6.23.0"},"keywords":["ai","protocol","schema","validation","provider","model"],"license":"MIT OR Apache-2.0","repository":{"type":"git","url":"git+https://github.com/ailib-official/ai-protocol.git"},"publishConfig":{"access":"public"},"_id":"@ailib-official/ai-protocol@1.2.0","gitHead":"d61b70137ef1f7b736a8945a9105f7e766b24906","bugs":{"url":"https://github.com/ailib-official/ai-protocol/issues"},"homepage":"https://github.com/ailib-official/ai-protocol#readme","_nodeVersion":"20.20.2","_npmVersion":"10.8.2","dist":{"integrity":"sha512-XzqotTqQMbuL4g8CBsOBmsOXdqD1EsGeu05gP6mdp3r7TJ5CGSpZQ/o0BKxw0AASL12mrE/AD7r92ja18jL8wQ==","shasum":"9d7cda5e6cd72d9fa74487ef8ba7a756dc274b7b","tarball":"https://registry.npmjs.org/@ailib-official/ai-protocol/-/ai-protocol-1.2.0.tgz","fileCount":241,"unpackedSize":1298738,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCICYU96K1VECStU9++RzZ1C1a5eB9ExFfKhMNflB/mF+ZAiBCF0kEXpsUXx01lBTjdrVimXM9J1IG0R6YhvsALThyJA=="}]},"_npmUser":{"name":"hiddenpath","email":"wang.luqiang@gmail.com"},"directories":{},"maintainers":[{"name":"hiddenpath","email":"wang.luqiang@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/ai-protocol_1.2.0_1786100013928_0.8529500108959449"},"_hasShrinkwrap":false}},"time":{"created":"2026-05-06T17:22:21.245Z","modified":"2026-08-07T10:53:34.279Z","0.8.4":"2026-05-06T17:22:21.631Z","1.0.0":"2026-07-01T12:52:34.347Z","1.1.0":"2026-07-31T07:03:28.510Z","1.2.0":"2026-08-07T10:53:34.090Z"},"bugs":{"url":"https://github.com/ailib-official/ai-protocol/issues"},"license":"MIT OR Apache-2.0","homepage":"https://github.com/ailib-official/ai-protocol#readme","keywords":["ai","protocol","schema","validation","provider","model"],"repository":{"type":"git","url":"git+https://github.com/ailib-official/ai-protocol.git"},"description":"Provider-agnostic AI provider + model registry specification","maintainers":[{"name":"hiddenpath","email":"wang.luqiang@gmail.com"}],"readme":"﻿# AI-Protocol\n\n**Provider-agnostic specification** for AI provider manifests and model registries — the **data-state rulebook** consumed by language runtimes (npm package **`@ailib-official/ai-protocol`**, package version **1.2.0**).\n\n[中文文档](README_CN.md)\n\nAI-Protocol standardizes how runtimes talk to providers across modalities (text, vision, audio, video). It complements [MCP](https://modelcontextprotocol.io): MCP focuses on tools and context at a high level; this repo focuses on **declarative API normalization** (endpoints, streaming maps, errors, capabilities) so runtimes can load the same manifests.\n\n> **Pin:** Prefer **`@ailib-official/ai-protocol@1.2.0`** (tag `v1.2.0`) for production. Follow `main` only when you intentionally want tip-of-tree; see [CHANGELOG](CHANGELOG.md).\n\n## How it fits\n\n| Layer | Role |\n|-------|------|\n| **This repo** | Schemas, YAML/JSON manifests, compliance fixtures, build → `dist/` |\n| **Runtimes** | Load manifests, execute HTTP/SSE, normalize events ([ai-lib-rust](https://github.com/ailib-official/ai-lib-rust), [ai-lib-python](https://github.com/ailib-official/ai-lib-python), [ai-lib-ts](https://github.com/ailib-official/ai-lib-ts), [ai-lib-go](https://github.com/ailib-official/ai-lib-go)) |\n| **Mock** | [ai-protocol-mock](https://github.com/ailib-official/ai-protocol-mock) for fixture-driven tests without live keys |\n\n**Public authority** (what runtimes / GOV-006 consume): `schemas/`, `v1/`, `v2/`, `v2-alpha/`, `dist/`, `docs/`, `tests/compliance/`.  \nSee [`docs/PUBLIC_SURFACE.md`](docs/PUBLIC_SURFACE.md). Historical material under [`archive/`](archive/README.md) is **not** wire contract.\n\n## Install\n\n```bash\nnpm install @ailib-official/ai-protocol@1.2.0\n```\n\nPackage `files`: `dist`, `v1`, `v2`, `v2-alpha`, `schemas`. Entry: `dist/index.json`.\n\nPrefer **`dist/` JSON** in production. Resolve aliases via `dist/provider-identity.json` (see below).\n\n### Schema `$schema` URLs\n\nPin a release for stability, or follow `main` for tip:\n\n- Release: `https://raw.githubusercontent.com/ailib-official/ai-protocol/v1.2.0/schemas/v1.json`\n- Tip: `https://raw.githubusercontent.com/ailib-official/ai-protocol/main/schemas/v1.json`\n\nFor v2 shapes use `schemas/v2/*.json` under the same tag/`main` rules.\n\n## Version authority\n\nThree concurrent trees. **`latest` ≠ production default.**\n\n| Tree | Role | Approx. coverage (main tip) |\n|------|------|-----------------------------|\n| **v1** | **LTS wire / `production_default`** | ~37 providers + `v1/models/` registry |\n| **v2** | **Evolution tip** (`dist/index.json` `latest`) | ~21 providers; contracts, packs, ME-001 metadata |\n| **v2-alpha** | Explicit sandbox | anthropic, gemini, openai |\n\nFrom `dist/index.json`:\n\n```json\n\"latest\": \"v2\",\n\"authority\": {\n  \"lts_wire\": \"v1\",\n  \"evolution\": \"v2\",\n  \"sandbox\": \"v2-alpha\",\n  \"production_default\": \"v1\",\n  \"latest_means\": \"evolution_tip_not_production_default\"\n}\n```\n\nNormative detail: [`docs/VERSION_AUTHORITY.md`](docs/VERSION_AUTHORITY.md).\n\n## Provider identity\n\nCanonical ids + aliases are published for package consumers:\n\n- **Map:** `dist/provider-identity.json`\n- **Pointer:** `dist/index.json` → `identity.map`\n- **Doc:** [`docs/PROVIDER_IDENTITY.md`](docs/PROVIDER_IDENTITY.md)\n\nExamples (not exhaustive): `google` → `gemini`, `kimi` → `moonshot`, `glm` → `zhipu`, `ernie` / `qianfan` → `baidu`.\n\nLookup order: exact `id` → manifest `aliases` → published map → fail closed.\n\n## Repository layout\n\n```\nai-protocol/\n├── schemas/                 # JSON Schema (v1.json, spec.json, schemas/v2/*)\n├── v1/                      # LTS wire: providers/ + models/\n├── v2/                      # Evolution: providers/, contracts/, packs/, architecture fixtures\n├── v2-alpha/                # Sandbox overlays\n├── dist/                    # Built JSON + index.json + provider-identity.json\n├── docs/                    # Normative / Experimental companions\n├── tests/compliance/        # Cross-runtime compliance cases\n├── examples/\n├── scripts/                 # validate / build / gates / ME helpers\n└── archive/                 # Non-authority history\n```\n\nKey docs: [`PUBLIC_SURFACE`](docs/PUBLIC_SURFACE.md) · [`VERSION_AUTHORITY`](docs/VERSION_AUTHORITY.md) · [`PROVIDER_IDENTITY`](docs/PROVIDER_IDENTITY.md) · [`MANIFEST_LOGICAL_LAYERS`](docs/MANIFEST_LOGICAL_LAYERS.md) · [`MANIFEST_AUTHORITY`](docs/MANIFEST_AUTHORITY.md) · [`MODEL_CAPABILITY_METADATA`](docs/MODEL_CAPABILITY_METADATA.md) · [`SPEC`](docs/SPEC.md) · [`GETTING_STARTED`](docs/GETTING_STARTED.md)\n\n## Core concepts\n\n- **Operators** — parameter maps, streaming event maps, capability declarations, error classification / rate-limit headers. Public `retry_policy` is **Execution Spec defaults**, not host Policy ([`MANIFEST_LOGICAL_LAYERS`](docs/MANIFEST_LOGICAL_LAYERS.md)).\n- **Version isolation** — validate each tree against its schemas; do not silently fall back from v1 → v2-alpha.\n- **Modular manifests** — one provider file per id; PR-friendly.\n\n### Model capability metadata (Experimental, PT-ME-001)\n\nOn **v2** `ai_provider` manifests, per-model facts live under `metadata.models.<id>`:\n\n- Optional `model_capabilities` / `modalities` (and related fields) in [`schemas/v2/metadata-model-entry.json`](schemas/v2/metadata-model-entry.json)\n- **Omit = unknown** (never serialize unknown as `false`)\n- Prefer model facts over provider-level `capabilities.required` / `optional` ads when present\n\nDocs: [`docs/MODEL_CAPABILITY_METADATA.md`](docs/MODEL_CAPABILITY_METADATA.md). Baseline gate: `npm run validate:arch`.\n\n## Quick examples\n\n### Provider (v1 excerpt)\n\n```yaml\n# v1/providers/anthropic.yaml\n$schema: \"https://raw.githubusercontent.com/ailib-official/ai-protocol/v1.2.0/schemas/v1.json\"\n\nid: anthropic\nprotocol_version: \"1.5\"\n\nstreaming:\n  decoder:\n    format: \"anthropic_sse\"\n    strategy: \"anthropic_event_stream\"\n```\n\n### Errors / rate limits (excerpt)\n\n```yaml\nerror_classification:\n  by_http_status:\n    \"401\": \"authentication\"\n    \"429\": \"rate_limited\"\n    \"500\": \"server_error\"\n\nrate_limit_headers:\n  requests_limit: \"x-ratelimit-limit-requests\"\n  requests_remaining: \"x-ratelimit-remaining-requests\"\n\nretry_policy:\n  strategy: \"exponential_backoff\"\n  min_delay_ms: 1000\n  retry_on_http_status: [429, 500]\n```\n\n### Model registry (v1)\n\n```yaml\n# v1/models/… — models keyed under models:\nmodels:\n  claude-3-5-sonnet:\n    provider: anthropic\n    model_id: \"claude-3-5-sonnet-20241022\"\n    context_window: 200000\n    capabilities: [chat, vision, tools, streaming]\n```\n\nRuntimes load `dist/` (or YAML sources) and resolve `provider/model` strings per their loader docs.\n\n## Providers (main tip)\n\n**v1 (~37):** ai21, anthropic, anyscale, azure, baichuan, baidu, cerebras, cohere, deepinfra, deepseek, doubao, fireworks, gemini, groq, huggingface, hunyuan, jina, lepton, minimax, mistral, moonshot, nvidia, openai, openrouter, perplexity, qwen, replicate, sensenova, siliconflow, spark, stability, tiangong, together, writer, xai, yi, zhipu.\n\n**v2 (~21, evolution):** anthropic, baichuan, baidu, cerebras, cohere, deepseek, doubao, gemini, groq, hunyuan, jina, minimax, mistral, moonshot, nvidia, openai, perplexity, qwen, xai, yi, zhipu — including PT-ADM admission waves (xai/mistral/minimax; perplexity/yi/baichuan; hunyuan/baidu/cerebras) with ME-001 `metadata.models` enrichment on main.\n\n**v2-alpha:** anthropic, gemini, openai.\n\nExact file lists: `v1/providers/`, `v2/providers/`, `v2-alpha/providers/`.\n\n## Validate, build, gates\n\n```bash\nnpm install\nnpm run validate              # AJV 2020-12 over providers/models/examples/schemas/specs\nnpm run validate:providers\nnpm run validate:models\nnpm run validate:schemas\nnpm run validate:compliance\nnpm run validate:arch         # architecture fixtures + ME-001 / identity gates\nnpm run build                 # YAML → dist/; writes index.json + provider-identity.json\n\nnpm run drift:check\nnpm run gate:manifest-authority\nnpm run gate:manifest-consumption\nnpm run gate:compliance-matrix\nnpm run gate:fullchain\nnpm run release:gate\n```\n\nOptional: `fact-check:models`, `me001:oneshot-candidate` (advisory; see [`docs/ME001_ONESHOT_CANDIDATE.md`](docs/ME001_ONESHOT_CANDIDATE.md)).\n\nCI: `.github/workflows/validate.yml` (validate + build); `governance-report.yml` (report-only gates). Details: [`docs/CI_VALIDATION_EXPLAINED.md`](docs/CI_VALIDATION_EXPLAINED.md).\n\nWave-3 gate policy (report-only on PR review vs required fullchain on `main`): see historical notes in CHANGELOG / governance docs — default production wire remains **v1** until an explicit parity announcement.\n\n## Contributing\n\n1. Add `v1/providers/<id>.yaml` (and/or graduate into `v2/`) per schema\n2. Register models under `v1/models/` when using the v1 registry\n3. Prefer research notes under `research/providers/` with VERIFIED evidence\n4. Run `npm run validate` (and `validate:arch` when touching v2 metadata / identity)\n5. Open a PR\n\nGuide: [`docs/CONTRIBUTING_PROVIDER.md`](docs/CONTRIBUTING_PROVIDER.md).\n\n## Related runtimes\n\n| Runtime | Repo |\n|---------|------|\n| Rust | [ailib-official/ai-lib-rust](https://github.com/ailib-official/ai-lib-rust) |\n| Python | [ailib-official/ai-lib-python](https://github.com/ailib-official/ai-lib-python) |\n| TypeScript | [ailib-official/ai-lib-ts](https://github.com/ailib-official/ai-lib-ts) |\n| Go | [ailib-official/ai-lib-go](https://github.com/ailib-official/ai-lib-go) |\n| Mock server | [ailib-official/ai-protocol-mock](https://github.com/ailib-official/ai-protocol-mock) |\n\nRuntime package versions move independently — check each repo’s README / crates.io / PyPI / npm.\n\n## License\n\nDual-licensed under [Apache-2.0](LICENSE-APACHE) or [MIT](LICENSE-MIT), at your option.\n\nUnless you state otherwise, contributions are dual-licensed as above without additional terms.\n","readmeFilename":"README.md"}