| 文件 | 最后提交记录 | 最后更新时间 |
|---|---|---|
refactor(sdks/device/cpp): replace the SimpleBLE dependency with an injectable BleBackend The C++ device SDK reached SimpleBLE through a CMake FetchContent pin (v0.10.3), which is Business Source License 1.1 — non-production use only until it converts to GPLv3 in 2029. Nothing in Omi shipped it (the option defaulted to OFF, no CI built the package, and every Omi client that speaks BLE uses CoreBluetooth, flutter_blue_plus, bleak, or ble-plx), but a non-permissive dependency reference does not belong in an MIT repo. The public surface is unchanged: Scan / Listen / ListenPayload keep their signatures, Listen still subscribes to kAudioDataUuid on kServiceUuid, and ListenPayload still strips the 3-byte header. The platform stack is now supplied by the embedding application through BleBackend + SetBleBackend(), matching the injection pattern stt.hpp already documents and the stub-plus- backend shape the Go SDK uses. Without a backend the entry points throw BleDisabled instead of dialing an adapter. The package now has no third-party dependencies at all, so it configures and builds from a bare checkout with no network access. Verification: cmake -S sdks/device/cpp -B build -DOMI_DEVICE_BUILD_TESTS=ON cmake --build build # clean ctest --test-dir build # 1/1 passed nm -a build/libomi_device.a | grep -i simpleble # no symbols ls build/_deps # absent, nothing fetched grep -rniI -e simpleble -e OMI_DEVICE_BLE . # no matches repo-wide Failure-Class: none | 20 天前 | |
feat(sdks): multi-lang device SDKs (protocol + STT + BLE) (#10227) * feat(sdks): add multi-lang device BLE protocol packages Share Omi GATT UUIDs and audio packet framing across TypeScript, Go, Rust, C++, and Dart under sdks/device. Keep full BLE stacks in the existing Python/Swift/React Native packages; wire Python constants to the same protocol doc. Failure-Class: none * feat(sdks): add multi-engine STT parity across device SDKs Expose deepgram, whisper, and parakeet engines with the same PCM16/16k contract on Python, Swift, React Native, TypeScript, Go, Rust, Dart, and C++ helpers. Feature-gate Whisper runners and optional BLE/STT stacks where native deps are platform-specific. Failure-Class: none * feat(sdks/device-rust): add btleplug-backed BLE feature Failure-Class: none * feat(sdks/device-cpp): add optional SimpleBLE client Failure-Class: none Optional OMI_DEVICE_BLE CMake gate (default OFF) adds scan/listen over SimpleBLE using Omi service/audio UUIDs. FetchContent falls back with a clear warning if SimpleBLE is unavailable. * feat(sdks/device-dart): add flutter_blue_plus BLE client Failure-Class: none Wire OmiBleClient + FlutterBluePlusOmiBle (scan/connect/listenAudio/listenPayload/disconnect) using existing protocol UUIDs and stripPacketHeader. Package now depends on Flutter SDK + flutter_blue_plus; pure protocol/STT unit tests still pass via dart test. Verification: cd sdks/device/dart && flutter pub get && dart test → All tests passed! * feat(sdks/device-go): add feature-gated BLE scan/listen Failure-Class: none * feat(sdks/device-ts): add optional noble BLE transport Failure-Class: none * feat(sdks/device-dart): port app GATT map onto flutter_blue_plus BLE Use main-app UUID constants and Omi audio/codec/battery flows with flutter_blue_plus for third-party Flutter apps. Add Python bleak high-level scan/listen API and document multi-lang BLE backends. Failure-Class: none * style(sdks): format device Dart/Python/Swift for CI Apply dart format (line-length 120), black, gofmt alignment, and swift-format so the Formatting gate passes. Failure-Class: none * chore(sdks): re-trigger CI after PR body invariant citation Failure-Class: none * fix(sdks): format device Dart for CI package-less dart Match dart format without package_config (CI only pub-gets app/). Failure-Class: none * fix(ci): green device SDK PR after main rebase Rebase onto main, restore Codemagic digests, format package-less Dart, black Python examples, and align desktop prod promotion policy with the collapsed Stable workflow from #10241. * fix(ci): match Codemagic digests and Dart line-length 120 Refresh approved Codemagic fixture digests to current codemagic.yaml (main fixture lag) and format device Dart with CI --line-length 120. * fix(sdks/device-ts): send Deepgram API key via token query param Stop assigning headers after WebSocket construction; standard browsers and many Node runtimes ignore it. Pass the key as a Deepgram-supported `token` query parameter so auth actually reaches the server. Failure-Class: none Generated with [Devin](https://devin.ai) Co-Authored-By: Devin <158243242+devin-ai-integration[bot]@users.noreply.github.com> * fix(sdks/device-dart): send Deepgram API key via token query param web_socket_channel cannot carry arbitrary Authorization headers on all platforms, so the previous constructor accepted an apiKey but never sent it. Wire the key through the documented `token` query parameter. Failure-Class: none Generated with [Devin](https://devin.ai) Co-Authored-By: Devin <158243242+devin-ai-integration[bot]@users.noreply.github.com> * docs(readme): remove duplicate MCP Server link Generated with [Devin](https://devin.ai) Co-Authored-By: Devin <158243242+devin-ai-integration[bot]@users.noreply.github.com> * build(sdks/device-cpp): pin SimpleBLE via FetchContent with vendored override Replace the configure-time `git clone` with CMake FetchContent pinned to SimpleBLE v0.10.3 and add OMI_DEVICE_SIMPLEBLE_SOURCE_DIR so callers can opt into an explicit vendored dependency path. Generated with [Devin](https://devin.ai) Co-Authored-By: Devin <158243242+devin-ai-integration[bot]@users.noreply.github.com> * fix(sdks): authenticate Deepgram via headers in Dart and RN Use IOWebSocketChannel Authorization headers in the Dart device SDK instead of putting the API key in the WebSocket URL. Require createWebSocket on React Native so the default path cannot connect without auth headers. Failure-Class: none Co-authored-by: Cursor <cursoragent@cursor.com> * fix(sdks/ts): remove apiKey from Deepgram WS URL, add createWebSocket factory The token-in-URL query param leaks into server/proxy logs. Now: - deepgramWsUrl() returns token-free URL (sampleRate only) - deepgramWsUrlWithToken() preserved as deprecated fallback - createDeepgramTranscriber accepts optional createWebSocket factory (preferred path) or apiKey (deprecated, token-in-URL) - Tests cover both paths * fix(sdks/ts): require authenticated Deepgram transport Remove the token-in-URL fallback and require an injected authenticated WebSocket factory. Failure-Class: none * fix(sdks): deliver buffered Whisper transcript on stop Allow the terminal flush to emit its final transcript after stopping while keeping all subsequent PCM input disabled. Failure-Class: none --------- Co-authored-by: Devin <158243242+devin-ai-integration[bot]@users.noreply.github.com> Co-authored-by: Cursor <cursoragent@cursor.com> | 1 个月前 |
| 文件 | 最后提交记录 | 最后更新时间 |
|---|---|---|
| 20 天前 | ||
| 1 个月前 |