{"_id":"@ailib-official/ai-lib-ts","_rev":"5-f07c28c761daeda6172910cdb83f464a","name":"@ailib-official/ai-lib-ts","dist-tags":{"latest":"1.2.0"},"versions":{"0.5.3":{"name":"@ailib-official/ai-lib-ts","version":"0.5.3","keywords":["ai","llm","openai","anthropic","claude","gpt","streaming","protocol","unified-api","multi-provider"],"author":{"name":"AI-Protocol Team"},"license":"MIT OR Apache-2.0","_id":"@ailib-official/ai-lib-ts@0.5.3","maintainers":[{"name":"hiddenpath","email":"wang.luqiang@gmail.com"}],"homepage":"https://github.com/ailib-official/ai-lib-ts#readme","bugs":{"url":"https://github.com/ailib-official/ai-lib-ts/issues"},"dist":{"shasum":"0b2a4c107b31c56d54be77522c2f2a37f6abb58b","tarball":"https://registry.npmjs.org/@ailib-official/ai-lib-ts/-/ai-lib-ts-0.5.3.tgz","fileCount":85,"integrity":"sha512-TIX0s7cQAfRdHDcCDTt/DywPCxGj8v5KXCeh07aP+MiF3m27bRbO2Gdj8RvlGae2bRGfiFhOnjmgBFqZhY31lA==","signatures":[{"sig":"MEUCIGsGJ+jBmrMlJISjdHpzKsRz2GeVoX5rQRGf50LLLtflAiEAnkCuB/8nkxQ9i5UyKkDrv97t7GVc1LVTsO43W/t7ZBE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1425636},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=18.0.0"},"exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}},"./core":{"import":{"types":"./dist/core.d.ts","default":"./dist/core.js"},"require":{"types":"./dist/core.d.cts","default":"./dist/core.cjs"}},"./contact":{"import":{"types":"./dist/contact.d.ts","default":"./dist/contact.js"},"require":{"types":"./dist/contact.d.cts","default":"./dist/contact.cjs"}}},"gitHead":"5754ebda2dcfa14ba7f0bcf6710f8d59d501f172","scripts":{"dev":"tsup --watch","lint":"eslint src tests","test":"vitest run","build":"tsup","test:core":"vitest run --config vitest.core.config.ts","typecheck":"tsc -p tsconfig.typecheck.json --noEmit","test:watch":"vitest","test:coverage":"vitest run --coverage","prepublishOnly":"npm run lint && npm run typecheck && npm test && npm run build"},"_npmUser":{"name":"hiddenpath","email":"wang.luqiang@gmail.com"},"repository":{"url":"git+https://github.com/ailib-official/ai-lib-ts.git","type":"git"},"_npmVersion":"11.12.1","description":"Official TypeScript Runtime for AI-Protocol - Unified AI model interaction for Node.js and the npm ecosystem","directories":{},"sideEffects":false,"_nodeVersion":"24.15.0","dependencies":{"ajv":"^8.17.1","yaml":"^2.7.0","ajv-formats":"^3.0.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.3.5","eslint":"^10.0.1","vitest":"^2.1.8","@eslint/js":"^10.0.1","typescript":"^5.7.2","@types/node":"^22.10.0","@typescript-eslint/parser":"^8.56.0","@ailib-official/ai-protocol":"^0.8.4","@typescript-eslint/eslint-plugin":"^8.56.0"},"peerDependencies":{"@ailib-official/ai-protocol":"^0.8.4"},"peerDependenciesMeta":{"@ailib-official/ai-protocol":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/ai-lib-ts_0.5.3_1778089906560_0.11970938744421988","host":"s3://npm-registry-packages-npm-production"}},"1.0.0":{"name":"@ailib-official/ai-lib-ts","version":"1.0.0","keywords":["ai","llm","openai","anthropic","claude","gpt","streaming","protocol","unified-api","multi-provider"],"author":{"name":"AI-Protocol Team"},"license":"MIT OR Apache-2.0","_id":"@ailib-official/ai-lib-ts@1.0.0","maintainers":[{"name":"hiddenpath","email":"wang.luqiang@gmail.com"}],"homepage":"https://github.com/ailib-official/ai-lib-ts#readme","bugs":{"url":"https://github.com/ailib-official/ai-lib-ts/issues"},"dist":{"shasum":"44e6d8d74d9d4162ab78338978d7bae3163a6041","tarball":"https://registry.npmjs.org/@ailib-official/ai-lib-ts/-/ai-lib-ts-1.0.0.tgz","fileCount":104,"integrity":"sha512-qh35r7yksV1fMrCff8WBvB7cARmL3VRIl2hSDZOvaHQ9EosE/UvMqe9e4f5mWX52tnOX5K6/L3dwhNE/oeTvXg==","signatures":[{"sig":"MEYCIQDVyHbHK+65qZz/VICyJUAHPmbpoG9ISr0YQx+WimaQ6gIhAKQvrNEhZWjyUPxzhmFZCEUWBjKqYy1IXc6kIHDaOZqb","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":2738912},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=18.0.0"},"exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}},"./core":{"import":{"types":"./dist/core.d.ts","default":"./dist/core.js"},"require":{"types":"./dist/core.d.cts","default":"./dist/core.cjs"}},"./contact":{"import":{"types":"./dist/contact.d.ts","default":"./dist/contact.js"},"require":{"types":"./dist/contact.d.cts","default":"./dist/contact.cjs"}}},"gitHead":"129192141248b9d0165bef4767d87f8b28ff8504","scripts":{"dev":"tsup --watch","lint":"eslint src tests","test":"vitest run","build":"tsup","test:core":"vitest run --config vitest.core.config.ts","typecheck":"tsc -p tsconfig.typecheck.json --noEmit","test:watch":"vitest","test:coverage":"vitest run --coverage","prepublishOnly":"npm run lint && npm run typecheck && npm test && npm run build","test:compliance:full":"vitest run --config vitest.compliance-full.config.ts"},"_npmUser":{"name":"hiddenpath","email":"wang.luqiang@gmail.com"},"repository":{"url":"git+https://github.com/ailib-official/ai-lib-ts.git","type":"git"},"_npmVersion":"10.8.2","description":"Official TypeScript Runtime for AI-Protocol - Unified AI model interaction for Node.js and the npm ecosystem","directories":{},"sideEffects":false,"_nodeVersion":"20.20.2","dependencies":{"ajv":"^8.17.1","yaml":"^2.7.0","ajv-formats":"^3.0.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.3.5","eslint":"^10.0.1","vitest":"^2.1.8","@eslint/js":"^10.0.1","typescript":"^5.7.2","@types/node":"^22.10.0","@typescript-eslint/parser":"^8.56.0","@ailib-official/ai-protocol":"^1.0.0","@typescript-eslint/eslint-plugin":"^8.56.0"},"peerDependencies":{"@ailib-official/ai-protocol":"^1.0.0"},"peerDependenciesMeta":{"@ailib-official/ai-protocol":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/ai-lib-ts_1.0.0_1782916110186_0.8340165795466823","host":"s3://npm-registry-packages-npm-production"}},"1.0.1":{"name":"@ailib-official/ai-lib-ts","version":"1.0.1","keywords":["ai","llm","openai","anthropic","claude","gpt","streaming","protocol","unified-api","multi-provider"],"author":{"name":"AI-Protocol Team"},"license":"MIT OR Apache-2.0","_id":"@ailib-official/ai-lib-ts@1.0.1","maintainers":[{"name":"hiddenpath","email":"wang.luqiang@gmail.com"}],"homepage":"https://github.com/ailib-official/ai-lib-ts#readme","bugs":{"url":"https://github.com/ailib-official/ai-lib-ts/issues"},"dist":{"shasum":"424026e0ecf26a6d6058aaa529f33b93f2afc58b","tarball":"https://registry.npmjs.org/@ailib-official/ai-lib-ts/-/ai-lib-ts-1.0.1.tgz","fileCount":111,"integrity":"sha512-+FbhDLTND30Bazgq3ehPrJnGXmAwY4ImS6wyWZfJ0ZfkslprL8qsNApq8EgIH09o9ILg9t6yvVpMCEf5s4v0LQ==","signatures":[{"sig":"MEUCIE+2+7l2L/iAKUpZOC5wvPlSzB5ui+QxhBcT+a/3fWqpAiEA9mjoG/jRWczr1XbczgRRA/Qwrl3pjux3cBq2xO9fel4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":2959557},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=18.0.0"},"exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}},"./core":{"import":{"types":"./dist/core.d.ts","default":"./dist/core.js"},"require":{"types":"./dist/core.d.cts","default":"./dist/core.cjs"}},"./contact":{"import":{"types":"./dist/contact.d.ts","default":"./dist/contact.js"},"require":{"types":"./dist/contact.d.cts","default":"./dist/contact.cjs"}}},"gitHead":"388f76c26fa6046c8a72e76c0d4d8c09678d798c","scripts":{"dev":"tsup --watch","lint":"eslint src tests","test":"vitest run","build":"tsup","test:core":"vitest run --config vitest.core.config.ts","typecheck":"tsc -p tsconfig.typecheck.json --noEmit","test:watch":"vitest","test:coverage":"vitest run --coverage","prepublishOnly":"npm run lint && npm run typecheck && npm test && npm run build","test:compliance:full":"vitest run --config vitest.compliance-full.config.ts"},"_npmUser":{"name":"hiddenpath","email":"wang.luqiang@gmail.com"},"repository":{"url":"git+https://github.com/ailib-official/ai-lib-ts.git","type":"git"},"_npmVersion":"10.8.2","description":"Official TypeScript Runtime for AI-Protocol - Unified AI model interaction for Node.js and the npm ecosystem","directories":{},"sideEffects":false,"_nodeVersion":"20.20.2","dependencies":{"ajv":"^8.17.1","yaml":"^2.7.0","ajv-formats":"^3.0.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.3.5","eslint":"^10.0.1","vitest":"^2.1.8","@eslint/js":"^10.0.1","typescript":"^5.7.2","@types/node":"^22.10.0","@typescript-eslint/parser":"^8.56.0","@ailib-official/ai-protocol":"^1.0.0","@typescript-eslint/eslint-plugin":"^8.56.0"},"peerDependencies":{"@ailib-official/ai-protocol":"^1.0.0"},"peerDependenciesMeta":{"@ailib-official/ai-protocol":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/ai-lib-ts_1.0.1_1783769470386_0.7761037511662305","host":"s3://npm-registry-packages-npm-production"}},"1.1.0":{"name":"@ailib-official/ai-lib-ts","version":"1.1.0","keywords":["ai","llm","openai","anthropic","claude","gpt","streaming","protocol","unified-api","multi-provider"],"author":{"name":"AI-Protocol Team"},"license":"MIT OR Apache-2.0","_id":"@ailib-official/ai-lib-ts@1.1.0","maintainers":[{"name":"hiddenpath","email":"wang.luqiang@gmail.com"}],"homepage":"https://github.com/ailib-official/ai-lib-ts#readme","bugs":{"url":"https://github.com/ailib-official/ai-lib-ts/issues"},"dist":{"shasum":"e7aa45c0ec391ef42553bed3801f44950a364791","tarball":"https://registry.npmjs.org/@ailib-official/ai-lib-ts/-/ai-lib-ts-1.1.0.tgz","fileCount":114,"integrity":"sha512-njg7dH8uEOMvl3cSXmpYlk2q+m5EJi4qlunMtO81i7lH/5oNLlRQhh8867i8z5fOOcwLDGA2i/qjwKAwdPfLjQ==","signatures":[{"sig":"MEQCIHosrhdOASLXBN72ha8gN08dfjYs8UlCB1POCNNYUfMoAiACg5M94Pec+6YT1Q7dRnLkM7R4qgNO2gzXBh+cPIuBdw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":3129730},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=18.0.0"},"exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}},"./core":{"import":{"types":"./dist/core.d.ts","default":"./dist/core.js"},"require":{"types":"./dist/core.d.cts","default":"./dist/core.cjs"}},"./contact":{"import":{"types":"./dist/contact.d.ts","default":"./dist/contact.js"},"require":{"types":"./dist/contact.d.cts","default":"./dist/contact.cjs"}}},"gitHead":"f3e81a1333983093b1512a2e6233032e909a68e7","scripts":{"dev":"tsup --watch","lint":"eslint src tests","test":"vitest run","build":"tsup","test:core":"vitest run --config vitest.core.config.ts","typecheck":"tsc -p tsconfig.typecheck.json --noEmit","test:watch":"vitest","test:coverage":"vitest run --coverage","prepublishOnly":"npm run lint && npm run typecheck && npm test && npm run build","test:compliance:full":"vitest run --config vitest.compliance-full.config.ts"},"_npmUser":{"name":"hiddenpath","email":"wang.luqiang@gmail.com"},"repository":{"url":"git+https://github.com/ailib-official/ai-lib-ts.git","type":"git"},"_npmVersion":"10.8.2","description":"Official TypeScript Runtime for AI-Protocol - Unified AI model interaction for Node.js and the npm ecosystem","directories":{},"sideEffects":false,"_nodeVersion":"20.20.2","dependencies":{"ajv":"^8.17.1","yaml":"^2.7.0","ajv-formats":"^3.0.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.3.5","eslint":"^10.0.1","vitest":"^2.1.8","@eslint/js":"^10.0.1","typescript":"^5.7.2","@types/node":"^22.10.0","@typescript-eslint/parser":"^8.56.0","@ailib-official/ai-protocol":"^1.1.0","@typescript-eslint/eslint-plugin":"^8.56.0"},"peerDependencies":{"@ailib-official/ai-protocol":"^1.1.0"},"peerDependenciesMeta":{"@ailib-official/ai-protocol":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/ai-lib-ts_1.1.0_1785491487871_0.47736615220833745","host":"s3://npm-registry-packages-npm-production"}},"1.2.0":{"name":"@ailib-official/ai-lib-ts","version":"1.2.0","description":"Official TypeScript Runtime for AI-Protocol - Unified AI model interaction for Node.js and the npm ecosystem","type":"module","main":"./dist/index.cjs","module":"./dist/index.js","types":"./dist/index.d.ts","exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}},"./core":{"import":{"types":"./dist/core.d.ts","default":"./dist/core.js"},"require":{"types":"./dist/core.d.cts","default":"./dist/core.cjs"}},"./contact":{"import":{"types":"./dist/contact.d.ts","default":"./dist/contact.js"},"require":{"types":"./dist/contact.d.cts","default":"./dist/contact.cjs"}}},"scripts":{"build":"tsup","dev":"tsup --watch","test":"vitest run","test:core":"vitest run --config vitest.core.config.ts","test:compliance:full":"vitest run --config vitest.compliance-full.config.ts","test:watch":"vitest","test:coverage":"vitest run --coverage","lint":"eslint src tests","typecheck":"tsc -p tsconfig.typecheck.json --noEmit","prepublishOnly":"npm run lint && npm run typecheck && npm test && npm run build"},"engines":{"node":">=18.0.0"},"keywords":["ai","llm","openai","anthropic","claude","gpt","streaming","protocol","unified-api","multi-provider"],"author":{"name":"AI-Protocol Team"},"license":"MIT OR Apache-2.0","repository":{"type":"git","url":"git+https://github.com/ailib-official/ai-lib-ts.git"},"bugs":{"url":"https://github.com/ailib-official/ai-lib-ts/issues"},"homepage":"https://github.com/ailib-official/ai-lib-ts#readme","dependencies":{"ajv":"^8.17.1","ajv-formats":"^3.0.1","yaml":"^2.7.0"},"peerDependencies":{"@ailib-official/ai-protocol":"^1.1.0"},"peerDependenciesMeta":{"@ailib-official/ai-protocol":{"optional":true}},"devDependencies":{"@ailib-official/ai-protocol":"^1.1.0","@eslint/js":"^10.0.1","@types/node":"^22.10.0","@typescript-eslint/eslint-plugin":"^8.56.0","@typescript-eslint/parser":"^8.56.0","eslint":"^10.0.1","tsup":"^8.3.5","typescript":"^5.7.2","vitest":"^2.1.8"},"publishConfig":{"access":"public"},"sideEffects":false,"_id":"@ailib-official/ai-lib-ts@1.2.0","gitHead":"c1715338d99cba26f3865c9f18c80faddcf966ab","_nodeVersion":"20.20.2","_npmVersion":"10.8.2","dist":{"integrity":"sha512-NkC5WSiOJqgypfS0IOZsgpGZYUhjQk2nJWQYPAx2sWA9b2lBKw4OrN5HU09oM/uJHLwe4qURuP4TCQl2IKW8/w==","shasum":"c6740fdfe9969c3d94c82bdf106d0a7309990beb","tarball":"https://registry.npmjs.org/@ailib-official/ai-lib-ts/-/ai-lib-ts-1.2.0.tgz","fileCount":114,"unpackedSize":3161875,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQCOezWVhkgzaWvNoPpHC0MXjbI2bzg+N4NHEvbD2tgpoQIgdwGztjKrm/9ZswsIFKS3Q7+sjZqI7XMrDKCdJQ3eNDk="}]},"_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-lib-ts_1.2.0_1786103750326_0.9355181173199325"},"_hasShrinkwrap":false}},"time":{"created":"2026-05-06T17:51:46.426Z","modified":"2026-08-07T11:55:50.641Z","0.5.3":"2026-05-06T17:51:46.744Z","1.0.0":"2026-07-01T14:28:30.382Z","1.0.1":"2026-07-11T11:31:10.554Z","1.1.0":"2026-07-31T09:51:28.118Z","1.2.0":"2026-08-07T11:55:50.492Z"},"bugs":{"url":"https://github.com/ailib-official/ai-lib-ts/issues"},"author":{"name":"AI-Protocol Team"},"license":"MIT OR Apache-2.0","homepage":"https://github.com/ailib-official/ai-lib-ts#readme","keywords":["ai","llm","openai","anthropic","claude","gpt","streaming","protocol","unified-api","multi-provider"],"repository":{"type":"git","url":"git+https://github.com/ailib-official/ai-lib-ts.git"},"description":"Official TypeScript Runtime for AI-Protocol - Unified AI model interaction for Node.js and the npm ecosystem","maintainers":[{"name":"hiddenpath","email":"wang.luqiang@gmail.com"}],"readme":"# ai-lib-ts\n\n**Protocol runtime for [AI-Protocol](https://github.com/ailib-official/ai-protocol)** — TypeScript / Node.js reference implementation (v**1.2.0**).\n\n[中文文档](README_CN.md)\n\n`@ailib-official/ai-lib-ts` ships three entry points:\n\n| Import | Layer | Use when |\n|--------|-------|----------|\n| `@ailib-official/ai-lib-ts` | E + P facade | Full SDK (default) |\n| `@ailib-official/ai-lib-ts/core` | Execution only | Edge / minimal bundle — no resilience routing |\n| `@ailib-official/ai-lib-ts/contact` | Policy only | Retry, circuit breaker, routing — no `AiClient` |\n\nPublished on [npm](https://www.npmjs.com/package/@ailib-official/ai-lib-ts) as **`@ailib-official/ai-lib-ts@1.2.0`**. Optional peer: `@ailib-official/ai-protocol@^1.0.0`.\n\n> **Note:** Git `main` may include protocol identity and Experimental Envelope work landed after the last npm cut. Match dependency versions to the tag you intend; see [CHANGELOG](CHANGELOG.md) `Unreleased`.\n\n## How it works\n\n**Default chat path:** `AiClient` loads a provider manifest → builds the request from manifest fields → sends HTTP via **P-layer `HttpTransport`** (retry always on) → parses JSON / SSE with manifest `response_paths` and OpenAI-style fallbacks.\n\nThis is **not** the low-level `Pipeline` operator path (that API exists for compliance / advanced use, but `AiClient` does **not** call `Pipeline.process()` for chat). There is **no** `ProviderDriver` in this runtime.\n\n| Layer | Modules | Responsibility |\n|-------|---------|----------------|\n| Execution (E) | `client`, `protocol`, `transport/http`, `pipeline`, `types`, `structured`, `mcp`, embeddings/STT/TTS/rerank | HTTP, parsing, types |\n| Policy (P) | `resilience`, `routing`, `cache`, `batch`, `telemetry`, `guardrails`, `transport` (wrapper) | Retry, limits, routing — partially auto on default transport |\n| Facade | package root | Re-exports both layers |\n\n## Quick start\n\n```bash\nnpm install @ailib-official/ai-lib-ts\nexport OPENAI_API_KEY=\"your-key\"\n```\n\n```typescript\nimport { AiClient, Message } from '@ailib-official/ai-lib-ts';\n\nconst client = await AiClient.new('openai/gpt-4o');\n\nconst response = await client\n  .chat([\n    Message.system('You are a helpful assistant.'),\n    Message.user('Hello!'),\n  ])\n  .execute();\n\nconsole.log(response.content);\n```\n\n### Mock server (integration tests)\n\n```typescript\nimport { Message, createClientBuilder } from '@ailib-official/ai-lib-ts';\n\nconst client = await createClientBuilder()\n  .withMockServer('http://localhost:4010')\n  .build('openai/gpt-4o');\n\nconst response = await client\n  .chat([Message.user('Hello!')])\n  .execute();\n```\n\nRequires a running [ai-protocol-mock](https://github.com/ailib-official/ai-protocol-mock). Env-based mock URL override (`MOCK_HTTP_URL`) is honored by transport only when `AILIB_ALLOW_MOCK_URL=1` or `NODE_ENV=test`. Explicit `withMockServer` / `baseUrlOverride` always wins.\n\nPattern source: `tests/integration.test.ts`.\n\n### Streaming\n\n```typescript\nconst stream = client\n  .chat([Message.user('Count from 1 to 5')])\n  .stream()\n  .executeStream();\n\nfor await (const event of stream) {\n  if (event.event_type === 'PartialContentDelta') {\n    process.stdout.write(event.content);\n  }\n}\n```\n\n### Tool calling\n\n```typescript\nconst response = await client\n  .chat([Message.user(\"What's the weather in Tokyo?\")])\n  .tools([\n    {\n      name: 'get_weather',\n      description: 'Get weather',\n      parameters: {\n        type: 'object',\n        properties: { city: { type: 'string' } },\n        required: ['city'],\n      },\n    },\n  ])\n  .execute();\n\nfor (const call of response.toolCalls ?? []) {\n  console.log(call.name, call.arguments);\n}\n```\n\n## Public API (package root)\n\nMajor exports:\n\n- **Client:** `AiClient`, `AiClientBuilder`, `createClient`, `createClientBuilder`, `ChatBuilder`\n- **Types:** `Message`, `ContentBlock`, `StreamingEvent`, `Tool`, execution metadata types\n- **Errors:** `AiLibError`, `StandardErrorCode`, `isRetryable`, `isFallbackable`\n- **Protocol:** `ProtocolLoader`, manifest types, V2 parsers, content-block encoders\n- **Pipeline (advanced):** `Pipeline`, `createPipeline` — not wired into default `AiClient`\n- **Policy:** `RetryPolicy`, `CircuitBreaker`, `RateLimiter`, `Backpressure`, `ModelManager`, `FallbackChain`, …\n- **Service clients:** `EmbeddingClient`, `RerankerClient`, `SttClient`, `TtsClient` (standalone HTTP; not chat-pipeline driven)\n- **Extras:** `MemoryCache`, `McpToolBridge`, `Guardrails`, telemetry helpers\n\nUse `/core` when you need E-layer only (no `RetryPolicy` on transport). Use `/contact` for policy without `AiClient`.\n\nText-tool helpers (`StandardTextToolParser`, `createToolCallingPolicy`, …) live under `types` and are re-exported from **`@ailib-official/ai-lib-ts/core`** (not the package-root barrel).\n\n### Honest capability boundaries\n\n| Area | In the package | Not included |\n|------|----------------|--------------|\n| **MCP** | `McpToolBridge` format conversion | MCP server transport in `AiClient` |\n| **Computer Use** | V2 config types in protocol module | Runtime executor / screenshot environment |\n| **Hot reload** | — | Not implemented (`ProtocolLoader.clearCache()` only) |\n| **Resilience on default client** | Manifest-derived **retry** on P-layer `HttpTransport` | Circuit breaker / rate limit / backpressure unless you pass `resilience` into transport options |\n| **`Pipeline`** | Public low-level API | Default `AiClient` chat path |\n| **Embeddings / rerank** | `EmbeddingClient` / `RerankerClient` with `fromManifest` / `fromModel` | Silent OpenAI/Cohere host defaults (removed; ALT-EMB-001) |\n| **Experimental Envelope** | Parse / validate / fixture load (ALT-EXP-001) | Layered assemble algorithm (rust `assemble_layered` remains truth) |\n\n### Embeddings & rerank (ALT-EMB-001)\n\nNo silent vendor base URL. Prefer protocol builders:\n\n```typescript\nimport { EmbeddingClient } from '@ailib-official/ai-lib-ts';\n\nconst client = await EmbeddingClient.builder().fromModel('openai/text-embedding-3-small');\nconst result = await client.embed('hello');\n```\n\n`fromManifest` / `fromModel` resolve credential + `base_url` + endpoint path from the manifest (`/embeddings` or `/rerank` path-only fallback). Explicit `baseUrl` / `apiKey` overrides remain available.\n\n### Resilience (what is auto-enabled)\n\nDefault `AiClient` uses P-layer `HttpTransport`, which **always** applies manifest/default **retry** on non-streaming `execute()`.\n\nCircuit breaker, rate limiter, and backpressure require explicit `TransportOptions.resilience` when constructing transport — `AiClientBuilder` does **not** expose `.withCircuitBreaker()` / `.withRateLimiter()` helpers.\n\nFor manual gating, use `PreflightChecker` from the policy layer beside the client.\n\n## Protocol manifests\n\nResolution via `ProtocolLoader` / `AiClient.new(model, { protocolPath })`:\n\n1. Explicit `protocolPath` (authoritative only)\n2. `AI_PROTOCOL_DIR` / `AI_PROTOCOL_PATH` (authoritative) + packaged degrade paths\n3. Packaged / relative defaults (`node_modules/@ailib-official/ai-protocol`, `../ai-protocol`, …)\n4. GitHub raw fallback (`ailib-official/ai-protocol` `main` `dist/`)\n\nPer root: prefer published `dist/v2|v1/providers/<id>.json`, then source YAML/JSON degrade.\n\n**Identity / aliases (Unreleased on `main`, ALT-ID-001):** `loadProvider` resolves marketplace aliases via `dist/provider-identity.json` (multi-family map), e.g. `google` → `gemini`, `kimi` → `moonshot`. Order: exact on authoritative roots → alias → retry → degrade → GitHub dist; else fail closed.\n\n**Experimental Envelope (Unreleased on `main`, ALT-EXP-001):** `parseContextEnvelope` / `parseCapabilityTagMapping` (+ fixture loaders, schema version constants). Status remains `experimental` — not a product routing default. TS does not re-implement layered assemble.\n\n## API keys\n\n1. Explicit transport / builder credential override\n2. Manifest-declared env vars (`endpoint.auth` / top-level `auth`: `token_env` / `key_env` / …)\n3. Conventional `<PROVIDER_ID>_API_KEY` env var\n\n## Standard error codes (V2)\n\n| Code | Name | Retryable | Fallbackable |\n|------|------|-----------|--------------|\n| E1001 | `invalid_request` | No | No |\n| E1002 | `authentication` | No | Yes |\n| E1003 | `permission_denied` | No | No |\n| E1004 | `not_found` | No | No |\n| E1005 | `request_too_large` | No | No |\n| E2001 | `rate_limited` | Yes | Yes |\n| E2002 | `quota_exhausted` | No | Yes |\n| E3001 | `server_error` | Yes | Yes |\n| E3002 | `overloaded` | Yes | Yes |\n| E3003 | `timeout` | Yes | Yes |\n| E4001 | `conflict` | Yes | No |\n| E4002 | `cancelled` | No | No |\n| E9999 | `unknown` | No | No |\n\n## Testing\n\n```bash\nnpm test\nnpm run test:core\nnpm run test:compliance:full\n```\n\nWith mock server:\n\n```bash\nAILIB_ALLOW_MOCK_URL=1 MOCK_HTTP_URL=http://localhost:4010 npm test\n```\n\nCompliance (local protocol checkout):\n\n```bash\nAI_PROTOCOL_DIR=../ai-protocol COMPLIANCE_DIR=../ai-protocol/tests/compliance npm test\n```\n\n## Related\n\n- [AI-Protocol](https://github.com/ailib-official/ai-protocol) — specification & manifests\n- [ai-lib-rust](https://github.com/ailib-official/ai-lib-rust) — Rust runtime\n- [ai-lib-python](https://github.com/ailib-official/ai-lib-python) — Python runtime\n- [ai-lib-go](https://github.com/ailib-official/ai-lib-go) — Go runtime\n- [ai-protocol-mock](https://github.com/ailib-official/ai-protocol-mock) — unified mock service\n\n## License\n\nDual-licensed under [Apache-2.0](LICENSE-APACHE) or [MIT](LICENSE-MIT).\n","readmeFilename":"README.md"}