{"_id":"@agfpd/voicetalk-runtime","_rev":"6-ba09d19a1745cab3e5b94aea5306c966","name":"@agfpd/voicetalk-runtime","dist-tags":{"latest":"0.3.1"},"versions":{"0.1.0":{"name":"@agfpd/voicetalk-runtime","version":"0.1.0","license":"Apache-2.0","_id":"@agfpd/voicetalk-runtime@0.1.0","maintainers":[{"name":"agfpd-owner","email":"agafapudov.art@gmail.com"}],"bin":{"voicetalk-runtime":"bin/voicetalk-runtime"},"dist":{"shasum":"fbf4a3a21fd8d01a472d98b4920b827ab1f290ce","tarball":"https://registry.npmjs.org/@agfpd/voicetalk-runtime/-/voicetalk-runtime-0.1.0.tgz","fileCount":14,"integrity":"sha512-Q1dckX63j8YmSRQRe1vhWZS/dXbIVFhuqr6QIhmBVlxvIKhpxiaSsqiV2yTRjfXzci7yj6ybnChYQPcdFHgVNw==","signatures":[{"sig":"MEQCID2VIG5KpamNi/dEzgqPAzn0VBRYev5Vm00Lvjcc55wdAiBirM4W3l5o6GOh9Vigy76SpztN35DU/sq3s1gN4U8lCQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":94601},"type":"module","gitHead":"2f1810cd3ca19fbad98cab05d1356160366b496a","scripts":{"test":"bun test","start":"bun src/cli.ts run","doctor":"bun src/cli.ts doctor --json","typecheck":"tsc --noEmit","self-config":"bun src/cli.ts self-config","self-install":"bun src/cli.ts self-install"},"_npmUser":{"name":"agfpd-owner","email":"agafapudov.art@gmail.com"},"_npmVersion":"11.12.1","description":"Voice runtime-router for IAP peers.","directories":{},"_nodeVersion":"25.9.0","_hasShrinkwrap":false,"devDependencies":{"@types/bun":"latest","typescript":"latest"},"_npmOperationalInternal":{"tmp":"tmp/voicetalk-runtime_0.1.0_1782117019508_0.411046922970433","host":"s3://npm-registry-packages-npm-production"}},"0.1.1":{"name":"@agfpd/voicetalk-runtime","version":"0.1.1","license":"Apache-2.0","_id":"@agfpd/voicetalk-runtime@0.1.1","maintainers":[{"name":"agfpd-owner","email":"agafapudov.art@gmail.com"}],"bin":{"voicetalk-runtime":"bin/voicetalk-runtime"},"dist":{"shasum":"5492f48f1f3c43ede03ce7a5fee6efbf7f34173e","tarball":"https://registry.npmjs.org/@agfpd/voicetalk-runtime/-/voicetalk-runtime-0.1.1.tgz","fileCount":14,"integrity":"sha512-mtQxMJRcaUiBeSO3bSEjP8+TcambUGz4Mvbf/aq1wukuJKQwZeByJgIs3kKE4XvnCWQb5ENVyYhX3zxgJMWtMw==","signatures":[{"sig":"MEYCIQDqjRdWrbNV1LaW89cB3KN/md6+0xAsHOQ9wkcA8qQkOAIhAMLay+uNIUrigxfxNxh3py0p9t7v7IaENAEkGNVBKMR1","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":100024},"type":"module","gitHead":"f3651c3f47092b2cf5aad853a42a1bf8d51ed129","scripts":{"test":"bun test","start":"bun src/cli.ts run","doctor":"bun src/cli.ts doctor --json","typecheck":"tsc --noEmit","self-config":"bun src/cli.ts self-config","self-install":"bun src/cli.ts self-install"},"_npmUser":{"name":"agfpd-owner","email":"agafapudov.art@gmail.com"},"_npmVersion":"11.17.0","description":"Voice runtime-router for IAP peers.","directories":{},"_nodeVersion":"26.4.0","_hasShrinkwrap":false,"devDependencies":{"@types/bun":"latest","typescript":"latest"},"_npmOperationalInternal":{"tmp":"tmp/voicetalk-runtime_0.1.1_1783978539508_0.9294714460402183","host":"s3://npm-registry-packages-npm-production"}},"0.2.0":{"name":"@agfpd/voicetalk-runtime","version":"0.2.0","license":"Apache-2.0","_id":"@agfpd/voicetalk-runtime@0.2.0","maintainers":[{"name":"agfpd-owner","email":"agafapudov.art@gmail.com"}],"bin":{"voicetalk-runtime":"bin/voicetalk-runtime"},"dist":{"shasum":"c173da93f50b9b012e8568f9f19c2477df8d623a","tarball":"https://registry.npmjs.org/@agfpd/voicetalk-runtime/-/voicetalk-runtime-0.2.0.tgz","fileCount":18,"integrity":"sha512-4WgvxXWdjcva9KYMMOEtMKPmDHQPPSGm8VY0/hdlz/8YRjQeYJDoykwwYaSj/UZ0Oyf8Us4d6DicfBLnEwqriw==","signatures":[{"sig":"MEUCIDI8FwqNguKiims4d1qYm2lighDW0kb0xB3VdakLHc5TAiEA8HsBbN1p1rfyDIi02l7v+Y52j9LXmBx0XfZ92c+V54I=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":167197},"type":"module","gitHead":"8dfabba9dfdc164141ba06868f4c18c32babd646","scripts":{"test":"bun test","start":"bun src/cli.ts run","doctor":"bun src/cli.ts doctor --json","typecheck":"tsc --noEmit","self-config":"bun src/cli.ts self-config","self-install":"bun src/cli.ts self-install"},"_npmUser":{"name":"agfpd-owner","email":"agafapudov.art@gmail.com"},"_npmVersion":"11.17.0","description":"Voice runtime-router for IAP peers.","directories":{},"_nodeVersion":"26.4.0","_hasShrinkwrap":false,"devDependencies":{"@types/bun":"latest","typescript":"latest"},"_npmOperationalInternal":{"tmp":"tmp/voicetalk-runtime_0.2.0_1784720913151_0.6196780168751153","host":"s3://npm-registry-packages-npm-production"}},"0.2.1":{"name":"@agfpd/voicetalk-runtime","version":"0.2.1","license":"Apache-2.0","_id":"@agfpd/voicetalk-runtime@0.2.1","maintainers":[{"name":"agfpd-owner","email":"agafapudov.art@gmail.com"}],"bin":{"voicetalk-runtime":"bin/voicetalk-runtime"},"dist":{"shasum":"0540c18a1f67502fc816c8994580d1c203db8f9b","tarball":"https://registry.npmjs.org/@agfpd/voicetalk-runtime/-/voicetalk-runtime-0.2.1.tgz","fileCount":18,"integrity":"sha512-oSe0zftixsvfAUfi1dG3d93YSE7ft6O4vUuq1yvmJTDKfyClKktVX6UEpnyQLOEfzUBvFbTu9TxCkRadtcvqvA==","signatures":[{"sig":"MEUCIQD8Klc5ACPxmpDLZIBUhkdzlKpP5IBdrVLQrSzZ/ljShwIgKVzr3CqlErxCC6yeCK0tf+YWXxesc7Qiw4VUb+veZ1k=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":167884},"type":"module","gitHead":"7c5a51acfcab7a5c3107ab8b2c6e8dec85c61bc7","scripts":{"test":"bun test","start":"bun src/cli.ts run","doctor":"bun src/cli.ts doctor --json","typecheck":"tsc --noEmit","self-config":"bun src/cli.ts self-config","self-install":"bun src/cli.ts self-install"},"_npmUser":{"name":"agfpd-owner","email":"agafapudov.art@gmail.com"},"_npmVersion":"11.17.0","description":"Voice runtime-router for IAP peers.","directories":{},"_nodeVersion":"26.4.0","_hasShrinkwrap":false,"devDependencies":{"@types/bun":"latest","typescript":"latest"},"_npmOperationalInternal":{"tmp":"tmp/voicetalk-runtime_0.2.1_1784721492279_0.41839309531402646","host":"s3://npm-registry-packages-npm-production"}},"0.3.0":{"name":"@agfpd/voicetalk-runtime","version":"0.3.0","license":"Apache-2.0","_id":"@agfpd/voicetalk-runtime@0.3.0","maintainers":[{"name":"agfpd-owner","email":"agafapudov.art@gmail.com"}],"bin":{"voicetalk-runtime":"bin/voicetalk-runtime"},"dist":{"shasum":"f0aecf57566a64605e8ac87923777fff6fe0bfb2","tarball":"https://registry.npmjs.org/@agfpd/voicetalk-runtime/-/voicetalk-runtime-0.3.0.tgz","fileCount":18,"integrity":"sha512-DYLafO5E2t0IuzEs6BnAMMrvx7E6+2+ddchGnknFfndAkW3a3YdfmENQi5hG5uGsgrpY/6Eq1eyxQ8jd7/5OUA==","signatures":[{"sig":"MEUCIQCMUTnIMr1AO9l3Gv+HPHAOfUVawV516rEfcAKTGhhxcAIgPPg/iKUqHtWN39kO3F9glk8eeyRffuRP6PJHEEYTd28=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":185153},"type":"module","gitHead":"7af1ba0ea49f2b8b6453e8e3555a6844d58f2120","scripts":{"test":"bun test","start":"bun src/cli.ts run","doctor":"bun src/cli.ts doctor --json","typecheck":"tsc --noEmit","self-config":"bun src/cli.ts self-config","self-install":"bun src/cli.ts self-install"},"_npmUser":{"name":"agfpd-owner","email":"agafapudov.art@gmail.com"},"_npmVersion":"11.17.0","description":"Voice runtime-router for IAP peers.","directories":{},"_nodeVersion":"26.4.0","_hasShrinkwrap":false,"devDependencies":{"@types/bun":"latest","typescript":"latest"},"_npmOperationalInternal":{"tmp":"tmp/voicetalk-runtime_0.3.0_1784724061900_0.5128017435310024","host":"s3://npm-registry-packages-npm-production"}},"0.3.1":{"name":"@agfpd/voicetalk-runtime","version":"0.3.1","description":"Voice runtime-router for IAP peers.","license":"Apache-2.0","type":"module","bin":{"voicetalk-runtime":"bin/voicetalk-runtime"},"scripts":{"start":"bun src/cli.ts run","self-install":"bun src/cli.ts self-install","self-config":"bun src/cli.ts self-config","doctor":"bun src/cli.ts doctor --json","test":"bun test","typecheck":"tsc --noEmit"},"devDependencies":{"@types/bun":"latest","typescript":"latest"},"gitHead":"f90f35d00ef81b55f9a1991abfe29c0d1f5843c3","_id":"@agfpd/voicetalk-runtime@0.3.1","_nodeVersion":"26.4.0","_npmVersion":"11.17.0","dist":{"integrity":"sha512-OHGg1nF9qcu6FJEJDl/cpAxUrD0qOmTmY08XYNYO4XAv2y3EnL6/wqNkQ8+psLSctN9sudCbjSqswWlDFeuX2w==","shasum":"6a45d857c54f8c8d21e8d0501ed36fd942ee7edf","tarball":"https://registry.npmjs.org/@agfpd/voicetalk-runtime/-/voicetalk-runtime-0.3.1.tgz","fileCount":18,"unpackedSize":193814,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQDzWopQvn0ML3Mby+G4fYx4eVmkvR3rUQusDFSdJouh3gIgKEpGSIGur2tomgpsb5MMFdQo5bDX9HPzVlFJfRzU+Rs="}]},"_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/voicetalk-runtime_0.3.1_1784919361438_0.8388482754601096"},"_hasShrinkwrap":false}},"time":{"created":"2026-06-22T08:30:19.375Z","modified":"2026-07-24T18:56:01.773Z","0.1.0":"2026-06-22T08:30:19.637Z","0.1.1":"2026-07-13T21:35:39.681Z","0.2.0":"2026-07-22T11:48:33.312Z","0.2.1":"2026-07-22T11:58:12.403Z","0.3.0":"2026-07-22T12:41:02.039Z","0.3.1":"2026-07-24T18:56:01.586Z"},"license":"Apache-2.0","description":"Voice runtime-router for IAP peers.","maintainers":[{"name":"agfpd-owner","email":"agafapudov.art@gmail.com"}],"readme":"# voicetalk\n\n**A live-voice channel for a team of AI agents — the voice-presence component of [iapeer](https://github.com/agfpd/iapeer).**\n\n[![CI](https://github.com/agfpd/voicetalk/actions/workflows/ci.yml/badge.svg)](https://github.com/agfpd/voicetalk/actions/workflows/ci.yml)\n[![license](https://img.shields.io/badge/license-Apache--2.0-blue)](./LICENSE)\n[![platform](https://img.shields.io/badge/platform-macOS-lightgrey)](#quick-start)\n\nvoicetalk gives a person presence in an [iapeer](https://github.com/agfpd/iapeer) agent team through live voice: the owner says a wake-word, speaks, and an agent answers out loud from the host's speaker. To the agent, the person is an ordinary peer it reaches with `send_to_peer` — voicetalk turns speech into an inbound message and the agent's reply into spoken audio. It is the third runtime of iapeer after `telegram-runtime` and `notifier-runtime`, and the same single identity an agent already has across Claude, Codex, and Telegram.\n\n> **Built for iapeer.** It isn't a standalone voice assistant — it runs only inside [iapeer](https://github.com/agfpd/iapeer), alongside `telegram-runtime` and `notifier-runtime`. It's an iapeer runtime whose messages travel over iapeer's own routing; the speech-to-text and text-to-speech themselves live in a separate voice service (`voice-connect`), which voicetalk consumes.\n\n## How it works\n\n```text\n   person speaking aloud                        agent (Claude/Codex)\n        │  \"Boris, …\"  (wake-word + speech)         │  send_to_peer(arthur, \"…\")\n        ▼                                            ▼\n   ┌──────────────────────────────────────────────────────────┐\n   │  voicetalk — the voice channel                             │\n   │  inbound:  microphone → wake-word → STT → recipient peer   │\n   │  outbound: peer → TTS → host speaker                        │\n   │  open-mic follow-up · endpointing · earcons                │\n   └──────────────────────────────────────────────────────────┘\n              speech ↔ text via voice-connect (STT / TTS)\n```\n\n## Quick start\n\n> Status: **live voice (Фаза 3).** The microphone, wake words, recognition and spoken replies all run; latency tuning is Фаза 4 — see the roadmap below.\n\nYou will need a working iapeer install, the `voice-connect` voice service running locally, and `ffmpeg`/`ffplay` on `PATH`.\n\n```bash\nnpx @agfpd/voicetalk-runtime                      # install: binary on PATH + runtime manifest\niapeer create <person> --runtime voicetalk        # give a person a voice endpoint (operator-add)\nvoicetalk-runtime doctor                          # check the runtime + this peer's binding\n```\n\nOnce a peer is created, the always-on `voicetalk-runtime run` router pumps IAP\nenvelopes both directions: the microphone listens, and the owner speaks a peer's wake\nword to address it.\n\n```bash\nvoicetalk-runtime devices                                            # list audio inputs\nvoicetalk-runtime interface --wake-words \"дарвин=darwin,борис=boris\" \\\n  --default-target darwin --device reSpeaker                         # set the binding\n# (run is launched by the foundation under the always-on supervisor)\nvoicetalk-runtime say --peer linus \"what's the build status\"         # inject an utterance without the mic (debug)\n```\n\nSay «Борис, привет» and the rest of the sentence is delivered to boris; the reply is\nspoken on the host speaker, and the mic stays open for a follow-up. `VOICETALK_AUDIO=0`\nruns the same router text-only, with no microphone at all. Configuration details:\n[`docs/`](docs/README.md).\n\n## What makes it different\n\n- **Transparent channel.** Agents get no microphone or speaker tools — to an agent, the person is just a named peer. The same `send_to_peer` reaches a human by voice, by Telegram, or by an AI agent alike.\n- **One identity, another runtime.** Voice is not a bolt-on assistant; it is one more runtime of the peer's single identity (`from-runtime=voicetalk`), exactly as Telegram is.\n- **Modality framing for a naive agent.** An agent has no senses — only envelope text. voicetalk marks the inbound envelope so a peer with no knowledge of the system answers in the right modality (\"spoken, live — reply by voice, briefly\").\n- **Voice stays out of the core.** Speech-to-text and text-to-speech live in the shared `voice-connect` service (multi-provider, one place to configure), not inside this runtime and not inside the iapeer foundation.\n- **Conversational turn-taking.** A wake-word only opens a conversation; after a reply, an open-mic window lets the next utterance continue without re-triggering. Endpointing and earcons are owned here, inside the audio session — the agent only sees the next message.\n- **Wake evidence fails closed.** Configured names are never injected into Whisper's\n  decoder prompt: only an exact leading name heard in the unprimed transcript can open\n  a dialogue, and repeated-name decoder loops are discarded before IAP delivery.\n\n## What it does not do (yet)\n\n- No barge-in: the owner cannot interrupt a spoken answer by talking over it (that needs acoustic echo cancellation plus a neural VAD). While the runtime speaks, it does not listen.\n- Wake detection runs on an unprimed transcript, not on an acoustic wake-word model —\n  so a wake word costs one line of config and no training, at the price of transcribing\n  every voiced segment. A bounded private ring retains wake-candidate segments for\n  replayable diagnostics; an acoustic pre-gate remains the stronger future upgrade.\n- Single host, single owner, local microphone and speaker. Multi-device and multi-owner are out of scope for the MVP.\n\n## Roadmap\n\n- **Фаза 0 — Scaffold.** Package skeleton, CLI stub, contract constants. **(done)**\n- **Фаза 1 — Foundation integration (iapeer).** `voicetalk` launch-adapter, runtime classification, `iapeer create --runtime voicetalk`. **(adapter code-complete; deploy coordinated with Фаза 2)**\n- **Фаза 2 — Runtime skeleton.** `runtime.json` manifest + `selfConfig` hook; `interfaces.voicetalk` schema; bidirectional router loop with a text-only IAP round-trip (audio stubbed). **(done)**\n- **Фаза 3 — Voice pipeline.** Always-on microphone → endpointing → STT → wake map (inbound), TTS → speaker (outbound) via `voice-connect`; turn-taking, follow-up window, earcons. **(done)**\n- **Фаза 4 — Latency and live acceptance.** Tune the chain, conversational round-trip live.\n\n## Documentation\n\n[`docs/`](docs/README.md) — what it is and how it will work (English; Russian in [`docs/ru/`](docs/ru/README.md)). This repository is the implementation.\n\n## License\n\nApache-2.0. Platform: macOS. voicetalk is the voice-presence runtime for the [iapeer](https://github.com/agfpd/iapeer) ecosystem — a component of iapeer, not a standalone system.\n","readmeFilename":"README.md"}