@mastra/server 1.47.0-alpha.5 → 1.47.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 (267) hide show
  1. package/CHANGELOG.md +151 -0
  2. package/dist/_types/@mastra_schema-compat/dist/schema.types.d.ts +4 -1
  3. package/dist/{api-schema-manifest-OQOZ53HZ.js → api-schema-manifest-LT57YVGI.js} +3 -3
  4. package/dist/{api-schema-manifest-OQOZ53HZ.js.map → api-schema-manifest-LT57YVGI.js.map} +1 -1
  5. package/dist/{api-schema-manifest-SYCCXMOC.cjs → api-schema-manifest-SJMFHZHR.cjs} +4 -4
  6. package/dist/{api-schema-manifest-SYCCXMOC.cjs.map → api-schema-manifest-SJMFHZHR.cjs.map} +1 -1
  7. package/dist/{chunk-XOQEKMY2.cjs → chunk-2NGSYVI3.cjs} +34 -34
  8. package/dist/{chunk-XOQEKMY2.cjs.map → chunk-2NGSYVI3.cjs.map} +1 -1
  9. package/dist/{chunk-S2HKHYJ3.cjs → chunk-2R52ZPSI.cjs} +9 -9
  10. package/dist/{chunk-S2HKHYJ3.cjs.map → chunk-2R52ZPSI.cjs.map} +1 -1
  11. package/dist/{chunk-ZZOHO2FT.js → chunk-34WNPIGV.js} +5 -5
  12. package/dist/{chunk-ZZOHO2FT.js.map → chunk-34WNPIGV.js.map} +1 -1
  13. package/dist/{chunk-UZ43QCIA.cjs → chunk-3KBURDTO.cjs} +12 -12
  14. package/dist/{chunk-UZ43QCIA.cjs.map → chunk-3KBURDTO.cjs.map} +1 -1
  15. package/dist/{chunk-RVD3DGBZ.cjs → chunk-42M6Y2OD.cjs} +3 -3
  16. package/dist/{chunk-RVD3DGBZ.cjs.map → chunk-42M6Y2OD.cjs.map} +1 -1
  17. package/dist/{chunk-Q7EQLQS5.js → chunk-43T7OG7P.js} +16 -9
  18. package/dist/chunk-43T7OG7P.js.map +1 -0
  19. package/dist/{chunk-5V2QWK2S.js → chunk-4E7VGBSM.js} +5 -5
  20. package/dist/{chunk-5V2QWK2S.js.map → chunk-4E7VGBSM.js.map} +1 -1
  21. package/dist/{chunk-PLWZVSGT.js → chunk-4UZTUQYZ.js} +5 -5
  22. package/dist/{chunk-PLWZVSGT.js.map → chunk-4UZTUQYZ.js.map} +1 -1
  23. package/dist/{chunk-V23ANIEC.cjs → chunk-4WRZ6BK4.cjs} +4 -4
  24. package/dist/{chunk-V23ANIEC.cjs.map → chunk-4WRZ6BK4.cjs.map} +1 -1
  25. package/dist/{chunk-VRERZRJQ.js → chunk-4ZD4KLXD.js} +4 -4
  26. package/dist/{chunk-VRERZRJQ.js.map → chunk-4ZD4KLXD.js.map} +1 -1
  27. package/dist/{chunk-K3FM6RLZ.cjs → chunk-5JVILML3.cjs} +9 -9
  28. package/dist/{chunk-K3FM6RLZ.cjs.map → chunk-5JVILML3.cjs.map} +1 -1
  29. package/dist/{chunk-7FIDKZUG.cjs → chunk-6CUVVNHE.cjs} +6 -6
  30. package/dist/{chunk-7FIDKZUG.cjs.map → chunk-6CUVVNHE.cjs.map} +1 -1
  31. package/dist/{chunk-QQCQV7ZF.cjs → chunk-7GNT5KQE.cjs} +3 -2
  32. package/dist/chunk-7GNT5KQE.cjs.map +1 -0
  33. package/dist/{chunk-4ZHHKMDQ.cjs → chunk-AC4YST2M.cjs} +3 -3
  34. package/dist/{chunk-4ZHHKMDQ.cjs.map → chunk-AC4YST2M.cjs.map} +1 -1
  35. package/dist/{chunk-R4O5HVDI.js → chunk-AGWL3ZLU.js} +3 -3
  36. package/dist/{chunk-R4O5HVDI.js.map → chunk-AGWL3ZLU.js.map} +1 -1
  37. package/dist/{chunk-C2A2BZFY.js → chunk-AMWGBQZU.js} +4 -4
  38. package/dist/{chunk-C2A2BZFY.js.map → chunk-AMWGBQZU.js.map} +1 -1
  39. package/dist/{chunk-TPZFGGU4.cjs → chunk-CCUQDEQW.cjs} +283 -283
  40. package/dist/chunk-CCUQDEQW.cjs.map +1 -0
  41. package/dist/{chunk-E2JNW3QM.js → chunk-D6RO4IFO.js} +3 -3
  42. package/dist/{chunk-E2JNW3QM.js.map → chunk-D6RO4IFO.js.map} +1 -1
  43. package/dist/{chunk-DULEYONH.cjs → chunk-D7YMTEPI.cjs} +13 -13
  44. package/dist/{chunk-DULEYONH.cjs.map → chunk-D7YMTEPI.cjs.map} +1 -1
  45. package/dist/{chunk-2Z3TLC4L.js → chunk-DSHITLJ4.js} +4 -4
  46. package/dist/{chunk-2Z3TLC4L.js.map → chunk-DSHITLJ4.js.map} +1 -1
  47. package/dist/{chunk-SJPWXUKZ.js → chunk-DVCCSRFP.js} +3 -3
  48. package/dist/{chunk-SJPWXUKZ.js.map → chunk-DVCCSRFP.js.map} +1 -1
  49. package/dist/{chunk-Y3MYKCTO.cjs → chunk-EBUK5R3S.cjs} +13 -13
  50. package/dist/{chunk-Y3MYKCTO.cjs.map → chunk-EBUK5R3S.cjs.map} +1 -1
  51. package/dist/{chunk-JY2LHUT4.cjs → chunk-EKRIVYU4.cjs} +22 -22
  52. package/dist/{chunk-JY2LHUT4.cjs.map → chunk-EKRIVYU4.cjs.map} +1 -1
  53. package/dist/{chunk-IBUJJIRW.js → chunk-EOGTJIPF.js} +3 -3
  54. package/dist/{chunk-IBUJJIRW.js.map → chunk-EOGTJIPF.js.map} +1 -1
  55. package/dist/{chunk-ONBABU5V.cjs → chunk-EYCW4Z4H.cjs} +10 -10
  56. package/dist/{chunk-ONBABU5V.cjs.map → chunk-EYCW4Z4H.cjs.map} +1 -1
  57. package/dist/{chunk-GU4AEOGA.cjs → chunk-F6VL25IA.cjs} +7 -7
  58. package/dist/{chunk-GU4AEOGA.cjs.map → chunk-F6VL25IA.cjs.map} +1 -1
  59. package/dist/{chunk-JZJ3PP2H.cjs → chunk-GOD4LLZT.cjs} +10 -10
  60. package/dist/{chunk-JZJ3PP2H.cjs.map → chunk-GOD4LLZT.cjs.map} +1 -1
  61. package/dist/{chunk-NEPOKWAA.js → chunk-GQI4NKKD.js} +5 -5
  62. package/dist/{chunk-NEPOKWAA.js.map → chunk-GQI4NKKD.js.map} +1 -1
  63. package/dist/{chunk-KGUHJRHZ.cjs → chunk-HDIYJI2Z.cjs} +3 -3
  64. package/dist/{chunk-KGUHJRHZ.cjs.map → chunk-HDIYJI2Z.cjs.map} +1 -1
  65. package/dist/{chunk-TPGA2ZTS.js → chunk-IEONDWGQ.js} +4 -4
  66. package/dist/{chunk-TPGA2ZTS.js.map → chunk-IEONDWGQ.js.map} +1 -1
  67. package/dist/{chunk-6HRGFBAF.cjs → chunk-IY4MNGI3.cjs} +63 -63
  68. package/dist/{chunk-6HRGFBAF.cjs.map → chunk-IY4MNGI3.cjs.map} +1 -1
  69. package/dist/{chunk-3ENQND57.js → chunk-JBSUT5XF.js} +3 -3
  70. package/dist/{chunk-3ENQND57.js.map → chunk-JBSUT5XF.js.map} +1 -1
  71. package/dist/{chunk-VNWPOCOT.cjs → chunk-JJDLXVWR.cjs} +19 -19
  72. package/dist/{chunk-VNWPOCOT.cjs.map → chunk-JJDLXVWR.cjs.map} +1 -1
  73. package/dist/{chunk-F5EEKLC4.js → chunk-KA6FUBC5.js} +6 -6
  74. package/dist/{chunk-F5EEKLC4.js.map → chunk-KA6FUBC5.js.map} +1 -1
  75. package/dist/{chunk-E345K7K7.js → chunk-KGJGR6GO.js} +5 -5
  76. package/dist/{chunk-E345K7K7.js.map → chunk-KGJGR6GO.js.map} +1 -1
  77. package/dist/{chunk-YLWKZ3VK.cjs → chunk-KIDHIRVO.cjs} +7 -7
  78. package/dist/{chunk-YLWKZ3VK.cjs.map → chunk-KIDHIRVO.cjs.map} +1 -1
  79. package/dist/{chunk-T32FQPWH.cjs → chunk-KR7FUFVK.cjs} +10 -10
  80. package/dist/{chunk-T32FQPWH.cjs.map → chunk-KR7FUFVK.cjs.map} +1 -1
  81. package/dist/{chunk-RY5RETAD.js → chunk-L4DD3HSB.js} +3 -3
  82. package/dist/{chunk-RY5RETAD.js.map → chunk-L4DD3HSB.js.map} +1 -1
  83. package/dist/{chunk-BB6RVOJY.js → chunk-LA4AQGZA.js} +3 -3
  84. package/dist/{chunk-BB6RVOJY.js.map → chunk-LA4AQGZA.js.map} +1 -1
  85. package/dist/{chunk-MMY24AC4.js → chunk-LUPNAVPL.js} +3 -3
  86. package/dist/{chunk-MMY24AC4.js.map → chunk-LUPNAVPL.js.map} +1 -1
  87. package/dist/{chunk-PSC3HAPW.cjs → chunk-MM7ONP57.cjs} +59 -59
  88. package/dist/{chunk-PSC3HAPW.cjs.map → chunk-MM7ONP57.cjs.map} +1 -1
  89. package/dist/{chunk-CIWN2JM4.js → chunk-MX3JQ3ZU.js} +3 -3
  90. package/dist/{chunk-CIWN2JM4.js.map → chunk-MX3JQ3ZU.js.map} +1 -1
  91. package/dist/{chunk-M5DAKMVZ.cjs → chunk-OE3KATAT.cjs} +4 -4
  92. package/dist/{chunk-M5DAKMVZ.cjs.map → chunk-OE3KATAT.cjs.map} +1 -1
  93. package/dist/{chunk-OT2JWWCT.cjs → chunk-OU4L45LL.cjs} +8 -8
  94. package/dist/{chunk-OT2JWWCT.cjs.map → chunk-OU4L45LL.cjs.map} +1 -1
  95. package/dist/{chunk-IRJJ2JJG.cjs → chunk-OZ64QWKA.cjs} +12 -12
  96. package/dist/{chunk-IRJJ2JJG.cjs.map → chunk-OZ64QWKA.cjs.map} +1 -1
  97. package/dist/{chunk-PUW3RA3B.js → chunk-P6TSZJ4I.js} +4 -4
  98. package/dist/{chunk-PUW3RA3B.js.map → chunk-P6TSZJ4I.js.map} +1 -1
  99. package/dist/{chunk-M25LVAUH.js → chunk-P7HCBIOK.js} +4 -4
  100. package/dist/{chunk-M25LVAUH.js.map → chunk-P7HCBIOK.js.map} +1 -1
  101. package/dist/{chunk-3ZV6GYQI.cjs → chunk-PVZX6FFO.cjs} +16 -9
  102. package/dist/chunk-PVZX6FFO.cjs.map +1 -0
  103. package/dist/{chunk-UXO4GWPT.js → chunk-Q6TDIK2A.js} +6 -6
  104. package/dist/{chunk-UXO4GWPT.js.map → chunk-Q6TDIK2A.js.map} +1 -1
  105. package/dist/{chunk-4BJSE3LM.js → chunk-QECRXNAM.js} +3 -3
  106. package/dist/{chunk-4BJSE3LM.js.map → chunk-QECRXNAM.js.map} +1 -1
  107. package/dist/{chunk-RM4ITWAQ.cjs → chunk-QRTZCP42.cjs} +10 -10
  108. package/dist/{chunk-RM4ITWAQ.cjs.map → chunk-QRTZCP42.cjs.map} +1 -1
  109. package/dist/{chunk-KBOC52HT.js → chunk-RETWAY24.js} +3 -3
  110. package/dist/{chunk-KBOC52HT.js.map → chunk-RETWAY24.js.map} +1 -1
  111. package/dist/{chunk-3WE5YAL5.js → chunk-RLAOC73C.js} +330 -327
  112. package/dist/chunk-RLAOC73C.js.map +1 -0
  113. package/dist/{chunk-MLLGO6XZ.js → chunk-S57DVRYK.js} +3 -3
  114. package/dist/{chunk-MLLGO6XZ.js.map → chunk-S57DVRYK.js.map} +1 -1
  115. package/dist/{chunk-XQ5INMFW.js → chunk-SK2BQPVT.js} +5 -5
  116. package/dist/{chunk-XQ5INMFW.js.map → chunk-SK2BQPVT.js.map} +1 -1
  117. package/dist/{chunk-7DKSWNOM.cjs → chunk-SOQPH6H2.cjs} +182 -182
  118. package/dist/{chunk-7DKSWNOM.cjs.map → chunk-SOQPH6H2.cjs.map} +1 -1
  119. package/dist/{chunk-56AYHXOU.js → chunk-SXZS6VZ3.js} +3 -3
  120. package/dist/{chunk-56AYHXOU.js.map → chunk-SXZS6VZ3.js.map} +1 -1
  121. package/dist/{chunk-OHWAEEZJ.js → chunk-UACKERCG.js} +3 -3
  122. package/dist/{chunk-OHWAEEZJ.js.map → chunk-UACKERCG.js.map} +1 -1
  123. package/dist/{chunk-4LQSGGSH.cjs → chunk-UGI45E76.cjs} +363 -360
  124. package/dist/chunk-UGI45E76.cjs.map +1 -0
  125. package/dist/{chunk-DEK4ZGUR.cjs → chunk-UQWJQWSK.cjs} +15 -15
  126. package/dist/{chunk-DEK4ZGUR.cjs.map → chunk-UQWJQWSK.cjs.map} +1 -1
  127. package/dist/{chunk-46Y4Y2RB.js → chunk-VEKFI5QZ.js} +3 -3
  128. package/dist/{chunk-46Y4Y2RB.js.map → chunk-VEKFI5QZ.js.map} +1 -1
  129. package/dist/{chunk-4JILES3G.js → chunk-VJYMPHQQ.js} +3 -2
  130. package/dist/chunk-VJYMPHQQ.js.map +1 -0
  131. package/dist/{chunk-C4U5EL4H.js → chunk-VQQSMW6M.js} +7 -7
  132. package/dist/{chunk-C4U5EL4H.js.map → chunk-VQQSMW6M.js.map} +1 -1
  133. package/dist/{chunk-BTMYAVRX.cjs → chunk-WUT3UHD6.cjs} +12 -12
  134. package/dist/{chunk-BTMYAVRX.cjs.map → chunk-WUT3UHD6.cjs.map} +1 -1
  135. package/dist/{chunk-HZWJL5Y4.js → chunk-XILM7MA7.js} +4 -4
  136. package/dist/{chunk-HZWJL5Y4.js.map → chunk-XILM7MA7.js.map} +1 -1
  137. package/dist/{chunk-73MURMD2.cjs → chunk-XLSJQAEP.cjs} +6 -6
  138. package/dist/{chunk-73MURMD2.cjs.map → chunk-XLSJQAEP.cjs.map} +1 -1
  139. package/dist/{chunk-WKSF3TVK.js → chunk-XRE4KFIZ.js} +7 -7
  140. package/dist/{chunk-WKSF3TVK.js.map → chunk-XRE4KFIZ.js.map} +1 -1
  141. package/dist/{chunk-TCWIDHH6.cjs → chunk-XTRPN52A.cjs} +3 -3
  142. package/dist/{chunk-TCWIDHH6.cjs.map → chunk-XTRPN52A.cjs.map} +1 -1
  143. package/dist/{chunk-UD7JBYUI.cjs → chunk-YIBM2OYI.cjs} +38 -38
  144. package/dist/{chunk-UD7JBYUI.cjs.map → chunk-YIBM2OYI.cjs.map} +1 -1
  145. package/dist/{chunk-UITLSJUW.cjs → chunk-YOHMEY6Q.cjs} +24 -24
  146. package/dist/{chunk-UITLSJUW.cjs.map → chunk-YOHMEY6Q.cjs.map} +1 -1
  147. package/dist/{chunk-56TEDJND.js → chunk-YUQSGB5C.js} +3 -3
  148. package/dist/{chunk-56TEDJND.js.map → chunk-YUQSGB5C.js.map} +1 -1
  149. package/dist/{chunk-GZ4HWZWE.cjs → chunk-YWUVDFQZ.cjs} +3 -3
  150. package/dist/{chunk-GZ4HWZWE.cjs.map → chunk-YWUVDFQZ.cjs.map} +1 -1
  151. package/dist/{chunk-EQ7LRJEB.cjs → chunk-Z6YXO2T6.cjs} +48 -48
  152. package/dist/{chunk-EQ7LRJEB.cjs.map → chunk-Z6YXO2T6.cjs.map} +1 -1
  153. package/dist/{chunk-TS5QYSEZ.js → chunk-Z7C226TD.js} +6 -6
  154. package/dist/{chunk-TS5QYSEZ.js.map → chunk-Z7C226TD.js.map} +1 -1
  155. package/dist/{chunk-M43CP74T.js → chunk-ZQSX425Q.js} +70 -70
  156. package/dist/chunk-ZQSX425Q.js.map +1 -0
  157. package/dist/{chunk-BTIK5TXF.cjs → chunk-ZVZBZOBY.cjs} +8 -8
  158. package/dist/{chunk-BTIK5TXF.cjs.map → chunk-ZVZBZOBY.cjs.map} +1 -1
  159. package/dist/{dist-OWZWIJZY.js → dist-EWY5C2JK.js} +5 -5
  160. package/dist/{dist-OWZWIJZY.js.map → dist-EWY5C2JK.js.map} +1 -1
  161. package/dist/{dist-TXDLPF66.cjs → dist-VNWFQ5X6.cjs} +20 -20
  162. package/dist/{dist-TXDLPF66.cjs.map → dist-VNWFQ5X6.cjs.map} +1 -1
  163. package/dist/docs/SKILL.md +1 -1
  164. package/dist/docs/assets/SOURCE_MAP.json +1 -1
  165. package/dist/{observational-memory-Y5T2OR2Y-XDEBXWNA.cjs → observational-memory-NC6DQQWD-JNRVNM7E.cjs} +26 -26
  166. package/dist/{observational-memory-Y5T2OR2Y-XDEBXWNA.cjs.map → observational-memory-NC6DQQWD-JNRVNM7E.cjs.map} +1 -1
  167. package/dist/{observational-memory-Y5T2OR2Y-QDHR4QEU.js → observational-memory-NC6DQQWD-WWE3XZFF.js} +3 -3
  168. package/dist/{observational-memory-Y5T2OR2Y-QDHR4QEU.js.map → observational-memory-NC6DQQWD-WWE3XZFF.js.map} +1 -1
  169. package/dist/server/handlers/a2a.cjs +14 -14
  170. package/dist/server/handlers/a2a.js +1 -1
  171. package/dist/server/handlers/agent-builder.cjs +17 -17
  172. package/dist/server/handlers/agent-builder.js +1 -1
  173. package/dist/server/handlers/agent-controller.cjs +144 -0
  174. package/dist/server/handlers/agent-controller.cjs.map +1 -0
  175. package/dist/server/handlers/{harness.d.ts → agent-controller.d.ts} +141 -141
  176. package/dist/server/handlers/agent-controller.d.ts.map +1 -0
  177. package/dist/server/handlers/agent-controller.js +3 -0
  178. package/dist/server/handlers/agent-controller.js.map +1 -0
  179. package/dist/server/handlers/agent-versions.cjs +8 -8
  180. package/dist/server/handlers/agent-versions.js +1 -1
  181. package/dist/server/handlers/agents.cjs +46 -46
  182. package/dist/server/handlers/agents.d.ts +2 -0
  183. package/dist/server/handlers/agents.d.ts.map +1 -1
  184. package/dist/server/handlers/agents.js +1 -1
  185. package/dist/server/handlers/auth.cjs +13 -13
  186. package/dist/server/handlers/auth.js +1 -1
  187. package/dist/server/handlers/authorship.cjs +12 -12
  188. package/dist/server/handlers/authorship.js +1 -1
  189. package/dist/server/handlers/builder-registry.cjs +6 -6
  190. package/dist/server/handlers/builder-registry.js +1 -1
  191. package/dist/server/handlers/channels.cjs +5 -5
  192. package/dist/server/handlers/channels.js +1 -1
  193. package/dist/server/handlers/conversations.cjs +5 -5
  194. package/dist/server/handlers/conversations.js +1 -1
  195. package/dist/server/handlers/editor-builder.cjs +6 -6
  196. package/dist/server/handlers/editor-builder.js +1 -1
  197. package/dist/server/handlers/favorites-enrichment.cjs +4 -4
  198. package/dist/server/handlers/favorites-enrichment.js +1 -1
  199. package/dist/server/handlers/logs.cjs +4 -4
  200. package/dist/server/handlers/logs.js +1 -1
  201. package/dist/server/handlers/mcp-client-versions.cjs +8 -8
  202. package/dist/server/handlers/mcp-client-versions.js +1 -1
  203. package/dist/server/handlers/memory.cjs +27 -27
  204. package/dist/server/handlers/memory.js +1 -1
  205. package/dist/server/handlers/prompt-block-versions.cjs +8 -8
  206. package/dist/server/handlers/prompt-block-versions.js +1 -1
  207. package/dist/server/handlers/responses.cjs +4 -4
  208. package/dist/server/handlers/responses.js +1 -1
  209. package/dist/server/handlers/responses.storage.cjs +8 -8
  210. package/dist/server/handlers/responses.storage.js +1 -1
  211. package/dist/server/handlers/scorer-versions.cjs +8 -8
  212. package/dist/server/handlers/scorer-versions.js +1 -1
  213. package/dist/server/handlers/scores.cjs +7 -7
  214. package/dist/server/handlers/scores.js +1 -1
  215. package/dist/server/handlers/stored-agent-favorites.cjs +3 -3
  216. package/dist/server/handlers/stored-agent-favorites.js +1 -1
  217. package/dist/server/handlers/stored-agents.cjs +10 -10
  218. package/dist/server/handlers/stored-agents.js +1 -1
  219. package/dist/server/handlers/stored-mcp-clients.cjs +6 -6
  220. package/dist/server/handlers/stored-mcp-clients.js +1 -1
  221. package/dist/server/handlers/stored-prompt-blocks.cjs +6 -6
  222. package/dist/server/handlers/stored-prompt-blocks.js +1 -1
  223. package/dist/server/handlers/stored-scorers.cjs +6 -6
  224. package/dist/server/handlers/stored-scorers.js +1 -1
  225. package/dist/server/handlers/stored-skill-favorites.cjs +3 -3
  226. package/dist/server/handlers/stored-skill-favorites.js +1 -1
  227. package/dist/server/handlers/stored-skills.cjs +7 -7
  228. package/dist/server/handlers/stored-skills.js +1 -1
  229. package/dist/server/handlers/stored-workspaces.cjs +6 -6
  230. package/dist/server/handlers/stored-workspaces.js +1 -1
  231. package/dist/server/handlers/system.cjs +3 -3
  232. package/dist/server/handlers/system.js +1 -1
  233. package/dist/server/handlers/tool-providers.cjs +14 -14
  234. package/dist/server/handlers/tool-providers.js +1 -1
  235. package/dist/server/handlers/tools.cjs +6 -6
  236. package/dist/server/handlers/tools.js +1 -1
  237. package/dist/server/handlers/utils.cjs +10 -10
  238. package/dist/server/handlers/utils.js +1 -1
  239. package/dist/server/handlers/workflows.cjs +27 -27
  240. package/dist/server/handlers/workflows.js +1 -1
  241. package/dist/server/handlers.cjs +22 -22
  242. package/dist/server/handlers.js +10 -10
  243. package/dist/server/schemas/agents.d.ts +1 -0
  244. package/dist/server/schemas/agents.d.ts.map +1 -1
  245. package/dist/server/schemas/index.cjs +536 -536
  246. package/dist/server/schemas/index.js +9 -9
  247. package/dist/server/server-adapter/index.cjs +42 -42
  248. package/dist/server/server-adapter/index.js +6 -6
  249. package/dist/server/server-adapter/routes/agent-controller.d.ts +6 -0
  250. package/dist/server/server-adapter/routes/agent-controller.d.ts.map +1 -0
  251. package/dist/server/server-adapter/routes/index.d.ts.map +1 -1
  252. package/package.json +10 -10
  253. package/dist/chunk-3WE5YAL5.js.map +0 -1
  254. package/dist/chunk-3ZV6GYQI.cjs.map +0 -1
  255. package/dist/chunk-4JILES3G.js.map +0 -1
  256. package/dist/chunk-4LQSGGSH.cjs.map +0 -1
  257. package/dist/chunk-M43CP74T.js.map +0 -1
  258. package/dist/chunk-Q7EQLQS5.js.map +0 -1
  259. package/dist/chunk-QQCQV7ZF.cjs.map +0 -1
  260. package/dist/chunk-TPZFGGU4.cjs.map +0 -1
  261. package/dist/server/handlers/harness.cjs +0 -144
  262. package/dist/server/handlers/harness.cjs.map +0 -1
  263. package/dist/server/handlers/harness.d.ts.map +0 -1
  264. package/dist/server/handlers/harness.js +0 -3
  265. package/dist/server/handlers/harness.js.map +0 -1
  266. package/dist/server/server-adapter/routes/harness.d.ts +0 -3
  267. package/dist/server/server-adapter/routes/harness.d.ts.map +0 -1
