{"_id":"@agfpd/voice-connect","_rev":"9-9720d64650ec60598250ebed2bde3f7d","name":"@agfpd/voice-connect","dist-tags":{"latest":"0.5.2"},"versions":{"0.1.11":{"name":"@agfpd/voice-connect","version":"0.1.11","keywords":["claude-code","codex","mcp","model-context-protocol","iapeer","agents","voice-connect","tts","text-to-speech","speech-to-text","voice","gemini","supertonic"],"author":{"url":"https://github.com/agfpd","name":"agfpd"},"license":"Apache-2.0","_id":"@agfpd/voice-connect@0.1.11","maintainers":[{"name":"agfpd-owner","email":"agafapudov.art@gmail.com"}],"homepage":"https://github.com/agfpd/voice-connect","bugs":{"url":"https://github.com/agfpd/voice-connect/issues"},"bin":{"voice-connect-mcp":"bin/peer-voice-mcp.mjs"},"dist":{"shasum":"2e76351cfe4acb07e6c07bc3c1179f1b5a8f6d82","tarball":"https://registry.npmjs.org/@agfpd/voice-connect/-/voice-connect-0.1.11.tgz","fileCount":31,"integrity":"sha512-PYH08k8fif7ZJ1SFb5MK53hYugmUIEI/QRl6zeRGEFd6K+1/+M7QDB1pJj5enIvtzLVomofJcAxSgGpxaV4kIA==","signatures":[{"sig":"MEQCIGePATjxwL6lxJ7V6rhi2a+dTvt8jEjizeoeMvH872qmAiBlj330LWMkBiIyORDL1NQLH737PgSvInFdYXXsTRpNxw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":151727},"type":"module","engines":{"node":">=18.0.0"},"gitHead":"50d4ae2dfb9c20bd5c746f25b1760d557cf5f2e2","scripts":{"test":"node --test tests/*.test.mjs","start":"node bin/peer-voice-mcp.mjs","release":"npm version patch && npm publish && git push --follow-tags && node scripts/bump-marketplace.cjs","version":"node scripts/sync-plugin-version.cjs","release:major":"npm version major && npm publish && git push --follow-tags && node scripts/bump-marketplace.cjs","release:minor":"npm version minor && npm publish && git push --follow-tags && node scripts/bump-marketplace.cjs","prepublishOnly":"test -z \"$(git status --porcelain)\" || (echo 'release: working tree is dirty — commit or stash before release' >&2 && exit 1)"},"_npmUser":{"name":"agfpd-owner","email":"agafapudov.art@gmail.com"},"repository":{"url":"git+https://github.com/agfpd/voice-connect.git","type":"git"},"_npmVersion":"11.12.1","description":"voice-connect — voice service for agents. MCP tools tts (text → ready-to-send .ogg/opus voice file) and stt (audio → text) over one core, plus an OpenAI-compatible HTTP facade (/v1/audio/speech + /v1/audio/transcriptions) for runtimes. Cascade with fallba","directories":{},"_nodeVersion":"25.9.0","dependencies":{"@modelcontextprotocol/sdk":"^1.0.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/voice-connect_0.1.11_1782075272872_0.7975919874309381","host":"s3://npm-registry-packages-npm-production"}},"0.2.0":{"name":"@agfpd/voice-connect","version":"0.2.0","keywords":["claude-code","codex","mcp","model-context-protocol","iapeer","agents","voice-connect","tts","text-to-speech","speech-to-text","voice","gemini","supertonic"],"author":{"url":"https://github.com/agfpd","name":"agfpd"},"license":"Apache-2.0","_id":"@agfpd/voice-connect@0.2.0","maintainers":[{"name":"agfpd-owner","email":"agafapudov.art@gmail.com"}],"homepage":"https://github.com/agfpd/voice-connect","bugs":{"url":"https://github.com/agfpd/voice-connect/issues"},"bin":{"voice-connect":"bin/voice-connect.mjs","voice-connect-mcp":"bin/peer-voice-mcp.mjs"},"dist":{"shasum":"661805f91e201c5550e77c5d5741e603aea6b253","tarball":"https://registry.npmjs.org/@agfpd/voice-connect/-/voice-connect-0.2.0.tgz","fileCount":33,"integrity":"sha512-FPm8ppWcj2oYdkFlcVvEiIBHwOhqgSS7ZXmXdvBAQidEpzl1bJT73SkSzy/WOGW4G9JhN9jjEL63Qo2NoLi8SQ==","signatures":[{"sig":"MEUCIQC0gDNJcEuuS00ohjMLiKLzSQiJtEp/SBd+2wZKin2H1AIgMwGyPOpiGPmadqbFO4s3sKeJnH7tiSKDTqlw25cgmng=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":176115},"type":"module","engines":{"node":">=18.0.0"},"gitHead":"b8fe86b846175ef32048f22f21cf82da6c200cda","scripts":{"test":"node --test tests/*.test.mjs","start":"node bin/peer-voice-mcp.mjs","release":"npm version patch && npm publish && git push --follow-tags && node scripts/bump-marketplace.cjs","version":"node scripts/sync-plugin-version.cjs","release:major":"npm version major && npm publish && git push --follow-tags && node scripts/bump-marketplace.cjs","release:minor":"npm version minor && npm publish && git push --follow-tags && node scripts/bump-marketplace.cjs","prepublishOnly":"test -z \"$(git status --porcelain)\" || (echo 'release: working tree is dirty — commit or stash before release' >&2 && exit 1)"},"_npmUser":{"name":"agfpd-owner","email":"agafapudov.art@gmail.com"},"repository":{"url":"git+https://github.com/agfpd/voice-connect.git","type":"git"},"_npmVersion":"11.12.1","description":"voice-connect — voice service for agents. MCP tools tts (text → ready-to-send .ogg/opus voice file) and stt (audio → text) over one core, plus an OpenAI-compatible HTTP facade (/v1/audio/speech + /v1/audio/transcriptions) for runtimes. Cascade with fallba","directories":{},"_nodeVersion":"25.9.0","dependencies":{"@modelcontextprotocol/sdk":"^1.0.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/voice-connect_0.2.0_1782084427635_0.20425945668233614","host":"s3://npm-registry-packages-npm-production"}},"0.3.0":{"name":"@agfpd/voice-connect","version":"0.3.0","keywords":["claude-code","codex","mcp","model-context-protocol","iapeer","agents","voice-connect","tts","text-to-speech","speech-to-text","voice","gemini","supertonic"],"author":{"url":"https://github.com/agfpd","name":"agfpd"},"license":"Apache-2.0","_id":"@agfpd/voice-connect@0.3.0","maintainers":[{"name":"agfpd-owner","email":"agafapudov.art@gmail.com"}],"homepage":"https://github.com/agfpd/voice-connect","bugs":{"url":"https://github.com/agfpd/voice-connect/issues"},"bin":{"voice-connect":"bin/voice-connect.mjs","voice-connect-mcp":"bin/peer-voice-mcp.mjs"},"dist":{"shasum":"a4b82d19f4f87d85943f821c39e1ae571b35ba7c","tarball":"https://registry.npmjs.org/@agfpd/voice-connect/-/voice-connect-0.3.0.tgz","fileCount":34,"integrity":"sha512-4KNh0waYy9/jQ5mgBVjByMqsp4UqsD4iChYVzCIdBy/MUpiwbulmcEcHlUubhQvTRKte8lxH5n9I1pxo30NhIw==","signatures":[{"sig":"MEQCIGU1KnfjdvyUAafiFmhv8S90qqAD8eVVTNOl7SWZXrnTAiBEwk8oZfHeN3mKQoHMfpVy1xYUqJpSM2rezjA1IjlYsA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":187042},"type":"module","engines":{"node":">=18.0.0"},"gitHead":"3a0def259a393d7a4ccf41a6c92f5cc4dd49007f","scripts":{"test":"node --test tests/*.test.mjs","start":"node bin/peer-voice-mcp.mjs","release":"npm version patch && npm publish && git push --follow-tags && node scripts/bump-marketplace.cjs","version":"node scripts/sync-plugin-version.cjs","release:major":"npm version major && npm publish && git push --follow-tags && node scripts/bump-marketplace.cjs","release:minor":"npm version minor && npm publish && git push --follow-tags && node scripts/bump-marketplace.cjs","prepublishOnly":"test -z \"$(git status --porcelain)\" || (echo 'release: working tree is dirty — commit or stash before release' >&2 && exit 1)"},"_npmUser":{"name":"agfpd-owner","email":"agafapudov.art@gmail.com"},"repository":{"url":"git+https://github.com/agfpd/voice-connect.git","type":"git"},"_npmVersion":"11.17.0","description":"voice-connect — voice service for agents. MCP tools tts (text → ready-to-send .ogg/opus voice file) and stt (audio → text) over one core, plus an OpenAI-compatible HTTP facade (/v1/audio/speech + /v1/audio/transcriptions) for runtimes. Cascade with fallba","directories":{},"_nodeVersion":"26.4.0","dependencies":{"@modelcontextprotocol/sdk":"^1.0.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/voice-connect_0.3.0_1783880490309_0.3984993059544175","host":"s3://npm-registry-packages-npm-production"}},"0.3.1":{"name":"@agfpd/voice-connect","version":"0.3.1","keywords":["claude-code","codex","mcp","model-context-protocol","iapeer","agents","voice-connect","tts","text-to-speech","speech-to-text","voice","gemini","supertonic"],"author":{"url":"https://github.com/agfpd","name":"agfpd"},"license":"Apache-2.0","_id":"@agfpd/voice-connect@0.3.1","maintainers":[{"name":"agfpd-owner","email":"agafapudov.art@gmail.com"}],"homepage":"https://github.com/agfpd/voice-connect","bugs":{"url":"https://github.com/agfpd/voice-connect/issues"},"bin":{"voice-connect":"bin/voice-connect.mjs","voice-connect-mcp":"bin/peer-voice-mcp.mjs"},"dist":{"shasum":"a0a53c24bdb3e5820d682070d7ea900327368056","tarball":"https://registry.npmjs.org/@agfpd/voice-connect/-/voice-connect-0.3.1.tgz","fileCount":34,"integrity":"sha512-HroUxfY8UTA593ZVi1k7zPi+Iok/ci17c00UBQnWWzjcwYljlIgHjskN9QpyBUXAxs5F/Nuh4Z5dzexO9a57XQ==","signatures":[{"sig":"MEQCICXXhE6X2AZ11KLWs43PrKoKwfFaqq5UB7/YMQQ1fr5HAiAgpBDzxx9t+1Ae364Rbw3ha/zaFI5sAaLIe3Ni8eKNKQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":187683},"type":"module","engines":{"node":">=18.0.0"},"gitHead":"557f7849f715e0138f6eea70f6c0dfb74aeb183e","scripts":{"test":"node --test tests/*.test.mjs","start":"node bin/peer-voice-mcp.mjs","release":"npm version patch && npm publish && git push --follow-tags && node scripts/bump-marketplace.cjs","version":"node scripts/sync-plugin-version.cjs","release:major":"npm version major && npm publish && git push --follow-tags && node scripts/bump-marketplace.cjs","release:minor":"npm version minor && npm publish && git push --follow-tags && node scripts/bump-marketplace.cjs","prepublishOnly":"test -z \"$(git status --porcelain)\" || (echo 'release: working tree is dirty — commit or stash before release' >&2 && exit 1)"},"_npmUser":{"name":"agfpd-owner","email":"agafapudov.art@gmail.com"},"repository":{"url":"git+https://github.com/agfpd/voice-connect.git","type":"git"},"_npmVersion":"11.17.0","description":"voice-connect — voice service for agents. MCP tools tts (text → ready-to-send .ogg/opus voice file) and stt (audio → text) over one core, plus an OpenAI-compatible HTTP facade (/v1/audio/speech + /v1/audio/transcriptions) for runtimes. Cascade with fallba","directories":{},"_nodeVersion":"26.4.0","dependencies":{"@modelcontextprotocol/sdk":"^1.0.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/voice-connect_0.3.1_1783881538148_0.5315412969941389","host":"s3://npm-registry-packages-npm-production"}},"0.3.2":{"name":"@agfpd/voice-connect","version":"0.3.2","keywords":["claude-code","codex","mcp","model-context-protocol","iapeer","agents","voice-connect","tts","text-to-speech","speech-to-text","voice","gemini","supertonic"],"author":{"url":"https://github.com/agfpd","name":"agfpd"},"license":"Apache-2.0","_id":"@agfpd/voice-connect@0.3.2","maintainers":[{"name":"agfpd-owner","email":"agafapudov.art@gmail.com"}],"homepage":"https://github.com/agfpd/voice-connect","bugs":{"url":"https://github.com/agfpd/voice-connect/issues"},"bin":{"voice-connect":"bin/voice-connect.mjs","voice-connect-mcp":"bin/peer-voice-mcp.mjs"},"dist":{"shasum":"eb944cb93388f31dda2c2eadb924e35c05b0b099","tarball":"https://registry.npmjs.org/@agfpd/voice-connect/-/voice-connect-0.3.2.tgz","fileCount":34,"integrity":"sha512-rUORTIIQj2A1MkmmAOkgBNe9T9NgfIIfmrg9ScyK6Qy5dBxOJmtPWwHxiQuqu0xjYlCtY4lZFCMi2ozv92gzaA==","signatures":[{"sig":"MEUCIQCG7vjSpltn5OGcpybgQQv+hoG23VJMJPtr10qZ5AmoIgIgMtEVzZdOjOtg6GiuiTT5kMnScO132um4AhkNQrovzoY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":188823},"type":"module","engines":{"node":">=18.0.0"},"gitHead":"484fa98bcb73c0206c5dbc5cc3fe7c0476d47f88","scripts":{"test":"node --test tests/*.test.mjs","start":"node bin/peer-voice-mcp.mjs","release":"npm version patch && npm publish && git push --follow-tags && node scripts/bump-marketplace.cjs","version":"node scripts/sync-plugin-version.cjs","release:major":"npm version major && npm publish && git push --follow-tags && node scripts/bump-marketplace.cjs","release:minor":"npm version minor && npm publish && git push --follow-tags && node scripts/bump-marketplace.cjs","prepublishOnly":"test -z \"$(git status --porcelain)\" || (echo 'release: working tree is dirty — commit or stash before release' >&2 && exit 1)"},"_npmUser":{"name":"agfpd-owner","email":"agafapudov.art@gmail.com"},"repository":{"url":"git+https://github.com/agfpd/voice-connect.git","type":"git"},"_npmVersion":"11.17.0","description":"voice-connect — voice service for agents. MCP tools tts (text → ready-to-send .ogg/opus voice file) and stt (audio → text) over one core, plus an OpenAI-compatible HTTP facade (/v1/audio/speech + /v1/audio/transcriptions) for runtimes. Cascade with fallba","directories":{},"_nodeVersion":"26.4.0","dependencies":{"@modelcontextprotocol/sdk":"^1.0.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/voice-connect_0.3.2_1784720845328_0.07178395338760746","host":"s3://npm-registry-packages-npm-production"}},"0.4.0":{"name":"@agfpd/voice-connect","version":"0.4.0","keywords":["claude-code","codex","mcp","model-context-protocol","iapeer","agents","voice-connect","tts","text-to-speech","speech-to-text","voice","gemini","supertonic"],"author":{"url":"https://github.com/agfpd","name":"agfpd"},"license":"Apache-2.0","_id":"@agfpd/voice-connect@0.4.0","maintainers":[{"name":"agfpd-owner","email":"agafapudov.art@gmail.com"}],"homepage":"https://github.com/agfpd/voice-connect","bugs":{"url":"https://github.com/agfpd/voice-connect/issues"},"bin":{"voice-connect":"bin/voice-connect.mjs","voice-connect-mcp":"bin/peer-voice-mcp.mjs"},"dist":{"shasum":"41ab8e4a66e3a921232bb4d269642a407d39d65d","tarball":"https://registry.npmjs.org/@agfpd/voice-connect/-/voice-connect-0.4.0.tgz","fileCount":34,"integrity":"sha512-oo1Zfey2BEauhkpkB78slvbfta2kVXtxVZ3MiSTJ08bDmT13IIF0KNdrk6Gwhm0mSmcXrEtIpEpyRpFClDycqA==","signatures":[{"sig":"MEUCIFe5mUg9ZnIuRmOU3xfcX4CA9lECbbeLCiwDSTjkfJ61AiEAmK5hW1fk026pblxfsGzcFhk1v9d//afPWtQDVD2semc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":196006},"type":"module","engines":{"node":">=18.0.0"},"gitHead":"d99c9c3a0b383049a9bc263dc4a48fb04814c4d4","scripts":{"test":"node --test tests/*.test.mjs","start":"node bin/peer-voice-mcp.mjs","release":"npm version patch && npm publish && git push --follow-tags && node scripts/bump-marketplace.cjs","version":"node scripts/sync-plugin-version.cjs","release:major":"npm version major && npm publish && git push --follow-tags && node scripts/bump-marketplace.cjs","release:minor":"npm version minor && npm publish && git push --follow-tags && node scripts/bump-marketplace.cjs","prepublishOnly":"test -z \"$(git status --porcelain)\" || (echo 'release: working tree is dirty — commit or stash before release' >&2 && exit 1)"},"_npmUser":{"name":"agfpd-owner","email":"agafapudov.art@gmail.com"},"repository":{"url":"git+https://github.com/agfpd/voice-connect.git","type":"git"},"_npmVersion":"11.17.0","description":"voice-connect — voice service for agents. MCP tools tts (text → ready-to-send .ogg/opus voice file) and stt (audio → text) over one core, plus an OpenAI-compatible HTTP facade (/v1/audio/speech + /v1/audio/transcriptions) for runtimes. Cascade with fallba","directories":{},"_nodeVersion":"26.4.0","dependencies":{"@modelcontextprotocol/sdk":"^1.0.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/voice-connect_0.4.0_1784721228033_0.6051109239343839","host":"s3://npm-registry-packages-npm-production"}},"0.5.0":{"name":"@agfpd/voice-connect","version":"0.5.0","keywords":["claude-code","codex","mcp","model-context-protocol","iapeer","agents","voice-connect","tts","text-to-speech","speech-to-text","voice","gemini","supertonic"],"author":{"url":"https://github.com/agfpd","name":"agfpd"},"license":"Apache-2.0","_id":"@agfpd/voice-connect@0.5.0","maintainers":[{"name":"agfpd-owner","email":"agafapudov.art@gmail.com"}],"homepage":"https://github.com/agfpd/voice-connect","bugs":{"url":"https://github.com/agfpd/voice-connect/issues"},"bin":{"voice-connect":"bin/voice-connect.mjs","voice-connect-mcp":"bin/peer-voice-mcp.mjs"},"dist":{"shasum":"d952def69d00508525c84f9628b8fc6a2d570d13","tarball":"https://registry.npmjs.org/@agfpd/voice-connect/-/voice-connect-0.5.0.tgz","fileCount":34,"integrity":"sha512-Xbdp+lNABV2F2bOz6+njrrqVFUQJe6MPnXO6Ix2cjn7KTbmSeS6Q2hdfQMH0vAdH/mJ+QwuPQbYnzwinFLd69w==","signatures":[{"sig":"MEQCIFNmR4QJEWz5vuoa+cAZ4s7xtsgzb9kiSD+EPRHelT8yAiBZpH98Ng2wn+FZFp8k9xapCDcf7ctVlfEGdTfZkE3xBg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":204531},"type":"module","engines":{"node":">=18.0.0"},"gitHead":"b47b8e0af0d74a0e62761c9107b32fecdec73709","scripts":{"test":"node --test tests/*.test.mjs","start":"node bin/peer-voice-mcp.mjs","release":"npm version patch && npm publish && git push --follow-tags && node scripts/bump-marketplace.cjs","version":"node scripts/sync-plugin-version.cjs","release:major":"npm version major && npm publish && git push --follow-tags && node scripts/bump-marketplace.cjs","release:minor":"npm version minor && npm publish && git push --follow-tags && node scripts/bump-marketplace.cjs","prepublishOnly":"test -z \"$(git status --porcelain)\" || (echo 'release: working tree is dirty — commit or stash before release' >&2 && exit 1)"},"_npmUser":{"name":"agfpd-owner","email":"agafapudov.art@gmail.com"},"repository":{"url":"git+https://github.com/agfpd/voice-connect.git","type":"git"},"_npmVersion":"11.17.0","description":"voice-connect — voice service for agents. MCP tools tts (text → ready-to-send .ogg/opus voice file) and stt (audio → text) over one core, plus an OpenAI-compatible HTTP facade (/v1/audio/speech + /v1/audio/transcriptions) for runtimes. Cascade with fallba","directories":{},"_nodeVersion":"26.4.0","dependencies":{"@modelcontextprotocol/sdk":"^1.0.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/voice-connect_0.5.0_1784722194715_0.5090544776186001","host":"s3://npm-registry-packages-npm-production"}},"0.5.1":{"name":"@agfpd/voice-connect","version":"0.5.1","keywords":["claude-code","codex","mcp","model-context-protocol","iapeer","agents","voice-connect","tts","text-to-speech","speech-to-text","voice","gemini","supertonic"],"author":{"url":"https://github.com/agfpd","name":"agfpd"},"license":"Apache-2.0","_id":"@agfpd/voice-connect@0.5.1","maintainers":[{"name":"agfpd-owner","email":"agafapudov.art@gmail.com"}],"homepage":"https://github.com/agfpd/voice-connect","bugs":{"url":"https://github.com/agfpd/voice-connect/issues"},"bin":{"voice-connect":"bin/voice-connect.mjs","voice-connect-mcp":"bin/peer-voice-mcp.mjs"},"dist":{"shasum":"58d54b06e07912d2be0ec6cf7199fdc43ec9e710","tarball":"https://registry.npmjs.org/@agfpd/voice-connect/-/voice-connect-0.5.1.tgz","fileCount":34,"integrity":"sha512-36mV2u1AdHzFB5WwMD9NTBIMlD5G+PAt5wXhOXQf0sMKyg0Yo9z2bPu8CrzYsHteepyRPqQGLbYIIXxDygpBBw==","signatures":[{"sig":"MEUCIQDiwKr1JQ6JXm7DRAGfEO+Gs9CtxZRbJqsWrzLfKbntCwIgDMVABU7LjBz0ugd3kpJTMjfE0DfdJnFTa3CNRHV5tQs=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":205459},"type":"module","engines":{"node":">=18.0.0"},"gitHead":"129579b53c8f22eb69404d795fc4b44c71a383fd","scripts":{"test":"node --test tests/*.test.mjs","start":"node bin/peer-voice-mcp.mjs","release":"npm version patch && npm publish && git push --follow-tags && node scripts/bump-marketplace.cjs","version":"node scripts/sync-plugin-version.cjs","release:major":"npm version major && npm publish && git push --follow-tags && node scripts/bump-marketplace.cjs","release:minor":"npm version minor && npm publish && git push --follow-tags && node scripts/bump-marketplace.cjs","prepublishOnly":"test -z \"$(git status --porcelain)\" || (echo 'release: working tree is dirty — commit or stash before release' >&2 && exit 1)"},"_npmUser":{"name":"agfpd-owner","email":"agafapudov.art@gmail.com"},"repository":{"url":"git+https://github.com/agfpd/voice-connect.git","type":"git"},"_npmVersion":"11.17.0","description":"voice-connect — voice service for agents. MCP tools tts (text → ready-to-send .ogg/opus voice file) and stt (audio → text) over one core, plus an OpenAI-compatible HTTP facade (/v1/audio/speech + /v1/audio/transcriptions) for runtimes. Cascade with fallba","directories":{},"_nodeVersion":"26.4.0","dependencies":{"@modelcontextprotocol/sdk":"^1.0.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/voice-connect_0.5.1_1784722364039_0.5397511466406706","host":"s3://npm-registry-packages-npm-production"}},"0.5.2":{"name":"@agfpd/voice-connect","version":"0.5.2","description":"voice-connect — voice service for agents. MCP tools tts (text → ready-to-send .ogg/opus voice file) and stt (audio → text) over one core, plus an OpenAI-compatible HTTP facade (/v1/audio/speech + /v1/audio/transcriptions) for runtimes. Cascade with fallba","license":"Apache-2.0","author":{"name":"agfpd","url":"https://github.com/agfpd"},"homepage":"https://github.com/agfpd/voice-connect","repository":{"type":"git","url":"git+https://github.com/agfpd/voice-connect.git"},"bugs":{"url":"https://github.com/agfpd/voice-connect/issues"},"keywords":["claude-code","codex","mcp","model-context-protocol","iapeer","agents","voice-connect","tts","text-to-speech","speech-to-text","voice","gemini","supertonic"],"type":"module","bin":{"voice-connect":"bin/voice-connect.mjs","voice-connect-mcp":"bin/peer-voice-mcp.mjs"},"scripts":{"start":"node bin/peer-voice-mcp.mjs","test":"node --test tests/*.test.mjs","release":"npm version patch && npm publish && git push --follow-tags && node scripts/bump-marketplace.cjs","release:minor":"npm version minor && npm publish && git push --follow-tags && node scripts/bump-marketplace.cjs","release:major":"npm version major && npm publish && git push --follow-tags && node scripts/bump-marketplace.cjs","prepublishOnly":"test -z \"$(git status --porcelain)\" || (echo 'release: working tree is dirty — commit or stash before release' >&2 && exit 1)","version":"node scripts/sync-plugin-version.cjs"},"dependencies":{"@modelcontextprotocol/sdk":"^1.0.0"},"publishConfig":{"access":"public"},"engines":{"node":">=18.0.0"},"gitHead":"2b5fd100db9427872d063981e6a38c19eff4c983","_id":"@agfpd/voice-connect@0.5.2","_nodeVersion":"26.4.0","_npmVersion":"11.17.0","dist":{"integrity":"sha512-X7LZllPIL4ZkL58rxI/JPG1GVtb0O3At/cK1xHQGF1eEoeQpwBe1G1dRqK0P79XWqjv/qF2EUiBm3YWkiKtqmA==","shasum":"c075cea2c60a1d5b6e0ac9bb3d04ec252deccc22","tarball":"https://registry.npmjs.org/@agfpd/voice-connect/-/voice-connect-0.5.2.tgz","fileCount":34,"unpackedSize":205682,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQCApLQ7cnDyeXNUTSWA1AY2GhVF1okWEluoeEQCOULVTwIgRZtNuIlj8ag8Jd/4G1T5mPwaaWBdQ9h4K5ZoqxRiOXI="}]},"_npmUser":{"name":"agfpd-owner","email":"agafapudov.art@gmail.com"},"directories":{},"maintainers":[{"name":"agfpd-owner","email":"agafapudov.art@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/voice-connect_0.5.2_1784918652650_0.7603904600382478"},"_hasShrinkwrap":false}},"time":{"created":"2026-06-21T20:54:32.693Z","modified":"2026-07-24T18:44:12.966Z","0.1.11":"2026-06-21T20:54:33.005Z","0.2.0":"2026-06-21T23:27:07.767Z","0.3.0":"2026-07-12T18:21:30.496Z","0.3.1":"2026-07-12T18:38:58.289Z","0.3.2":"2026-07-22T11:47:25.484Z","0.4.0":"2026-07-22T11:53:48.177Z","0.5.0":"2026-07-22T12:09:54.847Z","0.5.1":"2026-07-22T12:12:44.273Z","0.5.2":"2026-07-24T18:44:12.801Z"},"bugs":{"url":"https://github.com/agfpd/voice-connect/issues"},"author":{"name":"agfpd","url":"https://github.com/agfpd"},"license":"Apache-2.0","homepage":"https://github.com/agfpd/voice-connect","keywords":["claude-code","codex","mcp","model-context-protocol","iapeer","agents","voice-connect","tts","text-to-speech","speech-to-text","voice","gemini","supertonic"],"repository":{"type":"git","url":"git+https://github.com/agfpd/voice-connect.git"},"description":"voice-connect — voice service for agents. MCP tools tts (text → ready-to-send .ogg/opus voice file) and stt (audio → text) over one core, plus an OpenAI-compatible HTTP facade (/v1/audio/speech + /v1/audio/transcriptions) for runtimes. Cascade with fallba","maintainers":[{"name":"agfpd-owner","email":"agafapudov.art@gmail.com"}],"readme":"# voice-connect\n\n**A standalone voice service (STT + TTS) for a team of AI agents.**\n\nvoice-connect gives agents and runtimes one voice layer with two halves — text-to-speech and speech-to-text — over a single multi-provider core. Each request runs a cascade with fallback inside the tool: cloud quality first, a local engine as the floor, so synthesis and transcription still work with no API key and no network. It runs on its own (configured from a file) or inside [iapeer](https://github.com/agfpd/iapeer) (configured from the peer-profile).\n\n## How it works\n\nTwo facades sit on one core. Agents reach it as an MCP server; runtimes reach it over an OpenAI-compatible HTTP service. Both call the same cascade — no synthesis or routing logic is duplicated between them.\n\n```\n   agents (MCP)                 runtimes (HTTP)\n   tts / stt                    POST /v1/audio/speech\n                                POST /v1/audio/transcriptions\n        \\                              /\n         \\                            /\n          ▼                          ▼\n   ┌──────────────────────────────────────┐\n   │   core: router + provider cascade     │\n   ├──────────────────────────────────────┤\n   │ TTS:  Gemini → gpt-audio → F5 → Super │  ← default order,\n   │ STT:  speaches → mlx-whisper          │     operator-configurable\n   └──────────────────────────────────────┘\n```\n\nThe router advances to the next engine only on a known \"can't-serve\" error (quota, no key, unreachable); any other error propagates, so a real bug surfaces instead of being masked by a fallback. The last rung in each cascade is a local engine — Supertonic 3 for TTS, mlx-whisper for STT — with no fallback of its own: it is the floor, so a result is always produced when an engine is reachable at all.\n\nDelivery is never the service's job. The MCP `tts` tool hands back a file path; you attach it yourself with `send_to_peer(personality, attachments=[path])`. The HTTP facade returns the audio bytes in the response.\n\nShort text is synthesized synchronously — the path comes back at once. Text over ~2000 chars goes async: the `tts` tool returns a `job_id` immediately and a detached worker notifies you over IAP — sent from the system peer `voice-notifier`, a dedicated, always-stopped identity provisioned on `init`/`update` — when the file is ready. On hosts without iapeer no IAP message can reach you; poll the MCP tool `job_status(job_id)` instead until it reports `done` or `failed`. The HTTP `/v1/audio/speech` route is always synchronous (a runtime holds the connection and wants bytes back).\n\n## Requirements\n\n- **Node.js ≥ 18**\n- **ffmpeg / ffprobe** on `PATH` — audio encode and probe. On macOS: `brew install ffmpeg`.\n- **python3** — only for the first provision of the local Supertonic TTS floor (a managed venv is created on demand).\n- **mlx_whisper** on `PATH` — only for the local STT floor (Apple-silicon Whisper, installed as a `uv` tool). Without it, STT needs a configured speaches endpoint.\n- **API keys** — read from the environment, a shell rc file, or the standalone config file:\n  - `GEMINI_API_KEY` — the primary TTS engine (Google Gemini TTS).\n  - `OPENROUTER_API_KEY` — the gpt-audio TTS fallback rung (OpenRouter).\n  - Neither key is required: with no key, TTS routing falls through to the local F5 / Supertonic engines.\n\n## Install\n\nAs a plugin (Claude Code / Codex), via the agfpd marketplace:\n\n```\n/plugin marketplace add agfpd/agfpd-marketplace\n/plugin install voice-connect@agfpd\n```\n\nOr run the MCP server directly from npm:\n\n```\nnpx -y @agfpd/voice-connect@latest\n```\n\nThe package name is `@agfpd/voice-connect`; the MCP entry point is the `voice-connect-mcp` bin. Wire it into an MCP client by pointing the client at that command, e.g.:\n\n```jsonc\n{\n  \"mcpServers\": {\n    \"voice-connect\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"@agfpd/voice-connect@latest\"]\n    }\n  }\n}\n```\n\n### Always-on HTTP service\n\nThe HTTP facade is meant to run as a long-lived local service so runtimes can hit it without spawning a process per request. It is self-managed: it owns its own launchd agent (label `com.voice-connect.http`), in the package's own namespace, and writes a discovery slot (`~/.iapeer/voice-provider.json`) consumers read for the endpoint.\n\n```\nnode scripts/launchd-http.mjs render      # print the plist (no writes)\nnode scripts/launchd-http.mjs install     # write plist + slot, (re)bootstrap\nnode scripts/launchd-http.mjs status      # launchctl print + slot\nnode scripts/launchd-http.mjs uninstall   # bootout + remove plist + slot\n```\n\nIt binds `127.0.0.1:8127` by default (local-only); override with `PEER_VOICE_HTTP_HOST` / `PEER_VOICE_HTTP_PORT`. `GET /health` reports liveness.\n\n## What it does\n\n### MCP tools\n\n| Tool | In → out | Notes |\n|------|----------|-------|\n| `tts` | text → `.ogg/opus` file | Short → `{ path, ... }` sync; long (>~2000 chars) → `{ job_id }` + an IAP \"done\" message later. |\n| `stt` | audio file path → text | Returns `{ text, engine, fallback_from? }`. |\n| `job_status` | `job_id` → status | `running` \\| `done` \\| `failed` \\| `unknown` — pull-floor for hosts without iapeer, or when you suspect a `voice-notifier` message was lost. |\n\n### HTTP routes (OpenAI-compatible)\n\n| Route | Method | Body | Returns |\n|-------|--------|------|---------|\n| `/v1/audio/speech` | POST | JSON (`input`/`text`, `peer?`, `voice?`, `model?`/`engine?`, `lang?`, `style?`) | Ogg/Opus bytes; engine/fallback/peer in `X-Voice-*` headers. |\n| `/v1/audio/transcriptions` | POST | multipart (`file`, `language?`, `prompt?`, `engine?`, `response_format?`) | `{ text }`, or plain text with `response_format=text`. |\n| `/health` | GET | — | `{ status, service, version }`. |\n\n**Speaking as a peer (`peer`).** A runtime that voices messages on behalf of agents should send `peer` — the peer's identity — and not a `voice` name:\n\n```jsonc\nPOST /v1/audio/speech\n{ \"input\": \"Проверка связи.\", \"peer\": \"boris\" }\n// → 200 audio/ogg\n//    X-Voice-Engine: gpt-audio   X-Voice-Voice: onyx   X-Voice-Peer: boris\n//    X-Voice-Fallback-From: gemini:GeminiQuotaError\n```\n\nA voice NAME belongs to one engine's namespace (`onyx` is gpt-audio's, `Charon` is Gemini's), so it can only be applied to the engine tried first; if the cascade falls through, that name means nothing on the rung that actually serves, which silently yields a default voice — a peer sounding like a stranger. `peer` carries identity instead, and the voice is looked up in that peer's `interfaces.voice` **after** the serving engine is known, so every rung speaks in their voice. It also selects that peer's F5 reference on the F5 rung, so the identity never splits between rungs.\n\nUnknown peer, or a peer with no entry for the serving engine → the engine's built-in default (no invention, no error). `voice` still works and still overrides the primary engine only; if you send both, `peer` covers the fallback rungs. MCP callers need neither — the tool runs inside the calling peer's own process and resolves the identity itself.\n\n### Engines\n\nTTS — first applicable engine wins; the cascade advances on a known can't-serve error:\n\n| Engine | Kind | Model | Notes |\n|--------|------|-------|-------|\n| Gemini | cloud | `gemini-3.1-flash-tts-preview` | ru+en in one pass; honors `style`; needs `GEMINI_API_KEY`. |\n| gpt-audio | cloud | `openai/gpt-audio` (OpenRouter) | Multilingual one pass; honors `style`; needs `OPENROUTER_API_KEY`. |\n| F5-TTS | local GPU | `f5-tts` | Live-prosody Russian rung; per-peer voice cloning; applies on the `ru` route only. Needs an F5 service (`PEER_VOICE_F5_URL`). |\n| Supertonic 3 | local floor | `supertonic-3` | Offline, one pass in the routed language; the floor. |\n\n#### Cascade order (operator config)\n\nWhich engine is tried first is a property of the **deployment** — what hardware and paid accounts the host has — not of the package. Default: `gemini,gpt-audio,f5,supertonic` (the only order that works with zero local infrastructure). Override, highest priority first:\n\n1. `PEER_VOICE_TTS_ORDER=f5,gemini,gpt-audio,supertonic` — env var; for the always-on service put it in `~/.iapeer/voice-provider.env`, which is baked into the launchd plist and survives a reinstall.\n2. `\"ttsOrder\": [\"f5\", \"supertonic\"]` in the config file (standalone installs).\n3. Otherwise the package default.\n\nA host with its own GPU box should put `f5` first: it is free per call, where the cloud rungs are billed per response. Notes:\n\n- **Unknown names are dropped with a warning, never fatal** — a typo in host config degrades to a working ladder instead of taking voice down.\n- **The offline floor is always present**, appended if omitted, so a request can always land somewhere. Its position is left alone if you place it deliberately (`supertonic,f5` = offline-only host).\n- **Omitted engines are genuinely absent** — `f5,supertonic` never calls the cloud at all.\n- **F5 only serves Russian.** On the `en`/`na` route it is *skipped*, not failed, so English still goes to the next rung. Putting `f5` first saves money on Russian traffic only.\n- **Per-peer voices need refs.** F5 speaks as a peer only from a cached reference sample, and refs are minted on a *cloud* synthesis. With `f5` first the cloud rungs are rarely reached, so peers without a ref keep F5's default voice — and all sound alike. Backfill once per peer (`engine: \"gpt-audio\"` with `peer`), then F5 carries the identity for free.\n\nSTT — speaches when an endpoint is configured, otherwise the local floor:\n\n| Engine | Tier | Notes |\n|--------|------|-------|\n| speaches | primary | OpenAI-compatible `/v1/audio/transcriptions`; set `PEER_VOICE_STT_ENDPOINT`. Skipped when unset. |\n| mlx-whisper | local floor | Offline Apple-silicon Whisper via the `mlx_whisper` CLI. |\n\n## `tts` parameters\n\n```\ntts(text, voice?, lang?, style?, note?, engine?, out_path?)\n```\n\n| Param | Type | Description |\n|-------|------|-------------|\n| `text` | string (required) | Text to speak. Mixed ru+en is fine — read in one pass. |\n| `voice` | string | Gemini prebuilt voice for the primary engine. Default `Aoede`. |\n| `lang` | `ru` \\| `en` \\| `na` | Language hint for the fallback engines (Gemini reads any language itself). Omit to auto-detect by character share. |\n| `style` | string | Delivery directive (tone / emotion / tempo) for the cloud engines; ignored by the local fallbacks. |\n| `note` | string | Reminder echoed back in the async \"done\" message (e.g. who to deliver to). Ignored for short (sync) text. |\n| `engine` | `auto` \\| `gemini` \\| `gpt-audio` \\| `f5` \\| `supertonic` | Force one engine, overriding this host's configured order. Default `auto` (the cascade). A forced engine has **no fallback** — its failure propagates. |\n| `out_path` | string | Absolute output `.ogg` path. Default: a unique file under `~/.iapeer/cache/peer-voice/out/`. |\n\n**Returns** — short text (sync): `{ path, engine, voice, lang?, probe, fallback_from? }`. Long text (async): `{ job_id, status: \"started\" }`, followed by an IAP message from the system peer `voice-notifier`: `voice job <id> done path=<path> note=<note>` when synthesis finishes (or `failed reason=<...>`). No iapeer on the host → no message; poll `job_status(job_id)` instead.\n\n## `stt` parameters\n\n```\nstt(audio_path, lang?, prompt?, engine?)\n```\n\n| Param | Type | Description |\n|-------|------|-------------|\n| `audio_path` | string (required) | Absolute path to the audio file to transcribe (e.g. a received voice `.ogg`). |\n| `lang` | string | Language hint (ISO-639-1: `en`, `ru`, …). Omit to auto-detect. |\n| `prompt` | string | Decoder-priming prompt — biases spelling/casing of terms (e.g. keep `Claude Code` in Latin). Not part of the output. |\n| `engine` | `auto` \\| `speaches` \\| `mlx-whisper` | Force an engine. Default `auto`. |\n\n**Returns** `{ text, engine, fallback_from? }`.\n\n## Standalone and iapeer modes\n\nThe mode is decided by one signal: whether the caller has an iapeer identity. Both modes share the same core and the same key ladder (env → shell rc → config file).\n\n- **Standalone** — no iapeer identity. Voice and keys come from one config file: `$PEER_VOICE_CONFIG`, else `<PEER_VOICE_HOME>/config.json`:\n\n  ```jsonc\n  {\n    \"voice\": { \"gemini-3.1-flash-tts-preview\": \"Aoede\", \"supertonic-3\": \"F3\" },\n    \"keys\":  { \"GEMINI_API_KEY\": \"...\", \"OPENROUTER_API_KEY\": \"...\" }\n  }\n  ```\n\n  voice-connect only reads this file; it never writes config itself.\n\n- **iapeer** — the caller has an iapeer identity (`PEER_PERSONALITY` or a cwd peer-profile). Voice comes from the peer-profile; keys from the host env/rc. iapeer owns the configuration.\n\n## License\n\n[Apache-2.0](LICENSE). Platform: macOS.\n","readmeFilename":"README.md"}