{"_id":"@openclaw/facetime","_rev":"6-1124a129cdf80e7d8bec584f675c6b9d","name":"@openclaw/facetime","dist-tags":{"placeholder":"0.0.0","beta":"2026.9.7","latest":"2026.9.7"},"versions":{"0.0.0":{"name":"@openclaw/facetime","version":"0.0.0","license":"MIT","_id":"@openclaw/facetime@0.0.0","maintainers":[{"name":"steipete","email":"steipete@gmail.com"},{"name":"vincentkoc","email":"vincentkoc@ieee.org"}],"homepage":"https://github.com/openclaw/openclaw#readme","bugs":{"url":"https://github.com/openclaw/openclaw/issues"},"dist":{"shasum":"ce073071c8342fc7ace49afb95946218003971c9","tarball":"https://registry.npmjs.org/@openclaw/facetime/-/facetime-0.0.0.tgz","fileCount":2,"integrity":"sha512-DNBKcWNNmgcItD7ZIVXX6JYxDjNs0DiNLWLScAcaXjHVHrE8KEhDv564QOD9t1M1Y5/bFh9JUGdcqN1O9vZQCQ==","signatures":[{"sig":"MEUCID8p7YXyV50gTyfCuXa+UgxaIAgGk7kCB0T3763YuKSyAiEA+4dA819MZhm01kG6b5LPnuk3/Flwcwtqp/bGmvq0UsI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@openclaw%2ffacetime@0.0.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":453},"_from":"file:/home/runner/work/_temp/verified-npm-placeholder-publication/openclaw-facetime-0.0.0.tgz","_npmUser":{"name":"steipete","email":"steipete@gmail.com"},"_resolved":"/home/runner/work/_temp/verified-npm-placeholder-publication/openclaw-facetime-0.0.0.tgz","_integrity":"sha512-DNBKcWNNmgcItD7ZIVXX6JYxDjNs0DiNLWLScAcaXjHVHrE8KEhDv564QOD9t1M1Y5/bFh9JUGdcqN1O9vZQCQ==","repository":{"url":"git+https://github.com/openclaw/openclaw.git","type":"git"},"_npmVersion":"11.17.0","description":"Reserved package name for an official OpenClaw plugin.","directories":{},"_nodeVersion":"24.19.0","publishConfig":{"tag":"placeholder","access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/facetime_0.0.0_1790070215512_0.5876502113407442","host":"s3://npm-registry-packages-npm-production"}},"2026.9.6":{"name":"@openclaw/facetime","version":"2026.9.6","keywords":["facetime","openclaw","openclaw-plugin","realtime-voice"],"author":{"name":"OpenClaw contributors"},"license":"MIT","_id":"@openclaw/facetime@2026.9.6","maintainers":[{"name":"steipete","email":"steipete@gmail.com"},{"name":"vincentkoc","email":"vincentkoc@ieee.org"}],"homepage":"https://docs.openclaw.ai/plugins/facetime","bugs":{"url":"https://github.com/openclaw/openclaw/issues"},"os":["darwin"],"cpu":["arm64"],"dist":{"shasum":"fcee23364c25750046241d7cd1f202da16a9e8db","tarball":"https://registry.npmjs.org/@openclaw/facetime/-/facetime-2026.9.6.tgz","fileCount":1461,"integrity":"sha512-VUx2F9UYVn/OnvRqrS+LxxskJEOzqSf+8M0Y5YMORLo/UqluYKRjvCY60rxIyXn8t2ojuxhhd6xT4sQmn3ojLg==","signatures":[{"sig":"MEQCIGKRQW6KTSVyomFX0pE8W/xCGg8sdFXiHa2GbmJ4ovT2AiAQYqSWyz/jWBRmgOn4g4GiF6hyQU3WQmHJwLNj2xN6dw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEYCIQC70DsPJ7urOLwG/uTrefrrVhPayjhXNSvom21TMUiKBAIhANWpdyASTnRfQ6bro8fdkpVZ+1ZjTLfsGsyG6vt5dv7G","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@openclaw%2ffacetime@2026.9.6","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":2162935},"type":"module","_from":"file:/home/runner/work/_temp/facetime-verified-publication/openclaw-facetime-2026.9.6.tgz","scripts":{"inject:helper":"bash scripts/inject-helper.sh","install:driver":"bash scripts/install-driver.sh","uninstall:driver":"bash scripts/install-driver.sh --uninstall","inject:helper:phone":"bash scripts/inject-helper.sh --app Phone","inject:helper:terminal":"bash scripts/inject-helper-terminal.sh"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:27598db9-d7a9-4dd6-a917-9fcbb1110457"}},"openclaw":{"build":{"bundledDist":false,"openclawVersion":"2026.9.6"},"compat":{"pluginApi":">=2026.9.6"},"install":{"npmSpec":"@openclaw/facetime","clawhubSpec":"clawhub:@openclaw/facetime","defaultChoice":"npm","minHostVersion":">=2026.9.4","allowInvalidConfigRecovery":true},"release":{"publishToNpm":true,"publishToClawHub":true},"extensions":["./index.ts"],"runtimeExtensions":["./dist/index.js"]},"_resolved":"/home/runner/work/_temp/facetime-verified-publication/openclaw-facetime-2026.9.6.tgz","_integrity":"sha512-VUx2F9UYVn/OnvRqrS+LxxskJEOzqSf+8M0Y5YMORLo/UqluYKRjvCY60rxIyXn8t2ojuxhhd6xT4sQmn3ojLg==","repository":{"url":"git+https://github.com/openclaw/openclaw.git","type":"git","directory":"extensions/facetime"},"_npmVersion":"11.17.0","description":"Experimental FaceTime realtime voice carrier for OpenClaw agents","directories":{},"_nodeVersion":"24.19.0","dependencies":{"typebox":"1.3.30"},"_hasShrinkwrap":false,"peerDependencies":{"openclaw":">=2026.9.6"},"bundleDependencies":["typebox"],"peerDependenciesMeta":{"openclaw":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/facetime_2026.9.6_1790197460326_0.014815945825159771","host":"s3://npm-registry-packages-npm-production"}},"2026.9.7":{"name":"@openclaw/facetime","version":"2026.9.7","keywords":["facetime","openclaw","openclaw-plugin","realtime-voice"],"author":{"name":"OpenClaw contributors"},"license":"MIT","_id":"@openclaw/facetime@2026.9.7","maintainers":[{"name":"steipete","email":"steipete@gmail.com"},{"name":"vincentkoc","email":"vincentkoc@ieee.org"}],"homepage":"https://docs.openclaw.ai/plugins/facetime","bugs":{"url":"https://github.com/openclaw/openclaw/issues"},"os":["darwin"],"cpu":["arm64"],"dist":{"shasum":"4b61490f85f511b0eaca89421380d28aa9d4f588","tarball":"https://registry.npmjs.org/@openclaw/facetime/-/facetime-2026.9.7.tgz","fileCount":1467,"integrity":"sha512-dNXcJu7AmI28sLO6TuAoGKqxbqsYq8cPsnAi103AamV4T7NCpR+QEdjSYkXByvISUkpF4lSCAt4Vvs7Hoi86Iw==","signatures":[{"sig":"MEYCIQCOisN+n10rPMalx5vLJEAua89UIeTA5RoqgYLu68KujQIhAInf5rnp+EJQEFrOjpniJK33MEhWUSu64InYgtoPYMd3","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEMCHziPKEft+XQvN0YGTz2Mhab/W38V86QkR6r8VfZOBjUCIASsjFLP+CGrMQlYr/mQ2IrHkQK5OTDvv+VrQvyh+9wm","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@openclaw%2ffacetime@2026.9.7","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":2132444},"type":"module","_from":"file:/home/runner/work/_temp/facetime-verified-publication/openclaw-facetime-2026.9.7.tgz","scripts":{"inject:helper":"bash scripts/inject-helper.sh","install:driver":"bash scripts/install-driver.sh","uninstall:driver":"bash scripts/install-driver.sh --uninstall","inject:helper:phone":"bash scripts/inject-helper.sh --app Phone","inject:helper:terminal":"bash scripts/inject-helper-terminal.sh"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"28a3290b-31a2-4068-b83d-0ee93a86578b"}},"openclaw":{"build":{"bundledDist":false,"openclawVersion":"2026.9.7"},"compat":{"pluginApi":">=2026.9.7"},"install":{"npmSpec":"@openclaw/facetime","clawhubSpec":"clawhub:@openclaw/facetime","defaultChoice":"npm","minHostVersion":">=2026.9.4","allowInvalidConfigRecovery":true},"release":{"publishToNpm":true,"publishToClawHub":true},"extensions":["./index.ts"],"runtimeExtensions":["./dist/index.js"]},"_resolved":"/home/runner/work/_temp/facetime-verified-publication/openclaw-facetime-2026.9.7.tgz","_integrity":"sha512-dNXcJu7AmI28sLO6TuAoGKqxbqsYq8cPsnAi103AamV4T7NCpR+QEdjSYkXByvISUkpF4lSCAt4Vvs7Hoi86Iw==","repository":{"url":"git+https://github.com/openclaw/openclaw.git","type":"git","directory":"extensions/facetime"},"_npmVersion":"11.19.0","description":"Experimental FaceTime realtime voice carrier for OpenClaw agents","directories":{},"_nodeVersion":"24.21.0","dependencies":{"typebox":"1.3.34"},"_hasShrinkwrap":false,"peerDependencies":{"openclaw":">=2026.9.7"},"bundleDependencies":["typebox"],"peerDependenciesMeta":{"openclaw":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/facetime_2026.9.7_1790738120244_0.8664305845861024","host":"s3://npm-registry-packages-npm-production"}}},"time":{"created":"2026-09-22T09:43:35.340Z","modified":"2026-09-30T03:43:21.658Z","0.0.0":"2026-09-22T09:43:35.634Z","2026.9.6":"2026-09-23T21:04:20.471Z","2026.9.7":"2026-09-30T03:15:20.399Z"},"bugs":{"url":"https://github.com/openclaw/openclaw/issues"},"author":{"name":"OpenClaw contributors"},"license":"MIT","homepage":"https://docs.openclaw.ai/plugins/facetime","keywords":["facetime","openclaw","openclaw-plugin","realtime-voice"],"repository":{"url":"git+https://github.com/openclaw/openclaw.git","type":"git","directory":"extensions/facetime"},"description":"Experimental FaceTime realtime voice carrier for OpenClaw agents","maintainers":[{"name":"steipete","email":"steipete@gmail.com"},{"name":"vincentkoc","email":"vincentkoc@ieee.org"}],"readme":"# OpenClaw FaceTime\n\nExperimental FaceTime carrier plugin for a dedicated Apple Silicon\nMac. The public setup, security, operation, and removal guides are:\n\n- <https://docs.openclaw.ai/plugins/facetime>\n- <https://docs.openclaw.ai/plugins/facetime-recovery>\n\nInstall the plugin from npm. Its signed and notarized native helpers are released\nseparately from `openclaw/openclaw-facetime`:\n\n```bash\nopenclaw plugins install @openclaw/facetime\nbrew install openclaw/tap/openclaw-facetime\nopenclaw gateway restart\n```\n\n## Ownership boundaries\n\n- `src/call-lifecycle.ts` owns the closed carrier/model state machine,\n  generation fencing, serialized native commands, and the complete alias index.\n- `src/pending-dial-store.ts` persists the one exact approved pending dial in\n  plugin-owned SQLite state. Current hosts execute these operations in the\n  shared-state worker, preserving write order and conditional dial-ID cleanup.\n  Runtime startup, helper dispatch, and shutdown await the required publications.\n  Pending outbound calls reserve admission while persistence waits, preserving the\n  same incoming-call policy before and after durable publication.\n- `src/helper-rpc.ts` owns bounded loopback IPC with mutual authentication,\n  connection-epoch message MACs, replay sequencing, and typed native\n  postcondition projection.\n- `src/helper-supervisor.ts` owns generation-bound LLDB injection and joins\n  in-flight work on stop.\n- `src/audio-pump.ts` owns bounded native capture, SoX playback, and child\n  teardown.\n- `openclaw/openclaw-facetime` owns the native process tap and injected helper.\n  This plugin validates native protocol version 1, the exact OpenClaw\n  Foundation Developer ID identity, and Apple notarization before activation.\n- `src/talk-driver.ts` owns provider response/tool generations and exact agent\n  consult cancellation.\n\nCarrier hangup is terminal only after a native ended event or stable complete\ntopology absence. A helper reply only acknowledges the request. Capture death,\nGateway handoff, and unproven shutdown escalate before local suppression is\nreleased.\n\n## Configuration\n\n`ownerHandles` is the only caller list. Every accepted identity receives owner\nauthority. `realtime.toolPolicy` is one of `safe-read-only`, `owner`, or `none`;\ninvalid explicit values fail validation.\n`realtime.provider`, `realtime.model`, and `realtime.voice` are optional\nsession overrides. Registered realtime providers own auto-selection,\nauthentication, and their model and voice defaults.\n\nThe helper endpoint is not configurable. Node and the native helper consume\n`helper-endpoint.json`, bind loopback only, and derive the port from the user ID.\nThe helper creates each connection epoch and authenticates the Gateway before\naccepting commands; every command, response, and event is direction-bound and\nstrictly sequenced within that epoch.\n\n## Development checks\n\n```bash\nnode scripts/run-vitest.mjs extensions/facetime\nsh -n extensions/facetime/scripts/*.sh\n(cd extensions/facetime && npm pack --dry-run)\n```\n\nDo not run live calls, install/uninstall the driver, change SIP, enable developer\ntools, or modify TCC during automated validation.\n\n## Native and licensing boundary\n\nThe privileged driver script pins BlackHole v0.7.1 and its SHA-256, builds the\nrenamed `OpenClawBridge.driver` in a root-only temporary directory, and accepts\nno caller-built artifact, digest, or compiler path. Before compilation it\nrequires the canonical Xcode bundle and its selected build tools to be\nApple-signed, root-owned, and not group/world writable, then performs a\ntransactional swap. Generated BlackHole/driver artifacts are GPL-3.0 and are\nexcluded from the package. See [THIRD_PARTY_NOTICES.md](THIRD_PARTY_NOTICES.md).\n\nThe separately released Objective-C and Swift native sources, their adapted\nthird-party notices, and their signing pipeline live in\n`openclaw/openclaw-facetime`.\n","readmeFilename":"README.md"}