@qvac/sdk 0.6.0 → 0.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (278) hide show
  1. package/LICENSE +1 -24
  2. package/NOTICE +632 -0
  3. package/README.md +2 -1
  4. package/dist/client/api/embed.js +1 -4
  5. package/dist/client/api/get-model-info.d.ts +10 -3
  6. package/dist/client/api/index.d.ts +2 -0
  7. package/dist/client/api/index.js +2 -0
  8. package/dist/client/api/invoke-plugin.d.ts +14 -0
  9. package/dist/client/api/invoke-plugin.js +38 -0
  10. package/dist/client/api/registry.d.ts +14 -0
  11. package/dist/client/api/registry.js +37 -0
  12. package/dist/client/api/transcribe.js +0 -4
  13. package/dist/client/api/unload-model.js +1 -1
  14. package/dist/client/config-loader/resolve-config.node.d.ts +3 -2
  15. package/dist/client/config-loader/resolve-config.node.js +31 -4
  16. package/dist/client/init-hooks.js +2 -1
  17. package/dist/client/rpc/bare-client.d.ts +2 -0
  18. package/dist/client/rpc/bare-client.js +48 -7
  19. package/dist/client/rpc/expo-device-info.d.ts +6 -0
  20. package/dist/client/rpc/expo-device-info.js +32 -0
  21. package/dist/client/rpc/expo-rpc-client.js +9 -32
  22. package/dist/client/rpc/node-rpc-client.d.ts +1 -1
  23. package/dist/client/rpc/node-rpc-client.js +201 -28
  24. package/dist/client/rpc/rpc-client.d.ts +1 -1
  25. package/dist/client/rpc/rpc-client.js +2 -2
  26. package/dist/constants/index.d.ts +1 -0
  27. package/dist/constants/index.js +1 -0
  28. package/dist/constants/registry.d.ts +2 -0
  29. package/dist/constants/registry.js +1 -0
  30. package/dist/examples/cache-management.js +2 -2
  31. package/dist/examples/config/plugins/plugins.config.d.ts +5 -0
  32. package/dist/examples/config/plugins/plugins.config.js +4 -0
  33. package/dist/examples/download-with-blind-relays.js +1 -1
  34. package/dist/examples/llamacpp-multimodal.js +3 -3
  35. package/dist/examples/llamacpp-native-tools.js +2 -2
  36. package/dist/examples/mcp-websearch.js +2 -2
  37. package/dist/examples/multi-model-demo.js +2 -2
  38. package/dist/examples/ocr-fasttext.js +4 -4
  39. package/dist/examples/parallel-download.js +2 -2
  40. package/dist/examples/plugins.d.ts +14 -0
  41. package/dist/examples/plugins.js +129 -0
  42. package/dist/examples/registry-query.d.ts +2 -0
  43. package/dist/examples/registry-query.js +87 -0
  44. package/dist/examples/translation/translation-bergamot-batch.js +2 -2
  45. package/dist/examples/translation/translation-bergamot.js +4 -4
  46. package/dist/examples/translation/translation-opus.js +2 -2
  47. package/dist/examples/translation/translation-stream.js +2 -2
  48. package/dist/examples/tts/chatterbox.d.ts +2 -0
  49. package/dist/examples/tts/chatterbox.js +59 -0
  50. package/dist/examples/tts/supertonic.d.ts +2 -0
  51. package/dist/examples/tts/supertonic.js +51 -0
  52. package/dist/examples/tts/utils.d.ts +17 -0
  53. package/dist/examples/tts/utils.js +93 -0
  54. package/dist/examples/whispercpp-filesystem.js +2 -3
  55. package/dist/examples/whispercpp-microphone-record.js +1 -2
  56. package/dist/examples/whispercpp-prompt.js +2 -3
  57. package/dist/expo/plugins/index.d.ts +3 -0
  58. package/dist/expo/plugins/index.js +3 -0
  59. package/dist/expo/plugins/resolve-sdk-package-dir.d.ts +15 -0
  60. package/dist/expo/plugins/resolve-sdk-package-dir.js +31 -0
  61. package/dist/expo/plugins/withAndroidArchitecture.d.ts +8 -0
  62. package/dist/expo/plugins/withAndroidArchitecture.js +52 -0
  63. package/dist/expo/plugins/withAndroidNdkVersion.d.ts +8 -0
  64. package/dist/expo/plugins/withAndroidNdkVersion.js +31 -0
  65. package/dist/expo/plugins/withDeviceInfo.d.ts +10 -0
  66. package/dist/expo/plugins/withDeviceInfo.js +48 -0
  67. package/dist/expo/plugins/withMobileBundle.d.ts +5 -2
  68. package/dist/expo/plugins/withMobileBundle.js +121 -65
  69. package/dist/expo/plugins/withQvacSDK.d.ts +4 -0
  70. package/dist/expo/plugins/withQvacSDK.js +26 -1
  71. package/dist/index.d.ts +4 -4
  72. package/dist/index.js +5 -5
  73. package/dist/models/{hyperdrive → registry}/index.js +1 -1
  74. package/dist/models/registry/models.d.ts +9056 -0
  75. package/dist/models/registry/models.js +9351 -0
  76. package/dist/models/update-models/codegen.d.ts +3 -0
  77. package/dist/models/update-models/codegen.js +135 -0
  78. package/dist/models/update-models/history.d.ts +13 -0
  79. package/dist/models/update-models/history.js +88 -0
  80. package/dist/models/update-models/index.d.ts +2 -0
  81. package/dist/models/update-models/index.js +124 -0
  82. package/dist/models/update-models/naming.d.ts +4 -0
  83. package/dist/models/update-models/naming.js +314 -0
  84. package/dist/models/update-models/processing.d.ts +8 -0
  85. package/dist/models/update-models/processing.js +67 -0
  86. package/dist/models/update-models/registry.d.ts +4 -0
  87. package/dist/models/update-models/registry.js +67 -0
  88. package/dist/models/update-models/shards.d.ts +4 -0
  89. package/dist/models/update-models/shards.js +57 -0
  90. package/dist/models/update-models/types.d.ts +60 -0
  91. package/dist/models/update-models/types.js +1 -0
  92. package/dist/models/update-models/utils.d.ts +3 -0
  93. package/dist/models/update-models/utils.js +21 -0
  94. package/dist/pear/pre.d.ts +18 -0
  95. package/dist/pear/pre.js +433 -0
  96. package/dist/schemas/common.d.ts +286 -32
  97. package/dist/schemas/common.js +12 -0
  98. package/dist/schemas/download-asset.d.ts +35 -11
  99. package/dist/schemas/download-asset.js +5 -1
  100. package/dist/schemas/engine-addon-map.d.ts +5 -0
  101. package/dist/schemas/engine-addon-map.js +49 -0
  102. package/dist/schemas/get-model-info.d.ts +32 -16
  103. package/dist/schemas/get-model-info.js +17 -8
  104. package/dist/schemas/index.d.ts +4 -1
  105. package/dist/schemas/index.js +4 -4
  106. package/dist/schemas/load-model.d.ts +2224 -900
  107. package/dist/schemas/load-model.js +130 -25
  108. package/dist/schemas/model-src-utils.d.ts +30 -12
  109. package/dist/schemas/model-src-utils.js +5 -2
  110. package/dist/schemas/model-types.d.ts +15 -4
  111. package/dist/schemas/model-types.js +21 -4
  112. package/dist/schemas/path-validation.d.ts +10 -0
  113. package/dist/schemas/path-validation.js +22 -0
  114. package/dist/schemas/plugin.d.ts +180 -0
  115. package/dist/schemas/plugin.js +132 -0
  116. package/dist/schemas/rag.d.ts +2 -2
  117. package/dist/schemas/rag.js +7 -3
  118. package/dist/schemas/registry.d.ts +338 -0
  119. package/dist/schemas/registry.js +91 -0
  120. package/dist/schemas/sdk-errors-client.d.ts +6 -6
  121. package/dist/schemas/sdk-errors-client.js +15 -15
  122. package/dist/schemas/sdk-errors-registry.d.ts +6 -0
  123. package/dist/schemas/sdk-errors-registry.js +8 -0
  124. package/dist/schemas/sdk-errors-server.d.ts +16 -2
  125. package/dist/schemas/sdk-errors-server.js +90 -10
  126. package/dist/schemas/text-to-speech.d.ts +670 -1
  127. package/dist/schemas/text-to-speech.js +51 -2
  128. package/dist/schemas/translate.d.ts +2 -2
  129. package/dist/scripts/run-security-tests-bare.d.ts +2 -0
  130. package/dist/scripts/run-security-tests-bare.js +78 -0
  131. package/dist/scripts/run-security-tests.d.ts +2 -0
  132. package/dist/scripts/run-security-tests.js +22 -0
  133. package/dist/server/bare/delegate-rpc-client.d.ts +6 -0
  134. package/dist/server/bare/delegate-rpc-client.js +136 -56
  135. package/dist/server/bare/{addons/llamacpp-embedding/handlers → ops}/embed.d.ts +1 -1
  136. package/dist/server/bare/{addons/llamacpp-embedding/handlers → ops}/embed.js +3 -3
  137. package/dist/server/bare/{addons/llamacpp-completion → ops}/kv-cache-utils.js +6 -6
  138. package/dist/server/bare/{addons → ops}/load-model.js +32 -42
  139. package/dist/server/bare/{addons/nmtcpp-translation/handlers → ops}/translate.d.ts +1 -1
  140. package/dist/server/bare/{addons/nmtcpp-translation/handlers → ops}/translate.js +5 -4
  141. package/dist/server/bare/plugins/index.d.ts +7 -0
  142. package/dist/server/bare/plugins/index.js +6 -0
  143. package/dist/server/bare/{addons/llamacpp-completion → plugins/llamacpp-completion/ops}/cache-logger.js +1 -1
  144. package/dist/server/bare/{addons/llamacpp-completion/handlers → plugins/llamacpp-completion/ops}/completion-stream.d.ts +1 -1
  145. package/dist/server/bare/{addons/llamacpp-completion/handlers → plugins/llamacpp-completion/ops}/completion-stream.js +2 -3
  146. package/dist/server/bare/plugins/llamacpp-completion/plugin.d.ts +115 -0
  147. package/dist/server/bare/plugins/llamacpp-completion/plugin.js +142 -0
  148. package/dist/server/bare/plugins/llamacpp-embedding/plugin.d.ts +24 -0
  149. package/dist/server/bare/plugins/llamacpp-embedding/plugin.js +73 -0
  150. package/dist/server/bare/plugins/nmtcpp-translation/plugin.d.ts +45 -0
  151. package/dist/server/bare/plugins/nmtcpp-translation/plugin.js +97 -0
  152. package/dist/server/bare/{addons/onnx-ocr/handlers → plugins/onnx-ocr/ops}/ocr-stream.js +2 -1
  153. package/dist/server/bare/plugins/onnx-ocr/plugin.d.ts +38 -0
  154. package/dist/server/bare/{addons/onnx-ocr/create-model.js → plugins/onnx-ocr/plugin.js} +39 -2
  155. package/dist/server/bare/{addons/onnx-tts/handlers → plugins/onnx-tts/ops}/text-to-speech.js +23 -1
  156. package/dist/server/bare/plugins/onnx-tts/plugin.d.ts +26 -0
  157. package/dist/server/bare/plugins/onnx-tts/plugin.js +162 -0
  158. package/dist/server/bare/plugins/onnx-tts/wav-helper.d.ts +14 -0
  159. package/dist/server/bare/plugins/onnx-tts/wav-helper.js +107 -0
  160. package/dist/server/bare/plugins/whispercpp-transcription/ops/transcribe-stream.d.ts +3 -0
  161. package/dist/server/bare/{addons/whispercpp-transcription/handlers → plugins/whispercpp-transcription/ops}/transcribe-stream.js +1 -2
  162. package/dist/server/bare/plugins/whispercpp-transcription/plugin.d.ts +31 -0
  163. package/dist/server/bare/plugins/whispercpp-transcription/plugin.js +74 -0
  164. package/dist/server/bare/rag-hyperdb/handlers/ingest.js +1 -1
  165. package/dist/server/bare/rag-hyperdb/handlers/search.js +1 -1
  166. package/dist/server/bare/rag-hyperdb/rag-workspace-manager.js +2 -1
  167. package/dist/server/bare/registry/config-registry.js +1 -1
  168. package/dist/server/bare/registry/model-config-utils.js +0 -11
  169. package/dist/server/bare/registry/registry-client.d.ts +5 -0
  170. package/dist/server/bare/registry/registry-client.js +37 -0
  171. package/dist/server/env.d.ts +22 -0
  172. package/dist/server/env.js +57 -0
  173. package/dist/server/plugins/index.d.ts +2 -0
  174. package/dist/server/plugins/index.js +1 -0
  175. package/dist/server/plugins/registry.d.ts +9 -0
  176. package/dist/server/plugins/registry.js +75 -0
  177. package/dist/server/rpc/delegate-transport.d.ts +11 -0
  178. package/dist/server/rpc/delegate-transport.js +60 -0
  179. package/dist/server/rpc/handle-request.d.ts +0 -9
  180. package/dist/server/rpc/handle-request.js +13 -321
  181. package/dist/server/rpc/handler-registry.d.ts +3 -0
  182. package/dist/server/rpc/handler-registry.js +84 -0
  183. package/dist/server/rpc/handler-utils.d.ts +22 -0
  184. package/dist/server/rpc/handler-utils.js +87 -0
  185. package/dist/server/rpc/handlers/cancelHandler.js +1 -1
  186. package/dist/server/rpc/handlers/completion-stream-delegated.js +1 -1
  187. package/dist/server/rpc/handlers/completion-stream.js +2 -43
  188. package/dist/server/rpc/handlers/delete-cache.js +1 -1
  189. package/dist/server/rpc/handlers/embed.js +2 -21
  190. package/dist/server/rpc/handlers/get-model-info.js +19 -15
  191. package/dist/server/rpc/handlers/index.d.ts +9 -0
  192. package/dist/server/rpc/handlers/index.js +9 -0
  193. package/dist/server/rpc/handlers/load-model/download-manager.d.ts +1 -0
  194. package/dist/server/rpc/handlers/load-model/download-manager.js +3 -0
  195. package/dist/server/rpc/handlers/load-model/handler.js +47 -24
  196. package/dist/server/rpc/handlers/load-model/http.js +3 -2
  197. package/dist/server/rpc/handlers/load-model/hyperdrive.js +14 -10
  198. package/dist/server/rpc/handlers/load-model/registry.d.ts +10 -0
  199. package/dist/server/rpc/handlers/load-model/registry.js +571 -0
  200. package/dist/server/rpc/handlers/load-model/resolve.js +18 -5
  201. package/dist/server/rpc/handlers/load-model-delegated.js +4 -2
  202. package/dist/server/rpc/handlers/ocr-stream.js +2 -37
  203. package/dist/server/rpc/handlers/ping.d.ts +3 -0
  204. package/dist/server/rpc/handlers/ping.js +3 -0
  205. package/dist/server/rpc/handlers/plugin-dispatch.d.ts +15 -0
  206. package/dist/server/rpc/handlers/plugin-dispatch.js +54 -0
  207. package/dist/server/rpc/handlers/plugin-invoke.d.ts +4 -0
  208. package/dist/server/rpc/handlers/plugin-invoke.js +87 -0
  209. package/dist/server/rpc/handlers/registry.d.ts +5 -0
  210. package/dist/server/rpc/handlers/registry.js +157 -0
  211. package/dist/server/rpc/handlers/text-to-speech.js +2 -5
  212. package/dist/server/rpc/handlers/transcribe-stream.js +2 -30
  213. package/dist/server/rpc/handlers/translate.js +2 -42
  214. package/dist/server/rpc/handlers/unload-model.js +1 -1
  215. package/dist/server/rpc/index.d.ts +1 -1
  216. package/dist/server/utils/archive.d.ts +1 -0
  217. package/dist/server/utils/archive.js +10 -2
  218. package/dist/server/utils/cache.d.ts +5 -0
  219. package/dist/server/utils/cache.js +26 -2
  220. package/dist/server/utils/gguf-tensor-extractor.js +3 -3
  221. package/dist/server/utils/index.d.ts +1 -1
  222. package/dist/server/utils/index.js +1 -1
  223. package/dist/server/utils/path-security.d.ts +12 -0
  224. package/dist/server/utils/path-security.js +25 -0
  225. package/dist/server/utils/shard-utils.js +3 -3
  226. package/dist/server/worker-core.d.ts +6 -0
  227. package/dist/server/worker-core.js +88 -0
  228. package/dist/server/worker.d.ts +4 -5
  229. package/dist/server/worker.js +18 -116
  230. package/dist/utils/errors-client.d.ts +9 -6
  231. package/dist/utils/errors-client.js +19 -11
  232. package/dist/utils/errors-server.d.ts +44 -5
  233. package/dist/utils/errors-server.js +82 -9
  234. package/dist/utils/path-sanitize.d.ts +17 -0
  235. package/dist/utils/path-sanitize.js +54 -0
  236. package/expo/plugins/patches/android-link.mjs +63 -0
  237. package/expo/plugins/patches/ios-link.mjs +63 -0
  238. package/package.json +74 -12
  239. package/dist/examples/text-to-speech.d.ts +0 -3
  240. package/dist/examples/text-to-speech.js +0 -137
  241. package/dist/models/hyperdrive/models.d.ts +0 -4003
  242. package/dist/models/hyperdrive/models.js +0 -4282
  243. package/dist/server/bare/addons/index.d.ts +0 -4
  244. package/dist/server/bare/addons/index.js +0 -3
  245. package/dist/server/bare/addons/llamacpp-completion/create-model.d.ts +0 -8
  246. package/dist/server/bare/addons/llamacpp-completion/create-model.js +0 -43
  247. package/dist/server/bare/addons/llamacpp-completion/index.d.ts +0 -4
  248. package/dist/server/bare/addons/llamacpp-completion/index.js +0 -3
  249. package/dist/server/bare/addons/llamacpp-embedding/create-model.d.ts +0 -8
  250. package/dist/server/bare/addons/llamacpp-embedding/create-model.js +0 -38
  251. package/dist/server/bare/addons/llamacpp-embedding/index.d.ts +0 -3
  252. package/dist/server/bare/addons/llamacpp-embedding/index.js +0 -2
  253. package/dist/server/bare/addons/nmtcpp-translation/create-model.d.ts +0 -8
  254. package/dist/server/bare/addons/nmtcpp-translation/create-model.js +0 -52
  255. package/dist/server/bare/addons/nmtcpp-translation/index.d.ts +0 -3
  256. package/dist/server/bare/addons/nmtcpp-translation/index.js +0 -2
  257. package/dist/server/bare/addons/onnx-ocr/create-model.d.ts +0 -10
  258. package/dist/server/bare/addons/onnx-ocr/index.d.ts +0 -3
  259. package/dist/server/bare/addons/onnx-ocr/index.js +0 -2
  260. package/dist/server/bare/addons/onnx-tts/create-model.d.ts +0 -10
  261. package/dist/server/bare/addons/onnx-tts/create-model.js +0 -25
  262. package/dist/server/bare/addons/onnx-tts/index.d.ts +0 -3
  263. package/dist/server/bare/addons/onnx-tts/index.js +0 -2
  264. package/dist/server/bare/addons/whispercpp-transcription/create-model.d.ts +0 -10
  265. package/dist/server/bare/addons/whispercpp-transcription/create-model.js +0 -37
  266. package/dist/server/bare/addons/whispercpp-transcription/handlers/transcribe-stream.d.ts +0 -3
  267. package/dist/server/bare/addons/whispercpp-transcription/index.d.ts +0 -3
  268. package/dist/server/bare/addons/whispercpp-transcription/index.js +0 -2
  269. /package/dist/models/{hyperdrive → registry}/index.d.ts +0 -0
  270. /package/dist/server/bare/{addons → ops}/cancel.d.ts +0 -0
  271. /package/dist/server/bare/{addons → ops}/cancel.js +0 -0
  272. /package/dist/server/bare/{addons/llamacpp-completion → ops}/kv-cache-utils.d.ts +0 -0
  273. /package/dist/server/bare/{addons → ops}/load-model.d.ts +0 -0
  274. /package/dist/server/bare/{addons → ops}/unload-model.d.ts +0 -0
  275. /package/dist/server/bare/{addons → ops}/unload-model.js +0 -0
  276. /package/dist/server/bare/{addons/llamacpp-completion → plugins/llamacpp-completion/ops}/cache-logger.d.ts +0 -0
  277. /package/dist/server/bare/{addons/onnx-ocr/handlers → plugins/onnx-ocr/ops}/ocr-stream.d.ts +0 -0
  278. /package/dist/server/bare/{addons/onnx-tts/handlers → plugins/onnx-tts/ops}/text-to-speech.d.ts +0 -0
