@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,369 @@
1
+ import ScopeLock from 'scope-lock';
2
+ import { AbortedError, raceAbort } from "../helpers/race-abort.js";
3
+ import { DIFFUSION_CATALOG, imageModelFor } from "../models/model-catalog.js";
4
+ import { createLoadTracker } from "../models/model-pool.js";
5
+ import { resolveModelSrc } from "../models/model-source.js";
6
+ export const MAX_DIM = 1024;
7
+ export const DIM_STEP = 64;
8
+ const DEFAULT_DIM = 512;
9
+ export const MAX_STEPS = 100;
10
+ const MAX_PROMPT_CHARS = 4000;
11
+ const MAX_SEED = 0xffffffff;
12
+ export const IMAGE_LOAD_STALL_MS = 15 * 60_000;
13
+ export function generationPercentTick(onPercent, encodePhases = 0) {
14
+ let phase = 0;
15
+ let prevStep = -1;
16
+ let prevTotal = 0;
17
+ let last = -1;
18
+ return ({ step, totalSteps }) => {
19
+ if (prevStep !== -1 && (step < prevStep || (totalSteps !== prevTotal && prevTotal !== 0))) {
20
+ phase++;
21
+ }
22
+ prevStep = step;
23
+ prevTotal = totalSteps;
24
+ if (phase !== encodePhases)
25
+ return;
26
+ const percentage = totalSteps > 0 ? Math.min(100, Math.max(0, Math.round((step / totalSteps) * 100))) : 0;
27
+ if (percentage <= last)
28
+ return;
29
+ last = percentage;
30
+ onPercent(percentage);
31
+ };
32
+ }
33
+ const fingerprintOf = (set) => [set.model, set.llmModel ?? '', set.vaeModel ?? '', set.prediction ?? ''].join('\n');
34
+ function diffusionProgressName(set) {
35
+ const entry = DIFFUSION_CATALOG.find((candidate) => candidate.model.src === set.model);
36
+ return entry?.name ?? set.model;
37
+ }
38
+ export const IMAGE_LOAD_STALL_ERROR = 'image model download stalled';
39
+ function createLoadStall(ms) {
40
+ let timer = null;
41
+ let rejectStall = null;
42
+ const promise = new Promise((_, reject) => {
43
+ rejectStall = reject;
44
+ });
45
+ const arm = () => {
46
+ if (timer !== null)
47
+ clearTimeout(timer);
48
+ timer = setTimeout(() => {
49
+ rejectStall?.(new Error(IMAGE_LOAD_STALL_ERROR));
50
+ }, ms);
51
+ };
52
+ arm();
53
+ return {
54
+ bump: arm,
55
+ clear: () => {
56
+ if (timer !== null)
57
+ clearTimeout(timer);
58
+ timer = null;
59
+ },
60
+ promise
61
+ };
62
+ }
63
+ export function createDiffusionRuntime({ loadSdk, onProgress, onBeforeLoad, loads = createLoadTracker(), stallMs = IMAGE_LOAD_STALL_MS, ...base }) {
64
+ let loading = null;
65
+ let residentFingerprint = null;
66
+ let busy = false;
67
+ const lock = new ScopeLock();
68
+ const doUnload = async () => {
69
+ const pending = loading;
70
+ if (!pending) {
71
+ residentFingerprint = null;
72
+ return;
73
+ }
74
+ const loaded = await pending.catch(() => null);
75
+ if (!loaded) {
76
+ loading = null;
77
+ residentFingerprint = null;
78
+ return;
79
+ }
80
+ const sdk = await loadSdk();
81
+ await sdk.unloadModel({ modelId: loaded.modelId });
82
+ loading = null;
83
+ residentFingerprint = null;
84
+ };
85
+ const unload = async () => {
86
+ await lock.lock();
87
+ try {
88
+ await doUnload();
89
+ }
90
+ finally {
91
+ lock.unlock();
92
+ }
93
+ };
94
+ return {
95
+ loadSdk,
96
+ predictionFor: (modelChoice) => ((modelChoice && imageModelFor(modelChoice)) || base).prediction,
97
+ ensureLoaded: async (sdk, signal, modelChoice) => {
98
+ const set = (modelChoice && imageModelFor(modelChoice)) || base;
99
+ const fingerprint = fingerprintOf(set);
100
+ await lock.lock();
101
+ try {
102
+ if (loading && residentFingerprint !== fingerprint)
103
+ await doUnload();
104
+ if (!loading && onBeforeLoad)
105
+ await onBeforeLoad(signal);
106
+ residentFingerprint = fingerprint;
107
+ loading ??= (async () => {
108
+ onProgress?.(diffusionProgressName(set), {});
109
+ const modelSrc = await resolveModelSrc(sdk, set.model, 'diffusion');
110
+ const config = {};
111
+ if (set.prediction)
112
+ config.prediction = set.prediction;
113
+ if (set.llmModel)
114
+ config.llmModelSrc = await resolveModelSrc(sdk, set.llmModel, 'llm');
115
+ if (set.vaeModel) {
116
+ config.vaeModelSrc = await resolveModelSrc(sdk, set.vaeModel, 'diffusion');
117
+ }
118
+ const modelConfig = Object.keys(config).length ? config : undefined;
119
+ const stall = createLoadStall(stallMs);
120
+ const pending = sdk.loadModel({
121
+ modelSrc,
122
+ modelType: 'diffusion',
123
+ modelConfig,
124
+ onProgress: (progress) => {
125
+ stall.bump();
126
+ onProgress?.(diffusionProgressName(set), progress);
127
+ }
128
+ });
129
+ try {
130
+ const modelId = await Promise.race([loads.track(pending), stall.promise]);
131
+ return { modelId, prediction: set.prediction };
132
+ }
133
+ catch (err) {
134
+ if (err instanceof Error &&
135
+ err.message === IMAGE_LOAD_STALL_ERROR &&
136
+ pending.requestId) {
137
+ void sdk.cancel?.({ requestId: pending.requestId }).catch(() => { });
138
+ }
139
+ throw err;
140
+ }
141
+ finally {
142
+ stall.clear();
143
+ }
144
+ })().catch((err) => {
145
+ loading = null;
146
+ residentFingerprint = null;
147
+ throw err;
148
+ });
149
+ }
150
+ finally {
151
+ lock.unlock();
152
+ }
153
+ return raceAbort(loading, signal);
154
+ },
155
+ unload,
156
+ unloadIdle: () => (busy ? Promise.resolve() : unload()),
157
+ acquire: () => (busy ? false : (busy = true)),
158
+ release: () => {
159
+ busy = false;
160
+ }
161
+ };
162
+ }
163
+ export const BUSY_ERROR = 'an image generation is already running; try again when it finishes';
164
+ export async function runDiffusion(sdk, modelId, params, signal, onTick) {
165
+ const onAbort = () => {
166
+ void sdk.cancel?.({ operation: 'inference', modelId }).catch(() => { });
167
+ };
168
+ if (signal?.aborted)
169
+ return { error: 'image generation canceled' };
170
+ signal?.addEventListener('abort', onAbort, { once: true });
171
+ let settled = false;
172
+ try {
173
+ const run = sdk.diffusion({ modelId, vae_tiling: true, ...params });
174
+ const drained = (async () => {
175
+ for await (const tick of run.progressStream)
176
+ if (!settled)
177
+ onTick?.(tick);
178
+ })().catch(() => { });
179
+ const outputs = await run.outputs;
180
+ await drained;
181
+ const image = outputs[0];
182
+ if (signal?.aborted)
183
+ return { error: 'image generation canceled' };
184
+ if (!image?.length)
185
+ return { error: 'the diffusion model produced no image' };
186
+ return image;
187
+ }
188
+ catch (err) {
189
+ if (signal?.aborted)
190
+ return { error: 'image generation canceled' };
191
+ throw err;
192
+ }
193
+ finally {
194
+ settled = true;
195
+ signal?.removeEventListener('abort', onAbort);
196
+ }
197
+ }
198
+ export function parseCommonArgs(args, maxSteps = MAX_STEPS) {
199
+ const prompt = typeof args.prompt === 'string' ? args.prompt.trim() : '';
200
+ if (!prompt)
201
+ return { error: 'prompt must be a non-empty string' };
202
+ if (prompt.length > MAX_PROMPT_CHARS) {
203
+ return { error: `prompt exceeds ${MAX_PROMPT_CHARS} characters` };
204
+ }
205
+ let steps;
206
+ if (args.steps !== undefined && args.steps !== null) {
207
+ steps = Number(args.steps);
208
+ if (!Number.isInteger(steps) || steps < 1 || steps > MAX_STEPS) {
209
+ return { error: `steps must be an integer between 1 and ${MAX_STEPS}` };
210
+ }
211
+ steps = Math.min(steps, maxSteps);
212
+ }
213
+ let seed;
214
+ if (args.seed !== undefined && args.seed !== null) {
215
+ seed = Number(args.seed);
216
+ if (!Number.isInteger(seed) || seed < -1 || seed > MAX_SEED) {
217
+ return { error: `seed must be an integer between -1 (random) and ${MAX_SEED}` };
218
+ }
219
+ if (seed === -1)
220
+ seed = undefined;
221
+ }
222
+ const negativePrompt = typeof args.negative_prompt === 'string' ? args.negative_prompt : undefined;
223
+ if (negativePrompt && negativePrompt.length > MAX_PROMPT_CHARS) {
224
+ return { error: `negative_prompt exceeds ${MAX_PROMPT_CHARS} characters` };
225
+ }
226
+ return { prompt, steps, seed, negativePrompt };
227
+ }
228
+ export function normalizeClamps(clamps) {
229
+ const maxDim = clamps?.maxDim
230
+ ? Math.min(MAX_DIM, Math.max(DIM_STEP, Math.floor(clamps.maxDim / DIM_STEP) * DIM_STEP))
231
+ : MAX_DIM;
232
+ const maxSteps = clamps?.maxSteps
233
+ ? Math.min(MAX_STEPS, Math.max(1, Math.floor(clamps.maxSteps)))
234
+ : MAX_STEPS;
235
+ return { maxDim, maxSteps };
236
+ }
237
+ function dimension(value, name, fallback, maxDim = MAX_DIM) {
238
+ if (value === undefined || value === null)
239
+ return fallback;
240
+ const n = Number(value);
241
+ if (!Number.isInteger(n) || n < DIM_STEP || n > MAX_DIM) {
242
+ return { error: `${name} must be an integer between ${DIM_STEP} and ${MAX_DIM}` };
243
+ }
244
+ return Math.min(maxDim, Math.round(n / DIM_STEP) * DIM_STEP);
245
+ }
246
+ export function settingsDimension(value, maxDim = MAX_DIM) {
247
+ if (!value)
248
+ return undefined;
249
+ return Math.min(maxDim, Math.max(DIM_STEP, Math.round(value / DIM_STEP) * DIM_STEP));
250
+ }
251
+ export function settingsSteps(value, maxSteps = MAX_STEPS) {
252
+ if (!value || !Number.isInteger(value))
253
+ return undefined;
254
+ return Math.min(maxSteps, Math.max(1, value));
255
+ }
256
+ export function effectiveSteps(parsedSteps, settingsValue, stepsCap) {
257
+ if (parsedSteps !== undefined)
258
+ return parsedSteps;
259
+ return settingsSteps(settingsValue, stepsCap ?? MAX_STEPS) ?? stepsCap;
260
+ }
261
+ function parseArgs(args, defaults, cap) {
262
+ const common = parseCommonArgs(args, cap.maxSteps);
263
+ if ('error' in common)
264
+ return common;
265
+ const fallback = Math.min(DEFAULT_DIM, cap.maxDim);
266
+ const width = dimension(args.width, 'width', defaults.width ?? fallback, cap.maxDim);
267
+ if (typeof width === 'object')
268
+ return width;
269
+ const height = dimension(args.height, 'height', defaults.height ?? fallback, cap.maxDim);
270
+ if (typeof height === 'object')
271
+ return height;
272
+ return { ...common, width, height };
273
+ }
274
+ export function createGenerateImageTool(runtime, clamps) {
275
+ const cap = normalizeClamps(clamps);
276
+ const stepsCap = clamps?.maxSteps ? cap.maxSteps : undefined;
277
+ return {
278
+ name: 'generate_image',
279
+ toolset: null,
280
+ skillGated: true,
281
+ description: 'Generate an image from a text prompt using the local diffusion model. ' +
282
+ `Width and height default to ${Math.min(DEFAULT_DIM, cap.maxDim)}, max ${cap.maxDim} ` +
283
+ 'on this device, snapped to the 64px grid. The image ' +
284
+ 'is saved as a chat attachment and shown to the user automatically; the attachment ' +
285
+ 'id is returned to you. `negative_prompt` (optional) describes what the image ' +
286
+ 'should NOT contain. Use this when the user asks for an image, picture, ' +
287
+ 'illustration, or drawing. If the user wants an existing image changed, use ' +
288
+ '`edit_image` instead.',
289
+ parameters: {
290
+ type: 'object',
291
+ properties: {
292
+ prompt: { type: 'string', description: 'What the image should depict' },
293
+ width: {
294
+ type: 'number',
295
+ description: `Pixels, max ${cap.maxDim}, snapped to the 64px grid`
296
+ },
297
+ height: {
298
+ type: 'number',
299
+ description: `Pixels, max ${cap.maxDim}, snapped to the 64px grid`
300
+ },
301
+ steps: {
302
+ type: 'number',
303
+ description: `Diffusion steps (model default when omitted, max ${cap.maxSteps})`
304
+ },
305
+ seed: { type: 'number', description: 'Reproducibility seed; -1 or omitted = random' },
306
+ negative_prompt: { type: 'string', description: 'What the image should NOT contain' }
307
+ },
308
+ required: ['prompt']
309
+ },
310
+ effect: () => 'read',
311
+ resource: (args) => ({
312
+ kind: 'image-generation',
313
+ label: String(args.prompt ?? '').slice(0, 80)
314
+ }),
315
+ execute: async (args, ctx) => {
316
+ const parsed = parseArgs(args, {
317
+ width: settingsDimension(ctx?.image?.width, cap.maxDim),
318
+ height: settingsDimension(ctx?.image?.height, cap.maxDim)
319
+ }, cap);
320
+ if ('error' in parsed)
321
+ return parsed;
322
+ if (!ctx?.attach)
323
+ return { error: 'this device cannot persist generated images' };
324
+ if (!runtime.acquire())
325
+ return { error: BUSY_ERROR };
326
+ const report = ctx.progress;
327
+ const onTick = report && generationPercentTick((percentage) => report({ percentage }));
328
+ try {
329
+ const sdk = await runtime.loadSdk();
330
+ const { modelId } = await runtime.ensureLoaded(sdk, ctx.signal, ctx.image?.modelChoice);
331
+ const image = await runDiffusion(sdk, modelId, {
332
+ prompt: parsed.prompt,
333
+ width: parsed.width,
334
+ height: parsed.height,
335
+ steps: effectiveSteps(parsed.steps, ctx.image?.steps, stepsCap),
336
+ seed: parsed.seed,
337
+ negative_prompt: parsed.negativePrompt
338
+ }, ctx.signal, onTick);
339
+ if (!(image instanceof Uint8Array))
340
+ return image;
341
+ const record = await ctx.attach({
342
+ fileName: `generated-${Date.now()}.png`,
343
+ mimeType: 'image/png',
344
+ bytes: image,
345
+ raw: true
346
+ });
347
+ return {
348
+ attachmentId: record.id,
349
+ fileName: record.fileName,
350
+ byteLength: record.byteLength,
351
+ width: parsed.width,
352
+ height: parsed.height
353
+ };
354
+ }
355
+ catch (err) {
356
+ if (err instanceof AbortedError)
357
+ return { error: 'image generation canceled' };
358
+ if (err instanceof Error && err.message === IMAGE_LOAD_STALL_ERROR) {
359
+ return { error: IMAGE_LOAD_STALL_ERROR };
360
+ }
361
+ throw err;
362
+ }
363
+ finally {
364
+ runtime.release();
365
+ report?.(null);
366
+ }
367
+ }
368
+ };
369
+ }
@@ -0,0 +1,124 @@
1
+ import type { AbortSignal as BareAbortSignal } from 'bare-abort-controller';
2
+ import type { MusicSettings, ToolDefinition, ToolExecuteContext } from '../capabilities/completion.ts';
3
+ import type { ModelSrc } from '../models/context.ts';
4
+ import { type LoadTracker, type TrackedLoad } from '../models/model-pool.ts';
5
+ import { type ModelRegistrySdk } from '../models/model-source.ts';
6
+ export declare const MAX_DURATION_SECONDS = 300;
7
+ export declare const MIN_DURATION_SECONDS = 1;
8
+ export declare const MAX_STEPS = 60;
9
+ export interface MusicTick {
10
+ stage: string;
11
+ step: number;
12
+ total: number;
13
+ }
14
+ export interface GeneratedAudio {
15
+ pcm: Uint8Array;
16
+ sampleRate: number;
17
+ channels: number;
18
+ bitsPerSample: number;
19
+ }
20
+ export interface MusicStats {
21
+ audioDurationMs?: number;
22
+ totalTimeMs?: number;
23
+ realTimeFactor?: number;
24
+ backendDevice?: number;
25
+ backendId?: number;
26
+ }
27
+ interface AudioGenRun {
28
+ requestId: string;
29
+ progressStream: AsyncGenerator<MusicTick>;
30
+ audio: Promise<GeneratedAudio>;
31
+ stats: Promise<MusicStats | undefined>;
32
+ }
33
+ export interface AudioGenParams {
34
+ caption: string;
35
+ lyrics?: string;
36
+ duration?: number;
37
+ seed?: number;
38
+ bpm?: number;
39
+ keyscale?: string;
40
+ timesignature?: string;
41
+ vocalLanguage?: string;
42
+ }
43
+ export interface AudioGenModelConfig {
44
+ textEncModelSrc: ModelSrc;
45
+ lmModelSrc: ModelSrc;
46
+ ditModelSrc: ModelSrc;
47
+ vaeModelSrc: ModelSrc;
48
+ useGPU?: boolean;
49
+ inferenceSteps?: number;
50
+ }
51
+ export type MusicGenSdk = ModelRegistrySdk & {
52
+ loadModel(params: {
53
+ modelType: 'audiogen';
54
+ modelConfig: AudioGenModelConfig;
55
+ onProgress?: (progress: Record<string, unknown>) => void;
56
+ }): TrackedLoad;
57
+ unloadModel(params: {
58
+ modelId: string;
59
+ }): Promise<unknown>;
60
+ audioGen(params: AudioGenParams & {
61
+ modelId: string;
62
+ }): AudioGenRun;
63
+ cancel?(params: {
64
+ requestId: string;
65
+ }): Promise<void>;
66
+ };
67
+ export interface MusicModelStages {
68
+ dit: string;
69
+ textEnc: string;
70
+ lm: string;
71
+ vae: string;
72
+ }
73
+ export interface MusicRuntimeOptions extends MusicModelStages {
74
+ loadSdk: () => Promise<MusicGenSdk>;
75
+ inferenceSteps?: number;
76
+ useGpu?: boolean;
77
+ onProgress?: (model: string, progress: Record<string, unknown>) => void;
78
+ onBeforeLoad?: (signal?: BareAbortSignal) => Promise<void>;
79
+ loads?: LoadTracker;
80
+ }
81
+ export interface LoadedMusicModel {
82
+ modelId: string;
83
+ }
84
+ export interface MusicRuntime {
85
+ loadSdk: () => Promise<MusicGenSdk>;
86
+ gpuRequested: boolean;
87
+ defaultSteps?: number;
88
+ ensureLoaded: (sdk: MusicGenSdk, signal?: BareAbortSignal, modelChoice?: string, inferenceSteps?: number) => Promise<LoadedMusicModel>;
89
+ unload(): Promise<void>;
90
+ unloadIdle(): Promise<void>;
91
+ acquire(): boolean;
92
+ release(): void;
93
+ }
94
+ export declare function musicPercentTick(onPercent: (percentage: number) => void): (tick: MusicTick) => void;
95
+ export declare function createMusicRuntime({ loadSdk, onProgress, onBeforeLoad, loads, inferenceSteps: baseSteps, useGpu, ...base }: MusicRuntimeOptions): MusicRuntime;
96
+ export declare const BUSY_ERROR = "a music generation is already running; try again when it finishes";
97
+ export declare function runAudioGen(sdk: MusicGenSdk, modelId: string, params: AudioGenParams, signal?: BareAbortSignal, onTick?: (tick: MusicTick) => void): Promise<(GeneratedAudio & {
98
+ stats?: MusicStats;
99
+ }) | {
100
+ error: string;
101
+ }>;
102
+ export declare function audioDurationSeconds(audio: GeneratedAudio): number;
103
+ export declare function presentStats(stats: MusicStats | undefined): MusicStats | undefined;
104
+ export declare const CPU_FALLBACK_NOTICE = "The GPU was unavailable, so this track was generated on the CPU and took much longer than usual.";
105
+ export declare function gpuFallback({ gpuRequested, stats }: {
106
+ gpuRequested: boolean;
107
+ stats: MusicStats | undefined;
108
+ }): boolean;
109
+ export declare function backendDevice(stats: MusicStats | undefined): 'gpu' | 'cpu' | 'unknown';
110
+ export declare function backendName(backendId: number | undefined): string;
111
+ export declare function pcmToWav(audio: GeneratedAudio): Uint8Array;
112
+ export interface MusicClamps {
113
+ maxDuration?: number;
114
+ maxSteps?: number;
115
+ }
116
+ export declare function settingsDuration(value: number | undefined, maxDuration: number): number | undefined;
117
+ export declare function settingsSteps(value: number | undefined, maxSteps?: number): number | undefined;
118
+ export declare function normalizeClamps(clamps?: MusicClamps): {
119
+ maxDuration: number;
120
+ maxSteps: number;
121
+ };
122
+ export declare function resolveMusicSettings(ctx: ToolExecuteContext | undefined): MusicSettings;
123
+ export declare function createGenerateMusicTool(runtime: MusicRuntime, clamps?: MusicClamps): ToolDefinition;
124
+ export {};