@qvac/harness 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 (483) hide show
  1. package/LICENSE.md +198 -0
  2. package/NOTICE.md +13 -0
  3. package/README.md +68 -0
  4. package/SECURITY.md +6 -0
  5. package/dist/harness.bundle +48339 -0
  6. package/dist/harness.cjs +18 -0
  7. package/dist/harness.d.ts +8 -0
  8. package/dist/prebuilds-manifest.json +379 -0
  9. package/dist-lib/index.d.ts +240 -0
  10. package/dist-lib/index.js +1063 -0
  11. package/dist-lib/lib/audio-transcode-bare.d.ts +2 -0
  12. package/dist-lib/lib/audio-transcode-bare.js +145 -0
  13. package/dist-lib/lib/audio-transcode-node.d.ts +2 -0
  14. package/dist-lib/lib/audio-transcode-node.js +6 -0
  15. package/dist-lib/lib/capabilities/audio-resample.d.ts +14 -0
  16. package/dist-lib/lib/capabilities/audio-resample.js +72 -0
  17. package/dist-lib/lib/capabilities/completion.d.ts +288 -0
  18. package/dist-lib/lib/capabilities/completion.js +1077 -0
  19. package/dist-lib/lib/capabilities/download.d.ts +46 -0
  20. package/dist-lib/lib/capabilities/download.js +124 -0
  21. package/dist-lib/lib/capabilities/embed.d.ts +20 -0
  22. package/dist-lib/lib/capabilities/embed.js +13 -0
  23. package/dist-lib/lib/capabilities/kv-cache.d.ts +13 -0
  24. package/dist-lib/lib/capabilities/kv-cache.js +21 -0
  25. package/dist-lib/lib/capabilities/prompt-prefix.d.ts +6 -0
  26. package/dist-lib/lib/capabilities/prompt-prefix.js +10 -0
  27. package/dist-lib/lib/capabilities/speech-lexicon.d.ts +5 -0
  28. package/dist-lib/lib/capabilities/speech-lexicon.js +32 -0
  29. package/dist-lib/lib/capabilities/speech-text.d.ts +6 -0
  30. package/dist-lib/lib/capabilities/speech-text.js +79 -0
  31. package/dist-lib/lib/capabilities/tool-names.d.ts +3 -0
  32. package/dist-lib/lib/capabilities/tool-names.js +3 -0
  33. package/dist-lib/lib/capabilities/tool-selection.d.ts +43 -0
  34. package/dist-lib/lib/capabilities/tool-selection.js +60 -0
  35. package/dist-lib/lib/capabilities/tool-turns.d.ts +9 -0
  36. package/dist-lib/lib/capabilities/tool-turns.js +101 -0
  37. package/dist-lib/lib/capabilities/usage-breakdown.d.ts +27 -0
  38. package/dist-lib/lib/capabilities/usage-breakdown.js +44 -0
  39. package/dist-lib/lib/capabilities/vision-history.d.ts +3 -0
  40. package/dist-lib/lib/capabilities/vision-history.js +21 -0
  41. package/dist-lib/lib/capabilities/voice.d.ts +78 -0
  42. package/dist-lib/lib/capabilities/voice.js +189 -0
  43. package/dist-lib/lib/connect.d.ts +76 -0
  44. package/dist-lib/lib/connect.js +789 -0
  45. package/dist-lib/lib/context-window.d.ts +7 -0
  46. package/dist-lib/lib/context-window.js +90 -0
  47. package/dist-lib/lib/contract-types.d.ts +210 -0
  48. package/dist-lib/lib/contract-types.js +1 -0
  49. package/dist-lib/lib/diagram-repair.d.ts +21 -0
  50. package/dist-lib/lib/diagram-repair.js +58 -0
  51. package/dist-lib/lib/dns-lookup.d.ts +1 -0
  52. package/dist-lib/lib/dns-lookup.js +13 -0
  53. package/dist-lib/lib/error-fields.d.ts +2 -0
  54. package/dist-lib/lib/error-fields.js +8 -0
  55. package/dist-lib/lib/fetch-node.d.ts +1 -0
  56. package/dist-lib/lib/fetch-node.js +1 -0
  57. package/dist-lib/lib/hardware/capability-probe.d.ts +9 -0
  58. package/dist-lib/lib/hardware/capability-probe.js +99 -0
  59. package/dist-lib/lib/hardware/gpu-classify.d.ts +2 -0
  60. package/dist-lib/lib/hardware/gpu-classify.js +32 -0
  61. package/dist-lib/lib/hardware/gpu-probe-addon.d.ts +2 -0
  62. package/dist-lib/lib/hardware/gpu-probe-addon.js +42 -0
  63. package/dist-lib/lib/hardware/gpu-stats.bare.d.ts +1 -0
  64. package/dist-lib/lib/hardware/gpu-stats.bare.js +24 -0
  65. package/dist-lib/lib/hardware/gpu-stats.stub.d.ts +1 -0
  66. package/dist-lib/lib/hardware/gpu-stats.stub.js +3 -0
  67. package/dist-lib/lib/hardware/memory-budget.d.ts +8 -0
  68. package/dist-lib/lib/hardware/memory-budget.js +1 -0
  69. package/dist-lib/lib/hardware/parsers.d.ts +7 -0
  70. package/dist-lib/lib/hardware/parsers.js +41 -0
  71. package/dist-lib/lib/headers-bare.d.ts +1 -0
  72. package/dist-lib/lib/headers-bare.js +1 -0
  73. package/dist-lib/lib/headers-node.d.ts +4 -0
  74. package/dist-lib/lib/headers-node.js +1 -0
  75. package/dist-lib/lib/helpers/buffer-burst.d.ts +1 -0
  76. package/dist-lib/lib/helpers/buffer-burst.js +20 -0
  77. package/dist-lib/lib/helpers/control-tokens.d.ts +7 -0
  78. package/dist-lib/lib/helpers/control-tokens.js +32 -0
  79. package/dist-lib/lib/helpers/join-guard.d.ts +6 -0
  80. package/dist-lib/lib/helpers/join-guard.js +46 -0
  81. package/dist-lib/lib/helpers/markup-stream-filter.d.ts +5 -0
  82. package/dist-lib/lib/helpers/markup-stream-filter.js +75 -0
  83. package/dist-lib/lib/helpers/race-abort.d.ts +5 -0
  84. package/dist-lib/lib/helpers/race-abort.js +18 -0
  85. package/dist-lib/lib/helpers/retry-memo.d.ts +5 -0
  86. package/dist-lib/lib/helpers/retry-memo.js +12 -0
  87. package/dist-lib/lib/helpers/run-outcome.d.ts +33 -0
  88. package/dist-lib/lib/helpers/run-outcome.js +204 -0
  89. package/dist-lib/lib/helpers/spawn-path.d.ts +5 -0
  90. package/dist-lib/lib/helpers/spawn-path.js +57 -0
  91. package/dist-lib/lib/helpers/text-coalescer.d.ts +15 -0
  92. package/dist-lib/lib/helpers/text-coalescer.js +34 -0
  93. package/dist-lib/lib/helpers/thinking.d.ts +8 -0
  94. package/dist-lib/lib/helpers/thinking.js +95 -0
  95. package/dist-lib/lib/helpers/tool-call-markup.d.ts +20 -0
  96. package/dist-lib/lib/helpers/tool-call-markup.js +201 -0
  97. package/dist-lib/lib/helpers/tool-intent.d.ts +7 -0
  98. package/dist-lib/lib/helpers/tool-intent.js +21 -0
  99. package/dist-lib/lib/helpers/tool-label.d.ts +8 -0
  100. package/dist-lib/lib/helpers/tool-label.js +131 -0
  101. package/dist-lib/lib/hooks/built-in/arg-repair.d.ts +5 -0
  102. package/dist-lib/lib/hooks/built-in/arg-repair.js +88 -0
  103. package/dist-lib/lib/hooks/built-in/egress.d.ts +5 -0
  104. package/dist-lib/lib/hooks/built-in/egress.js +29 -0
  105. package/dist-lib/lib/hooks/built-in/index.d.ts +3 -0
  106. package/dist-lib/lib/hooks/built-in/index.js +3 -0
  107. package/dist-lib/lib/hooks/built-in/skill-catalog.d.ts +10 -0
  108. package/dist-lib/lib/hooks/built-in/skill-catalog.js +17 -0
  109. package/dist-lib/lib/hooks/pipeline.d.ts +20 -0
  110. package/dist-lib/lib/hooks/pipeline.js +49 -0
  111. package/dist-lib/lib/hooks/registry.d.ts +2 -0
  112. package/dist-lib/lib/hooks/registry.js +6 -0
  113. package/dist-lib/lib/hooks/run.d.ts +5 -0
  114. package/dist-lib/lib/hooks/run.js +83 -0
  115. package/dist-lib/lib/hooks/types.d.ts +57 -0
  116. package/dist-lib/lib/hooks/types.js +1 -0
  117. package/dist-lib/lib/log.d.ts +5 -0
  118. package/dist-lib/lib/log.js +37 -0
  119. package/dist-lib/lib/model-download-progress.d.ts +22 -0
  120. package/dist-lib/lib/model-download-progress.js +95 -0
  121. package/dist-lib/lib/models/context.d.ts +5 -0
  122. package/dist-lib/lib/models/context.js +12 -0
  123. package/dist-lib/lib/models/embed-config.d.ts +14 -0
  124. package/dist-lib/lib/models/embed-config.js +31 -0
  125. package/dist-lib/lib/models/gpu-selection.d.ts +3 -0
  126. package/dist-lib/lib/models/gpu-selection.js +26 -0
  127. package/dist-lib/lib/models/kv-cache.d.ts +4 -0
  128. package/dist-lib/lib/models/kv-cache.js +6 -0
  129. package/dist-lib/lib/models/llm-presets.d.ts +10 -0
  130. package/dist-lib/lib/models/llm-presets.js +58 -0
  131. package/dist-lib/lib/models/model-catalog-constants.d.ts +29 -0
  132. package/dist-lib/lib/models/model-catalog-constants.js +103 -0
  133. package/dist-lib/lib/models/model-catalog.d.ts +125 -0
  134. package/dist-lib/lib/models/model-catalog.js +371 -0
  135. package/dist-lib/lib/models/model-delete.d.ts +18 -0
  136. package/dist-lib/lib/models/model-delete.js +47 -0
  137. package/dist-lib/lib/models/model-handle.d.ts +18 -0
  138. package/dist-lib/lib/models/model-handle.js +33 -0
  139. package/dist-lib/lib/models/model-list.d.ts +42 -0
  140. package/dist-lib/lib/models/model-list.js +123 -0
  141. package/dist-lib/lib/models/model-pool.d.ts +116 -0
  142. package/dist-lib/lib/models/model-pool.js +356 -0
  143. package/dist-lib/lib/models/model-source.d.ts +6 -0
  144. package/dist-lib/lib/models/model-source.js +21 -0
  145. package/dist-lib/lib/models/music-catalog.d.ts +12 -0
  146. package/dist-lib/lib/models/music-catalog.js +26 -0
  147. package/dist-lib/lib/models/opencl-cache.d.ts +5 -0
  148. package/dist-lib/lib/models/opencl-cache.js +50 -0
  149. package/dist-lib/lib/models/sdk-faults.d.ts +21 -0
  150. package/dist-lib/lib/models/sdk-faults.js +66 -0
  151. package/dist-lib/lib/models/tool-dialect.d.ts +2 -0
  152. package/dist-lib/lib/models/tool-dialect.js +19 -0
  153. package/dist-lib/lib/models/tts-model-default.d.ts +3 -0
  154. package/dist-lib/lib/models/tts-model-default.js +13 -0
  155. package/dist-lib/lib/no-redirect-fetch-bare.d.ts +15 -0
  156. package/dist-lib/lib/no-redirect-fetch-bare.js +59 -0
  157. package/dist-lib/lib/no-redirect-fetch-impl.d.ts +39 -0
  158. package/dist-lib/lib/no-redirect-fetch-impl.js +80 -0
  159. package/dist-lib/lib/no-redirect-fetch-node.d.ts +4 -0
  160. package/dist-lib/lib/no-redirect-fetch-node.js +52 -0
  161. package/dist-lib/lib/prompt.d.ts +22 -0
  162. package/dist-lib/lib/prompt.js +77 -0
  163. package/dist-lib/lib/queue.d.ts +9 -0
  164. package/dist-lib/lib/queue.js +48 -0
  165. package/dist-lib/lib/resolution-detector.d.ts +5 -0
  166. package/dist-lib/lib/resolution-detector.js +100 -0
  167. package/dist-lib/lib/rpc-session.d.ts +8 -0
  168. package/dist-lib/lib/rpc-session.js +20 -0
  169. package/dist-lib/lib/sdk-config-loader.node.d.ts +1 -0
  170. package/dist-lib/lib/sdk-config-loader.node.js +1 -0
  171. package/dist-lib/lib/sdk-loader.d.ts +30 -0
  172. package/dist-lib/lib/sdk-loader.js +53 -0
  173. package/dist-lib/lib/sdk-storage.d.ts +8 -0
  174. package/dist-lib/lib/sdk-storage.js +24 -0
  175. package/dist-lib/lib/serve.d.ts +3 -0
  176. package/dist-lib/lib/serve.js +612 -0
  177. package/dist-lib/lib/spawn.d.ts +62 -0
  178. package/dist-lib/lib/spawn.js +71 -0
  179. package/dist-lib/lib/staging.d.ts +4 -0
  180. package/dist-lib/lib/staging.js +28 -0
  181. package/dist-lib/lib/storage.d.ts +18 -0
  182. package/dist-lib/lib/storage.js +26 -0
  183. package/dist-lib/lib/tmp-path.d.ts +7 -0
  184. package/dist-lib/lib/tmp-path.js +17 -0
  185. package/dist-lib/lib/tool-call-display.d.ts +21 -0
  186. package/dist-lib/lib/tool-call-display.js +1 -0
  187. package/dist-lib/lib/tools/catalog.d.ts +13 -0
  188. package/dist-lib/lib/tools/catalog.js +13 -0
  189. package/dist-lib/lib/tools/create-documents.d.ts +3 -0
  190. package/dist-lib/lib/tools/create-documents.js +87 -0
  191. package/dist-lib/lib/tools/edit-documents.d.ts +3 -0
  192. package/dist-lib/lib/tools/edit-documents.js +122 -0
  193. package/dist-lib/lib/tools/edit-image.d.ts +25 -0
  194. package/dist-lib/lib/tools/edit-image.js +271 -0
  195. package/dist-lib/lib/tools/exec/adapters/adapter.d.ts +27 -0
  196. package/dist-lib/lib/tools/exec/adapters/adapter.js +1 -0
  197. package/dist-lib/lib/tools/exec/adapters/python/attachments.d.ts +26 -0
  198. package/dist-lib/lib/tools/exec/adapters/python/attachments.js +160 -0
  199. package/dist-lib/lib/tools/exec/adapters/python/create-effect.d.ts +7 -0
  200. package/dist-lib/lib/tools/exec/adapters/python/create-effect.js +290 -0
  201. package/dist-lib/lib/tools/exec/adapters/python/loader.d.ts +11 -0
  202. package/dist-lib/lib/tools/exec/adapters/python/loader.js +94 -0
  203. package/dist-lib/lib/tools/exec/adapters/python/memfs.d.ts +47 -0
  204. package/dist-lib/lib/tools/exec/adapters/python/memfs.js +85 -0
  205. package/dist-lib/lib/tools/exec/adapters/python/output-policy.d.ts +13 -0
  206. package/dist-lib/lib/tools/exec/adapters/python/output-policy.js +129 -0
  207. package/dist-lib/lib/tools/exec/adapters/python/pyodide.d.ts +19 -0
  208. package/dist-lib/lib/tools/exec/adapters/python/pyodide.js +107 -0
  209. package/dist-lib/lib/tools/exec/adapters/python/python-adapter.d.ts +75 -0
  210. package/dist-lib/lib/tools/exec/adapters/python/python-adapter.js +1094 -0
  211. package/dist-lib/lib/tools/exec/adapters/python/run-session.d.ts +75 -0
  212. package/dist-lib/lib/tools/exec/adapters/python/run-session.js +273 -0
  213. package/dist-lib/lib/tools/exec/adapters/python/wheels.d.ts +38 -0
  214. package/dist-lib/lib/tools/exec/adapters/python/wheels.js +102 -0
  215. package/dist-lib/lib/tools/exec/adapters/python/worker/client.d.ts +7 -0
  216. package/dist-lib/lib/tools/exec/adapters/python/worker/client.js +188 -0
  217. package/dist-lib/lib/tools/exec/adapters/python/worker/entry.d.ts +1 -0
  218. package/dist-lib/lib/tools/exec/adapters/python/worker/entry.js +105 -0
  219. package/dist-lib/lib/tools/exec/adapters/python/worker/protocol.d.ts +38 -0
  220. package/dist-lib/lib/tools/exec/adapters/python/worker/protocol.js +41 -0
  221. package/dist-lib/lib/tools/exec/adapters/python/worker/spawn-bare.d.ts +2 -0
  222. package/dist-lib/lib/tools/exec/adapters/python/worker/spawn-bare.js +30 -0
  223. package/dist-lib/lib/tools/exec/adapters/python/worker/spawn-node.d.ts +13 -0
  224. package/dist-lib/lib/tools/exec/adapters/python/worker/spawn-node.js +45 -0
  225. package/dist-lib/lib/tools/exec/adapters/shell/shell-adapter.d.ts +12 -0
  226. package/dist-lib/lib/tools/exec/adapters/shell/shell-adapter.js +20 -0
  227. package/dist-lib/lib/tools/exec/obsidian/cli-process.d.ts +8 -0
  228. package/dist-lib/lib/tools/exec/obsidian/cli-process.js +74 -0
  229. package/dist-lib/lib/tools/exec/obsidian/cli.d.ts +18 -0
  230. package/dist-lib/lib/tools/exec/obsidian/cli.js +153 -0
  231. package/dist-lib/lib/tools/exec/obsidian/command.d.ts +5 -0
  232. package/dist-lib/lib/tools/exec/obsidian/command.js +18 -0
  233. package/dist-lib/lib/tools/exec/obsidian/guidance.d.ts +5 -0
  234. package/dist-lib/lib/tools/exec/obsidian/guidance.js +18 -0
  235. package/dist-lib/lib/tools/exec/obsidian/note-name.d.ts +1 -0
  236. package/dist-lib/lib/tools/exec/obsidian/note-name.js +6 -0
  237. package/dist-lib/lib/tools/exec/obsidian/output.d.ts +1 -0
  238. package/dist-lib/lib/tools/exec/obsidian/output.js +31 -0
  239. package/dist-lib/lib/tools/exec/obsidian/route.d.ts +19 -0
  240. package/dist-lib/lib/tools/exec/obsidian/route.js +85 -0
  241. package/dist-lib/lib/tools/exec/obsidian/safe-path.d.ts +3 -0
  242. package/dist-lib/lib/tools/exec/obsidian/safe-path.js +56 -0
  243. package/dist-lib/lib/tools/exec/obsidian/vault-create.d.ts +1 -0
  244. package/dist-lib/lib/tools/exec/obsidian/vault-create.js +40 -0
  245. package/dist-lib/lib/tools/exec/obsidian/vault-fs.d.ts +3 -0
  246. package/dist-lib/lib/tools/exec/obsidian/vault-fs.js +57 -0
  247. package/dist-lib/lib/tools/exec/obsidian/vault-paths.d.ts +20 -0
  248. package/dist-lib/lib/tools/exec/obsidian/vault-paths.js +171 -0
  249. package/dist-lib/lib/tools/exec/obsidian/vault-read.d.ts +11 -0
  250. package/dist-lib/lib/tools/exec/obsidian/vault-read.js +119 -0
  251. package/dist-lib/lib/tools/exec/obsidian/vault-write.d.ts +7 -0
  252. package/dist-lib/lib/tools/exec/obsidian/vault-write.js +134 -0
  253. package/dist-lib/lib/tools/exec/runner.d.ts +62 -0
  254. package/dist-lib/lib/tools/exec/runner.js +87 -0
  255. package/dist-lib/lib/tools/exec/scope.d.ts +3 -0
  256. package/dist-lib/lib/tools/exec/scope.js +97 -0
  257. package/dist-lib/lib/tools/exec/shell-argv.d.ts +2 -0
  258. package/dist-lib/lib/tools/exec/shell-argv.js +48 -0
  259. package/dist-lib/lib/tools/exec.d.ts +29 -0
  260. package/dist-lib/lib/tools/exec.js +459 -0
  261. package/dist-lib/lib/tools/file-glob.d.ts +15 -0
  262. package/dist-lib/lib/tools/file-glob.js +112 -0
  263. package/dist-lib/lib/tools/fs/drive.d.ts +26 -0
  264. package/dist-lib/lib/tools/fs/drive.js +1 -0
  265. package/dist-lib/lib/tools/fs/glob.d.ts +1 -0
  266. package/dist-lib/lib/tools/fs/glob.js +34 -0
  267. package/dist-lib/lib/tools/fs/local.d.ts +2 -0
  268. package/dist-lib/lib/tools/fs/local.js +29 -0
  269. package/dist-lib/lib/tools/fs/read.d.ts +2 -0
  270. package/dist-lib/lib/tools/fs/read.js +17 -0
  271. package/dist-lib/lib/tools/fs/remote-protocol.d.ts +40 -0
  272. package/dist-lib/lib/tools/fs/remote-protocol.js +1 -0
  273. package/dist-lib/lib/tools/fs/remote.d.ts +17 -0
  274. package/dist-lib/lib/tools/fs/remote.js +131 -0
  275. package/dist-lib/lib/tools/fs/scope.d.ts +37 -0
  276. package/dist-lib/lib/tools/fs/scope.js +130 -0
  277. package/dist-lib/lib/tools/fs/walk.d.ts +15 -0
  278. package/dist-lib/lib/tools/fs/walk.js +38 -0
  279. package/dist-lib/lib/tools/fs/write.d.ts +4 -0
  280. package/dist-lib/lib/tools/fs/write.js +5 -0
  281. package/dist-lib/lib/tools/generate-image.d.ts +111 -0
  282. package/dist-lib/lib/tools/generate-image.js +369 -0
  283. package/dist-lib/lib/tools/generate-music.d.ts +124 -0
  284. package/dist-lib/lib/tools/generate-music.js +522 -0
  285. package/dist-lib/lib/tools/grep.d.ts +5 -0
  286. package/dist-lib/lib/tools/grep.js +158 -0
  287. package/dist-lib/lib/tools/http-methods.d.ts +1 -0
  288. package/dist-lib/lib/tools/http-methods.js +1 -0
  289. package/dist-lib/lib/tools/http-request/encode-fields.d.ts +2 -0
  290. package/dist-lib/lib/tools/http-request/encode-fields.js +69 -0
  291. package/dist-lib/lib/tools/http-request/truncate-response.d.ts +1 -0
  292. package/dist-lib/lib/tools/http-request/truncate-response.js +83 -0
  293. package/dist-lib/lib/tools/http-request/utils.d.ts +27 -0
  294. package/dist-lib/lib/tools/http-request/utils.js +84 -0
  295. package/dist-lib/lib/tools/http-request.d.ts +20 -0
  296. package/dist-lib/lib/tools/http-request.js +177 -0
  297. package/dist-lib/lib/tools/mcp/utils.d.ts +47 -0
  298. package/dist-lib/lib/tools/mcp/utils.js +172 -0
  299. package/dist-lib/lib/tools/mcp-call.d.ts +14 -0
  300. package/dist-lib/lib/tools/mcp-call.js +155 -0
  301. package/dist-lib/lib/tools/model-args.d.ts +1 -0
  302. package/dist-lib/lib/tools/model-args.js +4 -0
  303. package/dist-lib/lib/tools/operations/builders.d.ts +17 -0
  304. package/dist-lib/lib/tools/operations/builders.js +179 -0
  305. package/dist-lib/lib/tools/operations/compile.d.ts +7 -0
  306. package/dist-lib/lib/tools/operations/compile.js +92 -0
  307. package/dist-lib/lib/tools/operations/gmail-message.d.ts +15 -0
  308. package/dist-lib/lib/tools/operations/gmail-message.js +62 -0
  309. package/dist-lib/lib/tools/operations/manifest.d.ts +60 -0
  310. package/dist-lib/lib/tools/operations/manifest.js +50 -0
  311. package/dist-lib/lib/tools/outbound-guard.d.ts +10 -0
  312. package/dist-lib/lib/tools/outbound-guard.js +127 -0
  313. package/dist-lib/lib/tools/private-ip.d.ts +4 -0
  314. package/dist-lib/lib/tools/private-ip.js +126 -0
  315. package/dist-lib/lib/tools/rag-search.d.ts +2 -0
  316. package/dist-lib/lib/tools/rag-search.js +98 -0
  317. package/dist-lib/lib/tools/read-files.d.ts +5 -0
  318. package/dist-lib/lib/tools/read-files.js +153 -0
  319. package/dist-lib/lib/tools/skill.d.ts +10 -0
  320. package/dist-lib/lib/tools/skill.js +123 -0
  321. package/dist-lib/lib/tools/skills/auth-resolver.d.ts +43 -0
  322. package/dist-lib/lib/tools/skills/auth-resolver.js +121 -0
  323. package/dist-lib/lib/tools/skills/bin-check.d.ts +9 -0
  324. package/dist-lib/lib/tools/skills/bin-check.js +56 -0
  325. package/dist-lib/lib/tools/skills/bundled-dir.d.ts +2 -0
  326. package/dist-lib/lib/tools/skills/bundled-dir.js +117 -0
  327. package/dist-lib/lib/tools/skills/bundled-hash.d.ts +4 -0
  328. package/dist-lib/lib/tools/skills/bundled-hash.js +12 -0
  329. package/dist-lib/lib/tools/skills/catalog.d.ts +60 -0
  330. package/dist-lib/lib/tools/skills/catalog.js +203 -0
  331. package/dist-lib/lib/tools/skills/cli-argv.d.ts +9 -0
  332. package/dist-lib/lib/tools/skills/cli-argv.js +147 -0
  333. package/dist-lib/lib/tools/skills/cli-schema-check.d.ts +3 -0
  334. package/dist-lib/lib/tools/skills/cli-schema-check.js +62 -0
  335. package/dist-lib/lib/tools/skills/cli-schema-load.d.ts +4 -0
  336. package/dist-lib/lib/tools/skills/cli-schema-load.js +90 -0
  337. package/dist-lib/lib/tools/skills/cli-schema-types.d.ts +30 -0
  338. package/dist-lib/lib/tools/skills/cli-schema-types.js +1 -0
  339. package/dist-lib/lib/tools/skills/cli-schema.d.ts +7 -0
  340. package/dist-lib/lib/tools/skills/cli-schema.js +35 -0
  341. package/dist-lib/lib/tools/skills/credential-check.d.ts +20 -0
  342. package/dist-lib/lib/tools/skills/credential-check.js +94 -0
  343. package/dist-lib/lib/tools/skills/credential-grants.d.ts +9 -0
  344. package/dist-lib/lib/tools/skills/credential-grants.js +25 -0
  345. package/dist-lib/lib/tools/skills/credential-health.d.ts +8 -0
  346. package/dist-lib/lib/tools/skills/credential-health.js +51 -0
  347. package/dist-lib/lib/tools/skills/credential-slots.d.ts +7 -0
  348. package/dist-lib/lib/tools/skills/credential-slots.js +8 -0
  349. package/dist-lib/lib/tools/skills/frontmatter-parser.d.ts +23 -0
  350. package/dist-lib/lib/tools/skills/frontmatter-parser.js +68 -0
  351. package/dist-lib/lib/tools/skills/index.d.ts +5 -0
  352. package/dist-lib/lib/tools/skills/index.js +5 -0
  353. package/dist-lib/lib/tools/skills/manifest-parse.d.ts +12 -0
  354. package/dist-lib/lib/tools/skills/manifest-parse.js +199 -0
  355. package/dist-lib/lib/tools/skills/manifest.d.ts +47 -0
  356. package/dist-lib/lib/tools/skills/manifest.js +1 -0
  357. package/dist-lib/lib/tools/skills/mention-name.d.ts +1 -0
  358. package/dist-lib/lib/tools/skills/mention-name.js +4 -0
  359. package/dist-lib/lib/tools/skills/mention.d.ts +6 -0
  360. package/dist-lib/lib/tools/skills/mention.js +42 -0
  361. package/dist-lib/lib/tools/skills/obsidian-readiness.d.ts +16 -0
  362. package/dist-lib/lib/tools/skills/obsidian-readiness.js +95 -0
  363. package/dist-lib/lib/tools/skills/overlay-crud.d.ts +18 -0
  364. package/dist-lib/lib/tools/skills/overlay-crud.js +98 -0
  365. package/dist-lib/lib/tools/skills/overlay-dir.d.ts +2 -0
  366. package/dist-lib/lib/tools/skills/overlay-dir.js +22 -0
  367. package/dist-lib/lib/tools/skills/overlay-watch.d.ts +13 -0
  368. package/dist-lib/lib/tools/skills/overlay-watch.js +44 -0
  369. package/dist-lib/lib/tools/skills/scope-key.d.ts +7 -0
  370. package/dist-lib/lib/tools/skills/scope-key.js +7 -0
  371. package/dist-lib/lib/tools/skills/setup-routes.d.ts +4 -0
  372. package/dist-lib/lib/tools/skills/setup-routes.js +14 -0
  373. package/dist-lib/lib/tools/skills/skill-settings.d.ts +16 -0
  374. package/dist-lib/lib/tools/skills/skill-settings.js +33 -0
  375. package/dist-lib/lib/tools/skills/skill-state-constants.d.ts +12 -0
  376. package/dist-lib/lib/tools/skills/skill-state-constants.js +14 -0
  377. package/dist-lib/lib/tools/skills/skill-state.d.ts +40 -0
  378. package/dist-lib/lib/tools/skills/skill-state.js +117 -0
  379. package/dist-lib/lib/tools/skills/tool-grants.d.ts +5 -0
  380. package/dist-lib/lib/tools/skills/tool-grants.js +14 -0
  381. package/dist-lib/lib/tools/toolsets.d.ts +8 -0
  382. package/dist-lib/lib/tools/toolsets.js +20 -0
  383. package/dist-lib/lib/tools/url-guard.d.ts +8 -0
  384. package/dist-lib/lib/tools/url-guard.js +40 -0
  385. package/dist-lib/lib/tools/web-fetch.d.ts +8 -0
  386. package/dist-lib/lib/tools/web-fetch.js +302 -0
  387. package/dist-lib/lib/tools/web-search.d.ts +6 -0
  388. package/dist-lib/lib/tools/web-search.js +55 -0
  389. package/dist-lib/lib/transport.d.ts +12 -0
  390. package/dist-lib/lib/transport.js +59 -0
  391. package/dist-lib/lib/user-agent.d.ts +1 -0
  392. package/dist-lib/lib/user-agent.js +1 -0
  393. package/dist-lib/lib/validating-lookup.d.ts +17 -0
  394. package/dist-lib/lib/validating-lookup.js +25 -0
  395. package/dist-lib/lib/wav-encode.d.ts +5 -0
  396. package/dist-lib/lib/wav-encode.js +24 -0
  397. package/dist-lib/lib/web-fetch/embedded-state.d.ts +1 -0
  398. package/dist-lib/lib/web-fetch/embedded-state.js +131 -0
  399. package/dist-lib/lib/web-fetch/extract.d.ts +6 -0
  400. package/dist-lib/lib/web-fetch/extract.js +65 -0
  401. package/dist-lib/lib/web-fetch/images.d.ts +3 -0
  402. package/dist-lib/lib/web-fetch/images.js +43 -0
  403. package/dist-lib/lib/web-fetch/video.d.ts +5 -0
  404. package/dist-lib/lib/web-fetch/video.js +42 -0
  405. package/dist-lib/lib/web-search/engine-registry.d.ts +7 -0
  406. package/dist-lib/lib/web-search/engine-registry.js +17 -0
  407. package/dist-lib/lib/web-search/engines/aol.d.ts +3 -0
  408. package/dist-lib/lib/web-search/engines/aol.js +81 -0
  409. package/dist-lib/lib/web-search/engines/bing.d.ts +3 -0
  410. package/dist-lib/lib/web-search/engines/bing.js +111 -0
  411. package/dist-lib/lib/web-search/engines/brave.d.ts +3 -0
  412. package/dist-lib/lib/web-search/engines/brave.js +59 -0
  413. package/dist-lib/lib/web-search/engines/duckduckgo.d.ts +3 -0
  414. package/dist-lib/lib/web-search/engines/duckduckgo.js +112 -0
  415. package/dist-lib/lib/web-search/engines/google.d.ts +3 -0
  416. package/dist-lib/lib/web-search/engines/google.js +92 -0
  417. package/dist-lib/lib/web-search/engines/wikipedia.d.ts +3 -0
  418. package/dist-lib/lib/web-search/engines/wikipedia.js +37 -0
  419. package/dist-lib/lib/web-search/engines/yahoo.d.ts +3 -0
  420. package/dist-lib/lib/web-search/engines/yahoo.js +81 -0
  421. package/dist-lib/lib/web-search/fetch-html.d.ts +25 -0
  422. package/dist-lib/lib/web-search/fetch-html.js +97 -0
  423. package/dist-lib/lib/web-search/format-results.d.ts +3 -0
  424. package/dist-lib/lib/web-search/format-results.js +14 -0
  425. package/dist-lib/lib/web-search/html-helpers.d.ts +3 -0
  426. package/dist-lib/lib/web-search/html-helpers.js +24 -0
  427. package/dist-lib/lib/web-search/merge-results.d.ts +2 -0
  428. package/dist-lib/lib/web-search/merge-results.js +53 -0
  429. package/dist-lib/lib/web-search/orchestrator.d.ts +14 -0
  430. package/dist-lib/lib/web-search/orchestrator.js +50 -0
  431. package/dist-lib/lib/web-search/types.d.ts +34 -0
  432. package/dist-lib/lib/web-search/types.js +1 -0
  433. package/dist-lib/lib/web-search/url-helpers.d.ts +1 -0
  434. package/dist-lib/lib/web-search/url-helpers.js +11 -0
  435. package/dist-lib/lib/web-search/url-normalize.d.ts +1 -0
  436. package/dist-lib/lib/web-search/url-normalize.js +25 -0
  437. package/dist-lib/lib/web-search/user-agents.d.ts +3 -0
  438. package/dist-lib/lib/web-search/user-agents.js +3 -0
  439. package/dist-lib/lib/wire.d.ts +50 -0
  440. package/dist-lib/lib/wire.js +145 -0
  441. package/dist-lib/schema/baseline.d.ts +8 -0
  442. package/dist-lib/schema/baseline.js +35 -0
  443. package/dist-lib/schema/build.d.ts +1 -0
  444. package/dist-lib/schema/build.js +39 -0
  445. package/dist-lib/schema/generate.d.ts +20 -0
  446. package/dist-lib/schema/generate.js +149 -0
  447. package/dist-lib/schema/harness.d.ts +2 -0
  448. package/dist-lib/schema/harness.js +745 -0
  449. package/dist-lib/schema/release-tags.d.ts +5 -0
  450. package/dist-lib/schema/release-tags.js +58 -0
  451. package/dist-lib/spec/bind.d.ts +2 -0
  452. package/dist-lib/spec/bind.js +124 -0
  453. package/dist-lib/spec/calls.d.ts +3 -0
  454. package/dist-lib/spec/calls.js +41 -0
  455. package/dist-lib/spec/hrpc/hrpc.json +356 -0
  456. package/dist-lib/spec/hrpc/index.d.ts +3 -0
  457. package/dist-lib/spec/hrpc/index.js +463 -0
  458. package/dist-lib/spec/hrpc/messages.d.ts +4 -0
  459. package/dist-lib/spec/hrpc/messages.js +3102 -0
  460. package/dist-lib/spec/hyperschema/index.js +3102 -0
  461. package/dist-lib/spec/hyperschema/schema.json +2290 -0
  462. package/dist-lib/spec/hyperschema/types.d.ts +554 -0
  463. package/dist-lib/spec/index.d.ts +8 -0
  464. package/dist-lib/spec/index.js +1 -0
  465. package/package.json +418 -1
  466. package/wheels/cffi-2.0.0-cp314-cp314-pyemscripten_2026_0_wasm32.whl +0 -0
  467. package/wheels/cryptography-47.0.0-cp314-abi3-pyemscripten_2026_0_wasm32.whl +0 -0
  468. package/wheels/defusedxml-0.7.1-py2.py3-none-any.whl +0 -0
  469. package/wheels/et_xmlfile-2.0.0-py3-none-any.whl +0 -0
  470. package/wheels/fonttools-4.62.1-py3-none-any.whl +0 -0
  471. package/wheels/fpdf2-2.8.8-py3-none-any.whl +0 -0
  472. package/wheels/lxml-6.0.2-cp314-cp314-pyemscripten_2026_0_wasm32.whl +0 -0
  473. package/wheels/manifest.json +155 -0
  474. package/wheels/micropip-0.11.1-py3-none-any.whl +0 -0
  475. package/wheels/openpyxl-3.1.5-py2.py3-none-any.whl +0 -0
  476. package/wheels/pillow-12.2.0-cp314-cp314-pyemscripten_2026_0_wasm32.whl +0 -0
  477. package/wheels/pycparser-3.0-py3-none-any.whl +0 -0
  478. package/wheels/pypdf-6.15.0-py3-none-any.whl +0 -0
  479. package/wheels/python_docx-1.2.0-py3-none-any.whl +0 -0
  480. package/wheels/python_pptx-1.0.2-py3-none-any.whl +0 -0
  481. package/wheels/six-1.17.0-py2.py3-none-any.whl +0 -0
  482. package/wheels/typing_extensions-4.15.0-py3-none-any.whl +0 -0
  483. package/wheels/xlsxwriter-3.2.9-py3-none-any.whl +0 -0
