@qvac/harness 0.1.0 → 0.1.2

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 (462) hide show
  1. package/dist/harness.bundle +13 -64
  2. package/dist/prebuilds-manifest.json +0 -8
  3. package/dist-lib/index.d.ts +240 -0
  4. package/dist-lib/index.js +1063 -0
  5. package/dist-lib/lib/audio-transcode-bare.d.ts +2 -0
  6. package/dist-lib/lib/audio-transcode-bare.js +145 -0
  7. package/dist-lib/lib/audio-transcode-node.d.ts +2 -0
  8. package/dist-lib/lib/audio-transcode-node.js +6 -0
  9. package/dist-lib/lib/capabilities/audio-resample.d.ts +14 -0
  10. package/dist-lib/lib/capabilities/audio-resample.js +72 -0
  11. package/dist-lib/lib/capabilities/completion.d.ts +288 -0
  12. package/dist-lib/lib/capabilities/completion.js +1077 -0
  13. package/dist-lib/lib/capabilities/download.d.ts +46 -0
  14. package/dist-lib/lib/capabilities/download.js +124 -0
  15. package/dist-lib/lib/capabilities/embed.d.ts +20 -0
  16. package/dist-lib/lib/capabilities/embed.js +13 -0
  17. package/dist-lib/lib/capabilities/kv-cache.d.ts +13 -0
  18. package/dist-lib/lib/capabilities/kv-cache.js +21 -0
  19. package/dist-lib/lib/capabilities/prompt-prefix.d.ts +6 -0
  20. package/dist-lib/lib/capabilities/prompt-prefix.js +10 -0
  21. package/dist-lib/lib/capabilities/speech-lexicon.d.ts +5 -0
  22. package/dist-lib/lib/capabilities/speech-lexicon.js +32 -0
  23. package/dist-lib/lib/capabilities/speech-text.d.ts +6 -0
  24. package/dist-lib/lib/capabilities/speech-text.js +79 -0
  25. package/dist-lib/lib/capabilities/tool-names.d.ts +3 -0
  26. package/dist-lib/lib/capabilities/tool-names.js +3 -0
  27. package/dist-lib/lib/capabilities/tool-selection.d.ts +43 -0
  28. package/dist-lib/lib/capabilities/tool-selection.js +60 -0
  29. package/dist-lib/lib/capabilities/tool-turns.d.ts +9 -0
  30. package/dist-lib/lib/capabilities/tool-turns.js +101 -0
  31. package/dist-lib/lib/capabilities/usage-breakdown.d.ts +27 -0
  32. package/dist-lib/lib/capabilities/usage-breakdown.js +44 -0
  33. package/dist-lib/lib/capabilities/vision-history.d.ts +3 -0
  34. package/dist-lib/lib/capabilities/vision-history.js +21 -0
  35. package/dist-lib/lib/capabilities/voice.d.ts +78 -0
  36. package/dist-lib/lib/capabilities/voice.js +189 -0
  37. package/dist-lib/lib/connect.d.ts +76 -0
  38. package/dist-lib/lib/connect.js +789 -0
  39. package/dist-lib/lib/context-window.d.ts +7 -0
  40. package/dist-lib/lib/context-window.js +90 -0
  41. package/dist-lib/lib/contract-types.d.ts +210 -0
  42. package/dist-lib/lib/contract-types.js +1 -0
  43. package/dist-lib/lib/diagram-repair.d.ts +21 -0
  44. package/dist-lib/lib/diagram-repair.js +58 -0
  45. package/dist-lib/lib/dns-lookup.d.ts +1 -0
  46. package/dist-lib/lib/dns-lookup.js +13 -0
  47. package/dist-lib/lib/error-fields.d.ts +2 -0
  48. package/dist-lib/lib/error-fields.js +8 -0
  49. package/dist-lib/lib/fetch-node.d.ts +1 -0
  50. package/dist-lib/lib/fetch-node.js +1 -0
  51. package/dist-lib/lib/hardware/capability-probe.d.ts +9 -0
  52. package/dist-lib/lib/hardware/capability-probe.js +99 -0
  53. package/dist-lib/lib/hardware/gpu-classify.d.ts +2 -0
  54. package/dist-lib/lib/hardware/gpu-classify.js +32 -0
  55. package/dist-lib/lib/hardware/gpu-probe-addon.d.ts +2 -0
  56. package/dist-lib/lib/hardware/gpu-probe-addon.js +42 -0
  57. package/dist-lib/lib/hardware/gpu-stats.bare.d.ts +1 -0
  58. package/dist-lib/lib/hardware/gpu-stats.bare.js +24 -0
  59. package/dist-lib/lib/hardware/gpu-stats.stub.d.ts +1 -0
  60. package/dist-lib/lib/hardware/gpu-stats.stub.js +3 -0
  61. package/dist-lib/lib/hardware/memory-budget.d.ts +8 -0
  62. package/dist-lib/lib/hardware/memory-budget.js +1 -0
  63. package/dist-lib/lib/hardware/parsers.d.ts +7 -0
  64. package/dist-lib/lib/hardware/parsers.js +41 -0
  65. package/dist-lib/lib/headers-bare.d.ts +1 -0
  66. package/dist-lib/lib/headers-bare.js +1 -0
  67. package/dist-lib/lib/headers-node.d.ts +4 -0
  68. package/dist-lib/lib/headers-node.js +1 -0
  69. package/dist-lib/lib/helpers/buffer-burst.d.ts +1 -0
  70. package/dist-lib/lib/helpers/buffer-burst.js +20 -0
  71. package/dist-lib/lib/helpers/control-tokens.d.ts +7 -0
  72. package/dist-lib/lib/helpers/control-tokens.js +32 -0
  73. package/dist-lib/lib/helpers/join-guard.d.ts +6 -0
  74. package/dist-lib/lib/helpers/join-guard.js +46 -0
  75. package/dist-lib/lib/helpers/markup-stream-filter.d.ts +5 -0
  76. package/dist-lib/lib/helpers/markup-stream-filter.js +75 -0
  77. package/dist-lib/lib/helpers/race-abort.d.ts +5 -0
  78. package/dist-lib/lib/helpers/race-abort.js +18 -0
  79. package/dist-lib/lib/helpers/retry-memo.d.ts +5 -0
  80. package/dist-lib/lib/helpers/retry-memo.js +12 -0
  81. package/dist-lib/lib/helpers/run-outcome.d.ts +33 -0
  82. package/dist-lib/lib/helpers/run-outcome.js +204 -0
  83. package/dist-lib/lib/helpers/spawn-path.d.ts +5 -0
  84. package/dist-lib/lib/helpers/spawn-path.js +57 -0
  85. package/dist-lib/lib/helpers/text-coalescer.d.ts +15 -0
  86. package/dist-lib/lib/helpers/text-coalescer.js +34 -0
  87. package/dist-lib/lib/helpers/thinking.d.ts +8 -0
  88. package/dist-lib/lib/helpers/thinking.js +95 -0
  89. package/dist-lib/lib/helpers/tool-call-markup.d.ts +20 -0
  90. package/dist-lib/lib/helpers/tool-call-markup.js +201 -0
  91. package/dist-lib/lib/helpers/tool-intent.d.ts +7 -0
  92. package/dist-lib/lib/helpers/tool-intent.js +21 -0
  93. package/dist-lib/lib/helpers/tool-label.d.ts +8 -0
  94. package/dist-lib/lib/helpers/tool-label.js +131 -0
  95. package/dist-lib/lib/hooks/built-in/arg-repair.d.ts +5 -0
  96. package/dist-lib/lib/hooks/built-in/arg-repair.js +88 -0
  97. package/dist-lib/lib/hooks/built-in/egress.d.ts +5 -0
  98. package/dist-lib/lib/hooks/built-in/egress.js +29 -0
  99. package/dist-lib/lib/hooks/built-in/index.d.ts +3 -0
  100. package/dist-lib/lib/hooks/built-in/index.js +3 -0
  101. package/dist-lib/lib/hooks/built-in/skill-catalog.d.ts +10 -0
  102. package/dist-lib/lib/hooks/built-in/skill-catalog.js +17 -0
  103. package/dist-lib/lib/hooks/pipeline.d.ts +20 -0
  104. package/dist-lib/lib/hooks/pipeline.js +49 -0
  105. package/dist-lib/lib/hooks/registry.d.ts +2 -0
  106. package/dist-lib/lib/hooks/registry.js +6 -0
  107. package/dist-lib/lib/hooks/run.d.ts +5 -0
  108. package/dist-lib/lib/hooks/run.js +83 -0
  109. package/dist-lib/lib/hooks/types.d.ts +57 -0
  110. package/dist-lib/lib/hooks/types.js +1 -0
  111. package/dist-lib/lib/log.d.ts +5 -0
  112. package/dist-lib/lib/log.js +37 -0
  113. package/dist-lib/lib/model-download-progress.d.ts +22 -0
  114. package/dist-lib/lib/model-download-progress.js +95 -0
  115. package/dist-lib/lib/models/context.d.ts +5 -0
  116. package/dist-lib/lib/models/context.js +12 -0
  117. package/dist-lib/lib/models/embed-config.d.ts +14 -0
  118. package/dist-lib/lib/models/embed-config.js +31 -0
  119. package/dist-lib/lib/models/gpu-selection.d.ts +3 -0
  120. package/dist-lib/lib/models/gpu-selection.js +26 -0
  121. package/dist-lib/lib/models/kv-cache.d.ts +4 -0
  122. package/dist-lib/lib/models/kv-cache.js +6 -0
  123. package/dist-lib/lib/models/llm-presets.d.ts +10 -0
  124. package/dist-lib/lib/models/llm-presets.js +58 -0
  125. package/dist-lib/lib/models/model-catalog-constants.d.ts +29 -0
  126. package/dist-lib/lib/models/model-catalog-constants.js +103 -0
  127. package/dist-lib/lib/models/model-catalog.d.ts +125 -0
  128. package/dist-lib/lib/models/model-catalog.js +371 -0
  129. package/dist-lib/lib/models/model-delete.d.ts +18 -0
  130. package/dist-lib/lib/models/model-delete.js +47 -0
  131. package/dist-lib/lib/models/model-handle.d.ts +18 -0
  132. package/dist-lib/lib/models/model-handle.js +33 -0
  133. package/dist-lib/lib/models/model-list.d.ts +42 -0
  134. package/dist-lib/lib/models/model-list.js +123 -0
  135. package/dist-lib/lib/models/model-pool.d.ts +116 -0
  136. package/dist-lib/lib/models/model-pool.js +356 -0
  137. package/dist-lib/lib/models/model-source.d.ts +6 -0
  138. package/dist-lib/lib/models/model-source.js +21 -0
  139. package/dist-lib/lib/models/music-catalog.d.ts +12 -0
  140. package/dist-lib/lib/models/music-catalog.js +26 -0
  141. package/dist-lib/lib/models/opencl-cache.d.ts +5 -0
  142. package/dist-lib/lib/models/opencl-cache.js +50 -0
  143. package/dist-lib/lib/models/sdk-faults.d.ts +21 -0
  144. package/dist-lib/lib/models/sdk-faults.js +66 -0
  145. package/dist-lib/lib/models/tool-dialect.d.ts +2 -0
  146. package/dist-lib/lib/models/tool-dialect.js +19 -0
  147. package/dist-lib/lib/models/tts-model-default.d.ts +3 -0
  148. package/dist-lib/lib/models/tts-model-default.js +13 -0
  149. package/dist-lib/lib/no-redirect-fetch-bare.d.ts +15 -0
  150. package/dist-lib/lib/no-redirect-fetch-bare.js +59 -0
  151. package/dist-lib/lib/no-redirect-fetch-impl.d.ts +39 -0
  152. package/dist-lib/lib/no-redirect-fetch-impl.js +80 -0
  153. package/dist-lib/lib/no-redirect-fetch-node.d.ts +4 -0
  154. package/dist-lib/lib/no-redirect-fetch-node.js +52 -0
  155. package/dist-lib/lib/prompt.d.ts +22 -0
  156. package/dist-lib/lib/prompt.js +77 -0
  157. package/dist-lib/lib/queue.d.ts +9 -0
  158. package/dist-lib/lib/queue.js +48 -0
  159. package/dist-lib/lib/resolution-detector.d.ts +5 -0
  160. package/dist-lib/lib/resolution-detector.js +100 -0
  161. package/dist-lib/lib/rpc-session.d.ts +8 -0
  162. package/dist-lib/lib/rpc-session.js +20 -0
  163. package/dist-lib/lib/sdk-config-loader.bare.d.ts +1 -0
  164. package/dist-lib/lib/sdk-config-loader.bare.js +9 -0
  165. package/dist-lib/lib/sdk-config-loader.node.d.ts +1 -0
  166. package/dist-lib/lib/sdk-config-loader.node.js +1 -0
  167. package/dist-lib/lib/sdk-loader.d.ts +30 -0
  168. package/dist-lib/lib/sdk-loader.js +53 -0
  169. package/dist-lib/lib/sdk-storage.d.ts +8 -0
  170. package/dist-lib/lib/sdk-storage.js +24 -0
  171. package/dist-lib/lib/serve.d.ts +3 -0
  172. package/dist-lib/lib/serve.js +612 -0
  173. package/dist-lib/lib/spawn.d.ts +62 -0
  174. package/dist-lib/lib/spawn.js +71 -0
  175. package/dist-lib/lib/staging.d.ts +4 -0
  176. package/dist-lib/lib/staging.js +28 -0
  177. package/dist-lib/lib/storage.d.ts +18 -0
  178. package/dist-lib/lib/storage.js +26 -0
  179. package/dist-lib/lib/tmp-path.d.ts +7 -0
  180. package/dist-lib/lib/tmp-path.js +17 -0
  181. package/dist-lib/lib/tool-call-display.d.ts +21 -0
  182. package/dist-lib/lib/tool-call-display.js +1 -0
  183. package/dist-lib/lib/tools/catalog.d.ts +13 -0
  184. package/dist-lib/lib/tools/catalog.js +13 -0
  185. package/dist-lib/lib/tools/create-documents.d.ts +3 -0
  186. package/dist-lib/lib/tools/create-documents.js +87 -0
  187. package/dist-lib/lib/tools/edit-documents.d.ts +3 -0
  188. package/dist-lib/lib/tools/edit-documents.js +122 -0
  189. package/dist-lib/lib/tools/edit-image.d.ts +25 -0
  190. package/dist-lib/lib/tools/edit-image.js +271 -0
  191. package/dist-lib/lib/tools/exec/adapters/adapter.d.ts +27 -0
  192. package/dist-lib/lib/tools/exec/adapters/adapter.js +1 -0
  193. package/dist-lib/lib/tools/exec/adapters/python/attachments.d.ts +26 -0
  194. package/dist-lib/lib/tools/exec/adapters/python/attachments.js +160 -0
  195. package/dist-lib/lib/tools/exec/adapters/python/create-effect.d.ts +7 -0
  196. package/dist-lib/lib/tools/exec/adapters/python/create-effect.js +290 -0
  197. package/dist-lib/lib/tools/exec/adapters/python/loader.d.ts +11 -0
  198. package/dist-lib/lib/tools/exec/adapters/python/loader.js +94 -0
  199. package/dist-lib/lib/tools/exec/adapters/python/memfs.d.ts +47 -0
  200. package/dist-lib/lib/tools/exec/adapters/python/memfs.js +85 -0
  201. package/dist-lib/lib/tools/exec/adapters/python/output-policy.d.ts +13 -0
  202. package/dist-lib/lib/tools/exec/adapters/python/output-policy.js +129 -0
  203. package/dist-lib/lib/tools/exec/adapters/python/pyodide.d.ts +19 -0
  204. package/dist-lib/lib/tools/exec/adapters/python/pyodide.js +107 -0
  205. package/dist-lib/lib/tools/exec/adapters/python/python-adapter.d.ts +75 -0
  206. package/dist-lib/lib/tools/exec/adapters/python/python-adapter.js +1094 -0
  207. package/dist-lib/lib/tools/exec/adapters/python/run-session.d.ts +75 -0
  208. package/dist-lib/lib/tools/exec/adapters/python/run-session.js +273 -0
  209. package/dist-lib/lib/tools/exec/adapters/python/wheels.d.ts +38 -0
  210. package/dist-lib/lib/tools/exec/adapters/python/wheels.js +102 -0
  211. package/dist-lib/lib/tools/exec/adapters/python/worker/client.d.ts +7 -0
  212. package/dist-lib/lib/tools/exec/adapters/python/worker/client.js +188 -0
  213. package/dist-lib/lib/tools/exec/adapters/python/worker/entry.d.ts +1 -0
  214. package/dist-lib/lib/tools/exec/adapters/python/worker/entry.js +105 -0
  215. package/dist-lib/lib/tools/exec/adapters/python/worker/protocol.d.ts +38 -0
  216. package/dist-lib/lib/tools/exec/adapters/python/worker/protocol.js +41 -0
  217. package/dist-lib/lib/tools/exec/adapters/python/worker/spawn-bare.d.ts +2 -0
  218. package/dist-lib/lib/tools/exec/adapters/python/worker/spawn-bare.js +30 -0
  219. package/dist-lib/lib/tools/exec/adapters/python/worker/spawn-node.d.ts +13 -0
  220. package/dist-lib/lib/tools/exec/adapters/python/worker/spawn-node.js +45 -0
  221. package/dist-lib/lib/tools/exec/adapters/shell/shell-adapter.d.ts +12 -0
  222. package/dist-lib/lib/tools/exec/adapters/shell/shell-adapter.js +20 -0
  223. package/dist-lib/lib/tools/exec/obsidian/cli-process.d.ts +8 -0
  224. package/dist-lib/lib/tools/exec/obsidian/cli-process.js +74 -0
  225. package/dist-lib/lib/tools/exec/obsidian/cli.d.ts +18 -0
  226. package/dist-lib/lib/tools/exec/obsidian/cli.js +153 -0
  227. package/dist-lib/lib/tools/exec/obsidian/command.d.ts +5 -0
  228. package/dist-lib/lib/tools/exec/obsidian/command.js +18 -0
  229. package/dist-lib/lib/tools/exec/obsidian/guidance.d.ts +5 -0
  230. package/dist-lib/lib/tools/exec/obsidian/guidance.js +18 -0
  231. package/dist-lib/lib/tools/exec/obsidian/note-name.d.ts +1 -0
  232. package/dist-lib/lib/tools/exec/obsidian/note-name.js +6 -0
  233. package/dist-lib/lib/tools/exec/obsidian/output.d.ts +1 -0
  234. package/dist-lib/lib/tools/exec/obsidian/output.js +31 -0
  235. package/dist-lib/lib/tools/exec/obsidian/route.d.ts +19 -0
  236. package/dist-lib/lib/tools/exec/obsidian/route.js +85 -0
  237. package/dist-lib/lib/tools/exec/obsidian/safe-path.d.ts +3 -0
  238. package/dist-lib/lib/tools/exec/obsidian/safe-path.js +56 -0
  239. package/dist-lib/lib/tools/exec/obsidian/vault-create.d.ts +1 -0
  240. package/dist-lib/lib/tools/exec/obsidian/vault-create.js +40 -0
  241. package/dist-lib/lib/tools/exec/obsidian/vault-fs.d.ts +3 -0
  242. package/dist-lib/lib/tools/exec/obsidian/vault-fs.js +57 -0
  243. package/dist-lib/lib/tools/exec/obsidian/vault-paths.d.ts +20 -0
  244. package/dist-lib/lib/tools/exec/obsidian/vault-paths.js +171 -0
  245. package/dist-lib/lib/tools/exec/obsidian/vault-read.d.ts +11 -0
  246. package/dist-lib/lib/tools/exec/obsidian/vault-read.js +119 -0
  247. package/dist-lib/lib/tools/exec/obsidian/vault-write.d.ts +7 -0
  248. package/dist-lib/lib/tools/exec/obsidian/vault-write.js +134 -0
  249. package/dist-lib/lib/tools/exec/runner.d.ts +62 -0
  250. package/dist-lib/lib/tools/exec/runner.js +87 -0
  251. package/dist-lib/lib/tools/exec/scope.d.ts +3 -0
  252. package/dist-lib/lib/tools/exec/scope.js +97 -0
  253. package/dist-lib/lib/tools/exec/shell-argv.d.ts +2 -0
  254. package/dist-lib/lib/tools/exec/shell-argv.js +48 -0
  255. package/dist-lib/lib/tools/exec.d.ts +29 -0
  256. package/dist-lib/lib/tools/exec.js +459 -0
  257. package/dist-lib/lib/tools/file-glob.d.ts +15 -0
  258. package/dist-lib/lib/tools/file-glob.js +112 -0
  259. package/dist-lib/lib/tools/fs/drive.d.ts +26 -0
  260. package/dist-lib/lib/tools/fs/drive.js +1 -0
  261. package/dist-lib/lib/tools/fs/glob.d.ts +1 -0
  262. package/dist-lib/lib/tools/fs/glob.js +34 -0
  263. package/dist-lib/lib/tools/fs/local.d.ts +2 -0
  264. package/dist-lib/lib/tools/fs/local.js +29 -0
  265. package/dist-lib/lib/tools/fs/read.d.ts +2 -0
  266. package/dist-lib/lib/tools/fs/read.js +17 -0
  267. package/dist-lib/lib/tools/fs/remote-protocol.d.ts +40 -0
  268. package/dist-lib/lib/tools/fs/remote-protocol.js +1 -0
  269. package/dist-lib/lib/tools/fs/remote.d.ts +17 -0
  270. package/dist-lib/lib/tools/fs/remote.js +131 -0
  271. package/dist-lib/lib/tools/fs/scope.d.ts +37 -0
  272. package/dist-lib/lib/tools/fs/scope.js +130 -0
  273. package/dist-lib/lib/tools/fs/walk.d.ts +15 -0
  274. package/dist-lib/lib/tools/fs/walk.js +38 -0
  275. package/dist-lib/lib/tools/fs/write.d.ts +4 -0
  276. package/dist-lib/lib/tools/fs/write.js +5 -0
  277. package/dist-lib/lib/tools/generate-image.d.ts +111 -0
  278. package/dist-lib/lib/tools/generate-image.js +369 -0
  279. package/dist-lib/lib/tools/generate-music.d.ts +124 -0
  280. package/dist-lib/lib/tools/generate-music.js +522 -0
  281. package/dist-lib/lib/tools/grep.d.ts +5 -0
  282. package/dist-lib/lib/tools/grep.js +158 -0
  283. package/dist-lib/lib/tools/http-methods.d.ts +1 -0
  284. package/dist-lib/lib/tools/http-methods.js +1 -0
  285. package/dist-lib/lib/tools/http-request/encode-fields.d.ts +2 -0
  286. package/dist-lib/lib/tools/http-request/encode-fields.js +69 -0
  287. package/dist-lib/lib/tools/http-request/truncate-response.d.ts +1 -0
  288. package/dist-lib/lib/tools/http-request/truncate-response.js +83 -0
  289. package/dist-lib/lib/tools/http-request/utils.d.ts +27 -0
  290. package/dist-lib/lib/tools/http-request/utils.js +84 -0
  291. package/dist-lib/lib/tools/http-request.d.ts +20 -0
  292. package/dist-lib/lib/tools/http-request.js +177 -0
  293. package/dist-lib/lib/tools/mcp/utils.d.ts +47 -0
  294. package/dist-lib/lib/tools/mcp/utils.js +172 -0
  295. package/dist-lib/lib/tools/mcp-call.d.ts +14 -0
  296. package/dist-lib/lib/tools/mcp-call.js +155 -0
  297. package/dist-lib/lib/tools/model-args.d.ts +1 -0
  298. package/dist-lib/lib/tools/model-args.js +4 -0
  299. package/dist-lib/lib/tools/operations/builders.d.ts +17 -0
  300. package/dist-lib/lib/tools/operations/builders.js +179 -0
  301. package/dist-lib/lib/tools/operations/compile.d.ts +7 -0
  302. package/dist-lib/lib/tools/operations/compile.js +92 -0
  303. package/dist-lib/lib/tools/operations/gmail-message.d.ts +15 -0
  304. package/dist-lib/lib/tools/operations/gmail-message.js +62 -0
  305. package/dist-lib/lib/tools/operations/manifest.d.ts +60 -0
  306. package/dist-lib/lib/tools/operations/manifest.js +50 -0
  307. package/dist-lib/lib/tools/outbound-guard.d.ts +10 -0
  308. package/dist-lib/lib/tools/outbound-guard.js +127 -0
  309. package/dist-lib/lib/tools/private-ip.d.ts +4 -0
  310. package/dist-lib/lib/tools/private-ip.js +126 -0
  311. package/dist-lib/lib/tools/rag-search.d.ts +2 -0
  312. package/dist-lib/lib/tools/rag-search.js +98 -0
  313. package/dist-lib/lib/tools/read-files.d.ts +5 -0
  314. package/dist-lib/lib/tools/read-files.js +153 -0
  315. package/dist-lib/lib/tools/skill.d.ts +10 -0
  316. package/dist-lib/lib/tools/skill.js +123 -0
  317. package/dist-lib/lib/tools/skills/auth-resolver.d.ts +43 -0
  318. package/dist-lib/lib/tools/skills/auth-resolver.js +121 -0
  319. package/dist-lib/lib/tools/skills/bin-check.d.ts +9 -0
  320. package/dist-lib/lib/tools/skills/bin-check.js +56 -0
  321. package/dist-lib/lib/tools/skills/bundled-dir.d.ts +2 -0
  322. package/dist-lib/lib/tools/skills/bundled-dir.js +117 -0
  323. package/dist-lib/lib/tools/skills/bundled-hash.d.ts +4 -0
  324. package/dist-lib/lib/tools/skills/bundled-hash.js +12 -0
  325. package/dist-lib/lib/tools/skills/catalog.d.ts +60 -0
  326. package/dist-lib/lib/tools/skills/catalog.js +203 -0
  327. package/dist-lib/lib/tools/skills/cli-argv.d.ts +9 -0
  328. package/dist-lib/lib/tools/skills/cli-argv.js +147 -0
  329. package/dist-lib/lib/tools/skills/cli-schema-check.d.ts +3 -0
  330. package/dist-lib/lib/tools/skills/cli-schema-check.js +62 -0
  331. package/dist-lib/lib/tools/skills/cli-schema-load.d.ts +4 -0
  332. package/dist-lib/lib/tools/skills/cli-schema-load.js +90 -0
  333. package/dist-lib/lib/tools/skills/cli-schema-types.d.ts +30 -0
  334. package/dist-lib/lib/tools/skills/cli-schema-types.js +1 -0
  335. package/dist-lib/lib/tools/skills/cli-schema.d.ts +7 -0
  336. package/dist-lib/lib/tools/skills/cli-schema.js +35 -0
  337. package/dist-lib/lib/tools/skills/credential-check.d.ts +20 -0
  338. package/dist-lib/lib/tools/skills/credential-check.js +94 -0
  339. package/dist-lib/lib/tools/skills/credential-grants.d.ts +9 -0
  340. package/dist-lib/lib/tools/skills/credential-grants.js +25 -0
  341. package/dist-lib/lib/tools/skills/credential-health.d.ts +8 -0
  342. package/dist-lib/lib/tools/skills/credential-health.js +51 -0
  343. package/dist-lib/lib/tools/skills/credential-slots.d.ts +7 -0
  344. package/dist-lib/lib/tools/skills/credential-slots.js +8 -0
  345. package/dist-lib/lib/tools/skills/frontmatter-parser.d.ts +23 -0
  346. package/dist-lib/lib/tools/skills/frontmatter-parser.js +68 -0
  347. package/dist-lib/lib/tools/skills/index.d.ts +5 -0
  348. package/dist-lib/lib/tools/skills/index.js +5 -0
  349. package/dist-lib/lib/tools/skills/manifest-parse.d.ts +12 -0
  350. package/dist-lib/lib/tools/skills/manifest-parse.js +199 -0
  351. package/dist-lib/lib/tools/skills/manifest.d.ts +47 -0
  352. package/dist-lib/lib/tools/skills/manifest.js +1 -0
  353. package/dist-lib/lib/tools/skills/mention-name.d.ts +1 -0
  354. package/dist-lib/lib/tools/skills/mention-name.js +4 -0
  355. package/dist-lib/lib/tools/skills/mention.d.ts +6 -0
  356. package/dist-lib/lib/tools/skills/mention.js +42 -0
  357. package/dist-lib/lib/tools/skills/obsidian-readiness.d.ts +16 -0
  358. package/dist-lib/lib/tools/skills/obsidian-readiness.js +95 -0
  359. package/dist-lib/lib/tools/skills/overlay-crud.d.ts +18 -0
  360. package/dist-lib/lib/tools/skills/overlay-crud.js +98 -0
  361. package/dist-lib/lib/tools/skills/overlay-dir.d.ts +2 -0
  362. package/dist-lib/lib/tools/skills/overlay-dir.js +22 -0
  363. package/dist-lib/lib/tools/skills/overlay-watch.d.ts +13 -0
  364. package/dist-lib/lib/tools/skills/overlay-watch.js +44 -0
  365. package/dist-lib/lib/tools/skills/scope-key.d.ts +7 -0
  366. package/dist-lib/lib/tools/skills/scope-key.js +7 -0
  367. package/dist-lib/lib/tools/skills/setup-routes.d.ts +4 -0
  368. package/dist-lib/lib/tools/skills/setup-routes.js +14 -0
  369. package/dist-lib/lib/tools/skills/skill-settings.d.ts +16 -0
  370. package/dist-lib/lib/tools/skills/skill-settings.js +33 -0
  371. package/dist-lib/lib/tools/skills/skill-state-constants.d.ts +12 -0
  372. package/dist-lib/lib/tools/skills/skill-state-constants.js +14 -0
  373. package/dist-lib/lib/tools/skills/skill-state.d.ts +40 -0
  374. package/dist-lib/lib/tools/skills/skill-state.js +117 -0
  375. package/dist-lib/lib/tools/skills/tool-grants.d.ts +5 -0
  376. package/dist-lib/lib/tools/skills/tool-grants.js +14 -0
  377. package/dist-lib/lib/tools/toolsets.d.ts +8 -0
  378. package/dist-lib/lib/tools/toolsets.js +20 -0
  379. package/dist-lib/lib/tools/url-guard.d.ts +8 -0
  380. package/dist-lib/lib/tools/url-guard.js +40 -0
  381. package/dist-lib/lib/tools/web-fetch.d.ts +8 -0
  382. package/dist-lib/lib/tools/web-fetch.js +302 -0
  383. package/dist-lib/lib/tools/web-search.d.ts +6 -0
  384. package/dist-lib/lib/tools/web-search.js +55 -0
  385. package/dist-lib/lib/transport.d.ts +12 -0
  386. package/dist-lib/lib/transport.js +59 -0
  387. package/dist-lib/lib/user-agent.d.ts +1 -0
  388. package/dist-lib/lib/user-agent.js +1 -0
  389. package/dist-lib/lib/validating-lookup.d.ts +17 -0
  390. package/dist-lib/lib/validating-lookup.js +25 -0
  391. package/dist-lib/lib/wav-encode.d.ts +5 -0
  392. package/dist-lib/lib/wav-encode.js +24 -0
  393. package/dist-lib/lib/web-fetch/embedded-state.d.ts +1 -0
  394. package/dist-lib/lib/web-fetch/embedded-state.js +131 -0
  395. package/dist-lib/lib/web-fetch/extract.d.ts +6 -0
  396. package/dist-lib/lib/web-fetch/extract.js +65 -0
  397. package/dist-lib/lib/web-fetch/images.d.ts +3 -0
  398. package/dist-lib/lib/web-fetch/images.js +43 -0
  399. package/dist-lib/lib/web-fetch/video.d.ts +5 -0
  400. package/dist-lib/lib/web-fetch/video.js +42 -0
  401. package/dist-lib/lib/web-search/engine-registry.d.ts +7 -0
  402. package/dist-lib/lib/web-search/engine-registry.js +17 -0
  403. package/dist-lib/lib/web-search/engines/aol.d.ts +3 -0
  404. package/dist-lib/lib/web-search/engines/aol.js +81 -0
  405. package/dist-lib/lib/web-search/engines/bing.d.ts +3 -0
  406. package/dist-lib/lib/web-search/engines/bing.js +111 -0
  407. package/dist-lib/lib/web-search/engines/brave.d.ts +3 -0
  408. package/dist-lib/lib/web-search/engines/brave.js +59 -0
  409. package/dist-lib/lib/web-search/engines/duckduckgo.d.ts +3 -0
  410. package/dist-lib/lib/web-search/engines/duckduckgo.js +112 -0
  411. package/dist-lib/lib/web-search/engines/google.d.ts +3 -0
  412. package/dist-lib/lib/web-search/engines/google.js +92 -0
  413. package/dist-lib/lib/web-search/engines/wikipedia.d.ts +3 -0
  414. package/dist-lib/lib/web-search/engines/wikipedia.js +37 -0
  415. package/dist-lib/lib/web-search/engines/yahoo.d.ts +3 -0
  416. package/dist-lib/lib/web-search/engines/yahoo.js +81 -0
  417. package/dist-lib/lib/web-search/fetch-html.d.ts +25 -0
  418. package/dist-lib/lib/web-search/fetch-html.js +97 -0
  419. package/dist-lib/lib/web-search/format-results.d.ts +3 -0
  420. package/dist-lib/lib/web-search/format-results.js +14 -0
  421. package/dist-lib/lib/web-search/html-helpers.d.ts +3 -0
  422. package/dist-lib/lib/web-search/html-helpers.js +24 -0
  423. package/dist-lib/lib/web-search/merge-results.d.ts +2 -0
  424. package/dist-lib/lib/web-search/merge-results.js +53 -0
  425. package/dist-lib/lib/web-search/orchestrator.d.ts +14 -0
  426. package/dist-lib/lib/web-search/orchestrator.js +50 -0
  427. package/dist-lib/lib/web-search/types.d.ts +34 -0
  428. package/dist-lib/lib/web-search/types.js +1 -0
  429. package/dist-lib/lib/web-search/url-helpers.d.ts +1 -0
  430. package/dist-lib/lib/web-search/url-helpers.js +11 -0
  431. package/dist-lib/lib/web-search/url-normalize.d.ts +1 -0
  432. package/dist-lib/lib/web-search/url-normalize.js +25 -0
  433. package/dist-lib/lib/web-search/user-agents.d.ts +3 -0
  434. package/dist-lib/lib/web-search/user-agents.js +3 -0
  435. package/dist-lib/lib/wire.d.ts +50 -0
  436. package/dist-lib/lib/wire.js +145 -0
  437. package/dist-lib/schema/baseline.d.ts +8 -0
  438. package/dist-lib/schema/baseline.js +35 -0
  439. package/dist-lib/schema/build.d.ts +1 -0
  440. package/dist-lib/schema/build.js +39 -0
  441. package/dist-lib/schema/generate.d.ts +20 -0
  442. package/dist-lib/schema/generate.js +149 -0
  443. package/dist-lib/schema/harness.d.ts +2 -0
  444. package/dist-lib/schema/harness.js +745 -0
  445. package/dist-lib/schema/release-tags.d.ts +5 -0
  446. package/dist-lib/schema/release-tags.js +58 -0
  447. package/dist-lib/spec/bind.d.ts +2 -0
  448. package/dist-lib/spec/bind.js +124 -0
  449. package/dist-lib/spec/calls.d.ts +3 -0
  450. package/dist-lib/spec/calls.js +41 -0
  451. package/dist-lib/spec/hrpc/hrpc.json +356 -0
  452. package/dist-lib/spec/hrpc/index.d.ts +3 -0
  453. package/dist-lib/spec/hrpc/index.js +463 -0
  454. package/dist-lib/spec/hrpc/messages.d.ts +4 -0
  455. package/dist-lib/spec/hrpc/messages.js +3102 -0
  456. package/dist-lib/spec/hyperschema/index.js +3102 -0
  457. package/dist-lib/spec/hyperschema/schema.json +2290 -0
  458. package/dist-lib/spec/hyperschema/types.d.ts +554 -0
  459. package/dist-lib/spec/index.d.ts +8 -0
  460. package/dist-lib/spec/index.js +1 -0
  461. package/package.json +239 -64
  462. package/.gitattributes +0 -1