@@ -0,0 +1,63 @@
1
+ /**
2
+ * Patched android/link.mjs for manifest-aware native addon linking.
3
+ *
4
+ * If qvac/addons.manifest.json exists, only links the allowlisted addons.
5
+ * Otherwise, falls back to linking all installed addons.
6
+ *
7
+ * This file is copied over react-native-bare-kit/android/link.mjs
8
+ * by withMobileBundle.ts during expo prebuild.
9
+ */
10
+ import fs from "fs";
11
+ import path from "path";
12
+ import { fileURLToPath } from "url";
13
+ import link from "bare-link";
14
+
15
+ const __dirname = path.dirname(fileURLToPath(import.meta.url));
16
+ const projectRoot = path.join(__dirname, "..", "..", "..");
17
+ const addonsDir = path.join(__dirname, "src", "main", "addons");
18
+
19
+ if (fs.existsSync(addonsDir)) {
20
+ console.log("[QVAC] Cleaning existing addons directory...");
21
+ fs.rmSync(addonsDir, { recursive: true, force: true });
22
+ }
23
+
24
+ const manifestPath = path.join(projectRoot, "qvac", "addons.manifest.json");
25
+
26
+ let pkg = null;
27
+ if (fs.existsSync(manifestPath)) {
28
+ try {
29
+ const manifest = JSON.parse(fs.readFileSync(manifestPath, "utf8"));
30
+ const addons = Array.isArray(manifest.addons) ? manifest.addons : [];
31
+
32
+ if (addons.length > 0) {
33
+ console.log(
34
+ `[QVAC] Using addons manifest (${addons.length} addons): ${addons.join(", ")}`,
35
+ );
36
+ pkg = {
37
+ name: "qvac-addon-linker",
38
+ version: "0.0.0",
39
+ dependencies: Object.fromEntries(addons.map((name) => [name, "*"])),
40
+ };
41
+ } else {
42
+ console.log("[QVAC] Addons manifest is empty, linking all addons");
43
+ }
44
+ } catch (err) {
45
+ console.warn(
46
+ "[QVAC] Failed to parse addons manifest, linking all addons:",
47
+ err.message,
48
+ );
49
+ }
50
+ } else {
51
+ console.log("[QVAC] No addons manifest found, linking all addons");
52
+ }
53
+
54
+ for await (const resource of link(
55
+ projectRoot,
56
+ {
57
+ target: ["android-arm64", "android-arm", "android-ia32", "android-x64"],
58
+ out: addonsDir,
59
+ },
60
+ pkg,
61
+ )) {
62
+ console.log("Wrote", resource);
63
+ }
@@ -0,0 +1,63 @@
1
+ /**
2
+ * Patched ios/link.mjs for manifest-aware native addon linking.
3
+ *
4
+ * If qvac/addons.manifest.json exists, only links the allowlisted addons.
5
+ * Otherwise, falls back to linking all installed addons.
6
+ *
7
+ * This file is copied over react-native-bare-kit/ios/link.mjs
8
+ * by withMobileBundle.ts during expo prebuild.
9
+ */
10
+ import fs from "fs";
11
+ import path from "path";
12
+ import { fileURLToPath } from "url";
13
+ import link from "bare-link";
14
+
15
+ const __dirname = path.dirname(fileURLToPath(import.meta.url));
16
+ const projectRoot = path.join(__dirname, "..", "..", "..");
17
+ const addonsDir = path.join(__dirname, "addons");
18
+
19
+ if (fs.existsSync(addonsDir)) {
20
+ console.log("[QVAC] Cleaning existing addons directory...");
21
+ fs.rmSync(addonsDir, { recursive: true, force: true });
22
+ }
23
+
24
+ const manifestPath = path.join(projectRoot, "qvac", "addons.manifest.json");
25
+
26
+ let pkg = null;
27
+ if (fs.existsSync(manifestPath)) {
28
+ try {
29
+ const manifest = JSON.parse(fs.readFileSync(manifestPath, "utf8"));
30
+ const addons = Array.isArray(manifest.addons) ? manifest.addons : [];
31
+
32
+ if (addons.length > 0) {
33
+ console.log(
34
+ `[QVAC] Using addons manifest (${addons.length} addons): ${addons.join(", ")}`,
35
+ );
36
+ pkg = {
37
+ name: "qvac-addon-linker",
38
+ version: "0.0.0",
39
+ dependencies: Object.fromEntries(addons.map((name) => [name, "*"])),
40
+ };
41
+ } else {
42
+ console.log("[QVAC] Addons manifest is empty, linking all addons");
43
+ }
44
+ } catch (err) {
45
+ console.warn(
46
+ "[QVAC] Failed to parse addons manifest, linking all addons:",
47
+ err.message,
48
+ );
49
+ }
50
+ } else {
51
+ console.log("[QVAC] No addons manifest found, linking all addons");
52
+ }
53
+
54
+ for await (const resource of link(
55
+ projectRoot,
56
+ {
57
+ target: ["ios-arm64", "ios-arm64-simulator", "ios-x64-simulator"],
58
+ out: addonsDir,
59
+ },
60
+ pkg,
61
+ )) {
62
+ console.log("Wrote", resource);
63
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@qvac/sdk",
3
- "version": "0.6.0",
3
+ "version": "0.7.0",
4
4
  "license": "Apache-2.0",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -16,9 +16,46 @@
16
16
  "import": "./dist/server/worker.js",
17
17
  "require": "./dist/server/worker.js"
18
18
  },
