{"_id":"@dennisoelkers/aimock","_rev":"4-9c439ae94670af39b1a9a7ee44d97051","name":"@dennisoelkers/aimock","dist-tags":{"latest":"1.42.0"},"versions":{"1.39.0":{"name":"@dennisoelkers/aimock","version":"1.39.0","keywords":["mock","llm","openai","anthropic","claude","gemini","bedrock","azure-openai","ollama","cohere","vertex-ai","mcp","a2a","ag-ui","vector","pinecone","qdrant","chromadb","testing","fixtures","sse","streaming","websocket","record-replay","drift-detection","ai-testing","api-mock","http-mock","embeddings","copilotkit"],"license":"MIT","_id":"@dennisoelkers/aimock@1.39.0","maintainers":[{"name":"dennisoelkers","email":"dennis@graylog.com"}],"homepage":"https://aimock.copilotkit.dev","bugs":{"url":"https://github.com/CopilotKit/aimock/issues"},"bin":{"aimock":"dist/aimock-cli.js","llmock":"dist/cli.js"},"dist":{"shasum":"f00f20ffe300fbbd788c1a29d2e9b271c0781ff5","tarball":"https://registry.npmjs.org/@dennisoelkers/aimock/-/aimock-1.39.0.tgz","fileCount":584,"integrity":"sha512-yMYnG/OybSwvx4eMQ/gKF32OZ/vwfaSN6YOYCThnB5YB/eilxyvI0EPhrczV1K+5erbwaAyvgXAooGHY0QvPHA==","signatures":[{"sig":"MEYCIQC6mcaggfZK3EodgAU0QzfJcCNb2iffTvOxMxmUj1tJhgIhAL9e+V4SFU7xnJ1TKoAdh4U/+bm1Pk+fByZC7wiv7fwW","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":7241169},"main":"./dist/index.cjs","type":"module","_from":"file:dennisoelkers-aimock-1.39.0.tgz","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=20.15.0"},"exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}},"./a2a":{"import":{"types":"./dist/a2a-stub.d.ts","default":"./dist/a2a-stub.js"},"require":{"types":"./dist/a2a-stub.d.cts","default":"./dist/a2a-stub.cjs"}},"./mcp":{"import":{"types":"./dist/mcp-stub.d.ts","default":"./dist/mcp-stub.js"},"require":{"types":"./dist/mcp-stub.d.cts","default":"./dist/mcp-stub.cjs"}},"./agui":{"import":{"types":"./dist/agui-stub.d.ts","default":"./dist/agui-stub.js"},"require":{"types":"./dist/agui-stub.d.cts","default":"./dist/agui-stub.cjs"}},"./jest":{"import":{"types":"./dist/jest.d.ts","default":"./dist/jest.js"},"require":{"types":"./dist/jest.d.cts","default":"./dist/jest.cjs"}},"./vector":{"import":{"types":"./dist/vector-stub.d.ts","default":"./dist/vector-stub.js"},"require":{"types":"./dist/vector-stub.d.cts","default":"./dist/vector-stub.cjs"}},"./vitest":{"import":{"types":"./dist/vitest.d.ts","default":"./dist/vitest.js"},"require":{"types":"./dist/vitest.d.cts","default":"./dist/vitest.cjs"}}},"scripts":{"lint":"eslint .","test":"vitest run","build":"tsdown","release":"pnpm format:check && pnpm typecheck && pnpm build && pnpm test && pnpm lint && pnpm test:exports && npm publish","typecheck":"tsc -p tsconfig.json --noEmit && tsc -p tsconfig.test.json --noEmit && tsc -p scripts/tsconfig.json --noEmit","test:drift":"vitest run --config vitest.config.drift.ts","format:check":"prettier --check .","test:exports":"publint && attw --pack ."},"_npmUser":{"name":"dennisoelkers","email":"dennis@graylog.com"},"_resolved":"/tmp/356f258f62a2d8fbfee7808267bc8165/dennisoelkers-aimock-1.39.0.tgz","_integrity":"sha512-yMYnG/OybSwvx4eMQ/gKF32OZ/vwfaSN6YOYCThnB5YB/eilxyvI0EPhrczV1K+5erbwaAyvgXAooGHY0QvPHA==","repository":{"url":"git+https://github.com/CopilotKit/aimock.git","type":"git"},"_npmVersion":"10.9.8","description":"Mock infrastructure for AI application testing — LLM APIs, image generation, image editing, text-to-speech, transcription, audio translation, audio generation, video generation, embeddings, MCP tools, A2A agents, AG-UI event streams, vector databases, sea","directories":{},"lint-staged":{"*.{ts,mts,js,mjs}":"eslint --fix","*.{ts,mts,js,mjs,cjs,json,html,css,md}":"prettier --write"},"_nodeVersion":"22.23.0","publishConfig":{"access":"public"},"typesVersions":{"*":{"a2a":["./dist/a2a-stub.d.ts","./dist/a2a-stub.d.cts"],"mcp":["./dist/mcp-stub.d.ts","./dist/mcp-stub.d.cts"],"agui":["./dist/agui-stub.d.ts","./dist/agui-stub.d.cts"],"jest":["./dist/jest.d.ts","./dist/jest.d.cts"],"vector":["./dist/vector-stub.d.ts","./dist/vector-stub.d.cts"],"vitest":["./dist/vitest.d.ts","./dist/vitest.d.cts"]}},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.0","husky":"^9.1.7","eslint":"^9.30.0","openai":"^4.0.0","tsdown":"^0.12.5","vitest":"^3.2.1","publint":"^0.3.12","prettier":"^3.6.2","@eslint/js":"^9.30.0","pkg-pr-new":"0.0.86","typescript":"^5.8.3","@types/node":"^22.0.0","lint-staged":"^16.3.2","@google/genai":"^1.0.0","@commitlint/cli":"^19.8.1","@anthropic-ai/sdk":"^0.78.0","typescript-eslint":"^8.35.1","@vitest/coverage-v8":"^3.2.4","@arethetypeswrong/cli":"^0.18.3","eslint-config-prettier":"^10.1.5","@commitlint/config-conventional":"^19.8.0"},"peerDependencies":{"jest":">=29","vitest":">=3"},"peerDependenciesMeta":{"jest":{"optional":true},"vitest":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/aimock_1.39.0_1788426555285_0.32891628944532547","host":"s3://npm-registry-packages-npm-production"}},"1.40.0":{"name":"@dennisoelkers/aimock","version":"1.40.0","keywords":["mock","llm","openai","anthropic","claude","gemini","bedrock","azure-openai","ollama","cohere","vertex-ai","mcp","a2a","ag-ui","vector","pinecone","qdrant","chromadb","testing","fixtures","sse","streaming","websocket","record-replay","drift-detection","ai-testing","api-mock","http-mock","embeddings","copilotkit"],"license":"MIT","_id":"@dennisoelkers/aimock@1.40.0","maintainers":[{"name":"dennisoelkers","email":"dennis@graylog.com"}],"homepage":"https://aimock.copilotkit.dev","bugs":{"url":"https://github.com/CopilotKit/aimock/issues"},"bin":{"aimock":"dist/aimock-cli.js","llmock":"dist/cli.js"},"dist":{"shasum":"2d82d602e6750cb250ca180f79c83f45c2c0a6f0","tarball":"https://registry.npmjs.org/@dennisoelkers/aimock/-/aimock-1.40.0.tgz","fileCount":584,"integrity":"sha512-ih2J6O7K3WIDBshOn5Oq3M5i91UDzKXq6hqRodSE07+pqqb6Qk/F5n36x2upNa3e6W+E96RaP0pzDKU+p/XFSA==","signatures":[{"sig":"MEUCIQCUapz7MOBf8D7E15iuUDrD6RBGienbDtya9EkysVaryQIgIIrLBNuTa9UHLQypk3I1QPW0s+OFejxII6kykF8Blmg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":7241169},"main":"./dist/index.cjs","type":"module","_from":"file:dennisoelkers-aimock-1.40.0.tgz","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=20.15.0"},"exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}},"./a2a":{"import":{"types":"./dist/a2a-stub.d.ts","default":"./dist/a2a-stub.js"},"require":{"types":"./dist/a2a-stub.d.cts","default":"./dist/a2a-stub.cjs"}},"./mcp":{"import":{"types":"./dist/mcp-stub.d.ts","default":"./dist/mcp-stub.js"},"require":{"types":"./dist/mcp-stub.d.cts","default":"./dist/mcp-stub.cjs"}},"./agui":{"import":{"types":"./dist/agui-stub.d.ts","default":"./dist/agui-stub.js"},"require":{"types":"./dist/agui-stub.d.cts","default":"./dist/agui-stub.cjs"}},"./jest":{"import":{"types":"./dist/jest.d.ts","default":"./dist/jest.js"},"require":{"types":"./dist/jest.d.cts","default":"./dist/jest.cjs"}},"./vector":{"import":{"types":"./dist/vector-stub.d.ts","default":"./dist/vector-stub.js"},"require":{"types":"./dist/vector-stub.d.cts","default":"./dist/vector-stub.cjs"}},"./vitest":{"import":{"types":"./dist/vitest.d.ts","default":"./dist/vitest.js"},"require":{"types":"./dist/vitest.d.cts","default":"./dist/vitest.cjs"}}},"scripts":{"lint":"eslint .","test":"vitest run","build":"tsdown","release":"pnpm format:check && pnpm typecheck && pnpm build && pnpm test && pnpm lint && pnpm test:exports && npm publish","typecheck":"tsc -p tsconfig.json --noEmit && tsc -p tsconfig.test.json --noEmit && tsc -p scripts/tsconfig.json --noEmit","test:drift":"vitest run --config vitest.config.drift.ts","format:check":"prettier --check .","test:exports":"publint && attw --pack ."},"_npmUser":{"name":"dennisoelkers","email":"dennis@graylog.com"},"_resolved":"/tmp/5eaccdf3e28af3f2cdfdaea296120758/dennisoelkers-aimock-1.40.0.tgz","_integrity":"sha512-ih2J6O7K3WIDBshOn5Oq3M5i91UDzKXq6hqRodSE07+pqqb6Qk/F5n36x2upNa3e6W+E96RaP0pzDKU+p/XFSA==","repository":{"url":"git+https://github.com/CopilotKit/aimock.git","type":"git"},"_npmVersion":"10.9.8","description":"Mock infrastructure for AI application testing — LLM APIs, image generation, image editing, text-to-speech, transcription, audio translation, audio generation, video generation, embeddings, MCP tools, A2A agents, AG-UI event streams, vector databases, sea","directories":{},"lint-staged":{"*.{ts,mts,js,mjs}":"eslint --fix","*.{ts,mts,js,mjs,cjs,json,html,css,md}":"prettier --write"},"_nodeVersion":"22.23.0","publishConfig":{"access":"public"},"typesVersions":{"*":{"a2a":["./dist/a2a-stub.d.ts","./dist/a2a-stub.d.cts"],"mcp":["./dist/mcp-stub.d.ts","./dist/mcp-stub.d.cts"],"agui":["./dist/agui-stub.d.ts","./dist/agui-stub.d.cts"],"jest":["./dist/jest.d.ts","./dist/jest.d.cts"],"vector":["./dist/vector-stub.d.ts","./dist/vector-stub.d.cts"],"vitest":["./dist/vitest.d.ts","./dist/vitest.d.cts"]}},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.0","husky":"^9.1.7","eslint":"^9.30.0","openai":"^4.0.0","tsdown":"^0.12.5","vitest":"^3.2.1","publint":"^0.3.12","prettier":"^3.6.2","@eslint/js":"^9.30.0","pkg-pr-new":"0.0.86","typescript":"^5.8.3","@types/node":"^22.0.0","lint-staged":"^16.3.2","@google/genai":"^1.0.0","@commitlint/cli":"^19.8.1","@anthropic-ai/sdk":"^0.78.0","typescript-eslint":"^8.35.1","@vitest/coverage-v8":"^3.2.4","@arethetypeswrong/cli":"^0.18.3","eslint-config-prettier":"^10.1.5","@commitlint/config-conventional":"^19.8.0"},"peerDependencies":{"jest":">=29","vitest":">=3"},"peerDependenciesMeta":{"jest":{"optional":true},"vitest":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/aimock_1.40.0_1788426940432_0.3052684127353025","host":"s3://npm-registry-packages-npm-production"}},"1.41.0":{"name":"@dennisoelkers/aimock","version":"1.41.0","keywords":["mock","llm","openai","anthropic","claude","gemini","bedrock","azure-openai","ollama","cohere","vertex-ai","mcp","a2a","ag-ui","vector","pinecone","qdrant","chromadb","testing","fixtures","sse","streaming","websocket","record-replay","drift-detection","ai-testing","api-mock","http-mock","embeddings","copilotkit"],"license":"MIT","_id":"@dennisoelkers/aimock@1.41.0","maintainers":[{"name":"dennisoelkers","email":"dennis@graylog.com"}],"homepage":"https://aimock.copilotkit.dev","bugs":{"url":"https://github.com/CopilotKit/aimock/issues"},"bin":{"aimock":"dist/aimock-cli.js","llmock":"dist/cli.js"},"dist":{"shasum":"d49c93a66d7249b988963b39acc4c15563adb078","tarball":"https://registry.npmjs.org/@dennisoelkers/aimock/-/aimock-1.41.0.tgz","fileCount":584,"integrity":"sha512-M9DZPpUuCfb5rJ3Y4zK6DS49n4JXE3ju2eOY+40P6ezEbcpwjrEa04e0kvzC0FCB0R5W2+0xsyFF7ryBSL4Cgw==","signatures":[{"sig":"MEYCIQDfQvi4gqcskf7TA4X1PkzuS9wIh7N2ek98leNLGZopJwIhANmdh6jpCqOkrshqtbinEVzj2/rM0tAhZyboXokJqCX5","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":7241169},"main":"./dist/index.cjs","type":"module","_from":"file:dennisoelkers-aimock-1.41.0.tgz","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=20.15.0"},"exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}},"./a2a":{"import":{"types":"./dist/a2a-stub.d.ts","default":"./dist/a2a-stub.js"},"require":{"types":"./dist/a2a-stub.d.cts","default":"./dist/a2a-stub.cjs"}},"./mcp":{"import":{"types":"./dist/mcp-stub.d.ts","default":"./dist/mcp-stub.js"},"require":{"types":"./dist/mcp-stub.d.cts","default":"./dist/mcp-stub.cjs"}},"./agui":{"import":{"types":"./dist/agui-stub.d.ts","default":"./dist/agui-stub.js"},"require":{"types":"./dist/agui-stub.d.cts","default":"./dist/agui-stub.cjs"}},"./jest":{"import":{"types":"./dist/jest.d.ts","default":"./dist/jest.js"},"require":{"types":"./dist/jest.d.cts","default":"./dist/jest.cjs"}},"./vector":{"import":{"types":"./dist/vector-stub.d.ts","default":"./dist/vector-stub.js"},"require":{"types":"./dist/vector-stub.d.cts","default":"./dist/vector-stub.cjs"}},"./vitest":{"import":{"types":"./dist/vitest.d.ts","default":"./dist/vitest.js"},"require":{"types":"./dist/vitest.d.cts","default":"./dist/vitest.cjs"}}},"scripts":{"lint":"eslint .","test":"vitest run","build":"tsdown","release":"pnpm format:check && pnpm typecheck && pnpm build && pnpm test && pnpm lint && pnpm test:exports && npm publish","typecheck":"tsc -p tsconfig.json --noEmit && tsc -p tsconfig.test.json --noEmit && tsc -p scripts/tsconfig.json --noEmit","test:drift":"vitest run --config vitest.config.drift.ts","format:check":"prettier --check .","test:exports":"publint && attw --pack ."},"_npmUser":{"name":"dennisoelkers","email":"dennis@graylog.com"},"_resolved":"/tmp/3514b4fbad4be7f9dc1cfaabc6ed831c/dennisoelkers-aimock-1.41.0.tgz","_integrity":"sha512-M9DZPpUuCfb5rJ3Y4zK6DS49n4JXE3ju2eOY+40P6ezEbcpwjrEa04e0kvzC0FCB0R5W2+0xsyFF7ryBSL4Cgw==","repository":{"url":"git+https://github.com/CopilotKit/aimock.git","type":"git"},"_npmVersion":"10.9.8","description":"Mock infrastructure for AI application testing — LLM APIs, image generation, image editing, text-to-speech, transcription, audio translation, audio generation, video generation, embeddings, MCP tools, A2A agents, AG-UI event streams, vector databases, sea","directories":{},"lint-staged":{"*.{ts,mts,js,mjs}":"eslint --fix","*.{ts,mts,js,mjs,cjs,json,html,css,md}":"prettier --write"},"_nodeVersion":"22.23.0","publishConfig":{"access":"public"},"typesVersions":{"*":{"a2a":["./dist/a2a-stub.d.ts","./dist/a2a-stub.d.cts"],"mcp":["./dist/mcp-stub.d.ts","./dist/mcp-stub.d.cts"],"agui":["./dist/agui-stub.d.ts","./dist/agui-stub.d.cts"],"jest":["./dist/jest.d.ts","./dist/jest.d.cts"],"vector":["./dist/vector-stub.d.ts","./dist/vector-stub.d.cts"],"vitest":["./dist/vitest.d.ts","./dist/vitest.d.cts"]}},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.0","husky":"^9.1.7","eslint":"^9.30.0","openai":"^4.0.0","tsdown":"^0.12.5","vitest":"^3.2.1","publint":"^0.3.12","prettier":"^3.6.2","@eslint/js":"^9.30.0","pkg-pr-new":"0.0.86","typescript":"^5.8.3","@types/node":"^22.0.0","lint-staged":"^16.3.2","@google/genai":"^1.0.0","@commitlint/cli":"^19.8.1","@anthropic-ai/sdk":"^0.78.0","typescript-eslint":"^8.35.1","@vitest/coverage-v8":"^3.2.4","@arethetypeswrong/cli":"^0.18.3","eslint-config-prettier":"^10.1.5","@commitlint/config-conventional":"^19.8.0"},"peerDependencies":{"jest":">=29","vitest":">=3"},"peerDependenciesMeta":{"jest":{"optional":true},"vitest":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/aimock_1.41.0_1788439597338_0.8713911166766632","host":"s3://npm-registry-packages-npm-production"}},"1.42.0":{"name":"@dennisoelkers/aimock","version":"1.42.0","description":"Mock infrastructure for AI application testing — LLM APIs, image generation, image editing, text-to-speech, transcription, audio translation, audio generation, video generation, embeddings, MCP tools, A2A agents, AG-UI event streams, vector databases, sea","license":"MIT","keywords":["mock","llm","openai","anthropic","claude","gemini","bedrock","azure-openai","ollama","cohere","vertex-ai","mcp","a2a","ag-ui","vector","pinecone","qdrant","chromadb","testing","fixtures","sse","streaming","websocket","record-replay","drift-detection","ai-testing","api-mock","http-mock","embeddings","copilotkit"],"homepage":"https://aimock.copilotkit.dev","repository":{"type":"git","url":"git+https://github.com/CopilotKit/aimock.git"},"engines":{"node":">=20.15.0"},"type":"module","exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}},"./mcp":{"import":{"types":"./dist/mcp-stub.d.ts","default":"./dist/mcp-stub.js"},"require":{"types":"./dist/mcp-stub.d.cts","default":"./dist/mcp-stub.cjs"}},"./a2a":{"import":{"types":"./dist/a2a-stub.d.ts","default":"./dist/a2a-stub.js"},"require":{"types":"./dist/a2a-stub.d.cts","default":"./dist/a2a-stub.cjs"}},"./vector":{"import":{"types":"./dist/vector-stub.d.ts","default":"./dist/vector-stub.js"},"require":{"types":"./dist/vector-stub.d.cts","default":"./dist/vector-stub.cjs"}},"./agui":{"import":{"types":"./dist/agui-stub.d.ts","default":"./dist/agui-stub.js"},"require":{"types":"./dist/agui-stub.d.cts","default":"./dist/agui-stub.cjs"}},"./vitest":{"import":{"types":"./dist/vitest.d.ts","default":"./dist/vitest.js"},"require":{"types":"./dist/vitest.d.cts","default":"./dist/vitest.cjs"}},"./jest":{"import":{"types":"./dist/jest.d.ts","default":"./dist/jest.js"},"require":{"types":"./dist/jest.d.cts","default":"./dist/jest.cjs"}}},"main":"./dist/index.cjs","module":"./dist/index.js","types":"./dist/index.d.ts","typesVersions":{"*":{"mcp":["./dist/mcp-stub.d.ts","./dist/mcp-stub.d.cts"],"a2a":["./dist/a2a-stub.d.ts","./dist/a2a-stub.d.cts"],"vector":["./dist/vector-stub.d.ts","./dist/vector-stub.d.cts"],"agui":["./dist/agui-stub.d.ts","./dist/agui-stub.d.cts"],"vitest":["./dist/vitest.d.ts","./dist/vitest.d.cts"],"jest":["./dist/jest.d.ts","./dist/jest.d.cts"]}},"bin":{"aimock":"dist/aimock-cli.js","llmock":"dist/cli.js"},"publishConfig":{"access":"public"},"lint-staged":{"*.{ts,mts,js,mjs,cjs,json,html,css,md}":"prettier --write","*.{ts,mts,js,mjs}":"eslint --fix"},"peerDependencies":{"jest":">=29","vitest":">=3"},"peerDependenciesMeta":{"jest":{"optional":true},"vitest":{"optional":true}},"devDependencies":{"@anthropic-ai/sdk":"^0.78.0","@arethetypeswrong/cli":"^0.18.3","@commitlint/cli":"^19.8.1","@commitlint/config-conventional":"^19.8.0","@eslint/js":"^9.30.0","@google/genai":"^1.0.0","@types/node":"^22.0.0","@vitest/coverage-v8":"^3.2.4","eslint":"^9.30.0","eslint-config-prettier":"^10.1.5","husky":"^9.1.7","lint-staged":"^16.3.2","openai":"^4.0.0","pkg-pr-new":"0.0.86","prettier":"^3.6.2","publint":"^0.3.12","tsdown":"^0.12.5","tsx":"^4.19.0","typescript":"^5.8.3","typescript-eslint":"^8.35.1","vitest":"^3.2.1"},"scripts":{"build":"tsdown","test":"vitest run","test:drift":"vitest run --config vitest.config.drift.ts","test:exports":"publint && attw --pack .","typecheck":"tsc -p tsconfig.json --noEmit && tsc -p tsconfig.test.json --noEmit && tsc -p scripts/tsconfig.json --noEmit","lint":"eslint .","format:check":"prettier --check .","release":"pnpm format:check && pnpm typecheck && pnpm build && pnpm test && pnpm lint && pnpm test:exports && npm publish"},"_id":"@dennisoelkers/aimock@1.42.0","bugs":{"url":"https://github.com/CopilotKit/aimock/issues"},"_integrity":"sha512-Se8H0dYuBQSzQcZTK3eUpJzxQMPje4XGK+6ftOv5MTnLqLhNS5ZvqHX4PaSzPxRCf/A88fSLLg6CAHR5ca1hCA==","_resolved":"/tmp/a30baafc58afe4295391356baf16c224/dennisoelkers-aimock-1.42.0.tgz","_from":"file:dennisoelkers-aimock-1.42.0.tgz","_nodeVersion":"22.23.0","_npmVersion":"10.9.8","dist":{"integrity":"sha512-Se8H0dYuBQSzQcZTK3eUpJzxQMPje4XGK+6ftOv5MTnLqLhNS5ZvqHX4PaSzPxRCf/A88fSLLg6CAHR5ca1hCA==","shasum":"3bd9e20b4fac8c9d4e63b99e47fdc61490f28067","tarball":"https://registry.npmjs.org/@dennisoelkers/aimock/-/aimock-1.42.0.tgz","fileCount":584,"unpackedSize":7243200,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQDeMPgRgM1jxd03Px/wLLdZjJf/rv3tyy0gj2nAyNBoyAIhAIw3/1IZ0VQ54lWZMsUfx4HiBidvVReWScvatgydn2/7"}]},"_npmUser":{"name":"dennisoelkers","email":"dennis@graylog.com"},"directories":{},"maintainers":[{"name":"dennisoelkers","email":"dennis@graylog.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/aimock_1.42.0_1788439972849_0.7938342056944618"},"_hasShrinkwrap":false}},"time":{"created":"2026-09-03T09:09:15.073Z","modified":"2026-09-03T12:52:53.225Z","1.39.0":"2026-09-03T09:09:15.472Z","1.40.0":"2026-09-03T09:15:40.611Z","1.41.0":"2026-09-03T12:46:37.533Z","1.42.0":"2026-09-03T12:52:53.080Z"},"bugs":{"url":"https://github.com/CopilotKit/aimock/issues"},"license":"MIT","homepage":"https://aimock.copilotkit.dev","keywords":["mock","llm","openai","anthropic","claude","gemini","bedrock","azure-openai","ollama","cohere","vertex-ai","mcp","a2a","ag-ui","vector","pinecone","qdrant","chromadb","testing","fixtures","sse","streaming","websocket","record-replay","drift-detection","ai-testing","api-mock","http-mock","embeddings","copilotkit"],"repository":{"type":"git","url":"git+https://github.com/CopilotKit/aimock.git"},"description":"Mock infrastructure for AI application testing — LLM APIs, image generation, image editing, text-to-speech, transcription, audio translation, audio generation, video generation, embeddings, MCP tools, A2A agents, AG-UI event streams, vector databases, sea","maintainers":[{"name":"dennisoelkers","email":"dennis@graylog.com"}],"readme":"<div align=\"center\">\n\n# aimock\n\n**Mock infrastructure for AI application testing — point your SDK at one local port and every provider, protocol, and service answers deterministically.**\n\n[**Quick start**](#quick-start) · [**The suite**](#the-aimock-suite) · [**Record & replay**](https://aimock.copilotkit.dev/record-replay) · [**Docs**](https://aimock.copilotkit.dev/docs)\n\n[![npm](https://img.shields.io/npm/v/@copilotkit/aimock.svg?label=%40copilotkit%2Faimock)](https://www.npmjs.com/package/@copilotkit/aimock)\n[![Unit Tests](https://github.com/CopilotKit/aimock/actions/workflows/test-unit.yml/badge.svg)](https://github.com/CopilotKit/aimock/actions/workflows/test-unit.yml)\n[![Drift Tests](https://github.com/CopilotKit/aimock/actions/workflows/test-drift.yml/badge.svg)](https://github.com/CopilotKit/aimock/actions/workflows/test-drift.yml)\n[![License: MIT](https://img.shields.io/badge/license-MIT-blue.svg)](./LICENSE)\n\n</div>\n\nhttps://github.com/user-attachments/assets/76815122-574a-48e1-b275-edae0a014667\n\n<div align=\"center\">\n\nOne package, one port, zero dependencies. LLM APIs, image generation and\nediting, text-to-speech, transcription, audio translation and generation, video\ngeneration, embeddings, MCP tools, A2A agents, AG-UI event streams, vector\ndatabases, search, rerank, and moderation — no keys, no network, no surprise\nbills.\n\n</div>\n\n## Quick Start\n\n```bash\nnpm install @copilotkit/aimock\n```\n\n```typescript\n// The class is still named `LLMock` for back-compat after the v1.7.0 package\n// rename from `@copilotkit/llmock` to `@copilotkit/aimock`.\nimport { LLMock } from \"@copilotkit/aimock\";\n\nconst mock = new LLMock({ port: 0 });\nmock.onMessage(\"hello\", { content: \"Hi there!\" });\nawait mock.start();\n\n// Set env BEFORE importing/constructing the OpenAI (or other provider) client.\n// Many SDKs cache the base URL at construction time — if the client is built\n// before these are set, it will talk to the real API (surprise bills) instead\n// of aimock.\nprocess.env.OPENAI_BASE_URL = `${mock.url}/v1`;\nprocess.env.OPENAI_API_KEY = \"mock\"; // SDK requires a value, even when base URL is mocked\n\n// ... run your tests ...\n\nawait mock.stop();\n```\n\n## The aimock Suite\n\naimock mocks everything your AI app talks to:\n\n| Tool           | What it mocks                                                                                                                                                                                                    | Docs                                                |\n| -------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------- |\n| **LLMock**     | OpenAI (Chat/Responses/Realtime GA+Beta), Claude, Gemini (REST/Live/Interactions/Embeddings), Bedrock, Azure, Vertex AI, Ollama (chat/embeddings), Cohere (chat/embed), OpenRouter (chat/router), ElevenLabs TTS | [Providers](https://aimock.copilotkit.dev/docs)     |\n| **MCPMock**    | MCP tools, resources, prompts with session management                                                                                                                                                            | [MCP](https://aimock.copilotkit.dev/mcp-mock)       |\n| **A2AMock**    | Agent-to-agent protocol with SSE streaming                                                                                                                                                                       | [A2A](https://aimock.copilotkit.dev/a2a-mock)       |\n| **AGUIMock**   | AG-UI agent-to-UI event streams for frontend testing                                                                                                                                                             | [AG-UI](https://aimock.copilotkit.dev/agui-mock)    |\n| **VectorMock** | Pinecone, Qdrant, ChromaDB compatible endpoints                                                                                                                                                                  | [Vector](https://aimock.copilotkit.dev/vector-mock) |\n| **Services**   | Tavily search, Cohere rerank, OpenAI moderation, ElevenLabs TTS                                                                                                                                                  | [Services](https://aimock.copilotkit.dev/services)  |\n\nRun them all on one port with `npx @copilotkit/aimock --config aimock.json`, or use the programmatic API to compose exactly what you need.\n\n## Features\n\n- **[Record & Replay](https://aimock.copilotkit.dev/record-replay)** — Proxy real APIs, save as fixtures, replay deterministically forever\n- **Timing-aware recording and replay** — Recorded fixtures capture per-frame arrival timestamps; replay uses recorded timings for approximate timing reproduction based on recorded TTFT and inter-frame cadence (replay chunk count may differ from recording — TTFT and average pace are preserved, not per-token fidelity) with configurable `--replay-speed` multiplier\n- **[Multi-turn Conversations](https://aimock.copilotkit.dev/multi-turn)** — Record and replay multi-turn traces with tool rounds; match distinct turns via `turnIndex`, `hasToolResult`, `toolCallId`, `toolResultContains` (gate on the tool-result payload), `sequenceIndex`, `systemMessage` (gate on host-supplied agent context), or custom predicates\n- **[13 providers across 15 API surfaces](https://aimock.copilotkit.dev/docs)** — OpenAI Chat, OpenAI Responses, OpenAI Realtime (GA + Beta shim), Claude, Gemini REST, Gemini embedContent, Gemini Live, Gemini Interactions, Azure, Bedrock, Vertex AI, Ollama (chat + embeddings), Cohere (chat + embed), OpenRouter (chat + router failover), ElevenLabs TTS — full streaming support\n- **Multimedia APIs** — [image generation](https://aimock.copilotkit.dev/images) (DALL-E, Imagen), [image editing](https://aimock.copilotkit.dev/images) (/v1/images/edits), [text-to-speech](https://aimock.copilotkit.dev/speech) (OpenAI + ElevenLabs), [audio transcription](https://aimock.copilotkit.dev/transcription), [audio translation](https://aimock.copilotkit.dev/transcription) (/v1/audio/translations), [video generation](https://aimock.copilotkit.dev/video), [OpenRouter video generation](https://aimock.copilotkit.dev/openrouter-video) (/api/v1/videos with async job lifecycle), [Google Veo video generation](https://aimock.copilotkit.dev/veo-video) (:predictLongRunning + /v1beta/operations async lifecycle), [Grok Imagine video generation](https://aimock.copilotkit.dev/grok-video) (/v1/videos/generations with async job lifecycle), [fal.ai](https://aimock.copilotkit.dev/fal-ai) (image / video / audio with queue lifecycle)\n- **[MCP](https://aimock.copilotkit.dev/mcp-mock) / [A2A](https://aimock.copilotkit.dev/a2a-mock) / [AG-UI](https://aimock.copilotkit.dev/agui-mock) / [Vector](https://aimock.copilotkit.dev/vector-mock)** — Mock every protocol your AI agents use\n- **[Chaos Testing](https://aimock.copilotkit.dev/chaos-testing)** — 500 errors, malformed JSON, mid-stream disconnects at any probability\n- **Per-Request Strict Mode** — `X-AIMock-Strict` header overrides the server-level `--strict` flag per request (`true`/`1` = strict, `false`/`0` = lenient)\n- **Context-Based Fixture Routing** — `X-AIMock-Context` header scopes fixtures per integration; fixtures with `match.context` only match requests carrying that context, fixtures without it remain shared\n- **[Drift Detection](https://aimock.copilotkit.dev/drift-detection)** — Daily CI validation against real APIs\n- **[Streaming Physics](https://aimock.copilotkit.dev/streaming-physics)** — Configurable `ttft`, `tps`, and `jitter`\n- **[WebSocket APIs](https://aimock.copilotkit.dev/websocket)** — OpenAI Realtime (GA protocol with models: gpt-realtime, gpt-realtime-2, gpt-realtime-1.5, gpt-realtime-mini; transcription/translation via gpt-4o-transcribe, gpt-4o-mini-transcribe, whisper-1; image input; commentary phase), Responses WS, Gemini Live\n- **[Prometheus Metrics](https://aimock.copilotkit.dev/metrics)** — Request counts, latencies, fixture match rates\n- **[Docker + Helm](https://aimock.copilotkit.dev/docker)** — Container image and Helm chart for CI/CD\n- **[Vitest & Jest Plugins](https://aimock.copilotkit.dev/test-plugins)** — Zero-config `useAimock()` with auto lifecycle and env patching\n- **[Response Overrides](https://aimock.copilotkit.dev/fixtures)** — Control `id`, `model`, `usage`, `finishReason` in fixture responses\n- **[Ordered Blocks](https://aimock.copilotkit.dev/fixtures#ordered-blocks)** — A `blocks` array streams text and tool calls in any order (tool-first or interleaved); blocks-only fixtures are first-class, and the recorder captures order from genuinely tool-first/interleaved streams\n- **[Streaming Usage Chunks](https://aimock.copilotkit.dev/streaming-physics)** — `stream_options.include_usage` support emits a final chunk with token counts, matching OpenAI's streaming usage protocol\n- **[Rate Limiting Headers](https://aimock.copilotkit.dev/chaos-testing)** — `x-ratelimit-*` headers on every response and `Retry-After` on 429 errors for testing retry/backoff logic\n- **Zero dependencies** — Everything from Node.js builtins\n\n## GitHub Action\n\n```yaml\n- uses: CopilotKit/aimock@v1\n  with:\n    fixtures: ./test/fixtures\n\n- run: npm test\n  env:\n    OPENAI_BASE_URL: http://127.0.0.1:4010/v1\n```\n\nSee the [GitHub Action docs](https://aimock.copilotkit.dev/github-action) for all inputs and examples.\n\n## CLI\n\n```bash\n# LLM mocking only\nnpx -p @copilotkit/aimock llmock -p 4010 -f ./fixtures\n\n# Remote fixtures — load JSON from an HTTPS URL (repeatable)\nnpx -p @copilotkit/aimock llmock -p 4010 \\\n  -f https://raw.githubusercontent.com/acme/mocks/main/openai.json \\\n  -f ./fixtures/local-overrides.json\n\n# Full suite from config\nnpx @copilotkit/aimock --config aimock.json\n\n# Record mode: proxy to real APIs, save fixtures\nnpx -p @copilotkit/aimock llmock --record --provider-openai https://api.openai.com\n\n# Record with extended timeout for reasoning models\nnpx -p @copilotkit/aimock llmock --record --provider-openai https://api.openai.com \\\n  --body-timeout-ms 180000\n\n# Replay recorded fixtures at 2× speed\nnpx -p @copilotkit/aimock llmock -p 4010 -f ./fixtures --replay-speed 2\n\n# Convert fixtures from other tools\nnpx @copilotkit/aimock convert vidaimock ./templates/ ./fixtures/\nnpx @copilotkit/aimock convert mockllm ./config.yaml ./fixtures/\n\n# Docker\ndocker run -d -p 4010:4010 -v \"$(pwd)/fixtures:/fixtures\" ghcr.io/copilotkit/aimock -f /fixtures -h 0.0.0.0\n```\n\n> **Note on `llmock` vs `aimock` CLIs.** The `llmock` bin is retained as a compat alias for users of the pre-1.7.0 `@copilotkit/llmock` package. It runs a narrower flag-driven CLI without `--config` or the `convert` subcommand. New projects should use `aimock` (or `npx @copilotkit/aimock`) for full feature support.\n\n### Remote fixture URLs\n\n`--fixtures` accepts `https://` and `http://` URLs pointing at JSON fixture files in addition to filesystem paths, and the flag is repeatable so you can layer remote and local sources in argv order. Fetched fixtures are cached on disk at `~/.cache/aimock/fixtures/<sha256-of-url>/` (honors `$XDG_CACHE_HOME`); when paired with `--validate-on-load`, a fetch failure with a valid cached copy logs a warning and continues — without a cache, the process exits non-zero. HTTP fetches have a 10s timeout and a 50 MB body cap; redirects are rejected fail-loud, so configure your upstream to serve the final URL directly (GitHub raw content URLs already do).\n\nPrivate and link-local addresses (loopback, RFC1918, CGNAT, cloud metadata, ULA, multicast) are rejected by default to prevent SSRF. For local development or tests that need to hit `127.0.0.1`, opt out with `AIMOCK_ALLOW_PRIVATE_URLS=1`. Tarball and zip URL support is intentionally deferred.\n\n### Replay matching & `AIMOCK_STRICT_TURN_INDEX`\n\nOn replay, `turnIndex` is a non-fatal disambiguator, not a hard reject gate: a content-matching fixture is served even when its scripted `turnIndex` differs from the request's assistant-message count. This kills false \"no fixture matched\" misses for multi-bubble agent runs (multi-step agents emit several assistant bubbles per logical turn). When a served fixture diverges from its scripted `turnIndex`, the match diagnostic carries `turnIndexRelaxed: true` and aimock logs a one-shot warning (at the `warn` log level — silent by default). To restore the legacy strict behavior where a defined `turnIndex` must equal the assistant count exactly, set `AIMOCK_STRICT_TURN_INDEX=1`. The record path is always strict regardless of this flag.\n\n## API-key validation\n\nBy default aimock accepts all requests. Opt into inbound test-client validation with a programmatic option, top-level `aimock.json` field, or environment-only key list:\n\n```ts\nawait createServer(fixtures, { auth: { apiKeys: [\"test-key\"] } });\n```\n\n```json\n{ \"auth\": { \"apiKeys\": [\"test-key\"] } }\n```\n\n```bash\nAIMOCK_API_KEYS=test-key,rotated-key npx @copilotkit/aimock --config aimock.json\n```\n\nUse `Authorization: Bearer <key>`, `Authorization: Key <key>`, `x-api-key`, `x-goog-api-key`, `api-key`, or `xi-api-key`. Every supplied credential must resolve to one configured key; mismatches return `401` with an OpenAI-compatible authentication error. HTTP routes, control APIs, mounts, and WebSocket upgrades are protected. Genuine CORS preflights plus `GET /health`, `GET /ready`, and `GET /metrics` remain public. This is inbound test access control, distinct from `record.providerKeys`; when enabled, proxying strips test credentials and requires a configured static provider credential before egress.\n\n### aimock-owned upstream keys — `AIMOCK_PROVIDER_*_KEY`\n\nIn record or `--proxy-only` mode, aimock forwards the caller's auth header to the real provider unchanged. If your tests can only send a dummy placeholder key (e.g. an SDK that refuses to start without a non-empty API key), aimock can inject its own configured upstream key on a fixture-miss passthrough so the proxied call actually authenticates. Each provider has an independent env var, and the key is applied with the provider-correct wire scheme:\n\n| Env var                          | Provider                         | Injected header               |\n| -------------------------------- | -------------------------------- | ----------------------------- |\n| `AIMOCK_PROVIDER_OPENAI_KEY`     | OpenAI                           | `Authorization: Bearer <key>` |\n| `AIMOCK_PROVIDER_OPENROUTER_KEY` | OpenRouter                       | `Authorization: Bearer <key>` |\n| `AIMOCK_PROVIDER_COHERE_KEY`     | Cohere                           | `Authorization: Bearer <key>` |\n| `AIMOCK_PROVIDER_GROK_KEY`       | Grok (xAI)                       | `Authorization: Bearer <key>` |\n| `AIMOCK_PROVIDER_OLLAMA_KEY`     | Ollama (Cloud / bearer-gated)    | `Authorization: Bearer <key>` |\n| `AIMOCK_PROVIDER_ANTHROPIC_KEY`  | Anthropic                        | `x-api-key: <key>`            |\n| `AIMOCK_PROVIDER_GEMINI_KEY`     | Gemini (and Gemini Interactions) | `x-goog-api-key: <key>`       |\n| `AIMOCK_PROVIDER_VEO_KEY`        | Veo                              | `x-goog-api-key: <key>`       |\n| `AIMOCK_PROVIDER_AZURE_KEY`      | Azure OpenAI                     | `api-key: <key>`              |\n| `AIMOCK_PROVIDER_ELEVENLABS_KEY` | ElevenLabs                       | `xi-api-key: <key>`           |\n| `AIMOCK_PROVIDER_FAL_KEY`        | fal.ai                           | `Authorization: Key <key>`    |\n\nThe Gemini interactions provider mode reuses `AIMOCK_PROVIDER_GEMINI_KEY` (same upstream API as Gemini). An empty-string value is treated as unset.\n\nThis is opt-in and backward-compatible: with no key configured the feature is inert and the caller's header passes through as-is. Injection fires only when the caller sent no credential **or** a dummy credential prefixed with `sk-aimock-` (overridable via `AIMOCK_DUMMY_KEY_MARKER`); a real caller key never starting with that marker is always forwarded verbatim, so the caller overrides aimock. Signed and exchanged credentials — AWS Bedrock (SigV4) and Vertex AI (OAuth) — are never rewritten and always forwarded unchanged. (Azure's static `api-key` is injected; a real Microsoft Entra ID `Authorization: Bearer` token from the caller is never dummy-prefixed, so it too passes through verbatim.)\n\n## Framework Guides\n\nTest your AI agents with aimock — no API keys, no network calls: [LangChain](https://aimock.copilotkit.dev/integrate-langchain) · [CrewAI](https://aimock.copilotkit.dev/integrate-crewai) · [PydanticAI](https://aimock.copilotkit.dev/integrate-pydanticai) · [LlamaIndex](https://aimock.copilotkit.dev/integrate-llamaindex) · [Mastra](https://aimock.copilotkit.dev/integrate-mastra) · [Google ADK](https://aimock.copilotkit.dev/integrate-adk) · [Microsoft Agent Framework](https://aimock.copilotkit.dev/integrate-maf)\n\n## Switching from other tools?\n\nStep-by-step migration guides: [MSW](https://aimock.copilotkit.dev/migrate-from-msw) · [VidaiMock](https://aimock.copilotkit.dev/migrate-from-vidaimock) · [mock-llm](https://aimock.copilotkit.dev/migrate-from-mock-llm) · [piyook/llm-mock](https://aimock.copilotkit.dev/migrate-from-piyook) · [Python mocks](https://aimock.copilotkit.dev/migrate-from-python-mocks) · [openai-responses](https://aimock.copilotkit.dev/migrate-from-openai-responses) · [Mokksy](https://aimock.copilotkit.dev/migrate-from-mokksy)\n\n## Documentation\n\n**[https://aimock.copilotkit.dev](https://aimock.copilotkit.dev)** · [Example fixtures](https://aimock.copilotkit.dev/examples)\n\n## Real-World Usage\n\n[AG-UI](https://github.com/ag-ui-protocol/ag-ui) uses aimock for its [end-to-end test suite](https://github.com/ag-ui-protocol/ag-ui/tree/main/apps/dojo/e2e), verifying AI agent behavior across LLM providers with [fixture-driven responses](https://github.com/ag-ui-protocol/ag-ui/tree/main/apps/dojo/e2e/fixtures/openai).\n\n## License\n\nMIT\n","readmeFilename":"README.md"}