@qvac/core 0.0.0 → 0.1.1

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 (589) hide show
  1. package/LICENSE.md +198 -0
  2. package/NOTICE.md +13 -0
  3. package/README.md +694 -0
  4. package/SECURITY.md +6 -0
  5. package/dist/assistant.bundle +47257 -0
  6. package/dist/assistant.cjs +18 -0
  7. package/dist/assistant.d.ts +8 -0
  8. package/dist/prebuilds-manifest.json +380 -0
  9. package/dist-lib/client.d.ts +2 -0
  10. package/dist-lib/client.js +1 -0
  11. package/dist-lib/index.d.ts +13 -0
  12. package/dist-lib/index.js +10 -0
  13. package/dist-lib/lib/agent-icons.d.ts +3 -0
  14. package/dist-lib/lib/agent-icons.js +1 -0
  15. package/dist-lib/lib/api/agents.d.ts +5 -0
  16. package/dist-lib/lib/api/agents.js +38 -0
  17. package/dist-lib/lib/api/app-config.d.ts +5 -0
  18. package/dist-lib/lib/api/app-config.js +108 -0
  19. package/dist-lib/lib/api/approval-rules.d.ts +3 -0
  20. package/dist-lib/lib/api/approval-rules.js +9 -0
  21. package/dist-lib/lib/api/attachments.d.ts +8 -0
  22. package/dist-lib/lib/api/attachments.js +15 -0
  23. package/dist-lib/lib/api/chat-groups.d.ts +5 -0
  24. package/dist-lib/lib/api/chat-groups.js +12 -0
  25. package/dist-lib/lib/api/chat.d.ts +5 -0
  26. package/dist-lib/lib/api/chat.js +38 -0
  27. package/dist-lib/lib/api/chunks.d.ts +5 -0
  28. package/dist-lib/lib/api/chunks.js +61 -0
  29. package/dist-lib/lib/api/config.d.ts +5 -0
  30. package/dist-lib/lib/api/config.js +15 -0
  31. package/dist-lib/lib/api/current-mesh.d.ts +5 -0
  32. package/dist-lib/lib/api/current-mesh.js +12 -0
  33. package/dist-lib/lib/api/custom-models.d.ts +5 -0
  34. package/dist-lib/lib/api/custom-models.js +45 -0
  35. package/dist-lib/lib/api/devices.d.ts +8 -0
  36. package/dist-lib/lib/api/devices.js +125 -0
  37. package/dist-lib/lib/api/diagnostics.d.ts +7 -0
  38. package/dist-lib/lib/api/diagnostics.js +7 -0
  39. package/dist-lib/lib/api/effective-ctx-size.d.ts +2 -0
  40. package/dist-lib/lib/api/effective-ctx-size.js +10 -0
  41. package/dist-lib/lib/api/execution.d.ts +3 -0
  42. package/dist-lib/lib/api/execution.js +45 -0
  43. package/dist-lib/lib/api/files.d.ts +3 -0
  44. package/dist-lib/lib/api/files.js +48 -0
  45. package/dist-lib/lib/api/index.d.ts +62 -0
  46. package/dist-lib/lib/api/index.js +172 -0
  47. package/dist-lib/lib/api/instrument.d.ts +2 -0
  48. package/dist-lib/lib/api/instrument.js +86 -0
  49. package/dist-lib/lib/api/knowledge.d.ts +8 -0
  50. package/dist-lib/lib/api/knowledge.js +26 -0
  51. package/dist-lib/lib/api/logs.d.ts +14 -0
  52. package/dist-lib/lib/api/logs.js +116 -0
  53. package/dist-lib/lib/api/mesh.d.ts +13 -0
  54. package/dist-lib/lib/api/mesh.js +25 -0
  55. package/dist-lib/lib/api/model-download.d.ts +5 -0
  56. package/dist-lib/lib/api/model-download.js +47 -0
  57. package/dist-lib/lib/api/network.d.ts +8 -0
  58. package/dist-lib/lib/api/network.js +6 -0
  59. package/dist-lib/lib/api/notifications.d.ts +21 -0
  60. package/dist-lib/lib/api/notifications.js +108 -0
  61. package/dist-lib/lib/api/rag.d.ts +7 -0
  62. package/dist-lib/lib/api/rag.js +216 -0
  63. package/dist-lib/lib/api/sync.d.ts +3 -0
  64. package/dist-lib/lib/api/sync.js +6 -0
  65. package/dist-lib/lib/api/tool-activity.d.ts +5 -0
  66. package/dist-lib/lib/api/tool-activity.js +53 -0
  67. package/dist-lib/lib/api/tool-configs.d.ts +6 -0
  68. package/dist-lib/lib/api/tool-configs.js +27 -0
  69. package/dist-lib/lib/api/watchable.d.ts +12 -0
  70. package/dist-lib/lib/api/watchable.js +121 -0
  71. package/dist-lib/lib/assistant-client.d.ts +21 -0
  72. package/dist-lib/lib/assistant-client.js +52 -0
  73. package/dist-lib/lib/assistant-tree.d.ts +50 -0
  74. package/dist-lib/lib/assistant-tree.js +184 -0
  75. package/dist-lib/lib/assistant.d.ts +425 -0
  76. package/dist-lib/lib/assistant.js +2706 -0
  77. package/dist-lib/lib/audio-format.d.ts +4 -0
  78. package/dist-lib/lib/audio-format.js +4 -0
  79. package/dist-lib/lib/chat-title.d.ts +5 -0
  80. package/dist-lib/lib/chat-title.js +58 -0
  81. package/dist-lib/lib/client.d.ts +25 -0
  82. package/dist-lib/lib/client.js +53 -0
  83. package/dist-lib/lib/collabora/convert.d.ts +9 -0
  84. package/dist-lib/lib/collabora/convert.js +62 -0
  85. package/dist-lib/lib/collabora/entry.d.ts +1 -0
  86. package/dist-lib/lib/collabora/entry.js +44 -0
  87. package/dist-lib/lib/collabora/protocol.d.ts +15 -0
  88. package/dist-lib/lib/collabora/protocol.js +24 -0
  89. package/dist-lib/lib/collabora/worker.d.ts +5 -0
  90. package/dist-lib/lib/collabora/worker.js +111 -0
  91. package/dist-lib/lib/compaction.d.ts +30 -0
  92. package/dist-lib/lib/compaction.js +95 -0
  93. package/dist-lib/lib/constants.d.ts +4 -0
  94. package/dist-lib/lib/constants.js +4 -0
  95. package/dist-lib/lib/core/agent.d.ts +15 -0
  96. package/dist-lib/lib/core/agent.js +149 -0
  97. package/dist-lib/lib/core/app-build.d.ts +7 -0
  98. package/dist-lib/lib/core/app-build.js +1 -0
  99. package/dist-lib/lib/core/approval-rules.d.ts +15 -0
  100. package/dist-lib/lib/core/approval-rules.js +41 -0
  101. package/dist-lib/lib/core/async-iterable.d.ts +13 -0
  102. package/dist-lib/lib/core/async-iterable.js +65 -0
  103. package/dist-lib/lib/core/attachment-link.d.ts +7 -0
  104. package/dist-lib/lib/core/attachment-link.js +6 -0
  105. package/dist-lib/lib/core/audio-attachment.d.ts +1 -0
  106. package/dist-lib/lib/core/audio-attachment.js +4 -0
  107. package/dist-lib/lib/core/blind-peers.d.ts +6 -0
  108. package/dist-lib/lib/core/blind-peers.js +13 -0
  109. package/dist-lib/lib/core/chat-activity.d.ts +7 -0
  110. package/dist-lib/lib/core/chat-activity.js +244 -0
  111. package/dist-lib/lib/core/chat-group.d.ts +14 -0
  112. package/dist-lib/lib/core/chat-group.js +79 -0
  113. package/dist-lib/lib/core/chat-search.d.ts +17 -0
  114. package/dist-lib/lib/core/chat-search.js +199 -0
  115. package/dist-lib/lib/core/chat.d.ts +37 -0
  116. package/dist-lib/lib/core/chat.js +196 -0
  117. package/dist-lib/lib/core/chunk.d.ts +61 -0
  118. package/dist-lib/lib/core/chunk.js +212 -0
  119. package/dist-lib/lib/core/contract/activity.d.ts +11 -0
  120. package/dist-lib/lib/core/contract/activity.js +45 -0
  121. package/dist-lib/lib/core/contract/agents.d.ts +2 -0
  122. package/dist-lib/lib/core/contract/agents.js +29 -0
  123. package/dist-lib/lib/core/contract/approval-rules.d.ts +2 -0
  124. package/dist-lib/lib/core/contract/approval-rules.js +14 -0
  125. package/dist-lib/lib/core/contract/attestations.d.ts +2 -0
  126. package/dist-lib/lib/core/contract/attestations.js +14 -0
  127. package/dist-lib/lib/core/contract/chat-group.d.ts +2 -0
  128. package/dist-lib/lib/core/contract/chat-group.js +20 -0
  129. package/dist-lib/lib/core/contract/chat.d.ts +2 -0
  130. package/dist-lib/lib/core/contract/chat.js +18 -0
  131. package/dist-lib/lib/core/contract/chunks.d.ts +2 -0
  132. package/dist-lib/lib/core/contract/chunks.js +156 -0
  133. package/dist-lib/lib/core/contract/devices.d.ts +2 -0
  134. package/dist-lib/lib/core/contract/devices.js +110 -0
  135. package/dist-lib/lib/core/contract/index.d.ts +2 -0
  136. package/dist-lib/lib/core/contract/index.js +30 -0
  137. package/dist-lib/lib/core/contract/indexing.d.ts +4 -0
  138. package/dist-lib/lib/core/contract/indexing.js +82 -0
  139. package/dist-lib/lib/core/contract/knowledge.d.ts +2 -0
  140. package/dist-lib/lib/core/contract/knowledge.js +55 -0
  141. package/dist-lib/lib/core/contract/members.d.ts +2 -0
  142. package/dist-lib/lib/core/contract/members.js +96 -0
  143. package/dist-lib/lib/core/contract/seed-defaults.d.ts +2 -0
  144. package/dist-lib/lib/core/contract/seed-defaults.js +29 -0
  145. package/dist-lib/lib/core/contract/tool-activity.d.ts +2 -0
  146. package/dist-lib/lib/core/contract/tool-activity.js +25 -0
  147. package/dist-lib/lib/core/contract/tool-configs.d.ts +2 -0
  148. package/dist-lib/lib/core/contract/tool-configs.js +50 -0
  149. package/dist-lib/lib/core/contract/types.d.ts +11 -0
  150. package/dist-lib/lib/core/contract/types.js +1 -0
  151. package/dist-lib/lib/core/contract/writers.d.ts +2 -0
  152. package/dist-lib/lib/core/contract/writers.js +112 -0
  153. package/dist-lib/lib/core/cpu-info-node.d.ts +3 -0
  154. package/dist-lib/lib/core/cpu-info-node.js +2 -0
  155. package/dist-lib/lib/core/departures.d.ts +41 -0
  156. package/dist-lib/lib/core/departures.js +145 -0
  157. package/dist-lib/lib/core/device-attestation.d.ts +6 -0
  158. package/dist-lib/lib/core/device-attestation.js +12 -0
  159. package/dist-lib/lib/core/devices.d.ts +14 -0
  160. package/dist-lib/lib/core/devices.js +11 -0
  161. package/dist-lib/lib/core/document-attachment.d.ts +22 -0
  162. package/dist-lib/lib/core/document-attachment.js +35 -0
  163. package/dist-lib/lib/core/files/attachments.d.ts +8 -0
  164. package/dist-lib/lib/core/files/attachments.js +50 -0
  165. package/dist-lib/lib/core/files/index.d.ts +133 -0
  166. package/dist-lib/lib/core/files/index.js +585 -0
  167. package/dist-lib/lib/core/files/knowledge.d.ts +9 -0
  168. package/dist-lib/lib/core/files/knowledge.js +31 -0
  169. package/dist-lib/lib/core/files/preview/image.d.ts +4 -0
  170. package/dist-lib/lib/core/files/preview/image.js +42 -0
  171. package/dist-lib/lib/core/files/preview/index.d.ts +33 -0
  172. package/dist-lib/lib/core/files/preview/index.js +161 -0
  173. package/dist-lib/lib/core/files/processing/claims.d.ts +26 -0
  174. package/dist-lib/lib/core/files/processing/claims.js +89 -0
  175. package/dist-lib/lib/core/files/processing/document.d.ts +100 -0
  176. package/dist-lib/lib/core/files/processing/document.js +101 -0
  177. package/dist-lib/lib/core/files/processing/index.d.ts +75 -0
  178. package/dist-lib/lib/core/files/processing/index.js +295 -0
  179. package/dist-lib/lib/core/files/processing/ownership.d.ts +11 -0
  180. package/dist-lib/lib/core/files/processing/ownership.js +41 -0
  181. package/dist-lib/lib/core/files/processing/protocol.d.ts +29 -0
  182. package/dist-lib/lib/core/files/processing/protocol.js +70 -0
  183. package/dist-lib/lib/core/files/processing/settle.d.ts +10 -0
  184. package/dist-lib/lib/core/files/processing/settle.js +75 -0
  185. package/dist-lib/lib/core/files/processing/source.d.ts +36 -0
  186. package/dist-lib/lib/core/files/processing/source.js +96 -0
  187. package/dist-lib/lib/core/files/processing/state.d.ts +64 -0
  188. package/dist-lib/lib/core/files/processing/state.js +118 -0
  189. package/dist-lib/lib/core/files/rag/artifact/codec.d.ts +3 -0
  190. package/dist-lib/lib/core/files/rag/artifact/codec.js +172 -0
  191. package/dist-lib/lib/core/files/rag/artifact/id.d.ts +10 -0
  192. package/dist-lib/lib/core/files/rag/artifact/id.js +39 -0
  193. package/dist-lib/lib/core/files/rag/artifact/types.d.ts +24 -0
  194. package/dist-lib/lib/core/files/rag/artifact/types.js +41 -0
  195. package/dist-lib/lib/core/files/rag/build.d.ts +25 -0
  196. package/dist-lib/lib/core/files/rag/build.js +60 -0
  197. package/dist-lib/lib/core/files/rag/chunk/chunking.d.ts +12 -0
  198. package/dist-lib/lib/core/files/rag/chunk/chunking.js +117 -0
  199. package/dist-lib/lib/core/files/rag/chunk/metadata.d.ts +30 -0
  200. package/dist-lib/lib/core/files/rag/chunk/metadata.js +89 -0
  201. package/dist-lib/lib/core/files/rag/chunk/tokenizer.d.ts +7 -0
  202. package/dist-lib/lib/core/files/rag/chunk/tokenizer.js +18 -0
  203. package/dist-lib/lib/core/files/rag/document-types.d.ts +11 -0
  204. package/dist-lib/lib/core/files/rag/document-types.js +94 -0
  205. package/dist-lib/lib/core/files/rag/extract/csv-text.d.ts +1 -0
  206. package/dist-lib/lib/core/files/rag/extract/csv-text.js +117 -0
  207. package/dist-lib/lib/core/files/rag/extract/document-types.d.ts +22 -0
  208. package/dist-lib/lib/core/files/rag/extract/document-types.js +152 -0
  209. package/dist-lib/lib/core/files/rag/extract/extract.d.ts +17 -0
  210. package/dist-lib/lib/core/files/rag/extract/extract.js +81 -0
  211. package/dist-lib/lib/core/files/rag/extract/html-table-text.d.ts +1 -0
  212. package/dist-lib/lib/core/files/rag/extract/html-table-text.js +125 -0
  213. package/dist-lib/lib/core/files/rag/extract/html-text.d.ts +1 -0
  214. package/dist-lib/lib/core/files/rag/extract/html-text.js +132 -0
  215. package/dist-lib/lib/core/files/rag/extract/office-collabora.d.ts +2 -0
  216. package/dist-lib/lib/core/files/rag/extract/office-collabora.js +8 -0
  217. package/dist-lib/lib/core/files/rag/extract/pdf-platform.d.ts +17 -0
  218. package/dist-lib/lib/core/files/rag/extract/pdf-platform.js +141 -0
  219. package/dist-lib/lib/core/files/rag/extract/pdf-text.d.ts +12 -0
  220. package/dist-lib/lib/core/files/rag/extract/pdf-text.js +43 -0
  221. package/dist-lib/lib/core/files/rag/extract/rtf-text.d.ts +1 -0
  222. package/dist-lib/lib/core/files/rag/extract/rtf-text.js +15 -0
  223. package/dist-lib/lib/core/files/rag/extract/text-decoding.d.ts +1 -0
  224. package/dist-lib/lib/core/files/rag/extract/text-decoding.js +91 -0
  225. package/dist-lib/lib/core/files/rag/extract/types.d.ts +36 -0
  226. package/dist-lib/lib/core/files/rag/extract/types.js +12 -0
  227. package/dist-lib/lib/core/files/rag/extract/utf.d.ts +2 -0
  228. package/dist-lib/lib/core/files/rag/extract/utf.js +18 -0
  229. package/dist-lib/lib/core/files/rag/index.d.ts +54 -0
  230. package/dist-lib/lib/core/files/rag/index.js +79 -0
  231. package/dist-lib/lib/core/files/rag/limits.d.ts +2 -0
  232. package/dist-lib/lib/core/files/rag/limits.js +2 -0
  233. package/dist-lib/lib/core/files/rag/load.d.ts +28 -0
  234. package/dist-lib/lib/core/files/rag/load.js +250 -0
  235. package/dist-lib/lib/core/files/rag/models.d.ts +1 -0
  236. package/dist-lib/lib/core/files/rag/models.js +1 -0
  237. package/dist-lib/lib/core/files/rag/policy.d.ts +2 -0
  238. package/dist-lib/lib/core/files/rag/policy.js +23 -0
  239. package/dist-lib/lib/core/files/rag/produce.d.ts +21 -0
  240. package/dist-lib/lib/core/files/rag/produce.js +214 -0
  241. package/dist-lib/lib/core/files/rag/retrieval/citation-match.d.ts +2 -0
  242. package/dist-lib/lib/core/files/rag/retrieval/citation-match.js +16 -0
  243. package/dist-lib/lib/core/files/rag/retrieval/coverage.d.ts +4 -0
  244. package/dist-lib/lib/core/files/rag/retrieval/coverage.js +48 -0
  245. package/dist-lib/lib/core/files/rag/retrieval/diversity.d.ts +10 -0
  246. package/dist-lib/lib/core/files/rag/retrieval/diversity.js +37 -0
  247. package/dist-lib/lib/core/files/rag/retrieval/floor.d.ts +5 -0
  248. package/dist-lib/lib/core/files/rag/retrieval/floor.js +21 -0
  249. package/dist-lib/lib/core/files/rag/retrieval/format.d.ts +6 -0
  250. package/dist-lib/lib/core/files/rag/retrieval/format.js +21 -0
  251. package/dist-lib/lib/core/files/rag/retrieval/full-text.d.ts +22 -0
  252. package/dist-lib/lib/core/files/rag/retrieval/full-text.js +137 -0
  253. package/dist-lib/lib/core/files/rag/retrieval/knowledge.d.ts +2 -0
  254. package/dist-lib/lib/core/files/rag/retrieval/knowledge.js +53 -0
  255. package/dist-lib/lib/core/files/rag/retrieval/notices.d.ts +16 -0
  256. package/dist-lib/lib/core/files/rag/retrieval/notices.js +27 -0
  257. package/dist-lib/lib/core/files/rag/retrieval/scoring.d.ts +8 -0
  258. package/dist-lib/lib/core/files/rag/retrieval/scoring.js +82 -0
  259. package/dist-lib/lib/core/files/rag/retrieval/search.d.ts +3 -0
  260. package/dist-lib/lib/core/files/rag/retrieval/search.js +46 -0
  261. package/dist-lib/lib/core/files/rag/retrieval/selection.d.ts +10 -0
  262. package/dist-lib/lib/core/files/rag/retrieval/selection.js +63 -0
  263. package/dist-lib/lib/core/files/rag/retrieval/source-tag-filter.d.ts +6 -0
  264. package/dist-lib/lib/core/files/rag/retrieval/source-tag-filter.js +79 -0
  265. package/dist-lib/lib/core/files/rag/retrieval/sources.d.ts +13 -0
  266. package/dist-lib/lib/core/files/rag/retrieval/sources.js +20 -0
  267. package/dist-lib/lib/core/files/rag/retrieval/target.d.ts +13 -0
  268. package/dist-lib/lib/core/files/rag/retrieval/target.js +89 -0
  269. package/dist-lib/lib/core/files/rag/retrieval/terms.d.ts +8 -0
  270. package/dist-lib/lib/core/files/rag/retrieval/terms.js +70 -0
  271. package/dist-lib/lib/core/files/rag/retrieval/types.d.ts +28 -0
  272. package/dist-lib/lib/core/files/rag/retrieval/types.js +1 -0
  273. package/dist-lib/lib/core/files/rag/retrieval/web-sources.d.ts +8 -0
  274. package/dist-lib/lib/core/files/rag/retrieval/web-sources.js +41 -0
  275. package/dist-lib/lib/core/files/rag/retrieval/whole-document-query.d.ts +1 -0
  276. package/dist-lib/lib/core/files/rag/retrieval/whole-document-query.js +96 -0
  277. package/dist-lib/lib/core/files/rag/vector/memory.d.ts +15 -0
  278. package/dist-lib/lib/core/files/rag/vector/memory.js +135 -0
  279. package/dist-lib/lib/core/files/rag/vector/types.d.ts +28 -0
  280. package/dist-lib/lib/core/files/rag/vector/types.js +1 -0
  281. package/dist-lib/lib/core/files/records/chunks.d.ts +3 -0
  282. package/dist-lib/lib/core/files/records/chunks.js +12 -0
  283. package/dist-lib/lib/core/files/records/index.d.ts +10 -0
  284. package/dist-lib/lib/core/files/records/index.js +8 -0
  285. package/dist-lib/lib/core/files/records/knowledge.d.ts +22 -0
  286. package/dist-lib/lib/core/files/records/knowledge.js +105 -0
  287. package/dist-lib/lib/core/files/records/linkage.d.ts +11 -0
  288. package/dist-lib/lib/core/files/records/linkage.js +27 -0
  289. package/dist-lib/lib/core/files/records/output.d.ts +8 -0
  290. package/dist-lib/lib/core/files/records/output.js +38 -0
  291. package/dist-lib/lib/core/files/records/reclaim.d.ts +5 -0
  292. package/dist-lib/lib/core/files/records/reclaim.js +73 -0
  293. package/dist-lib/lib/core/files/records/routing.d.ts +23 -0
  294. package/dist-lib/lib/core/files/records/routing.js +62 -0
  295. package/dist-lib/lib/core/files/records/source.d.ts +16 -0
  296. package/dist-lib/lib/core/files/records/source.js +70 -0
  297. package/dist-lib/lib/core/files/records/sweep.d.ts +2 -0
  298. package/dist-lib/lib/core/files/records/sweep.js +30 -0
  299. package/dist-lib/lib/core/files/store/blob.d.ts +29 -0
  300. package/dist-lib/lib/core/files/store/blob.js +98 -0
  301. package/dist-lib/lib/core/files/store/index.d.ts +36 -0
  302. package/dist-lib/lib/core/files/store/index.js +89 -0
  303. package/dist-lib/lib/core/files/store/inline.d.ts +8 -0
  304. package/dist-lib/lib/core/files/store/inline.js +38 -0
  305. package/dist-lib/lib/core/files/store/reference.d.ts +27 -0
  306. package/dist-lib/lib/core/files/store/reference.js +168 -0
  307. package/dist-lib/lib/core/files/store/server.d.ts +27 -0
  308. package/dist-lib/lib/core/files/store/server.js +114 -0
  309. package/dist-lib/lib/core/files/store/sweep.d.ts +2 -0
  310. package/dist-lib/lib/core/files/store/sweep.js +45 -0
  311. package/dist-lib/lib/core/files/upload-input.d.ts +27 -0
  312. package/dist-lib/lib/core/files/upload-input.js +52 -0
  313. package/dist-lib/lib/core/files/upload.d.ts +32 -0
  314. package/dist-lib/lib/core/files/upload.js +201 -0
  315. package/dist-lib/lib/core/fs-drives.d.ts +18 -0
  316. package/dist-lib/lib/core/fs-drives.js +58 -0
  317. package/dist-lib/lib/core/gpu-info-node.d.ts +3 -0
  318. package/dist-lib/lib/core/gpu-info-node.js +2 -0
  319. package/dist-lib/lib/core/handoff-channel.d.ts +46 -0
  320. package/dist-lib/lib/core/handoff-channel.js +102 -0
  321. package/dist-lib/lib/core/health-assistant.d.ts +7 -0
  322. package/dist-lib/lib/core/health-assistant.js +24 -0
  323. package/dist-lib/lib/core/helpers/index.d.ts +5 -0
  324. package/dist-lib/lib/core/helpers/index.js +74 -0
  325. package/dist-lib/lib/core/hosted-agents.d.ts +36 -0
  326. package/dist-lib/lib/core/hosted-agents.js +127 -0
  327. package/dist-lib/lib/core/id.d.ts +1 -0
  328. package/dist-lib/lib/core/id.js +5 -0
  329. package/dist-lib/lib/core/identity.d.ts +14 -0
  330. package/dist-lib/lib/core/identity.js +45 -0
  331. package/dist-lib/lib/core/image/cache-sweep.d.ts +12 -0
  332. package/dist-lib/lib/core/image/cache-sweep.js +67 -0
  333. package/dist-lib/lib/core/image/normalize.d.ts +3 -0
  334. package/dist-lib/lib/core/image/normalize.js +49 -0
  335. package/dist-lib/lib/core/image/sniff.d.ts +3 -0
  336. package/dist-lib/lib/core/image/sniff.js +149 -0
  337. package/dist-lib/lib/core/invite.d.ts +14 -0
  338. package/dist-lib/lib/core/invite.js +36 -0
  339. package/dist-lib/lib/core/local/index.d.ts +71 -0
  340. package/dist-lib/lib/core/local/index.js +391 -0
  341. package/dist-lib/lib/core/membership.d.ts +15 -0
  342. package/dist-lib/lib/core/membership.js +40 -0
  343. package/dist-lib/lib/core/mesh.d.ts +153 -0
  344. package/dist-lib/lib/core/mesh.js +509 -0
  345. package/dist-lib/lib/core/migrations/agent-catalog.d.ts +6 -0
  346. package/dist-lib/lib/core/migrations/agent-catalog.js +17 -0
  347. package/dist-lib/lib/core/migrations/index.d.ts +5 -0
  348. package/dist-lib/lib/core/migrations/index.js +7 -0
  349. package/dist-lib/lib/core/migrations/membership.d.ts +11 -0
  350. package/dist-lib/lib/core/migrations/membership.js +26 -0
  351. package/dist-lib/lib/core/min-version.d.ts +6 -0
  352. package/dist-lib/lib/core/min-version.js +31 -0
  353. package/dist-lib/lib/core/next-frame.d.ts +6 -0
  354. package/dist-lib/lib/core/next-frame.js +27 -0
  355. package/dist-lib/lib/core/notification.d.ts +6 -0
  356. package/dist-lib/lib/core/notification.js +162 -0
  357. package/dist-lib/lib/core/ota-config.d.ts +19 -0
  358. package/dist-lib/lib/core/ota-config.js +44 -0
  359. package/dist-lib/lib/core/prompt-history.d.ts +12 -0
  360. package/dist-lib/lib/core/prompt-history.js +40 -0
  361. package/dist-lib/lib/core/search-fold.d.ts +1 -0
  362. package/dist-lib/lib/core/search-fold.js +4 -0
  363. package/dist-lib/lib/core/secret-handoff.d.ts +17 -0
  364. package/dist-lib/lib/core/secret-handoff.js +29 -0
  365. package/dist-lib/lib/core/send.d.ts +18 -0
  366. package/dist-lib/lib/core/send.js +46 -0
  367. package/dist-lib/lib/core/skill-overlay-handoff.d.ts +25 -0
  368. package/dist-lib/lib/core/skill-overlay-handoff.js +50 -0
  369. package/dist-lib/lib/core/skill-overlay-receiver.d.ts +8 -0
  370. package/dist-lib/lib/core/skill-overlay-receiver.js +20 -0
  371. package/dist-lib/lib/core/skill-secrets.d.ts +25 -0
  372. package/dist-lib/lib/core/skill-secrets.js +79 -0
  373. package/dist-lib/lib/core/sync/chats.d.ts +3 -0
  374. package/dist-lib/lib/core/sync/chats.js +5 -0
  375. package/dist-lib/lib/core/sync/chunks.d.ts +9 -0
  376. package/dist-lib/lib/core/sync/chunks.js +16 -0
  377. package/dist-lib/lib/core/sync/devices.d.ts +4 -0
  378. package/dist-lib/lib/core/sync/devices.js +12 -0
  379. package/dist-lib/lib/core/sync/files.d.ts +16 -0
  380. package/dist-lib/lib/core/sync/files.js +109 -0
  381. package/dist-lib/lib/core/sync/index.d.ts +5 -0
  382. package/dist-lib/lib/core/sync/index.js +63 -0
  383. package/dist-lib/lib/core/sync-status.d.ts +17 -0
  384. package/dist-lib/lib/core/sync-status.js +129 -0
  385. package/dist-lib/lib/core/system-info.d.ts +24 -0
  386. package/dist-lib/lib/core/system-info.js +66 -0
  387. package/dist-lib/lib/core/tool-activity.d.ts +22 -0
  388. package/dist-lib/lib/core/tool-activity.js +39 -0
  389. package/dist-lib/lib/core/tool-configs.d.ts +13 -0
  390. package/dist-lib/lib/core/tool-configs.js +141 -0
  391. package/dist-lib/lib/core.d.ts +291 -0
  392. package/dist-lib/lib/core.js +2126 -0
  393. package/dist-lib/lib/credential-pusher.d.ts +67 -0
  394. package/dist-lib/lib/credential-pusher.js +290 -0
  395. package/dist-lib/lib/custom-model-pusher.d.ts +9 -0
  396. package/dist-lib/lib/custom-model-pusher.js +42 -0
  397. package/dist-lib/lib/custom-model-source.d.ts +15 -0
  398. package/dist-lib/lib/custom-model-source.js +46 -0
  399. package/dist-lib/lib/deadline.d.ts +9 -0
  400. package/dist-lib/lib/deadline.js +31 -0
  401. package/dist-lib/lib/diagnostics.d.ts +35 -0
  402. package/dist-lib/lib/diagnostics.js +14 -0
  403. package/dist-lib/lib/fetch-node.d.ts +1 -0
  404. package/dist-lib/lib/fetch-node.js +1 -0
  405. package/dist-lib/lib/fs-drive-bridge.d.ts +12 -0
  406. package/dist-lib/lib/fs-drive-bridge.js +186 -0
  407. package/dist-lib/lib/fs-grant-keys.d.ts +2 -0
  408. package/dist-lib/lib/fs-grant-keys.js +6 -0
  409. package/dist-lib/lib/fs-grants.d.ts +10 -0
  410. package/dist-lib/lib/fs-grants.js +44 -0
  411. package/dist-lib/lib/image-cache-dir.d.ts +1 -0
  412. package/dist-lib/lib/image-cache-dir.js +5 -0
  413. package/dist-lib/lib/integrations/index.d.ts +4 -0
  414. package/dist-lib/lib/integrations/index.js +3 -0
  415. package/dist-lib/lib/integrations/mcp-providers.d.ts +12 -0
  416. package/dist-lib/lib/integrations/mcp-providers.js +22 -0
  417. package/dist-lib/lib/integrations/oauth-providers.d.ts +14 -0
  418. package/dist-lib/lib/integrations/oauth-providers.js +116 -0
  419. package/dist-lib/lib/integrations/setup-routes.d.ts +12 -0
  420. package/dist-lib/lib/integrations/setup-routes.js +114 -0
  421. package/dist-lib/lib/knowledge-search.d.ts +7 -0
  422. package/dist-lib/lib/knowledge-search.js +53 -0
  423. package/dist-lib/lib/kv-cache-reclaim.d.ts +5 -0
  424. package/dist-lib/lib/kv-cache-reclaim.js +29 -0
  425. package/dist-lib/lib/kv-cache.d.ts +18 -0
  426. package/dist-lib/lib/kv-cache.js +33 -0
  427. package/dist-lib/lib/legacy-core-domain.d.ts +258 -0
  428. package/dist-lib/lib/legacy-core-domain.js +1 -0
  429. package/dist-lib/lib/llm-model-names.d.ts +1 -0
  430. package/dist-lib/lib/llm-model-names.js +1 -0
  431. package/dist-lib/lib/log-buffer.d.ts +7 -0
  432. package/dist-lib/lib/log-buffer.js +16 -0
  433. package/dist-lib/lib/log-levels.d.ts +7 -0
  434. package/dist-lib/lib/log-levels.js +1 -0
  435. package/dist-lib/lib/log.d.ts +60 -0
  436. package/dist-lib/lib/log.js +149 -0
  437. package/dist-lib/lib/logger-type.d.ts +13 -0
  438. package/dist-lib/lib/logger-type.js +1 -0
  439. package/dist-lib/lib/logger.d.ts +5 -0
  440. package/dist-lib/lib/logger.js +18 -0
  441. package/dist-lib/lib/model-catalog-revision.d.ts +9 -0
  442. package/dist-lib/lib/model-catalog-revision.js +65 -0
  443. package/dist-lib/lib/model-clamp.d.ts +6 -0
  444. package/dist-lib/lib/model-clamp.js +20 -0
  445. package/dist-lib/lib/model-context.d.ts +13 -0
  446. package/dist-lib/lib/model-context.js +71 -0
  447. package/dist-lib/lib/model-download-status.d.ts +29 -0
  448. package/dist-lib/lib/model-download-status.js +56 -0
  449. package/dist-lib/lib/model-download.d.ts +191 -0
  450. package/dist-lib/lib/model-download.js +787 -0
  451. package/dist-lib/lib/oauth/asana.d.ts +35 -0
  452. package/dist-lib/lib/oauth/asana.js +71 -0
  453. package/dist-lib/lib/oauth/browser-connect.d.ts +22 -0
  454. package/dist-lib/lib/oauth/browser-connect.js +83 -0
  455. package/dist-lib/lib/oauth/client.d.ts +9 -0
  456. package/dist-lib/lib/oauth/client.js +9 -0
  457. package/dist-lib/lib/oauth/common.d.ts +38 -0
  458. package/dist-lib/lib/oauth/common.js +36 -0
  459. package/dist-lib/lib/oauth/crypto.d.ts +3 -0
  460. package/dist-lib/lib/oauth/crypto.js +25 -0
  461. package/dist-lib/lib/oauth/fetch-platform.d.ts +1 -0
  462. package/dist-lib/lib/oauth/fetch-platform.js +1 -0
  463. package/dist-lib/lib/oauth/flow-core.d.ts +6 -0
  464. package/dist-lib/lib/oauth/flow-core.js +37 -0
  465. package/dist-lib/lib/oauth/flow.d.ts +3 -0
  466. package/dist-lib/lib/oauth/flow.js +24 -0
  467. package/dist-lib/lib/oauth/google.d.ts +37 -0
  468. package/dist-lib/lib/oauth/google.js +77 -0
  469. package/dist-lib/lib/oauth/host.d.ts +5 -0
  470. package/dist-lib/lib/oauth/host.js +3 -0
  471. package/dist-lib/lib/oauth/keys.d.ts +25 -0
  472. package/dist-lib/lib/oauth/keys.js +93 -0
  473. package/dist-lib/lib/oauth/loopback.d.ts +3 -0
  474. package/dist-lib/lib/oauth/loopback.js +119 -0
  475. package/dist-lib/lib/oauth/loopback.stub.d.ts +3 -0
  476. package/dist-lib/lib/oauth/loopback.stub.js +6 -0
  477. package/dist-lib/lib/oauth/notion.d.ts +34 -0
  478. package/dist-lib/lib/oauth/notion.js +82 -0
  479. package/dist-lib/lib/oauth/pkce-runtime.d.ts +3 -0
  480. package/dist-lib/lib/oauth/pkce-runtime.js +5 -0
  481. package/dist-lib/lib/oauth/pkce.d.ts +8 -0
  482. package/dist-lib/lib/oauth/pkce.js +6 -0
  483. package/dist-lib/lib/oauth/providers.d.ts +5 -0
  484. package/dist-lib/lib/oauth/providers.js +73 -0
  485. package/dist-lib/lib/oauth/redirect-types.d.ts +19 -0
  486. package/dist-lib/lib/oauth/redirect-types.js +1 -0
  487. package/dist-lib/lib/oauth/register.d.ts +3 -0
  488. package/dist-lib/lib/oauth/register.js +34 -0
  489. package/dist-lib/lib/oauth/resolve.d.ts +17 -0
  490. package/dist-lib/lib/oauth/resolve.js +57 -0
  491. package/dist-lib/lib/oauth/spotify.d.ts +32 -0
  492. package/dist-lib/lib/oauth/spotify.js +73 -0
  493. package/dist-lib/lib/oauth/token-exchange-core.d.ts +6 -0
  494. package/dist-lib/lib/oauth/token-exchange-core.js +97 -0
  495. package/dist-lib/lib/oauth/token-exchange.d.ts +5 -0
  496. package/dist-lib/lib/oauth/token-exchange.js +9 -0
  497. package/dist-lib/lib/oauth/types.d.ts +54 -0
  498. package/dist-lib/lib/oauth/types.js +1 -0
  499. package/dist-lib/lib/oauth.client.d.ts +5 -0
  500. package/dist-lib/lib/oauth.client.js +2 -0
  501. package/dist-lib/lib/oauth.d.ts +14 -0
  502. package/dist-lib/lib/oauth.js +12 -0
  503. package/dist-lib/lib/obsidian-key.d.ts +1 -0
  504. package/dist-lib/lib/obsidian-key.js +1 -0
  505. package/dist-lib/lib/race-resource.d.ts +5 -0
  506. package/dist-lib/lib/race-resource.js +25 -0
  507. package/dist-lib/lib/reconnecting-watch.d.ts +2 -0
  508. package/dist-lib/lib/reconnecting-watch.js +78 -0
  509. package/dist-lib/lib/retry-budget.d.ts +14 -0
  510. package/dist-lib/lib/retry-budget.js +39 -0
  511. package/dist-lib/lib/run-notices.d.ts +23 -0
  512. package/dist-lib/lib/run-notices.js +33 -0
  513. package/dist-lib/lib/run-transcript.d.ts +35 -0
  514. package/dist-lib/lib/run-transcript.js +106 -0
  515. package/dist-lib/lib/skill-readiness.d.ts +2 -0
  516. package/dist-lib/lib/skill-readiness.js +21 -0
  517. package/dist-lib/lib/skill-types.d.ts +70 -0
  518. package/dist-lib/lib/skill-types.js +1 -0
  519. package/dist-lib/lib/spec-loader.d.ts +14 -0
  520. package/dist-lib/lib/spec-loader.js +9 -0
  521. package/dist-lib/lib/suspend-lifecycle.d.ts +17 -0
  522. package/dist-lib/lib/suspend-lifecycle.js +33 -0
  523. package/dist-lib/lib/task.d.ts +26 -0
  524. package/dist-lib/lib/task.js +69 -0
  525. package/dist-lib/lib/unref.d.ts +3 -0
  526. package/dist-lib/lib/unref.js +4 -0
  527. package/dist-lib/lib/wav-duration.d.ts +1 -0
  528. package/dist-lib/lib/wav-duration.js +53 -0
  529. package/dist-lib/lib/write-queue.d.ts +22 -0
  530. package/dist-lib/lib/write-queue.js +39 -0
  531. package/dist-lib/schema/build.d.ts +1 -0
  532. package/dist-lib/schema/build.js +120 -0
  533. package/dist-lib/schema/config.d.ts +4 -0
  534. package/dist-lib/schema/config.js +7 -0
  535. package/dist-lib/schema/content.d.ts +20 -0
  536. package/dist-lib/schema/content.js +122 -0
  537. package/dist-lib/schema/engine.d.ts +2 -0
  538. package/dist-lib/schema/engine.js +2013 -0
  539. package/dist-lib/schema/field-order.d.ts +1 -0
  540. package/dist-lib/schema/field-order.js +95 -0
  541. package/dist-lib/schema/helpers.d.ts +28 -0
  542. package/dist-lib/schema/helpers.js +176 -0
  543. package/dist-lib/schema/local.d.ts +2 -0
  544. package/dist-lib/schema/local.js +133 -0
  545. package/dist-lib/schema/qvac.d.ts +22 -0
  546. package/dist-lib/schema/qvac.js +722 -0
  547. package/dist-lib/schema/vendor.d.ts +5 -0
  548. package/dist-lib/spec/bind.d.ts +2 -0
  549. package/dist-lib/spec/bind.js +520 -0
  550. package/dist-lib/spec/calls.d.ts +3 -0
  551. package/dist-lib/spec/calls.js +129 -0
  552. package/dist-lib/spec/capabilities.d.ts +263 -0
  553. package/dist-lib/spec/config/hyperconf/index.d.ts +15 -0
  554. package/dist-lib/spec/config/hyperconf/index.js +24 -0
  555. package/dist-lib/spec/config/hyperconf/package.json +3 -0
  556. package/dist-lib/spec/config/hyperschema/index.js +81 -0
  557. package/dist-lib/spec/config/hyperschema/schema.json +19 -0
  558. package/dist-lib/spec/hrpc/hrpc.json +1500 -0
  559. package/dist-lib/spec/hrpc/index.d.ts +3 -0
  560. package/dist-lib/spec/hrpc/index.js +1545 -0
  561. package/dist-lib/spec/hrpc/messages.d.ts +4 -0
  562. package/dist-lib/spec/hrpc/messages.js +8373 -0
  563. package/dist-lib/spec/hyperschema/index.d.ts +20 -0
  564. package/dist-lib/spec/hyperschema/index.js +8373 -0
  565. package/dist-lib/spec/hyperschema/schema.json +6202 -0
  566. package/dist-lib/spec/hyperschema/types.d.ts +1545 -0
  567. package/dist-lib/spec/index.d.ts +36 -0
  568. package/dist-lib/spec/index.js +6 -0
  569. package/dist-lib/spec/local/hyperdb/db.json +186 -0
  570. package/dist-lib/spec/local/hyperdb/index.d.ts +9 -0
  571. package/dist-lib/spec/local/hyperdb/index.js +855 -0
  572. package/dist-lib/spec/local/hyperdb/messages.js +2189 -0
  573. package/dist-lib/spec/local/hyperschema/index.js +1208 -0
  574. package/dist-lib/spec/local/hyperschema/schema.json +639 -0
  575. package/dist-lib/spec/local/hyperschema/types.d.ts +159 -0
  576. package/dist-lib/spec/mesh/hyperdb/db.json +702 -0
  577. package/dist-lib/spec/mesh/hyperdb/index.d.ts +9 -0
  578. package/dist-lib/spec/mesh/hyperdb/index.js +2260 -0
  579. package/dist-lib/spec/mesh/hyperdb/messages.js +7453 -0
  580. package/dist-lib/spec/mesh/hyperdispatch/dispatch.json +174 -0
  581. package/dist-lib/spec/mesh/hyperdispatch/index.d.ts +13 -0
  582. package/dist-lib/spec/mesh/hyperdispatch/index.js +566 -0
  583. package/dist-lib/spec/mesh/hyperdispatch/messages.js +5713 -0
  584. package/dist-lib/spec/mesh/hyperschema/index.d.ts +14 -0
  585. package/dist-lib/spec/mesh/hyperschema/index.js +5713 -0
  586. package/dist-lib/spec/mesh/hyperschema/schema.json +3142 -0
  587. package/dist-lib/spec/mesh/hyperschema/types.d.ts +754 -0
  588. package/ducks.png +0 -0
  589. package/package.json +336 -1