@@ -0,0 +1,20 @@
1
+ import type { ToolExecutionOutcome } from '../tool-call-display.ts';
2
+ import type { HarnessHook, HookRejection, PostToolCallPayload, PreToolCallPayload, RunEndPayload, RunStartPayload } from './types.ts';
3
+ export type PreToolFold = {
4
+ ok: true;
5
+ args: Record<string, unknown>;
6
+ } | {
7
+ ok: false;
8
+ rejection: HookRejection;
9
+ };
10
+ export declare class HookPipeline {
11
+ private readonly _behaviorHooks;
12
+ constructor(hooks?: readonly HarnessHook[]);
13
+ onRunStart(payload: Omit<RunStartPayload, 'phase'>): Promise<void>;
14
+ onRunEnd(payload: Omit<RunEndPayload, 'phase'>): Promise<void>;
15
+ runPreToolFold(payload: Omit<PreToolCallPayload, 'phase'>): Promise<PreToolFold>;
16
+ runPostToolFold(payload: Omit<PostToolCallPayload, 'phase'>): Promise<{
17
+ result: unknown;
18
+ outcome?: ToolExecutionOutcome;
19
+ }>;
20
+ }
@@ -0,0 +1,49 @@
1
+ import { hlog } from "../log.js";
2
+ import { normalizeToolExecutionOutcome } from "../helpers/run-outcome.js";
3
+ import { harnessHooks } from "./registry.js";
4
+ import { runHooks } from "./run.js";
5
+ export class HookPipeline {
6
+ _behaviorHooks;
7
+ constructor(hooks = harnessHooks) {
8
+ this._behaviorHooks = hooks;
9
+ }
10
+ async onRunStart(payload) {
11
+ const folded = await runHooks(this._behaviorHooks, { phase: 'runStart', ...payload });
12
+ if ('guidance' in folded)
13
+ hlog('run hook failed', { stage: 'runStart', error: folded.error });
14
+ }
15
+ async onRunEnd(payload) {
16
+ const folded = await runHooks(this._behaviorHooks, { phase: 'runEnd', ...payload });
17
+ if ('guidance' in folded)
18
+ hlog('run hook failed', { stage: 'runEnd', error: folded.error });
19
+ }
20
+ async runPreToolFold(payload) {
21
+ const folded = await runHooks(this._behaviorHooks, { phase: 'preToolCall', ...payload });
22
+ if ('guidance' in folded) {
23
+ hlog('tool rejected: pre-hook refused the call', { tool: payload.toolName });
24
+ return { ok: false, rejection: folded };
25
+ }
26
+ return { ok: true, args: folded.args };
27
+ }
28
+ async runPostToolFold(payload) {
29
+ let result = payload.result;
30
+ let outcome = payload.outcome;
31
+ if (payload.executed) {
32
+ const folded = await runHooks(this._behaviorHooks, {
33
+ phase: 'postToolCall',
34
+ ...payload,
35
+ result
36
+ });
37
+ if ('guidance' in folded) {
38
+ result = folded;
39
+ outcome = { kind: 'guidance', message: folded.error };
40
+ }
41
+ else {
42
+ result = folded.result;
43
+ }
44
+ }
45
+ if (outcome !== undefined)
46
+ outcome = normalizeToolExecutionOutcome(result, outcome);
47
+ return { result, outcome };
48
+ }
49
+ }
@@ -0,0 +1,2 @@
1
+ import type { HarnessHook } from './types.ts';
2
+ export declare const harnessHooks: HarnessHook[];
@@ -0,0 +1,6 @@
1
+ import { ArgRepairHook, EgressGuardHook, SkillCatalogGuardHook } from "./built-in/index.js";
2
+ export const harnessHooks = [
3
+ new ArgRepairHook(),
4
+ new EgressGuardHook(),
5
+ new SkillCatalogGuardHook()
6
+ ];
@@ -0,0 +1,5 @@
1
+ import type { HarnessHook, HookRejection, PostToolCallPayload, PreToolCallPayload, RunEndPayload, RunStartPayload } from './types.ts';
2
+ export declare function runHooks(hooks: readonly HarnessHook[], ctx: PreToolCallPayload): Promise<PreToolCallPayload | HookRejection>;
3
+ export declare function runHooks(hooks: readonly HarnessHook[], ctx: PostToolCallPayload): Promise<PostToolCallPayload | HookRejection>;
4
+ export declare function runHooks(hooks: readonly HarnessHook[], ctx: RunStartPayload): Promise<RunStartPayload | HookRejection>;
5
+ export declare function runHooks(hooks: readonly HarnessHook[], ctx: RunEndPayload): Promise<RunEndPayload | HookRejection>;
@@ -0,0 +1,83 @@
1
+ import { hlog } from "../log.js";
2
+ function cloneJson(value) {
3
+ try {
4
+ const text = JSON.stringify(value);
5
+ return text === undefined ? value : JSON.parse(text);
6
+ }
7
+ catch {
8
+ return value;
9
+ }
10
+ }
11
+ function isRecord(value) {
12
+ return typeof value === 'object' && value !== null && !Array.isArray(value);
13
+ }
14
+ function cloneArgs(args) {
15
+ const cloned = cloneJson(args);
16
+ return isRecord(cloned) ? cloned : args;
17
+ }
18
+ function isMessage(value) {
19
+ return isRecord(value) && typeof value.role === 'string' && typeof value.content === 'string';
20
+ }
21
+ function freshContext(ctx) {
22
+ if (ctx.phase === 'preToolCall')
23
+ return { ...ctx, args: cloneArgs(ctx.args) };
24
+ if (ctx.phase === 'postToolCall') {
25
+ return { ...ctx, args: cloneArgs(ctx.args), result: cloneJson(ctx.result) };
26
+ }
27
+ if (ctx.phase === 'runStart') {
28
+ const cloned = cloneJson(ctx.messages);
29
+ return { ...ctx, messages: Array.isArray(cloned) ? cloned.filter(isMessage) : ctx.messages };
30
+ }
31
+ return { ...ctx };
32
+ }
33
+ function isRejection(value) {
34
+ return 'error' in value;
35
+ }
36
+ function rejection(value) {
37
+ return { error: String(value.error), guidance: true };
38
+ }
39
+ function merge(current, returned) {
40
+ if (current.phase === 'preToolCall' && 'args' in returned) {
41
+ return {
42
+ ...current,
43
+ args: returned.args
44
+ };
45
+ }
46
+ if (current.phase === 'postToolCall' && 'result' in returned) {
47
+ return {
48
+ ...current,
49
+ result: returned.result
50
+ };
51
+ }
52
+ return current;
53
+ }
54
+ function rejectionOf(current, err) {
55
+ const message = err instanceof Error ? err.message : String(err);
56
+ hlog('hook failed', { stage: current.phase, error: message });
57
+ if (current.phase === 'postToolCall') {
58
+ return {
59
+ error: `tool executed; output withheld: post-hook failed: ${message}. Do not retry this call.`,
60
+ guidance: true
61
+ };
62
+ }
63
+ return { error: `hook failed in ${current.phase}: ${message}`, guidance: true };
64
+ }
65
+ export async function runHooks(hooks, ctx) {
66
+ let current = ctx;
67
+ for (const hook of hooks) {
68
+ if (hook.phase !== current.phase)
69
+ continue;
70
+ try {
71
+ const returned = await hook.run(freshContext(current));
72
+ if (!returned || typeof returned !== 'object')
73
+ continue;
74
+ if (isRejection(returned))
75
+ return rejection(returned);
76
+ current = merge(current, returned);
77
+ }
78
+ catch (err) {
79
+ return rejectionOf(current, err);
80
+ }
81
+ }
82
+ return current;
83
+ }
@@ -0,0 +1,57 @@
1
+ import type { AbortSignal as BareAbortSignal } from 'bare-abort-controller';
2
+ import type { ToolExecutionOutcome } from '../tool-call-display.ts';
3
+ import type { Message, ResourceDescriptor, ToolDefinition, ToolEffect } from '../capabilities/completion.ts';
4
+ export type HookPhase = 'runStart' | 'preToolCall' | 'postToolCall' | 'runEnd';
5
+ export interface RunStartPayload {
6
+ readonly phase: 'runStart';
7
+ readonly agentId: string | null;
8
+ readonly messages: ReadonlyArray<Message>;
9
+ }
10
+ export interface PreToolCallPayload {
11
+ readonly phase: 'preToolCall';
12
+ readonly toolName: string;
13
+ readonly agentId: string | null;
14
+ readonly signal?: BareAbortSignal | undefined;
15
+ readonly skillNames?: readonly string[];
16
+ readonly parameters?: ToolDefinition['parameters'];
17
+ args: Record<string, unknown>;
18
+ }
19
+ export interface PostToolCallPayload {
20
+ readonly phase: 'postToolCall';
21
+ readonly toolName: string;
22
+ readonly executed: boolean;
23
+ readonly effect: ToolEffect;
24
+ readonly resource: ResourceDescriptor | null;
25
+ readonly agentId: string | null;
26
+ readonly args: Record<string, unknown>;
27
+ readonly toolset?: string | null;
28
+ readonly outcome?: ToolExecutionOutcome;
29
+ result: unknown;
30
+ }
31
+ export interface RunEndPayload {
32
+ readonly phase: 'runEnd';
33
+ readonly agentId: string | null;
34
+ readonly stats: {
35
+ readonly totalTokens: number;
36
+ readonly durationMs: number;
37
+ readonly timeToFirstToken?: number | undefined;
38
+ };
39
+ readonly outcome: 'done' | 'aborted' | 'error' | 'abandoned';
40
+ readonly error?: unknown;
41
+ }
42
+ export type HookContext = RunStartPayload | PreToolCallPayload | PostToolCallPayload | RunEndPayload;
43
+ export interface HookRejection {
44
+ error: string;
45
+ guidance: true;
46
+ }
47
+ export interface PreToolCallResult {
48
+ readonly args: Record<string, unknown>;
49
+ }
50
+ export interface PostToolCallResult {
51
+ readonly result: unknown;
52
+ }
53
+ export type HookResult = PreToolCallResult | PostToolCallResult | HookRejection | void;
54
+ export interface HarnessHook {
55
+ readonly phase: HookPhase;
56
+ run(ctx: HookContext): Promise<HookResult> | HookResult;
57
+ }
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,5 @@
1
+ export declare function setHarnessLog(on: boolean): void;
2
+ export declare function harnessLogEnabled(): boolean;
3
+ export declare function setHarnessLogSink(next: ((line: string) => void) | null): void;
4
+ export declare function hlog(message: string, data?: Record<string, unknown>): void;
5
+ export declare function hdiag(message: string, data?: Record<string, unknown>): void;
@@ -0,0 +1,37 @@
1
+ import process from 'process';
2
+ let enabled = process.env.QVAC_HARNESS_LOG === '1';
3
+ export function setHarnessLog(on) {
4
+ enabled = on;
5
+ }
6
+ export function harnessLogEnabled() {
7
+ return enabled;
8
+ }
9
+ let sink = null;
10
+ export function setHarnessLogSink(next) {
11
+ sink = next;
12
+ }
13
+ export function hlog(message, data) {
14
+ if (!enabled)
15
+ return;
16
+ const tail = data === undefined ? '' : ` ${safeJson(data)}`;
17
+ const line = `${message}${tail}`;
18
+ if (sink) {
19
+ sink(line);
20
+ return;
21
+ }
22
+ process.stdout.write(`${line}\n`);
23
+ }
24
+ export function hdiag(message, data) {
25
+ if (!sink)
26
+ return;
27
+ const tail = data === undefined ? '' : ` ${safeJson(data)}`;
28
+ sink(`${message}${tail}`);
29
+ }
30
+ function safeJson(data) {
31
+ try {
32
+ return JSON.stringify(data);
33
+ }
34
+ catch {
35
+ return '[unserializable]';
36
+ }
37
+ }
@@ -0,0 +1,22 @@
1
+ export interface ModelProgressFrame {
2
+ type: string;
3
+ [key: string]: unknown;
4
+ }
5
+ export interface ProgressBytes {
6
+ downloaded: number;
7
+ total: number;
8
+ aggregate: boolean;
9
+ }
10
+ export interface TransferProgress extends ProgressBytes {
11
+ percentage: number;
12
+ }
13
+ export declare function transferProgress(event: Record<string, unknown>): TransferProgress | null;
14
+ export declare function progressBytes(event: ModelProgressFrame): ProgressBytes;
15
+ export declare class DownloadSpeedSampler {
16
+ private _downloaded;
17
+ private _at;
18
+ private _bytesPerSecond;
19
+ private _downloadKey;
20
+ sample(bytes: ProgressBytes, at: number, downloadKey: unknown): number;
21
+ private _reset;
22
+ }
@@ -0,0 +1,95 @@
1
+ const EMA_WEIGHT = 0.25;
2
+ const STALL_MS = 2_000;
3
+ const NO_BYTES = { downloaded: 0, total: 0, aggregate: false };
4
+ export function transferProgress(event) {
5
+ const aggregate = aggregateTransfer(event.fileSetInfo) ?? aggregateTransfer(event.shardInfo);
6
+ if (aggregate)
7
+ return aggregate;
8
+ const bytes = { downloaded: uint(event.downloaded), total: uint(event.total), aggregate: false };
9
+ const reported = reportedPercentage(event.percentage);
10
+ if (reported === null && bytes.downloaded === 0 && bytes.total === 0)
11
+ return null;
12
+ return { ...bytes, percentage: resolvePercentage(reported, bytes) };
13
+ }
14
+ export function progressBytes(event) {
15
+ const transfer = transferProgress(event);
16
+ if (!transfer)
17
+ return NO_BYTES;
18
+ return {
19
+ downloaded: transfer.downloaded,
20
+ total: transfer.total,
21
+ aggregate: transfer.aggregate
22
+ };
23
+ }
24
+ export class DownloadSpeedSampler {
25
+ _downloaded = null;
26
+ _at = 0;
27
+ _bytesPerSecond = 0;
28
+ _downloadKey = null;
29
+ sample(bytes, at, downloadKey) {
30
+ const key = typeof downloadKey === 'string' ? downloadKey : null;
31
+ const keyChanged = !bytes.aggregate && this._downloaded !== null && key !== this._downloadKey;
32
+ if (this._downloaded === null || bytes.downloaded < this._downloaded || keyChanged) {
33
+ this._reset(bytes.downloaded, at, key);
34
+ return 0;
35
+ }
36
+ const elapsedMs = at - this._at;
37
+ if (elapsedMs <= 0)
38
+ return Math.round(this._bytesPerSecond);
39
+ const delta = bytes.downloaded - this._downloaded;
40
+ if (delta === 0) {
41
+ if (elapsedMs >= STALL_MS) {
42
+ this._bytesPerSecond = 0;
43
+ this._at = at;
44
+ }
45
+ return Math.round(this._bytesPerSecond);
46
+ }
47
+ this._downloaded = bytes.downloaded;
48
+ this._at = at;
49
+ this._downloadKey = key;
50
+ const measured = (delta * 1000) / elapsedMs;
51
+ this._bytesPerSecond =
52
+ this._bytesPerSecond > 0
53
+ ? EMA_WEIGHT * measured + (1 - EMA_WEIGHT) * this._bytesPerSecond
54
+ : measured;
55
+ return Math.max(0, Math.round(this._bytesPerSecond));
56
+ }
57
+ _reset(downloaded, at, downloadKey) {
58
+ this._downloaded = downloaded;
59
+ this._at = at;
60
+ this._bytesPerSecond = 0;
61
+ this._downloadKey = downloadKey;
62
+ }
63
+ }
64
+ function aggregateTransfer(value) {
65
+ if (!record(value))
66
+ return null;
67
+ const bytes = {
68
+ downloaded: uint(value.overallDownloaded),
69
+ total: uint(value.overallTotal),
70
+ aggregate: true
71
+ };
72
+ const reported = reportedPercentage(value.overallPercentage);
73
+ if (bytes.downloaded === 0 && bytes.total === 0) {
74
+ return reported !== null && reported > 0 ? { ...bytes, percentage: reported } : null;
75
+ }
76
+ return { ...bytes, percentage: resolvePercentage(reported, bytes) };
77
+ }
78
+ function resolvePercentage(reported, bytes) {
79
+ return reported !== null && reported > 0 ? reported : bytesPercentage(bytes);
80
+ }
81
+ function reportedPercentage(value) {
82
+ return typeof value === 'number' && Number.isFinite(value) ? percentage(value) : null;
83
+ }
84
+ function bytesPercentage(bytes) {
85
+ return bytes.total > 0 ? percentage((bytes.downloaded / bytes.total) * 100) : 0;
86
+ }
87
+ function record(value) {
88
+ return typeof value === 'object' && value !== null;
89
+ }
90
+ function uint(value) {
91
+ return typeof value === 'number' && Number.isFinite(value) ? Math.max(0, Math.floor(value)) : 0;
92
+ }
93
+ function percentage(value) {
94
+ return Math.max(0, Math.min(100, Math.floor(value)));
95
+ }
@@ -0,0 +1,5 @@
1
+ import type { ModelRegistryEntry } from '@qvac/sdk';
2
+ export type ModelSrc = string | (ModelRegistryEntry & {
3
+ src: string;
4
+ });
5
+ export declare function defaultContextSize(modelSrc: ModelSrc): number;
@@ -0,0 +1,12 @@
1
+ const TINY_MODEL_PARAMS_BILLIONS = 0.8;
2
+ const TINY_MODEL_CONTEXT_SIZE = 8_192;
3
+ const DESKTOP_DEFAULT_CONTEXT_SIZE = 51_200;
4
+ export function defaultContextSize(modelSrc) {
5
+ if (typeof modelSrc === 'string')
6
+ return DESKTOP_DEFAULT_CONTEXT_SIZE;
7
+ const params = Number.parseFloat(modelSrc.params);
8
+ if (Number.isFinite(params) && params <= TINY_MODEL_PARAMS_BILLIONS) {
9
+ return TINY_MODEL_CONTEXT_SIZE;
10
+ }
11
+ return DESKTOP_DEFAULT_CONTEXT_SIZE;
12
+ }
@@ -0,0 +1,14 @@
1
+ export type EmbedDevice = 'gpu' | 'cpu';
2
+ export interface EmbedConfigInput {
3
+ device?: EmbedDevice;
4
+ gpuLayers?: number;
5
+ batchSize?: number;
6
+ }
7
+ export interface EmbedConfig {
8
+ readonly device: EmbedDevice;
9
+ readonly gpuLayers?: number | undefined;
10
+ readonly batchSize: number;
11
+ }
12
+ export declare const DEFAULT_EMBED_BATCH_SIZE = 1024;
13
+ export declare function createEmbedConfig(input?: EmbedConfigInput): EmbedConfig;
14
+ export declare function assertEmbedDevice(device: unknown): asserts device is EmbedDevice;
@@ -0,0 +1,31 @@
1
+ export const DEFAULT_EMBED_BATCH_SIZE = 1024;
2
+ export function createEmbedConfig(input = {}) {
3
+ assertOptionalEmbedDevice(input.device);
4
+ assertNonNegativeInteger('embedGpuLayers', input.gpuLayers);
5
+ assertPositiveInteger('embedBatchSize', input.batchSize);
6
+ return {
7
+ device: input.device ?? 'gpu',
8
+ gpuLayers: input.gpuLayers,
9
+ batchSize: input.batchSize ?? DEFAULT_EMBED_BATCH_SIZE
10
+ };
11
+ }
12
+ export function assertEmbedDevice(device) {
13
+ if (device === 'gpu' || device === 'cpu')
14
+ return;
15
+ throw new TypeError('embedDevice must be "gpu" or "cpu"');
16
+ }
17
+ function assertOptionalEmbedDevice(device) {
18
+ if (device === undefined)
19
+ return;
20
+ assertEmbedDevice(device);
21
+ }
22
+ function assertNonNegativeInteger(name, value) {
23
+ if (value === undefined || (Number.isInteger(value) && value >= 0))
24
+ return;
25
+ throw new TypeError(`${name} must be a non-negative integer`);
26
+ }
27
+ function assertPositiveInteger(name, value) {
28
+ if (value === undefined || (Number.isInteger(value) && value > 0))
29
+ return;
30
+ throw new TypeError(`${name} must be a positive integer`);
31
+ }
@@ -0,0 +1,3 @@
1
+ export type MainGpuProbe = () => Promise<string | undefined>;
2
+ export declare function resolveMainGpu(): Promise<string | undefined>;
3
+ export declare function resetMainGpuCache(): void;
@@ -0,0 +1,26 @@
1
+ import { promises } from 'fs';
2
+ import { platform } from 'os';
3
+ let cachedDedicated = null;
4
+ export async function resolveMainGpu() {
5
+ if (platform() !== 'linux')
6
+ return undefined;
7
+ if (cachedDedicated !== null)
8
+ return cachedDedicated;
9
+ if (await hasNvidiaGpu()) {
10
+ cachedDedicated = 'dedicated';
11
+ return cachedDedicated;
12
+ }
13
+ return undefined;
14
+ }
15
+ export function resetMainGpuCache() {
16
+ cachedDedicated = null;
17
+ }
18
+ async function hasNvidiaGpu() {
19
+ try {
20
+ const entries = await promises.readdir('/proc/driver/nvidia/gpus');
21
+ return entries.length > 0;
22
+ }
23
+ catch {
24
+ return false;
25
+ }
26
+ }
@@ -0,0 +1,4 @@
1
+ export declare function adrenoSafeKvCache(device: 'cpu' | 'gpu' | undefined, requestedK: string | undefined, requestedV: string | undefined, hostPlatform?: string): {
2
+ k: string | undefined;
3
+ v: string | undefined;
4
+ };
@@ -0,0 +1,6 @@
1
+ import { platform } from 'os';
2
+ export function adrenoSafeKvCache(device, requestedK, requestedV, hostPlatform = platform()) {
3
+ if (device === 'cpu' || hostPlatform !== 'android')
4
+ return { k: requestedK, v: requestedV };
5
+ return { k: 'f16', v: 'f16' };
6
+ }
@@ -0,0 +1,10 @@
1
+ export type LlmGenerationParams = {
2
+ temp?: number;
3
+ top_p?: number;
4
+ top_k?: number;
5
+ presence_penalty?: number;
6
+ repeat_penalty?: number;
7
+ frequency_penalty?: number;
8
+ reasoning_budget: -1 | 0;
9
+ };
10
+ export declare function resolveLlmGenerationParams(modelName: string | undefined, reasoningEnabled: boolean | undefined, deviceDefault?: boolean): LlmGenerationParams | undefined;
@@ -0,0 +1,58 @@
1
+ const QWEN_NONTHINKING_VL_SAMPLER = {
2
+ temp: 0.7,
3
+ top_p: 0.8,
4
+ top_k: 20,
5
+ presence_penalty: 1.5,
6
+ repeat_penalty: 1.0,
7
+ frequency_penalty: 0
8
+ };
9
+ const QWEN_THINKING_VL_OR_CODING_SAMPLER = {
10
+ temp: 0.6,
11
+ top_p: 0.95,
12
+ top_k: 20,
13
+ presence_penalty: 0,
14
+ repeat_penalty: 1.0,
15
+ frequency_penalty: 0
16
+ };
17
+ const QWEN_THINKING_GENERAL_SAMPLER = {
18
+ temp: 1.0,
19
+ top_p: 0.95,
20
+ top_k: 20,
21
+ presence_penalty: 1.5,
22
+ repeat_penalty: 1.0,
23
+ frequency_penalty: 0
24
+ };
25
+ const PRESET_RESOLVERS = [
26
+ { prefix: 'Qwen3.5-0.8B-', resolve: qwen08BPreset },
27
+ { prefix: 'Qwen3.5-2B-', resolve: qwen2BPreset },
28
+ { prefix: 'Qwen3.5-4B-', resolve: qwen4BPreset }
29
+ ];
30
+ export function resolveLlmGenerationParams(modelName, reasoningEnabled, deviceDefault) {
31
+ const resolver = modelName
32
+ ? PRESET_RESOLVERS.find((entry) => modelName.startsWith(entry.prefix))
33
+ : undefined;
34
+ if (resolver)
35
+ return resolver.resolve(reasoningEnabled);
36
+ const effective = reasoningEnabled ?? deviceDefault;
37
+ if (effective === undefined)
38
+ return undefined;
39
+ return { reasoning_budget: effective ? -1 : 0 };
40
+ }
41
+ function qwen08BPreset(reasoningEnabled) {
42
+ return reasoningEnabled === true ? thinkingVlPreset() : nonThinkingVlPreset();
43
+ }
44
+ function qwen2BPreset(reasoningEnabled) {
45
+ return reasoningEnabled === false ? nonThinkingVlPreset() : thinkingVlPreset();
46
+ }
47
+ function qwen4BPreset(reasoningEnabled) {
48
+ return reasoningEnabled === false ? nonThinkingVlPreset() : thinkingGeneralPreset();
49
+ }
50
+ function nonThinkingVlPreset() {
51
+ return { ...QWEN_NONTHINKING_VL_SAMPLER, reasoning_budget: 0 };
52
+ }
53
+ function thinkingVlPreset() {
54
+ return { ...QWEN_THINKING_VL_OR_CODING_SAMPLER, reasoning_budget: -1 };
55
+ }
56
+ function thinkingGeneralPreset() {
57
+ return { ...QWEN_THINKING_GENERAL_SAMPLER, reasoning_budget: -1 };
58
+ }
@@ -0,0 +1,29 @@
1
+ export type CapabilityProfile = 'tiny' | 'low' | 'mid' | 'high' | 'xhigh';
2
+ export declare const CAPABILITY_PROFILE_ORDER: readonly CapabilityProfile[];
3
+ export declare const QWEN_35_2B = "Qwen3.5-2B-Q4_K_M";
4
+ export declare const QWEN_35_4B = "Qwen3.5-4B-Q4_K_M";
5
+ export declare const QWEN_35_9B = "Qwen3.5-9B-Q4_K_M";
6
+ export declare const QWEN_36_27B = "Qwen3.6-27B-UD-Q4_K_XL";
7
+ export declare const QWEN_36_35B_A3B = "Qwen3.6-35B-A3B-UD-Q4_K_M";
8
+ export declare const QWEN_38_27B = "Qwen3.8-27B-UD-Q4_K_XL";
9
+ export declare const MEDPSY_1_7B = "medpsy-1.7b-q4_k_m-imat";
10
+ export declare const MEDPSY_4B = "medpsy-4b-q4_k_m-imat";
11
+ export declare function isCapabilityProfile(value: string): value is CapabilityProfile;
12
+ export declare function meetsMinCapabilityProfile(active: CapabilityProfile, required: CapabilityProfile): boolean;
13
+ export declare function modelNameToCapabilityProfile(modelName: string): CapabilityProfile | undefined;
14
+ export declare function capabilityProfileToModelName(profile: CapabilityProfile): string;
15
+ export declare const AGENT_MODEL_NAMES: readonly ["Qwen3.5-2B-Q4_K_M", "Qwen3.5-4B-Q4_K_M", "Qwen3.5-9B-Q4_K_M", "Qwen3.6-27B-UD-Q4_K_XL", "Qwen3.6-35B-A3B-UD-Q4_K_M", "Qwen3.8-27B-UD-Q4_K_XL", "medpsy-1.7b-q4_k_m-imat", "medpsy-4b-q4_k_m-imat"];
16
+ export declare function modelDisplayName(modelName: string): string;
17
+ export declare function capabilityProfileModelLabel(profile: CapabilityProfile): string;
18
+ export declare function isMultimodalLlm(modelName: string): boolean;
19
+ export type ImageModelChoice = 'sd2' | 'sdxl' | 'flux2-klein';
20
+ export declare const DEFAULT_IMAGE_MODEL_CHOICE: ImageModelChoice;
21
+ export interface ImageChoiceEntry {
22
+ readonly choice: ImageModelChoice;
23
+ readonly label: string;
24
+ readonly requiresGpu: boolean;
25
+ readonly supportsMultiImageEdit: boolean;
26
+ readonly sizeBytesApprox: number;
27
+ readonly notes: string;
28
+ }
29
+ export declare const IMAGE_CHOICE_CATALOG: ReadonlyArray<ImageChoiceEntry>;