@qvac/harness 1.0.0-rc.1 → 1.0.0-rc.3

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 (852) hide show
  1. package/CHANGELOG.md +1168 -1
  2. package/NOTICE.md +16 -0
  3. package/README.md +278 -471
  4. package/bench/README.md +94 -0
  5. package/bench/bfcl/checker.ts +313 -0
  6. package/bench/bfcl/data.ts +93 -0
  7. package/bench/bfcl/observe.ts +93 -0
  8. package/bench/bfcl/run.ts +213 -0
  9. package/bench/bfcl/tools.ts +72 -0
  10. package/bench/bridge/bridge.ts +392 -0
  11. package/bench/bridge/openai.ts +150 -0
  12. package/bench/bridge/python/qvac_bench/__init__.py +3 -0
  13. package/bench/bridge/python/qvac_bench/airline.py +42 -0
  14. package/bench/bridge/python/qvac_bench/approval.py +26 -0
  15. package/bench/bridge/python/qvac_bench/bfcl_multi_turn.py +152 -0
  16. package/bench/bridge/python/qvac_bench/client.py +88 -0
  17. package/bench/bridge/python/qvac_bench/harbor_agent.py +85 -0
  18. package/bench/bridge/python/qvac_bench/session.py +107 -0
  19. package/bench/bridge/python/qvac_bench/speed.py +30 -0
  20. package/bench/bridge/python/qvac_bench/tau2_agent.py +106 -0
  21. package/bench/bridge/python/qvac_bench/tools.py +11 -0
  22. package/bench/bridge/python/run_bfcl_multi_turn.py +95 -0
  23. package/bench/bridge/python/run_tau2.py +150 -0
  24. package/bench/bridge/python/smoke.py +47 -0
  25. package/bench/bridge/python/test_airline.py +28 -0
  26. package/bench/bridge/python/test_approval.py +57 -0
  27. package/bench/bridge/python/test_bfcl_multi_turn.py +185 -0
  28. package/bench/bridge/python/test_harbor_agent.py +107 -0
  29. package/bench/bridge/serve.ts +52 -0
  30. package/bench/bridge/transcript.ts +52 -0
  31. package/bench/bun-tsconfig.json +15 -0
  32. package/bench/cpu-main.mjs +216 -0
  33. package/bench/cpu.ts +457 -0
  34. package/bench/evidence/2026-09-28-review15.md +225 -0
  35. package/bench/evidence/redact-bun1.3.14.json +92 -0
  36. package/bench/evidence/redact-node24.11.json +92 -0
  37. package/bench/graph-metrics.ts +43 -0
  38. package/bench/harness.ts +73 -0
  39. package/bench/issue129-matrix.mjs +722 -0
  40. package/bench/redact-adversarial.ts +256 -0
  41. package/bench/repeat-cpu.mjs +281 -0
  42. package/bench/report.ts +1075 -0
  43. package/bench/skill-eval/harness.ts +30 -0
  44. package/bench/skill-eval/laws.ts +37 -0
  45. package/bench/skill-eval/mermaid/client.ts +132 -0
  46. package/bench/skill-eval/mermaid/validate.mjs +115 -0
  47. package/bench/skill-eval/pack.ts +61 -0
  48. package/bench/skill-eval/packs/diagrams/cases.ts +281 -0
  49. package/bench/skill-eval/packs/diagrams/index.ts +50 -0
  50. package/bench/skill-eval/packs/diagrams/score.ts +74 -0
  51. package/bench/skill-eval/packs/index.ts +5 -0
  52. package/bench/skill-eval/packs/weather/cases.ts +279 -0
  53. package/bench/skill-eval/packs/weather/fixtures/wttr.json +566 -0
  54. package/bench/skill-eval/packs/weather/fixtures.ts +84 -0
  55. package/bench/skill-eval/packs/weather/index.ts +55 -0
  56. package/bench/skill-eval/packs/weather/score.ts +92 -0
  57. package/bench/skill-eval/report.ts +194 -0
  58. package/bench/skill-eval/run.ts +316 -0
  59. package/bench/speed.ts +80 -0
  60. package/dist-lib/index.d.ts +101 -169
  61. package/dist-lib/index.js +423 -1506
  62. package/dist-lib/lib/addon-seal.bare.d.ts +1 -0
  63. package/dist-lib/lib/addon-seal.bare.js +3 -0
  64. package/dist-lib/lib/addon-seal.node.d.ts +1 -0
  65. package/dist-lib/lib/addon-seal.node.js +1 -0
  66. package/dist-lib/lib/agent/delegate.d.ts +83 -0
  67. package/dist-lib/lib/agent/delegate.js +261 -0
  68. package/dist-lib/lib/agent/follow.d.ts +32 -0
  69. package/dist-lib/lib/agent/follow.js +162 -0
  70. package/dist-lib/lib/agent/index.d.ts +37 -0
  71. package/dist-lib/lib/agent/index.js +42 -0
  72. package/dist-lib/lib/agent/plan.d.ts +6 -0
  73. package/dist-lib/lib/agent/plan.js +74 -0
  74. package/dist-lib/lib/agent/resolve.d.ts +3 -0
  75. package/dist-lib/lib/agent/resolve.js +78 -0
  76. package/dist-lib/lib/{capabilities → agent}/tool-names.d.ts +0 -1
  77. package/dist-lib/lib/{capabilities → agent}/tool-names.js +0 -1
  78. package/dist-lib/lib/{capabilities → agent}/tool-selection.d.ts +3 -6
  79. package/dist-lib/lib/{capabilities → agent}/tool-selection.js +9 -1
  80. package/dist-lib/lib/agent/tools.d.ts +14 -0
  81. package/dist-lib/lib/agent/tools.js +16 -0
  82. package/dist-lib/lib/agent/transfer.d.ts +7 -0
  83. package/dist-lib/lib/agent/transfer.js +26 -0
  84. package/dist-lib/lib/capabilities/agent-ports.d.ts +3 -0
  85. package/dist-lib/lib/capabilities/agent-ports.js +9 -0
  86. package/dist-lib/lib/capabilities/completion-engine/actors/answering.d.ts +1 -1
  87. package/dist-lib/lib/capabilities/completion-engine/actors/answering.js +25 -9
  88. package/dist-lib/lib/capabilities/completion-engine/actors/batching.d.ts +3 -0
  89. package/dist-lib/lib/capabilities/completion-engine/actors/batching.js +90 -0
  90. package/dist-lib/lib/capabilities/completion-engine/actors/direct-search.d.ts +2 -1
  91. package/dist-lib/lib/capabilities/completion-engine/actors/direct-search.js +14 -5
  92. package/dist-lib/lib/capabilities/completion-engine/actors/execute.d.ts +5 -3
  93. package/dist-lib/lib/capabilities/completion-engine/actors/execute.js +8 -3
  94. package/dist-lib/lib/capabilities/completion-engine/actors/executing.d.ts +29 -2
  95. package/dist-lib/lib/capabilities/completion-engine/actors/executing.js +100 -40
  96. package/dist-lib/lib/capabilities/completion-engine/actors/execution-plan.d.ts +11 -10
  97. package/dist-lib/lib/capabilities/completion-engine/actors/execution-plan.js +28 -21
  98. package/dist-lib/lib/capabilities/completion-engine/actors/finishing.js +2 -2
  99. package/dist-lib/lib/capabilities/completion-engine/actors/inspect-prepare.d.ts +4 -0
  100. package/dist-lib/lib/capabilities/completion-engine/actors/inspect-prepare.js +67 -0
  101. package/dist-lib/lib/capabilities/completion-engine/actors/inspecting.d.ts +10 -3
  102. package/dist-lib/lib/capabilities/completion-engine/actors/inspecting.js +14 -11
  103. package/dist-lib/lib/capabilities/completion-engine/actors/loading-skill.d.ts +7 -3
  104. package/dist-lib/lib/capabilities/completion-engine/actors/loading-skill.js +30 -31
  105. package/dist-lib/lib/capabilities/completion-engine/actors/preparing.d.ts +3 -2
  106. package/dist-lib/lib/capabilities/completion-engine/actors/preparing.js +86 -102
  107. package/dist-lib/lib/capabilities/completion-engine/actors/rejecting.d.ts +1 -1
  108. package/dist-lib/lib/capabilities/completion-engine/actors/rejecting.js +24 -7
  109. package/dist-lib/lib/capabilities/completion-engine/actors/rejection.d.ts +4 -2
  110. package/dist-lib/lib/capabilities/completion-engine/actors/rejection.js +8 -8
  111. package/dist-lib/lib/capabilities/completion-engine/actors/resolving.d.ts +1 -1
  112. package/dist-lib/lib/capabilities/completion-engine/actors/resolving.js +73 -15
  113. package/dist-lib/lib/capabilities/completion-engine/actors/retrieving.d.ts +10 -0
  114. package/dist-lib/lib/capabilities/completion-engine/actors/retrieving.js +56 -0
  115. package/dist-lib/lib/capabilities/completion-engine/actors/run-prepare.d.ts +4 -0
  116. package/dist-lib/lib/capabilities/completion-engine/actors/run-prepare.js +74 -0
  117. package/dist-lib/lib/capabilities/completion-engine/actors/skill-step.d.ts +2 -0
  118. package/dist-lib/lib/capabilities/completion-engine/actors/skill-step.js +76 -0
  119. package/dist-lib/lib/capabilities/completion-engine/actors/stream.d.ts +2 -2
  120. package/dist-lib/lib/capabilities/completion-engine/actors/stream.js +2 -1
  121. package/dist-lib/lib/capabilities/completion-engine/actors/streaming.d.ts +1 -1
  122. package/dist-lib/lib/capabilities/completion-engine/actors/streaming.js +84 -26
  123. package/dist-lib/lib/capabilities/completion-engine/actors/wrap-up.d.ts +1 -1
  124. package/dist-lib/lib/capabilities/completion-engine/actors/wrap-up.js +16 -6
  125. package/dist-lib/lib/capabilities/completion-engine/actors.d.ts +11 -0
  126. package/dist-lib/lib/capabilities/completion-engine/actors.js +216 -0
  127. package/dist-lib/lib/capabilities/completion-engine/driver.d.ts +12 -5
  128. package/dist-lib/lib/capabilities/completion-engine/driver.js +118 -33
  129. package/dist-lib/lib/capabilities/completion-engine/durable.d.ts +2 -1
  130. package/dist-lib/lib/capabilities/completion-engine/durable.js +6 -4
  131. package/dist-lib/lib/capabilities/completion-engine/engine.d.ts +65 -0
  132. package/dist-lib/lib/{machine → capabilities/completion-engine}/engine.js +67 -130
  133. package/dist-lib/lib/capabilities/completion-engine/index.d.ts +30 -0
  134. package/dist-lib/lib/capabilities/completion-engine/index.js +44 -0
  135. package/dist-lib/lib/capabilities/completion-engine/loop.d.ts +58 -0
  136. package/dist-lib/lib/capabilities/completion-engine/loop.js +62 -0
  137. package/dist-lib/lib/capabilities/completion-engine/metrics.d.ts +4 -0
  138. package/dist-lib/lib/capabilities/completion-engine/metrics.js +46 -0
  139. package/dist-lib/lib/capabilities/completion-engine/operations.d.ts +5 -2
  140. package/dist-lib/lib/capabilities/completion-engine/operations.js +84 -15
  141. package/dist-lib/lib/capabilities/completion-engine/ports.d.ts +25 -2
  142. package/dist-lib/lib/capabilities/completion-engine/ports.js +25 -16
  143. package/dist-lib/lib/capabilities/completion-engine/prepare-step.d.ts +26 -0
  144. package/dist-lib/lib/{machine → capabilities/completion-engine}/replay-output.d.ts +1 -1
  145. package/dist-lib/lib/{machine → capabilities/completion-engine}/replay-output.js +1 -1
  146. package/dist-lib/lib/capabilities/{completion-loop → completion-engine}/round.d.ts +24 -4
  147. package/dist-lib/lib/capabilities/{completion-loop → completion-engine}/round.js +242 -27
  148. package/dist-lib/lib/capabilities/completion-engine/session.d.ts +19 -12
  149. package/dist-lib/lib/capabilities/completion-engine/session.js +12 -6
  150. package/dist-lib/lib/capabilities/completion-engine/splice.d.ts +2 -0
  151. package/dist-lib/lib/capabilities/completion-engine/splice.js +7 -0
  152. package/dist-lib/lib/capabilities/completion-engine/stages.d.ts +23 -0
  153. package/dist-lib/lib/capabilities/completion-engine/tool-caller.d.ts +10 -0
  154. package/dist-lib/lib/capabilities/completion-engine/tool-caller.js +151 -0
  155. package/dist-lib/lib/capabilities/completion-engine/tool-execution.d.ts +77 -0
  156. package/dist-lib/lib/capabilities/{completion-loop → completion-engine}/tool-execution.js +74 -25
  157. package/dist-lib/lib/capabilities/{completion-loop → completion-engine}/turns.d.ts +8 -4
  158. package/dist-lib/lib/capabilities/completion-engine/turns.js +225 -0
  159. package/dist-lib/lib/capabilities/enhance.d.ts +1 -1
  160. package/dist-lib/lib/capabilities/enhance.js +3 -2
  161. package/dist-lib/lib/capabilities/invoke.d.ts +1 -1
  162. package/dist-lib/lib/capabilities/preview-model-source.d.ts +1 -10
  163. package/dist-lib/lib/capabilities/preview-model-source.js +3 -1
  164. package/dist-lib/lib/capabilities/sdk-tool.d.ts +10 -0
  165. package/dist-lib/lib/capabilities/sdk-tool.js +130 -0
  166. package/dist-lib/lib/capabilities/skill-entry.d.ts +8 -0
  167. package/dist-lib/lib/capabilities/skill-entry.js +14 -0
  168. package/dist-lib/lib/capabilities/tool-plan.d.ts +6 -5
  169. package/dist-lib/lib/capabilities/tool-plan.js +16 -10
  170. package/dist-lib/lib/capabilities/tool-turns.d.ts +29 -4
  171. package/dist-lib/lib/capabilities/tool-turns.js +120 -10
  172. package/dist-lib/lib/capabilities/usage-breakdown.d.ts +1 -1
  173. package/dist-lib/lib/capabilities/usage-breakdown.js +4 -1
  174. package/dist-lib/lib/connect.d.ts +6 -0
  175. package/dist-lib/lib/connect.js +153 -65
  176. package/dist-lib/lib/context-window.d.ts +4 -2
  177. package/dist-lib/lib/context-window.js +27 -16
  178. package/dist-lib/lib/contract/agent.d.ts +65 -0
  179. package/dist-lib/lib/{capabilities/types.d.ts → contract/completion.d.ts} +140 -26
  180. package/dist-lib/lib/contract/exec.d.ts +134 -0
  181. package/dist-lib/lib/{hooks/types.d.ts → contract/hooks.d.ts} +62 -10
  182. package/dist-lib/lib/contract/index.d.ts +5 -0
  183. package/dist-lib/lib/contract/knowledge.d.ts +60 -0
  184. package/dist-lib/lib/contract/knowledge.js +1 -0
  185. package/dist-lib/lib/contract/models.d.ts +56 -0
  186. package/dist-lib/lib/contract/models.js +1 -0
  187. package/dist-lib/lib/contract/run.d.ts +142 -0
  188. package/dist-lib/lib/contract/run.js +1 -0
  189. package/dist-lib/lib/contract/sandbox.d.ts +29 -0
  190. package/dist-lib/lib/contract/sandbox.js +1 -0
  191. package/dist-lib/lib/contract/skill-readiness.d.ts +14 -0
  192. package/dist-lib/lib/contract/skill-readiness.js +1 -0
  193. package/dist-lib/lib/{capabilities/voice.d.ts → contract/speech.d.ts} +11 -16
  194. package/dist-lib/lib/contract/speech.js +1 -0
  195. package/dist-lib/lib/contract-types.d.ts +43 -16
  196. package/dist-lib/lib/docx/index.d.ts +0 -1
  197. package/dist-lib/lib/docx/index.js +15 -24
  198. package/dist-lib/lib/embeddings/index.d.ts +63 -0
  199. package/dist-lib/lib/embeddings/index.js +267 -0
  200. package/dist-lib/lib/fold/index.d.ts +50 -0
  201. package/dist-lib/lib/fold/index.js +123 -0
  202. package/dist-lib/lib/{tools/exec/adapters/python/guarded-fetch.d.ts → guarded-fetch.d.ts} +5 -12
  203. package/dist-lib/lib/{tools/exec/adapters/python/guarded-fetch.js → guarded-fetch.js} +12 -34
  204. package/dist-lib/lib/helpers/completion-params.d.ts +3 -0
  205. package/dist-lib/lib/helpers/completion-params.js +12 -0
  206. package/dist-lib/lib/helpers/copy.d.ts +1 -0
  207. package/dist-lib/lib/helpers/copy.js +5 -0
  208. package/dist-lib/lib/helpers/drain.d.ts +5 -0
  209. package/dist-lib/lib/helpers/drain.js +19 -0
  210. package/dist-lib/lib/{machine/errors.d.ts → helpers/engine-error.d.ts} +6 -9
  211. package/dist-lib/lib/{machine/errors.js → helpers/engine-error.js} +9 -25
  212. package/dist-lib/lib/helpers/failure-result.d.ts +21 -0
  213. package/dist-lib/lib/helpers/failure-result.js +39 -0
  214. package/dist-lib/lib/helpers/head-tail.d.ts +7 -0
  215. package/dist-lib/lib/helpers/head-tail.js +19 -0
  216. package/dist-lib/lib/helpers/image-settings.d.ts +2 -0
  217. package/dist-lib/lib/helpers/image-settings.js +19 -0
  218. package/dist-lib/lib/helpers/mcp-methods.d.ts +2 -0
  219. package/dist-lib/lib/helpers/mcp-methods.js +14 -0
  220. package/dist-lib/lib/helpers/race-abort.d.ts +1 -1
  221. package/dist-lib/lib/helpers/race-abort.js +1 -1
  222. package/dist-lib/lib/helpers/repeated-reply.d.ts +2 -0
  223. package/dist-lib/lib/helpers/repeated-reply.js +63 -0
  224. package/dist-lib/lib/helpers/run-outcome.d.ts +5 -4
  225. package/dist-lib/lib/helpers/run-outcome.js +11 -9
  226. package/dist-lib/lib/{machine → helpers}/stable-stringify.js +1 -1
  227. package/dist-lib/lib/helpers/tool-call-markup.d.ts +1 -0
  228. package/dist-lib/lib/helpers/tool-call-markup.js +9 -5
  229. package/dist-lib/lib/helpers/tool-label.d.ts +2 -2
  230. package/dist-lib/lib/helpers/tool-label.js +3 -3
  231. package/dist-lib/lib/hooks/built-in/arg-repair.d.ts +1 -1
  232. package/dist-lib/lib/hooks/built-in/arg-repair.js +109 -19
  233. package/dist-lib/lib/hooks/built-in/egress.d.ts +1 -1
  234. package/dist-lib/lib/hooks/built-in/egress.js +13 -21
  235. package/dist-lib/lib/hooks/built-in/sandbox.d.ts +1 -1
  236. package/dist-lib/lib/hooks/built-in/skill-catalog.d.ts +1 -1
  237. package/dist-lib/lib/hooks/index.d.ts +48 -0
  238. package/dist-lib/lib/hooks/index.js +130 -0
  239. package/dist-lib/lib/hooks/run.d.ts +9 -6
  240. package/dist-lib/lib/hooks/run.js +113 -48
  241. package/dist-lib/lib/{completion-lifecycle.d.ts → lifecycle/completion-run.d.ts} +1 -1
  242. package/dist-lib/lib/{completion-lifecycle.js → lifecycle/completion-run.js} +1 -1
  243. package/dist-lib/lib/lifecycle/index.d.ts +83 -0
  244. package/dist-lib/lib/lifecycle/index.js +335 -0
  245. package/dist-lib/lib/{harness-lifecycle.js → lifecycle/machine.js} +2 -2
  246. package/dist-lib/lib/machine/completion/actions/completion.d.ts +11 -2
  247. package/dist-lib/lib/machine/completion/actions/completion.js +98 -14
  248. package/dist-lib/lib/machine/completion/actions/prepare.d.ts +9 -0
  249. package/dist-lib/lib/machine/completion/actions/prepare.js +30 -0
  250. package/dist-lib/lib/machine/completion/actions/tools.d.ts +10 -1
  251. package/dist-lib/lib/machine/completion/actions/tools.js +79 -7
  252. package/dist-lib/lib/machine/completion/context.d.ts +7 -2
  253. package/dist-lib/lib/machine/completion/context.js +29 -5
  254. package/dist-lib/lib/machine/completion/guards/retry.d.ts +1 -0
  255. package/dist-lib/lib/machine/completion/guards/retry.js +6 -3
  256. package/dist-lib/lib/machine/completion/implementations.d.ts +38 -12
  257. package/dist-lib/lib/machine/completion/implementations.js +81 -31
  258. package/dist-lib/lib/machine/completion/machine.d.ts +140 -63
  259. package/dist-lib/lib/machine/completion/machine.js +194 -58
  260. package/dist-lib/lib/machine/completion/ports.d.ts +7 -55
  261. package/dist-lib/lib/machine/completion/ports.js +1 -224
  262. package/dist-lib/lib/machine/completion/rules.d.ts +20 -19
  263. package/dist-lib/lib/machine/completion/rules.js +73 -52
  264. package/dist-lib/lib/machine/completion/types.d.ts +110 -187
  265. package/dist-lib/lib/machine/completion/version.d.ts +1 -0
  266. package/dist-lib/lib/machine/completion/version.js +1 -0
  267. package/dist-lib/lib/machine/definition.d.ts +23 -0
  268. package/dist-lib/lib/machine/definition.js +76 -0
  269. package/dist-lib/lib/machine/index.d.ts +463 -20
  270. package/dist-lib/lib/machine/index.js +15 -11
  271. package/dist-lib/lib/models/llm-presets.d.ts +1 -0
  272. package/dist-lib/lib/models/model-catalog-constants.d.ts +3 -1
  273. package/dist-lib/lib/models/model-catalog-constants.js +9 -1
  274. package/dist-lib/lib/models/model-catalog.d.ts +31 -4
  275. package/dist-lib/lib/models/model-catalog.js +89 -8
  276. package/dist-lib/lib/models/model-fit.d.ts +55 -0
  277. package/dist-lib/lib/models/model-fit.js +102 -0
  278. package/dist-lib/lib/models/model-handle.d.ts +4 -0
  279. package/dist-lib/lib/models/model-handle.js +8 -1
  280. package/dist-lib/lib/models/model-list.d.ts +4 -0
  281. package/dist-lib/lib/models/model-pool.d.ts +35 -10
  282. package/dist-lib/lib/models/model-pool.js +63 -14
  283. package/dist-lib/lib/models/music-catalog.d.ts +1 -1
  284. package/dist-lib/lib/models/music-catalog.js +8 -1
  285. package/dist-lib/lib/models/sdk-faults.d.ts +2 -0
  286. package/dist-lib/lib/models/sdk-faults.js +18 -0
  287. package/dist-lib/lib/models/tts-model-default.js +3 -3
  288. package/dist-lib/lib/office/engine/codes.d.ts +62 -0
  289. package/dist-lib/lib/office/engine/codes.js +61 -0
  290. package/dist-lib/lib/office/engine/docx/document.d.ts +216 -0
  291. package/dist-lib/lib/office/engine/docx/document.js +1152 -0
  292. package/dist-lib/lib/office/engine/docx/index.d.ts +7 -0
  293. package/dist-lib/lib/office/engine/docx/index.js +8 -0
  294. package/dist-lib/lib/office/engine/docx/styles.d.ts +31 -0
  295. package/dist-lib/lib/office/engine/docx/styles.js +173 -0
  296. package/dist-lib/lib/office/engine/docx/template.d.ts +18 -0
  297. package/dist-lib/lib/office/engine/docx/template.js +133 -0
  298. package/dist-lib/lib/office/engine/docx/text.d.ts +55 -0
  299. package/dist-lib/lib/office/engine/docx/text.js +538 -0
  300. package/dist-lib/lib/office/engine/drawingml/chart.d.ts +63 -0
  301. package/dist-lib/lib/office/engine/drawingml/chart.js +539 -0
  302. package/dist-lib/lib/office/engine/drawingml/text.d.ts +35 -0
  303. package/dist-lib/lib/office/engine/drawingml/text.js +352 -0
  304. package/dist-lib/lib/office/engine/errors.d.ts +6 -0
  305. package/dist-lib/lib/office/engine/errors.js +12 -0
  306. package/dist-lib/lib/office/engine/image.d.ts +8 -0
  307. package/dist-lib/lib/office/engine/image.js +48 -0
  308. package/dist-lib/lib/office/engine/index.d.ts +12 -0
  309. package/dist-lib/lib/office/engine/index.js +7 -0
  310. package/dist-lib/lib/office/engine/opc/content-types.d.ts +17 -0
  311. package/dist-lib/lib/office/engine/opc/content-types.js +74 -0
  312. package/dist-lib/lib/office/engine/opc/media.d.ts +13 -0
  313. package/dist-lib/lib/office/engine/opc/media.js +11 -0
  314. package/dist-lib/lib/office/engine/opc/package.d.ts +51 -0
  315. package/dist-lib/lib/office/engine/opc/package.js +324 -0
  316. package/dist-lib/lib/office/engine/opc/paths.d.ts +7 -0
  317. package/dist-lib/lib/office/engine/opc/paths.js +46 -0
  318. package/dist-lib/lib/office/engine/opc/properties.d.ts +7 -0
  319. package/dist-lib/lib/office/engine/opc/properties.js +75 -0
  320. package/dist-lib/lib/office/engine/opc/relationships.d.ts +23 -0
  321. package/dist-lib/lib/office/engine/opc/relationships.js +65 -0
  322. package/dist-lib/lib/office/engine/opc/zip.d.ts +15 -0
  323. package/dist-lib/lib/office/engine/opc/zip.js +264 -0
  324. package/dist-lib/lib/office/engine/pptx/fit.d.ts +12 -0
  325. package/dist-lib/lib/office/engine/pptx/fit.js +37 -0
  326. package/dist-lib/lib/office/engine/pptx/index.d.ts +8 -0
  327. package/dist-lib/lib/office/engine/pptx/index.js +8 -0
  328. package/dist-lib/lib/office/engine/pptx/inherit.d.ts +29 -0
  329. package/dist-lib/lib/office/engine/pptx/inherit.js +155 -0
  330. package/dist-lib/lib/office/engine/pptx/notes.d.ts +5 -0
  331. package/dist-lib/lib/office/engine/pptx/notes.js +85 -0
  332. package/dist-lib/lib/office/engine/pptx/presentation.d.ts +54 -0
  333. package/dist-lib/lib/office/engine/pptx/presentation.js +749 -0
  334. package/dist-lib/lib/office/engine/pptx/read.d.ts +9 -0
  335. package/dist-lib/lib/office/engine/pptx/read.js +66 -0
  336. package/dist-lib/lib/office/engine/pptx/shapes.d.ts +52 -0
  337. package/dist-lib/lib/office/engine/pptx/shapes.js +276 -0
  338. package/dist-lib/lib/office/engine/pptx/slides.d.ts +27 -0
  339. package/dist-lib/lib/office/engine/pptx/slides.js +123 -0
  340. package/dist-lib/lib/office/engine/pptx/template.d.ts +20 -0
  341. package/dist-lib/lib/office/engine/pptx/template.js +391 -0
  342. package/dist-lib/lib/office/engine/pptx/types.d.ts +120 -0
  343. package/dist-lib/lib/office/engine/pptx/types.js +1 -0
  344. package/dist-lib/lib/office/engine/units.d.ts +3 -0
  345. package/dist-lib/lib/office/engine/units.js +12 -0
  346. package/dist-lib/lib/office/engine/utf8.d.ts +2 -0
  347. package/dist-lib/lib/office/engine/utf8.js +103 -0
  348. package/dist-lib/lib/office/engine/xlsx/formula.d.ts +49 -0
  349. package/dist-lib/lib/office/engine/xlsx/formula.js +381 -0
  350. package/dist-lib/lib/office/engine/xlsx/index.d.ts +8 -0
  351. package/dist-lib/lib/office/engine/xlsx/index.js +8 -0
  352. package/dist-lib/lib/office/engine/xlsx/refs.d.ts +22 -0
  353. package/dist-lib/lib/office/engine/xlsx/refs.js +82 -0
  354. package/dist-lib/lib/office/engine/xlsx/reshape.d.ts +21 -0
  355. package/dist-lib/lib/office/engine/xlsx/reshape.js +424 -0
  356. package/dist-lib/lib/office/engine/xlsx/sheet.d.ts +108 -0
  357. package/dist-lib/lib/office/engine/xlsx/sheet.js +662 -0
  358. package/dist-lib/lib/office/engine/xlsx/strings.d.ts +15 -0
  359. package/dist-lib/lib/office/engine/xlsx/strings.js +93 -0
  360. package/dist-lib/lib/office/engine/xlsx/styles.d.ts +38 -0
  361. package/dist-lib/lib/office/engine/xlsx/styles.js +369 -0
  362. package/dist-lib/lib/office/engine/xlsx/template.d.ts +7 -0
  363. package/dist-lib/lib/office/engine/xlsx/template.js +54 -0
  364. package/dist-lib/lib/office/engine/xlsx/workbook.d.ts +161 -0
  365. package/dist-lib/lib/office/engine/xlsx/workbook.js +850 -0
  366. package/dist-lib/lib/office/engine/xlsx/write.d.ts +2 -0
  367. package/dist-lib/lib/office/engine/xlsx/write.js +42 -0
  368. package/dist-lib/lib/office/engine/xml.d.ts +45 -0
  369. package/dist-lib/lib/office/engine/xml.js +258 -0
  370. package/dist-lib/lib/office/extract.d.ts +9 -0
  371. package/dist-lib/lib/office/extract.js +19 -0
  372. package/dist-lib/lib/office/index.d.ts +1 -1
  373. package/dist-lib/lib/office/index.js +74 -19
  374. package/dist-lib/lib/plugins/addons.d.ts +2 -0
  375. package/dist-lib/lib/plugins/addons.js +12 -0
  376. package/dist-lib/lib/plugins/context.d.ts +16 -0
  377. package/dist-lib/lib/plugins/context.js +48 -0
  378. package/dist-lib/lib/plugins/index.d.ts +3 -0
  379. package/dist-lib/lib/plugins/index.js +1 -0
  380. package/dist-lib/lib/plugins/registry.d.ts +116 -0
  381. package/dist-lib/lib/plugins/registry.js +505 -0
  382. package/dist-lib/lib/plugins/runtime.d.ts +27 -0
  383. package/dist-lib/lib/plugins/runtime.js +143 -0
  384. package/dist-lib/lib/plugins/scope.d.ts +17 -0
  385. package/dist-lib/lib/plugins/scope.js +55 -0
  386. package/dist-lib/lib/prompt.d.ts +2 -5
  387. package/dist-lib/lib/prompt.js +9 -0
  388. package/dist-lib/lib/residency/completion-runtime.d.ts +52 -0
  389. package/dist-lib/lib/{capabilities → residency}/completion-runtime.js +22 -15
  390. package/dist-lib/lib/residency/index.d.ts +148 -0
  391. package/dist-lib/lib/residency/index.js +539 -0
  392. package/dist-lib/lib/run-log/boundary.d.ts +17 -0
  393. package/dist-lib/lib/run-log/boundary.js +58 -0
  394. package/dist-lib/lib/run-log/history-codec.d.ts +7 -6
  395. package/dist-lib/lib/run-log/history-codec.js +175 -46
  396. package/dist-lib/lib/run-log/index.d.ts +46 -0
  397. package/dist-lib/lib/run-log/index.js +40 -0
  398. package/dist-lib/lib/run-log/inspect.d.ts +53 -0
  399. package/dist-lib/lib/{run-log-inspect.js → run-log/inspect.js} +196 -139
  400. package/dist-lib/lib/run-log/live.d.ts +37 -0
  401. package/dist-lib/lib/run-log/live.js +195 -0
  402. package/dist-lib/lib/run-log/persisted-actor.d.ts +1 -6
  403. package/dist-lib/lib/run-log/persisted-actor.js +4 -3
  404. package/dist-lib/lib/run-log/protocol-types.d.ts +37 -14
  405. package/dist-lib/lib/run-log/protocol.d.ts +1 -2
  406. package/dist-lib/lib/run-log/protocol.js +45 -40
  407. package/dist-lib/lib/{run-log-redact.d.ts → run-log/redact.d.ts} +3 -2
  408. package/dist-lib/lib/{run-log-redact.js → run-log/redact.js} +101 -16
  409. package/dist-lib/lib/run-log/replay.d.ts +3 -2
  410. package/dist-lib/lib/run-log/replay.js +7 -6
  411. package/dist-lib/lib/run-log/request-codec.d.ts +17 -0
  412. package/dist-lib/lib/run-log/request-codec.js +87 -0
  413. package/dist-lib/lib/run-log/run-journal.d.ts +14 -8
  414. package/dist-lib/lib/run-log/run-journal.js +100 -75
  415. package/dist-lib/lib/sdk-loader.d.ts +2 -7
  416. package/dist-lib/lib/sdk-loader.js +8 -15
  417. package/dist-lib/lib/sdk-storage.js +3 -1
  418. package/dist-lib/lib/serve.js +139 -38
  419. package/dist-lib/lib/skills-host/index.d.ts +59 -0
  420. package/dist-lib/lib/skills-host/index.js +268 -0
  421. package/dist-lib/lib/spawn.d.ts +37 -3
  422. package/dist-lib/lib/spawn.js +7 -3
  423. package/dist-lib/lib/spill.d.ts +11 -0
  424. package/dist-lib/lib/spill.js +82 -0
  425. package/dist-lib/lib/tools/{exec/adapters/python → attachments}/output-policy.d.ts +2 -3
  426. package/dist-lib/lib/tools/{exec/adapters/python/attachments.d.ts → attachments/staging.d.ts} +2 -2
  427. package/dist-lib/lib/tools/{exec/adapters/python/attachments.js → attachments/staging.js} +3 -3
  428. package/dist-lib/lib/tools/catalog.d.ts +1 -1
  429. package/dist-lib/lib/tools/catalog.js +1 -1
  430. package/dist-lib/lib/tools/create-documents.d.ts +1 -1
  431. package/dist-lib/lib/tools/edit-documents.d.ts +1 -1
  432. package/dist-lib/lib/tools/exec/adapters/shell/shell-adapter.d.ts +5 -7
  433. package/dist-lib/lib/tools/exec/adapters/shell/shell-adapter.js +3 -2
  434. package/dist-lib/lib/tools/exec/bare-runtime.js +2 -4
  435. package/dist-lib/lib/tools/exec/python-source.d.ts +6 -0
  436. package/dist-lib/lib/tools/exec/python-source.js +243 -0
  437. package/dist-lib/lib/tools/exec/runner.d.ts +24 -45
  438. package/dist-lib/lib/tools/exec/runner.js +68 -34
  439. package/dist-lib/lib/tools/exec/scope.d.ts +2 -0
  440. package/dist-lib/lib/tools/exec/scope.js +33 -2
  441. package/dist-lib/lib/tools/exec/shell-guidance.d.ts +11 -9
  442. package/dist-lib/lib/tools/exec/shell-guidance.js +28 -57
  443. package/dist-lib/lib/tools/exec/video-tools.d.ts +0 -1
  444. package/dist-lib/lib/tools/exec/video-tools.js +0 -5
  445. package/dist-lib/lib/tools/exec.d.ts +7 -14
  446. package/dist-lib/lib/tools/exec.js +181 -457
  447. package/dist-lib/lib/tools/file-glob.d.ts +1 -1
  448. package/dist-lib/lib/tools/file-glob.js +1 -0
  449. package/dist-lib/lib/tools/fs/scope.d.ts +1 -0
  450. package/dist-lib/lib/tools/fs/scope.js +8 -3
  451. package/dist-lib/lib/tools/grep.d.ts +1 -1
  452. package/dist-lib/lib/tools/grep.js +1 -0
  453. package/dist-lib/lib/tools/http-request.d.ts +1 -1
  454. package/dist-lib/lib/tools/http-request.js +1 -0
  455. package/dist-lib/lib/tools/index.d.ts +21 -0
  456. package/dist-lib/lib/tools/index.js +46 -0
  457. package/dist-lib/lib/tools/office/ops.d.ts +13 -0
  458. package/dist-lib/lib/tools/office/ops.js +100 -0
  459. package/dist-lib/lib/tools/office.d.ts +12 -0
  460. package/dist-lib/lib/tools/office.js +486 -0
  461. package/dist-lib/lib/tools/operations/compile.d.ts +3 -3
  462. package/dist-lib/lib/tools/operations/compile.js +2 -1
  463. package/dist-lib/lib/tools/operations/decoders.js +1 -1
  464. package/dist-lib/lib/tools/operations/manifest.d.ts +1 -1
  465. package/dist-lib/lib/tools/outbound-guard.d.ts +3 -1
  466. package/dist-lib/lib/tools/outbound-guard.js +4 -0
  467. package/dist-lib/lib/tools/pdf/build.d.ts +43 -0
  468. package/dist-lib/lib/tools/pdf/build.js +150 -0
  469. package/dist-lib/lib/tools/pdf/images.d.ts +7 -0
  470. package/dist-lib/lib/tools/pdf/images.js +82 -0
  471. package/dist-lib/lib/tools/pdf/request.d.ts +63 -0
  472. package/dist-lib/lib/tools/pdf/request.js +335 -0
  473. package/dist-lib/lib/tools/pdf.d.ts +6 -0
  474. package/dist-lib/lib/tools/pdf.js +303 -0
  475. package/dist-lib/lib/tools/read-files.d.ts +1 -1
  476. package/dist-lib/lib/tools/read-files.js +5 -1
  477. package/dist-lib/lib/tools/skill.d.ts +2 -4
  478. package/dist-lib/lib/tools/skill.js +20 -22
  479. package/dist-lib/lib/tools/skills/auth-resolver.d.ts +1 -1
  480. package/dist-lib/lib/tools/skills/catalog.d.ts +9 -2
  481. package/dist-lib/lib/tools/skills/catalog.js +7 -7
  482. package/dist-lib/lib/tools/skills/cli-schema.js +1 -1
  483. package/dist-lib/lib/tools/skills/frontmatter-parser.d.ts +1 -0
  484. package/dist-lib/lib/tools/skills/frontmatter-parser.js +1 -0
  485. package/dist-lib/lib/tools/skills/mention.d.ts +1 -2
  486. package/dist-lib/lib/tools/skills/mention.js +0 -3
  487. package/dist-lib/lib/tools/skills/scope-key.d.ts +2 -1
  488. package/dist-lib/lib/tools/skills/scope-key.js +2 -3
  489. package/dist-lib/lib/tools/skills/skill-state.d.ts +2 -2
  490. package/dist-lib/lib/tools/skills/skill-state.js +11 -28
  491. package/dist-lib/lib/tools/toolsets.d.ts +3 -7
  492. package/dist-lib/lib/tools/toolsets.js +5 -9
  493. package/dist-lib/lib/tools/web-fetch.d.ts +1 -1
  494. package/dist-lib/lib/tools/web-fetch.js +42 -6
  495. package/dist-lib/lib/web-fetch/embedded-state.js +1 -1
  496. package/dist-lib/lib/web-fetch/extract.js +1 -1
  497. package/dist-lib/lib/web-fetch/images.js +1 -1
  498. package/dist-lib/lib/web-fetch/video.js +1 -1
  499. package/dist-lib/lib/wire.d.ts +8 -0
  500. package/dist-lib/lib/wire.js +112 -2
  501. package/dist-lib/plugins/code-mode/index.d.ts +16 -0
  502. package/dist-lib/plugins/code-mode/index.js +43 -0
  503. package/dist-lib/plugins/coding/index.d.ts +15 -0
  504. package/dist-lib/plugins/coding/index.js +42 -0
  505. package/dist-lib/plugins/coding/jobs.d.ts +24 -0
  506. package/dist-lib/plugins/coding/jobs.js +144 -0
  507. package/dist-lib/plugins/coding/session.d.ts +51 -0
  508. package/dist-lib/plugins/coding/session.js +263 -0
  509. package/dist-lib/plugins/coding/write-file.d.ts +3 -0
  510. package/dist-lib/plugins/coding/write-file.js +52 -0
  511. package/dist-lib/plugins/command-hooks/index.d.ts +88 -0
  512. package/dist-lib/plugins/command-hooks/index.js +338 -0
  513. package/dist-lib/plugins/external-agents/acp.d.ts +27 -0
  514. package/dist-lib/plugins/external-agents/acp.js +264 -0
  515. package/dist-lib/plugins/external-agents/cli.d.ts +3 -0
  516. package/dist-lib/plugins/external-agents/cli.js +199 -0
  517. package/dist-lib/plugins/external-agents/index.d.ts +25 -0
  518. package/dist-lib/plugins/external-agents/index.js +54 -0
  519. package/dist-lib/plugins/external-agents/process.d.ts +19 -0
  520. package/dist-lib/plugins/external-agents/process.js +92 -0
  521. package/dist-lib/plugins/external-agents/targets.d.ts +32 -0
  522. package/dist-lib/plugins/external-agents/targets.js +66 -0
  523. package/dist-lib/{lib/tools → plugins/image}/edit-image.d.ts +3 -2
  524. package/dist-lib/{lib/tools → plugins/image}/edit-image.js +7 -2
  525. package/dist-lib/{lib/tools → plugins/image}/generate-image.d.ts +6 -12
  526. package/dist-lib/{lib/tools → plugins/image}/generate-image.js +6 -7
  527. package/dist-lib/plugins/image/index.d.ts +25 -0
  528. package/dist-lib/plugins/image/index.js +76 -0
  529. package/dist-lib/plugins/knowledge/index.d.ts +21 -0
  530. package/dist-lib/plugins/knowledge/index.js +47 -0
  531. package/dist-lib/plugins/knowledge/search-tool.d.ts +4 -0
  532. package/dist-lib/plugins/knowledge/search-tool.js +38 -0
  533. package/dist-lib/plugins/knowledge/store.d.ts +42 -0
  534. package/dist-lib/plugins/knowledge/store.js +332 -0
  535. package/dist-lib/plugins/lsp/index.d.ts +32 -0
  536. package/dist-lib/plugins/lsp/index.js +77 -0
  537. package/dist-lib/plugins/lsp/pool.d.ts +24 -0
  538. package/dist-lib/plugins/lsp/pool.js +73 -0
  539. package/dist-lib/plugins/lsp/rpc.d.ts +37 -0
  540. package/dist-lib/plugins/lsp/rpc.js +145 -0
  541. package/dist-lib/plugins/lsp/server.d.ts +55 -0
  542. package/dist-lib/plugins/lsp/server.js +192 -0
  543. package/dist-lib/plugins/lsp/tool.d.ts +12 -0
  544. package/dist-lib/plugins/lsp/tool.js +366 -0
  545. package/dist-lib/plugins/mcp/call.d.ts +17 -0
  546. package/dist-lib/{lib/tools/mcp-call.js → plugins/mcp/call.js} +92 -84
  547. package/dist-lib/plugins/mcp/index.d.ts +21 -0
  548. package/dist-lib/plugins/mcp/index.js +85 -0
  549. package/dist-lib/{lib/tools → plugins}/mcp/protocol.d.ts +9 -16
  550. package/dist-lib/{lib/tools → plugins}/mcp/protocol.js +3 -16
  551. package/dist-lib/plugins/mcp/server.d.ts +23 -0
  552. package/dist-lib/plugins/mcp/server.js +108 -0
  553. package/dist-lib/{lib/tools → plugins/music}/generate-music.d.ts +6 -15
  554. package/dist-lib/{lib/tools → plugins/music}/generate-music.js +7 -8
  555. package/dist-lib/plugins/music/index.d.ts +24 -0
  556. package/dist-lib/plugins/music/index.js +48 -0
  557. package/dist-lib/{lib/tools/exec → plugins}/obsidian/cli-process.d.ts +2 -2
  558. package/dist-lib/{lib/tools/exec → plugins}/obsidian/cli-process.js +2 -2
  559. package/dist-lib/{lib/tools/exec → plugins}/obsidian/cli.d.ts +1 -1
  560. package/dist-lib/{lib/tools/exec → plugins}/obsidian/cli.js +7 -7
  561. package/dist-lib/{lib/tools/exec → plugins}/obsidian/command.js +1 -1
  562. package/dist-lib/{lib/tools/exec → plugins}/obsidian/guidance.d.ts +0 -1
  563. package/dist-lib/{lib/tools/exec → plugins}/obsidian/guidance.js +0 -7
  564. package/dist-lib/plugins/obsidian/index.d.ts +26 -0
  565. package/dist-lib/plugins/obsidian/index.js +138 -0
  566. package/dist-lib/{lib/tools/skills/obsidian-readiness.d.ts → plugins/obsidian/readiness.d.ts} +1 -0
  567. package/dist-lib/{lib/tools/skills/obsidian-readiness.js → plugins/obsidian/readiness.js} +7 -0
  568. package/dist-lib/plugins/python/guarded-fetch.d.ts +13 -0
  569. package/dist-lib/plugins/python/guarded-fetch.js +32 -0
  570. package/dist-lib/plugins/python/index.d.ts +18 -0
  571. package/dist-lib/plugins/python/index.js +19 -0
  572. package/dist-lib/{lib/tools/exec/adapters → plugins}/python/interrupt-timer.js +2 -2
  573. package/dist-lib/plugins/python/language.d.ts +8 -0
  574. package/dist-lib/plugins/python/language.js +377 -0
  575. package/dist-lib/{lib/tools/exec/adapters → plugins}/python/loader.d.ts +1 -0
  576. package/dist-lib/{lib/tools/exec/adapters → plugins}/python/loader.js +8 -1
  577. package/dist-lib/{lib/tools/exec/adapters → plugins}/python/memfs.js +3 -3
  578. package/dist-lib/{lib/tools/exec/adapters → plugins}/python/module-distributions.js +0 -3
  579. package/dist-lib/{lib/tools/exec/adapters → plugins}/python/pyodide.js +4 -4
  580. package/dist-lib/plugins/python/python-adapter.d.ts +41 -0
  581. package/dist-lib/plugins/python/python-adapter.js +515 -0
  582. package/dist-lib/{lib/tools/exec/adapters → plugins}/python/run-session.d.ts +1 -2
  583. package/dist-lib/{lib/tools/exec/adapters → plugins}/python/run-session.js +10 -99
  584. package/dist-lib/plugins/python/shell-redirect.d.ts +8 -0
  585. package/dist-lib/plugins/python/shell-redirect.js +25 -0
  586. package/dist-lib/{lib/tools/exec/adapters → plugins}/python/wheels.js +4 -3
  587. package/dist-lib/{lib/tools/exec/adapters → plugins}/python/worker/active.js +1 -1
  588. package/dist-lib/{lib/tools/exec/adapters → plugins}/python/worker/client.d.ts +1 -0
  589. package/dist-lib/{lib/tools/exec/adapters → plugins}/python/worker/client.js +6 -3
  590. package/dist-lib/plugins/python/worker/entry.d.ts +1 -0
  591. package/dist-lib/plugins/python/worker/entry.js +9 -0
  592. package/dist-lib/plugins/python/worker/interrupt-deadline.d.ts +1 -0
  593. package/dist-lib/{lib/tools/exec/adapters → plugins}/python/worker/interrupt-deadline.js +1 -1
  594. package/dist-lib/{lib/tools/exec/adapters → plugins}/python/worker/serve.js +2 -2
  595. package/dist-lib/{lib/tools/exec/adapters → plugins}/python/worker/spawn.d.ts +1 -0
  596. package/dist-lib/{lib/tools/exec/adapters → plugins}/python/worker/spawn.js +7 -0
  597. package/dist-lib/plugins/quickjs/index.d.ts +20 -0
  598. package/dist-lib/plugins/quickjs/index.js +25 -0
  599. package/dist-lib/plugins/quickjs/language.d.ts +3 -0
  600. package/dist-lib/plugins/quickjs/language.js +59 -0
  601. package/dist-lib/plugins/quickjs/runtime.d.ts +38 -0
  602. package/dist-lib/plugins/quickjs/runtime.js +421 -0
  603. package/dist-lib/plugins/quickjs/text-decoder.d.ts +1 -0
  604. package/dist-lib/plugins/quickjs/text-decoder.js +15 -0
  605. package/dist-lib/plugins/run-report/brand.d.ts +1 -0
  606. package/dist-lib/plugins/run-report/brand.js +1 -0
  607. package/dist-lib/plugins/run-report/flow-view.d.ts +6 -0
  608. package/dist-lib/plugins/run-report/flow-view.js +53 -0
  609. package/dist-lib/plugins/run-report/flow.d.ts +33 -0
  610. package/dist-lib/plugins/run-report/flow.js +201 -0
  611. package/dist-lib/plugins/run-report/index.d.ts +17 -0
  612. package/dist-lib/plugins/run-report/index.js +27 -0
  613. package/dist-lib/plugins/run-report/layout.d.ts +39 -0
  614. package/dist-lib/plugins/run-report/layout.js +175 -0
  615. package/dist-lib/plugins/run-report/meaning.d.ts +6 -0
  616. package/dist-lib/plugins/run-report/meaning.js +43 -0
  617. package/dist-lib/plugins/run-report/model.d.ts +86 -0
  618. package/dist-lib/plugins/run-report/model.js +387 -0
  619. package/dist-lib/plugins/run-report/page.d.ts +13 -0
  620. package/dist-lib/plugins/run-report/page.js +234 -0
  621. package/dist-lib/plugins/run-report/script.d.ts +1 -0
  622. package/dist-lib/plugins/run-report/script.js +661 -0
  623. package/dist-lib/plugins/run-report/story.d.ts +48 -0
  624. package/dist-lib/plugins/run-report/story.js +188 -0
  625. package/dist-lib/plugins/run-report/style.d.ts +1 -0
  626. package/dist-lib/plugins/run-report/style.js +410 -0
  627. package/dist-lib/plugins/run-report/why.d.ts +28 -0
  628. package/dist-lib/plugins/run-report/why.js +170 -0
  629. package/dist-lib/plugins/sandbox-macos/index.d.ts +48 -0
  630. package/dist-lib/plugins/sandbox-macos/index.js +175 -0
  631. package/dist-lib/plugins/sandbox-vm/index.d.ts +24 -0
  632. package/dist-lib/plugins/sandbox-vm/index.js +27 -0
  633. package/dist-lib/plugins/sandbox-vm/vm-shell.d.ts +46 -0
  634. package/dist-lib/plugins/sandbox-vm/vm-shell.js +106 -0
  635. package/dist-lib/{lib → plugins/speech}/audio-transcode-bare.js +2 -2
  636. package/dist-lib/plugins/speech/index.d.ts +17 -0
  637. package/dist-lib/plugins/speech/index.js +24 -0
  638. package/dist-lib/plugins/speech/speech-engine.d.ts +23 -0
  639. package/dist-lib/plugins/speech/speech-engine.js +55 -0
  640. package/dist-lib/plugins/speech/speech-runtime.d.ts +22 -0
  641. package/dist-lib/plugins/speech/speech-runtime.js +212 -0
  642. package/dist-lib/{lib/capabilities → plugins/speech}/speech-text.d.ts +1 -0
  643. package/dist-lib/{lib/capabilities → plugins/speech}/speech-text.js +10 -3
  644. package/dist-lib/plugins/speech/voice-lane.d.ts +2 -0
  645. package/dist-lib/plugins/speech/voice-lane.js +9 -0
  646. package/dist-lib/plugins/speech/voice.d.ts +17 -0
  647. package/dist-lib/{lib/capabilities → plugins/speech}/voice.js +27 -25
  648. package/dist-lib/plugins/translation/index.d.ts +22 -0
  649. package/dist-lib/plugins/translation/index.js +63 -0
  650. package/dist-lib/{lib/models → plugins/translation}/nmt-catalog.d.ts +0 -1
  651. package/dist-lib/{lib/models → plugins/translation}/nmt-catalog.js +0 -3
  652. package/dist-lib/{lib/tools → plugins/translation}/translate.d.ts +14 -6
  653. package/dist-lib/{lib/tools → plugins/translation}/translate.js +14 -8
  654. package/dist-lib/plugins/walkie-talkie/crew.d.ts +27 -0
  655. package/dist-lib/plugins/walkie-talkie/crew.js +103 -0
  656. package/dist-lib/plugins/walkie-talkie/index.d.ts +127 -0
  657. package/dist-lib/plugins/walkie-talkie/index.js +340 -0
  658. package/dist-lib/plugins/walkie-talkie/wire.d.ts +67 -0
  659. package/dist-lib/plugins/walkie-talkie/wire.js +136 -0
  660. package/dist-lib/plugins/weather/geocode.d.ts +25 -0
  661. package/dist-lib/plugins/weather/geocode.js +101 -0
  662. package/dist-lib/plugins/weather/index.d.ts +15 -0
  663. package/dist-lib/plugins/weather/index.js +17 -0
  664. package/dist-lib/plugins/weather/lookup.d.ts +6 -0
  665. package/dist-lib/plugins/weather/lookup.js +169 -0
  666. package/dist-lib/{lib/tools/weather-lookup → plugins/weather}/place.js +5 -1
  667. package/dist-lib/plugins/web-search/engine-registry.d.ts +44 -0
  668. package/dist-lib/plugins/web-search/engine-registry.js +17 -0
  669. package/dist-lib/{lib → plugins}/web-search/engines/aol.d.ts +1 -0
  670. package/dist-lib/{lib → plugins}/web-search/engines/aol.js +5 -3
  671. package/dist-lib/{lib → plugins}/web-search/engines/bing.d.ts +1 -0
  672. package/dist-lib/{lib → plugins}/web-search/engines/bing.js +9 -4
  673. package/dist-lib/{lib → plugins}/web-search/engines/brave.d.ts +1 -0
  674. package/dist-lib/{lib → plugins}/web-search/engines/brave.js +5 -3
  675. package/dist-lib/{lib → plugins}/web-search/engines/duckduckgo.d.ts +1 -0
  676. package/dist-lib/{lib → plugins}/web-search/engines/duckduckgo.js +5 -2
  677. package/dist-lib/{lib → plugins}/web-search/engines/google.d.ts +1 -0
  678. package/dist-lib/{lib → plugins}/web-search/engines/google.js +6 -4
  679. package/dist-lib/{lib → plugins}/web-search/engines/wikipedia.d.ts +1 -0
  680. package/dist-lib/{lib → plugins}/web-search/engines/wikipedia.js +5 -3
  681. package/dist-lib/{lib → plugins}/web-search/engines/yahoo.d.ts +1 -0
  682. package/dist-lib/{lib → plugins}/web-search/engines/yahoo.js +5 -3
  683. package/dist-lib/{lib → plugins}/web-search/fetch-html.js +1 -1
  684. package/dist-lib/plugins/web-search/index.d.ts +18 -0
  685. package/dist-lib/plugins/web-search/index.js +33 -0
  686. package/dist-lib/{lib → plugins}/web-search/orchestrator.d.ts +3 -1
  687. package/dist-lib/{lib → plugins}/web-search/orchestrator.js +5 -5
  688. package/dist-lib/plugins/web-search/tool.d.ts +3 -0
  689. package/dist-lib/{lib/tools/web-search.js → plugins/web-search/tool.js} +18 -14
  690. package/dist-lib/plugins/web-search/types.js +1 -0
  691. package/dist-lib/schema/generate.js +5 -2
  692. package/dist-lib/schema/harness.js +158 -7
  693. package/dist-lib/spec/bind.js +20 -4
  694. package/dist-lib/spec/calls.js +4 -0
  695. package/dist-lib/spec/hrpc/hrpc.json +52 -0
  696. package/dist-lib/spec/hrpc/index.js +51 -3
  697. package/dist-lib/spec/hrpc/messages.js +595 -17
  698. package/dist-lib/spec/hyperschema/index.js +595 -17
  699. package/dist-lib/spec/hyperschema/schema.json +464 -1
  700. package/dist-lib/spec/hyperschema/types.d.ts +113 -2
  701. package/package.json +255 -487
  702. package/patches/{@qvac%2Finference@0.20.0.patch → @qvac%2Finference@0.21.0.patch} +8 -8
  703. package/scripts/addon-externals.cjs +386 -0
  704. package/scripts/addon-externals.d.ts +30 -0
  705. package/wheels/manifest.json +1 -160
  706. package/worker/harness-sidecar.mjs +80 -59
  707. package/dist-lib/lib/capabilities/completion-engine/actors/inspect-preload.d.ts +0 -3
  708. package/dist-lib/lib/capabilities/completion-engine/actors/inspect-preload.js +0 -75
  709. package/dist-lib/lib/capabilities/completion-engine/actors/preload-failure.d.ts +0 -9
  710. package/dist-lib/lib/capabilities/completion-engine/actors/preload-failure.js +0 -11
  711. package/dist-lib/lib/capabilities/completion-engine/actors/preloading.d.ts +0 -3
  712. package/dist-lib/lib/capabilities/completion-engine/actors/preloading.js +0 -114
  713. package/dist-lib/lib/capabilities/completion-loop/index.d.ts +0 -80
  714. package/dist-lib/lib/capabilities/completion-loop/index.js +0 -158
  715. package/dist-lib/lib/capabilities/completion-loop/metrics.d.ts +0 -5
  716. package/dist-lib/lib/capabilities/completion-loop/metrics.js +0 -29
  717. package/dist-lib/lib/capabilities/completion-loop/tool-execution.d.ts +0 -60
  718. package/dist-lib/lib/capabilities/completion-loop/turns.js +0 -112
  719. package/dist-lib/lib/capabilities/completion-runtime.d.ts +0 -46
  720. package/dist-lib/lib/capabilities/completion.d.ts +0 -18
  721. package/dist-lib/lib/capabilities/completion.js +0 -22
  722. package/dist-lib/lib/helpers/recovery-required.d.ts +0 -1
  723. package/dist-lib/lib/helpers/recovery-required.js +0 -1
  724. package/dist-lib/lib/hooks/built-in/index.d.ts +0 -4
  725. package/dist-lib/lib/hooks/built-in/index.js +0 -4
  726. package/dist-lib/lib/hooks/pipeline.d.ts +0 -24
  727. package/dist-lib/lib/hooks/pipeline.js +0 -74
  728. package/dist-lib/lib/hooks/registry.d.ts +0 -2
  729. package/dist-lib/lib/hooks/registry.js +0 -7
  730. package/dist-lib/lib/machine/completion/actions/skills.d.ts +0 -9
  731. package/dist-lib/lib/machine/completion/actions/skills.js +0 -83
  732. package/dist-lib/lib/machine/engine.d.ts +0 -93
  733. package/dist-lib/lib/machine/guards.d.ts +0 -2
  734. package/dist-lib/lib/machine/guards.js +0 -6
  735. package/dist-lib/lib/office/pptx.d.ts +0 -1
  736. package/dist-lib/lib/office/pptx.js +0 -26
  737. package/dist-lib/lib/office/python.d.ts +0 -8
  738. package/dist-lib/lib/office/python.js +0 -32
  739. package/dist-lib/lib/office/xlsx.d.ts +0 -1
  740. package/dist-lib/lib/office/xlsx.js +0 -26
  741. package/dist-lib/lib/run-log-inspect.d.ts +0 -25
  742. package/dist-lib/lib/run-log-protocol.d.ts +0 -2
  743. package/dist-lib/lib/run-log-protocol.js +0 -1
  744. package/dist-lib/lib/tool-call-display.d.ts +0 -1
  745. package/dist-lib/lib/tools/exec/adapters/adapter.d.ts +0 -31
  746. package/dist-lib/lib/tools/exec/adapters/python/create-effect.d.ts +0 -7
  747. package/dist-lib/lib/tools/exec/adapters/python/create-effect.js +0 -318
  748. package/dist-lib/lib/tools/exec/adapters/python/python-adapter.d.ts +0 -89
  749. package/dist-lib/lib/tools/exec/adapters/python/python-adapter.js +0 -1371
  750. package/dist-lib/lib/tools/exec/adapters/python/worker/entry.js +0 -3
  751. package/dist-lib/lib/tools/exec/obsidian/route.d.ts +0 -17
  752. package/dist-lib/lib/tools/exec/obsidian/route.js +0 -91
  753. package/dist-lib/lib/tools/mcp-call.d.ts +0 -14
  754. package/dist-lib/lib/tools/rag-search.d.ts +0 -2
  755. package/dist-lib/lib/tools/rag-search.js +0 -105
  756. package/dist-lib/lib/tools/weather-lookup.d.ts +0 -8
  757. package/dist-lib/lib/tools/weather-lookup.js +0 -122
  758. package/dist-lib/lib/tools/web-search.d.ts +0 -6
  759. package/dist-lib/lib/web-search/engine-registry.d.ts +0 -7
  760. package/dist-lib/lib/web-search/engine-registry.js +0 -17
  761. package/wheels/cffi-2.0.0-cp314-cp314-pyemscripten_2026_0_wasm32.whl +0 -0
  762. package/wheels/cryptography-47.0.0-cp314-abi3-pyemscripten_2026_0_wasm32.whl +0 -0
  763. package/wheels/defusedxml-0.7.1-py2.py3-none-any.whl +0 -0
  764. package/wheels/et_xmlfile-2.0.0-py3-none-any.whl +0 -0
  765. package/wheels/fonttools-4.62.1-py3-none-any.whl +0 -0
  766. package/wheels/fpdf2-2.8.8-py3-none-any.whl +0 -0
  767. package/wheels/lxml-6.0.2-cp314-cp314-pyemscripten_2026_0_wasm32.whl +0 -0
  768. package/wheels/openpyxl-3.1.5-py2.py3-none-any.whl +0 -0
  769. package/wheels/pillow-12.2.0-cp314-cp314-pyemscripten_2026_0_wasm32.whl +0 -0
  770. package/wheels/pycparser-3.0-py3-none-any.whl +0 -0
  771. package/wheels/pypdf-6.15.0-py3-none-any.whl +0 -0
  772. package/wheels/python_docx-1.2.0-py3-none-any.whl +0 -0
  773. package/wheels/python_pptx-1.0.2-py3-none-any.whl +0 -0
  774. package/wheels/six-1.17.0-py2.py3-none-any.whl +0 -0
  775. package/wheels/typing_extensions-4.15.0-py3-none-any.whl +0 -0
  776. package/wheels/xlsxwriter-3.2.9-py3-none-any.whl +0 -0
  777. /package/dist-lib/lib/{tools/skills → agent}/tool-grants.d.ts +0 -0
  778. /package/dist-lib/lib/{tools/skills → agent}/tool-grants.js +0 -0
  779. /package/dist-lib/lib/capabilities/{types.js → completion-engine/prepare-step.js} +0 -0
  780. /package/dist-lib/lib/{hooks/types.js → capabilities/completion-engine/stages.js} +0 -0
  781. /package/dist-lib/lib/{tool-call-display.js → contract/agent.js} +0 -0
  782. /package/dist-lib/lib/{tools/exec/adapters/adapter.js → contract/completion.js} +0 -0
  783. /package/dist-lib/lib/{tools/exec/adapters/python/worker/entry.d.ts → contract/exec.js} +0 -0
  784. /package/dist-lib/lib/{tools/exec/adapters/python/worker/interrupt-deadline.d.ts → contract/hooks.js} +0 -0
  785. /package/dist-lib/lib/{web-search/types.js → contract/index.js} +0 -0
  786. /package/dist-lib/lib/{capabilities/completion-engine → helpers}/abort-polyfill.d.ts +0 -0
  787. /package/dist-lib/lib/{capabilities/completion-engine → helpers}/abort-polyfill.js +0 -0
  788. /package/dist-lib/lib/{web-search → helpers}/html-helpers.d.ts +0 -0
  789. /package/dist-lib/lib/{web-search → helpers}/html-helpers.js +0 -0
  790. /package/dist-lib/lib/{tools → helpers}/model-args.d.ts +0 -0
  791. /package/dist-lib/lib/{tools → helpers}/model-args.js +0 -0
  792. /package/dist-lib/lib/{machine → helpers}/stable-stringify.d.ts +0 -0
  793. /package/dist-lib/lib/{web-search → helpers}/user-agents.d.ts +0 -0
  794. /package/dist-lib/lib/{web-search → helpers}/user-agents.js +0 -0
  795. /package/dist-lib/lib/{harness-lifecycle.d.ts → lifecycle/machine.d.ts} +0 -0
  796. /package/dist-lib/lib/tools/{exec/adapters/python → attachments}/output-policy.js +0 -0
  797. /package/dist-lib/{lib/tools/exec → plugins}/obsidian/command.d.ts +0 -0
  798. /package/dist-lib/{lib/tools/exec → plugins}/obsidian/note-name.d.ts +0 -0
  799. /package/dist-lib/{lib/tools/exec → plugins}/obsidian/note-name.js +0 -0
  800. /package/dist-lib/{lib/tools/exec → plugins}/obsidian/output.d.ts +0 -0
  801. /package/dist-lib/{lib/tools/exec → plugins}/obsidian/output.js +0 -0
  802. /package/dist-lib/{lib/tools/exec → plugins}/obsidian/safe-path.d.ts +0 -0
  803. /package/dist-lib/{lib/tools/exec → plugins}/obsidian/safe-path.js +0 -0
  804. /package/dist-lib/{lib/tools/exec → plugins}/obsidian/vault-create.d.ts +0 -0
  805. /package/dist-lib/{lib/tools/exec → plugins}/obsidian/vault-create.js +0 -0
  806. /package/dist-lib/{lib/tools/exec → plugins}/obsidian/vault-fs.d.ts +0 -0
  807. /package/dist-lib/{lib/tools/exec → plugins}/obsidian/vault-fs.js +0 -0
  808. /package/dist-lib/{lib/tools/exec → plugins}/obsidian/vault-paths.d.ts +0 -0
  809. /package/dist-lib/{lib/tools/exec → plugins}/obsidian/vault-paths.js +0 -0
  810. /package/dist-lib/{lib/tools/exec → plugins}/obsidian/vault-read.d.ts +0 -0
  811. /package/dist-lib/{lib/tools/exec → plugins}/obsidian/vault-read.js +0 -0
  812. /package/dist-lib/{lib/tools/exec → plugins}/obsidian/vault-write.d.ts +0 -0
  813. /package/dist-lib/{lib/tools/exec → plugins}/obsidian/vault-write.js +0 -0
  814. /package/dist-lib/{lib/tools/exec/adapters → plugins}/python/deadline-state.d.ts +0 -0
  815. /package/dist-lib/{lib/tools/exec/adapters → plugins}/python/deadline-state.js +0 -0
  816. /package/dist-lib/{lib/tools/exec/adapters → plugins}/python/distributions.d.ts +0 -0
  817. /package/dist-lib/{lib/tools/exec/adapters → plugins}/python/distributions.js +0 -0
  818. /package/dist-lib/{lib/tools/exec/adapters → plugins}/python/interrupt-timer.d.ts +0 -0
  819. /package/dist-lib/{lib/tools/exec/adapters → plugins}/python/memfs.d.ts +0 -0
  820. /package/dist-lib/{lib/tools/exec/adapters → plugins}/python/module-distributions.d.ts +0 -0
  821. /package/dist-lib/{lib/tools/exec/adapters → plugins}/python/named-hosts.d.ts +0 -0
  822. /package/dist-lib/{lib/tools/exec/adapters → plugins}/python/named-hosts.js +0 -0
  823. /package/dist-lib/{lib/tools/exec/adapters → plugins}/python/net-shim.d.ts +0 -0
  824. /package/dist-lib/{lib/tools/exec/adapters → plugins}/python/net-shim.js +0 -0
  825. /package/dist-lib/{lib/tools/exec/adapters → plugins}/python/pyodide.d.ts +0 -0
  826. /package/dist-lib/{lib/tools/exec/adapters → plugins}/python/wheels.d.ts +0 -0
  827. /package/dist-lib/{lib/tools/exec/adapters → plugins}/python/worker/active.d.ts +0 -0
  828. /package/dist-lib/{lib/tools/exec/adapters → plugins}/python/worker/protocol.d.ts +0 -0
  829. /package/dist-lib/{lib/tools/exec/adapters → plugins}/python/worker/protocol.js +0 -0
  830. /package/dist-lib/{lib/tools/exec/adapters → plugins}/python/worker/serve.d.ts +0 -0
  831. /package/dist-lib/{lib/capabilities → plugins/speech}/audio-resample.d.ts +0 -0
  832. /package/dist-lib/{lib/capabilities → plugins/speech}/audio-resample.js +0 -0
  833. /package/dist-lib/{lib → plugins/speech}/audio-transcode-bare.d.ts +0 -0
  834. /package/dist-lib/{lib → plugins/speech}/audio-transcode-node.d.ts +0 -0
  835. /package/dist-lib/{lib → plugins/speech}/audio-transcode-node.js +0 -0
  836. /package/dist-lib/{lib/capabilities → plugins/speech}/speech-lexicon.d.ts +0 -0
  837. /package/dist-lib/{lib/capabilities → plugins/speech}/speech-lexicon.js +0 -0
  838. /package/dist-lib/{lib → plugins/speech}/wav-encode.d.ts +0 -0
  839. /package/dist-lib/{lib → plugins/speech}/wav-encode.js +0 -0
  840. /package/dist-lib/{lib/tools/weather-lookup → plugins/weather}/place.d.ts +0 -0
  841. /package/dist-lib/{lib/tools/weather-lookup → plugins/weather}/report.d.ts +0 -0
  842. /package/dist-lib/{lib/tools/weather-lookup → plugins/weather}/report.js +0 -0
  843. /package/dist-lib/{lib → plugins}/web-search/fetch-html.d.ts +0 -0
  844. /package/dist-lib/{lib → plugins}/web-search/format-results.d.ts +0 -0
  845. /package/dist-lib/{lib → plugins}/web-search/format-results.js +0 -0
  846. /package/dist-lib/{lib → plugins}/web-search/merge-results.d.ts +0 -0
  847. /package/dist-lib/{lib → plugins}/web-search/merge-results.js +0 -0
  848. /package/dist-lib/{lib → plugins}/web-search/types.d.ts +0 -0
  849. /package/dist-lib/{lib → plugins}/web-search/url-helpers.d.ts +0 -0
  850. /package/dist-lib/{lib → plugins}/web-search/url-helpers.js +0 -0
  851. /package/dist-lib/{lib → plugins}/web-search/url-normalize.d.ts +0 -0
  852. /package/dist-lib/{lib → plugins}/web-search/url-normalize.js +0 -0