@@ -0,0 +1,62 @@
1
+ import { isSupportedRagDocument } from "../rag/index.js";
2
+ import { groupAttachmentsByMessage } from "./linkage.js";
3
+ import { compareBlobReferences } from "../store/index.js";
4
+ import { getChat, setChatRagEnabled } from "../../chat.js";
5
+ import { listChunks } from "../../chunk.js";
6
+ import { IMAGE_MIMES } from "../../image/normalize.js";
7
+ import { addKnowledge, listKnowledge, removeKnowledge } from "./knowledge.js";
8
+ export function isKnowledgeRoutedAttachment(input) {
9
+ if (IMAGE_MIMES.has(input.mimeType.toLowerCase()))
10
+ return false;
11
+ return isSupportedRagDocument(input);
12
+ }
13
+ export async function routeAttachmentToKnowledge(mesh, chatId, attachment) {
14
+ const knowledge = await addKnowledge(mesh, {
15
+ id: attachment.id,
16
+ chatId,
17
+ fileName: attachment.fileName,
18
+ mimeType: attachment.mimeType,
19
+ byteLength: attachment.byteLength,
20
+ blobId: attachment.blobId
21
+ });
22
+ try {
23
+ const chat = await getChat(mesh, chatId);
24
+ if (chat && !chat.deletedAt && !chat.ragEnabled)
25
+ await setChatRagEnabled(mesh, chatId, true);
26
+ }
27
+ catch (err) {
28
+ await removeKnowledge(mesh, { knowledgeId: attachment.id, at: Date.now() }).catch(() => { });
29
+ throw err;
30
+ }
31
+ return knowledge;
32
+ }
33
+ export async function hasLiveSource(mesh, chatId, reference) {
34
+ const same = (blobId) => compareBlobReferences(blobId, reference, mesh.blobs.core.key.toString('hex')) !== false;
35
+ if ((await listKnowledge(mesh, { chatId })).some((row) => same(row.blobId)))
36
+ return true;
37
+ return (await listChunks(mesh, { chatId, type: 'attachment' })).some(({ attachment }) => attachment && !attachment.deletedAt && same(attachment.blobId));
38
+ }
39
+ export function attachTurnDocumentIds(chunks) {
40
+ const attachments = [];
41
+ const userMessages = [];
42
+ for (const chunk of chunks) {
43
+ if (chunk.type === 'attachment')
44
+ attachments.push(chunk);
45
+ else if (chunk.userMessage)
46
+ userMessages.push(chunk);
47
+ }
48
+ const last = userMessages[userMessages.length - 1];
49
+ if (!last)
50
+ return [];
51
+ const bound = groupAttachmentsByMessage(attachments, userMessages).get(last.id) ?? [];
52
+ const ids = [];
53
+ for (const chunk of bound) {
54
+ const ref = chunk.attachment;
55
+ if (!ref?.id || !ref.fileName || !ref.mimeType || ref.deletedAt)
56
+ continue;
57
+ if (isKnowledgeRoutedAttachment({ fileName: ref.fileName, mimeType: ref.mimeType })) {
58
+ ids.push(ref.id);
59
+ }
60
+ }
61
+ return ids;
62
+ }
@@ -0,0 +1,16 @@
1
+ import type HyperDB from 'hyperdb';
2
+ import type { QvacChunk, QvacKnowledge } from '../../../../spec/mesh/hyperschema/types.d.ts';
3
+ export type FileInput = 'knowledge' | 'attachment';
4
+ export type FileRecord = QvacKnowledge & {
5
+ kind: FileInput;
6
+ originDeviceId?: Buffer | null;
7
+ preview?: boolean;
8
+ };
9
+ export declare function attachmentRecord(chunk: QvacChunk): FileRecord | null;
10
+ export declare function fileRecord(view: HyperDB, id: string, input: FileInput): Promise<FileRecord | null>;
11
+ export declare function fileIds(view: HyperDB, input: FileInput, mediaKind?: string): Promise<string[]>;
12
+ export declare function claimSource(view: HyperDB, id: string): Promise<FileRecord | null>;
13
+ export declare function scopedFile(view: HyperDB, { chatId, fileId }: {
14
+ chatId: string;
15
+ fileId: string;
16
+ }): Promise<FileRecord | null>;
@@ -0,0 +1,70 @@
1
+ import { mediaKindOrdinal } from '../../../../schema/helpers.js';
2
+ export function attachmentRecord(chunk) {
3
+ const file = chunk.attachment;
4
+ if (chunk.type !== 'attachment' || !file)
5
+ return null;
6
+ return {
7
+ ...file,
8
+ chatId: chunk.chatId,
9
+ updatedAt: file.createdAt,
10
+ kind: 'attachment',
11
+ originDeviceId: chunk.originDeviceId,
12
+ preview: !!chunk.display &&
13
+ typeof chunk.display === 'object' &&
14
+ 'preview' in chunk.display &&
15
+ chunk.display.preview === true
16
+ };
17
+ }
18
+ export async function fileRecord(view, id, input) {
19
+ if (input === 'knowledge') {
20
+ const row = await view.get('@qvac/knowledge', { id });
21
+ return row && { ...row, kind: input };
22
+ }
23
+ const chunk = await view.get('@qvac/chunks', { id });
24
+ return chunk && attachmentRecord(chunk);
25
+ }
26
+ export async function fileIds(view, input, mediaKind) {
27
+ if (input === 'knowledge') {
28
+ return (await view.find('@qvac/knowledge').toArray()).map((row) => row.id);
29
+ }
30
+ const ids = [];
31
+ const chunks = mediaKind
32
+ ? view.find('@qvac/attachments-by-media-kind', {
33
+ gte: { mediaKind: mediaKindOrdinal(mediaKind) },
34
+ lte: { mediaKind: mediaKindOrdinal(mediaKind) }
35
+ })
36
+ : view.find('@qvac/chunks');
37
+ for await (const chunk of chunks) {
38
+ if (chunk.type === 'attachment' && chunk.id === chunk.attachment?.id)
39
+ ids.push(chunk.id);
40
+ }
41
+ return ids;
42
+ }
43
+ export async function claimSource(view, id) {
44
+ const knowledge = await fileRecord(view, id, 'knowledge');
45
+ if (knowledge)
46
+ return knowledge.deletedAt ? null : knowledge;
47
+ const file = await fileRecord(view, id, 'attachment');
48
+ return file?.id === id && file.preview && !file.deletedAt ? file : null;
49
+ }
50
+ export async function scopedFile(view, { chatId, fileId }) {
51
+ const chat = await view.get('@qvac/chats', { id: chatId });
52
+ if (chat?.deletedAt)
53
+ return null;
54
+ const direct = await view.get('@qvac/chunks', { id: fileId });
55
+ if (direct?.chatId === chatId && direct.attachment?.id === fileId) {
56
+ return direct.attachment.deletedAt ? null : attachmentRecord(direct);
57
+ }
58
+ const row = await fileRecord(view, fileId, 'knowledge');
59
+ if (row)
60
+ return row.chatId === chatId && !row.deletedAt ? row : null;
61
+ for await (const chunk of view.find('@qvac/chunks-by-chat', {
62
+ gte: { chatId },
63
+ lte: { chatId }
64
+ })) {
65
+ if (chunk.attachment?.id === fileId) {
66
+ return chunk.attachment.deletedAt ? null : attachmentRecord(chunk);
67
+ }
68
+ }
69
+ return null;
70
+ }
@@ -0,0 +1,2 @@
1
+ import type { Mesh } from '../../mesh.ts';
2
+ export declare function referencedBlobs(mesh: Mesh): Promise<string[]>;
@@ -0,0 +1,30 @@
1
+ const CHUNKS = '@qvac/chunks';
2
+ const KNOWLEDGE = '@qvac/knowledge';
3
+ const KNOWLEDGE_ARTIFACTS = '@qvac/knowledge-artifacts';
4
+ export async function referencedBlobs(mesh) {
5
+ const references = [];
6
+ const snapshot = mesh.view.snapshot();
7
+ try {
8
+ for await (const chunk of snapshot.find(CHUNKS)) {
9
+ if (mesh.closing)
10
+ return references;
11
+ if (chunk.type === 'attachment' && chunk.attachment) {
12
+ references.push(chunk.attachment.blobId);
13
+ }
14
+ }
15
+ for await (const row of snapshot.find(KNOWLEDGE)) {
16
+ if (mesh.closing)
17
+ return references;
18
+ references.push(row.blobId);
19
+ }
20
+ for await (const row of snapshot.find(KNOWLEDGE_ARTIFACTS)) {
21
+ if (mesh.closing)
22
+ return references;
23
+ references.push(row.artifactBlobId);
24
+ }
25
+ }
26
+ finally {
27
+ await snapshot.close();
28
+ }
29
+ return references;
30
+ }
@@ -0,0 +1,29 @@
1
+ import type { BlobId } from 'hyperblobs';
2
+ import type Hyperblobs from 'hyperblobs';
3
+ import type { AbortSignal } from 'bare-abort-controller';
4
+ export interface BlobHost {
5
+ readonly blobs: Hyperblobs;
6
+ openBlobs(key: Buffer): Promise<Hyperblobs>;
7
+ }
8
+ export type WriteProgress = {
9
+ bytesWritten: number;
10
+ } | {
11
+ bytesWritten: number;
12
+ blobId: BlobId;
13
+ byteLength: number;
14
+ };
15
+ export declare function writeBlob(blobs: Hyperblobs, chunks: AsyncIterable<Uint8Array>, options?: {
16
+ signal?: AbortSignal;
17
+ inactivityMs?: number;
18
+ }): AsyncGenerator<WriteProgress>;
19
+ export declare function stringifyBlobId(blobs: Hyperblobs, id: BlobId): string;
20
+ export declare function readBlob(blobs: Hyperblobs, blobId: BlobId, options?: {
21
+ readonly wait?: boolean;
22
+ readonly timeout?: number;
23
+ readonly signal?: AbortSignal;
24
+ }): AsyncGenerator<{
25
+ data: Buffer;
26
+ bytesRead: number;
27
+ byteLength: number;
28
+ }>;
29
+ export declare function clearBlob(mesh: BlobHost, blobId: string, id: string): Promise<void>;
@@ -0,0 +1,98 @@
1
+ import { AbortedError } from '@qvac/harness/race-abort';
2
+ import { nextFrame } from "../../next-frame.js";
3
+ import { parseBlobReference } from "./reference.js";
4
+ export async function* writeBlob(blobs, chunks, options = {}) {
5
+ const ws = blobs.createWriteStream();
6
+ const done = new Promise((resolve, reject) => {
7
+ ws.once('close', () => resolve());
8
+ ws.once('error', (err) => reject(err));
9
+ });
10
+ void done.catch(noop);
11
+ let finished = false;
12
+ const it = chunks[Symbol.asyncIterator]();
13
+ try {
14
+ let bytesWritten = 0;
15
+ let next = await nextFrame(it, options);
16
+ while (!next.done) {
17
+ const chunk = next.value;
18
+ bytesWritten += chunk.length;
19
+ if (!ws.write(chunk)) {
20
+ let onDrain;
21
+ const drained = new Promise((resolve) => {
22
+ onDrain = () => resolve();
23
+ ws.once('drain', onDrain);
24
+ });
25
+ try {
26
+ await Promise.race([drained, done]);
27
+ }
28
+ finally {
29
+ ws.off('drain', onDrain);
30
+ }
31
+ }
32
+ next = await nextFrame(it, options);
33
+ if (next.done)
34
+ break;
35
+ yield { bytesWritten };
36
+ }
37
+ ws.end();
38
+ await done;
39
+ finished = true;
40
+ yield { bytesWritten, blobId: ws.id, byteLength: bytesWritten };
41
+ }
42
+ finally {
43
+ if (!finished) {
44
+ void it.return?.().catch(noop);
45
+ ws.end();
46
+ const settled = await done.then(() => true, () => false);
47
+ if (settled && ws.id.blockLength > 0)
48
+ await blobs.clear(ws.id).catch(noop);
49
+ }
50
+ }
51
+ }
52
+ const noop = () => { };
53
+ export function stringifyBlobId(blobs, id) {
54
+ return JSON.stringify({ ...id, coreKey: blobs.core.key.toString('hex') });
55
+ }
56
+ export async function* readBlob(blobs, blobId, options = {}) {
57
+ const { signal, ...readOptions } = options;
58
+ if (signal?.aborted)
59
+ throw new AbortedError();
60
+ const rs = blobs.createReadStream(blobId, readOptions);
61
+ const abort = () => rs.destroy(new AbortedError());
62
+ signal?.addEventListener('abort', abort, { once: true });
63
+ let bytesRead = 0;
64
+ try {
65
+ for await (const chunk of rs) {
66
+ bytesRead += chunk.length;
67
+ yield { data: chunk, bytesRead, byteLength: blobId.byteLength };
68
+ }
69
+ }
70
+ finally {
71
+ signal?.removeEventListener('abort', abort);
72
+ rs.destroy();
73
+ }
74
+ }
75
+ export async function clearBlob(mesh, blobId, id) {
76
+ try {
77
+ if (parseBlobReference(blobId).inline)
78
+ return;
79
+ await clearBlobRef(mesh, blobId);
80
+ }
81
+ catch (err) {
82
+ logger.warn('sync', 'blob clear failed', { id, err });
83
+ }
84
+ }
85
+ async function clearBlobRef(mesh, blobId) {
86
+ const { coreKey, ...id } = JSON.parse(blobId);
87
+ if (!coreKey || coreKey === mesh.blobs.core.key.toString('hex')) {
88
+ await mesh.blobs.clear(id);
89
+ return;
90
+ }
91
+ const remote = await mesh.openBlobs(Buffer.from(coreKey, 'hex'));
92
+ try {
93
+ await remote.clear(id);
94
+ }
95
+ finally {
96
+ await remote.close();
97
+ }
98
+ }
@@ -0,0 +1,36 @@
1
+ import { Buffer } from 'buffer';
2
+ import EventEmitter from 'bare-events';
3
+ import type Hyperblobs from 'hyperblobs';
4
+ import { stringifyBlobId, writeBlob, type BlobHost } from './blob.ts';
5
+ import { readBlobReference, readBlobReferenceBytes, downloadBlobReference } from './reference.ts';
6
+ export { CoreBlobServer } from './server.ts';
7
+ export { compareBlobReferences, isInvalidBlobReferenceError, parseBlobReference, parseBlobReferenceCoreKey } from './reference.ts';
8
+ export type { BlobReferenceReadOptions } from './reference.ts';
9
+ export type { WriteProgress } from './blob.ts';
10
+ export { MAX_INLINE_BYTES, MAX_REFERENCE_CHARS } from './inline.ts';
11
+ export declare class BlobStore extends EventEmitter {
12
+ readonly blobs: Hyperblobs;
13
+ readonly openBlobs: BlobHost['openBlobs'];
14
+ private readonly _readers;
15
+ private readonly _updated;
16
+ private _closed;
17
+ constructor(host: BlobHost);
18
+ write(chunks: AsyncIterable<Uint8Array>, options?: Parameters<typeof writeBlob>[2]): AsyncGenerator<import("./blob.ts").WriteProgress, any, any>;
19
+ put(bytes: Buffer): Promise<{
20
+ blobRef: import("hyperblobs").BlobId;
21
+ reference: string;
22
+ }>;
23
+ reference(id: Parameters<typeof stringifyBlobId>[1]): string;
24
+ inline(bytes: Buffer, mimeType: string): string;
25
+ read(reference: string, options?: Parameters<typeof readBlobReference>[2]): AsyncGenerator<{
26
+ data: Buffer;
27
+ bytesRead: number;
28
+ byteLength: number;
29
+ }, any, any>;
30
+ readBytes(reference: string, options?: Parameters<typeof readBlobReferenceBytes>[2]): Promise<Buffer<ArrayBufferLike>>;
31
+ download(reference: string, options: Parameters<typeof downloadBlobReference>[2]): Promise<void>;
32
+ clear(reference: string, id: string): Promise<void>;
33
+ available(reference: string): Promise<boolean>;
34
+ sweep(references: string[], coreLength: number): Promise<void>;
35
+ close(): Promise<void>;
36
+ }
@@ -0,0 +1,89 @@
1
+ import b4a from 'b4a';
2
+ import { Buffer } from 'buffer';
3
+ import EventEmitter from 'bare-events';
4
+ import { sweepUnreferenced } from "./sweep.js";
5
+ import { inlineReference } from "./inline.js";
6
+ import { clearBlob, stringifyBlobId, writeBlob } from "./blob.js";
7
+ import { parseBlobReference, readBlobReference, readBlobReferenceBytes, downloadBlobReference } from "./reference.js";
8
+ export { CoreBlobServer } from "./server.js";
9
+ export { compareBlobReferences, isInvalidBlobReferenceError, parseBlobReference, parseBlobReferenceCoreKey } from "./reference.js";
10
+ export { MAX_INLINE_BYTES, MAX_REFERENCE_CHARS } from "./inline.js";
11
+ export class BlobStore extends EventEmitter {
12
+ blobs;
13
+ openBlobs;
14
+ _readers = new Map();
15
+ _updated = () => this.emit('update');
16
+ _closed = false;
17
+ constructor(host) {
18
+ super();
19
+ this.blobs = host.blobs;
20
+ this.openBlobs = (key) => host.openBlobs(key);
21
+ this.blobs.core.on('download', this._updated);
22
+ }
23
+ write(chunks, options = {}) {
24
+ return writeBlob(this.blobs, chunks, options);
25
+ }
26
+ async put(bytes) {
27
+ const blobRef = await this.blobs.put(bytes);
28
+ return { blobRef, reference: stringifyBlobId(this.blobs, blobRef) };
29
+ }
30
+ reference(id) {
31
+ return stringifyBlobId(this.blobs, id);
32
+ }
33
+ inline(bytes, mimeType) {
34
+ return inlineReference(bytes, mimeType);
35
+ }
36
+ read(reference, options = {}) {
37
+ return readBlobReference(this, reference, options);
38
+ }
39
+ readBytes(reference, options = {}) {
40
+ return readBlobReferenceBytes(this, reference, options);
41
+ }
42
+ download(reference, options) {
43
+ return downloadBlobReference(this, reference, options);
44
+ }
45
+ clear(reference, id) {
46
+ return clearBlob(this, reference, id);
47
+ }
48
+ async available(reference) {
49
+ if (this._closed)
50
+ return false;
51
+ try {
52
+ const { blobId, coreKey, inline } = parseBlobReference(reference);
53
+ if (inline)
54
+ return true;
55
+ let blobs = this.blobs;
56
+ if (coreKey && coreKey !== b4a.toString(blobs.core.key, 'hex')) {
57
+ let reader = this._readers.get(coreKey);
58
+ if (!reader) {
59
+ reader = this.openBlobs(Buffer.from(coreKey, 'hex')).then((remote) => {
60
+ remote.core.on('download', this._updated);
61
+ return remote;
62
+ });
63
+ void reader.catch(() => this._readers.delete(coreKey));
64
+ this._readers.set(coreKey, reader);
65
+ }
66
+ blobs = await reader;
67
+ }
68
+ return await blobs.core.has(blobId.blockOffset, blobId.blockOffset + blobId.blockLength);
69
+ }
70
+ catch {
71
+ return false;
72
+ }
73
+ }
74
+ sweep(references, coreLength) {
75
+ return sweepUnreferenced(this.blobs, references, coreLength);
76
+ }
77
+ async close() {
78
+ this._closed = true;
79
+ this.blobs.core.off('download', this._updated);
80
+ this.removeAllListeners();
81
+ for (const reader of await Promise.allSettled(this._readers.values())) {
82
+ if (reader.status !== 'fulfilled')
83
+ continue;
84
+ reader.value.core.off('download', this._updated);
85
+ await reader.value.close();
86
+ }
87
+ this._readers.clear();
88
+ }
89
+ }
@@ -0,0 +1,8 @@
1
+ export declare const MAX_INLINE_BYTES: number;
2
+ export declare const MAX_REFERENCE_CHARS: number;
3
+ export type InlinePayload = {
4
+ mimeType: string;
5
+ data: string;
6
+ };
7
+ export declare function inlineReference(bytes: Buffer, mimeType: string): string;
8
+ export declare function readInline(record: Record<string, unknown>): InlinePayload | undefined;
@@ -0,0 +1,38 @@
1
+ import b4a from 'b4a';
2
+ export const MAX_INLINE_BYTES = 512 * 1024;
3
+ export const MAX_REFERENCE_CHARS = 4 * Math.ceil(MAX_INLINE_BYTES / 3) + 1024;
4
+ export function inlineReference(bytes, mimeType) {
5
+ if (bytes.length > MAX_INLINE_BYTES)
6
+ throw new Error('inline output exceeds 512 KiB');
7
+ return JSON.stringify({
8
+ blockOffset: 0,
9
+ blockLength: 0,
10
+ byteOffset: 0,
11
+ byteLength: 0,
12
+ inline: { mimeType, data: b4a.toString(bytes, 'base64') }
13
+ });
14
+ }
15
+ export function readInline(record) {
16
+ if (record.inline === undefined)
17
+ return;
18
+ const inline = record.inline;
19
+ if (!inline ||
20
+ typeof inline !== 'object' ||
21
+ !('mimeType' in inline) ||
22
+ typeof inline.mimeType !== 'string' ||
23
+ inline.mimeType.length > 100 ||
24
+ !inline.mimeType.includes('/') ||
25
+ !('data' in inline) ||
26
+ typeof inline.data !== 'string' ||
27
+ record.coreKey !== undefined ||
28
+ [record.blockOffset, record.blockLength, record.byteOffset, record.byteLength].some((offset) => offset !== 0)) {
29
+ throw new TypeError('invalid inline output');
30
+ }
31
+ const { data, mimeType } = inline;
32
+ const bytes = b4a.from(data, 'base64');
33
+ if (bytes.length > MAX_INLINE_BYTES)
34
+ throw new Error('inline output exceeds 512 KiB');
35
+ if (b4a.toString(bytes, 'base64') !== data)
36
+ throw new TypeError('invalid inline output');
37
+ return { mimeType, data };
38
+ }
@@ -0,0 +1,27 @@
1
+ import type { BlobId } from 'hyperblobs';
2
+ import { type BlobHost } from './blob.ts';
3
+ import type { AbortSignal } from 'bare-abort-controller';
4
+ import { type InlinePayload } from './inline.ts';
5
+ export interface ParsedBlobReference {
6
+ readonly blobId: BlobId;
7
+ readonly coreKey?: string;
8
+ readonly inline?: InlinePayload;
9
+ }
10
+ export interface BlobReferenceReadOptions {
11
+ readonly remoteTimeoutMs?: number;
12
+ readonly wait?: boolean;
13
+ readonly signal?: AbortSignal;
14
+ }
15
+ export declare function isInvalidBlobReferenceError(error: unknown): error is TypeError;
16
+ export declare function parseBlobReferenceCoreKey(blobReference: string): string | undefined;
17
+ export declare function parseBlobReference(blobReference: string): ParsedBlobReference;
18
+ export declare function compareBlobReferences(left: string, right: string, localCoreKey?: string): boolean | null;
19
+ export declare function readBlobReference(mesh: BlobHost, blobReference: string, options?: BlobReferenceReadOptions): AsyncGenerator<{
20
+ data: Buffer;
21
+ bytesRead: number;
22
+ byteLength: number;
23
+ }>;
24
+ export declare function downloadBlobReference(mesh: BlobHost, reference: string, { signal }: {
25
+ signal: AbortSignal;
26
+ }): Promise<void>;
27
+ export declare function readBlobReferenceBytes(mesh: BlobHost, blobReference: string, options?: BlobReferenceReadOptions): Promise<Buffer>;
@@ -0,0 +1,168 @@
1
+ import { readBlob } from "./blob.js";
2
+ import { AbortedError, raceAbort } from '@qvac/harness/race-abort';
3
+ import { MAX_REFERENCE_CHARS, readInline } from "./inline.js";
4
+ const CORE_KEY_PATTERN = /^[0-9a-f]{64}$/;
5
+ const DEFAULT_REMOTE_TIMEOUT_MS = 15_000;
6
+ const INVALID_BLOB_REFERENCE = 'invalid blob reference';
7
+ const BLOB_UNAVAILABLE = 'blob unavailable';
8
+ function invalidBlobReference() {
9
+ return new TypeError(INVALID_BLOB_REFERENCE);
10
+ }
11
+ export function isInvalidBlobReferenceError(error) {
12
+ return error instanceof TypeError && error.message === INVALID_BLOB_REFERENCE;
13
+ }
14
+ function blobUnavailable(cause) {
15
+ return new Error(BLOB_UNAVAILABLE, { cause });
16
+ }
17
+ function isRecord(value) {
18
+ return value !== null && typeof value === 'object' && !Array.isArray(value);
19
+ }
20
+ function parseBlobReferenceRecord(blobReference) {
21
+ if (blobReference.length > MAX_REFERENCE_CHARS)
22
+ throw invalidBlobReference();
23
+ let value;
24
+ try {
25
+ value = JSON.parse(blobReference);
26
+ }
27
+ catch {
28
+ throw invalidBlobReference();
29
+ }
30
+ if (!isRecord(value))
31
+ throw invalidBlobReference();
32
+ return value;
33
+ }
34
+ function readCoreKey(record) {
35
+ const coreKey = record.coreKey;
36
+ if (coreKey !== undefined && (typeof coreKey !== 'string' || !CORE_KEY_PATTERN.test(coreKey))) {
37
+ throw invalidBlobReference();
38
+ }
39
+ return coreKey;
40
+ }
41
+ function readOffset(record, name) {
42
+ const value = record[name];
43
+ if (typeof value !== 'number' || !Number.isSafeInteger(value) || value < 0) {
44
+ throw invalidBlobReference();
45
+ }
46
+ return value;
47
+ }
48
+ export function parseBlobReferenceCoreKey(blobReference) {
49
+ return readCoreKey(parseBlobReferenceRecord(blobReference));
50
+ }
51
+ export function parseBlobReference(blobReference) {
52
+ const value = parseBlobReferenceRecord(blobReference);
53
+ if (value.blockMap)
54
+ throw invalidBlobReference();
55
+ let inline;
56
+ try {
57
+ inline = readInline(value);
58
+ }
59
+ catch {
60
+ throw invalidBlobReference();
61
+ }
62
+ return {
63
+ coreKey: readCoreKey(value),
64
+ inline,
65
+ blobId: {
66
+ blockOffset: readOffset(value, 'blockOffset'),
67
+ blockLength: readOffset(value, 'blockLength'),
68
+ byteOffset: readOffset(value, 'byteOffset'),
69
+ byteLength: readOffset(value, 'byteLength')
70
+ }
71
+ };
72
+ }
73
+ export function compareBlobReferences(left, right, localCoreKey) {
74
+ try {
75
+ const a = parseBlobReference(left);
76
+ const b = parseBlobReference(right);
77
+ if (a.inline || b.inline) {
78
+ return a.inline?.mimeType === b.inline?.mimeType && a.inline?.data === b.inline?.data;
79
+ }
80
+ return ((a.coreKey ?? localCoreKey) === (b.coreKey ?? localCoreKey) &&
81
+ a.blobId.blockOffset === b.blobId.blockOffset &&
82
+ a.blobId.blockLength === b.blobId.blockLength &&
83
+ a.blobId.byteOffset === b.blobId.byteOffset &&
84
+ a.blobId.byteLength === b.blobId.byteLength);
85
+ }
86
+ catch (error) {
87
+ if (isInvalidBlobReferenceError(error))
88
+ return null;
89
+ throw error;
90
+ }
91
+ }
92
+ function remoteTimeout(options) {
93
+ const timeout = options.remoteTimeoutMs ?? DEFAULT_REMOTE_TIMEOUT_MS;
94
+ if (!Number.isSafeInteger(timeout) || timeout <= 0) {
95
+ throw new TypeError('remote blob timeout must be a positive integer');
96
+ }
97
+ return timeout;
98
+ }
99
+ async function closeRemote(remote) {
100
+ if (!remote)
101
+ return;
102
+ try {
103
+ await remote.close();
104
+ }
105
+ catch { }
106
+ }
107
+ export async function* readBlobReference(mesh, blobReference, options = {}) {
108
+ const { blobId, coreKey, inline } = parseBlobReference(blobReference);
109
+ if (options.signal?.aborted)
110
+ throw new AbortedError();
111
+ if (inline) {
112
+ const data = Buffer.from(inline.data, 'base64');
113
+ yield { data, bytesRead: data.length, byteLength: data.length };
114
+ return;
115
+ }
116
+ const local = !coreKey || coreKey === mesh.blobs.core.key.toString('hex');
117
+ const readOptions = local || options.wait === false ? { wait: false } : { timeout: remoteTimeout(options) };
118
+ let remote = null;
119
+ try {
120
+ if (!local)
121
+ remote = await mesh.openBlobs(Buffer.from(coreKey, 'hex'));
122
+ const blobs = remote ?? mesh.blobs;
123
+ yield* readBlob(blobs, blobId, { ...readOptions, signal: options.signal });
124
+ }
125
+ catch (err) {
126
+ if (options.signal?.aborted || err instanceof AbortedError)
127
+ throw new AbortedError();
128
+ throw blobUnavailable(err);
129
+ }
130
+ finally {
131
+ await closeRemote(remote);
132
+ }
133
+ }
134
+ export async function downloadBlobReference(mesh, reference, { signal }) {
135
+ const { blobId, coreKey, inline } = parseBlobReference(reference);
136
+ if (signal.aborted)
137
+ throw new AbortedError();
138
+ if (inline || !blobId.blockLength)
139
+ return;
140
+ let remote = null;
141
+ try {
142
+ if (coreKey && coreKey !== mesh.blobs.core.key.toString('hex')) {
143
+ remote = await mesh.openBlobs(Buffer.from(coreKey, 'hex'));
144
+ }
145
+ if (signal.aborted)
146
+ throw new AbortedError();
147
+ const range = (remote ?? mesh.blobs).core.download({
148
+ start: blobId.blockOffset,
149
+ end: blobId.blockOffset + blobId.blockLength
150
+ });
151
+ try {
152
+ await raceAbort(range.done(), signal);
153
+ }
154
+ finally {
155
+ range.destroy();
156
+ }
157
+ }
158
+ finally {
159
+ await closeRemote(remote);
160
+ }
161
+ }
162
+ export async function readBlobReferenceBytes(mesh, blobReference, options = {}) {
163
+ const chunks = [];
164
+ for await (const frame of readBlobReference(mesh, blobReference, options)) {
165
+ chunks.push(frame.data);
166
+ }
167
+ return Buffer.concat(chunks);
168
+ }