19
+ "./llamacpp-completion/plugin": {
20
+ "types": "./dist/server/bare/plugins/llamacpp-completion/plugin.d.ts",
21
+ "import": "./dist/server/bare/plugins/llamacpp-completion/plugin.js"
22
+ },
23
+ "./llamacpp-embedding/plugin": {
24
+ "types": "./dist/server/bare/plugins/llamacpp-embedding/plugin.d.ts",
25
+ "import": "./dist/server/bare/plugins/llamacpp-embedding/plugin.js"
26
+ },
27
+ "./whispercpp-transcription/plugin": {
28
+ "types": "./dist/server/bare/plugins/whispercpp-transcription/plugin.d.ts",
29
+ "import": "./dist/server/bare/plugins/whispercpp-transcription/plugin.js"
30
+ },
31
+ "./nmtcpp-translation/plugin": {
32
+ "types": "./dist/server/bare/plugins/nmtcpp-translation/plugin.d.ts",
33
+ "import": "./dist/server/bare/plugins/nmtcpp-translation/plugin.js"
34
+ },
35
+ "./onnx-tts/plugin": {
36
+ "types": "./dist/server/bare/plugins/onnx-tts/plugin.d.ts",
37
+ "import": "./dist/server/bare/plugins/onnx-tts/plugin.js"
38
+ },
39
+ "./onnx-ocr/plugin": {
40
+ "types": "./dist/server/bare/plugins/onnx-ocr/plugin.d.ts",
41
+ "import": "./dist/server/bare/plugins/onnx-ocr/plugin.js"
42
+ },
43
+ "./plugin-utils": {
44
+ "types": "./dist/schemas/plugin.d.ts",
45
+ "import": "./dist/schemas/plugin.js"
46
+ },
19
47
  "./expo-plugin": "./dist/expo/plugins/index.js",