@@ -0,0 +1,46 @@
1
+ import type { AbortSignal as BareAbortSignal } from 'bare-abort-controller';
2
+ import type { ModelProgressUpdate } from '@qvac/sdk';
3
+ import { Readable } from 'streamx';
4
+ import { type ModelAddon, type ModelRegistrySdk } from '../models/model-source.ts';
5
+ export type DownloadProgress = Omit<ModelProgressUpdate, 'type'>;
6
+ export type DownloadProgressEvent = {
7
+ type: 'progress';
8
+ } & DownloadProgress;
9
+ export type DownloadCompleteEvent = {
10
+ type: 'complete';
11
+ assetId: string;
12
+ };
13
+ export type DownloadErrorEvent = {
14
+ type: 'error';
15
+ message: string;
16
+ };
17
+ export type DownloadAbortedEvent = {
18
+ type: 'aborted';
19
+ };
20
+ export type DownloadEvent = DownloadProgressEvent | DownloadCompleteEvent | DownloadErrorEvent | DownloadAbortedEvent;
21
+ export interface DownloadSdk extends ModelRegistrySdk {
22
+ downloadAsset(options: {
23
+ assetSrc: string;
24
+ seed?: boolean;
25
+ onProgress?: (progress: DownloadProgress) => void;
26
+ }): Promise<string> & {
27
+ requestId?: string;
28
+ };
29
+ cancel?(params: {
30
+ requestId: string;
31
+ }): Promise<void>;
32
+ }
33
+ export interface DownloadArgs {
34
+ model: string;
35
+ addon?: ModelAddon;
36
+ seed?: boolean;
37
+ signal?: BareAbortSignal;
38
+ projection?: string;
39
+ companions?: ReadonlyArray<string>;
40
+ assetSizes?: Readonly<Record<string, number>>;
41
+ }
42
+ export type SdkOrLoader = DownloadSdk | (() => Promise<DownloadSdk>);
43
+ export interface DownloadEventStream extends Readable {
44
+ [Symbol.asyncIterator](): AsyncIterableIterator<DownloadEvent>;
45
+ }
46
+ export declare function download(sdkOrLoader: SdkOrLoader, args: DownloadArgs, onSettled?: () => void): DownloadEventStream;
@@ -0,0 +1,124 @@
1
+ import { Readable } from 'streamx';
2
+ import { errorMessage } from "../error-fields.js";
3
+ import { resolveModelSrc } from "../models/model-source.js";
4
+ const noop = () => { };
5
+ export function download(sdkOrLoader, args, onSettled) {
6
+ const { model, addon = 'llm', seed, signal, projection, companions = [], assetSizes } = args;
7
+ const loadSdk = typeof sdkOrLoader === 'function' ? sdkOrLoader : () => Promise.resolve(sdkOrLoader);
8
+ let settled = false;
9
+ let opDone = false;
10
+ let cancelSent = false;
11
+ let sdkRef = null;
12
+ let requestId;
13
+ const finish = (event) => {
14
+ if (settled)
15
+ return;
16
+ settled = true;
17
+ stream.push(event);
18
+ stream.push(null);
19
+ onSettled?.();
20
+ };
21
+ const cancelOp = () => {
22
+ if (cancelSent || opDone || !requestId || !sdkRef?.cancel)
23
+ return;
24
+ cancelSent = true;
25
+ sdkRef.cancel({ requestId }).catch(noop);
26
+ };
27
+ const onAbort = () => {
28
+ cancelOp();
29
+ finish({ type: 'aborted' });
30
+ };
31
+ const onProgress = (p) => {
32
+ if (!settled)
33
+ stream.push({ ...p, type: 'progress' });
34
+ };
35
+ const start = async () => {
36
+ if (signal?.aborted)
37
+ return finish({ type: 'aborted' });
38
+ try {
39
+ sdkRef = await loadSdk();
40
+ const resolved = await resolveModelSrc(sdkRef, model, addon);
41
+ const mainSrc = typeof resolved === 'string' ? resolved : resolved.src;
42
+ const srcs = Array.from(new Set([mainSrc, ...(projection ? [projection] : []), ...companions]));
43
+ const aggregate = aggregateLayout(srcs, assetSizes);
44
+ let mainAssetId = '';
45
+ for (let i = 0; i < srcs.length; i++) {
46
+ if (signal?.aborted)
47
+ return finish({ type: 'aborted' });
48
+ const progress = aggregate
49
+ ? aggregateProgressHandler(onProgress, {
50
+ setKey: mainSrc,
51
+ currentFile: srcs[i],
52
+ fileIndex: i,
53
+ totalFiles: srcs.length,
54
+ offset: aggregate.offsets[i],
55
+ expectedSize: aggregate.sizes[i],
56
+ totalBytes: aggregate.totalBytes
57
+ })
58
+ : onProgress;
59
+ const op = sdkRef.downloadAsset({ assetSrc: srcs[i], seed, onProgress: progress });
60
+ requestId = op.requestId;
61
+ const assetId = await op;
62
+ if (i === 0)
63
+ mainAssetId = assetId;
64
+ }
65
+ opDone = true;
66
+ finish({ type: 'complete', assetId: mainAssetId });
67
+ }
68
+ catch (err) {
69
+ opDone = true;
70
+ if (signal?.aborted)
71
+ return finish({ type: 'aborted' });
72
+ finish({ type: 'error', message: errorMessage(err) });
73
+ }
74
+ };
75
+ const stream = new Readable({
76
+ open(cb) {
77
+ signal?.addEventListener?.('abort', onAbort, { once: true });
78
+ void start();
79
+ cb(null);
80
+ },
81
+ destroy(cb) {
82
+ signal?.removeEventListener?.('abort', onAbort);
83
+ cancelOp();
84
+ cb(null);
85
+ }
86
+ });
87
+ return stream;
88
+ }
89
+ function aggregateLayout(sources, assetSizes) {
90
+ if (!assetSizes)
91
+ return null;
92
+ const offsets = [];
93
+ const sizes = [];
94
+ let totalBytes = 0;
95
+ for (const source of sources) {
96
+ const size = assetSizes[source];
97
+ if (!Number.isFinite(size) || size <= 0)
98
+ return null;
99
+ offsets.push(totalBytes);
100
+ sizes.push(size);
101
+ totalBytes += size;
102
+ }
103
+ return { offsets, sizes, totalBytes };
104
+ }
105
+ function aggregateProgressHandler(onProgress, context) {
106
+ return (progress) => onProgress(frameProgress(progress, context));
107
+ }
108
+ function frameProgress(progress, context) {
109
+ const assetDownloaded = Math.min(Math.max(progress.downloaded, 0), context.expectedSize);
110
+ const overallDownloaded = Math.min(context.offset + assetDownloaded, context.totalBytes);
111
+ const overallPercentage = Number(((overallDownloaded / context.totalBytes) * 100).toFixed(2));
112
+ return {
113
+ ...progress,
114
+ fileSetInfo: {
115
+ setKey: context.setKey,
116
+ currentFile: context.currentFile,
117
+ fileIndex: context.fileIndex,
118
+ totalFiles: context.totalFiles,
119
+ overallDownloaded,
120
+ overallTotal: context.totalBytes,
121
+ overallPercentage
122
+ }
123
+ };
124
+ }
@@ -0,0 +1,20 @@
1
+ import type { AbortSignal as BareAbortSignal } from 'bare-abort-controller';
2
+ export interface EmbedSdk {
3
+ embed(params: {
4
+ modelId: string;
5
+ text: string[];
6
+ }): Promise<{
7
+ embedding: number[][];
8
+ }>;
9
+ }
10
+ export interface EmbedArgs {
11
+ modelId: string;
12
+ texts: string[];
13
+ }
14
+ export interface EmbedContext {
15
+ model: string;
16
+ texts: string[];
17
+ signal?: BareAbortSignal;
18
+ }
19
+ export type EmbedLane = (sdk: EmbedSdk, args: EmbedArgs) => Promise<number[][]>;
20
+ export declare function createEmbedLane(): EmbedLane;
@@ -0,0 +1,13 @@
1
+ export function createEmbedLane() {
2
+ let tail = Promise.resolve();
3
+ return (sdk, { modelId, texts }) => {
4
+ const job = tail.then(async () => {
5
+ if (texts.length === 0)
6
+ return [];
7
+ const { embedding } = await sdk.embed({ modelId, text: texts });
8
+ return embedding;
9
+ });
10
+ tail = job.catch(() => { });
11
+ return job;
12
+ };
13
+ }
@@ -0,0 +1,13 @@
1
+ export type KvCacheDeletionResult = {
2
+ status: 'success';
3
+ } | {
4
+ status: 'failure';
5
+ error: string;
6
+ } | {
7
+ status: 'unsupported';
8
+ error: string;
9
+ };
10
+ type KvCacheSdk = Pick<typeof import('@qvac/sdk'), 'deleteCache'>;
11
+ export declare function deleteAllKvCaches(loadSdk: () => Promise<KvCacheSdk>): Promise<KvCacheDeletionResult>;
12
+ export declare function unsupportedKvCacheDeletion(error?: string): KvCacheDeletionResult;
13
+ export {};
@@ -0,0 +1,21 @@
1
+ export async function deleteAllKvCaches(loadSdk) {
2
+ try {
3
+ const sdk = await loadSdk();
4
+ const result = await sdk.deleteCache({ all: true });
5
+ return result.success
6
+ ? { status: 'success' }
7
+ : { status: 'failure', error: 'SDK cache deletion did not succeed' };
8
+ }
9
+ catch (error) {
10
+ return {
11
+ status: 'failure',
12
+ error: error instanceof Error ? error.message : String(error)
13
+ };
14
+ }
15
+ }
16
+ export function unsupportedKvCacheDeletion(error) {
17
+ return {
18
+ status: 'unsupported',
19
+ error: error ?? 'Harness does not support KV cache deletion'
20
+ };
21
+ }
@@ -0,0 +1,6 @@
1
+ import type { Tool as SdkTool } from '@qvac/sdk';
2
+ export interface PromptPrefix {
3
+ system: string | null;
4
+ tools: ReadonlyArray<SdkTool> | undefined;
5
+ }
6
+ export declare function promptPrefixHash({ system, tools }: PromptPrefix): string;
@@ -0,0 +1,10 @@
1
+ import crypto from 'crypto';
2
+ export function promptPrefixHash({ system, tools }) {
3
+ const hash = crypto.createHash('sha256');
4
+ hash.update(system ?? '');
5
+ for (const tool of tools ?? []) {
6
+ hash.update('\0');
7
+ hash.update(JSON.stringify(tool));
8
+ }
9
+ return hash.digest('hex').slice(0, 12);
10
+ }
@@ -0,0 +1,5 @@
1
+ export type SpeechLang = 'en';
2
+ export declare const CURRENCY_CODES: ReadonlyArray<readonly [string, string]>;
3
+ type Symbols = ReadonlyArray<readonly [string, string]>;
4
+ export declare const SPEECH_LEXICON: Readonly<Record<SpeechLang, Symbols>>;
5
+ export {};
@@ -0,0 +1,32 @@
1
+ export const CURRENCY_CODES = [
2
+ ['R$', 'BRL'],
3
+ ['$', 'USD'],
4
+ ['€', 'EUR'],
5
+ ['£', 'GBP'],
6
+ ['¥', 'JPY']
7
+ ];
8
+ const EN = [
9
+ ['<=', ' less than or equal to '],
10
+ ['>=', ' greater than or equal to '],
11
+ ['!=', ' not equal to '],
12
+ ['≤', ' less than or equal to '],
13
+ ['≥', ' greater than or equal to '],
14
+ ['≠', ' not equal to '],
15
+ ['≈', ' approximately '],
16
+ ['%', ' percent '],
17
+ ['=', ' equals '],
18
+ ['+', ' plus '],
19
+ ['<', ' less than '],
20
+ ['>', ' greater than '],
21
+ ['×', ' times '],
22
+ ['/', ' slash '],
23
+ ['⁄', ' slash '],
24
+ ['÷', ' divided by '],
25
+ ['&', ' and '],
26
+ ['@', ' at '],
27
+ ['°', ' degrees '],
28
+ ['±', ' plus or minus ']
29
+ ];
30
+ export const SPEECH_LEXICON = {
31
+ en: EN
32
+ };
@@ -0,0 +1,6 @@
1
+ import { type SpeechLang } from './speech-lexicon.ts';
2
+ export interface SpeechText {
3
+ text: string;
4
+ dropped: string[];
5
+ }
6
+ export declare function normalizeForSpeech(text: string, lang?: SpeechLang): SpeechText;
@@ -0,0 +1,79 @@
1
+ import { ascii } from 'asenion';
2
+ import { CURRENCY_CODES, SPEECH_LEXICON } from "./speech-lexicon.js";
3
+ const EMOJI_MODIFIERS = /[\uFE0E\uFE0F\u200D\u{1F3FB}-\u{1F3FF}]/gu;
4
+ const UNSPEAKABLE = /[^\nA-Za-z0-9 .,;:!?'"()\u002D_]/gu;
5
+ export function normalizeForSpeech(text, lang = 'en') {
6
+ return filterUnspeakable(toSpokenText(text, lang));
7
+ }
8
+ function toSpokenText(text, lang) {
9
+ const folded = stripMarkup(foldWhitespace(text)).normalize('NFKC').replace(EMOJI_MODIFIERS, '');
10
+ return ascii(verbalize(folded, lang));
11
+ }
12
+ function foldWhitespace(text) {
13
+ return text.replace(/\r\n?/g, '\n').replace(/\t/g, ' ');
14
+ }
15
+ function stripMarkup(text) {
16
+ return (text
17
+ .replace(/```[\s\S]*?```/g, ' ')
18
+ .replace(/`([^`]+)`/g, '$1')
19
+ .replace(/!\[[^\]]*\]\([^)]*\)/g, ' ')
20
+ .replace(/\[([^\]]+)\]\([^)]*\)/g, '$1')
21
+ .replace(/\[([^\]]+)\]\[[^\]]*\]/g, '$1')
22
+ .replace(/^#{1,6}\s+/gm, '')
23
+ .replace(/^\s*[-*+]\s+/gm, '')
24
+ .replace(/^[ ]*>(?!=)[ ]?/gm, '')
25
+ .replace(/\*\*([^*]+)\*\*/g, '$1')
26
+ .replace(/__([^_]+)__/g, '$1')
27
+ .replace(/\*([^*]+)\*/g, '$1')
28
+ .replace(/~~([^~]+)~~/g, '$1'));
29
+ }
30
+ function verbalize(text, lang) {
31
+ let spoken = text.replace(/#(?=\d)/g, ' number ');
32
+ for (const [symbol, code] of CURRENCY_CODES) {
33
+ spoken = spoken.replace(amountAfter(symbol), (_match, amount) => {
34
+ return ` ${amount} ${currencyName(code, lang, amount === '1')} `;
35
+ });
36
+ spoken = spoken.split(symbol).join(` ${currencyName(code, lang, false)} `);
37
+ }
38
+ for (const [symbol, spokenForm] of SPEECH_LEXICON[lang]) {
39
+ spoken = spoken.split(symbol).join(spokenForm);
40
+ }
41
+ return spoken;
42
+ }
43
+ function amountAfter(symbol) {
44
+ return new RegExp(`${escapeRegExp(symbol)}\\s?(\\d[\\d.,]*)`, 'g');
45
+ }
46
+ function escapeRegExp(text) {
47
+ return text.replace(/[\\^$.*+?()[\]{}|]/g, '\\$&');
48
+ }
49
+ function currencyName(code, lang, singular) {
50
+ const key = `${lang}:${code}:${singular}`;
51
+ const hit = CURRENCY_NAMES.get(key);
52
+ if (hit !== undefined)
53
+ return hit;
54
+ const parts = new Intl.NumberFormat(lang, {
55
+ style: 'currency',
56
+ currency: code,
57
+ currencyDisplay: 'name',
58
+ maximumFractionDigits: 0
59
+ }).formatToParts(singular ? 1 : 2);
60
+ const name = parts.find((part) => part.type === 'currency')?.value ?? code;
61
+ CURRENCY_NAMES.set(key, name);
62
+ return name;
63
+ }
64
+ const CURRENCY_NAMES = new Map();
65
+ function filterUnspeakable(text) {
66
+ const dropped = [];
67
+ const kept = text.replace(UNSPEAKABLE, (char) => {
68
+ dropped.push(char);
69
+ return '';
70
+ });
71
+ return {
72
+ text: kept
73
+ .replace(/ +/g, ' ')
74
+ .replace(/ *\n */g, '\n')
75
+ .replace(/\n{2,}/g, '\n')
76
+ .trim(),
77
+ dropped
78
+ };
79
+ }
@@ -0,0 +1,3 @@
1
+ export declare const SKILL_TOOL_NAME = "skill";
2
+ export declare const WEB_SEARCH_TOOL_NAME = "web_search";
3
+ export declare const MCP_CALL_TOOL_NAME = "mcp_call";
@@ -0,0 +1,3 @@
1
+ export const SKILL_TOOL_NAME = 'skill';
2
+ export const WEB_SEARCH_TOOL_NAME = 'web_search';
3
+ export const MCP_CALL_TOOL_NAME = 'mcp_call';
@@ -0,0 +1,43 @@
1
+ export interface ToolGrantSource<T extends {
2
+ bin: string;
3
+ }> {
4
+ name: string;
5
+ tools: ReadonlyArray<string>;
6
+ cliValidator?: T;
7
+ }
8
+ export interface ToolGrants<T extends {
9
+ bin: string;
10
+ }> {
11
+ grantedNames: Set<string>;
12
+ grantedOwners: Map<string, Set<string>>;
13
+ grantedOps: Map<string, T[]>;
14
+ }
15
+ export declare function collectToolGrants<T extends {
16
+ bin: string;
17
+ }>(skills: ReadonlyArray<ToolGrantSource<T>>): ToolGrants<T>;
18
+ export interface SkillActivation {
19
+ skillsSelected: boolean;
20
+ enabledSkills: ReadonlyArray<string>;
21
+ mention: string | null;
22
+ loadedSkills: ReadonlySet<string>;
23
+ }
24
+ export declare function skillsAreSelected(scope: 'all' | 'selected' | null | undefined, hasAgent: boolean): boolean;
25
+ export declare function skillIsActive(name: string, { skillsSelected, enabledSkills, mention, loadedSkills }: SkillActivation): boolean;
26
+ export interface SelectableTool {
27
+ name: string;
28
+ skillGated?: boolean | undefined;
29
+ rootsRequired?: boolean | undefined;
30
+ writeRootsRequired?: boolean | undefined;
31
+ owningSkill?: string | undefined;
32
+ }
33
+ export interface ToolGateInputs {
34
+ toolsSelected: boolean;
35
+ allowlist: ReadonlyArray<string>;
36
+ grantedNames: ReadonlySet<string>;
37
+ grantedOwners: ReadonlyMap<string, ReadonlySet<string>>;
38
+ hasRoots: boolean;
39
+ hasWriteRoots: boolean;
40
+ hasActiveSkills: boolean;
41
+ }
42
+ export declare function isSelected(scope: 'all' | 'selected' | null | undefined, list?: ReadonlyArray<string> | null): boolean;
43
+ export declare function enabledTools<T extends SelectableTool>(tools: ReadonlyArray<T>, { toolsSelected, allowlist, grantedNames, grantedOwners, hasRoots, hasWriteRoots, hasActiveSkills }: ToolGateInputs): T[];
@@ -0,0 +1,60 @@
1
+ import { parseToolGrant } from "../tools/skills/tool-grants.js";
2
+ import { SKILL_TOOL_NAME, WEB_SEARCH_TOOL_NAME } from "./tool-names.js";
3
+ export function collectToolGrants(skills) {
4
+ const grants = {
5
+ grantedNames: new Set(),
6
+ grantedOwners: new Map(),
7
+ grantedOps: new Map()
8
+ };
9
+ for (const skill of skills) {
10
+ for (const entry of skill.tools) {
11
+ const { name, scope } = parseToolGrant(entry);
12
+ grants.grantedNames.add(name);
13
+ const owners = grants.grantedOwners.get(name) ?? new Set();
14
+ owners.add(skill.name);
15
+ grants.grantedOwners.set(name, owners);
16
+ if (scope) {
17
+ if (skill.cliValidator && skill.cliValidator.bin === scope.toLowerCase()) {
18
+ const list = grants.grantedOps.get(scope.toLowerCase()) ?? [];
19
+ list.push(skill.cliValidator);
20
+ grants.grantedOps.set(scope.toLowerCase(), list);
21
+ }
22
+ }
23
+ }
24
+ }
25
+ return grants;
26
+ }
27
+ export function skillsAreSelected(scope, hasAgent) {
28
+ return hasAgent && scope !== 'all';
29
+ }
30
+ export function skillIsActive(name, { skillsSelected, enabledSkills, mention, loadedSkills }) {
31
+ if (!skillsSelected)
32
+ return true;
33
+ return enabledSkills.includes(name) || name === mention || loadedSkills.has(name);
34
+ }
35
+ export function isSelected(scope, list) {
36
+ return (scope ?? (list?.length ? 'selected' : 'all')) === 'selected';
37
+ }
38
+ export function enabledTools(tools, { toolsSelected, allowlist, grantedNames, grantedOwners, hasRoots, hasWriteRoots, hasActiveSkills }) {
39
+ return tools.filter((tool) => {
40
+ if (tool.name === SKILL_TOOL_NAME)
41
+ return hasActiveSkills;
42
+ if (tool.owningSkill !== undefined) {
43
+ return grantedOwners.get(tool.name)?.has(tool.owningSkill) === true;
44
+ }
45
+ if (tool.name === WEB_SEARCH_TOOL_NAME &&
46
+ toolsSelected &&
47
+ !allowlist.includes(WEB_SEARCH_TOOL_NAME)) {
48
+ return false;
49
+ }
50
+ if (tool.rootsRequired)
51
+ return hasRoots;
52
+ if (tool.writeRootsRequired)
53
+ return hasWriteRoots;
54
+ if (tool.skillGated)
55
+ return grantedNames.has(tool.name);
56
+ if (!toolsSelected)
57
+ return true;
58
+ return allowlist.includes(tool.name) || grantedNames.has(tool.name);
59
+ });
60
+ }
@@ -0,0 +1,9 @@
1
+ import type { Message } from './completion.ts';
2
+ export declare const DIRECT_CALL_ID = "call-direct";
3
+ export declare const TOOL_CONTINUATION_NUDGE = "[Tool results above. Continue the user's request: call the next tool, or answer.]";
4
+ export declare function toolResultTurn(name: string, id: string, output: unknown): string;
5
+ export declare function skillLoadedTurn(name: string): string;
6
+ export declare function attachmentTurn(name: string, result: unknown): string | null;
7
+ export declare function loadedSkillsFrom(messages: readonly Message[]): Set<string>;
8
+ export declare function loadedSkillFilesFrom(messages: readonly Message[]): Map<string, Set<string>>;
9
+ export declare function withoutSkillLoadTurns(messages: readonly Message[], name: string): Message[];
@@ -0,0 +1,101 @@
1
+ import { SKILL_TOOL_NAME } from "./tool-names.js";
2
+ export const DIRECT_CALL_ID = 'call-direct';
3
+ export const TOOL_CONTINUATION_NUDGE = "[Tool results above. Continue the user's request: call the next tool, or answer.]";
4
+ export function toolResultTurn(name, id, output) {
5
+ return `[Tool: ${name} (${id})]\n${JSON.stringify(historyPayload(output))}`;
6
+ }
7
+ export function skillLoadedTurn(name) {
8
+ return toolResultTurn(SKILL_TOOL_NAME, DIRECT_CALL_ID, {
9
+ name,
10
+ content: `${name} was loaded in an earlier turn but its instructions are not in this context. Call the skill tool with this name again before doing its work.`
11
+ });
12
+ }
13
+ function refFrom(value) {
14
+ if (!value || typeof value !== 'object')
15
+ return null;
16
+ const record = value;
17
+ if (typeof record.attachmentId !== 'string')
18
+ return null;
19
+ const ref = { attachmentId: record.attachmentId };
20
+ const name = typeof record.fileName === 'string' ? record.fileName : '';
21
+ const dot = name.lastIndexOf('.');
22
+ if (dot > 0)
23
+ ref.type = name.slice(dot + 1).toLowerCase();
24
+ return ref;
25
+ }
26
+ export function attachmentTurn(name, result) {
27
+ const direct = refFrom(result);
28
+ if (direct)
29
+ return toolResultTurn(name, DIRECT_CALL_ID, direct);
30
+ const listed = result?.attachments;
31
+ if (!Array.isArray(listed))
32
+ return null;
33
+ const refs = [];
34
+ for (const entry of listed) {
35
+ const ref = refFrom(entry);
36
+ if (ref)
37
+ refs.push(ref);
38
+ }
39
+ if (!refs.length)
40
+ return null;
41
+ return toolResultTurn(name, DIRECT_CALL_ID, { attachments: refs });
42
+ }
43
+ export function loadedSkillsFrom(messages) {
44
+ const loaded = new Set();
45
+ for (const { name } of skillLoadPayloads(messages))
46
+ loaded.add(name);
47
+ return loaded;
48
+ }
49
+ export function loadedSkillFilesFrom(messages) {
50
+ const loaded = new Map();
51
+ for (const { name, file } of skillLoadPayloads(messages)) {
52
+ if (!file)
53
+ continue;
54
+ const files = loaded.get(name) ?? new Set();
55
+ files.add(file);
56
+ loaded.set(name, files);
57
+ }
58
+ return loaded;
59
+ }
60
+ export function withoutSkillLoadTurns(messages, name) {
61
+ return messages.filter((turn) => {
62
+ const payload = skillLoadPayload(turn);
63
+ return !payload || payload.name !== name || payload.file !== undefined;
64
+ });
65
+ }
66
+ function* skillLoadPayloads(messages) {
67
+ for (const turn of messages) {
68
+ const payload = skillLoadPayload(turn);
69
+ if (payload)
70
+ yield payload;
71
+ }
72
+ }
73
+ function skillLoadPayload(turn) {
74
+ if (turn.role !== 'tool')
75
+ return null;
76
+ const text = String(turn.content ?? '');
77
+ if (!text.startsWith(`[Tool: ${SKILL_TOOL_NAME} (`))
78
+ return null;
79
+ try {
80
+ const payload = JSON.parse(text.slice(text.indexOf('\n') + 1));
81
+ if (typeof payload.name !== 'string')
82
+ return null;
83
+ return typeof payload.file === 'string'
84
+ ? { name: payload.name, file: payload.file }
85
+ : { name: payload.name };
86
+ }
87
+ catch {
88
+ return null;
89
+ }
90
+ }
91
+ const HOST_ONLY_KEYS = ['data', 'hostNotice'];
92
+ function historyPayload(output) {
93
+ if (!output || typeof output !== 'object')
94
+ return output;
95
+ if (!HOST_ONLY_KEYS.some((key) => key in output))
96
+ return output;
97
+ const rest = { ...output };
98
+ for (const key of HOST_ONLY_KEYS)
99
+ delete rest[key];
100
+ return rest;
101
+ }
@@ -0,0 +1,27 @@
1
+ import type { SystemPromptParts } from '../prompt.ts';
2
+ export interface PromptDensity {
3
+ prose: number;
4
+ schema: number;
5
+ toolBlockTokens: number;
6
+ }
7
+ export declare function densityFor(modelName?: string | null): PromptDensity;
8
+ export interface PromptUsageChars {
9
+ systemPrompt: number;
10
+ agentInstructions: number;
11
+ activeSkills: number;
12
+ toolSchemas: number;
13
+ }
14
+ export interface UsageBreakdown {
15
+ systemPrompt: number;
16
+ agentInstructions: number;
17
+ activeSkills: number;
18
+ tools: number;
19
+ conversation: number;
20
+ totalTokens: number;
21
+ }
22
+ export interface PromptUsagePartsInput {
23
+ system: SystemPromptParts;
24
+ toolSchemas?: ReadonlyArray<unknown> | undefined;
25
+ }
26
+ export declare function promptUsageParts({ system, toolSchemas }: PromptUsagePartsInput): PromptUsageChars;
27
+ export declare function usageBreakdown(chars: PromptUsageChars, totalTokens?: number | null, modelName?: string | null): UsageBreakdown | null;