From e5a2380e05d78783b9fa03c484c1503ea9aedb26 Mon Sep 17 00:00:00 2001 From: Opanin Akuffo <46673050+opaninakuffo@users.noreply.github.com> Date: Wed, 1 Apr 2026 13:03:43 +0000 Subject: [PATCH 1/4] chore: qvac-sdk v0.8.1 release (#1285) --- packages/sdk/CHANGELOG.md | 95 +++++ packages/sdk/NOTICE | 337 ++++++++++++++++++ packages/sdk/changelog/0.8.1/CHANGELOG.md | 30 ++ packages/sdk/changelog/0.8.1/CHANGELOG_LLM.md | 94 +++++ packages/sdk/changelog/0.8.1/api.md | 39 ++ packages/sdk/changelog/0.8.1/breaking.md | 33 ++ packages/sdk/package.json | 2 +- 7 files changed, 629 insertions(+), 1 deletion(-) create mode 100644 packages/sdk/changelog/0.8.1/CHANGELOG.md create mode 100644 packages/sdk/changelog/0.8.1/CHANGELOG_LLM.md create mode 100644 packages/sdk/changelog/0.8.1/api.md create mode 100644 packages/sdk/changelog/0.8.1/breaking.md diff --git a/packages/sdk/CHANGELOG.md b/packages/sdk/CHANGELOG.md index c97e2a3371..4cb555a259 100644 --- a/packages/sdk/CHANGELOG.md +++ b/packages/sdk/CHANGELOG.md @@ -1,5 +1,100 @@ # Changelog +## [0.8.1] + +πŸ“¦ **NPM:** https://www.npmjs.com/package/@qvac/sdk/v/0.8.1 + +This release introduces a heartbeat mechanism for proactive provider health monitoring in delegated inference, and adds RPC health probes with delegated cancellation support. Several stability fixes address RPC progress throttling, registry download progress accuracy, and security alerts. + +--- + +## πŸ’₯ Breaking Changes + +### Heartbeat Replaces Ping + +The `ping()` function has been replaced by `heartbeat()`, which extends health checking to support delegated (remote) providers. Local usage is a straightforward rename, while the new delegated mode lets consumers verify provider connectivity before initiating model loads or inference. + +**Before:** + +```typescript +import { ping } from "@qvac/sdk"; +const pong = await ping(); +``` + +**After:** + +```typescript +import { heartbeat } from "@qvac/sdk"; + +// Local heartbeat (replaces ping) +await heartbeat(); + +// Delegated heartbeat β€” verify a remote provider is reachable +await heartbeat({ + delegate: { topic: "topicHex", providerPublicKey: "peerHex", timeout: 3000 }, +}); +``` + +--- + +## πŸ”Œ New APIs + +### RPC Health Probe for Delegation + +Delegated model loading now supports an optional `healthCheckTimeout` parameter. When set, the SDK performs an RPC-level health probe before attempting the load, and stale connections are cleaned up centrally rather than per-caller. + +```typescript +await loadModel({ + modelSrc: LLAMA_3_2_1B_INST_Q4_0, + modelType: "llm", + delegate: { + topic: topicHex, + providerPublicKey, + timeout: 30_000, + healthCheckTimeout: 2000, // optional, defaults to 1500ms + }, +}); +``` + +### Delegated Cancellation + +Cancel operations now route automatically to remote providers when the target model is delegated. Inference cancellation requires no API change β€” the SDK detects delegation from the model registry. Remote download cancellation accepts an optional `delegate` field. + +```typescript +// Cancel delegated inference (routes automatically via model registry) +await cancel({ operation: "inference", modelId: "delegated-model-id" }); + +// Cancel delegated remote download +await cancel({ + operation: "downloadAsset", + downloadKey: "download-key", + delegate: { topic: "topicHex", providerPublicKey: "peerHex" }, +}); +``` + +--- + +## 🐞 Bug Fixes + +- **IndicTrans model type unblocked** β€” The NMT translation plugin no longer incorrectly blocks IndicTrans models from loading, restoring multi-engine translation support. +- **Accurate download progress** β€” Registry downloads now report progress from the network layer instead of disk I/O polling, giving real-time progress that reflects actual bytes received. +- **RPC progress throttling** β€” Progress frames sent over RPC are now throttled to prevent call stack overflow when large models produce rapid progress updates. +- **VLM addon classification** β€” The model registry has been regenerated to correctly classify VLM (Vision-Language Model) addons, fixing misrouted model loads. +- **Security alerts resolved** β€” Code scanning alerts across SDK pod packages have been addressed. + +--- + +## πŸ“˜ Documentation + +- All SDK READMEs now reference the `@qvac` npm namespace instead of the legacy `@tetherto` scope. + +--- + +## πŸ§ͺ Testing + +- New E2E tests cover parallel download scenarios and cancel isolation to prevent race conditions between concurrent operations. +- The mobile E2E test executor has been refactored to an asset-based architecture for more reliable cross-platform testing. + ## [0.8.0] πŸ“¦ **NPM:** https://www.npmjs.com/package/@qvac/sdk/v/0.8.0 diff --git a/packages/sdk/NOTICE b/packages/sdk/NOTICE index 30dad37570..b070ce276c 100644 --- a/packages/sdk/NOTICE +++ b/packages/sdk/NOTICE @@ -206,10 +206,14 @@ Third-Party Model Licenses AfriqueGemma-4B-GGUF https://huggingface.co/mradermacher/AfriqueGemma-4B-GGUF + decoder_joint_int8 + https://huggingface.co/nasedkinpv/parakeet-tdt-0.6b-v3-onnx-int8 decoder_joint-model https://huggingface.co/istupakov/parakeet-tdt-0.6b-v3-onnx diar_streaming_sortformer_4spk-v2-onnx https://huggingface.co/cgus/diar_streaming_sortformer_4spk-v2-onnx + encoder_int8 + https://huggingface.co/nasedkinpv/parakeet-tdt-0.6b-v3-onnx-int8 encoder-model https://huggingface.co/istupakov/parakeet-tdt-0.6b-v3-onnx ggml-opus-en-de @@ -228,6 +232,8 @@ Third-Party Model Licenses https://huggingface.co/istupakov/parakeet-tdt-0.6b-v3-onnx preprocessor https://huggingface.co/istupakov/parakeet-tdt-0.6b-v3-onnx + sortformer_int8 + https://huggingface.co/nvidia/diar_streaming_sortformer_4spk-v2 --- gemma (Gemma Terms of Use) --- @@ -356,3 +362,334 @@ the underlying models. Source URLs for original weights are recorded in each model's metadata entry within the registry. + +========================================================================= +JavaScript Dependencies +========================================================================= + +--- apache-2.0 (Apache License 2.0) --- + + @hyperswarm/secret-stream@6.9.1 + https://github.com/holepunchto/hyperswarm-secret-stream + @qvac/decoder-audio@0.3.3 + @qvac/dl-base@0.2.0 + @qvac/dl-filesystem@0.2.0 + @qvac/dl-hyperdrive@0.2.0 + @qvac/embed-llamacpp@0.12.0 + https://github.com/tetherto/qvac-lib-infer-llamacpp-embed + @qvac/error@0.1.1 + @qvac/infer-base@0.1.1 + @qvac/infer-base@0.2.2 + @qvac/langdetect-text@0.1.1 + @qvac/llm-llamacpp@0.12.2 + https://github.com/tetherto/qvac-lib-infer-llamacpp-llm + @qvac/logging@0.1.0 + @qvac/ocr-onnx@0.2.0 + https://github.com/tetherto/qvac-lib-inference-addon-onnx-ocr-fasttext + @qvac/rag@0.4.2 + @qvac/registry-client@0.2.1 + @qvac/registry-schema@0.1.1 + @qvac/response@0.1.2 + @qvac/transcription-parakeet@0.2.0 + https://github.com/tetherto/qvac + @qvac/transcription-whispercpp@0.5.0 + https://github.com/tetherto/qvac + @qvac/translation-nmtcpp@0.6.1 + https://github.com/tetherto/qvac-lib-infer-nmtcpp + @qvac/tts-onnx@0.6.1 + adaptive-timeout@1.0.1 + https://github.com/holepunchto/adaptive-timeout + b4a@1.7.5 + https://github.com/holepunchto/b4a + bare-abort-controller@1.0.0 + https://github.com/holepunchto/bare-abort-controller + bare-addon-resolve@1.10.0 + https://github.com/holepunchto/bare-addon-resolve + bare-ansi-escapes@2.2.3 + https://github.com/holepunchto/bare-ansi-escapes + bare-assert@1.2.0 + https://github.com/holepunchto/bare-assert + bare-buffer@3.4.4 + https://github.com/holepunchto/bare-buffer + bare-bundle@1.10.0 + https://github.com/holepunchto/bare-bundle + bare-channel@5.2.3 + https://github.com/holepunchto/bare-channel + bare-crypto@1.13.0 + https://github.com/holepunchto/bare-crypto + bare-dns@2.1.4 + https://github.com/holepunchto/bare-dns + bare-env@3.0.0 + https://github.com/holepunchto/bare-env + bare-events@2.4.2 + https://github.com/holepunchto/bare-events + bare-events@2.8.2 + https://github.com/holepunchto/bare-events + bare-fetch@2.5.1 + https://github.com/holepunchto/bare-fetch + bare-ffmpeg@1.1.0 + https://github.com/holepunchto/bare-ffmpeg + bare-form-data@1.1.6 + https://github.com/holepunchto/bare-form-data + bare-fs@4.5.4 + https://github.com/holepunchto/bare-fs + bare-hrtime@2.1.1 + https://github.com/holepunchto/bare-hrtime + bare-http-parser@1.0.1 + https://github.com/holepunchto/bare-http-parser + bare-http1@4.2.3 + https://github.com/holepunchto/bare-http1 + bare-https@2.1.2 + https://github.com/holepunchto/bare-https + bare-inspect@3.1.4 + https://github.com/holepunchto/bare-inspect + bare-lief@0.1.4 + https://github.com/holepunchto/bare-lief + bare-link@2.1.10 + https://github.com/holepunchto/bare-link + bare-module@6.1.3 + https://github.com/holepunchto/bare-module + bare-module-lexer@1.4.7 + https://github.com/holepunchto/bare-module-lexer + bare-module-resolve@1.12.1 + https://github.com/holepunchto/bare-module-resolve + bare-module-traverse@2.0.1 + https://github.com/holepunchto/bare-module-traverse + bare-net@2.2.0 + https://github.com/holepunchto/bare-net + bare-node-stream@1.0.0 + https://github.com/holepunchto/bare-node + bare-node-worker-threads@1.0.0 + https://github.com/holepunchto/bare-node + bare-os@3.6.2 + https://github.com/holepunchto/bare-os + bare-path@3.0.0 + https://github.com/holepunchto/bare-path + bare-pipe@4.1.3 + https://github.com/holepunchto/bare-pipe + bare-process@4.2.2 + https://github.com/holepunchto/bare-process + bare-rpc@1.1.0 + https://github.com/holepunchto/bare-rpc + bare-runtime@1.27.0 + https://github.com/holepunchto/bare-runtime + bare-runtime-darwin-arm64@1.27.0 + https://github.com/holepunchto/bare-runtime + bare-semver@1.0.2 + https://github.com/holepunchto/bare-semver + bare-signals@4.2.0 + https://github.com/holepunchto/bare-signals + bare-stream@2.8.0 + https://github.com/holepunchto/bare-stream + bare-structured-clone@1.5.2 + https://github.com/holepunchto/bare-structured-clone + bare-subprocess@5.2.2 + https://github.com/holepunchto/bare-subprocess + bare-tcp@2.2.7 + https://github.com/holepunchto/bare-tcp + bare-thread@1.1.6 + https://github.com/holepunchto/bare-thread + bare-tls@2.1.7 + https://github.com/holepunchto/bare-tls + bare-tty@5.0.3 + https://github.com/holepunchto/bare-tty + bare-type@1.1.0 + https://github.com/holepunchto/bare-type + bare-url@2.3.2 + https://github.com/holepunchto/bare-url + bare-worker@4.1.6 + https://github.com/holepunchto/bare-worker + bare-zlib@1.3.1 + https://github.com/holepunchto/bare-zlib + blind-relay@1.4.0 + https://github.com/holepunchto/blind-relay + compact-encoding@2.19.0 + https://github.com/compact-encoding/compact-encoding + device-file@2.3.1 + https://github.com/holepunchto/device-file + events-universal@1.0.1 + https://github.com/holepunchto/events-universal + fd-lock@2.1.1 + https://github.com/holepunchto/fd-lock + fs-native-extensions@1.4.5 + https://github.com/holepunchto/fs-native-extensions + hyperblobs@2.9.0 + https://github.com/holepunchto/hyperblobs + hypercore-errors@1.5.0 + https://github.com/holepunchto/hypercore-errors + hypercore-id-encoding@1.3.0 + https://github.com/holepunchto/hypercore-id-encoding + hypercore-storage@2.4.1 + hyperdb@4.22.3 + https://github.com/holepunchto/hyperdb + hyperdispatch@1.4.4 + https://github.com/holepunchto/hyperdispatch + hyperdrive@13.3.0 + https://github.com/holepunchto/hyperdrive + hyperschema@1.20.1 + https://github.com/holepunchto/hyperschema + index-encoder@3.4.0 + https://github.com/holepunchto/index-encoder + mirror-drive@1.12.0 + https://github.com/holepunchto/mirror-drive + noise-handshake@4.2.0 + https://github.com/holepunchto/noise-handshake + paparam@1.10.0 + https://github.com/holepunchto/paparam + quickbit-native@2.4.8 + https://github.com/holepunchto/quickbit-native + rache@1.0.0 + https://github.com/holepunchto/rache + refcounter@1.0.0 + https://github.com/holepunchto/refcounter + require-addon@1.2.0 + https://github.com/holepunchto/require-addon + require-asset@1.2.1 + https://github.com/holepunchto/require-asset + resource-on-exit@1.0.0 + https://github.com/holepunchto/bare-teardown + rocksdb-native@3.13.0 + https://github.com/holepunchto/rocksdb-native + scope-lock@1.2.4 + https://github.com/holepunchto/scope-lock + simdle-native@1.3.9 + https://github.com/holepunchto/simdle-native + sub-encoder@2.1.3 + https://github.com/holepunchto/sub-encoder + text-decoder@1.2.7 + https://github.com/holepunchto/text-decoder + udx-native@1.19.2 + https://github.com/holepunchto/udx-native + unslab@1.3.0 + https://github.com/holepunchto/unslab + which-runtime@1.3.2 + https://github.com/holepunchto/which-runtime + +--- isc (ISC License) --- + + bits-to-bytes@1.3.0 + https://github.com/holepunchto/bits-to-bytes + compact-encoding-bitfield@1.0.0 + https://github.com/compact-encoding/compact-encoding-bitfield + compact-encoding-net@1.2.0 + https://github.com/compact-encoding/compact-encoding-net + nanoassert@2.0.0 + https://github.com/emilbayes/nanoassert + noise-curve-ed@2.1.0 + https://github.com/chm-diederichs/noise-curve-ed + quickbit-universal@2.2.0 + https://github.com/holepunchto/quickbit-universal + simdle-universal@1.1.2 + https://github.com/holepunchto/simdle-universal + +--- mit (MIT License) --- + + big-sparse-array@1.0.3 + https://github.com/mafintosh/big-sparse-array + binary-stream-equals@1.0.0 + https://github.com/mafintosh/binary-stream-equals + bogon@1.2.0 + https://github.com/mafintosh/bogon + codecs@3.1.0 + https://github.com/mafintosh/codecs + corestore@7.8.0 + https://github.com/holepunchto/corestore + debounceify@1.1.0 + https://github.com/mafintosh/debounceify + dht-rpc@6.26.2 + https://github.com/mafintosh/dht-rpc + events@3.3.0 + https://github.com/Gozala/events + fast-fifo@1.3.2 + https://github.com/mafintosh/fast-fifo + fast-safe-stringify@2.1.1 + https://github.com/davidmarkclements/fast-safe-stringify + flat-tree@1.13.0 + https://github.com/mafintosh/flat-tree + generate-object-property@2.0.0 + https://github.com/mafintosh/generate-object-property + generate-string@1.0.1 + https://github.com/mafintosh/generate-string + hyperbee@2.27.3 + https://github.com/holepunchto/hyperbee + hypercore@11.26.0 + https://github.com/holepunchto/hypercore + hypercore-crypto@3.6.1 + https://github.com/mafintosh/hypercore-crypto + hyperdht@6.29.0 + https://github.com/holepunchto/hyperdht + hyperswarm@4.16.0 + https://github.com/holepunchto/hyperswarm + is-options@1.0.2 + https://github.com/mafintosh/is-options + is-property@1.0.2 + https://github.com/mikolalysenko/is-property + kademlia-routing-table@1.0.6 + https://github.com/mafintosh/kademlia-routing-table + llm-splitter@0.2.0 + https://github.com/nearform/llm-splitter + mutexify@1.4.0 + https://github.com/mafintosh/mutexify + nat-sampler@1.0.1 + https://github.com/mafintosh/nat-sampler + protocol-buffers-encodings@1.2.0 + https://github.com/mafintosh/protocol-buffers-encodings + protomux@3.10.1 + https://github.com/mafintosh/protomux + queue-tick@1.0.1 + https://github.com/mafintosh/queue-tick + random-array-iterator@1.0.0 + https://github.com/mafintosh/random-array-iterator + ready-resource@1.2.0 + https://github.com/holepunchto/ready-resource + record-cache@1.2.0 + https://github.com/mafintosh/record-cache + resolve-reject-promise@1.1.0 + https://github.com/mafintosh/resolve-reject-promise + safety-catch@1.0.2 + https://github.com/mafintosh/safety-catch + same-data@1.0.0 + https://github.com/mafintosh/same-data + shuffled-priority-queue@2.1.0 + https://github.com/mafintosh/shuffled-priority-queue + signal-promise@1.0.3 + https://github.com/mafintosh/signal-promise + signed-varint@2.0.1 + https://github.com/dominictarr/signed-varint + sodium-native@5.0.10 + https://github.com/holepunchto/sodium-native + sodium-secretstream@1.2.0 + https://github.com/mafintosh/sodium-secretstream + sodium-universal@5.0.1 + https://github.com/holepunchto/sodium-universal + speedometer@1.1.0 + https://github.com/mafintosh/speedometer + streamx@2.23.0 + https://github.com/mafintosh/streamx + tar-stream@3.1.7 + https://github.com/mafintosh/tar-stream + teex@1.0.1 + https://github.com/mafintosh/teex + test-tmp@1.4.0 + https://github.com/mafintosh/test-tmp + time-ordered-set@2.0.1 + https://github.com/mafintosh/time-ordered-set + timeout-refresh@2.0.1 + https://github.com/mafintosh/timeout-refresh + tinyld@1.3.4 + https://github.com/komodojp/tinyld + unix-path-resolve@1.0.2 + https://github.com/mafintosh/unix-path-resolve + unordered-set@2.0.1 + https://github.com/mafintosh/unordered-set + uuid-random@1.3.2 + https://github.com/jchook/uuid-random + varint@5.0.0 + https://github.com/chrisdickinson/varint + xache@1.2.1 + https://github.com/mafintosh/xache + z32@1.1.0 + https://github.com/mafintosh/z32 + zod@4.3.6 + https://github.com/colinhacks/zod + diff --git a/packages/sdk/changelog/0.8.1/CHANGELOG.md b/packages/sdk/changelog/0.8.1/CHANGELOG.md new file mode 100644 index 0000000000..662fab11a0 --- /dev/null +++ b/packages/sdk/changelog/0.8.1/CHANGELOG.md @@ -0,0 +1,30 @@ +# Changelog v0.8.1 + +Release Date: 2026-04-01 + +## ✨ Features + +- Add heartbeat for proactive provider status checks. (see PR [#1160](https://github.com/tetherto/qvac/pull/1160)) - See [breaking changes](./breaking.md) + +## πŸ”Œ API + +- Add RPC health probe and centralize stale-connection cleanup for delegation. (see PR [#1149](https://github.com/tetherto/qvac/pull/1149)) - See [API changes](./api.md) +- Add delegated cancellation for inference and remote downloads. (see PR [#1153](https://github.com/tetherto/qvac/pull/1153)) - See [API changes](./api.md) + +## 🐞 Fixes + +- Remove indictrans model type block in nmtcpp translat…. (see PR [#1112](https://github.com/tetherto/qvac/pull/1112)) +- Use network-layer progress for registry downloads instead of disk I/O. (see PR [#1118](https://github.com/tetherto/qvac/pull/1118)) +- Throttle RPC progress frames to prevent call stack overflow. (see PR [#1134](https://github.com/tetherto/qvac/pull/1134)) +- Regenerate model registry to fix VLM addon classification. (see PR [#1167](https://github.com/tetherto/qvac/pull/1167)) +- Resolve code scanning security alerts for SDK pod packages. (see PR [#1207](https://github.com/tetherto/qvac/pull/1207)) + +## πŸ“˜ Docs + +- Replace @tetherto npm references with @qvac namespace in READMEs. (see PR [#1247](https://github.com/tetherto/qvac/pull/1247)) + +## πŸ§ͺ Tests + +- Add parallel download and cancel isolation E2E tests. (see PR [#1059](https://github.com/tetherto/qvac/pull/1059)) +- Refactor model executor for asset-based mobile e2e. (see PR [#1126](https://github.com/tetherto/qvac/pull/1126)) + diff --git a/packages/sdk/changelog/0.8.1/CHANGELOG_LLM.md b/packages/sdk/changelog/0.8.1/CHANGELOG_LLM.md new file mode 100644 index 0000000000..203c5bb474 --- /dev/null +++ b/packages/sdk/changelog/0.8.1/CHANGELOG_LLM.md @@ -0,0 +1,94 @@ +# QVAC SDK v0.8.1 Release Notes + +πŸ“¦ **NPM:** https://www.npmjs.com/package/@qvac/sdk/v/0.8.1 + +This release introduces a heartbeat mechanism for proactive provider health monitoring in delegated inference, and adds RPC health probes with delegated cancellation support. Several stability fixes address RPC progress throttling, registry download progress accuracy, and security alerts. + +--- + +## πŸ’₯ Breaking Changes + +### Heartbeat Replaces Ping + +The `ping()` function has been replaced by `heartbeat()`, which extends health checking to support delegated (remote) providers. Local usage is a straightforward rename, while the new delegated mode lets consumers verify provider connectivity before initiating model loads or inference. + +**Before:** + +```typescript +import { ping } from "@qvac/sdk"; +const pong = await ping(); +``` + +**After:** + +```typescript +import { heartbeat } from "@qvac/sdk"; + +// Local heartbeat (replaces ping) +await heartbeat(); + +// Delegated heartbeat β€” verify a remote provider is reachable +await heartbeat({ + delegate: { topic: "topicHex", providerPublicKey: "peerHex", timeout: 3000 }, +}); +``` + +--- + +## πŸ”Œ New APIs + +### RPC Health Probe for Delegation + +Delegated model loading now supports an optional `healthCheckTimeout` parameter. When set, the SDK performs an RPC-level health probe before attempting the load, and stale connections are cleaned up centrally rather than per-caller. + +```typescript +await loadModel({ + modelSrc: LLAMA_3_2_1B_INST_Q4_0, + modelType: "llm", + delegate: { + topic: topicHex, + providerPublicKey, + timeout: 30_000, + healthCheckTimeout: 2000, // optional, defaults to 1500ms + }, +}); +``` + +### Delegated Cancellation + +Cancel operations now route automatically to remote providers when the target model is delegated. Inference cancellation requires no API change β€” the SDK detects delegation from the model registry. Remote download cancellation accepts an optional `delegate` field. + +```typescript +// Cancel delegated inference (routes automatically via model registry) +await cancel({ operation: "inference", modelId: "delegated-model-id" }); + +// Cancel delegated remote download +await cancel({ + operation: "downloadAsset", + downloadKey: "download-key", + delegate: { topic: "topicHex", providerPublicKey: "peerHex" }, +}); +``` + +--- + +## 🐞 Bug Fixes + +- **IndicTrans model type unblocked** β€” The NMT translation plugin no longer incorrectly blocks IndicTrans models from loading, restoring multi-engine translation support. +- **Accurate download progress** β€” Registry downloads now report progress from the network layer instead of disk I/O polling, giving real-time progress that reflects actual bytes received. +- **RPC progress throttling** β€” Progress frames sent over RPC are now throttled to prevent call stack overflow when large models produce rapid progress updates. +- **VLM addon classification** β€” The model registry has been regenerated to correctly classify VLM (Vision-Language Model) addons, fixing misrouted model loads. +- **Security alerts resolved** β€” Code scanning alerts across SDK pod packages have been addressed. + +--- + +## πŸ“˜ Documentation + +- All SDK READMEs now reference the `@qvac` npm namespace instead of the legacy `@tetherto` scope. + +--- + +## πŸ§ͺ Testing + +- New E2E tests cover parallel download scenarios and cancel isolation to prevent race conditions between concurrent operations. +- The mobile E2E test executor has been refactored to an asset-based architecture for more reliable cross-platform testing. diff --git a/packages/sdk/changelog/0.8.1/api.md b/packages/sdk/changelog/0.8.1/api.md new file mode 100644 index 0000000000..c83761e402 --- /dev/null +++ b/packages/sdk/changelog/0.8.1/api.md @@ -0,0 +1,39 @@ +# πŸ”Œ API Changes v0.8.1 + +## Add RPC health probe and centralize stale-connection cleanup for delegation + +PR: [#1149](https://github.com/tetherto/qvac/pull/1149) + +```typescript +await loadModel({ + modelSrc: LLAMA_3_2_1B_INST_Q4_0, + modelType: "llm", + delegate: { + topic: topicHex, + providerPublicKey, + timeout: 30_000, + healthCheckTimeout: 2000, // optional, defaults to 1500ms + }, +}); +``` + +--- + +## Add delegated cancellation for inference and remote downloads + +PR: [#1153](https://github.com/tetherto/qvac/pull/1153) + +```typescript +// Cancel delegated inference (no API change β€” routes automatically via model registry) +await cancel({ operation: "inference", modelId: "delegated-model-id" }); + +// Cancel delegated remote download (new: optional delegate field) +await cancel({ + operation: "downloadAsset", + downloadKey: "download-key", + delegate: { topic: "topicHex", providerPublicKey: "peerHex" }, +}); +``` + +--- + diff --git a/packages/sdk/changelog/0.8.1/breaking.md b/packages/sdk/changelog/0.8.1/breaking.md new file mode 100644 index 0000000000..65908a70a4 --- /dev/null +++ b/packages/sdk/changelog/0.8.1/breaking.md @@ -0,0 +1,33 @@ +# πŸ’₯ Breaking Changes v0.8.1 + +## Add heartbeat for proactive provider status checks + +PR: [#1160](https://github.com/tetherto/qvac/pull/1160) + +**BEFORE:** +** +```typescript +import { ping } from "@qvac/sdk"; +const pong = await ping(); +``` + +** + +**AFTER:** +** +```typescript +import { heartbeat } from "@qvac/sdk"; + +// Local heartbeat (replaces ping) +await heartbeat(); +// Delegated heartbeat (new) +await heartbeat({ + delegate: { topic: "topicHex", providerPublicKey: "peerHex", timeout: 3000 }, +}); +``` + +## πŸ§ͺ How was it tested? +- Delegated heartbeat tested end-to-end: consumer pings provider before `loadModel`, provider responds with pong, model loads via delegation, second ping confirms connection still alive, clean shutdown + +--- + diff --git a/packages/sdk/package.json b/packages/sdk/package.json index 469cc3dcbd..a7f1b9e5a1 100644 --- a/packages/sdk/package.json +++ b/packages/sdk/package.json @@ -1,6 +1,6 @@ { "name": "@qvac/sdk", - "version": "0.8.0", + "version": "0.8.1", "license": "Apache-2.0", "repository": { "type": "git", From 86cf064a33b05064917752eb96917a9c3805a813 Mon Sep 17 00:00:00 2001 From: Opanin Akuffo <46673050+opaninakuffo@users.noreply.github.com> Date: Wed, 1 Apr 2026 14:11:47 +0000 Subject: [PATCH 2/4] fix: freeze sdk deps installs in publish and sdk-pod checks (#1288) --- .github/workflows/pr-checks-sdk-pod.yml | 8 +++++++- .github/workflows/publish-sdk.yml | 6 +----- 2 files changed, 8 insertions(+), 6 deletions(-) diff --git a/.github/workflows/pr-checks-sdk-pod.yml b/.github/workflows/pr-checks-sdk-pod.yml index b719969ea0..3b47788d84 100644 --- a/.github/workflows/pr-checks-sdk-pod.yml +++ b/.github/workflows/pr-checks-sdk-pod.yml @@ -253,7 +253,13 @@ jobs: fi - name: Install dependencies - run: ${{ matrix.pkg_manager }} install + shell: bash + run: | + if [ "${{ matrix.package }}" = "sdk" ]; then + bun install --frozen-lockfile + else + ${{ matrix.pkg_manager }} install + fi - name: Install Bare runtime if: matrix.package == 'rag' diff --git a/.github/workflows/publish-sdk.yml b/.github/workflows/publish-sdk.yml index c92dd3742d..9c469cd932 100644 --- a/.github/workflows/publish-sdk.yml +++ b/.github/workflows/publish-sdk.yml @@ -119,10 +119,6 @@ jobs: run: | echo "Configuring scoped registry for @tetherto and @qvac packages..." set -eu - - # Remove stale lock file to force fresh registry resolution - rm -f bun.lock - echo "Writing .npmrc for dual registry install…" cat > .npmrc < Date: Wed, 1 Apr 2026 17:37:34 +0000 Subject: [PATCH 3/4] chore: update changelog (#1295) --- packages/sdk/CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/sdk/CHANGELOG.md b/packages/sdk/CHANGELOG.md index 4cb555a259..8f5c606db3 100644 --- a/packages/sdk/CHANGELOG.md +++ b/packages/sdk/CHANGELOG.md @@ -4,7 +4,7 @@ πŸ“¦ **NPM:** https://www.npmjs.com/package/@qvac/sdk/v/0.8.1 -This release introduces a heartbeat mechanism for proactive provider health monitoring in delegated inference, and adds RPC health probes with delegated cancellation support. Several stability fixes address RPC progress throttling, registry download progress accuracy, and security alerts. +This release introduces a heartbeat mechanism for proactive provider health monitoring in delegated inference and adds RPC health probes with delegated cancellation support. Several stability fixes address RPC progress throttling, registry download progress accuracy, and security alerts. --- From 9ceb256ee22cf426f71a52cda9cfb204af527b94 Mon Sep 17 00:00:00 2001 From: namelsking Date: Thu, 9 Apr 2026 12:41:50 +0200 Subject: [PATCH 4/4] doc[notask]: rewrite SDK README with streamlined quickstart and updated docs links --- packages/sdk/CHANGELOG.md | 27 ++ packages/sdk/README.md | 352 +++--------------- packages/sdk/changelog/0.8.2/CHANGELOG.md | 11 + packages/sdk/changelog/0.8.2/CHANGELOG_LLM.md | 26 ++ packages/sdk/package.json | 2 +- 5 files changed, 123 insertions(+), 295 deletions(-) create mode 100644 packages/sdk/changelog/0.8.2/CHANGELOG.md create mode 100644 packages/sdk/changelog/0.8.2/CHANGELOG_LLM.md diff --git a/packages/sdk/CHANGELOG.md b/packages/sdk/CHANGELOG.md index 8f5c606db3..f8ff23a335 100644 --- a/packages/sdk/CHANGELOG.md +++ b/packages/sdk/CHANGELOG.md @@ -1,5 +1,32 @@ # Changelog +## [0.8.2] + +πŸ“¦ **NPM:** https://www.npmjs.com/package/@qvac/sdk/v/0.8.2 + +This is a maintenance release that refreshes the SDK README with a streamlined quickstart guide and updated documentation links pointing to the new docs site at docs.qvac.tether.io. + +--- + +## πŸ“˜ Documentation + +### README Rewrite + +The SDK README has been rewritten to provide a cleaner onboarding experience. The verbose installation, usage, and feature sections have been replaced with a concise quickstart that gets users running in four steps, and all documentation links now point to the new docs site. + +Key changes: + +- **Simplified quickstart** β€” A minimal four-step guide (create workspace, install, write script, run) replaces the previous multi-section setup +- **Updated links** β€” Documentation URLs now point to `docs.qvac.tether.io` instead of `qvac.tether.dev` +- **Support channel** β€” The support link now points to the Discord channel instead of FeatureBase +- **Leaner content** β€” Detailed platform instructions (Expo, Linux), feature lists, and example indexes have been moved to the docs site to keep the README focused + +--- + +## βš™οΈ Infrastructure + +- SDK dependency installs in CI publish and pod check workflows are now frozen to prevent unexpected version drift during builds. + ## [0.8.1] πŸ“¦ **NPM:** https://www.npmjs.com/package/@qvac/sdk/v/0.8.1 diff --git a/packages/sdk/README.md b/packages/sdk/README.md index a952aa3bba..c728a4a606 100644 --- a/packages/sdk/README.md +++ b/packages/sdk/README.md @@ -1,9 +1,3 @@ -[![QVAC logo](docs/logo.avif)](https://qvac.tether.dev) - ---- - -**QVAC** is an open-source, cross-platform **ecosystem** for local-first, peer-to-peer **AI**. QVAC runs on [**Bare**](https://bare.pears.com) by [Holepunch](https://holepunch.to), a lightweight, cross-platform JavaScript runtime. - # QVAC SDK **QVAC SDK** is the canonical entry point to develop AI applications with QVAC. @@ -11,140 +5,73 @@ > _Part of **QVAC** ecosystem_ >
> -> Home  β€’  -> Docs  β€’  -> Support  β€’  +> Home  β€’  +> Docs  β€’  +> Support  β€’  > Discord -> - -Written in TypeScript, it provides all QVAC capabilities through a unified interface while also abstracting away the complexity of running your application in a JS environment other than Bare. -For the comprehensive reference, [see official QVAC documentation](https://qvac.tether.dev/docs). +**QVAC SDK** is the main entry point for developing applications with QVAC. It is type-safe and exposes all QVAC capabilities through a unified interface. It runs on Node.js, [Bare runtime](https://bare.pears.com), and [Expo](https://expo.dev). -## Requirements +See [https://docs.qvac.tether.io/sdk/getting-started](https://docs.qvac.tether.io/sdk/getting-started) for the comprehensive QVAC documentation. -Supported JS environments: Bare, Node.js, Expo and Bun. +## Supported environments and installation -## Installation - -```bash -npm install @qvac/sdk -``` +See https://docs.qvac.tether.io/sdk/getting-started/installation -### Linux +## Quickstart -OS peer dependency: +1. Create the examples workspace: ```bash -apt install vulkan-sdk +mkdir qvac-examples +cd qvac-examples +npm init -y && npm pkg set type=module ``` -### Expo - -1. Peer dependencies: +2. Install the SDK: ```bash -npm i expo-file-system react-native-bare-kit -``` - -2. On Android, bump `minSdkVersion` to 29, by adding `ext { minSdkVersion=29 }` to `android/build.gradle` or using `expo-build-properties`. - -3. Add the QVAC Expo plugin to `app.json`: - -```js -export default { - expo: { - plugins: ["@qvac/sdk/expo-plugin"], - }, -}; -``` - -4. Prebuild your project to generate the native files: - -```bash -npx expo prebuild -``` - -5. Build and run it on a **physical device**: - -```bash -npx expo run:ios --device -# or -npx expo run:android --device +npm install @qvac/sdk ``` -> [!IMPORTANT] -> Due to limitations with `llamacpp`, QVAC currently does not run on emulators. You **must** use a physical device. - -## Usage +3. Create the quickstart script: ```js -import { - completion, - LLAMA_3_2_1B_INST_Q4_0, - loadModel, - downloadAsset, - unloadModel, - VERBOSITY, -} from "@qvac/sdk"; +import { loadModel, LLAMA_3_2_1B_INST_Q4_0, completion, unloadModel, } from "@qvac/sdk"; try { - // First just cache the model - await downloadAsset({ - assetSrc: LLAMA_3_2_1B_INST_Q4_0, - onProgress: (progress) => { - console.log(progress); - }, - }); - // Then load it in memory from cache - const modelId = await loadModel({ - modelSrc: LLAMA_3_2_1B_INST_Q4_0, - modelType: "llm", - modelConfig: { - device: "gpu", - ctx_size: 2048, - verbosity: VERBOSITY.ERROR, - }, - }); - const history = [ - { - role: "user", - content: "Explain quantum computing in one sentence, use lots of emojis", - }, - ]; - const result = completion({ modelId, history, stream: true }); - for await (const token of result.tokenStream) { - process.stdout.write(token); - } - const stats = await result.stats; - console.log("\nπŸ“Š Performance Stats:", stats); - // Change `clearStorage: true` to delete cached model files - await unloadModel({ modelId, clearStorage: false }); -} catch (error) { - console.error("❌ Error:", error); - process.exit(1); + // Load a model into memory + const modelId = await loadModel({ + modelSrc: LLAMA_3_2_1B_INST_Q4_0, + modelType: "llm", + onProgress: (progress) => { + console.log(progress); + }, + }); + // You can use the loaded model multiple times + const history = [ + { + role: "user", + content: "Explain quantum computing in one sentence", + }, + ]; + const result = completion({ modelId, history, stream: true }); + for await (const token of result.tokenStream) { + process.stdout.write(token); + } + // Unload model to free up system resources + await unloadModel({ modelId }); +} +catch (error) { + console.error("❌ Error:", error); + process.exit(1); } ``` -## Functionalities - -### AI tasks +4. Run the quickstart script: -- Completion: LLM inference via [`llama.cpp`](https://github.com/ggml-org/llama.cpp). -- Transcription: speech-to-text (ASR) via [`whisper.cpp`](https://github.com/ggml-org/whisper.cpp). -- Text embeddings: via `llama.cpp`, for RAG. -- Translation: between different languages. -- Text-to-Speech: TTS via ONNX. -- Multimodal: via [`llama.cpp`] β€” i.e., process and understand multiple types of media within the same conversation context. -- RAG: retrieval-augmented generation with progress streaming, cancellation, and workspace management. -- Delegated inference: perform peer-to-peer edge inference via Holepunch stack. - -### Utilities - -- Configuration: customize SDK behavior via config files (`qvac.config.json`, `.js`, or `.ts`). -- Logging: visibility into what's happening inside your models during loading, inference, and other operations. -- Download Lifecycle: pause and resume model downloads. -- Blind Relays: establish peer connections through NAT/firewalls by routing traffic through relay nodes. -- Sharded models: download a model that is sharded into multiple parts. +```bash +node quickstart.js +``` ## Examples @@ -164,161 +91,27 @@ node dist/examples/path/to/example.js bun run examples/path/to/example.ts ``` -### Completion - -- `llama.cpp` with local files: [`examples/llamacpp-filesystem.ts`](examples/llamacpp-filesystem.ts) -- `llama.cpp` with P2P registry: [`examples/llamacpp-p2p.ts`](examples/llamacpp-p2p.ts) -- `llama.cpp` with HTTP: [`examples/llamacpp-http.ts`](examples/llamacpp-http.ts) -- `llama.cpp` with tools/function calls: [`examples/llamacpp-native-tools.ts`](examples/llamacpp-native-tools.ts) -- `llama.cpp` with multimodal inference: [`examples/llamacpp-multimodal.ts`](examples/llamacpp-multimodal.ts) -- `llama.cpp` with KV cache: [`examples/kv-cache-example.ts`](examples/kv-cache-example.ts) - -### Transcription - -- `whisper.cpp` transcription: [`examples/whispercpp-filesystem.ts`](examples/whispercpp-filesystem.ts) -- Microphone recording: [`examples/whispercpp-microphone-record.ts`](examples/whispercpp-microphone-record.ts) - -### Embeddings - -- Single and batch embeddings: [`examples/embed-p2p.ts`](examples/embed-p2p.ts) - -**RAG with HyperDB** (cross-platform): - -- Ingest (full pipeline): [`examples/rag/rag-hyperdb/ingest.ts`](examples/rag/rag-hyperdb/ingest.ts) -- Segregated pipeline: [`examples/rag/rag-hyperdb/pipeline.ts`](examples/rag/rag-hyperdb/pipeline.ts) _(Segregated flow: chunk β†’ embed β†’ save)_ -- Workspaces: [`examples/rag/rag-hyperdb/workspaces.ts`](examples/rag/rag-hyperdb/workspaces.ts) _(Workspace lifecycle: list, close, delete)_ -- Cancellation: [`examples/rag/rag-hyperdb/cancellation.ts`](examples/rag/rag-hyperdb/cancellation.ts) _(progress + cancel)_ - -**RAG with other backends** (desktop only): - -- LanceDB: [`examples/rag/rag-lancedb.ts`](examples/rag/rag-lancedb.ts) -- ChromaDB: [`examples/rag/rag-chromadb.ts`](examples/rag/rag-chromadb.ts) _(requires ChromaDB server)_ -- SQLite-Vector: [`examples/rag/rag-sqlite.ts`](examples/rag/rag-sqlite.ts) _(SQLite-Vector WASM)_ - -### Translation - -- Marian OPUS translation: [`examples/translation/translation-opus.ts`](examples/translation/translation-opus.ts) -- Indic language translation: [`examples/translation/translation-indic.ts`](examples/translation/translation-indic.ts) -- LLM-based translation: [`examples/translation/translation-llm.ts`](examples/translation/translation-llm.ts) - -### Text-to-Speech - -- TTS (Chatterbox): [`examples/tts/chatterbox.ts`](examples/tts/chatterbox.ts) _(voice cloning with reference audio)_ -- TTS (Supertonic): [`examples/tts/supertonic.ts`](examples/tts/supertonic.ts) _(general-purpose, no voice cloning)_ - -### Multimodel - -- Load multiple models simultaneously: [`examples/multi-model-demo.ts`](examples/multi-model-demo.ts) - -### Delegated inference - -- Provider: [`examples/delegated-inference/provider.ts`](examples/delegated-inference/provider.ts) -- Consumer: [`examples/delegated-inference/consumer.ts`](examples/delegated-inference/consumer.ts) - -> [!TIP] -> Set `QVAC_HYPERSWARM_SEED` env var to ensure that the provider uses the same keypair (i.e., public key doesn't change on every run). - -> [!NOTE] -> Consumer does not handle reconnection yet. - -### Logging - -Stream real-time logs from the SDK server and native addons: - -```ts -import { loggingStream, SDK_LOG_ID } from "@qvac/sdk"; +## Build -// SDK server logs (general operations) -for await (const log of loggingStream({ id: SDK_LOG_ID })) { - console.log(`[${log.level}] ${log.namespace}: ${log.message}`); -} +Use the [Bun](https://bun.sh/) package manager: -// Addon logs per model (llamacpp, whispercpp, etc.) -for await (const log of loggingStream({ id: modelId })) { - console.log(`[${log.level}] ${log.namespace}: ${log.message}`); -} +```bash +bun i ``` -- Log streaming: [`examples/logging-streaming.ts`](examples/logging-streaming.ts) -- Log with custom file transport: [`examples/logging-file-transport.ts`](examples/logging-file-transport.ts) - -### Configuration - -Customize SDK behavior using a config file. The SDK auto-discovers `qvac.config.{json,js,ts}` in your project root, or you can specify a path via `QVAC_CONFIG_PATH` environment variable. - -**Supported formats:** - -- `qvac.config.json` - JSON format -- `qvac.config.js` - JavaScript with `export default` -- `qvac.config.ts` - TypeScript with `export default` - -**Available options:** - -| Option | Type | Default | Description | -| ------------------------- | ---------- | ---------------- | --------------------------------------------------- | -| `cacheDirectory` | `string` | `~/.qvac/models` | Where models and assets are stored | -| `swarmRelays` | `string[]` | `[]` | Hyperswarm relay public keys for P2P | -| `loggerLevel` | `string` | `"info"` | Log level: `"error"`, `"warn"`, `"info"`, `"debug"` | -| `loggerConsoleOutput` | `boolean` | `true` | Enable/disable console output | -| `httpDownloadConcurrency` | `number` | `3` | Max concurrent HTTP downloads for sharded models | -| `httpConnectionTimeoutMs` | `number` | `10000` | HTTP connection timeout in milliseconds | - -- Config usage example: [`examples/default-config-usage.ts`](examples/default-config-usage.ts) - -### Download Lifecycle - -- Pause and resume download: [`examples/download-with-cancel.ts`](examples/download-with-cancel.ts) - -### Blind Relays - -Blind relays help establish peer connections through NAT/firewalls by routing traffic through relay nodes. - -- Model downloads via Hyperdrive: [`examples/download-with-blind-relays.ts`](./examples/download-with-blind-relays.ts) -- Delegated inference: You can reuse the same pattern for delegated inference by adding `swarmRelays` to your config file before starting your provider/consumer. - -> [!NOTE] -> The examples use mock relay keys. For real deployments, you **must** use your own relay servers or trusted public relays. - -### Sharded Models - -Sharded models are split into multiple files following the pattern: `-00001-of-0000X.`. The SDK automatically downloads and loads all parts with detailed progress tracking. - -**Supported formats:** - -- Archives (`.tar`, `.tar.gz`, `.tgz`): HTTP or local with automatic extraction -- HTTP sharded URL: pass the download URL of any shard and the SDK will fetch the remaining shards -- Hyperdrive: use any sharded Hyperdrive model source -- Local shards: pass the path to any shard file. _(Note: All shards must be in the same directory)_ - -See: [`examples/llamacpp-sharded.ts`](examples/llamacpp-sharded.ts) - -## Basic flow - -```mermaid -sequenceDiagram - participant User as User - participant SDK as QVAC SDK - participant RPC as RPC Client (singleton) - participant Worker as Bare Worker (singleton) - - User->>SDK: Call loadModel("llama-3", options) - SDK->>RPC: Create runtime-specific RPC client - RPC->>Worker: Spawn worker (if needed) and send loadModel request - Worker->>Worker: Download and load model into memory - Worker->>RPC: Return success response - RPC->>SDK: Model loaded successfully - SDK->>User: loadModel() resolves with modelId +```bash +bun run build # or `watch` for hotreload ``` -**Note**: The example uses mock relay keys. In real deployments, you **must** use your own relay servers or trusted public relays. - -### Hot Config Reload - -Hot config reload allows you to update model configurations on-the-fly without unloading the model. Pass `modelId` (instead of `modelSrc`) to `loadModel` with the `modelType` and new `modelConfig` to apply changes instantly. +```bash +bun run build:pack +``` -- Config reload using whisper: [`examples/config-reload.ts`](examples/config-reload.ts) +This outputs a tarball under `dist/sdk-{version}.tgz` that you can install in your project, e.g.: -**Note**: Config reload is currently supported for Whisper models. All config parameters except `contextParams` (GPU settings, flash attention) can be hot reloaded. `contextParams` are load-time only and require full model reload. More model types coming soon. +```bash +npm i path/to/sdk-0.3.0.tgz +``` ## Contributing @@ -459,32 +252,3 @@ This will: 4. Generate `changelog//CHANGELOG.md` 5. Generate `changelog//breaking.md` for BC changes (with code examples) 6. Generate `changelog//api.md` for API changes (with code examples) - -**Note:** Requires a GitHub token (`GITHUB_TOKEN` or `GH_TOKEN` environment variable) to fetch PR metadata. - -## Build - -Use the [Bun](https://bun.sh/) package manager: - -```bash -bun i -``` - -```bash -bun run build # or `watch` for hotreload -``` - -```bash -bun run build:pack -``` - -This outputs a tarball under `dist/sdk-{version}.tgz` that you can install in your project, e.g.: - -```bash -npm i path/to/sdk-0.3.0.tgz -``` - -## More Resources - -- [Comprehensive documentation of this SDK](https://qvac.tether.dev/docs/sdk) -- [Package at NPM](https://www.npmjs.com/package/@qvac/sdk) diff --git a/packages/sdk/changelog/0.8.2/CHANGELOG.md b/packages/sdk/changelog/0.8.2/CHANGELOG.md new file mode 100644 index 0000000000..e058add43b --- /dev/null +++ b/packages/sdk/changelog/0.8.2/CHANGELOG.md @@ -0,0 +1,11 @@ +# Changelog v0.8.2 + +Release Date: 2026-04-09 + +## πŸ“˜ Docs + +- Rewrite SDK README with streamlined quickstart and updated documentation links. + +## βš™οΈ Infrastructure + +- Freeze SDK dependency installs in publish and SDK pod CI checks. diff --git a/packages/sdk/changelog/0.8.2/CHANGELOG_LLM.md b/packages/sdk/changelog/0.8.2/CHANGELOG_LLM.md new file mode 100644 index 0000000000..946d4a582f --- /dev/null +++ b/packages/sdk/changelog/0.8.2/CHANGELOG_LLM.md @@ -0,0 +1,26 @@ +# QVAC SDK v0.8.2 Release Notes + +πŸ“¦ **NPM:** https://www.npmjs.com/package/@qvac/sdk/v/0.8.2 + +This is a maintenance release that refreshes the SDK README with a streamlined quickstart guide and updated documentation links pointing to the new docs site at docs.qvac.tether.io. + +--- + +## πŸ“˜ Documentation + +### README Rewrite + +The SDK README has been rewritten to provide a cleaner onboarding experience. The verbose installation, usage, and feature sections have been replaced with a concise quickstart that gets users running in four steps, and all documentation links now point to the new docs site. + +Key changes: + +- **Simplified quickstart** β€” A minimal four-step guide (create workspace, install, write script, run) replaces the previous multi-section setup +- **Updated links** β€” Documentation URLs now point to `docs.qvac.tether.io` instead of `qvac.tether.dev` +- **Support channel** β€” The support link now points to the Discord channel instead of FeatureBase +- **Leaner content** β€” Detailed platform instructions (Expo, Linux), feature lists, and example indexes have been moved to the docs site to keep the README focused + +--- + +## βš™οΈ Infrastructure + +- SDK dependency installs in CI publish and pod check workflows are now frozen to prevent unexpected version drift during builds. diff --git a/packages/sdk/package.json b/packages/sdk/package.json index a7f1b9e5a1..3af9ddd202 100644 --- a/packages/sdk/package.json +++ b/packages/sdk/package.json @@ -1,6 +1,6 @@ { "name": "@qvac/sdk", - "version": "0.8.1", + "version": "0.8.2", "license": "Apache-2.0", "repository": { "type": "git",