20
48
  "./worker.mobile.bundle": "./dist/worker.mobile.bundle.js",
21
- "./models": "./dist/models/hyperdrive/models.js"
49
+ "./worker-core": {
50
+ "import": "./dist/server/worker-core.js"
51
+ },
52
+ "./plugins": {
53
+ "import": "./dist/server/plugins/index.js"
54
+ },
55
+ "./logging": {
56
+ "import": "./dist/logging/index.js"
57
+ },
58
+ "./pear-pre": "./dist/pear/pre.js"
22
59
  },
23
60
  "imports": {
24
61
  "#rpc": {
@@ -35,14 +72,19 @@
35
72
  "files": [
36
73
  "bare-imports.json",
37
74
  "dist/**/*",
75
+ "expo/plugins/patches/**/*",
38
76
  "!dist/**/*.map",
39
77
  "!**/package-lock.json",
40
78
  "!**/yarn.lock",
41
79
  "!**/pnpm-lock.yaml",
42
- "!**/bun.lock"
80
+ "!**/bun.lock",
81
+ "LICENSE",
82
+ "NOTICE"
43
83
  ],
44
84
  "scripts": {
45
85
  "test:unit": "bun run scripts/run-unit-tests.ts",
86
+ "test:security": "bun run scripts/run-security-tests.ts",
87
+ "test:security:bare": "bun run scripts/run-security-tests-bare.ts",
46
88
  "lint": "eslint . --max-warnings=0 && bun run typecheck",
47
89
  "typecheck": "tsc --noEmit -p tsconfig.json",
48
90
  "lint:fix": "eslint . --fix",
@@ -61,26 +103,27 @@
61
103
  "docs_api:website": "typedoc --out ./docs/api/website --entryPoints index.ts --entryPointStrategy expand --readme none",
62
104
  "docs_api:markdown": "typedoc --plugin typedoc-plugin-markdown --out ./docs/api/markdown --entryPoints index.ts --entryPointStrategy expand --readme none && sed -i '1,4d' ./docs/api/markdown/README.md",
63
105
  "docs_api": "bun run docs_api:website && bun run docs_api:markdown",
64
- "check-models": "node ./scripts/update-models.js --check",
65
- "check-models:hook": "node ./scripts/update-models.js --check --non-blocking",
66
- "update-models": "node ./scripts/update-models.js",
67
- "changelog:generate": "node ./scripts/changelog-generate.cjs && prettier --write changelog",
106
+ "check-models": "tsx ./models/update-models/index.ts --check",
107
+ "check-models:hook": "tsx ./models/update-models/index.ts --check --non-blocking",
108
+ "update-models": "tsx ./models/update-models/index.ts",
109
+ "changelog:generate": "node ../../scripts/sdk/generate-changelog-sdk-pod.cjs --package=qvac-sdk && prettier --write changelog",
68
110
  "docs:gen-pages": "remark \"docs/*.mdx\" --output .docs-build",
69
111
  "docs:gen-api": "typedoc --options docs/typedoc.jsonc"
70
112
  },
71
113
  "dependencies": {
72
114
  "@qvac/decoder-audio": "^0.3.3",
73
115
  "@qvac/dl-filesystem": "^0.2.0",
74
- "@qvac/embed-llamacpp": "^0.10.3",
116
+ "@qvac/embed-llamacpp": "^0.10.7",
75
117
  "@qvac/error": "^0.1.1",
76
118
  "@qvac/langdetect-text": "^0.1.0",
77
- "@qvac/llm-llamacpp": "^0.8.5",
119
+ "@qvac/llm-llamacpp": "^0.8.9",
78
120
  "@qvac/logging": "^0.1.0",
79
121
  "@qvac/ocr-onnx": "^0.1.5",
80
122
  "@qvac/rag": "^0.4.2",
81
123
  "@qvac/transcription-whispercpp": "^0.3.17",
82
- "@qvac/translation-nmtcpp": "^0.3.6",
83
- "@qvac/tts-onnx": "^0.2.13",
124
+ "@qvac/translation-nmtcpp": "^0.3.9",
125
+ "@qvac/tts-onnx": "^0.5.4",
126
+ "@qvac/registry-client": "^0.2.0",
84
127
  "fast-safe-stringify": "2.1.1",
85
128
  "which-runtime": "^1.3.2",
86
129
  "zod": "^4.0.17"
@@ -90,10 +133,11 @@
90
133
  "@expo/config-plugins": "^54.0.1",
91
134
  "@lancedb/lancedb": "^0.21.3",
92
135
  "@modelcontextprotocol/sdk": "^1.12.1",
136
+ "@qvac/cli": "^0.1.3",
93
137
  "@sqliteai/sqlite-wasm": "3.50.4-sync.0.8.30-vector.0.9.23",
94
138
  "@types/node": "^24.2.1",
95
139
  "@types/tar-stream": "^3.1.4",
96
- "bare-pack": "^1.5.1",
140
+ "bare-pack": "^2.0.0",
97
141
  "bare-readline": "^1.2.0",
98
142
  "brittle": "^3.19.1",
99
143
  "chromadb": "^3.0.14",
@@ -107,12 +151,14 @@
107
151
  "globals": "^16.3.0",
108
152
  "husky": "^9.1.7",
109
153
  "hyperdb": "^4.16.1",
154
+ "pear-pipe": "^1.0.6",
110
155
  "prettier": "^3.6.2",
111
156
  "react-native-bare-kit": "^0.11.5",
112
157
  "remark-cli": "^12.0.1",
113
158
  "remark-code-import": "^1.2.0",
114
159
  "remark-frontmatter": "^5.0.0",
115
160
  "remark-mdx": "^3.1.1",
161
+ "tsx": "^4.21.0",
116
162
  "typedoc": "^0.28.11",
117
163
  "typedoc-plugin-frontmatter": "^1.3.1",
118
164
  "typedoc-plugin-markdown": "^4.8.1",
@@ -121,6 +167,7 @@
121
167
  },
122
168
  "peerDependencies": {
123
169
  "@modelcontextprotocol/sdk": "^1.0.0",
170
+ "@qvac/cli": "^0.1.2",
124
171
  "bare-abort-controller": "^1.0.0",
125
172
  "bare-buffer": "^3.4.2",
126
173
  "bare-crypto": "^1.11.2",
@@ -139,21 +186,30 @@
139
186
  "bare-stream": "^2.7.0",
140
187
  "bare-subprocess": "^5.2.1",
141
188
  "bare-zlib": "^1.3.1",
189
+ "compact-encoding": "^2.19.0",
142
190
  "corestore": "^7.4.5",
143
191
  "events": "^3.3.0",
192
+ "expo-build-properties": ">=0.12.0",
144
193
  "expo-device": "^8.0.0",
145
194
  "expo-file-system": "^19.0.15",
146
195
  "hyperdb": "^4.19.0",
147
196
  "hyperdrive": "^13.0.1",
148
197
  "hyperswarm": "^4.12.1",
149
198
  "llm-splitter": "~0.2.0",
199
+ "pear-pipe": "^1.0.6",
150
200
  "react-native-bare-kit": "^0.11.5",
151
201
  "tar-stream": "^3.1.7"
152
202
  },
153
203
  "peerDependenciesMeta": {
204
+ "@qvac/cli": {
205
+ "optional": true
206
+ },
154
207
  "@modelcontextprotocol/sdk": {
155
208
  "optional": true
156
209
  },
210
+ "expo-build-properties": {
211
+ "optional": true
212
+ },
157
213
  "expo-device": {
158
214
  "optional": true
159
215
  },
@@ -162,6 +218,12 @@
162
218
  },
163
219
  "react-native-bare-kit": {
164
220
  "optional": true
221
+ },
222
+ "compact-encoding": {
223
+ "optional": true
224
+ },
225
+ "pear-pipe": {
226
+ "optional": true
165
227
  }
166
228
  },
167
229
  "patchedDependencies": {},
@@ -1,3 +0,0 @@
1
- export declare function createWav(audioBuffer: number[], sampleRate?: number, filename?: string): void;
2
- export declare function playAudio(audioBuffer: Buffer): void;
3
- //# sourceMappingURL=text-to-speech.d.ts.map
@@ -1,137 +0,0 @@
1
- import { loadModel, textToSpeech, unloadModel, TTS_PIPER_NORMAN_EN_US_ONNX_MEDIUM, TTS_PIPER_NORMAN_EN_US_ONNX_MEDIUM_CONFIG, } from "@qvac/sdk";
2
- import { writeFileSync, unlinkSync } from "fs";
3
- import { spawnSync } from "child_process";
4
- import { platform } from "os";
5
- // Get eSpeakDataPath from command line arguments or use default
6
- const eSpeakDataPath = process.argv[2];
7
- console.log(`Using eSpeak data path: ${eSpeakDataPath}`);
8
- if (!eSpeakDataPath) {
9
- console.error("eSpeakDataPath is required");
10
- process.exit(1);
11
- }
12
- try {
13
- const modelId = await loadModel({
14
- modelSrc: TTS_PIPER_NORMAN_EN_US_ONNX_MEDIUM,
15
- modelType: "tts",
16
- configSrc: TTS_PIPER_NORMAN_EN_US_ONNX_MEDIUM_CONFIG,
17
- eSpeakDataPath,
18
- modelConfig: {
19
- language: "en",
20
- },
21
- onProgress: (progress) => {
22
- console.log(progress);
23
- },
24
- });
25
- console.log(`Model loaded: ${modelId}`);
26
- // Test TTS
27
- console.log("🎵 Testing Text-to-Speech...");
28
- const result = textToSpeech({
29
- modelId,
30
- text: `QVAC SDK is the canonical entry point to QVAC. 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. Supported JS environments include Bare, Node.js, Expo and Bun.`,
31
- inputType: "text",
32
- stream: false,
33
- });
34
- const audioBuffer = await result.buffer;
35
- console.log(`TTS complete. Total bytes: ${audioBuffer.length}`);
36
- // Save and play audio
37
- console.log("💾 Saving audio to file...");
38
- createWav(audioBuffer, 22050, "tts-output.wav");
39
- console.log("✅ Audio saved to tts-output.wav");
40
- console.log("🔊 Playing audio...");
41
- const audioData = int16ArrayToBuffer(audioBuffer);
42
- const wavBuffer = Buffer.concat([
43
- createWavHeader(audioData.length),
44
- audioData,
45
- ]);
46
- playAudio(wavBuffer);
47
- console.log("✅ Audio playback complete");
48
- // Unload the model
49
- await unloadModel({ modelId });
50
- console.log("Model unloaded");
51
- }
52
- catch (error) {
53
- console.error("❌ Error:", error);
54
- process.exit(1);
55
- }
56
- // Function to create WAV header for 16-bit PCM audio
57
- function createWavHeader(dataLength, sampleRate = 22050) {
58
- const header = Buffer.alloc(44);
59
- // RIFF header
60
- header.write("RIFF", 0);
61
- header.writeUInt32LE(36 + dataLength, 4);
62
- header.write("WAVE", 8);
63
- // fmt chunk
64
- header.write("fmt ", 12);
65
- header.writeUInt32LE(16, 16); // fmt chunk size
66
- header.writeUInt16LE(1, 20); // PCM format
67
- header.writeUInt16LE(1, 22); // mono
68
- header.writeUInt32LE(sampleRate, 24);
69
- header.writeUInt32LE(sampleRate * 2, 28); // byte rate
70
- header.writeUInt16LE(2, 32); // block align
71
- header.writeUInt16LE(16, 34); // bits per sample
72
- // data chunk
73
- header.write("data", 36);
74
- header.writeUInt32LE(dataLength, 40);
75
- return header;
76
- }
77
- // Function to convert Int16Array to Buffer
78
- function int16ArrayToBuffer(int16Array) {
79
- const buffer = Buffer.alloc(int16Array.length * 2);
80
- for (let i = 0; i < int16Array.length; i++) {
81
- const value = int16Array[i] ?? 0;
82
- buffer.writeInt16LE(value, i * 2);
83
- }
84
- return buffer;
85
- }
86
- // Function to create and save WAV file (similar to reference implementation)
87
- export function createWav(audioBuffer, sampleRate = 22050, filename = "output.wav") {
88
- const audioData = int16ArrayToBuffer(audioBuffer);
89
- const wavHeader = createWavHeader(audioData.length, sampleRate);
90
- const wavFile = Buffer.concat([wavHeader, audioData]);
91
- writeFileSync(filename, wavFile);
92
- console.log(`WAV file saved as: ${filename}`);
93
- }
94
- // Function to play audio using system audio players
95
- export function playAudio(audioBuffer) {
96
- const currentPlatform = platform();
97
- const tempFile = `/tmp/audio-${Date.now()}.wav`;
98
- // Write audio buffer to temporary file
99
- writeFileSync(tempFile, audioBuffer);
100
- let audioPlayer;
101
- let args;
102
- switch (currentPlatform) {
103
- case "darwin":
104
- audioPlayer = "afplay";
105
- args = [tempFile];
106
- break;
107
- case "linux":
108
- audioPlayer = "aplay";
109
- args = [tempFile];
110
- break;
111
- case "win32":
112
- audioPlayer = "powershell";
113
- args = [
114
- "-Command",
115
- `Add-Type -AssemblyName presentationCore; (New-Object Media.SoundPlayer).LoadStream([System.IO.File]::ReadAllBytes('${tempFile}')).PlaySync()`,
116
- ];
117
- break;
118
- default:
119
- audioPlayer = "aplay";
120
- args = [tempFile];
121
- }
122
- const result = spawnSync(audioPlayer, args, {
123
- stdio: ["inherit", "inherit", "inherit"],
124
- });
125
- try {
126
- unlinkSync(tempFile);
127
- }
128
- catch {
129
- // Ignore cleanup errors
130
- }
131
- if (result.error) {
132
- throw new Error(`Audio player failed: ${result.error.message}`);
133
- }
134
- if (result.status !== 0) {
135
- throw new Error(`Audio player exited with code ${result.status}`);
136
- }
137
- }