@mastra/core 1.4.0 → 1.5.0-alpha.0

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 (367) hide show
  1. package/CHANGELOG.md +361 -0
  2. package/dist/agent/agent.d.ts +3 -2
  3. package/dist/agent/agent.d.ts.map +1 -1
  4. package/dist/agent/index.cjs +13 -13
  5. package/dist/agent/index.js +2 -2
  6. package/dist/agent/message-list/conversion/output-converter.d.ts.map +1 -1
  7. package/dist/agent/message-list/index.cjs +18 -18
  8. package/dist/agent/message-list/index.js +1 -1
  9. package/dist/agent/message-list/merge/MessageMerger.d.ts.map +1 -1
  10. package/dist/agent/message-list/message-list.d.ts.map +1 -1
  11. package/dist/agent/types.d.ts +2 -2
  12. package/dist/agent/types.d.ts.map +1 -1
  13. package/dist/agent/workflows/prepare-stream/index.d.ts +1 -0
  14. package/dist/agent/workflows/prepare-stream/index.d.ts.map +1 -1
  15. package/dist/agent/workflows/prepare-stream/prepare-tools-step.d.ts +1 -0
  16. package/dist/agent/workflows/prepare-stream/prepare-tools-step.d.ts.map +1 -1
  17. package/dist/agent/workflows/prepare-stream/schema.d.ts +8 -0
  18. package/dist/agent/workflows/prepare-stream/schema.d.ts.map +1 -1
  19. package/dist/{chunk-ZATLLPIH.js → chunk-2ES3QPBY.js} +6 -2
  20. package/dist/chunk-2ES3QPBY.js.map +1 -0
  21. package/dist/{chunk-Y3TQ52UE.js → chunk-33TGTTTS.js} +4 -3
  22. package/dist/chunk-33TGTTTS.js.map +1 -0
  23. package/dist/{chunk-NJ7TL3LQ.js → chunk-3ONVWBEN.js} +26 -15
  24. package/dist/chunk-3ONVWBEN.js.map +1 -0
  25. package/dist/{chunk-V2MLGA7T.js → chunk-3QSUUZRL.js} +3 -3
  26. package/dist/{chunk-V2MLGA7T.js.map → chunk-3QSUUZRL.js.map} +1 -1
  27. package/dist/{chunk-64WGYTQK.cjs → chunk-4DTCLAUK.cjs} +55 -55
  28. package/dist/{chunk-64WGYTQK.cjs.map → chunk-4DTCLAUK.cjs.map} +1 -1
  29. package/dist/{chunk-3JVFFAJX.cjs → chunk-5727K7HU.cjs} +27 -16
  30. package/dist/chunk-5727K7HU.cjs.map +1 -0
  31. package/dist/{chunk-RZ4CIIZR.js → chunk-6DUTLERJ.js} +4 -4
  32. package/dist/{chunk-RZ4CIIZR.js.map → chunk-6DUTLERJ.js.map} +1 -1
  33. package/dist/{chunk-XDD5V446.cjs → chunk-6XJ47RK5.cjs} +6 -2
  34. package/dist/{chunk-XDD5V446.cjs.map → chunk-6XJ47RK5.cjs.map} +1 -1
  35. package/dist/{chunk-NKYWDNCI.cjs → chunk-AX6A43DF.cjs} +7 -7
  36. package/dist/{chunk-NKYWDNCI.cjs.map → chunk-AX6A43DF.cjs.map} +1 -1
  37. package/dist/{chunk-RS6CZXGA.js → chunk-BQHWJLXU.js} +15 -4
  38. package/dist/chunk-BQHWJLXU.js.map +1 -0
  39. package/dist/{chunk-7UWHFWST.cjs → chunk-EAZ6YDCQ.cjs} +15 -3
  40. package/dist/chunk-EAZ6YDCQ.cjs.map +1 -0
  41. package/dist/{chunk-4EHGOATH.js → chunk-FZ5DRHKE.js} +1337 -547
  42. package/dist/chunk-FZ5DRHKE.js.map +1 -0
  43. package/dist/{chunk-4TQ4EBYX.js → chunk-HE6PABEF.js} +9 -9
  44. package/dist/chunk-HE6PABEF.js.map +1 -0
  45. package/dist/{chunk-VD5YA6RH.cjs → chunk-IGJA76SO.cjs} +18 -18
  46. package/dist/{chunk-VD5YA6RH.cjs.map → chunk-IGJA76SO.cjs.map} +1 -1
  47. package/dist/{chunk-FLPEGTEK.js → chunk-JCCFSKYW.js} +5 -5
  48. package/dist/{chunk-FLPEGTEK.js.map → chunk-JCCFSKYW.js.map} +1 -1
  49. package/dist/{chunk-BP7VYTOP.cjs → chunk-JZ6TH4HQ.cjs} +954 -401
  50. package/dist/chunk-JZ6TH4HQ.cjs.map +1 -0
  51. package/dist/{chunk-SU5APAM6.cjs → chunk-KNXZ7KYL.cjs} +94 -6
  52. package/dist/chunk-KNXZ7KYL.cjs.map +1 -0
  53. package/dist/{chunk-CYUP7QWT.cjs → chunk-KRAGJ433.cjs} +4 -3
  54. package/dist/chunk-KRAGJ433.cjs.map +1 -0
  55. package/dist/{chunk-QTTWRCB5.js → chunk-LDU26AM4.js} +5 -5
  56. package/dist/{chunk-QTTWRCB5.js.map → chunk-LDU26AM4.js.map} +1 -1
  57. package/dist/{chunk-DBSVT6AR.cjs → chunk-MEGHRRDA.cjs} +9 -9
  58. package/dist/{chunk-DBSVT6AR.cjs.map → chunk-MEGHRRDA.cjs.map} +1 -1
  59. package/dist/{chunk-VTE2OBKS.cjs → chunk-N5AAYWLX.cjs} +3 -2
  60. package/dist/{chunk-VTE2OBKS.cjs.map → chunk-N5AAYWLX.cjs.map} +1 -1
  61. package/dist/{chunk-AXHBJ4GX.js → chunk-NN26FSKL.js} +10 -8
  62. package/dist/chunk-NN26FSKL.js.map +1 -0
  63. package/dist/{chunk-AY6DBRS3.js → chunk-OHLVZVIK.js} +36 -2
  64. package/dist/chunk-OHLVZVIK.js.map +1 -0
  65. package/dist/{chunk-5Q5Y34SS.js → chunk-PC35RIU7.js} +4 -4
  66. package/dist/{chunk-5Q5Y34SS.js.map → chunk-PC35RIU7.js.map} +1 -1
  67. package/dist/{chunk-HYRYTTMT.cjs → chunk-PHHJLGZU.cjs} +9 -9
  68. package/dist/{chunk-HYRYTTMT.cjs.map → chunk-PHHJLGZU.cjs.map} +1 -1
  69. package/dist/{chunk-65PHUUMF.cjs → chunk-QDH6MVJ7.cjs} +24 -22
  70. package/dist/chunk-QDH6MVJ7.cjs.map +1 -0
  71. package/dist/{chunk-4IJ4UDZX.cjs → chunk-QRO7UZRU.cjs} +399 -223
  72. package/dist/chunk-QRO7UZRU.cjs.map +1 -0
  73. package/dist/{chunk-4XSAZPPS.js → chunk-RGH2R2ZZ.js} +313 -137
  74. package/dist/chunk-RGH2R2ZZ.js.map +1 -0
  75. package/dist/{chunk-4KFEMXTV.cjs → chunk-S4VVZI4E.cjs} +1361 -546
  76. package/dist/chunk-S4VVZI4E.cjs.map +1 -0
  77. package/dist/{chunk-YNNJLLFN.cjs → chunk-SPJDRWRD.cjs} +661 -207
  78. package/dist/chunk-SPJDRWRD.cjs.map +1 -0
  79. package/dist/{chunk-U2HKJZCI.js → chunk-UJRFYJMW.js} +6 -6
  80. package/dist/{chunk-U2HKJZCI.js.map → chunk-UJRFYJMW.js.map} +1 -1
  81. package/dist/{chunk-PS5ONCXY.js → chunk-UZFGMMKU.js} +82 -4
  82. package/dist/chunk-UZFGMMKU.js.map +1 -0
  83. package/dist/{chunk-NZG2JAKS.cjs → chunk-WDFDBGUQ.cjs} +19 -19
  84. package/dist/chunk-WDFDBGUQ.cjs.map +1 -0
  85. package/dist/{chunk-3X3CZUXI.js → chunk-Y3CHR5TI.js} +660 -206
  86. package/dist/chunk-Y3CHR5TI.js.map +1 -0
  87. package/dist/{chunk-7NKUSQEV.js → chunk-YIN5F7VO.js} +936 -389
  88. package/dist/chunk-YIN5F7VO.js.map +1 -0
  89. package/dist/{chunk-CZ4NQANZ.cjs → chunk-YW54RH77.cjs} +36 -2
  90. package/dist/chunk-YW54RH77.cjs.map +1 -0
  91. package/dist/datasets/experiment/executor.d.ts.map +1 -1
  92. package/dist/datasets/index.cjs +17 -17
  93. package/dist/datasets/index.js +2 -2
  94. package/dist/docs/SKILL.md +27 -1
  95. package/dist/docs/assets/SOURCE_MAP.json +463 -389
  96. package/dist/docs/references/docs-agents-processors.md +52 -0
  97. package/dist/docs/references/docs-observability-datasets-overview.md +188 -0
  98. package/dist/docs/references/docs-observability-datasets-running-experiments.md +266 -0
  99. package/dist/docs/references/docs-observability-tracing-exporters-cloud.md +7 -4
  100. package/dist/docs/references/reference-agents-generate.md +1 -1
  101. package/dist/docs/references/reference-configuration.md +3 -4
  102. package/dist/docs/references/reference-datasets-addItem.md +35 -0
  103. package/dist/docs/references/reference-datasets-addItems.md +33 -0
  104. package/dist/docs/references/reference-datasets-compareExperiments.md +48 -0
  105. package/dist/docs/references/reference-datasets-create.md +49 -0
  106. package/dist/docs/references/reference-datasets-dataset.md +78 -0
  107. package/dist/docs/references/reference-datasets-datasets-manager.md +84 -0
  108. package/dist/docs/references/reference-datasets-delete.md +23 -0
  109. package/dist/docs/references/reference-datasets-deleteExperiment.md +25 -0
  110. package/dist/docs/references/reference-datasets-deleteItem.md +25 -0
  111. package/dist/docs/references/reference-datasets-deleteItems.md +27 -0
  112. package/dist/docs/references/reference-datasets-get.md +29 -0
  113. package/dist/docs/references/reference-datasets-getDetails.md +45 -0
  114. package/dist/docs/references/reference-datasets-getExperiment.md +28 -0
  115. package/dist/docs/references/reference-datasets-getItem.md +31 -0
  116. package/dist/docs/references/reference-datasets-getItemHistory.md +29 -0
  117. package/dist/docs/references/reference-datasets-list.md +29 -0
  118. package/dist/docs/references/reference-datasets-listExperimentResults.md +37 -0
  119. package/dist/docs/references/reference-datasets-listExperiments.md +31 -0
  120. package/dist/docs/references/reference-datasets-listItems.md +44 -0
  121. package/dist/docs/references/reference-datasets-listVersions.md +31 -0
  122. package/dist/docs/references/reference-datasets-startExperiment.md +60 -0
  123. package/dist/docs/references/reference-datasets-startExperimentAsync.md +41 -0
  124. package/dist/docs/references/reference-datasets-update.md +46 -0
  125. package/dist/docs/references/reference-datasets-updateItem.md +36 -0
  126. package/dist/docs/references/reference-memory-observational-memory.md +36 -0
  127. package/dist/docs/references/reference-processors-processor-interface.md +4 -0
  128. package/dist/docs/references/reference-tools-create-tool.md +1 -1
  129. package/dist/docs/references/reference.md +24 -0
  130. package/dist/editor/index.d.ts +1 -1
  131. package/dist/editor/index.d.ts.map +1 -1
  132. package/dist/editor/types.d.ts +108 -2
  133. package/dist/editor/types.d.ts.map +1 -1
  134. package/dist/evals/index.cjs +20 -20
  135. package/dist/evals/index.js +3 -3
  136. package/dist/evals/scoreTraces/index.cjs +5 -5
  137. package/dist/evals/scoreTraces/index.js +2 -2
  138. package/dist/harness/harness.d.ts +281 -0
  139. package/dist/harness/harness.d.ts.map +1 -0
  140. package/dist/harness/index.cjs +1728 -0
  141. package/dist/harness/index.cjs.map +1 -0
  142. package/dist/harness/index.d.ts +4 -0
  143. package/dist/harness/index.d.ts.map +1 -0
  144. package/dist/harness/index.js +1723 -0
  145. package/dist/harness/index.js.map +1 -0
  146. package/dist/harness/tools.d.ts +65 -0
  147. package/dist/harness/tools.d.ts.map +1 -0
  148. package/dist/harness/types.d.ts +561 -0
  149. package/dist/harness/types.d.ts.map +1 -0
  150. package/dist/index.cjs +2 -2
  151. package/dist/index.js +1 -1
  152. package/dist/integration/index.cjs +2 -2
  153. package/dist/integration/index.js +1 -1
  154. package/dist/llm/index.cjs +20 -20
  155. package/dist/llm/index.js +3 -3
  156. package/dist/llm/model/gateways/constants.d.ts.map +1 -1
  157. package/dist/llm/model/gateways/models-dev.d.ts +2 -3
  158. package/dist/llm/model/gateways/models-dev.d.ts.map +1 -1
  159. package/dist/llm/model/provider-types.generated.d.ts +312 -93
  160. package/dist/loop/index.cjs +12 -12
  161. package/dist/loop/index.js +1 -1
  162. package/dist/loop/network/index.d.ts.map +1 -1
  163. package/dist/loop/test-utils/options.d.ts.map +1 -1
  164. package/dist/loop/test-utils/tools.d.ts.map +1 -1
  165. package/dist/loop/workflows/agentic-execution/llm-mapping-step.d.ts.map +1 -1
  166. package/dist/loop/workflows/agentic-execution/tool-call-step.d.ts.map +1 -1
  167. package/dist/loop/workflows/stream.d.ts.map +1 -1
  168. package/dist/mastra/index.cjs +2 -2
  169. package/dist/mastra/index.d.ts +3 -3
  170. package/dist/mastra/index.d.ts.map +1 -1
  171. package/dist/mastra/index.js +1 -1
  172. package/dist/memory/index.cjs +14 -14
  173. package/dist/memory/index.js +1 -1
  174. package/dist/memory/memory.d.ts +10 -0
  175. package/dist/memory/memory.d.ts.map +1 -1
  176. package/dist/memory/types.d.ts +24 -0
  177. package/dist/memory/types.d.ts.map +1 -1
  178. package/dist/models-dev-EMBEDT5H.cjs +12 -0
  179. package/dist/{models-dev-PPIXUUCU.cjs.map → models-dev-EMBEDT5H.cjs.map} +1 -1
  180. package/dist/models-dev-TVUV7YBG.js +3 -0
  181. package/dist/{models-dev-FQVUTQ7L.js.map → models-dev-TVUV7YBG.js.map} +1 -1
  182. package/dist/observability/index.cjs +11 -11
  183. package/dist/observability/index.js +1 -1
  184. package/dist/observability/utils.d.ts.map +1 -1
  185. package/dist/processors/index.cjs +41 -41
  186. package/dist/processors/index.js +1 -1
  187. package/dist/processors/processors/skills.d.ts +5 -0
  188. package/dist/processors/processors/skills.d.ts.map +1 -1
  189. package/dist/processors/runner.d.ts +2 -2
  190. package/dist/processors/runner.d.ts.map +1 -1
  191. package/dist/processors/step-schema.d.ts +218 -49453
  192. package/dist/processors/step-schema.d.ts.map +1 -1
  193. package/dist/provider-registry-5VCDP7KK.js +3 -0
  194. package/dist/{provider-registry-QUNT7S55.js.map → provider-registry-5VCDP7KK.js.map} +1 -1
  195. package/dist/provider-registry-LIAW3BTQ.cjs +40 -0
  196. package/dist/{provider-registry-6LZAGQET.cjs.map → provider-registry-LIAW3BTQ.cjs.map} +1 -1
  197. package/dist/provider-registry.json +657 -203
  198. package/dist/relevance/index.cjs +3 -3
  199. package/dist/relevance/index.js +1 -1
  200. package/dist/server/composite-auth.d.ts.map +1 -1
  201. package/dist/server/index.cjs +6 -1
  202. package/dist/server/index.cjs.map +1 -1
  203. package/dist/server/index.js +6 -1
  204. package/dist/server/index.js.map +1 -1
  205. package/dist/storage/base.d.ts +4 -1
  206. package/dist/storage/base.d.ts.map +1 -1
  207. package/dist/storage/constants.cjs +82 -42
  208. package/dist/storage/constants.d.ts +11 -1
  209. package/dist/storage/constants.d.ts.map +1 -1
  210. package/dist/storage/constants.js +1 -1
  211. package/dist/storage/domains/agents/inmemory.d.ts.map +1 -1
  212. package/dist/storage/domains/blobs/base.d.ts +47 -0
  213. package/dist/storage/domains/blobs/base.d.ts.map +1 -0
  214. package/dist/storage/domains/blobs/index.d.ts +3 -0
  215. package/dist/storage/domains/blobs/index.d.ts.map +1 -0
  216. package/dist/storage/domains/blobs/inmemory.d.ts +17 -0
  217. package/dist/storage/domains/blobs/inmemory.d.ts.map +1 -0
  218. package/dist/storage/domains/datasets/inmemory.d.ts.map +1 -1
  219. package/dist/storage/domains/index.d.ts +3 -0
  220. package/dist/storage/domains/index.d.ts.map +1 -1
  221. package/dist/storage/domains/inmemory-db.d.ts +7 -1
  222. package/dist/storage/domains/inmemory-db.d.ts.map +1 -1
  223. package/dist/storage/domains/mcp-clients/inmemory.d.ts.map +1 -1
  224. package/dist/storage/domains/operations/inmemory.d.ts.map +1 -1
  225. package/dist/storage/domains/prompt-blocks/inmemory.d.ts.map +1 -1
  226. package/dist/storage/domains/scorer-definitions/inmemory.d.ts.map +1 -1
  227. package/dist/storage/domains/skills/base.d.ts +47 -0
  228. package/dist/storage/domains/skills/base.d.ts.map +1 -0
  229. package/dist/storage/domains/skills/index.d.ts +3 -0
  230. package/dist/storage/domains/skills/index.d.ts.map +1 -0
  231. package/dist/storage/domains/skills/inmemory.d.ts +31 -0
  232. package/dist/storage/domains/skills/inmemory.d.ts.map +1 -0
  233. package/dist/storage/domains/versioned.d.ts +12 -3
  234. package/dist/storage/domains/versioned.d.ts.map +1 -1
  235. package/dist/storage/domains/workspaces/base.d.ts +47 -0
  236. package/dist/storage/domains/workspaces/base.d.ts.map +1 -0
  237. package/dist/storage/domains/workspaces/index.d.ts +3 -0
  238. package/dist/storage/domains/workspaces/index.d.ts.map +1 -0
  239. package/dist/storage/domains/workspaces/inmemory.d.ts +31 -0
  240. package/dist/storage/domains/workspaces/inmemory.d.ts.map +1 -0
  241. package/dist/storage/index.cjs +202 -138
  242. package/dist/storage/index.js +2 -2
  243. package/dist/storage/mock.d.ts.map +1 -1
  244. package/dist/storage/types.d.ts +422 -12
  245. package/dist/storage/types.d.ts.map +1 -1
  246. package/dist/stream/base/output.d.ts.map +1 -1
  247. package/dist/stream/index.cjs +11 -11
  248. package/dist/stream/index.js +2 -2
  249. package/dist/test-utils/llm-mock.cjs +4 -4
  250. package/dist/test-utils/llm-mock.js +1 -1
  251. package/dist/tool-loop-agent/index.cjs +4 -4
  252. package/dist/tool-loop-agent/index.js +1 -1
  253. package/dist/tools/index.cjs +8 -4
  254. package/dist/tools/index.js +1 -1
  255. package/dist/tools/is-vercel-tool.cjs +2 -2
  256. package/dist/tools/is-vercel-tool.js +1 -1
  257. package/dist/tools/tool-builder/builder.d.ts.map +1 -1
  258. package/dist/tools/tool.d.ts +13 -0
  259. package/dist/tools/tool.d.ts.map +1 -1
  260. package/dist/tools/toolchecks.d.ts.map +1 -1
  261. package/dist/tools/types.d.ts +24 -0
  262. package/dist/tools/types.d.ts.map +1 -1
  263. package/dist/types/zod-compat.d.ts +27 -6
  264. package/dist/types/zod-compat.d.ts.map +1 -1
  265. package/dist/utils.cjs +23 -23
  266. package/dist/utils.js +1 -1
  267. package/dist/vector/index.cjs +12 -12
  268. package/dist/vector/index.js +2 -2
  269. package/dist/workflows/evented/index.cjs +10 -10
  270. package/dist/workflows/evented/index.js +1 -1
  271. package/dist/workflows/handlers/entry.d.ts.map +1 -1
  272. package/dist/workflows/index.cjs +25 -25
  273. package/dist/workflows/index.js +1 -1
  274. package/dist/workflows/workflow.d.ts +2 -2
  275. package/dist/workflows/workflow.d.ts.map +1 -1
  276. package/dist/workspace/constants/index.d.ts +1 -0
  277. package/dist/workspace/constants/index.d.ts.map +1 -1
  278. package/dist/workspace/errors.d.ts +3 -0
  279. package/dist/workspace/errors.d.ts.map +1 -1
  280. package/dist/workspace/filesystem/composite-filesystem.d.ts +75 -6
  281. package/dist/workspace/filesystem/composite-filesystem.d.ts.map +1 -1
  282. package/dist/workspace/filesystem/local-filesystem.d.ts +42 -0
  283. package/dist/workspace/filesystem/local-filesystem.d.ts.map +1 -1
  284. package/dist/workspace/glob.d.ts +61 -0
  285. package/dist/workspace/glob.d.ts.map +1 -0
  286. package/dist/workspace/index.cjs +133 -41
  287. package/dist/workspace/index.d.ts +8 -1
  288. package/dist/workspace/index.d.ts.map +1 -1
  289. package/dist/workspace/index.js +1 -1
  290. package/dist/workspace/sandbox/local-sandbox.d.ts.map +1 -1
  291. package/dist/workspace/skills/composite-versioned-skill-source.d.ts +44 -0
  292. package/dist/workspace/skills/composite-versioned-skill-source.d.ts.map +1 -0
  293. package/dist/workspace/skills/index.d.ts +3 -0
  294. package/dist/workspace/skills/index.d.ts.map +1 -1
  295. package/dist/workspace/skills/local-skill-source.d.ts.map +1 -1
  296. package/dist/workspace/skills/publish.d.ts +34 -0
  297. package/dist/workspace/skills/publish.d.ts.map +1 -0
  298. package/dist/workspace/skills/skill-source.d.ts +2 -0
  299. package/dist/workspace/skills/skill-source.d.ts.map +1 -1
  300. package/dist/workspace/skills/types.d.ts +16 -0
  301. package/dist/workspace/skills/types.d.ts.map +1 -1
  302. package/dist/workspace/skills/versioned-skill-source.d.ts +20 -0
  303. package/dist/workspace/skills/versioned-skill-source.d.ts.map +1 -0
  304. package/dist/workspace/skills/workspace-skills.d.ts +5 -0
  305. package/dist/workspace/skills/workspace-skills.d.ts.map +1 -1
  306. package/dist/workspace/tools/delete-file.d.ts +5 -0
  307. package/dist/workspace/tools/delete-file.d.ts.map +1 -0
  308. package/dist/workspace/tools/edit-file.d.ts +7 -0
  309. package/dist/workspace/tools/edit-file.d.ts.map +1 -0
  310. package/dist/workspace/tools/execute-command.d.ts +7 -0
  311. package/dist/workspace/tools/execute-command.d.ts.map +1 -0
  312. package/dist/workspace/tools/file-stat.d.ts +4 -0
  313. package/dist/workspace/tools/file-stat.d.ts.map +1 -0
  314. package/dist/workspace/tools/grep.d.ts +9 -0
  315. package/dist/workspace/tools/grep.d.ts.map +1 -0
  316. package/dist/workspace/tools/helpers.d.ts +36 -0
  317. package/dist/workspace/tools/helpers.d.ts.map +1 -0
  318. package/dist/workspace/tools/index-content.d.ts +6 -0
  319. package/dist/workspace/tools/index-content.d.ts.map +1 -0
  320. package/dist/workspace/tools/index.d.ts +13 -1
  321. package/dist/workspace/tools/index.d.ts.map +1 -1
  322. package/dist/workspace/tools/list-files.d.ts +10 -0
  323. package/dist/workspace/tools/list-files.d.ts.map +1 -0
  324. package/dist/workspace/tools/mkdir.d.ts +5 -0
  325. package/dist/workspace/tools/mkdir.d.ts.map +1 -0
  326. package/dist/workspace/tools/read-file.d.ts +8 -0
  327. package/dist/workspace/tools/read-file.d.ts.map +1 -0
  328. package/dist/workspace/tools/search.d.ts +7 -0
  329. package/dist/workspace/tools/search.d.ts.map +1 -0
  330. package/dist/workspace/tools/tools.d.ts +5 -7
  331. package/dist/workspace/tools/tools.d.ts.map +1 -1
  332. package/dist/workspace/tools/tree-formatter.d.ts +2 -0
  333. package/dist/workspace/tools/tree-formatter.d.ts.map +1 -1
  334. package/dist/workspace/tools/write-file.d.ts +6 -0
  335. package/dist/workspace/tools/write-file.d.ts.map +1 -0
  336. package/dist/workspace/workspace.d.ts +56 -10
  337. package/dist/workspace/workspace.d.ts.map +1 -1
  338. package/harness.d.ts +1 -0
  339. package/package.json +9 -7
  340. package/src/llm/model/provider-types.generated.d.ts +312 -93
  341. package/dist/chunk-3JVFFAJX.cjs.map +0 -1
  342. package/dist/chunk-3X3CZUXI.js.map +0 -1
  343. package/dist/chunk-4EHGOATH.js.map +0 -1
  344. package/dist/chunk-4IJ4UDZX.cjs.map +0 -1
  345. package/dist/chunk-4KFEMXTV.cjs.map +0 -1
  346. package/dist/chunk-4TQ4EBYX.js.map +0 -1
  347. package/dist/chunk-4XSAZPPS.js.map +0 -1
  348. package/dist/chunk-65PHUUMF.cjs.map +0 -1
  349. package/dist/chunk-7NKUSQEV.js.map +0 -1
  350. package/dist/chunk-7UWHFWST.cjs.map +0 -1
  351. package/dist/chunk-AXHBJ4GX.js.map +0 -1
  352. package/dist/chunk-AY6DBRS3.js.map +0 -1
  353. package/dist/chunk-BP7VYTOP.cjs.map +0 -1
  354. package/dist/chunk-CYUP7QWT.cjs.map +0 -1
  355. package/dist/chunk-CZ4NQANZ.cjs.map +0 -1
  356. package/dist/chunk-NJ7TL3LQ.js.map +0 -1
  357. package/dist/chunk-NZG2JAKS.cjs.map +0 -1
  358. package/dist/chunk-PS5ONCXY.js.map +0 -1
  359. package/dist/chunk-RS6CZXGA.js.map +0 -1
  360. package/dist/chunk-SU5APAM6.cjs.map +0 -1
  361. package/dist/chunk-Y3TQ52UE.js.map +0 -1
  362. package/dist/chunk-YNNJLLFN.cjs.map +0 -1
  363. package/dist/chunk-ZATLLPIH.js.map +0 -1
  364. package/dist/models-dev-FQVUTQ7L.js +0 -3
  365. package/dist/models-dev-PPIXUUCU.cjs +0 -12
  366. package/dist/provider-registry-6LZAGQET.cjs +0 -40
  367. package/dist/provider-registry-QUNT7S55.js +0 -3
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/harness/tools.ts","../../src/harness/harness.ts"],"names":["answer","durationMs","meta","result"],"mappings":"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","file":"index.js","sourcesContent":["import { z } from 'zod';\n\nimport { Agent } from '../agent';\nimport type { ToolsInput } from '../agent/types';\nimport type { MastraLanguageModel } from '../llm/model/shared.types';\nimport { createTool } from '../tools/tool';\n\nimport type { HarnessRequestContext, HarnessSubagent } from './types';\n\nlet questionCounter = 0;\nlet planCounter = 0;\n\n/**\n * Built-in harness tool: ask the user a question and wait for their response.\n * Supports single-select options and free-text input.\n * The tool pauses execution while the UI shows the dialog.\n */\nexport const askUserTool = createTool({\n id: 'ask_user',\n description:\n 'Ask the user a question and wait for their response. Use this when you need clarification, want to validate assumptions, or need the user to make a decision between options. Provide options for structured choices (2-4 options), or omit them for open-ended questions.',\n inputSchema: z.object({\n question: z.string().min(1).describe('The question to ask the user. Should be clear and specific.'),\n options: z\n .array(\n z.object({\n label: z.string().describe('Short display text for this option (1-5 words)'),\n description: z.string().optional().describe('Explanation of what this option means'),\n }),\n )\n .optional()\n .describe('Optional choices. If provided, shows a selection list. If omitted, shows a free-text input.'),\n }),\n execute: async ({ question, options }, context) => {\n try {\n const harnessCtx = context?.requestContext?.get('harness') as HarnessRequestContext | undefined;\n\n if (!harnessCtx?.emitEvent || !harnessCtx?.registerQuestion) {\n return {\n content: `[Question for user]: ${question}${options ? '\\nOptions: ' + options.map(o => o.label).join(', ') : ''}`,\n isError: false,\n };\n }\n\n const questionId = `q_${++questionCounter}_${Date.now()}`;\n\n const answer = await new Promise<string>((resolve, reject) => {\n const signal = harnessCtx.abortSignal;\n if (signal?.aborted) {\n reject(new DOMException('Aborted', 'AbortError'));\n return;\n }\n const onAbort = () => reject(new DOMException('Aborted', 'AbortError'));\n signal?.addEventListener('abort', onAbort, { once: true });\n\n harnessCtx.registerQuestion!(questionId, answer => {\n signal?.removeEventListener('abort', onAbort);\n resolve(answer);\n });\n\n harnessCtx.emitEvent!({\n type: 'ask_question',\n questionId,\n question,\n options,\n });\n });\n\n return { content: `User answered: ${answer}`, isError: false };\n } catch (error) {\n const msg = error instanceof Error ? error.message : 'Unknown error';\n return { content: `Failed to ask user: ${msg}`, isError: true };\n }\n },\n});\n\n/**\n * Built-in harness tool: submit a plan for user review.\n * The plan renders in the UI with approve/reject options.\n * On approval, the harness switches to the default mode.\n */\nexport const submitPlanTool = createTool({\n id: 'submit_plan',\n description:\n 'Submit a completed implementation plan for user review. The plan will be rendered as markdown and the user can approve, reject, or request changes. Use this when your exploration is complete and you have a concrete plan ready for review. On approval, the system automatically switches to the default mode so you can implement.',\n inputSchema: z.object({\n title: z.string().optional().describe(\"Short title for the plan (e.g., 'Add dark mode toggle')\"),\n plan: z\n .string()\n .min(1)\n .describe('The full plan content in markdown format. Should include Overview, Steps, and Verification sections.'),\n }),\n execute: async ({ title, plan }, context) => {\n try {\n const harnessCtx = context?.requestContext?.get('harness') as HarnessRequestContext | undefined;\n\n if (!harnessCtx?.emitEvent || !harnessCtx?.registerPlanApproval) {\n return {\n content: `[Plan submitted for review]\\n\\nTitle: ${title || 'Implementation Plan'}\\n\\n${plan}`,\n isError: false,\n };\n }\n\n const planId = `plan_${++planCounter}_${Date.now()}`;\n\n const result = await new Promise<{ action: 'approved' | 'rejected'; feedback?: string }>((resolve, reject) => {\n const signal = harnessCtx.abortSignal;\n if (signal?.aborted) {\n reject(new DOMException('Aborted', 'AbortError'));\n return;\n }\n const onAbort = () => reject(new DOMException('Aborted', 'AbortError'));\n signal?.addEventListener('abort', onAbort, { once: true });\n\n harnessCtx.registerPlanApproval!(planId, res => {\n signal?.removeEventListener('abort', onAbort);\n resolve(res);\n });\n\n harnessCtx.emitEvent!({\n type: 'plan_approval_required',\n planId,\n title: title || 'Implementation Plan',\n plan,\n });\n });\n\n if (result.action === 'approved') {\n return {\n content: 'Plan approved. Proceed with implementation following the approved plan.',\n isError: false,\n };\n }\n\n const feedback = result.feedback ? `\\n\\nUser feedback: ${result.feedback}` : '';\n return {\n content: `Plan was not approved. The user wants revisions.${feedback}\\n\\nPlease revise the plan based on the feedback and submit again with submit_plan.`,\n isError: false,\n };\n } catch (error) {\n const msg = error instanceof Error ? error.message : 'Unknown error';\n return { content: `Failed to submit plan: ${msg}`, isError: true };\n }\n },\n});\n\n// =============================================================================\n// Subagent Tool\n// =============================================================================\n\nexport interface CreateSubagentToolOptions {\n subagents: HarnessSubagent[];\n resolveModel: (modelId: string) => MastraLanguageModel;\n /** Resolved harness tools (already evaluated from DynamicArgument) */\n harnessTools?: ToolsInput;\n /** Fallback model ID when subagent definition has no defaultModelId */\n fallbackModelId?: string;\n}\n\n/**\n * Creates a `subagent` tool from registered subagent definitions.\n * The tool spawns a fresh Agent per invocation with constrained tools,\n * streams the response, and forwards events to the harness.\n */\nexport function createSubagentTool(opts: CreateSubagentToolOptions) {\n const { subagents, resolveModel, harnessTools, fallbackModelId } = opts;\n\n const subagentIds = subagents.map(s => s.id);\n\n const typeDescriptions = subagents.map(s => `- **${s.id}** (${s.name}): ${s.description}`).join('\\n');\n\n return createTool({\n id: 'subagent',\n description: `Delegate a focused task to a specialized subagent. The subagent runs independently with a constrained toolset, then returns its findings as text.\n\nAvailable agent types:\n${typeDescriptions}\n\nThe subagent runs in its own context — it does NOT see the parent conversation history. Write a clear, self-contained task description.\n\nUse this tool when:\n- You want to run multiple investigations in parallel\n- The task is self-contained and can be delegated`,\n inputSchema: z.object({\n agentType: z.enum(subagentIds as [string, ...string[]]).describe('Type of subagent to spawn'),\n task: z\n .string()\n .describe(\n 'Clear, self-contained description of what the subagent should do. Include all relevant context — the subagent cannot see the parent conversation.',\n ),\n modelId: z.string().optional().describe('Optional model ID override for this task.'),\n }),\n execute: async ({ agentType, task, modelId }, context) => {\n const definition = subagents.find(s => s.id === agentType);\n if (!definition) {\n return {\n content: `Unknown agent type: ${agentType}. Valid types: ${subagentIds.join(', ')}`,\n isError: true,\n };\n }\n\n const harnessCtx = context?.requestContext?.get('harness') as HarnessRequestContext | undefined;\n const emitEvent = harnessCtx?.emitEvent;\n const abortSignal = harnessCtx?.abortSignal;\n const toolCallId = context?.agent?.toolCallId ?? 'unknown';\n\n // Merge tools: subagent's own tools + filtered harness tools\n const mergedTools: ToolsInput = { ...definition.tools };\n if (definition.allowedHarnessTools && harnessTools) {\n for (const toolId of definition.allowedHarnessTools) {\n if (harnessTools[toolId] && !mergedTools[toolId]) {\n mergedTools[toolId] = harnessTools[toolId];\n }\n }\n }\n\n // Resolve model: explicit arg → harness setting → subagent default → fallback\n const harnessModelId = harnessCtx?.getSubagentModelId?.(agentType) ?? undefined;\n const resolvedModelId = modelId ?? harnessModelId ?? definition.defaultModelId ?? fallbackModelId;\n if (!resolvedModelId) {\n return { content: 'No model ID available for subagent. Configure defaultModelId.', isError: true };\n }\n\n let model: MastraLanguageModel;\n try {\n model = resolveModel(resolvedModelId);\n } catch (err) {\n return {\n content: `Failed to resolve model \"${resolvedModelId}\": ${err instanceof Error ? err.message : String(err)}`,\n isError: true,\n };\n }\n\n const subagent = new Agent({\n id: `subagent-${definition.id}`,\n name: `${definition.name} Subagent`,\n instructions: definition.instructions,\n model,\n tools: mergedTools,\n });\n\n const startTime = Date.now();\n\n emitEvent?.({\n type: 'subagent_start',\n toolCallId,\n agentType,\n task,\n modelId: resolvedModelId,\n });\n\n let partialText = '';\n const toolCallLog: Array<{ name: string; toolCallId: string; isError?: boolean }> = [];\n\n try {\n const response = await subagent.stream(task, {\n maxSteps: 50,\n abortSignal,\n requireToolApproval: false,\n });\n\n for await (const chunk of response.fullStream) {\n switch (chunk.type) {\n case 'text-delta':\n partialText += chunk.payload.text;\n emitEvent?.({\n type: 'subagent_text_delta',\n toolCallId,\n agentType,\n textDelta: chunk.payload.text,\n });\n break;\n\n case 'tool-call':\n toolCallLog.push({ name: chunk.payload.toolName, toolCallId: chunk.payload.toolCallId });\n emitEvent?.({\n type: 'subagent_tool_start',\n toolCallId,\n agentType,\n subToolName: chunk.payload.toolName,\n subToolArgs: chunk.payload.args,\n });\n break;\n\n case 'tool-result': {\n const isErr = chunk.payload.isError ?? false;\n for (let i = toolCallLog.length - 1; i >= 0; i--) {\n if (toolCallLog[i]!.toolCallId === chunk.payload.toolCallId && toolCallLog[i]!.isError === undefined) {\n toolCallLog[i]!.isError = isErr;\n break;\n }\n }\n emitEvent?.({\n type: 'subagent_tool_end',\n toolCallId,\n agentType,\n subToolName: chunk.payload.toolName,\n subToolResult: chunk.payload.result,\n isError: isErr,\n });\n break;\n }\n }\n }\n\n if (abortSignal?.aborted) {\n const durationMs = Date.now() - startTime;\n const abortResult = partialText\n ? `[Aborted by user]\\n\\nPartial output:\\n${partialText}`\n : '[Aborted by user]';\n\n emitEvent?.({ type: 'subagent_end', toolCallId, agentType, result: abortResult, isError: false, durationMs });\n const meta = buildSubagentMeta(resolvedModelId, durationMs, toolCallLog);\n return { content: abortResult + meta, isError: false };\n }\n\n const fullOutput = await response.getFullOutput();\n const resultText = fullOutput.text || partialText;\n\n const durationMs = Date.now() - startTime;\n emitEvent?.({ type: 'subagent_end', toolCallId, agentType, result: resultText, isError: false, durationMs });\n\n const meta = buildSubagentMeta(resolvedModelId, durationMs, toolCallLog);\n return { content: resultText + meta, isError: false };\n } catch (err) {\n const isAbort =\n err instanceof Error &&\n (err.name === 'AbortError' || err.message?.includes('abort') || err.message?.includes('cancel'));\n const durationMs = Date.now() - startTime;\n\n if (isAbort) {\n const abortResult = partialText\n ? `[Aborted by user]\\n\\nPartial output:\\n${partialText}`\n : '[Aborted by user]';\n\n emitEvent?.({ type: 'subagent_end', toolCallId, agentType, result: abortResult, isError: false, durationMs });\n\n const meta = buildSubagentMeta(resolvedModelId, durationMs, toolCallLog);\n return { content: abortResult + meta, isError: false };\n }\n\n const message = err instanceof Error ? err.message : String(err);\n emitEvent?.({ type: 'subagent_end', toolCallId, agentType, result: message, isError: true, durationMs });\n\n const meta = buildSubagentMeta(resolvedModelId, durationMs, toolCallLog);\n return { content: `Subagent \"${definition.name}\" failed: ${message}` + meta, isError: true };\n }\n },\n });\n}\n\n/**\n * Build a metadata tag appended to subagent results.\n * UIs can parse this to display model ID, duration, and tool calls\n * when loading from history (where live events aren't available).\n */\nfunction buildSubagentMeta(\n modelId: string,\n durationMs: number,\n toolCalls: Array<{ name: string; isError?: boolean }>,\n): string {\n const tools = toolCalls.map(tc => `${tc.name}:${tc.isError ? 'err' : 'ok'}`).join(',');\n return `\\n<subagent-meta modelId=\"${modelId}\" durationMs=\"${durationMs}\" tools=\"${tools}\" />`;\n}\n\n/**\n * Parse subagent metadata from a tool result string.\n * Returns the metadata and the cleaned result text (without the tag).\n */\nexport function parseSubagentMeta(content: string): {\n text: string;\n modelId?: string;\n durationMs?: number;\n toolCalls?: Array<{ name: string; isError: boolean }>;\n} {\n const match = content.match(/\\n<subagent-meta modelId=\"([^\"]*)\" durationMs=\"(\\d+)\" tools=\"([^\"]*)\" \\/>$/);\n if (!match) return { text: content };\n\n const text = content.slice(0, match.index!);\n const modelId = match[1];\n const durationMs = parseInt(match[2]!, 10);\n const toolCalls = match[3]\n ? match[3]\n .split(',')\n .filter(Boolean)\n .map(entry => {\n const [name, status] = entry.split(':');\n return { name: name!, isError: status === 'err' };\n })\n : [];\n\n return { text, modelId, durationMs, toolCalls };\n}\n","import type { z } from 'zod';\n\nimport type { Agent } from '../agent';\nimport type { ToolsInput, ToolsetsInput } from '../agent/types';\nimport type { StorageThreadType } from '../memory/types';\nimport { RequestContext } from '../request-context';\nimport type { MemoryStorage } from '../storage/domains/memory/base';\nimport { Workspace } from '../workspace/workspace';\nimport type { WorkspaceConfig } from '../workspace/workspace';\n\nimport { askUserTool, createSubagentTool, submitPlanTool } from './tools';\nimport type {\n AvailableModel,\n HeartbeatHandler,\n HarnessConfig,\n HarnessEvent,\n HarnessEventListener,\n HarnessMessage,\n HarnessMessageContent,\n HarnessMode,\n HarnessRequestContext,\n HarnessSession,\n HarnessStateSchema,\n HarnessThread,\n ModelAuthStatus,\n PermissionPolicy,\n PermissionRules,\n ToolCategory,\n} from './types';\n\n/**\n * The Harness orchestrates multiple agent modes, shared state, memory, and storage.\n * It's the core abstraction that a TUI (or other UI) controls.\n *\n * @example\n * ```ts\n * const harness = new Harness({\n * id: \"my-coding-agent\",\n * storage: new LibSQLStore({ url: \"file:./data.db\" }),\n * stateSchema: z.object({\n * currentModelId: z.string().optional(),\n * }),\n * modes: [\n * { id: \"plan\", name: \"Plan\", default: true, agent: planAgent },\n * { id: \"build\", name: \"Build\", agent: buildAgent },\n * ],\n * })\n *\n * harness.subscribe((event) => {\n * if (event.type === \"message_update\") renderMessage(event.message)\n * })\n *\n * await harness.init()\n * await harness.sendMessage(\"Hello!\")\n * ```\n */\nexport class Harness<TState extends HarnessStateSchema = HarnessStateSchema> {\n readonly id: string;\n\n private config: HarnessConfig<TState>;\n private state: z.infer<TState>;\n private currentModeId: string;\n private currentThreadId: string | null = null;\n private resourceId: string;\n private listeners: HarnessEventListener[] = [];\n private abortController: AbortController | null = null;\n private abortRequested: boolean = false;\n private currentRunId: string | null = null;\n private currentOperationId: number = 0;\n private followUpQueue: string[] = [];\n private pendingApprovalResolve: ((decision: 'approve' | 'decline') => void) | null = null;\n private pendingApprovalToolName: string | null = null;\n private pendingQuestions = new Map<string, (answer: string) => void>();\n private pendingPlanApprovals = new Map<\n string,\n (result: { action: 'approved' | 'rejected'; feedback?: string }) => void\n >();\n private workspace: Workspace | undefined = undefined;\n private workspaceFn:\n | ((ctx: { requestContext: RequestContext }) => Promise<Workspace | undefined> | Workspace | undefined)\n | undefined = undefined;\n private workspaceInitialized = false;\n private heartbeatTimers = new Map<string, { timer: NodeJS.Timeout; shutdown?: () => void | Promise<void> }>();\n private tokenUsage: { promptTokens: number; completionTokens: number; totalTokens: number } = {\n promptTokens: 0,\n completionTokens: 0,\n totalTokens: 0,\n };\n private sessionGrantedCategories = new Set<string>();\n private sessionGrantedTools = new Set<string>();\n\n constructor(config: HarnessConfig<TState>) {\n this.id = config.id;\n this.config = config;\n this.resourceId = config.resourceId ?? config.id;\n\n // Initialize state from schema defaults + initial state\n this.state = {\n ...this.getSchemaDefaults(),\n ...config.initialState,\n } as z.infer<TState>;\n\n // Find default mode\n const defaultMode = config.modes.find(m => m.default) ?? config.modes[0];\n if (!defaultMode) {\n throw new Error('Harness requires at least one agent mode');\n }\n this.currentModeId = defaultMode.id;\n\n // Store workspace: pre-built instance, dynamic factory, or config (constructed in init())\n if (config.workspace instanceof Workspace) {\n this.workspace = config.workspace;\n } else if (typeof config.workspace === 'function') {\n this.workspaceFn = config.workspace;\n }\n\n // Seed model from mode default if not set\n const currentModel = (this.state as any).currentModelId;\n if (!currentModel && defaultMode.defaultModelId) {\n void this.setState({ currentModelId: defaultMode.defaultModelId } as Partial<z.infer<TState>>);\n }\n }\n\n // ===========================================================================\n // Initialization\n // ===========================================================================\n\n /**\n * Initialize the harness — loads storage and workspace.\n * Must be called before using the harness.\n */\n async init(): Promise<void> {\n if (this.config.storage) {\n await this.config.storage.init();\n }\n\n // Initialize workspace if configured (skip for dynamic factory — resolved per-request)\n if (this.config.workspace && !this.workspaceInitialized && !this.workspaceFn) {\n try {\n if (!this.workspace) {\n this.workspace = new Workspace(this.config.workspace as WorkspaceConfig);\n }\n\n this.emit({ type: 'workspace_status_changed', status: 'initializing' });\n await this.workspace.init();\n this.workspaceInitialized = true;\n\n this.emit({ type: 'workspace_status_changed', status: 'ready' });\n this.emit({\n type: 'workspace_ready',\n workspaceId: this.workspace.id,\n workspaceName: this.workspace.name,\n });\n } catch (error) {\n const err = error instanceof Error ? error : new Error(String(error));\n this.workspace = undefined;\n this.workspaceInitialized = false;\n\n this.emit({ type: 'workspace_status_changed', status: 'error', error: err });\n this.emit({ type: 'workspace_error', error: err });\n }\n }\n\n // Propagate harness-level memory and workspace to mode agents (after workspace init)\n const workspaceForAgents = this.workspaceFn ?? this.workspace;\n for (const mode of this.config.modes) {\n const agent = typeof mode.agent === 'function' ? null : mode.agent;\n if (!agent) continue;\n\n if (this.config.memory && !agent.hasOwnMemory()) {\n agent.__setMemory(this.config.memory);\n }\n if (workspaceForAgents && !agent.hasOwnWorkspace()) {\n agent.__setWorkspace(workspaceForAgents);\n }\n }\n\n this.startHeartbeats();\n }\n\n /**\n * Select the most recent thread, or create one if none exist.\n */\n async selectOrCreateThread(): Promise<HarnessThread> {\n const threads = await this.listThreads();\n\n if (threads.length === 0) {\n return await this.createThread();\n }\n\n const sortedThreads = [...threads].sort((a, b) => b.updatedAt.getTime() - a.updatedAt.getTime());\n const mostRecent = sortedThreads[0]!;\n this.currentThreadId = mostRecent.id;\n await this.loadThreadMetadata();\n\n return mostRecent;\n }\n\n private async getMemoryStorage(): Promise<MemoryStorage> {\n if (!this.config.storage) {\n throw new Error('Storage is not configured on this Harness');\n }\n const memoryStorage = await this.config.storage.getStore('memory');\n if (!memoryStorage) {\n throw new Error('Storage does not have a memory domain configured');\n }\n return memoryStorage;\n }\n\n // ===========================================================================\n // State Management\n // ===========================================================================\n\n /**\n * Get current harness state (read-only snapshot).\n */\n getState(): Readonly<z.infer<TState>> {\n return { ...this.state };\n }\n\n /**\n * Update harness state. Validates against schema if provided.\n * Emits state_changed event.\n */\n async setState(updates: Partial<z.infer<TState>>): Promise<void> {\n const changedKeys = Object.keys(updates);\n const newState = { ...this.state, ...updates };\n\n if (this.config.stateSchema) {\n const result = this.config.stateSchema.safeParse(newState);\n if (!result.success) {\n throw new Error(`Invalid state update: ${result.error.message}`);\n }\n this.state = result.data as z.infer<TState>;\n } else {\n this.state = newState as z.infer<TState>;\n }\n\n this.emit({ type: 'state_changed', state: this.state, changedKeys });\n }\n\n private getSchemaDefaults(): Partial<z.infer<TState>> {\n if (!this.config.stateSchema) return {};\n\n const shape = this.config.stateSchema.shape;\n const defaults: Record<string, unknown> = {};\n\n for (const [key, field] of Object.entries(shape)) {\n try {\n const result = (field as any).safeParse(undefined);\n if (result.success && result.data !== undefined) {\n defaults[key] = result.data;\n }\n } catch {\n // field has no default or doesn't support safeParse — skip\n }\n }\n\n return defaults as Partial<z.infer<TState>>;\n }\n\n // ===========================================================================\n // Mode Management\n // ===========================================================================\n\n getModes(): HarnessMode<TState>[] {\n return this.config.modes;\n }\n\n getCurrentModeId(): string {\n return this.currentModeId;\n }\n\n getCurrentMode(): HarnessMode<TState> {\n const mode = this.config.modes.find(m => m.id === this.currentModeId);\n if (!mode) {\n throw new Error(`Mode not found: ${this.currentModeId}`);\n }\n return mode;\n }\n\n /**\n * Switch to a different mode.\n * Aborts any in-progress generation and switches to the mode's default model.\n */\n async switchMode(modeId: string): Promise<void> {\n const mode = this.config.modes.find(m => m.id === modeId);\n if (!mode) {\n throw new Error(`Mode not found: ${modeId}`);\n }\n\n this.abort();\n\n // Save current model to the outgoing mode before switching\n const currentModelId = this.getCurrentModelId();\n if (currentModelId) {\n await this.persistThreadSetting(`modeModelId_${this.currentModeId}`, currentModelId);\n }\n\n const previousModeId = this.currentModeId;\n this.currentModeId = modeId;\n\n await this.persistThreadSetting('currentModeId', modeId);\n\n // Load the incoming mode's model\n const modeModelId = await this.loadModeModelId(modeId);\n if (modeModelId) {\n void this.setState({ currentModelId: modeModelId } as Partial<z.infer<TState>>);\n this.emit({ type: 'model_changed', modelId: modeModelId } as HarnessEvent);\n }\n\n this.emit({ type: 'mode_changed', modeId, previousModeId });\n }\n\n /**\n * Load the stored model ID for a specific mode.\n * Falls back to: thread metadata -> mode's defaultModelId -> current model.\n */\n private async loadModeModelId(modeId: string): Promise<string | null> {\n if (this.currentThreadId && this.config.storage) {\n try {\n const memoryStorage = await this.getMemoryStorage();\n const thread = await memoryStorage.getThreadById({ threadId: this.currentThreadId });\n const meta = thread?.metadata as Record<string, unknown> | undefined;\n const stored = meta?.[`modeModelId_${modeId}`] as string | undefined;\n if (stored) return stored;\n } catch {\n // Fall through to defaults\n }\n }\n\n const mode = this.config.modes.find(m => m.id === modeId);\n if (mode?.defaultModelId) return mode.defaultModelId;\n\n return null;\n }\n\n /**\n * Get the agent for the current mode.\n */\n private getCurrentAgent(): Agent {\n const mode = this.getCurrentMode();\n if (typeof mode.agent === 'function') {\n return mode.agent(this.state);\n }\n return mode.agent;\n }\n\n /**\n * Get a short display name from the current model ID.\n */\n getModelName(): string {\n const modelId = this.getCurrentModelId();\n if (!modelId || modelId === 'unknown') return modelId || 'unknown';\n const parts = modelId.split('/');\n return parts[parts.length - 1] || modelId;\n }\n\n /**\n * Get the full model ID (e.g., \"anthropic/claude-sonnet-4\").\n */\n getFullModelId(): string {\n return this.getCurrentModelId();\n }\n\n /**\n * Switch to a different model at runtime.\n */\n async switchModel(modelId: string, scope: 'global' | 'thread' = 'thread', modeId?: string): Promise<void> {\n const targetModeId = modeId ?? this.currentModeId;\n\n if (targetModeId === this.currentModeId) {\n void this.setState({ currentModelId: modelId } as Partial<z.infer<TState>>);\n }\n\n if (scope === 'thread') {\n await this.persistThreadSetting(`modeModelId_${targetModeId}`, modelId);\n }\n\n this.emit({ type: 'model_changed', modelId, scope, modeId: targetModeId } as HarnessEvent);\n }\n\n getCurrentModelId(): string {\n const state = this.getState() as { currentModelId?: string };\n return state.currentModelId ?? '';\n }\n\n hasModelSelected(): boolean {\n return this.getCurrentModelId() !== '';\n }\n\n /**\n * Check if the current model's provider has authentication configured.\n * Uses the provider registry's `apiKeyEnvVar` and the optional `modelAuthChecker` hook.\n */\n async getCurrentModelAuthStatus(): Promise<ModelAuthStatus> {\n const modelId = this.getCurrentModelId();\n const provider = modelId.split('/')[0];\n if (!provider) return { hasAuth: true };\n\n if (this.config.modelAuthChecker) {\n const result = this.config.modelAuthChecker(provider);\n if (result === true) return { hasAuth: true };\n if (result === false) {\n const apiKeyEnvVar = await this.getProviderApiKeyEnvVar(provider);\n return { hasAuth: false, apiKeyEnvVar };\n }\n }\n\n try {\n const { PROVIDER_REGISTRY } = await import('../llm/model/provider-registry.js');\n const registry = PROVIDER_REGISTRY as Record<string, { apiKeyEnvVar?: string | string[] }>;\n const providerConfig = registry[provider];\n const envVars = providerConfig?.apiKeyEnvVar;\n const apiKeyEnvVar = Array.isArray(envVars) ? envVars[0] : envVars;\n if (apiKeyEnvVar && process.env[apiKeyEnvVar]) {\n return { hasAuth: true };\n }\n return { hasAuth: false, apiKeyEnvVar: apiKeyEnvVar || undefined };\n } catch {\n return { hasAuth: true };\n }\n }\n\n /**\n * Get all available models from the provider registry with auth status.\n * Uses the optional `modelAuthChecker` and `modelUseCountProvider` hooks.\n */\n async getAvailableModels(): Promise<AvailableModel[]> {\n try {\n const { PROVIDER_REGISTRY } = await import('../llm/model/provider-registry.js');\n\n if (!PROVIDER_REGISTRY) return [];\n\n const registry = PROVIDER_REGISTRY as Record<\n string,\n { models?: string[]; name?: string; apiKeyEnvVar?: string | string[] }\n >;\n const providers = Object.keys(registry);\n const useCounts = this.config.modelUseCountProvider?.() ?? {};\n const models: AvailableModel[] = [];\n\n for (const provider of providers) {\n const providerConfig = registry[provider];\n const envVars = providerConfig?.apiKeyEnvVar;\n const apiKeyEnvVar = Array.isArray(envVars) ? envVars[0] : envVars;\n const hasEnvKey = apiKeyEnvVar ? !!process.env[apiKeyEnvVar] : false;\n\n let hasApiKey = hasEnvKey;\n if (!hasApiKey && this.config.modelAuthChecker) {\n const customAuth = this.config.modelAuthChecker(provider);\n if (customAuth === true) hasApiKey = true;\n }\n\n if (providerConfig?.models && Array.isArray(providerConfig.models)) {\n for (const modelName of providerConfig.models) {\n const id = `${provider}/${modelName}`;\n models.push({\n id,\n provider,\n modelName,\n hasApiKey,\n apiKeyEnvVar: apiKeyEnvVar || undefined,\n useCount: useCounts[id] ?? 0,\n });\n }\n }\n }\n\n return models;\n } catch (error) {\n console.warn('Failed to load available models:', error);\n return [];\n }\n }\n\n private async getProviderApiKeyEnvVar(provider: string): Promise<string | undefined> {\n try {\n const { PROVIDER_REGISTRY } = await import('../llm/model/provider-registry.js');\n const registry = PROVIDER_REGISTRY as Record<string, { apiKeyEnvVar?: string | string[] }>;\n const envVars = registry[provider]?.apiKeyEnvVar;\n return Array.isArray(envVars) ? envVars[0] : envVars;\n } catch {\n return undefined;\n }\n }\n\n // ===========================================================================\n // Thread Management\n // ===========================================================================\n\n getCurrentThreadId(): string | null {\n return this.currentThreadId;\n }\n\n getResourceId(): string {\n return this.resourceId;\n }\n\n setResourceId(resourceId: string): void {\n this.resourceId = resourceId;\n this.currentThreadId = null;\n }\n\n async createThread(title?: string): Promise<HarnessThread> {\n const now = new Date();\n const thread: HarnessThread = {\n id: this.generateId(),\n resourceId: this.resourceId,\n title: title || 'New Thread',\n createdAt: now,\n updatedAt: now,\n };\n\n const currentStateModel = (this.state as any).currentModelId;\n const currentMode = this.getCurrentMode();\n const modelId = currentStateModel || currentMode.defaultModelId;\n\n const metadata: Record<string, unknown> = {};\n if (modelId) {\n metadata.currentModelId = modelId;\n metadata[`modeModelId_${this.currentModeId}`] = modelId;\n }\n\n if (this.config.storage) {\n const memoryStorage = await this.getMemoryStorage();\n await memoryStorage.saveThread({\n thread: {\n id: thread.id,\n resourceId: thread.resourceId,\n title: thread.title!,\n createdAt: thread.createdAt,\n updatedAt: thread.updatedAt,\n metadata: Object.keys(metadata).length > 0 ? metadata : undefined,\n },\n });\n }\n\n this.currentThreadId = thread.id;\n\n if (modelId && !currentStateModel) {\n void this.setState({ currentModelId: modelId } as Partial<z.infer<TState>>);\n }\n\n this.tokenUsage = { promptTokens: 0, completionTokens: 0, totalTokens: 0 };\n this.emit({ type: 'thread_created', thread });\n\n return thread;\n }\n\n async renameThread(title: string): Promise<void> {\n if (!this.currentThreadId || !this.config.storage) return;\n\n const memoryStorage = await this.getMemoryStorage();\n const thread = await memoryStorage.getThreadById({ threadId: this.currentThreadId });\n if (thread) {\n await memoryStorage.saveThread({\n thread: { ...thread, title, updatedAt: new Date() },\n });\n }\n }\n\n async switchThread(threadId: string): Promise<void> {\n this.abort();\n\n if (this.config.storage) {\n const memoryStorage = await this.getMemoryStorage();\n const thread = await memoryStorage.getThreadById({ threadId });\n if (!thread) {\n throw new Error(`Thread not found: ${threadId}`);\n }\n }\n\n const previousThreadId = this.currentThreadId;\n this.currentThreadId = threadId;\n\n await this.loadThreadMetadata();\n\n this.emit({ type: 'thread_changed', threadId, previousThreadId });\n }\n\n async listThreads(options?: { allResources?: boolean }): Promise<HarnessThread[]> {\n if (!this.config.storage) return [];\n\n const memoryStorage = await this.getMemoryStorage();\n const filter: { resourceId?: string } | undefined = options?.allResources\n ? undefined\n : { resourceId: this.resourceId };\n\n const result = await memoryStorage.listThreads({ filter });\n\n return result.threads.map((thread: StorageThreadType) => ({\n id: thread.id,\n resourceId: thread.resourceId,\n title: thread.title,\n createdAt: thread.createdAt,\n updatedAt: thread.updatedAt,\n metadata: thread.metadata,\n }));\n }\n\n async persistThreadSetting(key: string, value: unknown): Promise<void> {\n if (!this.currentThreadId || !this.config.storage) return;\n\n try {\n const memoryStorage = await this.getMemoryStorage();\n const thread = await memoryStorage.getThreadById({ threadId: this.currentThreadId });\n if (thread) {\n await memoryStorage.saveThread({\n thread: {\n ...thread,\n metadata: { ...thread.metadata, [key]: value },\n updatedAt: new Date(),\n },\n });\n }\n } catch {\n // Settings persistence is not critical\n }\n }\n\n private async removeThreadSetting(key: string): Promise<void> {\n if (!this.currentThreadId || !this.config.storage) return;\n\n try {\n const memoryStorage = await this.getMemoryStorage();\n const thread = await memoryStorage.getThreadById({ threadId: this.currentThreadId });\n if (thread && thread.metadata) {\n const metadata = { ...thread.metadata };\n delete metadata[key];\n await memoryStorage.saveThread({\n thread: {\n ...thread,\n metadata: Object.keys(metadata).length > 0 ? metadata : undefined,\n updatedAt: new Date(),\n },\n });\n }\n } catch {\n // Settings removal is not critical\n }\n }\n\n private async loadThreadMetadata(): Promise<void> {\n if (!this.currentThreadId || !this.config.storage) {\n this.tokenUsage = { promptTokens: 0, completionTokens: 0, totalTokens: 0 };\n return;\n }\n\n try {\n const memoryStorage = await this.getMemoryStorage();\n const thread = await memoryStorage.getThreadById({ threadId: this.currentThreadId });\n\n // Load token usage\n const savedUsage = thread?.metadata?.tokenUsage as typeof this.tokenUsage | undefined;\n if (savedUsage) {\n this.tokenUsage = {\n promptTokens: savedUsage.promptTokens ?? 0,\n completionTokens: savedUsage.completionTokens ?? 0,\n totalTokens: savedUsage.totalTokens ?? 0,\n };\n } else {\n this.tokenUsage = { promptTokens: 0, completionTokens: 0, totalTokens: 0 };\n }\n\n const meta = thread?.metadata as Record<string, unknown> | undefined;\n const updates: Record<string, unknown> = {};\n\n // Load model ID: per-mode first, then global\n const modeModelKey = `modeModelId_${this.currentModeId}`;\n if (meta?.[modeModelKey]) {\n updates.currentModelId = meta[modeModelKey];\n } else if (meta?.currentModelId) {\n updates.currentModelId = meta.currentModelId;\n }\n\n // Restore mode\n if (meta?.currentModeId) {\n const savedModeId = meta.currentModeId as string;\n const modeExists = this.config.modes.some(m => m.id === savedModeId);\n if (modeExists && savedModeId !== this.currentModeId) {\n this.currentModeId = savedModeId;\n const restoredModeModelKey = `modeModelId_${savedModeId}`;\n if (meta[restoredModeModelKey]) {\n updates.currentModelId = meta[restoredModeModelKey];\n }\n this.emit({\n type: 'mode_changed',\n modeId: savedModeId,\n previousModeId: this.config.modes.find(m => m.default)?.id || this.config.modes[0]!.id,\n });\n }\n }\n\n if (Object.keys(updates).length > 0) {\n void this.setState(updates as Partial<z.infer<TState>>);\n }\n } catch {\n this.tokenUsage = { promptTokens: 0, completionTokens: 0, totalTokens: 0 };\n }\n }\n\n // ===========================================================================\n // Observational Memory\n // ===========================================================================\n\n /**\n * Load observational memory progress for the current thread.\n * Reads the OM record and recent messages to reconstruct status,\n * then emits an `om_status` event for the UI.\n */\n async loadOMProgress(): Promise<void> {\n if (!this.currentThreadId) return;\n\n try {\n const memoryStorage = await this.getMemoryStorage();\n const record = await memoryStorage.getObservationalMemory(this.currentThreadId, this.resourceId);\n\n if (!record) return;\n\n const config = record.config as\n | {\n observationThreshold?: number | { min: number; max: number };\n reflectionThreshold?: number | { min: number; max: number };\n }\n | undefined;\n\n const getThreshold = (val: number | { min: number; max: number } | undefined, fallback: number): number => {\n if (!val) return fallback;\n if (typeof val === 'number') return val;\n return val.max;\n };\n\n let observationThreshold = getThreshold(config?.observationThreshold, 30_000);\n let reflectionThreshold = getThreshold(config?.reflectionThreshold, 40_000);\n\n let messageTokens = record.pendingMessageTokens ?? 0;\n let observationTokens = record.observationTokenCount ?? 0;\n let bufferedObs = {\n status: 'idle' as 'idle' | 'running' | 'complete',\n chunks: 0,\n messageTokens: 0,\n projectedMessageRemoval: 0,\n observationTokens: 0,\n };\n let bufferedRef = {\n status: 'idle' as 'idle' | 'running' | 'complete',\n inputObservationTokens: 0,\n observationTokens: 0,\n };\n let generationCount = 0;\n let stepNumber = 0;\n\n const messagesResult = await memoryStorage.listMessages({\n threadId: this.currentThreadId,\n perPage: 70,\n page: 0,\n orderBy: { field: 'createdAt', direction: 'DESC' },\n });\n const messages = messagesResult.messages;\n let foundStatus = false;\n for (const msg of messages) {\n if (msg.role !== 'assistant') continue;\n const content = msg.content as { parts?: Array<{ type?: string; data?: Record<string, unknown> }> } | string;\n if (typeof content === 'string' || !content?.parts) continue;\n\n for (let i = content.parts.length - 1; i >= 0; i--) {\n const part = content.parts[i] as { type?: string; data?: Record<string, unknown> };\n if (part.type === 'data-om-status' && part.data?.windows) {\n const w = part.data.windows as Record<string, Record<string, Record<string, unknown>>>;\n messageTokens = (w.active?.messages?.tokens as number) ?? messageTokens;\n observationTokens = (w.active?.observations?.tokens as number) ?? observationTokens;\n const msgThresh = w.active?.messages?.threshold as number | undefined;\n const obsThresh = w.active?.observations?.threshold as number | undefined;\n if (msgThresh) observationThreshold = msgThresh;\n if (obsThresh) reflectionThreshold = obsThresh;\n const bo = w.buffered?.observations as Record<string, unknown> | undefined;\n if (bo) {\n bufferedObs = {\n status: (bo.status as 'idle' | 'running' | 'complete') ?? 'idle',\n chunks: (bo.chunks as number) ?? 0,\n messageTokens: (bo.messageTokens as number) ?? 0,\n projectedMessageRemoval: (bo.projectedMessageRemoval as number) ?? 0,\n observationTokens: (bo.observationTokens as number) ?? 0,\n };\n }\n const br = w.buffered?.reflection as Record<string, unknown> | undefined;\n if (br) {\n bufferedRef = {\n status: (br.status as 'idle' | 'running' | 'complete') ?? 'idle',\n inputObservationTokens: (br.inputObservationTokens as number) ?? 0,\n observationTokens: (br.observationTokens as number) ?? 0,\n };\n }\n generationCount = (part.data.generationCount as number) ?? 0;\n stepNumber = (part.data.stepNumber as number) ?? 0;\n foundStatus = true;\n break;\n }\n }\n if (foundStatus) break;\n }\n\n this.emit({\n type: 'om_status',\n windows: {\n active: {\n messages: { tokens: messageTokens, threshold: observationThreshold },\n observations: { tokens: observationTokens, threshold: reflectionThreshold },\n },\n buffered: { observations: bufferedObs, reflection: bufferedRef },\n },\n recordId: record.id ?? '',\n threadId: this.currentThreadId,\n stepNumber,\n generationCount,\n });\n } catch {\n // OM not available or not initialized — that's fine\n }\n }\n\n /**\n * Returns the observer model ID from state, falling back to omConfig defaults.\n */\n getObserverModelId(): string | undefined {\n return (this.state as any).observerModelId ?? this.config.omConfig?.defaultObserverModelId;\n }\n\n /**\n * Returns the reflector model ID from state, falling back to omConfig defaults.\n */\n getReflectorModelId(): string | undefined {\n return (this.state as any).reflectorModelId ?? this.config.omConfig?.defaultReflectorModelId;\n }\n\n /**\n * Returns the observation threshold from state, falling back to omConfig defaults.\n */\n getObservationThreshold(): number | undefined {\n return (this.state as any).observationThreshold ?? this.config.omConfig?.defaultObservationThreshold;\n }\n\n /**\n * Returns the reflection threshold from state, falling back to omConfig defaults.\n */\n getReflectionThreshold(): number | undefined {\n return (this.state as any).reflectionThreshold ?? this.config.omConfig?.defaultReflectionThreshold;\n }\n\n /**\n * Resolves the observer model ID to a language model instance via `resolveModel`.\n */\n getResolvedObserverModel() {\n const modelId = this.getObserverModelId();\n if (!modelId || !this.config.resolveModel) return undefined;\n return this.config.resolveModel(modelId);\n }\n\n /**\n * Resolves the reflector model ID to a language model instance via `resolveModel`.\n */\n getResolvedReflectorModel() {\n const modelId = this.getReflectorModelId();\n if (!modelId || !this.config.resolveModel) return undefined;\n return this.config.resolveModel(modelId);\n }\n\n // ===========================================================================\n // Subagent Model Management\n // ===========================================================================\n\n getSubagentModelId(agentType?: string): string | null {\n const state = this.state as Record<string, unknown>;\n if (agentType) {\n const perType = state[`subagentModelId_${agentType}`];\n if (typeof perType === 'string') return perType;\n }\n const global = state.subagentModelId;\n return typeof global === 'string' ? global : null;\n }\n\n async setSubagentModelId(modelId: string, agentType?: string): Promise<void> {\n const key = agentType ? `subagentModelId_${agentType}` : 'subagentModelId';\n void this.setState({ [key]: modelId } as Partial<z.infer<TState>>);\n await this.persistThreadSetting(key, modelId);\n this.emit({ type: 'subagent_model_changed', modelId, scope: 'thread', agentType } as HarnessEvent);\n }\n\n // ===========================================================================\n // Permissions\n // ===========================================================================\n\n grantSessionCategory(category: ToolCategory): void {\n this.sessionGrantedCategories.add(category);\n }\n\n grantSessionTool(toolName: string): void {\n this.sessionGrantedTools.add(toolName);\n }\n\n getSessionGrants(): { categories: ToolCategory[]; tools: string[] } {\n return {\n categories: [...this.sessionGrantedCategories] as ToolCategory[],\n tools: [...this.sessionGrantedTools],\n };\n }\n\n getToolCategory(toolName: string): ToolCategory | null {\n return this.config.toolCategoryResolver?.(toolName) ?? null;\n }\n\n setPermissionCategory(category: ToolCategory, policy: PermissionPolicy): void {\n const rules = this.getPermissionRules();\n rules.categories[category] = policy;\n void this.setState({ permissionRules: rules } as Partial<z.infer<TState>>);\n }\n\n setPermissionTool(toolName: string, policy: PermissionPolicy): void {\n const rules = this.getPermissionRules();\n rules.tools[toolName] = policy;\n void this.setState({ permissionRules: rules } as Partial<z.infer<TState>>);\n }\n\n getPermissionRules(): PermissionRules {\n const state = this.state as Record<string, unknown>;\n const rules = state.permissionRules as PermissionRules | undefined;\n return rules ?? { categories: {}, tools: {} };\n }\n\n /**\n * Resolve whether a tool call should be auto-approved, denied, or asked.\n * Resolution chain: yolo → per-tool policy → session tool grant →\n * session category grant → category policy → \"ask\"\n */\n private resolveToolApproval(toolName: string): PermissionPolicy {\n const state = this.state as Record<string, unknown>;\n if (state.yolo === true) return 'allow';\n\n const rules = this.getPermissionRules();\n\n const toolPolicy = rules.tools[toolName];\n if (toolPolicy) return toolPolicy;\n\n if (this.sessionGrantedTools.has(toolName)) return 'allow';\n\n const category = this.getToolCategory(toolName);\n if (category) {\n if (this.sessionGrantedCategories.has(category)) return 'allow';\n const categoryPolicy = rules.categories[category];\n if (categoryPolicy) return categoryPolicy;\n }\n\n return 'ask';\n }\n\n // ===========================================================================\n // Message Handling\n // ===========================================================================\n\n /**\n * Send a message to the current agent.\n * Streams the response and emits events.\n */\n async sendMessage(content: string, options?: { images?: Array<{ data: string; mimeType: string }> }): Promise<void> {\n if (!this.currentThreadId) {\n const thread = await this.createThread();\n this.currentThreadId = thread.id;\n }\n\n const operationId = ++this.currentOperationId;\n this.abortController = new AbortController();\n const agent = this.getCurrentAgent();\n\n this.emit({ type: 'agent_start' });\n\n try {\n const requestContext = await this.buildRequestContext();\n\n const isYolo = (this.state as Record<string, unknown>).yolo === true;\n\n const streamOptions: Record<string, unknown> = {\n memory: { thread: this.currentThreadId, resource: this.resourceId },\n abortSignal: this.abortController.signal,\n requestContext,\n maxSteps: 1000,\n requireToolApproval: !isYolo,\n modelSettings: { temperature: 1 },\n };\n\n streamOptions.toolsets = await this.buildToolsets(requestContext);\n\n let messageInput: string | Record<string, unknown> = content;\n if (options?.images?.length) {\n messageInput = {\n role: 'user',\n content: [\n { type: 'text', text: content },\n ...options.images.map(img => ({ type: 'file', data: img.data, mediaType: img.mimeType })),\n ],\n };\n }\n\n const response = await agent.stream(messageInput as any, streamOptions as any);\n await this.processStream(response);\n\n if (this.currentOperationId === operationId) {\n const reason = this.abortRequested ? 'aborted' : 'complete';\n this.emit({ type: 'agent_end', reason });\n }\n } catch (error) {\n if (this.currentOperationId !== operationId) return;\n\n if (error instanceof Error && error.name === 'AbortError') {\n this.emit({ type: 'agent_end', reason: 'aborted' });\n } else if (error instanceof Error && error.message.match(/^Tool .+ not found$/)) {\n const badTool = error.message.replace('Tool ', '').replace(' not found', '');\n this.emit({\n type: 'error',\n error: new Error(`Unknown tool \"${badTool}\".`),\n retryable: true,\n });\n this.followUpQueue.push(\n `[System] Your previous tool call used \"${badTool}\" which is not a valid tool. Please retry with the correct tool name.`,\n );\n this.emit({ type: 'agent_end', reason: 'error' });\n } else {\n const err = error instanceof Error ? error : new Error(String(error));\n this.emit({ type: 'error', error: err });\n this.emit({ type: 'agent_end', reason: 'error' });\n }\n } finally {\n if (this.currentOperationId === operationId) {\n this.abortController = null;\n this.abortRequested = false;\n }\n\n if (this.currentOperationId === operationId && this.followUpQueue.length > 0) {\n const next = this.followUpQueue.shift()!;\n await this.sendMessage(next);\n }\n }\n }\n\n async getMessages(options?: { limit?: number }): Promise<HarnessMessage[]> {\n if (!this.currentThreadId) return [];\n return this.getMessagesForThread(this.currentThreadId, options);\n }\n\n async getMessagesForThread(threadId: string, options?: { limit?: number }): Promise<HarnessMessage[]> {\n if (!this.config.storage) return [];\n\n const memoryStorage = await this.getMemoryStorage();\n const limit = options?.limit;\n\n if (limit) {\n const result = await memoryStorage.listMessages({\n threadId,\n perPage: limit,\n page: 0,\n orderBy: { field: 'createdAt', direction: 'DESC' },\n });\n return result.messages.map(msg => this.convertToHarnessMessage(msg)).reverse();\n }\n\n const result = await memoryStorage.listMessages({ threadId, perPage: false });\n return result.messages.map(msg => this.convertToHarnessMessage(msg));\n }\n\n async getFirstUserMessageForThread(threadId: string): Promise<HarnessMessage | null> {\n if (!this.config.storage) return null;\n\n const memoryStorage = await this.getMemoryStorage();\n const result = await memoryStorage.listMessages({\n threadId,\n perPage: 5,\n page: 0,\n orderBy: { field: 'createdAt', direction: 'ASC' },\n });\n const userMsg = result.messages.find(m => m.role === 'user');\n return userMsg ? this.convertToHarnessMessage(userMsg) : null;\n }\n\n private convertToHarnessMessage(msg: {\n id: string;\n role: 'user' | 'assistant' | 'system';\n createdAt: Date;\n content: {\n parts: Array<{\n type: string;\n text?: string;\n reasoning?: string;\n toolCallId?: string;\n toolName?: string;\n args?: unknown;\n result?: unknown;\n isError?: boolean;\n toolInvocation?: {\n state: string;\n toolCallId: string;\n toolName: string;\n args?: unknown;\n result?: unknown;\n isError?: boolean;\n };\n [key: string]: unknown;\n }>;\n };\n }): HarnessMessage {\n const content: HarnessMessageContent[] = [];\n\n for (const part of msg.content.parts) {\n switch (part.type) {\n case 'text':\n if (part.text) {\n content.push({ type: 'text', text: part.text });\n }\n break;\n case 'reasoning':\n if (part.reasoning) {\n content.push({ type: 'thinking', thinking: part.reasoning });\n }\n break;\n case 'tool-invocation':\n if (part.toolInvocation) {\n const inv = part.toolInvocation;\n content.push({ type: 'tool_call', id: inv.toolCallId, name: inv.toolName, args: inv.args });\n if (inv.state === 'result' && inv.result !== undefined) {\n content.push({\n type: 'tool_result',\n id: inv.toolCallId,\n name: inv.toolName,\n result: inv.result,\n isError: inv.isError ?? false,\n });\n }\n } else if (part.toolCallId && part.toolName) {\n content.push({ type: 'tool_call', id: part.toolCallId, name: part.toolName, args: part.args });\n }\n break;\n case 'tool-call':\n if (part.toolCallId && part.toolName) {\n content.push({ type: 'tool_call', id: part.toolCallId, name: part.toolName, args: part.args });\n }\n break;\n case 'tool-result':\n if (part.toolCallId && part.toolName) {\n content.push({\n type: 'tool_result',\n id: part.toolCallId,\n name: part.toolName,\n result: part.result,\n isError: part.isError ?? false,\n });\n }\n break;\n }\n }\n\n return { id: msg.id, role: msg.role, content, createdAt: msg.createdAt };\n }\n\n /**\n * Process a stream response (shared between sendMessage and tool approval).\n */\n private async processStream(response: { fullStream: AsyncIterable<any> }): Promise<{ message: HarnessMessage }> {\n let currentMessage: HarnessMessage = {\n id: this.generateId(),\n role: 'assistant',\n content: [],\n createdAt: new Date(),\n };\n\n const textContentById = new Map<string, { index: number; text: string }>();\n const thinkingContentById = new Map<string, { index: number; text: string }>();\n\n for await (const chunk of response.fullStream) {\n if ('runId' in chunk && chunk.runId) {\n this.currentRunId = chunk.runId;\n }\n\n switch (chunk.type) {\n case 'text-start': {\n const textIndex = currentMessage.content.length;\n currentMessage.content.push({ type: 'text', text: '' });\n textContentById.set(chunk.payload.id, { index: textIndex, text: '' });\n this.emit({ type: 'message_start', message: { ...currentMessage } });\n break;\n }\n\n case 'text-delta': {\n const textState = textContentById.get(chunk.payload.id);\n if (textState) {\n textState.text += chunk.payload.text;\n const textContent = currentMessage.content[textState.index];\n if (textContent && textContent.type === 'text') {\n textContent.text = textState.text;\n }\n this.emit({ type: 'message_update', message: { ...currentMessage } });\n }\n break;\n }\n\n case 'reasoning-start': {\n const thinkingIndex = currentMessage.content.length;\n currentMessage.content.push({ type: 'thinking', thinking: '' });\n thinkingContentById.set(chunk.payload.id, { index: thinkingIndex, text: '' });\n this.emit({ type: 'message_update', message: { ...currentMessage } });\n break;\n }\n\n case 'reasoning-delta': {\n const thinkingState = thinkingContentById.get(chunk.payload.id);\n if (thinkingState) {\n thinkingState.text += chunk.payload.text;\n const thinkingContent = currentMessage.content[thinkingState.index];\n if (thinkingContent && thinkingContent.type === 'thinking') {\n thinkingContent.thinking = thinkingState.text;\n }\n this.emit({ type: 'message_update', message: { ...currentMessage } });\n }\n break;\n }\n\n case 'tool-call': {\n const toolCall = chunk.payload;\n currentMessage.content.push({\n type: 'tool_call',\n id: toolCall.toolCallId,\n name: toolCall.toolName,\n args: toolCall.args,\n });\n this.emit({\n type: 'tool_start',\n toolCallId: toolCall.toolCallId,\n toolName: toolCall.toolName,\n args: toolCall.args,\n });\n this.emit({ type: 'message_update', message: { ...currentMessage } });\n break;\n }\n\n case 'tool-result': {\n const toolResult = chunk.payload;\n currentMessage.content.push({\n type: 'tool_result',\n id: toolResult.toolCallId,\n name: toolResult.toolName,\n result: toolResult.result,\n isError: toolResult.isError ?? false,\n });\n this.emit({\n type: 'tool_end',\n toolCallId: toolResult.toolCallId,\n result: toolResult.result,\n isError: toolResult.isError ?? false,\n });\n this.emit({ type: 'message_update', message: { ...currentMessage } });\n break;\n }\n\n case 'tool-error': {\n const toolError = chunk.payload;\n this.emit({ type: 'tool_end', toolCallId: toolError.toolCallId, result: toolError.error, isError: true });\n break;\n }\n\n case 'tool-call-approval': {\n const toolCallId = chunk.payload.toolCallId;\n const toolName = chunk.payload.toolName;\n const toolArgs = chunk.payload.args;\n\n const policy = this.resolveToolApproval(toolName);\n\n if (policy === 'allow') {\n const result = await this.handleToolApprove(toolCallId);\n currentMessage = result.message;\n return { message: currentMessage };\n }\n\n if (policy === 'deny') {\n const result = await this.handleToolDecline(toolCallId);\n currentMessage = result.message;\n return { message: currentMessage };\n }\n\n this.pendingApprovalToolName = toolName;\n this.emit({ type: 'tool_approval_required', toolCallId, toolName, args: toolArgs });\n\n const decision = await new Promise<'approve' | 'decline'>(resolve => {\n this.pendingApprovalResolve = resolve;\n });\n this.pendingApprovalToolName = null;\n\n if (decision === 'approve') {\n const result = await this.handleToolApprove(toolCallId);\n currentMessage = result.message;\n return { message: currentMessage };\n } else {\n const result = await this.handleToolDecline(toolCallId);\n currentMessage = result.message;\n return { message: currentMessage };\n }\n }\n\n case 'error': {\n const streamError =\n chunk.payload.error instanceof Error ? chunk.payload.error : new Error(String(chunk.payload.error));\n this.emit({ type: 'error', error: streamError });\n break;\n }\n\n case 'step-finish': {\n const usage = chunk.payload?.output?.usage;\n if (usage) {\n const promptTokens = usage.promptTokens ?? 0;\n const completionTokens = usage.completionTokens ?? 0;\n const totalTokens = promptTokens + completionTokens;\n\n this.tokenUsage.promptTokens += promptTokens;\n this.tokenUsage.completionTokens += completionTokens;\n this.tokenUsage.totalTokens += totalTokens;\n\n this.persistTokenUsage().catch(() => {});\n this.emit({ type: 'usage_update', usage: { promptTokens, completionTokens, totalTokens } });\n }\n break;\n }\n\n case 'finish': {\n const finishReason = chunk.payload.stepResult?.reason;\n if (finishReason === 'stop' || finishReason === 'end-turn') {\n currentMessage.stopReason = 'complete';\n } else if (finishReason === 'tool-calls') {\n currentMessage.stopReason = 'tool_use';\n } else {\n currentMessage.stopReason = 'complete';\n }\n break;\n }\n\n default:\n break;\n }\n }\n\n this.emit({ type: 'message_end', message: currentMessage });\n return { message: currentMessage };\n }\n\n // ===========================================================================\n // Control\n // ===========================================================================\n\n /**\n * Abort the current operation.\n */\n abort(): void {\n if (this.abortController) {\n this.abortRequested = true;\n try {\n this.abortController.abort();\n } catch {}\n this.abortController = null;\n }\n }\n\n /**\n * Steer the agent mid-stream: aborts current run and sends a new message.\n */\n async steer(content: string): Promise<void> {\n this.abort();\n this.followUpQueue = [];\n await this.sendMessage(content);\n }\n\n /**\n * Queue a follow-up message to be processed after the current operation completes.\n */\n async followUp(content: string): Promise<void> {\n if (this.isRunning()) {\n this.followUpQueue.push(content);\n this.emit({ type: 'follow_up_queued', count: this.followUpQueue.length });\n } else {\n await this.sendMessage(content);\n }\n }\n\n getFollowUpCount(): number {\n return this.followUpQueue.length;\n }\n\n isRunning(): boolean {\n return this.abortController !== null;\n }\n\n getCurrentRunId(): string | null {\n return this.currentRunId;\n }\n\n /**\n * Respond to a pending tool approval from the UI.\n * \"always_allow_category\" grants the tool's category for the rest of the session, then approves.\n */\n resolveToolApprovalDecision(decision: 'approve' | 'decline' | 'always_allow_category'): void {\n if (!this.pendingApprovalResolve) return;\n\n if (decision === 'always_allow_category') {\n const tn = this.pendingApprovalToolName;\n if (tn) {\n const category = this.getToolCategory(tn);\n if (category) {\n this.grantSessionCategory(category);\n }\n }\n this.pendingApprovalResolve('approve');\n } else {\n this.pendingApprovalResolve(decision);\n }\n this.pendingApprovalResolve = null;\n }\n\n // ===========================================================================\n // Question & Plan Approval\n // ===========================================================================\n\n /**\n * Register a pending question resolver.\n * Called by agent tools (e.g., ask_user) to pause execution until the UI responds.\n */\n registerQuestion(questionId: string, resolve: (answer: string) => void): void {\n this.pendingQuestions.set(questionId, resolve);\n }\n\n /**\n * Resolve a pending question with the user's answer.\n * Called by the UI when the user responds to a question dialog.\n */\n respondToQuestion(questionId: string, answer: string): void {\n const resolve = this.pendingQuestions.get(questionId);\n if (resolve) {\n this.pendingQuestions.delete(questionId);\n resolve(answer);\n }\n }\n\n /**\n * Register a pending plan approval resolver.\n * Called by agent tools (e.g., submit_plan) to pause execution until approval.\n */\n registerPlanApproval(\n planId: string,\n resolve: (result: { action: 'approved' | 'rejected'; feedback?: string }) => void,\n ): void {\n this.pendingPlanApprovals.set(planId, resolve);\n }\n\n /**\n * Respond to a pending plan approval.\n * On approval: switches to the default mode, then resolves the promise.\n * On rejection: resolves with feedback (stays in current mode).\n */\n async respondToPlanApproval(\n planId: string,\n response: { action: 'approved' | 'rejected'; feedback?: string },\n ): Promise<void> {\n const resolve = this.pendingPlanApprovals.get(planId);\n if (!resolve) return;\n\n if (response.action === 'approved') {\n const defaultMode = this.config.modes.find(m => m.default) ?? this.config.modes[0];\n if (defaultMode && defaultMode.id !== this.currentModeId) {\n await this.switchMode(defaultMode.id);\n }\n }\n\n this.pendingPlanApprovals.delete(planId);\n resolve(response);\n }\n\n private async handleToolApprove(toolCallId?: string): Promise<{ message: HarnessMessage }> {\n if (!this.currentRunId) {\n throw new Error('No active run to approve tool call for');\n }\n\n const agent = this.getCurrentAgent();\n if (!this.abortController) {\n this.abortController = new AbortController();\n }\n\n const requestContext = await this.buildRequestContext();\n const response = await agent.approveToolCall({\n runId: this.currentRunId,\n toolCallId,\n requireToolApproval: true,\n memory: this.currentThreadId ? { thread: this.currentThreadId, resource: this.resourceId } : undefined,\n abortSignal: this.abortController.signal,\n requestContext,\n toolsets: await this.buildToolsets(requestContext),\n });\n\n return await this.processStream(response);\n }\n\n private async handleToolDecline(toolCallId?: string): Promise<{ message: HarnessMessage }> {\n if (!this.currentRunId) {\n throw new Error('No active run to decline tool call for');\n }\n\n const agent = this.getCurrentAgent();\n if (!this.abortController) {\n this.abortController = new AbortController();\n }\n\n const requestContext = await this.buildRequestContext();\n const response = await agent.declineToolCall({\n runId: this.currentRunId,\n toolCallId,\n requireToolApproval: true,\n memory: this.currentThreadId ? { thread: this.currentThreadId, resource: this.resourceId } : undefined,\n abortSignal: this.abortController.signal,\n requestContext,\n toolsets: await this.buildToolsets(requestContext),\n });\n\n return await this.processStream(response);\n }\n\n // ===========================================================================\n // Event System\n // ===========================================================================\n\n /**\n * Subscribe to harness events. Returns an unsubscribe function.\n */\n subscribe(listener: HarnessEventListener): () => void {\n this.listeners.push(listener);\n return () => {\n const index = this.listeners.indexOf(listener);\n if (index !== -1) {\n this.listeners.splice(index, 1);\n }\n };\n }\n\n private emit(event: HarnessEvent): void {\n for (const listener of this.listeners) {\n try {\n const result = listener(event);\n if (result && typeof result === 'object' && 'catch' in result) {\n (result as Promise<void>).catch(err => console.error('Error in harness event listener:', err));\n }\n } catch (err) {\n console.error('Error in harness event listener:', err);\n }\n }\n }\n\n // ===========================================================================\n // Runtime Context\n // ===========================================================================\n\n /**\n * Build the toolsets object that includes built-in harness tools (ask_user, submit_plan,\n * and optionally subagent) plus any user-configured tools.\n * Used by sendMessage, handleToolApprove, and handleToolDecline.\n */\n private async buildToolsets(requestContext: RequestContext): Promise<ToolsetsInput> {\n const builtInTools: ToolsInput = {\n ask_user: askUserTool,\n submit_plan: submitPlanTool,\n };\n\n // Resolve user-configured harness tools (needed for both the harness toolset and subagent allowedHarnessTools)\n let resolvedHarnessTools = undefined;\n if (this.config.tools) {\n const tools =\n typeof this.config.tools === 'function' ? await this.config.tools({ requestContext }) : this.config.tools;\n if (tools) {\n resolvedHarnessTools = tools;\n }\n }\n\n // Auto-create subagent tool if subagent definitions are configured\n if (this.config.subagents?.length && this.config.resolveModel) {\n const currentMode = this.getCurrentMode();\n builtInTools.subagent = createSubagentTool({\n subagents: this.config.subagents,\n resolveModel: this.config.resolveModel,\n harnessTools: resolvedHarnessTools,\n fallbackModelId: currentMode?.defaultModelId,\n });\n }\n\n if (resolvedHarnessTools) {\n return { harnessBuiltIn: builtInTools, harness: resolvedHarnessTools };\n }\n return { harnessBuiltIn: builtInTools };\n }\n\n /**\n * Build request context for agent execution.\n * Tools can access harness state via requestContext.get('harness').\n */\n private async buildRequestContext(): Promise<RequestContext> {\n const harnessContext: HarnessRequestContext<TState> = {\n harnessId: this.id,\n state: this.getState(),\n getState: () => this.getState(),\n setState: updates => this.setState(updates),\n threadId: this.currentThreadId,\n resourceId: this.resourceId,\n modeId: this.currentModeId,\n abortSignal: this.abortController?.signal,\n workspace: this.workspace,\n emitEvent: event => this.emit(event),\n registerQuestion: (questionId, resolve) => this.registerQuestion(questionId, resolve),\n registerPlanApproval: (planId, resolve) => this.registerPlanApproval(planId, resolve),\n getSubagentModelId: (agentType?: string) => this.getSubagentModelId(agentType),\n };\n\n const requestContext = new RequestContext([['harness', harnessContext]]) as RequestContext;\n\n if (this.workspaceFn) {\n harnessContext.workspace = await Promise.resolve(this.workspaceFn({ requestContext }));\n }\n\n return requestContext;\n }\n\n // ===========================================================================\n // Token Usage\n // ===========================================================================\n\n getTokenUsage(): { promptTokens: number; completionTokens: number; totalTokens: number } {\n return { ...this.tokenUsage };\n }\n\n private async persistTokenUsage(): Promise<void> {\n if (!this.currentThreadId || !this.config.storage) return;\n\n try {\n const memoryStorage = await this.getMemoryStorage();\n const thread = await memoryStorage.getThreadById({ threadId: this.currentThreadId });\n if (thread) {\n await memoryStorage.saveThread({\n thread: {\n ...thread,\n metadata: { ...thread.metadata, tokenUsage: this.tokenUsage },\n updatedAt: new Date(),\n },\n });\n }\n } catch {\n // Token persistence is not critical\n }\n }\n\n // ===========================================================================\n // Workspace\n // ===========================================================================\n\n getWorkspace(): Workspace | undefined {\n return this.workspace;\n }\n\n hasWorkspace(): boolean {\n return this.config.workspace !== undefined;\n }\n\n isWorkspaceReady(): boolean {\n if (this.workspaceFn) return true;\n return this.workspaceInitialized && this.workspace !== undefined;\n }\n\n async destroyWorkspace(): Promise<void> {\n if (this.workspaceFn) return;\n if (this.workspace && this.workspaceInitialized) {\n try {\n this.emit({ type: 'workspace_status_changed', status: 'destroying' });\n await this.workspace.destroy();\n this.emit({ type: 'workspace_status_changed', status: 'destroyed' });\n } catch (error) {\n console.warn('Workspace destroy failed:', error);\n } finally {\n this.workspaceInitialized = false;\n }\n }\n }\n\n // ===========================================================================\n // Heartbeat Handlers\n // ===========================================================================\n\n private startHeartbeats(): void {\n const handlers = this.config.heartbeatHandlers;\n if (!handlers?.length) return;\n\n for (const hb of handlers) {\n if (this.heartbeatTimers.has(hb.id)) continue;\n\n const run = async () => {\n try {\n await hb.handler();\n } catch (error) {\n console.error(`[Heartbeat:${hb.id}] failed:`, error);\n }\n };\n\n if (hb.immediate !== false) {\n void run();\n }\n\n const timer = setInterval(run, hb.intervalMs);\n timer.unref();\n this.heartbeatTimers.set(hb.id, { timer, shutdown: hb.shutdown });\n }\n }\n\n registerHeartbeat(handler: HeartbeatHandler): void {\n void this.removeHeartbeat(handler.id);\n\n const run = async () => {\n try {\n await handler.handler();\n } catch (error) {\n console.error(`[Heartbeat:${handler.id}] failed:`, error);\n }\n };\n\n if (handler.immediate !== false) {\n void run();\n }\n\n const timer = setInterval(run, handler.intervalMs);\n timer.unref();\n this.heartbeatTimers.set(handler.id, { timer, shutdown: handler.shutdown });\n }\n\n async removeHeartbeat(id: string): Promise<void> {\n const entry = this.heartbeatTimers.get(id);\n if (entry) {\n clearInterval(entry.timer);\n this.heartbeatTimers.delete(id);\n try {\n await entry.shutdown?.();\n } catch (error) {\n console.error(`[Heartbeat:${id}] shutdown failed:`, error);\n }\n }\n }\n\n async stopHeartbeats(): Promise<void> {\n const entries = [...this.heartbeatTimers.entries()];\n this.heartbeatTimers.clear();\n\n for (const [id, entry] of entries) {\n clearInterval(entry.timer);\n try {\n await entry.shutdown?.();\n } catch (error) {\n console.error(`[Heartbeat:${id}] shutdown failed:`, error);\n }\n }\n }\n\n // ===========================================================================\n // Session\n // ===========================================================================\n\n async getSession(): Promise<HarnessSession> {\n return {\n currentThreadId: this.currentThreadId,\n currentModeId: this.currentModeId,\n threads: await this.listThreads(),\n };\n }\n\n // ===========================================================================\n // Utilities\n // ===========================================================================\n\n private generateId(): string {\n if (this.config.idGenerator) {\n return this.config.idGenerator();\n }\n return `${Date.now()}-${Math.random().toString(36).slice(2, 11)}`;\n }\n}\n"]}
@@ -0,0 +1,65 @@
1
+ import type { ToolsInput } from '../agent/types.js';
2
+ import type { MastraLanguageModel } from '../llm/model/shared.types.js';
3
+ import type { HarnessSubagent } from './types.js';
4
+ /**
5
+ * Built-in harness tool: ask the user a question and wait for their response.
6
+ * Supports single-select options and free-text input.
7
+ * The tool pauses execution while the UI shows the dialog.
8
+ */
9
+ export declare const askUserTool: import("../tools").Tool<{
10
+ question: string;
11
+ options?: {
12
+ label: string;
13
+ description?: string | undefined;
14
+ }[] | undefined;
15
+ }, {
16
+ content: string;
17
+ isError: boolean;
18
+ }, unknown, unknown, import("../tools").ToolExecutionContext<unknown, unknown, unknown>, "ask_user", unknown>;
19
+ /**
20
+ * Built-in harness tool: submit a plan for user review.
21
+ * The plan renders in the UI with approve/reject options.
22
+ * On approval, the harness switches to the default mode.
23
+ */
24
+ export declare const submitPlanTool: import("../tools").Tool<{
25
+ plan: string;
26
+ title?: string | undefined;
27
+ }, {
28
+ content: string;
29
+ isError: boolean;
30
+ }, unknown, unknown, import("../tools").ToolExecutionContext<unknown, unknown, unknown>, "submit_plan", unknown>;
31
+ export interface CreateSubagentToolOptions {
32
+ subagents: HarnessSubagent[];
33
+ resolveModel: (modelId: string) => MastraLanguageModel;
34
+ /** Resolved harness tools (already evaluated from DynamicArgument) */
35
+ harnessTools?: ToolsInput;
36
+ /** Fallback model ID when subagent definition has no defaultModelId */
37
+ fallbackModelId?: string;
38
+ }
39
+ /**
40
+ * Creates a `subagent` tool from registered subagent definitions.
41
+ * The tool spawns a fresh Agent per invocation with constrained tools,
42
+ * streams the response, and forwards events to the harness.
43
+ */
44
+ export declare function createSubagentTool(opts: CreateSubagentToolOptions): import("../tools").Tool<{
45
+ task: string;
46
+ agentType: string;
47
+ modelId?: string | undefined;
48
+ }, {
49
+ content: string;
50
+ isError: boolean;
51
+ }, unknown, unknown, import("../tools").ToolExecutionContext<unknown, unknown, unknown>, "subagent", unknown>;
52
+ /**
53
+ * Parse subagent metadata from a tool result string.
54
+ * Returns the metadata and the cleaned result text (without the tag).
55
+ */
56
+ export declare function parseSubagentMeta(content: string): {
57
+ text: string;
58
+ modelId?: string;
59
+ durationMs?: number;
60
+ toolCalls?: Array<{
61
+ name: string;
62
+ isError: boolean;
63
+ }>;
64
+ };
65
+ //# sourceMappingURL=tools.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tools.d.ts","sourceRoot":"","sources":["../../src/harness/tools.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AACjD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AAGrE,OAAO,KAAK,EAAyB,eAAe,EAAE,MAAM,SAAS,CAAC;AAKtE;;;;GAIG;AACH,eAAO,MAAM,WAAW;;;;;;;;;6GAyDtB,CAAC;AAEH;;;;GAIG;AACH,eAAO,MAAM,cAAc;;;;;;gHA+DzB,CAAC;AAMH,MAAM,WAAW,yBAAyB;IACxC,SAAS,EAAE,eAAe,EAAE,CAAC;IAC7B,YAAY,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,mBAAmB,CAAC;IACvD,sEAAsE;IACtE,YAAY,CAAC,EAAE,UAAU,CAAC;IAC1B,uEAAuE;IACvE,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,yBAAyB;;;;;;;8GAyLjE;AAgBD;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG;IAClD,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,OAAO,CAAA;KAAE,CAAC,CAAC;CACvD,CAkBA"}