@@ -6,19 +6,19 @@ import { z } from 'zod/v4';
6
6
  function isReservedThreadMetadataKey(key) {
7
7
  return key === "currentModelId" || key === "currentModeId" || key === "observerModelId" || key === "reflectorModelId" || key === "observationThreshold" || key === "reflectionThreshold" || key === "tokenUsage" || key.startsWith("modeModelId_");
8
8
  }
9
- function getHarnessOrThrow(mastra, harnessId) {
10
- const harness = mastra.getHarness(harnessId);
11
- if (!harness) {
12
- throw new HTTPException(404, { message: `harness "${harnessId}" not found` });
9
+ function getAgentControllerOrThrow(mastra, controllerId) {
10
+ const controller = mastra.getAgentController?.(controllerId);
11
+ if (!controller) {
12
+ throw new HTTPException(404, { message: `agent controller "${controllerId}" not found` });
13
13
  }
14
- return harness;
14
+ return controller;
15
15
  }
16
- async function getSession(harness, resourceId, tags) {
17
- await harness.init();
18
- return harness.createSession({ resourceId, id: resourceId, ownerId: harness.id, tags });
16
+ async function getSession(controller, resourceId, tags) {
17
+ await controller.init();
18
+ return controller.createSession({ resourceId, id: resourceId, ownerId: controller.id, tags });
19
19
  }
20
- var harnessIdPathParams = z.object({ harnessId: z.string() });
21
- var sessionPathParams = z.object({ harnessId: z.string(), resourceId: z.string() });
20
+ var controllerIdPathParams = z.object({ controllerId: z.string() });
21
+ var sessionPathParams = z.object({ controllerId: z.string(), resourceId: z.string() });
22
22
  var createSessionBodySchema = z.object({
23
23
  resourceId: z.string(),
24
24
  tags: z.record(z.string(), z.string()).optional()
@@ -45,7 +45,7 @@ var switchModelBodySchema = z.object({
45
45
  var switchThreadBodySchema = z.object({ threadId: z.string() });
46
46
  var createThreadBodySchema = z.object({ title: z.string().optional() });
47
47
  var renameThreadBodySchema = z.object({ title: z.string() });
48
- var threadPathParams = z.object({ harnessId: z.string(), resourceId: z.string(), threadId: z.string() });
48
+ var threadPathParams = z.object({ controllerId: z.string(), resourceId: z.string(), threadId: z.string() });
49
49
  var cloneThreadBodySchema = z.object({
50
50
  sourceThreadId: z.string().optional(),
51
51
  title: z.string().optional()
@@ -75,11 +75,11 @@ var sendNotificationBodySchema = z.object({
75
75
  attributes: z.record(z.string(), z.unknown()).optional(),
76
76
  metadata: z.record(z.string(), z.unknown()).optional()
77
77
  });
78
- var listHarnessesResponseSchema = z.object({
79
- harnesses: z.array(z.object({ id: z.string() }))
78
+ var listAgentControllersResponseSchema = z.object({
79
+ agentControllers: z.array(z.object({ id: z.string() }))
80
80
  });
81
81
  var createSessionResponseSchema = z.object({
82
- harnessId: z.string(),
82
+ controllerId: z.string(),
83
83
  resourceId: z.string(),
84
84
  threadId: z.string().optional()
85
85
  });
@@ -104,7 +104,7 @@ var sessionSettingsSchema = z.object({
104
104
  smartEditing: z.boolean()
105
105
  });
106
106
  var sessionStateResponseSchema = z.object({
107
- harnessId: z.string(),
107
+ controllerId: z.string(),
108
108
  resourceId: z.string(),
109
109
  threadId: z.string().optional(),
110
110
  modeId: z.string(),
@@ -179,67 +179,70 @@ var setToolPermissionBodySchema = z.object({
179
179
  toolName: z.string(),
180
180
  policy: permissionPolicyEnum
181
181
  });
182
- var LIST_HARNESSES_ROUTE = createRoute({
182
+ var LIST_AGENT_CONTROLLERS_ROUTE = createRoute({
183
183
  method: "GET",
184
- path: "/harness",
184
+ path: "/agent-controller",
185
185
  responseType: "json",
186
- responseSchema: listHarnessesResponseSchema,
187
- summary: "List harnesses",
188
- description: "Lists the harnesses hosted on this Mastra instance.",
189
- tags: ["Harness"],
186
+ responseSchema: listAgentControllersResponseSchema,
187
+ summary: "List agent controllers",
188
+ description: "Lists the agent controllers hosted on this Mastra instance.",
189
+ tags: ["AgentController"],
190
190
  requiresAuth: true,
191
- requiresPermission: "harness:read",
191
+ requiresPermission: "agent-controller:read",
192
192
  handler: async ({ mastra }) => {
193
193
  try {
194
- const harnesses = mastra.listHarnesses();
195
- return { harnesses: Object.keys(harnesses).map((id) => ({ id })) };
194
+ const ids = /* @__PURE__ */ new Set();
195
+ if (mastra.listAgentControllers) {
196
+ for (const id of Object.keys(mastra.listAgentControllers())) ids.add(id);
197
+ }
198
+ return { agentControllers: Array.from(ids).map((id) => ({ id })) };
196
199
  } catch (error) {
197
- return handleError(error, "error listing harnesses");
200
+ return handleError(error, "error listing agent controllers");
198
201
  }
199
202
  }
200
203
  });
201
- var CREATE_HARNESS_SESSION_ROUTE = createRoute({
204
+ var CREATE_AGENT_CONTROLLER_SESSION_ROUTE = createRoute({
202
205
  method: "POST",
203
- path: "/harness/:harnessId/sessions",
206
+ path: "/agent-controller/:controllerId/sessions",
204
207
  responseType: "json",
205
- pathParamSchema: harnessIdPathParams,
208
+ pathParamSchema: controllerIdPathParams,
206
209
  bodySchema: createSessionBodySchema,
207
210
  responseSchema: createSessionResponseSchema,
208
- summary: "Create or resume a harness session",
211
+ summary: "Create or resume a controller session",
209
212
  description: "Creates a session for the given resourceId, or returns the existing one (get-or-create), so reconnects resume the conversation.",
210
- tags: ["Harness"],
213
+ tags: ["AgentController"],
211
214
  requiresAuth: true,
212
- requiresPermission: "harness:execute",
213
- handler: async ({ mastra, harnessId, resourceId, tags }) => {
215
+ requiresPermission: "agent-controller:execute",
216
+ handler: async ({ mastra, controllerId, resourceId, tags }) => {
214
217
  try {
215
- const harness = getHarnessOrThrow(mastra, harnessId);
216
- const session = await getSession(harness, resourceId, tags);
218
+ const controller = getAgentControllerOrThrow(mastra, controllerId);
219
+ const session = await getSession(controller, resourceId, tags);
217
220
  return {
218
- harnessId,
221
+ controllerId,
219
222
  resourceId,
220
223
  threadId: session.thread.getId() ?? void 0
221
224
  };
222
225
  } catch (error) {
223
- return handleError(error, "error creating harness session");
226
+ return handleError(error, "error creating controller session");
224
227
  }
225
228
  }
226
229
  });
227
- var STREAM_HARNESS_SESSION_ROUTE = createRoute({
230
+ var STREAM_AGENT_CONTROLLER_SESSION_ROUTE = createRoute({
228
231
  method: "GET",
229
- path: "/harness/:harnessId/sessions/:resourceId/stream",
232
+ path: "/agent-controller/:controllerId/sessions/:resourceId/stream",
230
233
  responseType: "stream",
231
234
  streamFormat: "sse",
232
235
  sseFlushOnConnect: true,
233
236
  pathParamSchema: sessionPathParams,
234
- summary: "Stream harness session events",
237
+ summary: "Stream controller session events",
235
238
  description: "Subscribes to a session\u2019s event bus and streams events to the client over SSE.",
236
- tags: ["Harness", "Streaming"],
239
+ tags: ["AgentController", "Streaming"],
237
240
  requiresAuth: true,
238
- requiresPermission: "harness:read",
239
- handler: async ({ mastra, harnessId, resourceId, abortSignal }) => {
241
+ requiresPermission: "agent-controller:read",
242
+ handler: async ({ mastra, controllerId, resourceId, abortSignal }) => {
240
243
  try {
241
- const harness = getHarnessOrThrow(mastra, harnessId);
242
- const session = await getSession(harness, resourceId);
244
+ const controller = getAgentControllerOrThrow(mastra, controllerId);
245
+ const session = await getSession(controller, resourceId);
243
246
  let cleanedUp = false;
244
247
  let heartbeat;
245
248
  let unsubscribe;
@@ -249,20 +252,20 @@ var STREAM_HARNESS_SESSION_ROUTE = createRoute({
249
252
  heartbeat = void 0;
250
253
  }
251
254
  };
252
- const cleanup = (controller) => {
255
+ const cleanup = (controller2) => {
253
256
  if (cleanedUp) return;
254
257
  cleanedUp = true;
255
258
  clearHeartbeat();
256
259
  unsubscribe?.();
257
- if (controller) {
260
+ if (controller2) {
258
261
  try {
259
- controller.close();
262
+ controller2.close();
260
263
  } catch {
261
264
  }
262
265
  }
263
266
  };
264
267
  return new ReadableStream({
265
- start(controller) {
268
+ start(controller2) {
266
269
  const scheduleHeartbeat = () => {
267
270
  if (cleanedUp) return;
268
271
  clearHeartbeat();
@@ -270,7 +273,7 @@ var STREAM_HARNESS_SESSION_ROUTE = createRoute({
270
273
  heartbeat = void 0;
271
274
  if (cleanedUp) return;
272
275
  try {
273
- controller.enqueue(": heartbeat\n\n");
276
+ controller2.enqueue(": heartbeat\n\n");
274
277
  } catch {
275
278
  cleanup();
276
279
  return;
@@ -281,13 +284,13 @@ var STREAM_HARNESS_SESSION_ROUTE = createRoute({
281
284
  unsubscribe = session.subscribe((event) => {
282
285
  if (cleanedUp) return;
283
286
  try {
284
- controller.enqueue(event);
287
+ controller2.enqueue(event);
285
288
  scheduleHeartbeat();
286
289
  } catch {
287
290
  cleanup();
288
291
  }
289
292
  });
290
- const abortCleanup = () => cleanup(controller);
293
+ const abortCleanup = () => cleanup(controller2);
291
294
  abortSignal?.addEventListener("abort", abortCleanup, { once: true });
292
295
  scheduleHeartbeat();
293
296
  },
@@ -296,215 +299,215 @@ var STREAM_HARNESS_SESSION_ROUTE = createRoute({
296
299
  }
297
300
  });
298
301
  } catch (error) {
299
- return handleError(error, "error streaming harness session");
302
+ return handleError(error, "error streaming controller session");
300
303
  }
301
304
  }
302
305
  });
303
- var SEND_HARNESS_MESSAGE_ROUTE = createRoute({
306
+ var SEND_AGENT_CONTROLLER_MESSAGE_ROUTE = createRoute({
304
307
  method: "POST",
305
- path: "/harness/:harnessId/sessions/:resourceId/messages",
308
+ path: "/agent-controller/:controllerId/sessions/:resourceId/messages",
306
309
  responseType: "json",
307
310
  pathParamSchema: sessionPathParams,
308
311
  bodySchema: sendMessageBodySchema,
309
312
  responseSchema: ackResponseSchema,
310
- summary: "Send a message to a harness session",
313
+ summary: "Send a message to a controller session",
311
314
  description: "Sends a user message to the session. The reply streams as events on the session\u2019s SSE stream.",
312
- tags: ["Harness", "Streaming"],
315
+ tags: ["AgentController", "Streaming"],
313
316
  requiresAuth: true,
314
- requiresPermission: "harness:execute",
315
- handler: async ({ mastra, harnessId, resourceId, message }) => {
317
+ requiresPermission: "agent-controller:execute",
318
+ handler: async ({ mastra, controllerId, resourceId, message }) => {
316
319
  try {
317
- const harness = getHarnessOrThrow(mastra, harnessId);
318
- const session = await getSession(harness, resourceId);
320
+ const controller = getAgentControllerOrThrow(mastra, controllerId);
321
+ const session = await getSession(controller, resourceId);
319
322
  void session.sendMessage({ content: message });
320
323
  return { ok: true };
321
324
  } catch (error) {
322
- return handleError(error, "error sending harness message");
325
+ return handleError(error, "error sending controller message");
323
326
  }
324
327
  }
325
328
  });
326
- var ABORT_HARNESS_SESSION_ROUTE = createRoute({
329
+ var ABORT_AGENT_CONTROLLER_SESSION_ROUTE = createRoute({
327
330
  method: "POST",
328
- path: "/harness/:harnessId/sessions/:resourceId/abort",
331
+ path: "/agent-controller/:controllerId/sessions/:resourceId/abort",
329
332
  responseType: "json",
330
333
  pathParamSchema: sessionPathParams,
331
334
  responseSchema: ackResponseSchema,
332
- summary: "Abort a harness session run",
335
+ summary: "Abort a controller session run",
333
336
  description: "Aborts the in-flight run for the session, if any.",
334
- tags: ["Harness"],
337
+ tags: ["AgentController"],
335
338
  requiresAuth: true,
336
- requiresPermission: "harness:execute",
337
- handler: async ({ mastra, harnessId, resourceId }) => {
339
+ requiresPermission: "agent-controller:execute",
340
+ handler: async ({ mastra, controllerId, resourceId }) => {
338
341
  try {
339
- const harness = getHarnessOrThrow(mastra, harnessId);
340
- const session = await getSession(harness, resourceId);
342
+ const controller = getAgentControllerOrThrow(mastra, controllerId);
343
+ const session = await getSession(controller, resourceId);
341
344
  session.abort();
342
345
  return { ok: true };
343
346
  } catch (error) {
344
- return handleError(error, "error aborting harness session");
347
+ return handleError(error, "error aborting controller session");
345
348
  }
346
349
  }
347
350
  });
348
- var HARNESS_TOOL_APPROVAL_ROUTE = createRoute({
351
+ var AGENT_CONTROLLER_TOOL_APPROVAL_ROUTE = createRoute({
349
352
  method: "POST",
350
- path: "/harness/:harnessId/sessions/:resourceId/tool-approval",
353
+ path: "/agent-controller/:controllerId/sessions/:resourceId/tool-approval",
351
354
  responseType: "json",
352
355
  pathParamSchema: sessionPathParams,
353
356
  bodySchema: toolApprovalBodySchema,
354
357
  responseSchema: ackResponseSchema,
355
- summary: "Respond to a harness tool approval",
358
+ summary: "Respond to a controller tool approval",
356
359
  description: "Approves or declines a pending tool call surfaced by the session.",
357
- tags: ["Harness"],
360
+ tags: ["AgentController"],
358
361
  requiresAuth: true,
359
- requiresPermission: "harness:execute",
360
- handler: async ({ mastra, harnessId, resourceId, toolCallId, approved }) => {
362
+ requiresPermission: "agent-controller:execute",
363
+ handler: async ({ mastra, controllerId, resourceId, toolCallId, approved }) => {
361
364
  try {
362
- const harness = getHarnessOrThrow(mastra, harnessId);
363
- const session = await getSession(harness, resourceId);
365
+ const controller = getAgentControllerOrThrow(mastra, controllerId);
366
+ const session = await getSession(controller, resourceId);
364
367
  session.respondToToolApproval({ toolCallId, decision: approved ? "approve" : "decline" });
365
368
  return { ok: true };
366
369
  } catch (error) {
367
- return handleError(error, "error responding to harness tool approval");
370
+ return handleError(error, "error responding to controller tool approval");
368
371
  }
369
372
  }
370
373
  });
371
- var HARNESS_TOOL_SUSPENSION_ROUTE = createRoute({
374
+ var AGENT_CONTROLLER_TOOL_SUSPENSION_ROUTE = createRoute({
372
375
  method: "POST",
373
- path: "/harness/:harnessId/sessions/:resourceId/tool-suspension",
376
+ path: "/agent-controller/:controllerId/sessions/:resourceId/tool-suspension",
374
377
  responseType: "json",
375
378
  pathParamSchema: sessionPathParams,
376
379
  bodySchema: toolSuspensionBodySchema,
377
380
  responseSchema: ackResponseSchema,
378
- summary: "Respond to a suspended harness tool",
381
+ summary: "Respond to a suspended controller tool",
379
382
  description: "Resumes a suspended interactive tool (ask_user, request_access, submit_plan) with the provided resume data.",
380
- tags: ["Harness"],
383
+ tags: ["AgentController"],
381
384
  requiresAuth: true,
382
- requiresPermission: "harness:execute",
383
- handler: async ({ mastra, harnessId, resourceId, toolCallId, resumeData }) => {
385
+ requiresPermission: "agent-controller:execute",
386
+ handler: async ({ mastra, controllerId, resourceId, toolCallId, resumeData }) => {
384
387
  try {
385
- const harness = getHarnessOrThrow(mastra, harnessId);
386
- const session = await getSession(harness, resourceId);
388
+ const controller = getAgentControllerOrThrow(mastra, controllerId);
389
+ const session = await getSession(controller, resourceId);
387
390
  await session.respondToToolSuspension({ toolCallId, resumeData });
388
391
  return { ok: true };
389
392
  } catch (error) {
390
- return handleError(error, "error responding to harness tool suspension");
393
+ return handleError(error, "error responding to controller tool suspension");
391
394
  }
392
395
  }
393
396
  });
394
- var STEER_HARNESS_SESSION_ROUTE = createRoute({
397
+ var STEER_AGENT_CONTROLLER_SESSION_ROUTE = createRoute({
395
398
  method: "POST",
396
- path: "/harness/:harnessId/sessions/:resourceId/steer",
399
+ path: "/agent-controller/:controllerId/sessions/:resourceId/steer",
397
400
  responseType: "json",
398
401
  pathParamSchema: sessionPathParams,
399
402
  bodySchema: steerBodySchema,
400
403
  responseSchema: ackResponseSchema,
401
404
  summary: "Steer the in-flight run",
402
405
  description: "Injects a message into the running turn (interjection) without starting a new run.",
403
- tags: ["Harness"],
406
+ tags: ["AgentController"],
404
407
  requiresAuth: true,
405
- requiresPermission: "harness:execute",
406
- handler: async ({ mastra, harnessId, resourceId, message }) => {
408
+ requiresPermission: "agent-controller:execute",
409
+ handler: async ({ mastra, controllerId, resourceId, message }) => {
407
410
  try {
408
- const harness = getHarnessOrThrow(mastra, harnessId);
409
- const session = await getSession(harness, resourceId);
411
+ const controller = getAgentControllerOrThrow(mastra, controllerId);
412
+ const session = await getSession(controller, resourceId);
410
413
  void session.steer({ content: message });
411
414
  return { ok: true };
412
415
  } catch (error) {
413
- return handleError(error, "error steering harness session");
416
+ return handleError(error, "error steering controller session");
414
417
  }
415
418
  }
416
419
  });
417
- var SWITCH_HARNESS_MODE_ROUTE = createRoute({
420
+ var SWITCH_AGENT_CONTROLLER_MODE_ROUTE = createRoute({
418
421
  method: "POST",
419
- path: "/harness/:harnessId/sessions/:resourceId/mode",
422
+ path: "/agent-controller/:controllerId/sessions/:resourceId/mode",
420
423
  responseType: "json",
421
424
  pathParamSchema: sessionPathParams,
422
425
  bodySchema: switchModeBodySchema,
423
426
  responseSchema: ackResponseSchema,
424
427
  summary: "Switch the session mode",
425
428
  description: "Switches the active mode (e.g. build, plan) for the session.",
426
- tags: ["Harness"],
429
+ tags: ["AgentController"],
427
430
  requiresAuth: true,
428
- requiresPermission: "harness:execute",
429
- handler: async ({ mastra, harnessId, resourceId, modeId }) => {
431
+ requiresPermission: "agent-controller:execute",
432
+ handler: async ({ mastra, controllerId, resourceId, modeId }) => {
430
433
  try {
431
- const harness = getHarnessOrThrow(mastra, harnessId);
432
- const session = await getSession(harness, resourceId);
434
+ const controller = getAgentControllerOrThrow(mastra, controllerId);
435
+ const session = await getSession(controller, resourceId);
433
436
  await session.mode.switch({ modeId });
434
437
  return { ok: true };
435
438
  } catch (error) {
436
- return handleError(error, "error switching harness mode");
439
+ return handleError(error, "error switching controller mode");
437
440
  }
438
441
  }
439
442
  });
440
- var SWITCH_HARNESS_MODEL_ROUTE = createRoute({
443
+ var SWITCH_AGENT_CONTROLLER_MODEL_ROUTE = createRoute({
441
444
  method: "POST",
442
- path: "/harness/:harnessId/sessions/:resourceId/model",
445
+ path: "/agent-controller/:controllerId/sessions/:resourceId/model",
443
446
  responseType: "json",
444
447
  pathParamSchema: sessionPathParams,
445
448
  bodySchema: switchModelBodySchema,
446
449
  responseSchema: ackResponseSchema,
447
450
  summary: "Switch the session model",
448
451
  description: "Switches the model for the session, scoped to the thread by default.",
449
- tags: ["Harness"],
452
+ tags: ["AgentController"],
450
453
  requiresAuth: true,
451
- requiresPermission: "harness:execute",
452
- handler: async ({ mastra, harnessId, resourceId, modelId, scope, modeId }) => {
454
+ requiresPermission: "agent-controller:execute",
455
+ handler: async ({ mastra, controllerId, resourceId, modelId, scope, modeId }) => {
453
456
  try {
454
- const harness = getHarnessOrThrow(mastra, harnessId);
455
- const session = await getSession(harness, resourceId);
457
+ const controller = getAgentControllerOrThrow(mastra, controllerId);
458
+ const session = await getSession(controller, resourceId);
456
459
  await session.model.switch({ modelId, scope, modeId });
457
460
  return { ok: true };
458
461
  } catch (error) {
459
- return handleError(error, "error switching harness model");
462
+ return handleError(error, "error switching controller model");
460
463
  }
461
464
  }
462
465
  });
463
- var SWITCH_HARNESS_THREAD_ROUTE = createRoute({
466
+ var SWITCH_AGENT_CONTROLLER_THREAD_ROUTE = createRoute({
464
467
  method: "POST",
465
- path: "/harness/:harnessId/sessions/:resourceId/thread",
468
+ path: "/agent-controller/:controllerId/sessions/:resourceId/thread",
466
469
  responseType: "json",
467
470
  pathParamSchema: sessionPathParams,
468
471
  bodySchema: switchThreadBodySchema,
469
472
  responseSchema: ackResponseSchema,
470
473
  summary: "Switch the session thread",
471
474
  description: "Switches the session to an existing thread (rebinding its stream and state).",
472
- tags: ["Harness"],
475
+ tags: ["AgentController"],
473
476
  requiresAuth: true,
474
- requiresPermission: "harness:execute",
475
- handler: async ({ mastra, harnessId, resourceId, threadId }) => {
477
+ requiresPermission: "agent-controller:execute",
478
+ handler: async ({ mastra, controllerId, resourceId, threadId }) => {
476
479
  try {
477
- const harness = getHarnessOrThrow(mastra, harnessId);
478
- const session = await getSession(harness, resourceId);
480
+ const controller = getAgentControllerOrThrow(mastra, controllerId);
481
+ const session = await getSession(controller, resourceId);
479
482
  await session.thread.switch({ threadId });
480
483
  return { ok: true };
481
484
  } catch (error) {
482
- return handleError(error, "error switching harness thread");
485
+ return handleError(error, "error switching controller thread");
483
486
  }
484
487
  }
485
488
  });
486
- var GET_HARNESS_SESSION_STATE_ROUTE = createRoute({
489
+ var GET_AGENT_CONTROLLER_SESSION_STATE_ROUTE = createRoute({
487
490
  method: "GET",
488
- path: "/harness/:harnessId/sessions/:resourceId",
491
+ path: "/agent-controller/:controllerId/sessions/:resourceId",
489
492
  responseType: "json",
490
493
  pathParamSchema: sessionPathParams,
491
494
  responseSchema: sessionStateResponseSchema,
492
495
  summary: "Get session state",
493
496
  description: "Returns the current mode, model, and thread for the session (for initial UI hydration).",
494
- tags: ["Harness"],
497
+ tags: ["AgentController"],
495
498
  requiresAuth: true,
496
- requiresPermission: "harness:read",
497
- handler: async ({ mastra, harnessId, resourceId }) => {
499
+ requiresPermission: "agent-controller:read",
500
+ handler: async ({ mastra, controllerId, resourceId }) => {
498
501
  try {
499
- const harness = getHarnessOrThrow(mastra, harnessId);
500
- const session = await getSession(harness, resourceId);
502
+ const controller = getAgentControllerOrThrow(mastra, controllerId);
503
+ const session = await getSession(controller, resourceId);
501
504
  const ds = session.displayState.get();
502
505
  const om = ds.omProgress;
503
506
  const reflectionSavings = om.buffered.reflection.inputObservationTokens - om.buffered.reflection.observationTokens;
504
507
  const st = session.state.get();
505
508
  const oneOf = (value, allowed, fallback) => allowed.includes(value) ? value : fallback;
506
509
  return {
507
- harnessId,
510
+ controllerId,
508
511
  resourceId,
509
512
  threadId: session.thread.getId() ?? void 0,
510
513
  modeId: session.mode.get(),
@@ -529,48 +532,48 @@ var GET_HARNESS_SESSION_STATE_ROUTE = createRoute({
529
532
  }
530
533
  };
531
534
  } catch (error) {
532
- return handleError(error, "error reading harness session state");
535
+ return handleError(error, "error reading controller session state");
533
536
  }
534
537
  }
535
538
  });
536
- var LIST_HARNESS_MODES_ROUTE = createRoute({
539
+ var LIST_AGENT_CONTROLLER_MODES_ROUTE = createRoute({
537
540
  method: "GET",
538
- path: "/harness/:harnessId/modes",
541
+ path: "/agent-controller/:controllerId/modes",
539
542
  responseType: "json",
540
- pathParamSchema: harnessIdPathParams,
543
+ pathParamSchema: controllerIdPathParams,
541
544
  responseSchema: listModesResponseSchema,
542
- summary: "List harness modes",
543
- description: "Lists the modes configured on the harness (e.g. build, plan).",
544
- tags: ["Harness"],
545
+ summary: "List controller modes",
546
+ description: "Lists the modes configured on the controller (e.g. build, plan).",
547
+ tags: ["AgentController"],
545
548
  requiresAuth: true,
546
- requiresPermission: "harness:read",
547
- handler: async ({ mastra, harnessId }) => {
549
+ requiresPermission: "agent-controller:read",
550
+ handler: async ({ mastra, controllerId }) => {
548
551
  try {
549
- const harness = getHarnessOrThrow(mastra, harnessId);
552
+ const controller = getAgentControllerOrThrow(mastra, controllerId);
550
553
  return {
551
- modes: harness.listModes().map((mode) => ({ id: mode.id, name: mode.name }))
554
+ modes: controller.listModes().map((mode) => ({ id: mode.id, name: mode.name }))
552
555
  };
553
556
  } catch (error) {
554
- return handleError(error, "error listing harness modes");
557
+ return handleError(error, "error listing controller modes");
555
558
  }
556
559
  }
557
560
  });
558
- var LIST_HARNESS_THREADS_ROUTE = createRoute({
561
+ var LIST_AGENT_CONTROLLER_THREADS_ROUTE = createRoute({
559
562
  method: "GET",
560
- path: "/harness/:harnessId/sessions/:resourceId/threads",
563
+ path: "/agent-controller/:controllerId/sessions/:resourceId/threads",
561
564
  responseType: "json",
562
565
  pathParamSchema: sessionPathParams,
563
566
  queryParamSchema: listThreadsQuerySchema,
564
567
  responseSchema: listThreadsResponseSchema,
565
568
  summary: "List session threads",
566
569
  description: "Lists the threads for the session\u2019s resource, most-recently-updated first. Pass `limit` to return only the newest N (e.g. for a sidebar). Pass `tags` (a JSON-encoded object) to scope the list to threads matching every tag \u2014 e.g. `{ projectPath }` so git worktrees sharing a resourceId each see only their own threads.",
567
- tags: ["Harness"],
570
+ tags: ["AgentController"],
568
571
  requiresAuth: true,
569
- requiresPermission: "harness:read",
570
- handler: async ({ mastra, harnessId, resourceId, limit, tags }) => {
572
+ requiresPermission: "agent-controller:read",
573
+ handler: async ({ mastra, controllerId, resourceId, limit, tags }) => {
571
574
  try {
572
- const harness = getHarnessOrThrow(mastra, harnessId);
573
- const session = await getSession(harness, resourceId);
575
+ const controller = getAgentControllerOrThrow(mastra, controllerId);
576
+ const session = await getSession(controller, resourceId);
574
577
  const threads = await session.thread.list();
575
578
  const getTags = (t) => {
576
579
  const metadata = t.metadata ?? {};
@@ -601,13 +604,13 @@ var LIST_HARNESS_THREADS_ROUTE = createRoute({
601
604
  })
602
605
  };
603
606
  } catch (error) {
604
- return handleError(error, "error listing harness threads");
607
+ return handleError(error, "error listing controller threads");
605
608
  }
606
609
  }
607
610
  });
608
- var SEND_HARNESS_NOTIFICATION_ROUTE = createRoute({
611
+ var SEND_AGENT_CONTROLLER_NOTIFICATION_ROUTE = createRoute({
609
612
  method: "POST",
610
- path: "/harness/:harnessId/sessions/:resourceId/notifications",
613
+ path: "/agent-controller/:controllerId/sessions/:resourceId/notifications",
611
614
  responseType: "json",
612
615
  pathParamSchema: sessionPathParams,
613
616
  bodySchema: sendNotificationBodySchema,
@@ -619,12 +622,12 @@ var SEND_HARNESS_NOTIFICATION_ROUTE = createRoute({
619
622
  }),
620
623
  summary: "Send a notification signal to a session",
621
624
  description: "Delivers a notification to the session\u2019s current agent/thread. The agent\u2019s delivery policy determines whether the notification wakes an idle thread, is summarised, or is persisted for later.",
622
- tags: ["Harness"],
625
+ tags: ["AgentController"],
623
626
  requiresAuth: true,
624
- requiresPermission: "harness:execute",
627
+ requiresPermission: "agent-controller:execute",
625
628
  handler: async ({
626
629
  mastra,
627
- harnessId,
630
+ controllerId,
628
631
  resourceId,
629
632
  source,
630
633
  kind,
@@ -638,8 +641,8 @@ var SEND_HARNESS_NOTIFICATION_ROUTE = createRoute({
638
641
  metadata
639
642
  }) => {
640
643
  try {
641
- const harness = getHarnessOrThrow(mastra, harnessId);
642
- const session = await getSession(harness, resourceId);
644
+ const controller = getAgentControllerOrThrow(mastra, controllerId);
645
+ const session = await getSession(controller, resourceId);
643
646
  const result = await session.sendNotificationSignal({
644
647
  source,
645
648
  kind,
@@ -659,26 +662,26 @@ var SEND_HARNESS_NOTIFICATION_ROUTE = createRoute({
659
662
  runId: result.runId
660
663
  };
661
664
  } catch (error) {
662
- return handleError(error, "error sending harness notification");
665
+ return handleError(error, "error sending controller notification");
663
666
  }
664
667
  }
665
668
  });
666
- var CREATE_HARNESS_THREAD_ROUTE = createRoute({
669
+ var CREATE_AGENT_CONTROLLER_THREAD_ROUTE = createRoute({
667
670
  method: "POST",
668
- path: "/harness/:harnessId/sessions/:resourceId/threads",
671
+ path: "/agent-controller/:controllerId/sessions/:resourceId/threads",
669
672
  responseType: "json",
670
673
  pathParamSchema: sessionPathParams,
671
674
  bodySchema: createThreadBodySchema,
672
675
  responseSchema: threadResponseSchema,
673
676
  summary: "Create a new thread",
674
677
  description: "Creates a new thread in the session (unbinds the previous thread, binds the new one).",
675
- tags: ["Harness", "Threads"],
678
+ tags: ["AgentController", "Threads"],
676
679
  requiresAuth: true,
677
- requiresPermission: "harness:execute",
678
- handler: async ({ mastra, harnessId, resourceId, title }) => {
680
+ requiresPermission: "agent-controller:execute",
681
+ handler: async ({ mastra, controllerId, resourceId, title }) => {
679
682
  try {
680
- const harness = getHarnessOrThrow(mastra, harnessId);
681
- const session = await getSession(harness, resourceId);
683
+ const controller = getAgentControllerOrThrow(mastra, controllerId);
684
+ const session = await getSession(controller, resourceId);
682
685
  const thread = await session.thread.create({ title });
683
686
  return {
684
687
  id: thread.id,
@@ -688,74 +691,74 @@ var CREATE_HARNESS_THREAD_ROUTE = createRoute({
688
691
  updatedAt: thread.updatedAt instanceof Date ? thread.updatedAt.toISOString() : void 0
689
692
  };
690
693
  } catch (error) {
691
- return handleError(error, "error creating harness thread");
694
+ return handleError(error, "error creating controller thread");
692
695
  }
693
696
  }
694
697
  });
695
- var DELETE_HARNESS_THREAD_ROUTE = createRoute({
698
+ var DELETE_AGENT_CONTROLLER_THREAD_ROUTE = createRoute({
696
699
  method: "DELETE",
697
- path: "/harness/:harnessId/sessions/:resourceId/threads/:threadId",
700
+ path: "/agent-controller/:controllerId/sessions/:resourceId/threads/:threadId",
698
701
  responseType: "json",
699
702
  pathParamSchema: threadPathParams,
700
703
  responseSchema: ackResponseSchema,
701
704
  summary: "Delete a thread",
702
705
  description: "Deletes a thread. If the deleted thread is the active one, the session is unbound.",
703
- tags: ["Harness", "Threads"],
706
+ tags: ["AgentController", "Threads"],
704
707
  requiresAuth: true,
705
- requiresPermission: "harness:execute",
706
- handler: async ({ mastra, harnessId, resourceId, threadId }) => {
708
+ requiresPermission: "agent-controller:execute",
709
+ handler: async ({ mastra, controllerId, resourceId, threadId }) => {
707
710
  try {
708
- const harness = getHarnessOrThrow(mastra, harnessId);
709
- const session = await getSession(harness, resourceId);
711
+ const controller = getAgentControllerOrThrow(mastra, controllerId);
712
+ const session = await getSession(controller, resourceId);
710
713
  await session.thread.delete({ threadId });
711
714
  return { ok: true };
712
715
  } catch (error) {
713
- return handleError(error, "error deleting harness thread");
716
+ return handleError(error, "error deleting controller thread");
714
717
  }
715
718
  }
716
719
  });
717
- var RENAME_HARNESS_THREAD_ROUTE = createRoute({
720
+ var RENAME_AGENT_CONTROLLER_THREAD_ROUTE = createRoute({
718
721
  method: "PUT",
719
- path: "/harness/:harnessId/sessions/:resourceId/threads/:threadId",
722
+ path: "/agent-controller/:controllerId/sessions/:resourceId/threads/:threadId",
720
723
  responseType: "json",
721
724
  pathParamSchema: threadPathParams,
722
725
  bodySchema: renameThreadBodySchema,
723
726
  responseSchema: ackResponseSchema,
724
727
  summary: "Rename a thread",
725
728
  description: "Renames the specified thread.",
726
- tags: ["Harness", "Threads"],
729
+ tags: ["AgentController", "Threads"],
727
730
  requiresAuth: true,
728
- requiresPermission: "harness:execute",
729
- handler: async ({ mastra, harnessId, resourceId, threadId, title }) => {
731
+ requiresPermission: "agent-controller:execute",
732
+ handler: async ({ mastra, controllerId, resourceId, threadId, title }) => {
730
733
  try {
731
- const harness = getHarnessOrThrow(mastra, harnessId);
732
- const session = await getSession(harness, resourceId);
734
+ const controller = getAgentControllerOrThrow(mastra, controllerId);
735
+ const session = await getSession(controller, resourceId);
733
736
  if (session.thread.getId() !== threadId) {
734
737
  await session.thread.switch({ threadId });
735
738
  }
736
739
  await session.thread.rename({ title });
737
740
  return { ok: true };
738
741
  } catch (error) {
739
- return handleError(error, "error renaming harness thread");
742
+ return handleError(error, "error renaming controller thread");
740
743
  }
741
744
  }
742
745
  });
743
- var CLONE_HARNESS_THREAD_ROUTE = createRoute({
746
+ var CLONE_AGENT_CONTROLLER_THREAD_ROUTE = createRoute({
744
747
  method: "POST",
745
- path: "/harness/:harnessId/sessions/:resourceId/threads/clone",
748
+ path: "/agent-controller/:controllerId/sessions/:resourceId/threads/clone",
746
749
  responseType: "json",
747
750
  pathParamSchema: sessionPathParams,
748
751
  bodySchema: cloneThreadBodySchema,
749
752
  responseSchema: threadResponseSchema,
750
753
  summary: "Clone a thread",
751
754
  description: "Clones a thread (and its messages). The session binds to the new clone.",
752
- tags: ["Harness", "Threads"],
755
+ tags: ["AgentController", "Threads"],
753
756
  requiresAuth: true,
754
- requiresPermission: "harness:execute",
755
- handler: async ({ mastra, harnessId, resourceId, sourceThreadId, title }) => {
757
+ requiresPermission: "agent-controller:execute",
758
+ handler: async ({ mastra, controllerId, resourceId, sourceThreadId, title }) => {
756
759
  try {
757
- const harness = getHarnessOrThrow(mastra, harnessId);
758
- const session = await getSession(harness, resourceId);
760
+ const controller = getAgentControllerOrThrow(mastra, controllerId);
761
+ const session = await getSession(controller, resourceId);
759
762
  const thread = await session.thread.clone({ sourceThreadId, title });
760
763
  return {
761
764
  id: thread.id,
@@ -765,26 +768,26 @@ var CLONE_HARNESS_THREAD_ROUTE = createRoute({
765
768
  updatedAt: thread.updatedAt instanceof Date ? thread.updatedAt.toISOString() : void 0
766
769
  };
767
770
  } catch (error) {
768
- return handleError(error, "error cloning harness thread");
771
+ return handleError(error, "error cloning controller thread");
769
772
  }
770
773
  }
771
774
  });
772
- var LIST_HARNESS_THREAD_MESSAGES_ROUTE = createRoute({
775
+ var LIST_AGENT_CONTROLLER_THREAD_MESSAGES_ROUTE = createRoute({
773
776
  method: "GET",
774
- path: "/harness/:harnessId/sessions/:resourceId/threads/:threadId/messages",
777
+ path: "/agent-controller/:controllerId/sessions/:resourceId/threads/:threadId/messages",
775
778
  responseType: "json",
776
779
  pathParamSchema: threadPathParams,
777
780
  queryParamSchema: listMessagesQuerySchema,
778
781
  responseSchema: listMessagesResponseSchema,
779
782
  summary: "List thread messages",
780
783
  description: "Lists messages for a specific thread. Returns most recent messages first.",
781
- tags: ["Harness", "Threads"],
784
+ tags: ["AgentController", "Threads"],
782
785
  requiresAuth: true,
783
- requiresPermission: "harness:read",
784
- handler: async ({ mastra, harnessId, resourceId, threadId, limit }) => {
786
+ requiresPermission: "agent-controller:read",
787
+ handler: async ({ mastra, controllerId, resourceId, threadId, limit }) => {
785
788
  try {
786
- const harness = getHarnessOrThrow(mastra, harnessId);
787
- const session = await getSession(harness, resourceId);
789
+ const controller = getAgentControllerOrThrow(mastra, controllerId);
790
+ const session = await getSession(controller, resourceId);
788
791
  const messages = await session.thread.listMessages({ threadId, limit });
789
792
  return {
790
793
  messages: messages.map((m) => ({
@@ -795,49 +798,49 @@ var LIST_HARNESS_THREAD_MESSAGES_ROUTE = createRoute({
795
798
  }))
796
799
  };
797
800
  } catch (error) {
798
- return handleError(error, "error listing harness thread messages");
801
+ return handleError(error, "error listing controller thread messages");
799
802
  }
800
803
  }
801
804
  });
802
- var FOLLOW_UP_HARNESS_SESSION_ROUTE = createRoute({
805
+ var FOLLOW_UP_AGENT_CONTROLLER_SESSION_ROUTE = createRoute({
803
806
  method: "POST",
804
- path: "/harness/:harnessId/sessions/:resourceId/follow-up",
807
+ path: "/agent-controller/:controllerId/sessions/:resourceId/follow-up",
805
808
  responseType: "json",
806
809
  pathParamSchema: sessionPathParams,
807
810
  bodySchema: followUpBodySchema,
808
811
  responseSchema: ackResponseSchema,
809
812
  summary: "Queue a follow-up message",
810
813
  description: "Queues a follow-up message. If the session is idle it sends immediately; if a run is active it queues for after completion.",
811
- tags: ["Harness"],
814
+ tags: ["AgentController"],
812
815
  requiresAuth: true,
813
- requiresPermission: "harness:execute",
814
- handler: async ({ mastra, harnessId, resourceId, message }) => {
816
+ requiresPermission: "agent-controller:execute",
817
+ handler: async ({ mastra, controllerId, resourceId, message }) => {
815
818
  try {
816
- const harness = getHarnessOrThrow(mastra, harnessId);
817
- const session = await getSession(harness, resourceId);
819
+ const controller = getAgentControllerOrThrow(mastra, controllerId);
820
+ const session = await getSession(controller, resourceId);
818
821
  void session.followUp({ content: message });
819
822
  return { ok: true };
820
823
  } catch (error) {
821
- return handleError(error, "error queuing harness follow-up");
824
+ return handleError(error, "error queuing controller follow-up");
822
825
  }
823
826
  }
824
827
  });
825
- var LIST_HARNESS_MODELS_ROUTE = createRoute({
828
+ var LIST_AGENT_CONTROLLER_MODELS_ROUTE = createRoute({
826
829
  method: "GET",
827
- path: "/harness/:harnessId/models",
830
+ path: "/agent-controller/:controllerId/models",
828
831
  responseType: "json",
829
- pathParamSchema: harnessIdPathParams,
832
+ pathParamSchema: controllerIdPathParams,
830
833
  responseSchema: listModelsResponseSchema,
831
834
  summary: "List available models",
832
- description: "Lists all models available on this harness (with auth status and use counts).",
833
- tags: ["Harness"],
835
+ description: "Lists all models available on this controller (with auth status and use counts).",
836
+ tags: ["AgentController"],
834
837
  requiresAuth: true,
835
- requiresPermission: "harness:read",
836
- handler: async ({ mastra, harnessId }) => {
838
+ requiresPermission: "agent-controller:read",
839
+ handler: async ({ mastra, controllerId }) => {
837
840
  try {
838
- const harness = getHarnessOrThrow(mastra, harnessId);
839
- await harness.init();
840
- const models = await harness.listAvailableModels();
841
+ const controller = getAgentControllerOrThrow(mastra, controllerId);
842
+ await controller.init();
843
+ const models = await controller.listAvailableModels();
841
844
  return {
842
845
  models: models.map((m) => ({
843
846
  id: m.id,
@@ -848,98 +851,98 @@ var LIST_HARNESS_MODELS_ROUTE = createRoute({
848
851
  }))
849
852
  };
850
853
  } catch (error) {
851
- return handleError(error, "error listing harness models");
854
+ return handleError(error, "error listing controller models");
852
855
  }
853
856
  }
854
857
  });
855
- var GET_HARNESS_WORKSPACE_STATUS_ROUTE = createRoute({
858
+ var GET_AGENT_CONTROLLER_WORKSPACE_STATUS_ROUTE = createRoute({
856
859
  method: "GET",
857
- path: "/harness/:harnessId/workspace",
860
+ path: "/agent-controller/:controllerId/workspace",
858
861
  responseType: "json",
859
- pathParamSchema: harnessIdPathParams,
862
+ pathParamSchema: controllerIdPathParams,
860
863
  responseSchema: workspaceStatusResponseSchema,
861
864
  summary: "Get workspace status",
862
- description: "Returns whether the harness has a workspace configured and whether it is ready.",
863
- tags: ["Harness"],
865
+ description: "Returns whether the controller has a workspace configured and whether it is ready.",
866
+ tags: ["AgentController"],
864
867
  requiresAuth: true,
865
- requiresPermission: "harness:read",
866
- handler: async ({ mastra, harnessId }) => {
868
+ requiresPermission: "agent-controller:read",
869
+ handler: async ({ mastra, controllerId }) => {
867
870
  try {
868
- const harness = getHarnessOrThrow(mastra, harnessId);
869
- await harness.init();
871
+ const controller = getAgentControllerOrThrow(mastra, controllerId);
872
+ await controller.init();
870
873
  return {
871
- hasWorkspace: harness.hasWorkspace(),
872
- isReady: harness.isWorkspaceReady()
874
+ hasWorkspace: controller.hasWorkspace(),
875
+ isReady: controller.isWorkspaceReady()
873
876
  };
874
877
  } catch (error) {
875
- return handleError(error, "error reading harness workspace status");
878
+ return handleError(error, "error reading controller workspace status");
876
879
  }
877
880
  }
878
881
  });
879
- var GET_HARNESS_OM_RECORD_ROUTE = createRoute({
882
+ var GET_AGENT_CONTROLLER_OM_RECORD_ROUTE = createRoute({
880
883
  method: "GET",
881
- path: "/harness/:harnessId/sessions/:resourceId/om",
884
+ path: "/agent-controller/:controllerId/sessions/:resourceId/om",
882
885
  responseType: "json",
883
886
  pathParamSchema: sessionPathParams,
884
887
  responseSchema: omRecordResponseSchema,
885
888
  summary: "Get observational memory record",
886
889
  description: "Returns the current observational memory record for the session\u2019s thread/resource.",
887
- tags: ["Harness"],
890
+ tags: ["AgentController"],
888
891
  requiresAuth: true,
889
- requiresPermission: "harness:read",
890
- handler: async ({ mastra, harnessId, resourceId }) => {
892
+ requiresPermission: "agent-controller:read",
893
+ handler: async ({ mastra, controllerId, resourceId }) => {
891
894
  try {
892
- const harness = getHarnessOrThrow(mastra, harnessId);
893
- const session = await getSession(harness, resourceId);
894
- const record = await harness.getObservationalMemoryRecord(session);
895
+ const controller = getAgentControllerOrThrow(mastra, controllerId);
896
+ const session = await getSession(controller, resourceId);
897
+ const record = await controller.getObservationalMemoryRecord(session);
895
898
  return { record: record ?? void 0 };
896
899
  } catch (error) {
897
- return handleError(error, "error reading harness OM record");
900
+ return handleError(error, "error reading controller OM record");
898
901
  }
899
902
  }
900
903
  });
901
- var SET_HARNESS_RESOURCE_ID_ROUTE = createRoute({
904
+ var SET_AGENT_CONTROLLER_RESOURCE_ID_ROUTE = createRoute({
902
905
  method: "POST",
903
- path: "/harness/:harnessId/sessions/:resourceId/resource",
906
+ path: "/agent-controller/:controllerId/sessions/:resourceId/resource",
904
907
  responseType: "json",
905
908
  pathParamSchema: sessionPathParams,
906
909
  bodySchema: z.object({ newResourceId: z.string() }),
907
910
  responseSchema: ackResponseSchema,
908
911
  summary: "Change the session resource ID",
909
912
  description: "Updates the session\u2019s resource identity (e.g. when a user logs in).",
910
- tags: ["Harness"],
913
+ tags: ["AgentController"],
911
914
  requiresAuth: true,
912
- requiresPermission: "harness:execute",
913
- handler: async ({ mastra, harnessId, resourceId, newResourceId }) => {
915
+ requiresPermission: "agent-controller:execute",
916
+ handler: async ({ mastra, controllerId, resourceId, newResourceId }) => {
914
917
  try {
915
- const harness = getHarnessOrThrow(mastra, harnessId);
916
- const session = await getSession(harness, resourceId);
917
- await harness.setResourceId(session, { resourceId: newResourceId });
918
+ const controller = getAgentControllerOrThrow(mastra, controllerId);
919
+ const session = await getSession(controller, resourceId);
920
+ await controller.setResourceId(session, { resourceId: newResourceId });
918
921
  return { ok: true };
919
922
  } catch (error) {
920
- return handleError(error, "error setting harness resource ID");
923
+ return handleError(error, "error setting controller resource ID");
921
924
  }
922
925
  }
923
926
  });
924
- var GET_HARNESS_RESOURCE_IDS_ROUTE = createRoute({
927
+ var GET_AGENT_CONTROLLER_RESOURCE_IDS_ROUTE = createRoute({
925
928
  method: "GET",
926
- path: "/harness/:harnessId/sessions/:resourceId/resources",
929
+ path: "/agent-controller/:controllerId/sessions/:resourceId/resources",
927
930
  responseType: "json",
928
931
  pathParamSchema: sessionPathParams,
929
932
  responseSchema: z.object({ resourceIds: z.array(z.string()) }),
930
933
  summary: "Get known resource IDs",
931
934
  description: "Lists the resource IDs known to this session (from threads).",
932
- tags: ["Harness"],
935
+ tags: ["AgentController"],
933
936
  requiresAuth: true,
934
- requiresPermission: "harness:read",
935
- handler: async ({ mastra, harnessId, resourceId }) => {
937
+ requiresPermission: "agent-controller:read",
938
+ handler: async ({ mastra, controllerId, resourceId }) => {
936
939
  try {
937
- const harness = getHarnessOrThrow(mastra, harnessId);
938
- const session = await getSession(harness, resourceId);
939
- const resourceIds = await harness.getKnownResourceIds(session);
940
+ const controller = getAgentControllerOrThrow(mastra, controllerId);
941
+ const session = await getSession(controller, resourceId);
942
+ const resourceIds = await controller.getKnownResourceIds(session);
940
943
  return { resourceIds };
941
944
  } catch (error) {
942
- return handleError(error, "error listing harness resource IDs");
945
+ return handleError(error, "error listing controller resource IDs");
943
946
  }
944
947
  }
945
948
  });
@@ -965,53 +968,53 @@ var goalRecordSchema = z.object({
965
968
  pausedReason: z.string().optional()
966
969
  });
967
970
  var goalResponseSchema = z.object({ goal: goalRecordSchema.optional() });
968
- function getAgentForSession(harness, session) {
969
- return harness.getCurrentAgent(session);
971
+ function getAgentForSession(controller, session) {
972
+ return controller.getCurrentAgent(session);
970
973
  }
971
- var GET_HARNESS_GOAL_ROUTE = createRoute({
974
+ var GET_AGENT_CONTROLLER_GOAL_ROUTE = createRoute({
972
975
  method: "GET",
973
- path: "/harness/:harnessId/sessions/:resourceId/goal",
976
+ path: "/agent-controller/:controllerId/sessions/:resourceId/goal",
974
977
  responseType: "json",
975
978
  pathParamSchema: sessionPathParams,
976
979
  responseSchema: goalResponseSchema,
977
980
  summary: "Get the current goal",
978
981
  description: "Returns the active/paused/done goal objective for the session\u2019s thread, if any.",
979
- tags: ["Harness", "Goals"],
982
+ tags: ["AgentController", "Goals"],
980
983
  requiresAuth: true,
981
- requiresPermission: "harness:read",
982
- handler: async ({ mastra, harnessId, resourceId }) => {
984
+ requiresPermission: "agent-controller:read",
985
+ handler: async ({ mastra, controllerId, resourceId }) => {
983
986
  try {
984
- const harness = getHarnessOrThrow(mastra, harnessId);
985
- const session = await getSession(harness, resourceId);
987
+ const controller = getAgentControllerOrThrow(mastra, controllerId);
988
+ const session = await getSession(controller, resourceId);
986
989
  const threadId = session.thread.getId();
987
990
  if (!threadId) return { goal: void 0 };
988
- const agent = getAgentForSession(harness, session);
991
+ const agent = getAgentForSession(controller, session);
989
992
  const record = await agent.getObjective({ threadId });
990
993
  return { goal: record ?? void 0 };
991
994
  } catch (error) {
992
- return handleError(error, "error reading harness goal");
995
+ return handleError(error, "error reading controller goal");
993
996
  }
994
997
  }
995
998
  });
996
- var SET_HARNESS_GOAL_ROUTE = createRoute({
999
+ var SET_AGENT_CONTROLLER_GOAL_ROUTE = createRoute({
997
1000
  method: "POST",
998
- path: "/harness/:harnessId/sessions/:resourceId/goal",
1001
+ path: "/agent-controller/:controllerId/sessions/:resourceId/goal",
999
1002
  responseType: "json",
1000
1003
  pathParamSchema: sessionPathParams,
1001
1004
  bodySchema: setGoalBodySchema,
1002
1005
  responseSchema: goalResponseSchema,
1003
1006
  summary: "Set a goal",
1004
1007
  description: "Sets a new objective for the session\u2019s thread. The agent\u2019s in-loop goal judge evaluates progress after each turn.",
1005
- tags: ["Harness", "Goals"],
1008
+ tags: ["AgentController", "Goals"],
1006
1009
  requiresAuth: true,
1007
- requiresPermission: "harness:execute",
1008
- handler: async ({ mastra, harnessId, resourceId, objective, judgeModelId, maxRuns }) => {
1010
+ requiresPermission: "agent-controller:execute",
1011
+ handler: async ({ mastra, controllerId, resourceId, objective, judgeModelId, maxRuns }) => {
1009
1012
  try {
1010
- const harness = getHarnessOrThrow(mastra, harnessId);
1011
- const session = await getSession(harness, resourceId);
1013
+ const controller = getAgentControllerOrThrow(mastra, controllerId);
1014
+ const session = await getSession(controller, resourceId);
1012
1015
  const threadId = session.thread.getId();
1013
1016
  if (!threadId) throw new HTTPException(400, { message: "session has no active thread" });
1014
- const agent = getAgentForSession(harness, session);
1017
+ const agent = getAgentForSession(controller, session);
1015
1018
  const record = await agent.setObjective(objective, {
1016
1019
  threadId,
1017
1020
  resourceId: session.identity.getResourceId(),
@@ -1020,29 +1023,29 @@ var SET_HARNESS_GOAL_ROUTE = createRoute({
1020
1023
  });
1021
1024
  return { goal: record ?? void 0 };
1022
1025
  } catch (error) {
1023
- return handleError(error, "error setting harness goal");
1026
+ return handleError(error, "error setting controller goal");
1024
1027
  }
1025
1028
  }
1026
1029
  });
1027
- var UPDATE_HARNESS_GOAL_ROUTE = createRoute({
1030
+ var UPDATE_AGENT_CONTROLLER_GOAL_ROUTE = createRoute({
1028
1031
  method: "PUT",
1029
- path: "/harness/:harnessId/sessions/:resourceId/goal",
1032
+ path: "/agent-controller/:controllerId/sessions/:resourceId/goal",
1030
1033
  responseType: "json",
1031
1034
  pathParamSchema: sessionPathParams,
1032
1035
  bodySchema: updateGoalBodySchema,
1033
1036
  responseSchema: goalResponseSchema,
1034
1037
  summary: "Update goal options",
1035
1038
  description: "Updates the judge model, max runs, or status of the active goal. No-op when no goal is set.",
1036
- tags: ["Harness", "Goals"],
1039
+ tags: ["AgentController", "Goals"],
1037
1040
  requiresAuth: true,
1038
- requiresPermission: "harness:execute",
1039
- handler: async ({ mastra, harnessId, resourceId, judgeModelId, maxRuns, status }) => {
1041
+ requiresPermission: "agent-controller:execute",
1042
+ handler: async ({ mastra, controllerId, resourceId, judgeModelId, maxRuns, status }) => {
1040
1043
  try {
1041
- const harness = getHarnessOrThrow(mastra, harnessId);
1042
- const session = await getSession(harness, resourceId);
1044
+ const controller = getAgentControllerOrThrow(mastra, controllerId);
1045
+ const session = await getSession(controller, resourceId);
1043
1046
  const threadId = session.thread.getId();
1044
1047
  if (!threadId) throw new HTTPException(400, { message: "session has no active thread" });
1045
- const agent = getAgentForSession(harness, session);
1048
+ const agent = getAgentForSession(controller, session);
1046
1049
  const record = await agent.updateObjectiveOptions({
1047
1050
  threadId,
1048
1051
  ...judgeModelId !== void 0 ? { judgeModelId } : {},
@@ -1051,131 +1054,131 @@ var UPDATE_HARNESS_GOAL_ROUTE = createRoute({
1051
1054
  });
1052
1055
  return { goal: record ?? void 0 };
1053
1056
  } catch (error) {
1054
- return handleError(error, "error updating harness goal");
1057
+ return handleError(error, "error updating controller goal");
1055
1058
  }
1056
1059
  }
1057
1060
  });
1058
- var CLEAR_HARNESS_GOAL_ROUTE = createRoute({
1061
+ var CLEAR_AGENT_CONTROLLER_GOAL_ROUTE = createRoute({
1059
1062
  method: "DELETE",
1060
- path: "/harness/:harnessId/sessions/:resourceId/goal",
1063
+ path: "/agent-controller/:controllerId/sessions/:resourceId/goal",
1061
1064
  responseType: "json",
1062
1065
  pathParamSchema: sessionPathParams,
1063
1066
  responseSchema: ackResponseSchema,
1064
1067
  summary: "Clear the goal",
1065
1068
  description: "Removes the active goal from the session\u2019s thread.",
1066
- tags: ["Harness", "Goals"],
1069
+ tags: ["AgentController", "Goals"],
1067
1070
  requiresAuth: true,
1068
- requiresPermission: "harness:execute",
1069
- handler: async ({ mastra, harnessId, resourceId }) => {
1071
+ requiresPermission: "agent-controller:execute",
1072
+ handler: async ({ mastra, controllerId, resourceId }) => {
1070
1073
  try {
1071
- const harness = getHarnessOrThrow(mastra, harnessId);
1072
- const session = await getSession(harness, resourceId);
1074
+ const controller = getAgentControllerOrThrow(mastra, controllerId);
1075
+ const session = await getSession(controller, resourceId);
1073
1076
  const threadId = session.thread.getId();
1074
1077
  if (!threadId) throw new HTTPException(400, { message: "session has no active thread" });
1075
- const agent = getAgentForSession(harness, session);
1078
+ const agent = getAgentForSession(controller, session);
1076
1079
  await agent.clearObjective({ threadId });
1077
1080
  return { ok: true };
1078
1081
  } catch (error) {
1079
- return handleError(error, "error clearing harness goal");
1082
+ return handleError(error, "error clearing controller goal");
1080
1083
  }
1081
1084
  }
1082
1085
  });
1083
- var GET_HARNESS_PERMISSIONS_ROUTE = createRoute({
1086
+ var GET_AGENT_CONTROLLER_PERMISSIONS_ROUTE = createRoute({
1084
1087
  method: "GET",
1085
- path: "/harness/:harnessId/sessions/:resourceId/permissions",
1088
+ path: "/agent-controller/:controllerId/sessions/:resourceId/permissions",
1086
1089
  responseType: "json",
1087
1090
  pathParamSchema: sessionPathParams,
1088
1091
  responseSchema: permissionRulesResponseSchema,
1089
1092
  summary: "Get permission rules",
1090
1093
  description: "Returns the current permission rules (per-category and per-tool policies) for the session.",
1091
- tags: ["Harness", "Permissions"],
1094
+ tags: ["AgentController", "Permissions"],
1092
1095
  requiresAuth: true,
1093
- requiresPermission: "harness:read",
1094
- handler: async ({ mastra, harnessId, resourceId }) => {
1096
+ requiresPermission: "agent-controller:read",
1097
+ handler: async ({ mastra, controllerId, resourceId }) => {
1095
1098
  try {
1096
- const harness = getHarnessOrThrow(mastra, harnessId);
1097
- const session = await getSession(harness, resourceId);
1099
+ const controller = getAgentControllerOrThrow(mastra, controllerId);
1100
+ const session = await getSession(controller, resourceId);
1098
1101
  const rules = session.permissions.getRules();
1099
1102
  return {
1100
1103
  categories: rules.categories,
1101
1104
  tools: rules.tools
1102
1105
  };
1103
1106
  } catch (error) {
1104
- return handleError(error, "error getting harness permissions");
1107
+ return handleError(error, "error getting controller permissions");
1105
1108
  }
1106
1109
  }
1107
1110
  });
1108
- var SET_HARNESS_CATEGORY_PERMISSION_ROUTE = createRoute({
1111
+ var SET_AGENT_CONTROLLER_CATEGORY_PERMISSION_ROUTE = createRoute({
1109
1112
  method: "PUT",
1110
- path: "/harness/:harnessId/sessions/:resourceId/permissions/category",
1113
+ path: "/agent-controller/:controllerId/sessions/:resourceId/permissions/category",
1111
1114
  responseType: "json",
1112
1115
  pathParamSchema: sessionPathParams,
1113
1116
  bodySchema: setCategoryPermissionBodySchema,
1114
1117
  responseSchema: ackResponseSchema,
1115
1118
  summary: "Set permission for a tool category",
1116
1119
  description: "Sets the approval policy (allow/ask/deny) for all tools in a category.",
1117
- tags: ["Harness", "Permissions"],
1120
+ tags: ["AgentController", "Permissions"],
1118
1121
  requiresAuth: true,
1119
- requiresPermission: "harness:execute",
1120
- handler: async ({ mastra, harnessId, resourceId, category, policy }) => {
1122
+ requiresPermission: "agent-controller:execute",
1123
+ handler: async ({ mastra, controllerId, resourceId, category, policy }) => {
1121
1124
  try {
1122
- const harness = getHarnessOrThrow(mastra, harnessId);
1123
- const session = await getSession(harness, resourceId);
1125
+ const controller = getAgentControllerOrThrow(mastra, controllerId);
1126
+ const session = await getSession(controller, resourceId);
1124
1127
  await session.permissions.setForCategory({ category, policy });
1125
1128
  return { ok: true };
1126
1129
  } catch (error) {
1127
- return handleError(error, "error setting harness category permission");
1130
+ return handleError(error, "error setting controller category permission");
1128
1131
  }
1129
1132
  }
1130
1133
  });
1131
- var SET_HARNESS_TOOL_PERMISSION_ROUTE = createRoute({
1134
+ var SET_AGENT_CONTROLLER_TOOL_PERMISSION_ROUTE = createRoute({
1132
1135
  method: "PUT",
1133
- path: "/harness/:harnessId/sessions/:resourceId/permissions/tool",
1136
+ path: "/agent-controller/:controllerId/sessions/:resourceId/permissions/tool",
1134
1137
  responseType: "json",
1135
1138
  pathParamSchema: sessionPathParams,
1136
1139
  bodySchema: setToolPermissionBodySchema,
1137
1140
  responseSchema: ackResponseSchema,
1138
1141
  summary: "Set permission for a specific tool",
1139
1142
  description: "Sets the approval policy (allow/ask/deny) for a specific tool by name. Per-tool overrides take precedence over category policies.",
1140
- tags: ["Harness", "Permissions"],
1143
+ tags: ["AgentController", "Permissions"],
1141
1144
  requiresAuth: true,
1142
- requiresPermission: "harness:execute",
1143
- handler: async ({ mastra, harnessId, resourceId, toolName, policy }) => {
1145
+ requiresPermission: "agent-controller:execute",
1146
+ handler: async ({ mastra, controllerId, resourceId, toolName, policy }) => {
1144
1147
  try {
1145
- const harness = getHarnessOrThrow(mastra, harnessId);
1146
- const session = await getSession(harness, resourceId);
1148
+ const controller = getAgentControllerOrThrow(mastra, controllerId);
1149
+ const session = await getSession(controller, resourceId);
1147
1150
  await session.permissions.setForTool({ toolName, policy });
1148
1151
  return { ok: true };
1149
1152
  } catch (error) {
1150
- return handleError(error, "error setting harness tool permission");
1153
+ return handleError(error, "error setting controller tool permission");
1151
1154
  }
1152
1155
  }
1153
1156
  });
1154
1157
  var setSessionStateBodySchema = z.object({ state: z.record(z.string(), z.unknown()) });
1155
- var SET_HARNESS_SESSION_STATE_ROUTE = createRoute({
1158
+ var SET_AGENT_CONTROLLER_SESSION_STATE_ROUTE = createRoute({
1156
1159
  method: "PUT",
1157
- path: "/harness/:harnessId/sessions/:resourceId/state",
1160
+ path: "/agent-controller/:controllerId/sessions/:resourceId/state",
1158
1161
  responseType: "json",
1159
1162
  pathParamSchema: sessionPathParams,
1160
1163
  bodySchema: setSessionStateBodySchema,
1161
1164
  responseSchema: ackResponseSchema,
1162
1165
  summary: "Set session state",
1163
1166
  description: "Merges the provided key-value pairs into the session state. Existing keys not in the payload are preserved.",
1164
- tags: ["Harness"],
1167
+ tags: ["AgentController"],
1165
1168
  requiresAuth: true,
1166
- requiresPermission: "harness:execute",
1167
- handler: async ({ mastra, harnessId, resourceId, state }) => {
1169
+ requiresPermission: "agent-controller:execute",
1170
+ handler: async ({ mastra, controllerId, resourceId, state }) => {
1168
1171
  try {
1169
- const harness = getHarnessOrThrow(mastra, harnessId);
1170
- const session = await getSession(harness, resourceId);
1172
+ const controller = getAgentControllerOrThrow(mastra, controllerId);
1173
+ const session = await getSession(controller, resourceId);
1171
1174
  await session.state.set(state);
1172
1175
  return { ok: true };
1173
1176
  } catch (error) {
1174
- return handleError(error, "error setting harness session state");
1177
+ return handleError(error, "error setting controller session state");
1175
1178
  }
1176
1179
  }
1177
1180
  });
1178
1181
 
1179
- export { ABORT_HARNESS_SESSION_ROUTE, CLEAR_HARNESS_GOAL_ROUTE, CLONE_HARNESS_THREAD_ROUTE, CREATE_HARNESS_SESSION_ROUTE, CREATE_HARNESS_THREAD_ROUTE, DELETE_HARNESS_THREAD_ROUTE, FOLLOW_UP_HARNESS_SESSION_ROUTE, GET_HARNESS_GOAL_ROUTE, GET_HARNESS_OM_RECORD_ROUTE, GET_HARNESS_PERMISSIONS_ROUTE, GET_HARNESS_RESOURCE_IDS_ROUTE, GET_HARNESS_SESSION_STATE_ROUTE, GET_HARNESS_WORKSPACE_STATUS_ROUTE, HARNESS_TOOL_APPROVAL_ROUTE, HARNESS_TOOL_SUSPENSION_ROUTE, LIST_HARNESSES_ROUTE, LIST_HARNESS_MODELS_ROUTE, LIST_HARNESS_MODES_ROUTE, LIST_HARNESS_THREADS_ROUTE, LIST_HARNESS_THREAD_MESSAGES_ROUTE, RENAME_HARNESS_THREAD_ROUTE, SEND_HARNESS_MESSAGE_ROUTE, SEND_HARNESS_NOTIFICATION_ROUTE, SET_HARNESS_CATEGORY_PERMISSION_ROUTE, SET_HARNESS_GOAL_ROUTE, SET_HARNESS_RESOURCE_ID_ROUTE, SET_HARNESS_SESSION_STATE_ROUTE, SET_HARNESS_TOOL_PERMISSION_ROUTE, STEER_HARNESS_SESSION_ROUTE, STREAM_HARNESS_SESSION_ROUTE, SWITCH_HARNESS_MODEL_ROUTE, SWITCH_HARNESS_MODE_ROUTE, SWITCH_HARNESS_THREAD_ROUTE, UPDATE_HARNESS_GOAL_ROUTE };
1180
- //# sourceMappingURL=chunk-3WE5YAL5.js.map
1181
- //# sourceMappingURL=chunk-3WE5YAL5.js.map
1182
+ export { ABORT_AGENT_CONTROLLER_SESSION_ROUTE, AGENT_CONTROLLER_TOOL_APPROVAL_ROUTE, AGENT_CONTROLLER_TOOL_SUSPENSION_ROUTE, CLEAR_AGENT_CONTROLLER_GOAL_ROUTE, CLONE_AGENT_CONTROLLER_THREAD_ROUTE, CREATE_AGENT_CONTROLLER_SESSION_ROUTE, CREATE_AGENT_CONTROLLER_THREAD_ROUTE, DELETE_AGENT_CONTROLLER_THREAD_ROUTE, FOLLOW_UP_AGENT_CONTROLLER_SESSION_ROUTE, GET_AGENT_CONTROLLER_GOAL_ROUTE, GET_AGENT_CONTROLLER_OM_RECORD_ROUTE, GET_AGENT_CONTROLLER_PERMISSIONS_ROUTE, GET_AGENT_CONTROLLER_RESOURCE_IDS_ROUTE, GET_AGENT_CONTROLLER_SESSION_STATE_ROUTE, GET_AGENT_CONTROLLER_WORKSPACE_STATUS_ROUTE, LIST_AGENT_CONTROLLERS_ROUTE, LIST_AGENT_CONTROLLER_MODELS_ROUTE, LIST_AGENT_CONTROLLER_MODES_ROUTE, LIST_AGENT_CONTROLLER_THREADS_ROUTE, LIST_AGENT_CONTROLLER_THREAD_MESSAGES_ROUTE, RENAME_AGENT_CONTROLLER_THREAD_ROUTE, SEND_AGENT_CONTROLLER_MESSAGE_ROUTE, SEND_AGENT_CONTROLLER_NOTIFICATION_ROUTE, SET_AGENT_CONTROLLER_CATEGORY_PERMISSION_ROUTE, SET_AGENT_CONTROLLER_GOAL_ROUTE, SET_AGENT_CONTROLLER_RESOURCE_ID_ROUTE, SET_AGENT_CONTROLLER_SESSION_STATE_ROUTE, SET_AGENT_CONTROLLER_TOOL_PERMISSION_ROUTE, STEER_AGENT_CONTROLLER_SESSION_ROUTE, STREAM_AGENT_CONTROLLER_SESSION_ROUTE, SWITCH_AGENT_CONTROLLER_MODEL_ROUTE, SWITCH_AGENT_CONTROLLER_MODE_ROUTE, SWITCH_AGENT_CONTROLLER_THREAD_ROUTE, UPDATE_AGENT_CONTROLLER_GOAL_ROUTE };
1183
+ //# sourceMappingURL=chunk-RLAOC73C.js.map
1184
+ //# sourceMappingURL=chunk-RLAOC73C.js.map