@@ -0,0 +1,213 @@
1
+ // BFCL v4 single-turn categories through Harness.completion, scored by the ported AST checker
2
+ import fs from 'fs'
3
+ import path from 'path'
4
+ import process from 'process'
5
+ import { fileURLToPath } from 'url'
6
+ import { AbortController } from 'bare-abort-controller'
7
+ import type { Harness } from '../../index.ts'
8
+ import type { AgentConfig, LlmGenerationParams } from '../../lib/contract/index.ts'
9
+ import { QWEN_35_4B } from '../../lib/models/model-catalog-constants.ts'
10
+ import { ensureBundledSkillsDir } from '../../lib/tools/skills/bundled-dir.ts'
11
+ import { openBenchHarness } from '../harness.ts'
12
+ import { speedOf, type Speed } from '../speed.ts'
13
+ import { check, type Call, type Verdict } from './checker.ts'
14
+ import {
15
+ BFCL_COMMIT,
16
+ CATEGORIES,
17
+ loadCategory,
18
+ shapeOf,
19
+ type BfclCase,
20
+ type Shape
21
+ } from './data.ts'
22
+ import { observe } from './observe.ts'
23
+ import { caseTools } from './tools.ts'
24
+
25
+ const REPO_ROOT = fileURLToPath(new URL('../..', import.meta.url))
26
+ const REASONING_MODES = ['disabled', 'enabled', 'inherit'] as const
27
+
28
+ const USAGE = `usage: bare bench/bfcl/run.ts [options]
29
+ --categories <a,b> default ${CATEGORIES.join(',')}
30
+ --models <a,b> default ${QWEN_35_4B}
31
+ --limit <n> cases per category, spread evenly across it; default all
32
+ --timeout <ms> per case, default 120000
33
+ --reasoning <mode> disabled|enabled|inherit, default inherit
34
+ --out <dir> default output/bfcl/<stamp>
35
+ `
36
+
37
+ interface CaseRow {
38
+ readonly model: string
39
+ readonly category: string
40
+ readonly id: string
41
+ readonly shape: Shape
42
+ // BFCL's rule: every call in the model's first response
43
+ readonly valid: boolean
44
+ readonly error: string | null
45
+ // the harness asks for one action at a time, so parallel calls are credited across the run's rounds
46
+ readonly wholeValid: boolean
47
+ readonly wholeError: string | null
48
+ readonly calls: Call[]
49
+ readonly firstCallRound: number | null
50
+ readonly reaskParams: LlmGenerationParams | null
51
+ readonly reply: string
52
+ readonly wallMs: number
53
+ readonly speed: Speed | null
54
+ }
55
+
56
+ const argv = process.argv.slice(2)
57
+ if (argv.includes('--help')) {
58
+ console.log(USAGE)
59
+ process.exit(0)
60
+ }
61
+
62
+ const flag = (name: string): string | undefined => {
63
+ const index = argv.indexOf(`--${name}`)
64
+ return index >= 0 ? argv[index + 1] : undefined
65
+ }
66
+
67
+ const categories = flag('categories')?.split(',') ?? CATEGORIES
68
+ const models = flag('models')?.split(',') ?? [QWEN_35_4B]
69
+ const limit = flag('limit') === undefined ? Infinity : Number(flag('limit'))
70
+ const timeoutMs = Number(flag('timeout') ?? 120_000)
71
+ const reasoning = REASONING_MODES.find((mode) => mode === flag('reasoning')) ?? 'inherit'
72
+ const stamp = new Date().toISOString().replace(/[:.]/g, '-')
73
+ const outDir = flag('out') ?? path.join(REPO_ROOT, 'output', 'bfcl', stamp)
74
+ const dataDir = path.join(REPO_ROOT, 'output', 'bfcl-data', BFCL_COMMIT)
75
+
76
+ fs.mkdirSync(outDir, { recursive: true })
77
+ const say = (line: string) => process.stdout.write(`${line}\n`)
78
+ // the SDK and addons print whole prompts through console; keep them out of the progress lines
79
+ const log = fs.openSync(path.join(outDir, 'bench.log'), 'a')
80
+ console.log =
81
+ console.info =
82
+ console.debug =
83
+ console.warn =
84
+ console.error =
85
+ (...args: unknown[]) => fs.writeSync(log, `${args.map(String).join(' ')}\n`)
86
+
87
+ process.env.QVAC_NO_SKILL_BIN_PROBE = '1'
88
+ const loaded = await Promise.all(
89
+ categories.map((category) => loadCategory(category, { dir: dataDir, limit }))
90
+ )
91
+ const cases = loaded.flat()
92
+ const harness = await openBenchHarness({
93
+ root: path.join(REPO_ROOT, 'output', 'bench', 'sdk-root'),
94
+ skillsDir: await ensureBundledSkillsDir()
95
+ })
96
+ say(`${cases.length} BFCL cases × ${models.length} models → ${outDir}`)
97
+
98
+ const rows: CaseRow[] = []
99
+ for (const model of models) {
100
+ for (const bfclCase of cases) {
101
+ const row = await runCase(harness, bfclCase, model)
102
+ rows.push(row)
103
+ fs.appendFileSync(path.join(outDir, 'runs.jsonl'), `${JSON.stringify(row)}\n`)
104
+ }
105
+
106
+ const own = rows.filter((row) => row.model === model)
107
+ say(`${model}: strict ${rate(own, strictly)} · across rounds ${rate(own, wholly)}`)
108
+ }
109
+
110
+ fs.writeFileSync(path.join(outDir, 'summary.md'), summary(rows))
111
+ say(`\n${summary(rows)}\nwritten to ${outDir}`)
112
+ await harness.close()
113
+
114
+ async function runCase(host: Harness, bfclCase: BfclCase, model: string): Promise<CaseRow> {
115
+ const { tools, original } = caseTools(bfclCase.functions)
116
+ const system = bfclCase.turns.filter((turn) => turn.role === 'system')
117
+ // only the case's functions: no product tool, no skill
118
+ const agent: AgentConfig = {
119
+ id: 'bfcl',
120
+ toolsScope: 'selected',
121
+ enabledTools: [
122
+ ...tools.map((tool) => tool.name),
123
+ ...(process.env.QVAC_BENCH_CODE_MODE === '1' ? ['run_code'] : [])
124
+ ],
125
+ skillsScope: 'selected',
126
+ enabledSkills: [],
127
+ bio: system.length ? system.map((turn) => turn.content).join('\n\n') : undefined,
128
+ reasoning
129
+ }
130
+ const controller = new AbortController()
131
+ const deadline = setTimeout(() => controller.abort(new Error('deadline')), timeoutMs)
132
+ const started = Date.now()
133
+ // only parallel work is credited past the first round, so other runs stop when the second begins
134
+ const across = bfclCase.category.includes('parallel')
135
+ const made = await observe(
136
+ host.completion({
137
+ model,
138
+ agent,
139
+ messages: bfclCase.turns.filter((turn) => turn.role !== 'system'),
140
+ tools,
141
+ cacheKey: `bfcl-${stamp}-${model}-${bfclCase.id}`,
142
+ captureInferenceCalls: true,
143
+ signal: controller.signal
144
+ }),
145
+ {
146
+ original,
147
+ stop: () => controller.abort(new Error('scored')),
148
+ // a parallel run is done once it has made every call BFCL expects; the rest after one round
149
+ enough: across ? (bfclCase.answers?.length ?? 0) : null
150
+ }
151
+ )
152
+ clearTimeout(deadline)
153
+
154
+ const subject = {
155
+ category: bfclCase.category,
156
+ docs: bfclCase.functions,
157
+ answers: bfclCase.answers
158
+ }
159
+ const score = (calls: Call[]): Verdict =>
160
+ made.error && !calls.length ? { valid: false, error: made.error } : check(subject, calls)
161
+ const strict = score(made.first)
162
+ // only parallel work can span rounds; a later call elsewhere is the model reacting to a stub result
163
+ const whole = across ? score(made.all) : strict
164
+
165
+ return {
166
+ model,
167
+ category: bfclCase.category,
168
+ id: bfclCase.id,
169
+ shape: shapeOf(bfclCase.functions),
170
+ valid: strict.valid,
171
+ error: strict.error,
172
+ wholeValid: whole.valid,
173
+ wholeError: whole.error,
174
+ calls: made.all,
175
+ firstCallRound: made.firstCallRound,
176
+ reaskParams: made.reaskParams,
177
+ reply: made.reply.slice(0, 500),
178
+ wallMs: Date.now() - started,
179
+ speed: speedOf(made.metrics)
180
+ }
181
+ }
182
+
183
+ function strictly(row: CaseRow): boolean {
184
+ return row.valid
185
+ }
186
+
187
+ function wholly(row: CaseRow): boolean {
188
+ return row.wholeValid
189
+ }
190
+
191
+ function rate(rows: readonly CaseRow[], passed: (row: CaseRow) => boolean): string {
192
+ const count = rows.filter(passed).length
193
+
194
+ return `${count}/${rows.length} (${Math.round((count / Math.max(1, rows.length)) * 100)}%)`
195
+ }
196
+
197
+ function summary(all: readonly CaseRow[]): string {
198
+ const names = [...new Set(all.map((row) => row.model))]
199
+ const header = names.map((model) => `${model} strict | ${model} across rounds`).join(' | ')
200
+ const lines = [
201
+ `| category | ${header} |`,
202
+ `| --- | ${names.map(() => '--- | ---').join(' | ')} |`
203
+ ]
204
+ for (const category of categories) {
205
+ const cells = names.map((model) => {
206
+ const own = all.filter((row) => row.model === model && row.category === category)
207
+ return `${rate(own, strictly)} | ${rate(own, wholly)}`
208
+ })
209
+ lines.push(`| ${category} | ${cells.join(' | ')} |`)
210
+ }
211
+
212
+ return lines.join('\n') + '\n'
213
+ }
@@ -0,0 +1,72 @@
1
+ import type {
2
+ ToolDefinition,
3
+ ToolParameterSchema,
4
+ ToolParameterType,
5
+ ToolParameters
6
+ } from '../../lib/contract/index.ts'
7
+ import type { FunctionDoc, ParamDoc } from './checker.ts'
8
+
9
+ const TYPES: Record<string, ToolParameterType> = {
10
+ dict: 'object',
11
+ float: 'number',
12
+ tuple: 'array',
13
+ any: 'string',
14
+ integer: 'integer',
15
+ string: 'string',
16
+ boolean: 'boolean',
17
+ array: 'array'
18
+ }
19
+
20
+ export interface CaseTools {
21
+ readonly tools: ToolDefinition[]
22
+ // the name a model saw back to BFCL's, which may carry dots
23
+ original(name: string): string
24
+ }
25
+
26
+ // dots become underscores as BFCL's own function-calling handlers rename them for providers
27
+ export function caseTools(docs: readonly FunctionDoc[]): CaseTools {
28
+ const names = new Map(docs.map((doc) => [toolName(doc.name), doc.name]))
29
+ return {
30
+ tools: docs.map((doc): ToolDefinition => ({
31
+ name: toolName(doc.name),
32
+ toolset: null,
33
+ description: doc.description,
34
+ parameters: parameters(doc.parameters),
35
+ // the answer is the call itself; an intent field would be a parameter BFCL never asked for
36
+ autoApprove: true,
37
+ effect: () => 'read',
38
+ execute: () => Promise.resolve({ ok: true })
39
+ })),
40
+ original: (name) => names.get(name) ?? name
41
+ }
42
+ }
43
+
44
+ function toolName(name: string): string {
45
+ return name.replace(/[^\w-]/g, '_')
46
+ }
47
+
48
+ function parameters(doc: FunctionDoc['parameters']): ToolParameters {
49
+ return {
50
+ type: 'object',
51
+ properties: Object.fromEntries(
52
+ Object.entries(doc.properties).map(([key, value]) => [key, schema(value)])
53
+ ),
54
+ required: [...(doc.required ?? [])]
55
+ }
56
+ }
57
+
58
+ function schema(doc: ParamDoc): ToolParameterSchema {
59
+ return {
60
+ type: TYPES[doc.type] ?? 'string',
61
+ description: doc.description,
62
+ enum: doc.enum?.map(String),
63
+ items: doc.items ? schema(doc.items) : undefined,
64
+ properties: doc.properties
65
+ ? Object.fromEntries(
66
+ Object.entries(doc.properties).map(([key, value]) => [key, schema(value)])
67
+ )
68
+ : undefined,
69
+ required: doc.required ? [...doc.required] : undefined,
70
+ default: doc.default
71
+ }
72
+ }
@@ -0,0 +1,392 @@
1
+ import { AbortController } from 'bare-abort-controller'
2
+ import type { CompletionContext } from '../../index.ts'
3
+ import type {
4
+ AgentConfig,
5
+ CompletionEvent,
6
+ Message,
7
+ MetricsEvent,
8
+ ToolDefinition,
9
+ ToolParameterSchema,
10
+ ToolParameters
11
+ } from '../../lib/contract/index.ts'
12
+ import { errorMessage } from '../../lib/guards.ts'
13
+ import { Transcript } from './transcript.ts'
14
+
15
+ // the native addon prints prompts to the same stdout, so a frame is a line that starts with this
16
+ export const FRAME = '\u001eqvac '
17
+ // a round that outlives this is a runaway generation; the benchmark sees it fail, as a user's cancel
18
+ export const ROUND_DEADLINE_MS = 180_000
19
+
20
+ // a tool the benchmark owns: the harness decides to call it, the benchmark's environment runs it
21
+ export interface ToolSpec {
22
+ readonly name: string
23
+ readonly description: string
24
+ readonly parameters: JsonParameters
25
+ // the benchmark's own environment changes on this call, so the run asks before it goes out
26
+ readonly write?: boolean | undefined
27
+ }
28
+
29
+ interface JsonSchema extends Omit<ToolParameterSchema, 'type' | 'items' | 'properties'> {
30
+ readonly type?: ToolParameterSchema['type']
31
+ readonly $ref?: string
32
+ readonly anyOf?: readonly JsonSchema[]
33
+ readonly items?: JsonSchema
34
+ readonly properties?: Readonly<Record<string, JsonSchema>>
35
+ }
36
+
37
+ export interface JsonParameters extends Omit<ToolParameters, 'properties'> {
38
+ readonly $defs?: Readonly<Record<string, JsonSchema>>
39
+ readonly properties: Readonly<Record<string, JsonSchema>>
40
+ }
41
+
42
+ export interface RunFrame {
43
+ readonly type: 'run'
44
+ readonly id: string
45
+ readonly model: string
46
+ readonly system?: string | undefined
47
+ readonly messages: Message[]
48
+ readonly tools: ToolSpec[]
49
+ // epoch ms the run should take as now, for a benchmark whose world is not today
50
+ readonly now?: number | undefined
51
+ // the run's round limit; absent, the harness default
52
+ readonly maxToolRounds?: number | undefined
53
+ // one key per conversation, as a host sends it, so a later turn reuses the earlier prefill
54
+ readonly cacheKey?: string | undefined
55
+ }
56
+
57
+ export interface ResultFrame {
58
+ readonly type: 'result'
59
+ readonly callId: string
60
+ readonly result: unknown
61
+ }
62
+
63
+ // a benchmark that ends a task mid-turn abandons the run; this ends it and its waiting calls
64
+ export interface CancelFrame {
65
+ readonly type: 'cancel'
66
+ readonly id: string
67
+ }
68
+
69
+ // the user's answer to an approve frame; anything but approved runs nothing
70
+ export interface DecisionFrame {
71
+ readonly type: 'decision'
72
+ readonly callId: string
73
+ readonly approved: boolean
74
+ }
75
+
76
+ // a conversation is over, so its cached prefill can go
77
+ export interface ForgetFrame {
78
+ readonly type: 'forget'
79
+ readonly cacheKey: string
80
+ }
81
+
82
+ export type Inbound = RunFrame | ResultFrame | CancelFrame | DecisionFrame | ForgetFrame
83
+
84
+ interface ActiveRun {
85
+ readonly controller: AbortController
86
+ readonly calls: Set<string>
87
+ readonly approvals: Set<string>
88
+ readonly deadline: Restartable
89
+ }
90
+
91
+ export interface CallFrame {
92
+ readonly type: 'call'
93
+ readonly id: string
94
+ readonly callId: string
95
+ readonly name: string
96
+ readonly args: Record<string, unknown>
97
+ }
98
+
99
+ // a write waits on the benchmark's user, who sees the call and answers with a decision frame
100
+ export interface ApproveFrame {
101
+ readonly type: 'approve'
102
+ readonly id: string
103
+ readonly callId: string
104
+ readonly name: string
105
+ readonly args: Record<string, unknown>
106
+ }
107
+
108
+ export interface DoneFrame {
109
+ readonly type: 'done'
110
+ readonly id: string
111
+ readonly reply: string
112
+ readonly calls: number
113
+ readonly error: string | null
114
+ // the run's speed, also when it was cancelled; null when no round finished
115
+ readonly metrics: MetricsEvent | null
116
+ // the run's turns as a host stores them, to carry the conversation into the next run
117
+ readonly history: Message[]
118
+ }
119
+
120
+ // sent once the model runtime is open, so a client never writes into a process still booting
121
+ export interface ReadyFrame {
122
+ readonly type: 'ready'
123
+ }
124
+
125
+ export type Outbound = ReadyFrame | CallFrame | ApproveFrame | DoneFrame
126
+
127
+ export type Complete = (context: CompletionContext) => AsyncIterable<CompletionEvent>
128
+
129
+ export interface BridgeOptions {
130
+ readonly roundDeadlineMs?: number
131
+ // offer the agent update_plan, to score a run with the plan against one without
132
+ readonly plan?: boolean
133
+ // drops a finished conversation's cached prefill, on a forget frame
134
+ readonly forget?: (cacheKey: string) => Promise<unknown>
135
+ }
136
+
137
+ export class Bridge {
138
+ private readonly _complete: Complete
139
+ private readonly _send: (frame: Outbound) => void
140
+ private readonly _pending = new Map<string, (result: unknown) => void>()
141
+ private readonly _approvals = new Map<string, (approved: boolean) => void>()
142
+ private readonly _runs = new Map<string, ActiveRun>()
143
+ private readonly _roundDeadlineMs: number
144
+ private readonly _plan: boolean
145
+ private readonly _forget: (cacheKey: string) => Promise<unknown>
146
+ private _next = 0
147
+
148
+ constructor(complete: Complete, send: (frame: Outbound) => void, opts: BridgeOptions = {}) {
149
+ this._complete = complete
150
+ this._send = send
151
+ this._roundDeadlineMs = opts.roundDeadlineMs ?? ROUND_DEADLINE_MS
152
+ this._plan = opts.plan === true
153
+ this._forget = opts.forget ?? (() => Promise.resolve())
154
+ }
155
+
156
+ receive(frame: Inbound): Promise<void> {
157
+ if (frame.type === 'result') {
158
+ this._settle(frame.callId, frame.result)
159
+ return Promise.resolve()
160
+ }
161
+
162
+ if (frame.type === 'decision') {
163
+ this._decide(frame)
164
+ return Promise.resolve()
165
+ }
166
+
167
+ if (frame.type === 'cancel') {
168
+ this._cancel(frame.id)
169
+ return Promise.resolve()
170
+ }
171
+
172
+ if (frame.type === 'forget') {
173
+ return this._forget(frame.cacheKey).then(() => {})
174
+ }
175
+
176
+ return this._run(frame)
177
+ }
178
+
179
+ private async _run(frame: RunFrame): Promise<void> {
180
+ const run: ActiveRun = {
181
+ controller: new AbortController(),
182
+ calls: new Set<string>(),
183
+ approvals: new Set<string>(),
184
+ // a long turn of many short rounds is legitimate, so the clock restarts at each round
185
+ deadline: restartable(() => this._cancel(frame.id), this._roundDeadlineMs)
186
+ }
187
+ this._runs.set(frame.id, run)
188
+ const tools = frame.tools.map((spec) => this._remote(run, frame.id, spec))
189
+ // only the benchmark's tools: no product tool, no skill
190
+ const agent: AgentConfig = {
191
+ id: 'bridge',
192
+ toolsScope: 'selected',
193
+ enabledTools: tools.map((tool) => tool.name),
194
+ skillsScope: 'selected',
195
+ enabledSkills: [],
196
+ bio: frame.system,
197
+ plan: this._plan
198
+ }
199
+ let reply = ''
200
+ let calls = 0
201
+ let error: string | null = null
202
+ let metrics: MetricsEvent | null = null
203
+ const history = new Transcript()
204
+ const { deadline } = run
205
+ const now = frame.now
206
+ try {
207
+ const events = this._complete({
208
+ model: frame.model,
209
+ agent,
210
+ messages: frame.messages,
211
+ tools,
212
+ now: now === undefined ? undefined : () => now,
213
+ maxToolRounds: frame.maxToolRounds,
214
+ cacheKey: frame.cacheKey,
215
+ signal: run.controller.signal,
216
+ // the wait for the user is not the model's time, so the round clock stops until it answers
217
+ approve: (call) =>
218
+ new Promise<boolean>((resolve) => {
219
+ const callId = `${frame.id}:${this._next++}`
220
+ deadline.clear()
221
+ run.approvals.add(callId)
222
+ this._approvals.set(callId, (approved) => {
223
+ run.approvals.delete(callId)
224
+ deadline.restart()
225
+ resolve(approved)
226
+ })
227
+ this._send({
228
+ type: 'approve',
229
+ id: frame.id,
230
+ callId,
231
+ name: call.name,
232
+ args: call.arguments
233
+ })
234
+ })
235
+ })
236
+ for await (const event of events) {
237
+ history.add(event)
238
+ // the answer is what follows the last tool result; content before it is narration
239
+ if (event.type === 'tool-result' || event.type === 'round-reset') {
240
+ reply = ''
241
+ deadline.restart()
242
+ } else if (event.type === 'content') {
243
+ reply += event.text
244
+ } else if (event.type === 'tool-call') {
245
+ calls++
246
+ } else if (event.type === 'error') {
247
+ error = event.message
248
+ } else if (event.type === 'metrics') {
249
+ metrics = event
250
+ }
251
+ }
252
+ } catch (err) {
253
+ error = errorMessage(err)
254
+ } finally {
255
+ deadline.clear()
256
+ this._runs.delete(frame.id)
257
+ }
258
+
259
+ this._send({
260
+ type: 'done',
261
+ id: frame.id,
262
+ reply,
263
+ calls,
264
+ error,
265
+ metrics,
266
+ history: history.turns()
267
+ })
268
+ }
269
+
270
+ private _settle(callId: string, result: unknown): void {
271
+ this._pending.get(callId)?.(result)
272
+ this._pending.delete(callId)
273
+ }
274
+
275
+ private _decide({ callId, approved }: Omit<DecisionFrame, 'type'>): void {
276
+ this._approvals.get(callId)?.(approved)
277
+ this._approvals.delete(callId)
278
+ }
279
+
280
+ private _cancel(id: string): void {
281
+ const run = this._runs.get(id)
282
+ if (!run) {
283
+ return
284
+ }
285
+
286
+ run.controller.abort(new Error('cancelled'))
287
+ for (const callId of run.calls) {
288
+ this._settle(callId, { error: 'cancelled' })
289
+ }
290
+
291
+ for (const callId of run.approvals) {
292
+ this._decide({ callId, approved: false })
293
+ }
294
+ }
295
+
296
+ private _remote(run: ActiveRun, id: string, spec: ToolSpec): ToolDefinition {
297
+ return {
298
+ name: spec.name,
299
+ toolset: null,
300
+ description: spec.description,
301
+ parameters: typedParameters(spec.parameters),
302
+ // the benchmark owns the sandbox; only a write it names waits on its user
303
+ autoApprove: spec.write !== true,
304
+ effect: () => (spec.write === true ? 'write' : 'read'),
305
+ // the benchmark's environment runs the call, not the model, so the round clock waits for it
306
+ execute: (args) =>
307
+ new Promise((resolve) => {
308
+ const callId = `${id}:${this._next++}`
309
+ run.deadline.clear()
310
+ run.calls.add(callId)
311
+ this._pending.set(callId, (result) => {
312
+ run.calls.delete(callId)
313
+ // a result that comes back after its run ended, or was cancelled, starts no clock
314
+ if (
315
+ run.calls.size === 0 &&
316
+ this._runs.get(id) === run &&
317
+ !run.controller.signal.aborted
318
+ ) {
319
+ run.deadline.restart()
320
+ }
321
+
322
+ resolve(result)
323
+ })
324
+ this._send({ type: 'call', id, callId, name: spec.name, args })
325
+ })
326
+ }
327
+ }
328
+ }
329
+
330
+ // τ² sends pydantic schemas; inline $ref and anyOf so the harness can describe nested fields
331
+ export function typedParameters({
332
+ $defs: defs = {},
333
+ properties,
334
+ ...rest
335
+ }: JsonParameters): ToolParameters {
336
+ return { ...rest, properties: typedProperties(properties, defs) }
337
+ }
338
+
339
+ // A node with no type (pydantic's Any, or an anyOf of only null) is dropped: the harness needs one.
340
+ function typed(
341
+ schema: JsonSchema,
342
+ defs: Readonly<Record<string, JsonSchema>>
343
+ ): ToolParameterSchema | undefined {
344
+ const { $ref: ref, anyOf, items, properties, ...rest } = schema
345
+ const base = ref === undefined ? undefined : defs[ref.slice(ref.lastIndexOf('/') + 1)]
346
+ const branch = anyOf?.find((option) => option.type !== 'null')
347
+ if (base ?? branch) {
348
+ return typed({ ...(base ?? branch), ...rest }, defs)
349
+ }
350
+
351
+ if (rest.type === undefined) {
352
+ return undefined
353
+ }
354
+
355
+ return {
356
+ ...rest,
357
+ type: rest.type,
358
+ items: items && typed(items, defs),
359
+ properties: properties && typedProperties(properties, defs)
360
+ }
361
+ }
362
+
363
+ function typedProperties(
364
+ properties: Readonly<Record<string, JsonSchema>>,
365
+ defs: Readonly<Record<string, JsonSchema>>
366
+ ): Record<string, ToolParameterSchema> {
367
+ return Object.fromEntries(
368
+ Object.entries(properties).flatMap(([key, value]) => {
369
+ const schema = typed(value, defs)
370
+ return schema ? [[key, schema]] : []
371
+ })
372
+ )
373
+ }
374
+
375
+ interface Restartable {
376
+ restart(): void
377
+ clear(): void
378
+ }
379
+
380
+ function restartable(fire: () => void, ms: number): Restartable {
381
+ let timer = setTimeout(fire, ms)
382
+
383
+ return {
384
+ restart() {
385
+ clearTimeout(timer)
386
+ timer = setTimeout(fire, ms)
387
+ },
388
+ clear() {
389
+ clearTimeout(timer)
390
+ }
391
+ }
392
+ }